From dc9e26808acf31469c993bb22c9e0605c2edd134 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Wed, 1 Mar 2023 17:07:26 +0400 Subject: [PATCH] Fix importing authorization again --- .env | 4 ++-- ...d67138f89.bundle.js => 110.392baae5965bb16e7063.bundle.js} | 4 ++-- ...9.bundle.js.map => 110.392baae5965bb16e7063.bundle.js.map} | 2 +- ...a781dbc8942.chunk.js => 508.c10ccdd1f7e2e9bbef5a.chunk.js} | 2 +- ...942.chunk.js.map => 508.c10ccdd1f7e2e9bbef5a.chunk.js.map} | 2 +- ...535453d75527.chunk.js => 61.84ba1f0d30c94eb8b92b.chunk.js} | 2 +- ...5527.chunk.js.map => 61.84ba1f0d30c94eb8b92b.chunk.js.map} | 2 +- ...f.chunk.js => crypto.worker.5fdc4de518d781a4e437.chunk.js} | 2 +- ...js.map => crypto.worker.5fdc4de518d781a4e437.chunk.js.map} | 2 +- public/index.html | 4 ++-- public/main.12cb432c0176fa529f08.bundle.js | 2 ++ public/main.12cb432c0176fa529f08.bundle.js.map | 1 + public/main.5af85c2e3d117186070d.bundle.js | 2 -- public/main.5af85c2e3d117186070d.bundle.js.map | 1 - ....chunk.js => mtproto.worker.8a2c8d1f5534b5f54052.chunk.js} | 4 ++-- ...s.map => mtproto.worker.8a2c8d1f5534b5f54052.chunk.js.map} | 2 +- public/report.html | 4 ++-- ...a5033da30213.chunk.js => sw.3ce4749eb536186e614e.chunk.js} | 2 +- ...0213.chunk.js.map => sw.3ce4749eb536186e614e.chunk.js.map} | 2 +- public/version | 2 +- src/index.ts | 2 +- 21 files changed, 25 insertions(+), 25 deletions(-) rename public/{110.d2d030648acd67138f89.bundle.js => 110.392baae5965bb16e7063.bundle.js} (99%) rename public/{110.d2d030648acd67138f89.bundle.js.map => 110.392baae5965bb16e7063.bundle.js.map} (99%) rename public/{508.fda3e28eaa781dbc8942.chunk.js => 508.c10ccdd1f7e2e9bbef5a.chunk.js} (98%) rename public/{508.fda3e28eaa781dbc8942.chunk.js.map => 508.c10ccdd1f7e2e9bbef5a.chunk.js.map} (99%) rename public/{61.f9d40768535453d75527.chunk.js => 61.84ba1f0d30c94eb8b92b.chunk.js} (99%) rename public/{61.f9d40768535453d75527.chunk.js.map => 61.84ba1f0d30c94eb8b92b.chunk.js.map} (99%) rename public/{crypto.worker.9e5cd838e641988dc44f.chunk.js => crypto.worker.5fdc4de518d781a4e437.chunk.js} (99%) rename public/{crypto.worker.9e5cd838e641988dc44f.chunk.js.map => crypto.worker.5fdc4de518d781a4e437.chunk.js.map} (99%) create mode 100644 public/main.12cb432c0176fa529f08.bundle.js create mode 100644 public/main.12cb432c0176fa529f08.bundle.js.map delete mode 100644 public/main.5af85c2e3d117186070d.bundle.js delete mode 100644 public/main.5af85c2e3d117186070d.bundle.js.map rename public/{mtproto.worker.50a758787fa4b84d353d.chunk.js => mtproto.worker.8a2c8d1f5534b5f54052.chunk.js} (99%) rename public/{mtproto.worker.50a758787fa4b84d353d.chunk.js.map => mtproto.worker.8a2c8d1f5534b5f54052.chunk.js.map} (99%) rename public/{sw.8b8ecbcfa5033da30213.chunk.js => sw.3ce4749eb536186e614e.chunk.js} (99%) rename public/{sw.8b8ecbcfa5033da30213.chunk.js.map => sw.3ce4749eb536186e614e.chunk.js.map} (99%) diff --git a/.env b/.env index b09b30c9..45425787 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ API_ID=1025907 API_HASH=452b0359b988148995f22ff0f4229750 VERSION=1.7.3 -VERSION_FULL=1.7.3 (307) -BUILD=307 +VERSION_FULL=1.7.3 (308) +BUILD=308 diff --git a/public/110.d2d030648acd67138f89.bundle.js b/public/110.392baae5965bb16e7063.bundle.js similarity index 99% rename from public/110.d2d030648acd67138f89.bundle.js rename to public/110.392baae5965bb16e7063.bundle.js index a5fa2017..6b9d7699 100644 --- a/public/110.d2d030648acd67138f89.bundle.js +++ b/public/110.392baae5965bb16e7063.bundle.js @@ -1,2 +1,2 @@ -"use strict";(this.webpackChunktweb=this.webpackChunktweb||[]).push([[110],{4159:(d,e,u)=>{var t;u.d(e,{Z:()=>s});const f=["web.telegram.org","webk.telegram.org"],r=Math.min(4,null!==(t=navigator.hardwareConcurrency)&&void 0!==t?t:4),c={id:1025907,hash:"452b0359b988148995f22ff0f4229750",version:"1.7.3",versionFull:"1.7.3 (307)",build:307,langPackVersion:"0.9.3",langPack:"webk",langPackCode:"en",domains:f,baseDcId:2,isMainDomain:f.includes(location.hostname),suffix:"K",threads:r,cryptoWorkers:r};c.isMainDomain&&(c.id=2496,c.hash="8da85b0d5bfe62527e5b244c209159c3");const s=c},3127:(d,e,u)=>{u.d(e,{Z:()=>t});const t={name:"tweb",version:7,stores:[{name:"session"},{name:"stickerSets"},{name:"users"},{name:"chats"},{name:"dialogs"},{name:"messages"}]}},8975:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(7119);function f(d,e=""){Array.isArray(d)||(d=[d]);const u=(0,t.Z)(e);return new Blob(d,{type:u})}},7119:(d,e,u)=>{function t(d){return-1===["image/jpeg","image/png","image/gif","image/svg+xml","image/webp","image/bmp","video/mp4","video/webm","video/quicktime","audio/ogg","audio/mpeg","audio/mp4","audio/wav","application/json","application/pdf"].indexOf(d)?"application/octet-stream":d}u.d(e,{Z:()=>t})},4903:(d,e,u)=>{function t(...d){const e=d.reduce(((d,e)=>d+(e.byteLength||e.length)),0),u=new Uint8Array(e);let t=0;return d.forEach((d=>{u.set(d instanceof ArrayBuffer?new Uint8Array(d):d,t),t+=d.byteLength||d.length})),u}u.d(e,{Z:()=>t})},3725:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(319);function f(){const d={isFulfilled:!1,isRejected:!1,notify:()=>{},notifyAll:(...e)=>{d.lastNotify=e,d.listeners.forEach((d=>d(...e)))},listeners:[],addNotifyListener:e=>{d.lastNotify&&e(...d.lastNotify),d.listeners.push(e)}},e=new Promise(((u,t)=>{d.resolve=d=>{e.isFulfilled||e.isRejected||(e.isFulfilled=!0,u(d))},d.reject=(...d)=>{e.isRejected||e.isFulfilled||(e.isRejected=!0,t(...d))}}));return e.catch(t.Z).finally((()=>{e.notify=e.notifyAll=e.lastNotify=null,e.listeners.length=0,e.cancel&&(e.cancel=t.Z)})),Object.assign(e,d),e}},1352:(d,e,u)=>{u.d(e,{N5:()=>f,SU:()=>t,kC:()=>r});const t="undefined"!=typeof ServiceWorkerGlobalScope&&self instanceof ServiceWorkerGlobalScope,f="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&!t,r=f||t,c=(d,...e)=>{try{d.postMessage(...e)}catch(d){console.error("[worker] postMessage error:",d,e)}},s=(d,...e)=>{self.clients.matchAll({includeUncontrolled:!1,type:"window"}).then((u=>{u.length&&u.slice(d?0:-1).forEach((d=>{c(d,...e)}))}))};t&&s.bind(null,!1),t&&s.bind(null,!0)},319:(d,e,u)=>{function t(){}u.d(e,{Z:()=>t})},8479:(d,e,u)=>{function t(d){if(null===d||"object"!=typeof d)return d;if(d instanceof Date)return new Date(d.getTime());if(Array.isArray(d))return d.map((d=>t(d)));if(ArrayBuffer.isView(d))return d.slice();const e=new d.constructor;for(var u in d)d.hasOwnProperty(u)&&(e[u]=t(d[u]));return e}u.d(e,{Z:()=>t})},6848:(d,e,u)=>{function t(d,e){const u=Object.keys,f=typeof d;return d&&e&&"object"===f&&f===typeof e?u(d).length===u(e).length&&u(d).every((u=>t(d[u],e[u]))):d===e}u.d(e,{Z:()=>t})},5880:(d,e,u)=>{function t(d){return"object"==typeof d&&null!==d}u.d(e,{Z:()=>t})},5953:(d,e,u)=>{function t(d,e){if(e)for(const u in e)void 0!==e[u]&&(d[u]=e[u]);return d}u.d(e,{Z:()=>t})},946:(d,e,u)=>{u.d(e,{Z:()=>r});var t=u(8479),f=u(5880);function r(d,e,u,c,s,n){for(const o in d){const i=n?`${n}.${o}`:o;(null==s?void 0:s.has(i))||(typeof e[o]!=typeof d[o]?(e[o]=(0,t.Z)(d[o]),null==u||u(c||o)):(0,f.Z)(d[o])&&r(d[o],e[o],u,c||o,s,i))}}},4110:(d,e,u)=>{var t=u(7361),f=u(617);String.prototype.toUserId=function(){return(+this).toUserId()},String.prototype.toChatId=function(){return(+this).toChatId()},String.prototype.toPeerId=function(d){return(+this).toPeerId(d)},String.prototype.isPeerId=function(){return/^[\d-]/.test(this.toString())},Number.prototype.toUserId=function(){return this},Number.prototype.toChatId=function(){return Math.abs(this)},Number.prototype.toPeerId=function(d){return void 0===d?this:d?-Math.abs(this):this},Number.prototype.isPeerId=function(){return!0},[["isUser",f.Z],["isAnyChat",t.Z]].forEach((d=>{const e=Array.isArray(d)?d[0]:d,u=Array.isArray(d)?d[1]:d;String.prototype[e]=function(){return u.call(null,this.toString())},Number.prototype[e]=function(){return u.call(null,this)}}))},144:(d,e,u)=>{u.d(e,{a:()=>r,d:()=>f});const t={8:new Uint8Array(1),16:new Uint16Array(1),32:new Uint32Array(1)};function f(d){const e=t[d];return crypto.getRandomValues(e),e[0]}function r(){return""+f(32)+f(32)%16777215}},5466:(d,e,u)=>{u.d(e,{$:()=>f});var t=u(5289);function f(d){return(...e)=>function(d,e,u){const f=performance.now();return(u||console).warn((0,t.Z)(),"start",e),d.then((()=>{(u||console).warn((0,t.Z)(),"end",e,performance.now()-f)})),d}(...e,d)}},5418:(d,e,u)=>{function t(d){return new Promise((e=>{setTimeout(e,d)}))}u.d(e,{Z:()=>t})},6724:(d,e,u)=>{function t(d,e,u=!0){let t,f,r=null;return(...c)=>{t=!0,f=c,r||(u&&(t=!1,d(...f)),r=setInterval((()=>{if(!t)return clearInterval(r),void(r=null);t=!1,d(...f)}),e))}}u.d(e,{Z:()=>t})},9005:(d,e,u)=>{function t(d){return d.charAt(0).toUpperCase()+d.slice(1)}u.d(e,{Z:()=>t})},8453:(d,e,u)=>{u.d(e,{Z:()=>s});var t=u(5936),f=u(3989),r=u(7487),c=u(319);function s(d,e){return Promise.all([f.Z.toggleStorage(d,e),t.Z.toggleStorage(d,e),r.Z.toggleStorage(d,e)]).then(c.Z,c.Z)}},7298:(d,e,u)=>{function t(d){const e=Date.now();return d?e/1e3|0:e}u.d(e,{Z:()=>t})},2790:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(7082);function f(d){return function(d,e){const u=t.t;if(d{u.d(e,{o:()=>t,t:()=>f});const t=65536,f=4294967295},7361:(d,e,u)=>{function t(d){return+d<0}u.d(e,{Z:()=>t})},617:(d,e,u)=>{function t(d){return+d>=0}u.d(e,{Z:()=>t})},8630:(d,e,u)=>{u.d(e,{Z:()=>n});var t=u(153),f=u(410),r=u(1352);class c extends t.Z{constructor(){super("CRYPTO"),this.lastIndex=-1}invokeCryptoNew({method:d,args:e,transfer:u}){const t={method:d,args:e},f=this.listeners.invoke;if(null==f?void 0:f.length){let d=f[0].callback(t);return r.kC||d instanceof Promise||(d=Promise.resolve(d)),d}const c="aes-encrypt"===d||"aes-decrypt"===d?this.lastIndex=(this.lastIndex+1)%this.sendPorts.length:0;return this.invoke("invoke",t,void 0,this.sendPorts[c],u)}invokeCrypto(d,...e){return this.invokeCryptoNew({method:d,args:e})}}const s=new c;f.GO&&(f.GO.cryptoMessagePort=s);const n=s},5936:(d,e,u)=>{u.d(e,{Z:()=>n});var t=u(1267),f=u(8975),r=u(5753),c=u(5471),s=u(3725);class n{constructor(d){this.dbName=d,this.useStorage=!0,t.Z.test&&(this.dbName+="_test"),n.STORAGES.length&&(this.useStorage=n.STORAGES[0].useStorage),this.openDatabase(),n.STORAGES.push(this)}openDatabase(){var d;return null!==(d=this.openDbPromise)&&void 0!==d?d:this.openDbPromise=caches.open(this.dbName)}delete(d){return this.timeoutOperation((e=>e.delete("/"+d)))}deleteAll(){return caches.delete(this.dbName)}get(d){return this.timeoutOperation((e=>e.match("/"+d)))}save(d,e){return this.timeoutOperation((u=>u.put("/"+d,e)))}getFile(d,e="blob"){return this.get(d).then((d=>{if(!d)throw(0,c.Z)("NO_ENTRY_FOUND");return d[e]()}))}saveFile(d,e){e instanceof Blob||(e=(0,f.Z)(e));const u=new Response(e,{headers:{"Content-Length":""+e.size}});return this.save(d,u).then((()=>e))}timeoutOperation(d){return this.useStorage?new Promise(((e,u)=>{return t=this,f=void 0,c=function*(){let t=!1;const f=setTimeout((()=>{u(),t=!0}),15e3);try{const u=yield this.openDatabase();if(!u)throw this.useStorage=!1,this.openDbPromise=void 0,"no cache?";const f=yield d(u);if(t)return;e(f)}catch(d){u(d)}clearTimeout(f)},new((r=void 0)||(r=Promise))((function(d,e){function u(d){try{n(c.next(d))}catch(d){e(d)}}function s(d){try{n(c.throw(d))}catch(d){e(d)}}function n(e){var t;e.done?d(e.value):(t=e.value,t instanceof r?t:new r((function(d){d(t)}))).then(u,s)}n((c=c.apply(t,f||[])).next())}));var t,f,r,c})):Promise.reject((0,c.Z)("STORAGE_OFFLINE"))}prepareWriting(d,e,u){return{deferred:(0,s.Z)(),getWriter:()=>new r.Z(u,e,(e=>this.saveFile(d,e).catch((()=>e))))}}static toggleStorage(d,e){return Promise.all(this.STORAGES.map((u=>{if(u.useStorage=d,e)return d?void 0:u.deleteAll()})))}}n.STORAGES=[]},5753:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(8975);class f{constructor(d,e,u){this.mimeType=d,this.size=e,this.saveFileCallback=u,this.bytes=new Uint8Array(e)}write(d,e){return u=this,t=void 0,r=function*(){const u=e+d.byteLength;if(u>this.bytes.byteLength){const d=new Uint8Array(u);d.set(this.bytes,0),this.bytes=d}this.bytes.set(d,e)},new((f=void 0)||(f=Promise))((function(d,e){function c(d){try{n(r.next(d))}catch(d){e(d)}}function s(d){try{n(r.throw(d))}catch(d){e(d)}}function n(e){var u;e.done?d(e.value):(u=e.value,u instanceof f?u:new f((function(d){d(u)}))).then(c,s)}n((r=r.apply(u,t||[])).next())}));var u,t,f,r}truncate(){this.bytes=new Uint8Array}trim(d){this.bytes=this.bytes.slice(0,d)}finalize(d=!0){const e=(0,t.Z)(this.bytes,this.mimeType);return d&&this.saveFileCallback&&this.saveFileCallback(e),e}getParts(){return this.bytes}replaceParts(d){this.bytes=d}}},5003:(d,e,u)=>{u.d(e,{kg:()=>l,v9:()=>t});var t,f=u(410),r=u(4762),c=u(1352),s=u(5289);!function(d){d[d.None=0]="None",d[d.Error=1]="Error",d[d.Warn=2]="Warn",d[d.Log=4]="Log",d[d.Debug=8]="Debug"}(t||(t={}));const n=[t.None,t.Error,t.Warn,t.Log,t.Debug],o=!(r.IS_SAFARI||r.IS_FIREFOX),i="",a="",h=[["debug",t.Debug],["info",t.Log],["warn",t.Warn],["error",t.Error],["assert",t.Error],["trace",t.Log],["group",t.Log],["groupCollapsed",t.Log],["groupEnd",t.Log]];function l(d,e=t.Log|t.Warn|t.Error,u=!1,r=""){let b;f.ZP||u||(e=t.Error),o?r||(c.SU?r=i:c.N5&&(r=a)):r="";const g=r;r=r?`%s ${r}%s`:"%s";const p=function(...u){return e&t.Log&&console.log(r,(0,s.Z)(),d,...u)};return h.forEach((([u,t])=>{p[u]=function(...f){return e&t&&console[u](r,(0,s.Z)(),d,...f)}})),p.setPrefix=function(e){b=e,d="["+e+"]"},p.setPrefix(d),p.setLevel=function(d){e=n.slice(0,d+1).reduce(((d,e)=>d|e),0)},p.bindPrefix=function(d){return l(`${b}] [${d}`,e,u,g)},p}},3206:(d,e,u)=>{u.d(e,{Z:()=>r});var t=u(410),f=u(153);class r extends f.Z{constructor(){super("MTPROTO"),r.INSTANCE=this,t.GO&&(t.GO.mtprotoMessagePort=this)}static getInstance(){return this.INSTANCE}}},690:(d,e,u)=>{var t=u(4903);Uint8Array.prototype.concat=function(...d){return(0,t.Z)(this,...d)},Uint8Array.prototype.toJSON=function(){return[...this]},Promise.prototype.finally=Promise.prototype.finally||function(d){const e=e=>Promise.resolve(d()).then(e);return this.then((d=>e((()=>d))),(d=>e((()=>Promise.reject(d)))))}},6637:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(2423);function f(d){return d?d.match(t.bu):null}},3655:(d,e,u)=>{u.d(e,{Z:()=>r});var t=u(153),f=u(410);class r extends t.Z{constructor(){super("SERVICE"),f.GO&&(f.GO.serviceMessagePort=this)}}},7487:(d,e,u)=>{u.d(e,{Z:()=>i});var t=u(410),f=u(1267),r=u(1352),c=u(3206);class s{constructor(){this.prefix="",this.cache={},this.useStorage=!0,f.Z.test&&(this.prefix="t_")}get(d,e=!0){if(this.cache.hasOwnProperty(d)&&e)return this.cache[d];if(this.useStorage){let e;try{e=localStorage.getItem(this.prefix+d)}catch(d){this.useStorage=!1}if(null!==e)try{e=JSON.parse(e)}catch(d){}else e=void 0;return e}}set(d,e=!1){for(const u in d)if(d.hasOwnProperty(u)){const t=d[u];if(this.cache[u]=t,this.useStorage&&!e)try{const d=JSON.stringify(t);localStorage.setItem(this.prefix+u,d)}catch(d){this.useStorage=!1}}}delete(d,e=!1){d=""+d,e||delete this.cache[d];try{localStorage.removeItem(this.prefix+d)}catch(d){}}clear(){const d=["dc","server_time_offset","xt_instance","user_auth","state_id","k_build"];for(let e=1;e<=5;++e)d.push(`dc${e}_server_salt`),d.push(`dc${e}_auth_key`);for(const e of d)this.delete(e,!0)}toggleStorage(d,e){if(this.useStorage=d,e)return d?this.set(this.cache):void this.clear()}}class n{constructor(){n.STORAGES.push(this),r.kC||(this.storage=new s)}proxy(d,...e){return u=this,t=void 0,s=function*(){return r.kC?c.Z.getInstance().invoke("localStorageProxy",{type:d,args:e}):(e=Array.prototype.slice.call(e),this.storage[d].apply(this.storage,e))},new((f=void 0)||(f=Promise))((function(d,e){function r(d){try{n(s.next(d))}catch(d){e(d)}}function c(d){try{n(s.throw(d))}catch(d){e(d)}}function n(e){var u;e.done?d(e.value):(u=e.value,u instanceof f?u:new f((function(d){d(u)}))).then(r,c)}n((s=s.apply(u,t||[])).next())}));var u,t,f,s}get(d,e){return this.proxy("get",d,e)}set(d,e){return this.proxy("set",d,e)}delete(d,e){return this.proxy("delete",d,e)}clear(){return this.proxy("clear")}toggleStorage(d,e){return this.proxy("toggleStorage",d,e)}}n.STORAGES=[];const o=new n;t.GO.appStorage=o;const i=o},7922:(d,e,u)=>{u.d(e,{Z:()=>n});var t=u(410),f=u(3989),r=u(3127);class c extends f.Z{constructor(){super(r.Z,"session")}}const s=new c;t.GO.stateStorage=s;const n=s},3989:(d,e,u)=>{u.d(e,{Z:()=>i});var t=u(410),f=u(3725),r=u(1352),c=u(6724),s=u(6666),n=function(d,e,u,t){return new(u||(u=Promise))((function(f,r){function c(d){try{n(t.next(d))}catch(d){r(d)}}function s(d){try{n(t.throw(d))}catch(d){r(d)}}function n(d){var e;d.done?f(d.value):(e=d.value,e instanceof u?e:new u((function(d){d(e)}))).then(c,s)}n((t=t.apply(d,e||[])).next())}))};function o(){}class i{constructor(d,e){this.db=d,this.storeName=e,this.cache={},this.getPromises=new Map,this.keysToSet=new Set,this.saveDeferred=(0,f.Z)(),this.keysToDelete=new Set,this.deleteDeferred=(0,f.Z)(),this.storage=new s.Z(d,e),i.STORAGES.length?this.useStorage=i.STORAGES[0].useStorage:this.useStorage=!0,this.savingFreezed=!1,i.STORAGES.push(this),this.saveThrottled=(0,c.Z)((()=>n(this,void 0,void 0,(function*(){const d=this.saveDeferred;this.saveDeferred=(0,f.Z)();const e=this.keysToSet;if(e.size){const d=Array.from(e.values());e.clear();const u=d.map((d=>this.cache[d]));try{yield this.storage.save(d,u)}catch(e){console.error("[AS]: set error:",e,d,u)}}d.resolve(),e.size&&this.saveThrottled()}))),16,!1),this.deleteThrottled=(0,c.Z)((()=>n(this,void 0,void 0,(function*(){const d=this.deleteDeferred;this.deleteDeferred=(0,f.Z)();const e=this.keysToDelete;if(e.size){const d=Array.from(e.values());e.clear();try{yield this.storage.delete(d)}catch(e){console.error("[AS]: delete error:",e,d)}}d.resolve(),e.size&&this.deleteThrottled()}))),16,!1),this.getThrottled=(0,c.Z)((()=>n(this,void 0,void 0,(function*(){const d=Array.from(this.getPromises.keys());this.storage.get(d).then((e=>{for(let u=0,t=d.length;u{new Set(["NO_ENTRY_FOUND","STORAGE_OFFLINE"]).has(u.type)||(this.useStorage=!1,console.error("[AS]: get error:",u,d,e));for(let e=0,u=d.length;e{this.getPromises.size&&this.getThrottled()}))}))),16,!1)}isAvailable(){return this.useStorage}getCache(){return this.cache}getFromCache(d){return this.cache[d]}setToCache(d,e){return this.cache[d]=e}get(d,e=!0){return n(this,void 0,void 0,(function*(){if(this.cache.hasOwnProperty(d)&&e)return this.getFromCache(d);if(this.useStorage){const e=this.getPromises.get(d);if(e)return e;const u=(0,f.Z)();return this.getPromises.set(d,u),this.getThrottled(),u}}))}getAll(){return this.storage.getAll().catch((()=>[]))}set(d,e=!1){const u=this.useStorage&&!e&&!this.savingFreezed;for(const e in d)if(d.hasOwnProperty(e)){const t=d[e];this.setToCache(e,t),u&&(this.keysToSet.add(e),this.keysToDelete.delete(e),this.saveThrottled())}return u?this.saveDeferred:Promise.resolve()}delete(d,e=!1){return d=""+d,e||delete this.cache[d],this.useStorage&&(this.keysToSet.delete(d),this.keysToDelete.add(d),this.deleteThrottled()),this.useStorage?this.deleteDeferred:Promise.resolve()}clear(d=!1){if(!d)for(const d in this.cache)delete this.cache[d];return this.storage.clear().catch(o)}static toggleStorage(d,e){return Promise.all(this.STORAGES.map((u=>{if(u.useStorage=d,r.kC&&e)return d?u.set(u.cache):(u.keysToSet.clear(),u.keysToDelete.clear(),u.getPromises.forEach((d=>d.resolve(void 0))),u.getPromises.clear(),u.clear(!0))}))).catch(o)}static freezeSaving(d,e){this.STORAGES.forEach((d=>d.savingFreezed=!0));try{d()}catch(d){console.error("freezeSaving callback error:",d)}this.STORAGES.forEach((d=>d.savingFreezed=!1))}}i.STORAGES=[],t.GO&&(t.GO.AppStorage=i)},1229:(d,e,u)=>{u.d(e,{Z:()=>t});const t="((?:๐Ÿ‘จ๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffc-\udfff]|๐Ÿง‘๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb\udffd-\udfff]|๐Ÿง‘๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿง‘๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb-\udffd\udfff]|๐Ÿง‘๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb-\udffe]|๐Ÿ‘จ๐Ÿปโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffc-\udfff]|๐Ÿ‘จ๐Ÿผโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffd-\udfff]|๐Ÿ‘จ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿ‘จ๐Ÿพโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffd\udfff]|๐Ÿ‘จ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffe]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffc-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffc-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffd-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb\udffd-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffd\udfff]|๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb-\udffd\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffe]|๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb-\udffe]|๐Ÿง‘๐Ÿปโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffc-\udfff]|๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿผโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb\udffd-\udfff]|๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿฝโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿพโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb-\udffd\udfff]|๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿฟโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb-\udffe]|๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿ‘จโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ|๐Ÿ‘ฉโ€โค๏ธ?โ€๐Ÿ’‹โ€\ud83d[\udc68\udc69]|๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ\ud83c[\udffc-\udfff]|๐Ÿซฑ๐Ÿผโ€๐Ÿซฒ\ud83c[\udffb\udffd-\udfff]|๐Ÿซฑ๐Ÿฝโ€๐Ÿซฒ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿซฑ๐Ÿพโ€๐Ÿซฒ\ud83c[\udffb-\udffd\udfff]|๐Ÿซฑ๐Ÿฟโ€๐Ÿซฒ\ud83c[\udffb-\udffe]|๐Ÿ‘จโ€โค๏ธ?โ€๐Ÿ‘จ|๐Ÿ‘ฉโ€โค๏ธ?โ€\ud83d[\udc68\udc69]|๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘|๐Ÿ‘ซ\ud83c[\udffb-\udfff]|๐Ÿ‘ฌ\ud83c[\udffb-\udfff]|๐Ÿ‘ญ\ud83c[\udffb-\udfff]|๐Ÿ’\ud83c[\udffb-\udfff]|๐Ÿ’‘\ud83c[\udffb-\udfff]|๐Ÿค\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|๐Ÿค)|(?:\ud83d[\udc68\udc69]|๐Ÿง‘)(?:\ud83c[\udffb-\udfff])?โ€(?:โš•๏ธ?|โš–๏ธ?|โœˆ๏ธ?|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|โ›น)(?:(?:\ud83c[\udffb-\udfff]|๏ธ?)โ€[โ™€โ™‚]๏ธ?)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?โ€[โ™€โ™‚]๏ธ?|(?:๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘จโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘จโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘ฉโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘ฉโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€\ud83d[\udc66\udc67]|๐Ÿณ๏ธ?โ€โšง๏ธ?|๐Ÿณ๏ธ?โ€๐ŸŒˆ|๐Ÿ˜ถโ€๐ŸŒซ๏ธ?|โค๏ธ?โ€๐Ÿ”ฅ|โค๏ธ?โ€๐Ÿฉน|๐Ÿดโ€โ˜ ๏ธ?|๐Ÿ•โ€๐Ÿฆบ|๐Ÿปโ€โ„๏ธ?|๐Ÿ‘โ€๐Ÿ—จ|๐Ÿ‘จโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฏโ€โ™€๏ธ?|๐Ÿ‘ฏโ€โ™‚๏ธ?|๐Ÿ˜ฎโ€๐Ÿ’จ|๐Ÿ˜ตโ€๐Ÿ’ซ|๐Ÿคผโ€โ™€๏ธ?|๐Ÿคผโ€โ™‚๏ธ?|๐Ÿงžโ€โ™€๏ธ?|๐Ÿงžโ€โ™‚๏ธ?|๐ŸงŸโ€โ™€๏ธ?|๐ŸงŸโ€โ™‚๏ธ?|๐Ÿˆโ€โฌ›)|[#*0-9]๏ธ??โƒฃ|(?:[ยฉยฎโ„ขโ™Ÿ]๏ธ?)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[โ€ผโ‰โ„นโ†”-โ†™โ†ฉโ†ชโŒšโŒ›โŒจโโญ-โฏโฑโฒโธ-โบโ“‚โ–ชโ–ซโ–ถโ—€โ—ป-โ—พโ˜€-โ˜„โ˜Žโ˜‘โ˜”โ˜•โ˜˜โ˜ โ˜ขโ˜ฃโ˜ฆโ˜ชโ˜ฎโ˜ฏโ˜ธ-โ˜บโ™€โ™‚โ™ˆ-โ™“โ™ โ™ฃโ™ฅโ™ฆโ™จโ™ปโ™ฟโš’-โš—โš™โš›โšœโš โšกโšงโšชโšซโšฐโšฑโšฝโšพโ›„โ›…โ›ˆโ›โ›‘โ›“โ›”โ›ฉโ›ชโ›ฐ-โ›ตโ›ธโ›บโ›ฝโœ‚โœˆโœ‰โœโœ’โœ”โœ–โœโœกโœณโœดโ„โ‡โ—โฃโคโžกโคดโคตโฌ…-โฌ‡โฌ›โฌœโญโญ•ใ€ฐใ€ฝใŠ—ใŠ™])(?:๏ธ?|(?!๏ธŽ))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[โ˜โ›ทโ›นโœŒโœ])(?:๏ธ?|(?!๏ธŽ))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[โœŠโœ‹]))(?:\ud83c[\udffb-\udfff])?|(?:๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ|๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ|๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ|๐Ÿ‡ฆ\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|๐Ÿ‡ง\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|๐Ÿ‡จ\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|๐Ÿ‡ฉ\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|๐Ÿ‡ช\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|๐Ÿ‡ซ\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|๐Ÿ‡ฌ\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|๐Ÿ‡ญ\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|๐Ÿ‡ฎ\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|๐Ÿ‡ฏ\ud83c[\uddea\uddf2\uddf4\uddf5]|๐Ÿ‡ฐ\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|๐Ÿ‡ฑ\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|๐Ÿ‡ฒ\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|๐Ÿ‡ณ\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|๐Ÿ‡ด๐Ÿ‡ฒ|๐Ÿ‡ต\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|๐Ÿ‡ถ๐Ÿ‡ฆ|๐Ÿ‡ท\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|๐Ÿ‡ธ\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|๐Ÿ‡น\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|๐Ÿ‡บ\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|๐Ÿ‡ป\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|๐Ÿ‡ผ\ud83c[\uddeb\uddf8]|๐Ÿ‡ฝ๐Ÿ‡ฐ|๐Ÿ‡พ\ud83c[\uddea\uddf9]|๐Ÿ‡ฟ\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[โฉ-โฌโฐโณโ™พโ›Žโœ…โœจโŒโŽโ“-โ•โž•-โž—โžฐโžฟ๎”Š])|๏ธ)"}}]); -//# sourceMappingURL=110.d2d030648acd67138f89.bundle.js.map \ No newline at end of file +"use strict";(this.webpackChunktweb=this.webpackChunktweb||[]).push([[110],{4159:(d,e,u)=>{var t;u.d(e,{Z:()=>s});const f=["web.telegram.org","webk.telegram.org"],r=Math.min(4,null!==(t=navigator.hardwareConcurrency)&&void 0!==t?t:4),c={id:1025907,hash:"452b0359b988148995f22ff0f4229750",version:"1.7.3",versionFull:"1.7.3 (308)",build:308,langPackVersion:"0.9.3",langPack:"webk",langPackCode:"en",domains:f,baseDcId:2,isMainDomain:f.includes(location.hostname),suffix:"K",threads:r,cryptoWorkers:r};c.isMainDomain&&(c.id=2496,c.hash="8da85b0d5bfe62527e5b244c209159c3");const s=c},3127:(d,e,u)=>{u.d(e,{Z:()=>t});const t={name:"tweb",version:7,stores:[{name:"session"},{name:"stickerSets"},{name:"users"},{name:"chats"},{name:"dialogs"},{name:"messages"}]}},8975:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(7119);function f(d,e=""){Array.isArray(d)||(d=[d]);const u=(0,t.Z)(e);return new Blob(d,{type:u})}},7119:(d,e,u)=>{function t(d){return-1===["image/jpeg","image/png","image/gif","image/svg+xml","image/webp","image/bmp","video/mp4","video/webm","video/quicktime","audio/ogg","audio/mpeg","audio/mp4","audio/wav","application/json","application/pdf"].indexOf(d)?"application/octet-stream":d}u.d(e,{Z:()=>t})},4903:(d,e,u)=>{function t(...d){const e=d.reduce(((d,e)=>d+(e.byteLength||e.length)),0),u=new Uint8Array(e);let t=0;return d.forEach((d=>{u.set(d instanceof ArrayBuffer?new Uint8Array(d):d,t),t+=d.byteLength||d.length})),u}u.d(e,{Z:()=>t})},3725:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(319);function f(){const d={isFulfilled:!1,isRejected:!1,notify:()=>{},notifyAll:(...e)=>{d.lastNotify=e,d.listeners.forEach((d=>d(...e)))},listeners:[],addNotifyListener:e=>{d.lastNotify&&e(...d.lastNotify),d.listeners.push(e)}},e=new Promise(((u,t)=>{d.resolve=d=>{e.isFulfilled||e.isRejected||(e.isFulfilled=!0,u(d))},d.reject=(...d)=>{e.isRejected||e.isFulfilled||(e.isRejected=!0,t(...d))}}));return e.catch(t.Z).finally((()=>{e.notify=e.notifyAll=e.lastNotify=null,e.listeners.length=0,e.cancel&&(e.cancel=t.Z)})),Object.assign(e,d),e}},1352:(d,e,u)=>{u.d(e,{N5:()=>f,SU:()=>t,kC:()=>r});const t="undefined"!=typeof ServiceWorkerGlobalScope&&self instanceof ServiceWorkerGlobalScope,f="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&!t,r=f||t,c=(d,...e)=>{try{d.postMessage(...e)}catch(d){console.error("[worker] postMessage error:",d,e)}},s=(d,...e)=>{self.clients.matchAll({includeUncontrolled:!1,type:"window"}).then((u=>{u.length&&u.slice(d?0:-1).forEach((d=>{c(d,...e)}))}))};t&&s.bind(null,!1),t&&s.bind(null,!0)},319:(d,e,u)=>{function t(){}u.d(e,{Z:()=>t})},8479:(d,e,u)=>{function t(d){if(null===d||"object"!=typeof d)return d;if(d instanceof Date)return new Date(d.getTime());if(Array.isArray(d))return d.map((d=>t(d)));if(ArrayBuffer.isView(d))return d.slice();const e=new d.constructor;for(var u in d)d.hasOwnProperty(u)&&(e[u]=t(d[u]));return e}u.d(e,{Z:()=>t})},6848:(d,e,u)=>{function t(d,e){const u=Object.keys,f=typeof d;return d&&e&&"object"===f&&f===typeof e?u(d).length===u(e).length&&u(d).every((u=>t(d[u],e[u]))):d===e}u.d(e,{Z:()=>t})},5880:(d,e,u)=>{function t(d){return"object"==typeof d&&null!==d}u.d(e,{Z:()=>t})},5953:(d,e,u)=>{function t(d,e){if(e)for(const u in e)void 0!==e[u]&&(d[u]=e[u]);return d}u.d(e,{Z:()=>t})},946:(d,e,u)=>{u.d(e,{Z:()=>r});var t=u(8479),f=u(5880);function r(d,e,u,c,s,n){for(const o in d){const i=n?`${n}.${o}`:o;(null==s?void 0:s.has(i))||(typeof e[o]!=typeof d[o]?(e[o]=(0,t.Z)(d[o]),null==u||u(c||o)):(0,f.Z)(d[o])&&r(d[o],e[o],u,c||o,s,i))}}},4110:(d,e,u)=>{var t=u(7361),f=u(617);String.prototype.toUserId=function(){return(+this).toUserId()},String.prototype.toChatId=function(){return(+this).toChatId()},String.prototype.toPeerId=function(d){return(+this).toPeerId(d)},String.prototype.isPeerId=function(){return/^[\d-]/.test(this.toString())},Number.prototype.toUserId=function(){return this},Number.prototype.toChatId=function(){return Math.abs(this)},Number.prototype.toPeerId=function(d){return void 0===d?this:d?-Math.abs(this):this},Number.prototype.isPeerId=function(){return!0},[["isUser",f.Z],["isAnyChat",t.Z]].forEach((d=>{const e=Array.isArray(d)?d[0]:d,u=Array.isArray(d)?d[1]:d;String.prototype[e]=function(){return u.call(null,this.toString())},Number.prototype[e]=function(){return u.call(null,this)}}))},144:(d,e,u)=>{u.d(e,{a:()=>r,d:()=>f});const t={8:new Uint8Array(1),16:new Uint16Array(1),32:new Uint32Array(1)};function f(d){const e=t[d];return crypto.getRandomValues(e),e[0]}function r(){return""+f(32)+f(32)%16777215}},5466:(d,e,u)=>{u.d(e,{$:()=>f});var t=u(5289);function f(d){return(...e)=>function(d,e,u){const f=performance.now();return(u||console).warn((0,t.Z)(),"start",e),d.then((()=>{(u||console).warn((0,t.Z)(),"end",e,performance.now()-f)})),d}(...e,d)}},5418:(d,e,u)=>{function t(d){return new Promise((e=>{setTimeout(e,d)}))}u.d(e,{Z:()=>t})},6724:(d,e,u)=>{function t(d,e,u=!0){let t,f,r=null;return(...c)=>{t=!0,f=c,r||(u&&(t=!1,d(...f)),r=setInterval((()=>{if(!t)return clearInterval(r),void(r=null);t=!1,d(...f)}),e))}}u.d(e,{Z:()=>t})},9005:(d,e,u)=>{function t(d){return d.charAt(0).toUpperCase()+d.slice(1)}u.d(e,{Z:()=>t})},8453:(d,e,u)=>{u.d(e,{Z:()=>s});var t=u(5936),f=u(3989),r=u(7487),c=u(319);function s(d,e){return Promise.all([f.Z.toggleStorage(d,e),t.Z.toggleStorage(d,e),r.Z.toggleStorage(d,e)]).then(c.Z,c.Z)}},7298:(d,e,u)=>{function t(d){const e=Date.now();return d?e/1e3|0:e}u.d(e,{Z:()=>t})},2790:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(7082);function f(d){return function(d,e){const u=t.t;if(d{u.d(e,{o:()=>t,t:()=>f});const t=65536,f=4294967295},7361:(d,e,u)=>{function t(d){return+d<0}u.d(e,{Z:()=>t})},617:(d,e,u)=>{function t(d){return+d>=0}u.d(e,{Z:()=>t})},8630:(d,e,u)=>{u.d(e,{Z:()=>n});var t=u(153),f=u(410),r=u(1352);class c extends t.Z{constructor(){super("CRYPTO"),this.lastIndex=-1}invokeCryptoNew({method:d,args:e,transfer:u}){const t={method:d,args:e},f=this.listeners.invoke;if(null==f?void 0:f.length){let d=f[0].callback(t);return r.kC||d instanceof Promise||(d=Promise.resolve(d)),d}const c="aes-encrypt"===d||"aes-decrypt"===d?this.lastIndex=(this.lastIndex+1)%this.sendPorts.length:0;return this.invoke("invoke",t,void 0,this.sendPorts[c],u)}invokeCrypto(d,...e){return this.invokeCryptoNew({method:d,args:e})}}const s=new c;f.GO&&(f.GO.cryptoMessagePort=s);const n=s},5936:(d,e,u)=>{u.d(e,{Z:()=>n});var t=u(1267),f=u(8975),r=u(5753),c=u(5471),s=u(3725);class n{constructor(d){this.dbName=d,this.useStorage=!0,t.Z.test&&(this.dbName+="_test"),n.STORAGES.length&&(this.useStorage=n.STORAGES[0].useStorage),this.openDatabase(),n.STORAGES.push(this)}openDatabase(){var d;return null!==(d=this.openDbPromise)&&void 0!==d?d:this.openDbPromise=caches.open(this.dbName)}delete(d){return this.timeoutOperation((e=>e.delete("/"+d)))}deleteAll(){return caches.delete(this.dbName)}get(d){return this.timeoutOperation((e=>e.match("/"+d)))}save(d,e){return this.timeoutOperation((u=>u.put("/"+d,e)))}getFile(d,e="blob"){return this.get(d).then((d=>{if(!d)throw(0,c.Z)("NO_ENTRY_FOUND");return d[e]()}))}saveFile(d,e){e instanceof Blob||(e=(0,f.Z)(e));const u=new Response(e,{headers:{"Content-Length":""+e.size}});return this.save(d,u).then((()=>e))}timeoutOperation(d){return this.useStorage?new Promise(((e,u)=>{return t=this,f=void 0,c=function*(){let t=!1;const f=setTimeout((()=>{u(),t=!0}),15e3);try{const u=yield this.openDatabase();if(!u)throw this.useStorage=!1,this.openDbPromise=void 0,"no cache?";const f=yield d(u);if(t)return;e(f)}catch(d){u(d)}clearTimeout(f)},new((r=void 0)||(r=Promise))((function(d,e){function u(d){try{n(c.next(d))}catch(d){e(d)}}function s(d){try{n(c.throw(d))}catch(d){e(d)}}function n(e){var t;e.done?d(e.value):(t=e.value,t instanceof r?t:new r((function(d){d(t)}))).then(u,s)}n((c=c.apply(t,f||[])).next())}));var t,f,r,c})):Promise.reject((0,c.Z)("STORAGE_OFFLINE"))}prepareWriting(d,e,u){return{deferred:(0,s.Z)(),getWriter:()=>new r.Z(u,e,(e=>this.saveFile(d,e).catch((()=>e))))}}static toggleStorage(d,e){return Promise.all(this.STORAGES.map((u=>{if(u.useStorage=d,e)return d?void 0:u.deleteAll()})))}}n.STORAGES=[]},5753:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(8975);class f{constructor(d,e,u){this.mimeType=d,this.size=e,this.saveFileCallback=u,this.bytes=new Uint8Array(e)}write(d,e){return u=this,t=void 0,r=function*(){const u=e+d.byteLength;if(u>this.bytes.byteLength){const d=new Uint8Array(u);d.set(this.bytes,0),this.bytes=d}this.bytes.set(d,e)},new((f=void 0)||(f=Promise))((function(d,e){function c(d){try{n(r.next(d))}catch(d){e(d)}}function s(d){try{n(r.throw(d))}catch(d){e(d)}}function n(e){var u;e.done?d(e.value):(u=e.value,u instanceof f?u:new f((function(d){d(u)}))).then(c,s)}n((r=r.apply(u,t||[])).next())}));var u,t,f,r}truncate(){this.bytes=new Uint8Array}trim(d){this.bytes=this.bytes.slice(0,d)}finalize(d=!0){const e=(0,t.Z)(this.bytes,this.mimeType);return d&&this.saveFileCallback&&this.saveFileCallback(e),e}getParts(){return this.bytes}replaceParts(d){this.bytes=d}}},5003:(d,e,u)=>{u.d(e,{kg:()=>l,v9:()=>t});var t,f=u(410),r=u(4762),c=u(1352),s=u(5289);!function(d){d[d.None=0]="None",d[d.Error=1]="Error",d[d.Warn=2]="Warn",d[d.Log=4]="Log",d[d.Debug=8]="Debug"}(t||(t={}));const n=[t.None,t.Error,t.Warn,t.Log,t.Debug],o=!(r.IS_SAFARI||r.IS_FIREFOX),i="",a="",h=[["debug",t.Debug],["info",t.Log],["warn",t.Warn],["error",t.Error],["assert",t.Error],["trace",t.Log],["group",t.Log],["groupCollapsed",t.Log],["groupEnd",t.Log]];function l(d,e=t.Log|t.Warn|t.Error,u=!1,r=""){let b;f.ZP||u||(e=t.Error),o?r||(c.SU?r=i:c.N5&&(r=a)):r="";const g=r;r=r?`%s ${r}%s`:"%s";const p=function(...u){return e&t.Log&&console.log(r,(0,s.Z)(),d,...u)};return h.forEach((([u,t])=>{p[u]=function(...f){return e&t&&console[u](r,(0,s.Z)(),d,...f)}})),p.setPrefix=function(e){b=e,d="["+e+"]"},p.setPrefix(d),p.setLevel=function(d){e=n.slice(0,d+1).reduce(((d,e)=>d|e),0)},p.bindPrefix=function(d){return l(`${b}] [${d}`,e,u,g)},p}},3206:(d,e,u)=>{u.d(e,{Z:()=>r});var t=u(410),f=u(153);class r extends f.Z{constructor(){super("MTPROTO"),r.INSTANCE=this,t.GO&&(t.GO.mtprotoMessagePort=this)}static getInstance(){return this.INSTANCE}}},690:(d,e,u)=>{var t=u(4903);Uint8Array.prototype.concat=function(...d){return(0,t.Z)(this,...d)},Uint8Array.prototype.toJSON=function(){return[...this]},Promise.prototype.finally=Promise.prototype.finally||function(d){const e=e=>Promise.resolve(d()).then(e);return this.then((d=>e((()=>d))),(d=>e((()=>Promise.reject(d)))))}},6637:(d,e,u)=>{u.d(e,{Z:()=>f});var t=u(2423);function f(d){return d?d.match(t.bu):null}},3655:(d,e,u)=>{u.d(e,{Z:()=>r});var t=u(153),f=u(410);class r extends t.Z{constructor(){super("SERVICE"),f.GO&&(f.GO.serviceMessagePort=this)}}},7487:(d,e,u)=>{u.d(e,{Z:()=>i});var t=u(410),f=u(1267),r=u(1352),c=u(3206);class s{constructor(){this.prefix="",this.cache={},this.useStorage=!0,f.Z.test&&(this.prefix="t_")}get(d,e=!0){if(this.cache.hasOwnProperty(d)&&e)return this.cache[d];if(this.useStorage){let e;try{e=localStorage.getItem(this.prefix+d)}catch(d){this.useStorage=!1}if(null!==e)try{e=JSON.parse(e)}catch(d){}else e=void 0;return e}}set(d,e=!1){for(const u in d)if(d.hasOwnProperty(u)){const t=d[u];if(this.cache[u]=t,this.useStorage&&!e)try{const d=JSON.stringify(t);localStorage.setItem(this.prefix+u,d)}catch(d){this.useStorage=!1}}}delete(d,e=!1){d=""+d,e||delete this.cache[d];try{localStorage.removeItem(this.prefix+d)}catch(d){}}clear(){const d=["dc","server_time_offset","xt_instance","user_auth","state_id","k_build"];for(let e=1;e<=5;++e)d.push(`dc${e}_server_salt`),d.push(`dc${e}_auth_key`);for(const e of d)this.delete(e,!0)}toggleStorage(d,e){if(this.useStorage=d,e)return d?this.set(this.cache):void this.clear()}}class n{constructor(){n.STORAGES.push(this),r.kC||(this.storage=new s)}proxy(d,...e){return u=this,t=void 0,s=function*(){return r.kC?c.Z.getInstance().invoke("localStorageProxy",{type:d,args:e}):(e=Array.prototype.slice.call(e),this.storage[d].apply(this.storage,e))},new((f=void 0)||(f=Promise))((function(d,e){function r(d){try{n(s.next(d))}catch(d){e(d)}}function c(d){try{n(s.throw(d))}catch(d){e(d)}}function n(e){var u;e.done?d(e.value):(u=e.value,u instanceof f?u:new f((function(d){d(u)}))).then(r,c)}n((s=s.apply(u,t||[])).next())}));var u,t,f,s}get(d,e){return this.proxy("get",d,e)}set(d,e){return this.proxy("set",d,e)}delete(d,e){return this.proxy("delete",d,e)}clear(){return this.proxy("clear")}toggleStorage(d,e){return this.proxy("toggleStorage",d,e)}}n.STORAGES=[];const o=new n;t.GO.appStorage=o;const i=o},7922:(d,e,u)=>{u.d(e,{Z:()=>n});var t=u(410),f=u(3989),r=u(3127);class c extends f.Z{constructor(){super(r.Z,"session")}}const s=new c;t.GO.stateStorage=s;const n=s},3989:(d,e,u)=>{u.d(e,{Z:()=>i});var t=u(410),f=u(3725),r=u(1352),c=u(6724),s=u(6666),n=function(d,e,u,t){return new(u||(u=Promise))((function(f,r){function c(d){try{n(t.next(d))}catch(d){r(d)}}function s(d){try{n(t.throw(d))}catch(d){r(d)}}function n(d){var e;d.done?f(d.value):(e=d.value,e instanceof u?e:new u((function(d){d(e)}))).then(c,s)}n((t=t.apply(d,e||[])).next())}))};function o(){}class i{constructor(d,e){this.db=d,this.storeName=e,this.cache={},this.getPromises=new Map,this.keysToSet=new Set,this.saveDeferred=(0,f.Z)(),this.keysToDelete=new Set,this.deleteDeferred=(0,f.Z)(),this.storage=new s.Z(d,e),i.STORAGES.length?this.useStorage=i.STORAGES[0].useStorage:this.useStorage=!0,this.savingFreezed=!1,i.STORAGES.push(this),this.saveThrottled=(0,c.Z)((()=>n(this,void 0,void 0,(function*(){const d=this.saveDeferred;this.saveDeferred=(0,f.Z)();const e=this.keysToSet;if(e.size){const d=Array.from(e.values());e.clear();const u=d.map((d=>this.cache[d]));try{yield this.storage.save(d,u)}catch(e){console.error("[AS]: set error:",e,d,u)}}d.resolve(),e.size&&this.saveThrottled()}))),16,!1),this.deleteThrottled=(0,c.Z)((()=>n(this,void 0,void 0,(function*(){const d=this.deleteDeferred;this.deleteDeferred=(0,f.Z)();const e=this.keysToDelete;if(e.size){const d=Array.from(e.values());e.clear();try{yield this.storage.delete(d)}catch(e){console.error("[AS]: delete error:",e,d)}}d.resolve(),e.size&&this.deleteThrottled()}))),16,!1),this.getThrottled=(0,c.Z)((()=>n(this,void 0,void 0,(function*(){const d=Array.from(this.getPromises.keys());this.storage.get(d).then((e=>{for(let u=0,t=d.length;u{new Set(["NO_ENTRY_FOUND","STORAGE_OFFLINE"]).has(u.type)||(this.useStorage=!1,console.error("[AS]: get error:",u,d,e));for(let e=0,u=d.length;e{this.getPromises.size&&this.getThrottled()}))}))),16,!1)}isAvailable(){return this.useStorage}getCache(){return this.cache}getFromCache(d){return this.cache[d]}setToCache(d,e){return this.cache[d]=e}get(d,e=!0){return n(this,void 0,void 0,(function*(){if(this.cache.hasOwnProperty(d)&&e)return this.getFromCache(d);if(this.useStorage){const e=this.getPromises.get(d);if(e)return e;const u=(0,f.Z)();return this.getPromises.set(d,u),this.getThrottled(),u}}))}getAll(){return this.storage.getAll().catch((()=>[]))}set(d,e=!1){const u=this.useStorage&&!e&&!this.savingFreezed;for(const e in d)if(d.hasOwnProperty(e)){const t=d[e];this.setToCache(e,t),u&&(this.keysToSet.add(e),this.keysToDelete.delete(e),this.saveThrottled())}return u?this.saveDeferred:Promise.resolve()}delete(d,e=!1){return d=""+d,e||delete this.cache[d],this.useStorage&&(this.keysToSet.delete(d),this.keysToDelete.add(d),this.deleteThrottled()),this.useStorage?this.deleteDeferred:Promise.resolve()}clear(d=!1){if(!d)for(const d in this.cache)delete this.cache[d];return this.storage.clear().catch(o)}static toggleStorage(d,e){return Promise.all(this.STORAGES.map((u=>{if(u.useStorage=d,r.kC&&e)return d?u.set(u.cache):(u.keysToSet.clear(),u.keysToDelete.clear(),u.getPromises.forEach((d=>d.resolve(void 0))),u.getPromises.clear(),u.clear(!0))}))).catch(o)}static freezeSaving(d,e){this.STORAGES.forEach((d=>d.savingFreezed=!0));try{d()}catch(d){console.error("freezeSaving callback error:",d)}this.STORAGES.forEach((d=>d.savingFreezed=!1))}}i.STORAGES=[],t.GO&&(t.GO.AppStorage=i)},1229:(d,e,u)=>{u.d(e,{Z:()=>t});const t="((?:๐Ÿ‘จ๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿปโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffc-\udfff]|๐Ÿง‘๐Ÿผโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb\udffd-\udfff]|๐Ÿง‘๐Ÿฝโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿง‘๐Ÿพโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb-\udffd\udfff]|๐Ÿง‘๐Ÿฟโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿง‘\ud83c[\udffb-\udffe]|๐Ÿ‘จ๐Ÿปโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffc-\udfff]|๐Ÿ‘จ๐Ÿผโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffd-\udfff]|๐Ÿ‘จ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿ‘จ๐Ÿพโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffd\udfff]|๐Ÿ‘จ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘จ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffe]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffc-\udfff]|๐Ÿ‘ฉ๐Ÿปโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffc-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffd-\udfff]|๐Ÿ‘ฉ๐Ÿผโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb\udffd-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffd\udfff]|๐Ÿ‘ฉ๐Ÿพโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb-\udffd\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ‘จ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€โค๏ธ?โ€๐Ÿ‘ฉ\ud83c[\udffb-\udfff]|๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘จ\ud83c[\udffb-\udffe]|๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿคโ€๐Ÿ‘ฉ\ud83c[\udffb-\udffe]|๐Ÿง‘๐Ÿปโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffc-\udfff]|๐Ÿง‘๐Ÿปโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿผโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb\udffd-\udfff]|๐Ÿง‘๐Ÿผโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿฝโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿง‘๐Ÿฝโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿพโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb-\udffd\udfff]|๐Ÿง‘๐Ÿพโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿง‘๐Ÿฟโ€โค๏ธ?โ€๐Ÿง‘\ud83c[\udffb-\udffe]|๐Ÿง‘๐Ÿฟโ€๐Ÿคโ€๐Ÿง‘\ud83c[\udffb-\udfff]|๐Ÿ‘จโ€โค๏ธ?โ€๐Ÿ’‹โ€๐Ÿ‘จ|๐Ÿ‘ฉโ€โค๏ธ?โ€๐Ÿ’‹โ€\ud83d[\udc68\udc69]|๐Ÿซฑ๐Ÿปโ€๐Ÿซฒ\ud83c[\udffc-\udfff]|๐Ÿซฑ๐Ÿผโ€๐Ÿซฒ\ud83c[\udffb\udffd-\udfff]|๐Ÿซฑ๐Ÿฝโ€๐Ÿซฒ\ud83c[\udffb\udffc\udffe\udfff]|๐Ÿซฑ๐Ÿพโ€๐Ÿซฒ\ud83c[\udffb-\udffd\udfff]|๐Ÿซฑ๐Ÿฟโ€๐Ÿซฒ\ud83c[\udffb-\udffe]|๐Ÿ‘จโ€โค๏ธ?โ€๐Ÿ‘จ|๐Ÿ‘ฉโ€โค๏ธ?โ€\ud83d[\udc68\udc69]|๐Ÿง‘โ€๐Ÿคโ€๐Ÿง‘|๐Ÿ‘ซ\ud83c[\udffb-\udfff]|๐Ÿ‘ฌ\ud83c[\udffb-\udfff]|๐Ÿ‘ญ\ud83c[\udffb-\udfff]|๐Ÿ’\ud83c[\udffb-\udfff]|๐Ÿ’‘\ud83c[\udffb-\udfff]|๐Ÿค\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|๐Ÿค)|(?:\ud83d[\udc68\udc69]|๐Ÿง‘)(?:\ud83c[\udffb-\udfff])?โ€(?:โš•๏ธ?|โš–๏ธ?|โœˆ๏ธ?|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|โ›น)(?:(?:\ud83c[\udffb-\udfff]|๏ธ?)โ€[โ™€โ™‚]๏ธ?)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?โ€[โ™€โ™‚]๏ธ?|(?:๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘จโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘จโ€\ud83d[\udc66\udc67]|๐Ÿ‘จโ€๐Ÿ‘ฉโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ|๐Ÿ‘ฉโ€๐Ÿ‘งโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€\ud83d[\udc66\udc67]|๐Ÿณ๏ธ?โ€โšง๏ธ?|๐Ÿณ๏ธ?โ€๐ŸŒˆ|๐Ÿ˜ถโ€๐ŸŒซ๏ธ?|โค๏ธ?โ€๐Ÿ”ฅ|โค๏ธ?โ€๐Ÿฉน|๐Ÿดโ€โ˜ ๏ธ?|๐Ÿ•โ€๐Ÿฆบ|๐Ÿปโ€โ„๏ธ?|๐Ÿ‘โ€๐Ÿ—จ|๐Ÿ‘จโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฉโ€\ud83d[\udc66\udc67]|๐Ÿ‘ฏโ€โ™€๏ธ?|๐Ÿ‘ฏโ€โ™‚๏ธ?|๐Ÿ˜ฎโ€๐Ÿ’จ|๐Ÿ˜ตโ€๐Ÿ’ซ|๐Ÿคผโ€โ™€๏ธ?|๐Ÿคผโ€โ™‚๏ธ?|๐Ÿงžโ€โ™€๏ธ?|๐Ÿงžโ€โ™‚๏ธ?|๐ŸงŸโ€โ™€๏ธ?|๐ŸงŸโ€โ™‚๏ธ?|๐Ÿˆโ€โฌ›)|[#*0-9]๏ธ??โƒฃ|(?:[ยฉยฎโ„ขโ™Ÿ]๏ธ?)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[โ€ผโ‰โ„นโ†”-โ†™โ†ฉโ†ชโŒšโŒ›โŒจโโญ-โฏโฑโฒโธ-โบโ“‚โ–ชโ–ซโ–ถโ—€โ—ป-โ—พโ˜€-โ˜„โ˜Žโ˜‘โ˜”โ˜•โ˜˜โ˜ โ˜ขโ˜ฃโ˜ฆโ˜ชโ˜ฎโ˜ฏโ˜ธ-โ˜บโ™€โ™‚โ™ˆ-โ™“โ™ โ™ฃโ™ฅโ™ฆโ™จโ™ปโ™ฟโš’-โš—โš™โš›โšœโš โšกโšงโšชโšซโšฐโšฑโšฝโšพโ›„โ›…โ›ˆโ›โ›‘โ›“โ›”โ›ฉโ›ชโ›ฐ-โ›ตโ›ธโ›บโ›ฝโœ‚โœˆโœ‰โœโœ’โœ”โœ–โœโœกโœณโœดโ„โ‡โ—โฃโคโžกโคดโคตโฌ…-โฌ‡โฌ›โฌœโญโญ•ใ€ฐใ€ฝใŠ—ใŠ™])(?:๏ธ?|(?!๏ธŽ))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|[โ˜โ›ทโ›นโœŒโœ])(?:๏ธ?|(?!๏ธŽ))|(?:\ud83c[\udf85\udfc2-\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4-\udeb6\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd-\uddcf\uddd1-\udddd\udec3-\udec5\udef0-\udef6]|[โœŠโœ‹]))(?:\ud83c[\udffb-\udfff])?|(?:๐Ÿด๓ ง๓ ข๓ ฅ๓ ฎ๓ ง๓ ฟ|๐Ÿด๓ ง๓ ข๓ ณ๓ ฃ๓ ด๓ ฟ|๐Ÿด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ|๐Ÿ‡ฆ\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|๐Ÿ‡ง\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|๐Ÿ‡จ\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf5\uddf7\uddfa-\uddff]|๐Ÿ‡ฉ\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|๐Ÿ‡ช\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|๐Ÿ‡ซ\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|๐Ÿ‡ฌ\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|๐Ÿ‡ญ\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|๐Ÿ‡ฎ\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|๐Ÿ‡ฏ\ud83c[\uddea\uddf2\uddf4\uddf5]|๐Ÿ‡ฐ\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|๐Ÿ‡ฑ\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|๐Ÿ‡ฒ\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|๐Ÿ‡ณ\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|๐Ÿ‡ด๐Ÿ‡ฒ|๐Ÿ‡ต\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|๐Ÿ‡ถ๐Ÿ‡ฆ|๐Ÿ‡ท\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|๐Ÿ‡ธ\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|๐Ÿ‡น\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|๐Ÿ‡บ\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|๐Ÿ‡ป\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|๐Ÿ‡ผ\ud83c[\uddeb\uddf8]|๐Ÿ‡ฝ๐Ÿ‡ฐ|๐Ÿ‡พ\ud83c[\uddea\uddf9]|๐Ÿ‡ฟ\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedd-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude74\ude78-\ude7c\ude80-\ude86\ude90-\udeac\udeb0-\udeba\udec0-\udec2\uded0-\uded9\udee0-\udee7]|[โฉ-โฌโฐโณโ™พโ›Žโœ…โœจโŒโŽโ“-โ•โž•-โž—โžฐโžฟ๎”Š])|๏ธ)"}}]); +//# sourceMappingURL=110.392baae5965bb16e7063.bundle.js.map \ No newline at end of file diff --git a/public/110.d2d030648acd67138f89.bundle.js.map b/public/110.392baae5965bb16e7063.bundle.js.map similarity index 99% rename from public/110.d2d030648acd67138f89.bundle.js.map rename to public/110.392baae5965bb16e7063.bundle.js.map index 1d0ec178..3c9facf7 100644 --- a/public/110.d2d030648acd67138f89.bundle.js.map +++ b/public/110.392baae5965bb16e7063.bundle.js.map @@ -1 +1 @@ -{"version":3,"file":"110.d2d030648acd67138f89.bundle.js","mappings":"kHAaO,MAAMA,EAAe,CAAC,mBAAoB,qBAE3CC,EAAUC,KAAKC,IAAI,EAAgC,QAA7B,EAAAC,UAAUC,2BAAmB,QAAI,GAEvDC,EAAM,CACVC,GAAI,QACJC,KAAM,mCACNC,QAAS,QACTC,YAAa,cACbC,MAAO,IACPC,gBAAiB,QACjBC,SAAU,OACVC,aAAc,KACdC,QAASf,EACTgB,SAAU,EACVC,aAAcjB,EAAakB,SAASC,SAASC,UAC7CC,OAAQ,IACRpB,UACAqB,cAAerB,GAGdK,EAAIW,eACLX,EAAIC,GAAK,KACTD,EAAIE,KAAO,oCAGb,S,kCC9BA,MA8BA,EA9ByG,CACvGe,KAAM,OACNd,QAAS,EACTe,OAAQ,CAAC,CACPD,KAAM,WACL,CACDA,KAAM,eACL,CACDA,KAAM,SACL,CACDA,KAAM,SACL,CACDA,KAAM,WAaL,CACDA,KAAM,a,gDCtBK,SAASE,EAA6CC,EAAyBC,EAAmB,IAC3GC,MAAMC,QAAQH,KAChBA,EAAY,CAACA,IAGf,MAAMI,GAAe,OAAiBH,GAEtC,OADa,IAAII,KAAKL,EAAW,CAACM,KAAMF,GAE1C,C,iBCTe,SAASG,EAAiBN,GACvC,OAgByB,IAhBtB,CACD,aACA,YACA,YACA,gBACA,aACA,YACA,YACA,aACA,kBACA,YACA,aACA,YACA,YACA,mBACA,mBACAO,QAAQP,GACD,2BAGFA,CACT,C,iCClCe,SAASQ,KAAiBC,GACvC,MAAMC,EAASD,EAAKE,QAAO,CAACC,EAAKC,IAAMD,GAAQC,EAAkBC,YAAeD,EAAiBH,SAAS,GAEpGK,EAAM,IAAIC,WAAWN,GAE3B,IAAIO,EAAa,EAMjB,OALAR,EAAKS,SAASC,IACZJ,EAAIK,IAAID,aAAaE,YAAc,IAAIL,WAAWG,GAAKA,EAAGF,GAC1DA,GAAeE,EAAkBL,YAAeK,EAAiBT,MAAM,IAGlEK,CACT,C,+DCWe,SAASO,IACtB,MAAMC,EAAsB,CAC1BC,aAAa,EACbC,YAAY,EAEZC,OAAQ,OACRC,UAAW,IAAIlB,KACbc,EAAeK,WAAanB,EAC5Bc,EAAeM,UAAUX,SAASY,GAAkBA,KAAYrB,IAAM,EAGxEoB,UAAW,GACXE,kBAAoBD,IACfP,EAAeK,YAChBE,KAAYP,EAAeK,YAG7BL,EAAeM,UAAUG,KAAKF,EAAS,GAIrCG,EAAkC,IAAIC,SAAW,CAACC,EAASC,KAC/Db,EAAeY,QAAWE,IACrBJ,EAAST,aAAeS,EAASR,aAEpCQ,EAAST,aAAc,EACvBW,EAAQE,GAAM,EAGhBd,EAAea,OAAS,IAAI3B,KACvBwB,EAASR,YAAcQ,EAAST,cAEnCS,EAASR,YAAa,EACtBW,KAAU3B,GAAK,CAChB,IAoBH,OAXAwB,EAASK,MAAM,KAAMC,SAAQ,KAC3BN,EAASP,OAASO,EAASN,UAAYM,EAASL,WAAa,KAC7DK,EAASJ,UAAUnB,OAAS,EAEzBuB,EAASO,SACVP,EAASO,OAAS,I,IAItBC,OAAOC,OAAOT,EAAUV,GAEjBU,CACT,C,qDCvEO,MAAMU,EAAwD,oBAA7BC,0BAA4CC,gBAAgBD,yBACvFE,EAA6C,oBAAtBC,mBAAqCF,gBAAgBE,oBAAsBJ,EAClGK,EAAYF,GAAiBH,EAUpCM,EAAc,CAACC,KAAwDzC,KAC3E,IAEEyC,EAASD,eAAexC,E,CACxB,MAAM0C,GACNC,QAAQC,MAAM,8BAA+BF,EAAK1C,E,GAIhD6C,EAAsB,CAACC,KAAiB9C,KAhBpCoC,KACPW,QACAC,SAAS,CAACC,qBAAqB,EAAOrD,KAAM,WAe1BsD,MAAM9B,IACnBA,EAAUnB,QAKdmB,EAAU+B,MAAML,EAAM,GAAK,GAAGrC,SAASgC,IACrCD,EAAYC,KAAazC,EAAK,GAC9B,GACF,EASyBkC,GAAoBW,EAAoBO,KAAK,MAAM,GACvDlB,GAAoBW,EAAoBO,KAAK,MAAM,E,gBChD7D,SAASC,IAAQ,C,iCCAjB,SAASC,EAAQC,GAE9B,GAAW,OAARA,GAAgC,iBAAV,EACvB,OAAOA,EAIT,GAAGA,aAAeC,KAChB,OAAO,IAAIA,KAAKD,EAAIE,WAItB,GAAGjE,MAAMC,QAAQ8D,GAGf,OADqBA,EAAIG,KAAKC,GAAOL,EAAKK,KAI5C,GAAG/C,YAAYgD,OAAOL,GAEpB,OAAOA,EAAIJ,QAKb,MAAMU,EAAY,IAAIN,EAAIO,YAC1B,IAAI,IAAIC,KAAQR,EACXA,EAAIS,eAAeD,KACpBF,EAAUE,GAAQT,EAAKC,EAAIQ,KAG/B,OAAOF,CACT,C,iCChCe,SAASI,EAAUC,EAAQC,GACxC,MAAMC,EAAKpC,OAAOqC,KAAMC,SAAYJ,EACpC,OAAOA,GAAKC,GAAY,WAAPG,GAAmBA,WADeH,EAEjDC,EAAGF,GAAGjE,SAAWmE,EAAGD,GAAGlE,QACrBmE,EAAGF,GAAGK,OAAOC,GAAQP,EAAUC,EAAEM,GAAML,EAAEK,MACxCN,IAAMC,CACb,C,iCCNe,SAASM,EAAqCC,GAC3D,MAA0B,iBAAb,GAAoC,OAAXA,CACxC,C,iCCFe,SAASC,EAAcD,EAAWE,GAC/C,GAAGA,EACD,IAAI,MAAMC,KAAKD,OACQE,IAAlBF,EAAWC,KAEZH,EAAOG,GAAKD,EAAWC,IAK7B,OAAOH,CACT,C,yECRe,SAASK,EACtBC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,IAAI,MAAMb,KAAOQ,EAAY,CAC3B,MAAMM,EAAQD,EAAO,GAAGA,KAAQb,IAAQA,GACrCY,aAAW,EAAXA,EAAaG,IAAID,aAIVL,EAAcT,WAAiBQ,EAAWR,IAClDS,EAAcT,IAAO,OAAKQ,EAAWR,IACrCU,SAAAA,EAAYC,GAAeX,KACnB,OAASQ,EAAWR,KAC5BO,EAAmBC,EAAWR,GAAMS,EAAcT,GAAMU,EAAWC,GAAeX,EAAKY,EAAaE,G,CAG1G,C,wCCfAE,OAAOC,UAAUC,SAAW,WAC1B,QAASC,MAAMD,UACjB,EAEAF,OAAOC,UAAUG,SAAW,WAC1B,QAASD,MAAMC,UACjB,EAEAJ,OAAOC,UAAUI,SAAW,SAASC,GACnC,QAASH,MAAME,SAASC,EAC1B,EAEAN,OAAOC,UAAUM,SAAW,WAC1B,MAAO,SAASC,KAAKL,KAAKM,WAC5B,EAEAC,OAAOT,UAAUC,SAAW,WAC1B,OAAOC,IACT,EAEAO,OAAOT,UAAUG,SAAW,WAC1B,OAAO9H,KAAKqI,IAAIR,KAClB,EAEAO,OAAOT,UAAUI,SAAW,SAASC,GACnC,YAAkBhB,IAAXgB,EAAuBH,KAAkBG,GAAUhI,KAAKqI,IAAIR,MAAkBA,IACvF,EAEAO,OAAOT,UAAUM,SAAW,WAC1B,OAAO,CACT,EAEA,CACE,CAAC,SAAmB,KACpB,CAAC,YAAsB,MACvBtF,SAASmB,IACT,MAAMwE,EAAY5G,MAAMC,QAAQmC,GAASA,EAAM,GAAKA,EAC9CyE,EAAe7G,MAAMC,QAAQmC,GAASA,EAAM,GAAKA,EAEvD4D,OAAOC,UAAUW,GAAa,WAG5B,OAAOC,EAAaC,KAAK,KAAMX,KAAKM,WACtC,EAGAC,OAAOT,UAAUW,GAAa,WAG5B,OAAOC,EAAaC,KAAK,KAAMX,KACjC,CAAC,G,yCCrDH,MAAMY,EAAS,CACb,EAAG,IAAIhG,WAAW,GAClB,GAAI,IAAIiG,YAAY,GACpB,GAAI,IAAIC,YAAY,IAEf,SAASC,EAAeC,GAC7B,MAAMC,EAAQL,EAAOI,GAErB,OADAE,OAAOC,gBAAgBF,GAChBA,EAAM,EACf,CAEO,SAASG,IACd,MAAO,GAAKL,EAAe,IAAMA,EAAe,IAAM,QACxD,C,gDCPO,SAASM,EAAmBC,GACjC,MAAO,IAAIjH,IAVN,SAA+CkH,EAAYC,EAAqBF,GACrF,MAAMG,EAAOC,YAAYC,MAKzB,OAJCL,GAAOtE,SAAS4E,MAAK,SAAM,QAASJ,GACrCD,EAAQhE,MAAK,MACV+D,GAAOtE,SAAS4E,MAAK,SAAM,MAAOJ,EAAaE,YAAYC,MAAQF,EAAK,IAEpEF,CACT,CAIWM,IAAiBxH,EAAMiH,EAElC,C,iBChBe,SAASQ,EAAMC,GAC5B,OAAO,IAAIjG,SAAeC,IACxBiG,WAAWjG,EAASgG,EAAG,GAE3B,C,iCCAe,SAASE,EACtBC,EACAH,EACAI,GAAiB,GAEjB,IACIC,EACA/H,EAFAgI,EAA0B,KAI9B,MAAO,IAAIC,KACTF,GAAY,EACZ/H,EAAOiI,EAEHD,IACCF,IACDC,GAAY,EAEZF,KAAM7H,IAGRgI,EAAWE,aAAY,KACrB,IAAIH,EAGF,OAFAI,cAAcH,QACdA,EAAW,MAIbD,GAAY,EAEZF,KAAM7H,EAAK,GACV0H,G,CAGT,C,iCCrCe,SAASU,EAAsBC,GAC5C,OAAOA,EAAOC,OAAO,GAAGC,cAAgBF,EAAOlF,MAAM,EACvD,C,6FCSe,SAASqF,EAAeC,EAAkBC,GACvD,OAAOjH,QAAQqB,IAAI,CACjB,kBAAyB2F,EAASC,GAClC,kBAAqCD,EAASC,GAC9C,kBAA6BD,EAASC,KACrCxF,KAAK,IAAM,IAChB,C,iBCjBe,SAASyF,EAAMC,GAC5B,MAAMC,EAAIrF,KAAK8D,MACf,OAAOsB,EAAUC,EAAI,IAAO,EAAIA,CAClC,C,gECQe,SAASC,EAAmBC,GACzC,OCJa,SAAwBA,EAAmBC,GACxD,MAAMC,EAAI,IACV,GAAGF,EAAYE,EACb,OAAOF,EAGT,MAAMG,EAAI,IAAuB,EAC3BC,EAAOJ,EAAYG,EAKzB,OAJGC,IAASD,IACVH,GAAaI,EAAO,IAGHJ,EAAYE,GAAK,GACtC,CDTSG,CAAeL,EACxB,C,0CEbO,MAAMM,EAAuB,MACvBC,EAAoB,U,iBCDlB,SAASC,EAAUC,GAChC,OAAQA,EAAS,CACnB,C,gCCFe,SAASC,EAAOD,GAC7B,OAAQA,GAAU,CACpB,C,kFCgBO,MAAME,UAA0D,IAGrE5F,cACE6F,MAAM,UACNhE,KAAKiE,WAAa,CACpB,CAEOC,iBAA+C,OAACC,EAAM,KAAE9J,EAAI,SAAE+J,IAKnE,MAAMC,EAAU,CAACF,SAAQ9J,QACnBoB,EAAYuE,KAAKvE,UAAkB,OACzC,GAAGA,aAAS,EAATA,EAAWnB,OAAQ,CAGpB,IAAIgK,EAAc7I,EAAU,GAAGC,SAAS2I,GAKxC,OAJI,MAAeC,aAAkBxI,UACnCwI,EAASxI,QAAQC,QAAQuI,IAGpBA,C,CAMT,MAAMC,EAA2B,gBAAXJ,GAAuC,gBAAXA,EAChDnE,KAAKiE,WAAajE,KAAKiE,UAAY,GAAKjE,KAAKwE,UAAUlK,OACvD,EAEF,OAAO0F,KAAKyE,OAAO,SAAUJ,OAASlF,EAAWa,KAAKwE,UAAUD,GAAgBH,EAClF,CAEOM,aAA4CP,KAAc9J,GAC/D,OAAO2F,KAAKkE,gBAAgB,CAACC,SAAQ9J,QACvC,EAGF,MAAMsK,EAAoB,IAAIZ,EAC9B,OAAmB,uBAAmCY,GACtD,S,wFC7Ce,MAAMC,EAQnBzG,YAAoB0G,GAAA,KAAAA,OAAAA,EAJZ,KAAAC,YAAa,EAKhB,WACD9E,KAAK6E,QAAU,SAGdD,EAAuBG,SAASzK,SACjC0F,KAAK8E,WAAaF,EAAuBG,SAAS,GAAGD,YAGvD9E,KAAKgF,eACLJ,EAAuBG,SAASnJ,KAAKoE,KACvC,CAEQgF,e,MACN,OAAyB,QAAlB,EAAAhF,KAAKiF,qBAAa,QAAKjF,KAAKiF,cAAgBC,OAAOC,KAAKnF,KAAK6E,OACtE,CAEOO,OAAOC,GACZ,OAAOrF,KAAKsF,kBAAkBC,GAAUA,EAAMH,OAAO,IAAMC,IAC7D,CAEOG,YACL,OAAON,OAAOE,OAAOpF,KAAK6E,OAC5B,CAEOY,IAAIJ,GACT,OAAOrF,KAAKsF,kBAAkBC,GAAUA,EAAMG,MAAM,IAAML,IAC5D,CAEOM,KAAKN,EAAmBO,GAE7B,OAAO5F,KAAKsF,kBAAkBC,GAAUA,EAAMM,IAAI,IAAMR,EAAWO,IACrE,CAEOE,QAAQC,EAAkB5B,EAAmC,QAOlE,OAAOnE,KAAKyF,IAAIM,GAAUxI,MAAMqI,IAC9B,IAAIA,EAEF,MAAM,OAAU,kBAOlB,OAJgBA,EAASzB,IAIX,GAElB,CAEO6B,SAASD,EAAkBE,GAE3BA,aAAgBjM,OACnBiM,GAAO,OAAcA,IAGvB,MAAML,EAAW,IAAIM,SAASD,EAAM,CAClCE,QAAS,CACP,iBAAkB,GAAKF,EAAKG,QAIhC,OAAOpG,KAAK2F,KAAKI,EAAUH,GAAUrI,MAAK,IAAM0I,GAClD,CAEOX,iBAAoB5J,GACzB,OAAIsE,KAAK8E,WAIF,IAAIhJ,SAAW,CAAMC,EAASC,KAAW,O,EAAD,K,OAAA,E,EAAA,YAC7C,IAAIqK,GAAW,EACf,MAAMC,EAAUtE,YAAW,KACzBhG,IAEAqK,GAAW,CAAI,GACd,MAEH,IACE,MAAMd,QAAcvF,KAAKgF,eACzB,IAAIO,EAGF,MAFAvF,KAAK8E,YAAa,EAClB9E,KAAKiF,mBAAgB9F,EACf,YAGR,MAAMoH,QAAY7K,EAAS6J,GAE3B,GAAGc,EAAU,OACbtK,EAAQwK,E,CACR,MAAMxJ,GACNf,EAAOe,E,CAGTyJ,aAAaF,EACf,E,YAzB+C,K,6QAyB7C,IA5BOxK,QAAQE,QAAO,OAAU,mBA6BpC,CAEOyK,eAAeV,EAAkBW,EAAkB9M,GACxD,MAAO,CACLiC,UAAU,SACV8K,UAAW,IACM,IAAI,IAAa/M,EAAU8M,GAAWT,GAC5CjG,KAAKgG,SAASD,EAAUE,GAAM/J,OAAM,IAAM+J,MAMzD,CAEOW,qBAAqB9D,EAAkBC,GAC5C,OAAOjH,QAAQqB,IAAI6C,KAAK+E,SAAShH,KAAK8I,IAGpC,GAFAA,EAAQ/B,WAAahC,EAEjBC,EAIJ,OAAID,OAAJ,EACS+D,EAAQrB,W,IAGrB,EAvIe,EAAAT,SAAqC,E,gDCRvC,MAAM+B,EAGnB3I,YACUvE,EACAwM,EACAW,GAFA,KAAAnN,SAAAA,EACA,KAAAwM,KAAAA,EACA,KAAAW,iBAAAA,EAER/G,KAAKgH,MAAQ,IAAIpM,WAAWwL,EAC9B,CAEaa,MAAMC,EAAkBC,G,qCAEnC,MAAMC,EAAYD,EAASD,EAAKxM,WAChC,GAAG0M,EAAYpH,KAAKgH,MAAMtM,WAAY,CACpC,MAAM2M,EAAW,IAAIzM,WAAWwM,GAChCC,EAASrM,IAAIgF,KAAKgH,MAAO,GACzBhH,KAAKgH,MAAQK,C,CAGfrH,KAAKgH,MAAMhM,IAAIkM,EAAMC,EACvB,E,+RAEOG,WACLtH,KAAKgH,MAAQ,IAAIpM,UACnB,CAEO2M,KAAKnB,GACVpG,KAAKgH,MAAQhH,KAAKgH,MAAMxJ,MAAM,EAAG4I,EACnC,CAEOoB,SAASC,GAAgB,GAC9B,MAAMxB,GAAO,OAAcjG,KAAKgH,MAAOhH,KAAKpG,UAM5C,OAJG6N,GAAiBzH,KAAK+G,kBACvB/G,KAAK+G,iBAAiBd,GAGjBA,CACT,CAEOyB,WACL,OAAO1H,KAAKgH,KACd,CAEOW,aAAaC,GAClB5H,KAAKgH,MAAQY,CACf,E,gDC7CUC,E,wCAAZ,SAAYA,GACV,mBACA,qBACA,mBACA,iBACA,oBACD,CAND,CAAYA,IAAAA,EAAQ,KAQb,MAAMC,EAAa,CAACD,EAASE,KAAMF,EAASG,MAAOH,EAASI,KAAMJ,EAASK,IAAKL,EAASM,OAmB1FC,IAjBY,EAAAC,WAAa,EAAAC,YA8BlBC,EAaD,QAbCA,EAgBH,QAiCJC,EAA0I,CAC9I,CAAC,QAASX,EAASM,OACnB,CAAC,OAAQN,EAASK,KAClB,CAAC,OAAQL,EAASI,MAClB,CAAC,QAASJ,EAASG,OACnB,CAAC,SAAUH,EAASG,OACpB,CAAC,QAASH,EAASK,KACnB,CAAC,QAASL,EAASK,KACnB,CAAC,iBAAkBL,EAASK,KAC5B,CAAC,WAAYL,EAASK,MAIjB,SAASO,EAAOC,EAAgBzO,EAAiB4N,EAASK,IAAML,EAASI,KAAOJ,EAASG,MAAOW,GAAmB,EAAOC,EAAQ,IACvI,IAAIC,EACA,MAAUF,IACZ1O,EAAO4N,EAASG,OAGdI,EAEOQ,IACN,KAAmBA,EAAQL,EACtB,OAAeK,EAAQL,IAH/BK,EAAQ,GAMV,MAAME,EAAgBF,EACZA,EAAPA,EAAe,MAAMA,MACX,KAIb,MAAMtH,EAAc,YAAYjH,GAC9B,OAAOJ,EAAO4N,EAASK,KAAOlL,QAAQsE,IAAIsH,GAAO,SAAMF,KAA0CrO,EACnG,EAuBA,OArBAmO,EAAQ1N,SAAQ,EAAEqJ,EAAQ4E,MACxBzH,EAAI6C,GAAU,YAAY9J,GACxB,OAAOJ,EAAO8O,GAAW/L,QAAQmH,GAAQyE,GAAO,SAAMF,KAA0CrO,EAClG,CAAC,IAGHiH,EAAI0H,UAAY,SAASC,GACvBJ,EAAiBI,EACjBP,EAAS,IAAMO,EAAY,GAC7B,EAEA3H,EAAI0H,UAAUN,GAEdpH,EAAI4H,SAAW,SAASC,GACtBlP,EAAO6N,EAAWtK,MAAM,EAAG2L,EAAQ,GAAG5O,QAAO,CAACC,EAAKC,IAAMD,EAAMC,GAAG,EACpE,EAEA6G,EAAI8H,WAAa,SAASV,GACxB,OAAOD,EAAO,GAAGI,OAAoBH,IAAUzO,EAAM0O,EAAkBG,EACzE,EAEOxH,CACT,C,wDCxIe,MAAM+H,UAA0D,IAsB7ElL,cACE6F,MAAM,WAENqF,EAAmBC,SAAWtJ,KAE9B,OAAmB,wBAAoCA,KACzD,CAEO4G,qBACL,OAAO5G,KAAKsJ,QACd,E,8BC9CF1O,WAAWkF,UAAUyJ,OAAS,YAAYlP,GACxC,OAAO,OAAc2F,QAAS3F,EAChC,EAMAO,WAAWkF,UAAU0J,OAAS,WAC5B,MAAO,IAAIxJ,KAEb,EAEAlE,QAAQgE,UAAU3D,QAAUL,QAAQgE,UAAU3D,SAAW,SAA8B+F,GACrF,MAAMuH,EAAa/N,GAAwBI,QAAQC,QAAQmG,KAAM3E,KAAK7B,GACtE,OAAOsE,KAAKzC,MACV+G,GAAUmF,GAAU,IAAMnF,MAC1BoF,GAAUD,GAAU,IAAM3N,QAAQE,OAAO0N,MAE7C,C,gDCzBe,SAASC,EAAiBC,GACvC,OAAQA,EAAcA,EAAKlE,MAAM,MAAlB,IACjB,C,wDCkCe,MAAMmE,UAA2D,IAsB9E1L,cACE6F,MAAM,WAEN,OAAmB,wBAAoChE,KACzD,E,6EC/CF,MAAM8J,EAKJ3L,cAJQ,KAAAuK,OAAS,GACT,KAAAnD,MAA0B,CAAC,EAC3B,KAAAT,YAAa,EAGhB,WACD9E,KAAK0I,OAAS,KAElB,CAEOjD,IAA6B5G,EAAQkL,GAAW,GACrD,GAAG/J,KAAKuF,MAAMlH,eAAeQ,IAAQkL,EACnC,OAAO/J,KAAKuF,MAAM1G,GACb,GAAGmB,KAAK8E,WAAY,CACzB,IAAI7I,EACJ,IACEA,EAAQ+N,aAAaC,QAAQjK,KAAK0I,OAAU7J,E,CAC5C,MAAM9B,GACNiD,KAAK8E,YAAa,C,CAGpB,GAAa,OAAV7I,EACD,IACEA,EAAQiO,KAAKC,MAAMlO,E,CACnB,MAAMc,G,MAIRd,OAAQkD,EAGV,OAAOlD,C,CAIX,CAEOjB,IAAI4C,EAAuBwM,GAAY,GAC5C,IAAI,MAAMvL,KAAOjB,EACf,GAAGA,EAAIS,eAAeQ,GAAM,CAC1B,MAAM5C,EAAQ2B,EAAIiB,GAGlB,GAFAmB,KAAKuF,MAAM1G,GAAO5C,EAEf+D,KAAK8E,aAAesF,EACrB,IACE,MAAMC,EAAcH,KAAKI,UAAUrO,GACnC+N,aAAaO,QAAQvK,KAAK0I,OAAS7J,EAAKwL,E,CACxC,MAAMtN,GACNiD,KAAK8E,YAAa,C,EAK5B,CAEOM,OAAOvG,EAAoB2L,GAAY,GAE5C3L,EAAM,GAAMA,EAER2L,UACKxK,KAAKuF,MAAM1G,GAIpB,IACEmL,aAAaS,WAAWzK,KAAK0I,OAAU7J,E,CACvC,MAAM9B,G,CAIV,CA0BO2N,QACL,MAAMhM,EAAiB,CAAC,KAAM,qBAAsB,cAAe,YAAa,WAAY,WAC5F,IAAI,IAAIQ,EAAI,EAAGA,GAAK,IAAKA,EACvBR,EAAK9C,KAAK,KAAKsD,iBACfR,EAAK9C,KAAK,KAAKsD,cAGjB,IAAI,MAAML,KAAOH,EACfsB,KAAKoF,OAAOvG,GAAK,EAErB,CAEO8L,cAAc7H,EAAkBC,GAGrC,GAFA/C,KAAK8E,WAAahC,EAEdC,EAIJ,OAAID,EAGK9C,KAAKhF,IAAIgF,KAAKuF,YAFrBvF,KAAK0K,OAIT,EAgBa,MAAME,EAOnBzM,cACEyM,EAAuB7F,SAASnJ,KAAKoE,MAEjC,OACFA,KAAK6G,QAAU,IAAIiD,EAEvB,CAEce,MAAS5Q,KAAmDI,G,qCACxE,OAAG,KACY,kBACDoK,OAAO,oBAAqB,CAACxK,OAAMI,UAGjDA,EAAOR,MAAMiG,UAAUtC,MAAMmD,KAAKtG,GAG3B2F,KAAK6G,QAAQ5M,GAAM6Q,MAAM9K,KAAK6G,QAASxM,GAChD,E,+RAEOoL,IAA6B5G,EAAQkL,GAC1C,OAAO/J,KAAK6K,MAAkB,MAAOhM,EAAKkL,EAC5C,CAEO/O,IAAI4C,EAAuBwM,GAChC,OAAOpK,KAAK6K,MAAY,MAAOjN,EAAKwM,EACtC,CAEOhF,OAAOvG,EAAoB2L,GAChC,OAAOxK,KAAK6K,MAAY,SAAUhM,EAAK2L,EACzC,CAEOE,QACL,OAAO1K,KAAK6K,MAAY,QAC1B,CAEOF,cAAc7H,EAAkBC,GACrC,OAAO/C,KAAK6K,MAAY,gBAAiB/H,EAASC,EACpD,EA5Ce,EAAAgC,SAA0C,GC/I3D,MAAMgG,EAAiB,IAAIH,EAuB3B,gBAA4BG,EAC5B,S,mECtBA,MAAMC,UAAqB,IAQzB7M,cACE6F,MAAM,IAAgB,UACxB,EAGF,MAAMiH,EAAe,IAAID,EACzB,kBAA8BC,EAC9B,S,6XCTA,SAASvN,IAAQ,CAsBF,MAAMwN,EAuBnB/M,YAAoBgN,EAAeC,GAAf,KAAAD,GAAAA,EAAe,KAAAC,UAAAA,EAf3B,KAAA7F,MAA0B,CAAC,EAI3B,KAAA8F,YAA8E,IAAIC,IAGlF,KAAAC,UAAgC,IAAIC,IAEpC,KAAAC,cAAe,SAEf,KAAAC,aAAmC,IAAIF,IAEvC,KAAAG,gBAAiB,SAGvB3L,KAAK6G,QAAU,IAAI,IAAcsE,EAAIC,GAElCF,EAAWnG,SAASzK,OACrB0F,KAAK8E,WAAaoG,EAAWnG,SAAS,GAAGD,WAEzC9E,KAAK8E,YAAa,EAGpB9E,KAAK4L,eAAgB,EAErBV,EAAWnG,SAASnJ,KAAKoE,MAEzBA,KAAK6L,eAAgB,QAAS,IAAW,EAAD,gCACtC,MAAMhQ,EAAWmE,KAAKyL,aACtBzL,KAAKyL,cAAe,SAEpB,MAAMzQ,EAAMgF,KAAKuL,UACjB,GAAGvQ,EAAIoL,KAAM,CACX,MAAM1H,EAAO7E,MAAMiS,KAAK9Q,EAAI+Q,UAC5B/Q,EAAI0P,QAEJ,MAAMqB,EAASrN,EAAKX,KAAKc,GAAQmB,KAAKuF,MAAM1G,KAC5C,UAgBQmB,KAAK6G,QAAQlB,KAAKjH,EAAMqN,E,CAE9B,MAAMC,GAENhP,QAAQC,MAAM,mBAAoB+O,EAAGtN,EAAMqN,E,EAI/ClQ,EAASE,UAENf,EAAIoL,MACLpG,KAAK6L,eAET,KA9EkB,IA8EA,GAElB7L,KAAKiM,iBAAkB,QAAS,IAAW,EAAD,gCACxC,MAAMpQ,EAAWmE,KAAK2L,eACtB3L,KAAK2L,gBAAiB,SAEtB,MAAM3Q,EAAMgF,KAAK0L,aACjB,GAAG1Q,EAAIoL,KAAM,CACX,MAAM1H,EAAO7E,MAAMiS,KAAK9Q,EAAI+Q,UAC5B/Q,EAAI0P,QAEJ,UAWQ1K,KAAK6G,QAAQzB,OAAO1G,E,CAC1B,MAAMsN,GACNhP,QAAQC,MAAM,sBAAuB+O,EAAGtN,E,EAI5C7C,EAASE,UAENf,EAAIoL,MACLpG,KAAKiM,iBAET,KA/GkB,IA+GA,GAElBjM,KAAKkM,cAAe,QAAS,IAAW,EAAD,gCACrC,MAAMxN,EAAO7E,MAAMiS,KAAK9L,KAAKqL,YAAY3M,QAGzCsB,KAAK6G,QAAQpB,IAAI/G,GAAkBnB,MAAMwO,IACvC,IAAI,IAAI7M,EAAI,EAAG5E,EAASoE,EAAKpE,OAAQ4E,EAAI5E,IAAU4E,EAAG,CACpD,MAAML,EAAMH,EAAKQ,GACXrD,EAAWmE,KAAKqL,YAAY5F,IAAI5G,GACnChD,IAEDA,EAASE,QAAQiE,KAAKuF,MAAM1G,GAAOkN,EAAO7M,IAC1Cc,KAAKqL,YAAYjG,OAAOvG,G,KAK1B5B,IACmC,IAAIuO,IAAI,CAAC,iBAAkB,oBAC/C5L,IAAI3C,EAAMhD,QACzB+F,KAAK8E,YAAa,EAClB9H,QAAQC,MAAM,mBAAoBA,EAAOyB,EAAM0M,IAGjD,IAAI,IAAIlM,EAAI,EAAG5E,EAASoE,EAAKpE,OAAQ4E,EAAI5E,IAAU4E,EAAG,CACpD,MAAML,EAAMH,EAAKQ,GACXrD,EAAWmE,KAAKqL,YAAY5F,IAAI5G,GACnChD,IAEDA,EAASE,aAAQoD,GACjBa,KAAKqL,YAAYjG,OAAOvG,G,KAG3B1C,SAAQ,KACN6D,KAAKqL,YAAYjF,MAClBpG,KAAKkM,c,GAGX,KAtJkB,IAsJA,EACpB,CAEOC,cACL,OAAOnM,KAAK8E,UACd,CAEOsH,WACL,OAAOpM,KAAKuF,KACd,CAEO8G,aAAsCxN,GAC3C,OAAOmB,KAAKuF,MAAM1G,EACpB,CAEOyN,WAAWzN,EAAoB5C,GACpC,OAAO+D,KAAKuF,MAAM1G,GAAO5C,CAC3B,CAEawJ,IAA6B5G,EAAQkL,GAAW,G,yCAC3D,GAAG/J,KAAKuF,MAAMlH,eAAeQ,IAAQkL,EACnC,OAAO/J,KAAKqM,aAAaxN,GACpB,GAAGmB,KAAK8E,WAAY,CACzB,MAAMyH,EAAIvM,KAAKqL,YAAY5F,IAAI5G,GAC/B,GAAG0N,EAAG,OAAOA,EAEb,MAAMC,GAAI,SAKV,OAJAxM,KAAKqL,YAAYrQ,IAAI6D,EAAK2N,GAE1BxM,KAAKkM,eAEEM,C,CAIX,G,CAEOC,SACL,OAAOzM,KAAK6G,QAAQ4F,SAASvQ,OAAM,IAAM,IAC3C,CAEOlB,IAAI4C,EAAuBwM,GAAY,GAG5C,MAAMsC,EAAgB1M,KAAK8E,aAAesF,IAAcpK,KAAK4L,cAC7D,IAAI,MAAM/M,KAAOjB,EACf,GAAGA,EAAIS,eAAeQ,GAAM,CAC1B,MAAM5C,EAAQ2B,EAAIiB,GAClBmB,KAAKsM,WAAWzN,EAAK5C,GAgBlByQ,IACD1M,KAAKuL,UAAUoB,IAAI9N,GACnBmB,KAAK0L,aAAatG,OAAOvG,GACzBmB,KAAK6L,gB,CAKX,OAAOa,EAAgB1M,KAAKyL,aAAe3P,QAAQC,SACrD,CAEOqJ,OAAOvG,EAAoB2L,GAAY,GAkB5C,OAZA3L,EAAM,GAAMA,EAER2L,UACKxK,KAAKuF,MAAM1G,GAGjBmB,KAAK8E,aACN9E,KAAKuL,UAAUnG,OAAOvG,GACtBmB,KAAK0L,aAAaiB,IAAI9N,GACtBmB,KAAKiM,mBAGAjM,KAAK8E,WAAa9E,KAAK2L,eAAiB7P,QAAQC,SACzD,CAEO2O,MAAMF,GAAY,GACvB,IAAIA,EACF,IAAI,MAAMtL,KAAKc,KAAKuF,aACXvF,KAAKuF,MAAMrG,GAItB,OAAOc,KAAK6G,QAAQ6D,QAAQxO,MAAMwB,EACpC,CAEOkJ,qBAAqB9D,EAAkBC,GAC5C,OAAOjH,QAAQqB,IAAI6C,KAAK+E,SAAShH,KAAK8I,IAGpC,GAFAA,EAAQ/B,WAAahC,EAEjB,MAAcC,EAIlB,OAAID,EAOK+D,EAAQ7L,IAAI6L,EAAQtB,QAN3BsB,EAAQ0E,UAAUb,QAClB7D,EAAQ6E,aAAahB,QACrB7D,EAAQwE,YAAYvQ,SAASe,GAAaA,EAASE,aAAQoD,KAC3D0H,EAAQwE,YAAYX,QACb7D,EAAQ6D,OAAM,G,KAIrBxO,MAAMwB,EACZ,CAEOkJ,oBAA6ClL,EAAqBkR,GACvE5M,KAAK+E,SAASjK,SAAS+L,GAAYA,EAAQ+E,eAAgB,IAC3D,IACElQ,G,CACA,MAAMqB,GACNC,QAAQC,MAAM,+BAAgCF,E,CAEhDiD,KAAK+E,SAASjK,SAAS+L,GAAYA,EAAQ+E,eAAgB,GAC7D,EArRe,EAAA7G,SAA6C,GA4R9D,OAAmB,gBAA4BmG,E,kCCvU/C,MACA,EADuB,gwN","sources":["webpack://tweb/./src/config/app.ts","webpack://tweb/./src/config/databases/state.ts","webpack://tweb/./src/helpers/blob/blobConstruct.ts","webpack://tweb/./src/helpers/blob/blobSafeMimeType.ts","webpack://tweb/./src/helpers/bytes/bufferConcats.ts","webpack://tweb/./src/helpers/cancellablePromise.ts","webpack://tweb/./src/helpers/context.ts","webpack://tweb/./src/helpers/noop.ts","webpack://tweb/./src/helpers/object/copy.ts","webpack://tweb/./src/helpers/object/deepEqual.ts","webpack://tweb/./src/helpers/object/isObject.ts","webpack://tweb/./src/helpers/object/safeAssign.ts","webpack://tweb/./src/helpers/object/validateInitObject.ts","webpack://tweb/./src/helpers/peerIdPolyfill.ts","webpack://tweb/./src/helpers/random.ts","webpack://tweb/./src/helpers/recordPromise.ts","webpack://tweb/./src/helpers/schedulers/pause.ts","webpack://tweb/./src/helpers/schedulers/throttle.ts","webpack://tweb/./src/helpers/string/capitalizeFirstLetter.ts","webpack://tweb/./src/helpers/toggleStorages.ts","webpack://tweb/./src/helpers/tsNow.ts","webpack://tweb/./src/lib/appManagers/utils/messageId/getServerMessageId.ts","webpack://tweb/./src/lib/appManagers/utils/messageId/clearMessageId.ts","webpack://tweb/./src/lib/appManagers/utils/messageId/index.ts","webpack://tweb/./src/lib/appManagers/utils/peers/isAnyChat.ts","webpack://tweb/./src/lib/appManagers/utils/peers/isUser.ts","webpack://tweb/./src/lib/crypto/cryptoMessagePort.ts","webpack://tweb/./src/lib/files/cacheStorage.ts","webpack://tweb/./src/lib/files/memoryWriter.ts","webpack://tweb/./src/lib/logger.ts","webpack://tweb/./src/lib/mtproto/mtprotoMessagePort.ts","webpack://tweb/./src/lib/polyfill.ts","webpack://tweb/./src/lib/richTextProcessor/matchUrlProtocol.ts","webpack://tweb/./src/lib/serviceWorker/serviceMessagePort.ts","webpack://tweb/./src/lib/localStorage.ts","webpack://tweb/./src/lib/sessionStorage.ts","webpack://tweb/./src/lib/stateStorage.ts","webpack://tweb/./src/lib/storage.ts","webpack://tweb/./src/vendor/emoji/regex.ts"],"sourcesContent":["/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {DcId} from '../types';\n\nexport const MAIN_DOMAINS = ['web.telegram.org', 'webk.telegram.org'];\n\nconst threads = Math.min(4, navigator.hardwareConcurrency ?? 4);\n\nconst App = {\n id: +process.env.API_ID,\n hash: process.env.API_HASH,\n version: process.env.VERSION,\n versionFull: process.env.VERSION_FULL,\n build: +process.env.BUILD,\n langPackVersion: '0.9.3',\n langPack: 'webk',\n langPackCode: 'en',\n domains: MAIN_DOMAINS,\n baseDcId: 2 as DcId,\n isMainDomain: MAIN_DOMAINS.includes(location.hostname),\n suffix: 'K',\n threads,\n cryptoWorkers: threads\n};\n\nif(App.isMainDomain) { // use Webogram credentials then\n App.id = 2496;\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\n}\n\nexport default App;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Database} from '.';\nimport type {IDBIndex} from '../../lib/files/idb';\n\nconst DATABASE_STATE: Database<'session' | 'stickerSets' | 'users' | 'chats' | 'messages' | 'dialogs'> = {\n name: 'tweb',\n version: 7,\n stores: [{\n name: 'session'\n }, {\n name: 'stickerSets'\n }, {\n name: 'users'\n }, {\n name: 'chats'\n }, {\n name: 'dialogs'\n // indexes: [\n // ...(new Array(20 + 2).fill(0)).map((_, idx) => {\n // const name = `index_${idx}`;\n // const index: IDBIndex = {\n // indexName: name,\n // keyPath: name,\n // objectParameters: {}\n // };\n\n // return index\n // })\n // ]\n }, {\n name: 'messages'\n }]\n};\n\nexport default DATABASE_STATE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport blobSafeMimeType from './blobSafeMimeType';\n\nexport default function blobConstruct(blobParts: Array | T, mimeType: string = ''): Blob {\n if(!Array.isArray(blobParts)) {\n blobParts = [blobParts];\n }\n\n const safeMimeType = blobSafeMimeType(mimeType);\n const blob = new Blob(blobParts, {type: safeMimeType});\n return blob;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// https://www.iana.org/assignments/media-types/media-types.xhtml\nexport default function blobSafeMimeType(mimeType: string) {\n if([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp',\n 'image/bmp',\n 'video/mp4',\n 'video/webm',\n 'video/quicktime',\n 'audio/ogg',\n 'audio/mpeg',\n 'audio/mp4',\n 'audio/wav', // though it is not in list\n 'application/json',\n 'application/pdf'\n ].indexOf(mimeType) === -1) {\n return 'application/octet-stream';\n }\n\n return mimeType;\n}\n","export default function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\n\n const tmp = new Uint8Array(length);\n\n let lastLength = 0;\n args.forEach((b) => {\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\n });\n\n return tmp/* .buffer */;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from './noop';\n\nexport interface CancellablePromise extends Promise {\n resolve?: (value: T) => void,\n reject?: (...args: any[]) => void,\n cancel?: (reason?: any) => void,\n\n notify?: (...args: any[]) => void,\n notifyAll?: (...args: any[]) => void,\n lastNotify?: any,\n listeners?: Array<(...args: any[]) => void>,\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\n\n isFulfilled?: boolean,\n isRejected?: boolean\n}\n\nexport default function deferredPromise() {\n const deferredHelper: any = {\n isFulfilled: false,\n isRejected: false,\n\n notify: () => {},\n notifyAll: (...args: any[]) => {\n deferredHelper.lastNotify = args;\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\n },\n\n listeners: [],\n addNotifyListener: (callback: (...args: any[]) => void) => {\n if(deferredHelper.lastNotify) {\n callback(...deferredHelper.lastNotify);\n }\n\n deferredHelper.listeners.push(callback);\n }\n };\n\n const deferred: CancellablePromise = new Promise((resolve, reject) => {\n deferredHelper.resolve = (value: T) => {\n if(deferred.isFulfilled || deferred.isRejected) return;\n\n deferred.isFulfilled = true;\n resolve(value);\n };\n\n deferredHelper.reject = (...args: any[]) => {\n if(deferred.isRejected || deferred.isFulfilled) return;\n\n deferred.isRejected = true;\n reject(...args);\n };\n });\n\n // @ts-ignore\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\n const n = deferredPromise>();\n\n }; */\n\n deferred.catch(noop).finally(() => {\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\n deferred.listeners.length = 0;\n\n if(deferred.cancel) {\n deferred.cancel = noop;\n }\n });\n\n Object.assign(deferred, deferredHelper);\n\n return deferred;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// ะฒ SW ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ัั€ะฐะทัƒ ะดะฒะต ะฟะตั€ะตะผะตะฝะฝั‹ั… TRUE\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\n\nexport const getWindowClients = () => {\n return (self as any as ServiceWorkerGlobalScope)\n .clients\n .matchAll({includeUncontrolled: false, type: 'window'});\n};\n\nexport const getLastWindowClient = () => getWindowClients().then((windowClients) => windowClients.slice(-1)[0]);\n\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\n try {\n // @ts-ignore\n listener.postMessage(...args);\n } catch(err) {\n console.error('[worker] postMessage error:', err, args);\n }\n};\n\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\n getWindowClients().then((listeners) => {\n if(!listeners.length) {\n // console.trace('no listeners?', self, listeners);\n return;\n }\n\n listeners.slice(all ? 0 : -1).forEach((listener) => {\n postMessage(listener, ...args);\n });\n });\n};\n\nconst notifyWorker = (...args: any[]) => {\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\n};\n\nconst noop = () => {};\n\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\n","export default function noop() {}\n","export default function copy(obj: T): T {\n // in case of premitives\n if(obj === null || typeof(obj) !== 'object') {\n return obj;\n }\n\n // date objects should be\n if(obj instanceof Date) {\n return new Date(obj.getTime()) as any;\n }\n\n // handle Array\n if(Array.isArray(obj)) {\n // @ts-ignore\n const clonedArr: T = obj.map((el) => copy(el)) as any as T;\n return clonedArr;\n }\n\n if(ArrayBuffer.isView(obj)) {\n // @ts-ignore\n return obj.slice();\n }\n\n // lastly, handle objects\n // @ts-ignore\n const clonedObj = new obj.constructor();\n for(var prop in obj) {\n if(obj.hasOwnProperty(prop)) {\n clonedObj[prop] = copy(obj[prop]);\n }\n }\n return clonedObj;\n}\n","export default function deepEqual(x: any, y: any): boolean {\n const ok = Object.keys, tx = typeof x, ty = typeof y;\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key) => deepEqual(x[key], y[key]))\n ) : (x === y);\n}\n","export default function isObject>(object: any): object is T {\n return typeof(object) === 'object' && object !== null;\n}\n","export default function safeAssign(object: T, fromObject: any) {\n if(fromObject) {\n for(const i in fromObject) {\n if(fromObject[i] !== undefined) {\n // @ts-ignore\n object[i] = fromObject[i];\n }\n }\n }\n\n return object;\n}\n","import copy from './copy';\nimport isObject from './isObject';\n\nexport default function validateInitObject(\n initObject: any,\n currentObject: any,\n onReplace?: (key: string) => void,\n previousKey?: string,\n ignorePaths?: Set,\n path?: string\n) {\n for(const key in initObject) {\n const _path = path ? `${path}.${key}` : key;\n if(ignorePaths?.has(_path)) {\n continue;\n }\n\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\n currentObject[key] = copy(initObject[key]);\n onReplace?.(previousKey || key);\n } else if(isObject(initObject[key])) {\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key, ignorePaths, _path);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport isAnyChat from '../lib/appManagers/utils/peers/isAnyChat';\nimport isUser from '../lib/appManagers/utils/peers/isUser';\n\nString.prototype.toUserId = function() {\n return (+this).toUserId();\n};\n\nString.prototype.toChatId = function() {\n return (+this).toChatId();\n};\n\nString.prototype.toPeerId = function(isChat?: boolean) {\n return (+this).toPeerId(isChat);\n};\n\nString.prototype.isPeerId = function() {\n return /^[\\d-]/.test(this.toString());\n};\n\nNumber.prototype.toUserId = function() {\n return this as any;\n};\n\nNumber.prototype.toChatId = function() {\n return Math.abs(this as any);\n};\n\nNumber.prototype.toPeerId = function(isChat?: boolean) {\n return isChat === undefined ? this as number : (isChat ? -Math.abs(this as number) : this as number);\n};\n\nNumber.prototype.isPeerId = function() {\n return true;\n};\n\n[\n ['isUser' as const, isUser],\n ['isAnyChat' as const, isAnyChat]\n].forEach((value) => {\n const newMethod = Array.isArray(value) ? value[0] : value;\n const originMethod = Array.isArray(value) ? value[1] : value;\n // @ts-ignore\n String.prototype[newMethod] = function() {\n // @ts-ignore\n // eslint-disable-next-line no-useless-call\n return originMethod.call(null, this.toString());\n };\n\n // @ts-ignore\n Number.prototype[newMethod] = function() {\n // @ts-ignore\n // eslint-disable-next-line no-useless-call\n return originMethod.call(null, this);\n };\n});\n\ndeclare global {\n interface String {\n toUserId(): UserId;\n toChatId(): ChatId;\n toPeerId(isChat?: boolean): PeerId;\n isPeerId(): this is string;\n\n isUser(): boolean;\n isAnyChat(): boolean;\n }\n\n interface Number {\n toUserId(): UserId;\n toChatId(): ChatId;\n toPeerId(isChat?: boolean): PeerId;\n isPeerId(): this is PeerId;\n\n isUser(): boolean;\n isAnyChat(): boolean;\n }\n}\n\nexport {};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1)\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","import {logger} from '../lib/logger';\nimport dT from './dT';\n\nexport function recordPromise>(promise: T, description: string, log?: ReturnType | Console) {\n const perf = performance.now();\n (log || console).warn(dT(), 'start', description);\n promise.then(() => {\n (log || console).warn(dT(), 'end', description, performance.now() - perf);\n });\n return promise;\n}\n\nexport function recordPromiseBound(log: ReturnType | Console) {\n return (...args: [Parameters[0], Parameters[1]]) => {\n return recordPromise(...args, log);\n };\n}\n","export default function pause(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","// * Jolly Cobra's schedulers\n\nimport {AnyToVoidFunction} from '../../types';\n\nexport default function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true\n) {\n let interval: number | null = null;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if(!interval) {\n if(shouldRunFirst) {\n isPending = false;\n // @ts-ignore\n fn(...args);\n }\n\n interval = setInterval(() => {\n if(!isPending) {\n clearInterval(interval!);\n interval = null;\n return;\n }\n\n isPending = false;\n // @ts-ignore\n fn(...args);\n }, ms) as any;\n }\n };\n}\n","export default function capitalizeFirstLetter(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CacheStorageController from '../lib/files/cacheStorage';\nimport AppStorage from '../lib/storage';\nimport sessionStorage from '../lib/sessionStorage';\nimport noop from './noop';\n\nexport default function toggleStorages(enabled: boolean, clearWrite: boolean) {\n return Promise.all([\n AppStorage.toggleStorage(enabled, clearWrite),\n CacheStorageController.toggleStorage(enabled, clearWrite),\n sessionStorage.toggleStorage(enabled, clearWrite)\n ]).then(noop, noop);\n}\n","export default function tsNow(seconds?: true) {\n const t = Date.now();\n return seconds ? t / 1000 | 0 : t;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport clearMessageId from './clearMessageId';\n\n/**\n * * will ignore outgoing offset\n */\nexport default function getServerMessageId(messageId: number) {\n return clearMessageId(messageId, true);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MESSAGE_ID_OFFSET, MESSAGE_ID_INCREMENT} from '.';\n\nexport default function clearMessageId(messageId: number, toServer?: boolean) {\n const q = MESSAGE_ID_OFFSET;\n if(messageId < q) { // id 0 -> mid 0xFFFFFFFF, so 0xFFFFFFFF must convert to 0\n return messageId;\n }\n\n const l = MESSAGE_ID_INCREMENT - 1;\n const used = messageId & l;\n if(used !== l) {\n messageId -= used + 1;\n }\n\n return toServer ? (messageId - q) / MESSAGE_ID_INCREMENT : messageId;\n}\n","export const MESSAGE_ID_INCREMENT = 0x10000;\nexport const MESSAGE_ID_OFFSET = 0xFFFFFFFF;\n","export default function isAnyChat(peerId: PeerId) {\n return +peerId < 0;\n}\n","export default function isUser(peerId: PeerId) {\n return +peerId >= 0;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {CryptoMethods} from './crypto_methods';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {Awaited} from '../../types';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IS_WORKER} from '../../helpers/context';\n\ntype CryptoEvent = {\n invoke: (payload: {method: T, args: Parameters}) => ReturnType,\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n terminate: () => void\n};\n\nexport class CryptoMessagePort extends SuperMessagePort {\n private lastIndex: number;\n\n constructor() {\n super('CRYPTO');\n this.lastIndex = -1;\n }\n\n public invokeCryptoNew({method, args, transfer}: {\n method: T,\n args: Parameters,\n transfer?: Transferable[]\n }): Promise>> {\n const payload = {method, args};\n const listeners = this.listeners['invoke'];\n if(listeners?.length) { // already in worker\n // try {\n // @ts-ignore\n let result: any = listeners[0].callback(payload);\n if(!IS_WORKER && !(result instanceof Promise)) {\n result = Promise.resolve(result);\n }\n\n return result;\n // } catch(err) {\n // return Promise.reject(err);\n // }\n }\n\n const sendPortIndex = method === 'aes-encrypt' || method === 'aes-decrypt' ?\n this.lastIndex = (this.lastIndex + 1) % this.sendPorts.length :\n 0;\n // @ts-ignore\n return this.invoke('invoke', payload, undefined, this.sendPorts[sendPortIndex], transfer);\n }\n\n public invokeCrypto(method: T, ...args: Parameters): Promise>> {\n return this.invokeCryptoNew({method, args});\n }\n}\n\nconst cryptoMessagePort = new CryptoMessagePort();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.cryptoMessagePort = cryptoMessagePort);\nexport default cryptoMessagePort;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../config/modes';\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport MemoryWriter from './memoryWriter';\nimport FileManager from './memoryWriter';\nimport FileStorage from './fileStorage';\nimport makeError from '../../helpers/makeError';\nimport deferredPromise from '../../helpers/cancellablePromise';\n\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\n\nexport default class CacheStorageController implements FileStorage {\n private static STORAGES: CacheStorageController[] = [];\n private openDbPromise: Promise;\n\n private useStorage = true;\n\n // private log: ReturnType = logger('CS');\n\n constructor(private dbName: CacheStorageDbName) {\n if(Modes.test) {\n this.dbName += '_test';\n }\n\n if(CacheStorageController.STORAGES.length) {\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\n }\n\n this.openDatabase();\n CacheStorageController.STORAGES.push(this);\n }\n\n private openDatabase(): Promise {\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\n }\n\n public delete(entryName: string) {\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\n }\n\n public deleteAll() {\n return caches.delete(this.dbName);\n }\n\n public get(entryName: string) {\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\n }\n\n public save(entryName: string, response: Response) {\n // return new Promise((resolve) => {}); // DEBUG\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\n }\n\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise {\n /* if(method === 'blob') {\n return Promise.reject();\n } */\n\n // const str = `get fileName: ${fileName}`;\n // console.time(str);\n return this.get(fileName).then((response) => {\n if(!response) {\n // console.warn('getFile:', response, fileName);\n throw makeError('NO_ENTRY_FOUND');\n }\n\n const promise = response[method]();\n // promise.then(() => {\n // console.timeEnd(str);\n // });\n return promise;\n });\n }\n\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // return Promise.resolve(blobConstruct([blob]));\n if(!(blob instanceof Blob)) {\n blob = blobConstruct(blob);\n }\n\n const response = new Response(blob, {\n headers: {\n 'Content-Length': '' + blob.size\n }\n });\n\n return this.save(fileName, response).then(() => blob as Blob);\n }\n\n public timeoutOperation(callback: (cache: Cache) => Promise) {\n if(!this.useStorage) {\n return Promise.reject(makeError('STORAGE_OFFLINE'));\n }\n\n return new Promise(async(resolve, reject) => {\n let rejected = false;\n const timeout = setTimeout(() => {\n reject();\n // console.warn('CACHESTORAGE TIMEOUT');\n rejected = true;\n }, 15e3);\n\n try {\n const cache = await this.openDatabase();\n if(!cache) {\n this.useStorage = false;\n this.openDbPromise = undefined;\n throw 'no cache?';\n }\n\n const res = await callback(cache);\n\n if(rejected) return;\n resolve(res);\n } catch(err) {\n reject(err);\n }\n\n clearTimeout(timeout);\n });\n }\n\n public prepareWriting(fileName: string, fileSize: number, mimeType: string) {\n return {\n deferred: deferredPromise(),\n getWriter: () => {\n const writer = new MemoryWriter(mimeType, fileSize, (blob) => {\n return this.saveFile(fileName, blob).catch(() => blob);\n });\n\n return writer;\n }\n };\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n return storage.deleteAll();\n }\n }));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport StreamWriter from './streamWriter';\n\nexport default class MemoryWriter implements StreamWriter {\n private bytes: Uint8Array;\n\n constructor(\n private mimeType: string,\n private size: number,\n private saveFileCallback?: (blob: Blob) => Promise\n ) {\n this.bytes = new Uint8Array(size);\n }\n\n public async write(part: Uint8Array, offset: number) {\n // sometimes file size can be bigger than the prov\n const endOffset = offset + part.byteLength;\n if(endOffset > this.bytes.byteLength) {\n const newBytes = new Uint8Array(endOffset);\n newBytes.set(this.bytes, 0);\n this.bytes = newBytes;\n }\n\n this.bytes.set(part, offset);\n };\n\n public truncate() {\n this.bytes = new Uint8Array();\n }\n\n public trim(size: number) {\n this.bytes = this.bytes.slice(0, size);\n }\n\n public finalize(saveToStorage = true) {\n const blob = blobConstruct(this.bytes, this.mimeType);\n\n if(saveToStorage && this.saveFileCallback) {\n this.saveFileCallback(blob);\n }\n\n return blob;\n }\n\n public getParts() {\n return this.bytes;\n }\n\n public replaceParts(parts: Uint8Array) {\n this.bytes = parts;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../config/debug';\nimport {IS_FIREFOX, IS_SAFARI} from '../environment/userAgent';\nimport {IS_SERVICE_WORKER, IS_WEB_WORKER} from '../helpers/context';\nimport dT from '../helpers/dT';\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst IS_WEBKIT = IS_SAFARI || IS_FIREFOX;\n\n// let getCallerFunctionNameFromLine: (line: string) => string;\n// if(IS_WEBKIT) {\n// getCallerFunctionNameFromLine = (line) => {\n// const splitted = line.split('@');\n// return splitted[0];\n// };\n// } else {\n// getCallerFunctionNameFromLine = (line: string) => {\n// const splitted = line.trim().split(' ');\n// if(splitted.length === 3) {\n// return splitted[1].slice(splitted[1].lastIndexOf('.') + 1);\n// }\n// };\n// }\n\nconst STYLES_SUPPORTED = !IS_WEBKIT;\n// const LINE_INDEX = IS_WEBKIT ? 2 : 3;\n\n// function getCallerFunctionName() {\n// const stack = new Error().stack;\n// const lines = stack.split('\\n');\n// const line = lines[LINE_INDEX] || lines[lines.length - 1];\n// // const match = line.match(/\\.([^\\.]+?)\\s/);\n// // line = match ? match[1] : line.trim();\n// const caller = getCallerFunctionNameFromLine(line) || '';\n// return '[' + caller + ']';\n// }\n\nexport const LOGGER_STYLES = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m'\n }\n};\n\nexport type Logger = {\n (...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n error(...args: any[]): void;\n trace(...args: any[]): void;\n debug(...args: any[]): void;\n assert(...args: any[]): void;\n // log(...args: any[]): void;\n group(...args: any[]): void;\n groupCollapsed(...args: any[]): void;\n groupEnd(...args: any[]): void;\n setPrefix(newPrefix: string): void;\n setLevel(level: 0 | 1 | 2 | 3 | 4): void;\n bindPrefix(prefix: string): Logger;\n};\n\nconst methods: ['debug' | 'info' | 'warn' | 'error' | 'assert' | 'trace'/* | 'log' */ | 'group' | 'groupCollapsed' | 'groupEnd', LogTypes][] = [\n ['debug', LogTypes.Debug],\n ['info', LogTypes.Log],\n ['warn', LogTypes.Warn],\n ['error', LogTypes.Error],\n ['assert', LogTypes.Error],\n ['trace', LogTypes.Log],\n ['group', LogTypes.Log],\n ['groupCollapsed', LogTypes.Log],\n ['groupEnd', LogTypes.Log]\n // [\"log\", LogTypes.Log]\n];\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false, style = ''): Logger {\n let originalPrefix: string;\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n if(!STYLES_SUPPORTED) {\n style = '';\n } else if(!style) {\n if(IS_SERVICE_WORKER) style = LOGGER_STYLES.fg.yellow;\n else if(IS_WEB_WORKER) style = LOGGER_STYLES.fg.cyan;\n }\n\n const originalStyle = style;\n if(style) style = `%s ${style}%s`;\n else style = '%s';\n\n // level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n const log: Logger = function(...args: any[]) {\n return type & LogTypes.Log && console.log(style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n } as any;\n\n methods.forEach(([method, logType]) => {\n log[method] = function(...args: any[]) {\n return type & logType && console[method](style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n };\n });\n\n log.setPrefix = function(newPrefix: string) {\n originalPrefix = newPrefix;\n prefix = '[' + newPrefix + ']';\n };\n\n log.setPrefix(prefix);\n\n log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n\n log.bindPrefix = function(prefix: string) {\n return logger(`${originalPrefix}] [${prefix}`, type, ignoreDebugReset, originalStyle);\n };\n\n return log;\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport type {getEnvironment} from '../../environment/utils';\nimport type loadState from '../appManagers/utils/state/loadState';\nimport type {StoragesResults} from '../appManagers/utils/storages/loadStorages';\nimport type {LocalStorageProxyTask} from '../localStorage';\nimport type {Awaited} from '../../types';\nimport type {Mirrors, MirrorTaskPayload, NotificationBuildTaskPayload, TabState} from './mtprotoworker';\nimport type toggleStorages from '../../helpers/toggleStorages';\nimport SuperMessagePort from './superMessagePort';\n\nexport type MTProtoManagerTaskPayload = {name: string, method: string, args: any[]};\n\ntype MTProtoBroadcastEvent = {\n event: (payload: {name: string, args: any[]}, source: MessageEventSource) => void\n};\n\nexport default class MTProtoMessagePort extends SuperMessagePort<{\n environment: (environment: ReturnType) => void,\n crypto: (payload: {method: string, args: any[]}) => Promise,\n state: (payload: {userId: UserId} & Awaited> & {storagesResults?: StoragesResults}) => void,\n manager: (payload: MTProtoManagerTaskPayload) => any,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => ReturnType,\n serviceWorkerOnline: (online: boolean) => void,\n serviceWorkerPort: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n cryptoPort: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n createObjectURL: (blob: Blob) => string,\n tabState: (payload: TabState, source: MessageEventSource) => void,\n createProxyWorkerURLs: (payload: {originalUrl: string, blob: Blob}) => string[],\n} & MTProtoBroadcastEvent, {\n convertWebp: (payload: {fileName: string, bytes: Uint8Array}) => Promise,\n convertOpus: (payload: {fileName: string, bytes: Uint8Array}) => Promise,\n localStorageProxy: (payload: LocalStorageProxyTask['payload']) => Promise,\n mirror: (payload: MirrorTaskPayload) => void,\n notificationBuild: (payload: NotificationBuildTaskPayload) => void,\n // hello: () => void\n} & MTProtoBroadcastEvent, Master> {\n private static INSTANCE: MTProtoMessagePort;\n\n constructor() {\n super('MTPROTO');\n\n MTProtoMessagePort.INSTANCE = this;\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.mtprotoMessagePort = this);\n }\n\n public static getInstance() {\n return this.INSTANCE as MTProtoMessagePort;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport bufferConcats from '../helpers/bytes/bufferConcats';\n\nUint8Array.prototype.concat = function(...args: Array) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n // return {type: 'bytes', value: [...this]};\n};\n\nPromise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n concat: (...args: Array) => Uint8Array,\n // toString: () => string,\n toJSON: () => number[],\n // toJSON: () => {type: 'bytes', value: number[]},\n }\n\n interface Promise {\n finally: (onfinally?: () => void) => Promise;\n }\n}\n","import {URL_ANY_PROTOCOL_REG_EXP} from '.';\n\nexport default function matchUrlProtocol(text: string) {\n return !text ? null : text.match(URL_ANY_PROTOCOL_REG_EXP);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WebPushApiManager} from '../mtproto/webPushApiManager';\nimport type {PushNotificationObject} from './push';\nimport type {MyUploadFile} from '../mtproto/apiFileManager';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\n\nexport type ServicePushPingTaskPayload = {\n localNotifications: boolean,\n lang: {\n push_action_mute1d: string\n push_action_settings: string\n push_message_nopreview: string\n },\n settings: WebPushApiManager['settings']\n};\n\nexport type ServiceRequestFilePartTaskPayload = {\n docId: DocId,\n dcId: number,\n offset: number,\n limit: number\n};\n\nexport type ServiceDownloadTaskPayload = {\n headers: any,\n id: string\n};\n\nexport type ServiceEvent = {\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void\n};\n\nexport default class ServiceMessagePort extends SuperMessagePort<{\n // from main thread to service worker\n notificationsClear: () => void,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => void,\n pushPing: (payload: ServicePushPingTaskPayload, source: MessageEventSource, event: MessageEvent) => void,\n hello: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n shownNotification: (payload: string) => void,\n\n // from mtproto worker\n download: (payload: ServiceDownloadTaskPayload) => void,\n downloadChunk: (payload: {id: ServiceDownloadTaskPayload['id'], chunk: Uint8Array}) => void\n downloadFinalize: (payload: ServiceDownloadTaskPayload['id']) => void,\n downloadCancel: (payload: ServiceDownloadTaskPayload['id']) => void\n}, {\n // to main thread\n pushClick: (payload: PushNotificationObject) => void,\n hello: (payload: void, source: MessageEventSource) => void,\n share: (payload: ShareData) => void,\n\n // to mtproto worker\n requestFilePart: (payload: ServiceRequestFilePartTaskPayload) => Promise | MyUploadFile\n} & ServiceEvent, Master> {\n constructor() {\n super('SERVICE');\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.serviceMessagePort = this);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Modes from '../config/modes';\nimport {IS_WORKER} from '../helpers/context';\nimport {WorkerTaskTemplate} from '../types';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\n// import { stringify } from '../helpers/json';\n\nclass LocalStorage> {\n private prefix = '';\n private cache: Partial = {};\n private useStorage = true;\n\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\n if(Modes.test) {\n this.prefix = 't_';\n }\n }\n\n public get(key: T, useCache = true): Storage[T] {\n if(this.cache.hasOwnProperty(key) && useCache) {\n return this.cache[key];\n } else if(this.useStorage) {\n let value: Storage[T];\n try {\n value = localStorage.getItem(this.prefix + (key as string)) as any;\n } catch(err) {\n this.useStorage = false;\n }\n\n if(value !== null) {\n try {\n value = JSON.parse(value);\n } catch(err) {\n // console.error(err);\n }\n } else {\n value = undefined;\n }\n\n return value;\n }/* else {\n throw 'something went wrong';\n } */\n }\n\n public set(obj: Partial, onlyLocal = false) {\n for(const key in obj) {\n if(obj.hasOwnProperty(key)) {\n const value = obj[key];\n this.cache[key] = value;\n\n if(this.useStorage && !onlyLocal) {\n try {\n const stringified = JSON.stringify(value);\n localStorage.setItem(this.prefix + key, stringified);\n } catch(err) {\n this.useStorage = false;\n }\n }\n }\n }\n }\n\n public delete(key: keyof Storage, saveLocal = false) {\n // ! it is needed here\n key = '' + (key as string);\n\n if(!saveLocal) {\n delete this.cache[key];\n }\n\n // if(this.useStorage) {\n try {\n localStorage.removeItem(this.prefix + (key as string));\n } catch(err) {\n\n }\n // }\n }\n\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\n // if(this.useStorage) {\n try {\n let obj: Partial = {};\n if(preserveKeys) {\n preserveKeys.forEach((key) => {\n const value = this.get(key);\n if(value !== undefined) {\n obj[key] = value;\n }\n });\n }\n\n localStorage.clear();\n\n if(preserveKeys) {\n this.set(obj);\n }\n } catch(err) {\n\n }\n // }\n } */\n\n public clear() {\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id', 'k_build'];\n for(let i = 1; i <= 5; ++i) {\n keys.push(`dc${i}_server_salt`);\n keys.push(`dc${i}_auth_key`);\n }\n\n for(const key of keys) {\n this.delete(key, true);\n }\n }\n\n public toggleStorage(enabled: boolean, clearWrite: boolean) {\n this.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n this.clear();\n } else {\n return this.set(this.cache);\n }\n }\n}\n\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\n args: any[]\n }\n};\n\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: any\n};\n\nexport default class LocalStorageController> {\n private static STORAGES: LocalStorageController[] = [];\n // private log = (...args: any[]) => console.log('[SW LS]', ...args);\n // private log = (...args: any[]) => {};\n\n private storage: LocalStorage;\n\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\n LocalStorageController.STORAGES.push(this);\n\n if(!IS_WORKER) {\n this.storage = new LocalStorage(/* preserveKeys */);\n }\n }\n\n private async proxy(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']): Promise {\n if(IS_WORKER) {\n const port = MTProtoMessagePort.getInstance();\n return port.invoke('localStorageProxy', {type, args});\n }\n\n args = Array.prototype.slice.call(args);\n\n // @ts-ignore\n return this.storage[type].apply(this.storage, args as any);\n }\n\n public get(key: T, useCache?: boolean) {\n return this.proxy('get', key, useCache);\n }\n\n public set(obj: Partial, onlyLocal?: boolean) {\n return this.proxy('set', obj, onlyLocal);\n }\n\n public delete(key: keyof Storage, saveLocal?: boolean) {\n return this.proxy('delete', key, saveLocal);\n }\n\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\n return this.proxy('clear'/* , preserveKeys */);\n }\n\n public toggleStorage(enabled: boolean, clearWrite: boolean) {\n return this.proxy('toggleStorage', enabled, clearWrite);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppInstance} from './mtproto/singleInstance';\nimport type {UserAuth} from './mtproto/mtproto_config';\nimport type {DcId} from '../types';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport LocalStorageController from './localStorage';\n\nconst sessionStorage = new LocalStorageController<{\n dc: DcId,\n user_auth: UserAuth,\n state_id: number,\n dc1_auth_key: string,\n dc2_auth_key: string,\n dc3_auth_key: string,\n dc4_auth_key: string,\n dc5_auth_key: string,\n dc1_server_salt: string,\n dc2_server_salt: string,\n dc3_server_salt: string,\n dc4_server_salt: string,\n dc5_server_salt: string,\n server_time_offset: number,\n xt_instance: AppInstance,\n kz_version: 'K' | 'Z',\n tgme_sync: {\n canRedirect: boolean,\n ts: number\n },\n k_build: number\n}>(/* ['kz_version'] */);\nMOUNT_CLASS_TO.appStorage = sessionStorage;\nexport default sessionStorage;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ChatSavedPosition} from './appManagers/appImManager';\nimport type {AppDraftsManager} from './appManagers/appDraftsManager';\nimport type {State} from '../config/state';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport {LangPackDifference} from '../layer';\nimport AppStorage from './storage';\nimport DATABASE_STATE from '../config/databases/state';\n\nclass StateStorage extends AppStorage<{\n chatPositions: {\n [peerId_threadId: string]: ChatSavedPosition\n },\n langPack: LangPackDifference,\n drafts: AppDraftsManager['drafts'],\n user_auth: any, // support old webk format\n} & State, typeof DATABASE_STATE> {\n constructor() {\n super(DATABASE_STATE, 'session');\n }\n}\n\nconst stateStorage = new StateStorage();\nMOUNT_CLASS_TO.stateStorage = stateStorage;\nexport default stateStorage;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../config/databases';\nimport {MOUNT_CLASS_TO} from '../config/debug';\n// import DATABASE_SESSION from \"../config/databases/session\";\nimport deferredPromise, {CancellablePromise} from '../helpers/cancellablePromise';\nimport {IS_WORKER} from '../helpers/context';\nimport throttle from '../helpers/schedulers/throttle';\n// import { WorkerTaskTemplate } from \"../types\";\nimport IDBStorage from './files/idb';\n\nfunction noop() {}\n\n/* export interface LocalStorageProxySetTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'set',\n keys: string[],\n values: any[]\n }\n};\n\nexport interface LocalStorageProxyDeleteTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'delete',\n keys: string[]\n }\n}; */\n\nconst THROTTLE_TIME = 16;\n\n/* Storage extends {[name: string]: any} *//* Storage extends Record */\nexport default class AppStorage<\n Storage extends Record,\n T extends Database\n> {\n private static STORAGES: AppStorage>[] = [];\n private storage: IDBStorage;// new CacheStorageController('session');\n\n // private cache: Partial<{[key: string]: Storage[typeof key]}> = {};\n private cache: Partial = {};\n private useStorage: boolean;\n private savingFreezed: boolean;\n\n private getPromises: Map> = new Map();\n private getThrottled: () => void;\n\n private keysToSet: Set = new Set();\n private saveThrottled: () => void;\n private saveDeferred = deferredPromise();\n\n private keysToDelete: Set = new Set();\n private deleteThrottled: () => void;\n private deleteDeferred = deferredPromise();\n\n constructor(private db: T, private storeName: typeof db['stores'][number]['name']) {\n this.storage = new IDBStorage(db, storeName);\n\n if(AppStorage.STORAGES.length) {\n this.useStorage = AppStorage.STORAGES[0].useStorage;\n } else {\n this.useStorage = true;\n }\n\n this.savingFreezed = false;\n\n AppStorage.STORAGES.push(this);\n\n this.saveThrottled = throttle(async() => {\n const deferred = this.saveDeferred;\n this.saveDeferred = deferredPromise();\n\n const set = this.keysToSet;\n if(set.size) {\n const keys = Array.from(set.values()) as string[];\n set.clear();\n\n const values = keys.map((key) => this.cache[key]);\n try {\n // console.log('setItem: will set', key/* , value */);\n // await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'\n // await this.storage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));\n\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\n self.postMessage({\n type: 'localStorageProxy',\n payload: {\n type: 'set',\n keys,\n values\n }\n } as LocalStorageProxySetTask);\n } */\n\n await this.storage.save(keys, values);\n // console.log('setItem: have set', key/* , value */);\n } catch(e) {\n // this.useCS = false;\n console.error('[AS]: set error:', e, keys, values);\n }\n }\n\n deferred.resolve();\n\n if(set.size) {\n this.saveThrottled();\n }\n }, THROTTLE_TIME, false);\n\n this.deleteThrottled = throttle(async() => {\n const deferred = this.deleteDeferred;\n this.deleteDeferred = deferredPromise();\n\n const set = this.keysToDelete;\n if(set.size) {\n const keys = Array.from(set.values()) as string[];\n set.clear();\n\n try {\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\n self.postMessage({\n type: 'localStorageProxy',\n payload: {\n type: 'delete',\n keys\n }\n } as LocalStorageProxyDeleteTask);\n } */\n\n await this.storage.delete(keys);\n } catch(e) {\n console.error('[AS]: delete error:', e, keys);\n }\n }\n\n deferred.resolve();\n\n if(set.size) {\n this.deleteThrottled();\n }\n }, THROTTLE_TIME, false);\n\n this.getThrottled = throttle(async() => {\n const keys = Array.from(this.getPromises.keys());\n\n // const perf = performance.now();\n this.storage.get(keys as string[]).then((values) => {\n for(let i = 0, length = keys.length; i < length; ++i) {\n const key = keys[i];\n const deferred = this.getPromises.get(key);\n if(deferred) {\n // @ts-ignore\n deferred.resolve(this.cache[key] = values[i]);\n this.getPromises.delete(key);\n }\n }\n\n // console.log('[AS]: get time', keys, performance.now() - perf);\n }, (error: ApiError) => {\n const ignoreErrors: Set = new Set(['NO_ENTRY_FOUND', 'STORAGE_OFFLINE']);\n if(!ignoreErrors.has(error.type)) {\n this.useStorage = false;\n console.error('[AS]: get error:', error, keys, storeName);\n }\n\n for(let i = 0, length = keys.length; i < length; ++i) {\n const key = keys[i];\n const deferred = this.getPromises.get(key);\n if(deferred) {\n // deferred.reject(error);\n deferred.resolve(undefined);\n this.getPromises.delete(key);\n }\n }\n }).finally(() => {\n if(this.getPromises.size) {\n this.getThrottled();\n }\n });\n }, THROTTLE_TIME, false);\n }\n\n public isAvailable() {\n return this.useStorage;\n }\n\n public getCache() {\n return this.cache;\n }\n\n public getFromCache(key: T) {\n return this.cache[key];\n }\n\n public setToCache(key: keyof Storage, value: Storage[typeof key]) {\n return this.cache[key] = value;\n }\n\n public async get(key: T, useCache = true): Promise {\n if(this.cache.hasOwnProperty(key) && useCache) {\n return this.getFromCache(key);\n } else if(this.useStorage) {\n const r = this.getPromises.get(key);\n if(r) return r as any;\n\n const p = deferredPromise();\n this.getPromises.set(key, p as any);\n\n this.getThrottled();\n\n return p;\n }/* else {\n throw 'something went wrong';\n } */\n }\n\n public getAll() {\n return this.storage.getAll().catch(() => []);\n }\n\n public set(obj: Partial, onlyLocal = false) {\n // console.log('storageSetValue', obj, callback, arguments);\n\n const canUseStorage = this.useStorage && !onlyLocal && !this.savingFreezed;\n for(const key in obj) {\n if(obj.hasOwnProperty(key)) {\n const value = obj[key];\n this.setToCache(key, value);\n\n // let perf = /* DEBUG */false ? performance.now() : 0;\n // value = JSON.stringify(value);\n\n // if(perf) {\n // let elapsedTime = performance.now() - perf;\n // if(elapsedTime > 10) {\n // console.warn('LocalStorage set: stringify time by JSON.stringify:', elapsedTime, key);\n // }\n // }\n\n /* perf = performance.now();\n value = stringify(value);\n console.log('LocalStorage set: stringify time by own stringify:', performance.now() - perf); */\n\n if(canUseStorage) {\n this.keysToSet.add(key);\n this.keysToDelete.delete(key);\n this.saveThrottled();\n }\n }\n }\n\n return canUseStorage ? this.saveDeferred : Promise.resolve();\n }\n\n public delete(key: keyof Storage, saveLocal = false) {\n /* if(!this.cache.hasOwnProperty(key)) {\n return;\n } */\n\n // ! it is needed here\n key = '' + (key as string);\n\n if(!saveLocal) {\n delete this.cache[key];\n }\n\n if(this.useStorage) {\n this.keysToSet.delete(key);\n this.keysToDelete.add(key);\n this.deleteThrottled();\n }\n\n return this.useStorage ? this.deleteDeferred : Promise.resolve();\n }\n\n public clear(saveLocal = false) {\n if(!saveLocal) {\n for(const i in this.cache) {\n delete this.cache[i];\n }\n }\n\n return this.storage.clear().catch(noop);\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!IS_WORKER || !clearWrite) {\n return;\n }\n\n if(!enabled) {\n storage.keysToSet.clear();\n storage.keysToDelete.clear();\n storage.getPromises.forEach((deferred) => deferred.resolve(undefined));\n storage.getPromises.clear();\n return storage.clear(true);\n } else {\n return storage.set(storage.cache);\n }\n })).catch(noop);\n }\n\n public static freezeSaving>(callback: () => any, names: T['stores'][number]['name'][]) {\n this.STORAGES.forEach((storage) => storage.savingFreezed = true);\n try {\n callback();\n } catch(err) {\n console.error('freezeSaving callback error:', err);\n }\n this.STORAGES.forEach((storage) => storage.savingFreezed = false);\n }\n\n /* public deleteDatabase() {\n return IDBStorage.deleteDatabase().catch(noop);\n } */\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.AppStorage = AppStorage);\n","// Copyright Twitter Inc. Licensed under MIT\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\n\nconst originalString = '((?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f?|\\u2696\\ufe0f?|\\u2708\\ufe0f?|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)(?:(?:\\ud83c[\\udffb-\\udfff]|\\ufe0f?)\\u200d[\\u2640\\u2642]\\ufe0f?)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f?|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f?\\u200d\\u26a7\\ufe0f?|\\ud83c\\udff3\\ufe0f?\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f?|\\u2764\\ufe0f?\\u200d\\ud83d\\udd25|\\u2764\\ufe0f?\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f?|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f?|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f?|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f?|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f?|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f?|\\ud83e\\uddde\\u200d\\u2640\\ufe0f?|\\ud83e\\uddde\\u200d\\u2642\\ufe0f?|\\ud83e\\udddf\\u200d\\u2640\\ufe0f?|\\ud83e\\udddf\\u200d\\u2642\\ufe0f?|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f??\\u20e3|(?:[ยฉยฎ\\u2122\\u265f]\\ufe0f?)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f?|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f?|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f)';\nexport default originalString;\n"],"names":["MAIN_DOMAINS","threads","Math","min","navigator","hardwareConcurrency","App","id","hash","version","versionFull","build","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","includes","location","hostname","suffix","cryptoWorkers","name","stores","blobConstruct","blobParts","mimeType","Array","isArray","safeMimeType","Blob","type","blobSafeMimeType","indexOf","bufferConcats","args","length","reduce","acc","v","byteLength","tmp","Uint8Array","lastLength","forEach","b","set","ArrayBuffer","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","listeners","callback","addNotifyListener","push","deferred","Promise","resolve","reject","value","catch","finally","cancel","Object","assign","IS_SERVICE_WORKER","ServiceWorkerGlobalScope","self","IS_WEB_WORKER","WorkerGlobalScope","IS_WORKER","postMessage","listener","err","console","error","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","then","slice","bind","noop","copy","obj","Date","getTime","map","el","isView","clonedObj","constructor","prop","hasOwnProperty","deepEqual","x","y","ok","keys","tx","every","key","isObject","object","safeAssign","fromObject","i","undefined","validateInitObject","initObject","currentObject","onReplace","previousKey","ignorePaths","path","_path","has","String","prototype","toUserId","this","toChatId","toPeerId","isChat","isPeerId","test","toString","Number","abs","newMethod","originMethod","call","arrays","Uint16Array","Uint32Array","nextRandomUint","bits","array","crypto","getRandomValues","randomLong","recordPromiseBound","log","promise","description","perf","performance","now","warn","recordPromise","pause","ms","setTimeout","throttle","fn","shouldRunFirst","isPending","interval","_args","setInterval","clearInterval","capitalizeFirstLetter","string","charAt","toUpperCase","toggleStorages","enabled","clearWrite","tsNow","seconds","t","getServerMessageId","messageId","toServer","q","l","used","clearMessageId","MESSAGE_ID_INCREMENT","MESSAGE_ID_OFFSET","isAnyChat","peerId","isUser","CryptoMessagePort","super","lastIndex","invokeCryptoNew","method","transfer","payload","result","sendPortIndex","sendPorts","invoke","invokeCrypto","cryptoMessagePort","CacheStorageController","dbName","useStorage","STORAGES","openDatabase","openDbPromise","caches","open","delete","entryName","timeoutOperation","cache","deleteAll","get","match","save","response","put","getFile","fileName","saveFile","blob","Response","headers","size","rejected","timeout","res","clearTimeout","prepareWriting","fileSize","getWriter","static","storage","MemoryWriter","saveFileCallback","bytes","write","part","offset","endOffset","newBytes","truncate","trim","finalize","saveToStorage","getParts","replaceParts","parts","LogTypes","LOG_LEVELS","None","Error","Warn","Log","Debug","STYLES_SUPPORTED","IS_SAFARI","IS_FIREFOX","LOGGER_STYLES","methods","logger","prefix","ignoreDebugReset","style","originalPrefix","originalStyle","logType","setPrefix","newPrefix","setLevel","level","bindPrefix","MTProtoMessagePort","INSTANCE","concat","toJSON","onFinally","reason","matchUrlProtocol","text","ServiceMessagePort","LocalStorage","useCache","localStorage","getItem","JSON","parse","onlyLocal","stringified","stringify","setItem","saveLocal","removeItem","clear","toggleStorage","LocalStorageController","proxy","apply","sessionStorage","StateStorage","stateStorage","AppStorage","db","storeName","getPromises","Map","keysToSet","Set","saveDeferred","keysToDelete","deleteDeferred","savingFreezed","saveThrottled","from","values","e","deleteThrottled","getThrottled","isAvailable","getCache","getFromCache","setToCache","r","p","getAll","canUseStorage","add","names"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"110.392baae5965bb16e7063.bundle.js","mappings":"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","sources":["webpack://tweb/./src/config/app.ts","webpack://tweb/./src/config/databases/state.ts","webpack://tweb/./src/helpers/blob/blobConstruct.ts","webpack://tweb/./src/helpers/blob/blobSafeMimeType.ts","webpack://tweb/./src/helpers/bytes/bufferConcats.ts","webpack://tweb/./src/helpers/cancellablePromise.ts","webpack://tweb/./src/helpers/context.ts","webpack://tweb/./src/helpers/noop.ts","webpack://tweb/./src/helpers/object/copy.ts","webpack://tweb/./src/helpers/object/deepEqual.ts","webpack://tweb/./src/helpers/object/isObject.ts","webpack://tweb/./src/helpers/object/safeAssign.ts","webpack://tweb/./src/helpers/object/validateInitObject.ts","webpack://tweb/./src/helpers/peerIdPolyfill.ts","webpack://tweb/./src/helpers/random.ts","webpack://tweb/./src/helpers/recordPromise.ts","webpack://tweb/./src/helpers/schedulers/pause.ts","webpack://tweb/./src/helpers/schedulers/throttle.ts","webpack://tweb/./src/helpers/string/capitalizeFirstLetter.ts","webpack://tweb/./src/helpers/toggleStorages.ts","webpack://tweb/./src/helpers/tsNow.ts","webpack://tweb/./src/lib/appManagers/utils/messageId/getServerMessageId.ts","webpack://tweb/./src/lib/appManagers/utils/messageId/clearMessageId.ts","webpack://tweb/./src/lib/appManagers/utils/messageId/index.ts","webpack://tweb/./src/lib/appManagers/utils/peers/isAnyChat.ts","webpack://tweb/./src/lib/appManagers/utils/peers/isUser.ts","webpack://tweb/./src/lib/crypto/cryptoMessagePort.ts","webpack://tweb/./src/lib/files/cacheStorage.ts","webpack://tweb/./src/lib/files/memoryWriter.ts","webpack://tweb/./src/lib/logger.ts","webpack://tweb/./src/lib/mtproto/mtprotoMessagePort.ts","webpack://tweb/./src/lib/polyfill.ts","webpack://tweb/./src/lib/richTextProcessor/matchUrlProtocol.ts","webpack://tweb/./src/lib/serviceWorker/serviceMessagePort.ts","webpack://tweb/./src/lib/localStorage.ts","webpack://tweb/./src/lib/sessionStorage.ts","webpack://tweb/./src/lib/stateStorage.ts","webpack://tweb/./src/lib/storage.ts","webpack://tweb/./src/vendor/emoji/regex.ts"],"sourcesContent":["/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {DcId} from '../types';\n\nexport const MAIN_DOMAINS = ['web.telegram.org', 'webk.telegram.org'];\n\nconst threads = Math.min(4, navigator.hardwareConcurrency ?? 4);\n\nconst App = {\n id: +process.env.API_ID,\n hash: process.env.API_HASH,\n version: process.env.VERSION,\n versionFull: process.env.VERSION_FULL,\n build: +process.env.BUILD,\n langPackVersion: '0.9.3',\n langPack: 'webk',\n langPackCode: 'en',\n domains: MAIN_DOMAINS,\n baseDcId: 2 as DcId,\n isMainDomain: MAIN_DOMAINS.includes(location.hostname),\n suffix: 'K',\n threads,\n cryptoWorkers: threads\n};\n\nif(App.isMainDomain) { // use Webogram credentials then\n App.id = 2496;\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\n}\n\nexport default App;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Database} from '.';\nimport type {IDBIndex} from '../../lib/files/idb';\n\nconst DATABASE_STATE: Database<'session' | 'stickerSets' | 'users' | 'chats' | 'messages' | 'dialogs'> = {\n name: 'tweb',\n version: 7,\n stores: [{\n name: 'session'\n }, {\n name: 'stickerSets'\n }, {\n name: 'users'\n }, {\n name: 'chats'\n }, {\n name: 'dialogs'\n // indexes: [\n // ...(new Array(20 + 2).fill(0)).map((_, idx) => {\n // const name = `index_${idx}`;\n // const index: IDBIndex = {\n // indexName: name,\n // keyPath: name,\n // objectParameters: {}\n // };\n\n // return index\n // })\n // ]\n }, {\n name: 'messages'\n }]\n};\n\nexport default DATABASE_STATE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport blobSafeMimeType from './blobSafeMimeType';\n\nexport default function blobConstruct(blobParts: Array | T, mimeType: string = ''): Blob {\n if(!Array.isArray(blobParts)) {\n blobParts = [blobParts];\n }\n\n const safeMimeType = blobSafeMimeType(mimeType);\n const blob = new Blob(blobParts, {type: safeMimeType});\n return blob;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// https://www.iana.org/assignments/media-types/media-types.xhtml\nexport default function blobSafeMimeType(mimeType: string) {\n if([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp',\n 'image/bmp',\n 'video/mp4',\n 'video/webm',\n 'video/quicktime',\n 'audio/ogg',\n 'audio/mpeg',\n 'audio/mp4',\n 'audio/wav', // though it is not in list\n 'application/json',\n 'application/pdf'\n ].indexOf(mimeType) === -1) {\n return 'application/octet-stream';\n }\n\n return mimeType;\n}\n","export default function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\n\n const tmp = new Uint8Array(length);\n\n let lastLength = 0;\n args.forEach((b) => {\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\n });\n\n return tmp/* .buffer */;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from './noop';\n\nexport interface CancellablePromise extends Promise {\n resolve?: (value: T) => void,\n reject?: (...args: any[]) => void,\n cancel?: (reason?: any) => void,\n\n notify?: (...args: any[]) => void,\n notifyAll?: (...args: any[]) => void,\n lastNotify?: any,\n listeners?: Array<(...args: any[]) => void>,\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\n\n isFulfilled?: boolean,\n isRejected?: boolean\n}\n\nexport default function deferredPromise() {\n const deferredHelper: any = {\n isFulfilled: false,\n isRejected: false,\n\n notify: () => {},\n notifyAll: (...args: any[]) => {\n deferredHelper.lastNotify = args;\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\n },\n\n listeners: [],\n addNotifyListener: (callback: (...args: any[]) => void) => {\n if(deferredHelper.lastNotify) {\n callback(...deferredHelper.lastNotify);\n }\n\n deferredHelper.listeners.push(callback);\n }\n };\n\n const deferred: CancellablePromise = new Promise((resolve, reject) => {\n deferredHelper.resolve = (value: T) => {\n if(deferred.isFulfilled || deferred.isRejected) return;\n\n deferred.isFulfilled = true;\n resolve(value);\n };\n\n deferredHelper.reject = (...args: any[]) => {\n if(deferred.isRejected || deferred.isFulfilled) return;\n\n deferred.isRejected = true;\n reject(...args);\n };\n });\n\n // @ts-ignore\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\n const n = deferredPromise>();\n\n }; */\n\n deferred.catch(noop).finally(() => {\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\n deferred.listeners.length = 0;\n\n if(deferred.cancel) {\n deferred.cancel = noop;\n }\n });\n\n Object.assign(deferred, deferredHelper);\n\n return deferred;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// ะฒ SW ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ัั€ะฐะทัƒ ะดะฒะต ะฟะตั€ะตะผะตะฝะฝั‹ั… TRUE\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\n\nexport const getWindowClients = () => {\n return (self as any as ServiceWorkerGlobalScope)\n .clients\n .matchAll({includeUncontrolled: false, type: 'window'});\n};\n\nexport const getLastWindowClient = () => getWindowClients().then((windowClients) => windowClients.slice(-1)[0]);\n\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\n try {\n // @ts-ignore\n listener.postMessage(...args);\n } catch(err) {\n console.error('[worker] postMessage error:', err, args);\n }\n};\n\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\n getWindowClients().then((listeners) => {\n if(!listeners.length) {\n // console.trace('no listeners?', self, listeners);\n return;\n }\n\n listeners.slice(all ? 0 : -1).forEach((listener) => {\n postMessage(listener, ...args);\n });\n });\n};\n\nconst notifyWorker = (...args: any[]) => {\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\n};\n\nconst noop = () => {};\n\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\n","export default function noop() {}\n","export default function copy(obj: T): T {\n // in case of premitives\n if(obj === null || typeof(obj) !== 'object') {\n return obj;\n }\n\n // date objects should be\n if(obj instanceof Date) {\n return new Date(obj.getTime()) as any;\n }\n\n // handle Array\n if(Array.isArray(obj)) {\n // @ts-ignore\n const clonedArr: T = obj.map((el) => copy(el)) as any as T;\n return clonedArr;\n }\n\n if(ArrayBuffer.isView(obj)) {\n // @ts-ignore\n return obj.slice();\n }\n\n // lastly, handle objects\n // @ts-ignore\n const clonedObj = new obj.constructor();\n for(var prop in obj) {\n if(obj.hasOwnProperty(prop)) {\n clonedObj[prop] = copy(obj[prop]);\n }\n }\n return clonedObj;\n}\n","export default function deepEqual(x: any, y: any): boolean {\n const ok = Object.keys, tx = typeof x, ty = typeof y;\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key) => deepEqual(x[key], y[key]))\n ) : (x === y);\n}\n","export default function isObject>(object: any): object is T {\n return typeof(object) === 'object' && object !== null;\n}\n","export default function safeAssign(object: T, fromObject: any) {\n if(fromObject) {\n for(const i in fromObject) {\n if(fromObject[i] !== undefined) {\n // @ts-ignore\n object[i] = fromObject[i];\n }\n }\n }\n\n return object;\n}\n","import copy from './copy';\nimport isObject from './isObject';\n\nexport default function validateInitObject(\n initObject: any,\n currentObject: any,\n onReplace?: (key: string) => void,\n previousKey?: string,\n ignorePaths?: Set,\n path?: string\n) {\n for(const key in initObject) {\n const _path = path ? `${path}.${key}` : key;\n if(ignorePaths?.has(_path)) {\n continue;\n }\n\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\n currentObject[key] = copy(initObject[key]);\n onReplace?.(previousKey || key);\n } else if(isObject(initObject[key])) {\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key, ignorePaths, _path);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport isAnyChat from '../lib/appManagers/utils/peers/isAnyChat';\nimport isUser from '../lib/appManagers/utils/peers/isUser';\n\nString.prototype.toUserId = function() {\n return (+this).toUserId();\n};\n\nString.prototype.toChatId = function() {\n return (+this).toChatId();\n};\n\nString.prototype.toPeerId = function(isChat?: boolean) {\n return (+this).toPeerId(isChat);\n};\n\nString.prototype.isPeerId = function() {\n return /^[\\d-]/.test(this.toString());\n};\n\nNumber.prototype.toUserId = function() {\n return this as any;\n};\n\nNumber.prototype.toChatId = function() {\n return Math.abs(this as any);\n};\n\nNumber.prototype.toPeerId = function(isChat?: boolean) {\n return isChat === undefined ? this as number : (isChat ? -Math.abs(this as number) : this as number);\n};\n\nNumber.prototype.isPeerId = function() {\n return true;\n};\n\n[\n ['isUser' as const, isUser],\n ['isAnyChat' as const, isAnyChat]\n].forEach((value) => {\n const newMethod = Array.isArray(value) ? value[0] : value;\n const originMethod = Array.isArray(value) ? value[1] : value;\n // @ts-ignore\n String.prototype[newMethod] = function() {\n // @ts-ignore\n // eslint-disable-next-line no-useless-call\n return originMethod.call(null, this.toString());\n };\n\n // @ts-ignore\n Number.prototype[newMethod] = function() {\n // @ts-ignore\n // eslint-disable-next-line no-useless-call\n return originMethod.call(null, this);\n };\n});\n\ndeclare global {\n interface String {\n toUserId(): UserId;\n toChatId(): ChatId;\n toPeerId(isChat?: boolean): PeerId;\n isPeerId(): this is string;\n\n isUser(): boolean;\n isAnyChat(): boolean;\n }\n\n interface Number {\n toUserId(): UserId;\n toChatId(): ChatId;\n toPeerId(isChat?: boolean): PeerId;\n isPeerId(): this is PeerId;\n\n isUser(): boolean;\n isAnyChat(): boolean;\n }\n}\n\nexport {};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1)\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","import {logger} from '../lib/logger';\nimport dT from './dT';\n\nexport function recordPromise>(promise: T, description: string, log?: ReturnType | Console) {\n const perf = performance.now();\n (log || console).warn(dT(), 'start', description);\n promise.then(() => {\n (log || console).warn(dT(), 'end', description, performance.now() - perf);\n });\n return promise;\n}\n\nexport function recordPromiseBound(log: ReturnType | Console) {\n return (...args: [Parameters[0], Parameters[1]]) => {\n return recordPromise(...args, log);\n };\n}\n","export default function pause(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","// * Jolly Cobra's schedulers\n\nimport {AnyToVoidFunction} from '../../types';\n\nexport default function throttle(\n fn: F,\n ms: number,\n shouldRunFirst = true\n) {\n let interval: number | null = null;\n let isPending: boolean;\n let args: Parameters;\n\n return (..._args: Parameters) => {\n isPending = true;\n args = _args;\n\n if(!interval) {\n if(shouldRunFirst) {\n isPending = false;\n // @ts-ignore\n fn(...args);\n }\n\n interval = setInterval(() => {\n if(!isPending) {\n clearInterval(interval!);\n interval = null;\n return;\n }\n\n isPending = false;\n // @ts-ignore\n fn(...args);\n }, ms) as any;\n }\n };\n}\n","export default function capitalizeFirstLetter(string: string) {\n return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CacheStorageController from '../lib/files/cacheStorage';\nimport AppStorage from '../lib/storage';\nimport sessionStorage from '../lib/sessionStorage';\nimport noop from './noop';\n\nexport default function toggleStorages(enabled: boolean, clearWrite: boolean) {\n return Promise.all([\n AppStorage.toggleStorage(enabled, clearWrite),\n CacheStorageController.toggleStorage(enabled, clearWrite),\n sessionStorage.toggleStorage(enabled, clearWrite)\n ]).then(noop, noop);\n}\n","export default function tsNow(seconds?: true) {\n const t = Date.now();\n return seconds ? t / 1000 | 0 : t;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport clearMessageId from './clearMessageId';\n\n/**\n * * will ignore outgoing offset\n */\nexport default function getServerMessageId(messageId: number) {\n return clearMessageId(messageId, true);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MESSAGE_ID_OFFSET, MESSAGE_ID_INCREMENT} from '.';\n\nexport default function clearMessageId(messageId: number, toServer?: boolean) {\n const q = MESSAGE_ID_OFFSET;\n if(messageId < q) { // id 0 -> mid 0xFFFFFFFF, so 0xFFFFFFFF must convert to 0\n return messageId;\n }\n\n const l = MESSAGE_ID_INCREMENT - 1;\n const used = messageId & l;\n if(used !== l) {\n messageId -= used + 1;\n }\n\n return toServer ? (messageId - q) / MESSAGE_ID_INCREMENT : messageId;\n}\n","export const MESSAGE_ID_INCREMENT = 0x10000;\nexport const MESSAGE_ID_OFFSET = 0xFFFFFFFF;\n","export default function isAnyChat(peerId: PeerId) {\n return +peerId < 0;\n}\n","export default function isUser(peerId: PeerId) {\n return +peerId >= 0;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {CryptoMethods} from './crypto_methods';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {Awaited} from '../../types';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IS_WORKER} from '../../helpers/context';\n\ntype CryptoEvent = {\n invoke: (payload: {method: T, args: Parameters}) => ReturnType,\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n terminate: () => void\n};\n\nexport class CryptoMessagePort extends SuperMessagePort {\n private lastIndex: number;\n\n constructor() {\n super('CRYPTO');\n this.lastIndex = -1;\n }\n\n public invokeCryptoNew({method, args, transfer}: {\n method: T,\n args: Parameters,\n transfer?: Transferable[]\n }): Promise>> {\n const payload = {method, args};\n const listeners = this.listeners['invoke'];\n if(listeners?.length) { // already in worker\n // try {\n // @ts-ignore\n let result: any = listeners[0].callback(payload);\n if(!IS_WORKER && !(result instanceof Promise)) {\n result = Promise.resolve(result);\n }\n\n return result;\n // } catch(err) {\n // return Promise.reject(err);\n // }\n }\n\n const sendPortIndex = method === 'aes-encrypt' || method === 'aes-decrypt' ?\n this.lastIndex = (this.lastIndex + 1) % this.sendPorts.length :\n 0;\n // @ts-ignore\n return this.invoke('invoke', payload, undefined, this.sendPorts[sendPortIndex], transfer);\n }\n\n public invokeCrypto(method: T, ...args: Parameters): Promise>> {\n return this.invokeCryptoNew({method, args});\n }\n}\n\nconst cryptoMessagePort = new CryptoMessagePort();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.cryptoMessagePort = cryptoMessagePort);\nexport default cryptoMessagePort;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../config/modes';\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport MemoryWriter from './memoryWriter';\nimport FileManager from './memoryWriter';\nimport FileStorage from './fileStorage';\nimport makeError from '../../helpers/makeError';\nimport deferredPromise from '../../helpers/cancellablePromise';\n\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\n\nexport default class CacheStorageController implements FileStorage {\n private static STORAGES: CacheStorageController[] = [];\n private openDbPromise: Promise;\n\n private useStorage = true;\n\n // private log: ReturnType = logger('CS');\n\n constructor(private dbName: CacheStorageDbName) {\n if(Modes.test) {\n this.dbName += '_test';\n }\n\n if(CacheStorageController.STORAGES.length) {\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\n }\n\n this.openDatabase();\n CacheStorageController.STORAGES.push(this);\n }\n\n private openDatabase(): Promise {\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\n }\n\n public delete(entryName: string) {\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\n }\n\n public deleteAll() {\n return caches.delete(this.dbName);\n }\n\n public get(entryName: string) {\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\n }\n\n public save(entryName: string, response: Response) {\n // return new Promise((resolve) => {}); // DEBUG\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\n }\n\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise {\n /* if(method === 'blob') {\n return Promise.reject();\n } */\n\n // const str = `get fileName: ${fileName}`;\n // console.time(str);\n return this.get(fileName).then((response) => {\n if(!response) {\n // console.warn('getFile:', response, fileName);\n throw makeError('NO_ENTRY_FOUND');\n }\n\n const promise = response[method]();\n // promise.then(() => {\n // console.timeEnd(str);\n // });\n return promise;\n });\n }\n\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // return Promise.resolve(blobConstruct([blob]));\n if(!(blob instanceof Blob)) {\n blob = blobConstruct(blob);\n }\n\n const response = new Response(blob, {\n headers: {\n 'Content-Length': '' + blob.size\n }\n });\n\n return this.save(fileName, response).then(() => blob as Blob);\n }\n\n public timeoutOperation(callback: (cache: Cache) => Promise) {\n if(!this.useStorage) {\n return Promise.reject(makeError('STORAGE_OFFLINE'));\n }\n\n return new Promise(async(resolve, reject) => {\n let rejected = false;\n const timeout = setTimeout(() => {\n reject();\n // console.warn('CACHESTORAGE TIMEOUT');\n rejected = true;\n }, 15e3);\n\n try {\n const cache = await this.openDatabase();\n if(!cache) {\n this.useStorage = false;\n this.openDbPromise = undefined;\n throw 'no cache?';\n }\n\n const res = await callback(cache);\n\n if(rejected) return;\n resolve(res);\n } catch(err) {\n reject(err);\n }\n\n clearTimeout(timeout);\n });\n }\n\n public prepareWriting(fileName: string, fileSize: number, mimeType: string) {\n return {\n deferred: deferredPromise(),\n getWriter: () => {\n const writer = new MemoryWriter(mimeType, fileSize, (blob) => {\n return this.saveFile(fileName, blob).catch(() => blob);\n });\n\n return writer;\n }\n };\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n return storage.deleteAll();\n }\n }));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport StreamWriter from './streamWriter';\n\nexport default class MemoryWriter implements StreamWriter {\n private bytes: Uint8Array;\n\n constructor(\n private mimeType: string,\n private size: number,\n private saveFileCallback?: (blob: Blob) => Promise\n ) {\n this.bytes = new Uint8Array(size);\n }\n\n public async write(part: Uint8Array, offset: number) {\n // sometimes file size can be bigger than the prov\n const endOffset = offset + part.byteLength;\n if(endOffset > this.bytes.byteLength) {\n const newBytes = new Uint8Array(endOffset);\n newBytes.set(this.bytes, 0);\n this.bytes = newBytes;\n }\n\n this.bytes.set(part, offset);\n };\n\n public truncate() {\n this.bytes = new Uint8Array();\n }\n\n public trim(size: number) {\n this.bytes = this.bytes.slice(0, size);\n }\n\n public finalize(saveToStorage = true) {\n const blob = blobConstruct(this.bytes, this.mimeType);\n\n if(saveToStorage && this.saveFileCallback) {\n this.saveFileCallback(blob);\n }\n\n return blob;\n }\n\n public getParts() {\n return this.bytes;\n }\n\n public replaceParts(parts: Uint8Array) {\n this.bytes = parts;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../config/debug';\nimport {IS_FIREFOX, IS_SAFARI} from '../environment/userAgent';\nimport {IS_SERVICE_WORKER, IS_WEB_WORKER} from '../helpers/context';\nimport dT from '../helpers/dT';\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst IS_WEBKIT = IS_SAFARI || IS_FIREFOX;\n\n// let getCallerFunctionNameFromLine: (line: string) => string;\n// if(IS_WEBKIT) {\n// getCallerFunctionNameFromLine = (line) => {\n// const splitted = line.split('@');\n// return splitted[0];\n// };\n// } else {\n// getCallerFunctionNameFromLine = (line: string) => {\n// const splitted = line.trim().split(' ');\n// if(splitted.length === 3) {\n// return splitted[1].slice(splitted[1].lastIndexOf('.') + 1);\n// }\n// };\n// }\n\nconst STYLES_SUPPORTED = !IS_WEBKIT;\n// const LINE_INDEX = IS_WEBKIT ? 2 : 3;\n\n// function getCallerFunctionName() {\n// const stack = new Error().stack;\n// const lines = stack.split('\\n');\n// const line = lines[LINE_INDEX] || lines[lines.length - 1];\n// // const match = line.match(/\\.([^\\.]+?)\\s/);\n// // line = match ? match[1] : line.trim();\n// const caller = getCallerFunctionNameFromLine(line) || '';\n// return '[' + caller + ']';\n// }\n\nexport const LOGGER_STYLES = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m'\n }\n};\n\nexport type Logger = {\n (...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n error(...args: any[]): void;\n trace(...args: any[]): void;\n debug(...args: any[]): void;\n assert(...args: any[]): void;\n // log(...args: any[]): void;\n group(...args: any[]): void;\n groupCollapsed(...args: any[]): void;\n groupEnd(...args: any[]): void;\n setPrefix(newPrefix: string): void;\n setLevel(level: 0 | 1 | 2 | 3 | 4): void;\n bindPrefix(prefix: string): Logger;\n};\n\nconst methods: ['debug' | 'info' | 'warn' | 'error' | 'assert' | 'trace'/* | 'log' */ | 'group' | 'groupCollapsed' | 'groupEnd', LogTypes][] = [\n ['debug', LogTypes.Debug],\n ['info', LogTypes.Log],\n ['warn', LogTypes.Warn],\n ['error', LogTypes.Error],\n ['assert', LogTypes.Error],\n ['trace', LogTypes.Log],\n ['group', LogTypes.Log],\n ['groupCollapsed', LogTypes.Log],\n ['groupEnd', LogTypes.Log]\n // [\"log\", LogTypes.Log]\n];\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false, style = ''): Logger {\n let originalPrefix: string;\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n if(!STYLES_SUPPORTED) {\n style = '';\n } else if(!style) {\n if(IS_SERVICE_WORKER) style = LOGGER_STYLES.fg.yellow;\n else if(IS_WEB_WORKER) style = LOGGER_STYLES.fg.cyan;\n }\n\n const originalStyle = style;\n if(style) style = `%s ${style}%s`;\n else style = '%s';\n\n // level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n const log: Logger = function(...args: any[]) {\n return type & LogTypes.Log && console.log(style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n } as any;\n\n methods.forEach(([method, logType]) => {\n log[method] = function(...args: any[]) {\n return type & logType && console[method](style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n };\n });\n\n log.setPrefix = function(newPrefix: string) {\n originalPrefix = newPrefix;\n prefix = '[' + newPrefix + ']';\n };\n\n log.setPrefix(prefix);\n\n log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n\n log.bindPrefix = function(prefix: string) {\n return logger(`${originalPrefix}] [${prefix}`, type, ignoreDebugReset, originalStyle);\n };\n\n return log;\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport type {getEnvironment} from '../../environment/utils';\nimport type loadState from '../appManagers/utils/state/loadState';\nimport type {StoragesResults} from '../appManagers/utils/storages/loadStorages';\nimport type {LocalStorageProxyTask} from '../localStorage';\nimport type {Awaited} from '../../types';\nimport type {Mirrors, MirrorTaskPayload, NotificationBuildTaskPayload, TabState} from './mtprotoworker';\nimport type toggleStorages from '../../helpers/toggleStorages';\nimport SuperMessagePort from './superMessagePort';\n\nexport type MTProtoManagerTaskPayload = {name: string, method: string, args: any[]};\n\ntype MTProtoBroadcastEvent = {\n event: (payload: {name: string, args: any[]}, source: MessageEventSource) => void\n};\n\nexport default class MTProtoMessagePort extends SuperMessagePort<{\n environment: (environment: ReturnType) => void,\n crypto: (payload: {method: string, args: any[]}) => Promise,\n state: (payload: {userId: UserId} & Awaited> & {storagesResults?: StoragesResults}) => void,\n manager: (payload: MTProtoManagerTaskPayload) => any,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => ReturnType,\n serviceWorkerOnline: (online: boolean) => void,\n serviceWorkerPort: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n cryptoPort: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n createObjectURL: (blob: Blob) => string,\n tabState: (payload: TabState, source: MessageEventSource) => void,\n createProxyWorkerURLs: (payload: {originalUrl: string, blob: Blob}) => string[],\n} & MTProtoBroadcastEvent, {\n convertWebp: (payload: {fileName: string, bytes: Uint8Array}) => Promise,\n convertOpus: (payload: {fileName: string, bytes: Uint8Array}) => Promise,\n localStorageProxy: (payload: LocalStorageProxyTask['payload']) => Promise,\n mirror: (payload: MirrorTaskPayload) => void,\n notificationBuild: (payload: NotificationBuildTaskPayload) => void,\n // hello: () => void\n} & MTProtoBroadcastEvent, Master> {\n private static INSTANCE: MTProtoMessagePort;\n\n constructor() {\n super('MTPROTO');\n\n MTProtoMessagePort.INSTANCE = this;\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.mtprotoMessagePort = this);\n }\n\n public static getInstance() {\n return this.INSTANCE as MTProtoMessagePort;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport bufferConcats from '../helpers/bytes/bufferConcats';\n\nUint8Array.prototype.concat = function(...args: Array) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n // return {type: 'bytes', value: [...this]};\n};\n\nPromise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n concat: (...args: Array) => Uint8Array,\n // toString: () => string,\n toJSON: () => number[],\n // toJSON: () => {type: 'bytes', value: number[]},\n }\n\n interface Promise {\n finally: (onfinally?: () => void) => Promise;\n }\n}\n","import {URL_ANY_PROTOCOL_REG_EXP} from '.';\n\nexport default function matchUrlProtocol(text: string) {\n return !text ? null : text.match(URL_ANY_PROTOCOL_REG_EXP);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WebPushApiManager} from '../mtproto/webPushApiManager';\nimport type {PushNotificationObject} from './push';\nimport type {MyUploadFile} from '../mtproto/apiFileManager';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\n\nexport type ServicePushPingTaskPayload = {\n localNotifications: boolean,\n lang: {\n push_action_mute1d: string\n push_action_settings: string\n push_message_nopreview: string\n },\n settings: WebPushApiManager['settings']\n};\n\nexport type ServiceRequestFilePartTaskPayload = {\n docId: DocId,\n dcId: number,\n offset: number,\n limit: number\n};\n\nexport type ServiceDownloadTaskPayload = {\n headers: any,\n id: string\n};\n\nexport type ServiceEvent = {\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void\n};\n\nexport default class ServiceMessagePort extends SuperMessagePort<{\n // from main thread to service worker\n notificationsClear: () => void,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => void,\n pushPing: (payload: ServicePushPingTaskPayload, source: MessageEventSource, event: MessageEvent) => void,\n hello: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n shownNotification: (payload: string) => void,\n\n // from mtproto worker\n download: (payload: ServiceDownloadTaskPayload) => void,\n downloadChunk: (payload: {id: ServiceDownloadTaskPayload['id'], chunk: Uint8Array}) => void\n downloadFinalize: (payload: ServiceDownloadTaskPayload['id']) => void,\n downloadCancel: (payload: ServiceDownloadTaskPayload['id']) => void\n}, {\n // to main thread\n pushClick: (payload: PushNotificationObject) => void,\n hello: (payload: void, source: MessageEventSource) => void,\n share: (payload: ShareData) => void,\n\n // to mtproto worker\n requestFilePart: (payload: ServiceRequestFilePartTaskPayload) => Promise | MyUploadFile\n} & ServiceEvent, Master> {\n constructor() {\n super('SERVICE');\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.serviceMessagePort = this);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Modes from '../config/modes';\nimport {IS_WORKER} from '../helpers/context';\nimport {WorkerTaskTemplate} from '../types';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\n// import { stringify } from '../helpers/json';\n\nclass LocalStorage> {\n private prefix = '';\n private cache: Partial = {};\n private useStorage = true;\n\n constructor(/* private preserveKeys: (keyof Storage)[] */) {\n if(Modes.test) {\n this.prefix = 't_';\n }\n }\n\n public get(key: T, useCache = true): Storage[T] {\n if(this.cache.hasOwnProperty(key) && useCache) {\n return this.cache[key];\n } else if(this.useStorage) {\n let value: Storage[T];\n try {\n value = localStorage.getItem(this.prefix + (key as string)) as any;\n } catch(err) {\n this.useStorage = false;\n }\n\n if(value !== null) {\n try {\n value = JSON.parse(value);\n } catch(err) {\n // console.error(err);\n }\n } else {\n value = undefined;\n }\n\n return value;\n }/* else {\n throw 'something went wrong';\n } */\n }\n\n public set(obj: Partial, onlyLocal = false) {\n for(const key in obj) {\n if(obj.hasOwnProperty(key)) {\n const value = obj[key];\n this.cache[key] = value;\n\n if(this.useStorage && !onlyLocal) {\n try {\n const stringified = JSON.stringify(value);\n localStorage.setItem(this.prefix + key, stringified);\n } catch(err) {\n this.useStorage = false;\n }\n }\n }\n }\n }\n\n public delete(key: keyof Storage, saveLocal = false) {\n // ! it is needed here\n key = '' + (key as string);\n\n if(!saveLocal) {\n delete this.cache[key];\n }\n\n // if(this.useStorage) {\n try {\n localStorage.removeItem(this.prefix + (key as string));\n } catch(err) {\n\n }\n // }\n }\n\n /* public clear(preserveKeys: (keyof Storage)[] = this.preserveKeys) {\n // if(this.useStorage) {\n try {\n let obj: Partial = {};\n if(preserveKeys) {\n preserveKeys.forEach((key) => {\n const value = this.get(key);\n if(value !== undefined) {\n obj[key] = value;\n }\n });\n }\n\n localStorage.clear();\n\n if(preserveKeys) {\n this.set(obj);\n }\n } catch(err) {\n\n }\n // }\n } */\n\n public clear() {\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance', 'user_auth', 'state_id', 'k_build'];\n for(let i = 1; i <= 5; ++i) {\n keys.push(`dc${i}_server_salt`);\n keys.push(`dc${i}_auth_key`);\n }\n\n for(const key of keys) {\n this.delete(key, true);\n }\n }\n\n public toggleStorage(enabled: boolean, clearWrite: boolean) {\n this.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n this.clear();\n } else {\n return this.set(this.cache);\n }\n }\n}\n\nexport interface LocalStorageProxyTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'set' | 'get' | 'delete' | 'clear' | 'toggleStorage',\n args: any[]\n }\n};\n\nexport interface LocalStorageProxyTaskResponse extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: any\n};\n\nexport default class LocalStorageController> {\n private static STORAGES: LocalStorageController[] = [];\n // private log = (...args: any[]) => console.log('[SW LS]', ...args);\n // private log = (...args: any[]) => {};\n\n private storage: LocalStorage;\n\n constructor(/* private preserveKeys: (keyof Storage)[] = [] */) {\n LocalStorageController.STORAGES.push(this);\n\n if(!IS_WORKER) {\n this.storage = new LocalStorage(/* preserveKeys */);\n }\n }\n\n private async proxy(type: LocalStorageProxyTask['payload']['type'], ...args: LocalStorageProxyTask['payload']['args']): Promise {\n if(IS_WORKER) {\n const port = MTProtoMessagePort.getInstance();\n return port.invoke('localStorageProxy', {type, args});\n }\n\n args = Array.prototype.slice.call(args);\n\n // @ts-ignore\n return this.storage[type].apply(this.storage, args as any);\n }\n\n public get(key: T, useCache?: boolean) {\n return this.proxy('get', key, useCache);\n }\n\n public set(obj: Partial, onlyLocal?: boolean) {\n return this.proxy('set', obj, onlyLocal);\n }\n\n public delete(key: keyof Storage, saveLocal?: boolean) {\n return this.proxy('delete', key, saveLocal);\n }\n\n public clear(/* preserveKeys?: (keyof Storage)[] */) {\n return this.proxy('clear'/* , preserveKeys */);\n }\n\n public toggleStorage(enabled: boolean, clearWrite: boolean) {\n return this.proxy('toggleStorage', enabled, clearWrite);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppInstance} from './mtproto/singleInstance';\nimport type {UserAuth} from './mtproto/mtproto_config';\nimport type {DcId} from '../types';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport LocalStorageController from './localStorage';\n\nconst sessionStorage = new LocalStorageController<{\n dc: DcId,\n user_auth: UserAuth,\n state_id: number,\n dc1_auth_key: string,\n dc2_auth_key: string,\n dc3_auth_key: string,\n dc4_auth_key: string,\n dc5_auth_key: string,\n dc1_server_salt: string,\n dc2_server_salt: string,\n dc3_server_salt: string,\n dc4_server_salt: string,\n dc5_server_salt: string,\n server_time_offset: number,\n xt_instance: AppInstance,\n kz_version: 'K' | 'Z',\n tgme_sync: {\n canRedirect: boolean,\n ts: number\n },\n k_build: number\n}>(/* ['kz_version'] */);\nMOUNT_CLASS_TO.appStorage = sessionStorage;\nexport default sessionStorage;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ChatSavedPosition} from './appManagers/appImManager';\nimport type {AppDraftsManager} from './appManagers/appDraftsManager';\nimport type {State} from '../config/state';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport {LangPackDifference} from '../layer';\nimport AppStorage from './storage';\nimport DATABASE_STATE from '../config/databases/state';\n\nclass StateStorage extends AppStorage<{\n chatPositions: {\n [peerId_threadId: string]: ChatSavedPosition\n },\n langPack: LangPackDifference,\n drafts: AppDraftsManager['drafts'],\n user_auth: any, // support old webk format\n} & State, typeof DATABASE_STATE> {\n constructor() {\n super(DATABASE_STATE, 'session');\n }\n}\n\nconst stateStorage = new StateStorage();\nMOUNT_CLASS_TO.stateStorage = stateStorage;\nexport default stateStorage;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../config/databases';\nimport {MOUNT_CLASS_TO} from '../config/debug';\n// import DATABASE_SESSION from \"../config/databases/session\";\nimport deferredPromise, {CancellablePromise} from '../helpers/cancellablePromise';\nimport {IS_WORKER} from '../helpers/context';\nimport throttle from '../helpers/schedulers/throttle';\n// import { WorkerTaskTemplate } from \"../types\";\nimport IDBStorage from './files/idb';\n\nfunction noop() {}\n\n/* export interface LocalStorageProxySetTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'set',\n keys: string[],\n values: any[]\n }\n};\n\nexport interface LocalStorageProxyDeleteTask extends WorkerTaskTemplate {\n type: 'localStorageProxy',\n payload: {\n type: 'delete',\n keys: string[]\n }\n}; */\n\nconst THROTTLE_TIME = 16;\n\n/* Storage extends {[name: string]: any} *//* Storage extends Record */\nexport default class AppStorage<\n Storage extends Record,\n T extends Database\n> {\n private static STORAGES: AppStorage>[] = [];\n private storage: IDBStorage;// new CacheStorageController('session');\n\n // private cache: Partial<{[key: string]: Storage[typeof key]}> = {};\n private cache: Partial = {};\n private useStorage: boolean;\n private savingFreezed: boolean;\n\n private getPromises: Map> = new Map();\n private getThrottled: () => void;\n\n private keysToSet: Set = new Set();\n private saveThrottled: () => void;\n private saveDeferred = deferredPromise();\n\n private keysToDelete: Set = new Set();\n private deleteThrottled: () => void;\n private deleteDeferred = deferredPromise();\n\n constructor(private db: T, private storeName: typeof db['stores'][number]['name']) {\n this.storage = new IDBStorage(db, storeName);\n\n if(AppStorage.STORAGES.length) {\n this.useStorage = AppStorage.STORAGES[0].useStorage;\n } else {\n this.useStorage = true;\n }\n\n this.savingFreezed = false;\n\n AppStorage.STORAGES.push(this);\n\n this.saveThrottled = throttle(async() => {\n const deferred = this.saveDeferred;\n this.saveDeferred = deferredPromise();\n\n const set = this.keysToSet;\n if(set.size) {\n const keys = Array.from(set.values()) as string[];\n set.clear();\n\n const values = keys.map((key) => this.cache[key]);\n try {\n // console.log('setItem: will set', key/* , value */);\n // await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'\n // await this.storage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));\n\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\n self.postMessage({\n type: 'localStorageProxy',\n payload: {\n type: 'set',\n keys,\n values\n }\n } as LocalStorageProxySetTask);\n } */\n\n await this.storage.save(keys, values);\n // console.log('setItem: have set', key/* , value */);\n } catch(e) {\n // this.useCS = false;\n console.error('[AS]: set error:', e, keys, values);\n }\n }\n\n deferred.resolve();\n\n if(set.size) {\n this.saveThrottled();\n }\n }, THROTTLE_TIME, false);\n\n this.deleteThrottled = throttle(async() => {\n const deferred = this.deleteDeferred;\n this.deleteDeferred = deferredPromise();\n\n const set = this.keysToDelete;\n if(set.size) {\n const keys = Array.from(set.values()) as string[];\n set.clear();\n\n try {\n /* if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\n self.postMessage({\n type: 'localStorageProxy',\n payload: {\n type: 'delete',\n keys\n }\n } as LocalStorageProxyDeleteTask);\n } */\n\n await this.storage.delete(keys);\n } catch(e) {\n console.error('[AS]: delete error:', e, keys);\n }\n }\n\n deferred.resolve();\n\n if(set.size) {\n this.deleteThrottled();\n }\n }, THROTTLE_TIME, false);\n\n this.getThrottled = throttle(async() => {\n const keys = Array.from(this.getPromises.keys());\n\n // const perf = performance.now();\n this.storage.get(keys as string[]).then((values) => {\n for(let i = 0, length = keys.length; i < length; ++i) {\n const key = keys[i];\n const deferred = this.getPromises.get(key);\n if(deferred) {\n // @ts-ignore\n deferred.resolve(this.cache[key] = values[i]);\n this.getPromises.delete(key);\n }\n }\n\n // console.log('[AS]: get time', keys, performance.now() - perf);\n }, (error: ApiError) => {\n const ignoreErrors: Set = new Set(['NO_ENTRY_FOUND', 'STORAGE_OFFLINE']);\n if(!ignoreErrors.has(error.type)) {\n this.useStorage = false;\n console.error('[AS]: get error:', error, keys, storeName);\n }\n\n for(let i = 0, length = keys.length; i < length; ++i) {\n const key = keys[i];\n const deferred = this.getPromises.get(key);\n if(deferred) {\n // deferred.reject(error);\n deferred.resolve(undefined);\n this.getPromises.delete(key);\n }\n }\n }).finally(() => {\n if(this.getPromises.size) {\n this.getThrottled();\n }\n });\n }, THROTTLE_TIME, false);\n }\n\n public isAvailable() {\n return this.useStorage;\n }\n\n public getCache() {\n return this.cache;\n }\n\n public getFromCache(key: T) {\n return this.cache[key];\n }\n\n public setToCache(key: keyof Storage, value: Storage[typeof key]) {\n return this.cache[key] = value;\n }\n\n public async get(key: T, useCache = true): Promise {\n if(this.cache.hasOwnProperty(key) && useCache) {\n return this.getFromCache(key);\n } else if(this.useStorage) {\n const r = this.getPromises.get(key);\n if(r) return r as any;\n\n const p = deferredPromise();\n this.getPromises.set(key, p as any);\n\n this.getThrottled();\n\n return p;\n }/* else {\n throw 'something went wrong';\n } */\n }\n\n public getAll() {\n return this.storage.getAll().catch(() => []);\n }\n\n public set(obj: Partial, onlyLocal = false) {\n // console.log('storageSetValue', obj, callback, arguments);\n\n const canUseStorage = this.useStorage && !onlyLocal && !this.savingFreezed;\n for(const key in obj) {\n if(obj.hasOwnProperty(key)) {\n const value = obj[key];\n this.setToCache(key, value);\n\n // let perf = /* DEBUG */false ? performance.now() : 0;\n // value = JSON.stringify(value);\n\n // if(perf) {\n // let elapsedTime = performance.now() - perf;\n // if(elapsedTime > 10) {\n // console.warn('LocalStorage set: stringify time by JSON.stringify:', elapsedTime, key);\n // }\n // }\n\n /* perf = performance.now();\n value = stringify(value);\n console.log('LocalStorage set: stringify time by own stringify:', performance.now() - perf); */\n\n if(canUseStorage) {\n this.keysToSet.add(key);\n this.keysToDelete.delete(key);\n this.saveThrottled();\n }\n }\n }\n\n return canUseStorage ? this.saveDeferred : Promise.resolve();\n }\n\n public delete(key: keyof Storage, saveLocal = false) {\n /* if(!this.cache.hasOwnProperty(key)) {\n return;\n } */\n\n // ! it is needed here\n key = '' + (key as string);\n\n if(!saveLocal) {\n delete this.cache[key];\n }\n\n if(this.useStorage) {\n this.keysToSet.delete(key);\n this.keysToDelete.add(key);\n this.deleteThrottled();\n }\n\n return this.useStorage ? this.deleteDeferred : Promise.resolve();\n }\n\n public clear(saveLocal = false) {\n if(!saveLocal) {\n for(const i in this.cache) {\n delete this.cache[i];\n }\n }\n\n return this.storage.clear().catch(noop);\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!IS_WORKER || !clearWrite) {\n return;\n }\n\n if(!enabled) {\n storage.keysToSet.clear();\n storage.keysToDelete.clear();\n storage.getPromises.forEach((deferred) => deferred.resolve(undefined));\n storage.getPromises.clear();\n return storage.clear(true);\n } else {\n return storage.set(storage.cache);\n }\n })).catch(noop);\n }\n\n public static freezeSaving>(callback: () => any, names: T['stores'][number]['name'][]) {\n this.STORAGES.forEach((storage) => storage.savingFreezed = true);\n try {\n callback();\n } catch(err) {\n console.error('freezeSaving callback error:', err);\n }\n this.STORAGES.forEach((storage) => storage.savingFreezed = false);\n }\n\n /* public deleteDatabase() {\n return IDBStorage.deleteDatabase().catch(noop);\n } */\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.AppStorage = AppStorage);\n","// Copyright Twitter Inc. Licensed under MIT\n// https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md\n\nconst originalString = '((?:\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffc-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc68\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc69\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83d\\udc69\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffc-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffb\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffc\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\uddd1\\ud83c\\udffd\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\uddd1\\ud83c\\udffe\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\u2764\\ufe0f?\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udffe]|\\ud83e\\uddd1\\ud83c\\udfff\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc8b\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\udef1\\ud83c\\udffb\\u200d\\ud83e\\udef2\\ud83c[\\udffc-\\udfff]|\\ud83e\\udef1\\ud83c\\udffc\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffd-\\udfff]|\\ud83e\\udef1\\ud83c\\udffd\\u200d\\ud83e\\udef2\\ud83c[\\udffb\\udffc\\udffe\\udfff]|\\ud83e\\udef1\\ud83c\\udffe\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffd\\udfff]|\\ud83e\\udef1\\ud83c\\udfff\\u200d\\ud83e\\udef2\\ud83c[\\udffb-\\udffe]|\\ud83d\\udc68\\u200d\\u2764\\ufe0f?\\u200d\\ud83d\\udc68|\\ud83d\\udc69\\u200d\\u2764\\ufe0f?\\u200d\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1\\u200d\\ud83e\\udd1d\\u200d\\ud83e\\uddd1|\\ud83d\\udc6b\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6c\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc6d\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc8f\\ud83c[\\udffb-\\udfff]|\\ud83d\\udc91\\ud83c[\\udffb-\\udfff]|\\ud83e\\udd1d\\ud83c[\\udffb-\\udfff]|\\ud83d[\\udc6b-\\udc6d\\udc8f\\udc91]|\\ud83e\\udd1d)|(?:\\ud83d[\\udc68\\udc69]|\\ud83e\\uddd1)(?:\\ud83c[\\udffb-\\udfff])?\\u200d(?:\\u2695\\ufe0f?|\\u2696\\ufe0f?|\\u2708\\ufe0f?|\\ud83c[\\udf3e\\udf73\\udf7c\\udf84\\udf93\\udfa4\\udfa8\\udfeb\\udfed]|\\ud83d[\\udcbb\\udcbc\\udd27\\udd2c\\ude80\\ude92]|\\ud83e[\\uddaf-\\uddb3\\uddbc\\uddbd])|(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75]|\\u26f9)(?:(?:\\ud83c[\\udffb-\\udfff]|\\ufe0f?)\\u200d[\\u2640\\u2642]\\ufe0f?)|(?:\\ud83c[\\udfc3\\udfc4\\udfca]|\\ud83d[\\udc6e\\udc70\\udc71\\udc73\\udc77\\udc81\\udc82\\udc86\\udc87\\ude45-\\ude47\\ude4b\\ude4d\\ude4e\\udea3\\udeb4-\\udeb6]|\\ud83e[\\udd26\\udd35\\udd37-\\udd39\\udd3d\\udd3e\\uddb8\\uddb9\\uddcd-\\uddcf\\uddd4\\uddd6-\\udddd])(?:\\ud83c[\\udffb-\\udfff])?\\u200d[\\u2640\\u2642]\\ufe0f?|(?:\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc68\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc68\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc66\\u200d\\ud83d\\udc66|\\ud83d\\udc69\\u200d\\ud83d\\udc67\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83c\\udff3\\ufe0f?\\u200d\\u26a7\\ufe0f?|\\ud83c\\udff3\\ufe0f?\\u200d\\ud83c\\udf08|\\ud83d\\ude36\\u200d\\ud83c\\udf2b\\ufe0f?|\\u2764\\ufe0f?\\u200d\\ud83d\\udd25|\\u2764\\ufe0f?\\u200d\\ud83e\\ude79|\\ud83c\\udff4\\u200d\\u2620\\ufe0f?|\\ud83d\\udc15\\u200d\\ud83e\\uddba|\\ud83d\\udc3b\\u200d\\u2744\\ufe0f?|\\ud83d\\udc41\\u200d\\ud83d\\udde8|\\ud83d\\udc68\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc69\\u200d\\ud83d[\\udc66\\udc67]|\\ud83d\\udc6f\\u200d\\u2640\\ufe0f?|\\ud83d\\udc6f\\u200d\\u2642\\ufe0f?|\\ud83d\\ude2e\\u200d\\ud83d\\udca8|\\ud83d\\ude35\\u200d\\ud83d\\udcab|\\ud83e\\udd3c\\u200d\\u2640\\ufe0f?|\\ud83e\\udd3c\\u200d\\u2642\\ufe0f?|\\ud83e\\uddde\\u200d\\u2640\\ufe0f?|\\ud83e\\uddde\\u200d\\u2642\\ufe0f?|\\ud83e\\udddf\\u200d\\u2640\\ufe0f?|\\ud83e\\udddf\\u200d\\u2642\\ufe0f?|\\ud83d\\udc08\\u200d\\u2b1b)|[#*0-9]\\ufe0f??\\u20e3|(?:[ยฉยฎ\\u2122\\u265f]\\ufe0f?)|(?:\\ud83c[\\udc04\\udd70\\udd71\\udd7e\\udd7f\\ude02\\ude1a\\ude2f\\ude37\\udf21\\udf24-\\udf2c\\udf36\\udf7d\\udf96\\udf97\\udf99-\\udf9b\\udf9e\\udf9f\\udfcd\\udfce\\udfd4-\\udfdf\\udff3\\udff5\\udff7]|\\ud83d[\\udc3f\\udc41\\udcfd\\udd49\\udd4a\\udd6f\\udd70\\udd73\\udd76-\\udd79\\udd87\\udd8a-\\udd8d\\udda5\\udda8\\uddb1\\uddb2\\uddbc\\uddc2-\\uddc4\\uddd1-\\uddd3\\udddc-\\uddde\\udde1\\udde3\\udde8\\uddef\\uddf3\\uddfa\\udecb\\udecd-\\udecf\\udee0-\\udee5\\udee9\\udef0\\udef3]|[\\u203c\\u2049\\u2139\\u2194-\\u2199\\u21a9\\u21aa\\u231a\\u231b\\u2328\\u23cf\\u23ed-\\u23ef\\u23f1\\u23f2\\u23f8-\\u23fa\\u24c2\\u25aa\\u25ab\\u25b6\\u25c0\\u25fb-\\u25fe\\u2600-\\u2604\\u260e\\u2611\\u2614\\u2615\\u2618\\u2620\\u2622\\u2623\\u2626\\u262a\\u262e\\u262f\\u2638-\\u263a\\u2640\\u2642\\u2648-\\u2653\\u2660\\u2663\\u2665\\u2666\\u2668\\u267b\\u267f\\u2692-\\u2697\\u2699\\u269b\\u269c\\u26a0\\u26a1\\u26a7\\u26aa\\u26ab\\u26b0\\u26b1\\u26bd\\u26be\\u26c4\\u26c5\\u26c8\\u26cf\\u26d1\\u26d3\\u26d4\\u26e9\\u26ea\\u26f0-\\u26f5\\u26f8\\u26fa\\u26fd\\u2702\\u2708\\u2709\\u270f\\u2712\\u2714\\u2716\\u271d\\u2721\\u2733\\u2734\\u2744\\u2747\\u2757\\u2763\\u2764\\u27a1\\u2934\\u2935\\u2b05-\\u2b07\\u2b1b\\u2b1c\\u2b50\\u2b55\\u3030\\u303d\\u3297\\u3299])(?:\\ufe0f?|(?!\\ufe0e))|(?:(?:\\ud83c[\\udfcb\\udfcc]|\\ud83d[\\udd74\\udd75\\udd90]|[\\u261d\\u26f7\\u26f9\\u270c\\u270d])(?:\\ufe0f?|(?!\\ufe0e))|(?:\\ud83c[\\udf85\\udfc2-\\udfc4\\udfc7\\udfca]|\\ud83d[\\udc42\\udc43\\udc46-\\udc50\\udc66-\\udc69\\udc6e\\udc70-\\udc78\\udc7c\\udc81-\\udc83\\udc85-\\udc87\\udcaa\\udd7a\\udd95\\udd96\\ude45-\\ude47\\ude4b-\\ude4f\\udea3\\udeb4-\\udeb6\\udec0\\udecc]|\\ud83e[\\udd0c\\udd0f\\udd18-\\udd1c\\udd1e\\udd1f\\udd26\\udd30-\\udd39\\udd3d\\udd3e\\udd77\\uddb5\\uddb6\\uddb8\\uddb9\\uddbb\\uddcd-\\uddcf\\uddd1-\\udddd\\udec3-\\udec5\\udef0-\\udef6]|[\\u270a\\u270b]))(?:\\ud83c[\\udffb-\\udfff])?|(?:\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc65\\udb40\\udc6e\\udb40\\udc67\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc73\\udb40\\udc63\\udb40\\udc74\\udb40\\udc7f|\\ud83c\\udff4\\udb40\\udc67\\udb40\\udc62\\udb40\\udc77\\udb40\\udc6c\\udb40\\udc73\\udb40\\udc7f|\\ud83c\\udde6\\ud83c[\\udde8-\\uddec\\uddee\\uddf1\\uddf2\\uddf4\\uddf6-\\uddfa\\uddfc\\uddfd\\uddff]|\\ud83c\\udde7\\ud83c[\\udde6\\udde7\\udde9-\\uddef\\uddf1-\\uddf4\\uddf6-\\uddf9\\uddfb\\uddfc\\uddfe\\uddff]|\\ud83c\\udde8\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\uddee\\uddf0-\\uddf5\\uddf7\\uddfa-\\uddff]|\\ud83c\\udde9\\ud83c[\\uddea\\uddec\\uddef\\uddf0\\uddf2\\uddf4\\uddff]|\\ud83c\\uddea\\ud83c[\\udde6\\udde8\\uddea\\uddec\\udded\\uddf7-\\uddfa]|\\ud83c\\uddeb\\ud83c[\\uddee-\\uddf0\\uddf2\\uddf4\\uddf7]|\\ud83c\\uddec\\ud83c[\\udde6\\udde7\\udde9-\\uddee\\uddf1-\\uddf3\\uddf5-\\uddfa\\uddfc\\uddfe]|\\ud83c\\udded\\ud83c[\\uddf0\\uddf2\\uddf3\\uddf7\\uddf9\\uddfa]|\\ud83c\\uddee\\ud83c[\\udde8-\\uddea\\uddf1-\\uddf4\\uddf6-\\uddf9]|\\ud83c\\uddef\\ud83c[\\uddea\\uddf2\\uddf4\\uddf5]|\\ud83c\\uddf0\\ud83c[\\uddea\\uddec-\\uddee\\uddf2\\uddf3\\uddf5\\uddf7\\uddfc\\uddfe\\uddff]|\\ud83c\\uddf1\\ud83c[\\udde6-\\udde8\\uddee\\uddf0\\uddf7-\\uddfb\\uddfe]|\\ud83c\\uddf2\\ud83c[\\udde6\\udde8-\\udded\\uddf0-\\uddff]|\\ud83c\\uddf3\\ud83c[\\udde6\\udde8\\uddea-\\uddec\\uddee\\uddf1\\uddf4\\uddf5\\uddf7\\uddfa\\uddff]|\\ud83c\\uddf4\\ud83c\\uddf2|\\ud83c\\uddf5\\ud83c[\\udde6\\uddea-\\udded\\uddf0-\\uddf3\\uddf7-\\uddf9\\uddfc\\uddfe]|\\ud83c\\uddf6\\ud83c\\udde6|\\ud83c\\uddf7\\ud83c[\\uddea\\uddf4\\uddf8\\uddfa\\uddfc]|\\ud83c\\uddf8\\ud83c[\\udde6-\\uddea\\uddec-\\uddf4\\uddf7-\\uddf9\\uddfb\\uddfd-\\uddff]|\\ud83c\\uddf9\\ud83c[\\udde6\\udde8\\udde9\\uddeb-\\udded\\uddef-\\uddf4\\uddf7\\uddf9\\uddfb\\uddfc\\uddff]|\\ud83c\\uddfa\\ud83c[\\udde6\\uddec\\uddf2\\uddf3\\uddf8\\uddfe\\uddff]|\\ud83c\\uddfb\\ud83c[\\udde6\\udde8\\uddea\\uddec\\uddee\\uddf3\\uddfa]|\\ud83c\\uddfc\\ud83c[\\uddeb\\uddf8]|\\ud83c\\uddfd\\ud83c\\uddf0|\\ud83c\\uddfe\\ud83c[\\uddea\\uddf9]|\\ud83c\\uddff\\ud83c[\\udde6\\uddf2\\uddfc]|\\ud83c[\\udccf\\udd8e\\udd91-\\udd9a\\udde6-\\uddff\\ude01\\ude32-\\ude36\\ude38-\\ude3a\\ude50\\ude51\\udf00-\\udf20\\udf2d-\\udf35\\udf37-\\udf7c\\udf7e-\\udf84\\udf86-\\udf93\\udfa0-\\udfc1\\udfc5\\udfc6\\udfc8\\udfc9\\udfcf-\\udfd3\\udfe0-\\udff0\\udff4\\udff8-\\udfff]|\\ud83d[\\udc00-\\udc3e\\udc40\\udc44\\udc45\\udc51-\\udc65\\udc6a\\udc6f\\udc79-\\udc7b\\udc7d-\\udc80\\udc84\\udc88-\\udc8e\\udc90\\udc92-\\udca9\\udcab-\\udcfc\\udcff-\\udd3d\\udd4b-\\udd4e\\udd50-\\udd67\\udda4\\uddfb-\\ude44\\ude48-\\ude4a\\ude80-\\udea2\\udea4-\\udeb3\\udeb7-\\udebf\\udec1-\\udec5\\uded0-\\uded2\\uded5-\\uded7\\udedd-\\udedf\\udeeb\\udeec\\udef4-\\udefc\\udfe0-\\udfeb\\udff0]|\\ud83e[\\udd0d\\udd0e\\udd10-\\udd17\\udd20-\\udd25\\udd27-\\udd2f\\udd3a\\udd3c\\udd3f-\\udd45\\udd47-\\udd76\\udd78-\\uddb4\\uddb7\\uddba\\uddbc-\\uddcc\\uddd0\\uddde-\\uddff\\ude70-\\ude74\\ude78-\\ude7c\\ude80-\\ude86\\ude90-\\udeac\\udeb0-\\udeba\\udec0-\\udec2\\uded0-\\uded9\\udee0-\\udee7]|[\\u23e9-\\u23ec\\u23f0\\u23f3\\u267e\\u26ce\\u2705\\u2728\\u274c\\u274e\\u2753-\\u2755\\u2795-\\u2797\\u27b0\\u27bf\\ue50a])|\\ufe0f)';\nexport default originalString;\n"],"names":["MAIN_DOMAINS","threads","Math","min","navigator","hardwareConcurrency","App","id","hash","version","versionFull","build","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","includes","location","hostname","suffix","cryptoWorkers","name","stores","blobConstruct","blobParts","mimeType","Array","isArray","safeMimeType","Blob","type","blobSafeMimeType","indexOf","bufferConcats","args","length","reduce","acc","v","byteLength","tmp","Uint8Array","lastLength","forEach","b","set","ArrayBuffer","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","listeners","callback","addNotifyListener","push","deferred","Promise","resolve","reject","value","catch","finally","cancel","Object","assign","IS_SERVICE_WORKER","ServiceWorkerGlobalScope","self","IS_WEB_WORKER","WorkerGlobalScope","IS_WORKER","postMessage","listener","err","console","error","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","then","slice","bind","noop","copy","obj","Date","getTime","map","el","isView","clonedObj","constructor","prop","hasOwnProperty","deepEqual","x","y","ok","keys","tx","every","key","isObject","object","safeAssign","fromObject","i","undefined","validateInitObject","initObject","currentObject","onReplace","previousKey","ignorePaths","path","_path","has","String","prototype","toUserId","this","toChatId","toPeerId","isChat","isPeerId","test","toString","Number","abs","newMethod","originMethod","call","arrays","Uint16Array","Uint32Array","nextRandomUint","bits","array","crypto","getRandomValues","randomLong","recordPromiseBound","log","promise","description","perf","performance","now","warn","recordPromise","pause","ms","setTimeout","throttle","fn","shouldRunFirst","isPending","interval","_args","setInterval","clearInterval","capitalizeFirstLetter","string","charAt","toUpperCase","toggleStorages","enabled","clearWrite","tsNow","seconds","t","getServerMessageId","messageId","toServer","q","l","used","clearMessageId","MESSAGE_ID_INCREMENT","MESSAGE_ID_OFFSET","isAnyChat","peerId","isUser","CryptoMessagePort","super","lastIndex","invokeCryptoNew","method","transfer","payload","result","sendPortIndex","sendPorts","invoke","invokeCrypto","cryptoMessagePort","CacheStorageController","dbName","useStorage","STORAGES","openDatabase","openDbPromise","caches","open","delete","entryName","timeoutOperation","cache","deleteAll","get","match","save","response","put","getFile","fileName","saveFile","blob","Response","headers","size","rejected","timeout","res","clearTimeout","prepareWriting","fileSize","getWriter","static","storage","MemoryWriter","saveFileCallback","bytes","write","part","offset","endOffset","newBytes","truncate","trim","finalize","saveToStorage","getParts","replaceParts","parts","LogTypes","LOG_LEVELS","None","Error","Warn","Log","Debug","STYLES_SUPPORTED","IS_SAFARI","IS_FIREFOX","LOGGER_STYLES","methods","logger","prefix","ignoreDebugReset","style","originalPrefix","originalStyle","logType","setPrefix","newPrefix","setLevel","level","bindPrefix","MTProtoMessagePort","INSTANCE","concat","toJSON","onFinally","reason","matchUrlProtocol","text","ServiceMessagePort","LocalStorage","useCache","localStorage","getItem","JSON","parse","onlyLocal","stringified","stringify","setItem","saveLocal","removeItem","clear","toggleStorage","LocalStorageController","proxy","apply","sessionStorage","StateStorage","stateStorage","AppStorage","db","storeName","getPromises","Map","keysToSet","Set","saveDeferred","keysToDelete","deleteDeferred","savingFreezed","saveThrottled","from","values","e","deleteThrottled","getThrottled","isAvailable","getCache","getFromCache","setToCache","r","p","getAll","canUseStorage","add","names"],"sourceRoot":""} \ No newline at end of file diff --git a/public/508.fda3e28eaa781dbc8942.chunk.js b/public/508.c10ccdd1f7e2e9bbef5a.chunk.js similarity index 98% rename from public/508.fda3e28eaa781dbc8942.chunk.js rename to public/508.c10ccdd1f7e2e9bbef5a.chunk.js index 1e90d557..a09dc9c2 100644 --- a/public/508.fda3e28eaa781dbc8942.chunk.js +++ b/public/508.c10ccdd1f7e2e9bbef5a.chunk.js @@ -1,2 +1,2 @@ (()=>{"use strict";(()=>{if("undefined"!=typeof __webpack_require__){var e=__webpack_require__.u,t=__webpack_require__.e,r={},i={};__webpack_require__.u=function(t){return e(t)+(r.hasOwnProperty(t)?"?"+r[t]:"")},__webpack_require__.e=function(n){return t(n).catch((function(t){var a=i.hasOwnProperty(n)?i[n]:999999;if(a<1){var o=e(n);throw t.message="Loading chunk "+n+" failed after 999999 retries.\n("+o+")",t.request=o,t}return new Promise((function(e){setTimeout((function(){var t=Date.now();r[n]=t,i[n]=a-1,e(__webpack_require__.e(n))}),3e3)}))}))}}})();const e="undefined"!=typeof window?window:self,t=navigator?navigator.userAgent:null,r=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&e.MSStream,!!("safari"in e)||!(!t||!(/\b(iPad|iPhone|iPod)\b/.test(t)||t.match("Safari")&&!t.match("Chrome"))));let i;if(navigator.userAgent.toLowerCase().indexOf("firefox"),(void 0===navigator.maxTouchPoints||navigator.maxTouchPoints>0)&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i),r)try{i=+navigator.userAgent.match(/Version\/(.+?) /)[1]>=14}catch(e){i=!1}else i=!0;const n=i,a="undefined"!=typeof ImageBitmap;const o=[[[16219713,13335381],[16757049,16168585],[16765248,16764327],[16768889,16768965]],[[16219713,10771e3],[16757049,14653547],[16765248,15577475],[16768889,16040864]],[[16219713,7354903],[16757049,11233085],[16765248,12812110],[16768889,14194279]],[[16219713,4858889],[16757049,8207886],[16765248,9852201],[16768889,11100983]],[[16219713,2101002],[16757049,4270372],[16765248,5848375],[16768889,6505791]]],s=e=>Math.round(255*Math.min(Math.max(e,0),1));importScripts("rlottie-wasm.js");const h=self.Module;class d{constructor(e,t,r,i){this.reqId=e,this.width=t,this.height=r,this.raw=i}init(e,t){if(!this.dead){this.fps=Math.max(1,Math.min(60,t||60));try{this.handle=c.Api.init(),this.stringOnWasmHeap=allocate(intArrayFromString(e),"i8",0),this.frameCount=c.Api.loadFromData(this.handle,this.stringOnWasmHeap),c.Api.resize(this.handle,this.width,this.height),m(["loaded",this.reqId,this.frameCount,this.fps]),!this.raw&&a&&(this.imageData=new ImageData(this.width,this.height))}catch(e){console.error("init RLottieItem error:",e),m(["error",this.reqId,e])}}}render(e,t){if(!this.dead&&void 0!==this.handle&&!(this.frameCount{m(["frame",this.reqId,e,t],[t])}))):(t?t.set(i):t=new Uint8ClampedArray(i),m(["frame",this.reqId,e,t],[t.buffer]))}catch(e){console.error("Render error:",e),this.dead=!0,m(["error",this.reqId,e])}}destroy(){this.dead=!0,void 0!==this.handle&&c.Api.destroy(this.handle)}}const c=new class{constructor(){this.Api={}}initApi(){this.Api={init:h.cwrap("lottie_init","",[]),destroy:h.cwrap("lottie_destroy","",["number"]),resize:h.cwrap("lottie_resize","",["number","number","number"]),buffer:h.cwrap("lottie_buffer","number",["number"]),render:h.cwrap("lottie_render","",["number","number"]),loadFromData:h.cwrap("lottie_load_from_data","number",["number","number"])}}init(){this.initApi(),m(["ready"])}};h.onRuntimeInitialized=function(){c.init()};const u={},f={loadFromData:function(e,t,r,i,n,a){const h=u[e]=new d(e,r,i,a);(function(e){return function(e,t){return new Promise((t=>{const r=new FileReader;r.addEventListener("loadend",(e=>{t(e.target.result)})),r.readAsText(e)}))}(e)})(t).then((t=>{try{if("number"==typeof n&&n>=1&&n<=5){const e=JSON.parse(t);(function(e,t){const r=o[Math.max(t-1,0)],i=e=>{switch(e.ty){case"st":case"fl":(e=>{const t=e.c.k,i=s(t[2])|s(t[1])<<8|s(t[0])<<16,n=r.find((e=>e[0]===i));n&&(t[0]=(n[1]>>16&255)/255,t[1]=(n[1]>>8&255)/255,t[2]=(255&n[1])/255)})(e)}e.hasOwnProperty("it")&&n(e.it)},n=e=>{for(const t of e)i(t)};try{for(const t of e.layers)if(t.shapes)for(const e of t.shapes)e.it?n(e.it):i(e)}catch(r){console.warn("cant apply replacements",r,e,t)}})(e,n),t=JSON.stringify(e)}const e=t.match(/"fr":\s*?(\d+?),/),r=+(null==e?void 0:e[1])||60;h.init(t,r)}catch(r){console.error("Invalid file for sticker:",t),m(["error",e,r])}}))},destroy:function(e){const t=u[e];t&&(t.destroy(),delete u[e])},renderFrame:function(e,t,r){u[e].render(t,r)}};function m(e,t){postMessage({queryMethodListener:e.shift(),queryMethodArguments:e},n?t:void 0)}onmessage=function(e){f[e.data.queryMethod].apply(f,e.data.queryMethodArguments)}})(); -//# sourceMappingURL=508.fda3e28eaa781dbc8942.chunk.js.map \ No newline at end of file +//# sourceMappingURL=508.c10ccdd1f7e2e9bbef5a.chunk.js.map \ No newline at end of file diff --git a/public/508.fda3e28eaa781dbc8942.chunk.js.map b/public/508.c10ccdd1f7e2e9bbef5a.chunk.js.map similarity index 99% rename from public/508.fda3e28eaa781dbc8942.chunk.js.map rename to public/508.c10ccdd1f7e2e9bbef5a.chunk.js.map index cc7343d0..77003026 100644 --- a/public/508.fda3e28eaa781dbc8942.chunk.js.map +++ b/public/508.c10ccdd1f7e2e9bbef5a.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"508.fda3e28eaa781dbc8942.chunk.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/compat","webpack://tweb/./src/environment/ctx.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/environment/canUseTransferables.ts","webpack://tweb/./src/environment/imageBitmapSupport.ts","webpack://tweb/./src/lib/rlottie/applyReplacements.ts","webpack://tweb/./src/lib/rlottie/rlottie.worker.ts","webpack://tweb/./src/helpers/blob/readBlobAsText.ts","webpack://tweb/./src/helpers/blob/readBlobAs.ts"],"sourcesContent":["(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","import {IS_SAFARI} from './userAgent';\n\n/*\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\n * transfer data between WebWorkers and the main thread.\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\n *\n * This should be removed once the underlying Safari issue is fixed.\n */\n\nlet CAN_USE_TRANSFERABLES: boolean;\nif(!IS_SAFARI) CAN_USE_TRANSFERABLES = true;\nelse {\n try {\n const match = navigator.userAgent.match(/Version\\/(.+?) /);\n CAN_USE_TRANSFERABLES = +match[1] >= 14;\n } catch(err) {\n CAN_USE_TRANSFERABLES = false;\n }\n}\n\nexport default CAN_USE_TRANSFERABLES;\n","const IS_IMAGE_BITMAP_SUPPORTED = typeof(ImageBitmap) !== 'undefined';\n\nexport default IS_IMAGE_BITMAP_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// https://github.com/telegramdesktop/tdesktop/blob/97d8ee75d51874fcb74a9bfadc79f835c82be54a/Telegram/SourceFiles/chat_helpers/stickers_emoji_pack.cpp#L46\nconst COLORREPLACEMENTS = [\n [\n [0xf77e41, 0xcb7b55],\n [0xffb139, 0xf6b689],\n [0xffd140, 0xffcda7],\n [0xffdf79, 0xffdfc5]\n ],\n\n [\n [0xf77e41, 0xa45a38],\n [0xffb139, 0xdf986b],\n [0xffd140, 0xedb183],\n [0xffdf79, 0xf4c3a0]\n ],\n\n [\n [0xf77e41, 0x703a17],\n [0xffb139, 0xab673d],\n [0xffd140, 0xc37f4e],\n [0xffdf79, 0xd89667]\n ],\n\n [\n [0xf77e41, 0x4a2409],\n [0xffb139, 0x7d3e0e],\n [0xffd140, 0x965529],\n [0xffdf79, 0xa96337]\n ],\n\n [\n [0xf77e41, 0x200f0a],\n [0xffb139, 0x412924],\n [0xffd140, 0x593d37],\n [0xffdf79, 0x63453f]\n ]\n];\n\nconst convert = (value: number) => {\n return Math.round(Math.min(Math.max(value, 0), 1) * 255);\n};\n\ntype LottieShape = {\n c: {\n k: number[]\n },\n ty: 'st' | 'fl',\n it?: LottieShape[]\n};\n\nexport default function applyReplacements(object: {\n layers: Array<{shapes: LottieShape[]}>\n}, toneIndex: number) {\n const replacements = COLORREPLACEMENTS[Math.max(toneIndex - 1, 0)];\n\n const applyTo = (smth: LottieShape) => {\n const k = smth.c.k;\n const color = convert(k[2]) | (convert(k[1]) << 8) | (convert(k[0]) << 16);\n\n const foundReplacement = replacements.find((p) => p[0] === color);\n if(foundReplacement) {\n k[0] = ((foundReplacement[1] >> 16) & 255) / 255;\n k[1] = ((foundReplacement[1] >> 8) & 255) / 255;\n k[2] = (foundReplacement[1] & 255) / 255;\n }\n\n // console.log('foundReplacement!', foundReplacement, color.toString(16), k);\n };\n\n const checkSmth = (smth: LottieShape) => {\n switch(smth.ty) {\n case 'st':\n case 'fl':\n applyTo(smth);\n break;\n }\n\n if(smth.hasOwnProperty('it')) {\n iterateIt(smth.it);\n }\n };\n\n const iterateIt = (it: LottieShape['it']) => {\n for(const smth of it) {\n checkSmth(smth);\n }\n };\n\n try {\n for(const layer of object.layers) {\n if(!layer.shapes) continue;\n\n for(const shape of layer.shapes) {\n if(!shape.it) {\n checkSmth(shape);\n continue;\n }\n\n iterateIt(shape.it);\n }\n }\n } catch(err) {\n console.warn('cant apply replacements', err, object, toneIndex);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CAN_USE_TRANSFERABLES from '../../environment/canUseTransferables';\nimport IS_IMAGE_BITMAP_SUPPORTED from '../../environment/imageBitmapSupport';\nimport readBlobAsText from '../../helpers/blob/readBlobAsText';\nimport applyReplacements from './applyReplacements';\n\nimportScripts('rlottie-wasm.js');\n// import Module, { allocate, intArrayFromString } from './rlottie-wasm';\n\nconst _Module = (self as any).Module as any;\n\nconst DEFAULT_FPS = 60;\n\ntype LottieHandlePointer = number;\n\n// throw new Error('test');\n\nexport class RLottieItem {\n private stringOnWasmHeap: number;\n private handle: LottieHandlePointer;\n private frameCount: number;\n private fps: number;\n\n private dead: boolean;\n // private context: OffscreenCanvasRenderingContext2D;\n\n private imageData: ImageData;\n\n constructor(\n private reqId: number,\n private width: number,\n private height: number,\n private raw?: boolean/* ,\n private canvas: OffscreenCanvas */\n ) {\n }\n\n public init(json: string, fps: number) {\n if(this.dead) {\n return;\n }\n\n this.fps = Math.max(1, Math.min(60, fps || DEFAULT_FPS));\n\n // this.context = canvas.getContext('2d');\n /* let frame = 0;\n setInterval(() => {\n if(frame >= this.frameCount) frame = 0;\n let _frame = frame++;\n this.render(_frame, null);\n }, 1000 / this.fps); */\n\n try {\n this.handle = worker.Api.init();\n\n // @ts-ignore\n this.stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n\n this.frameCount = worker.Api.loadFromData(this.handle, this.stringOnWasmHeap);\n\n worker.Api.resize(this.handle, this.width, this.height);\n\n reply(['loaded', this.reqId, this.frameCount, this.fps]);\n\n if(!this.raw && IS_IMAGE_BITMAP_SUPPORTED) {\n this.imageData = new ImageData(this.width, this.height);\n }\n } catch(e) {\n console.error('init RLottieItem error:', e);\n reply(['error', this.reqId, e]);\n }\n }\n\n public render(frameNo: number, clamped?: Uint8ClampedArray) {\n if(this.dead || this.handle === undefined) return;\n // return;\n\n if(this.frameCount < frameNo || frameNo < 0) {\n return;\n }\n\n try {\n worker.Api.render(this.handle, frameNo);\n\n const bufferPointer = worker.Api.buffer(this.handle);\n\n const data = _Module.HEAPU8.subarray(bufferPointer, bufferPointer + (this.width * this.height * 4));\n\n if(this.imageData) {\n this.imageData.data.set(data);\n createImageBitmap(this.imageData).then((imageBitmap) => {\n reply(['frame', this.reqId, frameNo, imageBitmap], [imageBitmap]);\n });\n } else {\n if(!clamped) {\n clamped = new Uint8ClampedArray(data);\n } else {\n clamped.set(data);\n }\n\n // this.context.putImageData(new ImageData(clamped, this.width, this.height), 0, 0);\n\n reply(['frame', this.reqId, frameNo, clamped], [clamped.buffer]);\n }\n } catch(e) {\n console.error('Render error:', e);\n this.dead = true;\n reply(['error', this.reqId, e]);\n }\n }\n\n public destroy() {\n this.dead = true;\n\n if(this.handle !== undefined) {\n worker.Api.destroy(this.handle);\n }\n }\n}\n\nclass RLottieWorker {\n public Api: {\n init: () => LottieHandlePointer,\n destroy: (handle: LottieHandlePointer) => void,\n resize: (handle: LottieHandlePointer, width: number, height: number) => void,\n buffer: (handle: LottieHandlePointer) => number,\n render: (handle: LottieHandlePointer, frameNo: number) => void,\n loadFromData: (handle: LottieHandlePointer, bufferPointer: number) => number\n } = {} as any;\n\n public initApi() {\n this.Api = {\n init: _Module.cwrap('lottie_init', '', []),\n destroy: _Module.cwrap('lottie_destroy', '', ['number']),\n resize: _Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\n buffer: _Module.cwrap('lottie_buffer', 'number', ['number']),\n render: _Module.cwrap('lottie_render', '', ['number', 'number']),\n loadFromData: _Module.cwrap('lottie_load_from_data', 'number', ['number', 'number'])\n };\n }\n\n public init() {\n this.initApi();\n reply(['ready']);\n }\n}\n\nconst worker = new RLottieWorker();\n\n_Module.onRuntimeInitialized = function() {\n worker.init();\n};\n\nconst items: {[reqId: string]: RLottieItem} = {};\nconst queryableFunctions = {\n loadFromData: function(reqId: number, blob: Blob, width: number, height: number, toneIndex: number, raw: boolean/* , canvas: OffscreenCanvas */) {\n const item = items[reqId] = new RLottieItem(reqId, width, height, raw/* , canvas */);\n readBlobAsText(blob).then((json) => {\n try {\n if(typeof(toneIndex) === 'number' && toneIndex >= 1 && toneIndex <= 5) {\n /* params.animationData = copy(params.animationData);\n this.applyReplacements(params.animationData, toneIndex); */\n\n const newAnimationData = JSON.parse(json);\n applyReplacements(newAnimationData, toneIndex);\n json = JSON.stringify(newAnimationData);\n }\n\n // ! WARNING, ั ัั‚ะพะน ะฟั€ะพะฒะตั€ะบะพะน ะฝะต ะฒัะต ัั‚ะธะบะตั€ั‹ ั€ะฐะฑะพั‚ะฐัŽั‚, ะฝะฐะฟั€ะธะผะตั€ - ะ”ะฃะ ะšะ\n /* if(!/\"tgs\":\\s*?1./.test(jsString)) {\n throw new Error('Invalid file');\n } */\n\n /* let perf = performance.now();\n let json = JSON.parse(jsString);\n console.log('sticker decode:', performance.now() - perf); */\n\n const match = json.match(/\"fr\":\\s*?(\\d+?),/);\n const frameRate = +match?.[1] || DEFAULT_FPS;\n\n // console.log('Rendering sticker:', reqId, frameRate, 'now rendered:', Object.keys(items).length);\n\n item.init(json, frameRate);\n } catch(err) {\n console.error('Invalid file for sticker:', json);\n reply(['error', reqId, err]);\n }\n });\n },\n destroy: function(reqId: number) {\n const item = items[reqId];\n if(!item) {\n return;\n }\n\n item.destroy();\n delete items[reqId];\n },\n renderFrame: function(reqId: number, frameNo: number, clamped?: Uint8ClampedArray) {\n // console.log('worker renderFrame', reqId, frameNo, clamped);\n items[reqId].render(frameNo, clamped);\n }\n};\n\nfunction reply(args: any[], transfer?: Transferable[]) {\n postMessage({queryMethodListener: args.shift(), queryMethodArguments: args}, CAN_USE_TRANSFERABLES ? transfer : undefined);\n}\n\nonmessage = function(e) {\n // @ts-ignore\n queryableFunctions[e.data.queryMethod].apply(queryableFunctions, e.data.queryMethodArguments);\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from './readBlobAs';\n\nexport default function readBlobAsText(blob: Blob) {\n return readBlobAs(blob, 'readAsText');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { IS_WEB_WORKER } from \"../context\";\n\n// const id = IS_WEB_WORKER ? Math.random() * 0x1000 | 0 : 0;\nexport default function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\n // const perf = performance.now();\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (e) => {\n // console.log(`readBlobAs [${id}] ${method} time ${performance.now() - perf}`);\n resolve(e.target.result);\n });\n reader[method](blob);\n });\n}\n"],"names":["__webpack_require__","oldGetScript","u","oldLoadScript","e","queryMap","countMap","chunkId","hasOwnProperty","catch","error","retries","realSrc","message","request","Promise","resolve","setTimeout","cacheBust","Date","now","window","self","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","CAN_USE_TRANSFERABLES","undefined","err","COLORREPLACEMENTS","convert","value","Math","round","min","max","importScripts","_Module","Module","RLottieItem","constructor","reqId","width","height","raw","init","json","fps","this","dead","handle","worker","Api","stringOnWasmHeap","allocate","intArrayFromString","frameCount","loadFromData","resize","reply","imageData","ImageData","console","render","frameNo","clamped","bufferPointer","buffer","data","HEAPU8","subarray","set","createImageBitmap","then","imageBitmap","Uint8ClampedArray","destroy","initApi","cwrap","onRuntimeInitialized","items","queryableFunctions","blob","toneIndex","item","method","reader","FileReader","addEventListener","target","result","readBlobAs","readBlobAsText","newAnimationData","JSON","parse","object","replacements","checkSmth","smth","ty","k","c","color","foundReplacement","find","p","applyTo","iterateIt","it","layer","layers","shapes","shape","warn","applyReplacements","stringify","frameRate","renderFrame","args","transfer","postMessage","queryMethodListener","shift","queryMethodArguments","onmessage","queryMethod","apply"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"508.c10ccdd1f7e2e9bbef5a.chunk.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/compat","webpack://tweb/./src/environment/ctx.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/environment/canUseTransferables.ts","webpack://tweb/./src/environment/imageBitmapSupport.ts","webpack://tweb/./src/lib/rlottie/applyReplacements.ts","webpack://tweb/./src/lib/rlottie/rlottie.worker.ts","webpack://tweb/./src/helpers/blob/readBlobAsText.ts","webpack://tweb/./src/helpers/blob/readBlobAs.ts"],"sourcesContent":["(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","import {IS_SAFARI} from './userAgent';\n\n/*\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\n * transfer data between WebWorkers and the main thread.\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\n *\n * This should be removed once the underlying Safari issue is fixed.\n */\n\nlet CAN_USE_TRANSFERABLES: boolean;\nif(!IS_SAFARI) CAN_USE_TRANSFERABLES = true;\nelse {\n try {\n const match = navigator.userAgent.match(/Version\\/(.+?) /);\n CAN_USE_TRANSFERABLES = +match[1] >= 14;\n } catch(err) {\n CAN_USE_TRANSFERABLES = false;\n }\n}\n\nexport default CAN_USE_TRANSFERABLES;\n","const IS_IMAGE_BITMAP_SUPPORTED = typeof(ImageBitmap) !== 'undefined';\n\nexport default IS_IMAGE_BITMAP_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// https://github.com/telegramdesktop/tdesktop/blob/97d8ee75d51874fcb74a9bfadc79f835c82be54a/Telegram/SourceFiles/chat_helpers/stickers_emoji_pack.cpp#L46\nconst COLORREPLACEMENTS = [\n [\n [0xf77e41, 0xcb7b55],\n [0xffb139, 0xf6b689],\n [0xffd140, 0xffcda7],\n [0xffdf79, 0xffdfc5]\n ],\n\n [\n [0xf77e41, 0xa45a38],\n [0xffb139, 0xdf986b],\n [0xffd140, 0xedb183],\n [0xffdf79, 0xf4c3a0]\n ],\n\n [\n [0xf77e41, 0x703a17],\n [0xffb139, 0xab673d],\n [0xffd140, 0xc37f4e],\n [0xffdf79, 0xd89667]\n ],\n\n [\n [0xf77e41, 0x4a2409],\n [0xffb139, 0x7d3e0e],\n [0xffd140, 0x965529],\n [0xffdf79, 0xa96337]\n ],\n\n [\n [0xf77e41, 0x200f0a],\n [0xffb139, 0x412924],\n [0xffd140, 0x593d37],\n [0xffdf79, 0x63453f]\n ]\n];\n\nconst convert = (value: number) => {\n return Math.round(Math.min(Math.max(value, 0), 1) * 255);\n};\n\ntype LottieShape = {\n c: {\n k: number[]\n },\n ty: 'st' | 'fl',\n it?: LottieShape[]\n};\n\nexport default function applyReplacements(object: {\n layers: Array<{shapes: LottieShape[]}>\n}, toneIndex: number) {\n const replacements = COLORREPLACEMENTS[Math.max(toneIndex - 1, 0)];\n\n const applyTo = (smth: LottieShape) => {\n const k = smth.c.k;\n const color = convert(k[2]) | (convert(k[1]) << 8) | (convert(k[0]) << 16);\n\n const foundReplacement = replacements.find((p) => p[0] === color);\n if(foundReplacement) {\n k[0] = ((foundReplacement[1] >> 16) & 255) / 255;\n k[1] = ((foundReplacement[1] >> 8) & 255) / 255;\n k[2] = (foundReplacement[1] & 255) / 255;\n }\n\n // console.log('foundReplacement!', foundReplacement, color.toString(16), k);\n };\n\n const checkSmth = (smth: LottieShape) => {\n switch(smth.ty) {\n case 'st':\n case 'fl':\n applyTo(smth);\n break;\n }\n\n if(smth.hasOwnProperty('it')) {\n iterateIt(smth.it);\n }\n };\n\n const iterateIt = (it: LottieShape['it']) => {\n for(const smth of it) {\n checkSmth(smth);\n }\n };\n\n try {\n for(const layer of object.layers) {\n if(!layer.shapes) continue;\n\n for(const shape of layer.shapes) {\n if(!shape.it) {\n checkSmth(shape);\n continue;\n }\n\n iterateIt(shape.it);\n }\n }\n } catch(err) {\n console.warn('cant apply replacements', err, object, toneIndex);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CAN_USE_TRANSFERABLES from '../../environment/canUseTransferables';\nimport IS_IMAGE_BITMAP_SUPPORTED from '../../environment/imageBitmapSupport';\nimport readBlobAsText from '../../helpers/blob/readBlobAsText';\nimport applyReplacements from './applyReplacements';\n\nimportScripts('rlottie-wasm.js');\n// import Module, { allocate, intArrayFromString } from './rlottie-wasm';\n\nconst _Module = (self as any).Module as any;\n\nconst DEFAULT_FPS = 60;\n\ntype LottieHandlePointer = number;\n\n// throw new Error('test');\n\nexport class RLottieItem {\n private stringOnWasmHeap: number;\n private handle: LottieHandlePointer;\n private frameCount: number;\n private fps: number;\n\n private dead: boolean;\n // private context: OffscreenCanvasRenderingContext2D;\n\n private imageData: ImageData;\n\n constructor(\n private reqId: number,\n private width: number,\n private height: number,\n private raw?: boolean/* ,\n private canvas: OffscreenCanvas */\n ) {\n }\n\n public init(json: string, fps: number) {\n if(this.dead) {\n return;\n }\n\n this.fps = Math.max(1, Math.min(60, fps || DEFAULT_FPS));\n\n // this.context = canvas.getContext('2d');\n /* let frame = 0;\n setInterval(() => {\n if(frame >= this.frameCount) frame = 0;\n let _frame = frame++;\n this.render(_frame, null);\n }, 1000 / this.fps); */\n\n try {\n this.handle = worker.Api.init();\n\n // @ts-ignore\n this.stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\n\n this.frameCount = worker.Api.loadFromData(this.handle, this.stringOnWasmHeap);\n\n worker.Api.resize(this.handle, this.width, this.height);\n\n reply(['loaded', this.reqId, this.frameCount, this.fps]);\n\n if(!this.raw && IS_IMAGE_BITMAP_SUPPORTED) {\n this.imageData = new ImageData(this.width, this.height);\n }\n } catch(e) {\n console.error('init RLottieItem error:', e);\n reply(['error', this.reqId, e]);\n }\n }\n\n public render(frameNo: number, clamped?: Uint8ClampedArray) {\n if(this.dead || this.handle === undefined) return;\n // return;\n\n if(this.frameCount < frameNo || frameNo < 0) {\n return;\n }\n\n try {\n worker.Api.render(this.handle, frameNo);\n\n const bufferPointer = worker.Api.buffer(this.handle);\n\n const data = _Module.HEAPU8.subarray(bufferPointer, bufferPointer + (this.width * this.height * 4));\n\n if(this.imageData) {\n this.imageData.data.set(data);\n createImageBitmap(this.imageData).then((imageBitmap) => {\n reply(['frame', this.reqId, frameNo, imageBitmap], [imageBitmap]);\n });\n } else {\n if(!clamped) {\n clamped = new Uint8ClampedArray(data);\n } else {\n clamped.set(data);\n }\n\n // this.context.putImageData(new ImageData(clamped, this.width, this.height), 0, 0);\n\n reply(['frame', this.reqId, frameNo, clamped], [clamped.buffer]);\n }\n } catch(e) {\n console.error('Render error:', e);\n this.dead = true;\n reply(['error', this.reqId, e]);\n }\n }\n\n public destroy() {\n this.dead = true;\n\n if(this.handle !== undefined) {\n worker.Api.destroy(this.handle);\n }\n }\n}\n\nclass RLottieWorker {\n public Api: {\n init: () => LottieHandlePointer,\n destroy: (handle: LottieHandlePointer) => void,\n resize: (handle: LottieHandlePointer, width: number, height: number) => void,\n buffer: (handle: LottieHandlePointer) => number,\n render: (handle: LottieHandlePointer, frameNo: number) => void,\n loadFromData: (handle: LottieHandlePointer, bufferPointer: number) => number\n } = {} as any;\n\n public initApi() {\n this.Api = {\n init: _Module.cwrap('lottie_init', '', []),\n destroy: _Module.cwrap('lottie_destroy', '', ['number']),\n resize: _Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\n buffer: _Module.cwrap('lottie_buffer', 'number', ['number']),\n render: _Module.cwrap('lottie_render', '', ['number', 'number']),\n loadFromData: _Module.cwrap('lottie_load_from_data', 'number', ['number', 'number'])\n };\n }\n\n public init() {\n this.initApi();\n reply(['ready']);\n }\n}\n\nconst worker = new RLottieWorker();\n\n_Module.onRuntimeInitialized = function() {\n worker.init();\n};\n\nconst items: {[reqId: string]: RLottieItem} = {};\nconst queryableFunctions = {\n loadFromData: function(reqId: number, blob: Blob, width: number, height: number, toneIndex: number, raw: boolean/* , canvas: OffscreenCanvas */) {\n const item = items[reqId] = new RLottieItem(reqId, width, height, raw/* , canvas */);\n readBlobAsText(blob).then((json) => {\n try {\n if(typeof(toneIndex) === 'number' && toneIndex >= 1 && toneIndex <= 5) {\n /* params.animationData = copy(params.animationData);\n this.applyReplacements(params.animationData, toneIndex); */\n\n const newAnimationData = JSON.parse(json);\n applyReplacements(newAnimationData, toneIndex);\n json = JSON.stringify(newAnimationData);\n }\n\n // ! WARNING, ั ัั‚ะพะน ะฟั€ะพะฒะตั€ะบะพะน ะฝะต ะฒัะต ัั‚ะธะบะตั€ั‹ ั€ะฐะฑะพั‚ะฐัŽั‚, ะฝะฐะฟั€ะธะผะตั€ - ะ”ะฃะ ะšะ\n /* if(!/\"tgs\":\\s*?1./.test(jsString)) {\n throw new Error('Invalid file');\n } */\n\n /* let perf = performance.now();\n let json = JSON.parse(jsString);\n console.log('sticker decode:', performance.now() - perf); */\n\n const match = json.match(/\"fr\":\\s*?(\\d+?),/);\n const frameRate = +match?.[1] || DEFAULT_FPS;\n\n // console.log('Rendering sticker:', reqId, frameRate, 'now rendered:', Object.keys(items).length);\n\n item.init(json, frameRate);\n } catch(err) {\n console.error('Invalid file for sticker:', json);\n reply(['error', reqId, err]);\n }\n });\n },\n destroy: function(reqId: number) {\n const item = items[reqId];\n if(!item) {\n return;\n }\n\n item.destroy();\n delete items[reqId];\n },\n renderFrame: function(reqId: number, frameNo: number, clamped?: Uint8ClampedArray) {\n // console.log('worker renderFrame', reqId, frameNo, clamped);\n items[reqId].render(frameNo, clamped);\n }\n};\n\nfunction reply(args: any[], transfer?: Transferable[]) {\n postMessage({queryMethodListener: args.shift(), queryMethodArguments: args}, CAN_USE_TRANSFERABLES ? transfer : undefined);\n}\n\nonmessage = function(e) {\n // @ts-ignore\n queryableFunctions[e.data.queryMethod].apply(queryableFunctions, e.data.queryMethodArguments);\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from './readBlobAs';\n\nexport default function readBlobAsText(blob: Blob) {\n return readBlobAs(blob, 'readAsText');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { IS_WEB_WORKER } from \"../context\";\n\n// const id = IS_WEB_WORKER ? Math.random() * 0x1000 | 0 : 0;\nexport default function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\n // const perf = performance.now();\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (e) => {\n // console.log(`readBlobAs [${id}] ${method} time ${performance.now() - perf}`);\n resolve(e.target.result);\n });\n reader[method](blob);\n });\n}\n"],"names":["__webpack_require__","oldGetScript","u","oldLoadScript","e","queryMap","countMap","chunkId","hasOwnProperty","catch","error","retries","realSrc","message","request","Promise","resolve","setTimeout","cacheBust","Date","now","window","self","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","CAN_USE_TRANSFERABLES","undefined","err","COLORREPLACEMENTS","convert","value","Math","round","min","max","importScripts","_Module","Module","RLottieItem","constructor","reqId","width","height","raw","init","json","fps","this","dead","handle","worker","Api","stringOnWasmHeap","allocate","intArrayFromString","frameCount","loadFromData","resize","reply","imageData","ImageData","console","render","frameNo","clamped","bufferPointer","buffer","data","HEAPU8","subarray","set","createImageBitmap","then","imageBitmap","Uint8ClampedArray","destroy","initApi","cwrap","onRuntimeInitialized","items","queryableFunctions","blob","toneIndex","item","method","reader","FileReader","addEventListener","target","result","readBlobAs","readBlobAsText","newAnimationData","JSON","parse","object","replacements","checkSmth","smth","ty","k","c","color","foundReplacement","find","p","applyTo","iterateIt","it","layer","layers","shapes","shape","warn","applyReplacements","stringify","frameRate","renderFrame","args","transfer","postMessage","queryMethodListener","shift","queryMethodArguments","onmessage","queryMethod","apply"],"sourceRoot":""} \ No newline at end of file diff --git a/public/61.f9d40768535453d75527.chunk.js b/public/61.84ba1f0d30c94eb8b92b.chunk.js similarity index 99% rename from public/61.f9d40768535453d75527.chunk.js rename to public/61.84ba1f0d30c94eb8b92b.chunk.js index 58d37502..5775b4a2 100644 --- a/public/61.f9d40768535453d75527.chunk.js +++ b/public/61.84ba1f0d30c94eb8b92b.chunk.js @@ -1,2 +1,2 @@ (()=>{"use strict";var t,e,r={2061:(t,e,r)=>{let n,a;const o=null;function f(t){return JSON.parse(JSON.stringify(t))}function c(t,e,r,a,o){for(n=0;n=0;--r)e=f(d(t[r],e));return e}function g(t){if(!t)throw Error("assert :P")}const P=function(){function t(t){return t==Ee||t==je||t==Ce||t==Fe}function e(t){return A(t,1)}function r(t,e){const r=1+((t.la-1)*e>>8),n=r<<8;let a=0;for(t.Z>=n?(a=1,t.la-=r,t.Z-=n):(a=0,t.la=r);t.la<128;)t.Z<<=1,t.la<<=1,8==++t.gc&&(t.gc=0,t.bc&&(t.Z+=t.qa[t.Ia++],t.bc--));return a}function P(t,e,r,n){(n-=r)>=2?(t.Z=e[r+0]<<8|e[r+1],t.qa=e,t.Ia=r+2,t.bc=n-2):(t.Z=0,t.qa=o,t.bc=0),t.la=255,t.gc=0}function A(t,e){var n=0,a=0;for(a=e-1;a>=0;a--)n|=r(t,128)<=8&&t.Q>>=8,t.T+=t.qa[t.Ia+t.Q]<<24>>>0,++t.Q,t.g-=8}function y(t){t.g>=8&&w(t),t.Q==t.ya&&32==t.g&&(t.L=1)}function S(t,e){let r=0;if(g(e>=0),!t.L&&e=32&&(t.L=1,t.g+e>32))return r;r=t.T>>t.g&fr[e],t.g+=e,t.g>=8&&t.g>=8&&w(t)}else t.fa=1;return r}function T(t){return t.Pa==t.gb}function R(t,e){return g(t!=o),0==e?0:(t.gb=2*e-1,t.Y=v(t.gb,Dr),t.Y==o?0:(t.Y[0].s=-1,t.Pa=1))}function O(t){t!=o&&(t.Y=o,t.Y=o,t.gb=0,t.Pa=0)}function V(t,e,r,n){for(var a=t.Y,o=0,f=+t.gb;n-- >0;){if(o>=f)return 0;if(a[o].s<0){if(T(t))return 0;const e=t,r=e.Y,n=+e.Pa;a[o].s=n-o,e.Pa+=2,r[n+0].s=-1,r[n+1].s=-1}else if(0==a[o].s)return 0;o+=a[o].s+(r>>n&1)}if(a[o].s<0)a[o].s=0;else if(0!=a[o].s)return 0;return a[o].kc=e,1}function I(t,e,r){var n=0;let a=0,f=0;for(g(t!=o),g(e!=o),n=0;n0&&(++a,f=n);if(!R(t,a))return 0;if(1==a)return f<0||f>=r?(O(t),0):V(t,f,0,0);if(a=0,f=d(r,0),f==o)return(a=a&&T(t))||O(t),a;var c=0;c=0,n=d(pr+1,0);let i=0;const u=d(pr+1,0);let b=0;for(g(e!=o),g(r>0),g(f!=o),c=0;cb&&(b=e[c]);if(b>pr)n=0;else{for(c=0;c0?u[e[c]]++:jr;n=1}if(!n)return(a=a&&T(t))||O(t),a;for(n=0;n0&&!V(t,n,f[n],e[n]))return(a=a&&T(t))||O(t),a;return(a=T(t))||O(t),a}function _(t,e,r,n,a,o,f){var c=0;for(c=0;ct.P.v)&&(r=0==e)){t:{let e=t.Ga;var a=t.G,i=t.ub;r=t.P.l;let h=t.P.v;const v=t.Xb;var u=[o];let p=o,P=h*r;var b=o,s=o;s="WEBP_FILTER_TYPE";let A=0;u=0;var l=0;let k=0;if(g(r>0&&h>0&&n>=r),g(e!=o&&v!=o),i<=Sr)r=0;else if(k=e[a+0]>>0&3,s=e[a+0]>>2&3,A=e[a+0]>>4&3,u=e[a+0]>>6&3,kRr||s>=Sn||A>Or||0!=u)r=0;else{if(k==Tr)l=i>=P,u=e,p=a+Sr;else{if(p=0,(u=d(P,0))==o){r=0;break t}l=a+Sr,i-=Sr,a=u,b=f(tr);let t=0;const n=qt();n==o?l=0:(n.l=r,n.v=h,n.N=b,st(Ve),b.put=Pe,b.Mb=ge,b.Pb=Ae,b.ka=o,b.ka=a,b.fd=0,b.width=r,b.height=h,n.a=ze,m(n.o,e,l,i),n.Wa=An,Jt(r,h,1,n,o)&&Yt(n,r)&&(n.Wa=Pn,t=Ht(n,n.V,n.Ha,n.l,n.v,xt)),n!=o&&Kt(n),l=t)}if(l){for(e=Tn[s],e!=o?((b=d(P,0))==o&&(l=0,k!=Tr&&(p=u=o)),e(u,p,r,h,1,r,b,s=0),P=b,k=s):(P=u,k=p),e=0;h-- >0;)c(v,e,P,k,r),k+=r,e+=n;A==Or&&(l=u==o||p<=0||r<=0?0:1)}r=l}}r=!r}return r?o:0==e?t.Xb:+e*n}function U(t,e,r,n){if(n==o||t<=0||e<=0)return Ke;if(r!=o){if(r.Ua){const n=r.wc,a=r.vc,o=-2&r.t,f=-2&r.k;if(o<0||f<0||n<=0||a<=0||o+n>t||f+a>e)return Ke;t=n,e=a}if(r.I){if(r.Ba<=0||r.Aa<=0)return Ke;t=r.Ba,e=r.Aa}}return n.width=t,n.height=e,function(t){let e=t.width;const r=t.height;let n=t.J;if(e<=0||r<=0||!(n>=Ie&&n=Ie&&f=c*Rn[f],n&=t.ma!=o):(u=(t=t.c.Va).nb*parseInt((i+1)/2,10),b=t.rb*parseInt((i+1)/2,10),s=t.Fa*i,n&=t.F*i<=t.Wc,n&=u<=t.Rc,n&=b<=t.Uc,n&=s<=t.Wb,n&=t.F>=c,n&=t.nb>=parseInt((c+1)/2,10),n&=t.rb>=parseInt((c+1)/2,10),n&=t.y!=o,n&=t.c!=o,n&=t.S!=o,f==Ne&&(n&=t.Fa>=c,n&=s<=t.Wb,n&=t.p!=o)):n=0,n?ze:Ke}(n)}function M(t){return-256&t?t<0?0:255:t}function B(t,e,r,n){const a=d(16,0);let o,f;for(o=0,f=0;f<4;++f){var c=t[e+0]+t[e+8],i=t[e+0]-t[e+8],u=(t[e+4]*Bn>>16)-(t[e+12]*Mn>>16),b=(t[e+4]*Mn>>16)+(t[e+12]*Bn>>16);a[o+0]=c+b,a[o+1]=i+u,a[o+2]=i-u,a[o+3]=c-b,o+=4,e++}for(f=o=0;f<4;++f)c=(t=a[o+0]+4)+a[o+8],i=t-a[o+8],u=(a[o+4]*Bn>>16)-(a[o+12]*Mn>>16),b=(a[o+4]*Mn>>16)+(a[o+12]*Bn>>16),r[n+0+0*en]=M(r[n+0+0*en]+(c+b>>3)),r[n+1+0*en]=M(r[n+1+0*en]+(i+u>>3)),r[n+2+0*en]=M(r[n+2+0*en]+(i-u>>3)),r[n+3+0*en]=M(r[n+3+0*en]+(c-b>>3)),o++,n+=en}function D(t,e,r,n,a){B(t,e,r,n),a&&B(t,e+16,r,n+4)}function E(t,e,r,n){Cn(t,e+0,r,n+0,1),Cn(t,e+32,r,n+4*en,1)}function C(t,e,r,n){let a;for(t=t[e+0]+4,a=0;a<4;++a)for(e=0;e<4;++e)r[n+e+a*en]=M(r[n+e+a*en]+(t>>3))}function F(t,e,r,n){t[e+0]&&C(t,e+0,r,n+0),t[e+16]&&C(t,e+16,r,n+4),t[e+32]&&C(t,e+32,r,n+4*en),t[e+48]&&C(t,e+48,r,n+4*en+4)}function G(t,e,r){const n=e-en,a=Wn,o=255-t[n-1];let f;for(f=0;f>2}function H(t,e,r){let n,a;for(n=0;n<8;++n)for(a=0;a<8;++a)e[r+a+n*en]=t}function z(t,e,r){const n=t[e-r],a=t[e+0],o=3*(a-n)+In[1020+t[e-2*r]-t[e+r]],f=_n[112+(o+4>>3)];t[e-r]=Wn[255+n+_n[112+(o+3>>3)]],t[e+0]=Wn[255+a-f]}function q(t,e,r,n){const a=t[e+0],o=t[e+r];return On[255+t[e-2*r]-t[e-r]]>n||On[255+o-a]>n}function K(t,e,r,n,a){const o=t[e-3*r],f=t[e-2*r],c=t[e-r],i=t[e+0],u=t[e+r],b=t[e+2*r],s=t[e+3*r];return 2*On[255+c-i]+Vn[255+f-u]>n?0:On[255+t[e-4*r]-o]<=a&&On[255+o-f]<=a&&On[255+f-c]<=a&&On[255+s-b]<=a&&On[255+b-u]<=a&&On[255+u-i]<=a}function J(t,e,r,n){let a;for(a=0;a<16;++a)2*On[255+t[e+a-r]-t[e+a+0]]+Vn[255+t[e+a-2*r]-t[e+a+r]]<=n&&z(t,e+a,r)}function Y(t,e,r,n){let a;for(a=0;a<16;++a)2*On[255+t[e+a*r-1]-t[e+a*r+0]]+Vn[255+t[e+a*r-2]-t[e+a*r+1]]<=n&&z(t,e+a*r,1)}function x(t,e,r,n){let a;for(a=3;a>0;--a)J(t,(e+=4*r)+0,r,n)}function Q(t,e,r,n){let a;for(a=3;a>0;--a)Y(t,(e+=4)+0,r,n)}function $(t,e,r,n,a,o,f,c){for(;a-- >0;){if(K(t,e+0,r,o,f))if(q(t,e+0,r,c))z(t,e+0,r);else{const n=t,a=e+0,o=r,f=n[a-2*o],c=n[a-o],u=n[a+0],b=n[a+o],s=n[a+2*o],l=27*(i=In[1020+3*(u-c)+In[1020+f-b]])+63>>7,h=18*i+63>>7;var i=9*i+63>>7;n[a-3*o]=Wn[255+n[a-3*o]+i],n[a-2*o]=Wn[255+f+h],n[a-o]=Wn[255+c+l],n[a+0]=Wn[255+u-l],n[a+o]=Wn[255+b-h],n[a+2*o]=Wn[255+s-i]}e+=n}}function X(t,e,r,n,a,o,f,c){for(;a-- >0;){if(K(t,e+0,r,o,f))if(q(t,e+0,r,c))z(t,e+0,r);else{const n=t,a=e+0,o=r,f=n[a-o],c=n[a+0],u=n[a+o],b=_n[112+(4+(i=3*(c-f))>>3)];var i=_n[112+(i+3>>3)];const s=b+1>>1;n[a-2*o]=Wn[255+n[a-2*o]+s],n[a-o]=Wn[255+f+i],n[a+0]=Wn[255+c-b],n[a+o]=Wn[255+u-s]}e+=n}}function Z(t,e,r,n,a,o){$(t,e+0,r,1,16,n,a,o)}function tt(t,e,r,n,a,o){$(t,e+0,1,r,16,n,a,o)}function et(t,e,r,n,a,o){let f;for(f=3;f>0;--f)X(t,(e+=4*r)+0,r,1,16,n,a,o)}function rt(t,e,r,n,a,o){let f;for(f=3;f>0;--f)X(t,(e+=4)+0,1,r,16,n,a,o)}function nt(t,e,r,n,a,o,f,c){$(t,e,a,1,8,o,f,c),$(r,n,a,1,8,o,f,c)}function at(t,e,r,n,a,o,f,c){$(t,e,1,a,8,o,f,c),$(r,n,1,a,8,o,f,c)}function ot(t,e,r,n,a,o,f,c){X(t,e+4*a,a,1,8,o,f,c),X(r,n+4*a,a,1,8,o,f,c)}function ft(t,e,r,n,a,o,f,c){X(t,e+4,1,a,8,o,f,c),X(r,n+4,1,a,8,o,f,c)}function ct(t,e){return e==Fr?0==t.i?0==t.d?Kr:qr:0==t.d?zr:Fr:e}function it(t,e,r,a){for(n=0;n<4;++n)t[e+n]=r[a+n]}function ut(t,e){return t<0?0:t>e?e:t}function bt(t){t.a="VP8_STATUS_OK",t.xc="OK"}function st(t){t>>>8!=Ve>>>8&&alert("mismatch error")}function lt(t,e,r){return t.a==ze&&(t.a=e,t.xc=r,t.za=0),0}function ht(t,a){let c=[0],i=0;var u=[0],b=f(fn),s=f(cn);let l=f(nr);if(u="VP8StatusCode",b=f(rr),t==o)return alert("(dec == null)"),0;if(bt(t),a==o)return lt(t,"VP8_STATUS_INVALID_PARAM","null VP8Io passed to VP8GetHeaders()");if(b.data=a.data,b.b=a.b,b.e=a.e,b.b=[b.b],b.e=[b.e],(u=ye(b=[b]))!=ze)return lt(t,u,"Incorrect/incomplete header.");if((b=b[0]).b=b.b[0],b.e=b.e[0],b.ia)return lt(t,Je,"Unexpected lossless format encountered.");if(t.Ga==o&&(g(0==t.ub),t.Ga=b.$,t.G=b.G,t.ub=b.pa),i=b.data,c=b.b+b.offset,u=b.e-b.offset,g(b.e>=b.offset),u[0]<4)return lt(t,$e,"Truncated header.");if(l=i[c+0]|i[c+1]<<8|i[c+2]<<16,(b=t.Ac).fb=!(1&l)+0,b.Jc=l>>1&7,b.Nc=l>>4&1,b.Ra=l>>5,b.Jc>3)return lt(t,"VP8_STATUS_BITSTREAM_ERROR","Incorrect keyframe parameters.");if(!b.Nc)return lt(t,"VP8_STATUS_UNSUPPORTED_FEATURE","Frame not displayable.");if(c+=3,u-=3,s=t.P,b.fb){if(u<7)return lt(t,"VP8_STATUS_NOT_ENOUGH_DATA","cannot parse picture header");if(!(u>=3&&157==i[c+0]&&1==i[c+1]&&42==i[c+2]))return lt(t,"VP8_STATUS_BITSTREAM_ERROR","Bad code word");for(s.l=16383&(i[c+4]<<8|i[c+3]),s.gd=i[c+4]>>6,s.v=16383&(i[c+6]<<8|i[c+5]),s.hd=i[c+6]>>6,c+=7,u-=7,t.Ma=s.l+15>>4,t.hb=s.v+15>>4,a.width=s.l,a.height=s.v,a.I=0,a.Ua=0,a.k=0,a.t=0,a.Ka=a.width,a.K=a.height,a.m=a.width,a.h=a.height,l=t.R,n=0;nu)return lt(t,"VP8_STATUS_NOT_ENOUGH_DATA","bad partition length");l=t.o,P(l,i,c,c+b.Ra),c+=b.Ra,u-=b.Ra,b.fb&&(s.uc=e(l),s.$c=e(l)),s=l;var h=t.Ca;let d=t.R;if(g(s!=o),g(h!=o),h.pb=e(s),h.pb){if(h.ob=e(s),e(s)){var v;for(h.tb=e(s),v=0;v0)if(t.Ca.pb)for(d=0;du&&(w=s),P(t.ic[+m],d,v,y),d=w,v=y,h+=3}P(t.ic[+p],d,v,u),u=v0){t.yb[w]=t.yb[0];continue}y=u}const e=t.yb[w];e.sc[0]=oa[ut(y+s,127)],e.sc[1]=fa[ut(y+0,127)],e.sb[0]=2*oa[ut(y+h,127)],e.sb[1]=101581*fa[ut(y+d,127)]>>16,e.sb[1]<8&&(e.sb[1]=8),e.qc[0]=oa[ut(y+v,117)],e.qc[1]=fa[ut(y+p,127)]}if(!b.fb)return lt(t,Ye,"Not a key frame.");for(t.Zc=259,e(l),u=t.R,s=0;s<$r;++s)for(h=0;h0)+0],16==o||!r(t,c[0]))return o}else c=e[sa[o]][0];if(16==o)return 16}}function vt(t,e){return((16777216*t[0]+65536*t[1]+256*t[2]+1*t[3])*pa&4278190080)>>e}function pt(t,e){let a,f=0;if(t==o)return 0;if(e==o)return lt(t,"VP8_STATUS_INVALID_PARAM","NULL VP8Io parameter in VP8Decode().");if(!t.za&&!ht(t,e))return 0;if(g(t.za),e.Mb&&!e.Mb(e))lt(t,Qe,"Frame setup failed"),a=t.a;else{e.Za&&(t.A=0);const r=ea[t.A];2==t.A?(t.lb=0,t.mb=0):(t.lb=e.t-r>>4,t.mb=e.k-r>>4,t.lb<0&&(t.lb=0),t.mb<0&&(t.mb=0)),t.Ya=e.K+15+r>>4,t.wb=e.Ka+15+r>>4,t.wb>t.Ma&&(t.wb=t.Ma),t.Ya>t.hb&&(t.Ya=t.hb),a=ze}if(f=a==ze){if(f){let r,n;t:{if(t.Ja=0,t.qb){const e=t.rc;if(!WebPWorkerReset(e)){r=lt(t,qe,"thread initialization failed.");break t}e.Qd=t,e.Rd=t.oa.N,e.Ud=FinishRow,t.jb=t.A>0?ra:ra-1}else t.jb=na;r=1}if(!(n=!r)){let e;t:{const r=t.jb,n=t.Ma,a=4*n,f=32*n,c=n+1,i=t.A>0?n*(t.qb?2:1):0,s=rn,l=f*(16*r+parseInt(3*ea[t.A]/2,10)),h=t.Ga!=o?t.P.l*t.P.v:0,v=a+f+c+i+s+384+l+h+ta;if(v!=v)e=0;else{if(v>t.Gb){if(t.ib=0,t.Gb=0,t.ib==o){e=lt(t,"VP8_STATUS_OUT_OF_MEMORY","no memory during frame initialization.");break t}t.Gb=v}t.dc=205,t.Xc=b(205,16*n),t.Sc=b(205,8*n),t.Vc=b(205,8*n),t.M=i?u(ln,i):o,t.Sd=i?0:o,t.oa.ha=0,t.oa.M=t.M,g(0==(s&ta)),t.Ea=b(205,1*s),t.z=-12851,t.H=16*n,t.r=8*n;const f=ea[t.A],p=f*t.H,P=f/2*t.r;t.ca=d(l,205),t.da=+p,t.aa=t.ca,t.ba=t.da+16*r*t.H+P,t.ra=t.aa,t.sa=t.ba+8*r*t.r+P,t.Xb=h?d(h,0):o,t.La=u(hn,c),t.dc=b(Fr,a),e=1}}n=!e}if(n)f=0;else{if(e.width=t.P.l,e.height=t.P.v,e.w=0,e.y=t.ca,e.D=t.da,e.c=t.aa,e.B=t.ba,e.S=t.ra,e.C=t.sa,e.F=t.H,e.Da=t.r,e.p=o,e.q=o,!Un){let t;for(t=-255;t<=255;++t)On[255+t]=t<0?-t:t,Vn[255+t]=On[255+t]>>1;for(t=-1020;t<=1020;++t)In[1020+t]=t<-128?-128:t>127?127:t;for(t=-112;t<=112;++t)_n[112+t]=t<-16?-16:t>15?15:t;for(t=-255;t<=510;++t)Wn[255+t]=t<0?0:t>255?255:t;Un=1}Cn=D,Fn=E,Gn=C,Nn=F,Ln=Z,Hn=tt,zn=nt,qn=at,Kn=et,Jn=rt,Yn=ot,xn=ft,Qn=J,$n=Y,Xn=x,Zn=Q,f=1}}if(f)t:{for(t.d=0;t.d0&&u.d>=u.mb&&u.d<=u.Ya)+0,t.i=0;t.i0);A=-k,W[W[W.length-1]+P]=A,h[v]=A,v++}D[p]=A}}else{for(A=r(u,156)?r(u,128)?Hr:Lr:r(u,163)?Nr:Gr,e.Eb[0]=A,k=0;k<4;++k)W[k+W[W.length-1]]=A;for(k=0;k<4;++k)D[k]=A}if(e.Tc=r(u,142)?r(u,114)?r(u,183)?Hr:Lr:Nr:Gr,u.Ab)s=0;else{if(g.Nb)l.X=g.X=0,e.wa||(l.ua=g.ua=0),e.ja=0,e.Oa=0;else{let t=0,r=0;var m=0,w=da;const n=e.yb[e.Lb];var y=e.z;const a=e.La[0],f=d(4,0),c=d(4,0);let u=d(4,0),s=d(4,0),l=0,h=0;var S=0;let v=0,p=0;if(y=b(0,384),e.wa)m=0,w=e.R.z[3];else{const t=d(16,0);var T=g.ua+a.ua;g.ua=a.ua=(dt(o,e.R.z[1],T,n.sb,0,t)>0)+0,m=1,w=e.R.z[0];var R=t,O=y,V=d(16,0),I=0;for(I=0;I<4;++I){var _=R[0+I]+R[12+I],U=R[4+I]+R[8+I],M=R[4+I]-R[8+I],B=R[0+I]-R[12+I];V[0+I]=_+U,V[8+I]=_-U,V[4+I]=B+M,V[12+I]=B-M}for(I=0;I<4;++I){const t=O[O.length-1],e=V[0+4*I]+3;_=e+V[3+4*I],U=V[1+4*I]+V[2+4*I],M=V[1+4*I]-V[2+4*I],B=e-V[3+4*I],O[t+0]=_+U>>3,O[t+16]=B+M>>3,O[t+32]=_-U>>3,O[t+48]=B-M>>3,O[O.length-1]+=64}y[y.length-1]=0}for(u=i(va[15&g.X]),s=i(va[15&a.X]),v=0;v<4;++v){var j=s[v];for(S=0;S<4;++S){var G=dt(o,w,T=j+u[S],n.sc,m,y);u[S]=j=(G>0)+0,c[S]=(0!=y[y[y.length-1]+0])+0,f[S]=(G>1)+0,y[y.length-1]+=16}s[v]=j,h|=vt(c,24-4*v),l|=vt(f,24-4*v)}for(t=vt(u,24),r=vt(s,24),u=i(va[g.X>>4]),s=i(va[a.X>>4]),p=0;p<4;p+=2){for(v=0;v<2;++v){for(j=s[p+v],S=0;S<2;++S)T=j+u[p+S],G=dt(o,e.R.z[2],T,n.qc,0,y),u[p+S]=j=(G>0)+0,c[2*v+S]=(0!=y[y[y.length-1]+0])+0,f[2*v+S]=(G>1)+0,y[y.length-1]+=16;s[p+v]=j}h|=vt(c,8-2*p),l|=vt(f,8-2*p)}t|=vt(u,20),r|=vt(s,20),g.X=t,a.X=r,e.z=y,e.Oa=l+0,e.ja=l|h,g.Nb=!e.ja+0}s=!o.Ab}if(!s){f=lt(t,"VP8_STATUS_NOT_ENOUGH_DATA",`Premature end-of-file encountered.${t.i} ${t.d}`);break t}const E=t,C=E.Ea,F=nn,J=E.Ea,Y=an,x=E.Ea,Q=on;if(E.i>0){var N=0;for(N=-1;N<16;++N)it(C,F+N*en-4,C,F+N*en+12);for(N=-1;N<8;++N)it(J,Y+N*en-4,J,Y+N*en+4),it(x,Q+N*en-4,x,Q+N*en+4)}else{for(N=0;N<16;++N)C[F+N*en-1]=129;for(N=0;N<8;++N)J[Y+N*en-1]=129,x[Q+N*en-1]=129;E.d>0&&(C[F-1-en]=J[Y-1-en]=x[Q-1-en]=129)}const Z=E.Xc,tt=16*+E.i,et=E.Sc,rt=8*+E.i,nt=E.Vc,at=8*+E.i,ot=E.z;let ft=0;if(E.d>0)c(C,F-en,Z,tt,16),c(J,Y-en,et,rt,8),c(x,Q-en,nt,at,8);else if(0==E.i){for(n=0;n<21;++n)C[F-en-1+n]=127;for(n=0;n<9;++n)J[Y-en-1+n]=127;for(n=0;n<9;++n)x[Q-en-1+n]=127}if(E.wa){const t=F-en+16;E.d>0&&(E.i>=E.Ma-1?C[t+0]=C[t+1]=C[t+2]=C[t+3]=Z[tt+15]:c(C,t+0,Z,tt+16,4));for(let e=0;e<4;++e)C[e+t+4*en]=C[e+t+4*en]=C[e+t+8*en]=C[e+t+12*en]=C[e+t+0];for(ft=0;ft<16;ft++){var L=C,H=F+aa[ft];Dn[E.Eb[ft]](L,H),E.Oa&1<0){const t=ht.M[1+ht.i],e=ht.La[1+ht.i].Nb;let r=ht.Zb[ht.Lb];ht.ga.oc&&(r+=ht.ga.Lc[0],ht.wa&&(r+=ht.ga.Gc[0])),r=r<0?0:r>63?63:r,t.zc=r,ht.ga.kb>0&&(r=ht.ga.kb>4?r>>2:r>>1,r>9-ht.ga.kb&&(r=9-ht.ga.kb)),t.yc=r<1?1:r,t.ab=(!e||ht.wa)+0}var K=0,$=8*ht.Ja*ht.r,X=ht.ca,ut=ht.da+16*ht.i+16*ht.Ja*ht.H,bt=ht.aa,st=ht.ba+8*ht.i+$,pt=ht.ra,Pt=ht.sa+8*ht.i+$;for(K=0;K<16;++K)c(X,ut+K*ht.H,ht.Ea,+nn+K*en,16);for(K=0;K<8;++K)c(bt,st+K*ht.r,ht.Ea,+an+K*en,8),c(pt,Pt+K*ht.r,ht.Ea,+on+K*en,8)}const E=t,C=e;var At=1;const F=E.oa;if(E.qb){const t=E.rc;if(At&=WebPWorkerSync(t),g(t.a==OK),At){if(F.N=C,F.ha=E.Ja,F.d=E.d,F.W=E.W,F.W){const t=F.M;F.M=E.M,E.M=t}WebPWorkerLaunch(t),++E.Ja==E.jb&&(E.Ja=0)}}else{F.d=E.d,F.W=E.W;e:{let t=1;const e=E.oa,r=ea[E.A],n=r*E.H,a=parseInt(r/2)*E.r,f=16*e.ha*E.H,i=8*e.ha*E.r,u=E.ca,b=E.da-n+f,s=E.aa,l=E.ba-a+i,h=E.ra,d=E.sa-a+i,v=0==e.d,p=(e.d>=E.hb-1)+0;var kt=16*e.d;let P=16*(e.d+1);if(e.W){const t=E;let e=0;const r=t.oa.d;for(g(t.oa.W),e=t.lb;e0&&$n(u,b,c,h+4),i.ab&&Zn(u,b,c,h),o>0&&Qn(u,b,c,h+4),i.ab&&Xn(u,b,c,h);else{const t=n.r,e=n.aa,r=n.ba+8*f.ha*t+8*a,d=n.ra,v=n.sa+8*f.ha*t+8*a,p=n.Ac.fb?s>=40?2:s>=15?1:0:s>=40?3:s>=20?2:s>=15?1:0;a>0&&(Hn(u,b,c,h+4,l,p),qn(e,r,d,v,t,h+4,l,p)),i.ab&&(Jn(u,b,c,h,l,p),xn(e,r,d,v,t,h,l,p)),o>0&&(Ln(u,b,c,h+4,l,p),zn(e,r,d,v,t,h+4,l,p)),i.ab&&(Kn(u,b,c,h,l,p),Yn(e,r,d,v,t,h,l,p))}}}if(C.put){if(v?(C.y=E.ca,C.D=E.da+f,C.c=E.aa,C.B=E.ba+i,C.S=E.ra,C.C=E.sa+i):(kt-=r,C.y=u,C.D=b,C.c=s,C.B=l,C.S=h,C.C=d),p||(P-=r),P>C.K&&(P=C.K),E.Ga!=o&&kt>1),C.C+=E.r*(t>>1),C.p!=o&&(C.q+=C.width*t)}kt>1,C.C+=C.t>>1,C.p!=o&&(C.q+=C.t),C.w=kt-C.k,C.m=C.Ka-C.t,C.h=P-kt,t=C.put(C))}e.ha+1==E.jb&&!p&&(c(E.ca,E.da-n,u,b+16*E.H,n),c(E.aa,E.ba-a,s,l+8*E.r,a),c(E.ra,E.sa-a,h,d+8*E.r,a)),At=t}}if(!At){f=lt(t,"VP8_STATUS_USER_ABORT","Output aborted.");break t}}let a;if(!(a=t.qb&&!WebPWorkerSync(t.rc))){let e;(e=t.fc>0)&&(g(t),g(t.fc>0),e=!1),a=e}f=a?0:1}const a=f;e.Pb&&e.Pb(e),f=1&a}return f?(t.za=0,f):(gt(t),0)}function gt(t){t!=o&&(t.ib&&(t.ib=0),t.ib=o,t.Gb=0,t.za=0)}function Pt(t,e){return t+(1<>e}function At(t,e,r,n,a){const o=Ga[r]+Na[e]>>ga;e=Fa[e],n[a+0]=La[t+Ca[r]-Pa],n[a+1]=La[t+o-Pa],n[a+2]=La[t+e-Pa]}function kt(t,e,r,n,a){const o=Ga[r]+Na[e]>>ga;e=Fa[e],n[a+0]=248&La[t+Ca[r]-Pa]|La[t+o-Pa]>>5,n[a+1]=La[t+o-Pa]<<3&224|La[t+e-Pa]>>3}function mt(t,e,r,n,a){n[a+0]=255,At(t,e,r,n,a+1)}function wt(t,e,r,n,a){const o=Fa[e];n[a+0]=Ha[t+Ca[r]-Pa]<<4|Ha[t+(Ga[r]+Na[e]>>ga)-Pa],n[a+1]=15|Ha[t+o-Pa]<<4}function yt(t,e,r,n,a){const o=Ca[r];r=Ga[r]+Na[e]>>ga,n[a+0]=La[t+Fa[e]-Pa],n[a+1]=La[t+r-Pa],n[a+2]=La[t+o-Pa]}function St(t,e,r,n,a){yt(t,e,r,n,a),n[a+3]=255}function Tt(t,e,r,n,a){At(t,e,r,n,a),n[a+3]=255}function Rt(t,e,r){t[e]=((((4278255360&t[e])>>>0)+((4278255360&r)>>>0)&4278255360)>>>0|(16711935&t[e])+(16711935&r)&16711935)>>>0}function Ot(t,e){return((4278124286&(t^e))>>>1)+((t&e)>>>0)>>>0}function Vt(t){return t<256&&t>0?t:t<=0?0:~t>>24&255}function It(t,e){return Vt(t+parseInt((t-e)/2,10))}function _t(){return dr}function Wt(t,e){return(t&=255)>127&&(t-=256),(e&=255)>127&&(e-=256),t*e>>>5}function Ut(t,e,r,n,a,o,f){var c=0;const i=8>>t.n,u=t.U,b=t.u;if(i<8){t=(1<>8&255),o[f++]=b[e&s],e>>=i}}else for(c=e;c>8&255]}function Mt(t,e,r,n,a){for(r=e+r;e>16&255,n[a++]=r>>8&255,n[a++]=r>>0&255,n[a++]=r>>24&255}}function Bt(t,e,r,n,a){for(r=e+r;e>16&240|r>>12&15,n[a++]=r>>0&240|r>>28&15}}function Dt(t,e,r,n,a){for(r=e+r;e>24&255,n[a++]=r>>16&255,n[a++]=r>>8&255,n[a++]=r>>0&255}}function Et(t,e,r,n){return S(t,8)!=ir?0:(e[0]=S(t,ur)+1,r[0]=S(t,ur)+1,n[0]=S(t,1),S(t,br),1)}function jt(t,e){let r=0;return t<4?t+1:(r=t-2>>1,(2+(1&t)<e.ya){var r=t.Y,n=0;for(g(r!=o);0!=r[n].s;){var a=r,f=e;const t=f.T>>f.g&1;f.L?f.fa=1:(++f.g,f.g>=8&&w(f),f.Q==f.ya&&32==f.g&&(f.L=1)),n=n+a[n].s+t}return r[n].kc}for(n=0,g((r=t.Y)!=o);0!=r[n].s;)a=r,f=e.T>>e.g&1,++e.g,n=n+a[n].s+f;return r[n].kc}function Ft(t,e){if(t!=o){var r=0,n=0;for(r=0;r>t.eb)+(e>>t.eb)])0;){e=t.nc[a];let O=i;var h=b,d=l;switch(l=n,b=r,g(O<(v=u)),g(v<=e.Vb),e.Qc){case wr:for(h=0,e=b+(v-O)*e.U;b>8&255,P=16711935&(P=(P=(16711935&v[d])>>>0)+(p<<16|p));l[b++]=((4278255360&v[d])>>>0|P)>>>0,32==O&&h++}break;case kr:var A=O;if(h=v,d=l,p=b,P=(S=e).U,0==A){var k=0;for(Rt(d,p,dr),k=1;k>S.n)*w;A>8&15],k=1;k>8&15]),e=t(d[p+k-1],d,p+k-P),Rt(d,p+k,e)}p+=P,0==(++A&m)&&(S+=w)}v!=e.Vb&&c(l,b-(e=e.U),l,b+(v-O-1)*e,e);break;case mr:for(h=e.U,d=(1<>e.n)*p;O>0&255,S.Bc=y>>8&255,S.Kc=y>>16&255),S=(y=l[b+w])>>>8,T=y>>>16,R=y,T+=Wt(m.Cc,S),T&=255,R+=Wt(m.Bc,S),R+=Wt(m.Kc,T),R&=255,l[b+w]=(4278255360&y|T<<16|R)>>>0;b+=h,++O,0==(O&d)&&(e+=p)}break;case yr:h==l&&e.n>0?(h=(v-O)*Pt(e.U,e.n),s(l,d=b+(v-O)*e.U-h,l,b,h),Ut(e,O,v,l,d,l,b)):Ut(e,O,v,h,d,l,b)}b=n,l=r}}function Lt(t,e){var r=t.V,n=t.Ha+t.l*t.O;if(!((o=e-t.O)<=0)){Nt(t,o,r,n);var a=t.N;r=t.Xa;let l=[t.vb];n=t.O;var o=e,f=l,c=a.width;if(g(na.K&&(o=a.K),n=o?n=0:(f[0]+=a.t,a.w=n-a.k,a.m=a.Ka-a.t,a.h=o-n,n=1),n){if(l=l[0],n=t.Ib,o=a.width,n.J0;){const t=r;let n=l,a=i;const b=f;let h=e;switch(c){case Ie:for(a=n+a;n>16&255,b[h++]=s>>8&255,b[h++]=s>>0&255}break;case _e:Mt(t,n,a,b,h);break;case Ee:Mt(t,n,a,b,h),WebPApplyAlphaMultiply(b,0,a,1,0);break;case We:for(a=n+a;n>0&255,b[h++]=s>>8&255,b[h++]=s>>16&255;break;case Ue:Dt(t,n,a,b,h);break;case je:Dt(t,n,a,b,h),WebPApplyAlphaMultiply(b,0,a,1,0);break;case Me:Dt(t,n,a,b,h);break;case Ce:Dt(t,n,a,b,h),WebPApplyAlphaMultiply(b,1,a,1,0);break;case Be:Bt(t,n,a,b,h);break;case Fe:Bt(t,n,a,b,h),WebPApplyAlphaMultiply4444(b,a,1,0);break;case De:for(a=n+a;n>16&248|s>>13&7,b[h++]=s>>5&224|s>>3&31;break;default:g(0)}l+=o,e+=u}r=a}t.xa+=r}else t.xa=a.I?EmitRescaledRowsYUVA(t,r,l,o,a.h):EmitRowsYUVA(t,r,l,o,a.m,a.h);g(t.xa<=n.height)}t.O=e,g(t.O<=t.v)}}function Ht(t,e,r,n,a,f){let c=1,i=0,u=0;const b=t.o,s=t.cb;let l=s.Db,h=r,d=r;r+=n*a;const v=(a=gr+Pr)+s.xb,p=s.xb>0?s.Yb:o,P=s.Dc;let A=!1;for(g(l!=o);!b.L&&h>>0)+(A<<16)+(c<<8)+k}if(A=!1,++h,++i,i>=n&&(i=0,++u,f!=o&&u%wa==0&&f(t,u),p!=o))for(;d>>p.bb]=c}else if(wDa?k-=Da:(w=Ea[k-1],w=(w>>4)*n+(8-(15&w)),k=w>=1?w:1),w=0,w=0;w=n;)i-=n,++u,f!=o&&u%wa==0&&f(t,u);if(h>>p.bb]=c}else if(w>>p.bb]=w;w=e,k=h,g(A<=-1>>>(m=p).bb),w[k]=m.ea[A],A=!0;continue}(c=!b.fa)||End}return f!=o&&f(t,u),b.fa||!c||b.L&&h16?0:h>4?1:h>2?2:3,l[0]=Pt(c.U,p),c.n=p,l=p=Jt(h,1,0,_,c.u))if(l=h,p=0,h=1<<(8>>>(_=c).n)>>>0,(P=Array(h))==o)l=0;else{A=_.u[0];var k=_.b;for(P[0]=_.u[0][_.b+0],p=1;p>>0)+((4278255360&P[p-1])>>>0)&4278255360)>>>0|(16711935&A[k+p])+(16711935&P[p-1])&16711935)>>>0;for(;p=1&&s<=lr)){n.a=Je;break}if(c)t:{c=n;var m=t[0],w=e[0],_=(l=s,k=A=0,k=c.o,c.cb);if(p=[o],h=o,P=1,r&&S(k,1)){if(w=(m=Pt(m,A=S(k,3)+2))*(W=Pt(w,A)),!Jt(m,W,0,c,p)){c.a=Je,Ft(h,P),c=0;break t}for(p=p[0],_.eb=A,A=0;A>>8&65535,p[A]=m,m>=P&&(P=m+1)}if(k.fa)Ft(h,P),c=0;else if(g(P<=65536),(h=v(P,mn))==o)c.a=qe,Ft(h,P),c=0;else{for(A=0;A0&&(m+=1<=t){(E=E&&T(e))||O(e),U=E;break r}if(!V(e,M[j],B[j],D[j])){(E=E&&T(e))||O(e),U=E;break r}}(E=(E=1)&&T(e))||O(e),U=E}else U=0}}else{if(U=0,B=[],(M=S(W,4)+4)>Ma){m.a=Je,m=0;break e}if((D=Array(t))==o){m.a=qe,m=0;break e}for(U=0;UB){U.a=Je,O(a),U=E;break r}}else r=B;for(e=0;eB){U.a=Je,O(a),U=E;break r}for(C=C?n:0;F-- >0;)M[e++]=C}}E=1,O(a),U=E}else U.a=Je,U=0}U&&(U=I(e,D,t))}(U=U&&!W.fa)?m=1:(m.a=Je,m=0)}if(!m){Ft(h,P),c=0;break t}}_.ac=p,_.hc=P,_.Db=h,c=1}}if(!c){n.a=Je;break}if(s>0){if(u.xb=1<0),l.ea=d(_,0),l.ea==o?s=0:(l.bb=32-s,s=1),!s){n.a=qe,c=0;break}}else u.xb=0;if(s=n,l=t[0],_=e[0],h=(p=s.cb).eb,s.l=l,s.v=_,p.Ec=Pt(l,h),p.Dc=0==h?-1:(1<>>8&255;t.O=t.xa=e}}function ut(t,e){return t<0?0:t>e?e:t}function Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,g,P){let A;const k=p-1>>1;let m=a[o+0]|f[c+0]<<16,w=i[u+0]|b[s+0]<<16;if(t){var y=3*m+w+131074>>2;g(t[e+0],255&y,y>>16,l,h)}for(r&&(y=3*w+m+131074>>2,g(r[n+0],255&y,y>>16,d,v)),A=1;A<=k;++A){const p=a[o+A]|f[c+A]<<16,k=i[u+A]|b[s+A]<<16,S=(y=m+p+w+k+524296)+2*(p+w)>>3,T=y+2*(m+k)>>3;t&&(y=S+m>>1,m=T+p>>1,g(t[e+2*A-1],255&y,y>>16,l,h+(2*A-1)*P),g(t[e+2*A-0],255&m,m>>16,l,h+(2*A-0)*P)),r&&(y=T+w>>1,m=S+k>>1,g(r[n+2*A-1],255&y,y>>16,d,v+(2*A-1)*P),g(r[n+2*A+0],255&m,m>>16,d,v+(2*A+0)*P)),m=p,w=k}1&p||(t&&(y=3*m+w+131074>>2,g(t[e+p-1],255&y,y>>16,l,h+(p-1)*P)),r&&(y=3*w+m+131074>>2,g(r[n+p-1],255&y,y>>16,d,v+(p-1)*P)))}function $t(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p){Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,At,3)}function Xt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p){Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,yt,3)}function Zt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p){Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,Tt,4)}function te(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p){Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,St,4)}function ee(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p){Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,mt,4)}function re(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p){Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,wt,2)}function ne(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p){Qt(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d,v,p,kt,2)}function ae(t,e,r,n,a,o,f,c,i,u,b,s,l,h,d){let v;for(v=0;v0;){var f=t,c=e+(r?1:0),i=t,u=e+(r?0:3),b=0;for(b=0;b>1)*r.nb,i=r.S,u=r.C+(t.w>>1)*r.rb,b=t.m,s=t.h,l=parseInt((b+1)/2,10),h=parseInt((s+1)/2,10);let d;for(d=0;d>4;b[s+2*h]=240&b[s+2*h]|t,l&=t}a+=e.width,s+=i.f}15!=l&&t(c)&&WebPApplyAlphaMultiply4444(b,f,o,u,i.f)}return 0}function ge(e){let r=e.ka;const n=r.j.J,a=n>1,n=e.m+2*t;let a;const f=[];for(a=0;a>ga,Na[e]=-22014*(e-128)+ja,Ga[e]=-45773*(e-128),Fa[e]=113618*(e-128)+ja>>ga;for(e=Pa;e>ga,La[e-Pa]=ut(r,255),Ha[e-Pa]=ut(r+8>>4,15);za=1}return 1}function Pe(t){const e=t.ka;let r=t.m;const n=t.h;return g(!(1&t.w)),r<=0||n<=0?0:(r=e.$a(t,e),e.ec+=r,e.zb&&e.zb(t,e),1)}function Ae(t){(t=t.ka).memory="",t.memory=o}function ke(t,e){return t[e+0]|t[e+1]<<8|t[e+2]<<16}function me(t,e){return(ke(t,e)|t[e+3]<<24)>>>0}function we(t,e,r,n,a,c,i){var u=0,b=[0],s="VP8StatusCode";const l=f(rr);if(t==o||r[0]<_r)return $e;l.data=t,l.b=[e[0]],l.e=[r[0]],l.na=[l.na];t:{if(u=l.na,g(t!=o),g(r!=o),g(u!=o),u[0]=0,r[0]>=_r&&!h(t,e[0],"RIFF",Vr)){if(h(t,e[0]+8,"WEBP",Vr)){s=Je;break t}if((P=me(t,e[0]+Vr))0,P=[0];t:if(s=Ir+Wr,g(t!=o),g(r!=o),g(b!=o),b[0]=0,r[0]=Mr){s=Je;break t}P!=o&&(P[0]=p),n!=o&&(n[0]=d),a!=o&&(a[0]=v),e[0]+=s,r[0]-=s,b[0]=1}s=ze}if(s!=ze)return s;if(!u&&b[0])return Je;if(c!=o&&(c[0]=!!(P[0]&Ur)),b&&i==o)return ze;if(r0&&n>b){s=Je;break t}if(p=d&&v>b-d){s=Je;break t}u[0]=v,e[0]+=Ir,r[0]-=Ir,P[0]=s}else P[0]=r>=1&&t[e+0]==ir,u[0]=r[0];s=ze}if(l.ta=l.ta[0],l.ia=l.ia[0],s!=ze)return s;if(l.ta>Br)return Je;if(l.ia){if(r[0]=3&&157==t[b+3+0]&&1==t[b+3+1]&&42==t[b+3+2]?(u=t[b+0]|t[b+1]<<8|t[b+2]<<16,P=16383&(t[b+7]<<8|t[b+6]),t=16383&(t[b+9]<<8|t[b+8]),!(!(1&u)+0)||(u>>1&7)>3||!(u>>4&1)||u>>5>=l.ta?t=0:(n&&(n[0]=P),a&&(a[0]=t),t=1)):t=0}return t?(c!=o&&(c[0]|=l.$!=o),i!=o&&(i[0]=l,i[0].offset=e[0]-i[0].b,g(e[0]-i[0].b0,e.Ua&&(i=t.wc,u=t.vc,f=t.t,c=t.k,rn||c+u>a))return 0;if(e.t=f,e.k=c,e.Ka=f+i,e.K=c+u,e.m=i,e.h=u,e.I=t!=o&&t.I>0,e.I){if(t.Ba<=0||t.Aa<=0)return 0;e.Ba=t.Ba,e.Aa=t.Aa}return e.Za=t&&t.Za,e.Bb=t==o||!t.ed,e.I&&(e.Za=e.Ba<3*n/4&&e.Aa<3*a/4,e.Bb=0),1}var Ve=512,Ie=0,_e=1,We=2,Ue=3,Me=4,Be=5,De=6,Ee=7,je=8,Ce=9,Fe=10,Ge=11,Ne=12,Le=13;this.WEBP_CSP_MODE=this.Cd={nd:0,od:1,kd:2,ld:3,jd:4,pd:5,qd:6,rd:7,sd:8,md:9};var He={J:"WEBP_CSP_MODE",width:0,height:0,Fc:0,c:{RGBA:{ma:0,Sa:0,f:0,size:0},Va:{y:0,c:0,S:0,p:0,D:0,B:0,C:0,q:0,F:0,nb:0,rb:0,Fa:0,Wc:0,Rc:0,Uc:0,Wb:0}},Ic:d(4,0),Jb:o,jc:0},ze=0,qe=1,Ke=2,Je=3,Ye=4,xe=5,Qe=6,$e=7;this.VP8StatusCode=this.td={xd:0,yd:1,vd:2,ud:3,Ad:4,zd:5,Bd:6,wd:7};var Xe={width:{value:0},height:{value:0},$b:{value:0},tc:0,Yd:0,rotate:0,be:0,Ic:d(3,0)};this.WebPGetFeatures=this.Md=function(t,e,r){let n="VP8StatusCode";return Ve>>>8!=Ve>>>8||r==o?t=Ke:(n=Re(t,[0],e=[e],r),t=n==$e?Je:n),t};const Ze={Za:0,ed:0,Ua:0,t:0,k:0,wc:0,vc:0,I:0,Ba:0,Aa:0,ae:0,Td:0,Xd:0,Ic:d(6,0)};this.WebPDecoderConfig=this.Kd={input:f(Xe),j:f(He),options:f(Ze)},this.WebPInitDecoderConfig=this.Nd=function(t){return Ve>>>8!=Ve>>>8||t==o?t=0:(g((t=t.input)!=o),t.tc=0,t=1),t};var tr={width:0,height:0,w:0,m:0,h:0,y:0,c:0,S:0,D:0,B:0,C:0,F:0,Da:0,ka:0,put:0,Mb:0,Pb:0,Bb:0,e:0,data:0,b:0,Za:0,Ua:0,t:0,Ka:0,k:0,K:0,I:0,Ba:0,Aa:0,p:0,q:0},er={j:f(He),Sb:0,Qb:0,lc:0,Tb:0,Rb:0,mc:0,ec:0,Qa:f(Ze),memory:0,$a:"(OutputFunc)",zb:"(OutputFunc)",ad:"(OutputRowFunc)"},rr={data:0,b:0,e:0,offset:0,$:o,G:0,pa:0,ta:0,na:0,ia:0},nr={qa:0,Ia:o,Pd:0,Ab:0,la:0,Z:0,gc:0},ar={T:0,qa:0,Ia:0,ya:0,Q:0,g:0,L:0,fa:0},or=25,fr=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],cr=10,ir=47,ur=14,br=3,sr=5,lr=11,hr=5,dr=4278190080,vr=8,pr=15,gr=256,Pr=24,Ar=4,kr=0,mr=1,wr=2,yr=3,Sr=1,Tr=0,Rr=1,Or=1,Vr=4,Ir=8,_r=12,Wr=10,Ur=16,Mr=1*Math.pow(2,32),Br=-1-Ir-1>>>0,Dr={kc:0,s:0},Er={Y:"HuffmanTreeNode*",gb:0,Pa:0},jr=-1;var Cr=506832829,Fr=0,Gr=Fr,Nr=2,Lr=3,Hr=1,zr=4,qr=5,Kr=6,Jr=3,Yr=4,xr=4,Qr=4,$r=4,Xr=8,Zr=3,tn=11,en=32,rn=17*en+9*en,nn=1*en+8,an=nn+16*en+en,on=an+16,fn={fb:0,Jc:0,Nc:0,Ra:0},cn={l:0,v:0,gd:0,hd:0,uc:0,$c:0};const un={pb:0,ob:0,tb:0,Kb:d(Yr,0),Cb:d(Yr,0)},bn={Ta:d(Jr,0),z:p([$r,Xr,Zr,tn],0)},sn={Oc:0,Fb:0,kb:0,oc:0,Lc:d(xr,0),Gc:d(xr,0)};var ln={zc:0,yc:0,ab:0},hn={X:0,ua:0,Nb:0};const dn=d(2,0),vn={sc:f(dn),sb:f(dn),qc:f(dn)},pn={ha:0,d:0,W:0,M:ln,N:tr};var gn={a:"VP8StatusCode",za:0,xc:0,o:f(nr),Ac:f(fn),P:f(cn),ga:f(sn),Ca:f(un),rc:"WebPWorker",qb:0,Ja:0,jb:0,oa:pn,Ma:0,hb:0,lb:0,mb:0,wb:0,Ya:0,Hb:0,ic:v(8,nr),Zc:0,yb:v(Yr,vn),R:f(bn),pc:0,Pc:0,dc:0,cc:d(4,0),Xc:0,Sc:0,Vc:0,La:f(hn),M:f(ln),Ea:0,z:0,ca:0,aa:0,ra:0,da:0,ba:0,sa:0,H:0,r:0,ib:0,Gb:0,i:0,d:0,wa:0,Eb:d(16,0),Vd:0,Tc:0,Lb:0,ja:0,Oa:0,A:0,W:0,Zb:d(Yr,0),Ga:o,G:0,ub:0,Xb:0,Od:0,cd:0,dd:0,Wd:0,fc:0},Pn=0,An=1,kn=2;var mn={va:v(hr,Er)};const wn={xb:0,Yb:f({ea:0,bb:0}),Dc:0,eb:0,Ec:0,ac:0,bd:0,hc:0,Db:"HTreeGroup"};var yn={a:"VP8StatusCode",Wa:"VP8LDecodeState",Ob:"VP8LDecodeState",N:"VP8Io",Ib:"WebPDecBuffer",Hc:"WebPDecBuffer",V:0,Ha:0,Xa:0,vb:0,o:f(ar),l:0,v:0,O:0,xa:0,cb:f(wn),Na:0,nc:v(Ar,{Qc:"VP8LImageTransformType",n:0,U:0,Vb:0,u:0,b:0}),Ub:0,Mc:0,$d:0,Zd:"*WebPRescaler"},Sn=4,Tn=[o,function(t,e,r,n,a,f,i,u){let b=0,s=u;for(g(t!=o),g(i!=o),g(r>0),g(n>0),g(a>0),g(f>=r*a),b=0;b0),g(n>0),g(a>0),g(f>=r*a),c(i,u,t,e,a),_(t,e+a,i,s,i,u+a,a*(r-1)),b=1;b0),g(n>0),g(a>0),g(f>=r*a),c(i,u,t,e,a),_(t,e+a,i,b,i,u+a,a*(r-1)),s=1;s255?255:r)&255}}}],Rn=[3,4,3,4,4,2,2,4,4,4,2,1,1];this.WebPFreeDecBuffer=this.Yc=function(t){t!=o&&(t.Fc||(t.Jb=""),t.jc=0,t.Jb=t.jc=o)},a=this;var On=d(511,0),Vn=d(511,0),In=d(2041,0),_n=d(225,0),Wn=d(766,0),Un=0,Mn=85627,Bn=35468,Dn=[function(t,e){let r,n=4;for(r=0;r<4;++r)n+=t[e+r-en]+t[e-1+r*en];for(n>>=3,r=0;r<4;++r)l(t,e+r*en,n,4)},function(t,e){G(t,e,4)},function(t,e){let r=e-en;const n=[];for(n.push(L(t[r-1],t[r+0],t[r+1])),n.push(L(t[r+0],t[r+1],t[r+2])),n.push(L(t[r+1],t[r+2],t[r+3])),n.push(L(t[r+2],t[r+3],t[r+4])),r=0;r<4;++r)c(t,e+r*en,n,0,4)},function(t,e){const r=t[e-1],n=t[e-1+en],a=t[e-1+2*en],o=t[e-1+3*en];t[e+0+0*en]=t[e+1+0*en]=t[e+2+0*en]=t[e+3+0*en]=L(t[e-1-en],r,n),t[e+0+1*en]=t[e+1+1*en]=t[e+2+1*en]=t[e+3+1*en]=L(r,n,a),t[e+0+2*en]=t[e+1+2*en]=t[e+2+2*en]=t[e+3+2*en]=L(n,a,o),t[e+0+3*en]=t[e+1+3*en]=t[e+2+3*en]=t[e+3+3*en]=L(a,o,o)},function(t,e){const r=t[e-1+0*en],n=t[e-1+1*en],a=t[e-1+2*en],o=t[e-1-en],f=t[e+0-en],c=t[e+1-en],i=t[e+2-en],u=t[e+3-en];t[e+0+3*en]=L(n,a,t[e-1+3*en]),t[e+0+2*en]=t[e+1+3*en]=L(r,n,a),t[e+0+1*en]=t[e+1+2*en]=t[e+2+3*en]=L(o,r,n),t[e+0+0*en]=t[e+1+1*en]=t[e+2+2*en]=t[e+3+3*en]=L(f,o,r),t[e+1+0*en]=t[e+2+1*en]=t[e+3+2*en]=L(c,f,o),t[e+2+0*en]=t[e+3+1*en]=L(i,c,f),t[e+3+0*en]=L(u,i,c)},function(t,e){const r=t[e-1+0*en],n=t[e-1+1*en],a=t[e-1+2*en],o=t[e-1-en],f=t[e+0-en],c=t[e+1-en],i=t[e+2-en],u=t[e+3-en];t[e+0+0*en]=t[e+1+2*en]=o+f+1>>1,t[e+1+0*en]=t[e+2+2*en]=f+c+1>>1,t[e+2+0*en]=t[e+3+2*en]=c+i+1>>1,t[e+3+0*en]=i+u+1>>1,t[e+0+3*en]=L(a,n,r),t[e+0+2*en]=L(n,r,o),t[e+0+1*en]=t[e+1+3*en]=L(r,o,f),t[e+1+1*en]=t[e+2+3*en]=L(o,f,c),t[e+2+1*en]=t[e+3+3*en]=L(f,c,i),t[e+3+1*en]=L(c,i,u)},function(t,e){const r=t[e+1-en],n=t[e+2-en],a=t[e+3-en],o=t[e+4-en],f=t[e+5-en],c=t[e+6-en],i=t[e+7-en];t[e+0+0*en]=L(t[e+0-en],r,n),t[e+1+0*en]=t[e+0+1*en]=L(r,n,a),t[e+2+0*en]=t[e+1+1*en]=t[e+0+2*en]=L(n,a,o),t[e+3+0*en]=t[e+2+1*en]=t[e+1+2*en]=t[e+0+3*en]=L(a,o,f),t[e+3+1*en]=t[e+2+2*en]=t[e+1+3*en]=L(o,f,c),t[e+3+2*en]=t[e+2+3*en]=L(f,c,i),t[e+3+3*en]=L(c,i,i)},function(t,e){const r=t[e+0-en],n=t[e+1-en],a=t[e+2-en],o=t[e+3-en],f=t[e+4-en],c=t[e+5-en],i=t[e+6-en],u=t[e+7-en];t[e+0+0*en]=r+n+1>>1,t[e+1+0*en]=t[e+0+2*en]=n+a+1>>1,t[e+2+0*en]=t[e+1+2*en]=a+o+1>>1,t[e+3+0*en]=t[e+2+2*en]=o+f+1>>1,t[e+0+1*en]=L(r,n,a),t[e+1+1*en]=t[e+0+3*en]=L(n,a,o),t[e+2+1*en]=t[e+1+3*en]=L(a,o,f),t[e+3+1*en]=t[e+2+3*en]=L(o,f,c),t[e+3+2*en]=L(f,c,i),t[e+3+3*en]=L(c,i,u)},function(t,e){const r=t[e-1+0*en],n=t[e-1+1*en],a=t[e-1+2*en],o=t[e-1+3*en],f=t[e-1-en],c=t[e+0-en],i=t[e+1-en],u=t[e+2-en];t[e+0+0*en]=t[e+2+1*en]=r+f+1>>1,t[e+0+1*en]=t[e+2+2*en]=n+r+1>>1,t[e+0+2*en]=t[e+2+3*en]=a+n+1>>1,t[e+0+3*en]=o+a+1>>1,t[e+3+0*en]=L(c,i,u),t[e+2+0*en]=L(f,c,i),t[e+1+0*en]=t[e+3+1*en]=L(r,f,c),t[e+1+1*en]=t[e+3+2*en]=L(n,r,f),t[e+1+2*en]=t[e+3+3*en]=L(a,n,r),t[e+1+3*en]=L(o,a,n)},function(t,e){const r=t[e-1+0*en],n=t[e-1+1*en],a=t[e-1+2*en],o=t[e-1+3*en];t[e+0+0*en]=r+n+1>>1,t[e+2+0*en]=t[e+0+1*en]=n+a+1>>1,t[e+2+1*en]=t[e+0+2*en]=a+o+1>>1,t[e+1+0*en]=L(r,n,a),t[e+3+0*en]=t[e+1+1*en]=L(n,a,o),t[e+3+1*en]=t[e+1+2*en]=L(a,o,o),t[e+3+2*en]=t[e+2+2*en]=t[e+0+3*en]=t[e+1+3*en]=t[e+2+3*en]=t[e+3+3*en]=o}],En=[function(t,e){let r,n=16;for(r=0;r<16;++r)n+=t[e-1+r*en]+t[e+r-en];N(n>>5,t,e)},function(t,e){G(t,e,16)},function(t,e){let r;for(r=0;r<16;++r)c(t,e+r*en,t,e-en,16)},function(t,e){let r;for(r=16;r>0;--r)l(t,e+0,t[e-1],16),e+=en},function(t,e){let r,n=8;for(r=0;r<16;++r)n+=t[e-1+r*en];N(n>>4,t,e)},function(t,e){let r,n=8;for(r=0;r<16;++r)n+=t[e+r-en];N(n>>4,t,e)},function(t,e){N(128,t,e)}],jn=[function(t,e){let r,n=8;for(r=0;r<8;++r)n+=t[e+r-en]+t[e-1+r*en];H(1*(n>>4),t,e)},function(t,e){G(t,e,8)},function(t,e){let r;for(r=0;r<8;++r)c(t,e+r*en,t,e-en,8)},function(t,e){let r;for(r=0;r<8;++r)l(t,e+0,t[e-1],8),e+=en},function(t,e){let r,n=4;for(r=0;r<8;++r)n+=t[e-1+r*en];H(1*(n>>3),t,e)},function(t,e){let r,n=4;for(r=0;r<8;++r)n+=t[e+r-en];H(1*(n>>3),t,e)},function(t,e){H(128,t,e)}];let Cn,Fn,Gn,Nn,Ln,Hn,zn,qn,Kn,Jn,Yn,xn,Qn,$n,Xn,Zn;var ta=31,ea=[0,2,8],ra=3,na=1,aa=[0+0*en,4+0*en,8+0*en,12+0*en,0+4*en,4+4*en,8+4*en,12+4*en,0+8*en,4+8*en,8+8*en,12+8*en,0+12*en,4+12*en,8+12*en,12+12*en],oa=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],fa=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],ca=[-Fr,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],ia=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],ua=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],ba=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]];this.WebPGetDecoderVersion=this.Ld=function(){return 512};var sa=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],la=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],ha=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],da=p([Zr,tn],"");d(4,0);var va=[[0,0,0,0],[1,0,0,0],[0,1,0,0],[1,1,0,0],[0,0,1,0],[1,0,1,0],[0,1,1,0],[1,1,1,0],[0,0,0,1],[1,0,0,1],[0,1,0,1],[1,1,0,1],[0,0,1,1],[1,0,1,1],[0,1,1,1],[1,1,1,1]],pa=134480385,ga=16,Pa=-227,Aa=482,ka=[_t,function(t){return t},function(t,e,r){return e[r+0]},function(t,e,r){return e[r+1]},function(t,e,r){return e[r-1]},function(t,e,r){return Ot(Ot(t,e[r+1]),e[r+0])},function(t,e,r){return Ot(t,e[r-1])},function(t,e,r){return Ot(t,e[r+0])},function(t,e,r){return Ot(e[r-1],e[r+0])},function(t,e,r){return Ot(e[r+0],e[r+1])},function(t,e,r){return Ot(Ot(t,e[r-1]),Ot(e[r+0],e[r+1]))},function(t,e,r){return Math.abs((t>>24&255)-(e[r-1]>>24&255))-Math.abs((e[r+0]>>24&255)-(e[r-1]>>24&255))+(Math.abs((t>>16&255)-(e[r-1]>>16&255))-Math.abs((e[r+0]>>16&255)-(e[r-1]>>16&255)))+(Math.abs((t>>8&255)-(e[r-1]>>8&255))-Math.abs((e[r+0]>>8&255)-(e[r-1]>>8&255)))+(Math.abs((255&t)-(255&e[r-1]))-Math.abs((255&e[r+0])-(255&e[r-1])))<=0?e[r+0]:t},function(t,e,r){return(Vt((t>>24&255)+(e[r+0]>>24&255)-(e[r-1]>>24&255))<<24|Vt((t>>16&255)+(e[r+0]>>16&255)-(e[r-1]>>16&255))<<16|Vt((t>>8&255)+(e[r+0]>>8&255)-(e[r-1]>>8&255))<<8|Vt((255&t)+(255&e[r+0])-(255&e[r-1])))>>>0},function(t,e,r){const n=e[r-1];return(It((t=Ot(t,e[r+0]))>>24&255,n>>24&255)<<24|It(t>>16&255,n>>16&255)<<16|It(t>>8&255,n>>8&255)<<8|It(t>>0&255,n>>0&255))>>>0},_t,_t],ma={Cc:0,Bc:0,Kc:0},wa=16,ya=16,Sa=16,Ta=[2,3,7],Ra=[3,3,11],Oa=0,Va=1,Ia=2,_a=3,Wa=4,Ua=[gr+Pr,gr,gr,gr,40],Ma=19,Ba=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],Da=120,Ea=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],ja=1<{var e;e=t.data,m.push(e),y()}))}},n={};function a(t){var e=n[t];if(void 0!==e)return e.exports;var o=n[t]={exports:{}};return r[t].call(o.exports,o,o.exports,a),o.exports}a.m=r,a.x=()=>{var t=a.O(void 0,[699,866,158],(()=>a(2061)));return a.O(t)},t=[],a.O=(e,r,n,o)=>{if(!r){var f=1/0;for(b=0;b=o)&&Object.keys(a.O).every((t=>a.O[t](r[i])))?r.splice(i--,1):(c=!1,o0&&t[b-1][2]>o;b--)t[b]=t[b-1];t[b]=[r,n,o]},a.d=(t,e)=>{for(var r in e)a.o(e,r)&&!a.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},a.f={},a.e=t=>Promise.all(Object.keys(a.f).reduce(((e,r)=>(a.f[r](t,e),e)),[])),a.u=t=>({158:"npm.iobuffer",699:"npm.pako",866:"npm.fast-png"}[t]+"."+{158:"8fe11aa09121a6fd9200",699:"89deb457201f16c93925",866:"a7cba17ee621cb2ad512"}[t]+".chunk.js"),a.miniCssF=t=>{},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),(()=>{var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");r.length&&(t=r[r.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t})(),(()=>{if(void 0!==a){var t=a.u,e=a.e,r={},n={};a.u=function(e){return t(e)+(r.hasOwnProperty(e)?"?"+r[e]:"")},a.e=function(o){return e(o).catch((function(e){var f=n.hasOwnProperty(o)?n[o]:999999;if(f<1){var c=t(o);throw e.message="Loading chunk "+o+" failed after 999999 retries.\n("+c+")",e.request=c,e}return new Promise((function(t){setTimeout((function(){var e=Date.now();r[o]=e,n[o]=f-1,t(a.e(o))}),3e3)}))}))}}})(),(()=>{var t={61:1};a.f.i=(e,r)=>{t[e]||importScripts(a.p+a.u(e))};var e=this.webpackChunktweb=this.webpackChunktweb||[],r=e.push.bind(e);e.push=e=>{var[n,o,f]=e;for(var c in o)a.o(o,c)&&(a.m[c]=o[c]);for(f&&f(a);n.length;)t[n.pop()]=1;r(e)}})(),e=a.x,a.x=()=>Promise.all([699,866,158].map(a.e,a)).then(e),a.x()})(); -//# sourceMappingURL=61.f9d40768535453d75527.chunk.js.map \ No newline at end of file +//# sourceMappingURL=61.84ba1f0d30c94eb8b92b.chunk.js.map \ No newline at end of file diff --git a/public/61.f9d40768535453d75527.chunk.js.map b/public/61.84ba1f0d30c94eb8b92b.chunk.js.map similarity index 99% rename from public/61.f9d40768535453d75527.chunk.js.map rename to public/61.84ba1f0d30c94eb8b92b.chunk.js.map index 03f2929e..82439d13 100644 --- a/public/61.f9d40768535453d75527.chunk.js.map +++ b/public/61.84ba1f0d30c94eb8b92b.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"61.f9d40768535453d75527.chunk.js","mappings":"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,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClC,IAAK,IAAK,KAEZ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IACnB,IAAK,IAAK,IAAK,IAAK,IAAK,KAE3B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IACT,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAIzC,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACvC,IAAK,MAGT,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,IAAK,IAAK,IAAK,IAAK,KAEtB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IACT,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAErC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,QAIzD8L,KAAKuB,sBAAwBvB,KAAKhN,GAAK,WACrC,OAAO,GACT,EACA,IAAIlB,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACtD2C,GAAK,CACP,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,IAAK,GACrB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAC1B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAEtDC,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7B,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAExB4D,GAAKzR,EAAG,CAACoN,GAAIX,IAAK,IACtB3M,EAAE,EAx1HM,GAy1HR,IAAIiG,GAAK,CACP,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,IAER+H,GAAK,UACL4D,GAAK,GACLtL,IAAK,IACLqH,GAAK,IACL8G,GAAK,CAACpN,GAAI,SAAU/G,GACtB,OAAOA,CACT,EAAG,SAAUA,EAAGK,EAAGC,GACjB,OAAOD,EAAEC,EAAI,EACf,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOD,EAAEC,EAAI,EACf,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOD,EAAEC,EAAI,EACf,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGA,GAAGvE,EAAGK,EAAEC,EAAI,IAAKD,EAAEC,EAAI,GACnC,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGvE,EAAGK,EAAEC,EAAI,GACrB,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGvE,EAAGK,EAAEC,EAAI,GACrB,EAAG,SAAUN,EACXK,EAAGC,GACH,OAAOiE,GAAGlE,EAAEC,EAAI,GAAID,EAAEC,EAAI,GAC5B,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGlE,EAAEC,EAAI,GAAID,EAAEC,EAAI,GAC5B,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGA,GAAGvE,EAAGK,EAAEC,EAAI,IAAKiE,GAAGlE,EAAEC,EAAI,GAAID,EAAEC,EAAI,IAChD,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOsZ,KAAKW,KAAKva,GAAK,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQsZ,KAAKW,KAAKla,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,OAASsZ,KAAKW,KAAKva,GAAK,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQsZ,KAAKW,KAAKla,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,QAAUsZ,KAAKW,KAAKva,GAAK,EAAI,MAAQK,EAAEC,EAAI,IAAM,EAAI,MAAQsZ,KAAKW,KAAKla,EAAEC,EAAI,IAAM,EAAI,MAAQD,EAAEC,EAAI,IAAM,EAAI,QAAUsZ,KAAKW,KAAS,IAAJva,IAAuB,IAAXK,EAAEC,EAAI,KAAasZ,KAAKW,KAAgB,IAAXla,EAAEC,EAAI,KAAwB,IAAXD,EAAEC,EAAI,OAAe,EAAID,EAAEC,EAAI,GAAKN,CACvc,EAAG,SAAUA,EAAGK,EAAGC,GACjB,OAAQyR,IAAI/R,GACL,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,OAAS,GAAKyR,IAAI/R,GAAK,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,OAAS,GAAKyR,IAAI/R,GAAK,EAAI,MAAQK,EAAEC,EAAI,IAAM,EAAI,MAAQD,EAAEC,EAAI,IAAM,EAAI,OAAS,EAAIyR,IAAQ,IAAJ/R,IAAuB,IAAXK,EAAEC,EAAI,KAAwB,IAAXD,EAAEC,EAAI,QAAgB,CAC/R,EAAG,SAAUN,EAAGK,EAAGC,GACjB,MAAME,EAAIH,EAAEC,EAAI,GAEhB,OAAQkM,IADRxM,EAAIuE,GAAGvE,EAAGK,EAAEC,EAAI,MACA,GAAK,IAAKE,GAAK,GAAK,MAAQ,GAAKgM,GAAGxM,GAAK,GAAK,IAAKQ,GAAK,GAAK,MAAQ,GAAKgM,GAAGxM,GAAK,EAAI,IAAKQ,GAAK,EAAI,MAAQ,EAAIgM,GAAGxM,GAAK,EAAI,IAAKQ,GAAK,EAAI,QAAU,CACtK,EAAGuG,GAAIA,IACHsN,GAAK,CACPnO,GA/4HM,EAg5HN2M,GAh5HM,EAi5HN7F,GAj5HM,GAm5HJnB,GAAK,GACLuK,GAAK,GACLC,GAAK,GACLE,GAAK,CAAC,EAAG,EAAG,GACZD,GAAK,CAAC,EAAG,EAAG,IACZvB,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLG,GAAK,EACLU,GAAK,CAACjQ,GAAKgP,GAAIhP,GAAIA,GAAIA,GAAI,IAC3BkQ,GAAK,GACLC,GAAK,CAAC,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAE9BX,GAAK,IACLC,GAAK,CAAC,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,EAAG,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,KACrfnP,GAAK,GAAKkL,GAAK,EACfzD,GAAKnO,EAAE,IAAK,GACZiS,GAAKjS,EAAE,IAAK,GACZgS,GAAKhS,EAAE,IAx6HH,GAy6HJsO,GAAKtO,EAAE,IAz6HH,GA06HJ4K,GAAK5K,EAAE2N,GAAKrH,GAz6HR,GA06HJuG,GAAK7M,EAAE2N,GACLrH,GA36HE,GA46HJiS,GAAK,EACL/S,GAAI0Q,MAAM1P,IACVqR,GAAK,CAAC,SAAUvX,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,GACtDkI,GAAGtL,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,EAAGoP,GAAI,EAChD,EAAGuE,GAAI,SAAU/W,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,GACnDkI,GAAGtL,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,EAAG8L,GAAI,EAChD,EAAG8H,GAAIC,GAAIC,GAAI,SAAUlX,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,GAC3DkI,GAAGtL,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,EAAG2P,GAAI,EAChD,EAAGgE,GAAIC,GAAIC,GAAIC,IACf6B,KAAK/O,GAAK,SAAUhK,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAG7H,GAAIjG,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAK9O,GAAK,SAAUjK,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAGU,GAAIxO,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAK7O,GAAK,SAAUlK,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAG3B,GAAInM,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAKrQ,GAAK,SAAU1I,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAG9B,GAAIhM,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAK1P,GAAK,SAAUrJ,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAGjB,GACR7M,EAAGK,EAAGC,EAAGE,EACb,EACAuY,KAAKnP,GAAK,SAAU5J,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAGnM,GAAI3B,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAKyB,WAAazB,KAAKtQ,GAAK,SAAUzI,EAAGK,EAAGC,GAC1C,MAAME,EAAIvC,EAAEgb,IACZ,IAAIxY,EAAI,gBACR,OAAIH,GAAKtC,EAAUwH,IACnB/E,EAAIsK,GAAG/K,EAAG,CAAC,GAAI,CAACK,GAAIC,EAAEmZ,OAClBhZ,GAAKW,GAAUX,GAAKC,GAAI6J,GAAI9J,GAChCD,EAAE6W,EAAI/W,EAAE+W,EACR7W,EAAEyF,GAAK3F,EAAE2F,GACEyS,GAAG1Y,EAAG,EAAG,CAACK,GAAIG,IAC3B,CACF,E,cCx+HA,MAAMia,EAAMC,KACNC,EAA2B,GAGjC,SAASC,IAEPC,GACF,CAEA,SAASA,IAGP,MAAMC,EAAOH,EAAMI,QACnB,GAAID,EAIJ,OAAOA,EAAKE,MACV,IAAK,cAAe,CAClB,MAAM,SAACC,EAAQ,MAAEC,GAASJ,EAAKK,QAE/B,IAAIC,EACJ,IACEA,ECvBD,SAAkBhR,GACvB,MAAMiR,EAAU,IAAItb,EACdub,EAAcD,EAAQ7B,kBACtB+B,EAASD,EAAOjE,GAAKiE,EAAOE,OAC5BC,EAAYH,EAAO7B,MAQzB,IAAIiC,EANJL,EAAQ1B,sBAAsB2B,GAC9BD,EAAQ/B,gBAAgBlP,EAAMA,EAAKxL,OAAQ6c,GAG3CF,EAAOvV,EAAI,EAGX,IACE0V,EAASL,EAAQb,WAAWpQ,EAAMA,EAAKxL,OAAQ0c,E,CAC/C,MAAM7a,GACNib,EAASjb,C,CAGX,GAAc,IAAXib,EAAc,CACf,MAAMC,EAAWJ,EAAOnV,GASxB,MAAO,CAACsV,SAAQR,OARA,QAAO,CACrB9Q,KAAMuR,EACNlX,MAAO8W,EAAO9W,MACdC,OAAQ6W,EAAO7W,OACfkX,SAAU,EACVC,MAAO,I,CAMX,MAAO,CAACH,SAAQR,MAAO9Q,EACzB,CDVyB0R,CAASZ,GAAOA,K,CACjC,MAAMa,GACNC,QAAQC,MAAM,0BAA2BF,EAAK,WAAYjB,EAAKK,Q,CAGjEV,EAAIyB,YAAY,CACdlB,KAAM,cACNG,QAAS,CACPF,WACAC,MAAOE,KAIXR,IAEA,K,CAGF,QACEA,IAEN,CAaAH,EAAI0B,iBAAiB,WAAYC,IAXjC,IAAsBtB,IAYPsB,EAAMhS,KAXnBuQ,EAAM9b,KAAKic,GAOXD,GAIwB,G,GElEtBwB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAUM,KAAKF,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CAGAJ,EAAoBpZ,EAAI0Z,EAGxBN,EAAoBQ,EAAI,KAGvB,IAAIC,EAAsBT,EAAoB3L,OAAE8L,EAAW,CAAC,IAAI,IAAI,MAAM,IAAOH,EAAoB,QAErG,OADsBA,EAAoB3L,EAAEoM,EAClB,ELjCvBlf,EAAW,GACfye,EAAoB3L,EAAI,CAACqM,EAAQC,EAAUC,EAAIC,KAC9C,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAAStf,EAAI,EAAGA,EAAIF,EAASe,OAAQb,IAAK,CAGzC,IAFA,IAAKkf,EAAUC,EAAIC,GAAYtf,EAASE,GACpCuf,GAAY,EACPjG,EAAI,EAAGA,EAAI4F,EAASre,OAAQyY,MACpB,EAAX8F,GAAsBC,GAAgBD,IAAaI,OAAOC,KAAKlB,EAAoB3L,GAAG8M,OAAOC,GAASpB,EAAoB3L,EAAE+M,GAAKT,EAAS5F,MAC9I4F,EAASU,OAAOtG,IAAK,IAErBiG,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbzf,EAAS8f,OAAO5f,IAAK,GACrB,IAAIsF,EAAI6Z,SACET,IAANpZ,IAAiB2Z,EAAS3Z,EAC/B,CACD,CACA,OAAO2Z,CAnBP,CAJCG,EAAWA,GAAY,EACvB,IAAI,IAAIpf,EAAIF,EAASe,OAAQb,EAAI,GAAKF,EAASE,EAAI,GAAG,GAAKof,EAAUpf,IAAKF,EAASE,GAAKF,EAASE,EAAI,GACrGF,EAASE,GAAK,CAACkf,EAAUC,EAAIC,EAqBjB,EMzBdb,EAAoB9b,EAAI,CAACkc,EAASkB,KACjC,IAAI,IAAIF,KAAOE,EACXtB,EAAoB3X,EAAEiZ,EAAYF,KAASpB,EAAoB3X,EAAE+X,EAASgB,IAC5EH,OAAOM,eAAenB,EAASgB,EAAK,CAAEI,YAAY,EAAMC,IAAKH,EAAWF,IAE1E,ECNDpB,EAAoBnZ,EAAI,CAAC,EAGzBmZ,EAAoB7b,EAAKud,GACjBC,QAAQC,IAAIX,OAAOC,KAAKlB,EAAoBnZ,GAAGgb,QAAO,CAACC,EAAUV,KACvEpB,EAAoBnZ,EAAEua,GAAKM,EAASI,GAC7BA,IACL,KCNJ9B,EAAoBhZ,EAAK0a,IAEZ,CAAC,IAAM,eAAe,IAAM,WAAW,IAAM,gBAAgBA,GAAW,IAAM,CAAC,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,aCF/L1B,EAAoB+B,SAAYL,IAEf,ECHjB1B,EAAoBnb,EAAI,WACvB,GAA0B,iBAAfmd,WAAyB,OAAOA,WAC3C,IACC,OAAOvF,MAAQ,IAAIwF,SAAS,cAAb,EAGhB,CAFE,MAAO9d,GACR,GAAsB,iBAAX+d,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBlC,EAAoB3X,EAAI,CAAC8Z,EAAKC,IAAUnB,OAAOoB,UAAUC,eAAe/B,KAAK4B,EAAKC,G,MCAlF,IAAIG,EACAvC,EAAoBnb,EAAE2d,gBAAeD,EAAYvC,EAAoBnb,EAAE4d,SAAW,IACtF,IAAIC,EAAW1C,EAAoBnb,EAAE6d,SACrC,IAAKH,GAAaG,IACbA,EAASC,gBACZJ,EAAYG,EAASC,cAAcC,MAC/BL,GAAW,CACf,IAAIM,EAAUH,EAASI,qBAAqB,UACzCD,EAAQvgB,SAAQigB,EAAYM,EAAQA,EAAQvgB,OAAS,GAAGsgB,IAC5D,CAID,IAAKL,EAAW,MAAM,IAAI/e,MAAM,yDAChC+e,EAAYA,EAAUQ,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpF/C,EAAoBte,EAAI6gB,C,KCfxB,MACE,QAAmC,IAAxBvC,EAAqC,CAC9C,IAAIgD,EAAehD,EAAoBhZ,EACnCic,EAAgBjD,EAAoB7b,EACpC+e,EAAW,CAAC,EACZC,EAAW,CAAC,EAIhBnD,EAAoBhZ,EAAI,SAAU0a,GAEhC,OADasB,EAAatB,IAGvBwB,EAASZ,eAAeZ,GAAW,IAAMwB,EAASxB,GAAW,GAElE,EACA1B,EAAoB7b,EAAI,SAAUud,GAEhC,OADauB,EAAcvB,GACb0B,OAAM,SAAUzD,GAC5B,IAAI0D,EAAUF,EAASb,eAAeZ,GAClCyB,EAASzB,GACT,OACJ,GAAI2B,EAAU,EAAG,CACf,IAAIC,EAAUN,EAAatB,GAQ3B,MAPA/B,EAAM4D,QACJ,iBACA7B,EACA,mCACA4B,EACA,IACF3D,EAAM6D,QAAUF,EACV3D,CACR,CACA,OAAO,IAAIgC,SAAQ,SAAU8B,GAE3BC,YAAW,WACT,IACIC,EACKC,KAAKC,MAGdX,EAASxB,GAAWiC,EACpBR,EAASzB,GAAW2B,EAAU,EAC9BI,EAAQzD,EAAoB7b,EAAEud,GAChC,GArCG,IAsCL,GACF,GACF,CACF,CACD,EAjDD,G,MCIA,IAAIoC,EAAkB,CACrB,GAAI,GAgBL9D,EAAoBnZ,EAAEpF,EAAI,CAACigB,EAASI,KAE/BgC,EAAgBpC,IAElBc,cAAcxC,EAAoBte,EAAIse,EAAoBhZ,EAAE0a,GAE9D,EAGD,IAAIqC,EAAqBtH,KAAuB,iBAAIA,KAAuB,kBAAK,GAC5EuH,EAA6BD,EAAmBxhB,KAAK0hB,KAAKF,GAC9DA,EAAmBxhB,KAvBCuL,IACnB,IAAK6S,EAAUuD,EAAaC,GAAWrW,EACvC,IAAI,IAAImS,KAAYiE,EAChBlE,EAAoB3X,EAAE6b,EAAajE,KACrCD,EAAoBpZ,EAAEqZ,GAAYiE,EAAYjE,IAIhD,IADGkE,GAASA,EAAQnE,GACdW,EAASre,QACdwhB,EAAgBnD,EAASyD,OAAS,EACnCJ,EAA2BlW,EAAK,C,KbnB7BtM,EAAOwe,EAAoBQ,EAC/BR,EAAoBQ,EAAI,IAChBmB,QAAQC,IAAI,CAAC,IAAI,IAAI,KAAKyC,IAAIrE,EAAoB7b,EAAG6b,IAAsBsE,KAAK9iB,GcD9Dwe,EAAoBQ,G","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/vendor/libwebp-0.2.0.js","webpack://tweb/./src/lib/webp/webp.worker.ts","webpack://tweb/./src/lib/webp/webp.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([699,866,158].map(__webpack_require__.e, __webpack_require__)).then(next);\n};","// Copyright 2011 Google Inc.\n//\n// This code is licensed under the same terms as WebM:\n// Software License Agreement: http://www.webmproject.org/license/software/\n// Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n// -----------------------------------------------------------------------------\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// -----------------------------------------------------------------------------\n//\n// Copyright 2011-2013 Dominik Homberger\n// Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.2.0)\n//\n// Author: Dominik Homberger (dominik.homberger@gmail.com)\n\nlet i;\nlet a;\nlet self;\nconst ca = 0;\nconst p = null;\nconst s = 0;\nconst x = 0;\nconst la = s;\nconst E = s;\nconst bb = 0;\nconst Mb = 0;\n\nfunction M(F) {\n return JSON.parse(JSON.stringify(F));\n}\n\nfunction N(F, G, w, D, S) {\n for (i = 0; i < S; ++i) F[G + i] = w[D + i];\n}\n\nfunction Nb(F) {\n const G = [];\n const w = F.length;\n let D;\n for (D = 0; D < w; ++D) G.push(F[D]);\n return G;\n}\n\nfunction ic(F, G) {\n const w = [];\n w.push(M(F));\n let D;\n for (D = 0; D < G; ++D) w.push(M(F));\n w.push(0);\n return w;\n}\n\nfunction rc(F, G) {\n const w = [];\n let D;\n for (D = 0; D < G; ++D) w.push(F);\n w.push(0);\n return w;\n}\n\nfunction memmove(arr1, index1, arr2, index2, length) {\n let i;\n for (i = 0; i < length; i++) {\n arr1[index1 + i] = arr2[index2 + i];\n }\n}\n\nfunction jd(F, G, w, D) {\n let S;\n for (S = 0; S < D; ++S) F[G + S] = w;\n}\n\nfunction kd(F, G, w, D) {\n let S = '';\n let ga;\n for (ga = 0; ga < D; ++ga) S += String.fromCharCode(F[G + ga]);\n return w == S ? 0 : 1;\n}\n\nfunction U(F, G) {\n let w; const\n D = [];\n for (w = 0; w < F; ++w) D.push(G);\n return D;\n}\n\nfunction ld(F, G) {\n let w; const\n D = [];\n for (w = 0; w < F; ++w) D.push(M(G));\n return D;\n}\n\nfunction md(F, G) {\n let w;\n for (w = F.length - 1; w >= 0; --w) G = M(U(F[w], G));\n return G;\n}\n\nfunction $(F) {\n if (!F) throw Error('assert :P');\n}\nexport const WebPDecoder = function () {\n function F(a) {\n return a == Ob || a == Pb || a == Bb || a == Qb;\n }\n\n function G(a) {\n return S(a, 1);\n }\n\n function w(a, b) {\n const c = 1 + ((a.la - 1) * b >> 8);\n const d = c << 8;\n let e = s;\n a.Z >= d ? (e = 1, a.la -= c, a.Z -= d) : (e = 0, a.la = c);\n for (; a.la < 128;) a.Z <<= 1, a.la <<= 1, ++a.gc == 8 && (a.gc = 0, a.bc && (a.Z += a.qa[a.Ia++], a.bc--));\n return e;\n }\n\n function D(a, b, c, d) {\n d -= c;\n d >= 2 ? (a.Z = b[c + 0] << 8 | b[c + 1], a.qa = b, a.Ia = c + 2, a.bc = d - 2) : (a.Z = 0, a.qa = p, a.bc = 0);\n a.la = 255;\n a.gc = 0;\n }\n\n function S(a, b) {\n for (var c = 0, d = s, d = b - 1; d >= 0; d--) c |= w(a, 128) << d;\n return c;\n }\n\n function ga(a, b) {\n const c = S(a, b);\n return G(a) ? -c : c;\n }\n\n function Rb(a, b, c, d) {\n let e = Mb;\n $(a != p);\n $(b != p);\n $(d < 4294967288);\n a.qa = b;\n a.Ia = c;\n a.ya = d;\n a.T = 0;\n a.Q = 0;\n a.g = 0;\n a.L = 0;\n for (e = a.fa = 0; e < 4 && e < a.ya; ++e) a.T |= a.qa[a.Ia + a.Q] << 8 * e, ++a.Q;\n }\n\n function Sb(a) {\n for (; a.g >= 8 && a.Q < a.ya;) a.T >>>= 8, a.T += a.qa[a.Ia + a.Q] << 24 >>> 0, ++a.Q, a.g -= 8;\n }\n\n function Da(a) {\n a.g >= 8 && Sb(a);\n a.Q == a.ya && a.g == 32 && (a.L = 1);\n }\n\n function T(a, b) {\n let c = 0;\n $(b >= 0);\n if (!a.L && b < gf) {\n if (a.Q == a.ya && a.g + b >= 32 && (a.L = 1, a.g + b > 32)) return c;\n c = a.T >> a.g & hf[b];\n a.g += b;\n a.g >= 8 && a.g >= 8 && Sb(a);\n } else a.fa = 1;\n return c;\n }\n\n function ma(a) {\n return a.Pa == a.gb;\n }\n\n function nd(a, b) {\n $(a != p);\n if (b == 0) return 0;\n a.gb = 2 * b - 1;\n a.Y = ld(a.gb, jf);\n if (a.Y == p) return 0;\n a.Y[0].s = -1;\n return a.Pa = 1;\n }\n\n function ja(a) {\n a != p && (a.Y = p, a.Y = p, a.gb = 0, a.Pa = 0);\n }\n\n function jc(a, b, c, d) {\n for (var e = a.Y, g = 0, k = +a.gb; d-- > 0;) {\n if (g >= k) return 0;\n if (e[g].s < 0) {\n if (ma(a)) return 0;\n const h = a;\n const n = h.Y;\n const l = +h.Pa;\n e[g].s = l - g;\n h.Pa += 2;\n n[l + 0].s = -1;\n n[l + 1].s = -1;\n } else if (e[g].s == 0) return 0;\n g += e[g].s + (c >> d & 1);\n }\n if (e[g].s < 0) e[g].s = 0;\n else if (e[g].s != 0) return 0;\n e[g].kc = b;\n return 1;\n }\n\n function od(a, b, c) {\n var d = s;\n let e = 0;\n let g = 0;\n $(a != p);\n $(b != p);\n for (d = 0; d < c; ++d) b[d] > 0 && (++e, g = d);\n if (!nd(a, e)) return 0;\n if (e == 1) return g < 0 || g >= c ? (ja(a), 0) : jc(a, g, 0, 0);\n e = 0;\n g = U(c, s);\n if (g == p) return (e = e && ma(a)) || ja(a), e;\n var k = s;\n var k = s;\n var d = U(Tb + 1, 0);\n let h = s;\n const n = U(Tb + 1, 0);\n let l = 0;\n $(b != p);\n $(c > 0);\n $(g != p);\n for (k = 0; k < c; ++k) b[k] > l && (l = b[k]);\n if (l > Tb) d = 0;\n else {\n for (k = 0; k < c; ++k) ++d[b[k]];\n h = d[0] = 0;\n n[0] = -1;\n for (k = 1; k <= l; ++k) h = h + d[k - 1] << 1, n[k] = h;\n for (k = 0; k < c; ++k) g[k] = b[k] > 0 ? n[b[k]]++ : pd;\n d = 1;\n }\n if (!d) return (e = e && ma(a)) || ja(a), e;\n for (d = 0; d < c; ++d) {\n if (b[d] > 0 && !jc(a, d, g[d], b[d])) {\n return (e = e && ma(a)) || ja(a), e;\n }\n }\n (e = ma(a)) || ja(a);\n return e;\n }\n\n function Ea(a, b, c, d, e, g, k) {\n for (var h = s, h = 0; h < k; ++h) e[g + h] = a[b + h] + c[d + h] & 255;\n }\n\n function qd(a, b, c) {\n const d = a.P.l;\n if (!(c = b < 0 || c < 0 || b + c > a.P.v)) {\n if (c = b == 0) {\n a: {\n let e = a.Ga;\n var g = a.G;\n var k = a.ub;\n c = a.P.l;\n let h = a.P.v;\n const n = a.Xb;\n var l = [p];\n let m = p;\n let f = h * c;\n var q = p;\n var r = p;\n var r = 'WEBP_FILTER_TYPE';\n let u = s;\n var l = s;\n var v = 0;\n let C = s;\n $(c > 0 && h > 0 && d >= c);\n $(e != p && n != p);\n if (k <= Ub) c = 0;\n else if (C = e[g + 0] >> 0 & 3, r = e[g + 0] >> 2 & 3, u = e[g + 0] >> 4 & 3, l = e[g + 0] >> 6 & 3, C < kc || C > kf || r >= lf || u > rd || l != 0) c = 0;\n else {\n if (C == kc) v = k >= f, l = e, m = g + Ub;\n else {\n l = U(f, 0);\n m = 0;\n if (l\n == p) {\n c = 0;\n break a;\n }\n var v = g + Ub;\n var k = k - Ub;\n var g = l;\n var q = M(Vb);\n let A = 0;\n const z = sd();\n z == p ? v = 0 : (z.l = c, z.v = h, z.N = q, td(na), q.put = ud, q.Mb = vd, q.Pb = wd, q.ka = p, q.ka = g, q.fd = 0, q.width = c, q.height = h, z.a = L, Rb(z.o, e, v, k), z.Wa = Cb, Ka(c, h, 1, z, p) && xd(z, c) && (z.Wa = Db, A = lc(z, z.V, z.Ha, z.l, z.v, mf)), z != p && sa(z), v = A);\n }\n if (v) {\n e = nf[r];\n e != p ? (q = U(f, 0), r = 0, q == p && (v = 0, C != kc && (m = l = p)), e(l, m, c, h, 1, c, q, r), f = q, C = r) : (f = l, C = m);\n for (e = 0; h-- > 0;) N(n, e, f, C, c), C += c, e += d;\n u == rd && (v = l == p || m <= 0 || c <= 0 ? 0 : 1);\n }\n c = v;\n }\n }\n c = !c;\n }\n }\n return c ? p : b == 0 ? a.Xb : +b * d;\n }\n\n function of(a) {\n let b = a.width;\n const c = a.height;\n let d = a.J;\n if (b <= 0 || c <= 0 || !(d >= Qa && d < Cc)) return ta;\n if (!a.Fc && a.Jb == p) {\n var e = p;\n var g = 0;\n var k = 0;\n var h = 0;\n var n = 0;\n var e = bb;\n var l = b * yd[d];\n var m = l * c;\n d < ua || (g = parseInt((b + 1) / 2, 10), h = g * parseInt((c + 1) / 2, 10), d == Ra && (k = b, n = k * c));\n e = m + 2 * h + n;\n if (e != e) return ta;\n e = U(e, 205);\n if (e == p) return cb;\n a.Jb = e;\n a.jc = p;\n d < ua ? (b = a.c.RGBA, b.ma = e, b.Sa = p, b.f = l, b.size = m) : (b = a.c.Va, b.y = e, b.D = p, b.F = l, b.Wc = m, b.c = e, b.B = p + m, b.nb = g, b.Rc = h, b.S = e, b.C = p + m + h, b.rb = g, b.Uc = h, d == Ra && (b.p = e, b.q = p + m + 2 * h), b.Wb = n, b.Fa = k);\n }\n d = 1;\n g = a.J;\n k = a.width;\n h = a.height;\n g >= Qa && g < Cc ? g < ua ? (a = a.c.RGBA, d\n &= a.f * h <= a.size, d &= a.f >= k * yd[g], d &= a.ma != p) : (a = a.c.Va, n = a.nb * parseInt((h + 1) / 2, 10), l = a.rb * parseInt((h + 1) / 2, 10), m = a.Fa * h, d &= a.F * h <= a.Wc, d &= n <= a.Rc, d &= l <= a.Uc, d &= m <= a.Wb, d &= a.F >= k, d &= a.nb >= parseInt((k + 1) / 2, 10), d &= a.rb >= parseInt((k + 1) / 2, 10), d &= a.y != p, d &= a.c != p, d &= a.S != p, g == Ra && (d &= a.Fa >= k, d &= m <= a.Wb, d &= a.p != p)) : d = 0;\n return d ? L : ta;\n }\n\n function zd(a, b, c, d) {\n if (d == p || a <= 0 || b <= 0) return ta;\n if (c != p) {\n if (c.Ua) {\n const e = c.wc;\n const g = c.vc;\n const k = c.t & -2;\n const h = c.k & -2;\n if (k < 0 || h < 0 || e <= 0 || g <= 0 || k + e > a || h + g > b) return ta;\n a = e;\n b = g;\n }\n if (c.I) {\n if (c.Ba <= 0\n || c.Aa <= 0) return ta;\n a = c.Ba;\n b = c.Aa;\n }\n }\n d.width = a;\n d.height = b;\n return of(d);\n }\n\n function mb(a) {\n return !(a & -256) ? a : a < 0 ? 0 : 255;\n }\n\n function Ad(a, b, c, d) {\n const e = U(16, 0);\n let g;\n g = 0;\n let k;\n for (k = 0; k < 4; ++k) {\n var h = a[b + 0] + a[b + 8];\n var n = a[b + 0] - a[b + 8];\n var l = (a[b + 4] * Wb >> 16) - (a[b + 12] * Xb >> 16);\n var m = (a[b + 4] * Xb >> 16) + (a[b + 12] * Wb >> 16);\n e[g + 0] = h + m;\n e[g + 1] = n + l;\n e[g + 2] = n - l;\n e[g + 3] = h - m;\n g += 4;\n b++;\n }\n for (k = g = 0; k < 4; ++k) {\n a = e[g + 0] + 4, h = a + e[g + 8], n = a - e[g + 8], l = (e[g + 4] * Wb >> 16) - (e[g + 12] * Xb >> 16), m = (e[g + 4] * Xb >> 16) + (e[g + 12] * Wb >> 16), c[d + 0 + 0 * f] = mb(c[d + 0 + 0 * f] + (h + m >> 3)), c[d + 1 + 0 * f] = mb(c[d\n + 1 + 0 * f] + (n + l >> 3)), c[d + 2 + 0 * f] = mb(c[d + 2 + 0 * f] + (n - l >> 3)), c[d + 3 + 0 * f] = mb(c[d + 3 + 0 * f] + (h - m >> 3)), g++, d += f;\n }\n }\n\n function pf(a, b, c, d, e) {\n Ad(a, b, c, d);\n e && Ad(a, b + 16, c, d + 4);\n }\n\n function qf(a, b, c, d) {\n mc(a, b + 0, c, d + 0, 1);\n mc(a, b + 32, c, d + 4 * f, 1);\n }\n\n function nc(a, b, c, d) {\n a = a[b + 0] + 4;\n let e;\n for (e = 0; e < 4; ++e) for (b = 0; b < 4; ++b) c[d + b + e * f] = mb(c[d + b + e * f] + (a >> 3));\n }\n\n function rf(a, b, c, d) {\n a[b + 0] && nc(a, b + 0, c, d + 0);\n a[b + 16] && nc(a, b + 16, c, d + 4);\n a[b + 32] && nc(a, b + 32, c, d + 4 * f);\n a[b + 48] && nc(a, b + 48, c, d + 4 * f + 4);\n }\n\n function Dc(a, b, c) {\n const d = b - f;\n const e = oa;\n const g = 255 - a[d - 1];\n let k;\n for (k = 0; k\n < c; ++k) {\n const h = e;\n const n = g + a[b - 1];\n var l;\n for (l = 0; l < c; ++l) a[b + l] = h[n + a[d + l]];\n b += f;\n }\n }\n\n function Yb(a, b, c) {\n let d;\n for (d = 0; d < 16; ++d) for (i = 0; i < 16; ++i) b[c + d * f + i] = a;\n }\n\n function y(a, b, c) {\n return a + 2 * b + c + 2 >> 2;\n }\n\n function Zb(a, b, c) {\n let d; let\n e;\n for (d = 0; d < 8; ++d) for (e = 0; e < 8; ++e) b[c + e + d * f] = a;\n }\n\n function nb(a, b, c) {\n const d = a[b - c];\n const e = a[b + 0];\n const g = 3 * (e - d) + sc[1020 + a[b - 2 * c] - a[b + c]];\n const k = oc[112 + (g + 4 >> 3)];\n a[b - c] = oa[255 + d + oc[112 + (g + 3 >> 3)]];\n a[b + 0] = oa[255 + e - k];\n }\n\n function Bd(a, b, c, d) {\n const e = a[b + 0];\n const g = a[b + c];\n return va[255 + a[b - 2 * c] - a[b - c]] > d || va[255 + g - e] > d;\n }\n\n function Cd(a,\n b, c, d, e) {\n const g = a[b - 3 * c];\n const k = a[b - 2 * c];\n const h = a[b - c];\n const n = a[b + 0];\n const l = a[b + c];\n const m = a[b + 2 * c];\n const f = a[b + 3 * c];\n return 2 * va[255 + h - n] + tc[255 + k - l] > d ? 0 : va[255 + a[b - 4 * c] - g] <= e && va[255 + g - k] <= e && va[255 + k - h] <= e && va[255 + f - m] <= e && va[255 + m - l] <= e && va[255 + l - n] <= e;\n }\n\n function Dd(a, b, c, d) {\n let e;\n for (e = 0; e < 16; ++e) 2 * va[255 + a[b + e - c] - a[b + e + 0]] + tc[255 + a[b + e - 2 * c] - a[b + e + c]] <= d && nb(a, b + e, c);\n }\n\n function Ed(a, b, c, d) {\n let e;\n for (e = 0; e < 16; ++e) 2 * va[255 + a[b + e * c - 1] - a[b + e * c + 0]] + tc[255 + a[b + e * c - 2] - a[b + e * c + 1]] <= d && nb(a, b + e * c, 1);\n }\n\n function sf(a, b, c, d) {\n let e;\n for (e = 3; e > 0; --e) {\n b\n += 4 * c, Dd(a, b + 0, c, d);\n }\n }\n\n function tf(a, b, c, d) {\n let e;\n for (e = 3; e > 0; --e) b += 4, Ed(a, b + 0, c, d);\n }\n\n function Fa(a, b, c, d, e, g, k, h) {\n for (; e-- > 0;) {\n if (Cd(a, b + 0, c, g, k)) {\n if (Bd(a, b + 0, c, h)) nb(a, b + 0, c);\n else {\n const n = a;\n const l = b + 0;\n const m = c;\n const f = n[l - 2 * m];\n const q = n[l - m];\n const r = n[l + 0];\n const u = n[l + m];\n const v = n[l + 2 * m];\n var C = sc[1020 + 3 * (r - q) + sc[1020 + f - u]];\n const A = 27 * C + 63 >> 7;\n const z = 18 * C + 63 >> 7;\n var C = 9 * C + 63 >> 7;\n n[l - 3 * m] = oa[255 + n[l - 3 * m] + C];\n n[l - 2 * m] = oa[255 + f + z];\n n[l - m] = oa[255 + q + A];\n n[l + 0] = oa[255 + r - A];\n n[l + m] = oa[255 + u - z];\n n[l + 2 * m] = oa[255 + v - C];\n }\n }\n b += d;\n }\n }\n\n function Ga(a, b, c, d, e, g, k, h) {\n for (; e-- > 0;) {\n if (Cd(a, b + 0, c,\n g, k)) {\n if (Bd(a, b + 0, c, h)) nb(a, b + 0, c);\n else {\n const n = a;\n const l = b + 0;\n const m = c;\n const f = n[l - m];\n const q = n[l + 0];\n const r = n[l + m];\n var u = 3 * (q - f);\n const v = oc[112 + (u + 4 >> 3)];\n var u = oc[112 + (u + 3 >> 3)];\n const C = v + 1 >> 1;\n n[l - 2 * m] = oa[255 + n[l - 2 * m] + C];\n n[l - m] = oa[255 + f + u];\n n[l + 0] = oa[255 + q - v];\n n[l + m] = oa[255 + r - C];\n }\n }\n b += d;\n }\n }\n\n function uf(a, b, c, d, e, g) {\n Fa(a, b + 0, c, 1, 16, d, e, g);\n }\n\n function vf(a, b, c, d, e, g) {\n Fa(a, b + 0, 1, c, 16, d, e, g);\n }\n\n function wf(a, b, c, d, e, g) {\n let k;\n for (k = 3; k > 0; --k) b += 4 * c, Ga(a, b + 0, c, 1, 16, d, e, g);\n }\n\n function xf(a, b, c, d, e, g) {\n let k;\n for (k = 3; k > 0; --k) b += 4, Ga(a, b + 0, 1, c, 16, d, e, g);\n }\n\n function yf(a, b, c, d, e,\n g, k, h) {\n Fa(a, b, e, 1, 8, g, k, h);\n Fa(c, d, e, 1, 8, g, k, h);\n }\n\n function zf(a, b, c, d, e, g, k, h) {\n Fa(a, b, 1, e, 8, g, k, h);\n Fa(c, d, 1, e, 8, g, k, h);\n }\n\n function Af(a, b, c, d, e, g, k, h) {\n Ga(a, b + 4 * e, e, 1, 8, g, k, h);\n Ga(c, d + 4 * e, e, 1, 8, g, k, h);\n }\n\n function Bf(a, b, c, d, e, g, k, h) {\n Ga(a, b + 4, 1, e, 8, g, k, h);\n Ga(c, d + 4, 1, e, 8, g, k, h);\n }\n\n function Fd(a, b) {\n return b == $b ? a.i == 0 ? a.d == 0 ? Cf : Df : a.d == 0 ? Ef : $b : b;\n }\n\n function Ec(a, b, c, d) {\n for (i = 0; i < 4; ++i) a[b + i] = c[d + i];\n }\n\n function wa(a, b) {\n return a < 0 ? 0 : a > b ? b : a;\n }\n\n function Gd(a) {\n a.a = 'VP8_STATUS_OK';\n a.xc = 'OK';\n }\n\n function td(a) {\n a >>> 8 != na >>> 8 && alert('mismatch error');\n }\n\n function Y(a, b, c) {\n a.a == L && (a.a = b, a.xc = c, a.za = 0);\n // alert(b + \": \" + c);\n return 0;\n }\n\n function Hd(a, b) {\n let c = [0];\n let d = x;\n var e = [Mb];\n var g = M(Id);\n var k = M(Jd);\n let h = M(Fc);\n var e = 'VP8StatusCode';\n var g = M(Gc);\n if (a == p) return alert('(dec == null)'), 0;\n Gd(a);\n if (b == p) return Y(a, 'VP8_STATUS_INVALID_PARAM', 'null VP8Io passed to VP8GetHeaders()');\n g.data = b.data;\n g.b = b.b;\n g.e = b.e;\n g.b = [g.b];\n g.e = [g.e];\n g = [g];\n e = Kd(g);\n if (e != L) return Y(a, e, 'Incorrect/incomplete header.');\n g = g[0];\n g.b = g.b[0];\n g.e = g.e[0];\n if (g.ia) return Y(a, W, 'Unexpected lossless format encountered.');\n a.Ga == p && ($(a.ub == 0), a.Ga = g.$, a.G = g.G, a.ub = g.pa);\n d = g.data;\n c = g.b + g.offset;\n e = g.e - g.offset;\n $(g.e >= g.offset);\n if (e[0] < 4) return Y(a, Z, 'Truncated header.');\n h = d[c + 0] | d[c + 1] << 8 | d[c + 2] << 16;\n g = a.Ac;\n g.fb = !(h & 1) + 0;\n g.Jc = h >> 1 & 7;\n g.Nc = h >> 4 & 1;\n g.Ra = h >> 5;\n if (g.Jc > 3) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'Incorrect keyframe parameters.');\n if (!g.Nc) return Y(a, 'VP8_STATUS_UNSUPPORTED_FEATURE', 'Frame not displayable.');\n c += 3;\n e -= 3;\n k = a.P;\n if (g.fb) {\n if (e < 7) return Y(a, 'VP8_STATUS_NOT_ENOUGH_DATA', 'cannot parse picture header');\n if (!(e\n >= 3 && d[c + 0] == 157 && d[c + 1] == 1 && d[c + 2] == 42)) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'Bad code word');\n k.l = (d[c + 4] << 8 | d[c + 3]) & 16383;\n k.gd = d[c + 4] >> 6;\n k.v = (d[c + 6] << 8 | d[c + 5]) & 16383;\n k.hd = d[c + 6] >> 6;\n c += 7;\n e -= 7;\n a.Ma = k.l + 15 >> 4;\n a.hb = k.v + 15 >> 4;\n b.width = k.l;\n b.height = k.v;\n b.I = 0;\n b.Ua = 0;\n b.k = 0;\n b.t = 0;\n b.Ka = b.width;\n b.K = b.height;\n b.m = b.width;\n b.h = b.height;\n h = a.R;\n for (i = 0; i < h.Ta.length; ++i) h.Ta[i] = 255;\n h.z = M(Ff);\n h = a.Ca;\n $(h != p);\n h.pb = 0;\n h.ob = 0;\n h.tb = 1;\n for (i = 0; i < h.Kb.length; ++i) h.Kb[i] = 0;\n for (i = 0; i < h.Cb.length; ++i) h.Cb[i] = 0;\n a.Lb = 0;\n }\n if (g.Ra\n > e) return Y(a, 'VP8_STATUS_NOT_ENOUGH_DATA', 'bad partition length');\n h = a.o;\n D(h, d, c, c + g.Ra);\n c += g.Ra;\n e -= g.Ra;\n g.fb && (k.uc = G(h), k.$c = G(h));\n var k = h;\n var n = a.Ca;\n let l = a.R;\n $(k != p);\n $(n != p);\n n.pb = G(k);\n if (n.pb) {\n n.ob = G(k);\n if (G(k)) {\n var m;\n n.tb = G(k);\n for (m = 0; m < xa; ++m) n.Kb[m] = G(k) ? ga(k, 7) : 0;\n for (m = 0; m < xa; ++m) n.Cb[m] = G(k) ? ga(k, 6) : 0;\n }\n if (n.ob) for (m = 0; m < Ld; ++m) l.Ta[m] = G(k) ? S(k, 8) : 255;\n } else n.ob = 0;\n if (k.Ab) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'cannot parse segment header');\n k = h;\n n = a.ga;\n n.Oc = G(k);\n n.Fb = S(k, 6);\n n.kb = S(k, 3);\n n.oc = G(k);\n if (n.oc\n && G(k)) {\n for (l = 0; l < Hc; ++l) G(k) && (n.Lc[l] = ga(k, 6));\n for (l = 0; l < Gf; ++l) G(k) && (n.Gc[l] = ga(k, 6));\n }\n a.A = n.Fb == 0 ? 0 : n.Oc ? 1 : 2;\n if (a.A > 0) {\n if (a.Ca.pb) for (l = 0; l < xa; ++l) m = a.Ca.Cb[l], a.Ca.tb || (m += n.Fb), a.Zb[l] = m;\n else a.Zb[0] = n.Fb;\n }\n if (k.Ab) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'cannot parse filter header');\n var k = d;\n var f = c;\n var n = f;\n var e = f + e;\n m = 0;\n let q = s;\n let r = s;\n a.Hb = 1 << S(a.o, 2);\n q = a.Hb - 1;\n l = k;\n m = f + 3 * q;\n if (e < m) e = 'VP8_STATUS_NOT_ENOUGH_DATA';\n else {\n for (r = 0; r < q; ++r) {\n var f = l;\n var u = m + (k[n + 0] | k[n + 1] << 8 | k[n + 2] << 16);\n u > e && (f = k);\n D(a.ic[+r], l, m, u);\n l = f;\n m = u;\n n += 3;\n }\n D(a.ic[+q], l, m, e);\n e = m < e ? 'VP8_STATUS_OK' : 'VP8_STATUS_SUSPENDED';\n }\n if (e != 'VP8_STATUS_OK') return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'cannot parse partitions');\n q = a.o;\n e = S(q, 7);\n k = G(q) ? ga(q, 4) : 0;\n n = G(q) ? ga(q, 4) : 0;\n l = G(q) ? ga(q, 4) : 0;\n m = G(q) ? ga(q, 4) : 0;\n q = G(q) ? ga(q, 4) : 0;\n r = a.Ca;\n f = s;\n for (f = 0; f < xa; ++f) {\n u = s;\n if (r.pb) u = r.Kb[f], r.tb || (u += e);\n else if (f > 0) {\n a.yb[f] = a.yb[0];\n continue;\n } else u = e;\n const v = a.yb[f];\n v.sc[0] = Ic[wa(u + k, 127)];\n v.sc[1] = Jc[wa(u + 0, 127)];\n v.sb[0] = 2 * Ic[wa(u + n, 127)];\n v.sb[1] = 101581 * Jc[wa(u + l, 127)] >> 16;\n v.sb[1] < 8\n && (v.sb[1] = 8);\n v.qc[0] = Ic[wa(u + m, 117)];\n v.qc[1] = Jc[wa(u + q, 127)];\n }\n if (g.fb) a.Zc = 259;\n else return Y(a, Hf, 'Not a key frame.');\n G(h);\n e = a.R;\n for (k = 0; k < Md; ++k) for (n = 0; n < Nd; ++n) for (l = 0; l < Kc; ++l) for (m = 0; m < Lc; ++m) w(h, If[k][n][l][m]) && (e.z[k][n][l][m] = S(h, 8));\n a.pc = G(h);\n a.pc && (a.Pc = S(h, 8));\n if (a.P.uc) {\n c -= 8;\n h = Mb;\n if (g.Ra < 8 || d[c + 8 - 1] != 1) return Y(a, W, 'RIFF: Inconsistent extra information.');\n h = d[c + 0] << 0 | d[c + 1] << 8 | d[c + 2] << 16;\n a.fc = h;\n a.dd = p;\n a.cd = d[c + 3];\n }\n return a.za = 1;\n }\n\n function Mc(a, b, c, d, e, g) {\n let k = b[e][c];\n if (!w(a, k[0])) return 0;\n for (;;) {\n ++e;\n if (w(a, k[1])) {\n var h;\n if (w(a, k[2])) {\n if (w(a, k[3])) {\n if (w(a, k[6])) {\n h = x;\n c = w(a, k[8]);\n k = w(a, k[9 + c]);\n k = 2 * c + k;\n c = 0;\n h = Jf[k];\n var n;\n for (n = 0; n < h.length - 1; ++n) c += c + w(a, h[n]);\n c += 3 + (8 << k);\n } else w(a, k[7]) ? (c = 7 + 2 * w(a, 165), c += w(a, 145)) : c = 5 + w(a, 159);\n } else c = w(a, k[4]) ? 3 + w(a, k[5]) : 2;\n k = b[Nc[e]][2];\n } else k = b[Nc[e]][1], c = 1;\n h = Kf[e - 1];\n g[g[g.length - 1] + h] = (w(a, 128) ? -c : c) * d[(h > 0) + 0];\n if (e == 16 || !w(a, k[0])) return e;\n } else k = b[Nc[e]][0];\n if (e == 16) return 16;\n }\n }\n\n function ob(a, b) {\n return ((16777216 * a[0] + 65536 * a[1] + 256 * a[2] + 1 * a[3]) * Lf\n & 4278190080) >> b;\n }\n\n function Mf(a, b) {\n let c = 0;\n if (a == p) return 0;\n if (b == p) return Y(a, 'VP8_STATUS_INVALID_PARAM', 'NULL VP8Io parameter in VP8Decode().');\n if (!a.za && !Hd(a, b)) return 0;\n $(a.za);\n let d;\n if (b.Mb && !b.Mb(b)) Y(a, Nf, 'Frame setup failed'), d = a.a;\n else {\n b.Za && (a.A = 0);\n const e = uc[a.A];\n a.A == 2 ? (a.lb = 0, a.mb = 0) : (a.lb = b.t - e >> 4, a.mb = b.k - e >> 4, a.lb < 0 && (a.lb = 0), a.mb < 0 && (a.mb = 0));\n a.Ya = b.K + 15 + e >> 4;\n a.wb = b.Ka + 15 + e >> 4;\n a.wb > a.Ma && (a.wb = a.Ma);\n a.Ya > a.hb && (a.Ya = a.hb);\n d = L;\n }\n if (c = d == L) {\n if (c) {\n let g;\n b: {\n a.Ja = 0;\n if (a.qb) {\n const k = a.rc;\n if (!WebPWorkerReset(k)) {\n g = Y(a, cb, 'thread initialization failed.');\n break b;\n }\n k.Qd = a;\n k.Rd = a.oa.N;\n k.Ud = FinishRow;\n a.jb = a.A > 0 ? Od : Od - 1;\n } else a.jb = Of;\n g = 1;\n }\n let h;\n if (!(h = !g)) {\n let n;\n b: {\n const l = a.jb;\n const m = a.Ma;\n const t = 4 * m;\n const q = 32 * m;\n const r = m + 1;\n const u = a.A > 0 ? m * (a.qb ? 2 : 1) : 0;\n const v = Pf;\n const C = q * (16 * l + parseInt(3 * uc[a.A] / 2, 10));\n const A = a.Ga != p ? a.P.l * a.P.v : 0;\n const z = t + q + r + u + v + 384 + C + A + Pd;\n if (z != z) n = 0;\n else {\n if (z > a.Gb) {\n a.ib = 0;\n a.Gb = 0;\n if (a.ib == p) {\n n = Y(a, 'VP8_STATUS_OUT_OF_MEMORY', 'no memory during frame initialization.');\n break b;\n }\n a.Gb = z;\n }\n a.dc = 205;\n a.Xc = rc(205, 16 * m);\n a.Sc = rc(205, 8 * m);\n a.Vc = rc(205, 8 * m);\n a.M = u ? ic(Oc, u) : p;\n a.Sd = u ? 0 : p;\n a.oa.ha = 0;\n a.oa.M = a.M;\n $((v & Pd) == 0);\n a.Ea = rc(205, 1 * v);\n a.z = -12851;\n a.H = 16 * m;\n a.r = 8 * m;\n const Ha = uc[a.A];\n const G = Ha * a.H;\n const y = Ha / 2 * a.r;\n a.ca = U(C, 205);\n a.da = +G;\n a.aa = a.ca;\n a.ba = a.da + 16 * l * a.H + y;\n a.ra = a.aa;\n a.sa = a.ba + 8 * l * a.r + y;\n a.Xb = A ? U(A, x) : p;\n a.La = ic(Qd, r);\n a.dc = rc($b, t);\n n = 1;\n }\n }\n h = !n;\n }\n if (h) c = 0;\n else {\n b.width = a.P.l;\n b.height = a.P.v;\n b.w = 0;\n b.y = a.ca;\n b.D = a.da;\n b.c = a.aa;\n b.B = a.ba;\n b.S = a.ra;\n b.C = a.sa;\n b.F = a.H;\n b.Da = a.r;\n b.p = p;\n b.q = p;\n if (!Rd) {\n let B;\n for (B = -255; B <= 255; ++B) va[255 + B] = B < 0 ? -B : B, tc[255 + B] = va[255 + B] >> 1;\n for (B = -1020; B\n <= 1020; ++B) sc[1020 + B] = B < -128 ? -128 : B > 127 ? 127 : B;\n for (B = -112; B <= 112; ++B) oc[112 + B] = B < -16 ? -16 : B > 15 ? 15 : B;\n for (B = -255; B <= 510; ++B) oa[255 + B] = B < 0 ? 0 : B > 255 ? 255 : B;\n Rd = 1;\n }\n mc = pf;\n Pc = qf;\n Qc = nc;\n Rc = rf;\n Sd = uf;\n Td = vf;\n Ud = yf;\n Vd = zf;\n Wd = wf;\n Xd = xf;\n Yd = Af;\n Zd = Bf;\n $d = Dd;\n ae = Ed;\n be = sf;\n ce = tf;\n c = 1;\n }\n }\n if (c) {\n a: {\n for (a.d = 0; a.d < a.Ya; ++a.d) {\n const Qf = a.ic[a.d & a.Hb - 1];\n const db = a;\n const F = db.La[0];\n F.X = 0;\n F.ua = 0;\n jd(db.cc, 0, $b, db.cc.length);\n db.W = (db.A > 0 && db.d >= db.mb && db.d <= db.Ya) + 0;\n for (a.i = 0; a.i < a.Ma; a.i++) {\n var D;\n const H = a;\n const T = Qf;\n const ya = H.o;\n const S = H.La[0];\n const J = H.La[1 + H.i];\n H.Ca.ob && (H.Lb = !w(ya,\n H.R.Ta[0]) ? 0 + w(ya, H.R.Ta[1]) : 2 + w(ya, H.R.Ta[2]));\n J.Nb = H.pc ? w(ya, H.Pc) : 0;\n const O = H.dc;\n O[O.length - 1] = 0 + 4 * H.i;\n const Sc = H.cc;\n H.wa = !w(ya, 145);\n if (H.wa) {\n for (var ga = H.Eb, ja = 0, Z = ca, Z = 0; Z < 4; ++Z) {\n var V = Sc[Z];\n var R;\n for (R = 0; R < 4; ++R) {\n const ta = Rf[O[O[O.length - 1] + R]][V];\n var za = 0;\n do za = Sf[2 * za + w(ya, ta[za])]; while (za > 0);\n V = -za;\n O[O[O.length - 1] + R] = V;\n ga[ja] = V;\n ja++;\n }\n Sc[Z] = V;\n }\n } else {\n var V = w(ya, 156) ? w(ya, 128) ? de : ee : w(ya, 163) ? fe : ge;\n H.Eb[0] = V;\n for (za = 0; za < 4; ++za) O[za + O[O.length - 1]] = V;\n for (za = 0; za < 4; ++za) Sc[za] = V;\n }\n H.Tc = !w(ya, 142) ? ge : !w(ya, 114) ? fe\n : w(ya, 183) ? de : ee;\n if (ya.Ab) D = 0;\n else {\n if (J.Nb) S.X = J.X = 0, H.wa || (S.ua = J.ua = 0), H.ja = 0, H.Oa = 0;\n else {\n let ia = ca;\n let ka = ca;\n var sa = ca;\n var wa = Tf;\n const Aa = H.yb[H.Lb];\n var aa = H.z;\n const ma = H.La[0];\n const ua = U(4, 0);\n const xa = U(4, 0);\n let ea = U(4, 0);\n let pb = U(4, 0);\n let na = 0;\n let Ba = 0;\n var pa = ca;\n let qa = ca;\n let Sa = ca;\n var aa = rc(0, 384);\n if (H.wa) sa = 0, wa = H.R.z[3];\n else {\n const ab = U(16, 0);\n var Ca = J.ua + ma.ua;\n J.ua = ma.ua = (Mc(T, H.R.z[1], Ca, Aa.sb, 0, ab) > 0) + 0;\n for (var sa = 1, wa = H.R.z[0], qb = ab, Ta = aa, La = U(16, s), X = s, X = 0; X < 4; ++X) {\n var Da = qb[0 + X] + qb[12 + X];\n var Ea = qb[4 + X] + qb[8 + X];\n var Fa = qb[4 + X] - qb[8 + X];\n var Ga = qb[0 + X] - qb[12 + X];\n La[0 + X] = Da + Ea;\n La[8\n + X] = Da - Ea;\n La[4 + X] = Ga + Fa;\n La[12 + X] = Ga - Fa;\n }\n for (X = 0; X < 4; ++X) {\n const Oa = Ta[Ta.length - 1];\n const lb = La[0 + 4 * X] + 3;\n var Da = lb + La[3 + 4 * X];\n var Ea = La[1 + 4 * X] + La[2 + 4 * X];\n var Fa = La[1 + 4 * X] - La[2 + 4 * X];\n var Ga = lb - La[3 + 4 * X];\n Ta[Oa + 0] = Da + Ea >> 3;\n Ta[Oa + 16] = Ga + Fa >> 3;\n Ta[Oa + 32] = Da - Ea >> 3;\n Ta[Oa + 48] = Ga - Fa >> 3;\n Ta[Ta.length - 1] += 64;\n }\n aa[aa.length - 1] = 0;\n }\n ea = Nb(vc[J.X & 15]);\n pb = Nb(vc[ma.X & 15]);\n for (qa = 0; qa < 4; ++qa) {\n for (var Eb = pb[qa], pa = 0; pa < 4; ++pa) {\n var Ca = Eb + ea[pa];\n var Ka = Mc(T, wa, Ca, Aa.sc, sa, aa);\n ea[pa] = Eb = (Ka > 0) + 0;\n xa[pa] = (aa[aa[aa.length - 1] + 0] != 0) + 0;\n ua[pa] = (Ka > 1) + 0;\n aa[aa.length\n - 1] += 16;\n }\n pb[qa] = Eb;\n Ba |= ob(xa, 24 - 4 * qa);\n na |= ob(ua, 24 - 4 * qa);\n }\n ia = ob(ea, 24);\n ka = ob(pb, 24);\n ea = Nb(vc[J.X >> 4]);\n pb = Nb(vc[ma.X >> 4]);\n for (Sa = 0; Sa < 4; Sa += 2) {\n for (qa = 0; qa < 2; ++qa) {\n Eb = pb[Sa + qa];\n for (pa = 0; pa < 2; ++pa) Ca = Eb + ea[Sa + pa], Ka = Mc(T, H.R.z[2], Ca, Aa.qc, 0, aa), ea[Sa + pa] = Eb = (Ka > 0) + 0, xa[2 * qa + pa] = (aa[aa[aa.length - 1] + 0] != 0) + 0, ua[2 * qa + pa] = (Ka > 1) + 0, aa[aa.length - 1] += 16;\n pb[Sa + qa] = Eb;\n }\n Ba |= ob(xa, 8 - 2 * Sa);\n na |= ob(ua, 8 - 2 * Sa);\n }\n ia |= ob(ea, 20);\n ka |= ob(pb, 20);\n J.X = ia;\n ma.X = ka;\n H.z = aa;\n H.Oa = na + 0;\n H.ja = na | Ba;\n J.Nb = !H.ja + 0;\n }\n D = !T.Ab;\n }\n if (!D) {\n c = Y(a, 'VP8_STATUS_NOT_ENOUGH_DATA',\n `Premature end-of-file encountered.${a.i} ${a.d}`);\n break a;\n }\n const P = a;\n const da = P.Ea;\n const Ma = Tc;\n const Ua = P.Ea;\n const Va = Uc;\n const Wa = P.Ea;\n const Xa = he;\n if (P.i > 0) {\n for (var ba = ca, ba = -1; ba < 16; ++ba) Ec(da, Ma + ba * f - 4, da, Ma + ba * f + 12);\n for (ba = -1; ba < 8; ++ba) Ec(Ua, Va + ba * f - 4, Ua, Va + ba * f + 4), Ec(Wa, Xa + ba * f - 4, Wa, Xa + ba * f + 4);\n } else {\n for (ba = 0; ba < 16; ++ba) da[Ma + ba * f - 1] = 129;\n for (ba = 0; ba < 8; ++ba) Ua[Va + ba * f - 1] = 129, Wa[Xa + ba * f - 1] = 129;\n P.d > 0 && (da[Ma - 1 - f] = Ua[Va - 1 - f] = Wa[Xa - 1 - f] = 129);\n }\n const Qa = P.Xc;\n const Ra = 16 * +P.i;\n const mb = P.Sc;\n const vb = 8 * +P.i;\n const wb = P.Vc;\n const xb = 8 * +P.i;\n const Za = P.z;\n let fa = ca;\n if (P.d > 0) {\n N(da, Ma - f, Qa, Ra,\n 16), N(Ua, Va - f, mb, vb, 8), N(Wa, Xa - f, wb, xb, 8);\n } else if (P.i == 0) {\n for (i = 0; i < 21; ++i) da[Ma - f - 1 + i] = 127;\n for (i = 0; i < 9; ++i) Ua[Va - f - 1 + i] = 127;\n for (i = 0; i < 9; ++i) Wa[Xa - f - 1 + i] = 127;\n }\n if (P.wa) {\n const Ya = Ma - f + 16;\n P.d > 0 && (P.i >= P.Ma - 1 ? da[Ya + 0] = da[Ya + 1] = da[Ya + 2] = da[Ya + 3] = Qa[Ra + 15] : N(da, Ya + 0, Qa, Ra + 16, 4));\n for (let Fb = 0; Fb < 4; ++Fb) da[Fb + Ya + 4 * f] = da[Fb + Ya + 4 * f] = da[Fb + Ya + 8 * f] = da[Fb + Ya + 12 * f] = da[Fb + Ya + 0];\n for (fa = 0; fa < 16; fa++) {\n var ac = da;\n var bc = Ma + ie[fa];\n Uf[P.Eb[fa]](ac, bc);\n P.Oa & 1 << fa ? mc(Za, 16 * +fa, ac, bc, 0) : P.ja & 1 << fa && Qc(Za, 16 * +fa, ac, bc);\n }\n } else {\n var $a = Fd(P, P.Eb[0]);\n Vf[$a](da, Ma);\n if (P.ja) for (fa = 0; fa < 16; fa++) ac = da, bc = Ma + ie[fa], P.Oa & 1 << fa ? mc(Za, 16 * +fa, ac, bc, 0) : P.ja & 1 << fa && Qc(Za, 16 * +fa, ac, bc);\n }\n $a = Fd(P, P.Tc);\n je[$a](Ua, Va);\n je[$a](Wa, Xa);\n if (P.ja & 983040) {\n const zb = P.z;\n var Pa = 256;\n P.Oa & 983040 ? Pc(zb, Pa, Ua, Va) : Rc(zb, Pa, Ua, Va);\n }\n if (P.ja & 15728640) {\n const Ab = P.z;\n var Pa = 320;\n P.Oa & 15728640 ? Pc(Ab, Pa, Wa, Xa) : Rc(Ab, Pa, Wa, Xa);\n }\n P.d < P.hb - 1 && (N(Qa, Ra, da, Ma + 15 * f, 16), N(mb, vb, Ua, Va + 7 * f, 8), N(wb, xb, Wa, Xa + 7 * f, 8));\n const Q = a;\n if (Q.A > 0) {\n const kb = Q.M[1 + Q.i];\n const Kb = Q.La[1 + Q.i].Nb;\n let ha = Q.Zb[Q.Lb];\n Q.ga.oc && (ha\n += Q.ga.Lc[0], Q.wa && (ha += Q.ga.Gc[0]));\n ha = ha < 0 ? 0 : ha > 63 ? 63 : ha;\n kb.zc = ha;\n Q.ga.kb > 0 && (ha = Q.ga.kb > 4 ? ha >> 2 : ha >> 1, ha > 9 - Q.ga.kb && (ha = 9 - Q.ga.kb));\n kb.yc = ha < 1 ? 1 : ha;\n kb.ab = (!Kb || Q.wa) + 0;\n }\n for (var Ia = ca, Bb = 8 * Q.Ja * Q.r, Qb = Q.ca, Ub = Q.da + 16 * Q.i + 16 * Q.Ja * Q.H, Wb = Q.aa, Xb = Q.ba + 8 * Q.i + Bb, Yb = Q.ra, Zb = Q.sa + 8 * Q.i + Bb, Ia = 0; Ia < 16; ++Ia) N(Qb, Ub + Ia * Q.H, Q.Ea, +Tc + Ia * f, 16);\n for (Ia = 0; Ia < 8; ++Ia) N(Wb, Xb + Ia * Q.r, Q.Ea, +Uc + Ia * f, 8), N(Yb, Zb + Ia * Q.r, Q.Ea, +he + Ia * f, 8);\n }\n const K = a;\n const I = b;\n var cc = 1;\n const eb = K.oa;\n if (K.qb) {\n const nb = K.rc;\n var cc = cc & WebPWorkerSync(nb);\n $(nb.a == OK);\n if (cc) {\n eb.N = I;\n eb.ha = K.Ja;\n eb.d = K.d;\n eb.W = K.W;\n if (eb.W) {\n const hc = eb.M;\n eb.M = K.M;\n K.M = hc;\n }\n WebPWorkerLaunch(nb);\n ++K.Ja == K.jb && (K.Ja = 0);\n }\n } else {\n eb.d = K.d;\n eb.W = K.W;\n b: {\n let Hb = 1;\n const rb = K.oa;\n const ib = uc[K.A];\n const yb = ib * K.H;\n const dc = parseInt(ib / 2) * K.r;\n const Ib = 16 * rb.ha * K.H;\n const jb = 8 * rb.ha * K.r;\n const Jb = K.ca;\n const Lb = K.da - yb + Ib;\n const Ob = K.aa;\n const Pb = K.ba - dc + jb;\n const Rb = K.ra;\n const Sb = K.sa - dc + jb;\n const jc = rb.d == 0;\n const Tb = (rb.d >= K.hb - 1) + 0;\n var ra = 16 * rb.d;\n let fb = 16 * (rb.d + 1);\n if (rb.W) {\n const pc = K;\n let wc = s;\n const kc = pc.oa.d;\n $(pc.oa.W);\n for (wc = pc.lb; wc < pc.wb; ++wc) {\n const Na = pc;\n const ec = wc;\n const Vb = kc;\n const xc = Na.oa;\n const gb = Na.H;\n const fc = xc.M[1 + ec];\n const sb = Na.ca;\n const tb = Na.da + 16 * xc.ha\n * gb + 16 * ec;\n const Gb = fc.zc;\n const hb = fc.yc;\n const Ja = 2 * Gb + hb;\n if (Gb != 0) {\n if (Na.A == 1) ec > 0 && ae(sb, tb, gb, Ja + 4), fc.ab && ce(sb, tb, gb, Ja), Vb > 0 && $d(sb, tb, gb, Ja + 4), fc.ab && be(sb, tb, gb, Ja);\n else {\n const gc = Na.r;\n const yc = Na.aa;\n const zc = Na.ba + 8 * xc.ha * gc + 8 * ec;\n const Ac = Na.ra;\n const Bc = Na.sa + 8 * xc.ha * gc + 8 * ec;\n const ub = Na.Ac.fb ? Gb >= 40 ? 2 : Gb >= 15 ? 1 : 0 : Gb >= 40 ? 3 : Gb >= 20 ? 2 : Gb >= 15 ? 1 : 0;\n ec > 0 && (Td(sb, tb, gb, Ja + 4, hb, ub), Vd(yc, zc, Ac, Bc, gc, Ja + 4, hb, ub));\n fc.ab && (Xd(sb, tb, gb, Ja, hb, ub), Zd(yc, zc, Ac, Bc, gc, Ja, hb, ub));\n Vb > 0 && (Sd(sb, tb, gb, Ja + 4, hb, ub), Ud(yc, zc, Ac, Bc, gc, Ja + 4, hb, ub));\n fc.ab && (Wd(sb, tb, gb,\n Ja, hb, ub), Yd(yc, zc, Ac, Bc, gc, Ja, hb, ub));\n }\n }\n }\n }\n if (I.put) {\n jc ? (I.y = K.ca, I.D = K.da + Ib, I.c = K.aa, I.B = K.ba + jb, I.S = K.ra, I.C = K.sa + jb) : (ra -= ib, I.y = Jb, I.D = Lb, I.c = Ob, I.B = Pb, I.S = Rb, I.C = Sb);\n Tb || (fb -= ib);\n fb > I.K && (fb = I.K);\n if (K.Ga != p && ra < fb && (ra == 0 ? (I.p = qd(K, ra, fb - ra), I.q = 0) : I.q = qd(K, ra, fb - ra), I.p == p)) {\n cc = Y(K, W, 'Could not decode alpha data.');\n break b;\n }\n if (ra < I.k) {\n const qc = I.k - ra;\n var ra = I.k;\n $(!(qc & 1));\n I.D += K.H * qc;\n I.B += K.r * (qc >> 1);\n I.C += K.r * (qc >> 1);\n I.p != p && (I.q += I.width * qc);\n }\n ra < fb && (I.D += I.t, I.B += I.t >> 1, I.C += I.t >> 1, I.p != p && (I.q += I.t),\n I.w = ra - I.k, I.m = I.Ka - I.t, I.h = fb - ra, Hb = I.put(I));\n }\n rb.ha + 1 == K.jb && !Tb && (N(K.ca, K.da - yb, Jb, Lb + 16 * K.H, yb), N(K.aa, K.ba - dc, Ob, Pb + 8 * K.r, dc), N(K.ra, K.sa - dc, Rb, Sb + 8 * K.r, dc));\n cc = Hb;\n }\n }\n if (!cc) {\n c = Y(a, 'VP8_STATUS_USER_ABORT', 'Output aborted.');\n break a;\n }\n }\n let Cb;\n if (!(Cb = a.qb && !WebPWorkerSync(a.rc))) {\n let Db;\n if (Db = a.fc > 0) $(a), $(a.fc > 0), Db = !1;\n Cb = Db;\n }\n c = Cb ? 0 : 1;\n }\n }\n const lc = c;\n b.Pb && b.Pb(b);\n c = lc & 1;\n }\n if (!c) return ke(a), 0;\n a.za = 0;\n return c;\n }\n\n function ke(a) {\n a != p && (a.ib && (a.ib = 0), a.ib = p, a.Gb = 0, a.za = 0);\n }\n\n function Aa(a, b) {\n return a + (1 << b) - 1 >> b;\n }\n\n function hc(a, b, c, d, e) {\n const g = vb[c] + wb[b] >> ea;\n b = xb[b];\n d[e + 0] = ia[a + Za[c] - J];\n d[e + 1] = ia[a + g - J];\n d[e + 2] = ia[a + b - J];\n }\n\n function le(a, b, c, d, e) {\n const g = vb[c] + wb[b] >> ea;\n b = xb[b];\n d[e + 0] = ia[a + Za[c] - J] & 248 | ia[a + g - J] >> 5;\n d[e + 1] = ia[a + g - J] << 3 & 224 | ia[a + b - J] >> 3;\n }\n\n function me(a, b, c, d, e) {\n d[e + 0] = 255;\n hc(a, b, c, d, e + 1);\n }\n\n function ne(a, b, c, d, e) {\n const g = xb[b];\n d[e + 0] = Hb[a + Za[c] - J] << 4 | Hb[a + (vb[c] + wb[b] >> ea) - J];\n d[e + 1] = 15 | Hb[a + g - J] << 4;\n }\n\n function Vc(a, b, c, d, e) {\n const g = Za[c];\n c = vb[c] + wb[b] >> ea;\n d[e + 0] = ia[a + xb[b] - J];\n d[e + 1] = ia[a + c - J];\n d[e + 2] = ia[a + g - J];\n }\n\n function oe(a, b, c, d, e) {\n Vc(a, b, c, d, e);\n d[e + 3] = 255;\n }\n\n function pe(a, b, c, d, e) {\n hc(a, b, c, d, e);\n d[e + 3] = 255;\n }\n\n function ib(a, b, c) {\n a[b] = ((((a[b] & 4278255360) >>> 0) + ((c & 4278255360) >>> 0) & 4278255360) >>> 0 | (a[b] & 16711935) + (c & 16711935) & 16711935) >>> 0;\n }\n\n function ka(a, b) {\n return (((a ^ b) & 4278124286) >>> 1) + ((a & b) >>> 0) >>> 0;\n }\n\n function $a(a) {\n return a < 256 && a > 0 ? a : a <= 0 ? 0 : ~a >> 24 & 255;\n }\n\n function yb(a, b) {\n return $a(a + parseInt((a - b) / 2, 10));\n }\n\n function Wc() {\n return qe;\n }\n\n function Xc(a, b) {\n a &= 255;\n b &= 255;\n a > 127 && (a -= 256);\n b > 127 && (b -= 256);\n return a * b >>> 5;\n }\n\n function re(a,\n b, c, d, e, g, k) {\n var h = s;\n const n = 8 >> a.n;\n const l = a.U;\n const f = a.u;\n if (n < 8) {\n a = (1 << a.n) - 1;\n for (var t = (1 << n) - 1, h = b; h < c; ++h) {\n b = 0;\n for (var q = s, q = 0; q < l; ++q) (q & a) == 0 && (b = d[e++] >> 8 & 255), g[k++] = f[b & t], b >>= n;\n }\n } else for (h = b; h < c; ++h) for (q = 0; q < l; ++q) g[k++] = f[d[e++] >> 8 & 255];\n }\n\n function se(a, b, c, d, e) {\n for (c = b + c; b < c;) {\n const g = a[b++];\n d[e++] = g >> 16 & 255;\n d[e++] = g >> 8 & 255;\n d[e++] = g >> 0 & 255;\n d[e++] = g >> 24 & 255;\n }\n }\n\n function te(a, b, c, d, e) {\n for (c = b + c; b < c;) {\n const g = a[b++];\n d[e++] = g >> 16 & 240 | g >> 12 & 15;\n d[e++] = g >> 0 & 240 | g >> 28 & 15;\n }\n }\n\n function Ib(a, b, c, d, e) {\n for (c = b + c; b < c;) {\n const g = a[b++];\n d[e++] = g >> 24 & 255;\n d[e++] = g >> 16 & 255;\n d[e++] = g >> 8 & 255;\n d[e++] = g >> 0 & 255;\n }\n }\n\n function ue(a, b, c, d) {\n if (T(a, 8) != ve) return 0;\n b[0] = T(a, we) + 1;\n c[0] = T(a, we) + 1;\n d[0] = T(a, 1);\n T(a, Wf);\n return 1;\n }\n\n function xe(a, b) {\n let c = s;\n if (a < 4) return a + 1;\n c = a - 2 >> 1;\n return (2 + (a & 1) << c) + T(b, c) + 1;\n }\n\n function Oa(a, b) {\n if (b.Q + 8 > b.ya) {\n var c = a.Y;\n var d = 0;\n for ($(c != p); c[d].s != 0;) {\n var e = c;\n var g = b;\n const k = g.T >> g.g & 1;\n g.L ? g.fa = 1 : (++g.g, g.g >= 8 && Sb(g), g.Q == g.ya && g.g == 32 && (g.L = 1));\n d = d + e[d].s + k;\n }\n return c[d].kc;\n }\n c = a.Y;\n d = 0;\n for ($(c != p); c[d].s != 0;) {\n e = c, g = b.T >> b.g & 1, ++b.g, d = d\n + e[d].s + g;\n }\n return c[d].kc;\n }\n\n function zb(a, b) {\n if (a != p) for (var c = s, d = s, c = 0; c < b; ++c) for (var e = a[c].va, d = 0; d < Yc; ++d) ja(e[d]);\n }\n\n function ye(a, b, c) {\n b = a.eb == 0 ? 0 : a.ac[a.bd + a.Ec * (c >> a.eb) + (b >> a.eb)];\n $(b < a.hc);\n return a.Db[+b];\n }\n\n function ze(a, b, c, d) {\n let e = a.Na;\n const g = a.O;\n const k = g + b;\n var h = c;\n var f = d;\n d = a.Xa;\n c = a.vb;\n for (N(d, c, h, f, a.l * b); e-- > 0;) {\n b = a.nc[e];\n let l = g;\n var m = k;\n var t = h;\n var q = f;\n var f = d;\n var h = c;\n $(l < m);\n $(m <= b.Vb);\n switch (b.Qc) {\n case Ae:\n t = 0;\n for (b = h + (m - l) * b.U; h < b;) {\n var m = f;\n var q = h;\n var r = m[q] >> 8 & 255;\n var u = (m[q] & 16711935) >>> 0;\n var u = u + (r << 16 | r);\n var u = u & 16711935;\n f[h++] = ((m[q] & 4278255360)\n >>> 0 | u) >>> 0;\n l == 32 && t++;\n }\n break;\n case Be:\n var v = b;\n var C = l;\n var t = m;\n var q = f;\n var r = h;\n var u = v.U;\n if (C == 0) {\n var A = s;\n ib(q, r, qe);\n for (A = 1; A < u; ++A) ib(q, r + A, q[r + A - 1]);\n r += u;\n ++C;\n }\n for (var z = (1 << v.n) - 1, Ha = Aa(u, v.n), w = v.u, v = +(C >> v.n) * Ha; C < t;) {\n var y = w;\n var B = v;\n let G = p;\n ib(q, r, q[r - u + 0]);\n G = Ce[y[B++] >> 8 & 15];\n for (A = 1; A < u; ++A) {\n let F = E;\n (A & z) == 0 && (G = Ce[y[B++] >> 8 & 15]);\n F = G(q[r + A - 1], q, r + A - u);\n ib(q, r + A, F);\n }\n r += u;\n ++C;\n (C & z) == 0 && (v += Ha);\n }\n m != b.Vb && (b = b.U, N(f, h - b, f, h + (m - l - 1) * b, b));\n break;\n case De:\n t = b.U;\n q = (1 << b.n) - 1;\n r = Aa(t, b.n);\n u = b.u;\n for (b = +(l >> b.n) * r; l < m;) {\n A = u;\n C = b;\n z = M(Xf);\n Ha = s;\n for (Ha = 0; Ha < t; ++Ha) (Ha & q) == 0 && (w = A[C++], v = z, v.Cc = w >> 0 & 255, v.Bc = w >> 8 & 255, v.Kc = w >> 16 & 255), w = f[h + Ha], v = w >>> 8, y = w >>> 16, B = w, y += Xc(z.Cc, v), y &= 255, B += Xc(z.Bc, v), B += Xc(z.Kc, y), B &= 255, f[h + Ha] = (w & 4278255360 | y << 16 | B) >>> 0;\n h += t;\n ++l;\n (l & q) == 0 && (b += r);\n }\n break;\n case Ee:\n t == f && b.n > 0 ? (t = (m - l) * Aa(b.U, b.n), q = h + (m - l) * b.U - t, memmove(f, q, f, h, t), re(b, l, m, f, q, f, h)) : re(b, l, m, t, q, f, h);\n }\n h = d;\n f = c;\n }\n }\n\n function Yf(a, b) {\n var c = a.V;\n var d = a.Ha + a.l * a.O;\n var e = b - a.O;\n if (!(e <= 0)) {\n ze(a, e, c, d);\n var g = a.N;\n var c = a.Xa;\n let k = [a.vb];\n var d = a.O;\n var e = b;\n var h = k;\n var f = g.width;\n $(d < e);\n $(g.t < g.Ka);\n e > g.K && (e = g.K);\n if (d < g.k) {\n var l = g.k - d;\n var d = g.k;\n h[0] += f * l;\n }\n d >= e ? d = 0 : (h[0] += g.t, g.w = d - g.k, g.m = g.Ka - g.t, g.h = e - d, d = 1);\n if (d) {\n k = k[0];\n d = a.Ib;\n e = g.width;\n if (d.J < ua) {\n var m = d.c.RGBA;\n var h = m.ma;\n let t = m.Sa + a.xa * m.f;\n if (g.I) c = EmitRescaledRows(a, c, k, e, g.h, h, t, m.f);\n else {\n for (var f = d.J, l = g.m, g = g.h, m = m.f, q = g; q-- > 0;) {\n const r = c;\n let u = k;\n let v = l;\n const C = h;\n let A = t;\n switch (f) {\n case Qa:\n for (v = u + v; u < v;) {\n var z = r[u++];\n C[A++] = z >> 16 & 255;\n C[A++] = z >> 8 & 255;\n C[A++] = z >> 0 & 255;\n }\n break;\n case jb:\n se(r, u, v, C, A);\n break;\n case Ob:\n se(r, u, v, C, A);\n WebPApplyAlphaMultiply(C, 0, v,\n 1, 0);\n break;\n case Zc:\n for (v = u + v; u < v;) z = r[u++], C[A++] = z >> 0 & 255, C[A++] = z >> 8 & 255, C[A++] = z >> 16 & 255;\n break;\n case Pa:\n Ib(r, u, v, C, A);\n break;\n case Pb:\n Ib(r, u, v, C, A);\n WebPApplyAlphaMultiply(C, 0, v, 1, 0);\n break;\n case Ab:\n Ib(r, u, v, C, A);\n break;\n case Bb:\n Ib(r, u, v, C, A);\n WebPApplyAlphaMultiply(C, 1, v, 1, 0);\n break;\n case kb:\n te(r, u, v, C, A);\n break;\n case Qb:\n te(r, u, v, C, A);\n WebPApplyAlphaMultiply4444(C, v, 1, 0);\n break;\n case Fe:\n for (v = u + v; u < v;) z = r[u++], C[A++] = z >> 16 & 248 | z >> 13 & 7, C[A++] = z >> 5 & 224 | z >> 3 & 31;\n break;\n default:\n $(0);\n }\n k += e;\n t += m;\n }\n c = g;\n }\n a.xa += c;\n } else {\n a.xa = g.I ? EmitRescaledRowsYUVA(a, c, k, e, g.h) : EmitRowsYUVA(a, c, k, e, g.m, g.h);\n }\n $(a.xa <= d.height);\n }\n a.O = b;\n $(a.O <= a.v);\n }\n }\n\n function lc(a, b, c, d, e, g) {\n let k = 1;\n let h = 0;\n let f = 0;\n const l = a.o;\n const m = a.cb;\n let t = m.Db;\n let q = c;\n let r = c;\n c += d * e;\n e = Ba + Ge;\n const u = e + m.xb;\n const v = m.xb > 0 ? m.Yb : p;\n const C = m.Dc;\n let A = !1;\n $(t != p);\n for (; !l.L && q < c;) {\n let z = s;\n A || ((h & C) == 0 && (t = ye(m, h, f)), Da(l), z = Oa(t.va[Zf], l));\n if (z < Ba || A) {\n if (!A) {\n var w = k = A = s;\n var y = s;\n Da(l);\n A = Oa(t.va[$f], l);\n k = z;\n Da(l);\n w = Oa(t.va[ag], l);\n Da(l);\n y = Oa(t.va[bg], l);\n b[q] = (y << 24 >>> 0) + (A << 16) + (k << 8) + w;\n }\n A = !1;\n ++q;\n ++h;\n if (h >= d && (h = 0, ++f, g != p && f\n % $c == 0 && g(a, f), v != p)) for (; r < q;) k = b[r++], v.ea[ad * k >>> v.bb] = k;\n } else if (z < e) {\n w = w = s;\n k = xe(z - Ba, l);\n z = Oa(t.va[cg], l);\n Da(l);\n w = xe(z, l);\n w > He ? w -= He : (z = dg[w - 1], z = (z >> 4) * d + (8 - (z & 15)), w = z >= 1 ? z : 1);\n z = s;\n for (z = 0; z < k; ++z) b[q + z] = b[q + z - w];\n q += k;\n for (h += k; h >= d;) h -= d, ++f, g != p && f % $c == 0 && g(a, f);\n if (q < c && (t = ye(m, h, f), v != p)) for (; r < q;) k = b[r++], v.ea[ad * k >>> v.bb] = k;\n } else if (z < u) {\n A = z - e;\n for ($(v != p); r < q;) z = b[r++], v.ea[ad * z >>> v.bb] = z;\n z = b;\n w = q;\n y = v;\n $(A <= -1 >>> y.bb);\n z[w] = y.ea[A];\n A = !0;\n continue;\n }(k = !l.fa) || End;\n }\n g != p && g(a, f);\n l.fa || !k || l.L && q < c ? (k = 0, a.a = !l.L ? W : Ie) : q == c && (a.Ob = Db);\n return k;\n }\n\n function bd(a) {\n $(a);\n a.ac = p;\n zb(a.Db, a.hc);\n const b = a.Yb;\n b != p && (b.ea = p, b.ea = p);\n $(a);\n }\n\n function sd() {\n const a = M(eg);\n if (a == p) return p;\n a.a = L;\n a.Wa = cd;\n a.Ob = cd;\n return a;\n }\n\n function sa(a) {\n let b = s;\n if (a != p) {\n bd(a.cb);\n a.V = p;\n a.V = p;\n for (b = 0; b < a.Na; ++b) {\n const c = a.nc[b];\n c.u = p;\n c.u = p;\n }\n a.Na = 0;\n a.Ub = 0;\n a.Mc = p;\n a.Mc = p;\n a.Ib = p;\n }\n }\n\n function Ka(a, b, c, d, e) {\n var g = 1;\n a = [a];\n b = [b];\n for (var k = d.o, h = d.cb, f = p, l = p, l = 0; ;) {\n if (c) {\n for (; g && T(k, 1);) {\n var m = a;\n var t = b;\n var q = d;\n var r = 1;\n var u = q.o;\n var g = q.nc[q.Na];\n var v = T(u, 2);\n if (q.Ub & 1 << v) g = 0;\n else {\n q.Ub\n |= 1 << v;\n g.Qc = v;\n g.U = m[0];\n g.Vb = t[0];\n g.u = [p];\n g.b = 0;\n ++q.Na;\n $(q.Na <= Je);\n switch (v) {\n case Be:\n case De:\n g.n = T(u, 3) + 2;\n r = Ka(Aa(g.U, g.n), Aa(g.Vb, g.n), 0, q, g.u);\n break;\n case Ee:\n t = T(u, 8) + 1;\n r = t > 16 ? 0 : t > 4 ? 1 : t > 2 ? 2 : 3;\n m[0] = Aa(g.U, r);\n g.n = r;\n if (m = r = Ka(t, 1, 0, q, g.u)) {\n if (m = t, q = g, r = s, t = 1 << (8 >>> q.n) >>> 0, u = Array(t), u == p) m = 0;\n else {\n var v = q.u[0];\n var C = q.b;\n u[0] = q.u[0][q.b + 0];\n for (r = 1; r < m; ++r) u[r] = ((((v[C + r] & 4278255360) >>> 0) + ((u[r - 1] & 4278255360) >>> 0) & 4278255360) >>> 0 | (v[C + r] & 16711935) + (u[r - 1] & 16711935) & 16711935) >>> 0;\n for (; r < t; ++r) u[r] = 0;\n q.u[0] = p;\n q.b = p;\n q.u[0] = u;\n q.b = 0;\n m = 1;\n }\n }\n r = m;\n break;\n case Ae:\n break;\n default:\n $(0);\n }\n g.u = g.u[0];\n g = r;\n }\n }\n }\n if (g && T(k, 1) && (l = T(k, 4), g = l >= 1 && l <= fg, !g)) {\n d.a = W;\n break;\n }\n if (g) {\n a: {\n var g = d;\n var A = a[0];\n var z = b[0];\n var m = l;\n var C = v = s;\n var C = g.o;\n var q = g.cb;\n var r = [p];\n var t = p;\n var u = 1;\n if (c && T(C, 1)) {\n var v = T(C, 3) + 2;\n var A = Aa(A, v);\n var w = Aa(z, v);\n var z = A * w;\n if (!Ka(A, w, 0, g, r)) {\n g.a = W;\n zb(t, u);\n g = 0;\n break a;\n }\n r = r[0];\n q.eb = v;\n for (v = 0; v < z; ++v) A = r[v] >>> 8 & 65535, r[v] = A, A >= u && (u = A + 1);\n }\n if (C.fa) zb(t, u), g = 0;\n else if ($(u <= 65536), t = ld(u, gg), t == p) g.a = cb, zb(t, u), g = 0;\n else {\n for (v = 0; v < u; ++v) {\n z = t[v].va;\n for (C = 0; C < Yc; ++C) {\n A = hg[C];\n C == 0 && m > 0 && (A += 1 << m);\n b: {\n const y = A;\n var A = g;\n const G = z[+C];\n var B = 0;\n var w = A.o;\n if (T(w, 1)) {\n var F = Array(2);\n var D = Array(2);\n var L = Array(2);\n var B = T(w, 1) + 1;\n var J = T(w, 1);\n F[0] = T(w, J == 0 ? 1 : 8);\n D[0] = 0;\n L[0] = B - 1;\n B == 2 && (F[1] = T(w, 8), D[1] = 1, L[1] = B - 1);\n c: {\n var J = 0;\n var H = s;\n $(G != p);\n $(L != p);\n $(D != p);\n $(F != p);\n if (nd(G, B)) {\n for (H = 0; H < B; ++H) {\n if (D[H] != pd) {\n if (F[H] < 0 || F[H] >= y) {\n (J = J && ma(G)) || ja(G);\n B = J;\n break c;\n }\n if (!jc(G, F[H], D[H], L[H])) {\n (J = J && ma(G)) || ja(G);\n B = J;\n break c;\n }\n }\n }(J = (J = 1) && ma(G)) || ja(G);\n B = J;\n } else B = 0;\n }\n } else {\n B = s;\n D = [];\n F = T(w, 4) + 4;\n if (F > Ke) {\n A.a = W;\n A = 0;\n break b;\n }\n L = Array(y);\n if (L == p) {\n A.a = cb;\n A = 0;\n break b;\n }\n for (B = 0; B < F; ++B) D[ig[B]] = T(w, 3);\n c: {\n var B = A;\n var O = D;\n var D = y;\n var F = L;\n var J = 0;\n var H = B.o;\n let S = s;\n let V = s;\n let Y = jg;\n const Z = M(Le);\n if (od(Z, O, Ke)) {\n if (T(H, 1)) {\n if (S = 2 + 2 * T(H, 3), V = 2 + T(H, S), V > D) {\n B.a = W;\n ja(Z);\n B = J;\n break c;\n }\n } else V = D;\n for (S = 0; S < D;) {\n var R = s;\n if (V-- == 0) break;\n Da(H);\n R = Oa(Z, H);\n if (R < Me) F[S++] = R, R != 0 && (Y = R);\n else {\n var O = R == kg;\n var R = R - Me;\n const ea = lg[R];\n var R = T(H, mg[R]) + ea;\n if (S + R > D) {\n B.a = W;\n ja(Z);\n B = J;\n break c;\n }\n for (O = O ? Y : 0; R-- > 0;) F[S++] = O;\n }\n }\n J = 1;\n ja(Z);\n B = J;\n } else B.a = W, B = 0;\n }\n B && (B = od(G, L, y));\n }(B = B && !w.fa) ? A = 1 : (A.a = W, A = 0);\n }\n if (!A) {\n zb(t, u);\n g = 0;\n break a;\n }\n }\n }\n q.ac = r;\n q.hc = u;\n q.Db = t;\n g = 1;\n }\n }\n }\n if (!g) {\n d.a = W;\n break;\n }\n if (l > 0) {\n if (h.xb = 1 << l, m = h.Yb, q = 1 << l, $(m != p), $(l > 0), m.ea = U(q, 0), m.ea == p ? l = 0 : (m.bb = 32 - l, l = 1), !l) {\n d.a = cb;\n g = 0;\n break;\n }\n } else h.xb = 0;\n l = d;\n m = a[0];\n q = b[0];\n r = l.cb;\n t = r.eb;\n l.l = m;\n l.v = q;\n r.Ec = Aa(m, t);\n r.Dc = t == 0 ? -1 : (1 << t) - 1;\n if (c) {\n d.Ob = Cb;\n break;\n }\n f = Array(a * b);\n l = 0;\n if (f == p) {\n d.a = cb;\n g = 0;\n break;\n }\n g = (g = lc(d, f, l, a, b, p)) && !k.fa;\n break;\n }\n g ? (e != p ? e[0] = f : ($(f == p), $(c)), c || bd(h)) : (bd(h), d.a == W && d.o.L && (d.a = Ie));\n return g;\n }\n\n function xd(a, b) {\n const c = a.l * a.v;\n const d = c + b + b * $c;\n $(a.l <= b);\n a.V = Array(d);\n a.Ha = 0;\n if (a.V == p) {\n return a.Xa = p, a.a = cb, 0;\n }\n a.Xa = a.V;\n a.vb = a.Ha + c + b;\n return 1;\n }\n\n function mf(a, b) {\n var c = b - a.O;\n var d = a.V;\n var e = a.Ha + a.l * a.O;\n if (!(c <= 0)) {\n ze(a, c, d, e);\n for (var e = a.N.width, c = e * c, d = a.N.ka, e = a.N.fd + e * a.O, g = a.Xa, k = a.vb, h = s, h = 0; h < c; ++h) d[e + h] = g[k + h] >>> 8 & 255;\n a.O = a.xa = b;\n }\n }\n\n function ng(a, b) {\n const c = [s];\n const d = [s];\n const e = [s];\n if (a == p) return 0;\n if (b == p) return a.a = ta, 0;\n a.N = b;\n a.a = L;\n Rb(a.o, b.data, b.b, b.e);\n if (!ue(a.o, c, d, e)) return a.a = W, sa(a), $(a.a != L), 0;\n a.Ob = cd;\n b.width = c[0];\n b.height = d[0];\n a.Wa = Cb;\n return !Ka(c[0], d[0], 1, a, p) ? (sa(a), $(a.a != L), 0) : 1;\n }\n\n function og(a) {\n let b = p;\n let c = p;\n if (a == p) return 0;\n b = a.N;\n $(b != p);\n c = b.ka;\n $(c != p);\n a.Ib = c.j;\n a.Hc = c.Hc;\n $(a.Ib != p);\n if (!Ne(c.Qa, b, Pa)) return a.a = ta, sa(a), $(a.a != L), 0;\n if (!xd(a, b.width) || b.I && !AllocateAndInitRescaler(a, b)) return sa(a), $(a.a != L), 0;\n a.Wa = Db;\n if (!lc(a, a.V, a.Ha, a.l, a.v, Yf)) return sa(a), $(a.a != L), 0;\n c.ec = a.xa;\n sa(a);\n return 1;\n }\n\n function wa(a, b) {\n return a < 0 ? 0 : a > b ? b : a;\n }\n\n function ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, C, w, z) {\n let y; const G = C - 1 >> 1;\n let F = e[g + 0] | k[h + 0] << 16;\n let B = f[l + 0] | m[t + 0] << 16;\n if (a) {\n var D = 3 * F + B + 131074 >> 2;\n w(a[b + 0], D & 255, D >> 16, q, r);\n }\n c && (D = 3 * B + F + 131074 >> 2, w(c[d + 0], D & 255, D >> 16, u, v));\n for (y = 1; y <= G; ++y) {\n const J = e[g + y] | k[h + y] << 16;\n const L = f[l + y] | m[t + y] << 16;\n var D = F + J + B + L + 524296;\n const O = D + 2 * (J + B) >> 3;\n const H = D + 2 * (F + L) >> 3;\n a && (D = O + F >> 1, F = H + J >> 1, w(a[b + 2 * y - 1], D & 255, D >> 16, q, r + (2 * y - 1) * z), w(a[b + 2 * y - 0], F & 255, F >> 16, q, r + (2 * y - 0) * z));\n c && (D = H + B >> 1, F = O + L >> 1, w(c[d + 2 * y - 1], D & 255, D >> 16, u, v + (2 * y - 1) * z), w(c[d + 2 * y + 0], F & 255, F >> 16, u, v + (2 * y + 0) * z));\n F = J;\n B = L;\n }\n C & 1 || (a && (D = 3 * F + B + 131074 >> 2, w(a[b + C - 1], D & 255, D >> 16, q, r + (C - 1) * z)), c && (D = 3 * B + F + 131074 >> 2, w(c[d + C - 1], D & 255, D >> 16, u, v + (C - 1) * z)));\n }\n\n function pg(a,\n b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, hc, 3);\n }\n\n function qg(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, Vc, 3);\n }\n\n function Oe(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, pe, 4);\n }\n\n function Pe(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, oe, 4);\n }\n\n function Qe(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, me, 4);\n }\n\n function Re(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h,\n f, l, m, t, q, r, u, v, w, ne, 2);\n }\n\n function rg(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, le, 2);\n }\n\n function Ca(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u) {\n let v;\n for (v = 0; v < q - 1; v += 2) r(a[b + 0], e[g + 0], k[h + 0], f, l), r(a[b + 1], e[g + 0], k[h + 0], f, l + u), r(c[d + 0], e[g + 0], k[h + 0], m, t), r(c[d + 1], e[g + 0], k[h + 0], m, t + u), b += 2, d += 2, g++, h++, l += 2 * u, t += 2 * u;\n v == q - 1 && (r(a[b + 0], e[g + 0], k[h + 0], f, l), r(c[d + 0], e[g + 0], k[h + 0], m, t));\n }\n\n function Se(a, b, c, d, e, g, k, f, n, l, m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, pe, 4);\n }\n\n function Te(a, b, c, d, e, g, k, f, n, l,\n m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, oe, 4);\n }\n\n function Ue(a, b, c, d, e, g, k, f, n, l, m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, me, 4);\n }\n\n function Ve(a, b, c, d, e, g, k, f, n, l, m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, ne, 2);\n }\n\n function sg(a, b, c, d, e, g) {\n for (; e-- > 0;) {\n for (var k = a, f = b + (c ? 1 : 0), n = a, l = b + (c ? 0 : 3), m = s, m = 0; m < d; ++m) {\n var t = n[l + 4 * m];\n if (t != 255) {\n var t = 32897 * t;\n let q = k;\n let r = f + 4 * m + 0;\n k[f + 4 * m + 0] * t >>> 23;\n q[r] = ca;\n q = k;\n r = f + 4 * m + 1;\n k[f + 4 * m + 1] * t >>> 23;\n q[r] = ca;\n q = k;\n r = f + 4 * m + 2;\n k[f + 4 * m + 2] * t >>> 23;\n q[r] = ca;\n }\n }\n b += g;\n }\n }\n\n function tg(a, b) {\n const c = b.j.c.Va;\n const d = c.y;\n const e = c.D + a.w * c.F;\n const g = c.c;\n const k = c.B + (a.w >> 1) * c.nb;\n const f = c.S;\n const n = c.C + (a.w >> 1) * c.rb;\n const l = a.m;\n const m = a.h;\n const t = parseInt((l + 1) / 2, 10);\n const q = parseInt((m + 1) / 2, 10);\n let r;\n for (r = 0; r < m; ++r) N(d, e + r * c.F, a.y, a.D + r * a.F, l);\n for (r = 0; r < q; ++r) N(g, k + r * c.nb, a.c, a.B + r * a.Da, t), N(f, n + r * c.rb, a.S, a.C + r * a.Da, t);\n return a.h;\n }\n\n function ug(a, b) {\n var c = b.j;\n const d = c.c.RGBA;\n const e = d.ma;\n let g = d.Sa + a.w * d.f;\n const k = a.y;\n let f = a.D;\n const n = a.c;\n let l = a.B;\n const m = a.S;\n let t = a.C;\n var c = vg[c.J];\n const q = a.m;\n const r = a.h - 1;\n let u;\n for (u = 0; u < r; u += 2) c(k, f, k, f + a.F, n, l, m, t, e, g, e, g + d.f, q), f += 2 * a.F, l += a.Da, t += a.Da, g += 2 * d.f;\n u == r && c(k, f, k, f, n, l, m, t, e, g, e, g, q);\n return a.h;\n }\n\n function wg(a, b) {\n let c = a.h;\n const d = b.j.c.RGBA;\n const e = d.ma;\n let g = d.Sa + a.w * d.f;\n const k = V[b.j.J];\n const f = a.y;\n let n = a.D;\n const l = a.c;\n let m = a.B;\n const t = a.S;\n let q = a.C;\n let r = b.Qb;\n let u = b.Rb;\n let v = b.lc;\n let w = b.mc;\n let A = a.w;\n const z = a.w + a.h;\n const y = a.m;\n const D = parseInt((y + 1) / 2, 10);\n A == 0 ? k(p, p, f, n, l, m, t, q, l, m, t, q, p, p, e, g, y) : (k(b.Sb, b.Tb, f, n, r, u, v, w, l, m, t, q, e, g - d.f, e, g, y), ++c);\n for (; A + 2 < z; A += 2) r = l, u = m, v = t, w = q, m += a.Da, q += a.Da, g += 2 * d.f, n += 2 * a.F, k(f, n - a.F, f, n, r, u, v, w, l, m, t, q, e, g - d.f, e, g, y);\n n += a.F;\n a.k + z < a.K ? (N(b.Sb, b.Tb, f, n, 1 * y), N(b.Qb, b.Rb, l, m, 1 * D), N(b.lc, b.mc, t, q, 1 * D), c--) : z & 1 || k(f, n, p, p, l, m, t, q, l, m,\n t, q, e, g + d.f, p, p, y);\n return c;\n }\n\n function xg(a, b) {\n var c = a.p;\n var d = a.q;\n const e = b.j.c.Va;\n const g = a.m;\n const f = a.h;\n const h = e.p;\n let n = e.q + a.w * e.Fa;\n var c = a.p;\n var d = a.q;\n let l = s;\n if (c != p) for (l = 0; l < f; ++l) N(h, n, c, d, 1 * g), d += a.width, n += e.Fa;\n else if (e.p != p) for (l = 0; l < f; ++l) jd(h, n, 255, g), n += e.Fa;\n return 0;\n }\n\n function We(a, b, c) {\n let d = a.w;\n c[0] = a.h;\n a.Bb && (d == 0 ? --c[0] : (--d, b[0] -= a.width), a.k + a.w + a.h == a.K && (c[0] = a.K - a.k - d));\n return d;\n }\n\n function yg(a, b) {\n const c = a.p;\n var d = [a.q];\n if (c != p) {\n for (var e = a.m, g = b.j.J, f = g == Ab || g == Bb, h = b.j.c.RGBA, n = [s], l = We(a, d, n), d = d[0], m = h.ma, l = h.Sa + l * h.f,\n t = l + (f ? 0 : 3), q = 255, r = s, u = s, u = 0; u < n[0]; ++u) {\n for (r = 0; r < e; ++r) {\n const v = c[d + r];\n m[t + 4 * r] = v;\n q &= v;\n }\n d += a.width;\n t += h.f;\n }\n q != 255 && F(g) && WebPApplyAlphaMultiply(m, l, f, e, n, h.f);\n }\n return 0;\n }\n\n function zg(a, b) {\n const c = a.p;\n var d = [a.q];\n if (c != p) {\n const e = a.m;\n const g = b.j.J;\n const f = b.j.c.RGBA;\n const h = [s];\n var n = We(a, d, h);\n var d = d[0];\n const l = f.ma;\n var n = f.Sa + n * f.f;\n let m = n + 1;\n let t = 15;\n let q = s;\n for (j = 0; j < h[0]; ++j) {\n for (q = 0; q < e; ++q) {\n const r = c[d + q] >> 4;\n l[m + 2 * q] = l[m + 2 * q] & 240 | r;\n t &= r;\n }\n d += a.width;\n m += f.f;\n }\n t != 15 && F(g) && WebPApplyAlphaMultiply4444(l, n, e, h, f.f);\n }\n return 0;\n }\n\n function vd(a) {\n let b = a.ka;\n const c = b.j.J;\n const d = c\n < ua;\n const e = c == jb || c == Pa || c == Ab || c == kb || c == Ra || F(c);\n b.memory = p;\n b.$a = p;\n b.zb = p;\n b.ad = p;\n if (!Ne(b.Qa, a, e ? ua : Ra)) return 0;\n if (a.I) {\n if (!(d ? InitRGBRescaler(a, b) : InitYUVRescaler(a, b))) return alert('memory error #1'), 0;\n } else {\n if (d) {\n if (b.$a = ug, a.Bb) {\n const g = a.m + 1 >> 1;\n const f = a.m + 2 * g;\n let h; const\n n = [];\n for (h = 0; h < f; ++h) n.push(205);\n n.push(0);\n b.memory = n;\n if (b.memory == p) return alert('memory error #2'), 0;\n b.Sb = b.memory;\n b.Tb = 0;\n b.Qb = b.Sb;\n b.Rb = b.Tb + a.m;\n b.lc = b.Qb;\n b.mc = b.Rb + g;\n b.$a = wg;\n V[Qa] = pg;\n V[jb] = Oe;\n V[Zc] = qg;\n V[Pa] = Pe;\n V[Ab] = Qe;\n V[kb] = Re;\n V[Fe] = rg;\n }\n } else {\n b.$a = tg;\n }\n e && (F(c) && (WebPApplyAlphaMultiply = sg, V[Ob] = Oe, V[Pb] = Pe, V[Bb] = Qe, V[Qb] = Re), b.zb = c == kb || c == Qb ? zg : d ? yg : xg);\n }\n if (d && !Xe) {\n for (a = 0; a < 256; ++a) Za[a] = 89858 * (a - 128) + Jb >> ea, wb[a] = -22014 * (a - 128) + Jb, vb[a] = -45773 * (a - 128), xb[a] = 113618 * (a - 128) + Jb >> ea;\n for (a = J; a < dd; ++a) b = 76283 * (a - 16) + Jb >> ea, ia[a - J] = wa(b, 255), Hb[a - J] = wa(b + 8 >> 4, 15);\n Xe = 1;\n }\n return 1;\n }\n\n function ud(a) {\n const b = a.ka;\n let c = a.m;\n const d = a.h;\n $(!(a.w & 1));\n if (c <= 0 || d <= 0) return 0;\n c = b.$a(a, b);\n b.ec += c;\n b.zb && b.zb(a, b);\n return 1;\n }\n\n function wd(a) {\n a = a.ka;\n a.memory = '';\n a.memory = p;\n }\n\n function ed(a,\n b) {\n return a[b + 0] | a[b + 1] << 8 | a[b + 2] << 16;\n }\n\n function Kb(a, b) {\n return (ed(a, b) | a[b + 3] << 24) >>> 0;\n }\n\n function Ye(a, b, c, d, e, g, f) {\n var h = 0;\n var n = [0];\n var l = 'VP8StatusCode';\n const m = M(Gc);\n if (a == p || c[0] < Lb) return Z;\n m.data = a;\n m.b = [b[0]];\n m.e = [c[0]];\n m.na = [m.na];\n a: {\n h = m.na;\n $(a != p);\n $(c != p);\n $(h != p);\n h[0] = 0;\n if (c[0] >= Lb && !kd(a, b[0], 'RIFF', O)) {\n if (kd(a, b[0] + 8, 'WEBP', O)) {\n l = W;\n break a;\n }\n var t = Kb(a, b[0] + O);\n if (t < O + R) {\n l = W;\n break a;\n }\n h[0] = t;\n b[0] += Lb;\n c[0] -= Lb;\n } else h[0] = 0;\n l = L;\n }\n m.na = m.na[0];\n if (l != L) return l;\n h = m.na > 0;\n t = [0];\n a: if (l = R + fd, $(a != p), $(c != p), $(n != p), n[0] = 0, c[0] < R) l = Z;\n else {\n if (!kd(a, b[0], 'VP8X', O)) {\n var q = s;\n var r = s;\n var u = E;\n if (Kb(a, b[0] + O) != fd) {\n l = W;\n break a;\n }\n if (c[0] < l) {\n l = Z;\n break a;\n }\n u = Kb(a, b[0] + 8);\n q = 1 + ed(a, b[0] + 12);\n r = 1 + ed(a, b[0] + 15);\n if (q * r >= Ag) {\n l = W;\n break a;\n }\n t != p && (t[0] = u);\n d != p && (d[0] = q);\n e != p && (e[0] = r);\n b[0] += l;\n c[0] -= l;\n n[0] = 1;\n }\n l = L;\n }\n if (l != L) return l;\n if (!h && n[0]) return W;\n g != p && (g[0] = !!(t[0] & Bg));\n if (n && f == p) return L;\n if (c < O) return Z;\n if (h && n[0] || !h && !n[0] && !kd(a, b[0], 'ALPH', O)) {\n m.$ = [m.$];\n m.G = [m.G];\n m.pa = [m.pa];\n a: {\n var n = m.na;\n var h = m.$;\n var t = m.G;\n var l = m.pa;\n var q = x;\n var r = 0;\n var u = Mb;\n let v = O + R + fd;\n $(a != p);\n $(c != p);\n q = a;\n r = b[0];\n u = c[0];\n $(h != p);\n $(l != p);\n h[0] = p;\n t[0] = p;\n for (l[0] = 0; ;) {\n let w = E;\n let y = E;\n b[0] = r;\n c[0] = u;\n if (u < R) {\n l = Z;\n break a;\n }\n w = Kb(q, r + O);\n y = R + w + 1 & -2;\n v += y;\n if (n > 0 && v > n) {\n l = W;\n break a;\n }\n if (u < y) {\n l = Z;\n break a;\n }\n if (kd(q, r, 'ALPH', O)) {\n if (!kd(q, r, 'VP8 ', O) || !kd(q, 'VP8L', O)) {\n l = L;\n break a;\n }\n } else h[0] = q, t[0] = r + R, l[0] = w;\n r += y;\n u -= y;\n }\n l = ca;\n }\n m.$ = m.$[0];\n m.G = m.G[0];\n m.pa = m.pa[0];\n if (l != L) return l;\n }\n m.ta = [m.ta];\n m.ia = [m.ia];\n a: if (n = m.na, h = m.ta, t = m.ia, r = !kd(a, b[0], 'VP8 ', O), l = !kd(a, b[0], 'VP8L', O), q = O + R, $(a != p), $(c != p), $(h != p), $(t != p), c[0] < R) l = Z;\n else {\n if (r || l) {\n r = Kb(a, b[0] + O);\n if (n >= q && r > n - q) {\n l = W;\n break a;\n }\n h[0] = r;\n b[0] += R;\n c[0] -= R;\n t[0] = l;\n } else t[0] = c >= 1 && a[b + 0] == ve, h[0] = c[0];\n l = L;\n }\n m.ta = m.ta[0];\n m.ia = m.ia[0];\n if (l != L) return l;\n if (m.ta > Ze) return W;\n if (m.ia) {\n if (c[0] < $e) return Z;\n n = b[0];\n h = c[0];\n d = d ? d[0] : p;\n e = e ? e[0] : p;\n t = g ? g[0] : p;\n a == p || h < $e ? a = 0 : (l = [s], q = [s], r = [s], u = M(af), Rb(u, a, n, h), ue(u, l, q, r) ? (d != p && (d[0] = l[0]), e != p && (e[0] = q[0]), t != p && (t[0] = r[0]), a = 1) : a = 0);\n } else {\n if (c < bf) return Z;\n n = b[0];\n h = c[0];\n d = d ? d[0] : p;\n e = e ? e[0] : p;\n !(a == p || h < bf) && h - 3 >= 3 && a[n + 3 + 0] == 157 && a[n\n + 3 + 1] == 1 && a[n + 3 + 2] == 42 ? (h = a[n + 0] | a[n + 1] << 8 | a[n + 2] << 16, t = (a[n + 7] << 8 | a[n + 6]) & 16383, a = (a[n + 9] << 8 | a[n + 8]) & 16383, !(!(h & 1) + 0) || (h >> 1 & 7) > 3 || !(h >> 4 & 1) || h >> 5 >= m.ta ? a = 0 : (d && (d[0] = t), e && (e[0] = a), a = 1)) : a = 0;\n }\n if (!a) return W;\n g != p && (g[0] |= m.$ != p);\n f != p && (f[0] = m, f[0].offset = b[0] - f[0].b, $(b[0] - f[0].b < Ze), $(f[0].offset == f[0].e - c[0]));\n return L;\n }\n\n function Kd(a) {\n $(a != p);\n return Ye(a[0].data, a[0].b, a[0].e, p, p, p, a);\n }\n\n function cf(a, b, c, d) {\n let e = 'VP8StatusCode';\n const g = M(Vb);\n let f = M(Gc);\n f.data = a;\n f.b = b;\n f.e = c;\n f.b = [f.b];\n f.e = [f.e];\n f = [f];\n e = Kd(f);\n if (e\n != L) return e;\n f = f[0];\n f.b = f.b[0];\n f.e = f.e[0];\n $(d != p);\n td(na);\n g.data = f.data;\n g.b = b + f.offset;\n g.e = f.e - f.offset;\n g.put = ud;\n g.Mb = vd;\n g.Pb = wd;\n g.ka = d;\n if (f.ia) {\n a = sd();\n if (a == p) return cb;\n ng(a, g) ? (e = zd(g.width, g.height, d.Qa, d.j), e == L && !og(a) && (e = a.a)) : e = a.a;\n a != p && sa(a);\n } else {\n e = M(Cg);\n e != p && (Gd(e), e.za = 0, e.Hb = 1);\n a = e;\n if (a == p) return cb;\n a.qb = 0;\n a.Ga = f.$;\n a.G = f.G;\n a.ub = f.pa;\n Hd(a, g) ? (e = zd(g.width, g.height, d.Qa, d.j), e == L && !Mf(a, g) && (e = a.a)) : e = a.a;\n a != p && ke(a);\n }\n e != L && (self || this).Yc(d.j);\n return e;\n }\n\n function lb(a, b, c, d, e) {\n const g = {\n value: 0,\n };\n c = {\n value: c,\n };\n const f = M(df);\n const h = M(gd);\n f.j = h;\n h.J = a;\n const n = {\n value: h.width,\n };\n const l = {\n value: h.height,\n };\n let m;\n m = c;\n const t = M(ef);\n hd(b, g, m, t) != L ? m = 0 : (n != p && (n.value = t.width), l != p && (l.value = t.height), m = 1);\n if (!m) return p;\n h.width = n.value;\n h.height = l.value;\n d != p && (d.value = h.width.value);\n e != p && (e.value = h.height.value);\n return cf(b, g.value, c.value, f) != L ? p : a < ua ? h.c.RGBA.ma : h.c.Va.y;\n }\n\n function hd(a, b, c, d) {\n if (d == p || a == p) return ta;\n $(d != p);\n d.tc = 0;\n d.width = [d.width];\n d.height = [d.height];\n d.$b = [d.$b];\n return Ye(a, b, c, d.width, d.height, d.$b, p);\n }\n\n function Ne(a,\n b, c) {\n const d = b.width;\n const e = b.height;\n let g = 0;\n let f = 0;\n let h = d;\n let n = e;\n b.Ua = a != p && a.Ua > 0;\n if (b.Ua && (h = a.wc, n = a.vc, g = a.t, f = a.k, c < ua || (g &= -2, f &= -2), g < 0 || f < 0 || h <= 0 || n <= 0 || g + h > d || f + n > e)) return 0;\n b.t = g;\n b.k = f;\n b.Ka = g + h;\n b.K = f + n;\n b.m = h;\n b.h = n;\n b.I = a != p && a.I > 0;\n if (b.I) {\n if (a.Ba <= 0 || a.Aa <= 0) return 0;\n b.Ba = a.Ba;\n b.Aa = a.Aa;\n }\n b.Za = a && a.Za;\n b.Bb = a == p || !a.ed;\n b.I && (b.Za = b.Ba < 3 * d / 4 && b.Aa < 3 * e / 4, b.Bb = 0);\n return 1;\n }\n var na = 512;\n var Qa = 0;\n var jb = 1;\n var Zc = 2;\n var Pa = 3;\n var Ab = 4;\n var kb = 5;\n var Fe = 6;\n var Ob = 7;\n var Pb = 8;\n var Bb = 9;\n var Qb = 10;\n var ua = 11;\n var Ra = 12;\n var Cc = 13;\n this.WEBP_CSP_MODE = this.Cd = {\n nd: 0,\n od: 1,\n kd: 2,\n ld: 3,\n jd: 4,\n pd: 5,\n qd: 6,\n rd: 7,\n sd: 8,\n md: 9,\n };\n var gd = {\n J: 'WEBP_CSP_MODE',\n width: s,\n height: s,\n Fc: s,\n c: {\n RGBA: {\n ma: x,\n Sa: 0,\n f: s,\n size: Mb,\n },\n Va: {\n y: x,\n c: x,\n S: x,\n p: x,\n D: x,\n B: x,\n C: x,\n q: x,\n F: s,\n nb: s,\n rb: s,\n Fa: s,\n Wc: Mb,\n Rc: Mb,\n Uc: Mb,\n Wb: Mb,\n },\n },\n Ic: U(4, E),\n Jb: p,\n jc: x,\n };\n var L = 0;\n var cb = 1;\n var ta = 2;\n var W = 3;\n var Hf = 4;\n var Ie = 5;\n var Nf = 6;\n var Z = 7;\n this.VP8StatusCode = this.td = {\n xd: 0,\n yd: 1,\n vd: 2,\n ud: 3,\n Ad: 4,\n zd: 5,\n Bd: 6,\n wd: 7,\n };\n var ef = {\n width: {\n value: s,\n },\n height: {\n value: s,\n },\n $b: {\n value: s,\n },\n tc: s,\n Yd: s,\n rotate: s,\n be: s,\n Ic: U(3, E),\n };\n this.WebPGetFeatures = this.Md = function (a, b, c) {\n let d = 'VP8StatusCode';\n na >>> 8 != na >>> 8 || c == p ? a = ta : (b = [b], d = hd(a, [0], b, c), a = d == Z ? W : d);\n return a;\n };\n const ff = {\n Za: s,\n ed: s,\n Ua: s,\n t: s,\n k: s,\n wc: s,\n vc: s,\n I: s,\n Ba: s,\n Aa: s,\n ae: s,\n Td: s,\n Xd: s,\n Ic: U(6, E),\n };\n this.WebPDecoderConfig = this.Kd = {\n input: M(ef),\n j: M(gd),\n options: M(ff),\n };\n this.WebPInitDecoderConfig = this.Nd = function (a) {\n na >>> 8 != na >>> 8 || a == p ? a = 0 : (a = a.input, $(a != p), a.tc = 0, a = 1);\n return a;\n };\n var Vb = {\n width: s,\n height: s,\n w: s,\n m: s,\n h: s,\n y: x,\n c: x,\n S: x,\n D: 0,\n B: 0,\n C: 0,\n F: s,\n Da: s,\n ka: 0,\n put: 0,\n Mb: 0,\n Pb: 0,\n Bb: s,\n e: Mb,\n data: x,\n b: 0,\n Za: s,\n Ua: s,\n t: s,\n Ka: s,\n k: s,\n K: s,\n I: s,\n Ba: s,\n Aa: s,\n p: x,\n q: 0,\n };\n var df = {\n j: M(gd),\n Sb: x,\n Qb: x,\n lc: x,\n Tb: 0,\n Rb: 0,\n mc: 0,\n ec: s,\n Qa: M(ff),\n memory: 0,\n $a: '(OutputFunc)',\n zb: '(OutputFunc)',\n ad: '(OutputRowFunc)',\n };\n var Gc = {\n data: x,\n b: x,\n e: Mb,\n offset: Mb,\n $: p,\n G: x,\n pa: Mb,\n ta: Mb,\n na: Mb,\n ia: s,\n };\n var Fc = {\n qa: x,\n Ia: p,\n Pd: x,\n Ab: s,\n la: E,\n Z: E,\n gc: s,\n };\n var af = {\n T: bb,\n qa: x,\n Ia: x,\n ya: Mb,\n Q: Mb,\n g: s,\n L: s,\n fa: s,\n };\n var gf = 25;\n var hf = [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215];\n var bf = 10;\n var ve = 47;\n var we = 14;\n var Wf = 3;\n var $e = 5;\n var fg = 11;\n var Yc = 5;\n var qe = 4278190080;\n var jg = 8;\n var Tb = 15;\n var Ba = 256;\n var Ge = 24;\n var Je = 4;\n var Be = 0;\n var De = 1;\n var Ae = 2;\n var Ee = 3;\n var Ub = 1;\n var kc = 0;\n var kf = 1;\n var rd = 1;\n var O = 4;\n var R = 8;\n var Lb = 12;\n var fd = 10;\n var Bg = 16;\n var Ag = 1 * Math.pow(2, 32);\n var Ze = -1 - R - 1 >>> 0;\n var jf = {\n kc: s,\n s,\n };\n var Le = {\n Y: 'HuffmanTreeNode*',\n gb: s,\n Pa: s,\n };\n var pd = -1;\n const Dg = {\n ea: E,\n bb: s,\n };\n var ad = 506832829;\n var $b = 0;\n var ge = $b;\n var fe = 2;\n var ee = 3;\n var de = 1;\n var Ef = 4;\n var Df = 5;\n var Cf = 6;\n var Ld = 3;\n var xa = 4;\n var Hc = 4;\n var Gf = 4;\n var Md = 4;\n var Nd = 8;\n var Kc = 3;\n var Lc = 11;\n var f = 32;\n var Pf = 17 * f + 9 * f;\n var Tc = 1 * f + 8;\n var Uc = Tc + 16 * f + f;\n var he = Uc + 16;\n var Id = {\n fb: x,\n Jc: x,\n Nc: x,\n Ra: E,\n };\n var Jd = {\n l: 0,\n v: 0,\n gd: x,\n hd: x,\n uc: x,\n $c: x,\n };\n const Eg = {\n pb: s,\n ob: s,\n tb: s,\n Kb: U(xa, 0),\n Cb: U(xa, 0),\n };\n const Fg = {\n Ta: U(Ld, x),\n z: md([Md, Nd, Kc, Lc], x),\n };\n const Gg = {\n Oc: s,\n Fb: s,\n kb: s,\n oc: s,\n Lc: U(Hc, s),\n Gc: U(Hc, s),\n };\n var Oc = {\n zc: s,\n yc: s,\n ab: s,\n };\n var Qd = {\n X: s,\n ua: s,\n Nb: s,\n };\n const id = U(2, s);\n const Hg = {\n sc: M(id),\n sb: M(id),\n qc: M(id),\n };\n const Ig = {\n ha: s,\n d: s,\n W: s,\n M: Oc,\n N: Vb,\n };\n var Cg = {\n a: 'VP8StatusCode',\n za: s,\n xc: 0,\n o: M(Fc),\n Ac: M(Id),\n P: M(Jd),\n ga: M(Gg),\n Ca: M(Eg),\n rc: 'WebPWorker',\n qb: s,\n Ja: s,\n jb: s,\n oa: Ig,\n Ma: s,\n hb: s,\n lb: s,\n mb: s,\n wb: s,\n Ya: s,\n Hb: s,\n ic: ld(8, Fc),\n Zc: E,\n yb: ld(xa, Hg),\n R: M(Fg),\n pc: s,\n Pc: x,\n dc: x,\n cc: U(4, x),\n Xc: x,\n Sc: x,\n Vc: x,\n La: M(Qd),\n M: M(Oc),\n Ea: x,\n z: 0,\n ca: x,\n aa: x,\n ra: x,\n da: s,\n ba: s,\n sa: s,\n H: s,\n r: s,\n ib: 0,\n Gb: Mb,\n i: s,\n d: s,\n wa: x,\n Eb: U(16, x),\n Vd: 0,\n Tc: x,\n Lb: x,\n ja: E,\n Oa: E,\n A: s,\n W: s,\n Zb: U(xa, x),\n Ga: p,\n G: 0,\n ub: Mb,\n Xb: x,\n Od: 0,\n cd: s,\n dd: x,\n Wd: 0,\n fc: Mb,\n };\n var Db = 0;\n var Cb = 1;\n var cd = 2;\n const Jg = {\n Qc: 'VP8LImageTransformType',\n n: s,\n U: s,\n Vb: s,\n u: E,\n b: E,\n };\n var gg = {\n va: ld(Yc, Le),\n };\n const Kg = {\n xb: s,\n Yb: M(Dg),\n Dc: s,\n eb: s,\n Ec: s,\n ac: E,\n bd: E,\n hc: s,\n Db: 'HTreeGroup',\n };\n var eg = {\n a: 'VP8StatusCode',\n Wa: 'VP8LDecodeState',\n Ob: 'VP8LDecodeState',\n N: 'VP8Io',\n Ib: 'WebPDecBuffer',\n Hc: 'WebPDecBuffer',\n V: E,\n Ha: E,\n Xa: E,\n vb: E,\n o: M(af),\n l: s,\n v: s,\n O: s,\n xa: s,\n cb: M(Kg),\n Na: s,\n nc: ld(Je, Jg),\n Ub: E,\n Mc: x,\n $d: x,\n Zd: '*WebPRescaler',\n };\n var lf = 4;\n var nf = [p, function (a, b, c, d, e, g, f, h) {\n let n = s;\n let l = h;\n $(a != p);\n $(f != p);\n $(c > 0);\n $(d > 0);\n $(e > 0);\n $(g >= c * e);\n for (n = 0; n < d; ++n) {\n n == 0 ? N(f, h, a, b, e) : Ea(a, b, f, l - g, f, h, e), Ea(a, b + e, f, l, f, h + e, e * (c - 1)),\n l += g, b += g, h += g;\n }\n }, function (a, b, c, d, e, f, k, h) {\n let n = s;\n let l = h;\n $(a != p);\n $(k != p);\n $(c > 0);\n $(d > 0);\n $(e > 0);\n $(f >= c * e);\n N(k, h, a, b, e);\n Ea(a, b + e, k, l, k, h + e, e * (c - 1));\n for (n = 1; n < d; ++n) b += f, h += f, Ea(a, b, k, l, k, h, e * c), l += f;\n }, function (a, b, c, d, e, f, k, h) {\n var n = h;\n let l = s;\n $(a != p);\n $(k != p);\n $(c > 0);\n $(d > 0);\n $(e > 0);\n $(f >= c * e);\n N(k, h, a, b, e);\n Ea(a, b + e, k, n, k, h + e, e * (c - 1));\n for (l = 1; l < d; ++l) {\n let m = s;\n var n = n + f;\n b += f;\n h += f;\n Ea(a, b, k, n - f, k, h, e);\n for (m = e; m < c * e; ++m) {\n const t = k[n + m - e] + k[n + m - f] - k[n + m - f - e];\n k[h + m] = a[b + m] + (t < 0 ? 0 : t > 255 ? 255 : t) & 255;\n }\n }\n }];\n var yd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4,\n 2, 1, 1,\n ];\n this.WebPFreeDecBuffer = this.Yc = function (a) {\n a != p && (a.Fc || (a.Jb = ''), a.jc = 0, a.Jb = a.jc = p);\n };\n self = this;\n var va = U(511, x);\n var tc = U(511, x);\n var sc = U(2041, 0);\n var oc = U(225, 0);\n var oa = U(766, x);\n var Rd = 0;\n var Xb = 85627;\n var Wb = 35468;\n var Uf = [function (a, b) {\n let c = 4;\n let d;\n for (d = 0; d < 4; ++d) c += a[b + d - f] + a[b - 1 + d * f];\n c >>= 3;\n for (d = 0; d < 4; ++d) jd(a, b + d * f, c, 4);\n }, function (a, b) {\n Dc(a, b, 4);\n }, function (a, b) {\n let c = b - f;\n const d = [];\n d.push(y(a[c - 1], a[c + 0], a[c + 1]));\n d.push(y(a[c + 0], a[c + 1], a[c + 2]));\n d.push(y(a[c + 1], a[c + 2], a[c + 3]));\n d.push(y(a[c + 2], a[c + 3], a[c + 4]));\n for (c = 0; c < 4; ++c) N(a, b + c * f, d, 0, 4);\n },\n function (a, b) {\n const c = a[b - 1];\n const d = a[b - 1 + f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 + 3 * f];\n a[b + 0 + 0 * f] = a[b + 1 + 0 * f] = a[b + 2 + 0 * f] = a[b + 3 + 0 * f] = y(a[b - 1 - f], c, d);\n a[b + 0 + 1 * f] = a[b + 1 + 1 * f] = a[b + 2 + 1 * f] = a[b + 3 + 1 * f] = y(c, d, e);\n a[b + 0 + 2 * f] = a[b + 1 + 2 * f] = a[b + 2 + 2 * f] = a[b + 3 + 2 * f] = y(d, e, g);\n a[b + 0 + 3 * f] = a[b + 1 + 3 * f] = a[b + 2 + 3 * f] = a[b + 3 + 3 * f] = y(e, g, g);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 - f];\n const k = a[b + 0 - f];\n const h = a[b + 1 - f];\n const n = a[b + 2 - f];\n const l = a[b + 3 - f];\n a[b + 0 + 3 * f] = y(d, e, a[b - 1 + 3 * f]);\n a[b + 0 + 2 * f] = a[b + 1 + 3 * f] = y(c, d, e);\n a[b + 0 + 1 * f] = a[b + 1 + 2 * f] = a[b + 2 + 3 * f] = y(g, c, d);\n a[b\n + 0 + 0 * f] = a[b + 1 + 1 * f] = a[b + 2 + 2 * f] = a[b + 3 + 3 * f] = y(k, g, c);\n a[b + 1 + 0 * f] = a[b + 2 + 1 * f] = a[b + 3 + 2 * f] = y(h, k, g);\n a[b + 2 + 0 * f] = a[b + 3 + 1 * f] = y(n, h, k);\n a[b + 3 + 0 * f] = y(l, n, h);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 - f];\n const k = a[b + 0 - f];\n const h = a[b + 1 - f];\n const n = a[b + 2 - f];\n const l = a[b + 3 - f];\n a[b + 0 + 0 * f] = a[b + 1 + 2 * f] = g + k + 1 >> 1;\n a[b + 1 + 0 * f] = a[b + 2 + 2 * f] = k + h + 1 >> 1;\n a[b + 2 + 0 * f] = a[b + 3 + 2 * f] = h + n + 1 >> 1;\n a[b + 3 + 0 * f] = n + l + 1 >> 1;\n a[b + 0 + 3 * f] = y(e, d, c);\n a[b + 0 + 2 * f] = y(d, c, g);\n a[b + 0 + 1 * f] = a[b + 1 + 3 * f] = y(c, g, k);\n a[b + 1 + 1 * f] = a[b + 2 + 3 * f] = y(g, k, h);\n a[b + 2 + 1 * f] = a[b + 3 + 3 * f] = y(k, h, n);\n a[b + 3 + 1 * f] = y(h, n, l);\n },\n function (a, b) {\n const c = a[b + 1 - f];\n const d = a[b + 2 - f];\n const e = a[b + 3 - f];\n const g = a[b + 4 - f];\n const k = a[b + 5 - f];\n const h = a[b + 6 - f];\n const n = a[b + 7 - f];\n a[b + 0 + 0 * f] = y(a[b + 0 - f], c, d);\n a[b + 1 + 0 * f] = a[b + 0 + 1 * f] = y(c, d, e);\n a[b + 2 + 0 * f] = a[b + 1 + 1 * f] = a[b + 0 + 2 * f] = y(d, e, g);\n a[b + 3 + 0 * f] = a[b + 2 + 1 * f] = a[b + 1 + 2 * f] = a[b + 0 + 3 * f] = y(e, g, k);\n a[b + 3 + 1 * f] = a[b + 2 + 2 * f] = a[b + 1 + 3 * f] = y(g, k, h);\n a[b + 3 + 2 * f] = a[b + 2 + 3 * f] = y(k, h, n);\n a[b + 3 + 3 * f] = y(h, n, n);\n },\n function (a, b) {\n const c = a[b + 0 - f];\n const d = a[b + 1 - f];\n const e = a[b + 2 - f];\n const g = a[b + 3 - f];\n const k = a[b + 4 - f];\n const h = a[b + 5 - f];\n const n = a[b + 6 - f];\n const l = a[b + 7 - f];\n a[b + 0 + 0 * f] = c + d + 1 >> 1;\n a[b + 1 + 0 * f] = a[b\n + 0 + 2 * f] = d + e + 1 >> 1;\n a[b + 2 + 0 * f] = a[b + 1 + 2 * f] = e + g + 1 >> 1;\n a[b + 3 + 0 * f] = a[b + 2 + 2 * f] = g + k + 1 >> 1;\n a[b + 0 + 1 * f] = y(c, d, e);\n a[b + 1 + 1 * f] = a[b + 0 + 3 * f] = y(d, e, g);\n a[b + 2 + 1 * f] = a[b + 1 + 3 * f] = y(e, g, k);\n a[b + 3 + 1 * f] = a[b + 2 + 3 * f] = y(g, k, h);\n a[b + 3 + 2 * f] = y(k, h, n);\n a[b + 3 + 3 * f] = y(h, n, l);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 + 3 * f];\n const k = a[b - 1 - f];\n const h = a[b + 0 - f];\n const n = a[b + 1 - f];\n const l = a[b + 2 - f];\n a[b + 0 + 0 * f] = a[b + 2 + 1 * f] = c + k + 1 >> 1;\n a[b + 0 + 1 * f] = a[b + 2 + 2 * f] = d + c + 1 >> 1;\n a[b + 0 + 2 * f] = a[b + 2 + 3 * f] = e + d + 1 >> 1;\n a[b + 0 + 3 * f] = g + e + 1 >> 1;\n a[b + 3 + 0 * f] = y(h, n, l);\n a[b + 2 + 0 * f] = y(k, h, n);\n a[b\n + 1 + 0 * f] = a[b + 3 + 1 * f] = y(c, k, h);\n a[b + 1 + 1 * f] = a[b + 3 + 2 * f] = y(d, c, k);\n a[b + 1 + 2 * f] = a[b + 3 + 3 * f] = y(e, d, c);\n a[b + 1 + 3 * f] = y(g, e, d);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 + 3 * f];\n a[b + 0 + 0 * f] = c + d + 1 >> 1;\n a[b + 2 + 0 * f] = a[b + 0 + 1 * f] = d + e + 1 >> 1;\n a[b + 2 + 1 * f] = a[b + 0 + 2 * f] = e + g + 1 >> 1;\n a[b + 1 + 0 * f] = y(c, d, e);\n a[b + 3 + 0 * f] = a[b + 1 + 1 * f] = y(d, e, g);\n a[b + 3 + 1 * f] = a[b + 1 + 2 * f] = y(e, g, g);\n a[b + 3 + 2 * f] = a[b + 2 + 2 * f] = a[b + 0 + 3 * f] = a[b + 1 + 3 * f] = a[b + 2 + 3 * f] = a[b + 3 + 3 * f] = g;\n },\n ];\n var Vf = [function (a, b) {\n let c = 16;\n let d;\n for (d = 0; d < 16; ++d) c += a[b - 1 + d * f] + a[b + d - f];\n Yb(c >> 5, a, b);\n }, function (a,\n b) {\n Dc(a, b, 16);\n }, function (a, b) {\n let c;\n for (c = 0; c < 16; ++c) N(a, b + c * f, a, b - f, 16);\n }, function (a, b) {\n let c;\n for (c = 16; c > 0; --c) jd(a, b + 0, a[b - 1], 16), b += f;\n }, function (a, b) {\n let c = 8;\n let d;\n for (d = 0; d < 16; ++d) c += a[b - 1 + d * f];\n Yb(c >> 4, a, b);\n }, function (a, b) {\n let c = 8;\n let d;\n for (d = 0; d < 16; ++d) c += a[b + d - f];\n Yb(c >> 4, a, b);\n }, function (a, b) {\n Yb(128, a, b);\n }];\n var je = [function (a, b) {\n let c = 8;\n let d;\n for (d = 0; d < 8; ++d) c += a[b + d - f] + a[b - 1 + d * f];\n Zb(1 * (c >> 4), a, b);\n }, function (a, b) {\n Dc(a, b, 8);\n }, function (a, b) {\n let c;\n for (c = 0; c < 8; ++c) N(a, b + c * f, a, b - f, 8);\n }, function (a, b) {\n let c;\n for (c = 0; c < 8; ++c) {\n jd(a,\n b + 0, a[b - 1], 8), b += f;\n }\n }, function (a, b) {\n let c = 4;\n let d;\n for (d = 0; d < 8; ++d) c += a[b - 1 + d * f];\n Zb(1 * (c >> 3), a, b);\n }, function (a, b) {\n let c = 4;\n let d;\n for (d = 0; d < 8; ++d) c += a[b + d - f];\n Zb(1 * (c >> 3), a, b);\n }, function (a, b) {\n Zb(128, a, b);\n }];\n let mc; let Pc; let Qc; let Rc; let Sd; let Td; let Ud; let Vd; let Wd; let Xd; let Yd; let Zd; let $d; let ae; let be; let ce; var Pd = 31;\n var uc = [0, 2, 8];\n var Od = 3;\n var Of = 1;\n var ie = [0 + 0 * f, 4 + 0 * f, 8 + 0 * f, 12 + 0 * f, 0 + 4 * f, 4 + 4 * f, 8 + 4 * f, 12 + 4 * f, 0 + 8 * f, 4 + 8 * f, 8 + 8 * f, 12 + 8 * f, 0 + 12 * f, 4 + 12 * f, 8 + 12 * f, 12 + 12 * f];\n var Ic = [4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38,\n 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157,\n ];\n var Jc = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96,\n 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284,\n ];\n var Sf = [-$b, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9];\n var Ff = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128,\n 128,\n ],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128],\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128],\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128],\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128],\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128,\n 128,\n ],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128],\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128],\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128],\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128],\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128],\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128],\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22,\n 100, 174, 245, 186, 161, 255, 199, 128, 128, 128,\n ],\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128],\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128],\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128],\n ],\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13,\n 224, 243, 193, 185, 249, 198, 255, 255, 128,\n ],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128],\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128],\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128],\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n ],\n [\n [1, 16, 248, 255,\n 255, 128, 128, 128, 128, 128, 128,\n ],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128,\n 128, 128, 128, 128, 128, 128, 128,\n ],\n ],\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128],\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128],\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128],\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216,\n 205, 255, 171, 128, 128, 128,\n ],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128],\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128],\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128],\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128],\n ],\n [\n [1, 1, 255, 128, 128, 128, 128,\n 128, 128, 128, 128,\n ],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n ],\n ];\n var Rf = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36],\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111,\n 32, 75, 80,\n ],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22],\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22,\n 64, 171, 36, 225, 114,\n ],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51],\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82],\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73,\n 154,\n ],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47],\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98],\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26],\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160,\n 1,\n ],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40],\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128],\n ],\n [\n [190, 80, 35, 99, 180, 80,\n 126, 54, 45,\n ],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24],\n ],\n ];\n var If = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241,\n 252, 255, 255, 255, 255, 255, 255, 255, 255,\n ],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255,\n 255, 255, 255,\n ],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255],\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 254, 255, 255,\n 255, 255, 255, 255, 255, 255,\n ],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255,\n 255, 255, 255, 255, 255, 255, 255, 255,\n ],\n ],\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255],\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255,\n 255, 255,\n ],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255,\n 255, 255, 255, 255, 255,\n ],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 253,\n 255, 255, 255, 255, 255, 255, 255, 255,\n ],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n ],\n ];\n this.WebPGetDecoderVersion = this.Ld = function () {\n return 512;\n };\n var Nc = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0];\n var Jf = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0],\n ];\n var Kf = [0, 1, 4, 8, 5, 2, 3, 6,\n 9, 12, 13, 10, 7, 11, 14, 15,\n ];\n var Tf = md([Kc, Lc], '');\n U(4, x);\n var vc = [\n [0, 0, 0, 0],\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [1, 1, 0, 0],\n [0, 0, 1, 0],\n [1, 0, 1, 0],\n [0, 1, 1, 0],\n [1, 1, 1, 0],\n [0, 0, 0, 1],\n [1, 0, 0, 1],\n [0, 1, 0, 1],\n [1, 1, 0, 1],\n [0, 0, 1, 1],\n [1, 0, 1, 1],\n [0, 1, 1, 1],\n [1, 1, 1, 1],\n ];\n var Lf = 134480385;\n var ea = 16;\n var J = -227;\n var dd = 482;\n var Ce = [Wc, function (a) {\n return a;\n }, function (a, b, c) {\n return b[c + 0];\n }, function (a, b, c) {\n return b[c + 1];\n }, function (a, b, c) {\n return b[c - 1];\n }, function (a, b, c) {\n return ka(ka(a, b[c + 1]), b[c + 0]);\n }, function (a, b, c) {\n return ka(a, b[c - 1]);\n }, function (a, b, c) {\n return ka(a, b[c + 0]);\n }, function (a,\n b, c) {\n return ka(b[c - 1], b[c + 0]);\n }, function (a, b, c) {\n return ka(b[c + 0], b[c + 1]);\n }, function (a, b, c) {\n return ka(ka(a, b[c - 1]), ka(b[c + 0], b[c + 1]));\n }, function (a, b, c) {\n return Math.abs((a >> 24 & 255) - (b[c - 1] >> 24 & 255)) - Math.abs((b[c + 0] >> 24 & 255) - (b[c - 1] >> 24 & 255)) + (Math.abs((a >> 16 & 255) - (b[c - 1] >> 16 & 255)) - Math.abs((b[c + 0] >> 16 & 255) - (b[c - 1] >> 16 & 255))) + (Math.abs((a >> 8 & 255) - (b[c - 1] >> 8 & 255)) - Math.abs((b[c + 0] >> 8 & 255) - (b[c - 1] >> 8 & 255))) + (Math.abs((a & 255) - (b[c - 1] & 255)) - Math.abs((b[c + 0] & 255) - (b[c - 1] & 255))) <= 0 ? b[c + 0] : a;\n }, function (a, b, c) {\n return ($a((a\n >> 24 & 255) + (b[c + 0] >> 24 & 255) - (b[c - 1] >> 24 & 255)) << 24 | $a((a >> 16 & 255) + (b[c + 0] >> 16 & 255) - (b[c - 1] >> 16 & 255)) << 16 | $a((a >> 8 & 255) + (b[c + 0] >> 8 & 255) - (b[c - 1] >> 8 & 255)) << 8 | $a((a & 255) + (b[c + 0] & 255) - (b[c - 1] & 255))) >>> 0;\n }, function (a, b, c) {\n const d = b[c - 1];\n a = ka(a, b[c + 0]);\n return (yb(a >> 24 & 255, d >> 24 & 255) << 24 | yb(a >> 16 & 255, d >> 16 & 255) << 16 | yb(a >> 8 & 255, d >> 8 & 255) << 8 | yb(a >> 0 & 255, d >> 0 & 255)) >>> 0;\n }, Wc, Wc];\n var Xf = {\n Cc: x,\n Bc: x,\n Kc: x,\n };\n var $c = 16;\n var Me = 16;\n var kg = 16;\n var mg = [2, 3, 7];\n var lg = [3, 3, 11];\n var Zf = 0;\n var $f = 1;\n var ag = 2;\n var bg = 3;\n var cg = 4;\n var hg = [Ba + Ge, Ba, Ba, Ba, 40];\n var Ke = 19;\n var ig = [17, 18, 0, 1, 2, 3, 4, 5, 16,\n 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n ];\n var He = 120;\n var dg = [24, 7, 23, 25, 40, 6, 39, 41, 22, 26, 38, 42, 56, 5, 55, 57, 21, 27, 54, 58, 37, 43, 72, 4, 71, 73, 20, 28, 53, 59, 70, 74, 36, 44, 88, 69, 75, 52, 60, 3, 87, 89, 19, 29, 86, 90, 35, 45, 68, 76, 85, 91, 51, 61, 104, 2, 103, 105, 18, 30, 102, 106, 34, 46, 84, 92, 67, 77, 101, 107, 50, 62, 120, 1, 119, 121, 83, 93, 17, 31, 100, 108, 66, 78, 118, 122, 33, 47, 117, 123, 49, 63, 99, 109, 82, 94, 0, 116, 124, 65, 79, 16, 32, 98, 110, 48, 115, 125, 81, 95, 64, 114, 126, 97, 111, 80, 113, 127, 96, 112];\n var Jb = 1 << ea - 1;\n var Za = U(256, 0);\n var xb = U(256, 0);\n var vb = U(256, la);\n var wb = U(256, la);\n var ia = U(dd - J, x);\n var Hb = U(dd\n - J, x);\n var Xe = 0;\n var V = Array(Cc);\n var vg = [function (a, b, c, d, e, f, k, h, n, l, m, t, q) {\n Ca(a, b, c, d, e, f, k, h, n, l, m, t, q, hc, 3);\n }, Se, function (a, b, c, d, e, f, k, h, n, l, m, t, q) {\n Ca(a, b, c, d, e, f, k, h, n, l, m, t, q, Vc, 3);\n }, Te, Ue, Ve, function (a, b, c, d, e, f, k, h, n, l, m, t, q) {\n Ca(a, b, c, d, e, f, k, h, n, l, m, t, q, le, 2);\n }, Se, Te, Ue, Ve];\n this.Hd = function (a, b, c, d) {\n return lb(Qa, a, b, c, d);\n };\n this.Id = function (a, b, c, d) {\n return lb(jb, a, b, c, d);\n };\n this.Jd = function (a, b, c, d) {\n return lb(kb, a, b, c, d);\n };\n this.Ed = function (a, b, c, d) {\n return lb(Ab, a, b, c, d);\n };\n this.Fd = function (a, b, c, d) {\n return lb(Zc,\n a, b, c, d);\n };\n this.Gd = function (a, b, c, d) {\n return lb(Pa, a, b, c, d);\n };\n this.WebPDecode = this.Dd = function (a, b, c) {\n const d = M(df);\n let e = 'VP8StatusCode';\n if (c == p) return ta;\n e = hd(a, [0], [b], c.input);\n if (e != L) return e == Z ? W : e;\n d.j = c.j;\n d.Qa = c.Qa;\n return e = cf(a, 0, [b], d);\n };\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {webp2png} from './webp';\nimport type {ConvertWebPTask} from './webpWorkerController';\n\nconst ctx = self as any as DedicatedWorkerGlobalScope;\nconst tasks: ConvertWebPTask[] = [];\n// let isProcessing = false;\n\nfunction finishTask() {\n // isProcessing = false;\n processTasks();\n}\n\nfunction processTasks() {\n // if(isProcessing) return;\n\n const task = tasks.shift();\n if(!task) return;\n\n // isProcessing = true;\n\n switch(task.type) {\n case 'convertWebp': {\n const {fileName, bytes} = task.payload;\n\n let convertedBytes: Uint8Array;\n try {\n convertedBytes = webp2png(bytes).bytes;\n } catch(err) {\n console.error('Convert webp2png error:', err, 'payload:', task.payload);\n }\n\n ctx.postMessage({\n type: 'convertWebp',\n payload: {\n fileName,\n bytes: convertedBytes\n }\n });\n\n finishTask();\n\n break;\n }\n\n default:\n finishTask();\n }\n}\n\nfunction scheduleTask(task: ConvertWebPTask) {\n tasks.push(task);\n /* if(task.payload.fileName.indexOf('main-') === 0) {\n tasks.push(task);\n } else {\n tasks.unshift(task);\n } */\n\n processTasks();\n}\n\nctx.addEventListener('message', (event) => {\n scheduleTask(event.data);\n});\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {WebPDecoder} from '../../vendor/libwebp-0.2.0';\nimport {encode} from 'fast-png';\n\nexport function webp2png(data: Uint8Array) {\n const decoder = new WebPDecoder();\n const config: any = decoder.WebPDecoderConfig;\n const buffer = config.j || config.output;\n const bitstream = config.input;\n\n decoder.WebPInitDecoderConfig(config);\n decoder.WebPGetFeatures(data, data.length, bitstream);\n\n /** MODE_RGBA = 1 MODE_ARGB = 4, */\n buffer.J = 1;\n\n let status;\n try {\n status = decoder.WebPDecode(data, data.length, config);\n } catch(e) {\n status = e;\n }\n\n if(status === 0) {\n const rgbaData = buffer.Jb;\n const pngData = encode({\n data: rgbaData,\n width: buffer.width,\n height: buffer.height,\n channels: 4,\n depth: 8\n });\n\n return {status, bytes: pngData};\n }\n\n return {status, bytes: data};\n}\n\nexport function webp2pngAsBlob(data: Uint8Array) {\n const {status, bytes} = webp2png(data);\n return new Blob([bytes], {type: status === 0 ? 'image/png' : 'image/webp'});\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [699,866,158], () => (__webpack_require__(2061)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"158\":\"npm.iobuffer\",\"699\":\"npm.pako\",\"866\":\"npm.fast-png\"}[chunkId] + \".\" + {\"158\":\"8fe11aa09121a6fd9200\",\"699\":\"89deb457201f16c93925\",\"866\":\"a7cba17ee621cb2ad512\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t61: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","i","p","M","F","JSON","parse","stringify","N","G","w","D","S","Nb","length","push","ic","rc","memmove","arr1","index1","arr2","index2","jd","kd","ga","String","fromCharCode","U","ld","md","$","Error","WebPDecoder","a","Ob","Pb","Bb","Qb","b","c","la","d","e","Z","gc","bc","qa","Ia","Rb","ya","T","Q","g","L","fa","Sb","Da","gf","hf","ma","Pa","gb","nd","Y","jf","s","ja","jc","k","h","n","l","kc","od","Tb","pd","Ea","qd","P","v","Ga","ub","Xb","m","f","q","r","u","C","Ub","kf","lf","rd","Vb","A","z","sd","td","na","put","ud","Mb","vd","wd","ka","fd","width","height","o","Wa","Cb","Ka","xd","Db","lc","V","Ha","mf","sa","nf","zd","ta","Ua","wc","vc","t","I","Ba","Aa","J","Qa","Cc","Fc","Jb","yd","ua","parseInt","Ra","cb","RGBA","Sa","size","Va","y","Wc","B","nb","Rc","rb","Uc","Wb","Fa","of","mb","Ad","pf","qf","mc","nc","rf","Dc","oa","Yb","Zb","sc","oc","Bd","va","Cd","tc","Dd","Ed","sf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","Fd","$b","Cf","Df","Ef","Ec","wa","Gd","xc","alert","za","Hd","Id","Jd","Gc","data","Kd","ia","W","pa","offset","Ac","fb","Jc","Nc","gd","hd","Ma","hb","K","R","Ta","Ff","Ca","pb","ob","tb","Kb","Lb","uc","$c","xa","Ld","Ab","Oc","Fb","kb","Hc","Lc","Gf","Hb","yb","Ic","sb","qc","Hf","Zc","Md","Nd","Kc","If","pc","Pc","fc","dd","cd","Mc","Jf","Kf","Lf","Mf","Nf","Za","lb","Ya","wb","Ja","qb","WebPWorkerReset","Qd","Rd","Ud","FinishRow","jb","Od","Of","Pf","Pd","Gb","ib","dc","Xc","Sc","Vc","Sd","ha","H","ca","da","aa","ba","ra","La","Qc","Td","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Qf","db","X","cc","O","Eb","Rf","Sf","de","ee","fe","ge","Tc","Oa","Tf","ea","ab","Xa","he","vb","xb","ac","ie","Uf","$a","Vf","je","zb","zc","yc","eb","WebPWorkerSync","OK","hc","WebPWorkerLaunch","Ib","Na","ec","Bc","ke","le","me","ne","oe","pe","qe","re","se","te","ue","ve","we","Wf","xe","Yc","ye","bd","ze","Ae","Be","Ce","De","Xf","Ee","Yf","EmitRescaledRows","WebPApplyAlphaMultiply","WebPApplyAlphaMultiply4444","Fe","EmitRescaledRowsYUVA","EmitRowsYUVA","Ge","Zf","$f","ag","bg","ad","bb","cg","He","dg","End","Ie","eg","Je","Array","fg","gg","hg","Ke","ig","jg","Le","Me","kg","lg","mg","pg","qg","Oe","Pe","Qe","Re","rg","Se","Te","Ue","Ve","sg","tg","j","ug","vg","wg","xg","We","yg","zg","memory","Ne","InitRGBRescaler","InitYUVRescaler","Xe","ed","Ye","Ag","Bg","Ze","$e","af","bf","cf","ng","AllocateAndInitRescaler","og","Cg","this","value","df","ef","WEBP_CSP_MODE","VP8StatusCode","rotate","WebPGetFeatures","ff","WebPDecoderConfig","input","options","WebPInitDecoderConfig","Math","pow","Eg","Fg","Gg","id","Hg","Ig","Kg","WebPFreeDecBuffer","WebPGetDecoderVersion","abs","WebPDecode","ctx","self","tasks","finishTask","processTasks","task","shift","type","fileName","bytes","payload","convertedBytes","decoder","config","buffer","output","bitstream","status","rgbaData","channels","depth","webp2png","err","console","error","postMessage","addEventListener","event","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","call","x","__webpack_exports__","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","Object","keys","every","key","splice","definition","defineProperty","enumerable","get","chunkId","Promise","all","reduce","promises","miniCssF","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","replace","oldGetScript","oldLoadScript","queryMap","countMap","catch","retries","realSrc","message","request","resolve","setTimeout","cacheBust","Date","now","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","pop","map","then"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"61.84ba1f0d30c94eb8b92b.chunk.js","mappings":"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,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAClC,IAAK,IAAK,KAEZ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IACnB,IAAK,IAAK,IAAK,IAAK,IAAK,KAE3B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IACT,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAIzC,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACvC,IAAK,MAGT,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAGvD,CACE,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,IAAK,IAAK,IAAK,IAAK,KAEtB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IACT,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAErC,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MAErD,CACE,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACnD,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,QAIzD8L,KAAKuB,sBAAwBvB,KAAKhN,GAAK,WACrC,OAAO,GACT,EACA,IAAIlB,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACtD2C,GAAK,CACP,CAAC,IAAK,IAAK,IAAK,GAChB,CAAC,IAAK,IAAK,IAAK,IAAK,GACrB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,GAC1B,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAEtDC,GAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7B,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,IAExB4D,GAAKzR,EAAG,CAACoN,GAAIX,IAAK,IACtB3M,EAAE,EAx1HM,GAy1HR,IAAIiG,GAAK,CACP,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,GACV,CAAC,EAAG,EAAG,EAAG,IAER+H,GAAK,UACL4D,GAAK,GACLtL,IAAK,IACLqH,GAAK,IACL8G,GAAK,CAACpN,GAAI,SAAU/G,GACtB,OAAOA,CACT,EAAG,SAAUA,EAAGK,EAAGC,GACjB,OAAOD,EAAEC,EAAI,EACf,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOD,EAAEC,EAAI,EACf,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOD,EAAEC,EAAI,EACf,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGA,GAAGvE,EAAGK,EAAEC,EAAI,IAAKD,EAAEC,EAAI,GACnC,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGvE,EAAGK,EAAEC,EAAI,GACrB,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGvE,EAAGK,EAAEC,EAAI,GACrB,EAAG,SAAUN,EACXK,EAAGC,GACH,OAAOiE,GAAGlE,EAAEC,EAAI,GAAID,EAAEC,EAAI,GAC5B,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGlE,EAAEC,EAAI,GAAID,EAAEC,EAAI,GAC5B,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOiE,GAAGA,GAAGvE,EAAGK,EAAEC,EAAI,IAAKiE,GAAGlE,EAAEC,EAAI,GAAID,EAAEC,EAAI,IAChD,EAAG,SAAUN,EAAGK,EAAGC,GACjB,OAAOsZ,KAAKW,KAAKva,GAAK,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQsZ,KAAKW,KAAKla,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,OAASsZ,KAAKW,KAAKva,GAAK,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQsZ,KAAKW,KAAKla,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,QAAUsZ,KAAKW,KAAKva,GAAK,EAAI,MAAQK,EAAEC,EAAI,IAAM,EAAI,MAAQsZ,KAAKW,KAAKla,EAAEC,EAAI,IAAM,EAAI,MAAQD,EAAEC,EAAI,IAAM,EAAI,QAAUsZ,KAAKW,KAAS,IAAJva,IAAuB,IAAXK,EAAEC,EAAI,KAAasZ,KAAKW,KAAgB,IAAXla,EAAEC,EAAI,KAAwB,IAAXD,EAAEC,EAAI,OAAe,EAAID,EAAEC,EAAI,GAAKN,CACvc,EAAG,SAAUA,EAAGK,EAAGC,GACjB,OAAQyR,IAAI/R,GACL,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,OAAS,GAAKyR,IAAI/R,GAAK,GAAK,MAAQK,EAAEC,EAAI,IAAM,GAAK,MAAQD,EAAEC,EAAI,IAAM,GAAK,OAAS,GAAKyR,IAAI/R,GAAK,EAAI,MAAQK,EAAEC,EAAI,IAAM,EAAI,MAAQD,EAAEC,EAAI,IAAM,EAAI,OAAS,EAAIyR,IAAQ,IAAJ/R,IAAuB,IAAXK,EAAEC,EAAI,KAAwB,IAAXD,EAAEC,EAAI,QAAgB,CAC/R,EAAG,SAAUN,EAAGK,EAAGC,GACjB,MAAME,EAAIH,EAAEC,EAAI,GAEhB,OAAQkM,IADRxM,EAAIuE,GAAGvE,EAAGK,EAAEC,EAAI,MACA,GAAK,IAAKE,GAAK,GAAK,MAAQ,GAAKgM,GAAGxM,GAAK,GAAK,IAAKQ,GAAK,GAAK,MAAQ,GAAKgM,GAAGxM,GAAK,EAAI,IAAKQ,GAAK,EAAI,MAAQ,EAAIgM,GAAGxM,GAAK,EAAI,IAAKQ,GAAK,EAAI,QAAU,CACtK,EAAGuG,GAAIA,IACHsN,GAAK,CACPnO,GA/4HM,EAg5HN2M,GAh5HM,EAi5HN7F,GAj5HM,GAm5HJnB,GAAK,GACLuK,GAAK,GACLC,GAAK,GACLE,GAAK,CAAC,EAAG,EAAG,GACZD,GAAK,CAAC,EAAG,EAAG,IACZvB,GAAK,EACLC,GAAK,EACLC,GAAK,EACLC,GAAK,EACLG,GAAK,EACLU,GAAK,CAACjQ,GAAKgP,GAAIhP,GAAIA,GAAIA,GAAI,IAC3BkQ,GAAK,GACLC,GAAK,CAAC,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,IAE9BX,GAAK,IACLC,GAAK,CAAC,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,GAAI,GAAI,EAAG,IAAK,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,GAAI,IAAK,IAAK,GAAI,IAAK,GAAI,IAAK,IAAK,GAAI,KACrfnP,GAAK,GAAKkL,GAAK,EACfzD,GAAKnO,EAAE,IAAK,GACZiS,GAAKjS,EAAE,IAAK,GACZgS,GAAKhS,EAAE,IAx6HH,GAy6HJsO,GAAKtO,EAAE,IAz6HH,GA06HJ4K,GAAK5K,EAAE2N,GAAKrH,GAz6HR,GA06HJuG,GAAK7M,EAAE2N,GACLrH,GA36HE,GA46HJiS,GAAK,EACL/S,GAAI0Q,MAAM1P,IACVqR,GAAK,CAAC,SAAUvX,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,GACtDkI,GAAGtL,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,EAAGoP,GAAI,EAChD,EAAGuE,GAAI,SAAU/W,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,GACnDkI,GAAGtL,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,EAAG8L,GAAI,EAChD,EAAG8H,GAAIC,GAAIC,GAAI,SAAUlX,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,GAC3DkI,GAAGtL,EAAGK,EAAGC,EAAGE,EAAGC,EAAG0C,EAAGhB,EAAGC,EAAGC,EAAGC,EAAGY,EAAG0C,EAAGxC,EAAG2P,GAAI,EAChD,EAAGgE,GAAIC,GAAIC,GAAIC,IACf6B,KAAK/O,GAAK,SAAUhK,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAG7H,GAAIjG,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAK9O,GAAK,SAAUjK,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAGU,GAAIxO,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAK7O,GAAK,SAAUlK,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAG3B,GAAInM,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAKrQ,GAAK,SAAU1I,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAG9B,GAAIhM,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAK1P,GAAK,SAAUrJ,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAGjB,GACR7M,EAAGK,EAAGC,EAAGE,EACb,EACAuY,KAAKnP,GAAK,SAAU5J,EAAGK,EAAGC,EAAGE,GAC3B,OAAOsN,GAAGnM,GAAI3B,EAAGK,EAAGC,EAAGE,EACzB,EACAuY,KAAKyB,WAAazB,KAAKtQ,GAAK,SAAUzI,EAAGK,EAAGC,GAC1C,MAAME,EAAIvC,EAAEgb,IACZ,IAAIxY,EAAI,gBACR,OAAIH,GAAKtC,EAAUwH,IACnB/E,EAAIsK,GAAG/K,EAAG,CAAC,GAAI,CAACK,GAAIC,EAAEmZ,OAClBhZ,GAAKW,GAAUX,GAAKC,GAAI6J,GAAI9J,GAChCD,EAAE6W,EAAI/W,EAAE+W,EACR7W,EAAEyF,GAAK3F,EAAE2F,GACEyS,GAAG1Y,EAAG,EAAG,CAACK,GAAIG,IAC3B,CACF,E,cCx+HA,MAAMia,EAAMC,KACNC,EAA2B,GAGjC,SAASC,IAEPC,GACF,CAEA,SAASA,IAGP,MAAMC,EAAOH,EAAMI,QACnB,GAAID,EAIJ,OAAOA,EAAKE,MACV,IAAK,cAAe,CAClB,MAAM,SAACC,EAAQ,MAAEC,GAASJ,EAAKK,QAE/B,IAAIC,EACJ,IACEA,ECvBD,SAAkBhR,GACvB,MAAMiR,EAAU,IAAItb,EACdub,EAAcD,EAAQ7B,kBACtB+B,EAASD,EAAOjE,GAAKiE,EAAOE,OAC5BC,EAAYH,EAAO7B,MAQzB,IAAIiC,EANJL,EAAQ1B,sBAAsB2B,GAC9BD,EAAQ/B,gBAAgBlP,EAAMA,EAAKxL,OAAQ6c,GAG3CF,EAAOvV,EAAI,EAGX,IACE0V,EAASL,EAAQb,WAAWpQ,EAAMA,EAAKxL,OAAQ0c,E,CAC/C,MAAM7a,GACNib,EAASjb,C,CAGX,GAAc,IAAXib,EAAc,CACf,MAAMC,EAAWJ,EAAOnV,GASxB,MAAO,CAACsV,SAAQR,OARA,QAAO,CACrB9Q,KAAMuR,EACNlX,MAAO8W,EAAO9W,MACdC,OAAQ6W,EAAO7W,OACfkX,SAAU,EACVC,MAAO,I,CAMX,MAAO,CAACH,SAAQR,MAAO9Q,EACzB,CDVyB0R,CAASZ,GAAOA,K,CACjC,MAAMa,GACNC,QAAQC,MAAM,0BAA2BF,EAAK,WAAYjB,EAAKK,Q,CAGjEV,EAAIyB,YAAY,CACdlB,KAAM,cACNG,QAAS,CACPF,WACAC,MAAOE,KAIXR,IAEA,K,CAGF,QACEA,IAEN,CAaAH,EAAI0B,iBAAiB,WAAYC,IAXjC,IAAsBtB,IAYPsB,EAAMhS,KAXnBuQ,EAAM9b,KAAKic,GAOXD,GAIwB,G,GElEtBwB,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CAGjDG,QAAS,CAAC,GAOX,OAHAE,EAAoBL,GAAUM,KAAKF,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAGpEK,EAAOD,OACf,CAGAJ,EAAoBpZ,EAAI0Z,EAGxBN,EAAoBQ,EAAI,KAGvB,IAAIC,EAAsBT,EAAoB3L,OAAE8L,EAAW,CAAC,IAAI,IAAI,MAAM,IAAOH,EAAoB,QAErG,OADsBA,EAAoB3L,EAAEoM,EAClB,ELjCvBlf,EAAW,GACfye,EAAoB3L,EAAI,CAACqM,EAAQC,EAAUC,EAAIC,KAC9C,IAAGF,EAAH,CAMA,IAAIG,EAAeC,IACnB,IAAStf,EAAI,EAAGA,EAAIF,EAASe,OAAQb,IAAK,CAGzC,IAFA,IAAKkf,EAAUC,EAAIC,GAAYtf,EAASE,GACpCuf,GAAY,EACPjG,EAAI,EAAGA,EAAI4F,EAASre,OAAQyY,MACpB,EAAX8F,GAAsBC,GAAgBD,IAAaI,OAAOC,KAAKlB,EAAoB3L,GAAG8M,OAAOC,GAASpB,EAAoB3L,EAAE+M,GAAKT,EAAS5F,MAC9I4F,EAASU,OAAOtG,IAAK,IAErBiG,GAAY,EACTH,EAAWC,IAAcA,EAAeD,IAG7C,GAAGG,EAAW,CACbzf,EAAS8f,OAAO5f,IAAK,GACrB,IAAIsF,EAAI6Z,SACET,IAANpZ,IAAiB2Z,EAAS3Z,EAC/B,CACD,CACA,OAAO2Z,CAnBP,CAJCG,EAAWA,GAAY,EACvB,IAAI,IAAIpf,EAAIF,EAASe,OAAQb,EAAI,GAAKF,EAASE,EAAI,GAAG,GAAKof,EAAUpf,IAAKF,EAASE,GAAKF,EAASE,EAAI,GACrGF,EAASE,GAAK,CAACkf,EAAUC,EAAIC,EAqBjB,EMzBdb,EAAoB9b,EAAI,CAACkc,EAASkB,KACjC,IAAI,IAAIF,KAAOE,EACXtB,EAAoB3X,EAAEiZ,EAAYF,KAASpB,EAAoB3X,EAAE+X,EAASgB,IAC5EH,OAAOM,eAAenB,EAASgB,EAAK,CAAEI,YAAY,EAAMC,IAAKH,EAAWF,IAE1E,ECNDpB,EAAoBnZ,EAAI,CAAC,EAGzBmZ,EAAoB7b,EAAKud,GACjBC,QAAQC,IAAIX,OAAOC,KAAKlB,EAAoBnZ,GAAGgb,QAAO,CAACC,EAAUV,KACvEpB,EAAoBnZ,EAAEua,GAAKM,EAASI,GAC7BA,IACL,KCNJ9B,EAAoBhZ,EAAK0a,IAEZ,CAAC,IAAM,eAAe,IAAM,WAAW,IAAM,gBAAgBA,GAAW,IAAM,CAAC,IAAM,uBAAuB,IAAM,uBAAuB,IAAM,wBAAwBA,GAAW,aCF/L1B,EAAoB+B,SAAYL,IAEf,ECHjB1B,EAAoBnb,EAAI,WACvB,GAA0B,iBAAfmd,WAAyB,OAAOA,WAC3C,IACC,OAAOvF,MAAQ,IAAIwF,SAAS,cAAb,EAGhB,CAFE,MAAO9d,GACR,GAAsB,iBAAX+d,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBlC,EAAoB3X,EAAI,CAAC8Z,EAAKC,IAAUnB,OAAOoB,UAAUC,eAAe/B,KAAK4B,EAAKC,G,MCAlF,IAAIG,EACAvC,EAAoBnb,EAAE2d,gBAAeD,EAAYvC,EAAoBnb,EAAE4d,SAAW,IACtF,IAAIC,EAAW1C,EAAoBnb,EAAE6d,SACrC,IAAKH,GAAaG,IACbA,EAASC,gBACZJ,EAAYG,EAASC,cAAcC,MAC/BL,GAAW,CACf,IAAIM,EAAUH,EAASI,qBAAqB,UACzCD,EAAQvgB,SAAQigB,EAAYM,EAAQA,EAAQvgB,OAAS,GAAGsgB,IAC5D,CAID,IAAKL,EAAW,MAAM,IAAI/e,MAAM,yDAChC+e,EAAYA,EAAUQ,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpF/C,EAAoBte,EAAI6gB,C,KCfxB,MACE,QAAmC,IAAxBvC,EAAqC,CAC9C,IAAIgD,EAAehD,EAAoBhZ,EACnCic,EAAgBjD,EAAoB7b,EACpC+e,EAAW,CAAC,EACZC,EAAW,CAAC,EAIhBnD,EAAoBhZ,EAAI,SAAU0a,GAEhC,OADasB,EAAatB,IAGvBwB,EAASZ,eAAeZ,GAAW,IAAMwB,EAASxB,GAAW,GAElE,EACA1B,EAAoB7b,EAAI,SAAUud,GAEhC,OADauB,EAAcvB,GACb0B,OAAM,SAAUzD,GAC5B,IAAI0D,EAAUF,EAASb,eAAeZ,GAClCyB,EAASzB,GACT,OACJ,GAAI2B,EAAU,EAAG,CACf,IAAIC,EAAUN,EAAatB,GAQ3B,MAPA/B,EAAM4D,QACJ,iBACA7B,EACA,mCACA4B,EACA,IACF3D,EAAM6D,QAAUF,EACV3D,CACR,CACA,OAAO,IAAIgC,SAAQ,SAAU8B,GAE3BC,YAAW,WACT,IACIC,EACKC,KAAKC,MAGdX,EAASxB,GAAWiC,EACpBR,EAASzB,GAAW2B,EAAU,EAC9BI,EAAQzD,EAAoB7b,EAAEud,GAChC,GArCG,IAsCL,GACF,GACF,CACF,CACD,EAjDD,G,MCIA,IAAIoC,EAAkB,CACrB,GAAI,GAgBL9D,EAAoBnZ,EAAEpF,EAAI,CAACigB,EAASI,KAE/BgC,EAAgBpC,IAElBc,cAAcxC,EAAoBte,EAAIse,EAAoBhZ,EAAE0a,GAE9D,EAGD,IAAIqC,EAAqBtH,KAAuB,iBAAIA,KAAuB,kBAAK,GAC5EuH,EAA6BD,EAAmBxhB,KAAK0hB,KAAKF,GAC9DA,EAAmBxhB,KAvBCuL,IACnB,IAAK6S,EAAUuD,EAAaC,GAAWrW,EACvC,IAAI,IAAImS,KAAYiE,EAChBlE,EAAoB3X,EAAE6b,EAAajE,KACrCD,EAAoBpZ,EAAEqZ,GAAYiE,EAAYjE,IAIhD,IADGkE,GAASA,EAAQnE,GACdW,EAASre,QACdwhB,EAAgBnD,EAASyD,OAAS,EACnCJ,EAA2BlW,EAAK,C,KbnB7BtM,EAAOwe,EAAoBQ,EAC/BR,EAAoBQ,EAAI,IAChBmB,QAAQC,IAAI,CAAC,IAAI,IAAI,KAAKyC,IAAIrE,EAAoB7b,EAAG6b,IAAsBsE,KAAK9iB,GcD9Dwe,EAAoBQ,G","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/vendor/libwebp-0.2.0.js","webpack://tweb/./src/lib/webp/webp.worker.ts","webpack://tweb/./src/lib/webp/webp.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([699,866,158].map(__webpack_require__.e, __webpack_require__)).then(next);\n};","// Copyright 2011 Google Inc.\n//\n// This code is licensed under the same terms as WebM:\n// Software License Agreement: http://www.webmproject.org/license/software/\n// Additional IP Rights Grant: http://www.webmproject.org/license/additional/\n// -----------------------------------------------------------------------------\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n// IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,\n// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\n// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// -----------------------------------------------------------------------------\n//\n// Copyright 2011-2013 Dominik Homberger\n// Libwebp Javascript / libwebpjs - the libwebp implementation in javascript (v0.2.0)\n//\n// Author: Dominik Homberger (dominik.homberger@gmail.com)\n\nlet i;\nlet a;\nlet self;\nconst ca = 0;\nconst p = null;\nconst s = 0;\nconst x = 0;\nconst la = s;\nconst E = s;\nconst bb = 0;\nconst Mb = 0;\n\nfunction M(F) {\n return JSON.parse(JSON.stringify(F));\n}\n\nfunction N(F, G, w, D, S) {\n for (i = 0; i < S; ++i) F[G + i] = w[D + i];\n}\n\nfunction Nb(F) {\n const G = [];\n const w = F.length;\n let D;\n for (D = 0; D < w; ++D) G.push(F[D]);\n return G;\n}\n\nfunction ic(F, G) {\n const w = [];\n w.push(M(F));\n let D;\n for (D = 0; D < G; ++D) w.push(M(F));\n w.push(0);\n return w;\n}\n\nfunction rc(F, G) {\n const w = [];\n let D;\n for (D = 0; D < G; ++D) w.push(F);\n w.push(0);\n return w;\n}\n\nfunction memmove(arr1, index1, arr2, index2, length) {\n let i;\n for (i = 0; i < length; i++) {\n arr1[index1 + i] = arr2[index2 + i];\n }\n}\n\nfunction jd(F, G, w, D) {\n let S;\n for (S = 0; S < D; ++S) F[G + S] = w;\n}\n\nfunction kd(F, G, w, D) {\n let S = '';\n let ga;\n for (ga = 0; ga < D; ++ga) S += String.fromCharCode(F[G + ga]);\n return w == S ? 0 : 1;\n}\n\nfunction U(F, G) {\n let w; const\n D = [];\n for (w = 0; w < F; ++w) D.push(G);\n return D;\n}\n\nfunction ld(F, G) {\n let w; const\n D = [];\n for (w = 0; w < F; ++w) D.push(M(G));\n return D;\n}\n\nfunction md(F, G) {\n let w;\n for (w = F.length - 1; w >= 0; --w) G = M(U(F[w], G));\n return G;\n}\n\nfunction $(F) {\n if (!F) throw Error('assert :P');\n}\nexport const WebPDecoder = function () {\n function F(a) {\n return a == Ob || a == Pb || a == Bb || a == Qb;\n }\n\n function G(a) {\n return S(a, 1);\n }\n\n function w(a, b) {\n const c = 1 + ((a.la - 1) * b >> 8);\n const d = c << 8;\n let e = s;\n a.Z >= d ? (e = 1, a.la -= c, a.Z -= d) : (e = 0, a.la = c);\n for (; a.la < 128;) a.Z <<= 1, a.la <<= 1, ++a.gc == 8 && (a.gc = 0, a.bc && (a.Z += a.qa[a.Ia++], a.bc--));\n return e;\n }\n\n function D(a, b, c, d) {\n d -= c;\n d >= 2 ? (a.Z = b[c + 0] << 8 | b[c + 1], a.qa = b, a.Ia = c + 2, a.bc = d - 2) : (a.Z = 0, a.qa = p, a.bc = 0);\n a.la = 255;\n a.gc = 0;\n }\n\n function S(a, b) {\n for (var c = 0, d = s, d = b - 1; d >= 0; d--) c |= w(a, 128) << d;\n return c;\n }\n\n function ga(a, b) {\n const c = S(a, b);\n return G(a) ? -c : c;\n }\n\n function Rb(a, b, c, d) {\n let e = Mb;\n $(a != p);\n $(b != p);\n $(d < 4294967288);\n a.qa = b;\n a.Ia = c;\n a.ya = d;\n a.T = 0;\n a.Q = 0;\n a.g = 0;\n a.L = 0;\n for (e = a.fa = 0; e < 4 && e < a.ya; ++e) a.T |= a.qa[a.Ia + a.Q] << 8 * e, ++a.Q;\n }\n\n function Sb(a) {\n for (; a.g >= 8 && a.Q < a.ya;) a.T >>>= 8, a.T += a.qa[a.Ia + a.Q] << 24 >>> 0, ++a.Q, a.g -= 8;\n }\n\n function Da(a) {\n a.g >= 8 && Sb(a);\n a.Q == a.ya && a.g == 32 && (a.L = 1);\n }\n\n function T(a, b) {\n let c = 0;\n $(b >= 0);\n if (!a.L && b < gf) {\n if (a.Q == a.ya && a.g + b >= 32 && (a.L = 1, a.g + b > 32)) return c;\n c = a.T >> a.g & hf[b];\n a.g += b;\n a.g >= 8 && a.g >= 8 && Sb(a);\n } else a.fa = 1;\n return c;\n }\n\n function ma(a) {\n return a.Pa == a.gb;\n }\n\n function nd(a, b) {\n $(a != p);\n if (b == 0) return 0;\n a.gb = 2 * b - 1;\n a.Y = ld(a.gb, jf);\n if (a.Y == p) return 0;\n a.Y[0].s = -1;\n return a.Pa = 1;\n }\n\n function ja(a) {\n a != p && (a.Y = p, a.Y = p, a.gb = 0, a.Pa = 0);\n }\n\n function jc(a, b, c, d) {\n for (var e = a.Y, g = 0, k = +a.gb; d-- > 0;) {\n if (g >= k) return 0;\n if (e[g].s < 0) {\n if (ma(a)) return 0;\n const h = a;\n const n = h.Y;\n const l = +h.Pa;\n e[g].s = l - g;\n h.Pa += 2;\n n[l + 0].s = -1;\n n[l + 1].s = -1;\n } else if (e[g].s == 0) return 0;\n g += e[g].s + (c >> d & 1);\n }\n if (e[g].s < 0) e[g].s = 0;\n else if (e[g].s != 0) return 0;\n e[g].kc = b;\n return 1;\n }\n\n function od(a, b, c) {\n var d = s;\n let e = 0;\n let g = 0;\n $(a != p);\n $(b != p);\n for (d = 0; d < c; ++d) b[d] > 0 && (++e, g = d);\n if (!nd(a, e)) return 0;\n if (e == 1) return g < 0 || g >= c ? (ja(a), 0) : jc(a, g, 0, 0);\n e = 0;\n g = U(c, s);\n if (g == p) return (e = e && ma(a)) || ja(a), e;\n var k = s;\n var k = s;\n var d = U(Tb + 1, 0);\n let h = s;\n const n = U(Tb + 1, 0);\n let l = 0;\n $(b != p);\n $(c > 0);\n $(g != p);\n for (k = 0; k < c; ++k) b[k] > l && (l = b[k]);\n if (l > Tb) d = 0;\n else {\n for (k = 0; k < c; ++k) ++d[b[k]];\n h = d[0] = 0;\n n[0] = -1;\n for (k = 1; k <= l; ++k) h = h + d[k - 1] << 1, n[k] = h;\n for (k = 0; k < c; ++k) g[k] = b[k] > 0 ? n[b[k]]++ : pd;\n d = 1;\n }\n if (!d) return (e = e && ma(a)) || ja(a), e;\n for (d = 0; d < c; ++d) {\n if (b[d] > 0 && !jc(a, d, g[d], b[d])) {\n return (e = e && ma(a)) || ja(a), e;\n }\n }\n (e = ma(a)) || ja(a);\n return e;\n }\n\n function Ea(a, b, c, d, e, g, k) {\n for (var h = s, h = 0; h < k; ++h) e[g + h] = a[b + h] + c[d + h] & 255;\n }\n\n function qd(a, b, c) {\n const d = a.P.l;\n if (!(c = b < 0 || c < 0 || b + c > a.P.v)) {\n if (c = b == 0) {\n a: {\n let e = a.Ga;\n var g = a.G;\n var k = a.ub;\n c = a.P.l;\n let h = a.P.v;\n const n = a.Xb;\n var l = [p];\n let m = p;\n let f = h * c;\n var q = p;\n var r = p;\n var r = 'WEBP_FILTER_TYPE';\n let u = s;\n var l = s;\n var v = 0;\n let C = s;\n $(c > 0 && h > 0 && d >= c);\n $(e != p && n != p);\n if (k <= Ub) c = 0;\n else if (C = e[g + 0] >> 0 & 3, r = e[g + 0] >> 2 & 3, u = e[g + 0] >> 4 & 3, l = e[g + 0] >> 6 & 3, C < kc || C > kf || r >= lf || u > rd || l != 0) c = 0;\n else {\n if (C == kc) v = k >= f, l = e, m = g + Ub;\n else {\n l = U(f, 0);\n m = 0;\n if (l\n == p) {\n c = 0;\n break a;\n }\n var v = g + Ub;\n var k = k - Ub;\n var g = l;\n var q = M(Vb);\n let A = 0;\n const z = sd();\n z == p ? v = 0 : (z.l = c, z.v = h, z.N = q, td(na), q.put = ud, q.Mb = vd, q.Pb = wd, q.ka = p, q.ka = g, q.fd = 0, q.width = c, q.height = h, z.a = L, Rb(z.o, e, v, k), z.Wa = Cb, Ka(c, h, 1, z, p) && xd(z, c) && (z.Wa = Db, A = lc(z, z.V, z.Ha, z.l, z.v, mf)), z != p && sa(z), v = A);\n }\n if (v) {\n e = nf[r];\n e != p ? (q = U(f, 0), r = 0, q == p && (v = 0, C != kc && (m = l = p)), e(l, m, c, h, 1, c, q, r), f = q, C = r) : (f = l, C = m);\n for (e = 0; h-- > 0;) N(n, e, f, C, c), C += c, e += d;\n u == rd && (v = l == p || m <= 0 || c <= 0 ? 0 : 1);\n }\n c = v;\n }\n }\n c = !c;\n }\n }\n return c ? p : b == 0 ? a.Xb : +b * d;\n }\n\n function of(a) {\n let b = a.width;\n const c = a.height;\n let d = a.J;\n if (b <= 0 || c <= 0 || !(d >= Qa && d < Cc)) return ta;\n if (!a.Fc && a.Jb == p) {\n var e = p;\n var g = 0;\n var k = 0;\n var h = 0;\n var n = 0;\n var e = bb;\n var l = b * yd[d];\n var m = l * c;\n d < ua || (g = parseInt((b + 1) / 2, 10), h = g * parseInt((c + 1) / 2, 10), d == Ra && (k = b, n = k * c));\n e = m + 2 * h + n;\n if (e != e) return ta;\n e = U(e, 205);\n if (e == p) return cb;\n a.Jb = e;\n a.jc = p;\n d < ua ? (b = a.c.RGBA, b.ma = e, b.Sa = p, b.f = l, b.size = m) : (b = a.c.Va, b.y = e, b.D = p, b.F = l, b.Wc = m, b.c = e, b.B = p + m, b.nb = g, b.Rc = h, b.S = e, b.C = p + m + h, b.rb = g, b.Uc = h, d == Ra && (b.p = e, b.q = p + m + 2 * h), b.Wb = n, b.Fa = k);\n }\n d = 1;\n g = a.J;\n k = a.width;\n h = a.height;\n g >= Qa && g < Cc ? g < ua ? (a = a.c.RGBA, d\n &= a.f * h <= a.size, d &= a.f >= k * yd[g], d &= a.ma != p) : (a = a.c.Va, n = a.nb * parseInt((h + 1) / 2, 10), l = a.rb * parseInt((h + 1) / 2, 10), m = a.Fa * h, d &= a.F * h <= a.Wc, d &= n <= a.Rc, d &= l <= a.Uc, d &= m <= a.Wb, d &= a.F >= k, d &= a.nb >= parseInt((k + 1) / 2, 10), d &= a.rb >= parseInt((k + 1) / 2, 10), d &= a.y != p, d &= a.c != p, d &= a.S != p, g == Ra && (d &= a.Fa >= k, d &= m <= a.Wb, d &= a.p != p)) : d = 0;\n return d ? L : ta;\n }\n\n function zd(a, b, c, d) {\n if (d == p || a <= 0 || b <= 0) return ta;\n if (c != p) {\n if (c.Ua) {\n const e = c.wc;\n const g = c.vc;\n const k = c.t & -2;\n const h = c.k & -2;\n if (k < 0 || h < 0 || e <= 0 || g <= 0 || k + e > a || h + g > b) return ta;\n a = e;\n b = g;\n }\n if (c.I) {\n if (c.Ba <= 0\n || c.Aa <= 0) return ta;\n a = c.Ba;\n b = c.Aa;\n }\n }\n d.width = a;\n d.height = b;\n return of(d);\n }\n\n function mb(a) {\n return !(a & -256) ? a : a < 0 ? 0 : 255;\n }\n\n function Ad(a, b, c, d) {\n const e = U(16, 0);\n let g;\n g = 0;\n let k;\n for (k = 0; k < 4; ++k) {\n var h = a[b + 0] + a[b + 8];\n var n = a[b + 0] - a[b + 8];\n var l = (a[b + 4] * Wb >> 16) - (a[b + 12] * Xb >> 16);\n var m = (a[b + 4] * Xb >> 16) + (a[b + 12] * Wb >> 16);\n e[g + 0] = h + m;\n e[g + 1] = n + l;\n e[g + 2] = n - l;\n e[g + 3] = h - m;\n g += 4;\n b++;\n }\n for (k = g = 0; k < 4; ++k) {\n a = e[g + 0] + 4, h = a + e[g + 8], n = a - e[g + 8], l = (e[g + 4] * Wb >> 16) - (e[g + 12] * Xb >> 16), m = (e[g + 4] * Xb >> 16) + (e[g + 12] * Wb >> 16), c[d + 0 + 0 * f] = mb(c[d + 0 + 0 * f] + (h + m >> 3)), c[d + 1 + 0 * f] = mb(c[d\n + 1 + 0 * f] + (n + l >> 3)), c[d + 2 + 0 * f] = mb(c[d + 2 + 0 * f] + (n - l >> 3)), c[d + 3 + 0 * f] = mb(c[d + 3 + 0 * f] + (h - m >> 3)), g++, d += f;\n }\n }\n\n function pf(a, b, c, d, e) {\n Ad(a, b, c, d);\n e && Ad(a, b + 16, c, d + 4);\n }\n\n function qf(a, b, c, d) {\n mc(a, b + 0, c, d + 0, 1);\n mc(a, b + 32, c, d + 4 * f, 1);\n }\n\n function nc(a, b, c, d) {\n a = a[b + 0] + 4;\n let e;\n for (e = 0; e < 4; ++e) for (b = 0; b < 4; ++b) c[d + b + e * f] = mb(c[d + b + e * f] + (a >> 3));\n }\n\n function rf(a, b, c, d) {\n a[b + 0] && nc(a, b + 0, c, d + 0);\n a[b + 16] && nc(a, b + 16, c, d + 4);\n a[b + 32] && nc(a, b + 32, c, d + 4 * f);\n a[b + 48] && nc(a, b + 48, c, d + 4 * f + 4);\n }\n\n function Dc(a, b, c) {\n const d = b - f;\n const e = oa;\n const g = 255 - a[d - 1];\n let k;\n for (k = 0; k\n < c; ++k) {\n const h = e;\n const n = g + a[b - 1];\n var l;\n for (l = 0; l < c; ++l) a[b + l] = h[n + a[d + l]];\n b += f;\n }\n }\n\n function Yb(a, b, c) {\n let d;\n for (d = 0; d < 16; ++d) for (i = 0; i < 16; ++i) b[c + d * f + i] = a;\n }\n\n function y(a, b, c) {\n return a + 2 * b + c + 2 >> 2;\n }\n\n function Zb(a, b, c) {\n let d; let\n e;\n for (d = 0; d < 8; ++d) for (e = 0; e < 8; ++e) b[c + e + d * f] = a;\n }\n\n function nb(a, b, c) {\n const d = a[b - c];\n const e = a[b + 0];\n const g = 3 * (e - d) + sc[1020 + a[b - 2 * c] - a[b + c]];\n const k = oc[112 + (g + 4 >> 3)];\n a[b - c] = oa[255 + d + oc[112 + (g + 3 >> 3)]];\n a[b + 0] = oa[255 + e - k];\n }\n\n function Bd(a, b, c, d) {\n const e = a[b + 0];\n const g = a[b + c];\n return va[255 + a[b - 2 * c] - a[b - c]] > d || va[255 + g - e] > d;\n }\n\n function Cd(a,\n b, c, d, e) {\n const g = a[b - 3 * c];\n const k = a[b - 2 * c];\n const h = a[b - c];\n const n = a[b + 0];\n const l = a[b + c];\n const m = a[b + 2 * c];\n const f = a[b + 3 * c];\n return 2 * va[255 + h - n] + tc[255 + k - l] > d ? 0 : va[255 + a[b - 4 * c] - g] <= e && va[255 + g - k] <= e && va[255 + k - h] <= e && va[255 + f - m] <= e && va[255 + m - l] <= e && va[255 + l - n] <= e;\n }\n\n function Dd(a, b, c, d) {\n let e;\n for (e = 0; e < 16; ++e) 2 * va[255 + a[b + e - c] - a[b + e + 0]] + tc[255 + a[b + e - 2 * c] - a[b + e + c]] <= d && nb(a, b + e, c);\n }\n\n function Ed(a, b, c, d) {\n let e;\n for (e = 0; e < 16; ++e) 2 * va[255 + a[b + e * c - 1] - a[b + e * c + 0]] + tc[255 + a[b + e * c - 2] - a[b + e * c + 1]] <= d && nb(a, b + e * c, 1);\n }\n\n function sf(a, b, c, d) {\n let e;\n for (e = 3; e > 0; --e) {\n b\n += 4 * c, Dd(a, b + 0, c, d);\n }\n }\n\n function tf(a, b, c, d) {\n let e;\n for (e = 3; e > 0; --e) b += 4, Ed(a, b + 0, c, d);\n }\n\n function Fa(a, b, c, d, e, g, k, h) {\n for (; e-- > 0;) {\n if (Cd(a, b + 0, c, g, k)) {\n if (Bd(a, b + 0, c, h)) nb(a, b + 0, c);\n else {\n const n = a;\n const l = b + 0;\n const m = c;\n const f = n[l - 2 * m];\n const q = n[l - m];\n const r = n[l + 0];\n const u = n[l + m];\n const v = n[l + 2 * m];\n var C = sc[1020 + 3 * (r - q) + sc[1020 + f - u]];\n const A = 27 * C + 63 >> 7;\n const z = 18 * C + 63 >> 7;\n var C = 9 * C + 63 >> 7;\n n[l - 3 * m] = oa[255 + n[l - 3 * m] + C];\n n[l - 2 * m] = oa[255 + f + z];\n n[l - m] = oa[255 + q + A];\n n[l + 0] = oa[255 + r - A];\n n[l + m] = oa[255 + u - z];\n n[l + 2 * m] = oa[255 + v - C];\n }\n }\n b += d;\n }\n }\n\n function Ga(a, b, c, d, e, g, k, h) {\n for (; e-- > 0;) {\n if (Cd(a, b + 0, c,\n g, k)) {\n if (Bd(a, b + 0, c, h)) nb(a, b + 0, c);\n else {\n const n = a;\n const l = b + 0;\n const m = c;\n const f = n[l - m];\n const q = n[l + 0];\n const r = n[l + m];\n var u = 3 * (q - f);\n const v = oc[112 + (u + 4 >> 3)];\n var u = oc[112 + (u + 3 >> 3)];\n const C = v + 1 >> 1;\n n[l - 2 * m] = oa[255 + n[l - 2 * m] + C];\n n[l - m] = oa[255 + f + u];\n n[l + 0] = oa[255 + q - v];\n n[l + m] = oa[255 + r - C];\n }\n }\n b += d;\n }\n }\n\n function uf(a, b, c, d, e, g) {\n Fa(a, b + 0, c, 1, 16, d, e, g);\n }\n\n function vf(a, b, c, d, e, g) {\n Fa(a, b + 0, 1, c, 16, d, e, g);\n }\n\n function wf(a, b, c, d, e, g) {\n let k;\n for (k = 3; k > 0; --k) b += 4 * c, Ga(a, b + 0, c, 1, 16, d, e, g);\n }\n\n function xf(a, b, c, d, e, g) {\n let k;\n for (k = 3; k > 0; --k) b += 4, Ga(a, b + 0, 1, c, 16, d, e, g);\n }\n\n function yf(a, b, c, d, e,\n g, k, h) {\n Fa(a, b, e, 1, 8, g, k, h);\n Fa(c, d, e, 1, 8, g, k, h);\n }\n\n function zf(a, b, c, d, e, g, k, h) {\n Fa(a, b, 1, e, 8, g, k, h);\n Fa(c, d, 1, e, 8, g, k, h);\n }\n\n function Af(a, b, c, d, e, g, k, h) {\n Ga(a, b + 4 * e, e, 1, 8, g, k, h);\n Ga(c, d + 4 * e, e, 1, 8, g, k, h);\n }\n\n function Bf(a, b, c, d, e, g, k, h) {\n Ga(a, b + 4, 1, e, 8, g, k, h);\n Ga(c, d + 4, 1, e, 8, g, k, h);\n }\n\n function Fd(a, b) {\n return b == $b ? a.i == 0 ? a.d == 0 ? Cf : Df : a.d == 0 ? Ef : $b : b;\n }\n\n function Ec(a, b, c, d) {\n for (i = 0; i < 4; ++i) a[b + i] = c[d + i];\n }\n\n function wa(a, b) {\n return a < 0 ? 0 : a > b ? b : a;\n }\n\n function Gd(a) {\n a.a = 'VP8_STATUS_OK';\n a.xc = 'OK';\n }\n\n function td(a) {\n a >>> 8 != na >>> 8 && alert('mismatch error');\n }\n\n function Y(a, b, c) {\n a.a == L && (a.a = b, a.xc = c, a.za = 0);\n // alert(b + \": \" + c);\n return 0;\n }\n\n function Hd(a, b) {\n let c = [0];\n let d = x;\n var e = [Mb];\n var g = M(Id);\n var k = M(Jd);\n let h = M(Fc);\n var e = 'VP8StatusCode';\n var g = M(Gc);\n if (a == p) return alert('(dec == null)'), 0;\n Gd(a);\n if (b == p) return Y(a, 'VP8_STATUS_INVALID_PARAM', 'null VP8Io passed to VP8GetHeaders()');\n g.data = b.data;\n g.b = b.b;\n g.e = b.e;\n g.b = [g.b];\n g.e = [g.e];\n g = [g];\n e = Kd(g);\n if (e != L) return Y(a, e, 'Incorrect/incomplete header.');\n g = g[0];\n g.b = g.b[0];\n g.e = g.e[0];\n if (g.ia) return Y(a, W, 'Unexpected lossless format encountered.');\n a.Ga == p && ($(a.ub == 0), a.Ga = g.$, a.G = g.G, a.ub = g.pa);\n d = g.data;\n c = g.b + g.offset;\n e = g.e - g.offset;\n $(g.e >= g.offset);\n if (e[0] < 4) return Y(a, Z, 'Truncated header.');\n h = d[c + 0] | d[c + 1] << 8 | d[c + 2] << 16;\n g = a.Ac;\n g.fb = !(h & 1) + 0;\n g.Jc = h >> 1 & 7;\n g.Nc = h >> 4 & 1;\n g.Ra = h >> 5;\n if (g.Jc > 3) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'Incorrect keyframe parameters.');\n if (!g.Nc) return Y(a, 'VP8_STATUS_UNSUPPORTED_FEATURE', 'Frame not displayable.');\n c += 3;\n e -= 3;\n k = a.P;\n if (g.fb) {\n if (e < 7) return Y(a, 'VP8_STATUS_NOT_ENOUGH_DATA', 'cannot parse picture header');\n if (!(e\n >= 3 && d[c + 0] == 157 && d[c + 1] == 1 && d[c + 2] == 42)) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'Bad code word');\n k.l = (d[c + 4] << 8 | d[c + 3]) & 16383;\n k.gd = d[c + 4] >> 6;\n k.v = (d[c + 6] << 8 | d[c + 5]) & 16383;\n k.hd = d[c + 6] >> 6;\n c += 7;\n e -= 7;\n a.Ma = k.l + 15 >> 4;\n a.hb = k.v + 15 >> 4;\n b.width = k.l;\n b.height = k.v;\n b.I = 0;\n b.Ua = 0;\n b.k = 0;\n b.t = 0;\n b.Ka = b.width;\n b.K = b.height;\n b.m = b.width;\n b.h = b.height;\n h = a.R;\n for (i = 0; i < h.Ta.length; ++i) h.Ta[i] = 255;\n h.z = M(Ff);\n h = a.Ca;\n $(h != p);\n h.pb = 0;\n h.ob = 0;\n h.tb = 1;\n for (i = 0; i < h.Kb.length; ++i) h.Kb[i] = 0;\n for (i = 0; i < h.Cb.length; ++i) h.Cb[i] = 0;\n a.Lb = 0;\n }\n if (g.Ra\n > e) return Y(a, 'VP8_STATUS_NOT_ENOUGH_DATA', 'bad partition length');\n h = a.o;\n D(h, d, c, c + g.Ra);\n c += g.Ra;\n e -= g.Ra;\n g.fb && (k.uc = G(h), k.$c = G(h));\n var k = h;\n var n = a.Ca;\n let l = a.R;\n $(k != p);\n $(n != p);\n n.pb = G(k);\n if (n.pb) {\n n.ob = G(k);\n if (G(k)) {\n var m;\n n.tb = G(k);\n for (m = 0; m < xa; ++m) n.Kb[m] = G(k) ? ga(k, 7) : 0;\n for (m = 0; m < xa; ++m) n.Cb[m] = G(k) ? ga(k, 6) : 0;\n }\n if (n.ob) for (m = 0; m < Ld; ++m) l.Ta[m] = G(k) ? S(k, 8) : 255;\n } else n.ob = 0;\n if (k.Ab) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'cannot parse segment header');\n k = h;\n n = a.ga;\n n.Oc = G(k);\n n.Fb = S(k, 6);\n n.kb = S(k, 3);\n n.oc = G(k);\n if (n.oc\n && G(k)) {\n for (l = 0; l < Hc; ++l) G(k) && (n.Lc[l] = ga(k, 6));\n for (l = 0; l < Gf; ++l) G(k) && (n.Gc[l] = ga(k, 6));\n }\n a.A = n.Fb == 0 ? 0 : n.Oc ? 1 : 2;\n if (a.A > 0) {\n if (a.Ca.pb) for (l = 0; l < xa; ++l) m = a.Ca.Cb[l], a.Ca.tb || (m += n.Fb), a.Zb[l] = m;\n else a.Zb[0] = n.Fb;\n }\n if (k.Ab) return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'cannot parse filter header');\n var k = d;\n var f = c;\n var n = f;\n var e = f + e;\n m = 0;\n let q = s;\n let r = s;\n a.Hb = 1 << S(a.o, 2);\n q = a.Hb - 1;\n l = k;\n m = f + 3 * q;\n if (e < m) e = 'VP8_STATUS_NOT_ENOUGH_DATA';\n else {\n for (r = 0; r < q; ++r) {\n var f = l;\n var u = m + (k[n + 0] | k[n + 1] << 8 | k[n + 2] << 16);\n u > e && (f = k);\n D(a.ic[+r], l, m, u);\n l = f;\n m = u;\n n += 3;\n }\n D(a.ic[+q], l, m, e);\n e = m < e ? 'VP8_STATUS_OK' : 'VP8_STATUS_SUSPENDED';\n }\n if (e != 'VP8_STATUS_OK') return Y(a, 'VP8_STATUS_BITSTREAM_ERROR', 'cannot parse partitions');\n q = a.o;\n e = S(q, 7);\n k = G(q) ? ga(q, 4) : 0;\n n = G(q) ? ga(q, 4) : 0;\n l = G(q) ? ga(q, 4) : 0;\n m = G(q) ? ga(q, 4) : 0;\n q = G(q) ? ga(q, 4) : 0;\n r = a.Ca;\n f = s;\n for (f = 0; f < xa; ++f) {\n u = s;\n if (r.pb) u = r.Kb[f], r.tb || (u += e);\n else if (f > 0) {\n a.yb[f] = a.yb[0];\n continue;\n } else u = e;\n const v = a.yb[f];\n v.sc[0] = Ic[wa(u + k, 127)];\n v.sc[1] = Jc[wa(u + 0, 127)];\n v.sb[0] = 2 * Ic[wa(u + n, 127)];\n v.sb[1] = 101581 * Jc[wa(u + l, 127)] >> 16;\n v.sb[1] < 8\n && (v.sb[1] = 8);\n v.qc[0] = Ic[wa(u + m, 117)];\n v.qc[1] = Jc[wa(u + q, 127)];\n }\n if (g.fb) a.Zc = 259;\n else return Y(a, Hf, 'Not a key frame.');\n G(h);\n e = a.R;\n for (k = 0; k < Md; ++k) for (n = 0; n < Nd; ++n) for (l = 0; l < Kc; ++l) for (m = 0; m < Lc; ++m) w(h, If[k][n][l][m]) && (e.z[k][n][l][m] = S(h, 8));\n a.pc = G(h);\n a.pc && (a.Pc = S(h, 8));\n if (a.P.uc) {\n c -= 8;\n h = Mb;\n if (g.Ra < 8 || d[c + 8 - 1] != 1) return Y(a, W, 'RIFF: Inconsistent extra information.');\n h = d[c + 0] << 0 | d[c + 1] << 8 | d[c + 2] << 16;\n a.fc = h;\n a.dd = p;\n a.cd = d[c + 3];\n }\n return a.za = 1;\n }\n\n function Mc(a, b, c, d, e, g) {\n let k = b[e][c];\n if (!w(a, k[0])) return 0;\n for (;;) {\n ++e;\n if (w(a, k[1])) {\n var h;\n if (w(a, k[2])) {\n if (w(a, k[3])) {\n if (w(a, k[6])) {\n h = x;\n c = w(a, k[8]);\n k = w(a, k[9 + c]);\n k = 2 * c + k;\n c = 0;\n h = Jf[k];\n var n;\n for (n = 0; n < h.length - 1; ++n) c += c + w(a, h[n]);\n c += 3 + (8 << k);\n } else w(a, k[7]) ? (c = 7 + 2 * w(a, 165), c += w(a, 145)) : c = 5 + w(a, 159);\n } else c = w(a, k[4]) ? 3 + w(a, k[5]) : 2;\n k = b[Nc[e]][2];\n } else k = b[Nc[e]][1], c = 1;\n h = Kf[e - 1];\n g[g[g.length - 1] + h] = (w(a, 128) ? -c : c) * d[(h > 0) + 0];\n if (e == 16 || !w(a, k[0])) return e;\n } else k = b[Nc[e]][0];\n if (e == 16) return 16;\n }\n }\n\n function ob(a, b) {\n return ((16777216 * a[0] + 65536 * a[1] + 256 * a[2] + 1 * a[3]) * Lf\n & 4278190080) >> b;\n }\n\n function Mf(a, b) {\n let c = 0;\n if (a == p) return 0;\n if (b == p) return Y(a, 'VP8_STATUS_INVALID_PARAM', 'NULL VP8Io parameter in VP8Decode().');\n if (!a.za && !Hd(a, b)) return 0;\n $(a.za);\n let d;\n if (b.Mb && !b.Mb(b)) Y(a, Nf, 'Frame setup failed'), d = a.a;\n else {\n b.Za && (a.A = 0);\n const e = uc[a.A];\n a.A == 2 ? (a.lb = 0, a.mb = 0) : (a.lb = b.t - e >> 4, a.mb = b.k - e >> 4, a.lb < 0 && (a.lb = 0), a.mb < 0 && (a.mb = 0));\n a.Ya = b.K + 15 + e >> 4;\n a.wb = b.Ka + 15 + e >> 4;\n a.wb > a.Ma && (a.wb = a.Ma);\n a.Ya > a.hb && (a.Ya = a.hb);\n d = L;\n }\n if (c = d == L) {\n if (c) {\n let g;\n b: {\n a.Ja = 0;\n if (a.qb) {\n const k = a.rc;\n if (!WebPWorkerReset(k)) {\n g = Y(a, cb, 'thread initialization failed.');\n break b;\n }\n k.Qd = a;\n k.Rd = a.oa.N;\n k.Ud = FinishRow;\n a.jb = a.A > 0 ? Od : Od - 1;\n } else a.jb = Of;\n g = 1;\n }\n let h;\n if (!(h = !g)) {\n let n;\n b: {\n const l = a.jb;\n const m = a.Ma;\n const t = 4 * m;\n const q = 32 * m;\n const r = m + 1;\n const u = a.A > 0 ? m * (a.qb ? 2 : 1) : 0;\n const v = Pf;\n const C = q * (16 * l + parseInt(3 * uc[a.A] / 2, 10));\n const A = a.Ga != p ? a.P.l * a.P.v : 0;\n const z = t + q + r + u + v + 384 + C + A + Pd;\n if (z != z) n = 0;\n else {\n if (z > a.Gb) {\n a.ib = 0;\n a.Gb = 0;\n if (a.ib == p) {\n n = Y(a, 'VP8_STATUS_OUT_OF_MEMORY', 'no memory during frame initialization.');\n break b;\n }\n a.Gb = z;\n }\n a.dc = 205;\n a.Xc = rc(205, 16 * m);\n a.Sc = rc(205, 8 * m);\n a.Vc = rc(205, 8 * m);\n a.M = u ? ic(Oc, u) : p;\n a.Sd = u ? 0 : p;\n a.oa.ha = 0;\n a.oa.M = a.M;\n $((v & Pd) == 0);\n a.Ea = rc(205, 1 * v);\n a.z = -12851;\n a.H = 16 * m;\n a.r = 8 * m;\n const Ha = uc[a.A];\n const G = Ha * a.H;\n const y = Ha / 2 * a.r;\n a.ca = U(C, 205);\n a.da = +G;\n a.aa = a.ca;\n a.ba = a.da + 16 * l * a.H + y;\n a.ra = a.aa;\n a.sa = a.ba + 8 * l * a.r + y;\n a.Xb = A ? U(A, x) : p;\n a.La = ic(Qd, r);\n a.dc = rc($b, t);\n n = 1;\n }\n }\n h = !n;\n }\n if (h) c = 0;\n else {\n b.width = a.P.l;\n b.height = a.P.v;\n b.w = 0;\n b.y = a.ca;\n b.D = a.da;\n b.c = a.aa;\n b.B = a.ba;\n b.S = a.ra;\n b.C = a.sa;\n b.F = a.H;\n b.Da = a.r;\n b.p = p;\n b.q = p;\n if (!Rd) {\n let B;\n for (B = -255; B <= 255; ++B) va[255 + B] = B < 0 ? -B : B, tc[255 + B] = va[255 + B] >> 1;\n for (B = -1020; B\n <= 1020; ++B) sc[1020 + B] = B < -128 ? -128 : B > 127 ? 127 : B;\n for (B = -112; B <= 112; ++B) oc[112 + B] = B < -16 ? -16 : B > 15 ? 15 : B;\n for (B = -255; B <= 510; ++B) oa[255 + B] = B < 0 ? 0 : B > 255 ? 255 : B;\n Rd = 1;\n }\n mc = pf;\n Pc = qf;\n Qc = nc;\n Rc = rf;\n Sd = uf;\n Td = vf;\n Ud = yf;\n Vd = zf;\n Wd = wf;\n Xd = xf;\n Yd = Af;\n Zd = Bf;\n $d = Dd;\n ae = Ed;\n be = sf;\n ce = tf;\n c = 1;\n }\n }\n if (c) {\n a: {\n for (a.d = 0; a.d < a.Ya; ++a.d) {\n const Qf = a.ic[a.d & a.Hb - 1];\n const db = a;\n const F = db.La[0];\n F.X = 0;\n F.ua = 0;\n jd(db.cc, 0, $b, db.cc.length);\n db.W = (db.A > 0 && db.d >= db.mb && db.d <= db.Ya) + 0;\n for (a.i = 0; a.i < a.Ma; a.i++) {\n var D;\n const H = a;\n const T = Qf;\n const ya = H.o;\n const S = H.La[0];\n const J = H.La[1 + H.i];\n H.Ca.ob && (H.Lb = !w(ya,\n H.R.Ta[0]) ? 0 + w(ya, H.R.Ta[1]) : 2 + w(ya, H.R.Ta[2]));\n J.Nb = H.pc ? w(ya, H.Pc) : 0;\n const O = H.dc;\n O[O.length - 1] = 0 + 4 * H.i;\n const Sc = H.cc;\n H.wa = !w(ya, 145);\n if (H.wa) {\n for (var ga = H.Eb, ja = 0, Z = ca, Z = 0; Z < 4; ++Z) {\n var V = Sc[Z];\n var R;\n for (R = 0; R < 4; ++R) {\n const ta = Rf[O[O[O.length - 1] + R]][V];\n var za = 0;\n do za = Sf[2 * za + w(ya, ta[za])]; while (za > 0);\n V = -za;\n O[O[O.length - 1] + R] = V;\n ga[ja] = V;\n ja++;\n }\n Sc[Z] = V;\n }\n } else {\n var V = w(ya, 156) ? w(ya, 128) ? de : ee : w(ya, 163) ? fe : ge;\n H.Eb[0] = V;\n for (za = 0; za < 4; ++za) O[za + O[O.length - 1]] = V;\n for (za = 0; za < 4; ++za) Sc[za] = V;\n }\n H.Tc = !w(ya, 142) ? ge : !w(ya, 114) ? fe\n : w(ya, 183) ? de : ee;\n if (ya.Ab) D = 0;\n else {\n if (J.Nb) S.X = J.X = 0, H.wa || (S.ua = J.ua = 0), H.ja = 0, H.Oa = 0;\n else {\n let ia = ca;\n let ka = ca;\n var sa = ca;\n var wa = Tf;\n const Aa = H.yb[H.Lb];\n var aa = H.z;\n const ma = H.La[0];\n const ua = U(4, 0);\n const xa = U(4, 0);\n let ea = U(4, 0);\n let pb = U(4, 0);\n let na = 0;\n let Ba = 0;\n var pa = ca;\n let qa = ca;\n let Sa = ca;\n var aa = rc(0, 384);\n if (H.wa) sa = 0, wa = H.R.z[3];\n else {\n const ab = U(16, 0);\n var Ca = J.ua + ma.ua;\n J.ua = ma.ua = (Mc(T, H.R.z[1], Ca, Aa.sb, 0, ab) > 0) + 0;\n for (var sa = 1, wa = H.R.z[0], qb = ab, Ta = aa, La = U(16, s), X = s, X = 0; X < 4; ++X) {\n var Da = qb[0 + X] + qb[12 + X];\n var Ea = qb[4 + X] + qb[8 + X];\n var Fa = qb[4 + X] - qb[8 + X];\n var Ga = qb[0 + X] - qb[12 + X];\n La[0 + X] = Da + Ea;\n La[8\n + X] = Da - Ea;\n La[4 + X] = Ga + Fa;\n La[12 + X] = Ga - Fa;\n }\n for (X = 0; X < 4; ++X) {\n const Oa = Ta[Ta.length - 1];\n const lb = La[0 + 4 * X] + 3;\n var Da = lb + La[3 + 4 * X];\n var Ea = La[1 + 4 * X] + La[2 + 4 * X];\n var Fa = La[1 + 4 * X] - La[2 + 4 * X];\n var Ga = lb - La[3 + 4 * X];\n Ta[Oa + 0] = Da + Ea >> 3;\n Ta[Oa + 16] = Ga + Fa >> 3;\n Ta[Oa + 32] = Da - Ea >> 3;\n Ta[Oa + 48] = Ga - Fa >> 3;\n Ta[Ta.length - 1] += 64;\n }\n aa[aa.length - 1] = 0;\n }\n ea = Nb(vc[J.X & 15]);\n pb = Nb(vc[ma.X & 15]);\n for (qa = 0; qa < 4; ++qa) {\n for (var Eb = pb[qa], pa = 0; pa < 4; ++pa) {\n var Ca = Eb + ea[pa];\n var Ka = Mc(T, wa, Ca, Aa.sc, sa, aa);\n ea[pa] = Eb = (Ka > 0) + 0;\n xa[pa] = (aa[aa[aa.length - 1] + 0] != 0) + 0;\n ua[pa] = (Ka > 1) + 0;\n aa[aa.length\n - 1] += 16;\n }\n pb[qa] = Eb;\n Ba |= ob(xa, 24 - 4 * qa);\n na |= ob(ua, 24 - 4 * qa);\n }\n ia = ob(ea, 24);\n ka = ob(pb, 24);\n ea = Nb(vc[J.X >> 4]);\n pb = Nb(vc[ma.X >> 4]);\n for (Sa = 0; Sa < 4; Sa += 2) {\n for (qa = 0; qa < 2; ++qa) {\n Eb = pb[Sa + qa];\n for (pa = 0; pa < 2; ++pa) Ca = Eb + ea[Sa + pa], Ka = Mc(T, H.R.z[2], Ca, Aa.qc, 0, aa), ea[Sa + pa] = Eb = (Ka > 0) + 0, xa[2 * qa + pa] = (aa[aa[aa.length - 1] + 0] != 0) + 0, ua[2 * qa + pa] = (Ka > 1) + 0, aa[aa.length - 1] += 16;\n pb[Sa + qa] = Eb;\n }\n Ba |= ob(xa, 8 - 2 * Sa);\n na |= ob(ua, 8 - 2 * Sa);\n }\n ia |= ob(ea, 20);\n ka |= ob(pb, 20);\n J.X = ia;\n ma.X = ka;\n H.z = aa;\n H.Oa = na + 0;\n H.ja = na | Ba;\n J.Nb = !H.ja + 0;\n }\n D = !T.Ab;\n }\n if (!D) {\n c = Y(a, 'VP8_STATUS_NOT_ENOUGH_DATA',\n `Premature end-of-file encountered.${a.i} ${a.d}`);\n break a;\n }\n const P = a;\n const da = P.Ea;\n const Ma = Tc;\n const Ua = P.Ea;\n const Va = Uc;\n const Wa = P.Ea;\n const Xa = he;\n if (P.i > 0) {\n for (var ba = ca, ba = -1; ba < 16; ++ba) Ec(da, Ma + ba * f - 4, da, Ma + ba * f + 12);\n for (ba = -1; ba < 8; ++ba) Ec(Ua, Va + ba * f - 4, Ua, Va + ba * f + 4), Ec(Wa, Xa + ba * f - 4, Wa, Xa + ba * f + 4);\n } else {\n for (ba = 0; ba < 16; ++ba) da[Ma + ba * f - 1] = 129;\n for (ba = 0; ba < 8; ++ba) Ua[Va + ba * f - 1] = 129, Wa[Xa + ba * f - 1] = 129;\n P.d > 0 && (da[Ma - 1 - f] = Ua[Va - 1 - f] = Wa[Xa - 1 - f] = 129);\n }\n const Qa = P.Xc;\n const Ra = 16 * +P.i;\n const mb = P.Sc;\n const vb = 8 * +P.i;\n const wb = P.Vc;\n const xb = 8 * +P.i;\n const Za = P.z;\n let fa = ca;\n if (P.d > 0) {\n N(da, Ma - f, Qa, Ra,\n 16), N(Ua, Va - f, mb, vb, 8), N(Wa, Xa - f, wb, xb, 8);\n } else if (P.i == 0) {\n for (i = 0; i < 21; ++i) da[Ma - f - 1 + i] = 127;\n for (i = 0; i < 9; ++i) Ua[Va - f - 1 + i] = 127;\n for (i = 0; i < 9; ++i) Wa[Xa - f - 1 + i] = 127;\n }\n if (P.wa) {\n const Ya = Ma - f + 16;\n P.d > 0 && (P.i >= P.Ma - 1 ? da[Ya + 0] = da[Ya + 1] = da[Ya + 2] = da[Ya + 3] = Qa[Ra + 15] : N(da, Ya + 0, Qa, Ra + 16, 4));\n for (let Fb = 0; Fb < 4; ++Fb) da[Fb + Ya + 4 * f] = da[Fb + Ya + 4 * f] = da[Fb + Ya + 8 * f] = da[Fb + Ya + 12 * f] = da[Fb + Ya + 0];\n for (fa = 0; fa < 16; fa++) {\n var ac = da;\n var bc = Ma + ie[fa];\n Uf[P.Eb[fa]](ac, bc);\n P.Oa & 1 << fa ? mc(Za, 16 * +fa, ac, bc, 0) : P.ja & 1 << fa && Qc(Za, 16 * +fa, ac, bc);\n }\n } else {\n var $a = Fd(P, P.Eb[0]);\n Vf[$a](da, Ma);\n if (P.ja) for (fa = 0; fa < 16; fa++) ac = da, bc = Ma + ie[fa], P.Oa & 1 << fa ? mc(Za, 16 * +fa, ac, bc, 0) : P.ja & 1 << fa && Qc(Za, 16 * +fa, ac, bc);\n }\n $a = Fd(P, P.Tc);\n je[$a](Ua, Va);\n je[$a](Wa, Xa);\n if (P.ja & 983040) {\n const zb = P.z;\n var Pa = 256;\n P.Oa & 983040 ? Pc(zb, Pa, Ua, Va) : Rc(zb, Pa, Ua, Va);\n }\n if (P.ja & 15728640) {\n const Ab = P.z;\n var Pa = 320;\n P.Oa & 15728640 ? Pc(Ab, Pa, Wa, Xa) : Rc(Ab, Pa, Wa, Xa);\n }\n P.d < P.hb - 1 && (N(Qa, Ra, da, Ma + 15 * f, 16), N(mb, vb, Ua, Va + 7 * f, 8), N(wb, xb, Wa, Xa + 7 * f, 8));\n const Q = a;\n if (Q.A > 0) {\n const kb = Q.M[1 + Q.i];\n const Kb = Q.La[1 + Q.i].Nb;\n let ha = Q.Zb[Q.Lb];\n Q.ga.oc && (ha\n += Q.ga.Lc[0], Q.wa && (ha += Q.ga.Gc[0]));\n ha = ha < 0 ? 0 : ha > 63 ? 63 : ha;\n kb.zc = ha;\n Q.ga.kb > 0 && (ha = Q.ga.kb > 4 ? ha >> 2 : ha >> 1, ha > 9 - Q.ga.kb && (ha = 9 - Q.ga.kb));\n kb.yc = ha < 1 ? 1 : ha;\n kb.ab = (!Kb || Q.wa) + 0;\n }\n for (var Ia = ca, Bb = 8 * Q.Ja * Q.r, Qb = Q.ca, Ub = Q.da + 16 * Q.i + 16 * Q.Ja * Q.H, Wb = Q.aa, Xb = Q.ba + 8 * Q.i + Bb, Yb = Q.ra, Zb = Q.sa + 8 * Q.i + Bb, Ia = 0; Ia < 16; ++Ia) N(Qb, Ub + Ia * Q.H, Q.Ea, +Tc + Ia * f, 16);\n for (Ia = 0; Ia < 8; ++Ia) N(Wb, Xb + Ia * Q.r, Q.Ea, +Uc + Ia * f, 8), N(Yb, Zb + Ia * Q.r, Q.Ea, +he + Ia * f, 8);\n }\n const K = a;\n const I = b;\n var cc = 1;\n const eb = K.oa;\n if (K.qb) {\n const nb = K.rc;\n var cc = cc & WebPWorkerSync(nb);\n $(nb.a == OK);\n if (cc) {\n eb.N = I;\n eb.ha = K.Ja;\n eb.d = K.d;\n eb.W = K.W;\n if (eb.W) {\n const hc = eb.M;\n eb.M = K.M;\n K.M = hc;\n }\n WebPWorkerLaunch(nb);\n ++K.Ja == K.jb && (K.Ja = 0);\n }\n } else {\n eb.d = K.d;\n eb.W = K.W;\n b: {\n let Hb = 1;\n const rb = K.oa;\n const ib = uc[K.A];\n const yb = ib * K.H;\n const dc = parseInt(ib / 2) * K.r;\n const Ib = 16 * rb.ha * K.H;\n const jb = 8 * rb.ha * K.r;\n const Jb = K.ca;\n const Lb = K.da - yb + Ib;\n const Ob = K.aa;\n const Pb = K.ba - dc + jb;\n const Rb = K.ra;\n const Sb = K.sa - dc + jb;\n const jc = rb.d == 0;\n const Tb = (rb.d >= K.hb - 1) + 0;\n var ra = 16 * rb.d;\n let fb = 16 * (rb.d + 1);\n if (rb.W) {\n const pc = K;\n let wc = s;\n const kc = pc.oa.d;\n $(pc.oa.W);\n for (wc = pc.lb; wc < pc.wb; ++wc) {\n const Na = pc;\n const ec = wc;\n const Vb = kc;\n const xc = Na.oa;\n const gb = Na.H;\n const fc = xc.M[1 + ec];\n const sb = Na.ca;\n const tb = Na.da + 16 * xc.ha\n * gb + 16 * ec;\n const Gb = fc.zc;\n const hb = fc.yc;\n const Ja = 2 * Gb + hb;\n if (Gb != 0) {\n if (Na.A == 1) ec > 0 && ae(sb, tb, gb, Ja + 4), fc.ab && ce(sb, tb, gb, Ja), Vb > 0 && $d(sb, tb, gb, Ja + 4), fc.ab && be(sb, tb, gb, Ja);\n else {\n const gc = Na.r;\n const yc = Na.aa;\n const zc = Na.ba + 8 * xc.ha * gc + 8 * ec;\n const Ac = Na.ra;\n const Bc = Na.sa + 8 * xc.ha * gc + 8 * ec;\n const ub = Na.Ac.fb ? Gb >= 40 ? 2 : Gb >= 15 ? 1 : 0 : Gb >= 40 ? 3 : Gb >= 20 ? 2 : Gb >= 15 ? 1 : 0;\n ec > 0 && (Td(sb, tb, gb, Ja + 4, hb, ub), Vd(yc, zc, Ac, Bc, gc, Ja + 4, hb, ub));\n fc.ab && (Xd(sb, tb, gb, Ja, hb, ub), Zd(yc, zc, Ac, Bc, gc, Ja, hb, ub));\n Vb > 0 && (Sd(sb, tb, gb, Ja + 4, hb, ub), Ud(yc, zc, Ac, Bc, gc, Ja + 4, hb, ub));\n fc.ab && (Wd(sb, tb, gb,\n Ja, hb, ub), Yd(yc, zc, Ac, Bc, gc, Ja, hb, ub));\n }\n }\n }\n }\n if (I.put) {\n jc ? (I.y = K.ca, I.D = K.da + Ib, I.c = K.aa, I.B = K.ba + jb, I.S = K.ra, I.C = K.sa + jb) : (ra -= ib, I.y = Jb, I.D = Lb, I.c = Ob, I.B = Pb, I.S = Rb, I.C = Sb);\n Tb || (fb -= ib);\n fb > I.K && (fb = I.K);\n if (K.Ga != p && ra < fb && (ra == 0 ? (I.p = qd(K, ra, fb - ra), I.q = 0) : I.q = qd(K, ra, fb - ra), I.p == p)) {\n cc = Y(K, W, 'Could not decode alpha data.');\n break b;\n }\n if (ra < I.k) {\n const qc = I.k - ra;\n var ra = I.k;\n $(!(qc & 1));\n I.D += K.H * qc;\n I.B += K.r * (qc >> 1);\n I.C += K.r * (qc >> 1);\n I.p != p && (I.q += I.width * qc);\n }\n ra < fb && (I.D += I.t, I.B += I.t >> 1, I.C += I.t >> 1, I.p != p && (I.q += I.t),\n I.w = ra - I.k, I.m = I.Ka - I.t, I.h = fb - ra, Hb = I.put(I));\n }\n rb.ha + 1 == K.jb && !Tb && (N(K.ca, K.da - yb, Jb, Lb + 16 * K.H, yb), N(K.aa, K.ba - dc, Ob, Pb + 8 * K.r, dc), N(K.ra, K.sa - dc, Rb, Sb + 8 * K.r, dc));\n cc = Hb;\n }\n }\n if (!cc) {\n c = Y(a, 'VP8_STATUS_USER_ABORT', 'Output aborted.');\n break a;\n }\n }\n let Cb;\n if (!(Cb = a.qb && !WebPWorkerSync(a.rc))) {\n let Db;\n if (Db = a.fc > 0) $(a), $(a.fc > 0), Db = !1;\n Cb = Db;\n }\n c = Cb ? 0 : 1;\n }\n }\n const lc = c;\n b.Pb && b.Pb(b);\n c = lc & 1;\n }\n if (!c) return ke(a), 0;\n a.za = 0;\n return c;\n }\n\n function ke(a) {\n a != p && (a.ib && (a.ib = 0), a.ib = p, a.Gb = 0, a.za = 0);\n }\n\n function Aa(a, b) {\n return a + (1 << b) - 1 >> b;\n }\n\n function hc(a, b, c, d, e) {\n const g = vb[c] + wb[b] >> ea;\n b = xb[b];\n d[e + 0] = ia[a + Za[c] - J];\n d[e + 1] = ia[a + g - J];\n d[e + 2] = ia[a + b - J];\n }\n\n function le(a, b, c, d, e) {\n const g = vb[c] + wb[b] >> ea;\n b = xb[b];\n d[e + 0] = ia[a + Za[c] - J] & 248 | ia[a + g - J] >> 5;\n d[e + 1] = ia[a + g - J] << 3 & 224 | ia[a + b - J] >> 3;\n }\n\n function me(a, b, c, d, e) {\n d[e + 0] = 255;\n hc(a, b, c, d, e + 1);\n }\n\n function ne(a, b, c, d, e) {\n const g = xb[b];\n d[e + 0] = Hb[a + Za[c] - J] << 4 | Hb[a + (vb[c] + wb[b] >> ea) - J];\n d[e + 1] = 15 | Hb[a + g - J] << 4;\n }\n\n function Vc(a, b, c, d, e) {\n const g = Za[c];\n c = vb[c] + wb[b] >> ea;\n d[e + 0] = ia[a + xb[b] - J];\n d[e + 1] = ia[a + c - J];\n d[e + 2] = ia[a + g - J];\n }\n\n function oe(a, b, c, d, e) {\n Vc(a, b, c, d, e);\n d[e + 3] = 255;\n }\n\n function pe(a, b, c, d, e) {\n hc(a, b, c, d, e);\n d[e + 3] = 255;\n }\n\n function ib(a, b, c) {\n a[b] = ((((a[b] & 4278255360) >>> 0) + ((c & 4278255360) >>> 0) & 4278255360) >>> 0 | (a[b] & 16711935) + (c & 16711935) & 16711935) >>> 0;\n }\n\n function ka(a, b) {\n return (((a ^ b) & 4278124286) >>> 1) + ((a & b) >>> 0) >>> 0;\n }\n\n function $a(a) {\n return a < 256 && a > 0 ? a : a <= 0 ? 0 : ~a >> 24 & 255;\n }\n\n function yb(a, b) {\n return $a(a + parseInt((a - b) / 2, 10));\n }\n\n function Wc() {\n return qe;\n }\n\n function Xc(a, b) {\n a &= 255;\n b &= 255;\n a > 127 && (a -= 256);\n b > 127 && (b -= 256);\n return a * b >>> 5;\n }\n\n function re(a,\n b, c, d, e, g, k) {\n var h = s;\n const n = 8 >> a.n;\n const l = a.U;\n const f = a.u;\n if (n < 8) {\n a = (1 << a.n) - 1;\n for (var t = (1 << n) - 1, h = b; h < c; ++h) {\n b = 0;\n for (var q = s, q = 0; q < l; ++q) (q & a) == 0 && (b = d[e++] >> 8 & 255), g[k++] = f[b & t], b >>= n;\n }\n } else for (h = b; h < c; ++h) for (q = 0; q < l; ++q) g[k++] = f[d[e++] >> 8 & 255];\n }\n\n function se(a, b, c, d, e) {\n for (c = b + c; b < c;) {\n const g = a[b++];\n d[e++] = g >> 16 & 255;\n d[e++] = g >> 8 & 255;\n d[e++] = g >> 0 & 255;\n d[e++] = g >> 24 & 255;\n }\n }\n\n function te(a, b, c, d, e) {\n for (c = b + c; b < c;) {\n const g = a[b++];\n d[e++] = g >> 16 & 240 | g >> 12 & 15;\n d[e++] = g >> 0 & 240 | g >> 28 & 15;\n }\n }\n\n function Ib(a, b, c, d, e) {\n for (c = b + c; b < c;) {\n const g = a[b++];\n d[e++] = g >> 24 & 255;\n d[e++] = g >> 16 & 255;\n d[e++] = g >> 8 & 255;\n d[e++] = g >> 0 & 255;\n }\n }\n\n function ue(a, b, c, d) {\n if (T(a, 8) != ve) return 0;\n b[0] = T(a, we) + 1;\n c[0] = T(a, we) + 1;\n d[0] = T(a, 1);\n T(a, Wf);\n return 1;\n }\n\n function xe(a, b) {\n let c = s;\n if (a < 4) return a + 1;\n c = a - 2 >> 1;\n return (2 + (a & 1) << c) + T(b, c) + 1;\n }\n\n function Oa(a, b) {\n if (b.Q + 8 > b.ya) {\n var c = a.Y;\n var d = 0;\n for ($(c != p); c[d].s != 0;) {\n var e = c;\n var g = b;\n const k = g.T >> g.g & 1;\n g.L ? g.fa = 1 : (++g.g, g.g >= 8 && Sb(g), g.Q == g.ya && g.g == 32 && (g.L = 1));\n d = d + e[d].s + k;\n }\n return c[d].kc;\n }\n c = a.Y;\n d = 0;\n for ($(c != p); c[d].s != 0;) {\n e = c, g = b.T >> b.g & 1, ++b.g, d = d\n + e[d].s + g;\n }\n return c[d].kc;\n }\n\n function zb(a, b) {\n if (a != p) for (var c = s, d = s, c = 0; c < b; ++c) for (var e = a[c].va, d = 0; d < Yc; ++d) ja(e[d]);\n }\n\n function ye(a, b, c) {\n b = a.eb == 0 ? 0 : a.ac[a.bd + a.Ec * (c >> a.eb) + (b >> a.eb)];\n $(b < a.hc);\n return a.Db[+b];\n }\n\n function ze(a, b, c, d) {\n let e = a.Na;\n const g = a.O;\n const k = g + b;\n var h = c;\n var f = d;\n d = a.Xa;\n c = a.vb;\n for (N(d, c, h, f, a.l * b); e-- > 0;) {\n b = a.nc[e];\n let l = g;\n var m = k;\n var t = h;\n var q = f;\n var f = d;\n var h = c;\n $(l < m);\n $(m <= b.Vb);\n switch (b.Qc) {\n case Ae:\n t = 0;\n for (b = h + (m - l) * b.U; h < b;) {\n var m = f;\n var q = h;\n var r = m[q] >> 8 & 255;\n var u = (m[q] & 16711935) >>> 0;\n var u = u + (r << 16 | r);\n var u = u & 16711935;\n f[h++] = ((m[q] & 4278255360)\n >>> 0 | u) >>> 0;\n l == 32 && t++;\n }\n break;\n case Be:\n var v = b;\n var C = l;\n var t = m;\n var q = f;\n var r = h;\n var u = v.U;\n if (C == 0) {\n var A = s;\n ib(q, r, qe);\n for (A = 1; A < u; ++A) ib(q, r + A, q[r + A - 1]);\n r += u;\n ++C;\n }\n for (var z = (1 << v.n) - 1, Ha = Aa(u, v.n), w = v.u, v = +(C >> v.n) * Ha; C < t;) {\n var y = w;\n var B = v;\n let G = p;\n ib(q, r, q[r - u + 0]);\n G = Ce[y[B++] >> 8 & 15];\n for (A = 1; A < u; ++A) {\n let F = E;\n (A & z) == 0 && (G = Ce[y[B++] >> 8 & 15]);\n F = G(q[r + A - 1], q, r + A - u);\n ib(q, r + A, F);\n }\n r += u;\n ++C;\n (C & z) == 0 && (v += Ha);\n }\n m != b.Vb && (b = b.U, N(f, h - b, f, h + (m - l - 1) * b, b));\n break;\n case De:\n t = b.U;\n q = (1 << b.n) - 1;\n r = Aa(t, b.n);\n u = b.u;\n for (b = +(l >> b.n) * r; l < m;) {\n A = u;\n C = b;\n z = M(Xf);\n Ha = s;\n for (Ha = 0; Ha < t; ++Ha) (Ha & q) == 0 && (w = A[C++], v = z, v.Cc = w >> 0 & 255, v.Bc = w >> 8 & 255, v.Kc = w >> 16 & 255), w = f[h + Ha], v = w >>> 8, y = w >>> 16, B = w, y += Xc(z.Cc, v), y &= 255, B += Xc(z.Bc, v), B += Xc(z.Kc, y), B &= 255, f[h + Ha] = (w & 4278255360 | y << 16 | B) >>> 0;\n h += t;\n ++l;\n (l & q) == 0 && (b += r);\n }\n break;\n case Ee:\n t == f && b.n > 0 ? (t = (m - l) * Aa(b.U, b.n), q = h + (m - l) * b.U - t, memmove(f, q, f, h, t), re(b, l, m, f, q, f, h)) : re(b, l, m, t, q, f, h);\n }\n h = d;\n f = c;\n }\n }\n\n function Yf(a, b) {\n var c = a.V;\n var d = a.Ha + a.l * a.O;\n var e = b - a.O;\n if (!(e <= 0)) {\n ze(a, e, c, d);\n var g = a.N;\n var c = a.Xa;\n let k = [a.vb];\n var d = a.O;\n var e = b;\n var h = k;\n var f = g.width;\n $(d < e);\n $(g.t < g.Ka);\n e > g.K && (e = g.K);\n if (d < g.k) {\n var l = g.k - d;\n var d = g.k;\n h[0] += f * l;\n }\n d >= e ? d = 0 : (h[0] += g.t, g.w = d - g.k, g.m = g.Ka - g.t, g.h = e - d, d = 1);\n if (d) {\n k = k[0];\n d = a.Ib;\n e = g.width;\n if (d.J < ua) {\n var m = d.c.RGBA;\n var h = m.ma;\n let t = m.Sa + a.xa * m.f;\n if (g.I) c = EmitRescaledRows(a, c, k, e, g.h, h, t, m.f);\n else {\n for (var f = d.J, l = g.m, g = g.h, m = m.f, q = g; q-- > 0;) {\n const r = c;\n let u = k;\n let v = l;\n const C = h;\n let A = t;\n switch (f) {\n case Qa:\n for (v = u + v; u < v;) {\n var z = r[u++];\n C[A++] = z >> 16 & 255;\n C[A++] = z >> 8 & 255;\n C[A++] = z >> 0 & 255;\n }\n break;\n case jb:\n se(r, u, v, C, A);\n break;\n case Ob:\n se(r, u, v, C, A);\n WebPApplyAlphaMultiply(C, 0, v,\n 1, 0);\n break;\n case Zc:\n for (v = u + v; u < v;) z = r[u++], C[A++] = z >> 0 & 255, C[A++] = z >> 8 & 255, C[A++] = z >> 16 & 255;\n break;\n case Pa:\n Ib(r, u, v, C, A);\n break;\n case Pb:\n Ib(r, u, v, C, A);\n WebPApplyAlphaMultiply(C, 0, v, 1, 0);\n break;\n case Ab:\n Ib(r, u, v, C, A);\n break;\n case Bb:\n Ib(r, u, v, C, A);\n WebPApplyAlphaMultiply(C, 1, v, 1, 0);\n break;\n case kb:\n te(r, u, v, C, A);\n break;\n case Qb:\n te(r, u, v, C, A);\n WebPApplyAlphaMultiply4444(C, v, 1, 0);\n break;\n case Fe:\n for (v = u + v; u < v;) z = r[u++], C[A++] = z >> 16 & 248 | z >> 13 & 7, C[A++] = z >> 5 & 224 | z >> 3 & 31;\n break;\n default:\n $(0);\n }\n k += e;\n t += m;\n }\n c = g;\n }\n a.xa += c;\n } else {\n a.xa = g.I ? EmitRescaledRowsYUVA(a, c, k, e, g.h) : EmitRowsYUVA(a, c, k, e, g.m, g.h);\n }\n $(a.xa <= d.height);\n }\n a.O = b;\n $(a.O <= a.v);\n }\n }\n\n function lc(a, b, c, d, e, g) {\n let k = 1;\n let h = 0;\n let f = 0;\n const l = a.o;\n const m = a.cb;\n let t = m.Db;\n let q = c;\n let r = c;\n c += d * e;\n e = Ba + Ge;\n const u = e + m.xb;\n const v = m.xb > 0 ? m.Yb : p;\n const C = m.Dc;\n let A = !1;\n $(t != p);\n for (; !l.L && q < c;) {\n let z = s;\n A || ((h & C) == 0 && (t = ye(m, h, f)), Da(l), z = Oa(t.va[Zf], l));\n if (z < Ba || A) {\n if (!A) {\n var w = k = A = s;\n var y = s;\n Da(l);\n A = Oa(t.va[$f], l);\n k = z;\n Da(l);\n w = Oa(t.va[ag], l);\n Da(l);\n y = Oa(t.va[bg], l);\n b[q] = (y << 24 >>> 0) + (A << 16) + (k << 8) + w;\n }\n A = !1;\n ++q;\n ++h;\n if (h >= d && (h = 0, ++f, g != p && f\n % $c == 0 && g(a, f), v != p)) for (; r < q;) k = b[r++], v.ea[ad * k >>> v.bb] = k;\n } else if (z < e) {\n w = w = s;\n k = xe(z - Ba, l);\n z = Oa(t.va[cg], l);\n Da(l);\n w = xe(z, l);\n w > He ? w -= He : (z = dg[w - 1], z = (z >> 4) * d + (8 - (z & 15)), w = z >= 1 ? z : 1);\n z = s;\n for (z = 0; z < k; ++z) b[q + z] = b[q + z - w];\n q += k;\n for (h += k; h >= d;) h -= d, ++f, g != p && f % $c == 0 && g(a, f);\n if (q < c && (t = ye(m, h, f), v != p)) for (; r < q;) k = b[r++], v.ea[ad * k >>> v.bb] = k;\n } else if (z < u) {\n A = z - e;\n for ($(v != p); r < q;) z = b[r++], v.ea[ad * z >>> v.bb] = z;\n z = b;\n w = q;\n y = v;\n $(A <= -1 >>> y.bb);\n z[w] = y.ea[A];\n A = !0;\n continue;\n }(k = !l.fa) || End;\n }\n g != p && g(a, f);\n l.fa || !k || l.L && q < c ? (k = 0, a.a = !l.L ? W : Ie) : q == c && (a.Ob = Db);\n return k;\n }\n\n function bd(a) {\n $(a);\n a.ac = p;\n zb(a.Db, a.hc);\n const b = a.Yb;\n b != p && (b.ea = p, b.ea = p);\n $(a);\n }\n\n function sd() {\n const a = M(eg);\n if (a == p) return p;\n a.a = L;\n a.Wa = cd;\n a.Ob = cd;\n return a;\n }\n\n function sa(a) {\n let b = s;\n if (a != p) {\n bd(a.cb);\n a.V = p;\n a.V = p;\n for (b = 0; b < a.Na; ++b) {\n const c = a.nc[b];\n c.u = p;\n c.u = p;\n }\n a.Na = 0;\n a.Ub = 0;\n a.Mc = p;\n a.Mc = p;\n a.Ib = p;\n }\n }\n\n function Ka(a, b, c, d, e) {\n var g = 1;\n a = [a];\n b = [b];\n for (var k = d.o, h = d.cb, f = p, l = p, l = 0; ;) {\n if (c) {\n for (; g && T(k, 1);) {\n var m = a;\n var t = b;\n var q = d;\n var r = 1;\n var u = q.o;\n var g = q.nc[q.Na];\n var v = T(u, 2);\n if (q.Ub & 1 << v) g = 0;\n else {\n q.Ub\n |= 1 << v;\n g.Qc = v;\n g.U = m[0];\n g.Vb = t[0];\n g.u = [p];\n g.b = 0;\n ++q.Na;\n $(q.Na <= Je);\n switch (v) {\n case Be:\n case De:\n g.n = T(u, 3) + 2;\n r = Ka(Aa(g.U, g.n), Aa(g.Vb, g.n), 0, q, g.u);\n break;\n case Ee:\n t = T(u, 8) + 1;\n r = t > 16 ? 0 : t > 4 ? 1 : t > 2 ? 2 : 3;\n m[0] = Aa(g.U, r);\n g.n = r;\n if (m = r = Ka(t, 1, 0, q, g.u)) {\n if (m = t, q = g, r = s, t = 1 << (8 >>> q.n) >>> 0, u = Array(t), u == p) m = 0;\n else {\n var v = q.u[0];\n var C = q.b;\n u[0] = q.u[0][q.b + 0];\n for (r = 1; r < m; ++r) u[r] = ((((v[C + r] & 4278255360) >>> 0) + ((u[r - 1] & 4278255360) >>> 0) & 4278255360) >>> 0 | (v[C + r] & 16711935) + (u[r - 1] & 16711935) & 16711935) >>> 0;\n for (; r < t; ++r) u[r] = 0;\n q.u[0] = p;\n q.b = p;\n q.u[0] = u;\n q.b = 0;\n m = 1;\n }\n }\n r = m;\n break;\n case Ae:\n break;\n default:\n $(0);\n }\n g.u = g.u[0];\n g = r;\n }\n }\n }\n if (g && T(k, 1) && (l = T(k, 4), g = l >= 1 && l <= fg, !g)) {\n d.a = W;\n break;\n }\n if (g) {\n a: {\n var g = d;\n var A = a[0];\n var z = b[0];\n var m = l;\n var C = v = s;\n var C = g.o;\n var q = g.cb;\n var r = [p];\n var t = p;\n var u = 1;\n if (c && T(C, 1)) {\n var v = T(C, 3) + 2;\n var A = Aa(A, v);\n var w = Aa(z, v);\n var z = A * w;\n if (!Ka(A, w, 0, g, r)) {\n g.a = W;\n zb(t, u);\n g = 0;\n break a;\n }\n r = r[0];\n q.eb = v;\n for (v = 0; v < z; ++v) A = r[v] >>> 8 & 65535, r[v] = A, A >= u && (u = A + 1);\n }\n if (C.fa) zb(t, u), g = 0;\n else if ($(u <= 65536), t = ld(u, gg), t == p) g.a = cb, zb(t, u), g = 0;\n else {\n for (v = 0; v < u; ++v) {\n z = t[v].va;\n for (C = 0; C < Yc; ++C) {\n A = hg[C];\n C == 0 && m > 0 && (A += 1 << m);\n b: {\n const y = A;\n var A = g;\n const G = z[+C];\n var B = 0;\n var w = A.o;\n if (T(w, 1)) {\n var F = Array(2);\n var D = Array(2);\n var L = Array(2);\n var B = T(w, 1) + 1;\n var J = T(w, 1);\n F[0] = T(w, J == 0 ? 1 : 8);\n D[0] = 0;\n L[0] = B - 1;\n B == 2 && (F[1] = T(w, 8), D[1] = 1, L[1] = B - 1);\n c: {\n var J = 0;\n var H = s;\n $(G != p);\n $(L != p);\n $(D != p);\n $(F != p);\n if (nd(G, B)) {\n for (H = 0; H < B; ++H) {\n if (D[H] != pd) {\n if (F[H] < 0 || F[H] >= y) {\n (J = J && ma(G)) || ja(G);\n B = J;\n break c;\n }\n if (!jc(G, F[H], D[H], L[H])) {\n (J = J && ma(G)) || ja(G);\n B = J;\n break c;\n }\n }\n }(J = (J = 1) && ma(G)) || ja(G);\n B = J;\n } else B = 0;\n }\n } else {\n B = s;\n D = [];\n F = T(w, 4) + 4;\n if (F > Ke) {\n A.a = W;\n A = 0;\n break b;\n }\n L = Array(y);\n if (L == p) {\n A.a = cb;\n A = 0;\n break b;\n }\n for (B = 0; B < F; ++B) D[ig[B]] = T(w, 3);\n c: {\n var B = A;\n var O = D;\n var D = y;\n var F = L;\n var J = 0;\n var H = B.o;\n let S = s;\n let V = s;\n let Y = jg;\n const Z = M(Le);\n if (od(Z, O, Ke)) {\n if (T(H, 1)) {\n if (S = 2 + 2 * T(H, 3), V = 2 + T(H, S), V > D) {\n B.a = W;\n ja(Z);\n B = J;\n break c;\n }\n } else V = D;\n for (S = 0; S < D;) {\n var R = s;\n if (V-- == 0) break;\n Da(H);\n R = Oa(Z, H);\n if (R < Me) F[S++] = R, R != 0 && (Y = R);\n else {\n var O = R == kg;\n var R = R - Me;\n const ea = lg[R];\n var R = T(H, mg[R]) + ea;\n if (S + R > D) {\n B.a = W;\n ja(Z);\n B = J;\n break c;\n }\n for (O = O ? Y : 0; R-- > 0;) F[S++] = O;\n }\n }\n J = 1;\n ja(Z);\n B = J;\n } else B.a = W, B = 0;\n }\n B && (B = od(G, L, y));\n }(B = B && !w.fa) ? A = 1 : (A.a = W, A = 0);\n }\n if (!A) {\n zb(t, u);\n g = 0;\n break a;\n }\n }\n }\n q.ac = r;\n q.hc = u;\n q.Db = t;\n g = 1;\n }\n }\n }\n if (!g) {\n d.a = W;\n break;\n }\n if (l > 0) {\n if (h.xb = 1 << l, m = h.Yb, q = 1 << l, $(m != p), $(l > 0), m.ea = U(q, 0), m.ea == p ? l = 0 : (m.bb = 32 - l, l = 1), !l) {\n d.a = cb;\n g = 0;\n break;\n }\n } else h.xb = 0;\n l = d;\n m = a[0];\n q = b[0];\n r = l.cb;\n t = r.eb;\n l.l = m;\n l.v = q;\n r.Ec = Aa(m, t);\n r.Dc = t == 0 ? -1 : (1 << t) - 1;\n if (c) {\n d.Ob = Cb;\n break;\n }\n f = Array(a * b);\n l = 0;\n if (f == p) {\n d.a = cb;\n g = 0;\n break;\n }\n g = (g = lc(d, f, l, a, b, p)) && !k.fa;\n break;\n }\n g ? (e != p ? e[0] = f : ($(f == p), $(c)), c || bd(h)) : (bd(h), d.a == W && d.o.L && (d.a = Ie));\n return g;\n }\n\n function xd(a, b) {\n const c = a.l * a.v;\n const d = c + b + b * $c;\n $(a.l <= b);\n a.V = Array(d);\n a.Ha = 0;\n if (a.V == p) {\n return a.Xa = p, a.a = cb, 0;\n }\n a.Xa = a.V;\n a.vb = a.Ha + c + b;\n return 1;\n }\n\n function mf(a, b) {\n var c = b - a.O;\n var d = a.V;\n var e = a.Ha + a.l * a.O;\n if (!(c <= 0)) {\n ze(a, c, d, e);\n for (var e = a.N.width, c = e * c, d = a.N.ka, e = a.N.fd + e * a.O, g = a.Xa, k = a.vb, h = s, h = 0; h < c; ++h) d[e + h] = g[k + h] >>> 8 & 255;\n a.O = a.xa = b;\n }\n }\n\n function ng(a, b) {\n const c = [s];\n const d = [s];\n const e = [s];\n if (a == p) return 0;\n if (b == p) return a.a = ta, 0;\n a.N = b;\n a.a = L;\n Rb(a.o, b.data, b.b, b.e);\n if (!ue(a.o, c, d, e)) return a.a = W, sa(a), $(a.a != L), 0;\n a.Ob = cd;\n b.width = c[0];\n b.height = d[0];\n a.Wa = Cb;\n return !Ka(c[0], d[0], 1, a, p) ? (sa(a), $(a.a != L), 0) : 1;\n }\n\n function og(a) {\n let b = p;\n let c = p;\n if (a == p) return 0;\n b = a.N;\n $(b != p);\n c = b.ka;\n $(c != p);\n a.Ib = c.j;\n a.Hc = c.Hc;\n $(a.Ib != p);\n if (!Ne(c.Qa, b, Pa)) return a.a = ta, sa(a), $(a.a != L), 0;\n if (!xd(a, b.width) || b.I && !AllocateAndInitRescaler(a, b)) return sa(a), $(a.a != L), 0;\n a.Wa = Db;\n if (!lc(a, a.V, a.Ha, a.l, a.v, Yf)) return sa(a), $(a.a != L), 0;\n c.ec = a.xa;\n sa(a);\n return 1;\n }\n\n function wa(a, b) {\n return a < 0 ? 0 : a > b ? b : a;\n }\n\n function ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, C, w, z) {\n let y; const G = C - 1 >> 1;\n let F = e[g + 0] | k[h + 0] << 16;\n let B = f[l + 0] | m[t + 0] << 16;\n if (a) {\n var D = 3 * F + B + 131074 >> 2;\n w(a[b + 0], D & 255, D >> 16, q, r);\n }\n c && (D = 3 * B + F + 131074 >> 2, w(c[d + 0], D & 255, D >> 16, u, v));\n for (y = 1; y <= G; ++y) {\n const J = e[g + y] | k[h + y] << 16;\n const L = f[l + y] | m[t + y] << 16;\n var D = F + J + B + L + 524296;\n const O = D + 2 * (J + B) >> 3;\n const H = D + 2 * (F + L) >> 3;\n a && (D = O + F >> 1, F = H + J >> 1, w(a[b + 2 * y - 1], D & 255, D >> 16, q, r + (2 * y - 1) * z), w(a[b + 2 * y - 0], F & 255, F >> 16, q, r + (2 * y - 0) * z));\n c && (D = H + B >> 1, F = O + L >> 1, w(c[d + 2 * y - 1], D & 255, D >> 16, u, v + (2 * y - 1) * z), w(c[d + 2 * y + 0], F & 255, F >> 16, u, v + (2 * y + 0) * z));\n F = J;\n B = L;\n }\n C & 1 || (a && (D = 3 * F + B + 131074 >> 2, w(a[b + C - 1], D & 255, D >> 16, q, r + (C - 1) * z)), c && (D = 3 * B + F + 131074 >> 2, w(c[d + C - 1], D & 255, D >> 16, u, v + (C - 1) * z)));\n }\n\n function pg(a,\n b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, hc, 3);\n }\n\n function qg(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, Vc, 3);\n }\n\n function Oe(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, pe, 4);\n }\n\n function Pe(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, oe, 4);\n }\n\n function Qe(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, me, 4);\n }\n\n function Re(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h,\n f, l, m, t, q, r, u, v, w, ne, 2);\n }\n\n function rg(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w) {\n ab(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u, v, w, le, 2);\n }\n\n function Ca(a, b, c, d, e, g, k, h, f, l, m, t, q, r, u) {\n let v;\n for (v = 0; v < q - 1; v += 2) r(a[b + 0], e[g + 0], k[h + 0], f, l), r(a[b + 1], e[g + 0], k[h + 0], f, l + u), r(c[d + 0], e[g + 0], k[h + 0], m, t), r(c[d + 1], e[g + 0], k[h + 0], m, t + u), b += 2, d += 2, g++, h++, l += 2 * u, t += 2 * u;\n v == q - 1 && (r(a[b + 0], e[g + 0], k[h + 0], f, l), r(c[d + 0], e[g + 0], k[h + 0], m, t));\n }\n\n function Se(a, b, c, d, e, g, k, f, n, l, m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, pe, 4);\n }\n\n function Te(a, b, c, d, e, g, k, f, n, l,\n m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, oe, 4);\n }\n\n function Ue(a, b, c, d, e, g, k, f, n, l, m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, me, 4);\n }\n\n function Ve(a, b, c, d, e, g, k, f, n, l, m, t, q) {\n Ca(a, b, c, d, e, g, k, f, n, l, m, t, q, ne, 2);\n }\n\n function sg(a, b, c, d, e, g) {\n for (; e-- > 0;) {\n for (var k = a, f = b + (c ? 1 : 0), n = a, l = b + (c ? 0 : 3), m = s, m = 0; m < d; ++m) {\n var t = n[l + 4 * m];\n if (t != 255) {\n var t = 32897 * t;\n let q = k;\n let r = f + 4 * m + 0;\n k[f + 4 * m + 0] * t >>> 23;\n q[r] = ca;\n q = k;\n r = f + 4 * m + 1;\n k[f + 4 * m + 1] * t >>> 23;\n q[r] = ca;\n q = k;\n r = f + 4 * m + 2;\n k[f + 4 * m + 2] * t >>> 23;\n q[r] = ca;\n }\n }\n b += g;\n }\n }\n\n function tg(a, b) {\n const c = b.j.c.Va;\n const d = c.y;\n const e = c.D + a.w * c.F;\n const g = c.c;\n const k = c.B + (a.w >> 1) * c.nb;\n const f = c.S;\n const n = c.C + (a.w >> 1) * c.rb;\n const l = a.m;\n const m = a.h;\n const t = parseInt((l + 1) / 2, 10);\n const q = parseInt((m + 1) / 2, 10);\n let r;\n for (r = 0; r < m; ++r) N(d, e + r * c.F, a.y, a.D + r * a.F, l);\n for (r = 0; r < q; ++r) N(g, k + r * c.nb, a.c, a.B + r * a.Da, t), N(f, n + r * c.rb, a.S, a.C + r * a.Da, t);\n return a.h;\n }\n\n function ug(a, b) {\n var c = b.j;\n const d = c.c.RGBA;\n const e = d.ma;\n let g = d.Sa + a.w * d.f;\n const k = a.y;\n let f = a.D;\n const n = a.c;\n let l = a.B;\n const m = a.S;\n let t = a.C;\n var c = vg[c.J];\n const q = a.m;\n const r = a.h - 1;\n let u;\n for (u = 0; u < r; u += 2) c(k, f, k, f + a.F, n, l, m, t, e, g, e, g + d.f, q), f += 2 * a.F, l += a.Da, t += a.Da, g += 2 * d.f;\n u == r && c(k, f, k, f, n, l, m, t, e, g, e, g, q);\n return a.h;\n }\n\n function wg(a, b) {\n let c = a.h;\n const d = b.j.c.RGBA;\n const e = d.ma;\n let g = d.Sa + a.w * d.f;\n const k = V[b.j.J];\n const f = a.y;\n let n = a.D;\n const l = a.c;\n let m = a.B;\n const t = a.S;\n let q = a.C;\n let r = b.Qb;\n let u = b.Rb;\n let v = b.lc;\n let w = b.mc;\n let A = a.w;\n const z = a.w + a.h;\n const y = a.m;\n const D = parseInt((y + 1) / 2, 10);\n A == 0 ? k(p, p, f, n, l, m, t, q, l, m, t, q, p, p, e, g, y) : (k(b.Sb, b.Tb, f, n, r, u, v, w, l, m, t, q, e, g - d.f, e, g, y), ++c);\n for (; A + 2 < z; A += 2) r = l, u = m, v = t, w = q, m += a.Da, q += a.Da, g += 2 * d.f, n += 2 * a.F, k(f, n - a.F, f, n, r, u, v, w, l, m, t, q, e, g - d.f, e, g, y);\n n += a.F;\n a.k + z < a.K ? (N(b.Sb, b.Tb, f, n, 1 * y), N(b.Qb, b.Rb, l, m, 1 * D), N(b.lc, b.mc, t, q, 1 * D), c--) : z & 1 || k(f, n, p, p, l, m, t, q, l, m,\n t, q, e, g + d.f, p, p, y);\n return c;\n }\n\n function xg(a, b) {\n var c = a.p;\n var d = a.q;\n const e = b.j.c.Va;\n const g = a.m;\n const f = a.h;\n const h = e.p;\n let n = e.q + a.w * e.Fa;\n var c = a.p;\n var d = a.q;\n let l = s;\n if (c != p) for (l = 0; l < f; ++l) N(h, n, c, d, 1 * g), d += a.width, n += e.Fa;\n else if (e.p != p) for (l = 0; l < f; ++l) jd(h, n, 255, g), n += e.Fa;\n return 0;\n }\n\n function We(a, b, c) {\n let d = a.w;\n c[0] = a.h;\n a.Bb && (d == 0 ? --c[0] : (--d, b[0] -= a.width), a.k + a.w + a.h == a.K && (c[0] = a.K - a.k - d));\n return d;\n }\n\n function yg(a, b) {\n const c = a.p;\n var d = [a.q];\n if (c != p) {\n for (var e = a.m, g = b.j.J, f = g == Ab || g == Bb, h = b.j.c.RGBA, n = [s], l = We(a, d, n), d = d[0], m = h.ma, l = h.Sa + l * h.f,\n t = l + (f ? 0 : 3), q = 255, r = s, u = s, u = 0; u < n[0]; ++u) {\n for (r = 0; r < e; ++r) {\n const v = c[d + r];\n m[t + 4 * r] = v;\n q &= v;\n }\n d += a.width;\n t += h.f;\n }\n q != 255 && F(g) && WebPApplyAlphaMultiply(m, l, f, e, n, h.f);\n }\n return 0;\n }\n\n function zg(a, b) {\n const c = a.p;\n var d = [a.q];\n if (c != p) {\n const e = a.m;\n const g = b.j.J;\n const f = b.j.c.RGBA;\n const h = [s];\n var n = We(a, d, h);\n var d = d[0];\n const l = f.ma;\n var n = f.Sa + n * f.f;\n let m = n + 1;\n let t = 15;\n let q = s;\n for (j = 0; j < h[0]; ++j) {\n for (q = 0; q < e; ++q) {\n const r = c[d + q] >> 4;\n l[m + 2 * q] = l[m + 2 * q] & 240 | r;\n t &= r;\n }\n d += a.width;\n m += f.f;\n }\n t != 15 && F(g) && WebPApplyAlphaMultiply4444(l, n, e, h, f.f);\n }\n return 0;\n }\n\n function vd(a) {\n let b = a.ka;\n const c = b.j.J;\n const d = c\n < ua;\n const e = c == jb || c == Pa || c == Ab || c == kb || c == Ra || F(c);\n b.memory = p;\n b.$a = p;\n b.zb = p;\n b.ad = p;\n if (!Ne(b.Qa, a, e ? ua : Ra)) return 0;\n if (a.I) {\n if (!(d ? InitRGBRescaler(a, b) : InitYUVRescaler(a, b))) return alert('memory error #1'), 0;\n } else {\n if (d) {\n if (b.$a = ug, a.Bb) {\n const g = a.m + 1 >> 1;\n const f = a.m + 2 * g;\n let h; const\n n = [];\n for (h = 0; h < f; ++h) n.push(205);\n n.push(0);\n b.memory = n;\n if (b.memory == p) return alert('memory error #2'), 0;\n b.Sb = b.memory;\n b.Tb = 0;\n b.Qb = b.Sb;\n b.Rb = b.Tb + a.m;\n b.lc = b.Qb;\n b.mc = b.Rb + g;\n b.$a = wg;\n V[Qa] = pg;\n V[jb] = Oe;\n V[Zc] = qg;\n V[Pa] = Pe;\n V[Ab] = Qe;\n V[kb] = Re;\n V[Fe] = rg;\n }\n } else {\n b.$a = tg;\n }\n e && (F(c) && (WebPApplyAlphaMultiply = sg, V[Ob] = Oe, V[Pb] = Pe, V[Bb] = Qe, V[Qb] = Re), b.zb = c == kb || c == Qb ? zg : d ? yg : xg);\n }\n if (d && !Xe) {\n for (a = 0; a < 256; ++a) Za[a] = 89858 * (a - 128) + Jb >> ea, wb[a] = -22014 * (a - 128) + Jb, vb[a] = -45773 * (a - 128), xb[a] = 113618 * (a - 128) + Jb >> ea;\n for (a = J; a < dd; ++a) b = 76283 * (a - 16) + Jb >> ea, ia[a - J] = wa(b, 255), Hb[a - J] = wa(b + 8 >> 4, 15);\n Xe = 1;\n }\n return 1;\n }\n\n function ud(a) {\n const b = a.ka;\n let c = a.m;\n const d = a.h;\n $(!(a.w & 1));\n if (c <= 0 || d <= 0) return 0;\n c = b.$a(a, b);\n b.ec += c;\n b.zb && b.zb(a, b);\n return 1;\n }\n\n function wd(a) {\n a = a.ka;\n a.memory = '';\n a.memory = p;\n }\n\n function ed(a,\n b) {\n return a[b + 0] | a[b + 1] << 8 | a[b + 2] << 16;\n }\n\n function Kb(a, b) {\n return (ed(a, b) | a[b + 3] << 24) >>> 0;\n }\n\n function Ye(a, b, c, d, e, g, f) {\n var h = 0;\n var n = [0];\n var l = 'VP8StatusCode';\n const m = M(Gc);\n if (a == p || c[0] < Lb) return Z;\n m.data = a;\n m.b = [b[0]];\n m.e = [c[0]];\n m.na = [m.na];\n a: {\n h = m.na;\n $(a != p);\n $(c != p);\n $(h != p);\n h[0] = 0;\n if (c[0] >= Lb && !kd(a, b[0], 'RIFF', O)) {\n if (kd(a, b[0] + 8, 'WEBP', O)) {\n l = W;\n break a;\n }\n var t = Kb(a, b[0] + O);\n if (t < O + R) {\n l = W;\n break a;\n }\n h[0] = t;\n b[0] += Lb;\n c[0] -= Lb;\n } else h[0] = 0;\n l = L;\n }\n m.na = m.na[0];\n if (l != L) return l;\n h = m.na > 0;\n t = [0];\n a: if (l = R + fd, $(a != p), $(c != p), $(n != p), n[0] = 0, c[0] < R) l = Z;\n else {\n if (!kd(a, b[0], 'VP8X', O)) {\n var q = s;\n var r = s;\n var u = E;\n if (Kb(a, b[0] + O) != fd) {\n l = W;\n break a;\n }\n if (c[0] < l) {\n l = Z;\n break a;\n }\n u = Kb(a, b[0] + 8);\n q = 1 + ed(a, b[0] + 12);\n r = 1 + ed(a, b[0] + 15);\n if (q * r >= Ag) {\n l = W;\n break a;\n }\n t != p && (t[0] = u);\n d != p && (d[0] = q);\n e != p && (e[0] = r);\n b[0] += l;\n c[0] -= l;\n n[0] = 1;\n }\n l = L;\n }\n if (l != L) return l;\n if (!h && n[0]) return W;\n g != p && (g[0] = !!(t[0] & Bg));\n if (n && f == p) return L;\n if (c < O) return Z;\n if (h && n[0] || !h && !n[0] && !kd(a, b[0], 'ALPH', O)) {\n m.$ = [m.$];\n m.G = [m.G];\n m.pa = [m.pa];\n a: {\n var n = m.na;\n var h = m.$;\n var t = m.G;\n var l = m.pa;\n var q = x;\n var r = 0;\n var u = Mb;\n let v = O + R + fd;\n $(a != p);\n $(c != p);\n q = a;\n r = b[0];\n u = c[0];\n $(h != p);\n $(l != p);\n h[0] = p;\n t[0] = p;\n for (l[0] = 0; ;) {\n let w = E;\n let y = E;\n b[0] = r;\n c[0] = u;\n if (u < R) {\n l = Z;\n break a;\n }\n w = Kb(q, r + O);\n y = R + w + 1 & -2;\n v += y;\n if (n > 0 && v > n) {\n l = W;\n break a;\n }\n if (u < y) {\n l = Z;\n break a;\n }\n if (kd(q, r, 'ALPH', O)) {\n if (!kd(q, r, 'VP8 ', O) || !kd(q, 'VP8L', O)) {\n l = L;\n break a;\n }\n } else h[0] = q, t[0] = r + R, l[0] = w;\n r += y;\n u -= y;\n }\n l = ca;\n }\n m.$ = m.$[0];\n m.G = m.G[0];\n m.pa = m.pa[0];\n if (l != L) return l;\n }\n m.ta = [m.ta];\n m.ia = [m.ia];\n a: if (n = m.na, h = m.ta, t = m.ia, r = !kd(a, b[0], 'VP8 ', O), l = !kd(a, b[0], 'VP8L', O), q = O + R, $(a != p), $(c != p), $(h != p), $(t != p), c[0] < R) l = Z;\n else {\n if (r || l) {\n r = Kb(a, b[0] + O);\n if (n >= q && r > n - q) {\n l = W;\n break a;\n }\n h[0] = r;\n b[0] += R;\n c[0] -= R;\n t[0] = l;\n } else t[0] = c >= 1 && a[b + 0] == ve, h[0] = c[0];\n l = L;\n }\n m.ta = m.ta[0];\n m.ia = m.ia[0];\n if (l != L) return l;\n if (m.ta > Ze) return W;\n if (m.ia) {\n if (c[0] < $e) return Z;\n n = b[0];\n h = c[0];\n d = d ? d[0] : p;\n e = e ? e[0] : p;\n t = g ? g[0] : p;\n a == p || h < $e ? a = 0 : (l = [s], q = [s], r = [s], u = M(af), Rb(u, a, n, h), ue(u, l, q, r) ? (d != p && (d[0] = l[0]), e != p && (e[0] = q[0]), t != p && (t[0] = r[0]), a = 1) : a = 0);\n } else {\n if (c < bf) return Z;\n n = b[0];\n h = c[0];\n d = d ? d[0] : p;\n e = e ? e[0] : p;\n !(a == p || h < bf) && h - 3 >= 3 && a[n + 3 + 0] == 157 && a[n\n + 3 + 1] == 1 && a[n + 3 + 2] == 42 ? (h = a[n + 0] | a[n + 1] << 8 | a[n + 2] << 16, t = (a[n + 7] << 8 | a[n + 6]) & 16383, a = (a[n + 9] << 8 | a[n + 8]) & 16383, !(!(h & 1) + 0) || (h >> 1 & 7) > 3 || !(h >> 4 & 1) || h >> 5 >= m.ta ? a = 0 : (d && (d[0] = t), e && (e[0] = a), a = 1)) : a = 0;\n }\n if (!a) return W;\n g != p && (g[0] |= m.$ != p);\n f != p && (f[0] = m, f[0].offset = b[0] - f[0].b, $(b[0] - f[0].b < Ze), $(f[0].offset == f[0].e - c[0]));\n return L;\n }\n\n function Kd(a) {\n $(a != p);\n return Ye(a[0].data, a[0].b, a[0].e, p, p, p, a);\n }\n\n function cf(a, b, c, d) {\n let e = 'VP8StatusCode';\n const g = M(Vb);\n let f = M(Gc);\n f.data = a;\n f.b = b;\n f.e = c;\n f.b = [f.b];\n f.e = [f.e];\n f = [f];\n e = Kd(f);\n if (e\n != L) return e;\n f = f[0];\n f.b = f.b[0];\n f.e = f.e[0];\n $(d != p);\n td(na);\n g.data = f.data;\n g.b = b + f.offset;\n g.e = f.e - f.offset;\n g.put = ud;\n g.Mb = vd;\n g.Pb = wd;\n g.ka = d;\n if (f.ia) {\n a = sd();\n if (a == p) return cb;\n ng(a, g) ? (e = zd(g.width, g.height, d.Qa, d.j), e == L && !og(a) && (e = a.a)) : e = a.a;\n a != p && sa(a);\n } else {\n e = M(Cg);\n e != p && (Gd(e), e.za = 0, e.Hb = 1);\n a = e;\n if (a == p) return cb;\n a.qb = 0;\n a.Ga = f.$;\n a.G = f.G;\n a.ub = f.pa;\n Hd(a, g) ? (e = zd(g.width, g.height, d.Qa, d.j), e == L && !Mf(a, g) && (e = a.a)) : e = a.a;\n a != p && ke(a);\n }\n e != L && (self || this).Yc(d.j);\n return e;\n }\n\n function lb(a, b, c, d, e) {\n const g = {\n value: 0,\n };\n c = {\n value: c,\n };\n const f = M(df);\n const h = M(gd);\n f.j = h;\n h.J = a;\n const n = {\n value: h.width,\n };\n const l = {\n value: h.height,\n };\n let m;\n m = c;\n const t = M(ef);\n hd(b, g, m, t) != L ? m = 0 : (n != p && (n.value = t.width), l != p && (l.value = t.height), m = 1);\n if (!m) return p;\n h.width = n.value;\n h.height = l.value;\n d != p && (d.value = h.width.value);\n e != p && (e.value = h.height.value);\n return cf(b, g.value, c.value, f) != L ? p : a < ua ? h.c.RGBA.ma : h.c.Va.y;\n }\n\n function hd(a, b, c, d) {\n if (d == p || a == p) return ta;\n $(d != p);\n d.tc = 0;\n d.width = [d.width];\n d.height = [d.height];\n d.$b = [d.$b];\n return Ye(a, b, c, d.width, d.height, d.$b, p);\n }\n\n function Ne(a,\n b, c) {\n const d = b.width;\n const e = b.height;\n let g = 0;\n let f = 0;\n let h = d;\n let n = e;\n b.Ua = a != p && a.Ua > 0;\n if (b.Ua && (h = a.wc, n = a.vc, g = a.t, f = a.k, c < ua || (g &= -2, f &= -2), g < 0 || f < 0 || h <= 0 || n <= 0 || g + h > d || f + n > e)) return 0;\n b.t = g;\n b.k = f;\n b.Ka = g + h;\n b.K = f + n;\n b.m = h;\n b.h = n;\n b.I = a != p && a.I > 0;\n if (b.I) {\n if (a.Ba <= 0 || a.Aa <= 0) return 0;\n b.Ba = a.Ba;\n b.Aa = a.Aa;\n }\n b.Za = a && a.Za;\n b.Bb = a == p || !a.ed;\n b.I && (b.Za = b.Ba < 3 * d / 4 && b.Aa < 3 * e / 4, b.Bb = 0);\n return 1;\n }\n var na = 512;\n var Qa = 0;\n var jb = 1;\n var Zc = 2;\n var Pa = 3;\n var Ab = 4;\n var kb = 5;\n var Fe = 6;\n var Ob = 7;\n var Pb = 8;\n var Bb = 9;\n var Qb = 10;\n var ua = 11;\n var Ra = 12;\n var Cc = 13;\n this.WEBP_CSP_MODE = this.Cd = {\n nd: 0,\n od: 1,\n kd: 2,\n ld: 3,\n jd: 4,\n pd: 5,\n qd: 6,\n rd: 7,\n sd: 8,\n md: 9,\n };\n var gd = {\n J: 'WEBP_CSP_MODE',\n width: s,\n height: s,\n Fc: s,\n c: {\n RGBA: {\n ma: x,\n Sa: 0,\n f: s,\n size: Mb,\n },\n Va: {\n y: x,\n c: x,\n S: x,\n p: x,\n D: x,\n B: x,\n C: x,\n q: x,\n F: s,\n nb: s,\n rb: s,\n Fa: s,\n Wc: Mb,\n Rc: Mb,\n Uc: Mb,\n Wb: Mb,\n },\n },\n Ic: U(4, E),\n Jb: p,\n jc: x,\n };\n var L = 0;\n var cb = 1;\n var ta = 2;\n var W = 3;\n var Hf = 4;\n var Ie = 5;\n var Nf = 6;\n var Z = 7;\n this.VP8StatusCode = this.td = {\n xd: 0,\n yd: 1,\n vd: 2,\n ud: 3,\n Ad: 4,\n zd: 5,\n Bd: 6,\n wd: 7,\n };\n var ef = {\n width: {\n value: s,\n },\n height: {\n value: s,\n },\n $b: {\n value: s,\n },\n tc: s,\n Yd: s,\n rotate: s,\n be: s,\n Ic: U(3, E),\n };\n this.WebPGetFeatures = this.Md = function (a, b, c) {\n let d = 'VP8StatusCode';\n na >>> 8 != na >>> 8 || c == p ? a = ta : (b = [b], d = hd(a, [0], b, c), a = d == Z ? W : d);\n return a;\n };\n const ff = {\n Za: s,\n ed: s,\n Ua: s,\n t: s,\n k: s,\n wc: s,\n vc: s,\n I: s,\n Ba: s,\n Aa: s,\n ae: s,\n Td: s,\n Xd: s,\n Ic: U(6, E),\n };\n this.WebPDecoderConfig = this.Kd = {\n input: M(ef),\n j: M(gd),\n options: M(ff),\n };\n this.WebPInitDecoderConfig = this.Nd = function (a) {\n na >>> 8 != na >>> 8 || a == p ? a = 0 : (a = a.input, $(a != p), a.tc = 0, a = 1);\n return a;\n };\n var Vb = {\n width: s,\n height: s,\n w: s,\n m: s,\n h: s,\n y: x,\n c: x,\n S: x,\n D: 0,\n B: 0,\n C: 0,\n F: s,\n Da: s,\n ka: 0,\n put: 0,\n Mb: 0,\n Pb: 0,\n Bb: s,\n e: Mb,\n data: x,\n b: 0,\n Za: s,\n Ua: s,\n t: s,\n Ka: s,\n k: s,\n K: s,\n I: s,\n Ba: s,\n Aa: s,\n p: x,\n q: 0,\n };\n var df = {\n j: M(gd),\n Sb: x,\n Qb: x,\n lc: x,\n Tb: 0,\n Rb: 0,\n mc: 0,\n ec: s,\n Qa: M(ff),\n memory: 0,\n $a: '(OutputFunc)',\n zb: '(OutputFunc)',\n ad: '(OutputRowFunc)',\n };\n var Gc = {\n data: x,\n b: x,\n e: Mb,\n offset: Mb,\n $: p,\n G: x,\n pa: Mb,\n ta: Mb,\n na: Mb,\n ia: s,\n };\n var Fc = {\n qa: x,\n Ia: p,\n Pd: x,\n Ab: s,\n la: E,\n Z: E,\n gc: s,\n };\n var af = {\n T: bb,\n qa: x,\n Ia: x,\n ya: Mb,\n Q: Mb,\n g: s,\n L: s,\n fa: s,\n };\n var gf = 25;\n var hf = [0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215];\n var bf = 10;\n var ve = 47;\n var we = 14;\n var Wf = 3;\n var $e = 5;\n var fg = 11;\n var Yc = 5;\n var qe = 4278190080;\n var jg = 8;\n var Tb = 15;\n var Ba = 256;\n var Ge = 24;\n var Je = 4;\n var Be = 0;\n var De = 1;\n var Ae = 2;\n var Ee = 3;\n var Ub = 1;\n var kc = 0;\n var kf = 1;\n var rd = 1;\n var O = 4;\n var R = 8;\n var Lb = 12;\n var fd = 10;\n var Bg = 16;\n var Ag = 1 * Math.pow(2, 32);\n var Ze = -1 - R - 1 >>> 0;\n var jf = {\n kc: s,\n s,\n };\n var Le = {\n Y: 'HuffmanTreeNode*',\n gb: s,\n Pa: s,\n };\n var pd = -1;\n const Dg = {\n ea: E,\n bb: s,\n };\n var ad = 506832829;\n var $b = 0;\n var ge = $b;\n var fe = 2;\n var ee = 3;\n var de = 1;\n var Ef = 4;\n var Df = 5;\n var Cf = 6;\n var Ld = 3;\n var xa = 4;\n var Hc = 4;\n var Gf = 4;\n var Md = 4;\n var Nd = 8;\n var Kc = 3;\n var Lc = 11;\n var f = 32;\n var Pf = 17 * f + 9 * f;\n var Tc = 1 * f + 8;\n var Uc = Tc + 16 * f + f;\n var he = Uc + 16;\n var Id = {\n fb: x,\n Jc: x,\n Nc: x,\n Ra: E,\n };\n var Jd = {\n l: 0,\n v: 0,\n gd: x,\n hd: x,\n uc: x,\n $c: x,\n };\n const Eg = {\n pb: s,\n ob: s,\n tb: s,\n Kb: U(xa, 0),\n Cb: U(xa, 0),\n };\n const Fg = {\n Ta: U(Ld, x),\n z: md([Md, Nd, Kc, Lc], x),\n };\n const Gg = {\n Oc: s,\n Fb: s,\n kb: s,\n oc: s,\n Lc: U(Hc, s),\n Gc: U(Hc, s),\n };\n var Oc = {\n zc: s,\n yc: s,\n ab: s,\n };\n var Qd = {\n X: s,\n ua: s,\n Nb: s,\n };\n const id = U(2, s);\n const Hg = {\n sc: M(id),\n sb: M(id),\n qc: M(id),\n };\n const Ig = {\n ha: s,\n d: s,\n W: s,\n M: Oc,\n N: Vb,\n };\n var Cg = {\n a: 'VP8StatusCode',\n za: s,\n xc: 0,\n o: M(Fc),\n Ac: M(Id),\n P: M(Jd),\n ga: M(Gg),\n Ca: M(Eg),\n rc: 'WebPWorker',\n qb: s,\n Ja: s,\n jb: s,\n oa: Ig,\n Ma: s,\n hb: s,\n lb: s,\n mb: s,\n wb: s,\n Ya: s,\n Hb: s,\n ic: ld(8, Fc),\n Zc: E,\n yb: ld(xa, Hg),\n R: M(Fg),\n pc: s,\n Pc: x,\n dc: x,\n cc: U(4, x),\n Xc: x,\n Sc: x,\n Vc: x,\n La: M(Qd),\n M: M(Oc),\n Ea: x,\n z: 0,\n ca: x,\n aa: x,\n ra: x,\n da: s,\n ba: s,\n sa: s,\n H: s,\n r: s,\n ib: 0,\n Gb: Mb,\n i: s,\n d: s,\n wa: x,\n Eb: U(16, x),\n Vd: 0,\n Tc: x,\n Lb: x,\n ja: E,\n Oa: E,\n A: s,\n W: s,\n Zb: U(xa, x),\n Ga: p,\n G: 0,\n ub: Mb,\n Xb: x,\n Od: 0,\n cd: s,\n dd: x,\n Wd: 0,\n fc: Mb,\n };\n var Db = 0;\n var Cb = 1;\n var cd = 2;\n const Jg = {\n Qc: 'VP8LImageTransformType',\n n: s,\n U: s,\n Vb: s,\n u: E,\n b: E,\n };\n var gg = {\n va: ld(Yc, Le),\n };\n const Kg = {\n xb: s,\n Yb: M(Dg),\n Dc: s,\n eb: s,\n Ec: s,\n ac: E,\n bd: E,\n hc: s,\n Db: 'HTreeGroup',\n };\n var eg = {\n a: 'VP8StatusCode',\n Wa: 'VP8LDecodeState',\n Ob: 'VP8LDecodeState',\n N: 'VP8Io',\n Ib: 'WebPDecBuffer',\n Hc: 'WebPDecBuffer',\n V: E,\n Ha: E,\n Xa: E,\n vb: E,\n o: M(af),\n l: s,\n v: s,\n O: s,\n xa: s,\n cb: M(Kg),\n Na: s,\n nc: ld(Je, Jg),\n Ub: E,\n Mc: x,\n $d: x,\n Zd: '*WebPRescaler',\n };\n var lf = 4;\n var nf = [p, function (a, b, c, d, e, g, f, h) {\n let n = s;\n let l = h;\n $(a != p);\n $(f != p);\n $(c > 0);\n $(d > 0);\n $(e > 0);\n $(g >= c * e);\n for (n = 0; n < d; ++n) {\n n == 0 ? N(f, h, a, b, e) : Ea(a, b, f, l - g, f, h, e), Ea(a, b + e, f, l, f, h + e, e * (c - 1)),\n l += g, b += g, h += g;\n }\n }, function (a, b, c, d, e, f, k, h) {\n let n = s;\n let l = h;\n $(a != p);\n $(k != p);\n $(c > 0);\n $(d > 0);\n $(e > 0);\n $(f >= c * e);\n N(k, h, a, b, e);\n Ea(a, b + e, k, l, k, h + e, e * (c - 1));\n for (n = 1; n < d; ++n) b += f, h += f, Ea(a, b, k, l, k, h, e * c), l += f;\n }, function (a, b, c, d, e, f, k, h) {\n var n = h;\n let l = s;\n $(a != p);\n $(k != p);\n $(c > 0);\n $(d > 0);\n $(e > 0);\n $(f >= c * e);\n N(k, h, a, b, e);\n Ea(a, b + e, k, n, k, h + e, e * (c - 1));\n for (l = 1; l < d; ++l) {\n let m = s;\n var n = n + f;\n b += f;\n h += f;\n Ea(a, b, k, n - f, k, h, e);\n for (m = e; m < c * e; ++m) {\n const t = k[n + m - e] + k[n + m - f] - k[n + m - f - e];\n k[h + m] = a[b + m] + (t < 0 ? 0 : t > 255 ? 255 : t) & 255;\n }\n }\n }];\n var yd = [3, 4, 3, 4, 4, 2, 2, 4, 4, 4,\n 2, 1, 1,\n ];\n this.WebPFreeDecBuffer = this.Yc = function (a) {\n a != p && (a.Fc || (a.Jb = ''), a.jc = 0, a.Jb = a.jc = p);\n };\n self = this;\n var va = U(511, x);\n var tc = U(511, x);\n var sc = U(2041, 0);\n var oc = U(225, 0);\n var oa = U(766, x);\n var Rd = 0;\n var Xb = 85627;\n var Wb = 35468;\n var Uf = [function (a, b) {\n let c = 4;\n let d;\n for (d = 0; d < 4; ++d) c += a[b + d - f] + a[b - 1 + d * f];\n c >>= 3;\n for (d = 0; d < 4; ++d) jd(a, b + d * f, c, 4);\n }, function (a, b) {\n Dc(a, b, 4);\n }, function (a, b) {\n let c = b - f;\n const d = [];\n d.push(y(a[c - 1], a[c + 0], a[c + 1]));\n d.push(y(a[c + 0], a[c + 1], a[c + 2]));\n d.push(y(a[c + 1], a[c + 2], a[c + 3]));\n d.push(y(a[c + 2], a[c + 3], a[c + 4]));\n for (c = 0; c < 4; ++c) N(a, b + c * f, d, 0, 4);\n },\n function (a, b) {\n const c = a[b - 1];\n const d = a[b - 1 + f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 + 3 * f];\n a[b + 0 + 0 * f] = a[b + 1 + 0 * f] = a[b + 2 + 0 * f] = a[b + 3 + 0 * f] = y(a[b - 1 - f], c, d);\n a[b + 0 + 1 * f] = a[b + 1 + 1 * f] = a[b + 2 + 1 * f] = a[b + 3 + 1 * f] = y(c, d, e);\n a[b + 0 + 2 * f] = a[b + 1 + 2 * f] = a[b + 2 + 2 * f] = a[b + 3 + 2 * f] = y(d, e, g);\n a[b + 0 + 3 * f] = a[b + 1 + 3 * f] = a[b + 2 + 3 * f] = a[b + 3 + 3 * f] = y(e, g, g);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 - f];\n const k = a[b + 0 - f];\n const h = a[b + 1 - f];\n const n = a[b + 2 - f];\n const l = a[b + 3 - f];\n a[b + 0 + 3 * f] = y(d, e, a[b - 1 + 3 * f]);\n a[b + 0 + 2 * f] = a[b + 1 + 3 * f] = y(c, d, e);\n a[b + 0 + 1 * f] = a[b + 1 + 2 * f] = a[b + 2 + 3 * f] = y(g, c, d);\n a[b\n + 0 + 0 * f] = a[b + 1 + 1 * f] = a[b + 2 + 2 * f] = a[b + 3 + 3 * f] = y(k, g, c);\n a[b + 1 + 0 * f] = a[b + 2 + 1 * f] = a[b + 3 + 2 * f] = y(h, k, g);\n a[b + 2 + 0 * f] = a[b + 3 + 1 * f] = y(n, h, k);\n a[b + 3 + 0 * f] = y(l, n, h);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 - f];\n const k = a[b + 0 - f];\n const h = a[b + 1 - f];\n const n = a[b + 2 - f];\n const l = a[b + 3 - f];\n a[b + 0 + 0 * f] = a[b + 1 + 2 * f] = g + k + 1 >> 1;\n a[b + 1 + 0 * f] = a[b + 2 + 2 * f] = k + h + 1 >> 1;\n a[b + 2 + 0 * f] = a[b + 3 + 2 * f] = h + n + 1 >> 1;\n a[b + 3 + 0 * f] = n + l + 1 >> 1;\n a[b + 0 + 3 * f] = y(e, d, c);\n a[b + 0 + 2 * f] = y(d, c, g);\n a[b + 0 + 1 * f] = a[b + 1 + 3 * f] = y(c, g, k);\n a[b + 1 + 1 * f] = a[b + 2 + 3 * f] = y(g, k, h);\n a[b + 2 + 1 * f] = a[b + 3 + 3 * f] = y(k, h, n);\n a[b + 3 + 1 * f] = y(h, n, l);\n },\n function (a, b) {\n const c = a[b + 1 - f];\n const d = a[b + 2 - f];\n const e = a[b + 3 - f];\n const g = a[b + 4 - f];\n const k = a[b + 5 - f];\n const h = a[b + 6 - f];\n const n = a[b + 7 - f];\n a[b + 0 + 0 * f] = y(a[b + 0 - f], c, d);\n a[b + 1 + 0 * f] = a[b + 0 + 1 * f] = y(c, d, e);\n a[b + 2 + 0 * f] = a[b + 1 + 1 * f] = a[b + 0 + 2 * f] = y(d, e, g);\n a[b + 3 + 0 * f] = a[b + 2 + 1 * f] = a[b + 1 + 2 * f] = a[b + 0 + 3 * f] = y(e, g, k);\n a[b + 3 + 1 * f] = a[b + 2 + 2 * f] = a[b + 1 + 3 * f] = y(g, k, h);\n a[b + 3 + 2 * f] = a[b + 2 + 3 * f] = y(k, h, n);\n a[b + 3 + 3 * f] = y(h, n, n);\n },\n function (a, b) {\n const c = a[b + 0 - f];\n const d = a[b + 1 - f];\n const e = a[b + 2 - f];\n const g = a[b + 3 - f];\n const k = a[b + 4 - f];\n const h = a[b + 5 - f];\n const n = a[b + 6 - f];\n const l = a[b + 7 - f];\n a[b + 0 + 0 * f] = c + d + 1 >> 1;\n a[b + 1 + 0 * f] = a[b\n + 0 + 2 * f] = d + e + 1 >> 1;\n a[b + 2 + 0 * f] = a[b + 1 + 2 * f] = e + g + 1 >> 1;\n a[b + 3 + 0 * f] = a[b + 2 + 2 * f] = g + k + 1 >> 1;\n a[b + 0 + 1 * f] = y(c, d, e);\n a[b + 1 + 1 * f] = a[b + 0 + 3 * f] = y(d, e, g);\n a[b + 2 + 1 * f] = a[b + 1 + 3 * f] = y(e, g, k);\n a[b + 3 + 1 * f] = a[b + 2 + 3 * f] = y(g, k, h);\n a[b + 3 + 2 * f] = y(k, h, n);\n a[b + 3 + 3 * f] = y(h, n, l);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 + 3 * f];\n const k = a[b - 1 - f];\n const h = a[b + 0 - f];\n const n = a[b + 1 - f];\n const l = a[b + 2 - f];\n a[b + 0 + 0 * f] = a[b + 2 + 1 * f] = c + k + 1 >> 1;\n a[b + 0 + 1 * f] = a[b + 2 + 2 * f] = d + c + 1 >> 1;\n a[b + 0 + 2 * f] = a[b + 2 + 3 * f] = e + d + 1 >> 1;\n a[b + 0 + 3 * f] = g + e + 1 >> 1;\n a[b + 3 + 0 * f] = y(h, n, l);\n a[b + 2 + 0 * f] = y(k, h, n);\n a[b\n + 1 + 0 * f] = a[b + 3 + 1 * f] = y(c, k, h);\n a[b + 1 + 1 * f] = a[b + 3 + 2 * f] = y(d, c, k);\n a[b + 1 + 2 * f] = a[b + 3 + 3 * f] = y(e, d, c);\n a[b + 1 + 3 * f] = y(g, e, d);\n },\n function (a, b) {\n const c = a[b - 1 + 0 * f];\n const d = a[b - 1 + 1 * f];\n const e = a[b - 1 + 2 * f];\n const g = a[b - 1 + 3 * f];\n a[b + 0 + 0 * f] = c + d + 1 >> 1;\n a[b + 2 + 0 * f] = a[b + 0 + 1 * f] = d + e + 1 >> 1;\n a[b + 2 + 1 * f] = a[b + 0 + 2 * f] = e + g + 1 >> 1;\n a[b + 1 + 0 * f] = y(c, d, e);\n a[b + 3 + 0 * f] = a[b + 1 + 1 * f] = y(d, e, g);\n a[b + 3 + 1 * f] = a[b + 1 + 2 * f] = y(e, g, g);\n a[b + 3 + 2 * f] = a[b + 2 + 2 * f] = a[b + 0 + 3 * f] = a[b + 1 + 3 * f] = a[b + 2 + 3 * f] = a[b + 3 + 3 * f] = g;\n },\n ];\n var Vf = [function (a, b) {\n let c = 16;\n let d;\n for (d = 0; d < 16; ++d) c += a[b - 1 + d * f] + a[b + d - f];\n Yb(c >> 5, a, b);\n }, function (a,\n b) {\n Dc(a, b, 16);\n }, function (a, b) {\n let c;\n for (c = 0; c < 16; ++c) N(a, b + c * f, a, b - f, 16);\n }, function (a, b) {\n let c;\n for (c = 16; c > 0; --c) jd(a, b + 0, a[b - 1], 16), b += f;\n }, function (a, b) {\n let c = 8;\n let d;\n for (d = 0; d < 16; ++d) c += a[b - 1 + d * f];\n Yb(c >> 4, a, b);\n }, function (a, b) {\n let c = 8;\n let d;\n for (d = 0; d < 16; ++d) c += a[b + d - f];\n Yb(c >> 4, a, b);\n }, function (a, b) {\n Yb(128, a, b);\n }];\n var je = [function (a, b) {\n let c = 8;\n let d;\n for (d = 0; d < 8; ++d) c += a[b + d - f] + a[b - 1 + d * f];\n Zb(1 * (c >> 4), a, b);\n }, function (a, b) {\n Dc(a, b, 8);\n }, function (a, b) {\n let c;\n for (c = 0; c < 8; ++c) N(a, b + c * f, a, b - f, 8);\n }, function (a, b) {\n let c;\n for (c = 0; c < 8; ++c) {\n jd(a,\n b + 0, a[b - 1], 8), b += f;\n }\n }, function (a, b) {\n let c = 4;\n let d;\n for (d = 0; d < 8; ++d) c += a[b - 1 + d * f];\n Zb(1 * (c >> 3), a, b);\n }, function (a, b) {\n let c = 4;\n let d;\n for (d = 0; d < 8; ++d) c += a[b + d - f];\n Zb(1 * (c >> 3), a, b);\n }, function (a, b) {\n Zb(128, a, b);\n }];\n let mc; let Pc; let Qc; let Rc; let Sd; let Td; let Ud; let Vd; let Wd; let Xd; let Yd; let Zd; let $d; let ae; let be; let ce; var Pd = 31;\n var uc = [0, 2, 8];\n var Od = 3;\n var Of = 1;\n var ie = [0 + 0 * f, 4 + 0 * f, 8 + 0 * f, 12 + 0 * f, 0 + 4 * f, 4 + 4 * f, 8 + 4 * f, 12 + 4 * f, 0 + 8 * f, 4 + 8 * f, 8 + 8 * f, 12 + 8 * f, 0 + 12 * f, 4 + 12 * f, 8 + 12 * f, 12 + 12 * f];\n var Ic = [4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 25, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38,\n 39, 40, 41, 42, 43, 44, 45, 46, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 91, 93, 95, 96, 98, 100, 101, 102, 104, 106, 108, 110, 112, 114, 116, 118, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 143, 145, 148, 151, 154, 157,\n ];\n var Jc = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96,\n 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 119, 122, 125, 128, 131, 134, 137, 140, 143, 146, 149, 152, 155, 158, 161, 164, 167, 170, 173, 177, 181, 185, 189, 193, 197, 201, 205, 209, 213, 217, 221, 225, 229, 234, 239, 245, 249, 254, 259, 264, 269, 274, 279, 284,\n ];\n var Sf = [-$b, 1, -1, 2, -2, 3, 4, 6, -3, 5, -4, -5, -6, 7, -7, 8, -8, -9];\n var Ff = [\n [\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [253, 136, 254, 255, 228, 219, 128, 128, 128, 128, 128],\n [189, 129, 242, 255, 227, 213, 255, 219, 128, 128,\n 128,\n ],\n [106, 126, 227, 252, 214, 209, 255, 255, 128, 128, 128],\n ],\n [\n [1, 98, 248, 255, 236, 226, 255, 255, 128, 128, 128],\n [181, 133, 238, 254, 221, 234, 255, 154, 128, 128, 128],\n [78, 134, 202, 247, 198, 180, 255, 219, 128, 128, 128],\n ],\n [\n [1, 185, 249, 255, 243, 255, 128, 128, 128, 128, 128],\n [184, 150, 247, 255, 236, 224, 128, 128, 128, 128, 128],\n [77, 110, 216, 255, 236, 230, 128, 128, 128, 128, 128],\n ],\n [\n [1, 101, 251, 255, 241, 255, 128, 128, 128, 128, 128],\n [170, 139, 241, 252, 236, 209, 255, 255, 128, 128, 128],\n [37, 116, 196, 243, 228, 255, 255, 255, 128, 128, 128],\n ],\n [\n [1, 204, 254, 255, 245, 255, 128, 128, 128, 128,\n 128,\n ],\n [207, 160, 250, 255, 238, 128, 128, 128, 128, 128, 128],\n [102, 103, 231, 255, 211, 171, 128, 128, 128, 128, 128],\n ],\n [\n [1, 152, 252, 255, 240, 255, 128, 128, 128, 128, 128],\n [177, 135, 243, 255, 234, 225, 128, 128, 128, 128, 128],\n [80, 129, 211, 255, 194, 224, 128, 128, 128, 128, 128],\n ],\n [\n [1, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [246, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [255, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n ],\n [\n [\n [198, 35, 237, 223, 193, 187, 162, 160, 145, 155, 62],\n [131, 45, 198, 221, 172, 176, 220, 157, 252, 221, 1],\n [68, 47, 146, 208, 149, 167, 221, 162, 255, 223, 128],\n ],\n [\n [1, 149, 241, 255, 221, 224, 255, 255, 128, 128, 128],\n [184, 141, 234, 253, 222, 220, 255, 199, 128, 128, 128],\n [81, 99, 181, 242, 176, 190, 249, 202, 255, 255, 128],\n ],\n [\n [1, 129, 232, 253, 214, 197, 242, 196, 255, 255, 128],\n [99, 121, 210, 250, 201, 198, 255, 202, 128, 128, 128],\n [23, 91, 163, 242, 170, 187, 247, 210, 255, 255, 128],\n ],\n [\n [1, 200, 246, 255, 234, 255, 128, 128, 128, 128, 128],\n [109, 178, 241, 255, 231, 245, 255, 255, 128, 128, 128],\n [44, 130, 201, 253, 205, 192, 255, 255, 128, 128, 128],\n ],\n [\n [1, 132, 239, 251, 219, 209, 255, 165, 128, 128, 128],\n [94, 136, 225, 251, 218, 190, 255, 255, 128, 128, 128],\n [22,\n 100, 174, 245, 186, 161, 255, 199, 128, 128, 128,\n ],\n ],\n [\n [1, 182, 249, 255, 232, 235, 128, 128, 128, 128, 128],\n [124, 143, 241, 255, 227, 234, 128, 128, 128, 128, 128],\n [35, 77, 181, 251, 193, 211, 255, 205, 128, 128, 128],\n ],\n [\n [1, 157, 247, 255, 236, 231, 255, 255, 128, 128, 128],\n [121, 141, 235, 255, 225, 227, 255, 255, 128, 128, 128],\n [45, 99, 188, 251, 195, 217, 255, 224, 128, 128, 128],\n ],\n [\n [1, 1, 251, 255, 213, 255, 128, 128, 128, 128, 128],\n [203, 1, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n [137, 1, 177, 255, 224, 255, 128, 128, 128, 128, 128],\n ],\n ],\n [\n [\n [253, 9, 248, 251, 207, 208, 255, 192, 128, 128, 128],\n [175, 13,\n 224, 243, 193, 185, 249, 198, 255, 255, 128,\n ],\n [73, 17, 171, 221, 161, 179, 236, 167, 255, 234, 128],\n ],\n [\n [1, 95, 247, 253, 212, 183, 255, 255, 128, 128, 128],\n [239, 90, 244, 250, 211, 209, 255, 255, 128, 128, 128],\n [155, 77, 195, 248, 188, 195, 255, 255, 128, 128, 128],\n ],\n [\n [1, 24, 239, 251, 218, 219, 255, 205, 128, 128, 128],\n [201, 51, 219, 255, 196, 186, 128, 128, 128, 128, 128],\n [69, 46, 190, 239, 201, 218, 255, 228, 128, 128, 128],\n ],\n [\n [1, 191, 251, 255, 255, 128, 128, 128, 128, 128, 128],\n [223, 165, 249, 255, 213, 255, 128, 128, 128, 128, 128],\n [141, 124, 248, 255, 255, 128, 128, 128, 128, 128, 128],\n ],\n [\n [1, 16, 248, 255,\n 255, 128, 128, 128, 128, 128, 128,\n ],\n [190, 36, 230, 255, 236, 255, 128, 128, 128, 128, 128],\n [149, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [1, 226, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [247, 192, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [240, 128, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [1, 134, 252, 255, 255, 128, 128, 128, 128, 128, 128],\n [213, 62, 250, 255, 255, 128, 128, 128, 128, 128, 128],\n [55, 93, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n [\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128],\n [128, 128, 128, 128,\n 128, 128, 128, 128, 128, 128, 128,\n ],\n ],\n ],\n [\n [\n [202, 24, 213, 235, 186, 191, 220, 160, 240, 175, 255],\n [126, 38, 182, 232, 169, 184, 228, 174, 255, 187, 128],\n [61, 46, 138, 219, 151, 178, 240, 170, 255, 216, 128],\n ],\n [\n [1, 112, 230, 250, 199, 191, 247, 159, 255, 255, 128],\n [166, 109, 228, 252, 211, 215, 255, 174, 128, 128, 128],\n [39, 77, 162, 232, 172, 180, 245, 178, 255, 255, 128],\n ],\n [\n [1, 52, 220, 246, 198, 199, 249, 220, 255, 255, 128],\n [124, 74, 191, 243, 183, 193, 250, 221, 255, 255, 128],\n [24, 71, 130, 219, 154, 170, 243, 182, 255, 255, 128],\n ],\n [\n [1, 182, 225, 249, 219, 240, 255, 224, 128, 128, 128],\n [149, 150, 226, 252, 216,\n 205, 255, 171, 128, 128, 128,\n ],\n [28, 108, 170, 242, 183, 194, 254, 223, 255, 255, 128],\n ],\n [\n [1, 81, 230, 252, 204, 203, 255, 192, 128, 128, 128],\n [123, 102, 209, 247, 188, 196, 255, 233, 128, 128, 128],\n [20, 95, 153, 243, 164, 173, 255, 203, 128, 128, 128],\n ],\n [\n [1, 222, 248, 255, 216, 213, 128, 128, 128, 128, 128],\n [168, 175, 246, 252, 235, 205, 255, 255, 128, 128, 128],\n [47, 116, 215, 255, 211, 212, 255, 255, 128, 128, 128],\n ],\n [\n [1, 121, 236, 253, 212, 214, 255, 255, 128, 128, 128],\n [141, 84, 213, 252, 201, 202, 255, 219, 128, 128, 128],\n [42, 80, 160, 240, 162, 185, 255, 205, 128, 128, 128],\n ],\n [\n [1, 1, 255, 128, 128, 128, 128,\n 128, 128, 128, 128,\n ],\n [244, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n [238, 1, 255, 128, 128, 128, 128, 128, 128, 128, 128],\n ],\n ],\n ];\n var Rf = [\n [\n [231, 120, 48, 89, 115, 113, 120, 152, 112],\n [152, 179, 64, 126, 170, 118, 46, 70, 95],\n [175, 69, 143, 80, 85, 82, 72, 155, 103],\n [56, 58, 10, 171, 218, 189, 17, 13, 152],\n [114, 26, 17, 163, 44, 195, 21, 10, 173],\n [121, 24, 80, 195, 26, 62, 44, 64, 85],\n [144, 71, 10, 38, 171, 213, 144, 34, 26],\n [170, 46, 55, 19, 136, 160, 33, 206, 71],\n [63, 20, 8, 114, 114, 208, 12, 9, 226],\n [81, 40, 11, 96, 182, 84, 29, 16, 36],\n ],\n [\n [134, 183, 89, 137, 98, 101, 106, 165, 148],\n [72, 187, 100, 130, 157, 111,\n 32, 75, 80,\n ],\n [66, 102, 167, 99, 74, 62, 40, 234, 128],\n [41, 53, 9, 178, 241, 141, 26, 8, 107],\n [74, 43, 26, 146, 73, 166, 49, 23, 157],\n [65, 38, 105, 160, 51, 52, 31, 115, 128],\n [104, 79, 12, 27, 217, 255, 87, 17, 7],\n [87, 68, 71, 44, 114, 51, 15, 186, 23],\n [47, 41, 14, 110, 182, 183, 21, 17, 194],\n [66, 45, 25, 102, 197, 189, 23, 18, 22],\n ],\n [\n [88, 88, 147, 150, 42, 46, 45, 196, 205],\n [43, 97, 183, 117, 85, 38, 35, 179, 61],\n [39, 53, 200, 87, 26, 21, 43, 232, 171],\n [56, 34, 51, 104, 114, 102, 29, 93, 77],\n [39, 28, 85, 171, 58, 165, 90, 98, 64],\n [34, 22, 116, 206, 23, 34, 43, 166, 73],\n [107, 54, 32, 26, 51, 1, 81, 43, 31],\n [68, 25, 106, 22,\n 64, 171, 36, 225, 114,\n ],\n [34, 19, 21, 102, 132, 188, 16, 76, 124],\n [62, 18, 78, 95, 85, 57, 50, 48, 51],\n ],\n [\n [193, 101, 35, 159, 215, 111, 89, 46, 111],\n [60, 148, 31, 172, 219, 228, 21, 18, 111],\n [112, 113, 77, 85, 179, 255, 38, 120, 114],\n [40, 42, 1, 196, 245, 209, 10, 25, 109],\n [88, 43, 29, 140, 166, 213, 37, 43, 154],\n [61, 63, 30, 155, 67, 45, 68, 1, 209],\n [100, 80, 8, 43, 154, 1, 51, 26, 71],\n [142, 78, 78, 16, 255, 128, 34, 197, 171],\n [41, 40, 5, 102, 211, 183, 4, 1, 221],\n [51, 50, 17, 168, 209, 192, 23, 25, 82],\n ],\n [\n [138, 31, 36, 171, 27, 166, 38, 44, 229],\n [67, 87, 58, 169, 82, 115, 26, 59, 179],\n [63, 59, 90, 180, 59, 166, 93, 73,\n 154,\n ],\n [40, 40, 21, 116, 143, 209, 34, 39, 175],\n [47, 15, 16, 183, 34, 223, 49, 45, 183],\n [46, 17, 33, 183, 6, 98, 15, 32, 183],\n [57, 46, 22, 24, 128, 1, 54, 17, 37],\n [65, 32, 73, 115, 28, 128, 23, 128, 205],\n [40, 3, 9, 115, 51, 192, 18, 6, 223],\n [87, 37, 9, 115, 59, 77, 64, 21, 47],\n ],\n [\n [104, 55, 44, 218, 9, 54, 53, 130, 226],\n [64, 90, 70, 205, 40, 41, 23, 26, 57],\n [54, 57, 112, 184, 5, 41, 38, 166, 213],\n [30, 34, 26, 133, 152, 116, 10, 32, 134],\n [39, 19, 53, 221, 26, 114, 32, 73, 255],\n [31, 9, 65, 234, 2, 15, 1, 118, 73],\n [75, 32, 12, 51, 192, 255, 160, 43, 51],\n [88, 31, 35, 67, 102, 85, 55, 186, 85],\n [56, 21, 23, 111, 59, 205, 45, 37, 192],\n [55, 38, 70, 124, 73, 102, 1, 34, 98],\n ],\n [\n [125, 98, 42, 88, 104, 85, 117, 175, 82],\n [95, 84, 53, 89, 128, 100, 113, 101, 45],\n [75, 79, 123, 47, 51, 128, 81, 171, 1],\n [57, 17, 5, 71, 102, 57, 53, 41, 49],\n [38, 33, 13, 121, 57, 73, 26, 1, 85],\n [41, 10, 67, 138, 77, 110, 90, 47, 114],\n [115, 21, 2, 10, 102, 255, 166, 23, 6],\n [101, 29, 16, 10, 85, 128, 101, 196, 26],\n [57, 18, 10, 102, 102, 213, 34, 20, 43],\n [117, 20, 15, 36, 163, 128, 68, 1, 26],\n ],\n [\n [102, 61, 71, 37, 34, 53, 31, 243, 192],\n [69, 60, 71, 38, 73, 119, 28, 222, 37],\n [68, 45, 128, 34, 1, 47, 11, 245, 171],\n [62, 17, 19, 70, 146, 85, 55, 62, 70],\n [37, 43, 37, 154, 100, 163, 85, 160,\n 1,\n ],\n [63, 9, 92, 136, 28, 64, 32, 201, 85],\n [75, 15, 9, 9, 64, 255, 184, 119, 16],\n [86, 6, 28, 5, 64, 255, 25, 248, 1],\n [56, 8, 17, 132, 137, 255, 55, 116, 128],\n [58, 15, 20, 82, 135, 57, 26, 121, 40],\n ],\n [\n [164, 50, 31, 137, 154, 133, 25, 35, 218],\n [51, 103, 44, 131, 131, 123, 31, 6, 158],\n [86, 40, 64, 135, 148, 224, 45, 183, 128],\n [22, 26, 17, 131, 240, 154, 14, 1, 209],\n [45, 16, 21, 91, 64, 222, 7, 1, 197],\n [56, 21, 39, 155, 60, 138, 23, 102, 213],\n [83, 12, 13, 54, 192, 255, 68, 47, 28],\n [85, 26, 85, 85, 128, 128, 32, 146, 171],\n [18, 11, 7, 63, 144, 171, 4, 4, 246],\n [35, 27, 10, 146, 174, 171, 12, 26, 128],\n ],\n [\n [190, 80, 35, 99, 180, 80,\n 126, 54, 45,\n ],\n [85, 126, 47, 87, 176, 51, 41, 20, 32],\n [101, 75, 128, 139, 118, 146, 116, 128, 85],\n [56, 41, 15, 176, 236, 85, 37, 9, 62],\n [71, 30, 17, 119, 118, 255, 17, 18, 138],\n [101, 38, 60, 138, 55, 70, 43, 26, 142],\n [146, 36, 19, 30, 171, 255, 97, 27, 20],\n [138, 45, 61, 62, 219, 1, 81, 188, 64],\n [32, 41, 20, 117, 151, 142, 20, 21, 163],\n [112, 19, 12, 61, 195, 128, 48, 4, 24],\n ],\n ];\n var If = [\n [\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [176, 246, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 241,\n 252, 255, 255, 255, 255, 255, 255, 255, 255,\n ],\n [249, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 244, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 246, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [239, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 253, 255, 254, 255, 255, 255, 255, 255, 255],\n [250, 255, 254, 255, 254, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n ],\n [\n [\n [217, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [225, 252, 241, 253, 255, 255, 254, 255,\n 255, 255, 255,\n ],\n [234, 250, 241, 250, 253, 255, 253, 254, 255, 255, 255],\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [223, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [238, 253, 254, 254, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 248, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [247, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 254, 255, 255,\n 255, 255, 255, 255, 255, 255,\n ],\n [252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255,\n 255, 255, 255, 255, 255, 255, 255, 255,\n ],\n ],\n ],\n [\n [\n [186, 251, 250, 255, 255, 255, 255, 255, 255, 255, 255],\n [234, 251, 244, 254, 255, 255, 255, 255, 255, 255, 255],\n [251, 251, 243, 253, 254, 255, 254, 255, 255, 255, 255],\n ],\n [\n [255, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [236, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [251, 253, 253, 254, 254, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255,\n 255, 255,\n ],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n ],\n [\n [\n [248, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [250, 254, 252, 254, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 249, 253, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [246, 253, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 254, 251, 254, 254, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 254, 252, 255, 255, 255, 255, 255, 255, 255, 255],\n [248, 254, 253, 255, 255, 255,\n 255, 255, 255, 255, 255,\n ],\n [253, 255, 254, 254, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [245, 251, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [253, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 251, 253, 255, 255, 255, 255, 255, 255, 255, 255],\n [252, 253, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [249, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 253,\n 255, 255, 255, 255, 255, 255, 255, 255,\n ],\n [250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n [\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255],\n ],\n ],\n ];\n this.WebPGetDecoderVersion = this.Ld = function () {\n return 512;\n };\n var Nc = [0, 1, 2, 3, 6, 4, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 0];\n var Jf = [\n [173, 148, 140, 0],\n [176, 155, 140, 135, 0],\n [180, 157, 141, 134, 130, 0],\n [254, 254, 243, 230, 196, 177, 153, 140, 133, 130, 129, 0],\n ];\n var Kf = [0, 1, 4, 8, 5, 2, 3, 6,\n 9, 12, 13, 10, 7, 11, 14, 15,\n ];\n var Tf = md([Kc, Lc], '');\n U(4, x);\n var vc = [\n [0, 0, 0, 0],\n [1, 0, 0, 0],\n [0, 1, 0, 0],\n [1, 1, 0, 0],\n [0, 0, 1, 0],\n [1, 0, 1, 0],\n [0, 1, 1, 0],\n [1, 1, 1, 0],\n [0, 0, 0, 1],\n [1, 0, 0, 1],\n [0, 1, 0, 1],\n [1, 1, 0, 1],\n [0, 0, 1, 1],\n [1, 0, 1, 1],\n [0, 1, 1, 1],\n [1, 1, 1, 1],\n ];\n var Lf = 134480385;\n var ea = 16;\n var J = -227;\n var dd = 482;\n var Ce = [Wc, function (a) {\n return a;\n }, function (a, b, c) {\n return b[c + 0];\n }, function (a, b, c) {\n return b[c + 1];\n }, function (a, b, c) {\n return b[c - 1];\n }, function (a, b, c) {\n return ka(ka(a, b[c + 1]), b[c + 0]);\n }, function (a, b, c) {\n return ka(a, b[c - 1]);\n }, function (a, b, c) {\n return ka(a, b[c + 0]);\n }, function (a,\n b, c) {\n return ka(b[c - 1], b[c + 0]);\n }, function (a, b, c) {\n return ka(b[c + 0], b[c + 1]);\n }, function (a, b, c) {\n return ka(ka(a, b[c - 1]), ka(b[c + 0], b[c + 1]));\n }, function (a, b, c) {\n return Math.abs((a >> 24 & 255) - (b[c - 1] >> 24 & 255)) - Math.abs((b[c + 0] >> 24 & 255) - (b[c - 1] >> 24 & 255)) + (Math.abs((a >> 16 & 255) - (b[c - 1] >> 16 & 255)) - Math.abs((b[c + 0] >> 16 & 255) - (b[c - 1] >> 16 & 255))) + (Math.abs((a >> 8 & 255) - (b[c - 1] >> 8 & 255)) - Math.abs((b[c + 0] >> 8 & 255) - (b[c - 1] >> 8 & 255))) + (Math.abs((a & 255) - (b[c - 1] & 255)) - Math.abs((b[c + 0] & 255) - (b[c - 1] & 255))) <= 0 ? b[c + 0] : a;\n }, function (a, b, c) {\n return ($a((a\n >> 24 & 255) + (b[c + 0] >> 24 & 255) - (b[c - 1] >> 24 & 255)) << 24 | $a((a >> 16 & 255) + (b[c + 0] >> 16 & 255) - (b[c - 1] >> 16 & 255)) << 16 | $a((a >> 8 & 255) + (b[c + 0] >> 8 & 255) - (b[c - 1] >> 8 & 255)) << 8 | $a((a & 255) + (b[c + 0] & 255) - (b[c - 1] & 255))) >>> 0;\n }, function (a, b, c) {\n const d = b[c - 1];\n a = ka(a, b[c + 0]);\n return (yb(a >> 24 & 255, d >> 24 & 255) << 24 | yb(a >> 16 & 255, d >> 16 & 255) << 16 | yb(a >> 8 & 255, d >> 8 & 255) << 8 | yb(a >> 0 & 255, d >> 0 & 255)) >>> 0;\n }, Wc, Wc];\n var Xf = {\n Cc: x,\n Bc: x,\n Kc: x,\n };\n var $c = 16;\n var Me = 16;\n var kg = 16;\n var mg = [2, 3, 7];\n var lg = [3, 3, 11];\n var Zf = 0;\n var $f = 1;\n var ag = 2;\n var bg = 3;\n var cg = 4;\n var hg = [Ba + Ge, Ba, Ba, Ba, 40];\n var Ke = 19;\n var ig = [17, 18, 0, 1, 2, 3, 4, 5, 16,\n 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n ];\n var He = 120;\n var dg = [24, 7, 23, 25, 40, 6, 39, 41, 22, 26, 38, 42, 56, 5, 55, 57, 21, 27, 54, 58, 37, 43, 72, 4, 71, 73, 20, 28, 53, 59, 70, 74, 36, 44, 88, 69, 75, 52, 60, 3, 87, 89, 19, 29, 86, 90, 35, 45, 68, 76, 85, 91, 51, 61, 104, 2, 103, 105, 18, 30, 102, 106, 34, 46, 84, 92, 67, 77, 101, 107, 50, 62, 120, 1, 119, 121, 83, 93, 17, 31, 100, 108, 66, 78, 118, 122, 33, 47, 117, 123, 49, 63, 99, 109, 82, 94, 0, 116, 124, 65, 79, 16, 32, 98, 110, 48, 115, 125, 81, 95, 64, 114, 126, 97, 111, 80, 113, 127, 96, 112];\n var Jb = 1 << ea - 1;\n var Za = U(256, 0);\n var xb = U(256, 0);\n var vb = U(256, la);\n var wb = U(256, la);\n var ia = U(dd - J, x);\n var Hb = U(dd\n - J, x);\n var Xe = 0;\n var V = Array(Cc);\n var vg = [function (a, b, c, d, e, f, k, h, n, l, m, t, q) {\n Ca(a, b, c, d, e, f, k, h, n, l, m, t, q, hc, 3);\n }, Se, function (a, b, c, d, e, f, k, h, n, l, m, t, q) {\n Ca(a, b, c, d, e, f, k, h, n, l, m, t, q, Vc, 3);\n }, Te, Ue, Ve, function (a, b, c, d, e, f, k, h, n, l, m, t, q) {\n Ca(a, b, c, d, e, f, k, h, n, l, m, t, q, le, 2);\n }, Se, Te, Ue, Ve];\n this.Hd = function (a, b, c, d) {\n return lb(Qa, a, b, c, d);\n };\n this.Id = function (a, b, c, d) {\n return lb(jb, a, b, c, d);\n };\n this.Jd = function (a, b, c, d) {\n return lb(kb, a, b, c, d);\n };\n this.Ed = function (a, b, c, d) {\n return lb(Ab, a, b, c, d);\n };\n this.Fd = function (a, b, c, d) {\n return lb(Zc,\n a, b, c, d);\n };\n this.Gd = function (a, b, c, d) {\n return lb(Pa, a, b, c, d);\n };\n this.WebPDecode = this.Dd = function (a, b, c) {\n const d = M(df);\n let e = 'VP8StatusCode';\n if (c == p) return ta;\n e = hd(a, [0], [b], c.input);\n if (e != L) return e == Z ? W : e;\n d.j = c.j;\n d.Qa = c.Qa;\n return e = cf(a, 0, [b], d);\n };\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {webp2png} from './webp';\nimport type {ConvertWebPTask} from './webpWorkerController';\n\nconst ctx = self as any as DedicatedWorkerGlobalScope;\nconst tasks: ConvertWebPTask[] = [];\n// let isProcessing = false;\n\nfunction finishTask() {\n // isProcessing = false;\n processTasks();\n}\n\nfunction processTasks() {\n // if(isProcessing) return;\n\n const task = tasks.shift();\n if(!task) return;\n\n // isProcessing = true;\n\n switch(task.type) {\n case 'convertWebp': {\n const {fileName, bytes} = task.payload;\n\n let convertedBytes: Uint8Array;\n try {\n convertedBytes = webp2png(bytes).bytes;\n } catch(err) {\n console.error('Convert webp2png error:', err, 'payload:', task.payload);\n }\n\n ctx.postMessage({\n type: 'convertWebp',\n payload: {\n fileName,\n bytes: convertedBytes\n }\n });\n\n finishTask();\n\n break;\n }\n\n default:\n finishTask();\n }\n}\n\nfunction scheduleTask(task: ConvertWebPTask) {\n tasks.push(task);\n /* if(task.payload.fileName.indexOf('main-') === 0) {\n tasks.push(task);\n } else {\n tasks.unshift(task);\n } */\n\n processTasks();\n}\n\nctx.addEventListener('message', (event) => {\n scheduleTask(event.data);\n});\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {WebPDecoder} from '../../vendor/libwebp-0.2.0';\nimport {encode} from 'fast-png';\n\nexport function webp2png(data: Uint8Array) {\n const decoder = new WebPDecoder();\n const config: any = decoder.WebPDecoderConfig;\n const buffer = config.j || config.output;\n const bitstream = config.input;\n\n decoder.WebPInitDecoderConfig(config);\n decoder.WebPGetFeatures(data, data.length, bitstream);\n\n /** MODE_RGBA = 1 MODE_ARGB = 4, */\n buffer.J = 1;\n\n let status;\n try {\n status = decoder.WebPDecode(data, data.length, config);\n } catch(e) {\n status = e;\n }\n\n if(status === 0) {\n const rgbaData = buffer.Jb;\n const pngData = encode({\n data: rgbaData,\n width: buffer.width,\n height: buffer.height,\n channels: 4,\n depth: 8\n });\n\n return {status, bytes: pngData};\n }\n\n return {status, bytes: data};\n}\n\nexport function webp2pngAsBlob(data: Uint8Array) {\n const {status, bytes} = webp2png(data);\n return new Blob([bytes], {type: status === 0 ? 'image/png' : 'image/webp'});\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [699,866,158], () => (__webpack_require__(2061)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"158\":\"npm.iobuffer\",\"699\":\"npm.pako\",\"866\":\"npm.fast-png\"}[chunkId] + \".\" + {\"158\":\"8fe11aa09121a6fd9200\",\"699\":\"89deb457201f16c93925\",\"866\":\"a7cba17ee621cb2ad512\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t61: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","i","p","M","F","JSON","parse","stringify","N","G","w","D","S","Nb","length","push","ic","rc","memmove","arr1","index1","arr2","index2","jd","kd","ga","String","fromCharCode","U","ld","md","$","Error","WebPDecoder","a","Ob","Pb","Bb","Qb","b","c","la","d","e","Z","gc","bc","qa","Ia","Rb","ya","T","Q","g","L","fa","Sb","Da","gf","hf","ma","Pa","gb","nd","Y","jf","s","ja","jc","k","h","n","l","kc","od","Tb","pd","Ea","qd","P","v","Ga","ub","Xb","m","f","q","r","u","C","Ub","kf","lf","rd","Vb","A","z","sd","td","na","put","ud","Mb","vd","wd","ka","fd","width","height","o","Wa","Cb","Ka","xd","Db","lc","V","Ha","mf","sa","nf","zd","ta","Ua","wc","vc","t","I","Ba","Aa","J","Qa","Cc","Fc","Jb","yd","ua","parseInt","Ra","cb","RGBA","Sa","size","Va","y","Wc","B","nb","Rc","rb","Uc","Wb","Fa","of","mb","Ad","pf","qf","mc","nc","rf","Dc","oa","Yb","Zb","sc","oc","Bd","va","Cd","tc","Dd","Ed","sf","tf","uf","vf","wf","xf","yf","zf","Af","Bf","Fd","$b","Cf","Df","Ef","Ec","wa","Gd","xc","alert","za","Hd","Id","Jd","Gc","data","Kd","ia","W","pa","offset","Ac","fb","Jc","Nc","gd","hd","Ma","hb","K","R","Ta","Ff","Ca","pb","ob","tb","Kb","Lb","uc","$c","xa","Ld","Ab","Oc","Fb","kb","Hc","Lc","Gf","Hb","yb","Ic","sb","qc","Hf","Zc","Md","Nd","Kc","If","pc","Pc","fc","dd","cd","Mc","Jf","Kf","Lf","Mf","Nf","Za","lb","Ya","wb","Ja","qb","WebPWorkerReset","Qd","Rd","Ud","FinishRow","jb","Od","Of","Pf","Pd","Gb","ib","dc","Xc","Sc","Vc","Sd","ha","H","ca","da","aa","ba","ra","La","Qc","Td","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","Qf","db","X","cc","O","Eb","Rf","Sf","de","ee","fe","ge","Tc","Oa","Tf","ea","ab","Xa","he","vb","xb","ac","ie","Uf","$a","Vf","je","zb","zc","yc","eb","WebPWorkerSync","OK","hc","WebPWorkerLaunch","Ib","Na","ec","Bc","ke","le","me","ne","oe","pe","qe","re","se","te","ue","ve","we","Wf","xe","Yc","ye","bd","ze","Ae","Be","Ce","De","Xf","Ee","Yf","EmitRescaledRows","WebPApplyAlphaMultiply","WebPApplyAlphaMultiply4444","Fe","EmitRescaledRowsYUVA","EmitRowsYUVA","Ge","Zf","$f","ag","bg","ad","bb","cg","He","dg","End","Ie","eg","Je","Array","fg","gg","hg","Ke","ig","jg","Le","Me","kg","lg","mg","pg","qg","Oe","Pe","Qe","Re","rg","Se","Te","Ue","Ve","sg","tg","j","ug","vg","wg","xg","We","yg","zg","memory","Ne","InitRGBRescaler","InitYUVRescaler","Xe","ed","Ye","Ag","Bg","Ze","$e","af","bf","cf","ng","AllocateAndInitRescaler","og","Cg","this","value","df","ef","WEBP_CSP_MODE","VP8StatusCode","rotate","WebPGetFeatures","ff","WebPDecoderConfig","input","options","WebPInitDecoderConfig","Math","pow","Eg","Fg","Gg","id","Hg","Ig","Kg","WebPFreeDecBuffer","WebPGetDecoderVersion","abs","WebPDecode","ctx","self","tasks","finishTask","processTasks","task","shift","type","fileName","bytes","payload","convertedBytes","decoder","config","buffer","output","bitstream","status","rgbaData","channels","depth","webp2png","err","console","error","postMessage","addEventListener","event","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","__webpack_modules__","call","x","__webpack_exports__","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","Object","keys","every","key","splice","definition","defineProperty","enumerable","get","chunkId","Promise","all","reduce","promises","miniCssF","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","replace","oldGetScript","oldLoadScript","queryMap","countMap","catch","retries","realSrc","message","request","resolve","setTimeout","cacheBust","Date","now","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","bind","moreModules","runtime","pop","map","then"],"sourceRoot":""} \ No newline at end of file diff --git a/public/crypto.worker.9e5cd838e641988dc44f.chunk.js b/public/crypto.worker.5fdc4de518d781a4e437.chunk.js similarity index 99% rename from public/crypto.worker.9e5cd838e641988dc44f.chunk.js rename to public/crypto.worker.5fdc4de518d781a4e437.chunk.js index 987fb903..b2fd0864 100644 --- a/public/crypto.worker.9e5cd838e641988dc44f.chunk.js +++ b/public/crypto.worker.5fdc4de518d781a4e437.chunk.js @@ -1,2 +1,2 @@ (()=>{"use strict";var e,t,n={410:(e,t,n)=>{n.d(t,{GO:()=>o,ZP:()=>i});const r=n(1267).Z.debug,o="undefined"!=typeof window?window:self,i=r},4762:(e,t,n)=>{n.d(t,{IS_FIREFOX:()=>f,IS_SAFARI:()=>i});var r=n(6761);const o=navigator?navigator.userAgent:null,i=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&r.Z.MSStream,!!("safari"in r.Z)||!(!o||!(/\b(iPad|iPhone|iPod)\b/.test(o)||o.match("Safari")&&!o.match("Chrome")))),f=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;(void 0===navigator.maxTouchPoints||navigator.maxTouchPoints>0)&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},1352:(e,t,n)=>{n.d(t,{N5:()=>o,SU:()=>r,kC:()=>i});const r="undefined"!=typeof ServiceWorkerGlobalScope&&self instanceof ServiceWorkerGlobalScope,o="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&!r,i=o||r,f=(e,...t)=>{try{e.postMessage(...t)}catch(e){console.error("[worker] postMessage error:",e,t)}},c=(e,...t)=>{self.clients.matchAll({includeUncontrolled:!1,type:"window"}).then((n=>{n.length&&n.slice(e?0:-1).forEach((e=>{f(e,...t)}))}))};r&&c.bind(null,!1),r&&c.bind(null,!0)},6991:(e,t,n)=>{function r(...e){const t=e.reduce(((e,t)=>e+(t.byteLength||t.length)),0),n=new Uint8Array(t);let r=0;return e.forEach((e=>{n.set(e instanceof ArrayBuffer?new Uint8Array(e):e,r),r+=e.byteLength||e.length})),n}Uint8Array.prototype.concat=function(...e){return r(this,...e)},Uint8Array.prototype.toJSON=function(){return[...this]},Promise.prototype.finally=Promise.prototype.finally||function(e){const t=t=>Promise.resolve(e()).then(t);return this.then((e=>t((()=>e))),(e=>t((()=>Promise.reject(e)))))};var o=n(4736),i=n.n(o);i()(Number.MAX_SAFE_INTEGER);const f=i()(i()[2]).pow(64),c=f.divide(i()[2]);function a(e,t=256){return i().fromArray(e instanceof Uint8Array?[...e]:e,t)}function s(e){return new Uint8Array(e.toArray(256).value)}function u(e,t,n){const r=a(e),o=a(t),i=a(n);return s(r.modPow(o,i))}var h=n(745),l=n.n(h),d=n(6761),y=n(153),p=n(410),v=n(1352);class g extends y.Z{constructor(){super("CRYPTO"),this.lastIndex=-1}invokeCryptoNew({method:e,args:t,transfer:n}){const r={method:e,args:t},o=this.listeners.invoke;if(null==o?void 0:o.length){let e=o[0].callback(r);return v.kC||e instanceof Promise||(e=Promise.resolve(e)),e}const i="aes-encrypt"===e||"aes-decrypt"===e?this.lastIndex=(this.lastIndex+1)%this.sendPorts.length:0;return this.invoke("invoke",r,void 0,this.sendPorts[i],n)}invokeCrypto(e,...t){return this.invokeCryptoNew({method:e,args:t})}}const w=new g;p.GO&&(p.GO.cryptoMessagePort=w);const b=w;function m(e){const t=e.length,n=8*t;let r=i()(e[0]).and(127).shiftLeft(n-8);for(let o=1;o0&&c>7),f[i[s]^s]=s;for(;!x[c];c^=e||1)n=(n=a^a<<1^a<<2^a<<3^a<<4)>>8^255&n^99,x[c]=n,K[n]=c,o=16843009*i[t=i[e=i[c]]]^65537*t^257*e^16843008*c,r=257*i[n]^16843008*n,E[c]=r=r<<24^r>>>8,L[c]=r=r<<24^r>>>8,O[c]=r=r<<24^r>>>8,F[c]=r=r<<24^r>>>8,_[n]=o=o<<24^o>>>8,I[n]=o=o<<24^o>>>8,z[n]=o=o<<24^o>>>8,N[n]=o=o<<24^o>>>8,a=f[a]||1}();var R=function(){function e(e){var t=Z(e);if(4!==t.length&&6!==t.length&&8!==t.length)throw new Error("Invalid key size");this.encKey=new Uint32Array(4*t.length+28),this.decKey=new Uint32Array(4*t.length+28),this.encKey.set(t);for(var n,r=1,o=t.length;o<4*t.length+28;o++)n=this.encKey[o-1],(o%t.length==0||8===t.length&&o%t.length==4)&&(n=x[n>>>24]<<24^x[n>>16&255]<<16^x[n>>8&255]<<8^x[255&n],o%t.length==0&&(n=n<<8^n>>>24^r<<24,r=r<<1^283*(r>>7))),this.encKey[o]=this.encKey[o-t.length]^n;for(var i=0;o;i++,o--)n=this.encKey[3&i?o:o-4],this.decKey[i]=o<=4||i<4?n:_[x[n>>>24]]^I[x[n>>16&255]]^z[x[n>>8&255]]^N[x[255&n]]}return e.prototype.encrypt=function(e){for(var t,n,r,o=Z(e),i=new Uint32Array(4),f=o[0]^this.encKey[0],c=o[1]^this.encKey[1],a=o[2]^this.encKey[2],s=o[3]^this.encKey[3],u=this.encKey.length/4-2,h=4,l=0;l>>24]^L[c>>16&255]^O[a>>8&255]^F[255&s]^this.encKey[h],n=E[c>>>24]^L[a>>16&255]^O[s>>8&255]^F[255&f]^this.encKey[h+1],r=E[a>>>24]^L[s>>16&255]^O[f>>8&255]^F[255&c]^this.encKey[h+2],s=E[s>>>24]^L[f>>16&255]^O[c>>8&255]^F[255&a]^this.encKey[h+3],f=t,c=n,a=r,h+=4;for(l=0;l<4;l++)i[l]=x[f>>>24]<<24^x[c>>16&255]<<16^x[a>>8&255]<<8^x[255&s]^this.encKey[h++],t=f,f=c,c=a,a=s,s=t;return i},e.prototype.decrypt=function(e){for(var t,n,r,o=Z(e),i=new Uint32Array(4),f=o[0]^this.decKey[0],c=o[3]^this.decKey[1],a=o[2]^this.decKey[2],s=o[1]^this.decKey[3],u=this.decKey.length/4-2,h=4,l=0;l>>24]^I[c>>16&255]^z[a>>8&255]^N[255&s]^this.decKey[h],n=_[c>>>24]^I[a>>16&255]^z[s>>8&255]^N[255&f]^this.decKey[h+1],r=_[a>>>24]^I[s>>16&255]^z[f>>8&255]^N[255&c]^this.decKey[h+2],s=_[s>>>24]^I[f>>16&255]^z[c>>8&255]^N[255&a]^this.decKey[h+3],f=t,c=n,a=r,h+=4;for(l=0;l<4;l++)i[3&-l]=K[f>>>24]<<24^K[c>>16&255]<<16^K[a>>8&255]<<8^K[255&s]^this.decKey[h++],t=f,f=c,c=a,a=s,s=t;return i},e}(),T=function(){function e(e,t,n){void 0===n&&(n=16),this.key=Z(e),this.iv=Z(t),this.cipher=new R(e),this.blockSize=n/4}return e.prototype.encrypt=function(e,t){for(var n=Z(e),r=t||new Uint32Array(n.length),o=this.iv.subarray(this.blockSize,this.iv.length),i=this.iv.subarray(0,this.blockSize),f=new Uint32Array(this.blockSize),c=0;c>>2]|=t[e]<<24-e%4*8;return new Uint32Array(n)}function W(e,t,n,r=!0){return function(e){const t=new Uint8Array(e.byteLength);for(let n=0,r=4*e.length;n>>2]>>>24-n%4*8&255;return t}(new T(B(t),B(n))[r?"encrypt":"decrypt"](B(e)))}!function(){function e(e,t,n){if(void 0===n&&(n=16),this.offset=0,this.key=Z(e),this.counter=Z(t),this.cipher=new R(e),this.blockSize=n/4,4!==this.counter.length)throw new Error("AES-CTR mode counter must be 16 bytes length")}e.prototype.encrypt=function(e,t){for(var n=Z(e),r=t||new Uint32Array(n.length),o=this.offset,i=0;i=this.blockSize&&this.incrementCounter(),o&&(i-=o,o=0)}return this.offset=(this.offset+n.length%4)%4,r},e.prototype.decrypt=function(e,t){return this.encrypt(e,t)},e.prototype.incrementCounter=function(){for(var e=this.counter.length-1;e>=0&&!(++this.counter[e]<4294967295);e--);}}();const G={8:new Uint8Array(1),16:new Uint16Array(1),32:new Uint32Array(1)};function j(e,t){return i().randBetween(e,t,(()=>function(e){const t=G[e];return crypto.getRandomValues(t),t[0]}(32)/4294967295))}function q(e){const t=i()[2];if(e.remainder(t).isZero())return t;const n=i()(1e3);let r,o,f,c,a,s,u;do{r=j(i().one,e.minus(1))}while(r.isZero()||r.eq(e.minus(t)));f=j(i().one,e.minus(1)),a=i().one,s=i().one;const h=i()("FFFFFFFFFFFFFFFF",16).minus(e).plus(1),l=n=>((n=(n=n.pow(t).mod(e)).add(r)).lesser(r)&&(n=n.add(h)),n.mod(e));do{o=f;for(let e=0;i()(e).lesser(a);++e)f=l(f);let t=i().zero;do{c=f;const r=i().min(n,a.minus(t));for(let t=0;i()(t).lesser(r);++t)f=l(f),s=s.multiply(o.greater(f)?o.minus(f):f.minus(o)).mod(e);u=i().gcd(s,e),t=t.add(n)}while(t.lesser(a)&&u.eq(i().one));a=a.shiftLeft(i().one)}while(u.eq(i().one));if(u.eq(e))do{c=l(c),u=i().gcd(o.minus(c).abs(),e)}while(u.eq(i().one));return u}const D="undefined"!=typeof window&&"crypto"in window?window.crypto.subtle:self.crypto.subtle;var J=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function f(e){try{a(r.next(e))}catch(e){i(e)}}function c(e){try{a(r.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(f,c)}a((r=r.apply(e,t||[])).next())}))};class ${constructor(e,t,n){this.mode=e,this.cryptoKey=t,this.queue=[],this.counter=a(n)}update(e){return J(this,void 0,void 0,(function*(){return new Promise((t=>{this.queue.push({data:e,resolve:t}),this.release()}))}))}release(){return J(this,void 0,void 0,(function*(){if(!this.releasing){for(this.releasing=!0;this.queue.length;){const{data:e,resolve:t}=this.queue.shift();t(yield this._update(e))}this.releasing=!1}}))}perform(e){return J(this,void 0,void 0,(function*(){return yield D[this.mode]({name:"AES-CTR",counter:S(s(this.counter),16,!0,!0,!0),length:128},this.cryptoKey,e)}))}_update(e){return J(this,void 0,void 0,(function*(){let t,n=e;if(this.leftLength){const e=this.leftLength,r=16-e,o=new Uint8Array(e).concat(n.slice(0,r)),i=yield this.perform(o);t=new Uint8Array(i.slice(e)),n=n.slice(r),this.counter=this.counter.add(1)}const r=new Uint8Array(yield this.perform(n)),o=t?t.concat(r):r;let i=n.length;const f=i%16;i-=f;const c=i/16;return this.counter=this.counter.add(c),this.leftLength=f||void 0,o}))}}var V=function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function f(e){try{a(r.next(e))}catch(e){i(e)}}function c(e){try{a(r.throw(e))}catch(e){i(e)}}function a(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(f,c)}a((r=r.apply(e,t||[])).next())}))};const X=new Map;let H=-1;console.log("CryptoWorker start");const Y={sha1:function(e){return D.digest("SHA-1",U(e)).then((e=>new Uint8Array(e)))},sha256:function(e){return D.digest("SHA-256",U(e)).then((e=>new Uint8Array(e)))},pbkdf2:function(e,t,n){return r=this,o=void 0,f=function*(){const r=yield D.importKey("raw",e,{name:"PBKDF2"},!1,["deriveBits"]);return D.deriveBits({name:"PBKDF2",salt:t,iterations:n,hash:{name:"SHA-512"}},r,512).then((e=>new Uint8Array(e)))},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{a(f.next(e))}catch(e){t(e)}}function c(e){try{a(f.throw(e))}catch(e){t(e)}}function a(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,c)}a((f=f.apply(r,o||[])).next())}));var r,o,i,f},"aes-encrypt":function(e,t,n){return W(S(e),t,n,!0)},"aes-decrypt":function(e,t,n){return W(e,t,n,!1)},"rsa-encrypt":function(e,t){return u(e,P(t.exponent),P(t.modulus))},factorize:function(e){let t=function(e){const t=a(e),n=[],r=[];let o=q(t);n.push(t.divide(o)),n.push(o);do{const e=n.pop();if(!e.eq(i().one))if(e.isPrime(!0)){r.push(e);for(let t=0;te.compare(t))),t.length>2&&(t=[t.splice(t.length-2,1)[0],t.reduce(((e,t)=>e.multiply(t)),i().one)]);const n=t[0],r=t[t.length-1];return(n.lesser(r)?[n,r]:[r,n]).map((e=>s(e)))},"mod-pow":u,gzipUncompress:function(e,t){return l().inflate(e,t?{to:"string"}:void 0)},computeSRP:function(e,t,n){return C(this,void 0,void 0,(function*(){const o=n?t.new_algo:t.current_algo,f=a(o.p),c=i()(o.g),u=yield function(e,t,n){return C(this,void 0,void 0,(function*(){let o=yield b.invokeCrypto("sha256",r(t,(new TextEncoder).encode(e),t));o=r(n,o,n),o=yield b.invokeCrypto("sha256",o);let i=yield b.invokeCrypto("pbkdf2",new Uint8Array(o),t,1e5);return i=r(n,i,n),o=yield b.invokeCrypto("sha256",i),o}))}(e,o.salt1,o.salt2),h=i()(function(e){const t=e.length,n=new Array(t);for(let r=0;r{const t=new Uint8Array(e.length);for(let n=0;n{const n=t.subtract(e);return!(n.isNegative()||n.bitLength().toJSNumber()<1984||e.bitLength().toJSNumber()<1984||Math.floor((e.bitLength().toJSNumber()+7)/8)>256)},{a:k,a_for_hash:P,u:x}=yield(()=>C(this,void 0,void 0,(function*(){for(;;){const e=a(y(t.secure_random)),n=c.modPow(e,f);if(A(n,f)){const t=s(n),o=a(yield b.invokeCrypto("sha256",r(t,w)));if(!o.isZero()&&!o.isNegative())return{a:e,a_for_hash:t,u:o}}}})))();let K;K=p.greater(m)?p:p.add(f),K=K.subtract(m).mod(f);const E=x.multiply(h),L=k.add(E),O=K.modPow(L,f),F=yield b.invokeCrypto("sha256",l(s(O),256));let _=yield b.invokeCrypto("sha256",v);_=function(e,t){const n=e.length,r=new Uint8Array(n);for(let o=0;o{for(;;){const t=k(new Uint8Array(e.length)),n=a(t);if(!n.greater(i().one))continue;const r=a(e);if(n.lesser(r.subtract(i().one)))return t}})(t),o=P(n.toString(16)),f=S(yield b.invokeCrypto("mod-pow",o,r,t),256,!0,!0,!0);return{a:r,g_a:f,g_a_hash:yield b.invokeCrypto("sha256",f),p:t}},new((r=void 0)||(r=Promise))((function(e,i){function f(e){try{a(o.next(e))}catch(e){i(e)}}function c(e){try{a(o.throw(e))}catch(e){i(e)}}function a(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(f,c)}a((o=o.apply(t,n||[])).next())}));var t,n,r,o},"compute-dh-key":function(e,t,n){return r=this,o=void 0,s=function*(){const r=yield b.invokeCrypto("mod-pow",e,t,n);var o;return{key:r,key_fingerprint:(o=a((yield b.invokeCrypto("sha1",r)).slice(-8).reverse()),o.greater(c)?o.minus(f):o).toString(10)}},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function f(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var r;t.done?e(t.value):(r=t.value,r instanceof i?r:new i((function(e){e(r)}))).then(n,f)}c((s=s.apply(r,o||[])).next())}));var r,o,i,s},"get-emojis-fingerprint":function(e,t){return n=this,r=void 0,i=function*(){const n=e.concat(t),r=yield b.invokeCrypto("sha256",n),o=[],i=A.length;for(let e=0;e!=r.length;e+=8){const t=m(r.slice(e,e+8)).mod(i).toJSNumber(),n=A[t];o.push(n)}return o},new((o=void 0)||(o=Promise))((function(e,t){function f(e){try{a(i.next(e))}catch(e){t(e)}}function c(e){try{a(i.throw(e))}catch(e){t(e)}}function a(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(f,c)}a((i=i.apply(n,r||[])).next())}));var n,r,o,i},"aes-ctr-prepare":function({encKey:e,encIv:t,decKey:n,decIv:r}){return V(this,void 0,void 0,(function*(){const o=++H,i=[["encrypt",e],["decrypt",n]].map((([e,t])=>D.importKey("raw",t,{name:"AES-CTR"},!1,[e]))),[f,c]=yield Promise.all(i),a={enc:new $("encrypt",f,t.slice()),dec:new $("decrypt",c,r.slice())};return X.set(o,a),o}))},"aes-ctr-process":function({id:e,data:t,operation:n}){return V(this,void 0,void 0,(function*(){const r=X.get(e);return yield("encrypt"===n?r.enc:r.dec).update(t)}))},"aes-ctr-destroy":function(e){X.delete(e)}};b.addMultipleEventsListeners({invoke:({method:e,args:t})=>Y[e](...t),terminate:()=>{d.Z.close()}}),"undefined"!=typeof MessageChannel&&function(e,t,n){const r=(n,r)=>{e.attachListenPort(n),r&&e.attachSendPort(r),null==t||t(n)};e.setOnPortDisconnect(void 0),"undefined"!=typeof SharedWorkerGlobalScope?d.Z.addEventListener("connect",(e=>r(e.source,e.source))):"undefined"!=typeof ServiceWorkerGlobalScope?r(d.Z,null):r(d.Z,d.Z)}(b,(e=>{const t=new MessageChannel;b.attachPort(t.port1),b.invokeVoid("port",void 0,e,[t.port2])}))},5003:(e,t,n)=>{n.d(t,{kg:()=>d});var r,o=n(410),i=n(4762),f=n(1352),c=n(5289);!function(e){e[e.None=0]="None",e[e.Error=1]="Error",e[e.Warn=2]="Warn",e[e.Log=4]="Log",e[e.Debug=8]="Debug"}(r||(r={}));const a=[r.None,r.Error,r.Warn,r.Log,r.Debug],s=!(i.IS_SAFARI||i.IS_FIREFOX),u="",h="",l=[["debug",r.Debug],["info",r.Log],["warn",r.Warn],["error",r.Error],["assert",r.Error],["trace",r.Log],["group",r.Log],["groupCollapsed",r.Log],["groupEnd",r.Log]];function d(e,t=r.Log|r.Warn|r.Error,n=!1,i=""){let y;o.ZP||n||(t=r.Error),s?i||(f.SU?i=u:f.N5&&(i=h)):i="";const p=i;i=i?`%s ${i}%s`:"%s";const v=function(...n){return t&r.Log&&console.log(i,(0,c.Z)(),e,...n)};return l.forEach((([n,r])=>{v[n]=function(...o){return t&r&&console[n](i,(0,c.Z)(),e,...o)}})),v.setPrefix=function(t){y=t,e="["+t+"]"},v.setPrefix(e),v.setLevel=function(e){t=a.slice(0,e+1).reduce(((e,t)=>e|t),0)},v.bindPrefix=function(e){return d(`${y}] [${e}`,t,n,p)},v}}},r={};function o(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={id:e,loaded:!1,exports:{}};return n[e].call(i.exports,i,i.exports,o),i.loaded=!0,i.exports}o.m=n,o.x=()=>{var e=o.O(void 0,[699,211,85],(()=>o(6991)));return o.O(e)},e=[],o.O=(t,n,r,i)=>{if(!n){var f=1/0;for(u=0;u=i)&&Object.keys(o.O).every((e=>o.O[e](n[a])))?n.splice(a--,1):(c=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,r,i]},o.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return o.d(t,{a:t}),t},o.d=(e,t)=>{for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.f={},o.e=e=>Promise.all(Object.keys(o.f).reduce(((t,n)=>(o.f[n](e,t),t)),[])),o.u=e=>85===e?"85.887945ef5f43bc205112.bundle.js":{211:"npm.big-integer",699:"npm.pako"}[e]+"."+{211:"363d763daad0ee4e2741",699:"89deb457201f16c93925"}[e]+".chunk.js",o.miniCssF=e=>{},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;o.g.importScripts&&(e=o.g.location+"");var t=o.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),o.p=e})(),(()=>{if(void 0!==o){var e=o.u,t=o.e,n={},r={};o.u=function(t){return e(t)+(n.hasOwnProperty(t)?"?"+n[t]:"")},o.e=function(i){return t(i).catch((function(t){var f=r.hasOwnProperty(i)?r[i]:999999;if(f<1){var c=e(i);throw t.message="Loading chunk "+i+" failed after 999999 retries.\n("+c+")",t.request=c,t}return new Promise((function(e){setTimeout((function(){var t=Date.now();n[i]=t,r[i]=f-1,e(o.e(i))}),3e3)}))}))}}})(),(()=>{var e={589:1};o.f.i=(t,n)=>{e[t]||importScripts(o.p+o.u(t))};var t=this.webpackChunktweb=this.webpackChunktweb||[],n=t.push.bind(t);t.push=t=>{var[r,i,f]=t;for(var c in i)o.o(i,c)&&(o.m[c]=i[c]);for(f&&f(o);r.length;)e[r.pop()]=1;n(t)}})(),t=o.x,o.x=()=>Promise.all([699,211,85].map(o.e,o)).then(t),o.x()})(); -//# sourceMappingURL=crypto.worker.9e5cd838e641988dc44f.chunk.js.map \ No newline at end of file +//# sourceMappingURL=crypto.worker.5fdc4de518d781a4e437.chunk.js.map \ No newline at end of file diff --git a/public/crypto.worker.9e5cd838e641988dc44f.chunk.js.map b/public/crypto.worker.5fdc4de518d781a4e437.chunk.js.map similarity index 99% rename from public/crypto.worker.9e5cd838e641988dc44f.chunk.js.map rename to public/crypto.worker.5fdc4de518d781a4e437.chunk.js.map index 820e6233..2120cade 100644 --- a/public/crypto.worker.9e5cd838e641988dc44f.chunk.js.map +++ b/public/crypto.worker.5fdc4de518d781a4e437.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"crypto.worker.9e5cd838e641988dc44f.chunk.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/helpers/context.ts","webpack://tweb/./src/helpers/bytes/bufferConcats.ts","webpack://tweb/./src/lib/polyfill.ts","webpack://tweb/./src/helpers/bigInt/bigIntConstants.ts","webpack://tweb/./src/helpers/bigInt/bigIntConversion.ts","webpack://tweb/./src/helpers/bytes/bytesModPow.ts","webpack://tweb/./src/lib/crypto/cryptoMessagePort.ts","webpack://tweb/./src/lib/calls/helpers/getEmojisFingerprint.ts","webpack://tweb/./src/helpers/array/randomize.ts","webpack://tweb/./src/helpers/bytes/addPadding.ts","webpack://tweb/./src/helpers/bytes/bytesFromHex.ts","webpack://tweb/./src/helpers/bytes/convertToUint8Array.ts","webpack://tweb/./node_modules/@cryptography/aes/dist/es/aes.js","webpack://tweb/./src/helpers/bytes/bytesToWordss.ts","webpack://tweb/./src/lib/crypto/utils/aesIGE.ts","webpack://tweb/./src/helpers/bytes/bytesFromWordss.ts","webpack://tweb/./src/helpers/random.ts","webpack://tweb/./src/helpers/bigInt/bigIntRandom.ts","webpack://tweb/./src/lib/crypto/utils/factorize/BrentPollard.ts","webpack://tweb/./src/lib/crypto/subtle.ts","webpack://tweb/./src/lib/crypto/utils/aesCTR.ts","webpack://tweb/./src/lib/crypto/aesCtrUtils.ts","webpack://tweb/./src/lib/crypto/crypto.worker.ts","webpack://tweb/./src/lib/crypto/utils/sha1.ts","webpack://tweb/./src/lib/crypto/utils/sha256.ts","webpack://tweb/./src/lib/crypto/utils/pbkdf2.ts","webpack://tweb/./src/lib/crypto/utils/rsa.ts","webpack://tweb/./src/helpers/gzipUncompress.ts","webpack://tweb/./src/lib/crypto/srp.ts","webpack://tweb/./src/helpers/bytes/bytesToHex.ts","webpack://tweb/./src/helpers/bytes/bytesXor.ts","webpack://tweb/./src/lib/crypto/generateDh.ts","webpack://tweb/./src/lib/crypto/computeDhKey.ts","webpack://tweb/./src/helpers/listenMessagePort.ts","webpack://tweb/./src/lib/logger.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/compat get default export","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/node module decorator","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([699,211,85].map(__webpack_require__.e, __webpack_require__)).then(next);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// ะฒ SW ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ัั€ะฐะทัƒ ะดะฒะต ะฟะตั€ะตะผะตะฝะฝั‹ั… TRUE\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\n\nexport const getWindowClients = () => {\n return (self as any as ServiceWorkerGlobalScope)\n .clients\n .matchAll({includeUncontrolled: false, type: 'window'});\n};\n\nexport const getLastWindowClient = () => getWindowClients().then((windowClients) => windowClients.slice(-1)[0]);\n\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\n try {\n // @ts-ignore\n listener.postMessage(...args);\n } catch(err) {\n console.error('[worker] postMessage error:', err, args);\n }\n};\n\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\n getWindowClients().then((listeners) => {\n if(!listeners.length) {\n // console.trace('no listeners?', self, listeners);\n return;\n }\n\n listeners.slice(all ? 0 : -1).forEach((listener) => {\n postMessage(listener, ...args);\n });\n });\n};\n\nconst notifyWorker = (...args: any[]) => {\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\n};\n\nconst noop = () => {};\n\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\n","export default function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\n\n const tmp = new Uint8Array(length);\n\n let lastLength = 0;\n args.forEach((b) => {\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\n });\n\n return tmp/* .buffer */;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport bufferConcats from '../helpers/bytes/bufferConcats';\n\nUint8Array.prototype.concat = function(...args: Array) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n // return {type: 'bytes', value: [...this]};\n};\n\nPromise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n concat: (...args: Array) => Uint8Array,\n // toString: () => string,\n toJSON: () => number[],\n // toJSON: () => {type: 'bytes', value: number[]},\n }\n\n interface Promise {\n finally: (onfinally?: () => void) => Promise;\n }\n}\n","import bigInt from 'big-integer';\n\nexport const safeBigInt = bigInt(Number.MAX_SAFE_INTEGER);\nexport const ulongBigInt = bigInt(bigInt[2]).pow(64);\nexport const longBigInt = ulongBigInt.divide(bigInt[2]);\n","import bigInt from 'big-integer';\nimport { longBigInt, ulongBigInt } from './bigIntConstants';\n\nexport function bigIntFromBytes(bytes: Uint8Array | number[], base = 256) {\n return bigInt.fromArray(bytes instanceof Uint8Array ? [...bytes] : bytes, base);\n}\n\nexport function bigIntToBytes(bigInt: bigInt.BigInteger) {\n return new Uint8Array(bigInt.toArray(256).value);\n}\n\nexport function bigIntToSigned(bigInt: bigInt.BigInteger) {\n return bigInt.greater(longBigInt) ? bigInt.minus(ulongBigInt) : bigInt;\n}\n\nexport function bigIntToUnsigned(bigInt: bigInt.BigInteger) {\n return bigInt.isNegative() ? ulongBigInt.add(bigInt) : bigInt;\n}\n","import {bigIntFromBytes, bigIntToBytes} from '../bigInt/bigIntConversion';\n\nexport default function bytesModPow(bytes: number[] | Uint8Array, exp: number[] | Uint8Array, mod: number[] | Uint8Array) {\n const bytesBigInt = bigIntFromBytes(bytes);\n const expBigInt = bigIntFromBytes(exp);\n const modBigInt = bigIntFromBytes(mod);\n const resBigInt = bytesBigInt.modPow(expBigInt, modBigInt);\n return bigIntToBytes(resBigInt);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {CryptoMethods} from './crypto_methods';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {Awaited} from '../../types';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IS_WORKER} from '../../helpers/context';\n\ntype CryptoEvent = {\n invoke: (payload: {method: T, args: Parameters}) => ReturnType,\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n terminate: () => void\n};\n\nexport class CryptoMessagePort extends SuperMessagePort {\n private lastIndex: number;\n\n constructor() {\n super('CRYPTO');\n this.lastIndex = -1;\n }\n\n public invokeCryptoNew({method, args, transfer}: {\n method: T,\n args: Parameters,\n transfer?: Transferable[]\n }): Promise>> {\n const payload = {method, args};\n const listeners = this.listeners['invoke'];\n if(listeners?.length) { // already in worker\n // try {\n // @ts-ignore\n let result: any = listeners[0].callback(payload);\n if(!IS_WORKER && !(result instanceof Promise)) {\n result = Promise.resolve(result);\n }\n\n return result;\n // } catch(err) {\n // return Promise.reject(err);\n // }\n }\n\n const sendPortIndex = method === 'aes-encrypt' || method === 'aes-decrypt' ?\n this.lastIndex = (this.lastIndex + 1) % this.sendPorts.length :\n 0;\n // @ts-ignore\n return this.invoke('invoke', payload, undefined, this.sendPorts[sendPortIndex], transfer);\n }\n\n public invokeCrypto(method: T, ...args: Parameters): Promise>> {\n return this.invokeCryptoNew({method, args});\n }\n}\n\nconst cryptoMessagePort = new CryptoMessagePort();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.cryptoMessagePort = cryptoMessagePort);\nexport default cryptoMessagePort;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cryptoWorker from '../../crypto/cryptoMessagePort';\nimport bigInt from 'big-integer';\n\nfunction readBigIntFromBytesBE(bytes: Uint8Array) {\n const length = bytes.length;\n const bits = length * 8;\n let value = bigInt(bytes[0]).and(0x7F).shiftLeft(bits - 8);\n for(let i = 1; i < length; ++i) {\n const _bits = bits - (i + 1) * 8;\n const b = bigInt(bytes[i]);\n value = value.or(_bits ? b.shiftLeft(_bits) : b);\n }\n\n return value;\n}\n\n// Emojis were taken from tdlib\nconst emojis = [\n '1f609', '1f60d', '1f61b', '1f62d', '1f631', '1f621', '1f60e',\n '1f634', '1f635', '1f608', '1f62c', '1f607', '1f60f', '1f46e',\n '1f477', '1f482', '1f476', '1f468', '1f469', '1f474', '1f475',\n '1f63b', '1f63d', '1f640', '1f47a', '1f648', '1f649', '1f64a',\n '1f480', '1f47d', '1f4a9', '1f525', '1f4a5', '1f4a4', '1f442',\n '1f440', '1f443', '1f445', '1f444', '1f44d', '1f44e', '1f44c',\n '1f44a', '270c', '270b', '1f450', '1f446', '1f447', '1f449',\n '1f448', '1f64f', '1f44f', '1f4aa', '1f6b6', '1f3c3', '1f483',\n '1f46b', '1f46a', '1f46c', '1f46d', '1f485', '1f3a9', '1f451',\n '1f452', '1f45f', '1f45e', '1f460', '1f455', '1f457', '1f456',\n '1f459', '1f45c', '1f453', '1f380', '1f484', '1f49b', '1f499',\n '1f49c', '1f49a', '1f48d', '1f48e', '1f436', '1f43a', '1f431',\n '1f42d', '1f439', '1f430', '1f438', '1f42f', '1f428', '1f43b',\n '1f437', '1f42e', '1f417', '1f434', '1f411', '1f418', '1f43c',\n '1f427', '1f425', '1f414', '1f40d', '1f422', '1f41b', '1f41d',\n '1f41c', '1f41e', '1f40c', '1f419', '1f41a', '1f41f', '1f42c',\n '1f40b', '1f410', '1f40a', '1f42b', '1f340', '1f339', '1f33b',\n '1f341', '1f33e', '1f344', '1f335', '1f334', '1f333', '1f31e',\n '1f31a', '1f319', '1f30e', '1f30b', '26a1', '2614', '2744', '26c4',\n '1f300', '1f308', '1f30a', '1f393', '1f386', '1f383', '1f47b',\n '1f385', '1f384', '1f381', '1f388', '1f52e', '1f3a5', '1f4f7',\n '1f4bf', '1f4bb', '260e', '1f4e1', '1f4fa', '1f4fb', '1f509',\n '1f514', '23f3', '23f0', '231a', '1f512', '1f511', '1f50e',\n '1f4a1', '1f526', '1f50c', '1f50b', '1f6bf', '1f6bd', '1f527',\n '1f528', '1f6aa', '1f6ac', '1f4a3', '1f52b', '1f52a', '1f48a',\n '1f489', '1f4b0', '1f4b5', '1f4b3', '2709', '1f4eb', '1f4e6',\n '1f4c5', '1f4c1', '2702', '1f4cc', '1f4ce', '2712', '270f',\n '1f4d0', '1f4da', '1f52c', '1f52d', '1f3a8', '1f3ac', '1f3a4',\n '1f3a7', '1f3b5', '1f3b9', '1f3bb', '1f3ba', '1f3b8', '1f47e',\n '1f3ae', '1f0cf', '1f3b2', '1f3af', '1f3c8', '1f3c0', '26bd',\n '26be', '1f3be', '1f3b1', '1f3c9', '1f3b3', '1f3c1', '1f3c7',\n '1f3c6', '1f3ca', '1f3c4', '2615', '1f37c', '1f37a', '1f377',\n '1f374', '1f355', '1f354', '1f35f', '1f357', '1f371', '1f35a',\n '1f35c', '1f361', '1f373', '1f35e', '1f369', '1f366', '1f382',\n '1f370', '1f36a', '1f36b', '1f36d', '1f36f', '1f34e', '1f34f',\n '1f34a', '1f34b', '1f352', '1f347', '1f349', '1f353', '1f351',\n '1f34c', '1f350', '1f34d', '1f346', '1f345', '1f33d', '1f3e1',\n '1f3e5', '1f3e6', '26ea', '1f3f0', '26fa', '1f3ed', '1f5fb',\n '1f5fd', '1f3a0', '1f3a1', '26f2', '1f3a2', '1f6a2', '1f6a4',\n '2693', '1f680', '2708', '1f681', '1f682', '1f68b', '1f68e',\n '1f68c', '1f699', '1f697', '1f695', '1f69b', '1f6a8', '1f694',\n '1f692', '1f691', '1f6b2', '1f6a0', '1f69c', '1f6a6', '26a0',\n '1f6a7', '26fd', '1f3b0', '1f5ff', '1f3aa', '1f3ad',\n '1f1ef-1f1f5', '1f1f0-1f1f7', '1f1e9-1f1ea', '1f1e8-1f1f3',\n '1f1fa-1f1f8', '1f1eb-1f1f7', '1f1ea-1f1f8', '1f1ee-1f1f9',\n '1f1f7-1f1fa', '1f1ec-1f1e7', '0031-20e3', '0032-20e3', '0033-20e3',\n '0034-20e3', '0035-20e3', '0036-20e3', '0037-20e3', '0038-20e3', '0039-20e3',\n '0030-20e3', '1f51f', '2757', '2753', '2665', '2666', '1f4af', '1f517',\n '1f531', '1f534', '1f535', '1f536', '1f537'\n];\n\nexport default async function getEmojisFingerprint(key: Uint8Array, g_a: Uint8Array) {\n const arr = key.concat(g_a);\n const hash = await cryptoWorker.invokeCrypto('sha256', arr);\n\n const result: [string, string, string, string] = [] as any;\n const emojisLength = emojis.length;\n\n const kPartSize = 8;\n for(let partOffset = 0; partOffset != hash.length; partOffset += kPartSize) {\n const bytes = hash.slice(partOffset, partOffset + kPartSize);\n const value = readBigIntFromBytesBE(bytes);\n const index = value.mod(emojisLength).toJSNumber();\n\n // const emoji = emojiFromCodePoints(emojis[index]);\n const codePoints = emojis[index];\n result.push(codePoints);\n }\n\n return result;\n}\n","export default function randomize(arr: T) {\n if(crypto && 'getRandomValues' in crypto) {\n crypto.getRandomValues(arr);\n } else {\n throw new Error('NO_SECURE_RANDOM');\n }\n\n return arr;\n}\n","import randomize from '../array/randomize';\nimport bufferConcats from './bufferConcats';\n\nexport default function addPadding(\n bytes: T,\n blockSize: number = 16,\n zeroes?: boolean,\n blockSizeAsTotalLength = false,\n prepend = false\n): T {\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\n if(needPadding > 0 && needPadding < blockSize) {\n // //console.log('addPadding()', len, blockSize, needPadding);\n const padding = new Uint8Array(needPadding);\n if(zeroes) {\n for(let i = 0; i < needPadding; ++i) {\n padding[i] = 0;\n }\n } else {\n randomize(padding);\n }\n\n if(bytes instanceof ArrayBuffer) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\n } else if(bytes instanceof Uint8Array) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\n } else {\n // @ts-ignore\n return (prepend ? [...padding].concat(bytes) : bytes.concat([...padding])) as T;\n }\n }\n\n return bytes;\n}\n","export default function bytesFromHex(hexString: string) {\n const len = hexString.length;\n const bytes = new Uint8Array(Math.ceil(len / 2));\n let start = 0;\n\n if(len % 2) { // read 0x581 as 0x0581\n bytes[start++] = parseInt(hexString.charAt(0), 16);\n }\n\n for(let i = start; i < len; i += 2) {\n bytes[start++] = parseInt(hexString.substr(i, 2), 16);\n }\n\n return bytes;\n}\n","export default function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\n if(bytes instanceof Uint8Array) {\n return bytes;\n } else if(typeof(bytes) === 'string') {\n return new TextEncoder().encode(bytes);\n }\n\n return new Uint8Array(bytes);\n}\n","var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","import convertToUint8Array from './convertToUint8Array';\n\nexport default function bytesToWordss(input: Parameters[0]) {\n const bytes = convertToUint8Array(input);\n\n const words: number[] = [];\n for(let i = 0, len = bytes.length; i < len; ++i) {\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\n }\n\n return new Uint32Array(words);\n}\n","import {IGE} from '@cryptography/aes';\nimport addPadding from '../../../helpers/bytes/addPadding';\nimport bytesFromWordss from '../../../helpers/bytes/bytesFromWordss';\nimport bytesToWordss from '../../../helpers/bytes/bytesToWordss';\n\nexport default function aesSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array, encrypt = true) {\n // console.log(dT(), 'AES start', bytes, keyBytes, ivBytes);\n\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\n const performedBytes = cipher[encrypt ? 'encrypt' : 'decrypt'](bytesToWordss(bytes));\n // console.log(dT(), 'AES finish');\n\n return bytesFromWordss(performedBytes);\n}\n\nexport function aesEncryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n return aesSync(addPadding(bytes), keyBytes, ivBytes, true);\n}\n\nexport function aesDecryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n return aesSync(bytes, keyBytes, ivBytes, false);\n}\n","export default function bytesFromWordss(input: Uint32Array) {\n const o = new Uint8Array(input.byteLength);\n for(let i = 0, length = input.length * 4; i < length; ++i) {\n o[i] = ((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\n }\n\n return o;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1)\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","import bigInt from 'big-integer';\nimport {nextRandomUint} from '../random';\n\nexport default function bigIntRandom(min: bigInt.BigNumber, max: bigInt.BigNumber) {\n return bigInt.randBetween(min, max, () => {\n return nextRandomUint(32) / 0xFFFFFFFF;\n /* const bits = 32;\n const randomBytes = new Uint8Array(bits / 8);\n crypto.getRandomValues(randomBytes);\n const r = bigIntFromBytes(randomBytes).mod(bigInt(2).pow(bits));\n return r.toJSNumber(); */\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// Thanks to https://xn--2-umb.com/09/12/brent-pollard-rho-factorisation/\n\nimport bigInt from 'big-integer';\nimport {bigIntFromBytes, bigIntToBytes} from '../../../../helpers/bigInt/bigIntConversion';\nimport bigIntRandom from '../../../../helpers/bigInt/bigIntRandom';\n\n// let test = 0;\nfunction BrentPollardFactor(n: bigInt.BigInteger) {\n const two = bigInt[2];\n if(n.remainder(two).isZero()) {\n return two;\n }\n\n const m = bigInt(1000);\n let a: bigInt.BigInteger,\n x: bigInt.BigInteger,\n y: bigInt.BigInteger,\n ys: bigInt.BigInteger,\n r: bigInt.BigInteger,\n q: bigInt.BigInteger,\n g: bigInt.BigInteger;\n do\n a = bigIntRandom(bigInt.one, n.minus(1));\n while(a.isZero() || a.eq(n.minus(two)));\n y = bigIntRandom(bigInt.one, n.minus(1));\n r = bigInt.one;\n q = bigInt.one;\n\n // if(!test++) {\n // a = bigInt(3);\n // y = bigInt(3);\n // }\n\n const bigIntUint64 = bigInt('FFFFFFFFFFFFFFFF', 16);\n const bigIntUint64MinusPqPlusOne = bigIntUint64.minus(n).plus(1);\n\n const performY = (y: bigInt.BigInteger) => {\n y = y.pow(two).mod(n);\n y = y.add(a);\n if(y.lesser(a)) { // it slows down the script\n y = y.add(bigIntUint64MinusPqPlusOne);\n }\n y = y.mod(n);\n return y;\n };\n\n do {\n x = y;\n for(let i = 0; bigInt(i).lesser(r); ++i) {\n y = performY(y);\n }\n\n let k = bigInt.zero;\n do {\n ys = y;\n const condition = bigInt.min(m, r.minus(k));\n for(let i = 0; bigInt(i).lesser(condition); ++i) {\n y = performY(y);\n q = q.multiply(x.greater(y) ? x.minus(y) : y.minus(x)).mod(n);\n }\n g = bigInt.gcd(q, n);\n k = k.add(m);\n } while(k.lesser(r) && g.eq(bigInt.one));\n\n r = r.shiftLeft(bigInt.one);\n } while(g.eq(bigInt.one));\n\n if(g.eq(n)) {\n do {\n ys = performY(ys);\n g = bigInt.gcd(x.minus(ys).abs(), n);\n } while(g.eq(bigInt.one));\n }\n\n return g;\n}\n\nfunction primeFactors(pqBytes: Uint8Array | number[]) {\n const n = bigIntFromBytes(pqBytes);\n\n const factors: bigInt.BigInteger[] = [];\n const primes: bigInt.BigInteger[] = [];\n\n let factor = BrentPollardFactor(n);\n factors.push(n.divide(factor));\n factors.push(factor);\n\n // return [factor];\n\n do {\n const m = factors.pop();\n\n if(m.eq(bigInt.one))\n continue;\n\n if(m.isPrime(true)) {\n primes.push(m);\n\n // Remove the prime from the other factors\n for(let i = 0; i < factors.length; ++i) {\n let k = factors[i];\n if(k.mod(m).isZero()) {\n do\n k = k.divide(m);\n while(k.mod(m).isZero());\n factors[i] = k;\n }\n }\n } else {\n // factor = m.lesser(100) ? bigInt(PollardRho(m.toJSNumber())) : this.brentPollardFactor(m);\n factor = BrentPollardFactor(m);\n factors.push(m.divide(factor));\n factors.push(factor);\n }\n } while(factors.length);\n\n return primes;\n}\n\nexport default function factorizeBrentPollardPQ(pqBytes: Uint8Array | number[]): [Uint8Array, Uint8Array] {\n let factors = primeFactors(pqBytes);\n factors.sort((a, b) => a.compare(b));\n if(factors.length > 2) {\n factors = [\n factors.splice(factors.length - 2, 1)[0],\n factors.reduce((acc, v) => acc.multiply(v), bigInt.one)\n ];\n }\n\n const p = factors[0], q = factors[factors.length - 1];\n return (p.lesser(q) ? [p, q] : [q, p]).map((b) => bigIntToBytes(b)) as any;\n}\n","const subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\n\nexport default subtle;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {BigInteger} from 'big-integer';\nimport {bigIntFromBytes, bigIntToBytes} from '../../../helpers/bigInt/bigIntConversion';\nimport addPadding from '../../../helpers/bytes/addPadding';\nimport subtle from '../subtle';\n\nconst COUNTER_LENGTH = 16;\n\nexport default class CTR {\n private cryptoKey: CryptoKey;\n // private encLeft: Uint8Array;\n private leftLength: number;\n private mode: 'encrypt' | 'decrypt';\n private counter: BigInteger;\n private queue: {data: Uint8Array, resolve: (data: Uint8Array) => void}[];\n private releasing: boolean;\n\n constructor(mode: 'encrypt' | 'decrypt', cryptoKey: CryptoKey, counter: Uint8Array) {\n this.mode = mode;\n this.cryptoKey = cryptoKey;\n this.queue = [];\n this.counter = bigIntFromBytes(counter);\n }\n\n public async update(data: Uint8Array) {\n return new Promise((resolve) => {\n this.queue.push({data, resolve});\n this.release();\n });\n }\n\n private async release() {\n if(this.releasing) {\n return;\n }\n\n this.releasing = true;\n while(this.queue.length) {\n const {data, resolve} = this.queue.shift();\n resolve(await this._update(data));\n }\n this.releasing = false;\n }\n\n private async perform(data: Uint8Array) {\n const arrayBuffer: ArrayBuffer = await subtle[this.mode]({\n name: 'AES-CTR',\n counter: addPadding(bigIntToBytes(this.counter), COUNTER_LENGTH, true, true, true),\n length: 128\n },\n this.cryptoKey,\n data\n );\n\n return arrayBuffer;\n }\n\n private async _update(data: Uint8Array) {\n let toEncrypt = data;\n let head: Uint8Array/* , tail: Uint8Array */;\n if(this.leftLength) {\n // const leftLength = this.encLeft.byteLength;\n const leftLength = this.leftLength;\n const leftLength2 = COUNTER_LENGTH - leftLength;\n // const left = this.encLeft.concat(toEncrypt.slice(0, leftLength2));\n const left = (new Uint8Array(leftLength)).concat(toEncrypt.slice(0, leftLength2));\n\n const performed = await this.perform(left);\n\n head = new Uint8Array(performed.slice(leftLength));\n\n toEncrypt = toEncrypt.slice(leftLength2);\n\n this.counter = this.counter.add(1);\n }\n\n const tail = new Uint8Array(await this.perform(toEncrypt));\n\n const result = head ? head.concat(tail) : tail;\n\n let length = toEncrypt.length;\n const leftAfter = length % COUNTER_LENGTH;\n length -= leftAfter;\n\n const a = length / COUNTER_LENGTH;\n this.counter = this.counter.add(a);\n\n this.leftLength = leftAfter || undefined;\n // this.encLeft = leftAfter ? toEncrypt.slice(-leftAfter) : undefined;\n\n return result;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CTR from './utils/aesCTR';\nimport subtle from './subtle';\n\nconst aesCTRs: Map = new Map();\nlet lastCTRId = -1;\n\ntype K = {\n enc: CTR,\n dec: CTR,\n};\n\nexport async function aesCtrPrepare({encKey, encIv, decKey, decIv}: {[k in 'encKey' | 'encIv' | 'decKey' | 'decIv']: Uint8Array}) {\n const id = ++lastCTRId;\n\n const a = [['encrypt', encKey], ['decrypt', decKey]] as ['encrypt' | 'decrypt', Uint8Array][];\n const promises = a.map(([mode, key]) => {\n return subtle.importKey(\n 'raw',\n key,\n {name: 'AES-CTR'},\n false,\n [mode]\n )\n });\n\n const [encCryptoKey, decCryptoKey] = await Promise.all(promises);\n const enc = new CTR('encrypt', encCryptoKey, encIv.slice());\n const dec = new CTR('decrypt', decCryptoKey, decIv.slice());\n\n const k: K = {\n enc,\n dec\n };\n\n aesCTRs.set(id, k);\n\n return id;\n}\n\nexport async function aesCtrProcess({id, data, operation}: {id: number, data: Uint8Array, operation: 'encrypt' | 'decrypt'}) {\n const ctrs = aesCTRs.get(id);\n const result = await (operation === 'encrypt' ? ctrs.enc : ctrs.dec).update(data);\n return result;\n}\n\nexport function aesCtrDestroy(id: number) {\n aesCTRs.delete(id);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport '../polyfill'; // just to include\n\nimport bytesModPow from '../../helpers/bytes/bytesModPow';\nimport gzipUncompress from '../../helpers/gzipUncompress';\nimport listenMessagePort from '../../helpers/listenMessagePort';\nimport getEmojisFingerprint from '../calls/helpers/getEmojisFingerprint';\nimport computeDhKey from './computeDhKey';\nimport cryptoMessagePort from './cryptoMessagePort';\nimport {CryptoMethods} from './crypto_methods';\nimport generateDh from './generateDh';\nimport computeSRP from './srp';\nimport {aesEncryptSync, aesDecryptSync} from './utils/aesIGE';\nimport factorizeBrentPollardPQ from './utils/factorize/BrentPollard';\nimport pbkdf2 from './utils/pbkdf2';\nimport rsaEncrypt from './utils/rsa';\nimport sha1 from './utils/sha1';\nimport sha256 from './utils/sha256';\nimport {aesCtrDestroy, aesCtrPrepare, aesCtrProcess} from './aesCtrUtils';\nimport ctx from '../../environment/ctx';\n\nconsole.log('CryptoWorker start');\n\nconst cryptoMethods: CryptoMethods = {\n 'sha1': sha1,\n 'sha256': sha256,\n 'pbkdf2': pbkdf2,\n 'aes-encrypt': aesEncryptSync,\n 'aes-decrypt': aesDecryptSync,\n 'rsa-encrypt': rsaEncrypt,\n 'factorize': factorizeBrentPollardPQ,\n // 'factorize-tdlib': factorizeTdlibPQ,\n // 'factorize-new-new': pqPrimeLeemonNew,\n 'mod-pow': bytesModPow,\n 'gzipUncompress': gzipUncompress,\n 'computeSRP': computeSRP,\n 'generate-dh': generateDh,\n 'compute-dh-key': computeDhKey,\n 'get-emojis-fingerprint': getEmojisFingerprint,\n 'aes-ctr-prepare': aesCtrPrepare,\n 'aes-ctr-process': aesCtrProcess,\n 'aes-ctr-destroy': aesCtrDestroy\n};\n\ncryptoMessagePort.addMultipleEventsListeners({\n invoke: ({method, args}) => {\n // @ts-ignore\n const result: any = cryptoMethods[method](...args);\n return result;\n },\n\n terminate: () => {\n ctx.close();\n }\n});\n\nif(typeof(MessageChannel) !== 'undefined') listenMessagePort(cryptoMessagePort, (source) => {\n const channel = new MessageChannel();\n cryptoMessagePort.attachPort(channel.port1);\n cryptoMessagePort.invokeVoid('port', undefined, source, [channel.port2]);\n});\n","import convertToUint8Array from '../../../helpers/bytes/convertToUint8Array';\nimport subtle from '../subtle';\n// import sha1 from '@cryptography/sha1';\n\nexport default function sha1(bytes: Parameters[0]) {\n return subtle.digest('SHA-1', convertToUint8Array(bytes)).then((b) => {\n return new Uint8Array(b);\n });\n /* //console.trace(dT(), 'SHA-1 hash start', bytes);\n\n const hashBytes: number[] = [];\n\n let hash = sha1(String.fromCharCode.apply(null,\n bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)]));\n for(let i = 0; i < hash.length; ++i) {\n hashBytes.push(hash.charCodeAt(i));\n }\n\n //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes));\n\n return new Uint8Array(hashBytes); */\n}\n","import convertToUint8Array from '../../../helpers/bytes/convertToUint8Array';\nimport subtle from '../subtle';\n// import sha256 from '@cryptography/sha256';\n\nexport default function sha256(bytes: Parameters[0]) {\n return subtle.digest('SHA-256', convertToUint8Array(bytes)).then((b) => {\n // console.log('legacy', performance.now() - perfS);\n return new Uint8Array(b);\n });\n /* //console.log('SHA-256 hash start');\n\n let perfS = performance.now();\n\n\n let perfD = performance.now();\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes as any);\n let hash = sha256(words);\n console.log('darutkin', performance.now() - perfD);\n\n //console.log('SHA-256 hash finish', hash, sha256(words, 'hex'));\n\n return bytesFromWordss(hash); */\n}\n","import subtle from '../subtle';\n\nexport default async function pbkdf2(buffer: Parameters[1], salt: HkdfParams['salt'], iterations: number) {\n const importKey = await subtle.importKey(\n 'raw',\n buffer,\n {name: 'PBKDF2'},\n false,\n [/* 'deriveKey', */'deriveBits']\n );\n\n /* await subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'}\n },\n importKey,\n {\n name: 'AES-CTR',\n length: 256\n },\n false,\n ['encrypt', 'decrypt']\n ); */\n\n const bits = subtle.deriveBits({\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'}\n },\n importKey,\n 512\n );\n\n return bits.then((buffer) => new Uint8Array(buffer));\n}\n","import type {RSAPublicKeyHex} from '../../mtproto/rsaKeysManager';\nimport bytesModPow from '../../../helpers/bytes/bytesModPow';\nimport bytesFromHex from '../../../helpers/bytes/bytesFromHex';\n\nexport default function rsaEncrypt(bytes: Uint8Array, publicKey: RSAPublicKeyHex) {\n return bytesModPow(bytes, bytesFromHex(publicKey.exponent), bytesFromHex(publicKey.modulus));\n}\n","// export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\n\n// @ts-ignore\nimport pako from 'pako/dist/pako_inflate.min.js';\n// import dT from './dT';\n\n// export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\nexport default function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\n // console.log(dT(), 'Gzip uncompress start');\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\n // console.log(dT(), 'Gzip uncompress finish'/* , result */);\n return result;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cryptoWorker from './cryptoMessagePort';\nimport {AccountPassword, InputCheckPasswordSRP, PasswordKdfAlgo} from '../../layer';\nimport addPadding from '../../helpers/bytes/addPadding';\nimport bufferConcats from '../../helpers/bytes/bufferConcats';\nimport bytesXor from '../../helpers/bytes/bytesXor';\nimport convertToUint8Array from '../../helpers/bytes/convertToUint8Array';\nimport bigInt from 'big-integer';\nimport {bigIntFromBytes, bigIntToBytes} from '../../helpers/bigInt/bigIntConversion';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\n\nexport async function makePasswordHash(password: string, client_salt: Uint8Array, server_salt: Uint8Array) {\n // ! look into crypto_methods.test.ts\n let buffer = await cryptoWorker.invokeCrypto('sha256', bufferConcats(client_salt, new TextEncoder().encode(password), client_salt));\n buffer = bufferConcats(server_salt, buffer, server_salt);\n buffer = await cryptoWorker.invokeCrypto('sha256', buffer);\n\n let hash = await cryptoWorker.invokeCrypto('pbkdf2', new Uint8Array(buffer), client_salt, 100000);\n hash = bufferConcats(server_salt, hash, server_salt);\n\n buffer = await cryptoWorker.invokeCrypto('sha256', hash);\n\n return buffer;\n}\n\nexport default async function computeSRP(password: string, state: AccountPassword, isNew: boolean) {\n const algo = (isNew ? state.new_algo : state.current_algo) as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\n\n const p = bigIntFromBytes(algo.p);\n const g = bigInt(algo.g);\n\n /* if(B.compareTo(BigInteger.ZERO) < 0) {\n console.error('srp_B < 0')\n }\n\n if(B.compareTo(p) <= 0) {\n console.error('srp_B <= p');\n } */\n\n /* let check_prime_and_good = (bytes: any, g: number) => {\n let good_prime = 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b';\n\n if(bytesToHex(bytes) === good_prime && [3, 4, 5, 7].indexOf(g) !== -1) {\n return true;\n }\n\n // TO-DO check_prime_and_good_check\n }; */\n\n // check_prime_and_good(algo.p, g);\n\n const pw_hash = await makePasswordHash(password, algo.salt1, algo.salt2);\n const x = bigInt(bytesToHex(pw_hash), 16);\n\n const padArray = function(arr: number[] | Uint8Array, len: number) {\n if(!(arr instanceof Uint8Array)) {\n arr = convertToUint8Array(arr);\n }\n\n return addPadding(arr, len, true, true, true);\n };\n\n const v = g.modPow(x, p);\n\n const flipper = (arr: Uint8Array | number[]) => {\n const out = new Uint8Array(arr.length);\n for(let i = 0; i < arr.length; i += 4) {\n out[i] = arr[i + 3];\n out[i + 1] = arr[i + 2];\n out[i + 2] = arr[i + 1];\n out[i + 3] = arr[i];\n }\n\n return out;\n };\n\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password\n if(isNew) {\n const bytes = bigIntToBytes(v);\n return padArray(/* (isBigEndian ? bytes.reverse() : bytes) */bytes, 256);\n }\n\n const B = bigIntFromBytes(state.srp_B);\n\n const pForHash = padArray(bigIntToBytes(p), 256);\n const gForHash = padArray(bigIntToBytes(g), 256);\n const b_for_hash = padArray(bigIntToBytes(B), 256);\n\n const kHash = await cryptoWorker.invokeCrypto('sha256', bufferConcats(pForHash, gForHash));\n const k = bigIntFromBytes(kHash);\n\n const k_v = k.multiply(v).mod(p);\n\n const is_good_mod_exp_first = (modexp: bigInt.BigInteger, prime: bigInt.BigInteger) => {\n const diff = prime.subtract(modexp);\n const min_diff_bits_count = 2048 - 64;\n const max_mod_exp_size = 256;\n if(diff.isNegative() ||\n diff.bitLength().toJSNumber() < min_diff_bits_count ||\n modexp.bitLength().toJSNumber() < min_diff_bits_count ||\n Math.floor((modexp.bitLength().toJSNumber() + 7) / 8) > max_mod_exp_size)\n return false;\n return true;\n };\n\n const generate_and_check_random = async() => {\n while(true) {\n const a = bigIntFromBytes(flipper(state.secure_random));\n // const a = str2bigInt('9153faef8f2bb6da91f6e5bc96bc00860a530a572a0f45aac0842b4602d711f8bda8d59fb53705e4ae3e31a3c4f0681955425f224297b8e9efd898fec22046debb7ba8a0bcf2be1ada7b100424ea318fdcef6ccfe6d7ab7d978c0eb76a807d4ab200eb767a22de0d828bc53f42c5a35c2df6e6ceeef9a3487aae8e9ef2271f2f6742e83b8211161fb1a0e037491ab2c2c73ad63c8bd1d739de1b523fe8d461270cedcf240de8da75f31be4933576532955041dc5770c18d3e75d0b357df9da4a5c8726d4fced87d15752400883dc57fa1937ac17608c5446c4774dcd123676d683ce3a1ab9f7e020ca52faafc99969822717c8e07ea383d5fb1a007ba0d170cb', 16);\n\n const A = g.modPow(a, p);\n if(is_good_mod_exp_first(A, p)) {\n const a_for_hash = bigIntToBytes(A);\n\n const s = await cryptoWorker.invokeCrypto('sha256', bufferConcats(a_for_hash, b_for_hash));\n // const u = bigInt(s.hex, 16);\n const u = bigIntFromBytes(s);\n if(!u.isZero() && !u.isNegative())\n return {a, a_for_hash, u};\n }\n }\n }\n\n const {a, a_for_hash, u} = await generate_and_check_random();\n\n let g_b: bigInt.BigInteger;\n if(!B.greater(k_v)) {\n g_b = B.add(p);\n } else g_b = B;\n g_b = g_b.subtract(k_v).mod(p);\n\n const ux = u.multiply(x);\n const a_ux = a.add(ux);\n const S = g_b.modPow(a_ux, p);\n\n const K = await cryptoWorker.invokeCrypto('sha256', padArray(bigIntToBytes(S), 256));\n\n let h1 = await cryptoWorker.invokeCrypto('sha256', pForHash);\n const h2 = await cryptoWorker.invokeCrypto('sha256', gForHash);\n h1 = bytesXor(h1, h2);\n\n const buff = bufferConcats(\n h1,\n await cryptoWorker.invokeCrypto('sha256', algo.salt1),\n await cryptoWorker.invokeCrypto('sha256', algo.salt2),\n a_for_hash,\n b_for_hash,\n K\n );\n\n const M1 = await cryptoWorker.invokeCrypto('sha256', buff);\n\n const out: InputCheckPasswordSRP.inputCheckPasswordSRP = {\n _: 'inputCheckPasswordSRP',\n srp_id: state.srp_id,\n A: new Uint8Array(a_for_hash),\n M1\n };\n\n return out;\n}\n","export default function bytesToHex(bytes: ArrayLike) {\n const length = bytes.length;\n const arr: string[] = new Array(length);\n for(let i = 0; i < length; ++i) {\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\n }\n return arr.join('');\n}\n","export default function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\n const len = bytes1.length;\n const bytes = new Uint8Array(len);\n\n for(let i = 0; i < len; ++i) {\n bytes[i] = bytes1[i] ^ bytes2[i];\n }\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type CallInstance from '../calls/callInstance';\nimport type {MessagesDhConfig} from '../../layer';\nimport bigInt from 'big-integer';\nimport randomize from '../../helpers/array/randomize';\nimport {bigIntFromBytes} from '../../helpers/bigInt/bigIntConversion';\nimport addPadding from '../../helpers/bytes/addPadding';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport cryptoWorker from './cryptoMessagePort';\n\nexport default async function generateDh(dhConfig: MessagesDhConfig.messagesDhConfig) {\n const {p, g} = dhConfig;\n\n const generateA = (p: Uint8Array) => {\n for(;;) {\n const a = randomize(new Uint8Array(p.length));\n // const a = new Uint8Array(4).randomize();\n\n const aBigInt = bigIntFromBytes(a); // str2bigInt(bytesToHex(a), 16);\n if(!aBigInt.greater(bigInt.one)) {\n continue;\n }\n\n const pBigInt = bigIntFromBytes(p); // str2bigInt(bytesToHex(p), 16);\n if(!aBigInt.lesser(pBigInt.subtract(bigInt.one))) {\n continue;\n }\n\n return a;\n }\n };\n\n const a = generateA(p);\n // const a = new Uint8Array([0]);\n\n const gBytes = bytesFromHex(g.toString(16));\n const g_a = addPadding(await cryptoWorker.invokeCrypto('mod-pow', gBytes, a, p), 256, true, true, true);\n const g_a_hash = await cryptoWorker.invokeCrypto('sha256', g_a);\n\n const dh: CallInstance['dh'] = {\n a: a,\n g_a: g_a,\n g_a_hash: g_a_hash,\n p\n };\n\n return dh;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {bigIntFromBytes, bigIntToSigned} from '../../helpers/bigInt/bigIntConversion';\nimport cryptoWorker from './cryptoMessagePort';\n\nexport default async function computeDhKey(g_b: Uint8Array, a: Uint8Array, p: Uint8Array) {\n const key = await cryptoWorker.invokeCrypto('mod-pow', g_b, a, p);\n const keySha1Hashed = await cryptoWorker.invokeCrypto('sha1', key);\n const key_fingerprint = keySha1Hashed.slice(-8).reverse();\n const key_fingerprint_long = bigIntToSigned(bigIntFromBytes(key_fingerprint)).toString(10);\n\n return {key, key_fingerprint: key_fingerprint_long};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type SuperMessagePort from '../lib/mtproto/superMessagePort';\nimport ctx from '../environment/ctx';\n\nexport default function listenMessagePort(\n messagePort: SuperMessagePort,\n onConnect?: (source: MessageEventSource) => void,\n onDisconnect?: (source: MessageEventSource) => void\n) {\n const attachPort = (listenPort: any, sendPort: any) => {\n messagePort.attachListenPort(listenPort);\n sendPort && messagePort.attachSendPort(sendPort);\n onConnect?.(listenPort);\n };\n\n messagePort.setOnPortDisconnect(onDisconnect);\n\n if(typeof(SharedWorkerGlobalScope) !== 'undefined') {\n (ctx as any as SharedWorkerGlobalScope).addEventListener('connect', (e) => attachPort(e.source, e.source));\n } else if(typeof(ServiceWorkerGlobalScope) !== 'undefined') {\n attachPort(ctx, null);\n } else {\n attachPort(ctx, ctx);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../config/debug';\nimport {IS_FIREFOX, IS_SAFARI} from '../environment/userAgent';\nimport {IS_SERVICE_WORKER, IS_WEB_WORKER} from '../helpers/context';\nimport dT from '../helpers/dT';\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst IS_WEBKIT = IS_SAFARI || IS_FIREFOX;\n\n// let getCallerFunctionNameFromLine: (line: string) => string;\n// if(IS_WEBKIT) {\n// getCallerFunctionNameFromLine = (line) => {\n// const splitted = line.split('@');\n// return splitted[0];\n// };\n// } else {\n// getCallerFunctionNameFromLine = (line: string) => {\n// const splitted = line.trim().split(' ');\n// if(splitted.length === 3) {\n// return splitted[1].slice(splitted[1].lastIndexOf('.') + 1);\n// }\n// };\n// }\n\nconst STYLES_SUPPORTED = !IS_WEBKIT;\n// const LINE_INDEX = IS_WEBKIT ? 2 : 3;\n\n// function getCallerFunctionName() {\n// const stack = new Error().stack;\n// const lines = stack.split('\\n');\n// const line = lines[LINE_INDEX] || lines[lines.length - 1];\n// // const match = line.match(/\\.([^\\.]+?)\\s/);\n// // line = match ? match[1] : line.trim();\n// const caller = getCallerFunctionNameFromLine(line) || '';\n// return '[' + caller + ']';\n// }\n\nexport const LOGGER_STYLES = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m'\n }\n};\n\nexport type Logger = {\n (...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n error(...args: any[]): void;\n trace(...args: any[]): void;\n debug(...args: any[]): void;\n assert(...args: any[]): void;\n // log(...args: any[]): void;\n group(...args: any[]): void;\n groupCollapsed(...args: any[]): void;\n groupEnd(...args: any[]): void;\n setPrefix(newPrefix: string): void;\n setLevel(level: 0 | 1 | 2 | 3 | 4): void;\n bindPrefix(prefix: string): Logger;\n};\n\nconst methods: ['debug' | 'info' | 'warn' | 'error' | 'assert' | 'trace'/* | 'log' */ | 'group' | 'groupCollapsed' | 'groupEnd', LogTypes][] = [\n ['debug', LogTypes.Debug],\n ['info', LogTypes.Log],\n ['warn', LogTypes.Warn],\n ['error', LogTypes.Error],\n ['assert', LogTypes.Error],\n ['trace', LogTypes.Log],\n ['group', LogTypes.Log],\n ['groupCollapsed', LogTypes.Log],\n ['groupEnd', LogTypes.Log]\n // [\"log\", LogTypes.Log]\n];\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false, style = ''): Logger {\n let originalPrefix: string;\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n if(!STYLES_SUPPORTED) {\n style = '';\n } else if(!style) {\n if(IS_SERVICE_WORKER) style = LOGGER_STYLES.fg.yellow;\n else if(IS_WEB_WORKER) style = LOGGER_STYLES.fg.cyan;\n }\n\n const originalStyle = style;\n if(style) style = `%s ${style}%s`;\n else style = '%s';\n\n // level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n const log: Logger = function(...args: any[]) {\n return type & LogTypes.Log && console.log(style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n } as any;\n\n methods.forEach(([method, logType]) => {\n log[method] = function(...args: any[]) {\n return type & logType && console[method](style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n };\n });\n\n log.setPrefix = function(newPrefix: string) {\n originalPrefix = newPrefix;\n prefix = '[' + newPrefix + ']';\n };\n\n log.setPrefix(prefix);\n\n log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n\n log.bindPrefix = function(prefix: string) {\n return logger(`${originalPrefix}] [${prefix}`, type, ignoreDebugReset, originalStyle);\n };\n\n return log;\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [699,211,85], () => (__webpack_require__(6991)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames not based on template\n\tif (chunkId === 85) return \"85.887945ef5f43bc205112.bundle.js\";\n\t// return url for filenames based on template\n\treturn \"\" + {\"211\":\"npm.big-integer\",\"699\":\"npm.pako\"}[chunkId] + \".\" + {\"211\":\"363d763daad0ee4e2741\",\"699\":\"89deb457201f16c93925\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t589: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","DEBUG","MOUNT_CLASS_TO","window","self","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","IS_FIREFOX","undefined","IS_SERVICE_WORKER","ServiceWorkerGlobalScope","IS_WEB_WORKER","WorkerGlobalScope","IS_WORKER","postMessage","listener","args","err","console","error","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","type","then","listeners","length","slice","forEach","bind","bufferConcats","reduce","acc","v","byteLength","tmp","Uint8Array","lastLength","b","set","ArrayBuffer","prototype","concat","this","toJSON","Promise","finally","fn","onFinally","callback","resolve","result","reason","reject","Number","MAX_SAFE_INTEGER","pow","longBigInt","divide","bigIntFromBytes","bytes","base","bigIntToBytes","bigInt","toArray","value","bytesModPow","exp","mod","bytesBigInt","expBigInt","modBigInt","modPow","CryptoMessagePort","constructor","super","lastIndex","invokeCryptoNew","method","transfer","payload","sendPortIndex","sendPorts","invoke","invokeCrypto","cryptoMessagePort","readBigIntFromBytesBE","bits","and","shiftLeft","i","_bits","or","emojis","randomize","arr","crypto","Error","getRandomValues","addPadding","blockSize","zeroes","blockSizeAsTotalLength","prepend","len","needPadding","padding","buffer","bytesFromHex","hexString","Math","ceil","start","parseInt","charAt","substr","convertToUint8Array","TextEncoder","encode","S","Si","T1","Uint32Array","T2","T3","T4","T5","T6","T7","T8","getWords","key","buf","pos","str","charCodeAt","xor","left","right","to","x2","x4","s","tEnc","tDec","d","t","x","xInv","computeTables","AES","_key","encKey","decKey","rcon","j","encrypt","_message","a2","b2","c2","message","out","a","c","rounds","k","decrypt","AES_IGE","iv","cipher","text","cipherText","prevX","subarray","prevY","yXOR","y","bytesToWordss","input","words","aesSync","keyBytes","ivBytes","o","bytesFromWordss","counter","offset","incrementCounter","carry","arrays","Uint16Array","bigIntRandom","min","max","array","nextRandomUint","BrentPollardFactor","n","two","remainder","isZero","m","ys","r","q","g","minus","eq","bigIntUint64MinusPqPlusOne","plus","performY","add","lesser","condition","multiply","greater","abs","subtle","CTR","mode","cryptoKey","queue","update","data","push","release","releasing","shift","_update","perform","name","head","toEncrypt","leftLength","leftLength2","performed","tail","leftAfter","aesCTRs","Map","lastCTRId","log","cryptoMethods","salt","iterations","importKey","hash","publicKey","exponent","modulus","pqBytes","factors","primes","factor","pop","isPrime","primeFactors","sort","compare","splice","p","map","toString","password","state","isNew","algo","new_algo","current_algo","pw_hash","client_salt","server_salt","makePasswordHash","salt1","salt2","Array","join","bytesToHex","padArray","flipper","B","srp_B","pForHash","gForHash","b_for_hash","k_v","is_good_mod_exp_first","modexp","prime","diff","subtract","isNegative","bitLength","toJSNumber","floor","a_for_hash","u","secure_random","A","generate_and_check_random","g_b","ux","a_ux","K","h1","bytes1","bytes2","bytesXor","buff","M1","_","srp_id","dhConfig","aBigInt","pBigInt","generateA","gBytes","g_a","g_a_hash","key_fingerprint","reverse","emojisLength","partOffset","index","codePoints","encIv","decIv","id","promises","encCryptoKey","decCryptoKey","enc","dec","operation","ctrs","get","delete","terminate","ctx","messagePort","onConnect","onDisconnect","attachPort","listenPort","sendPort","attachListenPort","attachSendPort","setOnPortDisconnect","listenMessagePort","e","source","channel","MessageChannel","port1","port2","LogTypes","LOG_LEVELS","None","Warn","Log","Debug","STYLES_SUPPORTED","LOGGER_STYLES","methods","logger","prefix","ignoreDebugReset","style","originalPrefix","originalStyle","logType","setPrefix","newPrefix","setLevel","level","bindPrefix","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","call","__webpack_exports__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","Object","keys","every","getter","__esModule","definition","defineProperty","enumerable","f","chunkId","miniCssF","globalThis","Function","obj","prop","hasOwnProperty","nmd","paths","children","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","replace","oldGetScript","oldLoadScript","queryMap","countMap","catch","retries","realSrc","request","setTimeout","cacheBust","Date","now","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","moreModules","runtime"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"crypto.worker.5fdc4de518d781a4e437.chunk.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/helpers/context.ts","webpack://tweb/./src/helpers/bytes/bufferConcats.ts","webpack://tweb/./src/lib/polyfill.ts","webpack://tweb/./src/helpers/bigInt/bigIntConstants.ts","webpack://tweb/./src/helpers/bigInt/bigIntConversion.ts","webpack://tweb/./src/helpers/bytes/bytesModPow.ts","webpack://tweb/./src/lib/crypto/cryptoMessagePort.ts","webpack://tweb/./src/lib/calls/helpers/getEmojisFingerprint.ts","webpack://tweb/./src/helpers/array/randomize.ts","webpack://tweb/./src/helpers/bytes/addPadding.ts","webpack://tweb/./src/helpers/bytes/bytesFromHex.ts","webpack://tweb/./src/helpers/bytes/convertToUint8Array.ts","webpack://tweb/./node_modules/@cryptography/aes/dist/es/aes.js","webpack://tweb/./src/helpers/bytes/bytesToWordss.ts","webpack://tweb/./src/lib/crypto/utils/aesIGE.ts","webpack://tweb/./src/helpers/bytes/bytesFromWordss.ts","webpack://tweb/./src/helpers/random.ts","webpack://tweb/./src/helpers/bigInt/bigIntRandom.ts","webpack://tweb/./src/lib/crypto/utils/factorize/BrentPollard.ts","webpack://tweb/./src/lib/crypto/subtle.ts","webpack://tweb/./src/lib/crypto/utils/aesCTR.ts","webpack://tweb/./src/lib/crypto/aesCtrUtils.ts","webpack://tweb/./src/lib/crypto/crypto.worker.ts","webpack://tweb/./src/lib/crypto/utils/sha1.ts","webpack://tweb/./src/lib/crypto/utils/sha256.ts","webpack://tweb/./src/lib/crypto/utils/pbkdf2.ts","webpack://tweb/./src/lib/crypto/utils/rsa.ts","webpack://tweb/./src/helpers/gzipUncompress.ts","webpack://tweb/./src/lib/crypto/srp.ts","webpack://tweb/./src/helpers/bytes/bytesToHex.ts","webpack://tweb/./src/helpers/bytes/bytesXor.ts","webpack://tweb/./src/lib/crypto/generateDh.ts","webpack://tweb/./src/lib/crypto/computeDhKey.ts","webpack://tweb/./src/helpers/listenMessagePort.ts","webpack://tweb/./src/lib/logger.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/compat get default export","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/node module decorator","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([699,211,85].map(__webpack_require__.e, __webpack_require__)).then(next);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// ะฒ SW ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ัั€ะฐะทัƒ ะดะฒะต ะฟะตั€ะตะผะตะฝะฝั‹ั… TRUE\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\n\nexport const getWindowClients = () => {\n return (self as any as ServiceWorkerGlobalScope)\n .clients\n .matchAll({includeUncontrolled: false, type: 'window'});\n};\n\nexport const getLastWindowClient = () => getWindowClients().then((windowClients) => windowClients.slice(-1)[0]);\n\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\n try {\n // @ts-ignore\n listener.postMessage(...args);\n } catch(err) {\n console.error('[worker] postMessage error:', err, args);\n }\n};\n\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\n getWindowClients().then((listeners) => {\n if(!listeners.length) {\n // console.trace('no listeners?', self, listeners);\n return;\n }\n\n listeners.slice(all ? 0 : -1).forEach((listener) => {\n postMessage(listener, ...args);\n });\n });\n};\n\nconst notifyWorker = (...args: any[]) => {\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\n};\n\nconst noop = () => {};\n\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\n","export default function bufferConcats(...args: (ArrayBuffer | Uint8Array | number[])[]) {\n const length = args.reduce((acc, v) => acc + ((v as ArrayBuffer).byteLength || (v as Uint8Array).length), 0);\n\n const tmp = new Uint8Array(length);\n\n let lastLength = 0;\n args.forEach((b) => {\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\n lastLength += (b as ArrayBuffer).byteLength || (b as Uint8Array).length;\n });\n\n return tmp/* .buffer */;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport bufferConcats from '../helpers/bytes/bufferConcats';\n\nUint8Array.prototype.concat = function(...args: Array) {\n return bufferConcats(this, ...args);\n};\n\n/* Uint8Array.prototype.toString = function() {\n return String.fromCharCode.apply(null, [...this]);\n}; */\n\nUint8Array.prototype.toJSON = function() {\n return [...this];\n // return {type: 'bytes', value: [...this]};\n};\n\nPromise.prototype.finally = Promise.prototype.finally || function(this: Promise, fn: () => any) {\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\n return this.then(\n result => onFinally(() => result),\n reason => onFinally(() => Promise.reject(reason))\n );\n};\n\ndeclare global {\n interface Uint8Array {\n concat: (...args: Array) => Uint8Array,\n // toString: () => string,\n toJSON: () => number[],\n // toJSON: () => {type: 'bytes', value: number[]},\n }\n\n interface Promise {\n finally: (onfinally?: () => void) => Promise;\n }\n}\n","import bigInt from 'big-integer';\n\nexport const safeBigInt = bigInt(Number.MAX_SAFE_INTEGER);\nexport const ulongBigInt = bigInt(bigInt[2]).pow(64);\nexport const longBigInt = ulongBigInt.divide(bigInt[2]);\n","import bigInt from 'big-integer';\nimport { longBigInt, ulongBigInt } from './bigIntConstants';\n\nexport function bigIntFromBytes(bytes: Uint8Array | number[], base = 256) {\n return bigInt.fromArray(bytes instanceof Uint8Array ? [...bytes] : bytes, base);\n}\n\nexport function bigIntToBytes(bigInt: bigInt.BigInteger) {\n return new Uint8Array(bigInt.toArray(256).value);\n}\n\nexport function bigIntToSigned(bigInt: bigInt.BigInteger) {\n return bigInt.greater(longBigInt) ? bigInt.minus(ulongBigInt) : bigInt;\n}\n\nexport function bigIntToUnsigned(bigInt: bigInt.BigInteger) {\n return bigInt.isNegative() ? ulongBigInt.add(bigInt) : bigInt;\n}\n","import {bigIntFromBytes, bigIntToBytes} from '../bigInt/bigIntConversion';\n\nexport default function bytesModPow(bytes: number[] | Uint8Array, exp: number[] | Uint8Array, mod: number[] | Uint8Array) {\n const bytesBigInt = bigIntFromBytes(bytes);\n const expBigInt = bigIntFromBytes(exp);\n const modBigInt = bigIntFromBytes(mod);\n const resBigInt = bytesBigInt.modPow(expBigInt, modBigInt);\n return bigIntToBytes(resBigInt);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {CryptoMethods} from './crypto_methods';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {Awaited} from '../../types';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IS_WORKER} from '../../helpers/context';\n\ntype CryptoEvent = {\n invoke: (payload: {method: T, args: Parameters}) => ReturnType,\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n terminate: () => void\n};\n\nexport class CryptoMessagePort extends SuperMessagePort {\n private lastIndex: number;\n\n constructor() {\n super('CRYPTO');\n this.lastIndex = -1;\n }\n\n public invokeCryptoNew({method, args, transfer}: {\n method: T,\n args: Parameters,\n transfer?: Transferable[]\n }): Promise>> {\n const payload = {method, args};\n const listeners = this.listeners['invoke'];\n if(listeners?.length) { // already in worker\n // try {\n // @ts-ignore\n let result: any = listeners[0].callback(payload);\n if(!IS_WORKER && !(result instanceof Promise)) {\n result = Promise.resolve(result);\n }\n\n return result;\n // } catch(err) {\n // return Promise.reject(err);\n // }\n }\n\n const sendPortIndex = method === 'aes-encrypt' || method === 'aes-decrypt' ?\n this.lastIndex = (this.lastIndex + 1) % this.sendPorts.length :\n 0;\n // @ts-ignore\n return this.invoke('invoke', payload, undefined, this.sendPorts[sendPortIndex], transfer);\n }\n\n public invokeCrypto(method: T, ...args: Parameters): Promise>> {\n return this.invokeCryptoNew({method, args});\n }\n}\n\nconst cryptoMessagePort = new CryptoMessagePort();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.cryptoMessagePort = cryptoMessagePort);\nexport default cryptoMessagePort;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cryptoWorker from '../../crypto/cryptoMessagePort';\nimport bigInt from 'big-integer';\n\nfunction readBigIntFromBytesBE(bytes: Uint8Array) {\n const length = bytes.length;\n const bits = length * 8;\n let value = bigInt(bytes[0]).and(0x7F).shiftLeft(bits - 8);\n for(let i = 1; i < length; ++i) {\n const _bits = bits - (i + 1) * 8;\n const b = bigInt(bytes[i]);\n value = value.or(_bits ? b.shiftLeft(_bits) : b);\n }\n\n return value;\n}\n\n// Emojis were taken from tdlib\nconst emojis = [\n '1f609', '1f60d', '1f61b', '1f62d', '1f631', '1f621', '1f60e',\n '1f634', '1f635', '1f608', '1f62c', '1f607', '1f60f', '1f46e',\n '1f477', '1f482', '1f476', '1f468', '1f469', '1f474', '1f475',\n '1f63b', '1f63d', '1f640', '1f47a', '1f648', '1f649', '1f64a',\n '1f480', '1f47d', '1f4a9', '1f525', '1f4a5', '1f4a4', '1f442',\n '1f440', '1f443', '1f445', '1f444', '1f44d', '1f44e', '1f44c',\n '1f44a', '270c', '270b', '1f450', '1f446', '1f447', '1f449',\n '1f448', '1f64f', '1f44f', '1f4aa', '1f6b6', '1f3c3', '1f483',\n '1f46b', '1f46a', '1f46c', '1f46d', '1f485', '1f3a9', '1f451',\n '1f452', '1f45f', '1f45e', '1f460', '1f455', '1f457', '1f456',\n '1f459', '1f45c', '1f453', '1f380', '1f484', '1f49b', '1f499',\n '1f49c', '1f49a', '1f48d', '1f48e', '1f436', '1f43a', '1f431',\n '1f42d', '1f439', '1f430', '1f438', '1f42f', '1f428', '1f43b',\n '1f437', '1f42e', '1f417', '1f434', '1f411', '1f418', '1f43c',\n '1f427', '1f425', '1f414', '1f40d', '1f422', '1f41b', '1f41d',\n '1f41c', '1f41e', '1f40c', '1f419', '1f41a', '1f41f', '1f42c',\n '1f40b', '1f410', '1f40a', '1f42b', '1f340', '1f339', '1f33b',\n '1f341', '1f33e', '1f344', '1f335', '1f334', '1f333', '1f31e',\n '1f31a', '1f319', '1f30e', '1f30b', '26a1', '2614', '2744', '26c4',\n '1f300', '1f308', '1f30a', '1f393', '1f386', '1f383', '1f47b',\n '1f385', '1f384', '1f381', '1f388', '1f52e', '1f3a5', '1f4f7',\n '1f4bf', '1f4bb', '260e', '1f4e1', '1f4fa', '1f4fb', '1f509',\n '1f514', '23f3', '23f0', '231a', '1f512', '1f511', '1f50e',\n '1f4a1', '1f526', '1f50c', '1f50b', '1f6bf', '1f6bd', '1f527',\n '1f528', '1f6aa', '1f6ac', '1f4a3', '1f52b', '1f52a', '1f48a',\n '1f489', '1f4b0', '1f4b5', '1f4b3', '2709', '1f4eb', '1f4e6',\n '1f4c5', '1f4c1', '2702', '1f4cc', '1f4ce', '2712', '270f',\n '1f4d0', '1f4da', '1f52c', '1f52d', '1f3a8', '1f3ac', '1f3a4',\n '1f3a7', '1f3b5', '1f3b9', '1f3bb', '1f3ba', '1f3b8', '1f47e',\n '1f3ae', '1f0cf', '1f3b2', '1f3af', '1f3c8', '1f3c0', '26bd',\n '26be', '1f3be', '1f3b1', '1f3c9', '1f3b3', '1f3c1', '1f3c7',\n '1f3c6', '1f3ca', '1f3c4', '2615', '1f37c', '1f37a', '1f377',\n '1f374', '1f355', '1f354', '1f35f', '1f357', '1f371', '1f35a',\n '1f35c', '1f361', '1f373', '1f35e', '1f369', '1f366', '1f382',\n '1f370', '1f36a', '1f36b', '1f36d', '1f36f', '1f34e', '1f34f',\n '1f34a', '1f34b', '1f352', '1f347', '1f349', '1f353', '1f351',\n '1f34c', '1f350', '1f34d', '1f346', '1f345', '1f33d', '1f3e1',\n '1f3e5', '1f3e6', '26ea', '1f3f0', '26fa', '1f3ed', '1f5fb',\n '1f5fd', '1f3a0', '1f3a1', '26f2', '1f3a2', '1f6a2', '1f6a4',\n '2693', '1f680', '2708', '1f681', '1f682', '1f68b', '1f68e',\n '1f68c', '1f699', '1f697', '1f695', '1f69b', '1f6a8', '1f694',\n '1f692', '1f691', '1f6b2', '1f6a0', '1f69c', '1f6a6', '26a0',\n '1f6a7', '26fd', '1f3b0', '1f5ff', '1f3aa', '1f3ad',\n '1f1ef-1f1f5', '1f1f0-1f1f7', '1f1e9-1f1ea', '1f1e8-1f1f3',\n '1f1fa-1f1f8', '1f1eb-1f1f7', '1f1ea-1f1f8', '1f1ee-1f1f9',\n '1f1f7-1f1fa', '1f1ec-1f1e7', '0031-20e3', '0032-20e3', '0033-20e3',\n '0034-20e3', '0035-20e3', '0036-20e3', '0037-20e3', '0038-20e3', '0039-20e3',\n '0030-20e3', '1f51f', '2757', '2753', '2665', '2666', '1f4af', '1f517',\n '1f531', '1f534', '1f535', '1f536', '1f537'\n];\n\nexport default async function getEmojisFingerprint(key: Uint8Array, g_a: Uint8Array) {\n const arr = key.concat(g_a);\n const hash = await cryptoWorker.invokeCrypto('sha256', arr);\n\n const result: [string, string, string, string] = [] as any;\n const emojisLength = emojis.length;\n\n const kPartSize = 8;\n for(let partOffset = 0; partOffset != hash.length; partOffset += kPartSize) {\n const bytes = hash.slice(partOffset, partOffset + kPartSize);\n const value = readBigIntFromBytesBE(bytes);\n const index = value.mod(emojisLength).toJSNumber();\n\n // const emoji = emojiFromCodePoints(emojis[index]);\n const codePoints = emojis[index];\n result.push(codePoints);\n }\n\n return result;\n}\n","export default function randomize(arr: T) {\n if(crypto && 'getRandomValues' in crypto) {\n crypto.getRandomValues(arr);\n } else {\n throw new Error('NO_SECURE_RANDOM');\n }\n\n return arr;\n}\n","import randomize from '../array/randomize';\nimport bufferConcats from './bufferConcats';\n\nexport default function addPadding(\n bytes: T,\n blockSize: number = 16,\n zeroes?: boolean,\n blockSizeAsTotalLength = false,\n prepend = false\n): T {\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\n if(needPadding > 0 && needPadding < blockSize) {\n // //console.log('addPadding()', len, blockSize, needPadding);\n const padding = new Uint8Array(needPadding);\n if(zeroes) {\n for(let i = 0; i < needPadding; ++i) {\n padding[i] = 0;\n }\n } else {\n randomize(padding);\n }\n\n if(bytes instanceof ArrayBuffer) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\n } else if(bytes instanceof Uint8Array) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\n } else {\n // @ts-ignore\n return (prepend ? [...padding].concat(bytes) : bytes.concat([...padding])) as T;\n }\n }\n\n return bytes;\n}\n","export default function bytesFromHex(hexString: string) {\n const len = hexString.length;\n const bytes = new Uint8Array(Math.ceil(len / 2));\n let start = 0;\n\n if(len % 2) { // read 0x581 as 0x0581\n bytes[start++] = parseInt(hexString.charAt(0), 16);\n }\n\n for(let i = start; i < len; i += 2) {\n bytes[start++] = parseInt(hexString.substr(i, 2), 16);\n }\n\n return bytes;\n}\n","export default function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\n if(bytes instanceof Uint8Array) {\n return bytes;\n } else if(typeof(bytes) === 'string') {\n return new TextEncoder().encode(bytes);\n }\n\n return new Uint8Array(bytes);\n}\n","var S = new Uint8Array(256);\nvar Si = new Uint8Array(256);\nvar T1 = new Uint32Array(256);\nvar T2 = new Uint32Array(256);\nvar T3 = new Uint32Array(256);\nvar T4 = new Uint32Array(256);\nvar T5 = new Uint32Array(256);\nvar T6 = new Uint32Array(256);\nvar T7 = new Uint32Array(256);\nvar T8 = new Uint32Array(256);\nfunction computeTables() {\n var d = new Uint8Array(256);\n var t = new Uint8Array(256);\n var x2;\n var x4;\n var x8;\n var s;\n var tEnc;\n var tDec;\n var x = 0;\n var xInv = 0;\n // Compute double and third tables\n for (var i = 0; i < 256; i++) {\n d[i] = i << 1 ^ (i >> 7) * 283;\n t[d[i] ^ i] = i;\n }\n for (; !S[x]; x ^= x2 || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n S[x] = s;\n Si[s] = x;\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n T1[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T2[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T3[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T4[x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n T5[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T6[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T7[s] = tDec = tDec << 24 ^ tDec >>> 8;\n T8[s] = tDec = tDec << 24 ^ tDec >>> 8;\n xInv = t[xInv] || 1;\n }\n}\n\n/**\n * Gets a uint32 from string in big-endian order order\n */\nfunction s2i(str, pos) {\n return (str.charCodeAt(pos) << 24\n ^ str.charCodeAt(pos + 1) << 16\n ^ str.charCodeAt(pos + 2) << 8\n ^ str.charCodeAt(pos + 3));\n}\n\n/* eslint-disable import/prefer-default-export */\n/**\n * Helper function for transforming string key to Uint32Array\n */\nfunction getWords(key) {\n if (key instanceof Uint32Array) {\n return key;\n }\n if (typeof key === 'string') {\n if (key.length % 4 !== 0)\n for (var i = key.length % 4; i <= 4; i++)\n key += '\\0x00';\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4)\n buf[i / 4] = s2i(key, i);\n return buf;\n }\n if (key instanceof Uint8Array) {\n var buf = new Uint32Array(key.length / 4);\n for (var i = 0; i < key.length; i += 4) {\n buf[i / 4] = (key[i] << 24\n ^ key[i + 1] << 16\n ^ key[i + 2] << 8\n ^ key[i + 3]);\n }\n return buf;\n }\n throw new Error('Unable to create 32-bit words');\n}\nfunction xor(left, right, to) {\n if (to === void 0) { to = left; }\n for (var i = 0; i < left.length; i++)\n to[i] = left[i] ^ right[i];\n}\n\ncomputeTables();\n/**\n * Low-level AES Cipher\n */\nvar AES = /** @class */ (function () {\n function AES(_key) {\n var key = getWords(_key);\n if (key.length !== 4 && key.length !== 6 && key.length !== 8) {\n throw new Error('Invalid key size');\n }\n this.encKey = new Uint32Array(4 * key.length + 28);\n this.decKey = new Uint32Array(4 * key.length + 28);\n this.encKey.set(key);\n var rcon = 1;\n var i = key.length;\n var tmp;\n // schedule encryption keys\n for (; i < 4 * key.length + 28; i++) {\n tmp = this.encKey[i - 1];\n // apply sbox\n if (i % key.length === 0 || (key.length === 8 && i % key.length === 4)) {\n tmp = S[tmp >>> 24] << 24 ^ S[(tmp >> 16) & 255] << 16 ^ S[(tmp >> 8) & 255] << 8 ^ S[tmp & 255];\n // shift rows and add rcon\n if (i % key.length === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ (rcon << 24);\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n this.encKey[i] = this.encKey[i - key.length] ^ tmp;\n }\n // schedule decryption keys\n for (var j = 0; i; j++, i--) {\n tmp = this.encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n this.decKey[j] = tmp;\n }\n else {\n this.decKey[j] = (T5[S[tmp >>> 24]]\n ^ T6[S[(tmp >> 16) & 255]]\n ^ T7[S[(tmp >> 8) & 255]]\n ^ T8[S[tmp & 255]]);\n }\n }\n }\n AES.prototype.encrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.encKey[0];\n var b = message[1] ^ this.encKey[1];\n var c = message[2] ^ this.encKey[2];\n var d = message[3] ^ this.encKey[3];\n var rounds = this.encKey.length / 4 - 2;\n var k = 4;\n var a2;\n var b2;\n var c2;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T1[a >>> 24] ^ T2[(b >> 16) & 255] ^ T3[(c >> 8) & 255] ^ T4[d & 255] ^ this.encKey[k];\n b2 = T1[b >>> 24] ^ T2[(c >> 16) & 255] ^ T3[(d >> 8) & 255] ^ T4[a & 255] ^ this.encKey[k + 1];\n c2 = T1[c >>> 24] ^ T2[(d >> 16) & 255] ^ T3[(a >> 8) & 255] ^ T4[b & 255] ^ this.encKey[k + 2];\n d = T1[d >>> 24] ^ T2[(a >> 16) & 255] ^ T3[(b >> 8) & 255] ^ T4[c & 255] ^ this.encKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n // console.log(a, b, c, d);\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[i] = (S[a >>> 24] << 24\n ^ S[(b >> 16) & 255] << 16\n ^ S[(c >> 8) & 255] << 8\n ^ S[d & 255]\n ^ this.encKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n AES.prototype.decrypt = function (_message) {\n var message = getWords(_message);\n var out = new Uint32Array(4);\n var a = message[0] ^ this.decKey[0];\n var b = message[3] ^ this.decKey[1];\n var c = message[2] ^ this.decKey[2];\n var d = message[1] ^ this.decKey[3];\n var rounds = this.decKey.length / 4 - 2;\n var a2;\n var b2;\n var c2;\n var k = 4;\n // Inner rounds. Cribbed from OpenSSL.\n for (var i = 0; i < rounds; i++) {\n a2 = T5[a >>> 24] ^ T6[(b >> 16) & 255] ^ T7[(c >> 8) & 255] ^ T8[d & 255] ^ this.decKey[k];\n b2 = T5[b >>> 24] ^ T6[(c >> 16) & 255] ^ T7[(d >> 8) & 255] ^ T8[a & 255] ^ this.decKey[k + 1];\n c2 = T5[c >>> 24] ^ T6[(d >> 16) & 255] ^ T7[(a >> 8) & 255] ^ T8[b & 255] ^ this.decKey[k + 2];\n d = T5[d >>> 24] ^ T6[(a >> 16) & 255] ^ T7[(b >> 8) & 255] ^ T8[c & 255] ^ this.decKey[k + 3];\n a = a2;\n b = b2;\n c = c2;\n k += 4;\n }\n // Last round.\n for (var i = 0; i < 4; i++) {\n out[3 & -i] = (Si[a >>> 24] << 24\n ^ Si[(b >> 16) & 255] << 16\n ^ Si[(c >> 8) & 255] << 8\n ^ Si[d & 255]\n ^ this.decKey[k++]);\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n return out;\n };\n return AES;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE = /** @class */ (function () {\n function AES_IGE(key, iv, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.key = getWords(key);\n this.iv = getWords(iv);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var prevX = this.iv.subarray(this.blockSize, this.iv.length);\n var prevY = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = text.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.encrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n cipherText[j] = y[k];\n }\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n var cipherText = getWords(message);\n var text = buf || new Uint32Array(cipherText.length);\n var prevY = this.iv.subarray(this.blockSize, this.iv.length);\n var prevX = this.iv.subarray(0, this.blockSize);\n var yXOR = new Uint32Array(this.blockSize);\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = cipherText.subarray(i, i + this.blockSize);\n xor(x, prevY, yXOR);\n var y = this.cipher.decrypt(yXOR);\n xor(y, prevX);\n prevX = x;\n prevY = y;\n for (var j = i, k = 0; j < text.length && k < 4; j++, k++)\n text[j] = y[k];\n }\n return text;\n };\n return AES_IGE;\n}());\n\n/**\n * AES-IGE mode.\n */\nvar AES_IGE$1 = /** @class */ (function () {\n function AES_IGE(key, counter, blockSize) {\n if (blockSize === void 0) { blockSize = 16; }\n this.offset = 0;\n this.key = getWords(key);\n this.counter = getWords(counter);\n this.cipher = new AES(key);\n this.blockSize = blockSize / 4;\n if (this.counter.length !== 4) {\n throw new Error('AES-CTR mode counter must be 16 bytes length');\n }\n }\n /**\n * Encrypts plain text with AES-IGE mode.\n */\n AES_IGE.prototype.encrypt = function (message, buf) {\n var text = getWords(message);\n var cipherText = buf || new Uint32Array(text.length);\n var offset = this.offset;\n for (var i = 0; i < text.length; i += this.blockSize) {\n var x = this.cipher.encrypt(this.counter);\n for (var j = i, k = offset; j < text.length && k < this.blockSize; j++, k++)\n cipherText[j] = x[k] ^ text[j];\n if (text.length - i >= this.blockSize)\n this.incrementCounter();\n if (offset) {\n i -= offset;\n offset = 0;\n }\n }\n this.offset = (this.offset + (text.length % 4)) % 4;\n return cipherText;\n };\n /**\n * Decrypts cipher text with AES-IGE mode.\n */\n AES_IGE.prototype.decrypt = function (message, buf) {\n return this.encrypt(message, buf);\n };\n AES_IGE.prototype.incrementCounter = function () {\n // increment counter\n for (var carry = this.counter.length - 1; carry >= 0; carry--) {\n if (++this.counter[carry] < 0xFFFFFFFF)\n break; // If overflowing, it'll be 0 and we'll have to continue propagating the carry\n }\n };\n return AES_IGE;\n}());\n\nexport default AES;\nexport { AES_IGE$1 as CTR, AES_IGE as IGE };\n","import convertToUint8Array from './convertToUint8Array';\n\nexport default function bytesToWordss(input: Parameters[0]) {\n const bytes = convertToUint8Array(input);\n\n const words: number[] = [];\n for(let i = 0, len = bytes.length; i < len; ++i) {\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\n }\n\n return new Uint32Array(words);\n}\n","import {IGE} from '@cryptography/aes';\nimport addPadding from '../../../helpers/bytes/addPadding';\nimport bytesFromWordss from '../../../helpers/bytes/bytesFromWordss';\nimport bytesToWordss from '../../../helpers/bytes/bytesToWordss';\n\nexport default function aesSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array, encrypt = true) {\n // console.log(dT(), 'AES start', bytes, keyBytes, ivBytes);\n\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\n const performedBytes = cipher[encrypt ? 'encrypt' : 'decrypt'](bytesToWordss(bytes));\n // console.log(dT(), 'AES finish');\n\n return bytesFromWordss(performedBytes);\n}\n\nexport function aesEncryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n return aesSync(addPadding(bytes), keyBytes, ivBytes, true);\n}\n\nexport function aesDecryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\n return aesSync(bytes, keyBytes, ivBytes, false);\n}\n","export default function bytesFromWordss(input: Uint32Array) {\n const o = new Uint8Array(input.byteLength);\n for(let i = 0, length = input.length * 4; i < length; ++i) {\n o[i] = ((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\n }\n\n return o;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nconst arrays = {\n 8: new Uint8Array(1),\n 16: new Uint16Array(1),\n 32: new Uint32Array(1)\n};\nexport function nextRandomUint(bits: 8 | 16 | 32) {\n const array = arrays[bits];\n crypto.getRandomValues(array);\n return array[0];\n}\n\nexport function randomLong() {\n return '' + nextRandomUint(32) + nextRandomUint(32) % 0xFFFFFF;\n}\n","import bigInt from 'big-integer';\nimport {nextRandomUint} from '../random';\n\nexport default function bigIntRandom(min: bigInt.BigNumber, max: bigInt.BigNumber) {\n return bigInt.randBetween(min, max, () => {\n return nextRandomUint(32) / 0xFFFFFFFF;\n /* const bits = 32;\n const randomBytes = new Uint8Array(bits / 8);\n crypto.getRandomValues(randomBytes);\n const r = bigIntFromBytes(randomBytes).mod(bigInt(2).pow(bits));\n return r.toJSNumber(); */\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// Thanks to https://xn--2-umb.com/09/12/brent-pollard-rho-factorisation/\n\nimport bigInt from 'big-integer';\nimport {bigIntFromBytes, bigIntToBytes} from '../../../../helpers/bigInt/bigIntConversion';\nimport bigIntRandom from '../../../../helpers/bigInt/bigIntRandom';\n\n// let test = 0;\nfunction BrentPollardFactor(n: bigInt.BigInteger) {\n const two = bigInt[2];\n if(n.remainder(two).isZero()) {\n return two;\n }\n\n const m = bigInt(1000);\n let a: bigInt.BigInteger,\n x: bigInt.BigInteger,\n y: bigInt.BigInteger,\n ys: bigInt.BigInteger,\n r: bigInt.BigInteger,\n q: bigInt.BigInteger,\n g: bigInt.BigInteger;\n do\n a = bigIntRandom(bigInt.one, n.minus(1));\n while(a.isZero() || a.eq(n.minus(two)));\n y = bigIntRandom(bigInt.one, n.minus(1));\n r = bigInt.one;\n q = bigInt.one;\n\n // if(!test++) {\n // a = bigInt(3);\n // y = bigInt(3);\n // }\n\n const bigIntUint64 = bigInt('FFFFFFFFFFFFFFFF', 16);\n const bigIntUint64MinusPqPlusOne = bigIntUint64.minus(n).plus(1);\n\n const performY = (y: bigInt.BigInteger) => {\n y = y.pow(two).mod(n);\n y = y.add(a);\n if(y.lesser(a)) { // it slows down the script\n y = y.add(bigIntUint64MinusPqPlusOne);\n }\n y = y.mod(n);\n return y;\n };\n\n do {\n x = y;\n for(let i = 0; bigInt(i).lesser(r); ++i) {\n y = performY(y);\n }\n\n let k = bigInt.zero;\n do {\n ys = y;\n const condition = bigInt.min(m, r.minus(k));\n for(let i = 0; bigInt(i).lesser(condition); ++i) {\n y = performY(y);\n q = q.multiply(x.greater(y) ? x.minus(y) : y.minus(x)).mod(n);\n }\n g = bigInt.gcd(q, n);\n k = k.add(m);\n } while(k.lesser(r) && g.eq(bigInt.one));\n\n r = r.shiftLeft(bigInt.one);\n } while(g.eq(bigInt.one));\n\n if(g.eq(n)) {\n do {\n ys = performY(ys);\n g = bigInt.gcd(x.minus(ys).abs(), n);\n } while(g.eq(bigInt.one));\n }\n\n return g;\n}\n\nfunction primeFactors(pqBytes: Uint8Array | number[]) {\n const n = bigIntFromBytes(pqBytes);\n\n const factors: bigInt.BigInteger[] = [];\n const primes: bigInt.BigInteger[] = [];\n\n let factor = BrentPollardFactor(n);\n factors.push(n.divide(factor));\n factors.push(factor);\n\n // return [factor];\n\n do {\n const m = factors.pop();\n\n if(m.eq(bigInt.one))\n continue;\n\n if(m.isPrime(true)) {\n primes.push(m);\n\n // Remove the prime from the other factors\n for(let i = 0; i < factors.length; ++i) {\n let k = factors[i];\n if(k.mod(m).isZero()) {\n do\n k = k.divide(m);\n while(k.mod(m).isZero());\n factors[i] = k;\n }\n }\n } else {\n // factor = m.lesser(100) ? bigInt(PollardRho(m.toJSNumber())) : this.brentPollardFactor(m);\n factor = BrentPollardFactor(m);\n factors.push(m.divide(factor));\n factors.push(factor);\n }\n } while(factors.length);\n\n return primes;\n}\n\nexport default function factorizeBrentPollardPQ(pqBytes: Uint8Array | number[]): [Uint8Array, Uint8Array] {\n let factors = primeFactors(pqBytes);\n factors.sort((a, b) => a.compare(b));\n if(factors.length > 2) {\n factors = [\n factors.splice(factors.length - 2, 1)[0],\n factors.reduce((acc, v) => acc.multiply(v), bigInt.one)\n ];\n }\n\n const p = factors[0], q = factors[factors.length - 1];\n return (p.lesser(q) ? [p, q] : [q, p]).map((b) => bigIntToBytes(b)) as any;\n}\n","const subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\n\nexport default subtle;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {BigInteger} from 'big-integer';\nimport {bigIntFromBytes, bigIntToBytes} from '../../../helpers/bigInt/bigIntConversion';\nimport addPadding from '../../../helpers/bytes/addPadding';\nimport subtle from '../subtle';\n\nconst COUNTER_LENGTH = 16;\n\nexport default class CTR {\n private cryptoKey: CryptoKey;\n // private encLeft: Uint8Array;\n private leftLength: number;\n private mode: 'encrypt' | 'decrypt';\n private counter: BigInteger;\n private queue: {data: Uint8Array, resolve: (data: Uint8Array) => void}[];\n private releasing: boolean;\n\n constructor(mode: 'encrypt' | 'decrypt', cryptoKey: CryptoKey, counter: Uint8Array) {\n this.mode = mode;\n this.cryptoKey = cryptoKey;\n this.queue = [];\n this.counter = bigIntFromBytes(counter);\n }\n\n public async update(data: Uint8Array) {\n return new Promise((resolve) => {\n this.queue.push({data, resolve});\n this.release();\n });\n }\n\n private async release() {\n if(this.releasing) {\n return;\n }\n\n this.releasing = true;\n while(this.queue.length) {\n const {data, resolve} = this.queue.shift();\n resolve(await this._update(data));\n }\n this.releasing = false;\n }\n\n private async perform(data: Uint8Array) {\n const arrayBuffer: ArrayBuffer = await subtle[this.mode]({\n name: 'AES-CTR',\n counter: addPadding(bigIntToBytes(this.counter), COUNTER_LENGTH, true, true, true),\n length: 128\n },\n this.cryptoKey,\n data\n );\n\n return arrayBuffer;\n }\n\n private async _update(data: Uint8Array) {\n let toEncrypt = data;\n let head: Uint8Array/* , tail: Uint8Array */;\n if(this.leftLength) {\n // const leftLength = this.encLeft.byteLength;\n const leftLength = this.leftLength;\n const leftLength2 = COUNTER_LENGTH - leftLength;\n // const left = this.encLeft.concat(toEncrypt.slice(0, leftLength2));\n const left = (new Uint8Array(leftLength)).concat(toEncrypt.slice(0, leftLength2));\n\n const performed = await this.perform(left);\n\n head = new Uint8Array(performed.slice(leftLength));\n\n toEncrypt = toEncrypt.slice(leftLength2);\n\n this.counter = this.counter.add(1);\n }\n\n const tail = new Uint8Array(await this.perform(toEncrypt));\n\n const result = head ? head.concat(tail) : tail;\n\n let length = toEncrypt.length;\n const leftAfter = length % COUNTER_LENGTH;\n length -= leftAfter;\n\n const a = length / COUNTER_LENGTH;\n this.counter = this.counter.add(a);\n\n this.leftLength = leftAfter || undefined;\n // this.encLeft = leftAfter ? toEncrypt.slice(-leftAfter) : undefined;\n\n return result;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CTR from './utils/aesCTR';\nimport subtle from './subtle';\n\nconst aesCTRs: Map = new Map();\nlet lastCTRId = -1;\n\ntype K = {\n enc: CTR,\n dec: CTR,\n};\n\nexport async function aesCtrPrepare({encKey, encIv, decKey, decIv}: {[k in 'encKey' | 'encIv' | 'decKey' | 'decIv']: Uint8Array}) {\n const id = ++lastCTRId;\n\n const a = [['encrypt', encKey], ['decrypt', decKey]] as ['encrypt' | 'decrypt', Uint8Array][];\n const promises = a.map(([mode, key]) => {\n return subtle.importKey(\n 'raw',\n key,\n {name: 'AES-CTR'},\n false,\n [mode]\n )\n });\n\n const [encCryptoKey, decCryptoKey] = await Promise.all(promises);\n const enc = new CTR('encrypt', encCryptoKey, encIv.slice());\n const dec = new CTR('decrypt', decCryptoKey, decIv.slice());\n\n const k: K = {\n enc,\n dec\n };\n\n aesCTRs.set(id, k);\n\n return id;\n}\n\nexport async function aesCtrProcess({id, data, operation}: {id: number, data: Uint8Array, operation: 'encrypt' | 'decrypt'}) {\n const ctrs = aesCTRs.get(id);\n const result = await (operation === 'encrypt' ? ctrs.enc : ctrs.dec).update(data);\n return result;\n}\n\nexport function aesCtrDestroy(id: number) {\n aesCTRs.delete(id);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport '../polyfill'; // just to include\n\nimport bytesModPow from '../../helpers/bytes/bytesModPow';\nimport gzipUncompress from '../../helpers/gzipUncompress';\nimport listenMessagePort from '../../helpers/listenMessagePort';\nimport getEmojisFingerprint from '../calls/helpers/getEmojisFingerprint';\nimport computeDhKey from './computeDhKey';\nimport cryptoMessagePort from './cryptoMessagePort';\nimport {CryptoMethods} from './crypto_methods';\nimport generateDh from './generateDh';\nimport computeSRP from './srp';\nimport {aesEncryptSync, aesDecryptSync} from './utils/aesIGE';\nimport factorizeBrentPollardPQ from './utils/factorize/BrentPollard';\nimport pbkdf2 from './utils/pbkdf2';\nimport rsaEncrypt from './utils/rsa';\nimport sha1 from './utils/sha1';\nimport sha256 from './utils/sha256';\nimport {aesCtrDestroy, aesCtrPrepare, aesCtrProcess} from './aesCtrUtils';\nimport ctx from '../../environment/ctx';\n\nconsole.log('CryptoWorker start');\n\nconst cryptoMethods: CryptoMethods = {\n 'sha1': sha1,\n 'sha256': sha256,\n 'pbkdf2': pbkdf2,\n 'aes-encrypt': aesEncryptSync,\n 'aes-decrypt': aesDecryptSync,\n 'rsa-encrypt': rsaEncrypt,\n 'factorize': factorizeBrentPollardPQ,\n // 'factorize-tdlib': factorizeTdlibPQ,\n // 'factorize-new-new': pqPrimeLeemonNew,\n 'mod-pow': bytesModPow,\n 'gzipUncompress': gzipUncompress,\n 'computeSRP': computeSRP,\n 'generate-dh': generateDh,\n 'compute-dh-key': computeDhKey,\n 'get-emojis-fingerprint': getEmojisFingerprint,\n 'aes-ctr-prepare': aesCtrPrepare,\n 'aes-ctr-process': aesCtrProcess,\n 'aes-ctr-destroy': aesCtrDestroy\n};\n\ncryptoMessagePort.addMultipleEventsListeners({\n invoke: ({method, args}) => {\n // @ts-ignore\n const result: any = cryptoMethods[method](...args);\n return result;\n },\n\n terminate: () => {\n ctx.close();\n }\n});\n\nif(typeof(MessageChannel) !== 'undefined') listenMessagePort(cryptoMessagePort, (source) => {\n const channel = new MessageChannel();\n cryptoMessagePort.attachPort(channel.port1);\n cryptoMessagePort.invokeVoid('port', undefined, source, [channel.port2]);\n});\n","import convertToUint8Array from '../../../helpers/bytes/convertToUint8Array';\nimport subtle from '../subtle';\n// import sha1 from '@cryptography/sha1';\n\nexport default function sha1(bytes: Parameters[0]) {\n return subtle.digest('SHA-1', convertToUint8Array(bytes)).then((b) => {\n return new Uint8Array(b);\n });\n /* //console.trace(dT(), 'SHA-1 hash start', bytes);\n\n const hashBytes: number[] = [];\n\n let hash = sha1(String.fromCharCode.apply(null,\n bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)]));\n for(let i = 0; i < hash.length; ++i) {\n hashBytes.push(hash.charCodeAt(i));\n }\n\n //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes));\n\n return new Uint8Array(hashBytes); */\n}\n","import convertToUint8Array from '../../../helpers/bytes/convertToUint8Array';\nimport subtle from '../subtle';\n// import sha256 from '@cryptography/sha256';\n\nexport default function sha256(bytes: Parameters[0]) {\n return subtle.digest('SHA-256', convertToUint8Array(bytes)).then((b) => {\n // console.log('legacy', performance.now() - perfS);\n return new Uint8Array(b);\n });\n /* //console.log('SHA-256 hash start');\n\n let perfS = performance.now();\n\n\n let perfD = performance.now();\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes as any);\n let hash = sha256(words);\n console.log('darutkin', performance.now() - perfD);\n\n //console.log('SHA-256 hash finish', hash, sha256(words, 'hex'));\n\n return bytesFromWordss(hash); */\n}\n","import subtle from '../subtle';\n\nexport default async function pbkdf2(buffer: Parameters[1], salt: HkdfParams['salt'], iterations: number) {\n const importKey = await subtle.importKey(\n 'raw',\n buffer,\n {name: 'PBKDF2'},\n false,\n [/* 'deriveKey', */'deriveBits']\n );\n\n /* await subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'}\n },\n importKey,\n {\n name: 'AES-CTR',\n length: 256\n },\n false,\n ['encrypt', 'decrypt']\n ); */\n\n const bits = subtle.deriveBits({\n name: 'PBKDF2',\n salt,\n iterations,\n hash: {name: 'SHA-512'}\n },\n importKey,\n 512\n );\n\n return bits.then((buffer) => new Uint8Array(buffer));\n}\n","import type {RSAPublicKeyHex} from '../../mtproto/rsaKeysManager';\nimport bytesModPow from '../../../helpers/bytes/bytesModPow';\nimport bytesFromHex from '../../../helpers/bytes/bytesFromHex';\n\nexport default function rsaEncrypt(bytes: Uint8Array, publicKey: RSAPublicKeyHex) {\n return bytesModPow(bytes, bytesFromHex(publicKey.exponent), bytesFromHex(publicKey.modulus));\n}\n","// export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\n\n// @ts-ignore\nimport pako from 'pako/dist/pako_inflate.min.js';\n// import dT from './dT';\n\n// export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\nexport default function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\n // console.log(dT(), 'Gzip uncompress start');\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\n // console.log(dT(), 'Gzip uncompress finish'/* , result */);\n return result;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cryptoWorker from './cryptoMessagePort';\nimport {AccountPassword, InputCheckPasswordSRP, PasswordKdfAlgo} from '../../layer';\nimport addPadding from '../../helpers/bytes/addPadding';\nimport bufferConcats from '../../helpers/bytes/bufferConcats';\nimport bytesXor from '../../helpers/bytes/bytesXor';\nimport convertToUint8Array from '../../helpers/bytes/convertToUint8Array';\nimport bigInt from 'big-integer';\nimport {bigIntFromBytes, bigIntToBytes} from '../../helpers/bigInt/bigIntConversion';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\n\nexport async function makePasswordHash(password: string, client_salt: Uint8Array, server_salt: Uint8Array) {\n // ! look into crypto_methods.test.ts\n let buffer = await cryptoWorker.invokeCrypto('sha256', bufferConcats(client_salt, new TextEncoder().encode(password), client_salt));\n buffer = bufferConcats(server_salt, buffer, server_salt);\n buffer = await cryptoWorker.invokeCrypto('sha256', buffer);\n\n let hash = await cryptoWorker.invokeCrypto('pbkdf2', new Uint8Array(buffer), client_salt, 100000);\n hash = bufferConcats(server_salt, hash, server_salt);\n\n buffer = await cryptoWorker.invokeCrypto('sha256', hash);\n\n return buffer;\n}\n\nexport default async function computeSRP(password: string, state: AccountPassword, isNew: boolean) {\n const algo = (isNew ? state.new_algo : state.current_algo) as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\n\n const p = bigIntFromBytes(algo.p);\n const g = bigInt(algo.g);\n\n /* if(B.compareTo(BigInteger.ZERO) < 0) {\n console.error('srp_B < 0')\n }\n\n if(B.compareTo(p) <= 0) {\n console.error('srp_B <= p');\n } */\n\n /* let check_prime_and_good = (bytes: any, g: number) => {\n let good_prime = 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b';\n\n if(bytesToHex(bytes) === good_prime && [3, 4, 5, 7].indexOf(g) !== -1) {\n return true;\n }\n\n // TO-DO check_prime_and_good_check\n }; */\n\n // check_prime_and_good(algo.p, g);\n\n const pw_hash = await makePasswordHash(password, algo.salt1, algo.salt2);\n const x = bigInt(bytesToHex(pw_hash), 16);\n\n const padArray = function(arr: number[] | Uint8Array, len: number) {\n if(!(arr instanceof Uint8Array)) {\n arr = convertToUint8Array(arr);\n }\n\n return addPadding(arr, len, true, true, true);\n };\n\n const v = g.modPow(x, p);\n\n const flipper = (arr: Uint8Array | number[]) => {\n const out = new Uint8Array(arr.length);\n for(let i = 0; i < arr.length; i += 4) {\n out[i] = arr[i + 3];\n out[i + 1] = arr[i + 2];\n out[i + 2] = arr[i + 1];\n out[i + 3] = arr[i];\n }\n\n return out;\n };\n\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password\n if(isNew) {\n const bytes = bigIntToBytes(v);\n return padArray(/* (isBigEndian ? bytes.reverse() : bytes) */bytes, 256);\n }\n\n const B = bigIntFromBytes(state.srp_B);\n\n const pForHash = padArray(bigIntToBytes(p), 256);\n const gForHash = padArray(bigIntToBytes(g), 256);\n const b_for_hash = padArray(bigIntToBytes(B), 256);\n\n const kHash = await cryptoWorker.invokeCrypto('sha256', bufferConcats(pForHash, gForHash));\n const k = bigIntFromBytes(kHash);\n\n const k_v = k.multiply(v).mod(p);\n\n const is_good_mod_exp_first = (modexp: bigInt.BigInteger, prime: bigInt.BigInteger) => {\n const diff = prime.subtract(modexp);\n const min_diff_bits_count = 2048 - 64;\n const max_mod_exp_size = 256;\n if(diff.isNegative() ||\n diff.bitLength().toJSNumber() < min_diff_bits_count ||\n modexp.bitLength().toJSNumber() < min_diff_bits_count ||\n Math.floor((modexp.bitLength().toJSNumber() + 7) / 8) > max_mod_exp_size)\n return false;\n return true;\n };\n\n const generate_and_check_random = async() => {\n while(true) {\n const a = bigIntFromBytes(flipper(state.secure_random));\n // const a = str2bigInt('9153faef8f2bb6da91f6e5bc96bc00860a530a572a0f45aac0842b4602d711f8bda8d59fb53705e4ae3e31a3c4f0681955425f224297b8e9efd898fec22046debb7ba8a0bcf2be1ada7b100424ea318fdcef6ccfe6d7ab7d978c0eb76a807d4ab200eb767a22de0d828bc53f42c5a35c2df6e6ceeef9a3487aae8e9ef2271f2f6742e83b8211161fb1a0e037491ab2c2c73ad63c8bd1d739de1b523fe8d461270cedcf240de8da75f31be4933576532955041dc5770c18d3e75d0b357df9da4a5c8726d4fced87d15752400883dc57fa1937ac17608c5446c4774dcd123676d683ce3a1ab9f7e020ca52faafc99969822717c8e07ea383d5fb1a007ba0d170cb', 16);\n\n const A = g.modPow(a, p);\n if(is_good_mod_exp_first(A, p)) {\n const a_for_hash = bigIntToBytes(A);\n\n const s = await cryptoWorker.invokeCrypto('sha256', bufferConcats(a_for_hash, b_for_hash));\n // const u = bigInt(s.hex, 16);\n const u = bigIntFromBytes(s);\n if(!u.isZero() && !u.isNegative())\n return {a, a_for_hash, u};\n }\n }\n }\n\n const {a, a_for_hash, u} = await generate_and_check_random();\n\n let g_b: bigInt.BigInteger;\n if(!B.greater(k_v)) {\n g_b = B.add(p);\n } else g_b = B;\n g_b = g_b.subtract(k_v).mod(p);\n\n const ux = u.multiply(x);\n const a_ux = a.add(ux);\n const S = g_b.modPow(a_ux, p);\n\n const K = await cryptoWorker.invokeCrypto('sha256', padArray(bigIntToBytes(S), 256));\n\n let h1 = await cryptoWorker.invokeCrypto('sha256', pForHash);\n const h2 = await cryptoWorker.invokeCrypto('sha256', gForHash);\n h1 = bytesXor(h1, h2);\n\n const buff = bufferConcats(\n h1,\n await cryptoWorker.invokeCrypto('sha256', algo.salt1),\n await cryptoWorker.invokeCrypto('sha256', algo.salt2),\n a_for_hash,\n b_for_hash,\n K\n );\n\n const M1 = await cryptoWorker.invokeCrypto('sha256', buff);\n\n const out: InputCheckPasswordSRP.inputCheckPasswordSRP = {\n _: 'inputCheckPasswordSRP',\n srp_id: state.srp_id,\n A: new Uint8Array(a_for_hash),\n M1\n };\n\n return out;\n}\n","export default function bytesToHex(bytes: ArrayLike) {\n const length = bytes.length;\n const arr: string[] = new Array(length);\n for(let i = 0; i < length; ++i) {\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\n }\n return arr.join('');\n}\n","export default function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\n const len = bytes1.length;\n const bytes = new Uint8Array(len);\n\n for(let i = 0; i < len; ++i) {\n bytes[i] = bytes1[i] ^ bytes2[i];\n }\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type CallInstance from '../calls/callInstance';\nimport type {MessagesDhConfig} from '../../layer';\nimport bigInt from 'big-integer';\nimport randomize from '../../helpers/array/randomize';\nimport {bigIntFromBytes} from '../../helpers/bigInt/bigIntConversion';\nimport addPadding from '../../helpers/bytes/addPadding';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport cryptoWorker from './cryptoMessagePort';\n\nexport default async function generateDh(dhConfig: MessagesDhConfig.messagesDhConfig) {\n const {p, g} = dhConfig;\n\n const generateA = (p: Uint8Array) => {\n for(;;) {\n const a = randomize(new Uint8Array(p.length));\n // const a = new Uint8Array(4).randomize();\n\n const aBigInt = bigIntFromBytes(a); // str2bigInt(bytesToHex(a), 16);\n if(!aBigInt.greater(bigInt.one)) {\n continue;\n }\n\n const pBigInt = bigIntFromBytes(p); // str2bigInt(bytesToHex(p), 16);\n if(!aBigInt.lesser(pBigInt.subtract(bigInt.one))) {\n continue;\n }\n\n return a;\n }\n };\n\n const a = generateA(p);\n // const a = new Uint8Array([0]);\n\n const gBytes = bytesFromHex(g.toString(16));\n const g_a = addPadding(await cryptoWorker.invokeCrypto('mod-pow', gBytes, a, p), 256, true, true, true);\n const g_a_hash = await cryptoWorker.invokeCrypto('sha256', g_a);\n\n const dh: CallInstance['dh'] = {\n a: a,\n g_a: g_a,\n g_a_hash: g_a_hash,\n p\n };\n\n return dh;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {bigIntFromBytes, bigIntToSigned} from '../../helpers/bigInt/bigIntConversion';\nimport cryptoWorker from './cryptoMessagePort';\n\nexport default async function computeDhKey(g_b: Uint8Array, a: Uint8Array, p: Uint8Array) {\n const key = await cryptoWorker.invokeCrypto('mod-pow', g_b, a, p);\n const keySha1Hashed = await cryptoWorker.invokeCrypto('sha1', key);\n const key_fingerprint = keySha1Hashed.slice(-8).reverse();\n const key_fingerprint_long = bigIntToSigned(bigIntFromBytes(key_fingerprint)).toString(10);\n\n return {key, key_fingerprint: key_fingerprint_long};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type SuperMessagePort from '../lib/mtproto/superMessagePort';\nimport ctx from '../environment/ctx';\n\nexport default function listenMessagePort(\n messagePort: SuperMessagePort,\n onConnect?: (source: MessageEventSource) => void,\n onDisconnect?: (source: MessageEventSource) => void\n) {\n const attachPort = (listenPort: any, sendPort: any) => {\n messagePort.attachListenPort(listenPort);\n sendPort && messagePort.attachSendPort(sendPort);\n onConnect?.(listenPort);\n };\n\n messagePort.setOnPortDisconnect(onDisconnect);\n\n if(typeof(SharedWorkerGlobalScope) !== 'undefined') {\n (ctx as any as SharedWorkerGlobalScope).addEventListener('connect', (e) => attachPort(e.source, e.source));\n } else if(typeof(ServiceWorkerGlobalScope) !== 'undefined') {\n attachPort(ctx, null);\n } else {\n attachPort(ctx, ctx);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../config/debug';\nimport {IS_FIREFOX, IS_SAFARI} from '../environment/userAgent';\nimport {IS_SERVICE_WORKER, IS_WEB_WORKER} from '../helpers/context';\nimport dT from '../helpers/dT';\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst IS_WEBKIT = IS_SAFARI || IS_FIREFOX;\n\n// let getCallerFunctionNameFromLine: (line: string) => string;\n// if(IS_WEBKIT) {\n// getCallerFunctionNameFromLine = (line) => {\n// const splitted = line.split('@');\n// return splitted[0];\n// };\n// } else {\n// getCallerFunctionNameFromLine = (line: string) => {\n// const splitted = line.trim().split(' ');\n// if(splitted.length === 3) {\n// return splitted[1].slice(splitted[1].lastIndexOf('.') + 1);\n// }\n// };\n// }\n\nconst STYLES_SUPPORTED = !IS_WEBKIT;\n// const LINE_INDEX = IS_WEBKIT ? 2 : 3;\n\n// function getCallerFunctionName() {\n// const stack = new Error().stack;\n// const lines = stack.split('\\n');\n// const line = lines[LINE_INDEX] || lines[lines.length - 1];\n// // const match = line.match(/\\.([^\\.]+?)\\s/);\n// // line = match ? match[1] : line.trim();\n// const caller = getCallerFunctionNameFromLine(line) || '';\n// return '[' + caller + ']';\n// }\n\nexport const LOGGER_STYLES = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m'\n }\n};\n\nexport type Logger = {\n (...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n error(...args: any[]): void;\n trace(...args: any[]): void;\n debug(...args: any[]): void;\n assert(...args: any[]): void;\n // log(...args: any[]): void;\n group(...args: any[]): void;\n groupCollapsed(...args: any[]): void;\n groupEnd(...args: any[]): void;\n setPrefix(newPrefix: string): void;\n setLevel(level: 0 | 1 | 2 | 3 | 4): void;\n bindPrefix(prefix: string): Logger;\n};\n\nconst methods: ['debug' | 'info' | 'warn' | 'error' | 'assert' | 'trace'/* | 'log' */ | 'group' | 'groupCollapsed' | 'groupEnd', LogTypes][] = [\n ['debug', LogTypes.Debug],\n ['info', LogTypes.Log],\n ['warn', LogTypes.Warn],\n ['error', LogTypes.Error],\n ['assert', LogTypes.Error],\n ['trace', LogTypes.Log],\n ['group', LogTypes.Log],\n ['groupCollapsed', LogTypes.Log],\n ['groupEnd', LogTypes.Log]\n // [\"log\", LogTypes.Log]\n];\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false, style = ''): Logger {\n let originalPrefix: string;\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n if(!STYLES_SUPPORTED) {\n style = '';\n } else if(!style) {\n if(IS_SERVICE_WORKER) style = LOGGER_STYLES.fg.yellow;\n else if(IS_WEB_WORKER) style = LOGGER_STYLES.fg.cyan;\n }\n\n const originalStyle = style;\n if(style) style = `%s ${style}%s`;\n else style = '%s';\n\n // level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n const log: Logger = function(...args: any[]) {\n return type & LogTypes.Log && console.log(style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n } as any;\n\n methods.forEach(([method, logType]) => {\n log[method] = function(...args: any[]) {\n return type & logType && console[method](style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n };\n });\n\n log.setPrefix = function(newPrefix: string) {\n originalPrefix = newPrefix;\n prefix = '[' + newPrefix + ']';\n };\n\n log.setPrefix(prefix);\n\n log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n\n log.bindPrefix = function(prefix: string) {\n return logger(`${originalPrefix}] [${prefix}`, type, ignoreDebugReset, originalStyle);\n };\n\n return log;\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [699,211,85], () => (__webpack_require__(6991)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames not based on template\n\tif (chunkId === 85) return \"85.887945ef5f43bc205112.bundle.js\";\n\t// return url for filenames based on template\n\treturn \"\" + {\"211\":\"npm.big-integer\",\"699\":\"npm.pako\"}[chunkId] + \".\" + {\"211\":\"363d763daad0ee4e2741\",\"699\":\"89deb457201f16c93925\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t589: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","DEBUG","MOUNT_CLASS_TO","window","self","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","IS_FIREFOX","undefined","IS_SERVICE_WORKER","ServiceWorkerGlobalScope","IS_WEB_WORKER","WorkerGlobalScope","IS_WORKER","postMessage","listener","args","err","console","error","notifyServiceWorker","all","clients","matchAll","includeUncontrolled","type","then","listeners","length","slice","forEach","bind","bufferConcats","reduce","acc","v","byteLength","tmp","Uint8Array","lastLength","b","set","ArrayBuffer","prototype","concat","this","toJSON","Promise","finally","fn","onFinally","callback","resolve","result","reason","reject","Number","MAX_SAFE_INTEGER","pow","longBigInt","divide","bigIntFromBytes","bytes","base","bigIntToBytes","bigInt","toArray","value","bytesModPow","exp","mod","bytesBigInt","expBigInt","modBigInt","modPow","CryptoMessagePort","constructor","super","lastIndex","invokeCryptoNew","method","transfer","payload","sendPortIndex","sendPorts","invoke","invokeCrypto","cryptoMessagePort","readBigIntFromBytesBE","bits","and","shiftLeft","i","_bits","or","emojis","randomize","arr","crypto","Error","getRandomValues","addPadding","blockSize","zeroes","blockSizeAsTotalLength","prepend","len","needPadding","padding","buffer","bytesFromHex","hexString","Math","ceil","start","parseInt","charAt","substr","convertToUint8Array","TextEncoder","encode","S","Si","T1","Uint32Array","T2","T3","T4","T5","T6","T7","T8","getWords","key","buf","pos","str","charCodeAt","xor","left","right","to","x2","x4","s","tEnc","tDec","d","t","x","xInv","computeTables","AES","_key","encKey","decKey","rcon","j","encrypt","_message","a2","b2","c2","message","out","a","c","rounds","k","decrypt","AES_IGE","iv","cipher","text","cipherText","prevX","subarray","prevY","yXOR","y","bytesToWordss","input","words","aesSync","keyBytes","ivBytes","o","bytesFromWordss","counter","offset","incrementCounter","carry","arrays","Uint16Array","bigIntRandom","min","max","array","nextRandomUint","BrentPollardFactor","n","two","remainder","isZero","m","ys","r","q","g","minus","eq","bigIntUint64MinusPqPlusOne","plus","performY","add","lesser","condition","multiply","greater","abs","subtle","CTR","mode","cryptoKey","queue","update","data","push","release","releasing","shift","_update","perform","name","head","toEncrypt","leftLength","leftLength2","performed","tail","leftAfter","aesCTRs","Map","lastCTRId","log","cryptoMethods","salt","iterations","importKey","hash","publicKey","exponent","modulus","pqBytes","factors","primes","factor","pop","isPrime","primeFactors","sort","compare","splice","p","map","toString","password","state","isNew","algo","new_algo","current_algo","pw_hash","client_salt","server_salt","makePasswordHash","salt1","salt2","Array","join","bytesToHex","padArray","flipper","B","srp_B","pForHash","gForHash","b_for_hash","k_v","is_good_mod_exp_first","modexp","prime","diff","subtract","isNegative","bitLength","toJSNumber","floor","a_for_hash","u","secure_random","A","generate_and_check_random","g_b","ux","a_ux","K","h1","bytes1","bytes2","bytesXor","buff","M1","_","srp_id","dhConfig","aBigInt","pBigInt","generateA","gBytes","g_a","g_a_hash","key_fingerprint","reverse","emojisLength","partOffset","index","codePoints","encIv","decIv","id","promises","encCryptoKey","decCryptoKey","enc","dec","operation","ctrs","get","delete","terminate","ctx","messagePort","onConnect","onDisconnect","attachPort","listenPort","sendPort","attachListenPort","attachSendPort","setOnPortDisconnect","listenMessagePort","e","source","channel","MessageChannel","port1","port2","LogTypes","LOG_LEVELS","None","Warn","Log","Debug","STYLES_SUPPORTED","LOGGER_STYLES","methods","logger","prefix","ignoreDebugReset","style","originalPrefix","originalStyle","logType","setPrefix","newPrefix","setLevel","level","bindPrefix","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","loaded","__webpack_modules__","call","__webpack_exports__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","Object","keys","every","getter","__esModule","definition","defineProperty","enumerable","f","chunkId","miniCssF","globalThis","Function","obj","prop","hasOwnProperty","nmd","paths","children","scriptUrl","importScripts","location","document","currentScript","src","scripts","getElementsByTagName","replace","oldGetScript","oldLoadScript","queryMap","countMap","catch","retries","realSrc","request","setTimeout","cacheBust","Date","now","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","moreModules","runtime"],"sourceRoot":""} \ No newline at end of file diff --git a/public/index.html b/public/index.html index 10a41ba1..fb79341b 100644 --- a/public/index.html +++ b/public/index.html @@ -1,3 +1,3 @@ -Telegram Web \ No newline at end of file + \ No newline at end of file diff --git a/public/main.12cb432c0176fa529f08.bundle.js b/public/main.12cb432c0176fa529f08.bundle.js new file mode 100644 index 00000000..9738ac3b --- /dev/null +++ b/public/main.12cb432c0176fa529f08.bundle.js @@ -0,0 +1,2 @@ +(()=>{"use strict";var e,t,n,s,i,o={410:(e,t,n)=>{n.d(t,{GO:()=>r,Tj:()=>i,ZP:()=>a});var s=n(1267);const i=!1,o=i||s.Z.debug,r="undefined"!=typeof window?window:self,a=o},236:(e,t,n)=>{n.d(t,{t:()=>c,h:()=>d});var s=n(4762),i=n(144),o=n(4159);const r=o.Z.version,a=o.Z.build,c={_:"theme",access_hash:"",id:"",settings:[{_:"themeSettings",pFlags:{},base_theme:{_:"baseThemeClassic"},accent_color:3379436,message_colors:[5221966],wallpaper:{_:"wallPaper",pFlags:{default:!0,pattern:!0},access_hash:"",document:void 0,id:"",slug:"pattern",settings:{_:"wallPaperSettings",pFlags:{},intensity:50,background_color:14409147,second_background_color:7054727,third_background_color:14014605,fourth_background_color:8960132}}},{_:"themeSettings",pFlags:{},base_theme:{_:"baseThemeNight"},accent_color:8877281,message_colors:[8877281],wallpaper:{_:"wallPaper",pFlags:{default:!0,pattern:!0,dark:!0},access_hash:"",document:void 0,id:"",slug:"pattern",settings:{_:"wallPaperSettings",pFlags:{},intensity:-50,background_color:16696470,second_background_color:14511289,third_background_color:9842623,fourth_background_color:5200853}}}],slug:"",title:"",emoticon:"๐Ÿ ",pFlags:{default:!0}},l=(e,t,n)=>Object.assign(Object.assign({},c),{name:e,settings:Object.assign(Object.assign({},c.settings.find((e=>e.base_theme._===t))),{highlightningColor:n})}),d={allDialogsLoaded:{},pinnedOrders:{},contactsListCachedTime:0,updates:{},filtersArr:[],maxSeenMsgId:0,stateCreatedTime:Date.now(),recentEmoji:[],recentCustomEmoji:[],topPeersCache:{},recentSearch:[],version:r,build:a,authState:{_:s.IS_MOBILE?"authStateSignIn":"authStateSignQr"},hiddenPinnedMessages:{},settings:{messagesTextSize:16,distanceUnit:"kilometers",sendShortcut:"enter",animationsEnabled:!0,autoDownload:{photo:{contacts:!0,private:!0,groups:!0,channels:!0},video:{contacts:!0,private:!0,groups:!0,channels:!0},file:{contacts:!0,private:!0,groups:!0,channels:!0}},autoDownloadNew:{_:"autoDownloadSettings",file_size_max:3145728,pFlags:{video_preload_large:!0,audio_preload_next:!0},photo_size_max:1048576,video_size_max:15728640,video_upload_maxbitrate:100},autoPlay:{gifs:!0,videos:!0},stickers:{suggest:!0,loop:!0},emoji:{suggest:!0,big:!0},themes:[l("day","baseThemeClassic","hsla(86.4, 43.846153%, 45.117647%, .4)"),l("night","baseThemeNight","hsla(299.142857, 44.166666%, 37.470588%, .4)")],theme:"system",notifications:{sound:!1},timeFormat:(new Date).toLocaleString().match(/\s(AM|PM)/)?"h12":"h23"},playbackParams:{volume:1,muted:!1,playbackRate:1,playbackRates:{voice:1,video:1,audio:1},loop:!1,round:!1},keepSigned:!0,chatContextMenuHintWasShown:!1,stateId:(0,i.d)(32),notifySettings:{}}},8189:(e,t,n)=>{n.d(t,{Z:()=>i});let s=!1;try{const e=document.createElement("canvas").getContext("webgl"),t=e.getExtension("WEBGL_debug_renderer_info"),n=t&&e.getParameter(t.UNMASKED_RENDERER_WEBGL)||"";(n.match(/Apple/)&&!n.match(/Apple GPU/)||-1===e.getSupportedExtensions().indexOf("WEBGL_compressed_texture_s3tc_srgb"))&&(s=!0)}catch(e){}const i=s},993:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n(4089).Z},7328:(e,t,n)=>{let s;if(n.d(t,{Z:()=>i}),n(4762).IS_SAFARI)try{s=+navigator.userAgent.match(/Version\/(.+?) /)[1]>=14}catch(e){s=!1}else s=!0;const i=s},6663:(e,t,n)=>{n.d(t,{Z:()=>s});const s="filter"in(document.createElement("canvas").getContext("2d")||{})},9976:(e,t,n)=>{n.d(t,{Z:()=>s});const s=-1!==navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i)},3731:(e,t,n)=>{var s;n.d(t,{Z:()=>i});const i=!!(null===(s=null===navigator||void 0===navigator?void 0:navigator.geolocation)||void 0===s?void 0:s.getCurrentPosition)&&!1},6818:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n(4089).Z},1174:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(5269);const i=new Set(["image/jpeg","image/png","image/bmp"]);s.Z&&i.add("image/webp");const o=i},2341:(e,t,n)=>{n.d(t,{Z:()=>r});var s=n(1174),i=n(554);const o=[...s.Z].concat([...i.Z]),r=new Set(o)},9030:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(4762);const i=!!document.createElement("video").canPlayType("video/quicktime")||s.IS_SAFARI||s.IS_APPLE_MOBILE},5783:(e,t,n)=>{n.d(t,{Z:()=>i});const s=document.createElement("audio"),i=!(!s.canPlayType||!s.canPlayType("audio/ogg;").replace(/no/,""))},2365:(e,t,n)=>{n.d(t,{Z:()=>s});const s=!n(4762).IS_FIREFOX&&!1},2820:(e,t,n)=>{n.d(t,{Z:()=>s});const s=!!("getDisplayMedia"in((null===navigator||void 0===navigator?void 0:navigator.mediaDevices)||{}))},2045:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(1267);const i="undefined"!=typeof SharedWorker&&!s.Z.noSharedWorker},5432:(e,t,n)=>{n.d(t,{Z:()=>s});const s="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch},4762:(e,t,n)=>{n.r(t),n.d(t,{IS_ANDROID:()=>r,IS_APPLE:()=>o,IS_APPLE_MOBILE:()=>c,IS_CHROMIUM:()=>a,IS_FIREFOX:()=>d,IS_MOBILE:()=>u,IS_MOBILE_SAFARI:()=>h,IS_SAFARI:()=>l,USER_AGENT:()=>i});var s=n(6761);const i=navigator?navigator.userAgent:null,o=-1!==navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),r=-1!==navigator.userAgent.toLowerCase().indexOf("android"),a=/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),c=(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&!s.Z.MSStream,l=!!("safari"in s.Z)||!(!i||!(/\b(iPad|iPhone|iPod)\b/.test(i)||i.match("Safari")&&!i.match("Chrome"))),d=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,h=l&&c,u=(void 0===navigator.maxTouchPoints||navigator.maxTouchPoints>0)&&-1!=navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},2131:(e,t,n)=>{n.d(t,{Z:()=>s});const s=!!(null===navigator||void 0===navigator?void 0:navigator.vibrate)},554:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(9030);const i=new Set(["image/gif","video/mp4","video/webm"]);s.Z&&i.add("video/quicktime");const o=i},393:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(4762);const i=!!document.createElement("video").canPlayType("video/webm")&&!s.IS_SAFARI&&!s.IS_APPLE_MOBILE},5269:(e,t,n)=>{n.d(t,{Z:()=>s});const s=document.createElement("canvas").toDataURL("image/webp").startsWith("data:image/webp")},4089:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(4762);const i=!("undefined"==typeof RTCPeerConnection||s.IS_FIREFOX)},2064:(e,t,n)=>{n.d(t,{Dk:()=>g,EM:()=>w,K5:()=>u,Pi:()=>c,WE:()=>o,Y6:()=>a,cw:()=>d,dI:()=>r,e9:()=>f,ix:()=>p,oo:()=>l,py:()=>i,t1:()=>h,tB:()=>y,uY:()=>v});var s=n(3228);function i(e,t,n){e/=255,t/=255,n/=255;const s=Math.max(e,t,n),i=s-Math.min(e,t,n),o=i&&(s===e?(t-n)/i:s==t?2+(n-e)/i:4+(e-t)/i);return[60*(o<0?o+6:o),s&&i/s,s]}function o(e,t,n){const s=(s,i=(s+e/60)%6)=>Math.round(255*(n-n*t*Math.max(Math.min(i,4-i,1),0)));return[s(5),s(3),s(1)]}function r(e,t,n,s=1){e/=255,t/=255,n/=255;const i=Math.max(e,t,n),o=Math.min(e,t,n);let r,a;const c=(i+o)/2;if(i===o)r=a=0;else{const s=i-o;switch(a=c>.5?s/(2-i-o):s/(i+o),i){case e:r=(t-n)/s+(t1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e},a=n<.5?n*(1+t):n+t-n*t,c=2*n-a;i=s(c,a,e+1/3),o=s(c,a,e),r=s(c,a,e-1/3)}return[i,o,r,s].map((e=>Math.round(255*e)))}function c(e){const t=[],n="#"===e[0]?1:0;if(e.length===5+n&&(e=(n?"#":"")+"0"+e.slice(n)),e.length===3+n)for(let s=n;s("0"+e.toString(16)).slice(-2))).join("")}function u(e){return function(e){return h(function(e){const t=e.slice(5,-1).split(", "),n=+t.pop(),s=t.map((e=>e.endsWith("%")?+e.slice(0,-1):+e));return a(s[0],s[1],s[2],n)}(e))}(e).slice(0,-2)}function g(e,t,n){const s=new Array(3);for(let i=0;i<3;++i){const o=e[i],r=t[i];s[i]=Math.floor(r+(o-r)*n)}return s}function m(e){return(.2126*e[0]+.7152*e[1]+.0722*e[2])/255}function p(e,t){return e.map(((e,n)=>Math.round((e+t[n])/2)))}function f(e,t,n){const s=i(...t),r=i(...n),a=Math.min(1.5*s[1]/e[1],1);return s[0]=Math.min(360,r[0]-s[0]+e[0]),s[1]=Math.min(1,r[1]*e[1]/s[1]),s[2]=Math.min(1,(r[2]/s[2]+a-1)*e[2]/a),s[2]<.3?n:o(...s)}function v(e,t,n,r){const a=i(...n);if(Math.min(Math.abs(a[0]-e[0]),Math.abs(a[0]-e[0]-360))>30)return n;const c=Math.min(1.5*a[1]/e[1],1);a[0]=Math.min(360,a[0]+t[0]-e[0]),a[1]=Math.min(1,a[1]*t[1]/e[1]),a[2]=Math.min(1,a[2]*(1-c+c*t[2]/e[2]));let l=o(...a);const d=m(n),h=m(l);if(r?d>h:d(0,s.Z)(Math.round(e*t),0,255)))}(l,(1-e)*d/h+e)}return l}function b(e){const t=(e<0?16777215+e:e).toString(16);return"#"+(t.length>=6?t:"0".repeat(6-t.length)+t)}function y(e){return l(b(e))}function w(e){return e.settings?[e.settings.background_color,e.settings.second_background_color,e.settings.third_background_color,e.settings.fourth_background_color].filter(Boolean).map(b).join(","):""}},6009:(e,t,n)=>{function s(e,t){e=e.split(" ",1)[0],t=t.split(" ",1)[0];const n=e.split("."),s=t.split(".");for(let e=0;ei)return 1;if(ts})},8799:(e,t,n)=>{function s(){var e;return!!(null===(e=document.activeElement)||void 0===e?void 0:e.blur)&&(document.activeElement.blur(),!0)}n.d(t,{Z:()=>s})},3910:(e,t,n)=>{function s(e){if(e||(e=window.event),e){e=e.originalEvent||e;try{e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.returnValue=!1,e.cancelBubble=!0}catch(e){}}return!1}n.d(t,{Z:()=>s})},8497:(e,t,n)=>{function s(e,t){return e.closest("."+t)}n.d(t,{Z:()=>s})},5494:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(3035);function i(e){e.style.transform="translateY(-99999px)",e.focus(),(0,s.d1)().then((()=>{e.style.transform=""}))}},8090:(e,t,n)=>{n.d(t,{T:()=>a,Z:()=>c});var s=n(5432),i=n(4762),o=n(8497),r=n(5494);const a=i.IS_SAFARI&&i.IS_MOBILE&&s.Z;if(a){const e="clientY";let t=0;const n={capture:!0,passive:!1},s=n=>{const s=n.touches[0],i=(0,o.Z)(s.target,"scrollable-y");if(i){const o=s[e],r=t-o,a=i.scrollTop,c=i.scrollHeight,l=i.clientHeight,d=a?Math.round(a+i.clientHeight+r):a+r;(c===l||d>=c||d<=0)&&n.preventDefault()}else n.preventDefault()};let i=0;document.addEventListener("focusin",(o=>{!o.target.classList.contains("is-sticky-input-bugged")||o.timeStamp-i<50||((0,r.Z)(o.target),document.addEventListener("touchmove",s,n),document.addEventListener("touchstart",(n=>{if(n.touches.length>1)return;const s=n.touches[0];t=s[e]})))}),{passive:!0}),document.addEventListener("focusout",(e=>{document.removeEventListener("touchmove",s,n),i=e.timeStamp}),{passive:!0}),document.addEventListener("visibilitychange",(()=>{document.activeElement&&document.activeElement.classList.contains("is-sticky-input-bugged")&&document.activeElement.blur&&(0,r.Z)(document.activeElement)}),{passive:!0})}function c(e){a&&e.classList.add("is-sticky-input-bugged")}},6472:(e,t,n)=>{n.d(t,{B:()=>o,Z:()=>i});let s;function i(){window.addEventListener("beforeinstallprompt",(e=>{s=()=>{return t=this,n=void 0,o=function*(){e.prompt();const{outcome:t}=yield e.userChoice;"accepted"===t&&(s=void 0)},new((i=void 0)||(i=Promise))((function(e,s){function r(e){try{c(o.next(e))}catch(e){s(e)}}function a(e){try{c(o.throw(e))}catch(e){s(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(r,a)}c((o=o.apply(t,n||[])).next())}));var t,n,i,o}}))}function o(){return s}},4541:(e,t,n)=>{n.d(t,{Z:()=>c});var s=n(319),i=n(5418);const o=["b","ะฑ"],r={},a={text:"Roboto",icons:"tgico",monospace:"Roboto Mono"};function c(e={text:o,icons:void 0,monospace:o}){if(!("fonts"in document))return Promise.resolve();const t=[];for(const n in e){let s=e[n];"all"===s&&(s=o);const i=a[n],c="icons"===n?[500]:[400,500];for(const e of c){const n=(s||[void 0]).map((t=>{var n,s,o,a;const c=[e,"1rem",i].join(" ");return null!==(s=(o=null!==(n=r[c])&&void 0!==n?n:r[c]={})[a=t||""])&&void 0!==s?s:o[a]=document.fonts.load(c,t)}));t.push(...n)}}return Promise.race([Promise.all(t).catch(s.Z),(0,i.Z)(1e3)])}},130:(e,t,n)=>{function s(e,t){i(e),"string"==typeof t?t?e.innerHTML=t:e.replaceChildren():e.replaceChildren(t)}function i(e){e.setAttribute("dir","auto")}n.d(t,{Z:()=>s,m:()=>i})},2586:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(5432),i=n(3241);const o=s.Z?"touchstart":"mousemove";class r extends i.Z{constructor(){super(),this._isIdle=!0,this.focusPromise=Promise.resolve(),this.focusResolve=()=>{},window.addEventListener("blur",(()=>{this.isIdle=!0,window.addEventListener("focus",(()=>{this.isIdle=!1}),{once:!0})})),window.addEventListener(o,(()=>{this.isIdle=!1}),{once:!0,passive:!0}),this.addEventListener("change",(e=>{e?this.focusPromise=new Promise((e=>{this.focusResolve=e})):this.focusResolve()}))}getFocusPromise(){return this.focusPromise}get isIdle(){return this._isIdle}set isIdle(e){this._isIdle!==e&&(this._isIdle=e,this.dispatchEvent("change",e))}}const a=new r},3228:(e,t,n)=>{function s(e,t,n){return Math.min(n,Math.max(t,e))}n.d(t,{Z:()=>s})},3815:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(3241);class i extends s.Z{constructor(){super(...arguments),this.overlaysActive=0}get isOverlayActive(){return this.overlaysActive>0}set isOverlayActive(e){this.overlaysActive+=e?1:-1,this.dispatchEvent("change",this.isOverlayActive)}}const o=new i},3035:(e,t,n)=>{let s;function i(e){s?s.push(e):(s=[e],requestAnimationFrame((()=>{const e=s;s=void 0,e.forEach((e=>e()))})))}n.d(t,{AD:()=>l,T2:()=>i,TR:()=>c,d1:()=>d});let o,r,a=!1;function c(e){o?a?e():o.push(e):(o=[e],requestAnimationFrame((()=>{a=!0;for(let e=0;ei((()=>e())))),r.then((()=>{r=void 0})),r)}function d(){return new Promise((e=>{i((()=>{i(e)}))}))}},764:(e,t,n)=>{function s(e,t=e.split("?")){return i(null==t?void 0:t[1])}function i(e){const t={};return e?(e.split("&").forEach((e=>{t[e.split("=")[0]]=decodeURIComponent(e.split("=")[1])})),t):t}n.d(t,{V:()=>i,Z:()=>s})},6714:(e,t,n)=>{n.d(t,{Z:()=>h});var s=n(5432),i=n(3512),o=n(2064),r=n(410),a=function(e,t,n,s){return new(n||(n=Promise))((function(i,o){function r(e){try{c(s.next(e))}catch(e){o(e)}}function a(e){try{c(s.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,a)}c((s=s.apply(e,t||[])).next())}))};const c={"primary-color":{rgb:!0,light:!0,lightFilled:!0,dark:!0,darkRgb:!0},"message-out-primary-color":{lightFilled:!0},"surface-color":{rgb:!0},"danger-color":{light:!0,dark:!0},"primary-text-color":{rgb:!0},"secondary-text-color":{light:!0,lightFilled:!0},"message-out-background-color":{light:!0,lightFilled:!0,dark:!0,darkFilled:!0},"saved-color":{lightFilled:!0}},l={day:{"primary-color":"#3390ec","message-out-primary-color":"#4fae4e","surface-color":"#ffffff","danger-color":"#df3f40","primary-text-color":"#000000","secondary-text-color":"#707579","saved-color":"#359AD4"},night:{"primary-color":"#8774E1","message-out-primary-color":"#8774E1","surface-color":"#212121","danger-color":"#ff595a","primary-text-color":"#ffffff","secondary-text-color":"#aaaaaa","saved-color":"#8774E1"}},d=new class{constructor(){i.Z.addEventListener("theme_change",(()=>{this.setTheme()}))}get themeColorElem(){return void 0!==this._themeColorElem?this._themeColorElem:this._themeColorElem=document.head.querySelector('[name="theme-color"]')||null}setThemeColor(e=this.themeColor){e||(e=this.isNight()?"#212121":"#ffffff");const t=this.themeColorElem;t&&t.setAttribute("content",e)}setThemeListener(){try{const e=window.matchMedia("(prefers-color-scheme: dark)"),t=()=>{this.systemTheme=e.matches?"night":"day",i.Z.myId?i.Z.dispatchEvent("theme_change"):this.setTheme()};"addEventListener"in e?e.addEventListener("change",t):"addListener"in e&&e.addListener(t),t()}catch(e){}}applyHighlightningColor(){var e;let t;const n=this.getTheme();(null===(e=n.settings)||void 0===e?void 0:e.highlightningColor)?(t=n.settings.highlightningColor,document.documentElement.style.setProperty("--message-highlightning-color",t)):document.documentElement.style.removeProperty("--message-highlightning-color"),!s.Z&&t&&(this.themeColor=(0,o.K5)(t))}setTheme(){const e=this.isNight(),t=document.head.querySelector('[name="color-scheme"]');t&&t.setAttribute("content",e?"dark":"light"),document.documentElement.classList.toggle("night",e),this.setThemeColor();const n=this.getTheme();this.applyTheme(n);let s=this.styleElement;s||(s=this.styleElement=document.createElement("style"),document.head.append(s));const o=document.createElement("div");this.applyTheme(i.Z.settings.themes.find((e=>"night"===e.name)),o),s.textContent=`.night {${o.style.cssText}}`,this.applyHighlightningColor()}switchTheme(e){return a(this,void 0,void 0,(function*(){yield i.Z.managers.appStateManager.setByKey("settings.theme",e),i.Z.dispatchEvent("theme_change")}))}isNight(){return"night"===this.getTheme().name}getTheme(e=("system"===i.Z.settings.theme?this.systemTheme:i.Z.settings.theme)){return i.Z.settings.themes.find((t=>t.name===e))}bindColorApplier(e){const t=new Set;return{applyAppColor:n=>(t.add(n.name),this.applyAppColor(Object.assign(Object.assign({},n),e))),finalize:()=>{const n=e.isNight;for(const s in c)t.has(s)||this.applyAppColor(Object.assign({name:s,hex:l[n?"night":"day"][s]},e))}}}applyAppColor({name:e,hex:t,element:n,lightenAlpha:s=.08,darkenAlpha:i=s,mixColor:r,isNight:a}){const d=c[e],h=(0,o.oo)(t),u=(0,o.dI)(...h);null!=r||(r=(0,o.oo)(l[a?"night":"day"]["surface-color"]));const g=(0,o.Dk)(h,r,s),m=Object.assign(Object.assign({},u),{l:u.l-100*i});[[e,t],d.rgb&&[e+"-rgb",h.join(",")],d.light&&["light-"+e,`rgba(${h[0]}, ${h[1]}, ${h[2]}, ${s})`],d.lightFilled&&["light-filled-"+e,(0,o.t1)(g)],d.dark&&["dark-"+e,`hsl(${m.h}, ${m.s}%, ${m.l}%)`]].filter(Boolean).forEach((([e,t])=>{n.style.setProperty("--"+e,t)}))}applyNewTheme(e){return a(this,void 0,void 0,(function*(){const t=this.isNightTheme(e),n=this.getTheme(),s=i.Z.settings.themes,o=e.settings.find((e=>e.base_theme._===(t?"baseThemeNight":"baseThemeClassic"))),r=Object.assign(Object.assign({},e),{name:n.name,settings:Object.assign(Object.assign({},o),{highlightningColor:""})});yield this.AppBackgroundTab.setBackgroundDocument(o.wallpaper,r.settings),s[s.indexOf(n)]=r,yield i.Z.managers.appStateManager.setByKey("settings.themes",i.Z.settings.themes),i.Z.dispatchEvent("theme_change")}))}isNightTheme(e){return"night"===e.name||this.isNight()}applyTheme(e,t=document.documentElement){var n;const s=this.isNightTheme(e),i=Array.isArray(e.settings)?e.settings.find((e=>e.base_theme._===(s?"baseThemeNight":"baseThemeClassic"))):e.settings,r=l[s?"night":"day"];let a=(0,o.py)(...(0,o.oo)(r["primary-color"])),c=(0,o.py)(...(0,o.tB)(i.accent_color));const d=(0,o.uY)(a,c,(0,o.oo)(r["primary-color"]),!s),h=(0,o.t1)(d),{applyAppColor:u,finalize:g}=this.bindColorApplier({element:t,isNight:s});if(u({name:"primary-color",hex:h,darkenAlpha:.04}),u({name:"saved-color",hex:h,lightenAlpha:.64,mixColor:[255,255,255]}),!(null===(n=i.message_colors)||void 0===n?void 0:n.length))return;const m=s?.92:.12,p=(0,o.oo)(r["message-out-primary-color"]);a=(0,o.py)(...p);const f=(0,o.Dk)(p,(0,o.oo)(r["surface-color"]),m);let v=(0,o.tB)(i.message_colors[0]);i.message_colors.length>1&&(i.message_colors.slice(1).forEach((e=>{v=(0,o.ix)(v,(0,o.tB)(e))})),v=(0,o.e9)(a,f,v));const b=v;c=(0,o.py)(...b);const y=void 0!==i.outbox_accent_color&&(0,o.py)(...(0,o.tB)(i.outbox_accent_color)),w=(0,o.Dk)(v,(0,o.oo)(r["surface-color"]),m);u({name:"message-out-background-color",hex:(0,o.t1)(w),lightenAlpha:m}),u({name:"message-out-primary-color",hex:s?"#ffffff":(0,o.t1)(y?(0,o.WE)(...y):v),mixColor:w}),g()}};r.GO&&(r.GO.themeController=d);const h=d},2938:(e,t,n)=>{var s=n(4159),i=n(8799),o=n(3910),r=n(8090),a=n(4541),c=n(9976),l=n(4762),d=n(5418);!function(){const e={construct(e,t){let n=t[0]+"";return 0!==n.indexOf("blob:")&&(n+=location.search),new e(n)}};[Worker,"undefined"!=typeof SharedWorker&&SharedWorker].filter(Boolean).forEach((t=>{window[t.name]=new Proxy(t,e)}))}();var h=n(3512),u=n(5432),g=n(2325),m=(n(4110),n(690),n(3855)),p=n(2554),f=n(6714),v=n(3815),b=n(490),y=n(764),w=n(1267),S=n(410);const k="onbeforeinstallprompt"in window;var P=n(6472);document.addEventListener("DOMContentLoaded",(()=>{return e=void 0,t=void 0,E=function*(){var e;Element.prototype.toggleAttribute||(Element.prototype.toggleAttribute=function(e,t){return void 0!==t&&(t=!!t),this.hasAttribute(e)?!!t||(this.removeAttribute(e),!1):!1!==t&&(this.setAttribute(e,""),!0)}),void 0===Node.prototype.replaceChildren&&(Node.prototype.replaceChildren=function(...e){this.textContent="",e&&this.append(...e)}),h.Z.managers=(0,p.Z)(),document.getElementById("manifest").href=`site${l.IS_APPLE&&!l.IS_APPLE_MOBILE?"_apple":""}.webmanifest?v=jw3mK7G9Aq`,b.Z.start();const t=window.visualViewport||window;let _,E=!1;const A=()=>{const e=.01*(E&&!v.Z.isOverlayActive?t.height||t.innerHeight:window.innerHeight);_!==e&&(u.Z&&_1&&(0,i.Z)(),_=e,document.documentElement.style.setProperty("--vh",`${e}px`))};if(window.addEventListener("resize",A),A(),r.T){const e=()=>{E=1===n&&r.T&&!v.Z.isOverlayActive,A(),t!==window&&(E?(window.removeEventListener("resize",A),t.addEventListener("resize",A)):(t.removeEventListener("resize",A),window.addEventListener("resize",A)))};let n;window.onImTabChange=t=>{const s=void 0!==n;n=t,(s||1===n)&&e()},v.Z.addEventListener("change",(()=>{e()}))}if(l.IS_FIREFOX&&!c.Z&&document.addEventListener("dragstart",(e=>{const t=e.target;if("IMG"===t.tagName&&t.classList.contains("emoji"))return(0,o.Z)(e),!1})),c.Z&&document.documentElement.classList.add("native-emoji"),document.addEventListener("dragstart",(e=>{var t;if("IMG"===(null===(t=e.target)||void 0===t?void 0:t.tagName))return e.preventDefault(),!1})),document.addEventListener("contextmenu",(e=>{"IMG"!==e.target.tagName||window.appMediaViewer||(0,o.Z)(e)})),l.IS_FIREFOX&&document.documentElement.classList.add("is-firefox","no-backdrop"),l.IS_MOBILE&&document.documentElement.classList.add("is-mobile"),l.IS_APPLE)l.IS_SAFARI&&document.documentElement.classList.add("is-safari"),l.IS_APPLE_MOBILE?document.documentElement.classList.add("is-ios"):document.documentElement.classList.add("is-mac");else if(l.IS_ANDROID){document.documentElement.classList.add("is-android");const e=()=>{n=!0,window.addEventListener("resize",t,{once:!0})},t=()=>{n=!1,(0,i.Z)()};let n=!1;document.addEventListener("touchend",(t=>{const s=t.target.closest('[contenteditable="true"], input');s&&(document.activeElement===s||n||(console.log("input click",t,document.activeElement,s,s.matches(":focus")),window.addEventListener("resize",e,{once:!0})))}))}u.Z?document.documentElement.classList.add("is-touch"):document.documentElement.classList.add("no-touch"),k&&(0,P.Z)();const Z=performance.now(),C=g.ZP.getCacheLangPack(),[I,L]=yield Promise.all([m.Z.sendState().then((([e])=>e)),C]);function T(e,t){e.style.opacity="0",t.then((()=>{window.requestAnimationFrame((()=>{e.style.opacity=""}))}))}g.ZP.setTimeFormat(I.state.settings.timeFormat),h.Z.managers.rootScope.getPremium().then((e=>{h.Z.premium=e})),f.Z.setThemeListener(),L.appVersion!==s.Z.langPackVersion&&g.ZP.getLangPack(L.lang_code),console.log("got state, time:",performance.now()-Z),"ar"===L.lang_code&&S.Tj,document.documentElement.dir="ltr";let O=I.state.authState;const M=location.hash.split("?"),x=(0,y.V)(null!==(e=M[1])&&void 0!==e?e:M[0].slice(1));if(x.tgWebAuthToken&&"authStateSignedIn"!==O._){const e={token:x.tgWebAuthToken,dcId:+x.tgWebAuthDcId,userId:x.tgWebAuthUserId.toUserId(),isTest:void 0!==x.tgWebAuthTest&&!!+x.tgWebAuthTest,tgAddr:x.tgaddr};if(e.isTest!==w.Z.test){const e=new URLSearchParams(location.search);return+x.tgWebAuthTest?e.set("test","1"):e.delete("test"),void(location.search=e.toString())}h.Z.managers.appStateManager.pushToState("authState",O={_:"authStateSignImport",data:e})}if("authStateSignedIn"!==O._){console.log("Will mount auth page:",O._,Date.now()/1e3);const e=document.getElementById("auth-pages");let t,s;if(e){t=e.querySelector(".scrollable"),u.Z&&!l.IS_MOBILE_SAFARI||t.classList.add("no-scrollbar"),t.style.opacity="0";const n=document.createElement("div");n.classList.add("auth-placeholder"),t.prepend(n),t.append(n.cloneNode())}try{yield Promise.all([Promise.resolve().then(n.bind(n,2831)),Promise.resolve().then(n.bind(n,6702))]).then((([e,t])=>{e.default.setAuthorized(!1),t.default.forceUnsubscribe()}))}catch(e){}switch(O._){case"authStateSignIn":s=(yield Promise.all([n.e(147),n.e(646),n.e(63)]).then(n.bind(n,810))).default.mount();break;case"authStateSignQr":s=(yield Promise.all([n.e(147),n.e(646),n.e(709)]).then(n.bind(n,9709))).default.mount();break;case"authStateAuthCode":s=(yield Promise.all([n.e(147),n.e(646),n.e(53)]).then(n.bind(n,6392))).default.mount(O.sentCode);break;case"authStatePassword":s=(yield Promise.all([n.e(147),n.e(646),n.e(437)]).then(n.bind(n,9437))).default.mount();break;case"authStateSignUp":s=(yield Promise.all([n.e(147),n.e(646),n.e(339)]).then(n.bind(n,8339))).default.mount(O.authCode);break;case"authStateSignImport":s=(yield Promise.all([n.e(147),n.e(646),n.e(231)]).then(n.bind(n,3231))).default.mount(O.data)}t&&(s&&(yield s),T(t,"fonts"in document?Promise.race([(0,d.Z)(1e3),document.fonts.ready]):Promise.resolve()))}else console.log("Will mount IM page:",Date.now()/1e3),T(document.getElementById("main-columns"),(0,a.Z)()),(yield Promise.all([n.e(147),n.e(646),n.e(436)]).then(n.bind(n,5436))).default.mount()},new((_=void 0)||(_=Promise))((function(n,s){function i(e){try{r(E.next(e))}catch(e){s(e)}}function o(e){try{r(E.throw(e))}catch(e){s(e)}}function r(e){var t;e.done?n(e.value):(t=e.value,t instanceof _?t:new _((function(e){e(t)}))).then(i,o)}r((E=E.apply(e,t||[])).next())}));var e,t,_,E}))},1722:(e,t,n)=>{n.d(t,{Z:()=>s});const s=new class{reload(){try{location.reload()}catch(e){}}close(){try{window.close()}catch(e){}}focus(){window.focus()}}},2554:(e,t,n)=>{n.d(t,{Z:()=>c});var s=n(3855),i=n(410);const o={};function r(e,t){return new Proxy(e,{get:(e,n,r)=>{var a;return null!==(a=e[n])&&void 0!==a?a:e[n]=function(e,t){return new Proxy({},{get:(n,r,a)=>(...n)=>{var a;const c=s.Z.invoke("manager",{name:e,method:r,args:n},t);return i.ZP&&(null===(a=o[e])||void 0===a?void 0:a.has(r))&&console.warn("manager request",e,r,n),c}})}(n,t)}})}let a;function c(){return a||(a=r({},!1),a.acknowledged=r({},!0),a)}i.ZP&&(window.DEBUG_MANAGER_REQUESTS=o)},6666:(e,t,n)=>{n.d(t,{Z:()=>c});var s=n(1267),i=n(5471),o=n(5953),r=n(5003);class a{constructor(e){(0,o.Z)(this,e),s.Z.test&&(this.name+="_test"),this.storageIsAvailable=!0,this.log=(0,r.kg)(["IDB",e.name].join("-")),this.log("constructor"),this.openDatabase(!0),a.INSTANCES.push(this)}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;const t=(e,t)=>{var n;const s=Array.from(e.indexNames);for(const t of s)e.deleteIndex(t);if(null===(n=t.indexes)||void 0===n?void 0:n.length)for(const n of t.indexes)e.indexNames.contains(n.indexName)||e.createIndex(n.indexName,n.keyPath,n.objectParameters)};try{var n=indexedDB.open(this.name,this.version);if(!n)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let s=!1;return setTimeout((()=>{s||n.onerror((0,i.Z)("IDB_CREATE_TIMEOUT"))}),3e3),this.openDbPromise=new Promise(((e,i)=>{n.onsuccess=t=>{s=!0;const o=n.result;let r=!1;this.log("Opened"),o.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),i(e)},o.onclose=e=>{this.log.error("closed:",e),!r&&this.openDatabase()},o.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(r=!0),t.onerror&&t.onerror(e),o.close()},o.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=o)},n.onerror=e=>{s=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),i(e)},n.onupgradeneeded=e=>{s=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);const n=e.target,i=n.result;this.stores.forEach((e=>{if(i.objectStoreNames.contains(e.name)){const s=n.transaction.objectStore(e.name);t(s,e)}else((e,n)=>{const s=e.createObjectStore(n.name);t(s,n)})(i,e)}))}}))}static create(e){var t;return null!==(t=this.INSTANCES.find((t=>t.name===e.name)))&&void 0!==t?t:new a(e)}static closeDatabases(e){this.INSTANCES.forEach((t=>{if(e&&e===t)return;const n=t.db;n&&(n.onclose=()=>{},n.close())}))}}a.INSTANCES=[];class c{constructor(e,t){this.storeName=t,this.log=(0,r.kg)(["IDB",e.name,t].join("-")),this.idb=a.create(e)}delete(e,t){const n=Array.isArray(e);return n||(e=[].concat(e)),this.getObjectStore("readwrite",(t=>{const s=e.map((e=>t.delete(e)));return n?s:s[0]}),"",t)}clear(e){return this.getObjectStore("readwrite",(e=>e.clear()),"",e)}save(e,t,n){const s=Array.isArray(e);return s||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",(n=>{const i=e.map(((e,s)=>n.put(t[s],e)));return s?i:i[0]}),"",n)}get(e,t){const n=Array.isArray(e);if(n){if(!e.length)return Promise.resolve([])}else{if(!e)return;e=[].concat(e)}return this.getObjectStore("readonly",(t=>{const s=e.map((e=>t.get(e)));return n?s:s[0]}),"",t)}getObjectStore(e,t,n,s=this.storeName){let i;return n&&(i=performance.now(),this.log(n+": start")),this.idb.openDatabase().then((o=>new Promise(((r,a)=>{const c=o.transaction([s],e),l=()=>{clearTimeout(u),a(c.error)},d=()=>{clearTimeout(u),n&&this.log(n+": end",performance.now()-i);const e=p.map((e=>e.result));r(m?e:e[0])};c.onerror=l;const h="readwrite"===e;h&&(c.oncomplete=()=>d());const u=setTimeout((()=>{this.log.error("transaction not finished",c,n)}),1e4),g=t(c.objectStore(s)),m=Array.isArray(g),p=m?g:[].concat(g);if(h)return;const f=p.length;let v=f;const b=()=>{c.error||--v||d()};for(let e=0;ee.getAll()),"",e)}}},2325:(e,t,n)=>{n.d(t,{$d:()=>w,A1:()=>S,Hz:()=>m,XZ:()=>y,ZP:()=>v,ag:()=>b,nK:()=>p,v_:()=>k});var s=n(410),i=n(7922),o=n(4159),r=n(3512),a=n(4762),c=n(6848),l=n(5953),d=n(9005),h=n(6637),u=n(3591),g=n(130);const m={messageActionChatCreate:"ActionCreateGroup",messageActionChatCreateYou:"ActionYouCreateGroup",messageActionChatEditTitle:"ActionChangedTitle",messageActionChatEditPhoto:"ActionChangedPhoto",messageActionChatEditVideo:"ActionChangedVideo",messageActionChatDeletePhoto:"ActionRemovedPhoto",messageActionChatReturn:"ActionAddUserSelf",messageActionChatReturnYou:"ActionAddUserSelfYou",messageActionChatJoined:"ActionAddUserSelfMega",messageActionChatJoinedYou:"ChannelMegaJoined",messageActionChatAddUser:"ActionAddUser",messageActionChatAddUsers:"ActionAddUser",messageActionChatLeave:"ActionLeftUser",messageActionChatLeaveYou:"YouLeft",messageActionChatDeleteUser:"ActionKickUser",messageActionChatJoinedByLink:"ActionInviteUser",messageActionPinMessage:"Chat.Service.Group.UpdatedPinnedMessage",messageActionContactSignUp:"Chat.Service.PeerJoinedTelegram",messageActionChannelCreate:"ActionCreateChannel",messageActionChannelEditTitle:"Chat.Service.Channel.UpdatedTitle",messageActionChannelEditPhoto:"Chat.Service.Channel.UpdatedPhoto",messageActionChannelEditVideo:"Chat.Service.Channel.UpdatedVideo",messageActionChannelDeletePhoto:"Chat.Service.Channel.RemovedPhoto",messageActionHistoryClear:"HistoryCleared",messageActionDiscussionStarted:"DiscussionStarted",messageActionChannelMigrateFrom:"ActionMigrateFromGroup","messageActionPhoneCall.video_in_ok":"ChatList.Service.VideoCall.incoming","messageActionPhoneCall.video_out_ok":"ChatList.Service.VideoCall.outgoing","messageActionPhoneCall.video_missed":"ChatList.Service.VideoCall.Missed","messageActionPhoneCall.video_cancelled":"ChatList.Service.VideoCall.Cancelled","messageActionPhoneCall.in_ok":"ChatList.Service.Call.incoming","messageActionPhoneCall.out_ok":"ChatList.Service.Call.outgoing","messageActionPhoneCall.missed":"ChatList.Service.Call.Missed","messageActionPhoneCall.cancelled":"ChatList.Service.Call.Cancelled","messageActionGroupCall.started":"Chat.Service.VoiceChatStarted.Channel","messageActionGroupCall.started_by":"Chat.Service.VoiceChatStarted","messageActionGroupCall.started_byYou":"Chat.Service.VoiceChatStartedYou","messageActionGroupCall.ended":"Chat.Service.VoiceChatFinished.Channel","messageActionGroupCall.ended_by":"Chat.Service.VoiceChatFinished","messageActionGroupCall.ended_byYou":"Chat.Service.VoiceChatFinishedYou",messageActionBotAllowed:"Chat.Service.BotPermissionAllowed"},p=a.IS_MOBILE?"Message.Unsupported.Mobile":"Message.Unsupported.Desktop";var f;!function(e){let t,a;function m(t){e.lastRequestedLangCode=t,e.lastRequestedNormalizedLangCode=t.split("-")[0]}function p(){if("h12"===e.timeFormat)try{const t=A({hour:"numeric",minute:"numeric",hour12:!0}),n=new Date;n.setHours(0);const s=t.format(n);e.amPmCache.am=s.split(/\s/)[1],n.setHours(12);const i=t.format(n);e.amPmCache.pm=i.split(/\s/)[1]}catch(t){console.error("cannot get am/pm",t),e.amPmCache={am:"AM",pm:"PM"}}}function f(){const e=o.Z.langPackCode;return m(e),Promise.all([n.e(104).then(n.bind(n,9104)),n.e(301).then(n.bind(n,9301)),n.e(8).then(n.bind(n,9179))]).then((([t,n,s])=>{const i=[];return b(t.default,i),b(n.default,i),y({_:"langPackDifference",from_version:0,lang_code:e,strings:i,version:0,local:!0,countries:s.default})}))}function v(t,s){e.requestedServerLanguage=!0;const i=r.Z.managers;return Promise.all([i.apiManager.invokeApiCacheable("langpack.getLangPack",{lang_code:t,lang_pack:"web"}),!1,n.e(104).then(n.bind(n,9104)),n.e(301).then(n.bind(n,9301)),i.apiManager.invokeApiCacheable("help.getCountriesList",{lang_code:t,hash:0}),e.polyfillPromise])}function b(e,t=[]){for(const n in e){const s=e[n];"string"==typeof s?t.push({_:"langPackString",key:n,value:s}):t.push(Object.assign({_:"langPackStringPluralized",key:n},s))}return t}function y(e){return e.appVersion=o.Z.langPackVersion,i.Z.set({langPack:e}).then((()=>(w(e),e)))}function w(n){const s=e.lastRequestedLangCode;if(n.lang_code===s){try{t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode)}catch(n){console.error("pluralRules error",n),t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode.split("-",1)[0])}try{t=new Intl.PluralRules(n.lang_code)}catch(e){console.error("pluralRules error",e),t=new Intl.PluralRules(n.lang_code.split("-",1)[0])}e.strings.clear();for(const t of n.strings)e.strings.set(t.key,t);n.countries&&(e.countriesList.length=0,e.countriesList.push(...n.countries.countries),n.countries.countries.forEach((t=>{if(t.name){const n=t.default_name;e.strings.set(n,{_:"langPackString",key:n,value:t.name})}}))),e.lastAppliedLangCode!==s&&(r.Z.dispatchEvent("language_change",s),e.lastAppliedLangCode=s,E.clear(),p()),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const n=e.weakMap.get(t);n&&n.update()}))}}function S(e,t,n={i:0}){const s=[];let i=0;return e.replace(/(\*\*|__)(.+?)\1|(\n)|(\[.+?\]\(.*?\))|un\d|%\d\$.|%./g,((e,o,r,a,c,l,d)=>{if(s.push(d.slice(i,l)),o){let e;switch(o){case"**":e=document.createElement("b");break;case"__":e=document.createElement("i")}e.append(...S(r,t,n)),s.push(e)}else if(a)s.push(document.createElement("br"));else if(c){const e=c.lastIndexOf("]"),i=c.slice(1,e),o=c.slice(e+2,c.length-1);let r;if(o&&(0,h.Z)(o)){r=document.createElement("a");const e=(0,u.Z)(o);r.href=e.url,e.onclick&&r.setAttribute("onclick",e.onclick),r.target="_blank"}else r=t[n.i++],r instanceof DocumentFragment&&(r=r.firstChild),r.textContent="";r.append(...S(i,t,n)),s.push(r)}else t&&function(e,t,n){const s=t[n.i++];Array.isArray(s)?e.push(...s):e.push(s)}(s,t,n);return i=l+e.length,""})),i!==e.length&&s.push(e.slice(i)),s}function k(n,s=!1,i){const o=e.strings.get(n);let r;if(o)if("langPackStringPluralized"===o._&&(null==i?void 0:i.length)){let e=i[0];"string"==typeof e&&(e=+e.replace(/\D/g,"")),r=o[t.select(e)+"_value"]||o.other_value}else r="langPackString"===o._?o.value:n;else r=n;const a=S(r,i);return s?a.map((e=>e instanceof Node?e.textContent:e)).join(""):a}e.strings=new Map,e.countriesList=[],e.requestedServerLanguage=!1,e.isRTL=!1,e.setRTL=function(t){e.isRTL=t},e.getCacheLangPack=function(){return a||(a=Promise.all([i.Z.get("langPack"),e.polyfillPromise]).then((([t])=>t?(s.ZP,e.lastRequestedLangCode||m(t.lang_code),w(t),t):f())).finally((()=>{a=void 0})))},e.setTimeFormat=function(t,n=!!e.timeFormat&&e.timeFormat!==t){e.timeFormat=t,p(),n&&(E.clear(),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const n=e.weakMap.get(t);n instanceof Z&&n.update()})))},e.loadLocalLangPack=f,e.loadLangPack=v,e.getStrings=function(e,t){return r.Z.managers.apiManager.invokeApi("langpack.getStrings",{lang_pack:o.Z.langPack,lang_code:e,keys:t})},e.formatLocalStrings=b,e.getLangPack=function(e,t){return m(e),v(e).then((([e,t,n,s,i,o])=>{let r=[];return[n,s].forEach((e=>{b(e.default,r)})),r=r.concat(...[e.strings,t.strings].filter(Boolean)),e.strings=r,e.countries=i,y(e)}))},e.saveLangPack=y,e.polyfillPromise="undefined"!=typeof Intl&&void 0!==Intl.PluralRules?Promise.resolve():n.e(642).then(n.bind(n,4642)).then((e=>{window.Intl=Object.assign("undefined"!=typeof Intl?Intl:{},e.default)})),e.applyLangPack=w,e.superFormatter=S,e.format=k,e.weakMap=new WeakMap;class P{constructor(t){this.element=(null==t?void 0:t.element)||document.createElement("span"),this.element.classList.add("i18n"),this.property=null==t?void 0:t.property,t&&(t.key||t.date)&&this.update(t),e.weakMap.set(this.element,this)}}class _ extends P{constructor(e={}){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"innerHTML"}))}update(e){if((0,l.Z)(this,e),"innerHTML"===this.property)this.element.textContent="",this.element.append(...k(this.key,!1,this.args));else{const e=this.element[this.property],t=k(this.key,!0,this.args);void 0===e?this.element.dataset[this.property]=t:this.element[this.property]=t}}compareAndUpdate(e){if(this.key!==e.key||!(0,c.Z)(this.args,e.args))return this.update(e)}}e.IntlElement=_;const E=new Map;function A(t={}){const n=JSON.stringify(t);let s=E.get(n);return s||(s=new Intl.DateTimeFormat(e.lastRequestedNormalizedLangCode+"-u-hc-"+e.timeFormat,t),E.set(n,s)),s}e.amPmCache={am:"AM",pm:"PM"};class Z extends P{constructor(e){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"textContent"})),(0,g.m)(this.element)}update(t){let n;if((0,l.Z)(this,t),this.options.hour&&this.options.minute&&2===Object.keys(this.options).length){const t=this.date.getHours();n=("0"+("h12"===e.timeFormat?t%12||12:t)).slice(-2)+":"+("0"+this.date.getMinutes()).slice(-2),"h12"===e.timeFormat&&(n+=" "+(t<12?e.amPmCache.am:e.amPmCache.pm))}else{const e=A(this.options);n=(0,d.Z)(e.format(this.date))}this.element[this.property]=n}}e.IntlDateElement=Z,e.i18n=function(e,t){return new _({key:e,args:t}).element},e.i18n_=function(e){return new _(e).element},e._i18n=function(e,t,n,s){return new _({element:e,key:t,args:n,property:s}).element}}(f||(f={}));const v=f,b=f.i18n,y=f.i18n_,w=f._i18n;function S(e,t){const n=e.slice(0,1);for(let s=1;s{const s=e&&t?"AutoDownloadSettings.LastDelimeter":"AutoDownloadSettings.Delimeter";return n?f.format(s,!0):b(s)}));return n?s.join(""):s}s.GO.I18n=f},1507:(e,t,n)=>{n.d(t,{BP:()=>u,BX:()=>m,DZ:()=>v,IA:()=>o,Iw:()=>l,J$:()=>p,NM:()=>s,OS:()=>h,Ox:()=>g,Pt:()=>d,Zi:()=>f,gZ:()=>c,hj:()=>i,rU:()=>a,yF:()=>r});const s=0,i=1271266957,o=777,r=777e3,a=2147483647,c="",l=20971520,d="",h=[7322096,16766590,13338331,9367192,16749490,16478047],u="default_static",g=4295032831,m=new Set(["web","k","z"]),p=0,f=1,v=new Set([p,f]);Math.max(...Array.from(v))},3855:(e,t,n)=>{n.d(t,{Z:()=>se});var s=n(3512),i=n(7730),o=n(410),r=n(7487),a=n(6702),c=n(1722),l=n(2831),d=n(5418),h=n(993),u=n(7328),g=n(6663),m=n(9976),p=n(3731),f=n(6818),v=n(1174),b=n(2341),y=n(9030),w=n(2365),S=n(2820),k=n(5432),P=n(2131),_=n(554),E=n(393),A=n(5269),Z=n(4089),C=n(4762),I=n(5783),L=n(2045),T=n(8189);const O=Object.assign({CAN_USE_TRANSFERABLES:u.Z,IS_APPLE_MX:T.Z,IS_CALL_SUPPORTED:h.Z,IS_CANVAS_FILTER_SUPPORTED:g.Z,IS_EMOJI_SUPPORTED:m.Z,IS_GEOLOCATION_SUPPORTED:p.Z,IS_GROUP_CALL_SUPPORTED:f.Z,IS_MOV_SUPPORTED:y.Z,IS_PARALLAX_SUPPORTED:w.Z,IS_SCREEN_SHARING_SUPPORTED:S.Z,IS_TOUCH_SUPPORTED:k.Z,IS_VIBRATE_SUPPORTED:P.Z,IS_OPUS_SUPPORTED:I.Z,IS_SHARED_WORKER_SUPPORTED:L.Z,IS_WEBM_SUPPORTED:E.Z,IS_WEBP_SUPPORTED:A.Z,IS_WEBRTC_SUPPORTED:Z.Z,IMAGE_MIME_TYPES_SUPPORTED:v.Z,MEDIA_MIME_TYPES_SUPPORTED:b.Z,VIDEO_MIME_TYPES_SUPPORTED:_.Z},C);var M=n(4159),x=n(236),W=n(6009),D=n(8479),R=n(946),N=n(7922),j=n(5466),F=n(5003);const U=x.h.version,B=x.h.build,V=Object.keys(x.h),G=["contactsListCachedTime","stateCreatedTime","maxSeenMsgId","filtersArr"];function $(){return e=this,t=void 0,i=function*(){const e=(0,F.kg)("STATE-LOADER"),t=performance.now(),n=(0,j.$)(e),i=V.map((e=>n(N.Z.get(e),"state "+e))).concat(n(r.Z.get("user_auth"),"auth"),n(r.Z.get("state_id"),"auth"),n(r.Z.get("k_build"),"auth")).concat(n(N.Z.get("user_auth"),"old auth")),a=yield Promise.all(i);e.warn("promises",performance.now()-t);const c=[],l=(e,t)=>{d[e]=t,c.push(e)};let d={};for(let e=0,t=V.length;eN.Z.get(e))));e.push("user_auth"),t.push("number"==typeof h||"string"==typeof h?{dcID:t[0]||M.Z.baseDcId,date:Date.now()/1e3|0,id:h.toPeerId(!1)}:h);const n={};e.forEach(((e,s)=>{n[e]=t[s]})),yield r.Z.set(n)}h&&(d.authState={_:"authStateSignedIn"},s.Z.dispatchEvent("user_auth","number"==typeof h||"string"==typeof h?{dcID:0,date:Date.now()/1e3|0,id:h.toPeerId(!1)}:h));const p=new Set;if(d.stateId!==u){if(void 0!==u){const e=new Map([["authState",void 0],["stateId",void 0]]);e.forEach(((t,n)=>{e.set(n,(0,D.Z)(d[n]))})),d=(0,D.Z)(x.h),e.forEach(((e,t)=>{d[t]=e}));const t={chats:1,dialogs:1,users:1};for(const e in t)p.add(e);f=d,c.length=0,d=f,c.push(...Object.keys(d))}yield r.Z.set({state_id:d.stateId})}var f;const v=Date.now();d.stateCreatedTime+864e5{l(e,(0,D.Z)(x.h[e]))})));const b=d.settings.autoDownload;if(void 0!==(null==b?void 0:b.private)){const e=["contacts","private","groups","channels"];["photo","video","file"].forEach((t=>{const n=b[t]={};e.forEach((e=>{n[e]=b[e]}))})),e.forEach((e=>{delete b[e]})),l("settings",d.settings)}const y=new Set(["settings.themes"]);let w,S;if((0,R.Z)(x.h,d,(e=>{l(e,d[e])}),void 0,y),d.version!==U||d.build!==B){if(d.build<217&&(d.allDialogsLoaded=(0,D.Z)(x.h.allDialogsLoaded),d.pinnedOrders=(0,D.Z)(x.h.pinnedOrders),d.filtersArr=(0,D.Z)(x.h.filtersArr),p.add("dialogs")),-1===(0,W.Z)(d.version,"1.7.1")){let e=!1;if(-1===(0,W.Z)(d.version,"1.3.0"))e=!0,d.settings.theme=(0,D.Z)(x.h.settings.theme),d.settings.themes=(0,D.Z)(x.h.settings.themes);else if(-1===(0,W.Z)(d.version,"1.7.1")){e=!0;const t=d.settings.themes;d.settings.themes=(0,D.Z)(x.h.settings.themes);try{t.forEach((e=>{const t=e.background;if(!t)return;const n=d.settings.themes.find((t=>t.name===e.name));n.settings.highlightningColor=t.highlightningColor;const s=(t.color||"").split(",").map((e=>e&&parseInt(e.slice(1),16)));if(t.color&&!t.slug)n.settings.wallpaper={_:"wallPaperNoFile",id:0,pFlags:{},settings:{_:"wallPaperSettings",pFlags:{}}};else{const e={_:"wallPaper",id:0,access_hash:0,slug:t.slug,document:{},pFlags:{},settings:{_:"wallPaperSettings",pFlags:{}}},s=e.settings;n.settings.wallpaper=e,t.slug&&!t.color?s.pFlags.blur=t.blur||void 0:t.intensity&&(s.intensity=t.intensity,e.pFlags.pattern=!0,e.pFlags.dark=t.intensity<0||void 0)}if(s.length){const e=n.settings.wallpaper.settings;e.background_color=s[0],e.second_background_color=s[1],e.third_background_color=s[2],e.fourth_background_color=s[3]}}))}catch(e){console.error("migrating themes error",e)}}e&&l("settings",d.settings)}0!==(0,W.Z)(d.version,U)&&(w=U,S=d.version),l("version",U),l("build",B)}return g!==B&&(!g||g{var t,n;const{name:s,key:i,value:o}=e;if(!e.hasOwnProperty("key"))return void(this.mirrors[s]=o);const r=null!==(t=(n=this.mirrors)[s])&&void 0!==t?t:n[s]={};void 0===o?delete r[i]:r[i]=o},this.mirrors={},this.tabState={chatPeerIds:[],idleStartTime:0},this.log("constructor"),this.registerWorker(),this.registerServiceWorker(),this.registerCryptoWorker(),this.addMultipleEventsListeners({convertWebp:({fileName:e,bytes:t})=>i.Z.convert(e,t),convertOpus:({fileName:e,bytes:t})=>q.Z.pushDecodeTask(t,!1).then((e=>e.bytes)),event:({name:e,args:t})=>{s.Z.dispatchEventSingle(e,...t)},localStorageProxy:e=>{const t=e;return r.Z[t.type](...t.args)},mirror:this.onMirrorTask}),s.Z.addEventListener("language_change",(e=>{s.Z.managers.networkerFactory.setLanguage(e)})),window.addEventListener("online",(()=>{s.Z.managers.networkerFactory.forceReconnectTimeout()})),s.Z.addEventListener("logging_out",(()=>{Promise.all([(0,X.Z)(!1,!0),r.Z.clear(),Promise.race([l.default.setAuthorized(!1),(0,d.Z)(3e3)]),a.default.forceUnsubscribe(),Promise.all(["cachedFiles","cachedStreamChunks"].map((e=>caches.delete(e))))]).finally((()=>{c.Z.reload()}))})),J.Z.addEventListener("change",(e=>{this.updateTabStateIdle(e)})),this.updateTabStateIdle(J.Z.isIdle),this.log("Passing environment:",O),this.invoke("environment",O)}pingServiceWorkerWithIframe(){if(this.pingServiceWorkerPromise)return this.pingServiceWorkerPromise;const e=this.pingServiceWorkerPromise=(0,Q.Z)(),t=document.createElement("iframe");t.hidden=!0;const n=()=>{setTimeout((()=>{this.pingServiceWorkerPromise=void 0}),1e4),clearTimeout(s),t.remove(),t.removeEventListener("load",n),t.removeEventListener("error",n),e.resolve()};t.addEventListener("load",n),t.addEventListener("error",n),t.src="ping/"+(4294967295*Math.random()|0),document.body.append(t);const s=window.setTimeout(n,1e3);return e}attachServiceWorker(e){this.lastServiceWorker&&this.serviceMessagePort.detachPort(this.lastServiceWorker),this.serviceMessagePort.attachSendPort(this.lastServiceWorker=e),this.serviceMessagePort.invokeVoid("hello",void 0)}_registerServiceWorker(){navigator.serviceWorker.register(new URL(n.p+n.u(670),n.b),{scope:"./"}).then((e=>{if(this.log("SW registered",e),e.active&&!navigator.serviceWorker.controller)return e.unregister().then((()=>{window.location.reload()}));(e.installing||e.waiting||e.active).addEventListener("statechange",(e=>{this.log("SW statechange",e)}));const t=navigator.serviceWorker.controller||e.installing||e.waiting||e.active;this.attachServiceWorker(t)}),(e=>{this.log.error("SW registration failed!",e),this.invokeVoid("serviceWorkerOnline",!1)}))}registerServiceWorker(){if(!("serviceWorker"in navigator))return;this.serviceMessagePort=new K.Z;const e=navigator.serviceWorker;this._registerServiceWorker(),e.addEventListener("controllerchange",(()=>{this.log.warn("controllerchange");const t=e.controller;this.attachServiceWorker(t),t.addEventListener("error",(e=>{this.log.error("controller error:",e)}))})),this.serviceMessagePort.attachListenPort(e),this.serviceMessagePort.addMultipleEventsListeners({port:(e,t,n)=>{this.invokeVoid("serviceWorkerPort",void 0,void 0,[n.ports[0]])},hello:(e,t)=>{this.serviceMessagePort.resendLockTask(t)},share:e=>{this.log("will try to share something"),this.share=e}}),e.addEventListener("messageerror",(e=>{this.log.error("SW messageerror:",e)}))}registerCryptoWorker(){return ee(this,void 0,void 0,(function*(){const e={construct:(e,t)=>({url:t[0]+location.search})},t=[Worker,"undefined"!=typeof SharedWorker&&SharedWorker].filter(Boolean);t.forEach((t=>window[t.name]=new Proxy(t,e)));const s=new Worker(new URL(n.p+n.u(589),n.b),{type:void 0});t.forEach((e=>window[e.name]=e));const i=s.url,o=e=>new a(e,{type:"module"}),r=e=>this.attachWorkerToPort(e,Y.Z,"crypto"),a=L.Z?SharedWorker:Worker;Y.Z.addEventListener("port",((e,t,n)=>{this.invokeVoid("cryptoPort",void 0,void 0,[n.ports[0]])})),r(o(i));const c=yield(l=i,fetch(l).then((e=>e.text())).then((e=>{const t=location.pathname.split("/");return t[t.length-1]="",e=`\n var originalImportScripts = importScripts; \n importScripts = (url) => {\n console.log('importScripts', url);\n var newUrl = '${location.origin+t.join("/")}' + url.split('/').pop();\n return originalImportScripts(newUrl);\n };\n ${e}`,new Blob([e],{type:"application/javascript"})})));var l;(yield this.invoke("createProxyWorkerURLs",{originalUrl:i,blob:c})).slice(1).map(o).forEach(r)}))}registerWorker(){let e;e=L.Z?new SharedWorker(new URL(n.p+n.u(678),n.b),{type:void 0}):new Worker(new URL(n.p+n.u(678),n.b),{type:void 0}),this.onWorkerFirstMessage(e)}attachWorkerToPort(e,t,n){const s=e.port||e;t.attachPort(s),e.addEventListener("error",(e=>{this.log.error(n,"worker error",e)}))}onWorkerFirstMessage(e){this.log("set webWorker"),this.attachWorkerToPort(e,this,"mtproto")}loadState(){return Promise.all([(null!=z?z:z=$()).then((e=>(this.newVersion=e.newVersion,this.oldVersion=e.oldVersion,this.mirrors.state=e.state,e)))])}sendState(){return this.loadState().then((e=>{const[t]=e;return this.invoke("state",Object.assign(Object.assign({},t),{userId:s.Z.myId.toUserId()})),e}))}invokeCrypto(e,...t){return Y.Z.invokeCrypto(e,...t)}toggleStorages(e,t){return ee(this,void 0,void 0,(function*(){yield(0,X.Z)(e,t),this.invoke("toggleStorages",{enabled:e,clearWrite:t}),this.serviceMessagePort.invokeVoid("toggleStorages",{enabled:e,clearWrite:t})}))}getMirror(e){return ee(this,void 0,void 0,(function*(){return this.mirrors[e]}))}getState(){return this.getMirror("state")}updateTabState(e,t){this.tabState[e]=t,this.invokeVoid("tabState",this.tabState)}updateTabStateIdle(e){this.updateTabState("idleStartTime",e?Date.now():0)}}const ne=new te;o.GO.apiManagerProxy=ne;const se=ne},490:(e,t,n)=>{n.d(t,{Z:()=>f});var s=n(4159),i=n(410),o=n(2219),r=n(2045),a=n(3241),c=n(2586),l=n(5003),d=n(3512),h=n(7487),u=n(3855);const g=r.Z;class m extends a.Z{constructor(){super(!1),this.log=(0,l.kg)("INSTANCE"),this.clearInstance=()=>{this.masterInstance&&!this.deactivated&&(this.log.warn("clear master instance"),h.Z.delete("xt_instance"))},this.checkInstance=(e=c.Z.isIdle)=>{return t=this,n=void 0,o=function*(){if(this.deactivated)return;const t=Date.now(),n={id:this.instanceId,idle:e,time:t},[i,o=s.Z.build]=yield Promise.all([h.Z.get("xt_instance",!1),h.Z.get("k_build",!1)]);if(o>s.Z.build)return this.masterInstance=!1,d.Z.managers.networkerFactory.stopAll(),this.deactivateInstance("version"),void u.Z.toggleStorages(!1,!1);g?h.Z.set({xt_instance:n}):!e||!i||i.id===this.instanceId||i.timethis.deactivateInstance("tabs")),3e4)))},new((i=void 0)||(i=Promise))((function(e,s){function r(e){try{c(o.next(e))}catch(e){s(e)}}function a(e){try{c(o.throw(e))}catch(e){s(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(r,a)}c((o=o.apply(t,n||[])).next())}));var t,n,i,o},this.log=(0,l.kg)("INSTANCE"),this.instanceId=o.Z}get deactivatedReason(){return this.deactivated}start(){if(this.reset(),!this.started){this.started=!0,c.Z.addEventListener("change",this.checkInstance),setInterval(this.checkInstance,5e3),this.checkInstance();try{document.documentElement.addEventListener("beforeunload",this.clearInstance)}catch(e){}}}reset(){this.masterInstance=!1,this.clearDeactivateTimeout(),this.deactivated=void 0}activateInstance(){this.deactivated&&(this.reset(),this.checkInstance(!1),this.dispatchEvent("activated"))}deactivateInstance(e){this.masterInstance||this.deactivated||(this.log.warn("deactivate",e),this.clearDeactivateTimeout(),this.deactivated=e,this.dispatchEvent("deactivated",e))}clearDeactivateTimeout(){this.deactivateTimeout&&(clearTimeout(this.deactivateTimeout),this.deactivateTimeout=0)}}const p=new m;i.GO&&(i.GO.singleInstance=p);const f=p},2831:(e,t,n)=>{n.r(t),n.d(t,{TelegramMeWebManager:()=>c,default:()=>d});var s=n(4159),i=n(410),o=n(1267),r=n(7298),a=n(7487);class c{constructor(){this.disabled=o.Z.test||!s.Z.domains.includes(location.hostname)}setAuthorized(e){if(!this.disabled)return a.Z.get("tgme_sync").then((t=>{const n=(0,r.Z)(!0);if(e&&(null==t?void 0:t.canRedirect)===e&&t.ts+86400>n)return;a.Z.set({tgme_sync:{canRedirect:e,ts:n}});const i=`_websync_?authed=${e?"1":"0"}&version=${encodeURIComponent(s.Z.version+" "+s.Z.suffix)}`,o=["//telegram.me/"+i,"//t.me/"+i].map((e=>function(e){const t=document.createElement("script"),n=new Promise((e=>{t.onload=t.onerror=()=>{e(t)}}));return t.src=e,document.body.appendChild(t),n}(e).then((e=>{e.remove()}))));return Promise.all(o)}))}}const l=new c;i.GO&&(i.GO.telegramMeWebManager=l);const d=l},6702:(e,t,n)=>{n.r(t),n.d(t,{WebPushApiManager:()=>g,default:()=>p});var s=n(410),i=n(5003),o=n(3855),r=n(2325),a=n(4762),c=n(1722),l=n(8479),d=n(490),h=n(3241),u=n(2790);class g extends h.Z{constructor(){super(!1),this.isAvailable=!0,this.isPushEnabled=!1,this.localNotificationsAvailable=!0,this.started=!1,this.settings={},this.isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,this.userVisibleOnly=!this.isFirefox,this.log=(0,i.kg)("PM"),this.subscribe=()=>{this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.subscribe({userVisibleOnly:this.userVisibleOnly}).then((e=>{this.isPushEnabled=!0,this.pushSubscriptionNotify("subscribe",e)})).catch((e=>{"denied"===Notification.permission?this.log("Permission for Notifications was denied"):(this.log("Unable to subscribe to push.",e),this.userVisibleOnly||(this.userVisibleOnly=!0,setTimeout(this.subscribe,0)))}))}))},this.isAliveNotify=()=>{if(!this.isAvailable||d.Z.deactivatedReason)return;this.settings.baseUrl=(location.href||"").replace(/#.*$/,"");const e={},t={push_action_mute1d:a.IS_MOBILE?"PushNotification.Action.Mute1d.Mobile":"PushNotification.Action.Mute1d",push_action_settings:a.IS_MOBILE?"PushNotification.Action.Settings.Mobile":"PushNotification.Action.Settings",push_message_nopreview:"PushNotification.Message.NoPreview"};for(const n in t)e[n]=r.ZP.format(t[n],!0);o.Z.serviceMessagePort.invokeVoid("pushPing",{localNotifications:this.localNotificationsAvailable,lang:e,settings:this.settings}),this.isAliveTO=setTimeout(this.isAliveNotify,1e4)},"PushManager"in window&&"Notification"in window&&"serviceWorker"in navigator||(this.log.warn("Push messaging is not supported."),this.isAvailable=!1,this.localNotificationsAvailable=!1),this.isAvailable&&"denied"===Notification.permission&&this.log.warn("The user has blocked notifications.")}start(){this.started||(this.started=!0,this.getSubscription(),this.setUpServiceWorkerChannel())}setLocalNotificationsDisabled(){this.localNotificationsAvailable=!1}getSubscription(){this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.getSubscription().then((e=>{this.isPushEnabled=!!e,this.pushSubscriptionNotify("init",e)})).catch((e=>{this.log.error("Error during getSubscription()",e)}))}))}unsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.getSubscription().then((e=>{this.isPushEnabled=!1,e&&(this.pushSubscriptionNotify("unsubscribe",e),setTimeout((()=>{e.unsubscribe().then((e=>{this.isPushEnabled=!1})).catch((e=>{this.log.error("Unsubscription error: ",e)}))}),3e3))})).catch((e=>{this.log.error("Error thrown while unsubscribing from push messaging.",e)}))}))}forceUnsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.getSubscription().then((e=>{this.log.warn("force unsubscribe",e),e&&e.unsubscribe().then((e=>{this.log.warn("force unsubscribe successful",e),this.isPushEnabled=!1})).catch((e=>{this.log.error("Unsubscription error: ",e)}))})).catch((e=>{this.log.error("Error thrown while unsubscribing from push messaging.",e)}))}))}setSettings(e){this.settings=(0,l.Z)(e),clearTimeout(this.isAliveTO),this.isAliveNotify()}hidePushNotifications(){this.isAvailable&&o.Z.serviceMessagePort.invokeVoid("notificationsClear",void 0)}setUpServiceWorkerChannel(){this.isAvailable&&(o.Z.serviceMessagePort.addEventListener("pushClick",(e=>{d.Z.deactivatedReason?c.Z.reload():this.dispatchEvent("push_notification_click",e)})),navigator.serviceWorker.ready.then(this.isAliveNotify))}pushSubscriptionNotify(e,t){if(t){const n=t.toJSON();if(!(n&&n.endpoint&&n.keys&&n.keys.p256dh&&n.keys.auth))return this.log.warn("Invalid push subscription",n),this.unsubscribe(),this.isAvailable=!1,void this.pushSubscriptionNotify(e);this.log.warn("Push",e,n),this.dispatchEvent("push_"+e,{tokenType:10,tokenValue:JSON.stringify(n)})}else this.log.warn("Push",e,!1),this.dispatchEvent("push_"+e,!1)}ignorePushByMid(e,t){this.isAvailable&&o.Z.serviceMessagePort.invokeVoid("shownNotification",e+"_"+(0,u.Z)(t))}}const m=new g;s.GO&&(s.GO.webPushApiManager=m);const p=m},9043:(e,t,n)=>{n.d(t,{Z:()=>d});var s=n(410),i=n(5783),o=n(4762),r=n(5003),a=n(3855),c=function(e,t,n,s){return new(n||(n=Promise))((function(i,o){function r(e){try{c(s.next(e))}catch(e){o(e)}}function a(e){try{c(s.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,a)}c((s=s.apply(e,t||[])).next())}))};const l=new class{constructor(){this.sampleRate=48e3,this.tasks=[],this.keepAlive=!1,this.log=(0,r.kg)("OPUS",r.v9.Error)}isPlaySupported(){return i.Z}loadWavWorker(){this.wavWorker||(this.wavWorker=new Worker("waveWorker.min.js"),this.wavWorker.addEventListener("message",(e=>{const t=e.data;if(this.log("[WAV] got message:",t),t&&t.page){const e=t.page;this.onTaskEnd(this.tasks.shift(),e)}})))}loadWorker(){this.worker||(this.worker=new Worker("decoderWorker.min.js"),this.worker.addEventListener("message",(e=>{const t=e.data;this.log("[DECODER] got message",t),"done"===t.type?(this.wavWorker.postMessage({command:"done"}),t.waveform&&(this.tasks[0].waveform=t.waveform)):this.wavWorker.postMessage({command:"encode",buffers:e.data},o.IS_SAFARI?void 0:t.map((e=>e.buffer)))})))}setKeepAlive(e){this.keepAlive=e,this.keepAlive?(this.loadWorker(),this.loadWavWorker()):this.tasks.length||this.terminateWorkers()}onTaskEnd(e,t){t?(clearTimeout(e.timeout),e.callback.resolve({bytes:t,waveform:e.waveform})):e.callback.reject("timeout"),this.tasks.length&&this.executeNewTask(this.tasks[0]),this.terminateWorkers()}terminateWorkers(e=!1){(!this.keepAlive&&!this.tasks.length||e)&&(this.worker&&(this.worker.terminate(),this.worker=null),this.wavWorker&&(this.wavWorker.terminate(),this.wavWorker=null))}executeNewTask(e){this.worker.postMessage({command:"init",decoderSampleRate:this.sampleRate,outputBufferSampleRate:this.sampleRate}),this.wavWorker.postMessage({command:"init",wavBitDepth:16,wavSampleRate:this.sampleRate}),this.log("[DECODER] send decode"),this.worker.postMessage({command:"decode",pages:e.pages,waveform:e.withWaveform},o.IS_SAFARI?void 0:[e.pages.buffer]),e.timeout=window.setTimeout((()=>{this.log.error("decode timeout"),this.terminateWorkers(!0),this.tasks.length&&(this.loadWorker(),this.loadWavWorker()),this.onTaskEnd(this.tasks.shift())}),1e4)}pushDecodeTask(e,t){return new Promise(((n,s)=>{const i={pages:e,withWaveform:t,callback:{resolve:n,reject:s},timeout:0};this.loadWorker(),this.loadWavWorker(),1===this.tasks.push(i)&&this.executeNewTask(i)}))}decode(e,t=!1){return c(this,void 0,void 0,(function*(){return this.pushDecodeTask(e,t).then((e=>c(this,void 0,void 0,(function*(){const t=new Blob([e.bytes],{type:"audio/wav"});return{url:yield a.Z.invoke("createObjectURL",t),waveform:e.waveform}}))))}))}};s.GO.opusDecodeController=l;const d=l},2423:(e,t,n)=>{n.d(t,{$2:()=>u,E:()=>g,Hk:()=>p,QB:()=>m,SC:()=>f,bu:()=>l,it:()=>c,kO:()=>b,tY:()=>v});var s=n(1229);const i="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",o="0-9_"+i,r="["+i+"0-9]",a="((?:https?|ftp)://|mailto:)?",c=a+"(?:"+r+"{1,64}(?::"+r+"{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}|"+r+"["+i+"ยท0-9-]{0,64}(?:\\."+r+"["+i+"ยท0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|["+i+"]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?",l=(new RegExp("^"+a.slice(0,-1),"i"),/^((?:[^\/]+?):\/\/|mailto:)/),d="[a-zA-Z\\d_]{5,32}",h="\\/([a-zA-Z\\d_]{1,32})(?:@("+d+"))?(\\b|$)",u=new RegExp("(^| )(@)("+d+")|("+c+")|(\\n)|("+s.Z+")|(^|[\\s\\(\\]])(#["+o+"]{2,64})|(^|\\s)"+h,"i"),g=/^(([^<>()[\]\\.,;:\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,}))$/,m=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s|\x01)(`|~~|\*\*|__|_-_|\|\|)([^\n]+?)\7([\x01\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)|(\[(.+?)\]\((.+?)\))/m,p={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}"},f={"`":"messageEntityCode","``":"messageEntityPre","**":"messageEntityBold",__:"messageEntityItalic","~~":"messageEntityStrike","_-_":"messageEntityUnderline","||":"messageEntitySpoiler"},v=new Set(["messageEntityEmoji","messageEntityLinebreak","messageEntityCaret"]);for(const e in f)v.add(f[e]);const b=/^\+\d+$/},3591:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(2423),i=n(410),o=n(6637),r=n(1507);function a(e,t){(0,o.Z)(e)||(e="https://"+e);const n={url:e};let i,a,c,l;if(i=e.match(/^(?:https?:\/\/)?(?:(.+?)\.)?(?:(?:web|k|z)\.)?t(?:elegram)?\.me(?:\/(.+))?/)){const t=new URL(e);let n=i[1];n&&r.BX.has(i[1])&&(n=void 0),n&&(t.pathname=n+("/"===t.pathname?"":t.pathname));const o=t.pathname.slice(1),a=o.split("/");if(a[0]&&"$"===a[0][0]&&a[0].length>1)l="invoice";else if(/^\W/.test(o)&&!s.kO.test(o))l="joinchat";else switch(a[0]){case"joinchat":case"addstickers":case"addemoji":case"voicechat":case"invoice":if(1!==a.length&&!n){l=a[0];break}default:if(a[1]&&a[1].match(/^\d+(?:\?(?:comment|thread)=\d+)?$/)||1===a.length){l="im";break}}}else(a=e.match(/^(?:https?:\/\/)?telesco\.pe\/([^/?]+)\/(\d+)/))?l="im":(c=e.match(/tg:(?:\/\/)?(.+?)(?:\?|$)/))&&(l="tg_"+c[1]);return window[l]||(l=void 0),n.onclick=l,n}i.GO&&(i.GO.wrapUrl=a)},3512:(e,t,n)=>{n.d(t,{Z:()=>d});var s=n(1507),i=n(3241),o=n(410),r=n(3206),a=n(1352);class c extends i.Z{constructor(){super(),this.myId=s.NM,this.connectionStatus={},this.premium=!1,this.addEventListener("user_auth",(({id:e})=>{this.myId=e.toPeerId()})),this.addEventListener("premium_toggle_private",(({isNew:e,isPremium:t})=>{this.premium=t,this.dispatchEventSingle("premium_toggle",t)})),this.addEventListener("connection_status_change",(e=>{this.connectionStatus[e.name]=e})),this.dispatchEvent=(e,...t)=>{super.dispatchEvent(e,...t),r.Z.getInstance().invokeVoid("event",{name:e,args:t})},a.kC||this.addEventListener("settings_updated",(({settings:e})=>{this.settings=e}))}getConnectionStatus(){return this.connectionStatus}getPremium(){return this.premium}dispatchEventSingle(...e){super.dispatchEvent(...e)}}const l=new c;o.GO.rootScope=l;const d=l},7730:(e,t,n)=>{n.d(t,{Z:()=>r});var s=n(410),i=n(3725);const o=new class{constructor(){this.convertPromises={}}init(){this.worker=new Worker(new URL(n.p+n.u(61),n.b)),this.worker.addEventListener("message",(e=>{const t=e.data.payload,n=this.convertPromises[t.fileName];n&&(t.bytes?n.resolve(t.bytes):n.reject(),delete this.convertPromises[t.fileName])}))}postMessage(e){this.init&&(this.init(),this.init=null),this.worker.postMessage(e)}convert(e,t){if(this.convertPromises.hasOwnProperty(e))return this.convertPromises[e];const n=(0,i.Z)();return this.postMessage({type:"convertWebp",payload:{fileName:e,bytes:t}}),this.convertPromises[e]=n}};s.GO.webpWorkerController=o;const r=o}},r={};function a(e){var t=r[e];if(void 0!==t)return t.exports;var n=r[e]={exports:{}};return o[e].call(n.exports,n,n.exports,a),n.exports}a.m=o,e=[],a.O=(t,n,s,i)=>{if(!n){var o=1/0;for(d=0;d=i)&&Object.keys(a.O).every((e=>a.O[e](n[c])))?n.splice(c--,1):(r=!1,i0&&e[d-1][2]>i;d--)e[d]=e[d-1];e[d]=[n,s,i]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,s){if(1&s&&(e=this(e)),8&s)return e;if("object"==typeof e&&e){if(4&s&&e.__esModule)return e;if(16&s&&"function"==typeof e.then)return e}var i=Object.create(null);a.r(i);var o={};t=t||[null,n({}),n([]),n(n)];for(var r=2&s&&e;"object"==typeof r&&!~t.indexOf(r);r=n(r))Object.getOwnPropertyNames(r).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,a.d(i,o),i},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,n)=>(a.f[n](e,t),t)),[])),a.u=e=>(({589:"crypto.worker",630:"npm.qr-code-styling",670:"sw",678:"mtproto.worker"}[e]||e)+"."+{8:"93d2f33af815eb0455aa",53:"dbe0925c22766a370c35",61:"84ba1f0d30c94eb8b92b",63:"1831e9530926993870f4",77:"b8cf11d2b5dca36479ca",104:"f68acff124bec8da4bd6",147:"d3d1728d5fd59c12e18f",231:"f4d1bfe6ff7f14577f96",301:"95838a8203f23dd1ce8f",339:"12bdbede82465e666965",392:"6cd3a6e98d96c1474a83",436:"9e54c5e9f3feccf9d736",437:"b05ad4b2fc48a536e003",442:"4c190263f1e005b28c8a",508:"c10ccdd1f7e2e9bbef5a",589:"5fdc4de518d781a4e437",630:"f8f57a1c721e03c3f699",641:"eef7113bc3d12ae4efe4",642:"be93122d1116ecdc9322",646:"29b333bf40364af9ab80",670:"3ce4749eb536186e614e",678:"8a2c8d1f5534b5f54052",709:"e75693a36b0fbe6508d1",776:"8ab7c3d76984f9b6cac3",781:"c527d73f348ae695f21a",783:"949e247466ad3ebe82d6",810:"0dc4677a01d387e9e564",813:"315ffd640c7d6013a536"}[e]+".chunk.js"),a.miniCssF=e=>{},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s={},i="tweb:",a.l=(e,t,n,o)=>{if(s[e])s[e].push(t);else{var r,c;if(void 0!==n)for(var l=document.getElementsByTagName("script"),d=0;d{r.onerror=r.onload=null,clearTimeout(g);var i=s[e];if(delete s[e],r.parentNode&&r.parentNode.removeChild(r),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(u.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=u.bind(null,r.onerror),r.onload=u.bind(null,r.onload),c&&document.head.appendChild(r)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{if(void 0!==a){var e=a.u,t=a.e,n={},s={};a.u=function(t){return e(t)+(n.hasOwnProperty(t)?"?"+n[t]:"")},a.e=function(i){return t(i).catch((function(t){var o=s.hasOwnProperty(i)?s[i]:999999;if(o<1){var r=e(i);throw t.message="Loading chunk "+i+" failed after 999999 retries.\n("+r+")",t.request=r,t}return new Promise((function(e){setTimeout((function(){var t=Date.now();n[i]=t,s[i]=o-1,e(a.e(i))}),3e3)}))}))}}})(),(()=>{a.b=document.baseURI||self.location.href;var e={179:0};a.f.j=(t,n)=>{var s=a.o(e,t)?e[t]:void 0;if(0!==s)if(s)n.push(s[2]);else{var i=new Promise(((n,i)=>s=e[t]=[n,i]));n.push(s[2]=i);var o=a.p+a.u(t),r=new Error;a.l(o,(n=>{if(a.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var i=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;r.message="Loading chunk "+t+" failed.\n("+i+": "+o+")",r.name="ChunkLoadError",r.type=i,r.request=o,s[1](r)}}),"chunk-"+t,t)}},a.O.j=t=>0===e[t];var t=(t,n)=>{var s,i,[o,r,c]=n,l=0;if(o.some((t=>0!==e[t]))){for(s in r)a.o(r,s)&&(a.m[s]=r[s]);if(c)var d=c(a)}for(t&&t(n);la(2938)));c=a.O(c)})(); +//# sourceMappingURL=main.12cb432c0176fa529f08.bundle.js.map \ No newline at end of file diff --git a/public/main.12cb432c0176fa529f08.bundle.js.map b/public/main.12cb432c0176fa529f08.bundle.js.map new file mode 100644 index 00000000..ca932fa5 --- /dev/null +++ b/public/main.12cb432c0176fa529f08.bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"main.12cb432c0176fa529f08.bundle.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/create fake namespace object","webpack://tweb/webpack/runtime/load script","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/config/state.ts","webpack://tweb/./src/helpers/getTimeFormat.ts","webpack://tweb/./src/environment/appleMx.ts","webpack://tweb/./src/environment/callSupport.ts","webpack://tweb/./src/environment/canUseTransferables.ts","webpack://tweb/./src/environment/canvasFilterSupport.ts","webpack://tweb/./src/environment/emojiSupport.ts","webpack://tweb/./src/environment/geolocationSupport.ts","webpack://tweb/./src/environment/groupCallSupport.ts","webpack://tweb/./src/environment/imageMimeTypesSupport.ts","webpack://tweb/./src/environment/mediaMimeTypesSupport.ts","webpack://tweb/./src/environment/movSupport.ts","webpack://tweb/./src/environment/opusSupport.ts","webpack://tweb/./src/environment/parallaxSupport.ts","webpack://tweb/./src/environment/screenSharingSupport.ts","webpack://tweb/./src/environment/sharedWorkerSupport.ts","webpack://tweb/./src/environment/touchSupport.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/environment/vibrateSupport.ts","webpack://tweb/./src/environment/videoMimeTypesSupport.ts","webpack://tweb/./src/environment/webmSupport.ts","webpack://tweb/./src/environment/webpSupport.ts","webpack://tweb/./src/environment/webrtcSupport.ts","webpack://tweb/./src/helpers/color.ts","webpack://tweb/./src/helpers/compareVersion.ts","webpack://tweb/./src/helpers/dom/blurActiveElement.ts","webpack://tweb/./src/helpers/dom/cancelEvent.ts","webpack://tweb/./src/helpers/dom/findUpClassName.ts","webpack://tweb/./src/helpers/dom/fixSafariStickyInput.ts","webpack://tweb/./src/helpers/dom/fixSafariStickyInputFocusing.ts","webpack://tweb/./src/helpers/dom/installPrompt.ts","webpack://tweb/./src/helpers/dom/loadFonts.ts","webpack://tweb/./src/helpers/dom/setInnerHTML.ts","webpack://tweb/./src/helpers/idleController.ts","webpack://tweb/./src/helpers/number/clamp.ts","webpack://tweb/./src/helpers/overlayCounter.ts","webpack://tweb/./src/helpers/schedulers.ts","webpack://tweb/./src/helpers/string/parseUriParams.ts","webpack://tweb/./src/helpers/themeController.ts","webpack://tweb/./src/helpers/setWorkerProxy.ts","webpack://tweb/./src/environment/installPrompt.ts","webpack://tweb/./src/index.ts","webpack://tweb/./src/helpers/dom/toggleAttributePolyfill.ts","webpack://tweb/./src/lib/appManagers/appRuntimeManager.ts","webpack://tweb/./src/lib/appManagers/getProxiedManagers.ts","webpack://tweb/./src/lib/files/idb.ts","webpack://tweb/./src/lib/langPack.ts","webpack://tweb/./src/lib/mtproto/mtproto_config.ts","webpack://tweb/./src/environment/index.ts","webpack://tweb/./src/lib/appManagers/utils/state/loadState.ts","webpack://tweb/./src/lib/mtproto/mtprotoworker.ts","webpack://tweb/./src/lib/mtproto/singleInstance.ts","webpack://tweb/./src/lib/mtproto/telegramMeWebManager.ts","webpack://tweb/./src/helpers/dom/loadScript.ts","webpack://tweb/./src/lib/mtproto/webPushApiManager.ts","webpack://tweb/./src/lib/opusDecodeController.ts","webpack://tweb/./src/lib/richTextProcessor/index.ts","webpack://tweb/./src/lib/richTextProcessor/wrapUrl.ts","webpack://tweb/./src/lib/rootScope.ts","webpack://tweb/./src/lib/webp/webpWorkerController.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/compat get default export","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/make namespace object","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/jsonp chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"tweb:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AppMediaPlaybackController} from '../components/appMediaPlaybackController';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport getTimeFormat from '../helpers/getTimeFormat';\nimport {nextRandomUint} from '../helpers/random';\nimport {AutoDownloadSettings, BaseTheme, NotifyPeer, PeerNotifySettings, Theme, ThemeSettings, WallPaper} from '../layer';\nimport {TopPeerType, MyTopPeer} from '../lib/appManagers/appUsersManager';\nimport DialogsStorage from '../lib/storages/dialogs';\nimport FiltersStorage from '../lib/storages/filters';\nimport {AuthState, Modify} from '../types';\nimport App from './app';\n\nconst STATE_VERSION = App.version;\nconst BUILD = App.build;\n\n// ! DEPRECATED\nexport type Background = {\n type?: 'color' | 'image' | 'default', // ! DEPRECATED\n blur: boolean,\n highlightningColor?: string,\n color?: string,\n slug?: string, // image slug\n intensity?: number, // pattern intensity\n id: string | number, // wallpaper id\n};\n\nexport type AppTheme = Modify\n}>;\n\nexport type AutoDownloadPeerTypeSettings = {\n contacts: boolean,\n private: boolean,\n groups: boolean,\n channels: boolean\n};\n\nexport type State = {\n allDialogsLoaded: DialogsStorage['allDialogsLoaded'],\n pinnedOrders: DialogsStorage['pinnedOrders'],\n // contactsList: UserId[],\n contactsListCachedTime: number,\n updates: Partial<{\n seq: number,\n pts: number,\n date: number\n }>,\n // filters?: FiltersStorage['filters'], // ! DEPRECATED\n filtersArr?: FiltersStorage['filtersArr'],\n maxSeenMsgId: number,\n stateCreatedTime: number,\n recentEmoji: string[],\n recentCustomEmoji: DocId[],\n topPeersCache: {\n [type in TopPeerType]?: {\n peers: MyTopPeer[],\n cachedTime: number\n }\n },\n recentSearch: PeerId[],\n version: typeof STATE_VERSION,\n build: typeof BUILD,\n authState: AuthState,\n hiddenPinnedMessages: {[peerId: PeerId]: number},\n settings: {\n messagesTextSize: number,\n distanceUnit: 'kilometers' | 'miles',\n sendShortcut: 'enter' | 'ctrlEnter',\n animationsEnabled: boolean,\n autoDownload: {\n contacts?: boolean, // ! DEPRECATED\n private?: boolean, // ! DEPRECATED\n groups?: boolean, // ! DEPRECATED\n channels?: boolean, // ! DEPRECATED\n photo: AutoDownloadPeerTypeSettings,\n video: AutoDownloadPeerTypeSettings,\n file: AutoDownloadPeerTypeSettings\n },\n autoDownloadNew: AutoDownloadSettings,\n autoPlay: {\n gifs: boolean,\n videos: boolean\n },\n stickers: {\n suggest: boolean,\n loop: boolean\n },\n emoji: {\n suggest: boolean,\n big: boolean\n },\n background?: Background, // ! DEPRECATED\n themes: AppTheme[],\n theme: AppTheme['name'],\n notifications: {\n sound: boolean\n },\n nightTheme?: boolean, // ! DEPRECATED\n timeFormat: 'h12' | 'h23'\n },\n playbackParams: ReturnType,\n keepSigned: boolean,\n chatContextMenuHintWasShown: boolean,\n stateId: number,\n notifySettings: {[k in Exclude]?: PeerNotifySettings.peerNotifySettings}\n};\n\n// const BACKGROUND_DAY_MOBILE: Background = {\n// blur: false,\n// slug: '',\n// color: '#dbddbb,#6ba587,#d5d88d,#88b884',\n// highlightningColor: 'hsla(86.4, 43.846153%, 45.117647%, .4)',\n// intensity: 0,\n// id: '1'\n// };\n\n// const BACKGROUND_NIGHT_MOBILE: Background = {\n// blur: false,\n// slug: '',\n// color: '#0f0f0f',\n// highlightningColor: 'hsla(0, 0%, 3.82353%, 0.4)',\n// intensity: 0,\n// id: '-1'\n// };\n\nexport const DEFAULT_THEME: Theme = {\n _: 'theme',\n access_hash: '',\n id: '',\n settings: [{\n _: 'themeSettings',\n pFlags: {},\n base_theme: {_: 'baseThemeClassic'},\n accent_color: 0x3390ec,\n message_colors: [0x4fae4e],\n wallpaper: {\n _: 'wallPaper',\n pFlags: {\n default: true,\n pattern: true\n },\n access_hash: '',\n document: undefined,\n id: '',\n slug: 'pattern',\n settings: {\n _: 'wallPaperSettings',\n pFlags: {},\n intensity: 50,\n background_color: 0xdbddbb,\n second_background_color: 0x6ba587,\n third_background_color: 0xd5d88d,\n fourth_background_color: 0x88b884\n }\n }\n }, {\n _: 'themeSettings',\n pFlags: {},\n base_theme: {_: 'baseThemeNight'},\n accent_color: 0x8774E1,\n message_colors: [0x8774E1],\n wallpaper: {\n _: 'wallPaper',\n pFlags: {\n default: true,\n pattern: true,\n dark: true\n },\n access_hash: '',\n document: undefined,\n id: '',\n slug: 'pattern',\n settings: {\n _: 'wallPaperSettings',\n pFlags: {},\n intensity: -50,\n background_color: 0xfec496,\n second_background_color: 0xdd6cb9,\n third_background_color: 0x962fbf,\n fourth_background_color: 0x4f5bd5\n }\n }\n }],\n slug: '',\n title: '',\n emoticon: '๐Ÿ ',\n pFlags: {default: true}\n};\n\nconst makeDefaultAppTheme = (\n name: AppTheme['name'],\n baseTheme: BaseTheme['_'],\n highlightningColor: string\n): AppTheme => {\n return {\n ...DEFAULT_THEME,\n name,\n settings: {\n ...DEFAULT_THEME.settings.find((s) => s.base_theme._ === baseTheme),\n highlightningColor\n }\n };\n};\n\nexport const STATE_INIT: State = {\n allDialogsLoaded: {},\n pinnedOrders: {},\n // contactsList: [],\n contactsListCachedTime: 0,\n updates: {},\n filtersArr: [],\n maxSeenMsgId: 0,\n stateCreatedTime: Date.now(),\n recentEmoji: [],\n recentCustomEmoji: [],\n topPeersCache: {},\n recentSearch: [],\n version: STATE_VERSION,\n build: BUILD,\n authState: {\n _: IS_MOBILE ? 'authStateSignIn' : 'authStateSignQr'\n },\n hiddenPinnedMessages: {},\n settings: {\n messagesTextSize: 16,\n distanceUnit: 'kilometers',\n sendShortcut: 'enter',\n animationsEnabled: true,\n autoDownload: {\n photo: {\n contacts: true,\n private: true,\n groups: true,\n channels: true\n },\n video: {\n contacts: true,\n private: true,\n groups: true,\n channels: true\n },\n file: {\n contacts: true,\n private: true,\n groups: true,\n channels: true\n }\n },\n autoDownloadNew: {\n _: 'autoDownloadSettings',\n file_size_max: 3145728,\n pFlags: {\n video_preload_large: true,\n audio_preload_next: true\n },\n photo_size_max: 1048576,\n video_size_max: 15728640,\n video_upload_maxbitrate: 100\n },\n autoPlay: {\n gifs: true,\n videos: true\n },\n stickers: {\n suggest: true,\n loop: true\n },\n emoji: {\n suggest: true,\n big: true\n },\n themes: [\n makeDefaultAppTheme('day', 'baseThemeClassic', 'hsla(86.4, 43.846153%, 45.117647%, .4)'),\n makeDefaultAppTheme('night', 'baseThemeNight', 'hsla(299.142857, 44.166666%, 37.470588%, .4)')\n ],\n theme: 'system',\n notifications: {\n sound: false\n },\n timeFormat: getTimeFormat()\n },\n playbackParams: {\n volume: 1,\n muted: false,\n playbackRate: 1,\n playbackRates: {\n voice: 1,\n video: 1,\n audio: 1\n },\n loop: false,\n round: false\n },\n keepSigned: true,\n chatContextMenuHintWasShown: false,\n stateId: nextRandomUint(32),\n notifySettings: {}\n};\n","export default function getTimeFormat(): 'h12' | 'h23' {\n // try {\n // const resolvedOptions = Intl.DateTimeFormat(navigator.language, {hour: 'numeric'}).resolvedOptions();\n // if('hourCycle' in resolvedOptions) {\n // return (resolvedOptions as any).hourCycle === 'h12' ? 'h12' : 'h23';\n // } else {\n // return resolvedOptions.hour12 ? 'h12' : 'h23';\n // }\n // } catch(err) {\n return new Date().toLocaleString().match(/\\s(AM|PM)/) ? 'h12' : 'h23';\n // }\n}\n","let IS_APPLE_MX = false;\n\ntry {\n // Awesome detect from https://stackoverflow.com/a/65412357\n const ctx = document.createElement('canvas').getContext('webgl');\n const extension = ctx.getExtension('WEBGL_debug_renderer_info');\n const renderer: string = extension && ctx.getParameter(extension.UNMASKED_RENDERER_WEBGL) || '';\n if((renderer.match(/Apple/) && !renderer.match(/Apple GPU/)) ||\n ctx.getSupportedExtensions().indexOf('WEBGL_compressed_texture_s3tc_srgb') === -1) {\n IS_APPLE_MX = true;\n }\n} catch(err) {\n\n}\n\nexport default IS_APPLE_MX;\n","import IS_WEBRTC_SUPPORTED from './webrtcSupport';\n\nconst IS_CALL_SUPPORTED = IS_WEBRTC_SUPPORTED;\n\nexport default IS_CALL_SUPPORTED;\n","import {IS_SAFARI} from './userAgent';\n\n/*\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\n * transfer data between WebWorkers and the main thread.\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\n *\n * This should be removed once the underlying Safari issue is fixed.\n */\n\nlet CAN_USE_TRANSFERABLES: boolean;\nif(!IS_SAFARI) CAN_USE_TRANSFERABLES = true;\nelse {\n try {\n const match = navigator.userAgent.match(/Version\\/(.+?) /);\n CAN_USE_TRANSFERABLES = +match[1] >= 14;\n } catch(err) {\n CAN_USE_TRANSFERABLES = false;\n }\n}\n\nexport default CAN_USE_TRANSFERABLES;\n","const IS_CANVAS_FILTER_SUPPORTED = 'filter' in (document.createElement('canvas').getContext('2d') || {});\n\nexport default IS_CANVAS_FILTER_SUPPORTED;\n","const IS_EMOJI_SUPPORTED = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1/* && false *//* || true */;\n\nexport default IS_EMOJI_SUPPORTED;\n","const IS_GEOLOCATION_SUPPORTED = !!navigator?.geolocation?.getCurrentPosition && false;\n\nexport default IS_GEOLOCATION_SUPPORTED;\n","import IS_WEBRTC_SUPPORTED from './webrtcSupport';\n\nconst IS_GROUP_CALL_SUPPORTED = IS_WEBRTC_SUPPORTED;\n\nexport default IS_GROUP_CALL_SUPPORTED;\n","import IS_WEBP_SUPPORTED from './webpSupport';\n\nconst IMAGE_MIME_TYPES_SUPPORTED = new Set([\n 'image/jpeg',\n 'image/png',\n 'image/bmp'\n]);\n\nif(IS_WEBP_SUPPORTED) {\n IMAGE_MIME_TYPES_SUPPORTED.add('image/webp');\n}\n\nexport default IMAGE_MIME_TYPES_SUPPORTED;\n","import IMAGE_MIME_TYPES_SUPPORTED from './imageMimeTypesSupport';\nimport VIDEO_MIME_TYPES_SUPPORTED from './videoMimeTypesSupport';\n\nconst arr = [...IMAGE_MIME_TYPES_SUPPORTED].concat([...VIDEO_MIME_TYPES_SUPPORTED]);\n\nconst MEDIA_MIME_TYPES_SUPPORTED = new Set(arr);\n\nexport default MEDIA_MIME_TYPES_SUPPORTED;\n","import {IS_APPLE_MOBILE, IS_SAFARI} from './userAgent';\n\n// mov is not supported in Chrome on macOS\nconst IS_MOV_SUPPORTED = !!document.createElement('video').canPlayType('video/quicktime') || IS_SAFARI || IS_APPLE_MOBILE;\n\nexport default IS_MOV_SUPPORTED;\n","const audio = document.createElement('audio');\nconst IS_OPUS_SUPPORTED = !!(audio.canPlayType && audio.canPlayType('audio/ogg;').replace(/no/, ''))/* && false */;\n\nexport default IS_OPUS_SUPPORTED;\n","import {IS_FIREFOX} from './userAgent';\n\nconst IS_PARALLAX_SUPPORTED = !IS_FIREFOX && false;\n\nexport default IS_PARALLAX_SUPPORTED;\n","const IS_SCREEN_SHARING_SUPPORTED = !!('getDisplayMedia' in (navigator?.mediaDevices || {}));\n\nexport default IS_SCREEN_SHARING_SUPPORTED;\n","import Modes from '../config/modes';\n\nconst IS_SHARED_WORKER_SUPPORTED = typeof(SharedWorker) !== 'undefined' && !Modes.noSharedWorker/* && false */;\n\nexport default IS_SHARED_WORKER_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// @ts-ignore\nconst IS_TOUCH_SUPPORTED = ('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)/* || true */;\nexport default IS_TOUCH_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","const IS_VIBRATE_SUPPORTED = !!navigator?.vibrate;\n\nexport default IS_VIBRATE_SUPPORTED;\n","import IS_MOV_SUPPORTED from './movSupport';\n\nexport type VIDEO_MIME_TYPE = 'image/gif' | 'video/mp4' | 'video/webm' | 'video/quicktime';\nconst VIDEO_MIME_TYPES_SUPPORTED: Set = new Set([\n 'image/gif', // have to display it as video\n 'video/mp4',\n 'video/webm'\n]);\n\nif(IS_MOV_SUPPORTED) {\n VIDEO_MIME_TYPES_SUPPORTED.add('video/quicktime');\n}\n\nexport default VIDEO_MIME_TYPES_SUPPORTED;\n","import {IS_APPLE_MOBILE, IS_SAFARI} from './userAgent';\n\nconst IS_WEBM_SUPPORTED = !!document.createElement('video').canPlayType('video/webm') && !IS_SAFARI && !IS_APPLE_MOBILE;\n\nexport default IS_WEBM_SUPPORTED;\n","const IS_WEBP_SUPPORTED = document.createElement('canvas').toDataURL('image/webp').startsWith('data:image/webp');\n\nexport default IS_WEBP_SUPPORTED;\n","import {IS_FIREFOX} from './userAgent';\n\nconst IS_WEBRTC_SUPPORTED = !!(typeof(RTCPeerConnection) !== 'undefined' && !IS_FIREFOX);\n\nexport default IS_WEBRTC_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WallPaper} from '../layer';\nimport clamp from './number/clamp';\n\nexport type ColorHsla = {\n h: number,\n s: number,\n l: number,\n a: number\n};\n\nexport type ColorRgba = [number, number, number, number];\nexport type ColorRgb = [number, number, number];\n\n/**\n * https://stackoverflow.com/a/54070620/6758968\n * r, g, b in [0, 255]\n * @returns h in [0,360) and s, v in [0,1]\n */\nexport function rgbToHsv(r: number, g: number, b: number): [number, number, number] {\n r /= 255, g /= 255, b /= 255;\n const v = Math.max(r, g, b),\n c = v - Math.min(r, g, b);\n const h = c && ((v === r) ? (g - b ) / c : ((v == g) ? 2 + (b - r) / c : 4 + (r - g) / c));\n return [60 * (h < 0 ? h + 6 : h), v && c / v, v];\n}\n\n/**\n * https://stackoverflow.com/a/54024653/6758968\n * @param h [0, 360]\n * @param s [0, 1]\n * @param v [0, 1]\n * @returns r, g, b in [0, 255]\n */\nexport function hsvToRgb(h: number, s: number, v: number): ColorRgb {\n const f = (n: number, k: number = (n + h / 60) % 6) => Math.round((v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)) * 255);\n return [f(5), f(3), f(1)];\n}\n\n/**\n * @returns h [0, 360], s [0, 100], l [0, 100], a [0, 1]\n */\nexport function rgbaToHsla(r: number, g: number, b: number, a: number = 1): ColorHsla {\n r /= 255, g /= 255, b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h: number, s: number;\n const l = (max + min) / 2;\n\n if(max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: h * 360,\n s: s * 100,\n l: l * 100,\n a\n };\n}\n\n// * https://stackoverflow.com/a/9493060/6758968\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n *\n * @param {number} h The hue [0, 360]\n * @param {number} s The saturation [0, 1]\n * @param {number} l The lightness [0, 1]\n * @return {Array} The RGB representation [0, 255]\n */\nexport function hslaToRgba(h: number, s: number, l: number, a: number): ColorRgba {\n h /= 360, s /= 100, l /= 100;\n let r: number, g: number, b: number;\n\n if(s === 0) {\n r = g = b = l; // achromatic\n } else {\n const hue2rgb = function hue2rgb(p: number, q: number, t: number) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return [r, g, b, a].map((v) => Math.round(v * 255)) as ColorRgba;\n}\n\nexport function hslaStringToRgba(hsla: string) {\n const splitted = hsla.slice(5, -1).split(', ');\n const alpha = +splitted.pop();\n const arr = splitted.map((val) => {\n if(val.endsWith('%')) {\n return +val.slice(0, -1);\n }\n\n return +val;\n });\n\n return hslaToRgba(arr[0], arr[1], arr[2], alpha);\n}\n\nexport function hexaToRgba(hexa: string) {\n const arr: ColorRgba = [] as any;\n const offset = hexa[0] === '#' ? 1 : 0;\n if(hexa.length === (5 + offset)) {\n hexa = (offset ? '#' : '') + '0' + hexa.slice(offset);\n }\n\n if(hexa.length === (3 + offset)) {\n for(let i = offset; i < hexa.length; ++i) {\n arr.push(parseInt(hexa[i] + hexa[i], 16));\n }\n } else if(hexa.length === (4 + offset)) {\n for(let i = offset; i < (hexa.length - 1); ++i) {\n arr.push(parseInt(hexa[i] + hexa[i], 16));\n }\n\n arr.push(parseInt(hexa[hexa.length - 1], 16));\n } else {\n for(let i = offset; i < hexa.length; i += 2) {\n arr.push(parseInt(hexa.slice(i, i + 2), 16));\n }\n }\n\n return arr;\n}\n\nexport function hexToRgb(hex: string) {\n return hexaToRgba(hex.slice(0, 7)) as any as ColorRgb;\n}\n\nexport function hexaToHsla(hexa: string) {\n const rgba = hexaToRgba(hexa);\n return rgbaToHsla(rgba[0], rgba[1], rgba[2], rgba[3]);\n}\n\nexport function rgbaToHexa(rgba: ColorRgba | ColorRgb) {\n return '#' + rgba.map((v) => ('0' + v.toString(16)).slice(-2)).join('');\n}\n\nexport function hslaStringToHexa(hsla: string) {\n return rgbaToHexa(hslaStringToRgba(hsla));\n}\n\nexport function hslaStringToHex(hsla: string) {\n return hslaStringToHexa(hsla).slice(0, -2);\n}\n\n/**\n * @param weight [0, 1]\n */\nexport function mixColors(color1: ColorRgb, color2: ColorRgb, weight: number) {\n const out = new Array(3) as ColorRgb;\n for(let i = 0; i < 3; ++i) {\n const v1 = color1[i], v2 = color2[i];\n out[i] = Math.floor(v2 + (v1 - v2) * weight);\n }\n\n return out;\n}\n\nexport function computePerceivedBrightness(color: ColorRgb) {\n return (color[0] * 0.2126 + color[1] * 0.7152 + color[2] * 0.0722) / 255;\n}\n\nexport function getAverageColor(color1: ColorRgb, color2: ColorRgb): ColorRgb {\n return color1.map((v, i) => Math.round((v + color2[i]) / 2)) as ColorRgb;\n}\n\nexport function getAccentColor(baseHsv: number[], baseColor: ColorRgb, elementColor: ColorRgb): ColorRgb {\n const hsvTemp3 = rgbToHsv(...baseColor);\n const hsvTemp4 = rgbToHsv(...elementColor);\n\n const dist = Math.min(1.5 * hsvTemp3[1] / baseHsv[1], 1);\n\n hsvTemp3[0] = Math.min(360, hsvTemp4[0] - hsvTemp3[0] + baseHsv[0]);\n hsvTemp3[1] = Math.min(1, hsvTemp4[1] * baseHsv[1] / hsvTemp3[1]);\n hsvTemp3[2] = Math.min(1, (hsvTemp4[2] / hsvTemp3[2] + dist - 1) * baseHsv[2] / dist);\n if(hsvTemp3[2] < 0.3) {\n return elementColor;\n }\n return hsvToRgb(...hsvTemp3);\n}\n\nexport function changeColorAccent(baseHsv: number[], accentHsv: number[], color: ColorRgb, isDarkTheme: boolean) {\n const colorHsv = rgbToHsv(...color);\n\n const diffH = Math.min(Math.abs(colorHsv[0] - baseHsv[0]), Math.abs(colorHsv[0] - baseHsv[0] - 360));\n if(diffH > 30) {\n return color;\n }\n\n const dist = Math.min(1.5 * colorHsv[1] / baseHsv[1], 1);\n\n colorHsv[0] = Math.min(360, colorHsv[0] + accentHsv[0] - baseHsv[0]);\n colorHsv[1] = Math.min(1, colorHsv[1] * accentHsv[1] / baseHsv[1]);\n colorHsv[2] = Math.min(1, colorHsv[2] * (1 - dist + dist * accentHsv[2] / baseHsv[2]));\n\n let newColor = hsvToRgb(...colorHsv);\n\n const origBrightness = computePerceivedBrightness(color);\n const newBrightness = computePerceivedBrightness(newColor);\n\n // We need to keep colors lighter in dark themes and darker in light themes\n const needRevertBrightness = isDarkTheme ? origBrightness > newBrightness : origBrightness < newBrightness;\n\n if(needRevertBrightness) {\n const amountOfNew = 0.6;\n const fallbackAmount = (1 - amountOfNew) * origBrightness / newBrightness + amountOfNew;\n newColor = changeBrightness(newColor, fallbackAmount);\n }\n\n return newColor;\n}\n\nexport function changeBrightness(color: ColorRgb, amount: number) {\n return color.map((v) => clamp(Math.round(v * amount), 0, 255)) as ColorRgb;\n}\n\nexport function getHexColorFromTelegramColor(color: number) {\n const hex = (color < 0 ? 0xFFFFFF + color : color).toString(16);\n return '#' + (hex.length >= 6 ? hex : '0'.repeat(6 - hex.length) + hex);\n}\n\nexport function getRgbColorFromTelegramColor(color: number) {\n return hexToRgb(getHexColorFromTelegramColor(color));\n}\n\nexport function getColorsFromWallPaper(wallPaper: WallPaper) {\n return wallPaper.settings ? [\n wallPaper.settings.background_color,\n wallPaper.settings.second_background_color,\n wallPaper.settings.third_background_color,\n wallPaper.settings.fourth_background_color\n ].filter(Boolean).map(getHexColorFromTelegramColor).join(',') : '';\n}\n","export default function compareVersion(v1: string, v2: string): number {\n v1 = v1.split(' ', 1)[0];\n v2 = v2.split(' ', 1)[0];\n const s1 = v1.split('.');\n const s2 = v2.split('.');\n\n for(let i = 0; i < s1.length; ++i) {\n const v1 = +s1[i];\n const v2 = +s2[i];\n if(v1 > v2) return 1;\n else if(v1 < v2) return -1;\n }\n\n return 0;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function blurActiveElement() {\n if((document.activeElement as HTMLInputElement)?.blur) {\n (document.activeElement as HTMLInputElement).blur();\n return true;\n }\n\n return false;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport default function cancelEvent(event?: Event) {\n event ||= window.event;\n if(event) {\n // 'input' event will have cancelable=false, but we still need to preventDefault\n // if(!event.cancelable) {\n // return false;\n // }\n\n // @ts-ignore\n event = event.originalEvent || event;\n\n try {\n if(event.stopPropagation) event.stopPropagation();\n if(event.preventDefault) event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n } catch(err) {}\n }\n\n return false;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// export function findUpClassName(el: any, className: string): T;\nexport default function findUpClassName(el: EventTarget | {closest: (selector: string) => any}, className: string): HTMLElement {\n return (el as any).closest('.' + className);\n /* if(el.classList.contains(className)) return el; // 03.02.2020\n\n while(el.parentElement) {\n el = el.parentElement;\n if(el.classList.contains(className))\n return el;\n }\n return null; */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {doubleRaf} from '../schedulers';\n\nexport default function fixSafariStickyInput(input: HTMLElement) {\n input.style.transform = 'translateY(-99999px)';\n /* input.style.position = 'fixed';\n input.style.top = '-99999px';\n input.style.left = '0'; */\n input.focus();\n\n // setTimeout(() => {\n doubleRaf().then(() => {\n // fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\n /* input.style.position = '';\n input.style.top = ''; */\n input.style.transform = '';\n // fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\n\n /* setTimeout(() => {\n fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4);\n }, 50); */\n });\n // }, 0);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport {IS_MOBILE, IS_SAFARI} from '../../environment/userAgent';\nimport findUpClassName from './findUpClassName';\nimport fixSafariStickyInput from './fixSafariStickyInput';\n\nexport const IS_STICKY_INPUT_BUGGED = IS_SAFARI && IS_MOBILE && IS_TOUCH_SUPPORTED;\n\nif(IS_STICKY_INPUT_BUGGED) {\n const key: 'clientY' | 'pageY' = 'clientY';\n let startY = 0;\n const o = {capture: true, passive: false};\n const onTouchMove = (e: TouchEvent) => {\n const touch = e.touches[0];\n\n // console.log('touchmove y', touch[key], startY);\n\n const scrollable = findUpClassName(touch.target, 'scrollable-y');\n if(scrollable) {\n const y = touch[key];\n const scrolled = startY - y;\n\n /* if(y < startY) {\n startY = y;\n } */\n\n const scrollTop = scrollable.scrollTop;\n const scrollHeight = scrollable.scrollHeight;\n const clientHeight = scrollable.clientHeight;\n const nextScrollTop = scrollTop ? Math.round(scrollTop + scrollable.clientHeight + scrolled) : scrollTop + scrolled;\n // const needCancel = scrollHeight !== clientHeight ? (scrollTop && diff <= 1) || (scrollTop - diff) < 0 : true;\n const needCancel = scrollHeight === clientHeight || nextScrollTop >= scrollHeight || nextScrollTop <= 0;\n if(needCancel) {\n e.preventDefault();\n }\n\n // console.log('touchmove with scrollable', scrollTop, startY, scrolled, nextScrollTop, needCancel, e.cancelable);\n } else {\n e.preventDefault();\n\n // console.log('touchmove no scrollable', e, touch);\n }\n\n // if(e.target === document.documentElement || e.target === document.body) e.preventDefault();\n };\n\n // let el = document.createElement('div');\n // document.body.prepend(el);\n // let a = 0;\n\n // let hasFocus = false;\n let lastFocusOutTimeStamp = 0;\n document.addEventListener('focusin', (e) => {\n if(!(e.target as HTMLElement).classList.contains('is-sticky-input-bugged') || (e.timeStamp - lastFocusOutTimeStamp) < 50/* && document.activeElement === input */) {\n return;\n }\n\n // console.log('focusin', e, e.timeStamp);\n\n // hasFocus = true;\n // document.body.classList.add('is-keyboard-opened');\n\n // el.innerText = 'focusin ' + ++a;\n\n /* a < 2 && */fixSafariStickyInput(e.target as HTMLElement);\n\n document.addEventListener('touchmove', onTouchMove, o);\n document.addEventListener('touchstart', (e) => {\n if(e.touches.length > 1) return;\n const touchStart = e.touches[0];\n\n startY = touchStart[key];\n });\n }, {passive: true});\n\n document.addEventListener('focusout', (e) => {\n // console.log('focusout', e, e.timeStamp);\n document.removeEventListener('touchmove', onTouchMove, o);\n\n lastFocusOutTimeStamp = e.timeStamp;\n\n // el.innerText = 'focusout ' + ++a;\n\n // if(hasFocus) {\n // hasFocus = false;\n // document.body.classList.remove('is-keyboard-opened');\n // }\n }, {passive: true});\n\n document.addEventListener('visibilitychange', () => {\n // console.log('window visibilitychange');\n if(document.activeElement &&\n document.activeElement.classList.contains('is-sticky-input-bugged') &&\n (document.activeElement as HTMLElement).blur) {\n fixSafariStickyInput(document.activeElement as HTMLElement);\n }\n\n /* blurActiveElement();\n window.scrollTo(0, 0);\n setVH(); */\n }, {passive: true});\n}\n\nexport default function fixSafariStickyInputFocusing(input: HTMLElement) {\n if(!IS_STICKY_INPUT_BUGGED) return;\n input.classList.add('is-sticky-input-bugged');\n}\n","let callback: () => Promise;\nexport default function cacheInstallPrompt() {\n window.addEventListener('beforeinstallprompt', (deferredPrompt: any) => {\n callback = async() => {\n deferredPrompt.prompt();\n const {outcome} = await deferredPrompt.userChoice;\n const installed = outcome === 'accepted';\n if(installed) {\n callback = undefined;\n }\n };\n });\n}\n\nexport function getInstallPrompt() {\n return callback;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from '../noop';\nimport pause from '../schedulers/pause';\n\nconst texts = ['b', 'ะฑ'];\ntype FontType = 'text' | 'icons' | 'monospace';\n\nconst cache: {\n [key: string]: {\n [text: string]: Promise\n }\n} = {};\n\nconst fonts: {[type in FontType]: string} = {\n text: 'Roboto',\n icons: 'tgico',\n monospace: 'Roboto Mono'\n};\n\nexport default function loadFonts(types: {[type in FontType]?: string[] | 'all'} = {\n text: texts,\n icons: undefined,\n monospace: texts\n}): Promise {\n if(!('fonts' in document)) {\n return Promise.resolve();\n }\n\n const promises: Promise[] = [];\n for(const type in types) {\n let _texts = types[type as FontType];\n if(_texts === 'all') {\n _texts = texts;\n }\n\n const font = fonts[type as FontType];\n const weights = type === 'icons' ? [500] : [400, 500];\n for(const weight of weights) {\n const _promises = (_texts || [undefined]).map((text) => {\n const key = [weight, '1rem', font].join(' ');\n const promise = (cache[key] ??= {})[text || ''] ??= document.fonts.load(key, text);\n return promise;\n });\n promises.push(..._promises);\n }\n }\n\n return Promise.race([\n Promise.all(promises).catch(noop),\n pause(1000)\n ]);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import I18n from '../../lib/langPack';\n\nexport default function setInnerHTML(elem: Element, html: string | DocumentFragment | Element) {\n setDirection(elem);\n if(typeof(html) === 'string') {\n if(!html) elem.replaceChildren();\n else elem.innerHTML = html;\n } else {\n elem.replaceChildren(html);\n }\n}\n\nexport function setDirection(elem: Element) {\n // if(!I18n.isRTL) {\n elem.setAttribute('dir', 'auto');\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport EventListenerBase from './eventListenerBase';\n\nconst FOCUS_EVENT_NAME = IS_TOUCH_SUPPORTED ? 'touchstart' : 'mousemove';\nconst DO_NOT_IDLE = false;\n\nexport class IdleController extends EventListenerBase<{\n change: (idle: boolean) => void\n}> {\n private _isIdle: boolean;\n\n private focusPromise: Promise;\n private focusResolve: () => void;\n\n constructor() {\n super();\n\n this._isIdle = true;\n this.focusPromise = Promise.resolve();\n this.focusResolve = () => {};\n\n window.addEventListener('blur', () => {\n this.isIdle = true;\n\n window.addEventListener('focus', () => {\n this.isIdle = false;\n }, {once: true});\n });\n\n // * Prevent setting online after reloading page\n window.addEventListener(FOCUS_EVENT_NAME, () => {\n this.isIdle = false;\n }, {once: true, passive: true});\n\n this.addEventListener('change', (idle) => {\n if(idle) {\n this.focusPromise = new Promise((resolve) => {\n this.focusResolve = resolve;\n });\n } else {\n this.focusResolve();\n }\n });\n }\n\n public getFocusPromise() {\n return this.focusPromise;\n }\n\n public get isIdle() {\n return this._isIdle;\n }\n\n public set isIdle(value: boolean) {\n if(this._isIdle === value) {\n return;\n }\n\n if(DO_NOT_IDLE && value) {\n return;\n }\n\n this._isIdle = value;\n this.dispatchEvent('change', value);\n }\n}\n\nconst idleController = new IdleController();\nexport default idleController;\n","export default function clamp(v: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, v));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport EventListenerBase from './eventListenerBase';\n\nexport class OverlayCounter extends EventListenerBase<{\n change: (isActive: boolean) => void\n}> {\n public overlaysActive = 0;\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('change', this.isOverlayActive);\n }\n}\n\nconst overlayCounter = new OverlayCounter();\nexport default overlayCounter;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// * Jolly Cobra's schedulers\nimport {NoneToVoidFunction} from '../types';\n\n/*\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function onTickEnd(cb: NoneToVoidFunction) {\n Promise.resolve().then(cb);\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n} */\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nexport function fastRaf(callback: NoneToVoidFunction) {\n if(!fastRafCallbacks) {\n fastRafCallbacks = [callback];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n fastRafCallbacks = undefined;\n currentCallbacks.forEach((cb) => cb());\n });\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nlet fastRafConventionalCallbacks: NoneToVoidFunction[] | undefined, processing = false;\nexport function fastRafConventional(callback: NoneToVoidFunction) {\n if(!fastRafConventionalCallbacks) {\n fastRafConventionalCallbacks = [callback];\n\n requestAnimationFrame(() => {\n processing = true;\n for(let i = 0; i < fastRafConventionalCallbacks.length; ++i) {\n fastRafConventionalCallbacks[i]();\n }\n\n fastRafConventionalCallbacks = undefined;\n processing = false;\n });\n } else if(processing) {\n callback();\n } else {\n fastRafConventionalCallbacks.push(callback);\n }\n}\n\nlet rafPromise: Promise;\nexport function fastRafPromise() {\n if(rafPromise) return rafPromise;\n\n rafPromise = new Promise((resolve) => fastRaf(() => resolve()));\n rafPromise.then(() => {\n rafPromise = undefined;\n });\n\n return rafPromise;\n}\n\nexport function doubleRaf() {\n return new Promise((resolve) => {\n fastRaf(() => {\n fastRaf(resolve);\n });\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function parseUriParams(uri: string, splitted = uri.split('?')) {\n return parseUriParamsLine(splitted?.[1]);\n}\n\nexport function parseUriParamsLine(line: string) {\n const params: any = {};\n if(!line) {\n return params;\n }\n\n line.split('&').forEach((item) => {\n params[item.split('=')[0]] = decodeURIComponent(item.split('=')[1]);\n });\n\n return params;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppTheme} from '../config/state';\nimport type {Theme} from '../layer';\nimport type AppBackgroundTab from '../components/sidebarLeft/tabs/background';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport rootScope from '../lib/rootScope';\nimport {changeColorAccent, ColorRgb, getAccentColor, getAverageColor, getHexColorFromTelegramColor, getRgbColorFromTelegramColor, hexToRgb, hslaStringToHex, hsvToRgb, mixColors, rgbaToHexa, rgbaToHsla, rgbToHsv} from './color';\nimport {MOUNT_CLASS_TO} from '../config/debug';\n\ntype AppColorName = 'primary-color' | 'message-out-primary-color' |\n 'surface-color' | 'danger-color' | 'primary-text-color' |\n 'secondary-text-color' | 'message-out-background-color' |\n 'saved-color';\ntype AppColor = {\n rgb?: boolean,\n light?: boolean,\n lightFilled?: boolean,\n dark?: boolean,\n darkRgb?: boolean,\n darkFilled?: boolean\n};\n\nconst appColorMap: {[name in AppColorName]: AppColor} = {\n 'primary-color': {\n rgb: true,\n light: true,\n lightFilled: true,\n dark: true,\n darkRgb: true\n },\n 'message-out-primary-color': {\n lightFilled: true\n },\n 'surface-color': {\n rgb: true\n },\n 'danger-color': {\n light: true,\n dark: true\n },\n 'primary-text-color': {\n rgb: true\n },\n 'secondary-text-color': {\n light: true,\n lightFilled: true\n },\n 'message-out-background-color': {\n light: true,\n lightFilled: true,\n dark: true,\n darkFilled: true\n },\n 'saved-color': {\n lightFilled: true\n }\n};\n\nconst colorMap: {\n [name in AppTheme['name']]?: {\n [name in AppColorName]?: string\n }\n} = {\n day: {\n 'primary-color': '#3390ec',\n 'message-out-primary-color': '#4fae4e',\n 'surface-color': '#ffffff',\n 'danger-color': '#df3f40',\n 'primary-text-color': '#000000',\n 'secondary-text-color': '#707579',\n 'saved-color': '#359AD4'\n },\n night: {\n 'primary-color': '#8774E1',\n 'message-out-primary-color': '#8774E1',\n 'surface-color': '#212121',\n 'danger-color': '#ff595a',\n 'primary-text-color': '#ffffff',\n 'secondary-text-color': '#aaaaaa',\n 'saved-color': '#8774E1'\n }\n};\n\nexport class ThemeController {\n private themeColor: string;\n private _themeColorElem: Element;\n private systemTheme: AppTheme['name'];\n private styleElement: HTMLStyleElement;\n public AppBackgroundTab: typeof AppBackgroundTab;\n\n constructor() {\n rootScope.addEventListener('theme_change', () => {\n this.setTheme();\n });\n\n // rootScope.addEventListener('settings_updated', ())\n }\n\n private get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n // const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n // const newTheme = this.getTheme();\n\n if(rootScope.myId) {\n rootScope.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public applyHighlightningColor() {\n let hsla: string;\n const theme = this.getTheme();\n if(theme.settings?.highlightningColor) {\n hsla = theme.settings.highlightningColor;\n document.documentElement.style.setProperty('--message-highlightning-color', hsla);\n } else {\n document.documentElement.style.removeProperty('--message-highlightning-color');\n }\n\n if(!IS_TOUCH_SUPPORTED && hsla) {\n this.themeColor = hslaStringToHex(hsla);\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n const theme = this.getTheme();\n this.applyTheme(theme);\n\n let style = this.styleElement;\n if(!style) {\n style = this.styleElement = document.createElement('style');\n document.head.append(style);\n }\n\n const e = document.createElement('div');\n this.applyTheme(rootScope.settings.themes.find((theme) => theme.name === 'night'), e);\n style.textContent = `.night {${e.style.cssText}}`;\n\n this.applyHighlightningColor();\n }\n\n public async switchTheme(name: AppTheme['name']) {\n await rootScope.managers.appStateManager.setByKey('settings.theme', name);\n rootScope.dispatchEvent('theme_change');\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: AppTheme['name'] = rootScope.settings.theme === 'system' ? this.systemTheme : rootScope.settings.theme) {\n return rootScope.settings.themes.find((t) => t.name === name);\n }\n\n // theme applier\n private bindColorApplier(options: Pick[0], 'element' | 'isNight'>) {\n const appliedColors: Set = new Set();\n return {\n applyAppColor: (_options: Omit[0], keyof typeof options>) => {\n appliedColors.add(_options.name);\n return this.applyAppColor({..._options, ...options});\n },\n finalize: () => {\n const isNight = options.isNight;\n for(const name in appColorMap) {\n if(!appliedColors.has(name as AppColorName)) {\n this.applyAppColor({\n name: name as AppColorName,\n hex: colorMap[isNight ? 'night' : 'day'][name as AppColorName],\n ...options\n });\n }\n }\n }\n };\n };\n\n private applyAppColor({\n name,\n hex,\n element,\n lightenAlpha = 0.08,\n darkenAlpha = lightenAlpha,\n mixColor,\n isNight\n }: {\n name: AppColorName,\n hex: string,\n element: HTMLElement,\n lightenAlpha?: number\n darkenAlpha?: number,\n mixColor?: ColorRgb,\n isNight?: boolean\n }) {\n const appColor = appColorMap[name];\n const rgb = hexToRgb(hex);\n const hsla = rgbaToHsla(...rgb);\n\n mixColor ??= hexToRgb(colorMap[isNight ? 'night' : 'day']['surface-color']);\n const lightenedRgb = mixColors(rgb, mixColor, lightenAlpha);\n\n const darkenedHsla: typeof hsla = {\n ...hsla,\n l: hsla.l - darkenAlpha * 100\n };\n\n const properties: [string, string][] = [\n [name, hex],\n appColor.rgb && [name + '-rgb', rgb.join(',')],\n appColor.light && ['light-' + name, `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${lightenAlpha})`],\n appColor.lightFilled && ['light-filled-' + name, rgbaToHexa(lightenedRgb)],\n appColor.dark && ['dark-' + name, `hsl(${darkenedHsla.h}, ${darkenedHsla.s}%, ${darkenedHsla.l}%)`]\n // appColor.darkFilled && ['dark-' + name, `hsl(${darkenedHsla.h}, ${darkenedHsla.s}%, ${darkenedHsla.l}%)`]\n ];\n\n properties.filter(Boolean).forEach(([name, value]) => {\n element.style.setProperty('--' + name, value);\n });\n }\n\n public async applyNewTheme(theme: Theme) {\n const isNight = this.isNightTheme(theme);\n const currentTheme = this.getTheme();\n const themes = rootScope.settings.themes;\n const themeSettings = theme.settings.find((themeSettings) => themeSettings.base_theme._ === (isNight ? 'baseThemeNight' : 'baseThemeClassic'));\n const newAppTheme: AppTheme = {\n ...theme,\n name: currentTheme.name,\n settings: {\n ...themeSettings,\n highlightningColor: ''\n }\n };\n\n await this.AppBackgroundTab.setBackgroundDocument(themeSettings.wallpaper, newAppTheme.settings);\n themes[themes.indexOf(currentTheme)] = newAppTheme;\n await rootScope.managers.appStateManager.setByKey('settings.themes', rootScope.settings.themes);\n rootScope.dispatchEvent('theme_change');\n }\n\n private isNightTheme(theme: Theme | AppTheme) {\n return (theme as AppTheme).name === 'night' || this.isNight();\n }\n\n public applyTheme(theme: Theme | AppTheme, element = document.documentElement) {\n const isNight = this.isNightTheme(theme);\n const themeSettings = Array.isArray(theme.settings) ?\n theme.settings.find((settings) => settings.base_theme._ === (isNight ? 'baseThemeNight' : 'baseThemeClassic')) :\n theme.settings;\n const baseColors = colorMap[isNight ? 'night' : 'day'];\n\n let hsvTemp1 = rgbToHsv(...hexToRgb(baseColors['primary-color'])); // primary base\n let hsvTemp2 = rgbToHsv(...getRgbColorFromTelegramColor(themeSettings.accent_color)); // new primary\n\n const newAccentRgb = changeColorAccent(\n hsvTemp1,\n hsvTemp2,\n hexToRgb(baseColors['primary-color']),\n !isNight\n );\n const newAccentHex = rgbaToHexa(newAccentRgb);\n\n const {applyAppColor, finalize} = this.bindColorApplier({element, isNight});\n\n applyAppColor({\n name: 'primary-color',\n hex: newAccentHex,\n darkenAlpha: 0.04\n });\n\n applyAppColor({\n name: 'saved-color',\n hex: newAccentHex,\n lightenAlpha: 0.64,\n mixColor: [255, 255, 255]\n });\n\n if(!themeSettings.message_colors?.length) {\n return;\n }\n\n const messageLightenAlpha = isNight ? 0.92 : 0.12;\n const baseMessageColor = hexToRgb(baseColors['message-out-primary-color']);\n hsvTemp1 = rgbToHsv(...baseMessageColor);\n const baseMessageOutBackgroundColor = mixColors(baseMessageColor, hexToRgb(baseColors['surface-color']), messageLightenAlpha);\n\n const firstColor = getRgbColorFromTelegramColor(themeSettings.message_colors[0]);\n\n let myMessagesAccent = firstColor;\n if(themeSettings.message_colors.length > 1) {\n // const w = getAccentColor(hsvTemp1, baseMessageOutBackgroundColor, myMessagesAccent);\n\n themeSettings.message_colors.slice(1).forEach((nextColor) => {\n myMessagesAccent = getAverageColor(myMessagesAccent, getRgbColorFromTelegramColor(nextColor));\n });\n\n myMessagesAccent = getAccentColor(hsvTemp1, baseMessageOutBackgroundColor, myMessagesAccent);\n\n // console.log('www', rgbaToHexa(w), rgbaToHexa(myMessagesAccent));\n }\n\n const o = myMessagesAccent;\n hsvTemp2 = rgbToHsv(...o);\n\n // const c = changeColorAccent(\n // hsvTemp1,\n // hsvTemp2,\n // baseMessageOutBackgroundColor\n // );\n\n // console.log(o, c, rgbaToHexa(o), rgbaToHexa(c));\n\n const accentColor2 = themeSettings.outbox_accent_color !== undefined && rgbToHsv(...getRgbColorFromTelegramColor(themeSettings.outbox_accent_color));\n\n const newMessageOutBackgroundColor = mixColors(myMessagesAccent, hexToRgb(baseColors['surface-color']), messageLightenAlpha);\n\n applyAppColor({\n name: 'message-out-background-color',\n hex: rgbaToHexa(newMessageOutBackgroundColor),\n lightenAlpha: messageLightenAlpha\n });\n\n applyAppColor({\n name: 'message-out-primary-color',\n hex: isNight ? '#ffffff' : rgbaToHexa(accentColor2 ? hsvToRgb(...accentColor2) : myMessagesAccent),\n mixColor: newMessageOutBackgroundColor\n });\n\n // if(accentColor2) {\n // console.log(rgbaToHexa(myMessagesAccent), rgbaToHexa(hsvToRgb(...accentColor2)));\n // }\n\n finalize();\n }\n}\n\nconst themeController = new ThemeController();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.themeController = themeController);\nexport default themeController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function setWorkerProxy() {\n // * hook worker constructor to set search parameters (test, debug, etc)\n const workerHandler = {\n construct(target: any, args: any) {\n let url = args[0] + '';\n if(url.indexOf('blob:') !== 0) {\n url += location.search;\n }\n\n return new target(url);\n }\n };\n\n [\n Worker,\n typeof(SharedWorker) !== 'undefined' && SharedWorker\n ].filter(Boolean).forEach((w) => {\n window[w.name as any] = new Proxy(w, workerHandler);\n });\n}\n\nsetWorkerProxy();\n","const IS_INSTALL_PROMPT_SUPPORTED = 'onbeforeinstallprompt' in window;\nexport default IS_INSTALL_PROMPT_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from './config/app';\nimport blurActiveElement from './helpers/dom/blurActiveElement';\nimport cancelEvent from './helpers/dom/cancelEvent';\nimport {IS_STICKY_INPUT_BUGGED} from './helpers/dom/fixSafariStickyInputFocusing';\nimport loadFonts from './helpers/dom/loadFonts';\nimport IS_EMOJI_SUPPORTED from './environment/emojiSupport';\nimport {IS_ANDROID, IS_APPLE, IS_APPLE_MOBILE, IS_FIREFOX, IS_MOBILE, IS_MOBILE_SAFARI, IS_SAFARI} from './environment/userAgent';\nimport './materialize.scss';\nimport './scss/style.scss';\nimport pause from './helpers/schedulers/pause';\nimport setWorkerProxy from './helpers/setWorkerProxy';\nimport toggleAttributePolyfill from './helpers/dom/toggleAttributePolyfill';\nimport rootScope from './lib/rootScope';\nimport IS_TOUCH_SUPPORTED from './environment/touchSupport';\nimport I18n from './lib/langPack';\nimport './helpers/peerIdPolyfill';\nimport './lib/polyfill';\nimport apiManagerProxy from './lib/mtproto/mtprotoworker';\nimport getProxiedManagers from './lib/appManagers/getProxiedManagers';\nimport themeController from './helpers/themeController';\nimport overlayCounter from './helpers/overlayCounter';\nimport singleInstance from './lib/mtproto/singleInstance';\nimport {parseUriParamsLine} from './helpers/string/parseUriParams';\nimport Modes from './config/modes';\nimport {AuthState} from './types';\nimport {IS_BETA} from './config/debug';\nimport IS_INSTALL_PROMPT_SUPPORTED from './environment/installPrompt';\nimport cacheInstallPrompt from './helpers/dom/installPrompt';\n// import appNavigationController from './components/appNavigationController';\n\ndocument.addEventListener('DOMContentLoaded', async() => {\n toggleAttributePolyfill();\n\n // polyfill for replaceChildren\n if((Node as any).prototype.replaceChildren === undefined) {\n (Node as any).prototype.replaceChildren = function(...nodes: any[]) {\n this.textContent = '';\n // while(this.lastChild) {\n // this.removeChild(this.lastChild);\n // }\n if(nodes) {\n this.append(...nodes);\n }\n }\n }\n\n rootScope.managers = getProxiedManagers();\n\n const manifest = document.getElementById('manifest') as HTMLLinkElement;\n manifest.href = `site${IS_APPLE && !IS_APPLE_MOBILE ? '_apple' : ''}.webmanifest?v=jw3mK7G9Aq`;\n\n singleInstance.start();\n\n // We listen to the resize event (https://css-tricks.com/the-trick-to-viewport-units-on-mobile/)\n const w = window.visualViewport || window; // * handle iOS keyboard\n let setViewportVH = false/* , hasFocus = false */;\n let lastVH: number;\n const setVH = () => {\n const vh = (setViewportVH && !overlayCounter.isOverlayActive ? (w as VisualViewport).height || (w as Window).innerHeight : window.innerHeight) * 0.01;\n if(lastVH === vh) {\n return;\n } else if(IS_TOUCH_SUPPORTED && lastVH < vh && (vh - lastVH) > 1) {\n blurActiveElement(); // (Android) fix blurring inputs when keyboard is being closed (e.g. closing keyboard by back arrow and touching a bubble)\n }\n\n lastVH = vh;\n\n // const vh = document.documentElement.scrollHeight * 0.01;\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n // console.log('setVH', vh, setViewportVH ? w : window);\n\n /* if(setViewportVH && userAgent.isSafari && touchSupport.isTouchSupported && document.activeElement && (document.activeElement as HTMLElement).blur) {\n const rect = document.activeElement.getBoundingClientRect();\n if(rect.top < 0 || rect.bottom >= (w as any).height) {\n fastSmoothScroll(findUpClassName(document.activeElement, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'center', 4, undefined, FocusDirection.Static);\n }\n } */\n };\n\n setWorkerProxy;\n\n // const [_, touchSupport, userAgent, _rootScope, _appStateManager, _I18n, __/* , ___ */] = await Promise.all([\n // import('./lib/polyfill'),\n // import('./environment/touchSupport'),\n // import('./environment/userAgent'),\n // import('./lib/rootScope'),\n // import('./lib/appManagers/appStateManager'),\n // import('./lib/langPack'),\n // import('./helpers/peerIdPolyfill'),\n // // import('./helpers/cacheFunctionPolyfill')\n // ]);\n\n /* const {IS_TOUCH_SUPPORTED} = touchSupport;\n const {IS_FIREFOX, IS_MOBILE, IS_APPLE, IS_SAFARI, IS_APPLE_MOBILE, IS_ANDROID} = userAgent;\n const rootScope = _rootScope.default;\n const appStateManager = _appStateManager.default;\n const I18n = _I18n.default; */\n\n window.addEventListener('resize', setVH);\n setVH();\n\n if(IS_STICKY_INPUT_BUGGED) {\n const toggleResizeMode = () => {\n setViewportVH = tabId === 1 && IS_STICKY_INPUT_BUGGED && !overlayCounter.isOverlayActive;\n setVH();\n\n if(w !== window) {\n if(setViewportVH) {\n window.removeEventListener('resize', setVH);\n w.addEventListener('resize', setVH);\n } else {\n w.removeEventListener('resize', setVH);\n window.addEventListener('resize', setVH);\n }\n }\n };\n\n let tabId: number;\n (window as any).onImTabChange = (id: number) => {\n const wasTabId = tabId !== undefined;\n tabId = id;\n\n if(wasTabId || tabId === 1) {\n toggleResizeMode();\n }\n };\n\n overlayCounter.addEventListener('change', () => {\n toggleResizeMode();\n });\n }\n\n if(IS_FIREFOX && !IS_EMOJI_SUPPORTED) {\n document.addEventListener('dragstart', (e) => {\n const target = e.target as HTMLElement;\n if(target.tagName === 'IMG' && target.classList.contains('emoji')) {\n cancelEvent(e);\n return false;\n }\n });\n }\n\n if(IS_EMOJI_SUPPORTED) {\n document.documentElement.classList.add('native-emoji');\n }\n\n // prevent firefox image dragging\n document.addEventListener('dragstart', (e) => {\n if((e.target as HTMLElement)?.tagName === 'IMG') {\n e.preventDefault();\n return false;\n }\n });\n\n // restrict contextmenu on images (e.g. webp stickers)\n document.addEventListener('contextmenu', (e) => {\n if((e.target as HTMLElement).tagName === 'IMG' && !(window as any).appMediaViewer) {\n cancelEvent(e);\n }\n });\n\n if(IS_FIREFOX) {\n document.documentElement.classList.add('is-firefox', 'no-backdrop');\n }\n\n if(IS_MOBILE) {\n document.documentElement.classList.add('is-mobile');\n }\n\n if(IS_APPLE) {\n if(IS_SAFARI) {\n document.documentElement.classList.add('is-safari');\n }\n\n // document.documentElement.classList.add('emoji-supported');\n\n if(IS_APPLE_MOBILE) {\n document.documentElement.classList.add('is-ios');\n } else {\n document.documentElement.classList.add('is-mac');\n }\n } else if(IS_ANDROID) {\n document.documentElement.classList.add('is-android');\n\n // force losing focus on input blur\n // focusin and focusout are not working on mobile\n\n const onInResize = () => {\n hasFocus = true;\n window.addEventListener('resize', onOutResize, {once: true});\n };\n\n const onOutResize = () => {\n hasFocus = false;\n blurActiveElement();\n };\n\n let hasFocus = false;\n document.addEventListener('touchend', (e) => {\n const input = (e.target as HTMLElement).closest('[contenteditable=\"true\"], input');\n if(!input) {\n return;\n }\n\n if(document.activeElement !== input && !hasFocus) {\n console.log('input click', e, document.activeElement, input, input.matches(':focus'));\n window.addEventListener('resize', onInResize, {once: true});\n }\n });\n }\n\n if(!IS_TOUCH_SUPPORTED) {\n document.documentElement.classList.add('no-touch');\n } else {\n document.documentElement.classList.add('is-touch');\n /* document.addEventListener('touchmove', (event: any) => {\n event = event.originalEvent || event;\n if(event.scale && event.scale !== 1) {\n event.preventDefault();\n }\n }, {capture: true, passive: false}); */\n }\n\n if(IS_INSTALL_PROMPT_SUPPORTED) {\n cacheInstallPrompt();\n }\n\n const perf = performance.now();\n\n // await pause(1000000);\n\n const langPromise = I18n.getCacheLangPack();\n\n const [stateResult, langPack] = await Promise.all([\n // loadState(),\n apiManagerProxy.sendState().then(([stateResult]) => stateResult),\n langPromise\n ]);\n I18n.setTimeFormat(stateResult.state.settings.timeFormat);\n\n rootScope.managers.rootScope.getPremium().then((isPremium) => {\n rootScope.premium = isPremium;\n });\n\n themeController.setThemeListener();\n\n if(langPack.appVersion !== App.langPackVersion) {\n I18n.getLangPack(langPack.lang_code);\n }\n\n /**\n * won't fire if font is loaded too fast\n */\n function fadeInWhenFontsReady(elem: HTMLElement, promise: Promise) {\n elem.style.opacity = '0';\n\n promise.then(() => {\n window.requestAnimationFrame(() => {\n elem.style.opacity = '';\n });\n });\n }\n\n console.log('got state, time:', performance.now() - perf);\n\n if(langPack.lang_code === 'ar' && IS_BETA && false) {\n document.body.classList.add('is-rtl');\n document.documentElement.dir = 'rtl';\n document.documentElement.lang = langPack.lang_code;\n I18n.setRTL(true);\n } else {\n document.documentElement.dir = 'ltr';\n }\n\n let authState = stateResult.state.authState;\n\n const hash = location.hash;\n const splitted = hash.split('?');\n const params = parseUriParamsLine(splitted[1] ?? splitted[0].slice(1));\n if(params.tgWebAuthToken && authState._ !== 'authStateSignedIn') {\n const data: AuthState.signImport['data'] = {\n token: params.tgWebAuthToken,\n dcId: +params.tgWebAuthDcId,\n userId: params.tgWebAuthUserId.toUserId(),\n isTest: params.tgWebAuthTest !== undefined && !!+params.tgWebAuthTest,\n tgAddr: params.tgaddr\n };\n\n if(data.isTest !== Modes.test) {\n const urlSearchParams = new URLSearchParams(location.search);\n if(+params.tgWebAuthTest) {\n urlSearchParams.set('test', '1');\n } else {\n urlSearchParams.delete('test');\n }\n\n location.search = urlSearchParams.toString();\n return;\n }\n\n rootScope.managers.appStateManager.pushToState('authState', authState = {_: 'authStateSignImport', data});\n\n // appNavigationController.overrideHash('?tgaddr=' + encodeURIComponent(params.tgaddr));\n }\n\n if(authState._ !== 'authStateSignedIn'/* || 1 === 1 */) {\n console.log('Will mount auth page:', authState._, Date.now() / 1000);\n\n const el = document.getElementById('auth-pages');\n let scrollable: HTMLElement;\n if(el) {\n scrollable = el.querySelector('.scrollable') as HTMLElement;\n if((!IS_TOUCH_SUPPORTED || IS_MOBILE_SAFARI)) {\n scrollable.classList.add('no-scrollbar');\n }\n\n // * don't remove this line\n scrollable.style.opacity = '0';\n\n const placeholder = document.createElement('div');\n placeholder.classList.add('auth-placeholder');\n\n scrollable.prepend(placeholder);\n scrollable.append(placeholder.cloneNode());\n }\n\n try {\n await Promise.all([\n import('./lib/mtproto/telegramMeWebManager'),\n import('./lib/mtproto/webPushApiManager')\n ]).then(([meModule, pushModule]) => {\n meModule.default.setAuthorized(false);\n pushModule.default.forceUnsubscribe();\n });\n } catch(err) {\n\n }\n\n let pagePromise: Promise;\n // langPromise.then(async() => {\n switch(authState._) {\n case 'authStateSignIn':\n pagePromise = (await import('./pages/pageSignIn')).default.mount();\n break;\n case 'authStateSignQr':\n pagePromise = (await import('./pages/pageSignQR')).default.mount();\n break;\n case 'authStateAuthCode':\n pagePromise = (await import('./pages/pageAuthCode')).default.mount(authState.sentCode);\n break;\n case 'authStatePassword':\n pagePromise = (await import('./pages/pagePassword')).default.mount();\n break;\n case 'authStateSignUp':\n pagePromise = (await import('./pages/pageSignUp')).default.mount(authState.authCode);\n break;\n case 'authStateSignImport':\n pagePromise = (await import('./pages/pageSignImport')).default.mount(authState.data);\n break;\n }\n // });\n\n if(scrollable) {\n // wait for text appear\n if(pagePromise) {\n await pagePromise;\n }\n\n const promise = 'fonts' in document ?\n Promise.race([\n pause(1000),\n document.fonts.ready\n ]) :\n Promise.resolve();\n fadeInWhenFontsReady(scrollable, promise);\n }\n\n /* setTimeout(async() => {\n (await import('./pages/pageAuthCode')).default.mount({\n \"_\": \"auth.sentCode\",\n \"pFlags\": {},\n \"flags\": 6,\n \"type\": {\n \"_\": \"auth.sentCodeTypeSms\",\n \"length\": 5\n },\n \"phone_code_hash\": \"\",\n \"next_type\": {\n \"_\": \"auth.codeTypeCall\"\n },\n \"timeout\": 120,\n \"phone_number\": \"\"\n });\n\n (await import('./pages/pageSignQR')).default.mount();\n\n (await import('./pages/pagePassword')).default.mount();\n\n (await import('./pages/pageSignUp')).default.mount({\n \"phone_code_hash\": \"\",\n \"phone_number\": \"\"\n });\n }, 500); */\n } else {\n console.log('Will mount IM page:', Date.now() / 1000);\n fadeInWhenFontsReady(document.getElementById('main-columns'), loadFonts());\n (await import('./pages/pageIm')).default.mount();\n }\n});\n","export default function toggleAttributePolyfill() {\n if(!Element.prototype.toggleAttribute) {\n Element.prototype.toggleAttribute = function(name, force) {\n if(force !== void 0) force = !!force;\n\n if(this.hasAttribute(name)) {\n if(force) return true;\n\n this.removeAttribute(name);\n return false;\n }\n if(force === false) return false;\n\n this.setAttribute(name, '');\n return true;\n };\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport class AppRuntimeManager {\n public reload() {\n try {\n location.reload();\n } catch(e) {};\n\n // if(window.chrome && chrome.runtime && chrome.runtime.reload) {\n // chrome.runtime.reload();\n // }\n }\n\n public close() {\n try {\n window.close();\n } catch(e) {}\n }\n\n /**\n * Better to call from event\n */\n public focus() {\n // // @ts-ignore\n // if(window.navigator.mozApps && document.hidden) {\n // // Get app instance and launch it to bring app to foreground\n // // @ts-ignore\n // window.navigator.mozApps.getSelf().onsuccess = function() {\n // this.result.launch();\n // };\n // } else {\n // // @ts-ignore\n // if(window.chrome && chrome.app && chrome.app.window) {\n // // @ts-ignore\n // chrome.app.window.current().focus();\n // }\n\n window.focus();\n // }\n }\n}\n\nconst appRuntimeManager = new AppRuntimeManager();\nexport default appRuntimeManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type createManagers from './createManagers';\nimport {ModifyFunctionsToAsync} from '../../types';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\nimport {AckedResult} from '../mtproto/superMessagePort';\nimport noop from '../../helpers/noop';\nimport dT from '../../helpers/dT';\nimport DEBUG from '../../config/debug';\n\n// let stats: {\n// [manager: string]: {\n// [method: string]: {\n// times: number[],\n// byArgs: {\n// [args: string]: number[]\n// }\n// }\n// }\n// } = {};\n\n// let sentCount = 0;\n// let sentMethods: {[key: string]: number} = {};\n// let sentMethods2: {[key: string]: number} = {};\n// function collectStats(manager: string, method: string, args: any[], promise: Promise) {\n// ++sentCount;\n\n// const key = [manager, method].join('-');\n// if(!sentMethods[key]) sentMethods[key] = 0;\n// ++sentMethods[key];\n\n// const key2 = [('00000' + sentCount).slice(-5), key].join('-');\n\n// const byManager = stats[manager] ??= {};\n// const byMethod = byManager[method] ??= {times: [], byArgs: {}};\n\n// const perf = performance.now();\n// promise.catch(noop).finally(() => {\n// const time = performance.now() - perf;\n// byMethod.times.push(time);\n\n// sentMethods2[key2] = time;\n\n// try {\n// const argsString = JSON.stringify(args);\n// byMethod.byArgs[argsString].push(time);\n// } catch(err) {}\n// });\n// }\n\n// setInterval(() => {\n// console.log(dT(), '[PROXY] stats', stats, sentCount, sentMethods, sentMethods2);\n// sentCount = 0;\n// stats = {};\n// sentMethods = {};\n// sentMethods2 = {};\n// }, 2000);\n\nconst DEBUG_MANAGER_REQUESTS: {[managerName: string]: Set} = {};\nif(DEBUG) {\n (window as any).DEBUG_MANAGER_REQUESTS = DEBUG_MANAGER_REQUESTS;\n}\n\nfunction createProxy(/* source: T, */name: string, ack?: boolean) {\n const proxy = new Proxy({}, {\n get: (target, p, receiver) => {\n // console.log('get', target, p, receiver);\n // @ts-ignore\n // const value = source[p];\n // if(typeof(value) !== 'function') {\n // return value;\n // }\n\n return (...args: any[]) => {\n const promise = apiManagerProxy.invoke('manager', {\n name,\n method: p as string,\n args\n }, ack as any);\n\n if(DEBUG) {\n if(DEBUG_MANAGER_REQUESTS[name]?.has(p as any)) {\n console.warn('manager request', name, p, args);\n }\n }\n\n // collectStats(name, p as string, args, promise);\n\n return promise;\n\n // @ts-ignore\n // return Promise.resolve(value.call(source, ...args));\n };\n }\n });\n\n return proxy;\n}\n\ntype AA = {\n [key in keyof T]: T[key] extends (...args: infer A) => infer R ? (...args: A) => Promise>> : never\n};\n\ntype T = Awaited>;\ntype ProxiedManagers = {\n [name in keyof T]?: ModifyFunctionsToAsync;\n} & {\n acknowledged?: {\n [name in keyof T]?: AA;\n }\n};\n\nfunction createProxyProxy(proxied: any, ack?: boolean) {\n return new Proxy(proxied, {\n get: (target, p, receiver) => {\n // @ts-ignore\n return target[p] ??= createProxy(p as string, ack);\n }\n });\n}\n\nlet proxied: ProxiedManagers;\nexport default function getProxiedManagers() {\n if(proxied) {\n return proxied;\n }\n\n proxied = createProxyProxy({}, false);\n proxied.acknowledged = createProxyProxy({}, true);\n return proxied;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport Modes from '../../config/modes';\nimport makeError from '../../helpers/makeError';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {logger} from '../logger';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\n */\nexport type IDBIndex = {\n indexName: string,\n keyPath: string,\n objectParameters: IDBIndexParameters\n};\n\nexport type IDBStore = {\n name: string,\n indexes?: IDBIndex[]\n};\n\nexport type IDBOptions = {\n name?: string,\n storeName: string,\n stores?: IDBStore[],\n version?: number\n};\n\nconst DEBUG = false;\n\nexport class IDB {\n private static INSTANCES: IDB[] = [];\n private openDbPromise: Promise;\n private db: IDBDatabase;\n private storageIsAvailable: boolean;\n private log: ReturnType;\n private name: string;\n private version: number;\n private stores: IDBStore[];\n\n constructor(db: Database) {\n safeAssign(this, db);\n\n if(Modes.test) {\n this.name += '_test';\n }\n\n this.storageIsAvailable = true;\n this.log = logger(['IDB', db.name].join('-'));\n this.log('constructor');\n\n this.openDatabase(true);\n\n IDB.INSTANCES.push(this);\n }\n\n public isAvailable() {\n return this.storageIsAvailable;\n }\n\n public openDatabase(createNew = false): Promise {\n if(this.openDbPromise && !createNew) {\n return this.openDbPromise;\n }\n\n const createIndexes = (os: IDBObjectStore, store: IDBStore) => {\n const indexNames = Array.from(os.indexNames);\n for(const indexName of indexNames) {\n os.deleteIndex(indexName);\n }\n\n if(!store.indexes?.length) {\n return;\n }\n\n for(const index of store.indexes) {\n if(os.indexNames.contains(index.indexName)) {\n continue;\n }\n\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\n }\n };\n\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\n const os = db.createObjectStore(store.name);\n createIndexes(os, store);\n };\n\n try {\n var request = indexedDB.open(this.name, this.version);\n\n if(!request) {\n return Promise.reject();\n }\n } catch(error) {\n this.log.error('error opening db', (error as Error).message);\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n let finished = false;\n setTimeout(() => {\n if(!finished) {\n request.onerror(makeError('IDB_CREATE_TIMEOUT') as Event);\n }\n }, 3000);\n\n return this.openDbPromise = new Promise((resolve, reject) => {\n request.onsuccess = (event) => {\n finished = true;\n const db = request.result;\n let calledNew = false;\n\n this.log('Opened');\n\n db.onerror = (error) => {\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', error);\n reject(error);\n };\n\n db.onclose = (e) => {\n this.log.error('closed:', e);\n !calledNew && this.openDatabase();\n };\n\n db.onabort = (e) => {\n this.log.error('abort:', e);\n const transaction = e.target as IDBTransaction;\n\n this.openDatabase(calledNew = true);\n\n if(transaction.onerror) {\n transaction.onerror(e);\n }\n\n db.close();\n };\n\n db.onversionchange = (e) => {\n this.log.error('onversionchange, lol?');\n };\n\n resolve(this.db = db);\n };\n\n request.onerror = (event) => {\n finished = true;\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', event);\n reject(event);\n };\n\n request.onupgradeneeded = (event) => {\n finished = true;\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\n\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n this.stores.forEach((store) => {\n /* if(db.objectStoreNames.contains(store.name)) {\n //if(event.oldVersion === 1) {\n db.deleteObjectStore(store.name);\n //}\n } */\n\n if(!db.objectStoreNames.contains(store.name)) {\n createObjectStore(db, store);\n } else {\n const txn = target.transaction;\n const os = txn.objectStore(store.name);\n createIndexes(os, store);\n }\n });\n };\n });\n }\n\n public static create>(db: T) {\n return this.INSTANCES.find((instance) => instance.name === db.name) ?? new IDB(db);\n }\n\n public static closeDatabases(preserve?: IDB) {\n this.INSTANCES.forEach((storage) => {\n if(preserve && preserve === storage) {\n return;\n }\n\n const db = storage.db;\n if(db) {\n db.onclose = () => {};\n db.close();\n }\n });\n }\n}\n\nexport default class IDBStorage, StoreName extends string = T['stores'][0]['name']> {\n private log: ReturnType;\n private storeName: T['stores'][0]['name'];\n private idb: IDB;\n\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\n this.storeName = storeName;\n this.log = logger(['IDB', db.name, storeName].join('-'));\n this.idb = IDB.create(db);\n }\n\n /**\n * ! WARNING ! function requires at least one opened connection\n */\n /* public static clearObjectStores() {\n const storage = this.STORAGES[0];\n this.closeDatabases(storage);\n\n const names = Array.from(storage.db.objectStoreNames);\n const promises = names.map((name) => storage.clear(name));\n return Promise.all(promises);\n } */\n\n /* public static deleteDatabase() {\n this.closeDatabases();\n\n const storages = this.STORAGES;\n const dbNames = Array.from(new Set(storages.map((storage) => storage.name)));\n const promises = dbNames.map((dbName) => {\n return new Promise((resolve, reject) => {\n const deleteRequest = indexedDB.deleteDatabase(dbName);\n\n deleteRequest.onerror = () => {\n reject();\n };\n\n deleteRequest.onsuccess = () => {\n resolve();\n };\n });\n });\n\n return Promise.all(promises);\n } */\n\n public delete(entryName: string | string[], storeName?: StoreName): Promise {\n // return Promise.resolve();\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.delete(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'delete: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n public clear(storeName?: StoreName): Promise {\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\n }\n\n public save(entryName: string | string[], value: any | any[], storeName?: StoreName) {\n // const handleError = (error: Error) => {\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\n // setTimeout(() => {\n // this.save(entryName, value);\n // }, 2e3);\n // } else {\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\n // }\n // };\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n value = [].concat(value);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'save: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n // public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // //return Promise.resolve(blobConstruct([blob]));\n // if(!(blob instanceof Blob)) {\n // blob = blobConstruct(blob);\n // }\n\n // return this.save(fileName, blob);\n // }\n\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\n return Promise.reject();\n }\n\n if(!(blob instanceof Blob)) {\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\n return this.storagePutB64String(db, fileName, address).then(() => {\n return blob;\n });\n }\n\n try {\n var reader = new FileReader();\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n let promise = new Promise((resolve, reject) => {\n reader.onloadend = () => {\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\n resolve(blob);\n }, reject);\n }\n\n reader.onerror = reject;\n });\n\n\n try {\n reader.readAsDataURL(blob);\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n return promise;\n }\n\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\n try {\n var objectStore = db.transaction([this.storeName], 'readwrite')\n .objectStore(this.storeName);\n var request = objectStore.put(b64string, fileName);\n } catch(error) {\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n resolve();\n };\n\n request.onerror = reject;\n });\n }\n\n public getBlobSize(blob: any) {\n return blob.size || blob.byteLength || blob.length;\n } */\n\n public get(entryName: string[], storeName?: StoreName): Promise;\n public get(entryName: string, storeName?: StoreName): Promise;\n public get(entryName: string | string[], storeName?: StoreName): Promise | Promise {\n // return Promise.reject();\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n if(!entryName) {\n return undefined;\n }\n\n entryName = [].concat(entryName);\n } else if(!entryName.length) {\n return Promise.resolve([]) as any;\n }\n\n return this.getObjectStore('readonly', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.get(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'get: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n private getObjectStore(\n mode: IDBTransactionMode,\n callback: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[],\n log?: string,\n storeName = this.storeName\n ) {\n let perf: number;\n\n if(log) {\n perf = performance.now();\n this.log(log + ': start');\n }\n\n return this.idb.openDatabase().then((db) => {\n return new Promise((resolve, reject) => {\n /* if(mode === 'readwrite') {\n return;\n } */\n\n const transaction = db.transaction([storeName], mode);\n\n const onError = () => {\n clearTimeout(timeout);\n reject(transaction.error);\n };\n\n // let resolved = false;\n const onComplete = (/* what: string */) => {\n clearTimeout(timeout);\n\n if(log) {\n this.log(log + ': end', performance.now() - perf/* , what */);\n }\n\n // if(resolved) {\n // return;\n // }\n\n // resolved = true;\n const results = requests.map((r) => r.result);\n resolve(isArray ? results : results[0]);\n };\n\n transaction.onerror = onError;\n\n // * have to wait while clearing or setting something\n const waitForTransactionComplete = mode === 'readwrite';\n if(waitForTransactionComplete) {\n transaction.oncomplete = () => onComplete(/* 'transaction' */);\n }\n\n const timeout = setTimeout(() => {\n this.log.error('transaction not finished', transaction, log);\n }, 10000);\n\n /* transaction.addEventListener('abort', (e) => {\n //handleError();\n this.log.error('IndexedDB: transaction abort!', transaction.error);\n }); */\n\n const callbackResult = callback(transaction.objectStore(storeName));\n\n const isArray = Array.isArray(callbackResult);\n const requests: IDBRequest[] = isArray ? callbackResult : [].concat(callbackResult) as any;\n\n if(waitForTransactionComplete) {\n return;\n }\n\n const length = requests.length;\n let left = length;\n\n const onRequestFinished = () => {\n if(transaction.error) {\n return;\n }\n\n if(!--left) {\n onComplete(/* 'requests' */);\n }\n };\n\n for(let i = 0; i < length; ++i) {\n const request = requests[i];\n request.onerror = onError;\n request.onsuccess = onRequestFinished;\n }\n });\n });\n }\n\n public getAll(storeName?: StoreName): Promise {\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '', storeName);\n }\n\n /* public getAllKeys(): Promise> {\n console.time('getAllEntries');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.getAllKeys();\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var result = event.target.result;\n resolve(result);\n console.timeEnd('getAllEntries');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public isFileExists(fileName: string): Promise {\n console.time('isFileExists');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.openCursor(fileName);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var cursor = event.target.result;\n resolve(!!cursor);\n console.timeEnd('isFileExists');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public getFileWriter(fileName: string, mimeType: string) {\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\n return this.saveFile(fileName, blob);\n });\n\n return Promise.resolve(fakeWriter);\n } */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type lang from '../lang';\nimport type langSign from '../langSign';\nimport type {State} from '../config/state';\nimport DEBUG, {MOUNT_CLASS_TO} from '../config/debug';\nimport {HelpCountriesList, HelpCountry, LangPackDifference, LangPackString} from '../layer';\nimport stateStorage from './stateStorage';\nimport App from '../config/app';\nimport rootScope from './rootScope';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport deepEqual from '../helpers/object/deepEqual';\nimport safeAssign from '../helpers/object/safeAssign';\nimport capitalizeFirstLetter from '../helpers/string/capitalizeFirstLetter';\nimport matchUrlProtocol from './richTextProcessor/matchUrlProtocol';\nimport wrapUrl from './richTextProcessor/wrapUrl';\nimport {setDirection} from '../helpers/dom/setInnerHTML';\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n 'messageActionChatCreate': 'ActionCreateGroup',\n 'messageActionChatCreateYou': 'ActionYouCreateGroup',\n 'messageActionChatEditTitle': 'ActionChangedTitle',\n 'messageActionChatEditPhoto': 'ActionChangedPhoto',\n 'messageActionChatEditVideo': 'ActionChangedVideo',\n 'messageActionChatDeletePhoto': 'ActionRemovedPhoto',\n 'messageActionChatReturn': 'ActionAddUserSelf',\n 'messageActionChatReturnYou': 'ActionAddUserSelfYou',\n 'messageActionChatJoined': 'ActionAddUserSelfMega',\n 'messageActionChatJoinedYou': 'ChannelMegaJoined',\n 'messageActionChatAddUser': 'ActionAddUser',\n 'messageActionChatAddUsers': 'ActionAddUser',\n 'messageActionChatLeave': 'ActionLeftUser',\n 'messageActionChatLeaveYou': 'YouLeft',\n 'messageActionChatDeleteUser': 'ActionKickUser',\n 'messageActionChatJoinedByLink': 'ActionInviteUser',\n 'messageActionPinMessage': 'Chat.Service.Group.UpdatedPinnedMessage',\n 'messageActionContactSignUp': 'Chat.Service.PeerJoinedTelegram',\n 'messageActionChannelCreate': 'ActionCreateChannel',\n 'messageActionChannelEditTitle': 'Chat.Service.Channel.UpdatedTitle',\n 'messageActionChannelEditPhoto': 'Chat.Service.Channel.UpdatedPhoto',\n 'messageActionChannelEditVideo': 'Chat.Service.Channel.UpdatedVideo',\n 'messageActionChannelDeletePhoto': 'Chat.Service.Channel.RemovedPhoto',\n 'messageActionHistoryClear': 'HistoryCleared',\n 'messageActionDiscussionStarted': 'DiscussionStarted',\n\n 'messageActionChannelMigrateFrom': 'ActionMigrateFromGroup',\n\n 'messageActionPhoneCall.video_in_ok': 'ChatList.Service.VideoCall.incoming',\n 'messageActionPhoneCall.video_out_ok': 'ChatList.Service.VideoCall.outgoing',\n 'messageActionPhoneCall.video_missed': 'ChatList.Service.VideoCall.Missed',\n 'messageActionPhoneCall.video_cancelled': 'ChatList.Service.VideoCall.Cancelled',\n 'messageActionPhoneCall.in_ok': 'ChatList.Service.Call.incoming',\n 'messageActionPhoneCall.out_ok': 'ChatList.Service.Call.outgoing',\n 'messageActionPhoneCall.missed': 'ChatList.Service.Call.Missed',\n 'messageActionPhoneCall.cancelled': 'ChatList.Service.Call.Cancelled',\n\n 'messageActionGroupCall.started': 'Chat.Service.VoiceChatStarted.Channel',\n 'messageActionGroupCall.started_by': 'Chat.Service.VoiceChatStarted',\n 'messageActionGroupCall.started_byYou': 'Chat.Service.VoiceChatStartedYou',\n 'messageActionGroupCall.ended': 'Chat.Service.VoiceChatFinished.Channel',\n 'messageActionGroupCall.ended_by': 'Chat.Service.VoiceChatFinished',\n 'messageActionGroupCall.ended_byYou': 'Chat.Service.VoiceChatFinishedYou',\n\n 'messageActionBotAllowed': 'Chat.Service.BotPermissionAllowed'\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nexport type FormatterArgument = string | number | Node | FormatterArgument[];\nexport type FormatterArguments = FormatterArgument[];\n\nexport const UNSUPPORTED_LANG_PACK_KEY: LangPackKey = IS_MOBILE ? 'Message.Unsupported.Mobile' : 'Message.Unsupported.Desktop';\n\nnamespace I18n {\n export const strings: Map = new Map();\n export const countriesList: HelpCountry[] = [];\n let pluralRules: Intl.PluralRules;\n\n let cacheLangPackPromise: Promise;\n export let lastRequestedLangCode: string;\n export let lastRequestedNormalizedLangCode: string;\n export let lastAppliedLangCode: string;\n export let requestedServerLanguage = false;\n export let timeFormat: State['settings']['timeFormat'];\n export let isRTL = false;\n\n export function setRTL(rtl: boolean) {\n isRTL = rtl;\n }\n\n function setLangCode(langCode: string) {\n lastRequestedLangCode = langCode;\n lastRequestedNormalizedLangCode = langCode.split('-')[0];\n }\n\n export function getCacheLangPack(): Promise {\n if(cacheLangPackPromise) return cacheLangPackPromise;\n return cacheLangPackPromise = Promise.all([\n stateStorage.get('langPack') as Promise,\n polyfillPromise\n ]).then(([langPack]) => {\n if(!langPack/* || true */) {\n return loadLocalLangPack();\n } else if(DEBUG && false) {\n return getLangPack(langPack.lang_code);\n }/* else if(langPack.appVersion !== App.langPackVersion) {\n return getLangPack(langPack.lang_code);\n } */\n\n if(!lastRequestedLangCode) {\n setLangCode(langPack.lang_code);\n }\n\n applyLangPack(langPack);\n return langPack;\n }).finally(() => {\n cacheLangPackPromise = undefined;\n });\n }\n\n function updateAmPm() {\n if(timeFormat === 'h12') {\n try {\n const dateTimeFormat = getDateTimeFormat({hour: 'numeric', minute: 'numeric', hour12: true});\n const date = new Date();\n date.setHours(0);\n const amText = dateTimeFormat.format(date);\n amPmCache.am = amText.split(/\\s/)[1];\n date.setHours(12);\n const pmText = dateTimeFormat.format(date);\n amPmCache.pm = pmText.split(/\\s/)[1];\n } catch(err) {\n console.error('cannot get am/pm', err);\n amPmCache = {am: 'AM', pm: 'PM'};\n }\n }\n }\n\n export function setTimeFormat(\n format: State['settings']['timeFormat'],\n haveToUpdate = !!timeFormat && timeFormat !== format\n ) {\n timeFormat = format;\n\n updateAmPm();\n\n if(haveToUpdate) {\n cachedDateTimeFormats.clear();\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance instanceof IntlDateElement) {\n instance.update();\n }\n });\n }\n }\n\n export function loadLocalLangPack() {\n const defaultCode = App.langPackCode;\n setLangCode(defaultCode);\n return Promise.all([\n import('../lang'),\n import('../langSign'),\n import('../countries')\n ]).then(([lang, langSign, countries]) => {\n const strings: LangPackString[] = [];\n formatLocalStrings(lang.default, strings);\n formatLocalStrings(langSign.default, strings);\n\n const langPack: LangPackDifference = {\n _: 'langPackDifference',\n from_version: 0,\n lang_code: defaultCode,\n strings,\n version: 0,\n local: true,\n countries: countries.default\n };\n return saveLangPack(langPack);\n });\n }\n\n export function loadLangPack(langCode: string, web?: boolean) {\n web = true;\n requestedServerLanguage = true;\n const managers = rootScope.managers;\n return Promise.all([\n managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: web ? 'web' : App.langPack\n }),\n !web && managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: 'android'\n }),\n import('../lang'),\n import('../langSign'),\n managers.apiManager.invokeApiCacheable('help.getCountriesList', {\n lang_code: langCode,\n hash: 0\n }) as Promise,\n polyfillPromise\n ]);\n }\n\n export function getStrings(langCode: string, strings: string[]) {\n return rootScope.managers.apiManager.invokeApi('langpack.getStrings', {\n lang_pack: App.langPack,\n lang_code: langCode,\n keys: strings\n });\n }\n\n export function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n for(const i in strings) {\n // @ts-ignore\n const v = strings[i];\n if(typeof(v) === 'string') {\n pushTo.push({\n _: 'langPackString',\n key: i,\n value: v\n });\n } else {\n pushTo.push({\n _: 'langPackStringPluralized',\n key: i,\n ...v\n });\n }\n }\n\n return pushTo;\n }\n\n export function getLangPack(langCode: string, web?: boolean) {\n setLangCode(langCode);\n return loadLangPack(langCode, web).then(([langPack1, langPack2, localLangPack1, localLangPack2, countries, _]) => {\n let strings: LangPackString[] = [];\n\n [localLangPack1, localLangPack2].forEach((l) => {\n formatLocalStrings(l.default as any, strings);\n });\n\n strings = strings.concat(...[langPack1.strings, langPack2.strings].filter(Boolean));\n\n langPack1.strings = strings;\n langPack1.countries = countries;\n return saveLangPack(langPack1);\n });\n }\n\n export function saveLangPack(langPack: LangPackDifference) {\n langPack.appVersion = App.langPackVersion;\n\n return stateStorage.set({langPack}).then(() => {\n applyLangPack(langPack);\n return langPack;\n });\n }\n\n export const polyfillPromise = (function checkIfPolyfillNeeded() {\n if(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n return Promise.resolve();\n } else {\n return import('./pluralPolyfill').then((_Intl) => {\n (window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n });\n }\n })();\n\n export function applyLangPack(langPack: LangPackDifference) {\n const currentLangCode = lastRequestedLangCode;\n if(langPack.lang_code !== currentLangCode) {\n return;\n }\n\n try {\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode.split('-', 1)[0]);\n }\n\n try {\n pluralRules = new Intl.PluralRules(langPack.lang_code);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(langPack.lang_code.split('-', 1)[0]);\n }\n\n strings.clear();\n\n for(const string of langPack.strings) {\n strings.set(string.key as LangPackKey, string);\n }\n\n if(langPack.countries) {\n countriesList.length = 0;\n countriesList.push(...langPack.countries.countries);\n\n langPack.countries.countries.forEach((country) => {\n if(country.name) {\n const langPackKey: any = country.default_name;\n strings.set(langPackKey, {\n _: 'langPackString',\n key: langPackKey,\n value: country.name\n });\n }\n });\n }\n\n if(lastAppliedLangCode !== currentLangCode) {\n rootScope.dispatchEvent('language_change', currentLangCode);\n lastAppliedLangCode = currentLangCode;\n cachedDateTimeFormats.clear();\n updateAmPm();\n }\n\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance) {\n instance.update();\n }\n });\n }\n\n function pushNextArgument(out: ReturnType, args: FormatterArguments, indexHolder: {i: number}) {\n const arg = args[indexHolder.i++];\n if(Array.isArray(arg)) {\n out.push(...arg as any);\n } else {\n out.push(arg);\n }\n }\n\n export function superFormatter(input: string, args?: FormatterArguments, indexHolder = {i: 0}): Exclude[] {\n const out: ReturnType = [];\n const regExp = /(\\*\\*|__)(.+?)\\1|(\\n)|(\\[.+?\\]\\(.*?\\))|un\\d|%\\d\\$.|%./g;\n\n let lastIndex = 0;\n input.replace(regExp, (match, p1: any, p2: any, p3: any, p4: string, offset: number, string: string) => {\n // console.table({match, p1, p2, offset, string});\n\n out.push(string.slice(lastIndex, offset));\n\n if(p1) {\n // offset += p1.length;\n let element: HTMLElement;\n switch(p1) {\n case '**': {\n element = document.createElement('b');\n break;\n }\n\n case '__': {\n element = document.createElement('i');\n break;\n }\n }\n\n element.append(...superFormatter(p2, args, indexHolder) as any);\n out.push(element);\n } else if(p3) {\n out.push(document.createElement('br'));\n } else if(p4) {\n const idx = p4.lastIndexOf(']');\n const text = p4.slice(1, idx);\n\n const url = p4.slice(idx + 2, p4.length - 1);\n let a: HTMLAnchorElement;\n if(url && matchUrlProtocol(url)) {\n a = document.createElement('a');\n const wrappedUrl = wrapUrl(url);\n a.href = wrappedUrl.url;\n if(wrappedUrl.onclick) a.setAttribute('onclick', wrappedUrl.onclick);\n a.target = '_blank';\n } else {\n a = args[indexHolder.i++] as HTMLAnchorElement;\n\n if(a instanceof DocumentFragment) { // right after wrapRichText\n a = a.firstChild as any;\n }\n\n a.textContent = ''; // reset content\n }\n\n a.append(...superFormatter(text, args, indexHolder) as any);\n\n out.push(a);\n } else if(args) {\n pushNextArgument(out, args, indexHolder);\n }\n\n lastIndex = offset + match.length;\n return '';\n });\n\n if(lastIndex !== input.length) {\n out.push(input.slice(lastIndex));\n }\n\n return out;\n }\n\n export function format(key: LangPackKey, plain: true, args?: FormatterArguments): string;\n export function format(key: LangPackKey, plain?: false, args?: FormatterArguments): ReturnType;\n export function format(key: LangPackKey, plain = false, args?: FormatterArguments): ReturnType | string {\n const str = strings.get(key);\n let input: string;\n if(str) {\n if(str._ === 'langPackStringPluralized' && args?.length) {\n let v = args[0] as number | string;\n if(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n const s = pluralRules.select(v);\n // @ts-ignore\n input = str[s + '_value'] || str['other_value'];\n } else if(str._ === 'langPackString') {\n input = str.value;\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n\n const result = superFormatter(input, args);\n if(plain) { // * let's try a hack now... (don't want to replace []() entity)\n return result.map((item) => item instanceof Node ? item.textContent : item).join('');\n } else {\n return result;\n }\n\n /* if(plain) {\n if(args?.length) {\n const regExp = /un\\d|%\\d\\$.|%./g;\n let i = 0;\n input = input.replace(regExp, (match, offset, string) => {\n return '' + args[i++];\n });\n }\n\n return input;\n } else {\n return superFormatter(input, args);\n } */\n }\n\n export const weakMap: WeakMap> = new WeakMap();\n\n export type IntlElementBaseOptions = {\n element?: HTMLElement,\n property?: 'innerText' | 'innerHTML' | 'placeholder' | 'textContent',\n };\n\n abstract class IntlElementBase {\n public element: IntlElementBaseOptions['element'];\n public property: IntlElementBaseOptions['property'];\n\n constructor(options?: Options) {\n this.element = options?.element || document.createElement('span');\n this.element.classList.add('i18n');\n\n this.property = options?.property;\n if(options && ((options as any as IntlElementOptions).key || (options as any as IntlDateElementOptions).date)) {\n this.update(options);\n }\n\n weakMap.set(this.element, this);\n }\n\n abstract update(options?: Options): void;\n }\n\n export type IntlElementOptions = IntlElementBaseOptions & {\n key?: LangPackKey,\n args?: FormatterArguments\n };\n export class IntlElement extends IntlElementBase {\n public key: IntlElementOptions['key'];\n public args: IntlElementOptions['args'];\n\n constructor(options: IntlElementOptions = {}) {\n super({...options, property: options.property ?? 'innerHTML'});\n }\n\n public update(options?: IntlElementOptions) {\n safeAssign(this, options);\n\n if(this.property === 'innerHTML') {\n this.element.textContent = '';\n this.element.append(...format(this.key, false, this.args) as any);\n } else {\n // @ts-ignore\n const v = this.element[this.property];\n const formatted = format(this.key, true, this.args);\n\n // * hasOwnProperty won't work here\n if(v === undefined) this.element.dataset[this.property] = formatted;\n else (this.element as HTMLInputElement)[this.property] = formatted;\n }\n }\n\n public compareAndUpdate(options?: IntlElementOptions) {\n if(this.key === options.key && deepEqual(this.args, options.args)) {\n return;\n }\n\n return this.update(options);\n }\n }\n\n const cachedDateTimeFormats: Map = new Map();\n function getDateTimeFormat(options: Intl.DateTimeFormatOptions = {}) {\n const json = JSON.stringify(options);\n let dateTimeFormat = cachedDateTimeFormats.get(json);\n if(!dateTimeFormat) {\n dateTimeFormat = new Intl.DateTimeFormat(lastRequestedNormalizedLangCode + '-u-hc-' + timeFormat, options);\n cachedDateTimeFormats.set(json, dateTimeFormat);\n }\n\n return dateTimeFormat;\n }\n\n export let amPmCache = {am: 'AM', pm: 'PM'};\n export type IntlDateElementOptions = IntlElementBaseOptions & {\n date?: Date,\n options: Intl.DateTimeFormatOptions\n };\n export class IntlDateElement extends IntlElementBase {\n public date: IntlDateElementOptions['date'];\n public options: IntlDateElementOptions['options'];\n\n constructor(options: IntlDateElementOptions) {\n super({...options, property: options.property ?? 'textContent'});\n setDirection(this.element);\n }\n\n public update(options?: IntlDateElementOptions) {\n safeAssign(this, options);\n\n let text: string;\n if(this.options.hour && this.options.minute && Object.keys(this.options).length === 2/* && false */) {\n const hours = this.date.getHours();\n text = ('0' + (timeFormat === 'h12' ? (hours % 12) || 12 : hours)).slice(-2) + ':' + ('0' + this.date.getMinutes()).slice(-2);\n // if(this.options.second) {\n // text += ':' + ('0' + this.date.getSeconds()).slice(-2);\n // }\n\n if(timeFormat === 'h12') {\n text += ' ' + (hours < 12 ? amPmCache.am : amPmCache.pm);\n }\n } else {\n // * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n const dateTimeFormat = getDateTimeFormat(this.options);\n text = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n }\n\n (this.element as any)[this.property] = text;\n }\n }\n\n export function i18n(key: LangPackKey, args?: FormatterArguments) {\n return new IntlElement({key, args}).element;\n }\n\n export function i18n_(options: IntlElementOptions) {\n return new IntlElement(options).element;\n }\n\n export function _i18n(element: HTMLElement, key: LangPackKey, args?: FormatterArguments, property?: IntlElementOptions['property']) {\n return new IntlElement({element, key, args, property}).element;\n }\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function joinElementsWith(elements: (Node | string)[], joiner: typeof elements[0] | ((isLast: boolean) => typeof elements[0])) {\n const arr = elements.slice(0, 1);\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n arr.push(typeof(joiner) === 'function' ? joiner(isLast) : joiner);\n arr.push(elements[i]);\n }\n\n return arr;\n}\n\n\nexport function join(elements: (Node | string)[], useLast: boolean, plain: true): string;\nexport function join(elements: (Node | string)[], useLast?: boolean, plain?: false): (string | Node)[];\nexport function join(elements: (Node | string)[], useLast: boolean, plain: boolean): string | (string | Node)[];\nexport function join(elements: (Node | string)[], useLast = true, plain?: boolean): string | (string | Node)[] {\n const joined = joinElementsWith(elements, (isLast) => {\n const langPackKey: LangPackKey = isLast && useLast ? 'AutoDownloadSettings.LastDelimeter' : 'AutoDownloadSettings.Delimeter';\n return plain ? I18n.format(langPackKey, true) : i18n(langPackKey);\n });\n\n return plain ? joined.join('') : joined;\n}\n\nMOUNT_CLASS_TO.I18n = I18n;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../storages/filters';\n\n/**\n * Legacy Webogram's format, don't change dcID to camelCase. date is timestamp\n */\nexport type UserAuth = {dcID: number | string, date: number, id: PeerId};\nexport type REAL_FOLDER_ID = 0 | 1;\n\nexport const NULL_PEER_ID: PeerId = 0;\nexport const REPLIES_PEER_ID: PeerId = 1271266957;\nexport const REPLIES_HIDDEN_CHANNEL_ID: ChatId = 777;\nexport const SERVICE_PEER_ID: PeerId = 777000;\nexport const MUTE_UNTIL = 0x7FFFFFFF;\nexport const BOT_START_PARAM = '';\nexport const MAX_FILE_SAVE_SIZE = 20 * 1024 * 1024;\nexport const THUMB_TYPE_FULL = '';\nexport const TOPIC_COLORS = [0x6FB9F0, 0xFFD67E, 0xCB86DB, 0x8EEE98, 0xFF93B2, 0xFB6F5F];\nexport const ATTACH_MENU_BOT_ICON_NAME = 'default_static';\nexport const GENERAL_TOPIC_ID = 4295032831;\nexport const T_ME_PREFIXES = new Set(['web', 'k', 'z']);\n\nexport const FOLDER_ID_ALL: REAL_FOLDER_ID = 0;\nexport const FOLDER_ID_ARCHIVE: REAL_FOLDER_ID = 1;\nexport const REAL_FOLDERS: Set = new Set([FOLDER_ID_ALL, FOLDER_ID_ARCHIVE]);\nexport const START_LOCAL_ID = Math.max(...Array.from(REAL_FOLDERS)) + 1 as MyDialogFilter['localId'];\n","import IS_CALL_SUPPORTED from './callSupport';\nimport CAN_USE_TRANSFERABLES from './canUseTransferables';\nimport IS_CANVAS_FILTER_SUPPORTED from './canvasFilterSupport';\nimport IS_EMOJI_SUPPORTED from './emojiSupport';\nimport IS_GEOLOCATION_SUPPORTED from './geolocationSupport';\nimport IS_GROUP_CALL_SUPPORTED from './groupCallSupport';\nimport IMAGE_MIME_TYPES_SUPPORTED from './imageMimeTypesSupport';\nimport MEDIA_MIME_TYPES_SUPPORTED from './mediaMimeTypesSupport';\nimport IS_MOV_SUPPORTED from './movSupport';\nimport IS_PARALLAX_SUPPORTED from './parallaxSupport';\nimport IS_SCREEN_SHARING_SUPPORTED from './screenSharingSupport';\nimport IS_TOUCH_SUPPORTED from './touchSupport';\nimport IS_VIBRATE_SUPPORTED from './vibrateSupport';\nimport VIDEO_MIME_TYPES_SUPPORTED from './videoMimeTypesSupport';\nimport IS_WEBM_SUPPORTED from './webmSupport';\nimport IS_WEBP_SUPPORTED from './webpSupport';\nimport IS_WEBRTC_SUPPORTED from './webrtcSupport';\nimport * as userAgent from './userAgent';\nimport IS_OPUS_SUPPORTED from './opusSupport';\nimport IS_SHARED_WORKER_SUPPORTED from './sharedWorkerSupport';\nimport IS_APPLE_MX from './appleMx';\n\nconst ENVIRONMENT = {\n CAN_USE_TRANSFERABLES,\n IS_APPLE_MX,\n IS_CALL_SUPPORTED,\n IS_CANVAS_FILTER_SUPPORTED,\n IS_EMOJI_SUPPORTED,\n IS_GEOLOCATION_SUPPORTED,\n IS_GROUP_CALL_SUPPORTED,\n IS_MOV_SUPPORTED,\n IS_PARALLAX_SUPPORTED,\n IS_SCREEN_SHARING_SUPPORTED,\n IS_TOUCH_SUPPORTED,\n IS_VIBRATE_SUPPORTED,\n IS_OPUS_SUPPORTED,\n IS_SHARED_WORKER_SUPPORTED,\n IS_WEBM_SUPPORTED,\n IS_WEBP_SUPPORTED,\n IS_WEBRTC_SUPPORTED,\n IMAGE_MIME_TYPES_SUPPORTED,\n MEDIA_MIME_TYPES_SUPPORTED,\n VIDEO_MIME_TYPES_SUPPORTED,\n ...userAgent\n};\n\nexport default ENVIRONMENT;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../../../../config/app';\nimport DEBUG from '../../../../config/debug';\nimport {AutoDownloadPeerTypeSettings, State, STATE_INIT, Background, AppTheme} from '../../../../config/state';\nimport compareVersion from '../../../../helpers/compareVersion';\nimport copy from '../../../../helpers/object/copy';\nimport validateInitObject from '../../../../helpers/object/validateInitObject';\nimport {UserAuth} from '../../../mtproto/mtproto_config';\nimport rootScope from '../../../rootScope';\nimport stateStorage from '../../../stateStorage';\nimport sessionStorage from '../../../sessionStorage';\nimport {recordPromiseBound} from '../../../../helpers/recordPromise';\n// import RESET_STORAGES_PROMISE from \"../storages/resetStoragesPromise\";\nimport {StoragesResults} from '../storages/loadStorages';\nimport {logger} from '../../../logger';\nimport {WallPaper} from '../../../../layer';\n\nconst REFRESH_EVERY = 24 * 60 * 60 * 1000; // 1 day\n// const REFRESH_EVERY = 1e3;\n// const REFRESH_EVERY_WEEK = 24 * 60 * 60 * 1000 * 7; // 7 days\n\nconst STATE_VERSION = STATE_INIT.version;\nconst BUILD = STATE_INIT.build;\n\nconst ALL_KEYS = Object.keys(STATE_INIT) as any as Array;\n\nconst REFRESH_KEYS: Array = [\n 'contactsListCachedTime',\n 'stateCreatedTime',\n 'maxSeenMsgId',\n 'filtersArr'\n];\n\n// const REFRESH_KEYS_WEEK = ['dialogs', 'allDialogsLoaded', 'updates', 'pinnedOrders'] as any as Array;\n\nasync function loadStateInner() {\n const log = logger('STATE-LOADER');\n\n const totalPerf = performance.now();\n const recordPromise = recordPromiseBound(log);\n\n const promises = ALL_KEYS.map((key) => recordPromise(stateStorage.get(key), 'state ' + key))\n .concat(\n recordPromise(sessionStorage.get('user_auth'), 'auth'),\n recordPromise(sessionStorage.get('state_id'), 'auth'),\n recordPromise(sessionStorage.get('k_build'), 'auth')\n )\n .concat(recordPromise(stateStorage.get('user_auth'), 'old auth')); // support old webk format\n\n const arr = await Promise.all(promises);\n log.warn('promises', performance.now() - totalPerf);\n // await new Promise((resolve) => setTimeout(resolve, 3e3));\n /* const self = this;\n const skipHandleKeys = new Set(['isProxy', 'filters', 'drafts']);\n const getHandler = (path?: string) => {\n return {\n get(target: any, key: any) {\n if(key === 'isProxy') {\n return true;\n }\n\n const prop = target[key];\n\n if(prop !== undefined && !skipHandleKeys.has(key) && !prop.isProxy && typeof(prop) === 'object') {\n target[key] = new Proxy(prop, getHandler(path || key));\n return target[key];\n }\n\n return prop;\n },\n set(target: any, key: any, value: any) {\n console.log('Setting', target, `.${key} to equal`, value, path);\n\n target[key] = value;\n\n // @ts-ignore\n self.pushToState(path || key, path ? self.state[path] : value, false);\n\n return true;\n }\n };\n }; */\n\n // const pushed: {key: keyof State, value: State[keyof State]}[] = [];\n const pushedKeys: (keyof State)[] = [];\n const pushToState = (key: T, value: State[T]) => {\n // appStateManager.pushToState(key, value);\n state[key] = value;\n // pushed.push({key, value});\n pushedKeys.push(key);\n };\n\n const replaceState = (_state: State) => {\n // pushed.length = 0;\n pushedKeys.length = 0;\n state = _state;\n pushedKeys.push(...Object.keys(state) as any as typeof pushedKeys);\n // state = appStateManager.setState(_state);\n // appStateManager.storage.set(state);\n };\n\n // let state: State = appStateManager.setState({} as any);\n let state: State = {} as any;\n\n // ! then can't store false values\n for(let i = 0, length = ALL_KEYS.length; i < length; ++i) {\n const key = ALL_KEYS[i];\n const value = arr[i];\n if(value !== undefined) {\n // @ts-ignore\n state[key] = value;\n } else {\n pushToState(key, copy(STATE_INIT[key]));\n }\n }\n\n arr.splice(0, ALL_KEYS.length);\n\n // * Read auth\n let auth = arr.shift() as UserAuth | number;\n const stateId = arr.shift() as number;\n const sessionBuild = arr.shift() as number;\n const shiftedWebKAuth = arr.shift() as UserAuth | number;\n if(!auth && shiftedWebKAuth) { // support old webk auth\n auth = shiftedWebKAuth;\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance'];\n for(let i = 1; i <= 5; ++i) {\n keys.push(`dc${i}_server_salt`);\n keys.push(`dc${i}_auth_key`);\n }\n\n const values = await Promise.all(keys.map((key) => stateStorage.get(key as any)));\n keys.push('user_auth');\n values.push(typeof(auth) === 'number' || typeof(auth) === 'string' ? {dcID: values[0] || App.baseDcId, date: Date.now() / 1000 | 0, id: auth.toPeerId(false)} as UserAuth : auth);\n\n const obj: any = {};\n keys.forEach((key, idx) => {\n obj[key] = values[idx];\n });\n\n await sessionStorage.set(obj);\n }\n\n /* if(!auth) { // try to read Webogram's session from localStorage\n try {\n const keys = Object.keys(localStorage);\n for(let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n let value: any;\n try {\n value = localStorage.getItem(key);\n value = JSON.parse(value);\n } catch(err) {\n //console.error(err);\n }\n\n sessionStorage.set({\n [key as any]: value\n });\n }\n\n auth = sessionStorage.getFromCache('user_auth');\n } catch(err) {\n this.log.error('localStorage import error', err);\n }\n } */\n\n if(auth) {\n // ! Warning ! DON'T delete this\n state.authState = {_: 'authStateSignedIn'};\n rootScope.dispatchEvent('user_auth', typeof(auth) === 'number' || typeof(auth) === 'string' ?\n {dcID: 0, date: Date.now() / 1000 | 0, id: auth.toPeerId(false)} :\n auth); // * support old version\n }\n\n const resetStorages: Set = new Set();\n if(state.stateId !== stateId) {\n if(stateId !== undefined) {\n const preserve: Map = new Map([\n ['authState', undefined],\n ['stateId', undefined]\n ]);\n\n preserve.forEach((_, key) => {\n preserve.set(key, copy(state[key]));\n });\n\n state = copy(STATE_INIT);\n\n preserve.forEach((value, key) => {\n // @ts-ignore\n state[key] = value;\n });\n\n const r: {[k in keyof StoragesResults]: number} = {\n chats: 1,\n dialogs: 1,\n users: 1\n };\n for(const key in r) {\n resetStorages.add(key as keyof StoragesResults);\n // this.storagesResults[key as keyof AppStateManager['storagesResults']].length = 0;\n }\n\n replaceState(state);\n }\n\n await sessionStorage.set({\n state_id: state.stateId\n });\n }\n\n const time = Date.now();\n if((state.stateCreatedTime + REFRESH_EVERY) < time) {\n if(DEBUG) {\n log('will refresh state', state.stateCreatedTime, time);\n }\n\n const r = (keys: typeof REFRESH_KEYS) => {\n keys.forEach((key) => {\n pushToState(key, copy(STATE_INIT[key]));\n\n // const s = appStateManager.storagesResults[key as keyof AppStateManager['storagesResults']];\n // if(s?.length) {\n // appStateManager.resetStorages.add(key as keyof AppStateManager['storagesResults']);\n // s.length = 0;\n // }\n });\n };\n\n r(REFRESH_KEYS);\n\n /* if((state.stateCreatedTime + REFRESH_EVERY_WEEK) < time) {\n if(DEBUG) {\n this.log('will refresh updates');\n }\n\n r(REFRESH_KEYS_WEEK);\n } */\n }\n\n // state = this.state = new Proxy(state, getHandler());\n\n // * migrate auto download settings\n const autoDownloadSettings = state.settings.autoDownload;\n if(autoDownloadSettings?.private !== undefined) {\n const oldTypes = [\n 'contacts' as const,\n 'private' as const,\n 'groups' as const,\n 'channels' as const\n ];\n\n const mediaTypes = [\n 'photo' as const,\n 'video' as const,\n 'file' as const\n ];\n\n mediaTypes.forEach((mediaType) => {\n const peerTypeSettings: AutoDownloadPeerTypeSettings = autoDownloadSettings[mediaType] = {} as any;\n oldTypes.forEach((peerType) => {\n peerTypeSettings[peerType] = autoDownloadSettings[peerType];\n });\n });\n\n oldTypes.forEach((peerType) => {\n delete autoDownloadSettings[peerType];\n });\n\n pushToState('settings', state.settings);\n }\n\n const SKIP_VALIDATING_PATHS: Set = new Set([\n 'settings.themes'\n ]);\n validateInitObject(STATE_INIT, state, (missingKey) => {\n pushToState(missingKey as keyof State, state[missingKey as keyof State]);\n }, undefined, SKIP_VALIDATING_PATHS);\n\n let newVersion: string, oldVersion: string;\n if(state.version !== STATE_VERSION || state.build !== BUILD/* || true */) {\n // reset filters and dialogs if version is older\n if(/* compareVersion(state.version, '0.8.7') === -1 || state.build < 179 || */state.build < 217) {\n state.allDialogsLoaded = copy(STATE_INIT.allDialogsLoaded);\n state.pinnedOrders = copy(STATE_INIT.pinnedOrders);\n state.filtersArr = copy(STATE_INIT.filtersArr);\n\n resetStorages.add('dialogs');\n }\n\n if(compareVersion(state.version, '1.7.1') === -1) {\n let migrated = false;\n // * migrate backgrounds (March 13, 2022; to version 1.3.0)\n if(compareVersion(state.version, '1.3.0') === -1) {\n migrated = true;\n state.settings.theme = copy(STATE_INIT.settings.theme);\n state.settings.themes = copy(STATE_INIT.settings.themes);\n } else if(compareVersion(state.version, '1.7.1') === -1) { // * migrate backgrounds (January 25th, 2023; to version 1.7.1)\n migrated = true;\n const oldThemes = state.settings.themes as any as Array<{\n name: AppTheme['name'],\n background: Background\n }>;\n\n state.settings.themes = copy(STATE_INIT.settings.themes);\n\n try {\n oldThemes.forEach((oldTheme) => {\n const oldBackground = oldTheme.background;\n if(!oldBackground) {\n return;\n }\n\n const newTheme = state.settings.themes.find((t) => t.name === oldTheme.name);\n newTheme.settings.highlightningColor = oldBackground.highlightningColor;\n\n const getColorFromHex = (hex: string) => hex && parseInt(hex.slice(1), 16);\n\n const colors = (oldBackground.color || '').split(',').map(getColorFromHex);\n\n if(oldBackground.color && !oldBackground.slug) {\n newTheme.settings.wallpaper = {\n _: 'wallPaperNoFile',\n id: 0,\n pFlags: {},\n settings: {\n _: 'wallPaperSettings',\n pFlags: {}\n }\n };\n } else {\n const wallPaper: WallPaper.wallPaper = {\n _: 'wallPaper',\n id: 0,\n access_hash: 0,\n slug: oldBackground.slug,\n document: {} as any,\n pFlags: {},\n settings: {\n _: 'wallPaperSettings',\n pFlags: {}\n }\n };\n\n const wallPaperSettings = wallPaper.settings;\n newTheme.settings.wallpaper = wallPaper;\n if(oldBackground.slug && !oldBackground.color) {\n wallPaperSettings.pFlags.blur = oldBackground.blur || undefined;\n } else if(oldBackground.intensity) {\n wallPaperSettings.intensity = oldBackground.intensity;\n wallPaper.pFlags.pattern = true;\n wallPaper.pFlags.dark = oldBackground.intensity < 0 || undefined;\n }\n }\n\n if(colors.length) {\n const wallPaperSettings = newTheme.settings.wallpaper.settings;\n wallPaperSettings.background_color = colors[0];\n wallPaperSettings.second_background_color = colors[1];\n wallPaperSettings.third_background_color = colors[2];\n wallPaperSettings.fourth_background_color = colors[3];\n }\n });\n } catch(err) {\n console.error('migrating themes error', err);\n }\n }\n\n if(migrated) {\n pushToState('settings', state.settings);\n }\n }\n\n if(compareVersion(state.version, STATE_VERSION) !== 0) {\n newVersion = STATE_VERSION;\n oldVersion = state.version;\n }\n\n pushToState('version', STATE_VERSION);\n pushToState('build', BUILD);\n }\n\n if(sessionBuild !== BUILD && (!sessionBuild || sessionBuild < BUILD)) {\n sessionStorage.set({k_build: BUILD});\n }\n\n // ! probably there is better place for it\n rootScope.settings = state.settings;\n\n if(DEBUG) {\n log('state res', state, copy(state));\n }\n\n // return resolve();\n\n log.warn('total', performance.now() - totalPerf);\n\n // RESET_STORAGES_PROMISE.resolve(appStateManager.resetStorages);\n\n return {state, resetStorages, newVersion, oldVersion, pushedKeys};\n}\n\nlet promise: ReturnType;\nexport default function loadState() {\n return promise ??= loadStateInner();\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Awaited} from '../../types';\nimport type {CacheStorageDbName} from '../files/cacheStorage';\nimport type {State} from '../../config/state';\nimport type {Message, MessagePeerReaction, PeerNotifySettings} from '../../layer';\nimport {CryptoMethods} from '../crypto/crypto_methods';\nimport rootScope from '../rootScope';\nimport webpWorkerController from '../webp/webpWorkerController';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport sessionStorage from '../sessionStorage';\nimport webPushApiManager from './webPushApiManager';\nimport appRuntimeManager from '../appManagers/appRuntimeManager';\nimport telegramMeWebManager from './telegramMeWebManager';\nimport pause from '../../helpers/schedulers/pause';\nimport ENVIRONMENT from '../../environment';\nimport loadState from '../appManagers/utils/state/loadState';\nimport opusDecodeController from '../opusDecodeController';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport SuperMessagePort from './superMessagePort';\nimport IS_SHARED_WORKER_SUPPORTED from '../../environment/sharedWorkerSupport';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport idleController from '../../helpers/idleController';\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport App from '../../config/app';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\n\nexport type Mirrors = {\n state: State\n};\n\nexport type MirrorTaskPayload = {\n name: T,\n key?: K,\n value: any\n};\n\nexport type NotificationBuildTaskPayload = {\n message: Message.message | Message.messageService,\n fwdCount?: number,\n peerReaction?: MessagePeerReaction,\n peerTypeNotifySettings?: PeerNotifySettings\n};\n\nexport type TabState = {\n chatPeerIds: PeerId[],\n idleStartTime: number,\n};\n\nclass ApiManagerProxy extends MTProtoMessagePort {\n // private worker: /* Window */Worker;\n // private sockets: Map = new Map();\n private mirrors: Mirrors;\n\n public newVersion: string;\n public oldVersion: string;\n\n private tabState: TabState;\n\n public share: ShareData;\n\n public serviceMessagePort: ServiceMessagePort;\n private lastServiceWorker: ServiceWorker;\n\n private pingServiceWorkerPromise: CancellablePromise;\n\n constructor() {\n super();\n\n this.mirrors = {} as any;\n this.tabState = {\n chatPeerIds: [],\n idleStartTime: 0\n };\n\n this.log('constructor');\n\n \n this.registerWorker();\n \n\n this.registerServiceWorker();\n this.registerCryptoWorker();\n\n // const perf = performance.now();\n this.addMultipleEventsListeners({\n convertWebp: ({fileName, bytes}) => {\n return webpWorkerController.convert(fileName, bytes);\n },\n\n convertOpus: ({fileName, bytes}) => {\n return opusDecodeController.pushDecodeTask(bytes, false).then((result) => result.bytes);\n },\n\n event: ({name, args}) => {\n // @ts-ignore\n rootScope.dispatchEventSingle(name, ...args);\n },\n\n localStorageProxy: (payload) => {\n const storageTask = payload;\n return (sessionStorage[storageTask.type] as any)(...storageTask.args);\n },\n\n mirror: this.onMirrorTask\n\n // hello: () => {\n // this.log.error('time hello', performance.now() - perf);\n // }\n });\n\n // this.addTaskListener('socketProxy', (task) => {\n // const socketTask = task.payload;\n // const id = socketTask.id;\n // //console.log('socketProxy', socketTask, id);\n\n // if(socketTask.type === 'send') {\n // const socket = this.sockets.get(id);\n // socket.send(socketTask.payload);\n // } else if(socketTask.type === 'close') { // will remove from map in onClose\n // const socket = this.sockets.get(id);\n // socket.close();\n // } else if(socketTask.type === 'setup') {\n // const socket = new Socket(socketTask.payload.dcId, socketTask.payload.url, socketTask.payload.logSuffix);\n\n // const onOpen = () => {\n // //console.log('socketProxy onOpen');\n // this.postMessage({\n // type: 'socketProxy',\n // payload: {\n // type: 'open',\n // id\n // }\n // });\n // };\n // const onClose = () => {\n // this.postMessage({\n // type: 'socketProxy',\n // payload: {\n // type: 'close',\n // id\n // }\n // });\n\n // socket.removeEventListener('open', onOpen);\n // socket.removeEventListener('close', onClose);\n // socket.removeEventListener('message', onMessage);\n // this.sockets.delete(id);\n // };\n // const onMessage = (buffer: ArrayBuffer) => {\n // this.postMessage({\n // type: 'socketProxy',\n // payload: {\n // type: 'message',\n // id,\n // payload: buffer\n // }\n // });\n // };\n\n // socket.addEventListener('open', onOpen);\n // socket.addEventListener('close', onClose);\n // socket.addEventListener('message', onMessage);\n // this.sockets.set(id, socket);\n // }\n // });\n\n rootScope.addEventListener('language_change', (language) => {\n rootScope.managers.networkerFactory.setLanguage(language);\n });\n\n window.addEventListener('online', () => {\n rootScope.managers.networkerFactory.forceReconnectTimeout();\n });\n\n rootScope.addEventListener('logging_out', () => {\n const toClear: CacheStorageDbName[] = ['cachedFiles', 'cachedStreamChunks'];\n Promise.all([\n toggleStorages(false, true),\n sessionStorage.clear(),\n Promise.race([\n telegramMeWebManager.setAuthorized(false),\n pause(3000)\n ]),\n webPushApiManager.forceUnsubscribe(),\n Promise.all(toClear.map((cacheName) => caches.delete(cacheName)))\n ]).finally(() => {\n appRuntimeManager.reload();\n });\n });\n\n idleController.addEventListener('change', (idle) => {\n this.updateTabStateIdle(idle);\n });\n this.updateTabStateIdle(idleController.isIdle);\n\n this.log('Passing environment:', ENVIRONMENT);\n this.invoke('environment', ENVIRONMENT);\n // this.sendState();\n }\n\n public pingServiceWorkerWithIframe() {\n if(this.pingServiceWorkerPromise) {\n return this.pingServiceWorkerPromise;\n }\n\n const promise = this.pingServiceWorkerPromise = deferredPromise();\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n const onLoad = () => {\n setTimeout(() => { // ping once in 10 seconds\n this.pingServiceWorkerPromise = undefined;\n }, 10e3);\n\n clearTimeout(timeout);\n iframe.remove();\n iframe.removeEventListener('load', onLoad);\n iframe.removeEventListener('error', onLoad);\n promise.resolve();\n };\n iframe.addEventListener('load', onLoad);\n iframe.addEventListener('error', onLoad);\n iframe.src = 'ping/' + (Math.random() * 0xFFFFFFFF | 0);\n document.body.append(iframe);\n\n const timeout = window.setTimeout(onLoad, 1e3);\n return promise;\n }\n\n private attachServiceWorker(serviceWorker: ServiceWorker) {\n this.lastServiceWorker && this.serviceMessagePort.detachPort(this.lastServiceWorker);\n this.serviceMessagePort.attachSendPort(this.lastServiceWorker = serviceWorker);\n this.serviceMessagePort.invokeVoid('hello', undefined);\n }\n\n private _registerServiceWorker() {\n navigator.serviceWorker.register(\n /* webpackChunkName: \"sw\" */\n new URL('../serviceWorker/index.service', import.meta.url),\n {scope: './'}\n ).then((registration) => {\n this.log('SW registered', registration);\n\n // ! doubtful fix for hard refresh\n if(registration.active && !navigator.serviceWorker.controller) {\n return registration.unregister().then(() => {\n window.location.reload();\n });\n }\n\n const sw = registration.installing || registration.waiting || registration.active;\n sw.addEventListener('statechange', (e) => {\n this.log('SW statechange', e);\n });\n\n const controller = navigator.serviceWorker.controller || registration.installing || registration.waiting || registration.active;\n this.attachServiceWorker(controller);\n\n \n \n \n }, (err) => {\n this.log.error('SW registration failed!', err);\n\n this.invokeVoid('serviceWorkerOnline', false);\n });\n }\n\n private registerServiceWorker() {\n if(!('serviceWorker' in navigator)) return;\n\n this.serviceMessagePort = new ServiceMessagePort();\n\n // this.addMultipleEventsListeners({\n // hello: () => {\n // // this.serviceMessagePort.invokeVoid('port', undefined);\n // }\n // });\n\n // ! I hate webpack - it won't load it by using worker.register, only navigator.serviceWorker will do it.\n const worker = navigator.serviceWorker;\n this._registerServiceWorker();\n\n // worker.startMessages();\n\n worker.addEventListener('controllerchange', () => {\n this.log.warn('controllerchange');\n\n const controller = worker.controller;\n this.attachServiceWorker(controller);\n\n controller.addEventListener('error', (e) => {\n this.log.error('controller error:', e);\n });\n });\n\n \n \n \n this.serviceMessagePort.attachListenPort(worker);\n this.serviceMessagePort.addMultipleEventsListeners({\n port: (payload, source, event) => {\n this.invokeVoid('serviceWorkerPort', undefined, undefined, [event.ports[0]]);\n },\n\n hello: (payload, source) => {\n this.serviceMessagePort.resendLockTask(source);\n },\n\n share: (payload) => {\n this.log('will try to share something');\n this.share = payload;\n }\n });\n \n\n worker.addEventListener('messageerror', (e) => {\n this.log.error('SW messageerror:', e);\n });\n }\n\n private async registerCryptoWorker() {\n const get = (url: string) => {\n return fetch(url).then((response) => response.text()).then((text) => {\n const pathnameSplitted = location.pathname.split('/');\n pathnameSplitted[pathnameSplitted.length - 1] = '';\n const pre = location.origin + pathnameSplitted.join('/');\n text = `\n var originalImportScripts = importScripts; \n importScripts = (url) => {\n console.log('importScripts', url);\n var newUrl = '${pre}' + url.split('/').pop();\n return originalImportScripts(newUrl);\n };\n ${text}`;\n const blob = new Blob([text], {type: 'application/javascript'});\n return blob;\n });\n };\n\n const workerHandler = {\n construct(target: any, args: any): any {\n const url = args[0] + location.search;\n return {url};\n }\n };\n\n const originals = [\n Worker,\n typeof(SharedWorker) !== 'undefined' && SharedWorker\n ].filter(Boolean);\n originals.forEach((w) => window[w.name as any] = new Proxy(w, workerHandler));\n\n const worker: SharedWorker | Worker = new Worker(\n /* webpackChunkName: \"crypto.worker\" */\n new URL('../crypto/crypto.worker.ts', import.meta.url),\n {type: 'module'}\n );\n\n originals.forEach((w) => window[w.name as any] = w as any);\n\n const originalUrl = (worker as any).url;\n\n const createWorker = (url: string) => new constructor(url, {type: 'module'});\n const attachWorkerToPort = (worker: SharedWorker | Worker) => this.attachWorkerToPort(worker, cryptoMessagePort, 'crypto');\n const constructor = IS_SHARED_WORKER_SUPPORTED ? SharedWorker : Worker;\n\n // let cryptoWorkers = workers.length;\n cryptoMessagePort.addEventListener('port', (payload, source, event) => {\n this.invokeVoid('cryptoPort', undefined, undefined, [event.ports[0]]);\n // .then((attached) => {\n // if(!attached && cryptoWorkers-- > 1) {\n // this.log.error('terminating unneeded crypto worker');\n\n // cryptoMessagePort.invokeVoid('terminate', undefined, source);\n // const worker = workers.find((worker) => (worker as SharedWorker).port === source || (worker as any) === source);\n // if((worker as SharedWorker).port) (worker as SharedWorker).port.close();\n // else (worker as Worker).terminate();\n // cryptoMessagePort.detachPort(source);\n // }\n // });\n });\n\n const firstWorker = createWorker(originalUrl);\n attachWorkerToPort(firstWorker);\n\n const blob = await get(originalUrl);\n const urlsPromise = await this.invoke('createProxyWorkerURLs', {originalUrl, blob});\n const workers = urlsPromise.slice(1).map(createWorker);\n workers.forEach(attachWorkerToPort);\n }\n\n \n private registerWorker() {\n // return;\n\n let worker: SharedWorker | Worker;\n if(IS_SHARED_WORKER_SUPPORTED) {\n worker = new SharedWorker(\n /* webpackChunkName: \"mtproto.worker\" */\n new URL('./mtproto.worker.ts', import.meta.url),\n {type: 'module'}\n );\n } else {\n worker = new Worker(\n /* webpackChunkName: \"mtproto.worker\" */\n new URL('./mtproto.worker.ts', import.meta.url),\n {type: 'module'}\n );\n }\n\n this.onWorkerFirstMessage(worker);\n }\n \n\n private attachWorkerToPort(worker: SharedWorker | Worker, messagePort: SuperMessagePort, type: string) {\n const port: MessagePort = (worker as SharedWorker).port || worker as any;\n messagePort.attachPort(port);\n\n worker.addEventListener('error', (err) => {\n this.log.error(type, 'worker error', err);\n });\n }\n\n private onWorkerFirstMessage(worker: any) {\n this.log('set webWorker');\n\n // this.worker = worker;\n \n \n \n this.attachWorkerToPort(worker, this, 'mtproto');\n \n }\n\n private loadState() {\n return Promise.all([\n loadState().then((stateResult) => {\n this.newVersion = stateResult.newVersion;\n this.oldVersion = stateResult.oldVersion;\n this.mirrors['state'] = stateResult.state;\n return stateResult;\n })\n // loadStorages(createStorages()),\n ]);\n }\n\n public sendState() {\n return this.loadState().then((result) => {\n const [stateResult] = result;\n this.invoke('state', {...stateResult, userId: rootScope.myId.toUserId()});\n return result;\n });\n }\n\n \n public invokeCrypto(method: Method, ...args: Parameters): Promise>> {\n return cryptoMessagePort.invokeCrypto(method, ...args);\n }\n \n\n public async toggleStorages(enabled: boolean, clearWrite: boolean) {\n await toggleStorages(enabled, clearWrite);\n this.invoke('toggleStorages', {enabled, clearWrite});\n this.serviceMessagePort.invokeVoid('toggleStorages', {enabled, clearWrite});\n }\n\n public async getMirror(name: T) {\n const mirror = this.mirrors[name];\n return mirror;\n }\n\n public getState() {\n return this.getMirror('state');\n }\n\n public updateTabState(key: T, value: TabState[T]) {\n this.tabState[key] = value;\n this.invokeVoid('tabState', this.tabState);\n }\n\n public updateTabStateIdle(idle: boolean) {\n this.updateTabState('idleStartTime', idle ? Date.now() : 0);\n }\n\n private onMirrorTask = (payload: MirrorTaskPayload) => {\n const {name, key, value} = payload;\n if(!payload.hasOwnProperty('key')) {\n this.mirrors[name] = value;\n return;\n }\n\n const mirror = this.mirrors[name] ??= {} as any;\n if(value === undefined) {\n delete mirror[key];\n } else {\n mirror[key] = value;\n }\n };\n}\n\ninterface ApiManagerProxy extends MTProtoMessagePort {}\n\nconst apiManagerProxy = new ApiManagerProxy();\nMOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy;\nexport default apiManagerProxy;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport tabId from '../../config/tabId';\nimport IS_SHARED_WORKER_SUPPORTED from '../../environment/sharedWorkerSupport';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport idleController from '../../helpers/idleController';\nimport {logger} from '../logger';\nimport rootScope from '../rootScope';\nimport sessionStorage from '../sessionStorage';\nimport apiManagerProxy from './mtprotoworker';\n\nexport type AppInstance = {\n id: number,\n idle: boolean,\n time: number\n};\n\nexport type InstanceDeactivateReason = 'version' | 'tabs';\n\nconst CHECK_INSTANCE_INTERVAL = 5000;\nconst DEACTIVATE_TIMEOUT = 30000;\nconst MULTIPLE_TABS_THRESHOLD = 20000;\nconst IS_MULTIPLE_TABS_SUPPORTED = IS_SHARED_WORKER_SUPPORTED;\n\nexport class SingleInstance extends EventListenerBase<{\n activated: () => void,\n deactivated: (reason: InstanceDeactivateReason) => void\n}> {\n private instanceId: number;\n private started: boolean;\n private masterInstance: boolean;\n private deactivateTimeout: number;\n private deactivated: InstanceDeactivateReason;\n private log = logger('INSTANCE');\n\n constructor() {\n super(false);\n\n this.log = logger('INSTANCE');\n this.instanceId = tabId;\n }\n\n public get deactivatedReason() {\n return this.deactivated;\n }\n\n public start() {\n this.reset();\n\n if(!this.started/* && !Config.Navigator.mobile && !Config.Modes.packed */) {\n this.started = true;\n\n idleController.addEventListener('change', this.checkInstance);\n setInterval(this.checkInstance, CHECK_INSTANCE_INTERVAL);\n this.checkInstance();\n\n try {\n document.documentElement.addEventListener('beforeunload', this.clearInstance);\n } catch(e) {}\n }\n }\n\n private reset() {\n this.masterInstance = false;\n this.clearDeactivateTimeout();\n this.deactivated = undefined;\n }\n\n private clearInstance = () => {\n if(this.masterInstance && !this.deactivated) {\n this.log.warn('clear master instance');\n sessionStorage.delete('xt_instance');\n }\n };\n\n public activateInstance() {\n if(this.deactivated) {\n this.reset();\n this.checkInstance(false);\n this.dispatchEvent('activated');\n }\n }\n\n private deactivateInstance(reason: InstanceDeactivateReason) {\n if(this.masterInstance || this.deactivated) {\n return;\n }\n\n this.log.warn('deactivate', reason);\n this.clearDeactivateTimeout();\n this.deactivated = reason;\n\n this.dispatchEvent('deactivated', reason);\n }\n\n private clearDeactivateTimeout() {\n if(this.deactivateTimeout) {\n clearTimeout(this.deactivateTimeout);\n this.deactivateTimeout = 0;\n }\n }\n\n private checkInstance = async(idle = idleController.isIdle) => {\n if(this.deactivated) {\n return;\n }\n\n const time = Date.now();\n const newInstance: AppInstance = {\n id: this.instanceId,\n idle,\n time\n };\n\n const [curInstance, build = App.build] = await Promise.all([\n sessionStorage.get('xt_instance', false),\n sessionStorage.get('k_build', false)\n ]);\n\n if(build > App.build) {\n this.masterInstance = false;\n rootScope.managers.networkerFactory.stopAll();\n this.deactivateInstance('version');\n apiManagerProxy.toggleStorages(false, false);\n return;\n } else if(IS_MULTIPLE_TABS_SUPPORTED) {\n sessionStorage.set({xt_instance: newInstance});\n return;\n }\n\n // this.log('check instance', newInstance, curInstance)\n if(!idle ||\n !curInstance ||\n curInstance.id === this.instanceId ||\n curInstance.time < (time - MULTIPLE_TABS_THRESHOLD)) {\n sessionStorage.set({xt_instance: newInstance});\n\n if(!this.masterInstance) {\n this.masterInstance = true;\n rootScope.managers.networkerFactory.startAll();\n this.log.warn('now master instance', newInstance);\n }\n\n this.clearDeactivateTimeout();\n } else if(this.masterInstance) {\n this.masterInstance = false;\n rootScope.managers.networkerFactory.stopAll();\n this.log.warn('now idle instance', newInstance);\n this.deactivateTimeout ||= window.setTimeout(() => this.deactivateInstance('tabs'), DEACTIVATE_TIMEOUT);\n }\n };\n}\n\nconst singleInstance = new SingleInstance();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.singleInstance = singleInstance);\nexport default singleInstance;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport Modes from '../../config/modes';\nimport loadScript from '../../helpers/dom/loadScript';\nimport tsNow from '../../helpers/tsNow';\nimport sessionStorage from '../sessionStorage';\n\nexport class TelegramMeWebManager {\n private disabled = /* false && */(Modes.test || !App.domains.includes(location.hostname));\n\n public setAuthorized(canRedirect: boolean) {\n if(this.disabled) {\n return;\n }\n\n return sessionStorage.get('tgme_sync').then((curValue) => {\n const ts = tsNow(true);\n if(\n canRedirect &&\n curValue?.canRedirect === canRedirect &&\n (curValue.ts + 86400) > ts\n ) {\n return;\n }\n\n sessionStorage.set({\n tgme_sync: {\n canRedirect,\n ts\n }\n });\n\n const path = `_websync_?authed=${canRedirect ? '1' : '0'}&version=${encodeURIComponent(App.version + ' ' + App.suffix)}`;\n const urls = [\n '//telegram.me/' + path,\n '//t.me/' + path\n ];\n\n const promises = urls.map((url) => {\n return loadScript(url).then((script) => {\n script.remove();\n });\n });\n\n return Promise.all(promises);\n });\n }\n}\n\nconst telegramMeWebManager = new TelegramMeWebManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.telegramMeWebManager = telegramMeWebManager);\nexport default telegramMeWebManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function loadScript(url: string) {\n const script = document.createElement('script');\n const promise = new Promise((resolve) => {\n script.onload = script.onerror = () => {\n resolve(script);\n };\n });\n script.src = url;\n document.body.appendChild(script);\n return promise;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {PushNotificationObject} from '../serviceWorker/push';\nimport type {ServicePushPingTaskPayload} from '../serviceWorker/serviceMessagePort';\nimport type {NotificationSettings} from '../appManagers/uiNotificationsManager';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {logger} from '../logger';\nimport apiManagerProxy from './mtprotoworker';\nimport I18n, {LangPackKey} from '../langPack';\nimport {IS_MOBILE} from '../../environment/userAgent';\nimport appRuntimeManager from '../appManagers/appRuntimeManager';\nimport copy from '../../helpers/object/copy';\nimport singleInstance from './singleInstance';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport getServerMessageId from '../appManagers/utils/messageId/getServerMessageId';\n\nexport type PushSubscriptionNotifyType = 'init' | 'subscribe' | 'unsubscribe';\nexport type PushSubscriptionNotifyEvent = `push_${PushSubscriptionNotifyType}`;\n\nexport type PushSubscriptionNotify = {\n tokenType: number,\n tokenValue: string\n};\n\nconst PING_PUSH_INTERVAL = 10000;\n\nexport class WebPushApiManager extends EventListenerBase<{\n push_notification_click: (n: PushNotificationObject) => void,\n push_init: (n: PushSubscriptionNotify) => void,\n push_subscribe: (n: PushSubscriptionNotify) => void,\n push_unsubscribe: (n: PushSubscriptionNotify) => void\n}> {\n public isAvailable = true;\n private isPushEnabled = false;\n private localNotificationsAvailable = true;\n private started = false;\n private settings: NotificationSettings & {baseUrl?: string} = {} as any;\n private isAliveTO: any;\n private isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n private userVisibleOnly = this.isFirefox ? false : true;\n private log = logger('PM');\n\n constructor() {\n super(false);\n\n if(!('PushManager' in window) ||\n !('Notification' in window) ||\n !('serviceWorker' in navigator)) {\n this.log.warn('Push messaging is not supported.');\n this.isAvailable = false;\n this.localNotificationsAvailable = false;\n }\n\n if(this.isAvailable && Notification.permission === 'denied') {\n this.log.warn('The user has blocked notifications.');\n }\n }\n\n public start() {\n if(!this.started) {\n this.started = true;\n this.getSubscription();\n this.setUpServiceWorkerChannel();\n }\n }\n\n public setLocalNotificationsDisabled() {\n this.localNotificationsAvailable = false;\n }\n\n public getSubscription() {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.getSubscription().then((subscription) => {\n this.isPushEnabled = !!subscription;\n this.pushSubscriptionNotify('init', subscription);\n }).catch((err) => {\n this.log.error('Error during getSubscription()', err);\n });\n });\n }\n\n public subscribe = () => {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.subscribe({userVisibleOnly: this.userVisibleOnly}).then((subscription) => {\n // The subscription was successful\n this.isPushEnabled = true;\n this.pushSubscriptionNotify('subscribe', subscription);\n }).catch((e) => {\n if(Notification.permission === 'denied') {\n this.log('Permission for Notifications was denied');\n } else {\n this.log('Unable to subscribe to push.', e);\n if(!this.userVisibleOnly) {\n this.userVisibleOnly = true;\n setTimeout(this.subscribe, 0);\n }\n }\n });\n });\n }\n\n public unsubscribe() {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.getSubscription().then((subscription) => {\n this.isPushEnabled = false;\n\n if(subscription) {\n this.pushSubscriptionNotify('unsubscribe', subscription);\n\n setTimeout(() => {\n subscription.unsubscribe().then((successful) => {\n this.isPushEnabled = false;\n }).catch((e) => {\n this.log.error('Unsubscription error: ', e);\n });\n }, 3000);\n }\n }).catch((e) => {\n this.log.error('Error thrown while unsubscribing from ' +\n 'push messaging.', e);\n });\n });\n }\n\n public forceUnsubscribe() {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.getSubscription().then((subscription) => {\n this.log.warn('force unsubscribe', subscription);\n if(subscription) {\n subscription.unsubscribe().then((successful) => {\n this.log.warn('force unsubscribe successful', successful);\n this.isPushEnabled = false;\n }).catch((e) => {\n this.log.error('Unsubscription error: ', e);\n });\n }\n }).catch((e) => {\n this.log.error('Error thrown while unsubscribing from ' +\n 'push messaging.', e);\n });\n });\n }\n\n public isAliveNotify = () => {\n if(!this.isAvailable || singleInstance.deactivatedReason) {\n return;\n }\n\n this.settings.baseUrl = (location.href || '').replace(/#.*$/, '');\n\n const lang: ServicePushPingTaskPayload['lang'] = {} as any;\n const ACTIONS_LANG_MAP: Record = {\n push_action_mute1d: IS_MOBILE ? 'PushNotification.Action.Mute1d.Mobile' : 'PushNotification.Action.Mute1d',\n push_action_settings: IS_MOBILE ? 'PushNotification.Action.Settings.Mobile' : 'PushNotification.Action.Settings',\n push_message_nopreview: 'PushNotification.Message.NoPreview'\n };\n\n for(const action in ACTIONS_LANG_MAP) {\n lang[action as keyof typeof ACTIONS_LANG_MAP] = I18n.format(ACTIONS_LANG_MAP[action as keyof typeof ACTIONS_LANG_MAP], true);\n }\n\n apiManagerProxy.serviceMessagePort.invokeVoid('pushPing', {\n localNotifications: this.localNotificationsAvailable,\n lang: lang,\n settings: this.settings\n });\n\n this.isAliveTO = setTimeout(this.isAliveNotify, PING_PUSH_INTERVAL);\n }\n\n public setSettings(newSettings: WebPushApiManager['settings']) {\n this.settings = copy(newSettings);\n clearTimeout(this.isAliveTO);\n this.isAliveNotify();\n }\n\n public hidePushNotifications() {\n if(!this.isAvailable) {\n return;\n }\n\n apiManagerProxy.serviceMessagePort.invokeVoid('notificationsClear', undefined);\n }\n\n public setUpServiceWorkerChannel() {\n if(!this.isAvailable) {\n return;\n }\n\n apiManagerProxy.serviceMessagePort.addEventListener('pushClick', (payload) => {\n if(singleInstance.deactivatedReason) {\n appRuntimeManager.reload();\n return;\n }\n\n this.dispatchEvent('push_notification_click', payload);\n });\n\n navigator.serviceWorker.ready.then(this.isAliveNotify);\n }\n\n public pushSubscriptionNotify(event: PushSubscriptionNotifyType, subscription?: PushSubscription) {\n if(subscription) {\n const subscriptionObj: PushSubscriptionJSON = subscription.toJSON();\n if(!subscriptionObj ||\n !subscriptionObj.endpoint ||\n !subscriptionObj.keys ||\n !subscriptionObj.keys.p256dh ||\n !subscriptionObj.keys.auth) {\n this.log.warn('Invalid push subscription', subscriptionObj);\n this.unsubscribe();\n this.isAvailable = false;\n this.pushSubscriptionNotify(event);\n return;\n }\n\n this.log.warn('Push', event, subscriptionObj);\n this.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, {\n tokenType: 10,\n tokenValue: JSON.stringify(subscriptionObj)\n });\n } else {\n this.log.warn('Push', event, false);\n this.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, false as any);\n }\n }\n\n public ignorePushByMid(peerId: PeerId, mid: number) {\n if(!this.isAvailable) {\n return;\n }\n\n apiManagerProxy.serviceMessagePort.invokeVoid('shownNotification', peerId + '_' + getServerMessageId(mid));\n }\n}\n\nconst webPushApiManager = new WebPushApiManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.webPushApiManager = webPushApiManager);\nexport default webPushApiManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport IS_OPUS_SUPPORTED from '../environment/opusSupport';\nimport {IS_SAFARI} from '../environment/userAgent';\nimport {Modify} from '../types';\nimport {logger, LogTypes} from './logger';\nimport apiManagerProxy from './mtproto/mtprotoworker';\nimport type {ConvertWebPTask} from './webp/webpWorkerController';\n\ntype Result = {\n bytes: Uint8Array,\n waveform?: Uint8Array\n};\n\ntype Task = {\n pages: Uint8Array,\n withWaveform: boolean,\n waveform?: Uint8Array,\n callback: {resolve: (result: Result) => void, reject: (err: any) => void},\n timeout: number\n};\n\nexport interface ConvertOpusTask extends Modify {\n type: 'convertOpus'\n}\n\nexport class OpusDecodeController {\n private worker: Worker;\n private wavWorker: Worker;\n private sampleRate = 48000;\n private tasks: Array = [];\n private keepAlive = false;\n private log = logger('OPUS', LogTypes.Error);\n\n public isPlaySupported() {\n return IS_OPUS_SUPPORTED;\n }\n\n public loadWavWorker() {\n if(this.wavWorker) return;\n\n this.wavWorker = new Worker('waveWorker.min.js');\n this.wavWorker.addEventListener('message', (e) => {\n const data = e.data;\n\n this.log('[WAV] got message:', data);\n if(data && data.page) {\n const bytes = data.page;\n this.onTaskEnd(this.tasks.shift(), bytes);\n }\n });\n }\n\n public loadWorker() {\n if(this.worker) return;\n\n this.worker = new Worker('decoderWorker.min.js');\n this.worker.addEventListener('message', (e) => {\n const data = e.data;\n\n this.log('[DECODER] got message', data);\n if(data.type === 'done') {\n // this.log('[DECODER] send done to wav');\n this.wavWorker.postMessage({command: 'done'});\n\n if(data.waveform) {\n this.tasks[0].waveform = data.waveform;\n }\n } else { // e.data contains decoded buffers as float32 values\n // this.log('[DECODER] send encode to wav');\n this.wavWorker.postMessage({\n command: 'encode',\n buffers: e.data\n }, IS_SAFARI ? undefined : data.map((typedArray: Uint8Array) => typedArray.buffer));\n }\n });\n }\n\n public setKeepAlive(keepAlive: boolean) {\n this.keepAlive = keepAlive;\n if(this.keepAlive) {\n this.loadWorker();\n this.loadWavWorker();\n } else if(!this.tasks.length) {\n this.terminateWorkers();\n }\n }\n\n public onTaskEnd(task: Task, result?: Uint8Array) {\n if(!result) {\n task.callback.reject('timeout');\n } else {\n clearTimeout(task.timeout);\n task.callback.resolve({bytes: result, waveform: task.waveform});\n }\n\n if(this.tasks.length) {\n this.executeNewTask(this.tasks[0]);\n }\n\n this.terminateWorkers();\n }\n\n public terminateWorkers(kill = false) {\n if((this.keepAlive || this.tasks.length) && !kill) return;\n\n if(this.worker) {\n this.worker.terminate();\n this.worker = null;\n }\n\n if(this.wavWorker) {\n this.wavWorker.terminate();\n this.wavWorker = null;\n }\n }\n\n public executeNewTask(task: Task) {\n this.worker.postMessage({\n command: 'init',\n decoderSampleRate: this.sampleRate,\n outputBufferSampleRate: this.sampleRate\n });\n\n this.wavWorker.postMessage({\n command: 'init',\n wavBitDepth: 16,\n wavSampleRate: this.sampleRate\n });\n\n // console.log('sending command to worker:', task);\n // setTimeout(() => {\n this.log('[DECODER] send decode');\n this.worker.postMessage({\n command: 'decode',\n pages: task.pages,\n waveform: task.withWaveform\n }, IS_SAFARI ? undefined : [task.pages.buffer]);\n // }, 1e3);\n\n task.timeout = window.setTimeout(() => {\n this.log.error('decode timeout'/* , task */);\n\n this.terminateWorkers(true);\n if(this.tasks.length) {\n this.loadWorker();\n this.loadWavWorker();\n }\n\n this.onTaskEnd(this.tasks.shift());\n }, 10e3);\n }\n\n public pushDecodeTask(pages: Uint8Array, withWaveform: boolean) {\n return new Promise((resolve, reject) => {\n const task = {\n pages,\n withWaveform,\n callback: {resolve, reject},\n timeout: 0\n };\n\n this.loadWorker();\n this.loadWavWorker();\n\n if(this.tasks.push(task) === 1) {\n this.executeNewTask(task);\n }\n });\n }\n\n public async decode(typedArray: Uint8Array, withWaveform = false) {\n return this.pushDecodeTask(typedArray, withWaveform).then(async(result) => {\n const dataBlob = new Blob([result.bytes], {type: 'audio/wav'});\n return {url: await apiManagerProxy.invoke('createObjectURL', dataBlob), waveform: result.waveform};\n });\n }\n}\n\nconst opusDecodeController = new OpusDecodeController();\nMOUNT_CLASS_TO.opusDecodeController = opusDecodeController;\nexport default opusDecodeController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport emojiRegExp from '../../vendor/emoji/regex';\nimport {MessageEntity} from '../../layer';\n\nconst EmojiHelper = {\n emojiMap: (code: string) => { return code; },\n shortcuts: [] as any,\n emojis: [] as any\n};\n\nexport const ALPHA_CHARS_REG_EXP = 'a-z' +\n '\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00f6\\\\u00f8-\\\\u00ff' + // Latin-1\n '\\\\u0100-\\\\u024f' + // Latin Extended A and B\n '\\\\u0253\\\\u0254\\\\u0256\\\\u0257\\\\u0259\\\\u025b\\\\u0263\\\\u0268\\\\u026f\\\\u0272\\\\u0289\\\\u028b' + // IPA Extensions\n '\\\\u02bb' + // Hawaiian\n '\\\\u0300-\\\\u036f' + // Combining diacritics\n '\\\\u1e00-\\\\u1eff' + // Latin Extended Additional (mostly for Vietnamese)\n '\\\\u0400-\\\\u04ff\\\\u0500-\\\\u0527' + // Cyrillic\n '\\\\u2de0-\\\\u2dff\\\\ua640-\\\\ua69f' + // Cyrillic Extended A/B\n '\\\\u0591-\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7' +\n '\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f4' + // Hebrew\n '\\\\ufb1d-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40-\\\\ufb41' +\n '\\\\ufb43-\\\\ufb44\\\\ufb46-\\\\ufb4f' + // Hebrew Pres. Forms\n '\\\\u0610-\\\\u061a\\\\u0620-\\\\u065f\\\\u066e-\\\\u06d3\\\\u06d5-\\\\u06dc' +\n '\\\\u06de-\\\\u06e8\\\\u06ea-\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff' + // Arabic\n '\\\\u0750-\\\\u077f\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u08e4-\\\\u08fe' + // Arabic Supplement and Extended A\n '\\\\ufb50-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb' + // Pres. Forms A\n '\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc' + // Pres. Forms B\n '\\\\u200c' + // Zero-Width Non-Joiner\n '\\\\u0e01-\\\\u0e3a\\\\u0e40-\\\\u0e4e' + // Thai\n '\\\\u1100-\\\\u11ff\\\\u3130-\\\\u3185\\\\uA960-\\\\uA97F\\\\uAC00-\\\\uD7AF\\\\uD7B0-\\\\uD7FF' + // Hangul (Korean)\n '\\\\u3003\\\\u3005\\\\u303b' + // Kanji/Han iteration marks\n '\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a' + // full width Alphabet\n '\\\\uff66-\\\\uff9f' + // half width Katakana\n '\\\\uffa1-\\\\uffdc'; // half width Hangul (Korean)\nexport const ALPHA_NUMERIC_REG_EXP = '0-9\\_' + ALPHA_CHARS_REG_EXP;\nexport const DOMAIN_ADD_CHARS = '\\u00b7';\n// Based on Regular Expression for URL validation by Diego Perini\nexport const URL_ALPHANUMERIC_REG_EXP_PART = '[' + ALPHA_CHARS_REG_EXP + '0-9]';\nexport const URL_PROTOCOL_REG_EXP_PART = '((?:https?|ftp)://|mailto:)?';\nexport const URL_REG_EXP = URL_PROTOCOL_REG_EXP_PART +\n // user:pass authentication\n '(?:' + URL_ALPHANUMERIC_REG_EXP_PART + '{1,64}(?::' + URL_ALPHANUMERIC_REG_EXP_PART + '{0,64})?@)?' +\n '(?:' +\n // sindresorhus/ip-regexp\n '(?: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}' +\n '|' +\n // host name\n URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}' +\n // domain name\n '(?:\\\\.' + URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}){0,10}' +\n // TLD identifier\n '(?:\\\\.(xn--[0-9a-z]{2,16}|[' + ALPHA_CHARS_REG_EXP + ']{2,24}))' +\n ')' +\n // port number\n '(?::\\\\d{2,5})?' +\n // resource path\n '(?:/(?:\\\\S{0,255}[^\\\\s.;,(\\\\[\\\\]{}<>\"\\'])?)?';\nexport const URL_PROTOCOL_REG_EXP = new RegExp('^' + URL_PROTOCOL_REG_EXP_PART.slice(0, -1), 'i');\nexport const URL_ANY_PROTOCOL_REG_EXP = /^((?:[^\\/]+?):\\/\\/|mailto:)/;\nexport const USERNAME_REG_EXP = '[a-zA-Z\\\\d_]{5,32}';\nexport const BOT_COMMAND_REG_EXP = '\\\\/([a-zA-Z\\\\d_]{1,32})(?:@(' + USERNAME_REG_EXP + '))?(\\\\b|$)';\nexport const FULL_REG_EXP = new RegExp('(^| )(@)(' + USERNAME_REG_EXP + ')|(' + URL_REG_EXP + ')|(\\\\n)|(' + emojiRegExp + ')|(^|[\\\\s\\\\(\\\\]])(#[' + ALPHA_NUMERIC_REG_EXP + ']{2,64})|(^|\\\\s)' + BOT_COMMAND_REG_EXP, 'i');\nexport const EMAIL_REG_EXP = /^(([^<>()[\\]\\\\.,;:\\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,}))$/;\n// const markdownTestRegExp = /[`_*@~]/;\nexport const MARKDOWN_REG_EXP = /(^|\\s|\\n)(````?)([\\s\\S]+?)(````?)([\\s\\n\\.,:?!;]|$)|(^|\\s|\\x01)(`|~~|\\*\\*|__|_-_|\\|\\|)([^\\n]+?)\\7([\\x01\\s\\.,:?!;]|$)|@(\\d+)\\s*\\((.+?)\\)|(\\[(.+?)\\]\\((.+?)\\))/m;\nexport const SITE_HASHTAGS: {[siteName: string]: string} = {\n 'Telegram': 'tg://search_hashtag?hashtag={1}',\n 'Twitter': 'https://twitter.com/hashtag/{1}',\n 'Instagram': 'https://instagram.com/explore/tags/{1}/',\n 'Google Plus': 'https://plus.google.com/explore/{1}'\n};\n\n// export const SITE_MENTIONS: {[siteName in 'Telegram' | 'Twitter' | 'Instagram' | 'GitHub']: string} = {\n// Telegram: '#{1}',\n// Twitter: 'https://twitter.com/{1}',\n// Instagram: 'https://instagram.com/{1}/',\n// GitHub: 'https://github.com/{1}'\n// };\n\nexport const MARKDOWN_ENTITIES: {[markdown: string]: MessageEntity['_']} = {\n '`': 'messageEntityCode',\n '``': 'messageEntityPre',\n '**': 'messageEntityBold',\n '__': 'messageEntityItalic',\n '~~': 'messageEntityStrike',\n '_-_': 'messageEntityUnderline',\n '||': 'messageEntitySpoiler'\n};\n\nexport const PASS_CONFLICTING_ENTITIES: Set = new Set([\n 'messageEntityEmoji',\n 'messageEntityLinebreak',\n 'messageEntityCaret'\n]);\nfor(const i in MARKDOWN_ENTITIES) {\n PASS_CONFLICTING_ENTITIES.add(MARKDOWN_ENTITIES[i]);\n}\n\nexport const PHONE_NUMBER_REG_EXP = /^\\+\\d+$/;\n\n/* export function parseEmojis(text: string) {\n return text.replace(/:([a-z0-9\\-\\+\\*_]+?):/gi, function (all, shortcut) {\n var emojiCode = EmojiHelper.shortcuts[shortcut]\n if (emojiCode !== undefined) {\n return EmojiHelper.emojis[emojiCode][0]\n }\n return all\n })\n} */\n\n\n/* export function replaceUrlEncodings(urlWithEncoded: string) {\n return urlWithEncoded.replace(/(%[A-Z\\d]{2})+/g, (str) => {\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n });\n} */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type addAnchorListener from '../../helpers/addAnchorListener';\nimport {PHONE_NUMBER_REG_EXP} from '.';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport matchUrlProtocol from './matchUrlProtocol';\nimport {T_ME_PREFIXES} from '../mtproto/mtproto_config';\n\nexport default function wrapUrl(url: string, unsafe?: number | boolean) {\n if(!matchUrlProtocol(url)) {\n url = 'https://' + url;\n }\n\n const out: {url: string, onclick?: Parameters[0]['name']} = {url};\n let tgMeMatch, telescoPeMatch, tgMatch;\n let onclick: typeof out['onclick'];\n /* if(unsafe === 2) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } else */if((tgMeMatch = url.match(/^(?:https?:\\/\\/)?(?:(.+?)\\.)?(?:(?:web|k|z)\\.)?t(?:elegram)?\\.me(?:\\/(.+))?/))) {\n const u = new URL(url);\n let prefix = tgMeMatch[1];\n if(prefix && T_ME_PREFIXES.has(tgMeMatch[1])) {\n prefix = undefined;\n }\n\n if(prefix) {\n u.pathname = prefix + (u.pathname === '/' ? '' : u.pathname);\n }\n\n const fullPath = u.pathname.slice(1);\n const path = fullPath.split('/');\n\n if(path[0] && path[0][0] === '$' && path[0].length > 1) {\n onclick = 'invoice';\n } else if(/^\\W/.test(fullPath) && !PHONE_NUMBER_REG_EXP.test(fullPath)) { // second regexp is for phone numbers (t.me/+38050...)\n onclick = 'joinchat';\n } else switch(path[0]) {\n case 'joinchat':\n case 'addstickers':\n case 'addemoji':\n case 'voicechat':\n case 'invoice':\n if(path.length !== 1 && !prefix) {\n onclick = path[0];\n break;\n }\n\n default:\n if((path[1] && path[1].match(/^\\d+(?:\\?(?:comment|thread)=\\d+)?$/)) || path.length === 1) {\n onclick = 'im';\n break;\n }\n\n break;\n }\n } else if((telescoPeMatch = url.match(/^(?:https?:\\/\\/)?telesco\\.pe\\/([^/?]+)\\/(\\d+)/))) {\n onclick = 'im';\n } else if((tgMatch = url.match(/tg:(?:\\/\\/)?(.+?)(?:\\?|$)/))) {\n onclick = 'tg_' + tgMatch[1] as any;\n }/* else if(unsafe) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } */\n\n if(!(window as any)[onclick]) {\n onclick = undefined;\n }\n\n out.onclick = onclick;\n return out;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.wrapUrl = wrapUrl);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, PollResults, Poll, WebPage, GroupCall, GroupCallParticipant, ReactionCount, MessagePeerReaction, PhoneCall, Config, Reaction} from '../layer';\nimport type {Dialog, ForumTopic, MessagesStorageKey, MyMessage} from './appManagers/appMessagesManager';\nimport type {MyDialogFilter} from './storages/filters';\nimport type {Folder} from './storages/dialogs';\nimport type {UserTyping} from './appManagers/appProfileManager';\nimport type {MyDraftMessage} from './appManagers/appDraftsManager';\nimport type {ConnectionStatusChange} from './mtproto/connectionStatus';\nimport type {GroupCallId} from './appManagers/appGroupCallsManager';\nimport type {AppManagers} from './appManagers/managers';\nimport type {State} from '../config/state';\nimport type {Progress} from './appManagers/appDownloadManager';\nimport type {CallId} from './appManagers/appCallsManager';\nimport type {MyDocument} from './appManagers/appDocsManager';\nimport type {MTAppConfig} from './mtproto/appConfig';\nimport {NULL_PEER_ID, UserAuth} from './mtproto/mtproto_config';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\nimport {IS_WORKER} from '../helpers/context';\n\nexport type BroadcastEvents = {\n 'chat_full_update': ChatId,\n 'chat_update': ChatId,\n 'chat_toggle_forum': {chatId: ChatId, enabled: boolean},\n 'chat_participant': Update.updateChannelParticipant,\n\n 'channel_update': ChatId,\n\n 'user_update': UserId,\n 'user_auth': UserAuth,\n 'user_full_update': UserId,\n\n 'peer_pinned_messages': {peerId: PeerId, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: PeerId, maxId: number},\n 'peer_typings': {peerId: PeerId, threadId?: number, typings: UserTyping[]},\n 'peer_block': {peerId: PeerId, blocked: boolean},\n 'peer_title_edit': {peerId: PeerId, threadId?: number},\n 'peer_bio_edit': PeerId,\n 'peer_deleted': PeerId, // left chat, deleted user dialog, left channel\n 'peer_full_update': PeerId,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_new': MyDialogFilter,\n 'filter_order': number[],\n\n 'folder_unread': Omit,\n\n 'dialog_draft': {peerId: PeerId, dialog: Dialog | ForumTopic, drop: boolean, draft: MyDraftMessage | undefined},\n 'dialog_unread': {peerId: PeerId, dialog: Dialog | ForumTopic},\n 'dialog_flush': {peerId: PeerId, dialog: Dialog},\n 'dialog_drop': Dialog | ForumTopic,\n 'dialog_migrate': {migrateFrom: PeerId, migrateTo: PeerId},\n // 'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog | ForumTopic,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': Map}>,\n\n 'history_append': {storageKey: MessagesStorageKey, message: Message.message},\n 'history_update': {storageKey: MessagesStorageKey, message: MyMessage, sequential?: boolean},\n 'history_reply_markup': {peerId: PeerId},\n 'history_multiappend': MyMessage,\n 'history_delete': {peerId: PeerId, msgs: Set},\n 'history_forbidden': PeerId,\n 'history_reload': PeerId,\n // 'history_request': void,\n\n 'message_edit': {storageKey: MessagesStorageKey, peerId: PeerId, mid: number, message: MyMessage},\n 'message_sent': {storageKey: MessagesStorageKey, tempId: number, tempMessage: any, mid: number, message: MyMessage},\n 'message_error': {storageKey: MessagesStorageKey, tempId: number, error: ApiError},\n 'message_transcribed': {peerId: PeerId, mid: number, text: string, pending?: boolean},\n 'messages_views': {peerId: PeerId, mid: number, views: number}[],\n 'messages_reactions': {message: Message.message, changedResults: ReactionCount[]}[],\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: PeerId, mids: number[]},\n 'messages_media_read': {peerId: PeerId, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': Message.message,\n 'scheduled_delete': {peerId: PeerId, mids: number[]},\n\n 'album_edit': {peerId: PeerId, groupId: string, deletedMids: number[], messages: Message.message[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n 'stickers_updated': {type: 'recent' | 'faved', stickers: MyDocument[]},\n 'stickers_top': Long,\n 'sticker_updated': {type: 'recent' | 'faved', document: MyDocument, faved: boolean},\n\n 'state_cleared': void,\n 'state_synchronized': ChatId | void,\n 'state_synchronizing': ChatId | void,\n\n 'contacts_update': UserId,\n 'avatar_update': {peerId: PeerId, threadId?: number},\n 'poll_update': {poll: Poll, results: PollResults},\n 'invalidate_participants': ChatId,\n // 'channel_settings': {channelId: number},\n 'webpage_updated': {id: WebPage.webPage['id'], msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any, settings: State['settings']},\n 'draft_updated': {peerId: PeerId, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n\n 'background_change': void,\n\n 'privacy_update': Update.updatePrivacy,\n\n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n\n 'notification_reset': string,\n 'notification_cancel': string,\n\n 'language_change': string,\n\n 'theme_change': void,\n\n 'media_play': void,\n\n 'emoji_recent': AppEmoji,\n\n 'download_progress': Progress,\n 'document_downloading': DocId,\n 'document_downloaded': DocId,\n\n 'choosing_sticker': boolean\n\n 'group_call_update': GroupCall,\n 'group_call_participant': {groupCallId: GroupCallId, participant: GroupCallParticipant},\n // 'group_call_video_track_added': {instance: GroupCallInstance}\n\n 'call_update': PhoneCall,\n 'call_signaling': {callId: CallId, data: Uint8Array},\n\n 'quick_reaction': Reaction,\n\n 'service_notification': Update.updateServiceNotification,\n\n 'logging_out': void,\n\n 'payment_sent': {peerId: PeerId, mid: number, receiptMessage: Message.messageService}\n\n 'premium_toggle': boolean,\n 'premium_toggle_private': {isNew: boolean, isPremium: boolean},\n\n 'config': Config,\n 'app_config': MTAppConfig\n};\n\nexport type BroadcastEventsListeners = {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n};\n\nexport class RootScope extends EventListenerBase {\n public myId: PeerId;\n private connectionStatus: {[name: string]: ConnectionStatusChange};\n public settings: State['settings'];\n public managers: AppManagers;\n public premium: boolean;\n\n constructor() {\n super();\n\n this.myId = NULL_PEER_ID;\n this.connectionStatus = {};\n this.premium = false;\n\n this.addEventListener('user_auth', ({id}) => {\n this.myId = id.toPeerId();\n });\n\n this.addEventListener('premium_toggle_private', ({isNew, isPremium}) => {\n this.premium = isPremium;\n this.dispatchEventSingle('premium_toggle', isPremium);\n });\n\n this.addEventListener('connection_status_change', (status) => {\n this.connectionStatus[status.name] = status;\n });\n\n this.dispatchEvent = (e, ...args) => {\n super.dispatchEvent(e, ...args);\n MTProtoMessagePort.getInstance().invokeVoid('event', {name: e as string, args});\n };\n\n if(!IS_WORKER) {\n this.addEventListener('settings_updated', ({settings}) => {\n this.settings = settings;\n });\n }\n }\n\n public getConnectionStatus() {\n return this.connectionStatus;\n }\n\n public getPremium() {\n return this.premium;\n }\n\n public dispatchEventSingle(...args: any[]) {\n // @ts-ignore\n super.dispatchEvent(...args);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport {WorkerTaskVoidTemplate} from '../../types';\n\nexport interface ConvertWebPTask extends WorkerTaskVoidTemplate {\n type: 'convertWebp',\n payload: {\n fileName: string,\n bytes: Uint8Array\n }\n};\n\nexport class WebpWorkerController {\n private worker: Worker;\n private convertPromises: {[fileName: string]: CancellablePromise} = {};\n\n private init() {\n this.worker = new Worker(new URL('./webp.worker.ts', import.meta.url));\n this.worker.addEventListener('message', (e) => {\n const task = e.data as ConvertWebPTask;\n const payload = task.payload;\n\n const promise = this.convertPromises[payload.fileName];\n if(promise) {\n payload.bytes ? promise.resolve(payload.bytes) : promise.reject();\n delete this.convertPromises[payload.fileName];\n }\n });\n }\n\n private postMessage(data: ConvertWebPTask) {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n this.worker.postMessage(data);\n }\n\n public convert(fileName: string, bytes: Uint8Array) {\n if(this.convertPromises.hasOwnProperty(fileName)) {\n return this.convertPromises[fileName];\n }\n\n const convertPromise = deferredPromise();\n\n this.postMessage({type: 'convertWebp', payload: {fileName, bytes}});\n\n return this.convertPromises[fileName] = convertPromise;\n }\n}\n\nconst webpWorkerController = new WebpWorkerController();\nMOUNT_CLASS_TO.webpWorkerController = webpWorkerController;\nexport default webpWorkerController;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"589\":\"crypto.worker\",\"630\":\"npm.qr-code-styling\",\"670\":\"sw\",\"678\":\"mtproto.worker\"}[chunkId] || chunkId) + \".\" + {\"8\":\"93d2f33af815eb0455aa\",\"53\":\"dbe0925c22766a370c35\",\"61\":\"84ba1f0d30c94eb8b92b\",\"63\":\"1831e9530926993870f4\",\"77\":\"b8cf11d2b5dca36479ca\",\"104\":\"f68acff124bec8da4bd6\",\"147\":\"d3d1728d5fd59c12e18f\",\"231\":\"f4d1bfe6ff7f14577f96\",\"301\":\"95838a8203f23dd1ce8f\",\"339\":\"12bdbede82465e666965\",\"392\":\"6cd3a6e98d96c1474a83\",\"436\":\"9e54c5e9f3feccf9d736\",\"437\":\"b05ad4b2fc48a536e003\",\"442\":\"4c190263f1e005b28c8a\",\"508\":\"c10ccdd1f7e2e9bbef5a\",\"589\":\"5fdc4de518d781a4e437\",\"630\":\"f8f57a1c721e03c3f699\",\"641\":\"eef7113bc3d12ae4efe4\",\"642\":\"be93122d1116ecdc9322\",\"646\":\"29b333bf40364af9ab80\",\"670\":\"3ce4749eb536186e614e\",\"678\":\"8a2c8d1f5534b5f54052\",\"709\":\"e75693a36b0fbe6508d1\",\"776\":\"8ab7c3d76984f9b6cac3\",\"781\":\"c527d73f348ae695f21a\",\"783\":\"949e247466ad3ebe82d6\",\"810\":\"0dc4677a01d387e9e564\",\"813\":\"315ffd640c7d6013a536\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [85,110], () => (__webpack_require__(2938)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","IS_BETA","DEBUG","MOUNT_CLASS_TO","window","self","STATE_VERSION","BUILD","DEFAULT_THEME","_","access_hash","id","settings","pFlags","base_theme","accent_color","message_colors","wallpaper","default","pattern","document","undefined","slug","intensity","background_color","second_background_color","third_background_color","fourth_background_color","dark","title","emoticon","makeDefaultAppTheme","name","baseTheme","highlightningColor","find","s","STATE_INIT","allDialogsLoaded","pinnedOrders","contactsListCachedTime","updates","filtersArr","maxSeenMsgId","stateCreatedTime","Date","now","recentEmoji","recentCustomEmoji","topPeersCache","recentSearch","version","build","authState","IS_MOBILE","hiddenPinnedMessages","messagesTextSize","distanceUnit","sendShortcut","animationsEnabled","autoDownload","photo","contacts","private","groups","channels","video","file","autoDownloadNew","file_size_max","video_preload_large","audio_preload_next","photo_size_max","video_size_max","video_upload_maxbitrate","autoPlay","gifs","videos","stickers","suggest","loop","emoji","big","themes","theme","notifications","sound","timeFormat","toLocaleString","match","playbackParams","volume","muted","playbackRate","playbackRates","voice","audio","round","keepSigned","chatContextMenuHintWasShown","stateId","notifySettings","IS_APPLE_MX","ctx","createElement","getContext","extension","getExtension","renderer","getParameter","UNMASKED_RENDERER_WEBGL","getSupportedExtensions","indexOf","err","CAN_USE_TRANSFERABLES","IS_SAFARI","navigator","userAgent","search","geolocation","getCurrentPosition","IMAGE_MIME_TYPES_SUPPORTED","Set","add","arr","concat","canPlayType","IS_APPLE_MOBILE","replace","IS_FIREFOX","mediaDevices","DocumentTouch","USER_AGENT","IS_APPLE","IS_ANDROID","toLowerCase","IS_CHROMIUM","test","vendor","platform","maxTouchPoints","IS_MOBILE_SAFARI","vibrate","VIDEO_MIME_TYPES_SUPPORTED","toDataURL","startsWith","rgbToHsv","r","g","b","v","Math","max","c","min","h","hsvToRgb","f","n","k","rgbaToHsla","a","l","d","hslaToRgba","hue2rgb","p","q","t","map","hexaToRgba","hexa","offset","length","slice","i","push","parseInt","hexToRgb","hex","hexaToHsla","rgba","rgbaToHexa","toString","join","hslaStringToHex","hsla","splitted","split","alpha","pop","val","endsWith","hslaStringToRgba","hslaStringToHexa","mixColors","color1","color2","weight","out","Array","v1","v2","floor","computePerceivedBrightness","color","getAverageColor","getAccentColor","baseHsv","baseColor","elementColor","hsvTemp3","hsvTemp4","dist","changeColorAccent","accentHsv","isDarkTheme","colorHsv","abs","newColor","origBrightness","newBrightness","amountOfNew","amount","changeBrightness","getHexColorFromTelegramColor","repeat","getRgbColorFromTelegramColor","getColorsFromWallPaper","wallPaper","filter","Boolean","compareVersion","s1","s2","blurActiveElement","activeElement","blur","cancelEvent","event","originalEvent","stopPropagation","preventDefault","returnValue","cancelBubble","findUpClassName","el","className","closest","fixSafariStickyInput","input","style","transform","focus","then","IS_STICKY_INPUT_BUGGED","key","startY","o","capture","passive","onTouchMove","e","touch","touches","scrollable","target","y","scrolled","scrollTop","scrollHeight","clientHeight","nextScrollTop","lastFocusOutTimeStamp","addEventListener","classList","contains","timeStamp","touchStart","removeEventListener","fixSafariStickyInputFocusing","callback","cacheInstallPrompt","deferredPrompt","prompt","outcome","userChoice","getInstallPrompt","texts","cache","fonts","text","icons","monospace","loadFonts","types","Promise","resolve","promises","type","_texts","font","weights","_promises","load","race","all","catch","setInnerHTML","elem","html","setDirection","innerHTML","replaceChildren","setAttribute","FOCUS_EVENT_NAME","IdleController","constructor","super","this","_isIdle","focusPromise","focusResolve","isIdle","once","idle","getFocusPromise","value","dispatchEvent","clamp","OverlayCounter","overlaysActive","isOverlayActive","fastRafCallbacks","fastRaf","requestAnimationFrame","currentCallbacks","forEach","cb","fastRafConventionalCallbacks","rafPromise","processing","fastRafConventional","fastRafPromise","doubleRaf","parseUriParams","uri","parseUriParamsLine","line","params","item","decodeURIComponent","appColorMap","rgb","light","lightFilled","darkRgb","darkFilled","colorMap","day","night","themeController","setTheme","themeColorElem","_themeColorElem","head","querySelector","setThemeColor","themeColor","isNight","setThemeListener","darkModeMediaQuery","matchMedia","checkDarkMode","systemTheme","matches","addListener","applyHighlightningColor","getTheme","documentElement","setProperty","removeProperty","colorScheme","toggle","applyTheme","styleElement","append","textContent","cssText","switchTheme","bindColorApplier","options","appliedColors","applyAppColor","_options","finalize","has","element","lightenAlpha","darkenAlpha","mixColor","appColor","lightenedRgb","darkenedHsla","applyNewTheme","isNightTheme","currentTheme","themeSettings","newAppTheme","AppBackgroundTab","setBackgroundDocument","isArray","baseColors","hsvTemp1","hsvTemp2","newAccentRgb","newAccentHex","messageLightenAlpha","baseMessageColor","baseMessageOutBackgroundColor","myMessagesAccent","nextColor","accentColor2","outbox_accent_color","newMessageOutBackgroundColor","workerHandler","construct","args","url","location","Worker","SharedWorker","w","Proxy","setWorkerProxy","Element","prototype","toggleAttribute","force","hasAttribute","removeAttribute","Node","nodes","rootScope","getProxiedManagers","getElementById","href","singleInstance","visualViewport","lastVH","setViewportVH","setVH","vh","overlayCounter","height","innerHeight","toggleResizeMode","tabId","onImTabChange","wasTabId","tagName","appMediaViewer","onInResize","hasFocus","onOutResize","console","log","perf","performance","langPromise","stateResult","langPack","fadeInWhenFontsReady","promise","opacity","state","isPremium","appVersion","lang_code","dir","hash","tgWebAuthToken","data","token","dcId","tgWebAuthDcId","userId","tgWebAuthUserId","toUserId","isTest","tgWebAuthTest","tgAddr","tgaddr","urlSearchParams","URLSearchParams","set","delete","pagePromise","placeholder","prepend","cloneNode","meModule","pushModule","setAuthorized","forceUnsubscribe","mount","sentCode","authCode","pause","ready","reload","close","DEBUG_MANAGER_REQUESTS","createProxyProxy","proxied","ack","get","receiver","method","warn","createProxy","acknowledged","IDB","db","storageIsAvailable","openDatabase","INSTANCES","isAvailable","createNew","openDbPromise","createIndexes","os","store","indexNames","from","indexName","deleteIndex","indexes","index","createIndex","keyPath","objectParameters","request","indexedDB","open","reject","error","message","finished","setTimeout","onerror","onsuccess","result","calledNew","onclose","onabort","transaction","onversionchange","onupgradeneeded","oldVersion","newVersion","stores","objectStoreNames","objectStore","createObjectStore","static","instance","preserve","storage","IDBStorage","storeName","idb","create","entryName","getObjectStore","clear","save","idx","put","mode","onError","clearTimeout","timeout","onComplete","results","requests","waitForTransactionComplete","oncomplete","callbackResult","left","onRequestFinished","getAll","UNSUPPORTED_LANG_PACK_KEY","I18n","pluralRules","cacheLangPackPromise","setLangCode","langCode","lastRequestedLangCode","lastRequestedNormalizedLangCode","updateAmPm","dateTimeFormat","getDateTimeFormat","hour","minute","hour12","date","setHours","amText","format","amPmCache","am","pmText","pm","loadLocalLangPack","defaultCode","lang","langSign","countries","strings","formatLocalStrings","saveLangPack","from_version","local","loadLangPack","web","requestedServerLanguage","managers","apiManager","invokeApiCacheable","lang_pack","polyfillPromise","pushTo","applyLangPack","currentLangCode","Intl","PluralRules","string","countriesList","country","langPackKey","default_name","lastAppliedLangCode","cachedDateTimeFormats","querySelectorAll","weakMap","update","superFormatter","indexHolder","lastIndex","p1","p2","p3","p4","lastIndexOf","wrappedUrl","onclick","DocumentFragment","firstChild","arg","pushNextArgument","plain","str","select","Map","isRTL","setRTL","rtl","getCacheLangPack","finally","setTimeFormat","haveToUpdate","IntlDateElement","getStrings","keys","getLangPack","langPack1","langPack2","localLangPack1","localLangPack2","_Intl","Object","assign","WeakMap","IntlElementBase","property","IntlElement","formatted","dataset","compareAndUpdate","json","JSON","stringify","DateTimeFormat","hours","getHours","getMinutes","i18n","i18n_","_i18n","joinElementsWith","elements","joiner","isLast","useLast","joined","NULL_PEER_ID","REPLIES_PEER_ID","REPLIES_HIDDEN_CHANNEL_ID","SERVICE_PEER_ID","MUTE_UNTIL","BOT_START_PARAM","MAX_FILE_SAVE_SIZE","THUMB_TYPE_FULL","TOPIC_COLORS","ATTACH_MENU_BOT_ICON_NAME","GENERAL_TOPIC_ID","T_ME_PREFIXES","FOLDER_ID_ALL","FOLDER_ID_ARCHIVE","REAL_FOLDERS","IS_CALL_SUPPORTED","IS_CANVAS_FILTER_SUPPORTED","IS_EMOJI_SUPPORTED","IS_GEOLOCATION_SUPPORTED","IS_GROUP_CALL_SUPPORTED","IS_MOV_SUPPORTED","IS_PARALLAX_SUPPORTED","IS_SCREEN_SHARING_SUPPORTED","IS_TOUCH_SUPPORTED","IS_VIBRATE_SUPPORTED","IS_OPUS_SUPPORTED","IS_SHARED_WORKER_SUPPORTED","IS_WEBM_SUPPORTED","IS_WEBP_SUPPORTED","IS_WEBRTC_SUPPORTED","MEDIA_MIME_TYPES_SUPPORTED","ALL_KEYS","REFRESH_KEYS","loadStateInner","logger","totalPerf","recordPromise","stateStorage","sessionStorage","pushedKeys","pushToState","copy","splice","auth","shift","sessionBuild","shiftedWebKAuth","values","dcID","toPeerId","obj","resetStorages","chats","dialogs","users","_state","state_id","time","autoDownloadSettings","oldTypes","mediaType","peerTypeSettings","peerType","SKIP_VALIDATING_PATHS","validateInitObject","missingKey","migrated","oldThemes","oldTheme","oldBackground","background","newTheme","colors","wallPaperSettings","k_build","ApiManagerProxy","onMirrorTask","payload","hasOwnProperty","mirrors","mirror","tabState","chatPeerIds","idleStartTime","registerWorker","registerServiceWorker","registerCryptoWorker","addMultipleEventsListeners","convertWebp","fileName","bytes","webpWorkerController","convertOpus","opusDecodeController","localStorageProxy","storageTask","language","toggleStorages","telegramMeWebManager","webPushApiManager","cacheName","caches","appRuntimeManager","idleController","updateTabStateIdle","invoke","pingServiceWorkerWithIframe","pingServiceWorkerPromise","iframe","hidden","onLoad","remove","src","random","body","attachServiceWorker","serviceWorker","lastServiceWorker","serviceMessagePort","detachPort","attachSendPort","invokeVoid","_registerServiceWorker","register","URL","scope","registration","active","controller","unregister","installing","waiting","worker","attachListenPort","port","source","ports","hello","resendLockTask","share","originals","originalUrl","createWorker","attachWorkerToPort","cryptoMessagePort","blob","fetch","response","pathnameSplitted","pathname","origin","Blob","onWorkerFirstMessage","messagePort","attachPort","loadState","sendState","invokeCrypto","enabled","clearWrite","getMirror","getState","updateTabState","apiManagerProxy","IS_MULTIPLE_TABS_SUPPORTED","SingleInstance","clearInstance","masterInstance","deactivated","checkInstance","newInstance","instanceId","curInstance","deactivateInstance","xt_instance","clearDeactivateTimeout","deactivateTimeout","deactivatedReason","start","reset","started","setInterval","activateInstance","reason","TelegramMeWebManager","disabled","hostname","canRedirect","curValue","ts","tsNow","tgme_sync","path","encodeURIComponent","script","onload","appendChild","loadScript","WebPushApiManager","isPushEnabled","localNotificationsAvailable","isFirefox","userVisibleOnly","subscribe","reg","pushManager","subscription","pushSubscriptionNotify","Notification","permission","isAliveNotify","baseUrl","ACTIONS_LANG_MAP","push_action_mute1d","push_action_settings","push_message_nopreview","action","localNotifications","isAliveTO","getSubscription","setUpServiceWorkerChannel","setLocalNotificationsDisabled","unsubscribe","successful","setSettings","newSettings","hidePushNotifications","subscriptionObj","toJSON","endpoint","p256dh","tokenType","tokenValue","ignorePushByMid","peerId","mid","sampleRate","tasks","keepAlive","isPlaySupported","loadWavWorker","wavWorker","page","onTaskEnd","loadWorker","postMessage","command","waveform","buffers","typedArray","buffer","setKeepAlive","terminateWorkers","task","executeNewTask","kill","terminate","decoderSampleRate","outputBufferSampleRate","wavBitDepth","wavSampleRate","pages","withWaveform","pushDecodeTask","decode","dataBlob","ALPHA_CHARS_REG_EXP","ALPHA_NUMERIC_REG_EXP","URL_ALPHANUMERIC_REG_EXP_PART","URL_PROTOCOL_REG_EXP_PART","URL_REG_EXP","URL_ANY_PROTOCOL_REG_EXP","RegExp","USERNAME_REG_EXP","BOT_COMMAND_REG_EXP","FULL_REG_EXP","EMAIL_REG_EXP","MARKDOWN_REG_EXP","SITE_HASHTAGS","MARKDOWN_ENTITIES","PASS_CONFLICTING_ENTITIES","PHONE_NUMBER_REG_EXP","wrapUrl","unsafe","tgMeMatch","telescoPeMatch","tgMatch","u","prefix","fullPath","RootScope","myId","connectionStatus","premium","isNew","dispatchEventSingle","status","getConnectionStatus","getPremium","convertPromises","init","convert","convertPromise","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","getPrototypeOf","ns","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","chunkId","reduce","miniCssF","globalThis","Function","prop","done","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","onScriptComplete","prev","doneFns","parentNode","removeChild","bind","Symbol","toStringTag","scriptUrl","importScripts","currentScript","Error","oldGetScript","oldLoadScript","queryMap","countMap","retries","realSrc","cacheBust","baseURI","installedChunks","installedChunkData","errorType","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/public/main.5af85c2e3d117186070d.bundle.js b/public/main.5af85c2e3d117186070d.bundle.js deleted file mode 100644 index 786654da..00000000 --- a/public/main.5af85c2e3d117186070d.bundle.js +++ /dev/null @@ -1,2 +0,0 @@ -(()=>{"use strict";var e,t,n,s,i,o={410:(e,t,n)=>{n.d(t,{GO:()=>r,Tj:()=>i,ZP:()=>a});var s=n(1267);const i=!1,o=i||s.Z.debug,r="undefined"!=typeof window?window:self,a=o},236:(e,t,n)=>{n.d(t,{t:()=>c,h:()=>d});var s=n(4762),i=n(144),o=n(4159);const r=o.Z.version,a=o.Z.build,c={_:"theme",access_hash:"",id:"",settings:[{_:"themeSettings",pFlags:{},base_theme:{_:"baseThemeClassic"},accent_color:3379436,message_colors:[5221966],wallpaper:{_:"wallPaper",pFlags:{default:!0,pattern:!0},access_hash:"",document:void 0,id:"",slug:"pattern",settings:{_:"wallPaperSettings",pFlags:{},intensity:50,background_color:14409147,second_background_color:7054727,third_background_color:14014605,fourth_background_color:8960132}}},{_:"themeSettings",pFlags:{},base_theme:{_:"baseThemeNight"},accent_color:8877281,message_colors:[8877281],wallpaper:{_:"wallPaper",pFlags:{default:!0,pattern:!0,dark:!0},access_hash:"",document:void 0,id:"",slug:"pattern",settings:{_:"wallPaperSettings",pFlags:{},intensity:-50,background_color:16696470,second_background_color:14511289,third_background_color:9842623,fourth_background_color:5200853}}}],slug:"",title:"",emoticon:"๐Ÿ ",pFlags:{default:!0}},l=(e,t,n)=>Object.assign(Object.assign({},c),{name:e,settings:Object.assign(Object.assign({},c.settings.find((e=>e.base_theme._===t))),{highlightningColor:n})}),d={allDialogsLoaded:{},pinnedOrders:{},contactsListCachedTime:0,updates:{},filtersArr:[],maxSeenMsgId:0,stateCreatedTime:Date.now(),recentEmoji:[],recentCustomEmoji:[],topPeersCache:{},recentSearch:[],version:r,build:a,authState:{_:s.IS_MOBILE?"authStateSignIn":"authStateSignQr"},hiddenPinnedMessages:{},settings:{messagesTextSize:16,distanceUnit:"kilometers",sendShortcut:"enter",animationsEnabled:!0,autoDownload:{photo:{contacts:!0,private:!0,groups:!0,channels:!0},video:{contacts:!0,private:!0,groups:!0,channels:!0},file:{contacts:!0,private:!0,groups:!0,channels:!0}},autoDownloadNew:{_:"autoDownloadSettings",file_size_max:3145728,pFlags:{video_preload_large:!0,audio_preload_next:!0},photo_size_max:1048576,video_size_max:15728640,video_upload_maxbitrate:100},autoPlay:{gifs:!0,videos:!0},stickers:{suggest:!0,loop:!0},emoji:{suggest:!0,big:!0},themes:[l("day","baseThemeClassic","hsla(86.4, 43.846153%, 45.117647%, .4)"),l("night","baseThemeNight","hsla(299.142857, 44.166666%, 37.470588%, .4)")],theme:"system",notifications:{sound:!1},timeFormat:(new Date).toLocaleString().match(/\s(AM|PM)/)?"h12":"h23"},playbackParams:{volume:1,muted:!1,playbackRate:1,playbackRates:{voice:1,video:1,audio:1},loop:!1,round:!1},keepSigned:!0,chatContextMenuHintWasShown:!1,stateId:(0,i.d)(32),notifySettings:{}}},8189:(e,t,n)=>{n.d(t,{Z:()=>i});let s=!1;try{const e=document.createElement("canvas").getContext("webgl"),t=e.getExtension("WEBGL_debug_renderer_info"),n=t&&e.getParameter(t.UNMASKED_RENDERER_WEBGL)||"";(n.match(/Apple/)&&!n.match(/Apple GPU/)||-1===e.getSupportedExtensions().indexOf("WEBGL_compressed_texture_s3tc_srgb"))&&(s=!0)}catch(e){}const i=s},993:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n(4089).Z},7328:(e,t,n)=>{let s;if(n.d(t,{Z:()=>i}),n(4762).IS_SAFARI)try{s=+navigator.userAgent.match(/Version\/(.+?) /)[1]>=14}catch(e){s=!1}else s=!0;const i=s},6663:(e,t,n)=>{n.d(t,{Z:()=>s});const s="filter"in(document.createElement("canvas").getContext("2d")||{})},9976:(e,t,n)=>{n.d(t,{Z:()=>s});const s=-1!==navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i)},3731:(e,t,n)=>{var s;n.d(t,{Z:()=>i});const i=!!(null===(s=null===navigator||void 0===navigator?void 0:navigator.geolocation)||void 0===s?void 0:s.getCurrentPosition)&&!1},6818:(e,t,n)=>{n.d(t,{Z:()=>s});const s=n(4089).Z},1174:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(5269);const i=new Set(["image/jpeg","image/png","image/bmp"]);s.Z&&i.add("image/webp");const o=i},2341:(e,t,n)=>{n.d(t,{Z:()=>r});var s=n(1174),i=n(554);const o=[...s.Z].concat([...i.Z]),r=new Set(o)},9030:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(4762);const i=!!document.createElement("video").canPlayType("video/quicktime")||s.IS_SAFARI||s.IS_APPLE_MOBILE},5783:(e,t,n)=>{n.d(t,{Z:()=>i});const s=document.createElement("audio"),i=!(!s.canPlayType||!s.canPlayType("audio/ogg;").replace(/no/,""))},2365:(e,t,n)=>{n.d(t,{Z:()=>s});const s=!n(4762).IS_FIREFOX&&!1},2820:(e,t,n)=>{n.d(t,{Z:()=>s});const s=!!("getDisplayMedia"in((null===navigator||void 0===navigator?void 0:navigator.mediaDevices)||{}))},2045:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(1267);const i="undefined"!=typeof SharedWorker&&!s.Z.noSharedWorker},5432:(e,t,n)=>{n.d(t,{Z:()=>s});const s="ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch},4762:(e,t,n)=>{n.r(t),n.d(t,{IS_ANDROID:()=>r,IS_APPLE:()=>o,IS_APPLE_MOBILE:()=>c,IS_CHROMIUM:()=>a,IS_FIREFOX:()=>d,IS_MOBILE:()=>u,IS_MOBILE_SAFARI:()=>h,IS_SAFARI:()=>l,USER_AGENT:()=>i});var s=n(6761);const i=navigator?navigator.userAgent:null,o=-1!==navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),r=-1!==navigator.userAgent.toLowerCase().indexOf("android"),a=/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),c=(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&!s.Z.MSStream,l=!!("safari"in s.Z)||!(!i||!(/\b(iPad|iPhone|iPod)\b/.test(i)||i.match("Safari")&&!i.match("Chrome"))),d=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,h=l&&c,u=(void 0===navigator.maxTouchPoints||navigator.maxTouchPoints>0)&&-1!=navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},2131:(e,t,n)=>{n.d(t,{Z:()=>s});const s=!!(null===navigator||void 0===navigator?void 0:navigator.vibrate)},554:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(9030);const i=new Set(["image/gif","video/mp4","video/webm"]);s.Z&&i.add("video/quicktime");const o=i},393:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(4762);const i=!!document.createElement("video").canPlayType("video/webm")&&!s.IS_SAFARI&&!s.IS_APPLE_MOBILE},5269:(e,t,n)=>{n.d(t,{Z:()=>s});const s=document.createElement("canvas").toDataURL("image/webp").startsWith("data:image/webp")},4089:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(4762);const i=!("undefined"==typeof RTCPeerConnection||s.IS_FIREFOX)},2064:(e,t,n)=>{n.d(t,{Dk:()=>g,EM:()=>w,K5:()=>u,Pi:()=>c,WE:()=>o,Y6:()=>a,cw:()=>d,dI:()=>r,e9:()=>f,ix:()=>p,oo:()=>l,py:()=>i,t1:()=>h,tB:()=>y,uY:()=>v});var s=n(3228);function i(e,t,n){e/=255,t/=255,n/=255;const s=Math.max(e,t,n),i=s-Math.min(e,t,n),o=i&&(s===e?(t-n)/i:s==t?2+(n-e)/i:4+(e-t)/i);return[60*(o<0?o+6:o),s&&i/s,s]}function o(e,t,n){const s=(s,i=(s+e/60)%6)=>Math.round(255*(n-n*t*Math.max(Math.min(i,4-i,1),0)));return[s(5),s(3),s(1)]}function r(e,t,n,s=1){e/=255,t/=255,n/=255;const i=Math.max(e,t,n),o=Math.min(e,t,n);let r,a;const c=(i+o)/2;if(i===o)r=a=0;else{const s=i-o;switch(a=c>.5?s/(2-i-o):s/(i+o),i){case e:r=(t-n)/s+(t1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e},a=n<.5?n*(1+t):n+t-n*t,c=2*n-a;i=s(c,a,e+1/3),o=s(c,a,e),r=s(c,a,e-1/3)}return[i,o,r,s].map((e=>Math.round(255*e)))}function c(e){const t=[],n="#"===e[0]?1:0;if(e.length===5+n&&(e=(n?"#":"")+"0"+e.slice(n)),e.length===3+n)for(let s=n;s("0"+e.toString(16)).slice(-2))).join("")}function u(e){return function(e){return h(function(e){const t=e.slice(5,-1).split(", "),n=+t.pop(),s=t.map((e=>e.endsWith("%")?+e.slice(0,-1):+e));return a(s[0],s[1],s[2],n)}(e))}(e).slice(0,-2)}function g(e,t,n){const s=new Array(3);for(let i=0;i<3;++i){const o=e[i],r=t[i];s[i]=Math.floor(r+(o-r)*n)}return s}function m(e){return(.2126*e[0]+.7152*e[1]+.0722*e[2])/255}function p(e,t){return e.map(((e,n)=>Math.round((e+t[n])/2)))}function f(e,t,n){const s=i(...t),r=i(...n),a=Math.min(1.5*s[1]/e[1],1);return s[0]=Math.min(360,r[0]-s[0]+e[0]),s[1]=Math.min(1,r[1]*e[1]/s[1]),s[2]=Math.min(1,(r[2]/s[2]+a-1)*e[2]/a),s[2]<.3?n:o(...s)}function v(e,t,n,r){const a=i(...n);if(Math.min(Math.abs(a[0]-e[0]),Math.abs(a[0]-e[0]-360))>30)return n;const c=Math.min(1.5*a[1]/e[1],1);a[0]=Math.min(360,a[0]+t[0]-e[0]),a[1]=Math.min(1,a[1]*t[1]/e[1]),a[2]=Math.min(1,a[2]*(1-c+c*t[2]/e[2]));let l=o(...a);const d=m(n),h=m(l);if(r?d>h:d(0,s.Z)(Math.round(e*t),0,255)))}(l,(1-e)*d/h+e)}return l}function b(e){const t=(e<0?16777215+e:e).toString(16);return"#"+(t.length>=6?t:"0".repeat(6-t.length)+t)}function y(e){return l(b(e))}function w(e){return e.settings?[e.settings.background_color,e.settings.second_background_color,e.settings.third_background_color,e.settings.fourth_background_color].filter(Boolean).map(b).join(","):""}},6009:(e,t,n)=>{function s(e,t){e=e.split(" ",1)[0],t=t.split(" ",1)[0];const n=e.split("."),s=t.split(".");for(let e=0;ei)return 1;if(ts})},8799:(e,t,n)=>{function s(){var e;return!!(null===(e=document.activeElement)||void 0===e?void 0:e.blur)&&(document.activeElement.blur(),!0)}n.d(t,{Z:()=>s})},3910:(e,t,n)=>{function s(e){if(e||(e=window.event),e){e=e.originalEvent||e;try{e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.returnValue=!1,e.cancelBubble=!0}catch(e){}}return!1}n.d(t,{Z:()=>s})},8497:(e,t,n)=>{function s(e,t){return e.closest("."+t)}n.d(t,{Z:()=>s})},5494:(e,t,n)=>{n.d(t,{Z:()=>i});var s=n(3035);function i(e){e.style.transform="translateY(-99999px)",e.focus(),(0,s.d1)().then((()=>{e.style.transform=""}))}},8090:(e,t,n)=>{n.d(t,{T:()=>a,Z:()=>c});var s=n(5432),i=n(4762),o=n(8497),r=n(5494);const a=i.IS_SAFARI&&i.IS_MOBILE&&s.Z;if(a){const e="clientY";let t=0;const n={capture:!0,passive:!1},s=n=>{const s=n.touches[0],i=(0,o.Z)(s.target,"scrollable-y");if(i){const o=s[e],r=t-o,a=i.scrollTop,c=i.scrollHeight,l=i.clientHeight,d=a?Math.round(a+i.clientHeight+r):a+r;(c===l||d>=c||d<=0)&&n.preventDefault()}else n.preventDefault()};let i=0;document.addEventListener("focusin",(o=>{!o.target.classList.contains("is-sticky-input-bugged")||o.timeStamp-i<50||((0,r.Z)(o.target),document.addEventListener("touchmove",s,n),document.addEventListener("touchstart",(n=>{if(n.touches.length>1)return;const s=n.touches[0];t=s[e]})))}),{passive:!0}),document.addEventListener("focusout",(e=>{document.removeEventListener("touchmove",s,n),i=e.timeStamp}),{passive:!0}),document.addEventListener("visibilitychange",(()=>{document.activeElement&&document.activeElement.classList.contains("is-sticky-input-bugged")&&document.activeElement.blur&&(0,r.Z)(document.activeElement)}),{passive:!0})}function c(e){a&&e.classList.add("is-sticky-input-bugged")}},6472:(e,t,n)=>{n.d(t,{B:()=>o,Z:()=>i});let s;function i(){window.addEventListener("beforeinstallprompt",(e=>{s=()=>{return t=this,n=void 0,o=function*(){e.prompt();const{outcome:t}=yield e.userChoice;"accepted"===t&&(s=void 0)},new((i=void 0)||(i=Promise))((function(e,s){function r(e){try{c(o.next(e))}catch(e){s(e)}}function a(e){try{c(o.throw(e))}catch(e){s(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(r,a)}c((o=o.apply(t,n||[])).next())}));var t,n,i,o}}))}function o(){return s}},4541:(e,t,n)=>{n.d(t,{Z:()=>c});var s=n(319),i=n(5418);const o=["b","ะฑ"],r={},a={text:"Roboto",icons:"tgico",monospace:"Roboto Mono"};function c(e={text:o,icons:void 0,monospace:o}){if(!("fonts"in document))return Promise.resolve();const t=[];for(const n in e){let s=e[n];"all"===s&&(s=o);const i=a[n],c="icons"===n?[500]:[400,500];for(const e of c){const n=(s||[void 0]).map((t=>{var n,s,o,a;const c=[e,"1rem",i].join(" ");return null!==(s=(o=null!==(n=r[c])&&void 0!==n?n:r[c]={})[a=t||""])&&void 0!==s?s:o[a]=document.fonts.load(c,t)}));t.push(...n)}}return Promise.race([Promise.all(t).catch(s.Z),(0,i.Z)(1e3)])}},130:(e,t,n)=>{function s(e,t){i(e),"string"==typeof t?t?e.innerHTML=t:e.replaceChildren():e.replaceChildren(t)}function i(e){e.setAttribute("dir","auto")}n.d(t,{Z:()=>s,m:()=>i})},2586:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(5432),i=n(3241);const o=s.Z?"touchstart":"mousemove";class r extends i.Z{constructor(){super(),this._isIdle=!0,this.focusPromise=Promise.resolve(),this.focusResolve=()=>{},window.addEventListener("blur",(()=>{this.isIdle=!0,window.addEventListener("focus",(()=>{this.isIdle=!1}),{once:!0})})),window.addEventListener(o,(()=>{this.isIdle=!1}),{once:!0,passive:!0}),this.addEventListener("change",(e=>{e?this.focusPromise=new Promise((e=>{this.focusResolve=e})):this.focusResolve()}))}getFocusPromise(){return this.focusPromise}get isIdle(){return this._isIdle}set isIdle(e){this._isIdle!==e&&(this._isIdle=e,this.dispatchEvent("change",e))}}const a=new r},3228:(e,t,n)=>{function s(e,t,n){return Math.min(n,Math.max(t,e))}n.d(t,{Z:()=>s})},3815:(e,t,n)=>{n.d(t,{Z:()=>o});var s=n(3241);class i extends s.Z{constructor(){super(...arguments),this.overlaysActive=0}get isOverlayActive(){return this.overlaysActive>0}set isOverlayActive(e){this.overlaysActive+=e?1:-1,this.dispatchEvent("change",this.isOverlayActive)}}const o=new i},3035:(e,t,n)=>{let s;function i(e){s?s.push(e):(s=[e],requestAnimationFrame((()=>{const e=s;s=void 0,e.forEach((e=>e()))})))}n.d(t,{AD:()=>l,T2:()=>i,TR:()=>c,d1:()=>d});let o,r,a=!1;function c(e){o?a?e():o.push(e):(o=[e],requestAnimationFrame((()=>{a=!0;for(let e=0;ei((()=>e())))),r.then((()=>{r=void 0})),r)}function d(){return new Promise((e=>{i((()=>{i(e)}))}))}},764:(e,t,n)=>{function s(e,t=e.split("?")){return i(null==t?void 0:t[1])}function i(e){const t={};return e?(e.split("&").forEach((e=>{t[e.split("=")[0]]=decodeURIComponent(e.split("=")[1])})),t):t}n.d(t,{V:()=>i,Z:()=>s})},6714:(e,t,n)=>{n.d(t,{Z:()=>h});var s=n(5432),i=n(3512),o=n(2064),r=n(410),a=function(e,t,n,s){return new(n||(n=Promise))((function(i,o){function r(e){try{c(s.next(e))}catch(e){o(e)}}function a(e){try{c(s.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,a)}c((s=s.apply(e,t||[])).next())}))};const c={"primary-color":{rgb:!0,light:!0,lightFilled:!0,dark:!0,darkRgb:!0},"message-out-primary-color":{lightFilled:!0},"surface-color":{rgb:!0},"danger-color":{light:!0,dark:!0},"primary-text-color":{rgb:!0},"secondary-text-color":{light:!0,lightFilled:!0},"message-out-background-color":{light:!0,lightFilled:!0,dark:!0,darkFilled:!0},"saved-color":{lightFilled:!0}},l={day:{"primary-color":"#3390ec","message-out-primary-color":"#4fae4e","surface-color":"#ffffff","danger-color":"#df3f40","primary-text-color":"#000000","secondary-text-color":"#707579","saved-color":"#359AD4"},night:{"primary-color":"#8774E1","message-out-primary-color":"#8774E1","surface-color":"#212121","danger-color":"#ff595a","primary-text-color":"#ffffff","secondary-text-color":"#aaaaaa","saved-color":"#8774E1"}},d=new class{constructor(){i.Z.addEventListener("theme_change",(()=>{this.setTheme()}))}get themeColorElem(){return void 0!==this._themeColorElem?this._themeColorElem:this._themeColorElem=document.head.querySelector('[name="theme-color"]')||null}setThemeColor(e=this.themeColor){e||(e=this.isNight()?"#212121":"#ffffff");const t=this.themeColorElem;t&&t.setAttribute("content",e)}setThemeListener(){try{const e=window.matchMedia("(prefers-color-scheme: dark)"),t=()=>{this.systemTheme=e.matches?"night":"day",i.Z.myId?i.Z.dispatchEvent("theme_change"):this.setTheme()};"addEventListener"in e?e.addEventListener("change",t):"addListener"in e&&e.addListener(t),t()}catch(e){}}applyHighlightningColor(){var e;let t;const n=this.getTheme();(null===(e=n.settings)||void 0===e?void 0:e.highlightningColor)?(t=n.settings.highlightningColor,document.documentElement.style.setProperty("--message-highlightning-color",t)):document.documentElement.style.removeProperty("--message-highlightning-color"),!s.Z&&t&&(this.themeColor=(0,o.K5)(t))}setTheme(){const e=this.isNight(),t=document.head.querySelector('[name="color-scheme"]');t&&t.setAttribute("content",e?"dark":"light"),document.documentElement.classList.toggle("night",e),this.setThemeColor();const n=this.getTheme();this.applyTheme(n);let s=this.styleElement;s||(s=this.styleElement=document.createElement("style"),document.head.append(s));const o=document.createElement("div");this.applyTheme(i.Z.settings.themes.find((e=>"night"===e.name)),o),s.textContent=`.night {${o.style.cssText}}`,this.applyHighlightningColor()}switchTheme(e){return a(this,void 0,void 0,(function*(){yield i.Z.managers.appStateManager.setByKey("settings.theme",e),i.Z.dispatchEvent("theme_change")}))}isNight(){return"night"===this.getTheme().name}getTheme(e=("system"===i.Z.settings.theme?this.systemTheme:i.Z.settings.theme)){return i.Z.settings.themes.find((t=>t.name===e))}bindColorApplier(e){const t=new Set;return{applyAppColor:n=>(t.add(n.name),this.applyAppColor(Object.assign(Object.assign({},n),e))),finalize:()=>{const n=e.isNight;for(const s in c)t.has(s)||this.applyAppColor(Object.assign({name:s,hex:l[n?"night":"day"][s]},e))}}}applyAppColor({name:e,hex:t,element:n,lightenAlpha:s=.08,darkenAlpha:i=s,mixColor:r,isNight:a}){const d=c[e],h=(0,o.oo)(t),u=(0,o.dI)(...h);null!=r||(r=(0,o.oo)(l[a?"night":"day"]["surface-color"]));const g=(0,o.Dk)(h,r,s),m=Object.assign(Object.assign({},u),{l:u.l-100*i});[[e,t],d.rgb&&[e+"-rgb",h.join(",")],d.light&&["light-"+e,`rgba(${h[0]}, ${h[1]}, ${h[2]}, ${s})`],d.lightFilled&&["light-filled-"+e,(0,o.t1)(g)],d.dark&&["dark-"+e,`hsl(${m.h}, ${m.s}%, ${m.l}%)`]].filter(Boolean).forEach((([e,t])=>{n.style.setProperty("--"+e,t)}))}applyNewTheme(e){return a(this,void 0,void 0,(function*(){const t=this.isNightTheme(e),n=this.getTheme(),s=i.Z.settings.themes,o=e.settings.find((e=>e.base_theme._===(t?"baseThemeNight":"baseThemeClassic"))),r=Object.assign(Object.assign({},e),{name:n.name,settings:Object.assign(Object.assign({},o),{highlightningColor:""})});yield this.AppBackgroundTab.setBackgroundDocument(o.wallpaper,r.settings),s[s.indexOf(n)]=r,yield i.Z.managers.appStateManager.setByKey("settings.themes",i.Z.settings.themes),i.Z.dispatchEvent("theme_change")}))}isNightTheme(e){return"night"===e.name||this.isNight()}applyTheme(e,t=document.documentElement){var n;const s=this.isNightTheme(e),i=Array.isArray(e.settings)?e.settings.find((e=>e.base_theme._===(s?"baseThemeNight":"baseThemeClassic"))):e.settings,r=l[s?"night":"day"];let a=(0,o.py)(...(0,o.oo)(r["primary-color"])),c=(0,o.py)(...(0,o.tB)(i.accent_color));const d=(0,o.uY)(a,c,(0,o.oo)(r["primary-color"]),!s),h=(0,o.t1)(d),{applyAppColor:u,finalize:g}=this.bindColorApplier({element:t,isNight:s});if(u({name:"primary-color",hex:h,darkenAlpha:.04}),u({name:"saved-color",hex:h,lightenAlpha:.64,mixColor:[255,255,255]}),!(null===(n=i.message_colors)||void 0===n?void 0:n.length))return;const m=s?.92:.12,p=(0,o.oo)(r["message-out-primary-color"]);a=(0,o.py)(...p);const f=(0,o.Dk)(p,(0,o.oo)(r["surface-color"]),m);let v=(0,o.tB)(i.message_colors[0]);i.message_colors.length>1&&(i.message_colors.slice(1).forEach((e=>{v=(0,o.ix)(v,(0,o.tB)(e))})),v=(0,o.e9)(a,f,v));const b=v;c=(0,o.py)(...b);const y=void 0!==i.outbox_accent_color&&(0,o.py)(...(0,o.tB)(i.outbox_accent_color)),w=(0,o.Dk)(v,(0,o.oo)(r["surface-color"]),m);u({name:"message-out-background-color",hex:(0,o.t1)(w),lightenAlpha:m}),u({name:"message-out-primary-color",hex:s?"#ffffff":(0,o.t1)(y?(0,o.WE)(...y):v),mixColor:w}),g()}};r.GO&&(r.GO.themeController=d);const h=d},2938:(e,t,n)=>{var s=n(4159),i=n(8799),o=n(3910),r=n(8090),a=n(4541),c=n(9976),l=n(4762),d=n(5418);!function(){const e={construct(e,t){let n=t[0]+"";return 0!==n.indexOf("blob:")&&(n+=location.search),new e(n)}};[Worker,"undefined"!=typeof SharedWorker&&SharedWorker].filter(Boolean).forEach((t=>{window[t.name]=new Proxy(t,e)}))}();var h=n(3512),u=n(5432),g=n(2325),m=(n(4110),n(690),n(3855)),p=n(2554),f=n(6714),v=n(3815),b=n(490),y=n(764),w=n(1267),S=n(410);const k="onbeforeinstallprompt"in window;var P=n(6472);document.addEventListener("DOMContentLoaded",(()=>{return e=void 0,t=void 0,E=function*(){var e;Element.prototype.toggleAttribute||(Element.prototype.toggleAttribute=function(e,t){return void 0!==t&&(t=!!t),this.hasAttribute(e)?!!t||(this.removeAttribute(e),!1):!1!==t&&(this.setAttribute(e,""),!0)}),void 0===Node.prototype.replaceChildren&&(Node.prototype.replaceChildren=function(...e){this.textContent="",e&&this.append(...e)}),h.Z.managers=(0,p.Z)(),document.getElementById("manifest").href=`site${l.IS_APPLE&&!l.IS_APPLE_MOBILE?"_apple":""}.webmanifest?v=jw3mK7G9Aq`,b.Z.start();const t=window.visualViewport||window;let _,E=!1;const A=()=>{const e=.01*(E&&!v.Z.isOverlayActive?t.height||t.innerHeight:window.innerHeight);_!==e&&(u.Z&&_1&&(0,i.Z)(),_=e,document.documentElement.style.setProperty("--vh",`${e}px`))};if(window.addEventListener("resize",A),A(),r.T){const e=()=>{E=1===n&&r.T&&!v.Z.isOverlayActive,A(),t!==window&&(E?(window.removeEventListener("resize",A),t.addEventListener("resize",A)):(t.removeEventListener("resize",A),window.addEventListener("resize",A)))};let n;window.onImTabChange=t=>{const s=void 0!==n;n=t,(s||1===n)&&e()},v.Z.addEventListener("change",(()=>{e()}))}if(l.IS_FIREFOX&&!c.Z&&document.addEventListener("dragstart",(e=>{const t=e.target;if("IMG"===t.tagName&&t.classList.contains("emoji"))return(0,o.Z)(e),!1})),c.Z&&document.documentElement.classList.add("native-emoji"),document.addEventListener("dragstart",(e=>{var t;if("IMG"===(null===(t=e.target)||void 0===t?void 0:t.tagName))return e.preventDefault(),!1})),document.addEventListener("contextmenu",(e=>{"IMG"!==e.target.tagName||window.appMediaViewer||(0,o.Z)(e)})),l.IS_FIREFOX&&document.documentElement.classList.add("is-firefox","no-backdrop"),l.IS_MOBILE&&document.documentElement.classList.add("is-mobile"),l.IS_APPLE)l.IS_SAFARI&&document.documentElement.classList.add("is-safari"),l.IS_APPLE_MOBILE?document.documentElement.classList.add("is-ios"):document.documentElement.classList.add("is-mac");else if(l.IS_ANDROID){document.documentElement.classList.add("is-android");const e=()=>{n=!0,window.addEventListener("resize",t,{once:!0})},t=()=>{n=!1,(0,i.Z)()};let n=!1;document.addEventListener("touchend",(t=>{const s=t.target.closest('[contenteditable="true"], input');s&&(document.activeElement===s||n||(console.log("input click",t,document.activeElement,s,s.matches(":focus")),window.addEventListener("resize",e,{once:!0})))}))}u.Z?document.documentElement.classList.add("is-touch"):document.documentElement.classList.add("no-touch"),k&&(0,P.Z)();const Z=performance.now(),C=g.ZP.getCacheLangPack(),[I,L]=yield Promise.all([m.Z.sendState().then((([e])=>e)),C]);function T(e,t){e.style.opacity="0",t.then((()=>{window.requestAnimationFrame((()=>{e.style.opacity=""}))}))}g.ZP.setTimeFormat(I.state.settings.timeFormat),h.Z.managers.rootScope.getPremium().then((e=>{h.Z.premium=e})),f.Z.setThemeListener(),L.appVersion!==s.Z.langPackVersion&&g.ZP.getLangPack(L.lang_code),console.log("got state, time:",performance.now()-Z),"ar"===L.lang_code&&S.Tj,document.documentElement.dir="ltr";let O=I.state.authState;const M=location.hash.split("?"),x=(0,y.V)(null!==(e=M[1])&&void 0!==e?e:M[0]);if(x.tgWebAuthToken&&"authStateSignedIn"!==O._){const e={token:x.tgWebAuthToken,dcId:+x.tgWebAuthDcId,userId:x.tgWebAuthUserId.toUserId(),isTest:void 0!==x.tgWebAuthTest&&!!+x.tgWebAuthTest,tgAddr:x.tgaddr};if(e.isTest!==w.Z.test){const e=new URLSearchParams(location.search);return+x.tgWebAuthTest?e.set("test","1"):e.delete("test"),void(location.search=e.toString())}h.Z.managers.appStateManager.pushToState("authState",O={_:"authStateSignImport",data:e})}if("authStateSignedIn"!==O._){console.log("Will mount auth page:",O._,Date.now()/1e3);const e=document.getElementById("auth-pages");let t,s;if(e){t=e.querySelector(".scrollable"),u.Z&&!l.IS_MOBILE_SAFARI||t.classList.add("no-scrollbar"),t.style.opacity="0";const n=document.createElement("div");n.classList.add("auth-placeholder"),t.prepend(n),t.append(n.cloneNode())}try{yield Promise.all([Promise.resolve().then(n.bind(n,2831)),Promise.resolve().then(n.bind(n,6702))]).then((([e,t])=>{e.default.setAuthorized(!1),t.default.forceUnsubscribe()}))}catch(e){}switch(O._){case"authStateSignIn":s=(yield Promise.all([n.e(147),n.e(646),n.e(63)]).then(n.bind(n,810))).default.mount();break;case"authStateSignQr":s=(yield Promise.all([n.e(147),n.e(646),n.e(709)]).then(n.bind(n,9709))).default.mount();break;case"authStateAuthCode":s=(yield Promise.all([n.e(147),n.e(646),n.e(53)]).then(n.bind(n,6392))).default.mount(O.sentCode);break;case"authStatePassword":s=(yield Promise.all([n.e(147),n.e(646),n.e(437)]).then(n.bind(n,9437))).default.mount();break;case"authStateSignUp":s=(yield Promise.all([n.e(147),n.e(646),n.e(339)]).then(n.bind(n,8339))).default.mount(O.authCode);break;case"authStateSignImport":s=(yield Promise.all([n.e(147),n.e(646),n.e(231)]).then(n.bind(n,3231))).default.mount(O.data)}t&&(s&&(yield s),T(t,"fonts"in document?Promise.race([(0,d.Z)(1e3),document.fonts.ready]):Promise.resolve()))}else console.log("Will mount IM page:",Date.now()/1e3),T(document.getElementById("main-columns"),(0,a.Z)()),(yield Promise.all([n.e(147),n.e(646),n.e(436)]).then(n.bind(n,5436))).default.mount()},new((_=void 0)||(_=Promise))((function(n,s){function i(e){try{r(E.next(e))}catch(e){s(e)}}function o(e){try{r(E.throw(e))}catch(e){s(e)}}function r(e){var t;e.done?n(e.value):(t=e.value,t instanceof _?t:new _((function(e){e(t)}))).then(i,o)}r((E=E.apply(e,t||[])).next())}));var e,t,_,E}))},1722:(e,t,n)=>{n.d(t,{Z:()=>s});const s=new class{reload(){try{location.reload()}catch(e){}}close(){try{window.close()}catch(e){}}focus(){window.focus()}}},2554:(e,t,n)=>{n.d(t,{Z:()=>c});var s=n(3855),i=n(410);const o={};function r(e,t){return new Proxy(e,{get:(e,n,r)=>{var a;return null!==(a=e[n])&&void 0!==a?a:e[n]=function(e,t){return new Proxy({},{get:(n,r,a)=>(...n)=>{var a;const c=s.Z.invoke("manager",{name:e,method:r,args:n},t);return i.ZP&&(null===(a=o[e])||void 0===a?void 0:a.has(r))&&console.warn("manager request",e,r,n),c}})}(n,t)}})}let a;function c(){return a||(a=r({},!1),a.acknowledged=r({},!0),a)}i.ZP&&(window.DEBUG_MANAGER_REQUESTS=o)},6666:(e,t,n)=>{n.d(t,{Z:()=>c});var s=n(1267),i=n(5471),o=n(5953),r=n(5003);class a{constructor(e){(0,o.Z)(this,e),s.Z.test&&(this.name+="_test"),this.storageIsAvailable=!0,this.log=(0,r.kg)(["IDB",e.name].join("-")),this.log("constructor"),this.openDatabase(!0),a.INSTANCES.push(this)}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;const t=(e,t)=>{var n;const s=Array.from(e.indexNames);for(const t of s)e.deleteIndex(t);if(null===(n=t.indexes)||void 0===n?void 0:n.length)for(const n of t.indexes)e.indexNames.contains(n.indexName)||e.createIndex(n.indexName,n.keyPath,n.objectParameters)};try{var n=indexedDB.open(this.name,this.version);if(!n)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let s=!1;return setTimeout((()=>{s||n.onerror((0,i.Z)("IDB_CREATE_TIMEOUT"))}),3e3),this.openDbPromise=new Promise(((e,i)=>{n.onsuccess=t=>{s=!0;const o=n.result;let r=!1;this.log("Opened"),o.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),i(e)},o.onclose=e=>{this.log.error("closed:",e),!r&&this.openDatabase()},o.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(r=!0),t.onerror&&t.onerror(e),o.close()},o.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=o)},n.onerror=e=>{s=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),i(e)},n.onupgradeneeded=e=>{s=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);const n=e.target,i=n.result;this.stores.forEach((e=>{if(i.objectStoreNames.contains(e.name)){const s=n.transaction.objectStore(e.name);t(s,e)}else((e,n)=>{const s=e.createObjectStore(n.name);t(s,n)})(i,e)}))}}))}static create(e){var t;return null!==(t=this.INSTANCES.find((t=>t.name===e.name)))&&void 0!==t?t:new a(e)}static closeDatabases(e){this.INSTANCES.forEach((t=>{if(e&&e===t)return;const n=t.db;n&&(n.onclose=()=>{},n.close())}))}}a.INSTANCES=[];class c{constructor(e,t){this.storeName=t,this.log=(0,r.kg)(["IDB",e.name,t].join("-")),this.idb=a.create(e)}delete(e,t){const n=Array.isArray(e);return n||(e=[].concat(e)),this.getObjectStore("readwrite",(t=>{const s=e.map((e=>t.delete(e)));return n?s:s[0]}),"",t)}clear(e){return this.getObjectStore("readwrite",(e=>e.clear()),"",e)}save(e,t,n){const s=Array.isArray(e);return s||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",(n=>{const i=e.map(((e,s)=>n.put(t[s],e)));return s?i:i[0]}),"",n)}get(e,t){const n=Array.isArray(e);if(n){if(!e.length)return Promise.resolve([])}else{if(!e)return;e=[].concat(e)}return this.getObjectStore("readonly",(t=>{const s=e.map((e=>t.get(e)));return n?s:s[0]}),"",t)}getObjectStore(e,t,n,s=this.storeName){let i;return n&&(i=performance.now(),this.log(n+": start")),this.idb.openDatabase().then((o=>new Promise(((r,a)=>{const c=o.transaction([s],e),l=()=>{clearTimeout(u),a(c.error)},d=()=>{clearTimeout(u),n&&this.log(n+": end",performance.now()-i);const e=p.map((e=>e.result));r(m?e:e[0])};c.onerror=l;const h="readwrite"===e;h&&(c.oncomplete=()=>d());const u=setTimeout((()=>{this.log.error("transaction not finished",c,n)}),1e4),g=t(c.objectStore(s)),m=Array.isArray(g),p=m?g:[].concat(g);if(h)return;const f=p.length;let v=f;const b=()=>{c.error||--v||d()};for(let e=0;ee.getAll()),"",e)}}},2325:(e,t,n)=>{n.d(t,{$d:()=>w,A1:()=>S,Hz:()=>m,XZ:()=>y,ZP:()=>v,ag:()=>b,nK:()=>p,v_:()=>k});var s=n(410),i=n(7922),o=n(4159),r=n(3512),a=n(4762),c=n(6848),l=n(5953),d=n(9005),h=n(6637),u=n(3591),g=n(130);const m={messageActionChatCreate:"ActionCreateGroup",messageActionChatCreateYou:"ActionYouCreateGroup",messageActionChatEditTitle:"ActionChangedTitle",messageActionChatEditPhoto:"ActionChangedPhoto",messageActionChatEditVideo:"ActionChangedVideo",messageActionChatDeletePhoto:"ActionRemovedPhoto",messageActionChatReturn:"ActionAddUserSelf",messageActionChatReturnYou:"ActionAddUserSelfYou",messageActionChatJoined:"ActionAddUserSelfMega",messageActionChatJoinedYou:"ChannelMegaJoined",messageActionChatAddUser:"ActionAddUser",messageActionChatAddUsers:"ActionAddUser",messageActionChatLeave:"ActionLeftUser",messageActionChatLeaveYou:"YouLeft",messageActionChatDeleteUser:"ActionKickUser",messageActionChatJoinedByLink:"ActionInviteUser",messageActionPinMessage:"Chat.Service.Group.UpdatedPinnedMessage",messageActionContactSignUp:"Chat.Service.PeerJoinedTelegram",messageActionChannelCreate:"ActionCreateChannel",messageActionChannelEditTitle:"Chat.Service.Channel.UpdatedTitle",messageActionChannelEditPhoto:"Chat.Service.Channel.UpdatedPhoto",messageActionChannelEditVideo:"Chat.Service.Channel.UpdatedVideo",messageActionChannelDeletePhoto:"Chat.Service.Channel.RemovedPhoto",messageActionHistoryClear:"HistoryCleared",messageActionDiscussionStarted:"DiscussionStarted",messageActionChannelMigrateFrom:"ActionMigrateFromGroup","messageActionPhoneCall.video_in_ok":"ChatList.Service.VideoCall.incoming","messageActionPhoneCall.video_out_ok":"ChatList.Service.VideoCall.outgoing","messageActionPhoneCall.video_missed":"ChatList.Service.VideoCall.Missed","messageActionPhoneCall.video_cancelled":"ChatList.Service.VideoCall.Cancelled","messageActionPhoneCall.in_ok":"ChatList.Service.Call.incoming","messageActionPhoneCall.out_ok":"ChatList.Service.Call.outgoing","messageActionPhoneCall.missed":"ChatList.Service.Call.Missed","messageActionPhoneCall.cancelled":"ChatList.Service.Call.Cancelled","messageActionGroupCall.started":"Chat.Service.VoiceChatStarted.Channel","messageActionGroupCall.started_by":"Chat.Service.VoiceChatStarted","messageActionGroupCall.started_byYou":"Chat.Service.VoiceChatStartedYou","messageActionGroupCall.ended":"Chat.Service.VoiceChatFinished.Channel","messageActionGroupCall.ended_by":"Chat.Service.VoiceChatFinished","messageActionGroupCall.ended_byYou":"Chat.Service.VoiceChatFinishedYou",messageActionBotAllowed:"Chat.Service.BotPermissionAllowed"},p=a.IS_MOBILE?"Message.Unsupported.Mobile":"Message.Unsupported.Desktop";var f;!function(e){let t,a;function m(t){e.lastRequestedLangCode=t,e.lastRequestedNormalizedLangCode=t.split("-")[0]}function p(){if("h12"===e.timeFormat)try{const t=A({hour:"numeric",minute:"numeric",hour12:!0}),n=new Date;n.setHours(0);const s=t.format(n);e.amPmCache.am=s.split(/\s/)[1],n.setHours(12);const i=t.format(n);e.amPmCache.pm=i.split(/\s/)[1]}catch(t){console.error("cannot get am/pm",t),e.amPmCache={am:"AM",pm:"PM"}}}function f(){const e=o.Z.langPackCode;return m(e),Promise.all([n.e(104).then(n.bind(n,9104)),n.e(301).then(n.bind(n,9301)),n.e(8).then(n.bind(n,9179))]).then((([t,n,s])=>{const i=[];return b(t.default,i),b(n.default,i),y({_:"langPackDifference",from_version:0,lang_code:e,strings:i,version:0,local:!0,countries:s.default})}))}function v(t,s){e.requestedServerLanguage=!0;const i=r.Z.managers;return Promise.all([i.apiManager.invokeApiCacheable("langpack.getLangPack",{lang_code:t,lang_pack:"web"}),!1,n.e(104).then(n.bind(n,9104)),n.e(301).then(n.bind(n,9301)),i.apiManager.invokeApiCacheable("help.getCountriesList",{lang_code:t,hash:0}),e.polyfillPromise])}function b(e,t=[]){for(const n in e){const s=e[n];"string"==typeof s?t.push({_:"langPackString",key:n,value:s}):t.push(Object.assign({_:"langPackStringPluralized",key:n},s))}return t}function y(e){return e.appVersion=o.Z.langPackVersion,i.Z.set({langPack:e}).then((()=>(w(e),e)))}function w(n){const s=e.lastRequestedLangCode;if(n.lang_code===s){try{t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode)}catch(n){console.error("pluralRules error",n),t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode.split("-",1)[0])}try{t=new Intl.PluralRules(n.lang_code)}catch(e){console.error("pluralRules error",e),t=new Intl.PluralRules(n.lang_code.split("-",1)[0])}e.strings.clear();for(const t of n.strings)e.strings.set(t.key,t);n.countries&&(e.countriesList.length=0,e.countriesList.push(...n.countries.countries),n.countries.countries.forEach((t=>{if(t.name){const n=t.default_name;e.strings.set(n,{_:"langPackString",key:n,value:t.name})}}))),e.lastAppliedLangCode!==s&&(r.Z.dispatchEvent("language_change",s),e.lastAppliedLangCode=s,E.clear(),p()),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const n=e.weakMap.get(t);n&&n.update()}))}}function S(e,t,n={i:0}){const s=[];let i=0;return e.replace(/(\*\*|__)(.+?)\1|(\n)|(\[.+?\]\(.*?\))|un\d|%\d\$.|%./g,((e,o,r,a,c,l,d)=>{if(s.push(d.slice(i,l)),o){let e;switch(o){case"**":e=document.createElement("b");break;case"__":e=document.createElement("i")}e.append(...S(r,t,n)),s.push(e)}else if(a)s.push(document.createElement("br"));else if(c){const e=c.lastIndexOf("]"),i=c.slice(1,e),o=c.slice(e+2,c.length-1);let r;if(o&&(0,h.Z)(o)){r=document.createElement("a");const e=(0,u.Z)(o);r.href=e.url,e.onclick&&r.setAttribute("onclick",e.onclick),r.target="_blank"}else r=t[n.i++],r instanceof DocumentFragment&&(r=r.firstChild),r.textContent="";r.append(...S(i,t,n)),s.push(r)}else t&&function(e,t,n){const s=t[n.i++];Array.isArray(s)?e.push(...s):e.push(s)}(s,t,n);return i=l+e.length,""})),i!==e.length&&s.push(e.slice(i)),s}function k(n,s=!1,i){const o=e.strings.get(n);let r;if(o)if("langPackStringPluralized"===o._&&(null==i?void 0:i.length)){let e=i[0];"string"==typeof e&&(e=+e.replace(/\D/g,"")),r=o[t.select(e)+"_value"]||o.other_value}else r="langPackString"===o._?o.value:n;else r=n;const a=S(r,i);return s?a.map((e=>e instanceof Node?e.textContent:e)).join(""):a}e.strings=new Map,e.countriesList=[],e.requestedServerLanguage=!1,e.isRTL=!1,e.setRTL=function(t){e.isRTL=t},e.getCacheLangPack=function(){return a||(a=Promise.all([i.Z.get("langPack"),e.polyfillPromise]).then((([t])=>t?(s.ZP,e.lastRequestedLangCode||m(t.lang_code),w(t),t):f())).finally((()=>{a=void 0})))},e.setTimeFormat=function(t,n=!!e.timeFormat&&e.timeFormat!==t){e.timeFormat=t,p(),n&&(E.clear(),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const n=e.weakMap.get(t);n instanceof Z&&n.update()})))},e.loadLocalLangPack=f,e.loadLangPack=v,e.getStrings=function(e,t){return r.Z.managers.apiManager.invokeApi("langpack.getStrings",{lang_pack:o.Z.langPack,lang_code:e,keys:t})},e.formatLocalStrings=b,e.getLangPack=function(e,t){return m(e),v(e).then((([e,t,n,s,i,o])=>{let r=[];return[n,s].forEach((e=>{b(e.default,r)})),r=r.concat(...[e.strings,t.strings].filter(Boolean)),e.strings=r,e.countries=i,y(e)}))},e.saveLangPack=y,e.polyfillPromise="undefined"!=typeof Intl&&void 0!==Intl.PluralRules?Promise.resolve():n.e(642).then(n.bind(n,4642)).then((e=>{window.Intl=Object.assign("undefined"!=typeof Intl?Intl:{},e.default)})),e.applyLangPack=w,e.superFormatter=S,e.format=k,e.weakMap=new WeakMap;class P{constructor(t){this.element=(null==t?void 0:t.element)||document.createElement("span"),this.element.classList.add("i18n"),this.property=null==t?void 0:t.property,t&&(t.key||t.date)&&this.update(t),e.weakMap.set(this.element,this)}}class _ extends P{constructor(e={}){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"innerHTML"}))}update(e){if((0,l.Z)(this,e),"innerHTML"===this.property)this.element.textContent="",this.element.append(...k(this.key,!1,this.args));else{const e=this.element[this.property],t=k(this.key,!0,this.args);void 0===e?this.element.dataset[this.property]=t:this.element[this.property]=t}}compareAndUpdate(e){if(this.key!==e.key||!(0,c.Z)(this.args,e.args))return this.update(e)}}e.IntlElement=_;const E=new Map;function A(t={}){const n=JSON.stringify(t);let s=E.get(n);return s||(s=new Intl.DateTimeFormat(e.lastRequestedNormalizedLangCode+"-u-hc-"+e.timeFormat,t),E.set(n,s)),s}e.amPmCache={am:"AM",pm:"PM"};class Z extends P{constructor(e){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"textContent"})),(0,g.m)(this.element)}update(t){let n;if((0,l.Z)(this,t),this.options.hour&&this.options.minute&&2===Object.keys(this.options).length){const t=this.date.getHours();n=("0"+("h12"===e.timeFormat?t%12||12:t)).slice(-2)+":"+("0"+this.date.getMinutes()).slice(-2),"h12"===e.timeFormat&&(n+=" "+(t<12?e.amPmCache.am:e.amPmCache.pm))}else{const e=A(this.options);n=(0,d.Z)(e.format(this.date))}this.element[this.property]=n}}e.IntlDateElement=Z,e.i18n=function(e,t){return new _({key:e,args:t}).element},e.i18n_=function(e){return new _(e).element},e._i18n=function(e,t,n,s){return new _({element:e,key:t,args:n,property:s}).element}}(f||(f={}));const v=f,b=f.i18n,y=f.i18n_,w=f._i18n;function S(e,t){const n=e.slice(0,1);for(let s=1;s{const s=e&&t?"AutoDownloadSettings.LastDelimeter":"AutoDownloadSettings.Delimeter";return n?f.format(s,!0):b(s)}));return n?s.join(""):s}s.GO.I18n=f},1507:(e,t,n)=>{n.d(t,{BP:()=>u,BX:()=>m,DZ:()=>v,IA:()=>o,Iw:()=>l,J$:()=>p,NM:()=>s,OS:()=>h,Ox:()=>g,Pt:()=>d,Zi:()=>f,gZ:()=>c,hj:()=>i,rU:()=>a,yF:()=>r});const s=0,i=1271266957,o=777,r=777e3,a=2147483647,c="",l=20971520,d="",h=[7322096,16766590,13338331,9367192,16749490,16478047],u="default_static",g=4295032831,m=new Set(["web","k","z"]),p=0,f=1,v=new Set([p,f]);Math.max(...Array.from(v))},3855:(e,t,n)=>{n.d(t,{Z:()=>se});var s=n(3512),i=n(7730),o=n(410),r=n(7487),a=n(6702),c=n(1722),l=n(2831),d=n(5418),h=n(993),u=n(7328),g=n(6663),m=n(9976),p=n(3731),f=n(6818),v=n(1174),b=n(2341),y=n(9030),w=n(2365),S=n(2820),k=n(5432),P=n(2131),_=n(554),E=n(393),A=n(5269),Z=n(4089),C=n(4762),I=n(5783),L=n(2045),T=n(8189);const O=Object.assign({CAN_USE_TRANSFERABLES:u.Z,IS_APPLE_MX:T.Z,IS_CALL_SUPPORTED:h.Z,IS_CANVAS_FILTER_SUPPORTED:g.Z,IS_EMOJI_SUPPORTED:m.Z,IS_GEOLOCATION_SUPPORTED:p.Z,IS_GROUP_CALL_SUPPORTED:f.Z,IS_MOV_SUPPORTED:y.Z,IS_PARALLAX_SUPPORTED:w.Z,IS_SCREEN_SHARING_SUPPORTED:S.Z,IS_TOUCH_SUPPORTED:k.Z,IS_VIBRATE_SUPPORTED:P.Z,IS_OPUS_SUPPORTED:I.Z,IS_SHARED_WORKER_SUPPORTED:L.Z,IS_WEBM_SUPPORTED:E.Z,IS_WEBP_SUPPORTED:A.Z,IS_WEBRTC_SUPPORTED:Z.Z,IMAGE_MIME_TYPES_SUPPORTED:v.Z,MEDIA_MIME_TYPES_SUPPORTED:b.Z,VIDEO_MIME_TYPES_SUPPORTED:_.Z},C);var M=n(4159),x=n(236),W=n(6009),D=n(8479),R=n(946),N=n(7922),j=n(5466),F=n(5003);const U=x.h.version,B=x.h.build,V=Object.keys(x.h),G=["contactsListCachedTime","stateCreatedTime","maxSeenMsgId","filtersArr"];function $(){return e=this,t=void 0,i=function*(){const e=(0,F.kg)("STATE-LOADER"),t=performance.now(),n=(0,j.$)(e),i=V.map((e=>n(N.Z.get(e),"state "+e))).concat(n(r.Z.get("user_auth"),"auth"),n(r.Z.get("state_id"),"auth"),n(r.Z.get("k_build"),"auth")).concat(n(N.Z.get("user_auth"),"old auth")),a=yield Promise.all(i);e.warn("promises",performance.now()-t);const c=[],l=(e,t)=>{d[e]=t,c.push(e)};let d={};for(let e=0,t=V.length;eN.Z.get(e))));e.push("user_auth"),t.push("number"==typeof h||"string"==typeof h?{dcID:t[0]||M.Z.baseDcId,date:Date.now()/1e3|0,id:h.toPeerId(!1)}:h);const n={};e.forEach(((e,s)=>{n[e]=t[s]})),yield r.Z.set(n)}h&&(d.authState={_:"authStateSignedIn"},s.Z.dispatchEvent("user_auth","number"==typeof h||"string"==typeof h?{dcID:0,date:Date.now()/1e3|0,id:h.toPeerId(!1)}:h));const p=new Set;if(d.stateId!==u){if(void 0!==u){const e=new Map([["authState",void 0],["stateId",void 0]]);e.forEach(((t,n)=>{e.set(n,(0,D.Z)(d[n]))})),d=(0,D.Z)(x.h),e.forEach(((e,t)=>{d[t]=e}));const t={chats:1,dialogs:1,users:1};for(const e in t)p.add(e);f=d,c.length=0,d=f,c.push(...Object.keys(d))}yield r.Z.set({state_id:d.stateId})}var f;const v=Date.now();d.stateCreatedTime+864e5{l(e,(0,D.Z)(x.h[e]))})));const b=d.settings.autoDownload;if(void 0!==(null==b?void 0:b.private)){const e=["contacts","private","groups","channels"];["photo","video","file"].forEach((t=>{const n=b[t]={};e.forEach((e=>{n[e]=b[e]}))})),e.forEach((e=>{delete b[e]})),l("settings",d.settings)}const y=new Set(["settings.themes"]);let w,S;if((0,R.Z)(x.h,d,(e=>{l(e,d[e])}),void 0,y),d.version!==U||d.build!==B){if(d.build<217&&(d.allDialogsLoaded=(0,D.Z)(x.h.allDialogsLoaded),d.pinnedOrders=(0,D.Z)(x.h.pinnedOrders),d.filtersArr=(0,D.Z)(x.h.filtersArr),p.add("dialogs")),-1===(0,W.Z)(d.version,"1.7.1")){let e=!1;if(-1===(0,W.Z)(d.version,"1.3.0"))e=!0,d.settings.theme=(0,D.Z)(x.h.settings.theme),d.settings.themes=(0,D.Z)(x.h.settings.themes);else if(-1===(0,W.Z)(d.version,"1.7.1")){e=!0;const t=d.settings.themes;d.settings.themes=(0,D.Z)(x.h.settings.themes);try{t.forEach((e=>{const t=e.background;if(!t)return;const n=d.settings.themes.find((t=>t.name===e.name));n.settings.highlightningColor=t.highlightningColor;const s=(t.color||"").split(",").map((e=>e&&parseInt(e.slice(1),16)));if(t.color&&!t.slug)n.settings.wallpaper={_:"wallPaperNoFile",id:0,pFlags:{},settings:{_:"wallPaperSettings",pFlags:{}}};else{const e={_:"wallPaper",id:0,access_hash:0,slug:t.slug,document:{},pFlags:{},settings:{_:"wallPaperSettings",pFlags:{}}},s=e.settings;n.settings.wallpaper=e,t.slug&&!t.color?s.pFlags.blur=t.blur||void 0:t.intensity&&(s.intensity=t.intensity,e.pFlags.pattern=!0,e.pFlags.dark=t.intensity<0||void 0)}if(s.length){const e=n.settings.wallpaper.settings;e.background_color=s[0],e.second_background_color=s[1],e.third_background_color=s[2],e.fourth_background_color=s[3]}}))}catch(e){console.error("migrating themes error",e)}}e&&l("settings",d.settings)}0!==(0,W.Z)(d.version,U)&&(w=U,S=d.version),l("version",U),l("build",B)}return g!==B&&(!g||g{var t,n;const{name:s,key:i,value:o}=e;if(!e.hasOwnProperty("key"))return void(this.mirrors[s]=o);const r=null!==(t=(n=this.mirrors)[s])&&void 0!==t?t:n[s]={};void 0===o?delete r[i]:r[i]=o},this.mirrors={},this.tabState={chatPeerIds:[],idleStartTime:0},this.log("constructor"),this.registerWorker(),this.registerServiceWorker(),this.registerCryptoWorker(),this.addMultipleEventsListeners({convertWebp:({fileName:e,bytes:t})=>i.Z.convert(e,t),convertOpus:({fileName:e,bytes:t})=>q.Z.pushDecodeTask(t,!1).then((e=>e.bytes)),event:({name:e,args:t})=>{s.Z.dispatchEventSingle(e,...t)},localStorageProxy:e=>{const t=e;return r.Z[t.type](...t.args)},mirror:this.onMirrorTask}),s.Z.addEventListener("language_change",(e=>{s.Z.managers.networkerFactory.setLanguage(e)})),window.addEventListener("online",(()=>{s.Z.managers.networkerFactory.forceReconnectTimeout()})),s.Z.addEventListener("logging_out",(()=>{Promise.all([(0,X.Z)(!1,!0),r.Z.clear(),Promise.race([l.default.setAuthorized(!1),(0,d.Z)(3e3)]),a.default.forceUnsubscribe(),Promise.all(["cachedFiles","cachedStreamChunks"].map((e=>caches.delete(e))))]).finally((()=>{c.Z.reload()}))})),J.Z.addEventListener("change",(e=>{this.updateTabStateIdle(e)})),this.updateTabStateIdle(J.Z.isIdle),this.log("Passing environment:",O),this.invoke("environment",O)}pingServiceWorkerWithIframe(){if(this.pingServiceWorkerPromise)return this.pingServiceWorkerPromise;const e=this.pingServiceWorkerPromise=(0,Q.Z)(),t=document.createElement("iframe");t.hidden=!0;const n=()=>{setTimeout((()=>{this.pingServiceWorkerPromise=void 0}),1e4),clearTimeout(s),t.remove(),t.removeEventListener("load",n),t.removeEventListener("error",n),e.resolve()};t.addEventListener("load",n),t.addEventListener("error",n),t.src="ping/"+(4294967295*Math.random()|0),document.body.append(t);const s=window.setTimeout(n,1e3);return e}attachServiceWorker(e){this.lastServiceWorker&&this.serviceMessagePort.detachPort(this.lastServiceWorker),this.serviceMessagePort.attachSendPort(this.lastServiceWorker=e),this.serviceMessagePort.invokeVoid("hello",void 0)}_registerServiceWorker(){navigator.serviceWorker.register(new URL(n.p+n.u(670),n.b),{scope:"./"}).then((e=>{if(this.log("SW registered",e),e.active&&!navigator.serviceWorker.controller)return e.unregister().then((()=>{window.location.reload()}));(e.installing||e.waiting||e.active).addEventListener("statechange",(e=>{this.log("SW statechange",e)}));const t=navigator.serviceWorker.controller||e.installing||e.waiting||e.active;this.attachServiceWorker(t)}),(e=>{this.log.error("SW registration failed!",e),this.invokeVoid("serviceWorkerOnline",!1)}))}registerServiceWorker(){if(!("serviceWorker"in navigator))return;this.serviceMessagePort=new K.Z;const e=navigator.serviceWorker;this._registerServiceWorker(),e.addEventListener("controllerchange",(()=>{this.log.warn("controllerchange");const t=e.controller;this.attachServiceWorker(t),t.addEventListener("error",(e=>{this.log.error("controller error:",e)}))})),this.serviceMessagePort.attachListenPort(e),this.serviceMessagePort.addMultipleEventsListeners({port:(e,t,n)=>{this.invokeVoid("serviceWorkerPort",void 0,void 0,[n.ports[0]])},hello:(e,t)=>{this.serviceMessagePort.resendLockTask(t)},share:e=>{this.log("will try to share something"),this.share=e}}),e.addEventListener("messageerror",(e=>{this.log.error("SW messageerror:",e)}))}registerCryptoWorker(){return ee(this,void 0,void 0,(function*(){const e={construct:(e,t)=>({url:t[0]+location.search})},t=[Worker,"undefined"!=typeof SharedWorker&&SharedWorker].filter(Boolean);t.forEach((t=>window[t.name]=new Proxy(t,e)));const s=new Worker(new URL(n.p+n.u(589),n.b),{type:void 0});t.forEach((e=>window[e.name]=e));const i=s.url,o=e=>new a(e,{type:"module"}),r=e=>this.attachWorkerToPort(e,Y.Z,"crypto"),a=L.Z?SharedWorker:Worker;Y.Z.addEventListener("port",((e,t,n)=>{this.invokeVoid("cryptoPort",void 0,void 0,[n.ports[0]])})),r(o(i));const c=yield(l=i,fetch(l).then((e=>e.text())).then((e=>{const t=location.pathname.split("/");return t[t.length-1]="",e=`\n var originalImportScripts = importScripts; \n importScripts = (url) => {\n console.log('importScripts', url);\n var newUrl = '${location.origin+t.join("/")}' + url.split('/').pop();\n return originalImportScripts(newUrl);\n };\n ${e}`,new Blob([e],{type:"application/javascript"})})));var l;(yield this.invoke("createProxyWorkerURLs",{originalUrl:i,blob:c})).slice(1).map(o).forEach(r)}))}registerWorker(){let e;e=L.Z?new SharedWorker(new URL(n.p+n.u(678),n.b),{type:void 0}):new Worker(new URL(n.p+n.u(678),n.b),{type:void 0}),this.onWorkerFirstMessage(e)}attachWorkerToPort(e,t,n){const s=e.port||e;t.attachPort(s),e.addEventListener("error",(e=>{this.log.error(n,"worker error",e)}))}onWorkerFirstMessage(e){this.log("set webWorker"),this.attachWorkerToPort(e,this,"mtproto")}loadState(){return Promise.all([(null!=z?z:z=$()).then((e=>(this.newVersion=e.newVersion,this.oldVersion=e.oldVersion,this.mirrors.state=e.state,e)))])}sendState(){return this.loadState().then((e=>{const[t]=e;return this.invoke("state",Object.assign(Object.assign({},t),{userId:s.Z.myId.toUserId()})),e}))}invokeCrypto(e,...t){return Y.Z.invokeCrypto(e,...t)}toggleStorages(e,t){return ee(this,void 0,void 0,(function*(){yield(0,X.Z)(e,t),this.invoke("toggleStorages",{enabled:e,clearWrite:t}),this.serviceMessagePort.invokeVoid("toggleStorages",{enabled:e,clearWrite:t})}))}getMirror(e){return ee(this,void 0,void 0,(function*(){return this.mirrors[e]}))}getState(){return this.getMirror("state")}updateTabState(e,t){this.tabState[e]=t,this.invokeVoid("tabState",this.tabState)}updateTabStateIdle(e){this.updateTabState("idleStartTime",e?Date.now():0)}}const ne=new te;o.GO.apiManagerProxy=ne;const se=ne},490:(e,t,n)=>{n.d(t,{Z:()=>f});var s=n(4159),i=n(410),o=n(2219),r=n(2045),a=n(3241),c=n(2586),l=n(5003),d=n(3512),h=n(7487),u=n(3855);const g=r.Z;class m extends a.Z{constructor(){super(!1),this.log=(0,l.kg)("INSTANCE"),this.clearInstance=()=>{this.masterInstance&&!this.deactivated&&(this.log.warn("clear master instance"),h.Z.delete("xt_instance"))},this.checkInstance=(e=c.Z.isIdle)=>{return t=this,n=void 0,o=function*(){if(this.deactivated)return;const t=Date.now(),n={id:this.instanceId,idle:e,time:t},[i,o=s.Z.build]=yield Promise.all([h.Z.get("xt_instance",!1),h.Z.get("k_build",!1)]);if(o>s.Z.build)return this.masterInstance=!1,d.Z.managers.networkerFactory.stopAll(),this.deactivateInstance("version"),void u.Z.toggleStorages(!1,!1);g?h.Z.set({xt_instance:n}):!e||!i||i.id===this.instanceId||i.timethis.deactivateInstance("tabs")),3e4)))},new((i=void 0)||(i=Promise))((function(e,s){function r(e){try{c(o.next(e))}catch(e){s(e)}}function a(e){try{c(o.throw(e))}catch(e){s(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(r,a)}c((o=o.apply(t,n||[])).next())}));var t,n,i,o},this.log=(0,l.kg)("INSTANCE"),this.instanceId=o.Z}get deactivatedReason(){return this.deactivated}start(){if(this.reset(),!this.started){this.started=!0,c.Z.addEventListener("change",this.checkInstance),setInterval(this.checkInstance,5e3),this.checkInstance();try{document.documentElement.addEventListener("beforeunload",this.clearInstance)}catch(e){}}}reset(){this.masterInstance=!1,this.clearDeactivateTimeout(),this.deactivated=void 0}activateInstance(){this.deactivated&&(this.reset(),this.checkInstance(!1),this.dispatchEvent("activated"))}deactivateInstance(e){this.masterInstance||this.deactivated||(this.log.warn("deactivate",e),this.clearDeactivateTimeout(),this.deactivated=e,this.dispatchEvent("deactivated",e))}clearDeactivateTimeout(){this.deactivateTimeout&&(clearTimeout(this.deactivateTimeout),this.deactivateTimeout=0)}}const p=new m;i.GO&&(i.GO.singleInstance=p);const f=p},2831:(e,t,n)=>{n.r(t),n.d(t,{TelegramMeWebManager:()=>c,default:()=>d});var s=n(4159),i=n(410),o=n(1267),r=n(7298),a=n(7487);class c{constructor(){this.disabled=o.Z.test||!s.Z.domains.includes(location.hostname)}setAuthorized(e){if(!this.disabled)return a.Z.get("tgme_sync").then((t=>{const n=(0,r.Z)(!0);if(e&&(null==t?void 0:t.canRedirect)===e&&t.ts+86400>n)return;a.Z.set({tgme_sync:{canRedirect:e,ts:n}});const i=`_websync_?authed=${e?"1":"0"}&version=${encodeURIComponent(s.Z.version+" "+s.Z.suffix)}`,o=["//telegram.me/"+i,"//t.me/"+i].map((e=>function(e){const t=document.createElement("script"),n=new Promise((e=>{t.onload=t.onerror=()=>{e(t)}}));return t.src=e,document.body.appendChild(t),n}(e).then((e=>{e.remove()}))));return Promise.all(o)}))}}const l=new c;i.GO&&(i.GO.telegramMeWebManager=l);const d=l},6702:(e,t,n)=>{n.r(t),n.d(t,{WebPushApiManager:()=>g,default:()=>p});var s=n(410),i=n(5003),o=n(3855),r=n(2325),a=n(4762),c=n(1722),l=n(8479),d=n(490),h=n(3241),u=n(2790);class g extends h.Z{constructor(){super(!1),this.isAvailable=!0,this.isPushEnabled=!1,this.localNotificationsAvailable=!0,this.started=!1,this.settings={},this.isFirefox=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,this.userVisibleOnly=!this.isFirefox,this.log=(0,i.kg)("PM"),this.subscribe=()=>{this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.subscribe({userVisibleOnly:this.userVisibleOnly}).then((e=>{this.isPushEnabled=!0,this.pushSubscriptionNotify("subscribe",e)})).catch((e=>{"denied"===Notification.permission?this.log("Permission for Notifications was denied"):(this.log("Unable to subscribe to push.",e),this.userVisibleOnly||(this.userVisibleOnly=!0,setTimeout(this.subscribe,0)))}))}))},this.isAliveNotify=()=>{if(!this.isAvailable||d.Z.deactivatedReason)return;this.settings.baseUrl=(location.href||"").replace(/#.*$/,"");const e={},t={push_action_mute1d:a.IS_MOBILE?"PushNotification.Action.Mute1d.Mobile":"PushNotification.Action.Mute1d",push_action_settings:a.IS_MOBILE?"PushNotification.Action.Settings.Mobile":"PushNotification.Action.Settings",push_message_nopreview:"PushNotification.Message.NoPreview"};for(const n in t)e[n]=r.ZP.format(t[n],!0);o.Z.serviceMessagePort.invokeVoid("pushPing",{localNotifications:this.localNotificationsAvailable,lang:e,settings:this.settings}),this.isAliveTO=setTimeout(this.isAliveNotify,1e4)},"PushManager"in window&&"Notification"in window&&"serviceWorker"in navigator||(this.log.warn("Push messaging is not supported."),this.isAvailable=!1,this.localNotificationsAvailable=!1),this.isAvailable&&"denied"===Notification.permission&&this.log.warn("The user has blocked notifications.")}start(){this.started||(this.started=!0,this.getSubscription(),this.setUpServiceWorkerChannel())}setLocalNotificationsDisabled(){this.localNotificationsAvailable=!1}getSubscription(){this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.getSubscription().then((e=>{this.isPushEnabled=!!e,this.pushSubscriptionNotify("init",e)})).catch((e=>{this.log.error("Error during getSubscription()",e)}))}))}unsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.getSubscription().then((e=>{this.isPushEnabled=!1,e&&(this.pushSubscriptionNotify("unsubscribe",e),setTimeout((()=>{e.unsubscribe().then((e=>{this.isPushEnabled=!1})).catch((e=>{this.log.error("Unsubscription error: ",e)}))}),3e3))})).catch((e=>{this.log.error("Error thrown while unsubscribing from push messaging.",e)}))}))}forceUnsubscribe(){this.isAvailable&&navigator.serviceWorker.ready.then((e=>{e.pushManager.getSubscription().then((e=>{this.log.warn("force unsubscribe",e),e&&e.unsubscribe().then((e=>{this.log.warn("force unsubscribe successful",e),this.isPushEnabled=!1})).catch((e=>{this.log.error("Unsubscription error: ",e)}))})).catch((e=>{this.log.error("Error thrown while unsubscribing from push messaging.",e)}))}))}setSettings(e){this.settings=(0,l.Z)(e),clearTimeout(this.isAliveTO),this.isAliveNotify()}hidePushNotifications(){this.isAvailable&&o.Z.serviceMessagePort.invokeVoid("notificationsClear",void 0)}setUpServiceWorkerChannel(){this.isAvailable&&(o.Z.serviceMessagePort.addEventListener("pushClick",(e=>{d.Z.deactivatedReason?c.Z.reload():this.dispatchEvent("push_notification_click",e)})),navigator.serviceWorker.ready.then(this.isAliveNotify))}pushSubscriptionNotify(e,t){if(t){const n=t.toJSON();if(!(n&&n.endpoint&&n.keys&&n.keys.p256dh&&n.keys.auth))return this.log.warn("Invalid push subscription",n),this.unsubscribe(),this.isAvailable=!1,void this.pushSubscriptionNotify(e);this.log.warn("Push",e,n),this.dispatchEvent("push_"+e,{tokenType:10,tokenValue:JSON.stringify(n)})}else this.log.warn("Push",e,!1),this.dispatchEvent("push_"+e,!1)}ignorePushByMid(e,t){this.isAvailable&&o.Z.serviceMessagePort.invokeVoid("shownNotification",e+"_"+(0,u.Z)(t))}}const m=new g;s.GO&&(s.GO.webPushApiManager=m);const p=m},9043:(e,t,n)=>{n.d(t,{Z:()=>d});var s=n(410),i=n(5783),o=n(4762),r=n(5003),a=n(3855),c=function(e,t,n,s){return new(n||(n=Promise))((function(i,o){function r(e){try{c(s.next(e))}catch(e){o(e)}}function a(e){try{c(s.throw(e))}catch(e){o(e)}}function c(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(r,a)}c((s=s.apply(e,t||[])).next())}))};const l=new class{constructor(){this.sampleRate=48e3,this.tasks=[],this.keepAlive=!1,this.log=(0,r.kg)("OPUS",r.v9.Error)}isPlaySupported(){return i.Z}loadWavWorker(){this.wavWorker||(this.wavWorker=new Worker("waveWorker.min.js"),this.wavWorker.addEventListener("message",(e=>{const t=e.data;if(this.log("[WAV] got message:",t),t&&t.page){const e=t.page;this.onTaskEnd(this.tasks.shift(),e)}})))}loadWorker(){this.worker||(this.worker=new Worker("decoderWorker.min.js"),this.worker.addEventListener("message",(e=>{const t=e.data;this.log("[DECODER] got message",t),"done"===t.type?(this.wavWorker.postMessage({command:"done"}),t.waveform&&(this.tasks[0].waveform=t.waveform)):this.wavWorker.postMessage({command:"encode",buffers:e.data},o.IS_SAFARI?void 0:t.map((e=>e.buffer)))})))}setKeepAlive(e){this.keepAlive=e,this.keepAlive?(this.loadWorker(),this.loadWavWorker()):this.tasks.length||this.terminateWorkers()}onTaskEnd(e,t){t?(clearTimeout(e.timeout),e.callback.resolve({bytes:t,waveform:e.waveform})):e.callback.reject("timeout"),this.tasks.length&&this.executeNewTask(this.tasks[0]),this.terminateWorkers()}terminateWorkers(e=!1){(!this.keepAlive&&!this.tasks.length||e)&&(this.worker&&(this.worker.terminate(),this.worker=null),this.wavWorker&&(this.wavWorker.terminate(),this.wavWorker=null))}executeNewTask(e){this.worker.postMessage({command:"init",decoderSampleRate:this.sampleRate,outputBufferSampleRate:this.sampleRate}),this.wavWorker.postMessage({command:"init",wavBitDepth:16,wavSampleRate:this.sampleRate}),this.log("[DECODER] send decode"),this.worker.postMessage({command:"decode",pages:e.pages,waveform:e.withWaveform},o.IS_SAFARI?void 0:[e.pages.buffer]),e.timeout=window.setTimeout((()=>{this.log.error("decode timeout"),this.terminateWorkers(!0),this.tasks.length&&(this.loadWorker(),this.loadWavWorker()),this.onTaskEnd(this.tasks.shift())}),1e4)}pushDecodeTask(e,t){return new Promise(((n,s)=>{const i={pages:e,withWaveform:t,callback:{resolve:n,reject:s},timeout:0};this.loadWorker(),this.loadWavWorker(),1===this.tasks.push(i)&&this.executeNewTask(i)}))}decode(e,t=!1){return c(this,void 0,void 0,(function*(){return this.pushDecodeTask(e,t).then((e=>c(this,void 0,void 0,(function*(){const t=new Blob([e.bytes],{type:"audio/wav"});return{url:yield a.Z.invoke("createObjectURL",t),waveform:e.waveform}}))))}))}};s.GO.opusDecodeController=l;const d=l},2423:(e,t,n)=>{n.d(t,{$2:()=>u,E:()=>g,Hk:()=>p,QB:()=>m,SC:()=>f,bu:()=>l,it:()=>c,kO:()=>b,tY:()=>v});var s=n(1229);const i="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",o="0-9_"+i,r="["+i+"0-9]",a="((?:https?|ftp)://|mailto:)?",c=a+"(?:"+r+"{1,64}(?::"+r+"{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}|"+r+"["+i+"ยท0-9-]{0,64}(?:\\."+r+"["+i+"ยท0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|["+i+"]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?",l=(new RegExp("^"+a.slice(0,-1),"i"),/^((?:[^\/]+?):\/\/|mailto:)/),d="[a-zA-Z\\d_]{5,32}",h="\\/([a-zA-Z\\d_]{1,32})(?:@("+d+"))?(\\b|$)",u=new RegExp("(^| )(@)("+d+")|("+c+")|(\\n)|("+s.Z+")|(^|[\\s\\(\\]])(#["+o+"]{2,64})|(^|\\s)"+h,"i"),g=/^(([^<>()[\]\\.,;:\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,}))$/,m=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s|\x01)(`|~~|\*\*|__|_-_|\|\|)([^\n]+?)\7([\x01\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)|(\[(.+?)\]\((.+?)\))/m,p={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}"},f={"`":"messageEntityCode","``":"messageEntityPre","**":"messageEntityBold",__:"messageEntityItalic","~~":"messageEntityStrike","_-_":"messageEntityUnderline","||":"messageEntitySpoiler"},v=new Set(["messageEntityEmoji","messageEntityLinebreak","messageEntityCaret"]);for(const e in f)v.add(f[e]);const b=/^\+\d+$/},3591:(e,t,n)=>{n.d(t,{Z:()=>a});var s=n(2423),i=n(410),o=n(6637),r=n(1507);function a(e,t){(0,o.Z)(e)||(e="https://"+e);const n={url:e};let i,a,c,l;if(i=e.match(/^(?:https?:\/\/)?(?:(.+?)\.)?(?:(?:web|k|z)\.)?t(?:elegram)?\.me(?:\/(.+))?/)){const t=new URL(e);let n=i[1];n&&r.BX.has(i[1])&&(n=void 0),n&&(t.pathname=n+("/"===t.pathname?"":t.pathname));const o=t.pathname.slice(1),a=o.split("/");if(a[0]&&"$"===a[0][0]&&a[0].length>1)l="invoice";else if(/^\W/.test(o)&&!s.kO.test(o))l="joinchat";else switch(a[0]){case"joinchat":case"addstickers":case"addemoji":case"voicechat":case"invoice":if(1!==a.length&&!n){l=a[0];break}default:if(a[1]&&a[1].match(/^\d+(?:\?(?:comment|thread)=\d+)?$/)||1===a.length){l="im";break}}}else(a=e.match(/^(?:https?:\/\/)?telesco\.pe\/([^/?]+)\/(\d+)/))?l="im":(c=e.match(/tg:(?:\/\/)?(.+?)(?:\?|$)/))&&(l="tg_"+c[1]);return window[l]||(l=void 0),n.onclick=l,n}i.GO&&(i.GO.wrapUrl=a)},3512:(e,t,n)=>{n.d(t,{Z:()=>d});var s=n(1507),i=n(3241),o=n(410),r=n(3206),a=n(1352);class c extends i.Z{constructor(){super(),this.myId=s.NM,this.connectionStatus={},this.premium=!1,this.addEventListener("user_auth",(({id:e})=>{this.myId=e.toPeerId()})),this.addEventListener("premium_toggle_private",(({isNew:e,isPremium:t})=>{this.premium=t,this.dispatchEventSingle("premium_toggle",t)})),this.addEventListener("connection_status_change",(e=>{this.connectionStatus[e.name]=e})),this.dispatchEvent=(e,...t)=>{super.dispatchEvent(e,...t),r.Z.getInstance().invokeVoid("event",{name:e,args:t})},a.kC||this.addEventListener("settings_updated",(({settings:e})=>{this.settings=e}))}getConnectionStatus(){return this.connectionStatus}getPremium(){return this.premium}dispatchEventSingle(...e){super.dispatchEvent(...e)}}const l=new c;o.GO.rootScope=l;const d=l},7730:(e,t,n)=>{n.d(t,{Z:()=>r});var s=n(410),i=n(3725);const o=new class{constructor(){this.convertPromises={}}init(){this.worker=new Worker(new URL(n.p+n.u(61),n.b)),this.worker.addEventListener("message",(e=>{const t=e.data.payload,n=this.convertPromises[t.fileName];n&&(t.bytes?n.resolve(t.bytes):n.reject(),delete this.convertPromises[t.fileName])}))}postMessage(e){this.init&&(this.init(),this.init=null),this.worker.postMessage(e)}convert(e,t){if(this.convertPromises.hasOwnProperty(e))return this.convertPromises[e];const n=(0,i.Z)();return this.postMessage({type:"convertWebp",payload:{fileName:e,bytes:t}}),this.convertPromises[e]=n}};s.GO.webpWorkerController=o;const r=o}},r={};function a(e){var t=r[e];if(void 0!==t)return t.exports;var n=r[e]={exports:{}};return o[e].call(n.exports,n,n.exports,a),n.exports}a.m=o,e=[],a.O=(t,n,s,i)=>{if(!n){var o=1/0;for(d=0;d=i)&&Object.keys(a.O).every((e=>a.O[e](n[c])))?n.splice(c--,1):(r=!1,i0&&e[d-1][2]>i;d--)e[d]=e[d-1];e[d]=[n,s,i]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},n=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,a.t=function(e,s){if(1&s&&(e=this(e)),8&s)return e;if("object"==typeof e&&e){if(4&s&&e.__esModule)return e;if(16&s&&"function"==typeof e.then)return e}var i=Object.create(null);a.r(i);var o={};t=t||[null,n({}),n([]),n(n)];for(var r=2&s&&e;"object"==typeof r&&!~t.indexOf(r);r=n(r))Object.getOwnPropertyNames(r).forEach((t=>o[t]=()=>e[t]));return o.default=()=>e,a.d(i,o),i},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.f={},a.e=e=>Promise.all(Object.keys(a.f).reduce(((t,n)=>(a.f[n](e,t),t)),[])),a.u=e=>(({589:"crypto.worker",630:"npm.qr-code-styling",670:"sw",678:"mtproto.worker"}[e]||e)+"."+{8:"93d2f33af815eb0455aa",53:"dbe0925c22766a370c35",61:"f9d40768535453d75527",63:"1831e9530926993870f4",77:"b8cf11d2b5dca36479ca",104:"f68acff124bec8da4bd6",147:"d3d1728d5fd59c12e18f",231:"f4d1bfe6ff7f14577f96",301:"95838a8203f23dd1ce8f",339:"12bdbede82465e666965",392:"6cd3a6e98d96c1474a83",436:"9e54c5e9f3feccf9d736",437:"b05ad4b2fc48a536e003",442:"4c190263f1e005b28c8a",508:"fda3e28eaa781dbc8942",589:"9e5cd838e641988dc44f",630:"f8f57a1c721e03c3f699",641:"eef7113bc3d12ae4efe4",642:"be93122d1116ecdc9322",646:"29b333bf40364af9ab80",670:"8b8ecbcfa5033da30213",678:"50a758787fa4b84d353d",709:"e75693a36b0fbe6508d1",776:"8ab7c3d76984f9b6cac3",781:"c527d73f348ae695f21a",783:"949e247466ad3ebe82d6",810:"0dc4677a01d387e9e564",813:"315ffd640c7d6013a536"}[e]+".chunk.js"),a.miniCssF=e=>{},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s={},i="tweb:",a.l=(e,t,n,o)=>{if(s[e])s[e].push(t);else{var r,c;if(void 0!==n)for(var l=document.getElementsByTagName("script"),d=0;d{r.onerror=r.onload=null,clearTimeout(g);var i=s[e];if(delete s[e],r.parentNode&&r.parentNode.removeChild(r),i&&i.forEach((e=>e(n))),t)return t(n)},g=setTimeout(u.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=u.bind(null,r.onerror),r.onload=u.bind(null,r.onload),c&&document.head.appendChild(r)}},a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;a.g.importScripts&&(e=a.g.location+"");var t=a.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=e})(),(()=>{if(void 0!==a){var e=a.u,t=a.e,n={},s={};a.u=function(t){return e(t)+(n.hasOwnProperty(t)?"?"+n[t]:"")},a.e=function(i){return t(i).catch((function(t){var o=s.hasOwnProperty(i)?s[i]:999999;if(o<1){var r=e(i);throw t.message="Loading chunk "+i+" failed after 999999 retries.\n("+r+")",t.request=r,t}return new Promise((function(e){setTimeout((function(){var t=Date.now();n[i]=t,s[i]=o-1,e(a.e(i))}),3e3)}))}))}}})(),(()=>{a.b=document.baseURI||self.location.href;var e={179:0};a.f.j=(t,n)=>{var s=a.o(e,t)?e[t]:void 0;if(0!==s)if(s)n.push(s[2]);else{var i=new Promise(((n,i)=>s=e[t]=[n,i]));n.push(s[2]=i);var o=a.p+a.u(t),r=new Error;a.l(o,(n=>{if(a.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var i=n&&("load"===n.type?"missing":n.type),o=n&&n.target&&n.target.src;r.message="Loading chunk "+t+" failed.\n("+i+": "+o+")",r.name="ChunkLoadError",r.type=i,r.request=o,s[1](r)}}),"chunk-"+t,t)}},a.O.j=t=>0===e[t];var t=(t,n)=>{var s,i,[o,r,c]=n,l=0;if(o.some((t=>0!==e[t]))){for(s in r)a.o(r,s)&&(a.m[s]=r[s]);if(c)var d=c(a)}for(t&&t(n);la(2938)));c=a.O(c)})(); -//# sourceMappingURL=main.5af85c2e3d117186070d.bundle.js.map \ No newline at end of file diff --git a/public/main.5af85c2e3d117186070d.bundle.js.map b/public/main.5af85c2e3d117186070d.bundle.js.map deleted file mode 100644 index 6601d5f4..00000000 --- a/public/main.5af85c2e3d117186070d.bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"main.5af85c2e3d117186070d.bundle.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/create fake namespace object","webpack://tweb/webpack/runtime/load script","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/config/state.ts","webpack://tweb/./src/helpers/getTimeFormat.ts","webpack://tweb/./src/environment/appleMx.ts","webpack://tweb/./src/environment/callSupport.ts","webpack://tweb/./src/environment/canUseTransferables.ts","webpack://tweb/./src/environment/canvasFilterSupport.ts","webpack://tweb/./src/environment/emojiSupport.ts","webpack://tweb/./src/environment/geolocationSupport.ts","webpack://tweb/./src/environment/groupCallSupport.ts","webpack://tweb/./src/environment/imageMimeTypesSupport.ts","webpack://tweb/./src/environment/mediaMimeTypesSupport.ts","webpack://tweb/./src/environment/movSupport.ts","webpack://tweb/./src/environment/opusSupport.ts","webpack://tweb/./src/environment/parallaxSupport.ts","webpack://tweb/./src/environment/screenSharingSupport.ts","webpack://tweb/./src/environment/sharedWorkerSupport.ts","webpack://tweb/./src/environment/touchSupport.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/environment/vibrateSupport.ts","webpack://tweb/./src/environment/videoMimeTypesSupport.ts","webpack://tweb/./src/environment/webmSupport.ts","webpack://tweb/./src/environment/webpSupport.ts","webpack://tweb/./src/environment/webrtcSupport.ts","webpack://tweb/./src/helpers/color.ts","webpack://tweb/./src/helpers/compareVersion.ts","webpack://tweb/./src/helpers/dom/blurActiveElement.ts","webpack://tweb/./src/helpers/dom/cancelEvent.ts","webpack://tweb/./src/helpers/dom/findUpClassName.ts","webpack://tweb/./src/helpers/dom/fixSafariStickyInput.ts","webpack://tweb/./src/helpers/dom/fixSafariStickyInputFocusing.ts","webpack://tweb/./src/helpers/dom/installPrompt.ts","webpack://tweb/./src/helpers/dom/loadFonts.ts","webpack://tweb/./src/helpers/dom/setInnerHTML.ts","webpack://tweb/./src/helpers/idleController.ts","webpack://tweb/./src/helpers/number/clamp.ts","webpack://tweb/./src/helpers/overlayCounter.ts","webpack://tweb/./src/helpers/schedulers.ts","webpack://tweb/./src/helpers/string/parseUriParams.ts","webpack://tweb/./src/helpers/themeController.ts","webpack://tweb/./src/helpers/setWorkerProxy.ts","webpack://tweb/./src/environment/installPrompt.ts","webpack://tweb/./src/index.ts","webpack://tweb/./src/helpers/dom/toggleAttributePolyfill.ts","webpack://tweb/./src/lib/appManagers/appRuntimeManager.ts","webpack://tweb/./src/lib/appManagers/getProxiedManagers.ts","webpack://tweb/./src/lib/files/idb.ts","webpack://tweb/./src/lib/langPack.ts","webpack://tweb/./src/lib/mtproto/mtproto_config.ts","webpack://tweb/./src/environment/index.ts","webpack://tweb/./src/lib/appManagers/utils/state/loadState.ts","webpack://tweb/./src/lib/mtproto/mtprotoworker.ts","webpack://tweb/./src/lib/mtproto/singleInstance.ts","webpack://tweb/./src/lib/mtproto/telegramMeWebManager.ts","webpack://tweb/./src/helpers/dom/loadScript.ts","webpack://tweb/./src/lib/mtproto/webPushApiManager.ts","webpack://tweb/./src/lib/opusDecodeController.ts","webpack://tweb/./src/lib/richTextProcessor/index.ts","webpack://tweb/./src/lib/richTextProcessor/wrapUrl.ts","webpack://tweb/./src/lib/rootScope.ts","webpack://tweb/./src/lib/webp/webpWorkerController.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/compat get default export","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/make namespace object","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/jsonp chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"tweb:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t};\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AppMediaPlaybackController} from '../components/appMediaPlaybackController';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport getTimeFormat from '../helpers/getTimeFormat';\nimport {nextRandomUint} from '../helpers/random';\nimport {AutoDownloadSettings, BaseTheme, NotifyPeer, PeerNotifySettings, Theme, ThemeSettings, WallPaper} from '../layer';\nimport {TopPeerType, MyTopPeer} from '../lib/appManagers/appUsersManager';\nimport DialogsStorage from '../lib/storages/dialogs';\nimport FiltersStorage from '../lib/storages/filters';\nimport {AuthState, Modify} from '../types';\nimport App from './app';\n\nconst STATE_VERSION = App.version;\nconst BUILD = App.build;\n\n// ! DEPRECATED\nexport type Background = {\n type?: 'color' | 'image' | 'default', // ! DEPRECATED\n blur: boolean,\n highlightningColor?: string,\n color?: string,\n slug?: string, // image slug\n intensity?: number, // pattern intensity\n id: string | number, // wallpaper id\n};\n\nexport type AppTheme = Modify\n}>;\n\nexport type AutoDownloadPeerTypeSettings = {\n contacts: boolean,\n private: boolean,\n groups: boolean,\n channels: boolean\n};\n\nexport type State = {\n allDialogsLoaded: DialogsStorage['allDialogsLoaded'],\n pinnedOrders: DialogsStorage['pinnedOrders'],\n // contactsList: UserId[],\n contactsListCachedTime: number,\n updates: Partial<{\n seq: number,\n pts: number,\n date: number\n }>,\n // filters?: FiltersStorage['filters'], // ! DEPRECATED\n filtersArr?: FiltersStorage['filtersArr'],\n maxSeenMsgId: number,\n stateCreatedTime: number,\n recentEmoji: string[],\n recentCustomEmoji: DocId[],\n topPeersCache: {\n [type in TopPeerType]?: {\n peers: MyTopPeer[],\n cachedTime: number\n }\n },\n recentSearch: PeerId[],\n version: typeof STATE_VERSION,\n build: typeof BUILD,\n authState: AuthState,\n hiddenPinnedMessages: {[peerId: PeerId]: number},\n settings: {\n messagesTextSize: number,\n distanceUnit: 'kilometers' | 'miles',\n sendShortcut: 'enter' | 'ctrlEnter',\n animationsEnabled: boolean,\n autoDownload: {\n contacts?: boolean, // ! DEPRECATED\n private?: boolean, // ! DEPRECATED\n groups?: boolean, // ! DEPRECATED\n channels?: boolean, // ! DEPRECATED\n photo: AutoDownloadPeerTypeSettings,\n video: AutoDownloadPeerTypeSettings,\n file: AutoDownloadPeerTypeSettings\n },\n autoDownloadNew: AutoDownloadSettings,\n autoPlay: {\n gifs: boolean,\n videos: boolean\n },\n stickers: {\n suggest: boolean,\n loop: boolean\n },\n emoji: {\n suggest: boolean,\n big: boolean\n },\n background?: Background, // ! DEPRECATED\n themes: AppTheme[],\n theme: AppTheme['name'],\n notifications: {\n sound: boolean\n },\n nightTheme?: boolean, // ! DEPRECATED\n timeFormat: 'h12' | 'h23'\n },\n playbackParams: ReturnType,\n keepSigned: boolean,\n chatContextMenuHintWasShown: boolean,\n stateId: number,\n notifySettings: {[k in Exclude]?: PeerNotifySettings.peerNotifySettings}\n};\n\n// const BACKGROUND_DAY_MOBILE: Background = {\n// blur: false,\n// slug: '',\n// color: '#dbddbb,#6ba587,#d5d88d,#88b884',\n// highlightningColor: 'hsla(86.4, 43.846153%, 45.117647%, .4)',\n// intensity: 0,\n// id: '1'\n// };\n\n// const BACKGROUND_NIGHT_MOBILE: Background = {\n// blur: false,\n// slug: '',\n// color: '#0f0f0f',\n// highlightningColor: 'hsla(0, 0%, 3.82353%, 0.4)',\n// intensity: 0,\n// id: '-1'\n// };\n\nexport const DEFAULT_THEME: Theme = {\n _: 'theme',\n access_hash: '',\n id: '',\n settings: [{\n _: 'themeSettings',\n pFlags: {},\n base_theme: {_: 'baseThemeClassic'},\n accent_color: 0x3390ec,\n message_colors: [0x4fae4e],\n wallpaper: {\n _: 'wallPaper',\n pFlags: {\n default: true,\n pattern: true\n },\n access_hash: '',\n document: undefined,\n id: '',\n slug: 'pattern',\n settings: {\n _: 'wallPaperSettings',\n pFlags: {},\n intensity: 50,\n background_color: 0xdbddbb,\n second_background_color: 0x6ba587,\n third_background_color: 0xd5d88d,\n fourth_background_color: 0x88b884\n }\n }\n }, {\n _: 'themeSettings',\n pFlags: {},\n base_theme: {_: 'baseThemeNight'},\n accent_color: 0x8774E1,\n message_colors: [0x8774E1],\n wallpaper: {\n _: 'wallPaper',\n pFlags: {\n default: true,\n pattern: true,\n dark: true\n },\n access_hash: '',\n document: undefined,\n id: '',\n slug: 'pattern',\n settings: {\n _: 'wallPaperSettings',\n pFlags: {},\n intensity: -50,\n background_color: 0xfec496,\n second_background_color: 0xdd6cb9,\n third_background_color: 0x962fbf,\n fourth_background_color: 0x4f5bd5\n }\n }\n }],\n slug: '',\n title: '',\n emoticon: '๐Ÿ ',\n pFlags: {default: true}\n};\n\nconst makeDefaultAppTheme = (\n name: AppTheme['name'],\n baseTheme: BaseTheme['_'],\n highlightningColor: string\n): AppTheme => {\n return {\n ...DEFAULT_THEME,\n name,\n settings: {\n ...DEFAULT_THEME.settings.find((s) => s.base_theme._ === baseTheme),\n highlightningColor\n }\n };\n};\n\nexport const STATE_INIT: State = {\n allDialogsLoaded: {},\n pinnedOrders: {},\n // contactsList: [],\n contactsListCachedTime: 0,\n updates: {},\n filtersArr: [],\n maxSeenMsgId: 0,\n stateCreatedTime: Date.now(),\n recentEmoji: [],\n recentCustomEmoji: [],\n topPeersCache: {},\n recentSearch: [],\n version: STATE_VERSION,\n build: BUILD,\n authState: {\n _: IS_MOBILE ? 'authStateSignIn' : 'authStateSignQr'\n },\n hiddenPinnedMessages: {},\n settings: {\n messagesTextSize: 16,\n distanceUnit: 'kilometers',\n sendShortcut: 'enter',\n animationsEnabled: true,\n autoDownload: {\n photo: {\n contacts: true,\n private: true,\n groups: true,\n channels: true\n },\n video: {\n contacts: true,\n private: true,\n groups: true,\n channels: true\n },\n file: {\n contacts: true,\n private: true,\n groups: true,\n channels: true\n }\n },\n autoDownloadNew: {\n _: 'autoDownloadSettings',\n file_size_max: 3145728,\n pFlags: {\n video_preload_large: true,\n audio_preload_next: true\n },\n photo_size_max: 1048576,\n video_size_max: 15728640,\n video_upload_maxbitrate: 100\n },\n autoPlay: {\n gifs: true,\n videos: true\n },\n stickers: {\n suggest: true,\n loop: true\n },\n emoji: {\n suggest: true,\n big: true\n },\n themes: [\n makeDefaultAppTheme('day', 'baseThemeClassic', 'hsla(86.4, 43.846153%, 45.117647%, .4)'),\n makeDefaultAppTheme('night', 'baseThemeNight', 'hsla(299.142857, 44.166666%, 37.470588%, .4)')\n ],\n theme: 'system',\n notifications: {\n sound: false\n },\n timeFormat: getTimeFormat()\n },\n playbackParams: {\n volume: 1,\n muted: false,\n playbackRate: 1,\n playbackRates: {\n voice: 1,\n video: 1,\n audio: 1\n },\n loop: false,\n round: false\n },\n keepSigned: true,\n chatContextMenuHintWasShown: false,\n stateId: nextRandomUint(32),\n notifySettings: {}\n};\n","export default function getTimeFormat(): 'h12' | 'h23' {\n // try {\n // const resolvedOptions = Intl.DateTimeFormat(navigator.language, {hour: 'numeric'}).resolvedOptions();\n // if('hourCycle' in resolvedOptions) {\n // return (resolvedOptions as any).hourCycle === 'h12' ? 'h12' : 'h23';\n // } else {\n // return resolvedOptions.hour12 ? 'h12' : 'h23';\n // }\n // } catch(err) {\n return new Date().toLocaleString().match(/\\s(AM|PM)/) ? 'h12' : 'h23';\n // }\n}\n","let IS_APPLE_MX = false;\n\ntry {\n // Awesome detect from https://stackoverflow.com/a/65412357\n const ctx = document.createElement('canvas').getContext('webgl');\n const extension = ctx.getExtension('WEBGL_debug_renderer_info');\n const renderer: string = extension && ctx.getParameter(extension.UNMASKED_RENDERER_WEBGL) || '';\n if((renderer.match(/Apple/) && !renderer.match(/Apple GPU/)) ||\n ctx.getSupportedExtensions().indexOf('WEBGL_compressed_texture_s3tc_srgb') === -1) {\n IS_APPLE_MX = true;\n }\n} catch(err) {\n\n}\n\nexport default IS_APPLE_MX;\n","import IS_WEBRTC_SUPPORTED from './webrtcSupport';\n\nconst IS_CALL_SUPPORTED = IS_WEBRTC_SUPPORTED;\n\nexport default IS_CALL_SUPPORTED;\n","import {IS_SAFARI} from './userAgent';\n\n/*\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\n * transfer data between WebWorkers and the main thread.\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\n *\n * This should be removed once the underlying Safari issue is fixed.\n */\n\nlet CAN_USE_TRANSFERABLES: boolean;\nif(!IS_SAFARI) CAN_USE_TRANSFERABLES = true;\nelse {\n try {\n const match = navigator.userAgent.match(/Version\\/(.+?) /);\n CAN_USE_TRANSFERABLES = +match[1] >= 14;\n } catch(err) {\n CAN_USE_TRANSFERABLES = false;\n }\n}\n\nexport default CAN_USE_TRANSFERABLES;\n","const IS_CANVAS_FILTER_SUPPORTED = 'filter' in (document.createElement('canvas').getContext('2d') || {});\n\nexport default IS_CANVAS_FILTER_SUPPORTED;\n","const IS_EMOJI_SUPPORTED = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1/* && false *//* || true */;\n\nexport default IS_EMOJI_SUPPORTED;\n","const IS_GEOLOCATION_SUPPORTED = !!navigator?.geolocation?.getCurrentPosition && false;\n\nexport default IS_GEOLOCATION_SUPPORTED;\n","import IS_WEBRTC_SUPPORTED from './webrtcSupport';\n\nconst IS_GROUP_CALL_SUPPORTED = IS_WEBRTC_SUPPORTED;\n\nexport default IS_GROUP_CALL_SUPPORTED;\n","import IS_WEBP_SUPPORTED from './webpSupport';\n\nconst IMAGE_MIME_TYPES_SUPPORTED = new Set([\n 'image/jpeg',\n 'image/png',\n 'image/bmp'\n]);\n\nif(IS_WEBP_SUPPORTED) {\n IMAGE_MIME_TYPES_SUPPORTED.add('image/webp');\n}\n\nexport default IMAGE_MIME_TYPES_SUPPORTED;\n","import IMAGE_MIME_TYPES_SUPPORTED from './imageMimeTypesSupport';\nimport VIDEO_MIME_TYPES_SUPPORTED from './videoMimeTypesSupport';\n\nconst arr = [...IMAGE_MIME_TYPES_SUPPORTED].concat([...VIDEO_MIME_TYPES_SUPPORTED]);\n\nconst MEDIA_MIME_TYPES_SUPPORTED = new Set(arr);\n\nexport default MEDIA_MIME_TYPES_SUPPORTED;\n","import {IS_APPLE_MOBILE, IS_SAFARI} from './userAgent';\n\n// mov is not supported in Chrome on macOS\nconst IS_MOV_SUPPORTED = !!document.createElement('video').canPlayType('video/quicktime') || IS_SAFARI || IS_APPLE_MOBILE;\n\nexport default IS_MOV_SUPPORTED;\n","const audio = document.createElement('audio');\nconst IS_OPUS_SUPPORTED = !!(audio.canPlayType && audio.canPlayType('audio/ogg;').replace(/no/, ''))/* && false */;\n\nexport default IS_OPUS_SUPPORTED;\n","import {IS_FIREFOX} from './userAgent';\n\nconst IS_PARALLAX_SUPPORTED = !IS_FIREFOX && false;\n\nexport default IS_PARALLAX_SUPPORTED;\n","const IS_SCREEN_SHARING_SUPPORTED = !!('getDisplayMedia' in (navigator?.mediaDevices || {}));\n\nexport default IS_SCREEN_SHARING_SUPPORTED;\n","import Modes from '../config/modes';\n\nconst IS_SHARED_WORKER_SUPPORTED = typeof(SharedWorker) !== 'undefined' && !Modes.noSharedWorker/* && false */;\n\nexport default IS_SHARED_WORKER_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// @ts-ignore\nconst IS_TOUCH_SUPPORTED = ('ontouchstart' in window) || (window.DocumentTouch && document instanceof DocumentTouch)/* || true */;\nexport default IS_TOUCH_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","const IS_VIBRATE_SUPPORTED = !!navigator?.vibrate;\n\nexport default IS_VIBRATE_SUPPORTED;\n","import IS_MOV_SUPPORTED from './movSupport';\n\nexport type VIDEO_MIME_TYPE = 'image/gif' | 'video/mp4' | 'video/webm' | 'video/quicktime';\nconst VIDEO_MIME_TYPES_SUPPORTED: Set = new Set([\n 'image/gif', // have to display it as video\n 'video/mp4',\n 'video/webm'\n]);\n\nif(IS_MOV_SUPPORTED) {\n VIDEO_MIME_TYPES_SUPPORTED.add('video/quicktime');\n}\n\nexport default VIDEO_MIME_TYPES_SUPPORTED;\n","import {IS_APPLE_MOBILE, IS_SAFARI} from './userAgent';\n\nconst IS_WEBM_SUPPORTED = !!document.createElement('video').canPlayType('video/webm') && !IS_SAFARI && !IS_APPLE_MOBILE;\n\nexport default IS_WEBM_SUPPORTED;\n","const IS_WEBP_SUPPORTED = document.createElement('canvas').toDataURL('image/webp').startsWith('data:image/webp');\n\nexport default IS_WEBP_SUPPORTED;\n","import {IS_FIREFOX} from './userAgent';\n\nconst IS_WEBRTC_SUPPORTED = !!(typeof(RTCPeerConnection) !== 'undefined' && !IS_FIREFOX);\n\nexport default IS_WEBRTC_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WallPaper} from '../layer';\nimport clamp from './number/clamp';\n\nexport type ColorHsla = {\n h: number,\n s: number,\n l: number,\n a: number\n};\n\nexport type ColorRgba = [number, number, number, number];\nexport type ColorRgb = [number, number, number];\n\n/**\n * https://stackoverflow.com/a/54070620/6758968\n * r, g, b in [0, 255]\n * @returns h in [0,360) and s, v in [0,1]\n */\nexport function rgbToHsv(r: number, g: number, b: number): [number, number, number] {\n r /= 255, g /= 255, b /= 255;\n const v = Math.max(r, g, b),\n c = v - Math.min(r, g, b);\n const h = c && ((v === r) ? (g - b ) / c : ((v == g) ? 2 + (b - r) / c : 4 + (r - g) / c));\n return [60 * (h < 0 ? h + 6 : h), v && c / v, v];\n}\n\n/**\n * https://stackoverflow.com/a/54024653/6758968\n * @param h [0, 360]\n * @param s [0, 1]\n * @param v [0, 1]\n * @returns r, g, b in [0, 255]\n */\nexport function hsvToRgb(h: number, s: number, v: number): ColorRgb {\n const f = (n: number, k: number = (n + h / 60) % 6) => Math.round((v - v * s * Math.max(Math.min(k, 4 - k, 1), 0)) * 255);\n return [f(5), f(3), f(1)];\n}\n\n/**\n * @returns h [0, 360], s [0, 100], l [0, 100], a [0, 1]\n */\nexport function rgbaToHsla(r: number, g: number, b: number, a: number = 1): ColorHsla {\n r /= 255, g /= 255, b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h: number, s: number;\n const l = (max + min) / 2;\n\n if(max === min) {\n h = s = 0; // achromatic\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch(max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n\n return {\n h: h * 360,\n s: s * 100,\n l: l * 100,\n a\n };\n}\n\n// * https://stackoverflow.com/a/9493060/6758968\n/**\n * Converts an HSL color value to RGB. Conversion formula\n * adapted from http://en.wikipedia.org/wiki/HSL_color_space.\n *\n * @param {number} h The hue [0, 360]\n * @param {number} s The saturation [0, 1]\n * @param {number} l The lightness [0, 1]\n * @return {Array} The RGB representation [0, 255]\n */\nexport function hslaToRgba(h: number, s: number, l: number, a: number): ColorRgba {\n h /= 360, s /= 100, l /= 100;\n let r: number, g: number, b: number;\n\n if(s === 0) {\n r = g = b = l; // achromatic\n } else {\n const hue2rgb = function hue2rgb(p: number, q: number, t: number) {\n if(t < 0) t += 1;\n if(t > 1) t -= 1;\n if(t < 1/6) return p + (q - p) * 6 * t;\n if(t < 1/2) return q;\n if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n return p;\n }\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n\n return [r, g, b, a].map((v) => Math.round(v * 255)) as ColorRgba;\n}\n\nexport function hslaStringToRgba(hsla: string) {\n const splitted = hsla.slice(5, -1).split(', ');\n const alpha = +splitted.pop();\n const arr = splitted.map((val) => {\n if(val.endsWith('%')) {\n return +val.slice(0, -1);\n }\n\n return +val;\n });\n\n return hslaToRgba(arr[0], arr[1], arr[2], alpha);\n}\n\nexport function hexaToRgba(hexa: string) {\n const arr: ColorRgba = [] as any;\n const offset = hexa[0] === '#' ? 1 : 0;\n if(hexa.length === (5 + offset)) {\n hexa = (offset ? '#' : '') + '0' + hexa.slice(offset);\n }\n\n if(hexa.length === (3 + offset)) {\n for(let i = offset; i < hexa.length; ++i) {\n arr.push(parseInt(hexa[i] + hexa[i], 16));\n }\n } else if(hexa.length === (4 + offset)) {\n for(let i = offset; i < (hexa.length - 1); ++i) {\n arr.push(parseInt(hexa[i] + hexa[i], 16));\n }\n\n arr.push(parseInt(hexa[hexa.length - 1], 16));\n } else {\n for(let i = offset; i < hexa.length; i += 2) {\n arr.push(parseInt(hexa.slice(i, i + 2), 16));\n }\n }\n\n return arr;\n}\n\nexport function hexToRgb(hex: string) {\n return hexaToRgba(hex.slice(0, 7)) as any as ColorRgb;\n}\n\nexport function hexaToHsla(hexa: string) {\n const rgba = hexaToRgba(hexa);\n return rgbaToHsla(rgba[0], rgba[1], rgba[2], rgba[3]);\n}\n\nexport function rgbaToHexa(rgba: ColorRgba | ColorRgb) {\n return '#' + rgba.map((v) => ('0' + v.toString(16)).slice(-2)).join('');\n}\n\nexport function hslaStringToHexa(hsla: string) {\n return rgbaToHexa(hslaStringToRgba(hsla));\n}\n\nexport function hslaStringToHex(hsla: string) {\n return hslaStringToHexa(hsla).slice(0, -2);\n}\n\n/**\n * @param weight [0, 1]\n */\nexport function mixColors(color1: ColorRgb, color2: ColorRgb, weight: number) {\n const out = new Array(3) as ColorRgb;\n for(let i = 0; i < 3; ++i) {\n const v1 = color1[i], v2 = color2[i];\n out[i] = Math.floor(v2 + (v1 - v2) * weight);\n }\n\n return out;\n}\n\nexport function computePerceivedBrightness(color: ColorRgb) {\n return (color[0] * 0.2126 + color[1] * 0.7152 + color[2] * 0.0722) / 255;\n}\n\nexport function getAverageColor(color1: ColorRgb, color2: ColorRgb): ColorRgb {\n return color1.map((v, i) => Math.round((v + color2[i]) / 2)) as ColorRgb;\n}\n\nexport function getAccentColor(baseHsv: number[], baseColor: ColorRgb, elementColor: ColorRgb): ColorRgb {\n const hsvTemp3 = rgbToHsv(...baseColor);\n const hsvTemp4 = rgbToHsv(...elementColor);\n\n const dist = Math.min(1.5 * hsvTemp3[1] / baseHsv[1], 1);\n\n hsvTemp3[0] = Math.min(360, hsvTemp4[0] - hsvTemp3[0] + baseHsv[0]);\n hsvTemp3[1] = Math.min(1, hsvTemp4[1] * baseHsv[1] / hsvTemp3[1]);\n hsvTemp3[2] = Math.min(1, (hsvTemp4[2] / hsvTemp3[2] + dist - 1) * baseHsv[2] / dist);\n if(hsvTemp3[2] < 0.3) {\n return elementColor;\n }\n return hsvToRgb(...hsvTemp3);\n}\n\nexport function changeColorAccent(baseHsv: number[], accentHsv: number[], color: ColorRgb, isDarkTheme: boolean) {\n const colorHsv = rgbToHsv(...color);\n\n const diffH = Math.min(Math.abs(colorHsv[0] - baseHsv[0]), Math.abs(colorHsv[0] - baseHsv[0] - 360));\n if(diffH > 30) {\n return color;\n }\n\n const dist = Math.min(1.5 * colorHsv[1] / baseHsv[1], 1);\n\n colorHsv[0] = Math.min(360, colorHsv[0] + accentHsv[0] - baseHsv[0]);\n colorHsv[1] = Math.min(1, colorHsv[1] * accentHsv[1] / baseHsv[1]);\n colorHsv[2] = Math.min(1, colorHsv[2] * (1 - dist + dist * accentHsv[2] / baseHsv[2]));\n\n let newColor = hsvToRgb(...colorHsv);\n\n const origBrightness = computePerceivedBrightness(color);\n const newBrightness = computePerceivedBrightness(newColor);\n\n // We need to keep colors lighter in dark themes and darker in light themes\n const needRevertBrightness = isDarkTheme ? origBrightness > newBrightness : origBrightness < newBrightness;\n\n if(needRevertBrightness) {\n const amountOfNew = 0.6;\n const fallbackAmount = (1 - amountOfNew) * origBrightness / newBrightness + amountOfNew;\n newColor = changeBrightness(newColor, fallbackAmount);\n }\n\n return newColor;\n}\n\nexport function changeBrightness(color: ColorRgb, amount: number) {\n return color.map((v) => clamp(Math.round(v * amount), 0, 255)) as ColorRgb;\n}\n\nexport function getHexColorFromTelegramColor(color: number) {\n const hex = (color < 0 ? 0xFFFFFF + color : color).toString(16);\n return '#' + (hex.length >= 6 ? hex : '0'.repeat(6 - hex.length) + hex);\n}\n\nexport function getRgbColorFromTelegramColor(color: number) {\n return hexToRgb(getHexColorFromTelegramColor(color));\n}\n\nexport function getColorsFromWallPaper(wallPaper: WallPaper) {\n return wallPaper.settings ? [\n wallPaper.settings.background_color,\n wallPaper.settings.second_background_color,\n wallPaper.settings.third_background_color,\n wallPaper.settings.fourth_background_color\n ].filter(Boolean).map(getHexColorFromTelegramColor).join(',') : '';\n}\n","export default function compareVersion(v1: string, v2: string): number {\n v1 = v1.split(' ', 1)[0];\n v2 = v2.split(' ', 1)[0];\n const s1 = v1.split('.');\n const s2 = v2.split('.');\n\n for(let i = 0; i < s1.length; ++i) {\n const v1 = +s1[i];\n const v2 = +s2[i];\n if(v1 > v2) return 1;\n else if(v1 < v2) return -1;\n }\n\n return 0;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function blurActiveElement() {\n if((document.activeElement as HTMLInputElement)?.blur) {\n (document.activeElement as HTMLInputElement).blur();\n return true;\n }\n\n return false;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport default function cancelEvent(event?: Event) {\n event ||= window.event;\n if(event) {\n // 'input' event will have cancelable=false, but we still need to preventDefault\n // if(!event.cancelable) {\n // return false;\n // }\n\n // @ts-ignore\n event = event.originalEvent || event;\n\n try {\n if(event.stopPropagation) event.stopPropagation();\n if(event.preventDefault) event.preventDefault();\n event.returnValue = false;\n event.cancelBubble = true;\n } catch(err) {}\n }\n\n return false;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// export function findUpClassName(el: any, className: string): T;\nexport default function findUpClassName(el: EventTarget | {closest: (selector: string) => any}, className: string): HTMLElement {\n return (el as any).closest('.' + className);\n /* if(el.classList.contains(className)) return el; // 03.02.2020\n\n while(el.parentElement) {\n el = el.parentElement;\n if(el.classList.contains(className))\n return el;\n }\n return null; */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {doubleRaf} from '../schedulers';\n\nexport default function fixSafariStickyInput(input: HTMLElement) {\n input.style.transform = 'translateY(-99999px)';\n /* input.style.position = 'fixed';\n input.style.top = '-99999px';\n input.style.left = '0'; */\n input.focus();\n\n // setTimeout(() => {\n doubleRaf().then(() => {\n // fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\n /* input.style.position = '';\n input.style.top = ''; */\n input.style.transform = '';\n // fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4, undefined, FocusDirection.Static);\n\n /* setTimeout(() => {\n fastSmoothScroll(findUpClassName(input, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'start', 4);\n }, 50); */\n });\n // }, 0);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport {IS_MOBILE, IS_SAFARI} from '../../environment/userAgent';\nimport findUpClassName from './findUpClassName';\nimport fixSafariStickyInput from './fixSafariStickyInput';\n\nexport const IS_STICKY_INPUT_BUGGED = IS_SAFARI && IS_MOBILE && IS_TOUCH_SUPPORTED;\n\nif(IS_STICKY_INPUT_BUGGED) {\n const key: 'clientY' | 'pageY' = 'clientY';\n let startY = 0;\n const o = {capture: true, passive: false};\n const onTouchMove = (e: TouchEvent) => {\n const touch = e.touches[0];\n\n // console.log('touchmove y', touch[key], startY);\n\n const scrollable = findUpClassName(touch.target, 'scrollable-y');\n if(scrollable) {\n const y = touch[key];\n const scrolled = startY - y;\n\n /* if(y < startY) {\n startY = y;\n } */\n\n const scrollTop = scrollable.scrollTop;\n const scrollHeight = scrollable.scrollHeight;\n const clientHeight = scrollable.clientHeight;\n const nextScrollTop = scrollTop ? Math.round(scrollTop + scrollable.clientHeight + scrolled) : scrollTop + scrolled;\n // const needCancel = scrollHeight !== clientHeight ? (scrollTop && diff <= 1) || (scrollTop - diff) < 0 : true;\n const needCancel = scrollHeight === clientHeight || nextScrollTop >= scrollHeight || nextScrollTop <= 0;\n if(needCancel) {\n e.preventDefault();\n }\n\n // console.log('touchmove with scrollable', scrollTop, startY, scrolled, nextScrollTop, needCancel, e.cancelable);\n } else {\n e.preventDefault();\n\n // console.log('touchmove no scrollable', e, touch);\n }\n\n // if(e.target === document.documentElement || e.target === document.body) e.preventDefault();\n };\n\n // let el = document.createElement('div');\n // document.body.prepend(el);\n // let a = 0;\n\n // let hasFocus = false;\n let lastFocusOutTimeStamp = 0;\n document.addEventListener('focusin', (e) => {\n if(!(e.target as HTMLElement).classList.contains('is-sticky-input-bugged') || (e.timeStamp - lastFocusOutTimeStamp) < 50/* && document.activeElement === input */) {\n return;\n }\n\n // console.log('focusin', e, e.timeStamp);\n\n // hasFocus = true;\n // document.body.classList.add('is-keyboard-opened');\n\n // el.innerText = 'focusin ' + ++a;\n\n /* a < 2 && */fixSafariStickyInput(e.target as HTMLElement);\n\n document.addEventListener('touchmove', onTouchMove, o);\n document.addEventListener('touchstart', (e) => {\n if(e.touches.length > 1) return;\n const touchStart = e.touches[0];\n\n startY = touchStart[key];\n });\n }, {passive: true});\n\n document.addEventListener('focusout', (e) => {\n // console.log('focusout', e, e.timeStamp);\n document.removeEventListener('touchmove', onTouchMove, o);\n\n lastFocusOutTimeStamp = e.timeStamp;\n\n // el.innerText = 'focusout ' + ++a;\n\n // if(hasFocus) {\n // hasFocus = false;\n // document.body.classList.remove('is-keyboard-opened');\n // }\n }, {passive: true});\n\n document.addEventListener('visibilitychange', () => {\n // console.log('window visibilitychange');\n if(document.activeElement &&\n document.activeElement.classList.contains('is-sticky-input-bugged') &&\n (document.activeElement as HTMLElement).blur) {\n fixSafariStickyInput(document.activeElement as HTMLElement);\n }\n\n /* blurActiveElement();\n window.scrollTo(0, 0);\n setVH(); */\n }, {passive: true});\n}\n\nexport default function fixSafariStickyInputFocusing(input: HTMLElement) {\n if(!IS_STICKY_INPUT_BUGGED) return;\n input.classList.add('is-sticky-input-bugged');\n}\n","let callback: () => Promise;\nexport default function cacheInstallPrompt() {\n window.addEventListener('beforeinstallprompt', (deferredPrompt: any) => {\n callback = async() => {\n deferredPrompt.prompt();\n const {outcome} = await deferredPrompt.userChoice;\n const installed = outcome === 'accepted';\n if(installed) {\n callback = undefined;\n }\n };\n });\n}\n\nexport function getInstallPrompt() {\n return callback;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from '../noop';\nimport pause from '../schedulers/pause';\n\nconst texts = ['b', 'ะฑ'];\ntype FontType = 'text' | 'icons' | 'monospace';\n\nconst cache: {\n [key: string]: {\n [text: string]: Promise\n }\n} = {};\n\nconst fonts: {[type in FontType]: string} = {\n text: 'Roboto',\n icons: 'tgico',\n monospace: 'Roboto Mono'\n};\n\nexport default function loadFonts(types: {[type in FontType]?: string[] | 'all'} = {\n text: texts,\n icons: undefined,\n monospace: texts\n}): Promise {\n if(!('fonts' in document)) {\n return Promise.resolve();\n }\n\n const promises: Promise[] = [];\n for(const type in types) {\n let _texts = types[type as FontType];\n if(_texts === 'all') {\n _texts = texts;\n }\n\n const font = fonts[type as FontType];\n const weights = type === 'icons' ? [500] : [400, 500];\n for(const weight of weights) {\n const _promises = (_texts || [undefined]).map((text) => {\n const key = [weight, '1rem', font].join(' ');\n const promise = (cache[key] ??= {})[text || ''] ??= document.fonts.load(key, text);\n return promise;\n });\n promises.push(..._promises);\n }\n }\n\n return Promise.race([\n Promise.all(promises).catch(noop),\n pause(1000)\n ]);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import I18n from '../../lib/langPack';\n\nexport default function setInnerHTML(elem: Element, html: string | DocumentFragment | Element) {\n setDirection(elem);\n if(typeof(html) === 'string') {\n if(!html) elem.replaceChildren();\n else elem.innerHTML = html;\n } else {\n elem.replaceChildren(html);\n }\n}\n\nexport function setDirection(elem: Element) {\n // if(!I18n.isRTL) {\n elem.setAttribute('dir', 'auto');\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport EventListenerBase from './eventListenerBase';\n\nconst FOCUS_EVENT_NAME = IS_TOUCH_SUPPORTED ? 'touchstart' : 'mousemove';\nconst DO_NOT_IDLE = false;\n\nexport class IdleController extends EventListenerBase<{\n change: (idle: boolean) => void\n}> {\n private _isIdle: boolean;\n\n private focusPromise: Promise;\n private focusResolve: () => void;\n\n constructor() {\n super();\n\n this._isIdle = true;\n this.focusPromise = Promise.resolve();\n this.focusResolve = () => {};\n\n window.addEventListener('blur', () => {\n this.isIdle = true;\n\n window.addEventListener('focus', () => {\n this.isIdle = false;\n }, {once: true});\n });\n\n // * Prevent setting online after reloading page\n window.addEventListener(FOCUS_EVENT_NAME, () => {\n this.isIdle = false;\n }, {once: true, passive: true});\n\n this.addEventListener('change', (idle) => {\n if(idle) {\n this.focusPromise = new Promise((resolve) => {\n this.focusResolve = resolve;\n });\n } else {\n this.focusResolve();\n }\n });\n }\n\n public getFocusPromise() {\n return this.focusPromise;\n }\n\n public get isIdle() {\n return this._isIdle;\n }\n\n public set isIdle(value: boolean) {\n if(this._isIdle === value) {\n return;\n }\n\n if(DO_NOT_IDLE && value) {\n return;\n }\n\n this._isIdle = value;\n this.dispatchEvent('change', value);\n }\n}\n\nconst idleController = new IdleController();\nexport default idleController;\n","export default function clamp(v: number, min: number, max: number): number {\n return Math.min(max, Math.max(min, v));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport EventListenerBase from './eventListenerBase';\n\nexport class OverlayCounter extends EventListenerBase<{\n change: (isActive: boolean) => void\n}> {\n public overlaysActive = 0;\n\n get isOverlayActive() {\n return this.overlaysActive > 0;\n }\n\n set isOverlayActive(value: boolean) {\n this.overlaysActive += value ? 1 : -1;\n this.dispatchEvent('change', this.isOverlayActive);\n }\n}\n\nconst overlayCounter = new OverlayCounter();\nexport default overlayCounter;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// * Jolly Cobra's schedulers\nimport {NoneToVoidFunction} from '../types';\n\n/*\nexport function throttleWithTickEnd(fn: F) {\n return throttleWith(onTickEnd, fn);\n}\n\nexport function throttleWithNow(fn: F) {\n return throttleWith(runNow, fn);\n}\n\nexport function onTickEnd(cb: NoneToVoidFunction) {\n Promise.resolve().then(cb);\n}\n\nfunction runNow(fn: NoneToVoidFunction) {\n fn();\n} */\n\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\nexport function fastRaf(callback: NoneToVoidFunction) {\n if(!fastRafCallbacks) {\n fastRafCallbacks = [callback];\n\n requestAnimationFrame(() => {\n const currentCallbacks = fastRafCallbacks!;\n fastRafCallbacks = undefined;\n currentCallbacks.forEach((cb) => cb());\n });\n } else {\n fastRafCallbacks.push(callback);\n }\n}\n\nlet fastRafConventionalCallbacks: NoneToVoidFunction[] | undefined, processing = false;\nexport function fastRafConventional(callback: NoneToVoidFunction) {\n if(!fastRafConventionalCallbacks) {\n fastRafConventionalCallbacks = [callback];\n\n requestAnimationFrame(() => {\n processing = true;\n for(let i = 0; i < fastRafConventionalCallbacks.length; ++i) {\n fastRafConventionalCallbacks[i]();\n }\n\n fastRafConventionalCallbacks = undefined;\n processing = false;\n });\n } else if(processing) {\n callback();\n } else {\n fastRafConventionalCallbacks.push(callback);\n }\n}\n\nlet rafPromise: Promise;\nexport function fastRafPromise() {\n if(rafPromise) return rafPromise;\n\n rafPromise = new Promise((resolve) => fastRaf(() => resolve()));\n rafPromise.then(() => {\n rafPromise = undefined;\n });\n\n return rafPromise;\n}\n\nexport function doubleRaf() {\n return new Promise((resolve) => {\n fastRaf(() => {\n fastRaf(resolve);\n });\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function parseUriParams(uri: string, splitted = uri.split('?')) {\n return parseUriParamsLine(splitted?.[1]);\n}\n\nexport function parseUriParamsLine(line: string) {\n const params: any = {};\n if(!line) {\n return params;\n }\n\n line.split('&').forEach((item) => {\n params[item.split('=')[0]] = decodeURIComponent(item.split('=')[1]);\n });\n\n return params;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppTheme} from '../config/state';\nimport type {Theme} from '../layer';\nimport type AppBackgroundTab from '../components/sidebarLeft/tabs/background';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport rootScope from '../lib/rootScope';\nimport {changeColorAccent, ColorRgb, getAccentColor, getAverageColor, getHexColorFromTelegramColor, getRgbColorFromTelegramColor, hexToRgb, hslaStringToHex, hsvToRgb, mixColors, rgbaToHexa, rgbaToHsla, rgbToHsv} from './color';\nimport {MOUNT_CLASS_TO} from '../config/debug';\n\ntype AppColorName = 'primary-color' | 'message-out-primary-color' |\n 'surface-color' | 'danger-color' | 'primary-text-color' |\n 'secondary-text-color' | 'message-out-background-color' |\n 'saved-color';\ntype AppColor = {\n rgb?: boolean,\n light?: boolean,\n lightFilled?: boolean,\n dark?: boolean,\n darkRgb?: boolean,\n darkFilled?: boolean\n};\n\nconst appColorMap: {[name in AppColorName]: AppColor} = {\n 'primary-color': {\n rgb: true,\n light: true,\n lightFilled: true,\n dark: true,\n darkRgb: true\n },\n 'message-out-primary-color': {\n lightFilled: true\n },\n 'surface-color': {\n rgb: true\n },\n 'danger-color': {\n light: true,\n dark: true\n },\n 'primary-text-color': {\n rgb: true\n },\n 'secondary-text-color': {\n light: true,\n lightFilled: true\n },\n 'message-out-background-color': {\n light: true,\n lightFilled: true,\n dark: true,\n darkFilled: true\n },\n 'saved-color': {\n lightFilled: true\n }\n};\n\nconst colorMap: {\n [name in AppTheme['name']]?: {\n [name in AppColorName]?: string\n }\n} = {\n day: {\n 'primary-color': '#3390ec',\n 'message-out-primary-color': '#4fae4e',\n 'surface-color': '#ffffff',\n 'danger-color': '#df3f40',\n 'primary-text-color': '#000000',\n 'secondary-text-color': '#707579',\n 'saved-color': '#359AD4'\n },\n night: {\n 'primary-color': '#8774E1',\n 'message-out-primary-color': '#8774E1',\n 'surface-color': '#212121',\n 'danger-color': '#ff595a',\n 'primary-text-color': '#ffffff',\n 'secondary-text-color': '#aaaaaa',\n 'saved-color': '#8774E1'\n }\n};\n\nexport class ThemeController {\n private themeColor: string;\n private _themeColorElem: Element;\n private systemTheme: AppTheme['name'];\n private styleElement: HTMLStyleElement;\n public AppBackgroundTab: typeof AppBackgroundTab;\n\n constructor() {\n rootScope.addEventListener('theme_change', () => {\n this.setTheme();\n });\n\n // rootScope.addEventListener('settings_updated', ())\n }\n\n private get themeColorElem() {\n if(this._themeColorElem !== undefined) {\n return this._themeColorElem;\n }\n\n return this._themeColorElem = document.head.querySelector('[name=\"theme-color\"]') as Element || null;\n }\n\n public setThemeColor(color = this.themeColor) {\n if(!color) {\n color = this.isNight() ? '#212121' : '#ffffff';\n }\n\n const themeColorElem = this.themeColorElem;\n if(themeColorElem) {\n themeColorElem.setAttribute('content', color);\n }\n }\n\n public setThemeListener() {\n try {\n const darkModeMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const checkDarkMode = () => {\n // const theme = this.getTheme();\n this.systemTheme = darkModeMediaQuery.matches ? 'night' : 'day';\n // const newTheme = this.getTheme();\n\n if(rootScope.myId) {\n rootScope.dispatchEvent('theme_change');\n } else {\n this.setTheme();\n }\n };\n\n if('addEventListener' in darkModeMediaQuery) {\n darkModeMediaQuery.addEventListener('change', checkDarkMode);\n } else if('addListener' in darkModeMediaQuery) {\n (darkModeMediaQuery as any).addListener(checkDarkMode);\n }\n\n checkDarkMode();\n } catch(err) {\n\n }\n }\n\n public applyHighlightningColor() {\n let hsla: string;\n const theme = this.getTheme();\n if(theme.settings?.highlightningColor) {\n hsla = theme.settings.highlightningColor;\n document.documentElement.style.setProperty('--message-highlightning-color', hsla);\n } else {\n document.documentElement.style.removeProperty('--message-highlightning-color');\n }\n\n if(!IS_TOUCH_SUPPORTED && hsla) {\n this.themeColor = hslaStringToHex(hsla);\n }\n }\n\n public setTheme() {\n const isNight = this.isNight();\n const colorScheme = document.head.querySelector('[name=\"color-scheme\"]');\n if(colorScheme) {\n colorScheme.setAttribute('content', isNight ? 'dark' : 'light');\n }\n\n document.documentElement.classList.toggle('night', isNight);\n this.setThemeColor();\n const theme = this.getTheme();\n this.applyTheme(theme);\n\n let style = this.styleElement;\n if(!style) {\n style = this.styleElement = document.createElement('style');\n document.head.append(style);\n }\n\n const e = document.createElement('div');\n this.applyTheme(rootScope.settings.themes.find((theme) => theme.name === 'night'), e);\n style.textContent = `.night {${e.style.cssText}}`;\n\n this.applyHighlightningColor();\n }\n\n public async switchTheme(name: AppTheme['name']) {\n await rootScope.managers.appStateManager.setByKey('settings.theme', name);\n rootScope.dispatchEvent('theme_change');\n }\n\n public isNight() {\n return this.getTheme().name === 'night';\n }\n\n public getTheme(name: AppTheme['name'] = rootScope.settings.theme === 'system' ? this.systemTheme : rootScope.settings.theme) {\n return rootScope.settings.themes.find((t) => t.name === name);\n }\n\n // theme applier\n private bindColorApplier(options: Pick[0], 'element' | 'isNight'>) {\n const appliedColors: Set = new Set();\n return {\n applyAppColor: (_options: Omit[0], keyof typeof options>) => {\n appliedColors.add(_options.name);\n return this.applyAppColor({..._options, ...options});\n },\n finalize: () => {\n const isNight = options.isNight;\n for(const name in appColorMap) {\n if(!appliedColors.has(name as AppColorName)) {\n this.applyAppColor({\n name: name as AppColorName,\n hex: colorMap[isNight ? 'night' : 'day'][name as AppColorName],\n ...options\n });\n }\n }\n }\n };\n };\n\n private applyAppColor({\n name,\n hex,\n element,\n lightenAlpha = 0.08,\n darkenAlpha = lightenAlpha,\n mixColor,\n isNight\n }: {\n name: AppColorName,\n hex: string,\n element: HTMLElement,\n lightenAlpha?: number\n darkenAlpha?: number,\n mixColor?: ColorRgb,\n isNight?: boolean\n }) {\n const appColor = appColorMap[name];\n const rgb = hexToRgb(hex);\n const hsla = rgbaToHsla(...rgb);\n\n mixColor ??= hexToRgb(colorMap[isNight ? 'night' : 'day']['surface-color']);\n const lightenedRgb = mixColors(rgb, mixColor, lightenAlpha);\n\n const darkenedHsla: typeof hsla = {\n ...hsla,\n l: hsla.l - darkenAlpha * 100\n };\n\n const properties: [string, string][] = [\n [name, hex],\n appColor.rgb && [name + '-rgb', rgb.join(',')],\n appColor.light && ['light-' + name, `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${lightenAlpha})`],\n appColor.lightFilled && ['light-filled-' + name, rgbaToHexa(lightenedRgb)],\n appColor.dark && ['dark-' + name, `hsl(${darkenedHsla.h}, ${darkenedHsla.s}%, ${darkenedHsla.l}%)`]\n // appColor.darkFilled && ['dark-' + name, `hsl(${darkenedHsla.h}, ${darkenedHsla.s}%, ${darkenedHsla.l}%)`]\n ];\n\n properties.filter(Boolean).forEach(([name, value]) => {\n element.style.setProperty('--' + name, value);\n });\n }\n\n public async applyNewTheme(theme: Theme) {\n const isNight = this.isNightTheme(theme);\n const currentTheme = this.getTheme();\n const themes = rootScope.settings.themes;\n const themeSettings = theme.settings.find((themeSettings) => themeSettings.base_theme._ === (isNight ? 'baseThemeNight' : 'baseThemeClassic'));\n const newAppTheme: AppTheme = {\n ...theme,\n name: currentTheme.name,\n settings: {\n ...themeSettings,\n highlightningColor: ''\n }\n };\n\n await this.AppBackgroundTab.setBackgroundDocument(themeSettings.wallpaper, newAppTheme.settings);\n themes[themes.indexOf(currentTheme)] = newAppTheme;\n await rootScope.managers.appStateManager.setByKey('settings.themes', rootScope.settings.themes);\n rootScope.dispatchEvent('theme_change');\n }\n\n private isNightTheme(theme: Theme | AppTheme) {\n return (theme as AppTheme).name === 'night' || this.isNight();\n }\n\n public applyTheme(theme: Theme | AppTheme, element = document.documentElement) {\n const isNight = this.isNightTheme(theme);\n const themeSettings = Array.isArray(theme.settings) ?\n theme.settings.find((settings) => settings.base_theme._ === (isNight ? 'baseThemeNight' : 'baseThemeClassic')) :\n theme.settings;\n const baseColors = colorMap[isNight ? 'night' : 'day'];\n\n let hsvTemp1 = rgbToHsv(...hexToRgb(baseColors['primary-color'])); // primary base\n let hsvTemp2 = rgbToHsv(...getRgbColorFromTelegramColor(themeSettings.accent_color)); // new primary\n\n const newAccentRgb = changeColorAccent(\n hsvTemp1,\n hsvTemp2,\n hexToRgb(baseColors['primary-color']),\n !isNight\n );\n const newAccentHex = rgbaToHexa(newAccentRgb);\n\n const {applyAppColor, finalize} = this.bindColorApplier({element, isNight});\n\n applyAppColor({\n name: 'primary-color',\n hex: newAccentHex,\n darkenAlpha: 0.04\n });\n\n applyAppColor({\n name: 'saved-color',\n hex: newAccentHex,\n lightenAlpha: 0.64,\n mixColor: [255, 255, 255]\n });\n\n if(!themeSettings.message_colors?.length) {\n return;\n }\n\n const messageLightenAlpha = isNight ? 0.92 : 0.12;\n const baseMessageColor = hexToRgb(baseColors['message-out-primary-color']);\n hsvTemp1 = rgbToHsv(...baseMessageColor);\n const baseMessageOutBackgroundColor = mixColors(baseMessageColor, hexToRgb(baseColors['surface-color']), messageLightenAlpha);\n\n const firstColor = getRgbColorFromTelegramColor(themeSettings.message_colors[0]);\n\n let myMessagesAccent = firstColor;\n if(themeSettings.message_colors.length > 1) {\n // const w = getAccentColor(hsvTemp1, baseMessageOutBackgroundColor, myMessagesAccent);\n\n themeSettings.message_colors.slice(1).forEach((nextColor) => {\n myMessagesAccent = getAverageColor(myMessagesAccent, getRgbColorFromTelegramColor(nextColor));\n });\n\n myMessagesAccent = getAccentColor(hsvTemp1, baseMessageOutBackgroundColor, myMessagesAccent);\n\n // console.log('www', rgbaToHexa(w), rgbaToHexa(myMessagesAccent));\n }\n\n const o = myMessagesAccent;\n hsvTemp2 = rgbToHsv(...o);\n\n // const c = changeColorAccent(\n // hsvTemp1,\n // hsvTemp2,\n // baseMessageOutBackgroundColor\n // );\n\n // console.log(o, c, rgbaToHexa(o), rgbaToHexa(c));\n\n const accentColor2 = themeSettings.outbox_accent_color !== undefined && rgbToHsv(...getRgbColorFromTelegramColor(themeSettings.outbox_accent_color));\n\n const newMessageOutBackgroundColor = mixColors(myMessagesAccent, hexToRgb(baseColors['surface-color']), messageLightenAlpha);\n\n applyAppColor({\n name: 'message-out-background-color',\n hex: rgbaToHexa(newMessageOutBackgroundColor),\n lightenAlpha: messageLightenAlpha\n });\n\n applyAppColor({\n name: 'message-out-primary-color',\n hex: isNight ? '#ffffff' : rgbaToHexa(accentColor2 ? hsvToRgb(...accentColor2) : myMessagesAccent),\n mixColor: newMessageOutBackgroundColor\n });\n\n // if(accentColor2) {\n // console.log(rgbaToHexa(myMessagesAccent), rgbaToHexa(hsvToRgb(...accentColor2)));\n // }\n\n finalize();\n }\n}\n\nconst themeController = new ThemeController();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.themeController = themeController);\nexport default themeController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function setWorkerProxy() {\n // * hook worker constructor to set search parameters (test, debug, etc)\n const workerHandler = {\n construct(target: any, args: any) {\n let url = args[0] + '';\n if(url.indexOf('blob:') !== 0) {\n url += location.search;\n }\n\n return new target(url);\n }\n };\n\n [\n Worker,\n typeof(SharedWorker) !== 'undefined' && SharedWorker\n ].filter(Boolean).forEach((w) => {\n window[w.name as any] = new Proxy(w, workerHandler);\n });\n}\n\nsetWorkerProxy();\n","const IS_INSTALL_PROMPT_SUPPORTED = 'onbeforeinstallprompt' in window;\nexport default IS_INSTALL_PROMPT_SUPPORTED;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from './config/app';\nimport blurActiveElement from './helpers/dom/blurActiveElement';\nimport cancelEvent from './helpers/dom/cancelEvent';\nimport {IS_STICKY_INPUT_BUGGED} from './helpers/dom/fixSafariStickyInputFocusing';\nimport loadFonts from './helpers/dom/loadFonts';\nimport IS_EMOJI_SUPPORTED from './environment/emojiSupport';\nimport {IS_ANDROID, IS_APPLE, IS_APPLE_MOBILE, IS_FIREFOX, IS_MOBILE, IS_MOBILE_SAFARI, IS_SAFARI} from './environment/userAgent';\nimport './materialize.scss';\nimport './scss/style.scss';\nimport pause from './helpers/schedulers/pause';\nimport setWorkerProxy from './helpers/setWorkerProxy';\nimport toggleAttributePolyfill from './helpers/dom/toggleAttributePolyfill';\nimport rootScope from './lib/rootScope';\nimport IS_TOUCH_SUPPORTED from './environment/touchSupport';\nimport I18n from './lib/langPack';\nimport './helpers/peerIdPolyfill';\nimport './lib/polyfill';\nimport apiManagerProxy from './lib/mtproto/mtprotoworker';\nimport getProxiedManagers from './lib/appManagers/getProxiedManagers';\nimport themeController from './helpers/themeController';\nimport overlayCounter from './helpers/overlayCounter';\nimport singleInstance from './lib/mtproto/singleInstance';\nimport {parseUriParamsLine} from './helpers/string/parseUriParams';\nimport Modes from './config/modes';\nimport {AuthState} from './types';\nimport {IS_BETA} from './config/debug';\nimport IS_INSTALL_PROMPT_SUPPORTED from './environment/installPrompt';\nimport cacheInstallPrompt from './helpers/dom/installPrompt';\n// import appNavigationController from './components/appNavigationController';\n\ndocument.addEventListener('DOMContentLoaded', async() => {\n toggleAttributePolyfill();\n\n // polyfill for replaceChildren\n if((Node as any).prototype.replaceChildren === undefined) {\n (Node as any).prototype.replaceChildren = function(...nodes: any[]) {\n this.textContent = '';\n // while(this.lastChild) {\n // this.removeChild(this.lastChild);\n // }\n if(nodes) {\n this.append(...nodes);\n }\n }\n }\n\n rootScope.managers = getProxiedManagers();\n\n const manifest = document.getElementById('manifest') as HTMLLinkElement;\n manifest.href = `site${IS_APPLE && !IS_APPLE_MOBILE ? '_apple' : ''}.webmanifest?v=jw3mK7G9Aq`;\n\n singleInstance.start();\n\n // We listen to the resize event (https://css-tricks.com/the-trick-to-viewport-units-on-mobile/)\n const w = window.visualViewport || window; // * handle iOS keyboard\n let setViewportVH = false/* , hasFocus = false */;\n let lastVH: number;\n const setVH = () => {\n const vh = (setViewportVH && !overlayCounter.isOverlayActive ? (w as VisualViewport).height || (w as Window).innerHeight : window.innerHeight) * 0.01;\n if(lastVH === vh) {\n return;\n } else if(IS_TOUCH_SUPPORTED && lastVH < vh && (vh - lastVH) > 1) {\n blurActiveElement(); // (Android) fix blurring inputs when keyboard is being closed (e.g. closing keyboard by back arrow and touching a bubble)\n }\n\n lastVH = vh;\n\n // const vh = document.documentElement.scrollHeight * 0.01;\n document.documentElement.style.setProperty('--vh', `${vh}px`);\n\n // console.log('setVH', vh, setViewportVH ? w : window);\n\n /* if(setViewportVH && userAgent.isSafari && touchSupport.isTouchSupported && document.activeElement && (document.activeElement as HTMLElement).blur) {\n const rect = document.activeElement.getBoundingClientRect();\n if(rect.top < 0 || rect.bottom >= (w as any).height) {\n fastSmoothScroll(findUpClassName(document.activeElement, 'scrollable-y') || window as any, document.activeElement as HTMLElement, 'center', 4, undefined, FocusDirection.Static);\n }\n } */\n };\n\n setWorkerProxy;\n\n // const [_, touchSupport, userAgent, _rootScope, _appStateManager, _I18n, __/* , ___ */] = await Promise.all([\n // import('./lib/polyfill'),\n // import('./environment/touchSupport'),\n // import('./environment/userAgent'),\n // import('./lib/rootScope'),\n // import('./lib/appManagers/appStateManager'),\n // import('./lib/langPack'),\n // import('./helpers/peerIdPolyfill'),\n // // import('./helpers/cacheFunctionPolyfill')\n // ]);\n\n /* const {IS_TOUCH_SUPPORTED} = touchSupport;\n const {IS_FIREFOX, IS_MOBILE, IS_APPLE, IS_SAFARI, IS_APPLE_MOBILE, IS_ANDROID} = userAgent;\n const rootScope = _rootScope.default;\n const appStateManager = _appStateManager.default;\n const I18n = _I18n.default; */\n\n window.addEventListener('resize', setVH);\n setVH();\n\n if(IS_STICKY_INPUT_BUGGED) {\n const toggleResizeMode = () => {\n setViewportVH = tabId === 1 && IS_STICKY_INPUT_BUGGED && !overlayCounter.isOverlayActive;\n setVH();\n\n if(w !== window) {\n if(setViewportVH) {\n window.removeEventListener('resize', setVH);\n w.addEventListener('resize', setVH);\n } else {\n w.removeEventListener('resize', setVH);\n window.addEventListener('resize', setVH);\n }\n }\n };\n\n let tabId: number;\n (window as any).onImTabChange = (id: number) => {\n const wasTabId = tabId !== undefined;\n tabId = id;\n\n if(wasTabId || tabId === 1) {\n toggleResizeMode();\n }\n };\n\n overlayCounter.addEventListener('change', () => {\n toggleResizeMode();\n });\n }\n\n if(IS_FIREFOX && !IS_EMOJI_SUPPORTED) {\n document.addEventListener('dragstart', (e) => {\n const target = e.target as HTMLElement;\n if(target.tagName === 'IMG' && target.classList.contains('emoji')) {\n cancelEvent(e);\n return false;\n }\n });\n }\n\n if(IS_EMOJI_SUPPORTED) {\n document.documentElement.classList.add('native-emoji');\n }\n\n // prevent firefox image dragging\n document.addEventListener('dragstart', (e) => {\n if((e.target as HTMLElement)?.tagName === 'IMG') {\n e.preventDefault();\n return false;\n }\n });\n\n // restrict contextmenu on images (e.g. webp stickers)\n document.addEventListener('contextmenu', (e) => {\n if((e.target as HTMLElement).tagName === 'IMG' && !(window as any).appMediaViewer) {\n cancelEvent(e);\n }\n });\n\n if(IS_FIREFOX) {\n document.documentElement.classList.add('is-firefox', 'no-backdrop');\n }\n\n if(IS_MOBILE) {\n document.documentElement.classList.add('is-mobile');\n }\n\n if(IS_APPLE) {\n if(IS_SAFARI) {\n document.documentElement.classList.add('is-safari');\n }\n\n // document.documentElement.classList.add('emoji-supported');\n\n if(IS_APPLE_MOBILE) {\n document.documentElement.classList.add('is-ios');\n } else {\n document.documentElement.classList.add('is-mac');\n }\n } else if(IS_ANDROID) {\n document.documentElement.classList.add('is-android');\n\n // force losing focus on input blur\n // focusin and focusout are not working on mobile\n\n const onInResize = () => {\n hasFocus = true;\n window.addEventListener('resize', onOutResize, {once: true});\n };\n\n const onOutResize = () => {\n hasFocus = false;\n blurActiveElement();\n };\n\n let hasFocus = false;\n document.addEventListener('touchend', (e) => {\n const input = (e.target as HTMLElement).closest('[contenteditable=\"true\"], input');\n if(!input) {\n return;\n }\n\n if(document.activeElement !== input && !hasFocus) {\n console.log('input click', e, document.activeElement, input, input.matches(':focus'));\n window.addEventListener('resize', onInResize, {once: true});\n }\n });\n }\n\n if(!IS_TOUCH_SUPPORTED) {\n document.documentElement.classList.add('no-touch');\n } else {\n document.documentElement.classList.add('is-touch');\n /* document.addEventListener('touchmove', (event: any) => {\n event = event.originalEvent || event;\n if(event.scale && event.scale !== 1) {\n event.preventDefault();\n }\n }, {capture: true, passive: false}); */\n }\n\n if(IS_INSTALL_PROMPT_SUPPORTED) {\n cacheInstallPrompt();\n }\n\n const perf = performance.now();\n\n // await pause(1000000);\n\n const langPromise = I18n.getCacheLangPack();\n\n const [stateResult, langPack] = await Promise.all([\n // loadState(),\n apiManagerProxy.sendState().then(([stateResult]) => stateResult),\n langPromise\n ]);\n I18n.setTimeFormat(stateResult.state.settings.timeFormat);\n\n rootScope.managers.rootScope.getPremium().then((isPremium) => {\n rootScope.premium = isPremium;\n });\n\n themeController.setThemeListener();\n\n if(langPack.appVersion !== App.langPackVersion) {\n I18n.getLangPack(langPack.lang_code);\n }\n\n /**\n * won't fire if font is loaded too fast\n */\n function fadeInWhenFontsReady(elem: HTMLElement, promise: Promise) {\n elem.style.opacity = '0';\n\n promise.then(() => {\n window.requestAnimationFrame(() => {\n elem.style.opacity = '';\n });\n });\n }\n\n console.log('got state, time:', performance.now() - perf);\n\n if(langPack.lang_code === 'ar' && IS_BETA && false) {\n document.body.classList.add('is-rtl');\n document.documentElement.dir = 'rtl';\n document.documentElement.lang = langPack.lang_code;\n I18n.setRTL(true);\n } else {\n document.documentElement.dir = 'ltr';\n }\n\n let authState = stateResult.state.authState;\n\n const hash = location.hash;\n const splitted = hash.split('?');\n const params = parseUriParamsLine(splitted[1] ?? splitted[0]);\n if(params.tgWebAuthToken && authState._ !== 'authStateSignedIn') {\n const data: AuthState.signImport['data'] = {\n token: params.tgWebAuthToken,\n dcId: +params.tgWebAuthDcId,\n userId: params.tgWebAuthUserId.toUserId(),\n isTest: params.tgWebAuthTest !== undefined && !!+params.tgWebAuthTest,\n tgAddr: params.tgaddr\n };\n\n if(data.isTest !== Modes.test) {\n const urlSearchParams = new URLSearchParams(location.search);\n if(+params.tgWebAuthTest) {\n urlSearchParams.set('test', '1');\n } else {\n urlSearchParams.delete('test');\n }\n\n location.search = urlSearchParams.toString();\n return;\n }\n\n rootScope.managers.appStateManager.pushToState('authState', authState = {_: 'authStateSignImport', data});\n\n // appNavigationController.overrideHash('?tgaddr=' + encodeURIComponent(params.tgaddr));\n }\n\n if(authState._ !== 'authStateSignedIn'/* || 1 === 1 */) {\n console.log('Will mount auth page:', authState._, Date.now() / 1000);\n\n const el = document.getElementById('auth-pages');\n let scrollable: HTMLElement;\n if(el) {\n scrollable = el.querySelector('.scrollable') as HTMLElement;\n if((!IS_TOUCH_SUPPORTED || IS_MOBILE_SAFARI)) {\n scrollable.classList.add('no-scrollbar');\n }\n\n // * don't remove this line\n scrollable.style.opacity = '0';\n\n const placeholder = document.createElement('div');\n placeholder.classList.add('auth-placeholder');\n\n scrollable.prepend(placeholder);\n scrollable.append(placeholder.cloneNode());\n }\n\n try {\n await Promise.all([\n import('./lib/mtproto/telegramMeWebManager'),\n import('./lib/mtproto/webPushApiManager')\n ]).then(([meModule, pushModule]) => {\n meModule.default.setAuthorized(false);\n pushModule.default.forceUnsubscribe();\n });\n } catch(err) {\n\n }\n\n let pagePromise: Promise;\n // langPromise.then(async() => {\n switch(authState._) {\n case 'authStateSignIn':\n pagePromise = (await import('./pages/pageSignIn')).default.mount();\n break;\n case 'authStateSignQr':\n pagePromise = (await import('./pages/pageSignQR')).default.mount();\n break;\n case 'authStateAuthCode':\n pagePromise = (await import('./pages/pageAuthCode')).default.mount(authState.sentCode);\n break;\n case 'authStatePassword':\n pagePromise = (await import('./pages/pagePassword')).default.mount();\n break;\n case 'authStateSignUp':\n pagePromise = (await import('./pages/pageSignUp')).default.mount(authState.authCode);\n break;\n case 'authStateSignImport':\n pagePromise = (await import('./pages/pageSignImport')).default.mount(authState.data);\n break;\n }\n // });\n\n if(scrollable) {\n // wait for text appear\n if(pagePromise) {\n await pagePromise;\n }\n\n const promise = 'fonts' in document ?\n Promise.race([\n pause(1000),\n document.fonts.ready\n ]) :\n Promise.resolve();\n fadeInWhenFontsReady(scrollable, promise);\n }\n\n /* setTimeout(async() => {\n (await import('./pages/pageAuthCode')).default.mount({\n \"_\": \"auth.sentCode\",\n \"pFlags\": {},\n \"flags\": 6,\n \"type\": {\n \"_\": \"auth.sentCodeTypeSms\",\n \"length\": 5\n },\n \"phone_code_hash\": \"\",\n \"next_type\": {\n \"_\": \"auth.codeTypeCall\"\n },\n \"timeout\": 120,\n \"phone_number\": \"\"\n });\n\n (await import('./pages/pageSignQR')).default.mount();\n\n (await import('./pages/pagePassword')).default.mount();\n\n (await import('./pages/pageSignUp')).default.mount({\n \"phone_code_hash\": \"\",\n \"phone_number\": \"\"\n });\n }, 500); */\n } else {\n console.log('Will mount IM page:', Date.now() / 1000);\n fadeInWhenFontsReady(document.getElementById('main-columns'), loadFonts());\n (await import('./pages/pageIm')).default.mount();\n }\n});\n","export default function toggleAttributePolyfill() {\n if(!Element.prototype.toggleAttribute) {\n Element.prototype.toggleAttribute = function(name, force) {\n if(force !== void 0) force = !!force;\n\n if(this.hasAttribute(name)) {\n if(force) return true;\n\n this.removeAttribute(name);\n return false;\n }\n if(force === false) return false;\n\n this.setAttribute(name, '');\n return true;\n };\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport class AppRuntimeManager {\n public reload() {\n try {\n location.reload();\n } catch(e) {};\n\n // if(window.chrome && chrome.runtime && chrome.runtime.reload) {\n // chrome.runtime.reload();\n // }\n }\n\n public close() {\n try {\n window.close();\n } catch(e) {}\n }\n\n /**\n * Better to call from event\n */\n public focus() {\n // // @ts-ignore\n // if(window.navigator.mozApps && document.hidden) {\n // // Get app instance and launch it to bring app to foreground\n // // @ts-ignore\n // window.navigator.mozApps.getSelf().onsuccess = function() {\n // this.result.launch();\n // };\n // } else {\n // // @ts-ignore\n // if(window.chrome && chrome.app && chrome.app.window) {\n // // @ts-ignore\n // chrome.app.window.current().focus();\n // }\n\n window.focus();\n // }\n }\n}\n\nconst appRuntimeManager = new AppRuntimeManager();\nexport default appRuntimeManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type createManagers from './createManagers';\nimport {ModifyFunctionsToAsync} from '../../types';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\nimport {AckedResult} from '../mtproto/superMessagePort';\nimport noop from '../../helpers/noop';\nimport dT from '../../helpers/dT';\nimport DEBUG from '../../config/debug';\n\n// let stats: {\n// [manager: string]: {\n// [method: string]: {\n// times: number[],\n// byArgs: {\n// [args: string]: number[]\n// }\n// }\n// }\n// } = {};\n\n// let sentCount = 0;\n// let sentMethods: {[key: string]: number} = {};\n// let sentMethods2: {[key: string]: number} = {};\n// function collectStats(manager: string, method: string, args: any[], promise: Promise) {\n// ++sentCount;\n\n// const key = [manager, method].join('-');\n// if(!sentMethods[key]) sentMethods[key] = 0;\n// ++sentMethods[key];\n\n// const key2 = [('00000' + sentCount).slice(-5), key].join('-');\n\n// const byManager = stats[manager] ??= {};\n// const byMethod = byManager[method] ??= {times: [], byArgs: {}};\n\n// const perf = performance.now();\n// promise.catch(noop).finally(() => {\n// const time = performance.now() - perf;\n// byMethod.times.push(time);\n\n// sentMethods2[key2] = time;\n\n// try {\n// const argsString = JSON.stringify(args);\n// byMethod.byArgs[argsString].push(time);\n// } catch(err) {}\n// });\n// }\n\n// setInterval(() => {\n// console.log(dT(), '[PROXY] stats', stats, sentCount, sentMethods, sentMethods2);\n// sentCount = 0;\n// stats = {};\n// sentMethods = {};\n// sentMethods2 = {};\n// }, 2000);\n\nconst DEBUG_MANAGER_REQUESTS: {[managerName: string]: Set} = {};\nif(DEBUG) {\n (window as any).DEBUG_MANAGER_REQUESTS = DEBUG_MANAGER_REQUESTS;\n}\n\nfunction createProxy(/* source: T, */name: string, ack?: boolean) {\n const proxy = new Proxy({}, {\n get: (target, p, receiver) => {\n // console.log('get', target, p, receiver);\n // @ts-ignore\n // const value = source[p];\n // if(typeof(value) !== 'function') {\n // return value;\n // }\n\n return (...args: any[]) => {\n const promise = apiManagerProxy.invoke('manager', {\n name,\n method: p as string,\n args\n }, ack as any);\n\n if(DEBUG) {\n if(DEBUG_MANAGER_REQUESTS[name]?.has(p as any)) {\n console.warn('manager request', name, p, args);\n }\n }\n\n // collectStats(name, p as string, args, promise);\n\n return promise;\n\n // @ts-ignore\n // return Promise.resolve(value.call(source, ...args));\n };\n }\n });\n\n return proxy;\n}\n\ntype AA = {\n [key in keyof T]: T[key] extends (...args: infer A) => infer R ? (...args: A) => Promise>> : never\n};\n\ntype T = Awaited>;\ntype ProxiedManagers = {\n [name in keyof T]?: ModifyFunctionsToAsync;\n} & {\n acknowledged?: {\n [name in keyof T]?: AA;\n }\n};\n\nfunction createProxyProxy(proxied: any, ack?: boolean) {\n return new Proxy(proxied, {\n get: (target, p, receiver) => {\n // @ts-ignore\n return target[p] ??= createProxy(p as string, ack);\n }\n });\n}\n\nlet proxied: ProxiedManagers;\nexport default function getProxiedManagers() {\n if(proxied) {\n return proxied;\n }\n\n proxied = createProxyProxy({}, false);\n proxied.acknowledged = createProxyProxy({}, true);\n return proxied;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport Modes from '../../config/modes';\nimport makeError from '../../helpers/makeError';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {logger} from '../logger';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\n */\nexport type IDBIndex = {\n indexName: string,\n keyPath: string,\n objectParameters: IDBIndexParameters\n};\n\nexport type IDBStore = {\n name: string,\n indexes?: IDBIndex[]\n};\n\nexport type IDBOptions = {\n name?: string,\n storeName: string,\n stores?: IDBStore[],\n version?: number\n};\n\nconst DEBUG = false;\n\nexport class IDB {\n private static INSTANCES: IDB[] = [];\n private openDbPromise: Promise;\n private db: IDBDatabase;\n private storageIsAvailable: boolean;\n private log: ReturnType;\n private name: string;\n private version: number;\n private stores: IDBStore[];\n\n constructor(db: Database) {\n safeAssign(this, db);\n\n if(Modes.test) {\n this.name += '_test';\n }\n\n this.storageIsAvailable = true;\n this.log = logger(['IDB', db.name].join('-'));\n this.log('constructor');\n\n this.openDatabase(true);\n\n IDB.INSTANCES.push(this);\n }\n\n public isAvailable() {\n return this.storageIsAvailable;\n }\n\n public openDatabase(createNew = false): Promise {\n if(this.openDbPromise && !createNew) {\n return this.openDbPromise;\n }\n\n const createIndexes = (os: IDBObjectStore, store: IDBStore) => {\n const indexNames = Array.from(os.indexNames);\n for(const indexName of indexNames) {\n os.deleteIndex(indexName);\n }\n\n if(!store.indexes?.length) {\n return;\n }\n\n for(const index of store.indexes) {\n if(os.indexNames.contains(index.indexName)) {\n continue;\n }\n\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\n }\n };\n\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\n const os = db.createObjectStore(store.name);\n createIndexes(os, store);\n };\n\n try {\n var request = indexedDB.open(this.name, this.version);\n\n if(!request) {\n return Promise.reject();\n }\n } catch(error) {\n this.log.error('error opening db', (error as Error).message);\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n let finished = false;\n setTimeout(() => {\n if(!finished) {\n request.onerror(makeError('IDB_CREATE_TIMEOUT') as Event);\n }\n }, 3000);\n\n return this.openDbPromise = new Promise((resolve, reject) => {\n request.onsuccess = (event) => {\n finished = true;\n const db = request.result;\n let calledNew = false;\n\n this.log('Opened');\n\n db.onerror = (error) => {\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', error);\n reject(error);\n };\n\n db.onclose = (e) => {\n this.log.error('closed:', e);\n !calledNew && this.openDatabase();\n };\n\n db.onabort = (e) => {\n this.log.error('abort:', e);\n const transaction = e.target as IDBTransaction;\n\n this.openDatabase(calledNew = true);\n\n if(transaction.onerror) {\n transaction.onerror(e);\n }\n\n db.close();\n };\n\n db.onversionchange = (e) => {\n this.log.error('onversionchange, lol?');\n };\n\n resolve(this.db = db);\n };\n\n request.onerror = (event) => {\n finished = true;\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', event);\n reject(event);\n };\n\n request.onupgradeneeded = (event) => {\n finished = true;\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\n\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n this.stores.forEach((store) => {\n /* if(db.objectStoreNames.contains(store.name)) {\n //if(event.oldVersion === 1) {\n db.deleteObjectStore(store.name);\n //}\n } */\n\n if(!db.objectStoreNames.contains(store.name)) {\n createObjectStore(db, store);\n } else {\n const txn = target.transaction;\n const os = txn.objectStore(store.name);\n createIndexes(os, store);\n }\n });\n };\n });\n }\n\n public static create>(db: T) {\n return this.INSTANCES.find((instance) => instance.name === db.name) ?? new IDB(db);\n }\n\n public static closeDatabases(preserve?: IDB) {\n this.INSTANCES.forEach((storage) => {\n if(preserve && preserve === storage) {\n return;\n }\n\n const db = storage.db;\n if(db) {\n db.onclose = () => {};\n db.close();\n }\n });\n }\n}\n\nexport default class IDBStorage, StoreName extends string = T['stores'][0]['name']> {\n private log: ReturnType;\n private storeName: T['stores'][0]['name'];\n private idb: IDB;\n\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\n this.storeName = storeName;\n this.log = logger(['IDB', db.name, storeName].join('-'));\n this.idb = IDB.create(db);\n }\n\n /**\n * ! WARNING ! function requires at least one opened connection\n */\n /* public static clearObjectStores() {\n const storage = this.STORAGES[0];\n this.closeDatabases(storage);\n\n const names = Array.from(storage.db.objectStoreNames);\n const promises = names.map((name) => storage.clear(name));\n return Promise.all(promises);\n } */\n\n /* public static deleteDatabase() {\n this.closeDatabases();\n\n const storages = this.STORAGES;\n const dbNames = Array.from(new Set(storages.map((storage) => storage.name)));\n const promises = dbNames.map((dbName) => {\n return new Promise((resolve, reject) => {\n const deleteRequest = indexedDB.deleteDatabase(dbName);\n\n deleteRequest.onerror = () => {\n reject();\n };\n\n deleteRequest.onsuccess = () => {\n resolve();\n };\n });\n });\n\n return Promise.all(promises);\n } */\n\n public delete(entryName: string | string[], storeName?: StoreName): Promise {\n // return Promise.resolve();\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.delete(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'delete: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n public clear(storeName?: StoreName): Promise {\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\n }\n\n public save(entryName: string | string[], value: any | any[], storeName?: StoreName) {\n // const handleError = (error: Error) => {\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\n // setTimeout(() => {\n // this.save(entryName, value);\n // }, 2e3);\n // } else {\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\n // }\n // };\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n value = [].concat(value);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'save: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n // public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // //return Promise.resolve(blobConstruct([blob]));\n // if(!(blob instanceof Blob)) {\n // blob = blobConstruct(blob);\n // }\n\n // return this.save(fileName, blob);\n // }\n\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\n return Promise.reject();\n }\n\n if(!(blob instanceof Blob)) {\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\n return this.storagePutB64String(db, fileName, address).then(() => {\n return blob;\n });\n }\n\n try {\n var reader = new FileReader();\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n let promise = new Promise((resolve, reject) => {\n reader.onloadend = () => {\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\n resolve(blob);\n }, reject);\n }\n\n reader.onerror = reject;\n });\n\n\n try {\n reader.readAsDataURL(blob);\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n return promise;\n }\n\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\n try {\n var objectStore = db.transaction([this.storeName], 'readwrite')\n .objectStore(this.storeName);\n var request = objectStore.put(b64string, fileName);\n } catch(error) {\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n resolve();\n };\n\n request.onerror = reject;\n });\n }\n\n public getBlobSize(blob: any) {\n return blob.size || blob.byteLength || blob.length;\n } */\n\n public get(entryName: string[], storeName?: StoreName): Promise;\n public get(entryName: string, storeName?: StoreName): Promise;\n public get(entryName: string | string[], storeName?: StoreName): Promise | Promise {\n // return Promise.reject();\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n if(!entryName) {\n return undefined;\n }\n\n entryName = [].concat(entryName);\n } else if(!entryName.length) {\n return Promise.resolve([]) as any;\n }\n\n return this.getObjectStore('readonly', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.get(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'get: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n private getObjectStore(\n mode: IDBTransactionMode,\n callback: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[],\n log?: string,\n storeName = this.storeName\n ) {\n let perf: number;\n\n if(log) {\n perf = performance.now();\n this.log(log + ': start');\n }\n\n return this.idb.openDatabase().then((db) => {\n return new Promise((resolve, reject) => {\n /* if(mode === 'readwrite') {\n return;\n } */\n\n const transaction = db.transaction([storeName], mode);\n\n const onError = () => {\n clearTimeout(timeout);\n reject(transaction.error);\n };\n\n // let resolved = false;\n const onComplete = (/* what: string */) => {\n clearTimeout(timeout);\n\n if(log) {\n this.log(log + ': end', performance.now() - perf/* , what */);\n }\n\n // if(resolved) {\n // return;\n // }\n\n // resolved = true;\n const results = requests.map((r) => r.result);\n resolve(isArray ? results : results[0]);\n };\n\n transaction.onerror = onError;\n\n // * have to wait while clearing or setting something\n const waitForTransactionComplete = mode === 'readwrite';\n if(waitForTransactionComplete) {\n transaction.oncomplete = () => onComplete(/* 'transaction' */);\n }\n\n const timeout = setTimeout(() => {\n this.log.error('transaction not finished', transaction, log);\n }, 10000);\n\n /* transaction.addEventListener('abort', (e) => {\n //handleError();\n this.log.error('IndexedDB: transaction abort!', transaction.error);\n }); */\n\n const callbackResult = callback(transaction.objectStore(storeName));\n\n const isArray = Array.isArray(callbackResult);\n const requests: IDBRequest[] = isArray ? callbackResult : [].concat(callbackResult) as any;\n\n if(waitForTransactionComplete) {\n return;\n }\n\n const length = requests.length;\n let left = length;\n\n const onRequestFinished = () => {\n if(transaction.error) {\n return;\n }\n\n if(!--left) {\n onComplete(/* 'requests' */);\n }\n };\n\n for(let i = 0; i < length; ++i) {\n const request = requests[i];\n request.onerror = onError;\n request.onsuccess = onRequestFinished;\n }\n });\n });\n }\n\n public getAll(storeName?: StoreName): Promise {\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '', storeName);\n }\n\n /* public getAllKeys(): Promise> {\n console.time('getAllEntries');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.getAllKeys();\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var result = event.target.result;\n resolve(result);\n console.timeEnd('getAllEntries');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public isFileExists(fileName: string): Promise {\n console.time('isFileExists');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.openCursor(fileName);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var cursor = event.target.result;\n resolve(!!cursor);\n console.timeEnd('isFileExists');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public getFileWriter(fileName: string, mimeType: string) {\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\n return this.saveFile(fileName, blob);\n });\n\n return Promise.resolve(fakeWriter);\n } */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type lang from '../lang';\nimport type langSign from '../langSign';\nimport type {State} from '../config/state';\nimport DEBUG, {MOUNT_CLASS_TO} from '../config/debug';\nimport {HelpCountriesList, HelpCountry, LangPackDifference, LangPackString} from '../layer';\nimport stateStorage from './stateStorage';\nimport App from '../config/app';\nimport rootScope from './rootScope';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport deepEqual from '../helpers/object/deepEqual';\nimport safeAssign from '../helpers/object/safeAssign';\nimport capitalizeFirstLetter from '../helpers/string/capitalizeFirstLetter';\nimport matchUrlProtocol from './richTextProcessor/matchUrlProtocol';\nimport wrapUrl from './richTextProcessor/wrapUrl';\nimport {setDirection} from '../helpers/dom/setInnerHTML';\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n 'messageActionChatCreate': 'ActionCreateGroup',\n 'messageActionChatCreateYou': 'ActionYouCreateGroup',\n 'messageActionChatEditTitle': 'ActionChangedTitle',\n 'messageActionChatEditPhoto': 'ActionChangedPhoto',\n 'messageActionChatEditVideo': 'ActionChangedVideo',\n 'messageActionChatDeletePhoto': 'ActionRemovedPhoto',\n 'messageActionChatReturn': 'ActionAddUserSelf',\n 'messageActionChatReturnYou': 'ActionAddUserSelfYou',\n 'messageActionChatJoined': 'ActionAddUserSelfMega',\n 'messageActionChatJoinedYou': 'ChannelMegaJoined',\n 'messageActionChatAddUser': 'ActionAddUser',\n 'messageActionChatAddUsers': 'ActionAddUser',\n 'messageActionChatLeave': 'ActionLeftUser',\n 'messageActionChatLeaveYou': 'YouLeft',\n 'messageActionChatDeleteUser': 'ActionKickUser',\n 'messageActionChatJoinedByLink': 'ActionInviteUser',\n 'messageActionPinMessage': 'Chat.Service.Group.UpdatedPinnedMessage',\n 'messageActionContactSignUp': 'Chat.Service.PeerJoinedTelegram',\n 'messageActionChannelCreate': 'ActionCreateChannel',\n 'messageActionChannelEditTitle': 'Chat.Service.Channel.UpdatedTitle',\n 'messageActionChannelEditPhoto': 'Chat.Service.Channel.UpdatedPhoto',\n 'messageActionChannelEditVideo': 'Chat.Service.Channel.UpdatedVideo',\n 'messageActionChannelDeletePhoto': 'Chat.Service.Channel.RemovedPhoto',\n 'messageActionHistoryClear': 'HistoryCleared',\n 'messageActionDiscussionStarted': 'DiscussionStarted',\n\n 'messageActionChannelMigrateFrom': 'ActionMigrateFromGroup',\n\n 'messageActionPhoneCall.video_in_ok': 'ChatList.Service.VideoCall.incoming',\n 'messageActionPhoneCall.video_out_ok': 'ChatList.Service.VideoCall.outgoing',\n 'messageActionPhoneCall.video_missed': 'ChatList.Service.VideoCall.Missed',\n 'messageActionPhoneCall.video_cancelled': 'ChatList.Service.VideoCall.Cancelled',\n 'messageActionPhoneCall.in_ok': 'ChatList.Service.Call.incoming',\n 'messageActionPhoneCall.out_ok': 'ChatList.Service.Call.outgoing',\n 'messageActionPhoneCall.missed': 'ChatList.Service.Call.Missed',\n 'messageActionPhoneCall.cancelled': 'ChatList.Service.Call.Cancelled',\n\n 'messageActionGroupCall.started': 'Chat.Service.VoiceChatStarted.Channel',\n 'messageActionGroupCall.started_by': 'Chat.Service.VoiceChatStarted',\n 'messageActionGroupCall.started_byYou': 'Chat.Service.VoiceChatStartedYou',\n 'messageActionGroupCall.ended': 'Chat.Service.VoiceChatFinished.Channel',\n 'messageActionGroupCall.ended_by': 'Chat.Service.VoiceChatFinished',\n 'messageActionGroupCall.ended_byYou': 'Chat.Service.VoiceChatFinishedYou',\n\n 'messageActionBotAllowed': 'Chat.Service.BotPermissionAllowed'\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nexport type FormatterArgument = string | number | Node | FormatterArgument[];\nexport type FormatterArguments = FormatterArgument[];\n\nexport const UNSUPPORTED_LANG_PACK_KEY: LangPackKey = IS_MOBILE ? 'Message.Unsupported.Mobile' : 'Message.Unsupported.Desktop';\n\nnamespace I18n {\n export const strings: Map = new Map();\n export const countriesList: HelpCountry[] = [];\n let pluralRules: Intl.PluralRules;\n\n let cacheLangPackPromise: Promise;\n export let lastRequestedLangCode: string;\n export let lastRequestedNormalizedLangCode: string;\n export let lastAppliedLangCode: string;\n export let requestedServerLanguage = false;\n export let timeFormat: State['settings']['timeFormat'];\n export let isRTL = false;\n\n export function setRTL(rtl: boolean) {\n isRTL = rtl;\n }\n\n function setLangCode(langCode: string) {\n lastRequestedLangCode = langCode;\n lastRequestedNormalizedLangCode = langCode.split('-')[0];\n }\n\n export function getCacheLangPack(): Promise {\n if(cacheLangPackPromise) return cacheLangPackPromise;\n return cacheLangPackPromise = Promise.all([\n stateStorage.get('langPack') as Promise,\n polyfillPromise\n ]).then(([langPack]) => {\n if(!langPack/* || true */) {\n return loadLocalLangPack();\n } else if(DEBUG && false) {\n return getLangPack(langPack.lang_code);\n }/* else if(langPack.appVersion !== App.langPackVersion) {\n return getLangPack(langPack.lang_code);\n } */\n\n if(!lastRequestedLangCode) {\n setLangCode(langPack.lang_code);\n }\n\n applyLangPack(langPack);\n return langPack;\n }).finally(() => {\n cacheLangPackPromise = undefined;\n });\n }\n\n function updateAmPm() {\n if(timeFormat === 'h12') {\n try {\n const dateTimeFormat = getDateTimeFormat({hour: 'numeric', minute: 'numeric', hour12: true});\n const date = new Date();\n date.setHours(0);\n const amText = dateTimeFormat.format(date);\n amPmCache.am = amText.split(/\\s/)[1];\n date.setHours(12);\n const pmText = dateTimeFormat.format(date);\n amPmCache.pm = pmText.split(/\\s/)[1];\n } catch(err) {\n console.error('cannot get am/pm', err);\n amPmCache = {am: 'AM', pm: 'PM'};\n }\n }\n }\n\n export function setTimeFormat(\n format: State['settings']['timeFormat'],\n haveToUpdate = !!timeFormat && timeFormat !== format\n ) {\n timeFormat = format;\n\n updateAmPm();\n\n if(haveToUpdate) {\n cachedDateTimeFormats.clear();\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance instanceof IntlDateElement) {\n instance.update();\n }\n });\n }\n }\n\n export function loadLocalLangPack() {\n const defaultCode = App.langPackCode;\n setLangCode(defaultCode);\n return Promise.all([\n import('../lang'),\n import('../langSign'),\n import('../countries')\n ]).then(([lang, langSign, countries]) => {\n const strings: LangPackString[] = [];\n formatLocalStrings(lang.default, strings);\n formatLocalStrings(langSign.default, strings);\n\n const langPack: LangPackDifference = {\n _: 'langPackDifference',\n from_version: 0,\n lang_code: defaultCode,\n strings,\n version: 0,\n local: true,\n countries: countries.default\n };\n return saveLangPack(langPack);\n });\n }\n\n export function loadLangPack(langCode: string, web?: boolean) {\n web = true;\n requestedServerLanguage = true;\n const managers = rootScope.managers;\n return Promise.all([\n managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: web ? 'web' : App.langPack\n }),\n !web && managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: 'android'\n }),\n import('../lang'),\n import('../langSign'),\n managers.apiManager.invokeApiCacheable('help.getCountriesList', {\n lang_code: langCode,\n hash: 0\n }) as Promise,\n polyfillPromise\n ]);\n }\n\n export function getStrings(langCode: string, strings: string[]) {\n return rootScope.managers.apiManager.invokeApi('langpack.getStrings', {\n lang_pack: App.langPack,\n lang_code: langCode,\n keys: strings\n });\n }\n\n export function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n for(const i in strings) {\n // @ts-ignore\n const v = strings[i];\n if(typeof(v) === 'string') {\n pushTo.push({\n _: 'langPackString',\n key: i,\n value: v\n });\n } else {\n pushTo.push({\n _: 'langPackStringPluralized',\n key: i,\n ...v\n });\n }\n }\n\n return pushTo;\n }\n\n export function getLangPack(langCode: string, web?: boolean) {\n setLangCode(langCode);\n return loadLangPack(langCode, web).then(([langPack1, langPack2, localLangPack1, localLangPack2, countries, _]) => {\n let strings: LangPackString[] = [];\n\n [localLangPack1, localLangPack2].forEach((l) => {\n formatLocalStrings(l.default as any, strings);\n });\n\n strings = strings.concat(...[langPack1.strings, langPack2.strings].filter(Boolean));\n\n langPack1.strings = strings;\n langPack1.countries = countries;\n return saveLangPack(langPack1);\n });\n }\n\n export function saveLangPack(langPack: LangPackDifference) {\n langPack.appVersion = App.langPackVersion;\n\n return stateStorage.set({langPack}).then(() => {\n applyLangPack(langPack);\n return langPack;\n });\n }\n\n export const polyfillPromise = (function checkIfPolyfillNeeded() {\n if(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n return Promise.resolve();\n } else {\n return import('./pluralPolyfill').then((_Intl) => {\n (window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n });\n }\n })();\n\n export function applyLangPack(langPack: LangPackDifference) {\n const currentLangCode = lastRequestedLangCode;\n if(langPack.lang_code !== currentLangCode) {\n return;\n }\n\n try {\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode.split('-', 1)[0]);\n }\n\n try {\n pluralRules = new Intl.PluralRules(langPack.lang_code);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(langPack.lang_code.split('-', 1)[0]);\n }\n\n strings.clear();\n\n for(const string of langPack.strings) {\n strings.set(string.key as LangPackKey, string);\n }\n\n if(langPack.countries) {\n countriesList.length = 0;\n countriesList.push(...langPack.countries.countries);\n\n langPack.countries.countries.forEach((country) => {\n if(country.name) {\n const langPackKey: any = country.default_name;\n strings.set(langPackKey, {\n _: 'langPackString',\n key: langPackKey,\n value: country.name\n });\n }\n });\n }\n\n if(lastAppliedLangCode !== currentLangCode) {\n rootScope.dispatchEvent('language_change', currentLangCode);\n lastAppliedLangCode = currentLangCode;\n cachedDateTimeFormats.clear();\n updateAmPm();\n }\n\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance) {\n instance.update();\n }\n });\n }\n\n function pushNextArgument(out: ReturnType, args: FormatterArguments, indexHolder: {i: number}) {\n const arg = args[indexHolder.i++];\n if(Array.isArray(arg)) {\n out.push(...arg as any);\n } else {\n out.push(arg);\n }\n }\n\n export function superFormatter(input: string, args?: FormatterArguments, indexHolder = {i: 0}): Exclude[] {\n const out: ReturnType = [];\n const regExp = /(\\*\\*|__)(.+?)\\1|(\\n)|(\\[.+?\\]\\(.*?\\))|un\\d|%\\d\\$.|%./g;\n\n let lastIndex = 0;\n input.replace(regExp, (match, p1: any, p2: any, p3: any, p4: string, offset: number, string: string) => {\n // console.table({match, p1, p2, offset, string});\n\n out.push(string.slice(lastIndex, offset));\n\n if(p1) {\n // offset += p1.length;\n let element: HTMLElement;\n switch(p1) {\n case '**': {\n element = document.createElement('b');\n break;\n }\n\n case '__': {\n element = document.createElement('i');\n break;\n }\n }\n\n element.append(...superFormatter(p2, args, indexHolder) as any);\n out.push(element);\n } else if(p3) {\n out.push(document.createElement('br'));\n } else if(p4) {\n const idx = p4.lastIndexOf(']');\n const text = p4.slice(1, idx);\n\n const url = p4.slice(idx + 2, p4.length - 1);\n let a: HTMLAnchorElement;\n if(url && matchUrlProtocol(url)) {\n a = document.createElement('a');\n const wrappedUrl = wrapUrl(url);\n a.href = wrappedUrl.url;\n if(wrappedUrl.onclick) a.setAttribute('onclick', wrappedUrl.onclick);\n a.target = '_blank';\n } else {\n a = args[indexHolder.i++] as HTMLAnchorElement;\n\n if(a instanceof DocumentFragment) { // right after wrapRichText\n a = a.firstChild as any;\n }\n\n a.textContent = ''; // reset content\n }\n\n a.append(...superFormatter(text, args, indexHolder) as any);\n\n out.push(a);\n } else if(args) {\n pushNextArgument(out, args, indexHolder);\n }\n\n lastIndex = offset + match.length;\n return '';\n });\n\n if(lastIndex !== input.length) {\n out.push(input.slice(lastIndex));\n }\n\n return out;\n }\n\n export function format(key: LangPackKey, plain: true, args?: FormatterArguments): string;\n export function format(key: LangPackKey, plain?: false, args?: FormatterArguments): ReturnType;\n export function format(key: LangPackKey, plain = false, args?: FormatterArguments): ReturnType | string {\n const str = strings.get(key);\n let input: string;\n if(str) {\n if(str._ === 'langPackStringPluralized' && args?.length) {\n let v = args[0] as number | string;\n if(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n const s = pluralRules.select(v);\n // @ts-ignore\n input = str[s + '_value'] || str['other_value'];\n } else if(str._ === 'langPackString') {\n input = str.value;\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n\n const result = superFormatter(input, args);\n if(plain) { // * let's try a hack now... (don't want to replace []() entity)\n return result.map((item) => item instanceof Node ? item.textContent : item).join('');\n } else {\n return result;\n }\n\n /* if(plain) {\n if(args?.length) {\n const regExp = /un\\d|%\\d\\$.|%./g;\n let i = 0;\n input = input.replace(regExp, (match, offset, string) => {\n return '' + args[i++];\n });\n }\n\n return input;\n } else {\n return superFormatter(input, args);\n } */\n }\n\n export const weakMap: WeakMap> = new WeakMap();\n\n export type IntlElementBaseOptions = {\n element?: HTMLElement,\n property?: 'innerText' | 'innerHTML' | 'placeholder' | 'textContent',\n };\n\n abstract class IntlElementBase {\n public element: IntlElementBaseOptions['element'];\n public property: IntlElementBaseOptions['property'];\n\n constructor(options?: Options) {\n this.element = options?.element || document.createElement('span');\n this.element.classList.add('i18n');\n\n this.property = options?.property;\n if(options && ((options as any as IntlElementOptions).key || (options as any as IntlDateElementOptions).date)) {\n this.update(options);\n }\n\n weakMap.set(this.element, this);\n }\n\n abstract update(options?: Options): void;\n }\n\n export type IntlElementOptions = IntlElementBaseOptions & {\n key?: LangPackKey,\n args?: FormatterArguments\n };\n export class IntlElement extends IntlElementBase {\n public key: IntlElementOptions['key'];\n public args: IntlElementOptions['args'];\n\n constructor(options: IntlElementOptions = {}) {\n super({...options, property: options.property ?? 'innerHTML'});\n }\n\n public update(options?: IntlElementOptions) {\n safeAssign(this, options);\n\n if(this.property === 'innerHTML') {\n this.element.textContent = '';\n this.element.append(...format(this.key, false, this.args) as any);\n } else {\n // @ts-ignore\n const v = this.element[this.property];\n const formatted = format(this.key, true, this.args);\n\n // * hasOwnProperty won't work here\n if(v === undefined) this.element.dataset[this.property] = formatted;\n else (this.element as HTMLInputElement)[this.property] = formatted;\n }\n }\n\n public compareAndUpdate(options?: IntlElementOptions) {\n if(this.key === options.key && deepEqual(this.args, options.args)) {\n return;\n }\n\n return this.update(options);\n }\n }\n\n const cachedDateTimeFormats: Map = new Map();\n function getDateTimeFormat(options: Intl.DateTimeFormatOptions = {}) {\n const json = JSON.stringify(options);\n let dateTimeFormat = cachedDateTimeFormats.get(json);\n if(!dateTimeFormat) {\n dateTimeFormat = new Intl.DateTimeFormat(lastRequestedNormalizedLangCode + '-u-hc-' + timeFormat, options);\n cachedDateTimeFormats.set(json, dateTimeFormat);\n }\n\n return dateTimeFormat;\n }\n\n export let amPmCache = {am: 'AM', pm: 'PM'};\n export type IntlDateElementOptions = IntlElementBaseOptions & {\n date?: Date,\n options: Intl.DateTimeFormatOptions\n };\n export class IntlDateElement extends IntlElementBase {\n public date: IntlDateElementOptions['date'];\n public options: IntlDateElementOptions['options'];\n\n constructor(options: IntlDateElementOptions) {\n super({...options, property: options.property ?? 'textContent'});\n setDirection(this.element);\n }\n\n public update(options?: IntlDateElementOptions) {\n safeAssign(this, options);\n\n let text: string;\n if(this.options.hour && this.options.minute && Object.keys(this.options).length === 2/* && false */) {\n const hours = this.date.getHours();\n text = ('0' + (timeFormat === 'h12' ? (hours % 12) || 12 : hours)).slice(-2) + ':' + ('0' + this.date.getMinutes()).slice(-2);\n // if(this.options.second) {\n // text += ':' + ('0' + this.date.getSeconds()).slice(-2);\n // }\n\n if(timeFormat === 'h12') {\n text += ' ' + (hours < 12 ? amPmCache.am : amPmCache.pm);\n }\n } else {\n // * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n const dateTimeFormat = getDateTimeFormat(this.options);\n text = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n }\n\n (this.element as any)[this.property] = text;\n }\n }\n\n export function i18n(key: LangPackKey, args?: FormatterArguments) {\n return new IntlElement({key, args}).element;\n }\n\n export function i18n_(options: IntlElementOptions) {\n return new IntlElement(options).element;\n }\n\n export function _i18n(element: HTMLElement, key: LangPackKey, args?: FormatterArguments, property?: IntlElementOptions['property']) {\n return new IntlElement({element, key, args, property}).element;\n }\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function joinElementsWith(elements: (Node | string)[], joiner: typeof elements[0] | ((isLast: boolean) => typeof elements[0])) {\n const arr = elements.slice(0, 1);\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n arr.push(typeof(joiner) === 'function' ? joiner(isLast) : joiner);\n arr.push(elements[i]);\n }\n\n return arr;\n}\n\n\nexport function join(elements: (Node | string)[], useLast: boolean, plain: true): string;\nexport function join(elements: (Node | string)[], useLast?: boolean, plain?: false): (string | Node)[];\nexport function join(elements: (Node | string)[], useLast: boolean, plain: boolean): string | (string | Node)[];\nexport function join(elements: (Node | string)[], useLast = true, plain?: boolean): string | (string | Node)[] {\n const joined = joinElementsWith(elements, (isLast) => {\n const langPackKey: LangPackKey = isLast && useLast ? 'AutoDownloadSettings.LastDelimeter' : 'AutoDownloadSettings.Delimeter';\n return plain ? I18n.format(langPackKey, true) : i18n(langPackKey);\n });\n\n return plain ? joined.join('') : joined;\n}\n\nMOUNT_CLASS_TO.I18n = I18n;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../storages/filters';\n\n/**\n * Legacy Webogram's format, don't change dcID to camelCase. date is timestamp\n */\nexport type UserAuth = {dcID: number | string, date: number, id: PeerId};\nexport type REAL_FOLDER_ID = 0 | 1;\n\nexport const NULL_PEER_ID: PeerId = 0;\nexport const REPLIES_PEER_ID: PeerId = 1271266957;\nexport const REPLIES_HIDDEN_CHANNEL_ID: ChatId = 777;\nexport const SERVICE_PEER_ID: PeerId = 777000;\nexport const MUTE_UNTIL = 0x7FFFFFFF;\nexport const BOT_START_PARAM = '';\nexport const MAX_FILE_SAVE_SIZE = 20 * 1024 * 1024;\nexport const THUMB_TYPE_FULL = '';\nexport const TOPIC_COLORS = [0x6FB9F0, 0xFFD67E, 0xCB86DB, 0x8EEE98, 0xFF93B2, 0xFB6F5F];\nexport const ATTACH_MENU_BOT_ICON_NAME = 'default_static';\nexport const GENERAL_TOPIC_ID = 4295032831;\nexport const T_ME_PREFIXES = new Set(['web', 'k', 'z']);\n\nexport const FOLDER_ID_ALL: REAL_FOLDER_ID = 0;\nexport const FOLDER_ID_ARCHIVE: REAL_FOLDER_ID = 1;\nexport const REAL_FOLDERS: Set = new Set([FOLDER_ID_ALL, FOLDER_ID_ARCHIVE]);\nexport const START_LOCAL_ID = Math.max(...Array.from(REAL_FOLDERS)) + 1 as MyDialogFilter['localId'];\n","import IS_CALL_SUPPORTED from './callSupport';\nimport CAN_USE_TRANSFERABLES from './canUseTransferables';\nimport IS_CANVAS_FILTER_SUPPORTED from './canvasFilterSupport';\nimport IS_EMOJI_SUPPORTED from './emojiSupport';\nimport IS_GEOLOCATION_SUPPORTED from './geolocationSupport';\nimport IS_GROUP_CALL_SUPPORTED from './groupCallSupport';\nimport IMAGE_MIME_TYPES_SUPPORTED from './imageMimeTypesSupport';\nimport MEDIA_MIME_TYPES_SUPPORTED from './mediaMimeTypesSupport';\nimport IS_MOV_SUPPORTED from './movSupport';\nimport IS_PARALLAX_SUPPORTED from './parallaxSupport';\nimport IS_SCREEN_SHARING_SUPPORTED from './screenSharingSupport';\nimport IS_TOUCH_SUPPORTED from './touchSupport';\nimport IS_VIBRATE_SUPPORTED from './vibrateSupport';\nimport VIDEO_MIME_TYPES_SUPPORTED from './videoMimeTypesSupport';\nimport IS_WEBM_SUPPORTED from './webmSupport';\nimport IS_WEBP_SUPPORTED from './webpSupport';\nimport IS_WEBRTC_SUPPORTED from './webrtcSupport';\nimport * as userAgent from './userAgent';\nimport IS_OPUS_SUPPORTED from './opusSupport';\nimport IS_SHARED_WORKER_SUPPORTED from './sharedWorkerSupport';\nimport IS_APPLE_MX from './appleMx';\n\nconst ENVIRONMENT = {\n CAN_USE_TRANSFERABLES,\n IS_APPLE_MX,\n IS_CALL_SUPPORTED,\n IS_CANVAS_FILTER_SUPPORTED,\n IS_EMOJI_SUPPORTED,\n IS_GEOLOCATION_SUPPORTED,\n IS_GROUP_CALL_SUPPORTED,\n IS_MOV_SUPPORTED,\n IS_PARALLAX_SUPPORTED,\n IS_SCREEN_SHARING_SUPPORTED,\n IS_TOUCH_SUPPORTED,\n IS_VIBRATE_SUPPORTED,\n IS_OPUS_SUPPORTED,\n IS_SHARED_WORKER_SUPPORTED,\n IS_WEBM_SUPPORTED,\n IS_WEBP_SUPPORTED,\n IS_WEBRTC_SUPPORTED,\n IMAGE_MIME_TYPES_SUPPORTED,\n MEDIA_MIME_TYPES_SUPPORTED,\n VIDEO_MIME_TYPES_SUPPORTED,\n ...userAgent\n};\n\nexport default ENVIRONMENT;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../../../../config/app';\nimport DEBUG from '../../../../config/debug';\nimport {AutoDownloadPeerTypeSettings, State, STATE_INIT, Background, AppTheme} from '../../../../config/state';\nimport compareVersion from '../../../../helpers/compareVersion';\nimport copy from '../../../../helpers/object/copy';\nimport validateInitObject from '../../../../helpers/object/validateInitObject';\nimport {UserAuth} from '../../../mtproto/mtproto_config';\nimport rootScope from '../../../rootScope';\nimport stateStorage from '../../../stateStorage';\nimport sessionStorage from '../../../sessionStorage';\nimport {recordPromiseBound} from '../../../../helpers/recordPromise';\n// import RESET_STORAGES_PROMISE from \"../storages/resetStoragesPromise\";\nimport {StoragesResults} from '../storages/loadStorages';\nimport {logger} from '../../../logger';\nimport {WallPaper} from '../../../../layer';\n\nconst REFRESH_EVERY = 24 * 60 * 60 * 1000; // 1 day\n// const REFRESH_EVERY = 1e3;\n// const REFRESH_EVERY_WEEK = 24 * 60 * 60 * 1000 * 7; // 7 days\n\nconst STATE_VERSION = STATE_INIT.version;\nconst BUILD = STATE_INIT.build;\n\nconst ALL_KEYS = Object.keys(STATE_INIT) as any as Array;\n\nconst REFRESH_KEYS: Array = [\n 'contactsListCachedTime',\n 'stateCreatedTime',\n 'maxSeenMsgId',\n 'filtersArr'\n];\n\n// const REFRESH_KEYS_WEEK = ['dialogs', 'allDialogsLoaded', 'updates', 'pinnedOrders'] as any as Array;\n\nasync function loadStateInner() {\n const log = logger('STATE-LOADER');\n\n const totalPerf = performance.now();\n const recordPromise = recordPromiseBound(log);\n\n const promises = ALL_KEYS.map((key) => recordPromise(stateStorage.get(key), 'state ' + key))\n .concat(\n recordPromise(sessionStorage.get('user_auth'), 'auth'),\n recordPromise(sessionStorage.get('state_id'), 'auth'),\n recordPromise(sessionStorage.get('k_build'), 'auth')\n )\n .concat(recordPromise(stateStorage.get('user_auth'), 'old auth')); // support old webk format\n\n const arr = await Promise.all(promises);\n log.warn('promises', performance.now() - totalPerf);\n // await new Promise((resolve) => setTimeout(resolve, 3e3));\n /* const self = this;\n const skipHandleKeys = new Set(['isProxy', 'filters', 'drafts']);\n const getHandler = (path?: string) => {\n return {\n get(target: any, key: any) {\n if(key === 'isProxy') {\n return true;\n }\n\n const prop = target[key];\n\n if(prop !== undefined && !skipHandleKeys.has(key) && !prop.isProxy && typeof(prop) === 'object') {\n target[key] = new Proxy(prop, getHandler(path || key));\n return target[key];\n }\n\n return prop;\n },\n set(target: any, key: any, value: any) {\n console.log('Setting', target, `.${key} to equal`, value, path);\n\n target[key] = value;\n\n // @ts-ignore\n self.pushToState(path || key, path ? self.state[path] : value, false);\n\n return true;\n }\n };\n }; */\n\n // const pushed: {key: keyof State, value: State[keyof State]}[] = [];\n const pushedKeys: (keyof State)[] = [];\n const pushToState = (key: T, value: State[T]) => {\n // appStateManager.pushToState(key, value);\n state[key] = value;\n // pushed.push({key, value});\n pushedKeys.push(key);\n };\n\n const replaceState = (_state: State) => {\n // pushed.length = 0;\n pushedKeys.length = 0;\n state = _state;\n pushedKeys.push(...Object.keys(state) as any as typeof pushedKeys);\n // state = appStateManager.setState(_state);\n // appStateManager.storage.set(state);\n };\n\n // let state: State = appStateManager.setState({} as any);\n let state: State = {} as any;\n\n // ! then can't store false values\n for(let i = 0, length = ALL_KEYS.length; i < length; ++i) {\n const key = ALL_KEYS[i];\n const value = arr[i];\n if(value !== undefined) {\n // @ts-ignore\n state[key] = value;\n } else {\n pushToState(key, copy(STATE_INIT[key]));\n }\n }\n\n arr.splice(0, ALL_KEYS.length);\n\n // * Read auth\n let auth = arr.shift() as UserAuth | number;\n const stateId = arr.shift() as number;\n const sessionBuild = arr.shift() as number;\n const shiftedWebKAuth = arr.shift() as UserAuth | number;\n if(!auth && shiftedWebKAuth) { // support old webk auth\n auth = shiftedWebKAuth;\n const keys: string[] = ['dc', 'server_time_offset', 'xt_instance'];\n for(let i = 1; i <= 5; ++i) {\n keys.push(`dc${i}_server_salt`);\n keys.push(`dc${i}_auth_key`);\n }\n\n const values = await Promise.all(keys.map((key) => stateStorage.get(key as any)));\n keys.push('user_auth');\n values.push(typeof(auth) === 'number' || typeof(auth) === 'string' ? {dcID: values[0] || App.baseDcId, date: Date.now() / 1000 | 0, id: auth.toPeerId(false)} as UserAuth : auth);\n\n const obj: any = {};\n keys.forEach((key, idx) => {\n obj[key] = values[idx];\n });\n\n await sessionStorage.set(obj);\n }\n\n /* if(!auth) { // try to read Webogram's session from localStorage\n try {\n const keys = Object.keys(localStorage);\n for(let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n let value: any;\n try {\n value = localStorage.getItem(key);\n value = JSON.parse(value);\n } catch(err) {\n //console.error(err);\n }\n\n sessionStorage.set({\n [key as any]: value\n });\n }\n\n auth = sessionStorage.getFromCache('user_auth');\n } catch(err) {\n this.log.error('localStorage import error', err);\n }\n } */\n\n if(auth) {\n // ! Warning ! DON'T delete this\n state.authState = {_: 'authStateSignedIn'};\n rootScope.dispatchEvent('user_auth', typeof(auth) === 'number' || typeof(auth) === 'string' ?\n {dcID: 0, date: Date.now() / 1000 | 0, id: auth.toPeerId(false)} :\n auth); // * support old version\n }\n\n const resetStorages: Set = new Set();\n if(state.stateId !== stateId) {\n if(stateId !== undefined) {\n const preserve: Map = new Map([\n ['authState', undefined],\n ['stateId', undefined]\n ]);\n\n preserve.forEach((_, key) => {\n preserve.set(key, copy(state[key]));\n });\n\n state = copy(STATE_INIT);\n\n preserve.forEach((value, key) => {\n // @ts-ignore\n state[key] = value;\n });\n\n const r: {[k in keyof StoragesResults]: number} = {\n chats: 1,\n dialogs: 1,\n users: 1\n };\n for(const key in r) {\n resetStorages.add(key as keyof StoragesResults);\n // this.storagesResults[key as keyof AppStateManager['storagesResults']].length = 0;\n }\n\n replaceState(state);\n }\n\n await sessionStorage.set({\n state_id: state.stateId\n });\n }\n\n const time = Date.now();\n if((state.stateCreatedTime + REFRESH_EVERY) < time) {\n if(DEBUG) {\n log('will refresh state', state.stateCreatedTime, time);\n }\n\n const r = (keys: typeof REFRESH_KEYS) => {\n keys.forEach((key) => {\n pushToState(key, copy(STATE_INIT[key]));\n\n // const s = appStateManager.storagesResults[key as keyof AppStateManager['storagesResults']];\n // if(s?.length) {\n // appStateManager.resetStorages.add(key as keyof AppStateManager['storagesResults']);\n // s.length = 0;\n // }\n });\n };\n\n r(REFRESH_KEYS);\n\n /* if((state.stateCreatedTime + REFRESH_EVERY_WEEK) < time) {\n if(DEBUG) {\n this.log('will refresh updates');\n }\n\n r(REFRESH_KEYS_WEEK);\n } */\n }\n\n // state = this.state = new Proxy(state, getHandler());\n\n // * migrate auto download settings\n const autoDownloadSettings = state.settings.autoDownload;\n if(autoDownloadSettings?.private !== undefined) {\n const oldTypes = [\n 'contacts' as const,\n 'private' as const,\n 'groups' as const,\n 'channels' as const\n ];\n\n const mediaTypes = [\n 'photo' as const,\n 'video' as const,\n 'file' as const\n ];\n\n mediaTypes.forEach((mediaType) => {\n const peerTypeSettings: AutoDownloadPeerTypeSettings = autoDownloadSettings[mediaType] = {} as any;\n oldTypes.forEach((peerType) => {\n peerTypeSettings[peerType] = autoDownloadSettings[peerType];\n });\n });\n\n oldTypes.forEach((peerType) => {\n delete autoDownloadSettings[peerType];\n });\n\n pushToState('settings', state.settings);\n }\n\n const SKIP_VALIDATING_PATHS: Set = new Set([\n 'settings.themes'\n ]);\n validateInitObject(STATE_INIT, state, (missingKey) => {\n pushToState(missingKey as keyof State, state[missingKey as keyof State]);\n }, undefined, SKIP_VALIDATING_PATHS);\n\n let newVersion: string, oldVersion: string;\n if(state.version !== STATE_VERSION || state.build !== BUILD/* || true */) {\n // reset filters and dialogs if version is older\n if(/* compareVersion(state.version, '0.8.7') === -1 || state.build < 179 || */state.build < 217) {\n state.allDialogsLoaded = copy(STATE_INIT.allDialogsLoaded);\n state.pinnedOrders = copy(STATE_INIT.pinnedOrders);\n state.filtersArr = copy(STATE_INIT.filtersArr);\n\n resetStorages.add('dialogs');\n }\n\n if(compareVersion(state.version, '1.7.1') === -1) {\n let migrated = false;\n // * migrate backgrounds (March 13, 2022; to version 1.3.0)\n if(compareVersion(state.version, '1.3.0') === -1) {\n migrated = true;\n state.settings.theme = copy(STATE_INIT.settings.theme);\n state.settings.themes = copy(STATE_INIT.settings.themes);\n } else if(compareVersion(state.version, '1.7.1') === -1) { // * migrate backgrounds (January 25th, 2023; to version 1.7.1)\n migrated = true;\n const oldThemes = state.settings.themes as any as Array<{\n name: AppTheme['name'],\n background: Background\n }>;\n\n state.settings.themes = copy(STATE_INIT.settings.themes);\n\n try {\n oldThemes.forEach((oldTheme) => {\n const oldBackground = oldTheme.background;\n if(!oldBackground) {\n return;\n }\n\n const newTheme = state.settings.themes.find((t) => t.name === oldTheme.name);\n newTheme.settings.highlightningColor = oldBackground.highlightningColor;\n\n const getColorFromHex = (hex: string) => hex && parseInt(hex.slice(1), 16);\n\n const colors = (oldBackground.color || '').split(',').map(getColorFromHex);\n\n if(oldBackground.color && !oldBackground.slug) {\n newTheme.settings.wallpaper = {\n _: 'wallPaperNoFile',\n id: 0,\n pFlags: {},\n settings: {\n _: 'wallPaperSettings',\n pFlags: {}\n }\n };\n } else {\n const wallPaper: WallPaper.wallPaper = {\n _: 'wallPaper',\n id: 0,\n access_hash: 0,\n slug: oldBackground.slug,\n document: {} as any,\n pFlags: {},\n settings: {\n _: 'wallPaperSettings',\n pFlags: {}\n }\n };\n\n const wallPaperSettings = wallPaper.settings;\n newTheme.settings.wallpaper = wallPaper;\n if(oldBackground.slug && !oldBackground.color) {\n wallPaperSettings.pFlags.blur = oldBackground.blur || undefined;\n } else if(oldBackground.intensity) {\n wallPaperSettings.intensity = oldBackground.intensity;\n wallPaper.pFlags.pattern = true;\n wallPaper.pFlags.dark = oldBackground.intensity < 0 || undefined;\n }\n }\n\n if(colors.length) {\n const wallPaperSettings = newTheme.settings.wallpaper.settings;\n wallPaperSettings.background_color = colors[0];\n wallPaperSettings.second_background_color = colors[1];\n wallPaperSettings.third_background_color = colors[2];\n wallPaperSettings.fourth_background_color = colors[3];\n }\n });\n } catch(err) {\n console.error('migrating themes error', err);\n }\n }\n\n if(migrated) {\n pushToState('settings', state.settings);\n }\n }\n\n if(compareVersion(state.version, STATE_VERSION) !== 0) {\n newVersion = STATE_VERSION;\n oldVersion = state.version;\n }\n\n pushToState('version', STATE_VERSION);\n pushToState('build', BUILD);\n }\n\n if(sessionBuild !== BUILD && (!sessionBuild || sessionBuild < BUILD)) {\n sessionStorage.set({k_build: BUILD});\n }\n\n // ! probably there is better place for it\n rootScope.settings = state.settings;\n\n if(DEBUG) {\n log('state res', state, copy(state));\n }\n\n // return resolve();\n\n log.warn('total', performance.now() - totalPerf);\n\n // RESET_STORAGES_PROMISE.resolve(appStateManager.resetStorages);\n\n return {state, resetStorages, newVersion, oldVersion, pushedKeys};\n}\n\nlet promise: ReturnType;\nexport default function loadState() {\n return promise ??= loadStateInner();\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Awaited} from '../../types';\nimport type {CacheStorageDbName} from '../files/cacheStorage';\nimport type {State} from '../../config/state';\nimport type {Message, MessagePeerReaction, PeerNotifySettings} from '../../layer';\nimport {CryptoMethods} from '../crypto/crypto_methods';\nimport rootScope from '../rootScope';\nimport webpWorkerController from '../webp/webpWorkerController';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport sessionStorage from '../sessionStorage';\nimport webPushApiManager from './webPushApiManager';\nimport appRuntimeManager from '../appManagers/appRuntimeManager';\nimport telegramMeWebManager from './telegramMeWebManager';\nimport pause from '../../helpers/schedulers/pause';\nimport ENVIRONMENT from '../../environment';\nimport loadState from '../appManagers/utils/state/loadState';\nimport opusDecodeController from '../opusDecodeController';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport SuperMessagePort from './superMessagePort';\nimport IS_SHARED_WORKER_SUPPORTED from '../../environment/sharedWorkerSupport';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport idleController from '../../helpers/idleController';\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport App from '../../config/app';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\n\nexport type Mirrors = {\n state: State\n};\n\nexport type MirrorTaskPayload = {\n name: T,\n key?: K,\n value: any\n};\n\nexport type NotificationBuildTaskPayload = {\n message: Message.message | Message.messageService,\n fwdCount?: number,\n peerReaction?: MessagePeerReaction,\n peerTypeNotifySettings?: PeerNotifySettings\n};\n\nexport type TabState = {\n chatPeerIds: PeerId[],\n idleStartTime: number,\n};\n\nclass ApiManagerProxy extends MTProtoMessagePort {\n // private worker: /* Window */Worker;\n // private sockets: Map = new Map();\n private mirrors: Mirrors;\n\n public newVersion: string;\n public oldVersion: string;\n\n private tabState: TabState;\n\n public share: ShareData;\n\n public serviceMessagePort: ServiceMessagePort;\n private lastServiceWorker: ServiceWorker;\n\n private pingServiceWorkerPromise: CancellablePromise;\n\n constructor() {\n super();\n\n this.mirrors = {} as any;\n this.tabState = {\n chatPeerIds: [],\n idleStartTime: 0\n };\n\n this.log('constructor');\n\n \n this.registerWorker();\n \n\n this.registerServiceWorker();\n this.registerCryptoWorker();\n\n // const perf = performance.now();\n this.addMultipleEventsListeners({\n convertWebp: ({fileName, bytes}) => {\n return webpWorkerController.convert(fileName, bytes);\n },\n\n convertOpus: ({fileName, bytes}) => {\n return opusDecodeController.pushDecodeTask(bytes, false).then((result) => result.bytes);\n },\n\n event: ({name, args}) => {\n // @ts-ignore\n rootScope.dispatchEventSingle(name, ...args);\n },\n\n localStorageProxy: (payload) => {\n const storageTask = payload;\n return (sessionStorage[storageTask.type] as any)(...storageTask.args);\n },\n\n mirror: this.onMirrorTask\n\n // hello: () => {\n // this.log.error('time hello', performance.now() - perf);\n // }\n });\n\n // this.addTaskListener('socketProxy', (task) => {\n // const socketTask = task.payload;\n // const id = socketTask.id;\n // //console.log('socketProxy', socketTask, id);\n\n // if(socketTask.type === 'send') {\n // const socket = this.sockets.get(id);\n // socket.send(socketTask.payload);\n // } else if(socketTask.type === 'close') { // will remove from map in onClose\n // const socket = this.sockets.get(id);\n // socket.close();\n // } else if(socketTask.type === 'setup') {\n // const socket = new Socket(socketTask.payload.dcId, socketTask.payload.url, socketTask.payload.logSuffix);\n\n // const onOpen = () => {\n // //console.log('socketProxy onOpen');\n // this.postMessage({\n // type: 'socketProxy',\n // payload: {\n // type: 'open',\n // id\n // }\n // });\n // };\n // const onClose = () => {\n // this.postMessage({\n // type: 'socketProxy',\n // payload: {\n // type: 'close',\n // id\n // }\n // });\n\n // socket.removeEventListener('open', onOpen);\n // socket.removeEventListener('close', onClose);\n // socket.removeEventListener('message', onMessage);\n // this.sockets.delete(id);\n // };\n // const onMessage = (buffer: ArrayBuffer) => {\n // this.postMessage({\n // type: 'socketProxy',\n // payload: {\n // type: 'message',\n // id,\n // payload: buffer\n // }\n // });\n // };\n\n // socket.addEventListener('open', onOpen);\n // socket.addEventListener('close', onClose);\n // socket.addEventListener('message', onMessage);\n // this.sockets.set(id, socket);\n // }\n // });\n\n rootScope.addEventListener('language_change', (language) => {\n rootScope.managers.networkerFactory.setLanguage(language);\n });\n\n window.addEventListener('online', () => {\n rootScope.managers.networkerFactory.forceReconnectTimeout();\n });\n\n rootScope.addEventListener('logging_out', () => {\n const toClear: CacheStorageDbName[] = ['cachedFiles', 'cachedStreamChunks'];\n Promise.all([\n toggleStorages(false, true),\n sessionStorage.clear(),\n Promise.race([\n telegramMeWebManager.setAuthorized(false),\n pause(3000)\n ]),\n webPushApiManager.forceUnsubscribe(),\n Promise.all(toClear.map((cacheName) => caches.delete(cacheName)))\n ]).finally(() => {\n appRuntimeManager.reload();\n });\n });\n\n idleController.addEventListener('change', (idle) => {\n this.updateTabStateIdle(idle);\n });\n this.updateTabStateIdle(idleController.isIdle);\n\n this.log('Passing environment:', ENVIRONMENT);\n this.invoke('environment', ENVIRONMENT);\n // this.sendState();\n }\n\n public pingServiceWorkerWithIframe() {\n if(this.pingServiceWorkerPromise) {\n return this.pingServiceWorkerPromise;\n }\n\n const promise = this.pingServiceWorkerPromise = deferredPromise();\n const iframe = document.createElement('iframe');\n iframe.hidden = true;\n const onLoad = () => {\n setTimeout(() => { // ping once in 10 seconds\n this.pingServiceWorkerPromise = undefined;\n }, 10e3);\n\n clearTimeout(timeout);\n iframe.remove();\n iframe.removeEventListener('load', onLoad);\n iframe.removeEventListener('error', onLoad);\n promise.resolve();\n };\n iframe.addEventListener('load', onLoad);\n iframe.addEventListener('error', onLoad);\n iframe.src = 'ping/' + (Math.random() * 0xFFFFFFFF | 0);\n document.body.append(iframe);\n\n const timeout = window.setTimeout(onLoad, 1e3);\n return promise;\n }\n\n private attachServiceWorker(serviceWorker: ServiceWorker) {\n this.lastServiceWorker && this.serviceMessagePort.detachPort(this.lastServiceWorker);\n this.serviceMessagePort.attachSendPort(this.lastServiceWorker = serviceWorker);\n this.serviceMessagePort.invokeVoid('hello', undefined);\n }\n\n private _registerServiceWorker() {\n navigator.serviceWorker.register(\n /* webpackChunkName: \"sw\" */\n new URL('../serviceWorker/index.service', import.meta.url),\n {scope: './'}\n ).then((registration) => {\n this.log('SW registered', registration);\n\n // ! doubtful fix for hard refresh\n if(registration.active && !navigator.serviceWorker.controller) {\n return registration.unregister().then(() => {\n window.location.reload();\n });\n }\n\n const sw = registration.installing || registration.waiting || registration.active;\n sw.addEventListener('statechange', (e) => {\n this.log('SW statechange', e);\n });\n\n const controller = navigator.serviceWorker.controller || registration.installing || registration.waiting || registration.active;\n this.attachServiceWorker(controller);\n\n \n \n \n }, (err) => {\n this.log.error('SW registration failed!', err);\n\n this.invokeVoid('serviceWorkerOnline', false);\n });\n }\n\n private registerServiceWorker() {\n if(!('serviceWorker' in navigator)) return;\n\n this.serviceMessagePort = new ServiceMessagePort();\n\n // this.addMultipleEventsListeners({\n // hello: () => {\n // // this.serviceMessagePort.invokeVoid('port', undefined);\n // }\n // });\n\n // ! I hate webpack - it won't load it by using worker.register, only navigator.serviceWorker will do it.\n const worker = navigator.serviceWorker;\n this._registerServiceWorker();\n\n // worker.startMessages();\n\n worker.addEventListener('controllerchange', () => {\n this.log.warn('controllerchange');\n\n const controller = worker.controller;\n this.attachServiceWorker(controller);\n\n controller.addEventListener('error', (e) => {\n this.log.error('controller error:', e);\n });\n });\n\n \n \n \n this.serviceMessagePort.attachListenPort(worker);\n this.serviceMessagePort.addMultipleEventsListeners({\n port: (payload, source, event) => {\n this.invokeVoid('serviceWorkerPort', undefined, undefined, [event.ports[0]]);\n },\n\n hello: (payload, source) => {\n this.serviceMessagePort.resendLockTask(source);\n },\n\n share: (payload) => {\n this.log('will try to share something');\n this.share = payload;\n }\n });\n \n\n worker.addEventListener('messageerror', (e) => {\n this.log.error('SW messageerror:', e);\n });\n }\n\n private async registerCryptoWorker() {\n const get = (url: string) => {\n return fetch(url).then((response) => response.text()).then((text) => {\n const pathnameSplitted = location.pathname.split('/');\n pathnameSplitted[pathnameSplitted.length - 1] = '';\n const pre = location.origin + pathnameSplitted.join('/');\n text = `\n var originalImportScripts = importScripts; \n importScripts = (url) => {\n console.log('importScripts', url);\n var newUrl = '${pre}' + url.split('/').pop();\n return originalImportScripts(newUrl);\n };\n ${text}`;\n const blob = new Blob([text], {type: 'application/javascript'});\n return blob;\n });\n };\n\n const workerHandler = {\n construct(target: any, args: any): any {\n const url = args[0] + location.search;\n return {url};\n }\n };\n\n const originals = [\n Worker,\n typeof(SharedWorker) !== 'undefined' && SharedWorker\n ].filter(Boolean);\n originals.forEach((w) => window[w.name as any] = new Proxy(w, workerHandler));\n\n const worker: SharedWorker | Worker = new Worker(\n /* webpackChunkName: \"crypto.worker\" */\n new URL('../crypto/crypto.worker.ts', import.meta.url),\n {type: 'module'}\n );\n\n originals.forEach((w) => window[w.name as any] = w as any);\n\n const originalUrl = (worker as any).url;\n\n const createWorker = (url: string) => new constructor(url, {type: 'module'});\n const attachWorkerToPort = (worker: SharedWorker | Worker) => this.attachWorkerToPort(worker, cryptoMessagePort, 'crypto');\n const constructor = IS_SHARED_WORKER_SUPPORTED ? SharedWorker : Worker;\n\n // let cryptoWorkers = workers.length;\n cryptoMessagePort.addEventListener('port', (payload, source, event) => {\n this.invokeVoid('cryptoPort', undefined, undefined, [event.ports[0]]);\n // .then((attached) => {\n // if(!attached && cryptoWorkers-- > 1) {\n // this.log.error('terminating unneeded crypto worker');\n\n // cryptoMessagePort.invokeVoid('terminate', undefined, source);\n // const worker = workers.find((worker) => (worker as SharedWorker).port === source || (worker as any) === source);\n // if((worker as SharedWorker).port) (worker as SharedWorker).port.close();\n // else (worker as Worker).terminate();\n // cryptoMessagePort.detachPort(source);\n // }\n // });\n });\n\n const firstWorker = createWorker(originalUrl);\n attachWorkerToPort(firstWorker);\n\n const blob = await get(originalUrl);\n const urlsPromise = await this.invoke('createProxyWorkerURLs', {originalUrl, blob});\n const workers = urlsPromise.slice(1).map(createWorker);\n workers.forEach(attachWorkerToPort);\n }\n\n \n private registerWorker() {\n // return;\n\n let worker: SharedWorker | Worker;\n if(IS_SHARED_WORKER_SUPPORTED) {\n worker = new SharedWorker(\n /* webpackChunkName: \"mtproto.worker\" */\n new URL('./mtproto.worker.ts', import.meta.url),\n {type: 'module'}\n );\n } else {\n worker = new Worker(\n /* webpackChunkName: \"mtproto.worker\" */\n new URL('./mtproto.worker.ts', import.meta.url),\n {type: 'module'}\n );\n }\n\n this.onWorkerFirstMessage(worker);\n }\n \n\n private attachWorkerToPort(worker: SharedWorker | Worker, messagePort: SuperMessagePort, type: string) {\n const port: MessagePort = (worker as SharedWorker).port || worker as any;\n messagePort.attachPort(port);\n\n worker.addEventListener('error', (err) => {\n this.log.error(type, 'worker error', err);\n });\n }\n\n private onWorkerFirstMessage(worker: any) {\n this.log('set webWorker');\n\n // this.worker = worker;\n \n \n \n this.attachWorkerToPort(worker, this, 'mtproto');\n \n }\n\n private loadState() {\n return Promise.all([\n loadState().then((stateResult) => {\n this.newVersion = stateResult.newVersion;\n this.oldVersion = stateResult.oldVersion;\n this.mirrors['state'] = stateResult.state;\n return stateResult;\n })\n // loadStorages(createStorages()),\n ]);\n }\n\n public sendState() {\n return this.loadState().then((result) => {\n const [stateResult] = result;\n this.invoke('state', {...stateResult, userId: rootScope.myId.toUserId()});\n return result;\n });\n }\n\n \n public invokeCrypto(method: Method, ...args: Parameters): Promise>> {\n return cryptoMessagePort.invokeCrypto(method, ...args);\n }\n \n\n public async toggleStorages(enabled: boolean, clearWrite: boolean) {\n await toggleStorages(enabled, clearWrite);\n this.invoke('toggleStorages', {enabled, clearWrite});\n this.serviceMessagePort.invokeVoid('toggleStorages', {enabled, clearWrite});\n }\n\n public async getMirror(name: T) {\n const mirror = this.mirrors[name];\n return mirror;\n }\n\n public getState() {\n return this.getMirror('state');\n }\n\n public updateTabState(key: T, value: TabState[T]) {\n this.tabState[key] = value;\n this.invokeVoid('tabState', this.tabState);\n }\n\n public updateTabStateIdle(idle: boolean) {\n this.updateTabState('idleStartTime', idle ? Date.now() : 0);\n }\n\n private onMirrorTask = (payload: MirrorTaskPayload) => {\n const {name, key, value} = payload;\n if(!payload.hasOwnProperty('key')) {\n this.mirrors[name] = value;\n return;\n }\n\n const mirror = this.mirrors[name] ??= {} as any;\n if(value === undefined) {\n delete mirror[key];\n } else {\n mirror[key] = value;\n }\n };\n}\n\ninterface ApiManagerProxy extends MTProtoMessagePort {}\n\nconst apiManagerProxy = new ApiManagerProxy();\nMOUNT_CLASS_TO.apiManagerProxy = apiManagerProxy;\nexport default apiManagerProxy;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport tabId from '../../config/tabId';\nimport IS_SHARED_WORKER_SUPPORTED from '../../environment/sharedWorkerSupport';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport idleController from '../../helpers/idleController';\nimport {logger} from '../logger';\nimport rootScope from '../rootScope';\nimport sessionStorage from '../sessionStorage';\nimport apiManagerProxy from './mtprotoworker';\n\nexport type AppInstance = {\n id: number,\n idle: boolean,\n time: number\n};\n\nexport type InstanceDeactivateReason = 'version' | 'tabs';\n\nconst CHECK_INSTANCE_INTERVAL = 5000;\nconst DEACTIVATE_TIMEOUT = 30000;\nconst MULTIPLE_TABS_THRESHOLD = 20000;\nconst IS_MULTIPLE_TABS_SUPPORTED = IS_SHARED_WORKER_SUPPORTED;\n\nexport class SingleInstance extends EventListenerBase<{\n activated: () => void,\n deactivated: (reason: InstanceDeactivateReason) => void\n}> {\n private instanceId: number;\n private started: boolean;\n private masterInstance: boolean;\n private deactivateTimeout: number;\n private deactivated: InstanceDeactivateReason;\n private log = logger('INSTANCE');\n\n constructor() {\n super(false);\n\n this.log = logger('INSTANCE');\n this.instanceId = tabId;\n }\n\n public get deactivatedReason() {\n return this.deactivated;\n }\n\n public start() {\n this.reset();\n\n if(!this.started/* && !Config.Navigator.mobile && !Config.Modes.packed */) {\n this.started = true;\n\n idleController.addEventListener('change', this.checkInstance);\n setInterval(this.checkInstance, CHECK_INSTANCE_INTERVAL);\n this.checkInstance();\n\n try {\n document.documentElement.addEventListener('beforeunload', this.clearInstance);\n } catch(e) {}\n }\n }\n\n private reset() {\n this.masterInstance = false;\n this.clearDeactivateTimeout();\n this.deactivated = undefined;\n }\n\n private clearInstance = () => {\n if(this.masterInstance && !this.deactivated) {\n this.log.warn('clear master instance');\n sessionStorage.delete('xt_instance');\n }\n };\n\n public activateInstance() {\n if(this.deactivated) {\n this.reset();\n this.checkInstance(false);\n this.dispatchEvent('activated');\n }\n }\n\n private deactivateInstance(reason: InstanceDeactivateReason) {\n if(this.masterInstance || this.deactivated) {\n return;\n }\n\n this.log.warn('deactivate', reason);\n this.clearDeactivateTimeout();\n this.deactivated = reason;\n\n this.dispatchEvent('deactivated', reason);\n }\n\n private clearDeactivateTimeout() {\n if(this.deactivateTimeout) {\n clearTimeout(this.deactivateTimeout);\n this.deactivateTimeout = 0;\n }\n }\n\n private checkInstance = async(idle = idleController.isIdle) => {\n if(this.deactivated) {\n return;\n }\n\n const time = Date.now();\n const newInstance: AppInstance = {\n id: this.instanceId,\n idle,\n time\n };\n\n const [curInstance, build = App.build] = await Promise.all([\n sessionStorage.get('xt_instance', false),\n sessionStorage.get('k_build', false)\n ]);\n\n if(build > App.build) {\n this.masterInstance = false;\n rootScope.managers.networkerFactory.stopAll();\n this.deactivateInstance('version');\n apiManagerProxy.toggleStorages(false, false);\n return;\n } else if(IS_MULTIPLE_TABS_SUPPORTED) {\n sessionStorage.set({xt_instance: newInstance});\n return;\n }\n\n // this.log('check instance', newInstance, curInstance)\n if(!idle ||\n !curInstance ||\n curInstance.id === this.instanceId ||\n curInstance.time < (time - MULTIPLE_TABS_THRESHOLD)) {\n sessionStorage.set({xt_instance: newInstance});\n\n if(!this.masterInstance) {\n this.masterInstance = true;\n rootScope.managers.networkerFactory.startAll();\n this.log.warn('now master instance', newInstance);\n }\n\n this.clearDeactivateTimeout();\n } else if(this.masterInstance) {\n this.masterInstance = false;\n rootScope.managers.networkerFactory.stopAll();\n this.log.warn('now idle instance', newInstance);\n this.deactivateTimeout ||= window.setTimeout(() => this.deactivateInstance('tabs'), DEACTIVATE_TIMEOUT);\n }\n };\n}\n\nconst singleInstance = new SingleInstance();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.singleInstance = singleInstance);\nexport default singleInstance;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport Modes from '../../config/modes';\nimport loadScript from '../../helpers/dom/loadScript';\nimport tsNow from '../../helpers/tsNow';\nimport sessionStorage from '../sessionStorage';\n\nexport class TelegramMeWebManager {\n private disabled = /* false && */(Modes.test || !App.domains.includes(location.hostname));\n\n public setAuthorized(canRedirect: boolean) {\n if(this.disabled) {\n return;\n }\n\n return sessionStorage.get('tgme_sync').then((curValue) => {\n const ts = tsNow(true);\n if(\n canRedirect &&\n curValue?.canRedirect === canRedirect &&\n (curValue.ts + 86400) > ts\n ) {\n return;\n }\n\n sessionStorage.set({\n tgme_sync: {\n canRedirect,\n ts\n }\n });\n\n const path = `_websync_?authed=${canRedirect ? '1' : '0'}&version=${encodeURIComponent(App.version + ' ' + App.suffix)}`;\n const urls = [\n '//telegram.me/' + path,\n '//t.me/' + path\n ];\n\n const promises = urls.map((url) => {\n return loadScript(url).then((script) => {\n script.remove();\n });\n });\n\n return Promise.all(promises);\n });\n }\n}\n\nconst telegramMeWebManager = new TelegramMeWebManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.telegramMeWebManager = telegramMeWebManager);\nexport default telegramMeWebManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function loadScript(url: string) {\n const script = document.createElement('script');\n const promise = new Promise((resolve) => {\n script.onload = script.onerror = () => {\n resolve(script);\n };\n });\n script.src = url;\n document.body.appendChild(script);\n return promise;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {PushNotificationObject} from '../serviceWorker/push';\nimport type {ServicePushPingTaskPayload} from '../serviceWorker/serviceMessagePort';\nimport type {NotificationSettings} from '../appManagers/uiNotificationsManager';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {logger} from '../logger';\nimport apiManagerProxy from './mtprotoworker';\nimport I18n, {LangPackKey} from '../langPack';\nimport {IS_MOBILE} from '../../environment/userAgent';\nimport appRuntimeManager from '../appManagers/appRuntimeManager';\nimport copy from '../../helpers/object/copy';\nimport singleInstance from './singleInstance';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport getServerMessageId from '../appManagers/utils/messageId/getServerMessageId';\n\nexport type PushSubscriptionNotifyType = 'init' | 'subscribe' | 'unsubscribe';\nexport type PushSubscriptionNotifyEvent = `push_${PushSubscriptionNotifyType}`;\n\nexport type PushSubscriptionNotify = {\n tokenType: number,\n tokenValue: string\n};\n\nconst PING_PUSH_INTERVAL = 10000;\n\nexport class WebPushApiManager extends EventListenerBase<{\n push_notification_click: (n: PushNotificationObject) => void,\n push_init: (n: PushSubscriptionNotify) => void,\n push_subscribe: (n: PushSubscriptionNotify) => void,\n push_unsubscribe: (n: PushSubscriptionNotify) => void\n}> {\n public isAvailable = true;\n private isPushEnabled = false;\n private localNotificationsAvailable = true;\n private started = false;\n private settings: NotificationSettings & {baseUrl?: string} = {} as any;\n private isAliveTO: any;\n private isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n private userVisibleOnly = this.isFirefox ? false : true;\n private log = logger('PM');\n\n constructor() {\n super(false);\n\n if(!('PushManager' in window) ||\n !('Notification' in window) ||\n !('serviceWorker' in navigator)) {\n this.log.warn('Push messaging is not supported.');\n this.isAvailable = false;\n this.localNotificationsAvailable = false;\n }\n\n if(this.isAvailable && Notification.permission === 'denied') {\n this.log.warn('The user has blocked notifications.');\n }\n }\n\n public start() {\n if(!this.started) {\n this.started = true;\n this.getSubscription();\n this.setUpServiceWorkerChannel();\n }\n }\n\n public setLocalNotificationsDisabled() {\n this.localNotificationsAvailable = false;\n }\n\n public getSubscription() {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.getSubscription().then((subscription) => {\n this.isPushEnabled = !!subscription;\n this.pushSubscriptionNotify('init', subscription);\n }).catch((err) => {\n this.log.error('Error during getSubscription()', err);\n });\n });\n }\n\n public subscribe = () => {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.subscribe({userVisibleOnly: this.userVisibleOnly}).then((subscription) => {\n // The subscription was successful\n this.isPushEnabled = true;\n this.pushSubscriptionNotify('subscribe', subscription);\n }).catch((e) => {\n if(Notification.permission === 'denied') {\n this.log('Permission for Notifications was denied');\n } else {\n this.log('Unable to subscribe to push.', e);\n if(!this.userVisibleOnly) {\n this.userVisibleOnly = true;\n setTimeout(this.subscribe, 0);\n }\n }\n });\n });\n }\n\n public unsubscribe() {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.getSubscription().then((subscription) => {\n this.isPushEnabled = false;\n\n if(subscription) {\n this.pushSubscriptionNotify('unsubscribe', subscription);\n\n setTimeout(() => {\n subscription.unsubscribe().then((successful) => {\n this.isPushEnabled = false;\n }).catch((e) => {\n this.log.error('Unsubscription error: ', e);\n });\n }, 3000);\n }\n }).catch((e) => {\n this.log.error('Error thrown while unsubscribing from ' +\n 'push messaging.', e);\n });\n });\n }\n\n public forceUnsubscribe() {\n if(!this.isAvailable) {\n return;\n }\n\n navigator.serviceWorker.ready.then((reg) => {\n reg.pushManager.getSubscription().then((subscription) => {\n this.log.warn('force unsubscribe', subscription);\n if(subscription) {\n subscription.unsubscribe().then((successful) => {\n this.log.warn('force unsubscribe successful', successful);\n this.isPushEnabled = false;\n }).catch((e) => {\n this.log.error('Unsubscription error: ', e);\n });\n }\n }).catch((e) => {\n this.log.error('Error thrown while unsubscribing from ' +\n 'push messaging.', e);\n });\n });\n }\n\n public isAliveNotify = () => {\n if(!this.isAvailable || singleInstance.deactivatedReason) {\n return;\n }\n\n this.settings.baseUrl = (location.href || '').replace(/#.*$/, '');\n\n const lang: ServicePushPingTaskPayload['lang'] = {} as any;\n const ACTIONS_LANG_MAP: Record = {\n push_action_mute1d: IS_MOBILE ? 'PushNotification.Action.Mute1d.Mobile' : 'PushNotification.Action.Mute1d',\n push_action_settings: IS_MOBILE ? 'PushNotification.Action.Settings.Mobile' : 'PushNotification.Action.Settings',\n push_message_nopreview: 'PushNotification.Message.NoPreview'\n };\n\n for(const action in ACTIONS_LANG_MAP) {\n lang[action as keyof typeof ACTIONS_LANG_MAP] = I18n.format(ACTIONS_LANG_MAP[action as keyof typeof ACTIONS_LANG_MAP], true);\n }\n\n apiManagerProxy.serviceMessagePort.invokeVoid('pushPing', {\n localNotifications: this.localNotificationsAvailable,\n lang: lang,\n settings: this.settings\n });\n\n this.isAliveTO = setTimeout(this.isAliveNotify, PING_PUSH_INTERVAL);\n }\n\n public setSettings(newSettings: WebPushApiManager['settings']) {\n this.settings = copy(newSettings);\n clearTimeout(this.isAliveTO);\n this.isAliveNotify();\n }\n\n public hidePushNotifications() {\n if(!this.isAvailable) {\n return;\n }\n\n apiManagerProxy.serviceMessagePort.invokeVoid('notificationsClear', undefined);\n }\n\n public setUpServiceWorkerChannel() {\n if(!this.isAvailable) {\n return;\n }\n\n apiManagerProxy.serviceMessagePort.addEventListener('pushClick', (payload) => {\n if(singleInstance.deactivatedReason) {\n appRuntimeManager.reload();\n return;\n }\n\n this.dispatchEvent('push_notification_click', payload);\n });\n\n navigator.serviceWorker.ready.then(this.isAliveNotify);\n }\n\n public pushSubscriptionNotify(event: PushSubscriptionNotifyType, subscription?: PushSubscription) {\n if(subscription) {\n const subscriptionObj: PushSubscriptionJSON = subscription.toJSON();\n if(!subscriptionObj ||\n !subscriptionObj.endpoint ||\n !subscriptionObj.keys ||\n !subscriptionObj.keys.p256dh ||\n !subscriptionObj.keys.auth) {\n this.log.warn('Invalid push subscription', subscriptionObj);\n this.unsubscribe();\n this.isAvailable = false;\n this.pushSubscriptionNotify(event);\n return;\n }\n\n this.log.warn('Push', event, subscriptionObj);\n this.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, {\n tokenType: 10,\n tokenValue: JSON.stringify(subscriptionObj)\n });\n } else {\n this.log.warn('Push', event, false);\n this.dispatchEvent(('push_' + event) as PushSubscriptionNotifyEvent, false as any);\n }\n }\n\n public ignorePushByMid(peerId: PeerId, mid: number) {\n if(!this.isAvailable) {\n return;\n }\n\n apiManagerProxy.serviceMessagePort.invokeVoid('shownNotification', peerId + '_' + getServerMessageId(mid));\n }\n}\n\nconst webPushApiManager = new WebPushApiManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.webPushApiManager = webPushApiManager);\nexport default webPushApiManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport IS_OPUS_SUPPORTED from '../environment/opusSupport';\nimport {IS_SAFARI} from '../environment/userAgent';\nimport {Modify} from '../types';\nimport {logger, LogTypes} from './logger';\nimport apiManagerProxy from './mtproto/mtprotoworker';\nimport type {ConvertWebPTask} from './webp/webpWorkerController';\n\ntype Result = {\n bytes: Uint8Array,\n waveform?: Uint8Array\n};\n\ntype Task = {\n pages: Uint8Array,\n withWaveform: boolean,\n waveform?: Uint8Array,\n callback: {resolve: (result: Result) => void, reject: (err: any) => void},\n timeout: number\n};\n\nexport interface ConvertOpusTask extends Modify {\n type: 'convertOpus'\n}\n\nexport class OpusDecodeController {\n private worker: Worker;\n private wavWorker: Worker;\n private sampleRate = 48000;\n private tasks: Array = [];\n private keepAlive = false;\n private log = logger('OPUS', LogTypes.Error);\n\n public isPlaySupported() {\n return IS_OPUS_SUPPORTED;\n }\n\n public loadWavWorker() {\n if(this.wavWorker) return;\n\n this.wavWorker = new Worker('waveWorker.min.js');\n this.wavWorker.addEventListener('message', (e) => {\n const data = e.data;\n\n this.log('[WAV] got message:', data);\n if(data && data.page) {\n const bytes = data.page;\n this.onTaskEnd(this.tasks.shift(), bytes);\n }\n });\n }\n\n public loadWorker() {\n if(this.worker) return;\n\n this.worker = new Worker('decoderWorker.min.js');\n this.worker.addEventListener('message', (e) => {\n const data = e.data;\n\n this.log('[DECODER] got message', data);\n if(data.type === 'done') {\n // this.log('[DECODER] send done to wav');\n this.wavWorker.postMessage({command: 'done'});\n\n if(data.waveform) {\n this.tasks[0].waveform = data.waveform;\n }\n } else { // e.data contains decoded buffers as float32 values\n // this.log('[DECODER] send encode to wav');\n this.wavWorker.postMessage({\n command: 'encode',\n buffers: e.data\n }, IS_SAFARI ? undefined : data.map((typedArray: Uint8Array) => typedArray.buffer));\n }\n });\n }\n\n public setKeepAlive(keepAlive: boolean) {\n this.keepAlive = keepAlive;\n if(this.keepAlive) {\n this.loadWorker();\n this.loadWavWorker();\n } else if(!this.tasks.length) {\n this.terminateWorkers();\n }\n }\n\n public onTaskEnd(task: Task, result?: Uint8Array) {\n if(!result) {\n task.callback.reject('timeout');\n } else {\n clearTimeout(task.timeout);\n task.callback.resolve({bytes: result, waveform: task.waveform});\n }\n\n if(this.tasks.length) {\n this.executeNewTask(this.tasks[0]);\n }\n\n this.terminateWorkers();\n }\n\n public terminateWorkers(kill = false) {\n if((this.keepAlive || this.tasks.length) && !kill) return;\n\n if(this.worker) {\n this.worker.terminate();\n this.worker = null;\n }\n\n if(this.wavWorker) {\n this.wavWorker.terminate();\n this.wavWorker = null;\n }\n }\n\n public executeNewTask(task: Task) {\n this.worker.postMessage({\n command: 'init',\n decoderSampleRate: this.sampleRate,\n outputBufferSampleRate: this.sampleRate\n });\n\n this.wavWorker.postMessage({\n command: 'init',\n wavBitDepth: 16,\n wavSampleRate: this.sampleRate\n });\n\n // console.log('sending command to worker:', task);\n // setTimeout(() => {\n this.log('[DECODER] send decode');\n this.worker.postMessage({\n command: 'decode',\n pages: task.pages,\n waveform: task.withWaveform\n }, IS_SAFARI ? undefined : [task.pages.buffer]);\n // }, 1e3);\n\n task.timeout = window.setTimeout(() => {\n this.log.error('decode timeout'/* , task */);\n\n this.terminateWorkers(true);\n if(this.tasks.length) {\n this.loadWorker();\n this.loadWavWorker();\n }\n\n this.onTaskEnd(this.tasks.shift());\n }, 10e3);\n }\n\n public pushDecodeTask(pages: Uint8Array, withWaveform: boolean) {\n return new Promise((resolve, reject) => {\n const task = {\n pages,\n withWaveform,\n callback: {resolve, reject},\n timeout: 0\n };\n\n this.loadWorker();\n this.loadWavWorker();\n\n if(this.tasks.push(task) === 1) {\n this.executeNewTask(task);\n }\n });\n }\n\n public async decode(typedArray: Uint8Array, withWaveform = false) {\n return this.pushDecodeTask(typedArray, withWaveform).then(async(result) => {\n const dataBlob = new Blob([result.bytes], {type: 'audio/wav'});\n return {url: await apiManagerProxy.invoke('createObjectURL', dataBlob), waveform: result.waveform};\n });\n }\n}\n\nconst opusDecodeController = new OpusDecodeController();\nMOUNT_CLASS_TO.opusDecodeController = opusDecodeController;\nexport default opusDecodeController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport emojiRegExp from '../../vendor/emoji/regex';\nimport {MessageEntity} from '../../layer';\n\nconst EmojiHelper = {\n emojiMap: (code: string) => { return code; },\n shortcuts: [] as any,\n emojis: [] as any\n};\n\nexport const ALPHA_CHARS_REG_EXP = 'a-z' +\n '\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00f6\\\\u00f8-\\\\u00ff' + // Latin-1\n '\\\\u0100-\\\\u024f' + // Latin Extended A and B\n '\\\\u0253\\\\u0254\\\\u0256\\\\u0257\\\\u0259\\\\u025b\\\\u0263\\\\u0268\\\\u026f\\\\u0272\\\\u0289\\\\u028b' + // IPA Extensions\n '\\\\u02bb' + // Hawaiian\n '\\\\u0300-\\\\u036f' + // Combining diacritics\n '\\\\u1e00-\\\\u1eff' + // Latin Extended Additional (mostly for Vietnamese)\n '\\\\u0400-\\\\u04ff\\\\u0500-\\\\u0527' + // Cyrillic\n '\\\\u2de0-\\\\u2dff\\\\ua640-\\\\ua69f' + // Cyrillic Extended A/B\n '\\\\u0591-\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7' +\n '\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f4' + // Hebrew\n '\\\\ufb1d-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40-\\\\ufb41' +\n '\\\\ufb43-\\\\ufb44\\\\ufb46-\\\\ufb4f' + // Hebrew Pres. Forms\n '\\\\u0610-\\\\u061a\\\\u0620-\\\\u065f\\\\u066e-\\\\u06d3\\\\u06d5-\\\\u06dc' +\n '\\\\u06de-\\\\u06e8\\\\u06ea-\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff' + // Arabic\n '\\\\u0750-\\\\u077f\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u08e4-\\\\u08fe' + // Arabic Supplement and Extended A\n '\\\\ufb50-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb' + // Pres. Forms A\n '\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc' + // Pres. Forms B\n '\\\\u200c' + // Zero-Width Non-Joiner\n '\\\\u0e01-\\\\u0e3a\\\\u0e40-\\\\u0e4e' + // Thai\n '\\\\u1100-\\\\u11ff\\\\u3130-\\\\u3185\\\\uA960-\\\\uA97F\\\\uAC00-\\\\uD7AF\\\\uD7B0-\\\\uD7FF' + // Hangul (Korean)\n '\\\\u3003\\\\u3005\\\\u303b' + // Kanji/Han iteration marks\n '\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a' + // full width Alphabet\n '\\\\uff66-\\\\uff9f' + // half width Katakana\n '\\\\uffa1-\\\\uffdc'; // half width Hangul (Korean)\nexport const ALPHA_NUMERIC_REG_EXP = '0-9\\_' + ALPHA_CHARS_REG_EXP;\nexport const DOMAIN_ADD_CHARS = '\\u00b7';\n// Based on Regular Expression for URL validation by Diego Perini\nexport const URL_ALPHANUMERIC_REG_EXP_PART = '[' + ALPHA_CHARS_REG_EXP + '0-9]';\nexport const URL_PROTOCOL_REG_EXP_PART = '((?:https?|ftp)://|mailto:)?';\nexport const URL_REG_EXP = URL_PROTOCOL_REG_EXP_PART +\n // user:pass authentication\n '(?:' + URL_ALPHANUMERIC_REG_EXP_PART + '{1,64}(?::' + URL_ALPHANUMERIC_REG_EXP_PART + '{0,64})?@)?' +\n '(?:' +\n // sindresorhus/ip-regexp\n '(?: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}' +\n '|' +\n // host name\n URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}' +\n // domain name\n '(?:\\\\.' + URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}){0,10}' +\n // TLD identifier\n '(?:\\\\.(xn--[0-9a-z]{2,16}|[' + ALPHA_CHARS_REG_EXP + ']{2,24}))' +\n ')' +\n // port number\n '(?::\\\\d{2,5})?' +\n // resource path\n '(?:/(?:\\\\S{0,255}[^\\\\s.;,(\\\\[\\\\]{}<>\"\\'])?)?';\nexport const URL_PROTOCOL_REG_EXP = new RegExp('^' + URL_PROTOCOL_REG_EXP_PART.slice(0, -1), 'i');\nexport const URL_ANY_PROTOCOL_REG_EXP = /^((?:[^\\/]+?):\\/\\/|mailto:)/;\nexport const USERNAME_REG_EXP = '[a-zA-Z\\\\d_]{5,32}';\nexport const BOT_COMMAND_REG_EXP = '\\\\/([a-zA-Z\\\\d_]{1,32})(?:@(' + USERNAME_REG_EXP + '))?(\\\\b|$)';\nexport const FULL_REG_EXP = new RegExp('(^| )(@)(' + USERNAME_REG_EXP + ')|(' + URL_REG_EXP + ')|(\\\\n)|(' + emojiRegExp + ')|(^|[\\\\s\\\\(\\\\]])(#[' + ALPHA_NUMERIC_REG_EXP + ']{2,64})|(^|\\\\s)' + BOT_COMMAND_REG_EXP, 'i');\nexport const EMAIL_REG_EXP = /^(([^<>()[\\]\\\\.,;:\\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,}))$/;\n// const markdownTestRegExp = /[`_*@~]/;\nexport const MARKDOWN_REG_EXP = /(^|\\s|\\n)(````?)([\\s\\S]+?)(````?)([\\s\\n\\.,:?!;]|$)|(^|\\s|\\x01)(`|~~|\\*\\*|__|_-_|\\|\\|)([^\\n]+?)\\7([\\x01\\s\\.,:?!;]|$)|@(\\d+)\\s*\\((.+?)\\)|(\\[(.+?)\\]\\((.+?)\\))/m;\nexport const SITE_HASHTAGS: {[siteName: string]: string} = {\n 'Telegram': 'tg://search_hashtag?hashtag={1}',\n 'Twitter': 'https://twitter.com/hashtag/{1}',\n 'Instagram': 'https://instagram.com/explore/tags/{1}/',\n 'Google Plus': 'https://plus.google.com/explore/{1}'\n};\n\n// export const SITE_MENTIONS: {[siteName in 'Telegram' | 'Twitter' | 'Instagram' | 'GitHub']: string} = {\n// Telegram: '#{1}',\n// Twitter: 'https://twitter.com/{1}',\n// Instagram: 'https://instagram.com/{1}/',\n// GitHub: 'https://github.com/{1}'\n// };\n\nexport const MARKDOWN_ENTITIES: {[markdown: string]: MessageEntity['_']} = {\n '`': 'messageEntityCode',\n '``': 'messageEntityPre',\n '**': 'messageEntityBold',\n '__': 'messageEntityItalic',\n '~~': 'messageEntityStrike',\n '_-_': 'messageEntityUnderline',\n '||': 'messageEntitySpoiler'\n};\n\nexport const PASS_CONFLICTING_ENTITIES: Set = new Set([\n 'messageEntityEmoji',\n 'messageEntityLinebreak',\n 'messageEntityCaret'\n]);\nfor(const i in MARKDOWN_ENTITIES) {\n PASS_CONFLICTING_ENTITIES.add(MARKDOWN_ENTITIES[i]);\n}\n\nexport const PHONE_NUMBER_REG_EXP = /^\\+\\d+$/;\n\n/* export function parseEmojis(text: string) {\n return text.replace(/:([a-z0-9\\-\\+\\*_]+?):/gi, function (all, shortcut) {\n var emojiCode = EmojiHelper.shortcuts[shortcut]\n if (emojiCode !== undefined) {\n return EmojiHelper.emojis[emojiCode][0]\n }\n return all\n })\n} */\n\n\n/* export function replaceUrlEncodings(urlWithEncoded: string) {\n return urlWithEncoded.replace(/(%[A-Z\\d]{2})+/g, (str) => {\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n });\n} */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type addAnchorListener from '../../helpers/addAnchorListener';\nimport {PHONE_NUMBER_REG_EXP} from '.';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport matchUrlProtocol from './matchUrlProtocol';\nimport {T_ME_PREFIXES} from '../mtproto/mtproto_config';\n\nexport default function wrapUrl(url: string, unsafe?: number | boolean) {\n if(!matchUrlProtocol(url)) {\n url = 'https://' + url;\n }\n\n const out: {url: string, onclick?: Parameters[0]['name']} = {url};\n let tgMeMatch, telescoPeMatch, tgMatch;\n let onclick: typeof out['onclick'];\n /* if(unsafe === 2) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } else */if((tgMeMatch = url.match(/^(?:https?:\\/\\/)?(?:(.+?)\\.)?(?:(?:web|k|z)\\.)?t(?:elegram)?\\.me(?:\\/(.+))?/))) {\n const u = new URL(url);\n let prefix = tgMeMatch[1];\n if(prefix && T_ME_PREFIXES.has(tgMeMatch[1])) {\n prefix = undefined;\n }\n\n if(prefix) {\n u.pathname = prefix + (u.pathname === '/' ? '' : u.pathname);\n }\n\n const fullPath = u.pathname.slice(1);\n const path = fullPath.split('/');\n\n if(path[0] && path[0][0] === '$' && path[0].length > 1) {\n onclick = 'invoice';\n } else if(/^\\W/.test(fullPath) && !PHONE_NUMBER_REG_EXP.test(fullPath)) { // second regexp is for phone numbers (t.me/+38050...)\n onclick = 'joinchat';\n } else switch(path[0]) {\n case 'joinchat':\n case 'addstickers':\n case 'addemoji':\n case 'voicechat':\n case 'invoice':\n if(path.length !== 1 && !prefix) {\n onclick = path[0];\n break;\n }\n\n default:\n if((path[1] && path[1].match(/^\\d+(?:\\?(?:comment|thread)=\\d+)?$/)) || path.length === 1) {\n onclick = 'im';\n break;\n }\n\n break;\n }\n } else if((telescoPeMatch = url.match(/^(?:https?:\\/\\/)?telesco\\.pe\\/([^/?]+)\\/(\\d+)/))) {\n onclick = 'im';\n } else if((tgMatch = url.match(/tg:(?:\\/\\/)?(.+?)(?:\\?|$)/))) {\n onclick = 'tg_' + tgMatch[1] as any;\n }/* else if(unsafe) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } */\n\n if(!(window as any)[onclick]) {\n onclick = undefined;\n }\n\n out.onclick = onclick;\n return out;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.wrapUrl = wrapUrl);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, PollResults, Poll, WebPage, GroupCall, GroupCallParticipant, ReactionCount, MessagePeerReaction, PhoneCall, Config, Reaction} from '../layer';\nimport type {Dialog, ForumTopic, MessagesStorageKey, MyMessage} from './appManagers/appMessagesManager';\nimport type {MyDialogFilter} from './storages/filters';\nimport type {Folder} from './storages/dialogs';\nimport type {UserTyping} from './appManagers/appProfileManager';\nimport type {MyDraftMessage} from './appManagers/appDraftsManager';\nimport type {ConnectionStatusChange} from './mtproto/connectionStatus';\nimport type {GroupCallId} from './appManagers/appGroupCallsManager';\nimport type {AppManagers} from './appManagers/managers';\nimport type {State} from '../config/state';\nimport type {Progress} from './appManagers/appDownloadManager';\nimport type {CallId} from './appManagers/appCallsManager';\nimport type {MyDocument} from './appManagers/appDocsManager';\nimport type {MTAppConfig} from './mtproto/appConfig';\nimport {NULL_PEER_ID, UserAuth} from './mtproto/mtproto_config';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\nimport {IS_WORKER} from '../helpers/context';\n\nexport type BroadcastEvents = {\n 'chat_full_update': ChatId,\n 'chat_update': ChatId,\n 'chat_toggle_forum': {chatId: ChatId, enabled: boolean},\n 'chat_participant': Update.updateChannelParticipant,\n\n 'channel_update': ChatId,\n\n 'user_update': UserId,\n 'user_auth': UserAuth,\n 'user_full_update': UserId,\n\n 'peer_pinned_messages': {peerId: PeerId, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: PeerId, maxId: number},\n 'peer_typings': {peerId: PeerId, threadId?: number, typings: UserTyping[]},\n 'peer_block': {peerId: PeerId, blocked: boolean},\n 'peer_title_edit': {peerId: PeerId, threadId?: number},\n 'peer_bio_edit': PeerId,\n 'peer_deleted': PeerId, // left chat, deleted user dialog, left channel\n 'peer_full_update': PeerId,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_new': MyDialogFilter,\n 'filter_order': number[],\n\n 'folder_unread': Omit,\n\n 'dialog_draft': {peerId: PeerId, dialog: Dialog | ForumTopic, drop: boolean, draft: MyDraftMessage | undefined},\n 'dialog_unread': {peerId: PeerId, dialog: Dialog | ForumTopic},\n 'dialog_flush': {peerId: PeerId, dialog: Dialog},\n 'dialog_drop': Dialog | ForumTopic,\n 'dialog_migrate': {migrateFrom: PeerId, migrateTo: PeerId},\n // 'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog | ForumTopic,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': Map}>,\n\n 'history_append': {storageKey: MessagesStorageKey, message: Message.message},\n 'history_update': {storageKey: MessagesStorageKey, message: MyMessage, sequential?: boolean},\n 'history_reply_markup': {peerId: PeerId},\n 'history_multiappend': MyMessage,\n 'history_delete': {peerId: PeerId, msgs: Set},\n 'history_forbidden': PeerId,\n 'history_reload': PeerId,\n // 'history_request': void,\n\n 'message_edit': {storageKey: MessagesStorageKey, peerId: PeerId, mid: number, message: MyMessage},\n 'message_sent': {storageKey: MessagesStorageKey, tempId: number, tempMessage: any, mid: number, message: MyMessage},\n 'message_error': {storageKey: MessagesStorageKey, tempId: number, error: ApiError},\n 'message_transcribed': {peerId: PeerId, mid: number, text: string, pending?: boolean},\n 'messages_views': {peerId: PeerId, mid: number, views: number}[],\n 'messages_reactions': {message: Message.message, changedResults: ReactionCount[]}[],\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: PeerId, mids: number[]},\n 'messages_media_read': {peerId: PeerId, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': Message.message,\n 'scheduled_delete': {peerId: PeerId, mids: number[]},\n\n 'album_edit': {peerId: PeerId, groupId: string, deletedMids: number[], messages: Message.message[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n 'stickers_updated': {type: 'recent' | 'faved', stickers: MyDocument[]},\n 'stickers_top': Long,\n 'sticker_updated': {type: 'recent' | 'faved', document: MyDocument, faved: boolean},\n\n 'state_cleared': void,\n 'state_synchronized': ChatId | void,\n 'state_synchronizing': ChatId | void,\n\n 'contacts_update': UserId,\n 'avatar_update': {peerId: PeerId, threadId?: number},\n 'poll_update': {poll: Poll, results: PollResults},\n 'invalidate_participants': ChatId,\n // 'channel_settings': {channelId: number},\n 'webpage_updated': {id: WebPage.webPage['id'], msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any, settings: State['settings']},\n 'draft_updated': {peerId: PeerId, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n\n 'background_change': void,\n\n 'privacy_update': Update.updatePrivacy,\n\n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n\n 'notification_reset': string,\n 'notification_cancel': string,\n\n 'language_change': string,\n\n 'theme_change': void,\n\n 'media_play': void,\n\n 'emoji_recent': AppEmoji,\n\n 'download_progress': Progress,\n 'document_downloading': DocId,\n 'document_downloaded': DocId,\n\n 'choosing_sticker': boolean\n\n 'group_call_update': GroupCall,\n 'group_call_participant': {groupCallId: GroupCallId, participant: GroupCallParticipant},\n // 'group_call_video_track_added': {instance: GroupCallInstance}\n\n 'call_update': PhoneCall,\n 'call_signaling': {callId: CallId, data: Uint8Array},\n\n 'quick_reaction': Reaction,\n\n 'service_notification': Update.updateServiceNotification,\n\n 'logging_out': void,\n\n 'payment_sent': {peerId: PeerId, mid: number, receiptMessage: Message.messageService}\n\n 'premium_toggle': boolean,\n 'premium_toggle_private': {isNew: boolean, isPremium: boolean},\n\n 'config': Config,\n 'app_config': MTAppConfig\n};\n\nexport type BroadcastEventsListeners = {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n};\n\nexport class RootScope extends EventListenerBase {\n public myId: PeerId;\n private connectionStatus: {[name: string]: ConnectionStatusChange};\n public settings: State['settings'];\n public managers: AppManagers;\n public premium: boolean;\n\n constructor() {\n super();\n\n this.myId = NULL_PEER_ID;\n this.connectionStatus = {};\n this.premium = false;\n\n this.addEventListener('user_auth', ({id}) => {\n this.myId = id.toPeerId();\n });\n\n this.addEventListener('premium_toggle_private', ({isNew, isPremium}) => {\n this.premium = isPremium;\n this.dispatchEventSingle('premium_toggle', isPremium);\n });\n\n this.addEventListener('connection_status_change', (status) => {\n this.connectionStatus[status.name] = status;\n });\n\n this.dispatchEvent = (e, ...args) => {\n super.dispatchEvent(e, ...args);\n MTProtoMessagePort.getInstance().invokeVoid('event', {name: e as string, args});\n };\n\n if(!IS_WORKER) {\n this.addEventListener('settings_updated', ({settings}) => {\n this.settings = settings;\n });\n }\n }\n\n public getConnectionStatus() {\n return this.connectionStatus;\n }\n\n public getPremium() {\n return this.premium;\n }\n\n public dispatchEventSingle(...args: any[]) {\n // @ts-ignore\n super.dispatchEvent(...args);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport {WorkerTaskVoidTemplate} from '../../types';\n\nexport interface ConvertWebPTask extends WorkerTaskVoidTemplate {\n type: 'convertWebp',\n payload: {\n fileName: string,\n bytes: Uint8Array\n }\n};\n\nexport class WebpWorkerController {\n private worker: Worker;\n private convertPromises: {[fileName: string]: CancellablePromise} = {};\n\n private init() {\n this.worker = new Worker(new URL('./webp.worker.ts', import.meta.url));\n this.worker.addEventListener('message', (e) => {\n const task = e.data as ConvertWebPTask;\n const payload = task.payload;\n\n const promise = this.convertPromises[payload.fileName];\n if(promise) {\n payload.bytes ? promise.resolve(payload.bytes) : promise.reject();\n delete this.convertPromises[payload.fileName];\n }\n });\n }\n\n private postMessage(data: ConvertWebPTask) {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n this.worker.postMessage(data);\n }\n\n public convert(fileName: string, bytes: Uint8Array) {\n if(this.convertPromises.hasOwnProperty(fileName)) {\n return this.convertPromises[fileName];\n }\n\n const convertPromise = deferredPromise();\n\n this.postMessage({type: 'convertWebp', payload: {fileName, bytes}});\n\n return this.convertPromises[fileName] = convertPromise;\n }\n}\n\nconst webpWorkerController = new WebpWorkerController();\nMOUNT_CLASS_TO.webpWorkerController = webpWorkerController;\nexport default webpWorkerController;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + ({\"589\":\"crypto.worker\",\"630\":\"npm.qr-code-styling\",\"670\":\"sw\",\"678\":\"mtproto.worker\"}[chunkId] || chunkId) + \".\" + {\"8\":\"93d2f33af815eb0455aa\",\"53\":\"dbe0925c22766a370c35\",\"61\":\"f9d40768535453d75527\",\"63\":\"1831e9530926993870f4\",\"77\":\"b8cf11d2b5dca36479ca\",\"104\":\"f68acff124bec8da4bd6\",\"147\":\"d3d1728d5fd59c12e18f\",\"231\":\"f4d1bfe6ff7f14577f96\",\"301\":\"95838a8203f23dd1ce8f\",\"339\":\"12bdbede82465e666965\",\"392\":\"6cd3a6e98d96c1474a83\",\"436\":\"9e54c5e9f3feccf9d736\",\"437\":\"b05ad4b2fc48a536e003\",\"442\":\"4c190263f1e005b28c8a\",\"508\":\"fda3e28eaa781dbc8942\",\"589\":\"9e5cd838e641988dc44f\",\"630\":\"f8f57a1c721e03c3f699\",\"641\":\"eef7113bc3d12ae4efe4\",\"642\":\"be93122d1116ecdc9322\",\"646\":\"29b333bf40364af9ab80\",\"670\":\"8b8ecbcfa5033da30213\",\"678\":\"50a758787fa4b84d353d\",\"709\":\"e75693a36b0fbe6508d1\",\"776\":\"8ab7c3d76984f9b6cac3\",\"781\":\"c527d73f348ae695f21a\",\"783\":\"949e247466ad3ebe82d6\",\"810\":\"0dc4677a01d387e9e564\",\"813\":\"315ffd640c7d6013a536\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [85,110], () => (__webpack_require__(2938)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","inProgress","dataWebpackPrefix","IS_BETA","DEBUG","MOUNT_CLASS_TO","window","self","STATE_VERSION","BUILD","DEFAULT_THEME","_","access_hash","id","settings","pFlags","base_theme","accent_color","message_colors","wallpaper","default","pattern","document","undefined","slug","intensity","background_color","second_background_color","third_background_color","fourth_background_color","dark","title","emoticon","makeDefaultAppTheme","name","baseTheme","highlightningColor","find","s","STATE_INIT","allDialogsLoaded","pinnedOrders","contactsListCachedTime","updates","filtersArr","maxSeenMsgId","stateCreatedTime","Date","now","recentEmoji","recentCustomEmoji","topPeersCache","recentSearch","version","build","authState","IS_MOBILE","hiddenPinnedMessages","messagesTextSize","distanceUnit","sendShortcut","animationsEnabled","autoDownload","photo","contacts","private","groups","channels","video","file","autoDownloadNew","file_size_max","video_preload_large","audio_preload_next","photo_size_max","video_size_max","video_upload_maxbitrate","autoPlay","gifs","videos","stickers","suggest","loop","emoji","big","themes","theme","notifications","sound","timeFormat","toLocaleString","match","playbackParams","volume","muted","playbackRate","playbackRates","voice","audio","round","keepSigned","chatContextMenuHintWasShown","stateId","notifySettings","IS_APPLE_MX","ctx","createElement","getContext","extension","getExtension","renderer","getParameter","UNMASKED_RENDERER_WEBGL","getSupportedExtensions","indexOf","err","CAN_USE_TRANSFERABLES","IS_SAFARI","navigator","userAgent","search","geolocation","getCurrentPosition","IMAGE_MIME_TYPES_SUPPORTED","Set","add","arr","concat","canPlayType","IS_APPLE_MOBILE","replace","IS_FIREFOX","mediaDevices","DocumentTouch","USER_AGENT","IS_APPLE","IS_ANDROID","toLowerCase","IS_CHROMIUM","test","vendor","platform","maxTouchPoints","IS_MOBILE_SAFARI","vibrate","VIDEO_MIME_TYPES_SUPPORTED","toDataURL","startsWith","rgbToHsv","r","g","b","v","Math","max","c","min","h","hsvToRgb","f","n","k","rgbaToHsla","a","l","d","hslaToRgba","hue2rgb","p","q","t","map","hexaToRgba","hexa","offset","length","slice","i","push","parseInt","hexToRgb","hex","hexaToHsla","rgba","rgbaToHexa","toString","join","hslaStringToHex","hsla","splitted","split","alpha","pop","val","endsWith","hslaStringToRgba","hslaStringToHexa","mixColors","color1","color2","weight","out","Array","v1","v2","floor","computePerceivedBrightness","color","getAverageColor","getAccentColor","baseHsv","baseColor","elementColor","hsvTemp3","hsvTemp4","dist","changeColorAccent","accentHsv","isDarkTheme","colorHsv","abs","newColor","origBrightness","newBrightness","amountOfNew","amount","changeBrightness","getHexColorFromTelegramColor","repeat","getRgbColorFromTelegramColor","getColorsFromWallPaper","wallPaper","filter","Boolean","compareVersion","s1","s2","blurActiveElement","activeElement","blur","cancelEvent","event","originalEvent","stopPropagation","preventDefault","returnValue","cancelBubble","findUpClassName","el","className","closest","fixSafariStickyInput","input","style","transform","focus","then","IS_STICKY_INPUT_BUGGED","key","startY","o","capture","passive","onTouchMove","e","touch","touches","scrollable","target","y","scrolled","scrollTop","scrollHeight","clientHeight","nextScrollTop","lastFocusOutTimeStamp","addEventListener","classList","contains","timeStamp","touchStart","removeEventListener","fixSafariStickyInputFocusing","callback","cacheInstallPrompt","deferredPrompt","prompt","outcome","userChoice","getInstallPrompt","texts","cache","fonts","text","icons","monospace","loadFonts","types","Promise","resolve","promises","type","_texts","font","weights","_promises","load","race","all","catch","setInnerHTML","elem","html","setDirection","innerHTML","replaceChildren","setAttribute","FOCUS_EVENT_NAME","IdleController","constructor","super","this","_isIdle","focusPromise","focusResolve","isIdle","once","idle","getFocusPromise","value","dispatchEvent","clamp","OverlayCounter","overlaysActive","isOverlayActive","fastRafCallbacks","fastRaf","requestAnimationFrame","currentCallbacks","forEach","cb","fastRafConventionalCallbacks","rafPromise","processing","fastRafConventional","fastRafPromise","doubleRaf","parseUriParams","uri","parseUriParamsLine","line","params","item","decodeURIComponent","appColorMap","rgb","light","lightFilled","darkRgb","darkFilled","colorMap","day","night","themeController","setTheme","themeColorElem","_themeColorElem","head","querySelector","setThemeColor","themeColor","isNight","setThemeListener","darkModeMediaQuery","matchMedia","checkDarkMode","systemTheme","matches","addListener","applyHighlightningColor","getTheme","documentElement","setProperty","removeProperty","colorScheme","toggle","applyTheme","styleElement","append","textContent","cssText","switchTheme","bindColorApplier","options","appliedColors","applyAppColor","_options","finalize","has","element","lightenAlpha","darkenAlpha","mixColor","appColor","lightenedRgb","darkenedHsla","applyNewTheme","isNightTheme","currentTheme","themeSettings","newAppTheme","AppBackgroundTab","setBackgroundDocument","isArray","baseColors","hsvTemp1","hsvTemp2","newAccentRgb","newAccentHex","messageLightenAlpha","baseMessageColor","baseMessageOutBackgroundColor","myMessagesAccent","nextColor","accentColor2","outbox_accent_color","newMessageOutBackgroundColor","workerHandler","construct","args","url","location","Worker","SharedWorker","w","Proxy","setWorkerProxy","Element","prototype","toggleAttribute","force","hasAttribute","removeAttribute","Node","nodes","rootScope","getProxiedManagers","getElementById","href","singleInstance","visualViewport","lastVH","setViewportVH","setVH","vh","overlayCounter","height","innerHeight","toggleResizeMode","tabId","onImTabChange","wasTabId","tagName","appMediaViewer","onInResize","hasFocus","onOutResize","console","log","perf","performance","langPromise","stateResult","langPack","fadeInWhenFontsReady","promise","opacity","state","isPremium","appVersion","lang_code","dir","hash","tgWebAuthToken","data","token","dcId","tgWebAuthDcId","userId","tgWebAuthUserId","toUserId","isTest","tgWebAuthTest","tgAddr","tgaddr","urlSearchParams","URLSearchParams","set","delete","pagePromise","placeholder","prepend","cloneNode","meModule","pushModule","setAuthorized","forceUnsubscribe","mount","sentCode","authCode","pause","ready","reload","close","DEBUG_MANAGER_REQUESTS","createProxyProxy","proxied","ack","get","receiver","method","warn","createProxy","acknowledged","IDB","db","storageIsAvailable","openDatabase","INSTANCES","isAvailable","createNew","openDbPromise","createIndexes","os","store","indexNames","from","indexName","deleteIndex","indexes","index","createIndex","keyPath","objectParameters","request","indexedDB","open","reject","error","message","finished","setTimeout","onerror","onsuccess","result","calledNew","onclose","onabort","transaction","onversionchange","onupgradeneeded","oldVersion","newVersion","stores","objectStoreNames","objectStore","createObjectStore","static","instance","preserve","storage","IDBStorage","storeName","idb","create","entryName","getObjectStore","clear","save","idx","put","mode","onError","clearTimeout","timeout","onComplete","results","requests","waitForTransactionComplete","oncomplete","callbackResult","left","onRequestFinished","getAll","UNSUPPORTED_LANG_PACK_KEY","I18n","pluralRules","cacheLangPackPromise","setLangCode","langCode","lastRequestedLangCode","lastRequestedNormalizedLangCode","updateAmPm","dateTimeFormat","getDateTimeFormat","hour","minute","hour12","date","setHours","amText","format","amPmCache","am","pmText","pm","loadLocalLangPack","defaultCode","lang","langSign","countries","strings","formatLocalStrings","saveLangPack","from_version","local","loadLangPack","web","requestedServerLanguage","managers","apiManager","invokeApiCacheable","lang_pack","polyfillPromise","pushTo","applyLangPack","currentLangCode","Intl","PluralRules","string","countriesList","country","langPackKey","default_name","lastAppliedLangCode","cachedDateTimeFormats","querySelectorAll","weakMap","update","superFormatter","indexHolder","lastIndex","p1","p2","p3","p4","lastIndexOf","wrappedUrl","onclick","DocumentFragment","firstChild","arg","pushNextArgument","plain","str","select","Map","isRTL","setRTL","rtl","getCacheLangPack","finally","setTimeFormat","haveToUpdate","IntlDateElement","getStrings","keys","getLangPack","langPack1","langPack2","localLangPack1","localLangPack2","_Intl","Object","assign","WeakMap","IntlElementBase","property","IntlElement","formatted","dataset","compareAndUpdate","json","JSON","stringify","DateTimeFormat","hours","getHours","getMinutes","i18n","i18n_","_i18n","joinElementsWith","elements","joiner","isLast","useLast","joined","NULL_PEER_ID","REPLIES_PEER_ID","REPLIES_HIDDEN_CHANNEL_ID","SERVICE_PEER_ID","MUTE_UNTIL","BOT_START_PARAM","MAX_FILE_SAVE_SIZE","THUMB_TYPE_FULL","TOPIC_COLORS","ATTACH_MENU_BOT_ICON_NAME","GENERAL_TOPIC_ID","T_ME_PREFIXES","FOLDER_ID_ALL","FOLDER_ID_ARCHIVE","REAL_FOLDERS","IS_CALL_SUPPORTED","IS_CANVAS_FILTER_SUPPORTED","IS_EMOJI_SUPPORTED","IS_GEOLOCATION_SUPPORTED","IS_GROUP_CALL_SUPPORTED","IS_MOV_SUPPORTED","IS_PARALLAX_SUPPORTED","IS_SCREEN_SHARING_SUPPORTED","IS_TOUCH_SUPPORTED","IS_VIBRATE_SUPPORTED","IS_OPUS_SUPPORTED","IS_SHARED_WORKER_SUPPORTED","IS_WEBM_SUPPORTED","IS_WEBP_SUPPORTED","IS_WEBRTC_SUPPORTED","MEDIA_MIME_TYPES_SUPPORTED","ALL_KEYS","REFRESH_KEYS","loadStateInner","logger","totalPerf","recordPromise","stateStorage","sessionStorage","pushedKeys","pushToState","copy","splice","auth","shift","sessionBuild","shiftedWebKAuth","values","dcID","toPeerId","obj","resetStorages","chats","dialogs","users","_state","state_id","time","autoDownloadSettings","oldTypes","mediaType","peerTypeSettings","peerType","SKIP_VALIDATING_PATHS","validateInitObject","missingKey","migrated","oldThemes","oldTheme","oldBackground","background","newTheme","colors","wallPaperSettings","k_build","ApiManagerProxy","onMirrorTask","payload","hasOwnProperty","mirrors","mirror","tabState","chatPeerIds","idleStartTime","registerWorker","registerServiceWorker","registerCryptoWorker","addMultipleEventsListeners","convertWebp","fileName","bytes","webpWorkerController","convertOpus","opusDecodeController","localStorageProxy","storageTask","language","toggleStorages","telegramMeWebManager","webPushApiManager","cacheName","caches","appRuntimeManager","idleController","updateTabStateIdle","invoke","pingServiceWorkerWithIframe","pingServiceWorkerPromise","iframe","hidden","onLoad","remove","src","random","body","attachServiceWorker","serviceWorker","lastServiceWorker","serviceMessagePort","detachPort","attachSendPort","invokeVoid","_registerServiceWorker","register","URL","scope","registration","active","controller","unregister","installing","waiting","worker","attachListenPort","port","source","ports","hello","resendLockTask","share","originals","originalUrl","createWorker","attachWorkerToPort","cryptoMessagePort","blob","fetch","response","pathnameSplitted","pathname","origin","Blob","onWorkerFirstMessage","messagePort","attachPort","loadState","sendState","invokeCrypto","enabled","clearWrite","getMirror","getState","updateTabState","apiManagerProxy","IS_MULTIPLE_TABS_SUPPORTED","SingleInstance","clearInstance","masterInstance","deactivated","checkInstance","newInstance","instanceId","curInstance","deactivateInstance","xt_instance","clearDeactivateTimeout","deactivateTimeout","deactivatedReason","start","reset","started","setInterval","activateInstance","reason","TelegramMeWebManager","disabled","hostname","canRedirect","curValue","ts","tsNow","tgme_sync","path","encodeURIComponent","script","onload","appendChild","loadScript","WebPushApiManager","isPushEnabled","localNotificationsAvailable","isFirefox","userVisibleOnly","subscribe","reg","pushManager","subscription","pushSubscriptionNotify","Notification","permission","isAliveNotify","baseUrl","ACTIONS_LANG_MAP","push_action_mute1d","push_action_settings","push_message_nopreview","action","localNotifications","isAliveTO","getSubscription","setUpServiceWorkerChannel","setLocalNotificationsDisabled","unsubscribe","successful","setSettings","newSettings","hidePushNotifications","subscriptionObj","toJSON","endpoint","p256dh","tokenType","tokenValue","ignorePushByMid","peerId","mid","sampleRate","tasks","keepAlive","isPlaySupported","loadWavWorker","wavWorker","page","onTaskEnd","loadWorker","postMessage","command","waveform","buffers","typedArray","buffer","setKeepAlive","terminateWorkers","task","executeNewTask","kill","terminate","decoderSampleRate","outputBufferSampleRate","wavBitDepth","wavSampleRate","pages","withWaveform","pushDecodeTask","decode","dataBlob","ALPHA_CHARS_REG_EXP","ALPHA_NUMERIC_REG_EXP","URL_ALPHANUMERIC_REG_EXP_PART","URL_PROTOCOL_REG_EXP_PART","URL_REG_EXP","URL_ANY_PROTOCOL_REG_EXP","RegExp","USERNAME_REG_EXP","BOT_COMMAND_REG_EXP","FULL_REG_EXP","EMAIL_REG_EXP","MARKDOWN_REG_EXP","SITE_HASHTAGS","MARKDOWN_ENTITIES","PASS_CONFLICTING_ENTITIES","PHONE_NUMBER_REG_EXP","wrapUrl","unsafe","tgMeMatch","telescoPeMatch","tgMatch","u","prefix","fullPath","RootScope","myId","connectionStatus","premium","isNew","dispatchEventSingle","status","getConnectionStatus","getPremium","convertPromises","init","convert","convertPromise","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","every","getter","__esModule","getPrototypeOf","ns","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","chunkId","reduce","miniCssF","globalThis","Function","prop","done","needAttach","scripts","getElementsByTagName","getAttribute","charset","nc","onScriptComplete","prev","doneFns","parentNode","removeChild","bind","Symbol","toStringTag","scriptUrl","importScripts","currentScript","Error","oldGetScript","oldLoadScript","queryMap","countMap","retries","realSrc","cacheBust","baseURI","installedChunks","installedChunkData","errorType","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file diff --git a/public/mtproto.worker.50a758787fa4b84d353d.chunk.js b/public/mtproto.worker.8a2c8d1f5534b5f54052.chunk.js similarity index 99% rename from public/mtproto.worker.50a758787fa4b84d353d.chunk.js rename to public/mtproto.worker.8a2c8d1f5534b5f54052.chunk.js index 483c8b35..982cf72f 100644 --- a/public/mtproto.worker.50a758787fa4b84d353d.chunk.js +++ b/public/mtproto.worker.8a2c8d1f5534b5f54052.chunk.js @@ -1,2 +1,2 @@ -(()=>{"use strict";var e,t,a={410:(e,t,a)=>{a.d(t,{GO:()=>n,ZP:()=>i});const s=a(1267).Z.debug,n="undefined"!=typeof window?window:self,i=s},3447:(e,t,a)=>{a.d(t,{Z:()=>i});const s={14:{"1f6dd":4867,"1f6de":4916,"1f6df":4923,"1f7f0":62832,"1f979":183,"1f9cc":1557,"1fa7b":61332,"1fa7c":61330,"1faa9":51093,"1faaa":61364,"1faab":61189,"1faac":51085,"1fab7":2651,"1fab8":2631,"1fab9":2672,"1faba":2673,"1fac3":1520,"1fac4":1521,"1fac5":1505,"1fad7":3793,"1fad8":3707,"1fad9":3804,"1fae0":111,"1fae1":136,"1fae2":132,"1fae3":133,"1fae4":174,"1fae5":142,"1fae6":1385,"1fae7":61353,"1faf0":1341,"1faf1":1332,"1faf2":1333,"1faf3":1334,"1faf4":1335,"1faf5":1351,"1faf6":1360,"1faf1-1f3fb-200d-1faf2-1f3fc":0,"1faf1-1f3fb-200d-1faf2-1f3fd":0,"1faf1-1f3fb-200d-1faf2-1f3fe":0,"1faf1-1f3fb-200d-1faf2-1f3ff":0,"1faf1-1f3fc-200d-1faf2-1f3fb":0,"1faf1-1f3fc-200d-1faf2-1f3fd":0,"1faf1-1f3fc-200d-1faf2-1f3fe":0,"1faf1-1f3fc-200d-1faf2-1f3ff":0,"1faf1-1f3fd-200d-1faf2-1f3fb":0,"1faf1-1f3fd-200d-1faf2-1f3fc":0,"1faf1-1f3fd-200d-1faf2-1f3fe":0,"1faf1-1f3fd-200d-1faf2-1f3ff":0,"1faf1-1f3fe-200d-1faf2-1f3fb":0,"1faf1-1f3fe-200d-1faf2-1f3fc":0,"1faf1-1f3fe-200d-1faf2-1f3fd":0,"1faf1-1f3fe-200d-1faf2-1f3ff":0,"1faf1-1f3ff-200d-1faf2-1f3fb":0,"1faf1-1f3ff-200d-1faf2-1f3fc":0,"1faf1-1f3ff-200d-1faf2-1f3fd":0,"1faf1-1f3ff-200d-1faf2-1f3fe":0,"1fac3-1f3fb":0,"1fac3-1f3fc":0,"1fac3-1f3fd":0,"1fac3-1f3fe":0,"1fac3-1f3ff":0,"1fac4-1f3fb":0,"1fac4-1f3fc":0,"1fac4-1f3fd":0,"1fac4-1f3fe":0,"1fac4-1f3ff":0,"1fac5-1f3fb":0,"1fac5-1f3fc":0,"1fac5-1f3fd":0,"1fac5-1f3fe":0,"1fac5-1f3ff":0,"1faf0-1f3fb":0,"1faf0-1f3fc":0,"1faf0-1f3fd":0,"1faf0-1f3fe":0,"1faf0-1f3ff":0,"1faf1-1f3fb":0,"1faf1-1f3fc":0,"1faf1-1f3fd":0,"1faf1-1f3fe":0,"1faf1-1f3ff":0,"1faf2-1f3fb":0,"1faf2-1f3fc":0,"1faf2-1f3fd":0,"1faf2-1f3fe":0,"1faf2-1f3ff":0,"1faf3-1f3fb":0,"1faf3-1f3fc":0,"1faf3-1f3fd":0,"1faf3-1f3fe":0,"1faf3-1f3ff":0,"1faf4-1f3fb":0,"1faf4-1f3fc":0,"1faf4-1f3fd":0,"1faf4-1f3fe":0,"1faf4-1f3ff":0,"1faf5-1f3fb":0,"1faf5-1f3fc":0,"1faf5-1f3fd":0,"1faf5-1f3fe":0,"1faf5-1f3ff":0,"1faf6-1f3fb":0,"1faf6-1f3fc":0,"1faf6-1f3fd":0,"1faf6-1f3fe":0,"1faf6-1f3ff":0},"":{2049:62835,2122:62863,2139:62888,2194:62764,2195:62763,2196:62762,2197:62756,2198:62758,2199:62760,2328:61194,2600:4990,2601:4998,2602:41013,2603:41018,2604:41020,2611:62851,2614:41014,2615:3781,2618:2667,2620:1106,2622:62753,2623:62754,2626:62783,2638:62780,2639:177,2648:62788,2649:62789,2650:62796,2651:62797,2652:62798,2653:62799,2660:51095,2663:51098,2665:51096,2666:51097,2668:4865,2692:61297,2693:4922,2694:61300,2696:61311,2697:61319,2699:61309,2702:61284,2705:62850,2708:4931,2709:61245,2712:61259,2714:62852,2716:62828,2721:62779,2728:51029,2733:62858,2734:62859,2744:41017,2747:62860,2753:62836,2754:62837,2755:62838,2757:62839,2763:1137,2764:1141,2795:62829,2796:62830,2797:62831,2934:62767,2935:62768,3030:62840,3297:62912,3299:62913,"0023-20e3":62864,"002a-20e3":62865,"0030-20e3":62866,"0031-20e3":62867,"0032-20e3":62868,"0033-20e3":62869,"0034-20e3":62870,"0035-20e3":62871,"0036-20e3":62872,"0037-20e3":62873,"0038-20e3":62874,"0039-20e3":62875,"00a9":62861,"00ae":62862,"1f004":51101,"1f0cf":51100,"1f170":62882,"1f171":62884,"1f17e":62893,"1f17f":62895,"1f18e":62883,"1f191":62885,"1f192":62886,"1f193":62887,"1f194":62889,"1f195":62891,"1f196":62892,"1f197":62894,"1f198":62896,"1f199":62897,"1f19a":62898,"1f1e6-1f1e8":71594,"1f1e6-1f1e9":71595,"1f1e6-1f1ea":71596,"1f1e6-1f1eb":71597,"1f1e6-1f1ec":71598,"1f1e6-1f1ee":71599,"1f1e6-1f1f1":71600,"1f1e6-1f1f2":71601,"1f1e6-1f1f4":71602,"1f1e6-1f1f6":71603,"1f1e6-1f1f7":71604,"1f1e6-1f1f8":71605,"1f1e6-1f1f9":71606,"1f1e6-1f1fa":71607,"1f1e6-1f1fc":71608,"1f1e6-1f1fd":71609,"1f1e6-1f1ff":71610,"1f1e7-1f1e6":71611,"1f1e7-1f1e7":71612,"1f1e7-1f1e9":71613,"1f1e7-1f1ea":71614,"1f1e7-1f1eb":71615,"1f1e7-1f1ec":71616,"1f1e7-1f1ed":71617,"1f1e7-1f1ee":71618,"1f1e7-1f1ef":71619,"1f1e7-1f1f1":71620,"1f1e7-1f1f2":71621,"1f1e7-1f1f3":71622,"1f1e7-1f1f4":71623,"1f1e7-1f1f6":71624,"1f1e7-1f1f7":71625,"1f1e7-1f1f8":71626,"1f1e7-1f1f9":71627,"1f1e7-1f1fb":71628,"1f1e7-1f1fc":71629,"1f1e7-1f1fe":71630,"1f1e7-1f1ff":71631,"1f1e8-1f1e6":71632,"1f1e8-1f1e8":71633,"1f1e8-1f1e9":71634,"1f1e8-1f1eb":71635,"1f1e8-1f1ec":71636,"1f1e8-1f1ed":71637,"1f1e8-1f1ee":71638,"1f1e8-1f1f0":71639,"1f1e8-1f1f1":71640,"1f1e8-1f1f2":71641,"1f1e8-1f1f3":71642,"1f1e8-1f1f4":71643,"1f1e8-1f1f5":71644,"1f1e8-1f1f7":71645,"1f1e8-1f1fa":71646,"1f1e8-1f1fb":71647,"1f1e8-1f1fc":71648,"1f1e8-1f1fd":71649,"1f1e8-1f1fe":71650,"1f1e8-1f1ff":71651,"1f1e9-1f1ea":71652,"1f1e9-1f1ec":71653,"1f1e9-1f1ef":71654,"1f1e9-1f1f0":71655,"1f1e9-1f1f2":71656,"1f1e9-1f1f4":71657,"1f1e9-1f1ff":71658,"1f1ea-1f1e6":71659,"1f1ea-1f1e8":71660,"1f1ea-1f1ea":71661,"1f1ea-1f1ec":71662,"1f1ea-1f1ed":71663,"1f1ea-1f1f7":71664,"1f1ea-1f1f8":71665,"1f1ea-1f1f9":71666,"1f1ea-1f1fa":71667,"1f1eb-1f1ee":71668,"1f1eb-1f1ef":71669,"1f1eb-1f1f0":71670,"1f1eb-1f1f2":71671,"1f1eb-1f1f4":71672,"1f1eb-1f1f7":71673,"1f1ec-1f1e6":71674,"1f1ec-1f1e7":71675,"1f1ec-1f1e9":71676,"1f1ec-1f1ea":71677,"1f1ec-1f1eb":71678,"1f1ec-1f1ec":71679,"1f1ec-1f1ed":71680,"1f1ec-1f1ee":71681,"1f1ec-1f1f1":71682,"1f1ec-1f1f2":71683,"1f1ec-1f1f3":71684,"1f1ec-1f1f5":71685,"1f1ec-1f1f6":71686,"1f1ec-1f1f7":71687,"1f1ec-1f1f8":71688,"1f1ec-1f1f9":71689,"1f1ec-1f1fa":71690,"1f1ec-1f1fc":71691,"1f1ec-1f1fe":71692,"1f1ed-1f1f0":71693,"1f1ed-1f1f2":71694,"1f1ed-1f1f3":71695,"1f1ed-1f1f7":71696,"1f1ed-1f1f9":71697,"1f1ed-1f1fa":71698,"1f1ee-1f1e8":71699,"1f1ee-1f1e9":71700,"1f1ee-1f1ea":71701,"1f1ee-1f1f1":71702,"1f1ee-1f1f2":71703,"1f1ee-1f1f3":71704,"1f1ee-1f1f4":71705,"1f1ee-1f1f6":71706,"1f1ee-1f1f7":71707,"1f1ee-1f1f8":71708,"1f1ee-1f1f9":71709,"1f1ef-1f1ea":71710,"1f1ef-1f1f2":71711,"1f1ef-1f1f4":71712,"1f1ef-1f1f5":71713,"1f1f0-1f1ea":71714,"1f1f0-1f1ec":71715,"1f1f0-1f1ed":71716,"1f1f0-1f1ee":71717,"1f1f0-1f1f2":71718,"1f1f0-1f1f3":71719,"1f1f0-1f1f5":71720,"1f1f0-1f1f7":71721,"1f1f0-1f1fc":71722,"1f1f0-1f1fe":71723,"1f1f0-1f1ff":71724,"1f1f1-1f1e6":71725,"1f1f1-1f1e7":71726,"1f1f1-1f1e8":71727,"1f1f1-1f1ee":71728,"1f1f1-1f1f0":71729,"1f1f1-1f1f7":71730,"1f1f1-1f1f8":71731,"1f1f1-1f1f9":71732,"1f1f1-1f1fa":71733,"1f1f1-1f1fb":71734,"1f1f1-1f1fe":71735,"1f1f2-1f1e6":71736,"1f1f2-1f1e8":71737,"1f1f2-1f1e9":71738,"1f1f2-1f1ea":71739,"1f1f2-1f1eb":71740,"1f1f2-1f1ec":71741,"1f1f2-1f1ed":71742,"1f1f2-1f1f0":71743,"1f1f2-1f1f1":71744,"1f1f2-1f1f2":71745,"1f1f2-1f1f3":71746,"1f1f2-1f1f4":71747,"1f1f2-1f1f5":71748,"1f1f2-1f1f6":71749,"1f1f2-1f1f7":71750,"1f1f2-1f1f8":71751,"1f1f2-1f1f9":71752,"1f1f2-1f1fa":71753,"1f1f2-1f1fb":71754,"1f1f2-1f1fc":71755,"1f1f2-1f1fd":71756,"1f1f2-1f1fe":71757,"1f1f2-1f1ff":71758,"1f1f3-1f1e6":71759,"1f1f3-1f1e8":71760,"1f1f3-1f1ea":71761,"1f1f3-1f1eb":71762,"1f1f3-1f1ec":71763,"1f1f3-1f1ee":71764,"1f1f3-1f1f1":71765,"1f1f3-1f1f4":71766,"1f1f3-1f1f5":71767,"1f1f3-1f1f7":71768,"1f1f3-1f1fa":71769,"1f1f3-1f1ff":71770,"1f1f4-1f1f2":71771,"1f1f5-1f1e6":71772,"1f1f5-1f1ea":71773,"1f1f5-1f1eb":71774,"1f1f5-1f1ec":71775,"1f1f5-1f1ed":71776,"1f1f5-1f1f0":71777,"1f1f5-1f1f1":71778,"1f1f5-1f1f2":71779,"1f1f5-1f1f3":71780,"1f1f5-1f1f7":71781,"1f1f5-1f1f8":71782,"1f1f5-1f1f9":71783,"1f1f5-1f1fc":71784,"1f1f5-1f1fe":71785,"1f1f6-1f1e6":71786,"1f1f7-1f1ea":71787,"1f1f7-1f1f4":71788,"1f1f7-1f1f8":71789,"1f1f7-1f1fa":71790,"1f1f7-1f1fc":71791,"1f1f8-1f1e6":71792,"1f1f8-1f1e7":71793,"1f1f8-1f1e8":71794,"1f1f8-1f1e9":71795,"1f1f8-1f1ea":71796,"1f1f8-1f1ec":71797,"1f1f8-1f1ed":71798,"1f1f8-1f1ee":71799,"1f1f8-1f1ef":71800,"1f1f8-1f1f0":71801,"1f1f8-1f1f1":71802,"1f1f8-1f1f2":71803,"1f1f8-1f1f3":71804,"1f1f8-1f1f4":71805,"1f1f8-1f1f7":71806,"1f1f8-1f1f8":71807,"1f1f8-1f1f9":71808,"1f1f8-1f1fb":71809,"1f1f8-1f1fd":71810,"1f1f8-1f1fe":71811,"1f1f8-1f1ff":71812,"1f1f9-1f1e6":71813,"1f1f9-1f1e8":71814,"1f1f9-1f1e9":71815,"1f1f9-1f1eb":71816,"1f1f9-1f1ec":71817,"1f1f9-1f1ed":71818,"1f1f9-1f1ef":71819,"1f1f9-1f1f0":71820,"1f1f9-1f1f1":71821,"1f1f9-1f1f2":71822,"1f1f9-1f1f3":71823,"1f1f9-1f1f4":71824,"1f1f9-1f1f7":71825,"1f1f9-1f1f9":71826,"1f1f9-1f1fb":71827,"1f1f9-1f1fc":71828,"1f1f9-1f1ff":71829,"1f1fa-1f1e6":71830,"1f1fa-1f1ec":71831,"1f1fa-1f1f2":71832,"1f1fa-1f1f3":71833,"1f1fa-1f1f8":71834,"1f1fa-1f1fe":71835,"1f1fa-1f1ff":71836,"1f1fb-1f1e6":71837,"1f1fb-1f1e8":71838,"1f1fb-1f1ea":71839,"1f1fb-1f1ec":71840,"1f1fb-1f1ee":71841,"1f1fb-1f1f3":71842,"1f1fb-1f1fa":71843,"1f1fc-1f1eb":71844,"1f1fc-1f1f8":71845,"1f1fd-1f1f0":71846,"1f1fe-1f1ea":71847,"1f1fe-1f1f9":71848,"1f1ff-1f1e6":71849,"1f1ff-1f1f2":71850,"1f1ff-1f1fc":71851,"1f201":62899,"1f202":62900,"1f21a":62906,"1f22f":62903,"1f232":62907,"1f233":62911,"1f234":62910,"1f235":62915,"1f236":62902,"1f237":62901,"1f238":62909,"1f239":62905,"1f23a":62914,"1f250":62904,"1f251":62908,"1f300":41010,"1f301":4857,"1f302":41012,"1f303":4858,"1f304":4860,"1f305":4861,"1f306":4862,"1f307":4863,"1f308":41011,"1f309":4864,"1f30a":41023,"1f30b":4815,"1f30c":4997,"1f30d":4806,"1f30e":4807,"1f30f":4808,"1f310":4809,"1f311":4977,"1f312":4978,"1f313":4979,"1f314":4980,"1f315":4981,"1f316":4982,"1f317":4983,"1f318":4984,"1f319":4985,"1f31a":4986,"1f31b":4987,"1f31c":4988,"1f31d":4991,"1f31e":4992,"1f31f":4995,"1f320":4996,"1f321":4989,"1f324":41001,"1f325":41002,"1f326":41003,"1f327":41004,"1f328":41005,"1f329":41006,"1f32a":41007,"1f32b":41008,"1f32c":41009,"1f32d":3725,"1f32e":3727,"1f32f":3728,"1f330":3708,"1f331":2659,"1f332":2661,"1f333":2662,"1f334":2663,"1f335":2664,"1f336":3698,"1f337":2658,"1f338":2649,"1f339":2653,"1f33a":2655,"1f33b":2656,"1f33c":2657,"1f33d":3697,"1f33e":2665,"1f33f":2666,"1f340":2668,"1f341":2669,"1f342":2670,"1f343":2671,"1f344":3705,"1f345":3690,"1f346":3694,"1f347":3674,"1f348":3675,"1f349":3676,"1f34a":3677,"1f34b":3678,"1f34c":3679,"1f34d":3680,"1f34e":3682,"1f34f":3683,"1f350":3684,"1f351":3685,"1f352":3686,"1f353":3687,"1f354":3722,"1f355":3724,"1f356":3718,"1f357":3719,"1f358":3744,"1f359":3745,"1f35a":3746,"1f35b":3747,"1f35c":3748,"1f35d":3749,"1f35e":3709,"1f35f":3723,"1f360":3750,"1f361":3756,"1f362":3751,"1f363":3752,"1f364":3753,"1f365":3754,"1f366":3765,"1f367":3766,"1f368":3767,"1f369":3768,"1f36a":3769,"1f36b":3774,"1f36c":3775,"1f36d":3776,"1f36e":3777,"1f36f":3778,"1f370":3771,"1f371":3743,"1f372":3735,"1f373":3733,"1f374":3801,"1f375":3783,"1f376":3784,"1f377":3786,"1f378":3787,"1f379":3788,"1f37a":3789,"1f37b":3790,"1f37c":3779,"1f37d":3800,"1f37e":3785,"1f37f":3739,"1f380":51040,"1f381":51041,"1f382":3770,"1f383":51024,"1f384":51025,"1f385":1527,"1f386":51026,"1f387":51027,"1f388":51030,"1f389":51031,"1f38a":51032,"1f38b":51033,"1f38c":71588,"1f38d":51034,"1f38e":51035,"1f38f":51036,"1f390":51037,"1f391":51038,"1f392":61134,"1f393":61147,"1f396":51045,"1f397":51042,"1f399":61167,"1f39a":61168,"1f39b":61169,"1f39e":61203,"1f39f":51043,"1f3a0":4866,"1f3a1":4868,"1f3a2":4869,"1f3a3":51072,"1f3a4":61170,"1f3a5":61202,"1f3a6":62819,"1f3a7":61171,"1f3a8":51105,"1f3a9":61146,"1f3aa":4871,"1f3ab":51044,"1f3ac":61205,"1f3ad":51103,"1f3ae":51086,"1f3af":51078,"1f3b0":51088,"1f3b1":51081,"1f3b2":51089,"1f3b3":51060,"1f3b4":51102,"1f3b5":61165,"1f3b6":61166,"1f3b7":61173,"1f3b8":61175,"1f3b9":61176,"1f3ba":61177,"1f3bb":61178,"1f3bc":61164,"1f3bd":51074,"1f3be":51058,"1f3bf":51075,"1f3c0":51054,"1f3c1":71586,"1f3c2":1600,"1f3c3-200d-2640":1584,"1f3c3-200d-2642":1583,"1f3c3":1582,"1f3c4-200d-2640":1606,"1f3c4-200d-2642":1605,"1f3c4":1604,"1f3c5":51047,"1f3c6":51046,"1f3c7":1598,"1f3c8":51056,"1f3c9":51057,"1f3ca-200d-2640":1612,"1f3ca-200d-2642":1611,"1f3ca":1610,"1f3cb-200d-2640":1618,"1f3cb-200d-2642":1617,"1f3cb":1616,"1f3cc-200d-2640":1603,"1f3cc-200d-2642":1602,"1f3cc":1601,"1f3cd":4902,"1f3ce":4901,"1f3cf":51061,"1f3d0":51055,"1f3d1":51062,"1f3d2":51063,"1f3d3":51065,"1f3d4":4813,"1f3d5":4817,"1f3d6":4818,"1f3d7":4824,"1f3d8":4829,"1f3d9":4859,"1f3da":4830,"1f3db":4823,"1f3dc":4819,"1f3dd":4820,"1f3de":4821,"1f3df":4822,"1f3e0":4831,"1f3e1":4832,"1f3e2":4833,"1f3e3":4834,"1f3e4":4835,"1f3e5":4836,"1f3e6":4837,"1f3e7":62729,"1f3e8":4838,"1f3e9":4839,"1f3ea":4840,"1f3eb":4841,"1f3ec":4842,"1f3ed":4843,"1f3ee":61216,"1f3ef":4844,"1f3f0":4845,"1f3f3-200d-1f308":71591,"1f3f3-200d-26a7":71592,"1f3f3":71590,"1f3f4-200d-2620":71593,"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f":71852,"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f":71853,"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f":71854,"1f3f4":71589,"1f3f5":2652,"1f3f7":61234,"1f3f8":51066,"1f3f9":61303,"1f3fa":3805,"1f3fb":9525,"1f3fc":9526,"1f3fd":9527,"1f3fe":9528,"1f3ff":9529,"1f400":2576,"1f401":2575,"1f402":2556,"1f403":2557,"1f404":2558,"1f405":2547,"1f406":2548,"1f407":2579,"1f408-200d-2b1b":2544,"1f408":2543,"1f409":2618,"1f40a":2613,"1f40b":2622,"1f40c":2632,"1f40d":2616,"1f40e":2550,"1f40f":2563,"1f410":2565,"1f411":2564,"1f412":2531,"1f413":2596,"1f414":2595,"1f415-200d-1f9ba":2537,"1f415":2535,"1f416":2560,"1f417":2561,"1f418":2570,"1f419":2629,"1f41a":2630,"1f41b":2634,"1f41c":2635,"1f41d":2636,"1f41e":2638,"1f41f":2625,"1f420":2626,"1f421":2627,"1f422":2614,"1f423":2597,"1f424":2598,"1f425":2599,"1f426":2600,"1f427":2601,"1f428":2586,"1f429":2538,"1f42a":2566,"1f42b":2567,"1f42c":2623,"1f42d":2574,"1f42e":2555,"1f42f":2546,"1f430":2578,"1f431":2542,"1f432":2617,"1f433":2621,"1f434":2549,"1f435":2530,"1f436":2534,"1f437":2559,"1f438":2612,"1f439":2577,"1f43a":2539,"1f43b-200d-2744":2585,"1f43b":2584,"1f43c":2587,"1f43d":2562,"1f43e":2593,"1f43f":2580,"1f440":1381,"1f441-200d-1f5e8":1159,"1f441":1382,"1f442":1373,"1f443":1375,"1f444":1384,"1f445":1383,"1f446":1347,"1f447":1349,"1f448":1345,"1f449":1346,"1f44a":1355,"1f44b":1327,"1f44c":1336,"1f44d":1352,"1f44e":1353,"1f44f":1358,"1f450":1361,"1f451":61144,"1f452":61145,"1f453":61110,"1f454":61115,"1f455":61116,"1f456":61117,"1f457":61122,"1f458":61123,"1f459":61128,"1f45a":61129,"1f45b":61130,"1f45c":61131,"1f45d":61132,"1f45e":61136,"1f45f":61137,"1f460":61140,"1f461":61141,"1f462":61143,"1f463":1687,"1f464":1684,"1f465":1685,"1f466":1388,"1f467":1389,"1f468-200d-1f33e":1457,"1f468-200d-1f373":1460,"1f468-200d-1f37c":1524,"1f468-200d-1f393":1448,"1f468-200d-1f3a4":1478,"1f468-200d-1f3a8":1481,"1f468-200d-1f3eb":1451,"1f468-200d-1f3ed":1466,"1f468-200d-1f466-200d-1f466":1674,"1f468-200d-1f466":1673,"1f468-200d-1f467-200d-1f466":1676,"1f468-200d-1f467-200d-1f467":1677,"1f468-200d-1f467":1675,"1f468-200d-1f468-200d-1f466":1663,"1f468-200d-1f468-200d-1f466-200d-1f466":1666,"1f468-200d-1f468-200d-1f467":1664,"1f468-200d-1f468-200d-1f467-200d-1f466":1665,"1f468-200d-1f468-200d-1f467-200d-1f467":1667,"1f468-200d-1f469-200d-1f466":1658,"1f468-200d-1f469-200d-1f466-200d-1f466":1661,"1f468-200d-1f469-200d-1f467":1659,"1f468-200d-1f469-200d-1f467-200d-1f466":1660,"1f468-200d-1f469-200d-1f467-200d-1f467":1662,"1f468-200d-1f4bb":1475,"1f468-200d-1f4bc":1469,"1f468-200d-1f527":1463,"1f468-200d-1f52c":1472,"1f468-200d-1f680":1487,"1f468-200d-1f692":1490,"1f468-200d-1f9af":1574,"1f468-200d-1f9b0":1396,"1f468-200d-1f9b1":1397,"1f468-200d-1f9b2":1399,"1f468-200d-1f9b3":1398,"1f468-200d-1f9bc":1577,"1f468-200d-1f9bd":1580,"1f468-200d-2695":1445,"1f468-200d-2696":1454,"1f468-200d-2708":1484,"1f468-200d-2764-200d-1f468":1655,"1f468-200d-2764-200d-1f48b-200d-1f468":1651,"1f468":1392,"1f469-200d-1f33e":1458,"1f469-200d-1f373":1461,"1f469-200d-1f37c":1523,"1f469-200d-1f393":1449,"1f469-200d-1f3a4":1479,"1f469-200d-1f3a8":1482,"1f469-200d-1f3eb":1452,"1f469-200d-1f3ed":1467,"1f469-200d-1f466-200d-1f466":1679,"1f469-200d-1f466":1678,"1f469-200d-1f467-200d-1f466":1681,"1f469-200d-1f467-200d-1f467":1682,"1f469-200d-1f467":1680,"1f469-200d-1f469-200d-1f466":1668,"1f469-200d-1f469-200d-1f466-200d-1f466":1671,"1f469-200d-1f469-200d-1f467":1669,"1f469-200d-1f469-200d-1f467-200d-1f466":1670,"1f469-200d-1f469-200d-1f467-200d-1f467":1672,"1f469-200d-1f4bb":1476,"1f469-200d-1f4bc":1470,"1f469-200d-1f527":1464,"1f469-200d-1f52c":1473,"1f469-200d-1f680":1488,"1f469-200d-1f692":1491,"1f469-200d-1f9af":1575,"1f469-200d-1f9b0":1401,"1f469-200d-1f9b1":1403,"1f469-200d-1f9b2":1407,"1f469-200d-1f9b3":1405,"1f469-200d-1f9bc":1578,"1f469-200d-1f9bd":1581,"1f469-200d-2695":1446,"1f469-200d-2696":1455,"1f469-200d-2708":1485,"1f469-200d-2764-200d-1f468":1654,"1f469-200d-2764-200d-1f469":1656,"1f469-200d-2764-200d-1f48b-200d-1f468":1650,"1f469-200d-2764-200d-1f48b-200d-1f469":1652,"1f469":1400,"1f46a":1657,"1f46b":1647,"1f46c":1648,"1f46d":1646,"1f46e-200d-2640":1494,"1f46e-200d-2642":1493,"1f46e":1492,"1f46f-200d-2640":1590,"1f46f-200d-2642":1589,"1f46f":1588,"1f470-200d-2640":1518,"1f470-200d-2642":1517,"1f470":1516,"1f471-200d-2640":1409,"1f471-200d-2642":1410,"1f471":1391,"1f472":1511,"1f473-200d-2640":1510,"1f473-200d-2642":1509,"1f473":1508,"1f474":1412,"1f475":1413,"1f476":1386,"1f477-200d-2640":1504,"1f477-200d-2642":1503,"1f477":1502,"1f478":1507,"1f479":1109,"1f47a":1110,"1f47b":1111,"1f47c":1526,"1f47d":1112,"1f47e":1113,"1f47f":1104,"1f480":1105,"1f481-200d-2640":1428,"1f481-200d-2642":1427,"1f481":1426,"1f482-200d-2640":1500,"1f482-200d-2642":1499,"1f482":1498,"1f483":1585,"1f484":61152,"1f485":1366,"1f486-200d-2640":1560,"1f486-200d-2642":1559,"1f486":1558,"1f487-200d-2640":1563,"1f487-200d-2642":1562,"1f487":1561,"1f488":4870,"1f489":61326,"1f48a":61328,"1f48b":1127,"1f48c":1128,"1f48d":61153,"1f48e":61154,"1f48f":1649,"1f490":2648,"1f491":1653,"1f492":4846,"1f493":1133,"1f494":1138,"1f495":1135,"1f496":1131,"1f497":1132,"1f498":1129,"1f499":1145,"1f49a":1144,"1f49b":1143,"1f49c":1146,"1f49d":1130,"1f49e":1134,"1f49f":1136,"1f4a0":62946,"1f4a1":61214,"1f4a2":1151,"1f4a3":1157,"1f4a4":1163,"1f4a5":1152,"1f4a6":1154,"1f4a7":41022,"1f4a8":1155,"1f4a9":1107,"1f4aa":1368,"1f4ab":1153,"1f4ac":1158,"1f4ad":1162,"1f4ae":2650,"1f4af":1150,"1f4b0":61235,"1f4b1":62841,"1f4b2":62842,"1f4b3":61242,"1f4b4":61237,"1f4b5":61238,"1f4b6":61239,"1f4b7":61240,"1f4b8":61241,"1f4b9":61244,"1f4ba":4936,"1f4bb":61191,"1f4bc":61265,"1f4bd":61197,"1f4be":61198,"1f4bf":61199,"1f4c0":61200,"1f4c1":61266,"1f4c2":61267,"1f4c3":61227,"1f4c4":61229,"1f4c5":61269,"1f4c6":61270,"1f4c7":61273,"1f4c8":61274,"1f4c9":61275,"1f4ca":61276,"1f4cb":61277,"1f4cc":61278,"1f4cd":61279,"1f4ce":61280,"1f4cf":61282,"1f4d0":61283,"1f4d1":61232,"1f4d2":61226,"1f4d3":61225,"1f4d4":61218,"1f4d5":61219,"1f4d6":61220,"1f4d7":61221,"1f4d8":61222,"1f4d9":61223,"1f4da":61224,"1f4db":62847,"1f4dc":61228,"1f4dd":61264,"1f4de":61185,"1f4df":61186,"1f4e0":61187,"1f4e1":61325,"1f4e2":61159,"1f4e3":61160,"1f4e4":61249,"1f4e5":61250,"1f4e6":61251,"1f4e7":61246,"1f4e8":61247,"1f4e9":61248,"1f4ea":61253,"1f4eb":61252,"1f4ec":61254,"1f4ed":61255,"1f4ee":61256,"1f4ef":61161,"1f4f0":61230,"1f4f1":61182,"1f4f2":61183,"1f4f3":62823,"1f4f4":62824,"1f4f5":62751,"1f4f6":62822,"1f4f7":61207,"1f4f8":61208,"1f4f9":61209,"1f4fa":61206,"1f4fb":61172,"1f4fc":61210,"1f4fd":61204,"1f4ff":61151,"1f500":62801,"1f501":62802,"1f502":62803,"1f503":62769,"1f504":62770,"1f505":62820,"1f506":62821,"1f507":61155,"1f508":61156,"1f509":61157,"1f50a":61158,"1f50b":61188,"1f50c":61190,"1f50d":61211,"1f50e":61212,"1f50f":61290,"1f510":61291,"1f511":61292,"1f512":61288,"1f513":61289,"1f514":61162,"1f515":61163,"1f516":61233,"1f517":61313,"1f518":62947,"1f519":62771,"1f51a":62772,"1f51b":62773,"1f51c":62774,"1f51d":62775,"1f51e":62752,"1f51f":62876,"1f520":62877,"1f521":62878,"1f522":62879,"1f523":62880,"1f524":62881,"1f525":41021,"1f526":61215,"1f527":61306,"1f528":61294,"1f529":61308,"1f52a":3803,"1f52b":61301,"1f52c":61323,"1f52d":61324,"1f52e":51082,"1f52f":62787,"1f530":62848,"1f531":62846,"1f532":62949,"1f533":62948,"1f534":62916,"1f535":62920,"1f536":62940,"1f537":62941,"1f538":62942,"1f539":62943,"1f53a":62944,"1f53b":62945,"1f53c":62811,"1f53d":62813,"1f549":62778,"1f54a":2602,"1f54b":4854,"1f54c":4850,"1f54d":4852,"1f54e":62786,"1f550":4955,"1f551":4957,"1f552":4959,"1f553":4961,"1f554":4963,"1f555":4965,"1f556":4967,"1f557":4969,"1f558":4971,"1f559":4973,"1f55a":4975,"1f55b":4953,"1f55c":4956,"1f55d":4958,"1f55e":4960,"1f55f":4962,"1f560":4964,"1f561":4966,"1f562":4968,"1f563":4970,"1f564":4972,"1f565":4974,"1f566":4976,"1f567":4954,"1f56f":61213,"1f570":4952,"1f573":1156,"1f574":1587,"1f575-200d-2640":1497,"1f575-200d-2642":1496,"1f575":1495,"1f576":61111,"1f577":2641,"1f578":2642,"1f579":51087,"1f57a":1586,"1f587":61281,"1f58a":61261,"1f58b":61260,"1f58c":61262,"1f58d":61263,"1f590":1329,"1f595":1348,"1f596":1331,"1f5a4":1148,"1f5a5":61192,"1f5a8":61193,"1f5b1":61195,"1f5b2":61196,"1f5bc":51104,"1f5c2":61268,"1f5c3":61285,"1f5c4":61286,"1f5d1":61287,"1f5d2":61271,"1f5d3":61272,"1f5dc":61310,"1f5dd":61293,"1f5de":61231,"1f5e1":61299,"1f5e3":1683,"1f5e8":1160,"1f5ef":1161,"1f5f3":61257,"1f5fa":4810,"1f5fb":4816,"1f5fc":4847,"1f5fd":4848,"1f5fe":4811,"1f5ff":61362,"1f600":11,"1f601":14,"1f602":18,"1f603":12,"1f604":13,"1f605":16,"1f606":15,"1f607":114,"1f608":1103,"1f609":112,"1f60a":113,"1f60b":124,"1f60c":150,"1f60d":116,"1f60e":170,"1f60f":144,"1f610":139,"1f611":140,"1f612":145,"1f613":195,"1f614":151,"1f615":173,"1f616":192,"1f617":119,"1f618":118,"1f619":122,"1f61a":121,"1f61b":125,"1f61c":126,"1f61d":128,"1f61e":194,"1f61f":175,"1f620":1101,"1f621":1100,"1f622":189,"1f623":193,"1f624":199,"1f625":188,"1f626":184,"1f627":185,"1f628":186,"1f629":196,"1f62a":152,"1f62b":197,"1f62c":147,"1f62d":190,"1f62e-200d-1f4a8":148,"1f62e":178,"1f62f":179,"1f630":187,"1f631":191,"1f632":180,"1f633":181,"1f634":154,"1f635-200d-1f4ab":165,"1f635":164,"1f636-200d-1f32b":143,"1f636":141,"1f637":155,"1f638":1116,"1f639":1117,"1f63a":1115,"1f63b":1118,"1f63c":1119,"1f63d":1120,"1f63e":1123,"1f63f":1122,"1f640":1121,"1f641":176,"1f642":19,"1f643":110,"1f644":146,"1f645-200d-2640":1422,"1f645-200d-2642":1421,"1f645":1420,"1f646-200d-2640":1425,"1f646-200d-2642":1424,"1f646":1423,"1f647-200d-2640":1437,"1f647-200d-2642":1436,"1f647":1435,"1f648":1124,"1f649":1125,"1f64a":1126,"1f64b-200d-2640":1431,"1f64b-200d-2642":1430,"1f64b":1429,"1f64c":1359,"1f64d-200d-2640":1416,"1f64d-200d-2642":1415,"1f64d":1414,"1f64e-200d-2640":1419,"1f64e-200d-2642":1418,"1f64e":1417,"1f64f":1364,"1f680":4942,"1f681":4937,"1f682":4872,"1f683":4873,"1f684":4874,"1f685":4875,"1f686":4876,"1f687":4877,"1f688":4878,"1f689":4879,"1f68a":4880,"1f68b":4883,"1f68c":4884,"1f68d":4885,"1f68e":4886,"1f68f":4911,"1f690":4887,"1f691":4888,"1f692":4889,"1f693":4890,"1f694":4891,"1f695":4892,"1f696":4893,"1f697":4894,"1f698":4895,"1f699":4896,"1f69a":4898,"1f69b":4899,"1f69c":4900,"1f69d":4881,"1f69e":4882,"1f69f":4938,"1f6a0":4939,"1f6a1":4940,"1f6a2":4930,"1f6a3-200d-2640":1609,"1f6a3-200d-2642":1608,"1f6a3":1607,"1f6a4":4926,"1f6a5":4918,"1f6a6":4919,"1f6a7":4921,"1f6a8":4917,"1f6a9":71587,"1f6aa":61333,"1f6ab":62745,"1f6ac":61358,"1f6ad":62747,"1f6ae":62730,"1f6af":62748,"1f6b0":62731,"1f6b1":62749,"1f6b2":4907,"1f6b3":62746,"1f6b4-200d-2640":1621,"1f6b4-200d-2642":1620,"1f6b4":1619,"1f6b5-200d-2640":1624,"1f6b5-200d-2642":1623,"1f6b5":1622,"1f6b6-200d-2640":1566,"1f6b6-200d-2642":1565,"1f6b6":1564,"1f6b7":62750,"1f6b8":62743,"1f6b9":62733,"1f6ba":62734,"1f6bb":62735,"1f6bc":62736,"1f6bd":61340,"1f6be":62737,"1f6bf":61342,"1f6c0":1643,"1f6c1":61343,"1f6c2":62738,"1f6c3":62739,"1f6c4":62740,"1f6c5":62741,"1f6cb":61338,"1f6cc":1644,"1f6cd":61133,"1f6ce":4944,"1f6cf":61337,"1f6d0":62776,"1f6d1":4920,"1f6d2":61357,"1f6d5":4851,"1f6d6":4828,"1f6d7":61334,"1f6e0":61298,"1f6e1":61304,"1f6e2":4914,"1f6e3":4912,"1f6e4":4913,"1f6e5":4929,"1f6e9":4932,"1f6eb":4933,"1f6ec":4934,"1f6f0":4941,"1f6f3":4927,"1f6f4":4908,"1f6f5":4903,"1f6f6":4925,"1f6f7":51076,"1f6f8":4943,"1f6f9":4909,"1f6fa":4906,"1f6fb":4897,"1f6fc":4910,"1f7e0":62917,"1f7e1":62918,"1f7e2":62919,"1f7e3":62921,"1f7e4":62922,"1f7e5":62925,"1f7e6":62929,"1f7e7":62926,"1f7e8":62927,"1f7e9":62928,"1f7ea":62930,"1f7eb":62931,"1f90c":1337,"1f90d":1149,"1f90e":1147,"1f90f":1338,"1f910":137,"1f911":129,"1f912":156,"1f913":171,"1f914":135,"1f915":157,"1f916":1114,"1f917":130,"1f918":1343,"1f919":1344,"1f91a":1328,"1f91b":1356,"1f91c":1357,"1f91d":1363,"1f91e":1340,"1f91f":1342,"1f920":167,"1f921":1108,"1f922":158,"1f923":17,"1f924":153,"1f925":149,"1f926-200d-2640":1440,"1f926-200d-2642":1439,"1f926":1438,"1f927":160,"1f928":138,"1f929":117,"1f92a":127,"1f92b":134,"1f92c":1102,"1f92d":131,"1f92e":159,"1f92f":166,"1f930":1519,"1f931":1522,"1f932":1362,"1f933":1367,"1f934":1506,"1f935-200d-2640":1515,"1f935-200d-2642":1514,"1f935":1513,"1f936":1528,"1f937-200d-2640":1443,"1f937-200d-2642":1442,"1f937":1441,"1f938-200d-2640":1627,"1f938-200d-2642":1626,"1f938":1625,"1f939-200d-2640":1639,"1f939-200d-2642":1638,"1f939":1637,"1f93a":1597,"1f93c-200d-2640":1630,"1f93c-200d-2642":1629,"1f93c":1628,"1f93d-200d-2640":1633,"1f93d-200d-2642":1632,"1f93d":1631,"1f93e-200d-2640":1636,"1f93e-200d-2642":1635,"1f93e":1634,"1f93f":51073,"1f940":2654,"1f941":61180,"1f942":3791,"1f943":3792,"1f944":3802,"1f945":51069,"1f947":51048,"1f948":51049,"1f949":51050,"1f94a":51067,"1f94b":51068,"1f94c":51077,"1f94d":51064,"1f94e":51053,"1f94f":51059,"1f950":3710,"1f951":3693,"1f952":3700,"1f953":3721,"1f954":3695,"1f955":3696,"1f956":3711,"1f957":3738,"1f958":3734,"1f959":3730,"1f95a":3732,"1f95b":3780,"1f95c":3706,"1f95d":3689,"1f95e":3715,"1f95f":3757,"1f960":3758,"1f961":3759,"1f962":3799,"1f963":3737,"1f964":3794,"1f965":3692,"1f966":3702,"1f967":3773,"1f968":3713,"1f969":3720,"1f96a":3726,"1f96b":3742,"1f96c":3701,"1f96d":3681,"1f96e":3755,"1f96f":3714,"1f970":115,"1f971":198,"1f972":123,"1f973":168,"1f974":163,"1f975":161,"1f976":162,"1f977":1501,"1f978":169,"1f97a":182,"1f97b":61124,"1f97c":61113,"1f97d":61112,"1f97e":61138,"1f97f":61139,"1f980":3760,"1f981":2545,"1f982":2643,"1f983":2594,"1f984":2551,"1f985":2603,"1f986":2604,"1f987":2583,"1f988":2628,"1f989":2606,"1f98a":2540,"1f98b":2633,"1f98c":2553,"1f98d":2532,"1f98e":2615,"1f98f":2572,"1f990":3762,"1f991":3763,"1f992":2569,"1f993":2552,"1f994":2582,"1f995":2619,"1f996":2620,"1f997":2639,"1f998":2591,"1f999":2568,"1f99a":2610,"1f99b":2573,"1f99c":2611,"1f99d":2541,"1f99e":3761,"1f99f":2644,"1f9a0":2647,"1f9a1":2592,"1f9a2":2605,"1f9a3":2571,"1f9a4":2607,"1f9a5":2588,"1f9a6":2589,"1f9a7":2533,"1f9a8":2590,"1f9a9":2609,"1f9aa":3764,"1f9ab":2581,"1f9ac":2554,"1f9ad":2624,"1f9ae":2536,"1f9af":61312,"1f9b4":1380,"1f9b5":1371,"1f9b6":1372,"1f9b7":1379,"1f9b8-200d-2640":1532,"1f9b8-200d-2642":1531,"1f9b8":1530,"1f9b9-200d-2640":1535,"1f9b9-200d-2642":1534,"1f9b9":1533,"1f9ba":61114,"1f9bb":1374,"1f9bc":4905,"1f9bd":4904,"1f9be":1369,"1f9bf":1370,"1f9c0":3717,"1f9c1":3772,"1f9c2":3741,"1f9c3":3796,"1f9c4":3703,"1f9c5":3704,"1f9c6":3731,"1f9c7":3716,"1f9c8":3740,"1f9c9":3797,"1f9ca":3798,"1f9cb":3795,"1f9cd-200d-2640":1569,"1f9cd-200d-2642":1568,"1f9cd":1567,"1f9ce-200d-2640":1572,"1f9ce-200d-2642":1571,"1f9ce":1570,"1f9cf-200d-2640":1434,"1f9cf-200d-2642":1433,"1f9cf":1432,"1f9d0":172,"1f9d1-200d-1f33e":1456,"1f9d1-200d-1f373":1459,"1f9d1-200d-1f37c":1525,"1f9d1-200d-1f384":1529,"1f9d1-200d-1f393":1447,"1f9d1-200d-1f3a4":1477,"1f9d1-200d-1f3a8":1480,"1f9d1-200d-1f3eb":1450,"1f9d1-200d-1f3ed":1465,"1f9d1-200d-1f4bb":1474,"1f9d1-200d-1f4bc":1468,"1f9d1-200d-1f527":1462,"1f9d1-200d-1f52c":1471,"1f9d1-200d-1f680":1486,"1f9d1-200d-1f692":1489,"1f9d1-200d-1f91d-200d-1f9d1":1645,"1f9d1-200d-1f9af":1573,"1f9d1-200d-1f9b0":1402,"1f9d1-200d-1f9b1":1404,"1f9d1-200d-1f9b2":1408,"1f9d1-200d-1f9b3":1406,"1f9d1-200d-1f9bc":1576,"1f9d1-200d-1f9bd":1579,"1f9d1-200d-2695":1444,"1f9d1-200d-2696":1453,"1f9d1-200d-2708":1483,"1f9d1":1390,"1f9d2":1387,"1f9d3":1411,"1f9d4-200d-2640":1395,"1f9d4-200d-2642":1394,"1f9d4":1393,"1f9d5":1512,"1f9d6-200d-2640":1593,"1f9d6-200d-2642":1592,"1f9d6":1591,"1f9d7-200d-2640":1596,"1f9d7-200d-2642":1595,"1f9d7":1594,"1f9d8-200d-2640":1642,"1f9d8-200d-2642":1641,"1f9d8":1640,"1f9d9-200d-2640":1538,"1f9d9-200d-2642":1537,"1f9d9":1536,"1f9da-200d-2640":1541,"1f9da-200d-2642":1540,"1f9da":1539,"1f9db-200d-2640":1544,"1f9db-200d-2642":1543,"1f9db":1542,"1f9dc-200d-2640":1547,"1f9dc-200d-2642":1546,"1f9dc":1545,"1f9dd-200d-2640":1550,"1f9dd-200d-2642":1549,"1f9dd":1548,"1f9de-200d-2640":1553,"1f9de-200d-2642":1552,"1f9de":1551,"1f9df-200d-2640":1556,"1f9df-200d-2642":1555,"1f9df":1554,"1f9e0":1376,"1f9e1":1142,"1f9e2":61148,"1f9e3":61118,"1f9e4":61119,"1f9e5":61120,"1f9e6":61121,"1f9e7":51039,"1f9e8":51028,"1f9e9":51090,"1f9ea":61320,"1f9eb":61321,"1f9ec":61322,"1f9ed":4812,"1f9ee":61201,"1f9ef":61356,"1f9f0":61316,"1f9f1":4825,"1f9f2":61317,"1f9f3":4945,"1f9f4":61346,"1f9f5":51106,"1f9f6":51108,"1f9f7":61347,"1f9f8":51091,"1f9f9":61348,"1f9fa":61349,"1f9fb":61350,"1f9fc":61352,"1f9fd":61355,"1f9fe":61243,"1f9ff":51084,"1fa70":61142,"1fa71":61125,"1fa72":61126,"1fa73":61127,"1fa74":61135,"1fa78":61327,"1fa79":61329,"1fa7a":61331,"1fa80":51079,"1fa81":51080,"1fa82":4935,"1fa83":61302,"1fa84":51083,"1fa85":51092,"1fa86":51094,"1fa90":4993,"1fa91":61339,"1fa92":61345,"1fa93":61295,"1fa94":61217,"1fa95":61179,"1fa96":61149,"1fa97":61174,"1fa98":61181,"1fa99":61236,"1fa9a":61305,"1fa9b":61307,"1fa9c":61318,"1fa9d":61315,"1fa9e":61335,"1fa9f":61336,"1faa0":61341,"1faa1":51107,"1faa2":51109,"1faa3":61351,"1faa4":61344,"1faa5":61354,"1faa6":61360,"1faa7":61363,"1faa8":4826,"1fab0":2645,"1fab1":2646,"1fab2":2637,"1fab3":2640,"1fab4":2660,"1fab5":4827,"1fab6":2608,"1fac0":1377,"1fac1":1378,"1fac2":1686,"1fad0":3688,"1fad1":3699,"1fad2":3691,"1fad3":3712,"1fad4":3729,"1fad5":3736,"1fad6":3782,"203c":62834,"21a9":62765,"21aa":62766,"231a":4948,"231b":4946,"23cf":62818,"23e9":62805,"23ea":62809,"23eb":62812,"23ec":62814,"23ed":62806,"23ee":62810,"23ef":62807,"23f0":4949,"23f1":4950,"23f2":4951,"23f3":4947,"23f8":62815,"23f9":62816,"23fa":62817,"24c2":62890,"25aa":62938,"25ab":62939,"25b6":62804,"25c0":62808,"25fb":62935,"25fc":62934,"25fd":62937,"25fe":62936,"260e":61184,"261d":1350,"262a":62784,"262e":62785,"262f":62781,"263a":120,"264a":62790,"264b":62791,"264c":62792,"264d":62793,"264e":62794,"264f":62795,"265f":51099,"267b":62844,"267e":62833,"267f":62732,"269b":62777,"269c":62845,"26a0":62742,"26a1":41016,"26a7":62827,"26aa":62924,"26ab":62923,"26b0":61359,"26b1":61361,"26bd":51051,"26be":51052,"26c4":41019,"26c5":4999,"26c8":41e3,"26ce":62800,"26cf":61296,"26d1":61150,"26d3":61314,"26d4":62744,"26e9":4853,"26ea":4849,"26f0":4814,"26f1":41015,"26f2":4855,"26f3":51070,"26f4":4928,"26f5":4924,"26f7":1599,"26f8":51071,"26f9-200d-2640":1615,"26f9-200d-2642":1614,"26f9":1613,"26fa":4856,"26fd":4915,"270a":1354,"270b":1330,"270c":1339,"270d":1365,"270f":61258,"271d":62782,"274c":62853,"274e":62854,"2764-200d-1f525":1139,"2764-200d-1fa79":1140,"27a1":62757,"27b0":62855,"27bf":62856,"2b05":62761,"2b06":62755,"2b07":62759,"2b1b":62932,"2b1c":62933,"2b50":4994,"2b55":62849,"303d":62857,"1f385-1f3fb":0,"1f385-1f3fc":0,"1f385-1f3fd":0,"1f385-1f3fe":0,"1f385-1f3ff":0,"1f3c2-1f3fb":0,"1f3c2-1f3fc":0,"1f3c2-1f3fd":0,"1f3c2-1f3fe":0,"1f3c2-1f3ff":0,"1f3c3-1f3fb-200d-2640":0,"1f3c3-1f3fc-200d-2640":0,"1f3c3-1f3fd-200d-2640":0,"1f3c3-1f3fe-200d-2640":0,"1f3c3-1f3ff-200d-2640":0,"1f3c3-1f3fb-200d-2642":0,"1f3c3-1f3fc-200d-2642":0,"1f3c3-1f3fd-200d-2642":0,"1f3c3-1f3fe-200d-2642":0,"1f3c3-1f3ff-200d-2642":0,"1f3c3-1f3fb":0,"1f3c3-1f3fc":0,"1f3c3-1f3fd":0,"1f3c3-1f3fe":0,"1f3c3-1f3ff":0,"1f3c4-1f3fb-200d-2640":0,"1f3c4-1f3fc-200d-2640":0,"1f3c4-1f3fd-200d-2640":0,"1f3c4-1f3fe-200d-2640":0,"1f3c4-1f3ff-200d-2640":0,"1f3c4-1f3fb-200d-2642":0,"1f3c4-1f3fc-200d-2642":0,"1f3c4-1f3fd-200d-2642":0,"1f3c4-1f3fe-200d-2642":0,"1f3c4-1f3ff-200d-2642":0,"1f3c4-1f3fb":0,"1f3c4-1f3fc":0,"1f3c4-1f3fd":0,"1f3c4-1f3fe":0,"1f3c4-1f3ff":0,"1f3c7-1f3fb":0,"1f3c7-1f3fc":0,"1f3c7-1f3fd":0,"1f3c7-1f3fe":0,"1f3c7-1f3ff":0,"1f3ca-1f3fb-200d-2640":0,"1f3ca-1f3fc-200d-2640":0,"1f3ca-1f3fd-200d-2640":0,"1f3ca-1f3fe-200d-2640":0,"1f3ca-1f3ff-200d-2640":0,"1f3ca-1f3fb-200d-2642":0,"1f3ca-1f3fc-200d-2642":0,"1f3ca-1f3fd-200d-2642":0,"1f3ca-1f3fe-200d-2642":0,"1f3ca-1f3ff-200d-2642":0,"1f3ca-1f3fb":0,"1f3ca-1f3fc":0,"1f3ca-1f3fd":0,"1f3ca-1f3fe":0,"1f3ca-1f3ff":0,"1f3cb-1f3fb-200d-2640":0,"1f3cb-1f3fc-200d-2640":0,"1f3cb-1f3fd-200d-2640":0,"1f3cb-1f3fe-200d-2640":0,"1f3cb-1f3ff-200d-2640":0,"1f3cb-1f3fb-200d-2642":0,"1f3cb-1f3fc-200d-2642":0,"1f3cb-1f3fd-200d-2642":0,"1f3cb-1f3fe-200d-2642":0,"1f3cb-1f3ff-200d-2642":0,"1f3cb-1f3fb":0,"1f3cb-1f3fc":0,"1f3cb-1f3fd":0,"1f3cb-1f3fe":0,"1f3cb-1f3ff":0,"1f3cc-1f3fb-200d-2640":0,"1f3cc-1f3fc-200d-2640":0,"1f3cc-1f3fd-200d-2640":0,"1f3cc-1f3fe-200d-2640":0,"1f3cc-1f3ff-200d-2640":0,"1f3cc-1f3fb-200d-2642":0,"1f3cc-1f3fc-200d-2642":0,"1f3cc-1f3fd-200d-2642":0,"1f3cc-1f3fe-200d-2642":0,"1f3cc-1f3ff-200d-2642":0,"1f3cc-1f3fb":0,"1f3cc-1f3fc":0,"1f3cc-1f3fd":0,"1f3cc-1f3fe":0,"1f3cc-1f3ff":0,"1f442-1f3fb":0,"1f442-1f3fc":0,"1f442-1f3fd":0,"1f442-1f3fe":0,"1f442-1f3ff":0,"1f443-1f3fb":0,"1f443-1f3fc":0,"1f443-1f3fd":0,"1f443-1f3fe":0,"1f443-1f3ff":0,"1f446-1f3fb":0,"1f446-1f3fc":0,"1f446-1f3fd":0,"1f446-1f3fe":0,"1f446-1f3ff":0,"1f447-1f3fb":0,"1f447-1f3fc":0,"1f447-1f3fd":0,"1f447-1f3fe":0,"1f447-1f3ff":0,"1f448-1f3fb":0,"1f448-1f3fc":0,"1f448-1f3fd":0,"1f448-1f3fe":0,"1f448-1f3ff":0,"1f449-1f3fb":0,"1f449-1f3fc":0,"1f449-1f3fd":0,"1f449-1f3fe":0,"1f449-1f3ff":0,"1f44a-1f3fb":0,"1f44a-1f3fc":0,"1f44a-1f3fd":0,"1f44a-1f3fe":0,"1f44a-1f3ff":0,"1f44b-1f3fb":0,"1f44b-1f3fc":0,"1f44b-1f3fd":0,"1f44b-1f3fe":0,"1f44b-1f3ff":0,"1f44c-1f3fb":0,"1f44c-1f3fc":0,"1f44c-1f3fd":0,"1f44c-1f3fe":0,"1f44c-1f3ff":0,"1f44d-1f3fb":0,"1f44d-1f3fc":0,"1f44d-1f3fd":0,"1f44d-1f3fe":0,"1f44d-1f3ff":0,"1f44e-1f3fb":0,"1f44e-1f3fc":0,"1f44e-1f3fd":0,"1f44e-1f3fe":0,"1f44e-1f3ff":0,"1f44f-1f3fb":0,"1f44f-1f3fc":0,"1f44f-1f3fd":0,"1f44f-1f3fe":0,"1f44f-1f3ff":0,"1f450-1f3fb":0,"1f450-1f3fc":0,"1f450-1f3fd":0,"1f450-1f3fe":0,"1f450-1f3ff":0,"1f466-1f3fb":0,"1f466-1f3fc":0,"1f466-1f3fd":0,"1f466-1f3fe":0,"1f466-1f3ff":0,"1f467-1f3fb":0,"1f467-1f3fc":0,"1f467-1f3fd":0,"1f467-1f3fe":0,"1f467-1f3ff":0,"1f468-1f3fb-200d-1f33e":0,"1f468-1f3fc-200d-1f33e":0,"1f468-1f3fd-200d-1f33e":0,"1f468-1f3fe-200d-1f33e":0,"1f468-1f3ff-200d-1f33e":0,"1f468-1f3fb-200d-1f373":0,"1f468-1f3fc-200d-1f373":0,"1f468-1f3fd-200d-1f373":0,"1f468-1f3fe-200d-1f373":0,"1f468-1f3ff-200d-1f373":0,"1f468-1f3fb-200d-1f37c":0,"1f468-1f3fc-200d-1f37c":0,"1f468-1f3fd-200d-1f37c":0,"1f468-1f3fe-200d-1f37c":0,"1f468-1f3ff-200d-1f37c":0,"1f468-1f3fb-200d-1f393":0,"1f468-1f3fc-200d-1f393":0,"1f468-1f3fd-200d-1f393":0,"1f468-1f3fe-200d-1f393":0,"1f468-1f3ff-200d-1f393":0,"1f468-1f3fb-200d-1f3a4":0,"1f468-1f3fc-200d-1f3a4":0,"1f468-1f3fd-200d-1f3a4":0,"1f468-1f3fe-200d-1f3a4":0,"1f468-1f3ff-200d-1f3a4":0,"1f468-1f3fb-200d-1f3a8":0,"1f468-1f3fc-200d-1f3a8":0,"1f468-1f3fd-200d-1f3a8":0,"1f468-1f3fe-200d-1f3a8":0,"1f468-1f3ff-200d-1f3a8":0,"1f468-1f3fb-200d-1f3eb":0,"1f468-1f3fc-200d-1f3eb":0,"1f468-1f3fd-200d-1f3eb":0,"1f468-1f3fe-200d-1f3eb":0,"1f468-1f3ff-200d-1f3eb":0,"1f468-1f3fb-200d-1f3ed":0,"1f468-1f3fc-200d-1f3ed":0,"1f468-1f3fd-200d-1f3ed":0,"1f468-1f3fe-200d-1f3ed":0,"1f468-1f3ff-200d-1f3ed":0,"1f468-1f3fb-200d-1f4bb":0,"1f468-1f3fc-200d-1f4bb":0,"1f468-1f3fd-200d-1f4bb":0,"1f468-1f3fe-200d-1f4bb":0,"1f468-1f3ff-200d-1f4bb":0,"1f468-1f3fb-200d-1f4bc":0,"1f468-1f3fc-200d-1f4bc":0,"1f468-1f3fd-200d-1f4bc":0,"1f468-1f3fe-200d-1f4bc":0,"1f468-1f3ff-200d-1f4bc":0,"1f468-1f3fb-200d-1f527":0,"1f468-1f3fc-200d-1f527":0,"1f468-1f3fd-200d-1f527":0,"1f468-1f3fe-200d-1f527":0,"1f468-1f3ff-200d-1f527":0,"1f468-1f3fb-200d-1f52c":0,"1f468-1f3fc-200d-1f52c":0,"1f468-1f3fd-200d-1f52c":0,"1f468-1f3fe-200d-1f52c":0,"1f468-1f3ff-200d-1f52c":0,"1f468-1f3fb-200d-1f680":0,"1f468-1f3fc-200d-1f680":0,"1f468-1f3fd-200d-1f680":0,"1f468-1f3fe-200d-1f680":0,"1f468-1f3ff-200d-1f680":0,"1f468-1f3fb-200d-1f692":0,"1f468-1f3fc-200d-1f692":0,"1f468-1f3fd-200d-1f692":0,"1f468-1f3fe-200d-1f692":0,"1f468-1f3ff-200d-1f692":0,"1f468-1f3fb-200d-1f9af":0,"1f468-1f3fc-200d-1f9af":0,"1f468-1f3fd-200d-1f9af":0,"1f468-1f3fe-200d-1f9af":0,"1f468-1f3ff-200d-1f9af":0,"1f468-1f3fb-200d-1f9b0":0,"1f468-1f3fc-200d-1f9b0":0,"1f468-1f3fd-200d-1f9b0":0,"1f468-1f3fe-200d-1f9b0":0,"1f468-1f3ff-200d-1f9b0":0,"1f468-1f3fb-200d-1f9b1":0,"1f468-1f3fc-200d-1f9b1":0,"1f468-1f3fd-200d-1f9b1":0,"1f468-1f3fe-200d-1f9b1":0,"1f468-1f3ff-200d-1f9b1":0,"1f468-1f3fb-200d-1f9b2":0,"1f468-1f3fc-200d-1f9b2":0,"1f468-1f3fd-200d-1f9b2":0,"1f468-1f3fe-200d-1f9b2":0,"1f468-1f3ff-200d-1f9b2":0,"1f468-1f3fb-200d-1f9b3":0,"1f468-1f3fc-200d-1f9b3":0,"1f468-1f3fd-200d-1f9b3":0,"1f468-1f3fe-200d-1f9b3":0,"1f468-1f3ff-200d-1f9b3":0,"1f468-1f3fb-200d-1f9bc":0,"1f468-1f3fc-200d-1f9bc":0,"1f468-1f3fd-200d-1f9bc":0,"1f468-1f3fe-200d-1f9bc":0,"1f468-1f3ff-200d-1f9bc":0,"1f468-1f3fb-200d-1f9bd":0,"1f468-1f3fc-200d-1f9bd":0,"1f468-1f3fd-200d-1f9bd":0,"1f468-1f3fe-200d-1f9bd":0,"1f468-1f3ff-200d-1f9bd":0,"1f468-1f3fb-200d-2695":0,"1f468-1f3fc-200d-2695":0,"1f468-1f3fd-200d-2695":0,"1f468-1f3fe-200d-2695":0,"1f468-1f3ff-200d-2695":0,"1f468-1f3fb-200d-2696":0,"1f468-1f3fc-200d-2696":0,"1f468-1f3fd-200d-2696":0,"1f468-1f3fe-200d-2696":0,"1f468-1f3ff-200d-2696":0,"1f468-1f3fb-200d-2708":0,"1f468-1f3fc-200d-2708":0,"1f468-1f3fd-200d-2708":0,"1f468-1f3fe-200d-2708":0,"1f468-1f3ff-200d-2708":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fb":0,"1f468-1f3fc":0,"1f468-1f3fd":0,"1f468-1f3fe":0,"1f468-1f3ff":0,"1f469-1f3fb-200d-1f33e":0,"1f469-1f3fc-200d-1f33e":0,"1f469-1f3fd-200d-1f33e":0,"1f469-1f3fe-200d-1f33e":0,"1f469-1f3ff-200d-1f33e":0,"1f469-1f3fb-200d-1f373":0,"1f469-1f3fc-200d-1f373":0,"1f469-1f3fd-200d-1f373":0,"1f469-1f3fe-200d-1f373":0,"1f469-1f3ff-200d-1f373":0,"1f469-1f3fb-200d-1f37c":0,"1f469-1f3fc-200d-1f37c":0,"1f469-1f3fd-200d-1f37c":0,"1f469-1f3fe-200d-1f37c":0,"1f469-1f3ff-200d-1f37c":0,"1f469-1f3fb-200d-1f393":0,"1f469-1f3fc-200d-1f393":0,"1f469-1f3fd-200d-1f393":0,"1f469-1f3fe-200d-1f393":0,"1f469-1f3ff-200d-1f393":0,"1f469-1f3fb-200d-1f3a4":0,"1f469-1f3fc-200d-1f3a4":0,"1f469-1f3fd-200d-1f3a4":0,"1f469-1f3fe-200d-1f3a4":0,"1f469-1f3ff-200d-1f3a4":0,"1f469-1f3fb-200d-1f3a8":0,"1f469-1f3fc-200d-1f3a8":0,"1f469-1f3fd-200d-1f3a8":0,"1f469-1f3fe-200d-1f3a8":0,"1f469-1f3ff-200d-1f3a8":0,"1f469-1f3fb-200d-1f3eb":0,"1f469-1f3fc-200d-1f3eb":0,"1f469-1f3fd-200d-1f3eb":0,"1f469-1f3fe-200d-1f3eb":0,"1f469-1f3ff-200d-1f3eb":0,"1f469-1f3fb-200d-1f3ed":0,"1f469-1f3fc-200d-1f3ed":0,"1f469-1f3fd-200d-1f3ed":0,"1f469-1f3fe-200d-1f3ed":0,"1f469-1f3ff-200d-1f3ed":0,"1f469-1f3fb-200d-1f4bb":0,"1f469-1f3fc-200d-1f4bb":0,"1f469-1f3fd-200d-1f4bb":0,"1f469-1f3fe-200d-1f4bb":0,"1f469-1f3ff-200d-1f4bb":0,"1f469-1f3fb-200d-1f4bc":0,"1f469-1f3fc-200d-1f4bc":0,"1f469-1f3fd-200d-1f4bc":0,"1f469-1f3fe-200d-1f4bc":0,"1f469-1f3ff-200d-1f4bc":0,"1f469-1f3fb-200d-1f527":0,"1f469-1f3fc-200d-1f527":0,"1f469-1f3fd-200d-1f527":0,"1f469-1f3fe-200d-1f527":0,"1f469-1f3ff-200d-1f527":0,"1f469-1f3fb-200d-1f52c":0,"1f469-1f3fc-200d-1f52c":0,"1f469-1f3fd-200d-1f52c":0,"1f469-1f3fe-200d-1f52c":0,"1f469-1f3ff-200d-1f52c":0,"1f469-1f3fb-200d-1f680":0,"1f469-1f3fc-200d-1f680":0,"1f469-1f3fd-200d-1f680":0,"1f469-1f3fe-200d-1f680":0,"1f469-1f3ff-200d-1f680":0,"1f469-1f3fb-200d-1f692":0,"1f469-1f3fc-200d-1f692":0,"1f469-1f3fd-200d-1f692":0,"1f469-1f3fe-200d-1f692":0,"1f469-1f3ff-200d-1f692":0,"1f469-1f3fb-200d-1f9af":0,"1f469-1f3fc-200d-1f9af":0,"1f469-1f3fd-200d-1f9af":0,"1f469-1f3fe-200d-1f9af":0,"1f469-1f3ff-200d-1f9af":0,"1f469-1f3fb-200d-1f9b0":0,"1f469-1f3fc-200d-1f9b0":0,"1f469-1f3fd-200d-1f9b0":0,"1f469-1f3fe-200d-1f9b0":0,"1f469-1f3ff-200d-1f9b0":0,"1f469-1f3fb-200d-1f9b1":0,"1f469-1f3fc-200d-1f9b1":0,"1f469-1f3fd-200d-1f9b1":0,"1f469-1f3fe-200d-1f9b1":0,"1f469-1f3ff-200d-1f9b1":0,"1f469-1f3fb-200d-1f9b2":0,"1f469-1f3fc-200d-1f9b2":0,"1f469-1f3fd-200d-1f9b2":0,"1f469-1f3fe-200d-1f9b2":0,"1f469-1f3ff-200d-1f9b2":0,"1f469-1f3fb-200d-1f9b3":0,"1f469-1f3fc-200d-1f9b3":0,"1f469-1f3fd-200d-1f9b3":0,"1f469-1f3fe-200d-1f9b3":0,"1f469-1f3ff-200d-1f9b3":0,"1f469-1f3fb-200d-1f9bc":0,"1f469-1f3fc-200d-1f9bc":0,"1f469-1f3fd-200d-1f9bc":0,"1f469-1f3fe-200d-1f9bc":0,"1f469-1f3ff-200d-1f9bc":0,"1f469-1f3fb-200d-1f9bd":0,"1f469-1f3fc-200d-1f9bd":0,"1f469-1f3fd-200d-1f9bd":0,"1f469-1f3fe-200d-1f9bd":0,"1f469-1f3ff-200d-1f9bd":0,"1f469-1f3fb-200d-2695":0,"1f469-1f3fc-200d-2695":0,"1f469-1f3fd-200d-2695":0,"1f469-1f3fe-200d-2695":0,"1f469-1f3ff-200d-2695":0,"1f469-1f3fb-200d-2696":0,"1f469-1f3fc-200d-2696":0,"1f469-1f3fd-200d-2696":0,"1f469-1f3fe-200d-2696":0,"1f469-1f3ff-200d-2696":0,"1f469-1f3fb-200d-2708":0,"1f469-1f3fc-200d-2708":0,"1f469-1f3fd-200d-2708":0,"1f469-1f3fe-200d-2708":0,"1f469-1f3ff-200d-2708":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fb":0,"1f469-1f3fc":0,"1f469-1f3fd":0,"1f469-1f3fe":0,"1f469-1f3ff":0,"1f46b-1f3fb":0,"1f46b-1f3fc":0,"1f46b-1f3fd":0,"1f46b-1f3fe":0,"1f46b-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46c-1f3fb":0,"1f46c-1f3fc":0,"1f46c-1f3fd":0,"1f46c-1f3fe":0,"1f46c-1f3ff":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46d-1f3fb":0,"1f46d-1f3fc":0,"1f46d-1f3fd":0,"1f46d-1f3fe":0,"1f46d-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe":0,"1f46e-1f3fb-200d-2640":0,"1f46e-1f3fc-200d-2640":0,"1f46e-1f3fd-200d-2640":0,"1f46e-1f3fe-200d-2640":0,"1f46e-1f3ff-200d-2640":0,"1f46e-1f3fb-200d-2642":0,"1f46e-1f3fc-200d-2642":0,"1f46e-1f3fd-200d-2642":0,"1f46e-1f3fe-200d-2642":0,"1f46e-1f3ff-200d-2642":0,"1f46e-1f3fb":0,"1f46e-1f3fc":0,"1f46e-1f3fd":0,"1f46e-1f3fe":0,"1f46e-1f3ff":0,"1f470-1f3fb-200d-2640":0,"1f470-1f3fc-200d-2640":0,"1f470-1f3fd-200d-2640":0,"1f470-1f3fe-200d-2640":0,"1f470-1f3ff-200d-2640":0,"1f470-1f3fb-200d-2642":0,"1f470-1f3fc-200d-2642":0,"1f470-1f3fd-200d-2642":0,"1f470-1f3fe-200d-2642":0,"1f470-1f3ff-200d-2642":0,"1f470-1f3fb":0,"1f470-1f3fc":0,"1f470-1f3fd":0,"1f470-1f3fe":0,"1f470-1f3ff":0,"1f471-1f3fb-200d-2640":0,"1f471-1f3fc-200d-2640":0,"1f471-1f3fd-200d-2640":0,"1f471-1f3fe-200d-2640":0,"1f471-1f3ff-200d-2640":0,"1f471-1f3fb-200d-2642":0,"1f471-1f3fc-200d-2642":0,"1f471-1f3fd-200d-2642":0,"1f471-1f3fe-200d-2642":0,"1f471-1f3ff-200d-2642":0,"1f471-1f3fb":0,"1f471-1f3fc":0,"1f471-1f3fd":0,"1f471-1f3fe":0,"1f471-1f3ff":0,"1f472-1f3fb":0,"1f472-1f3fc":0,"1f472-1f3fd":0,"1f472-1f3fe":0,"1f472-1f3ff":0,"1f473-1f3fb-200d-2640":0,"1f473-1f3fc-200d-2640":0,"1f473-1f3fd-200d-2640":0,"1f473-1f3fe-200d-2640":0,"1f473-1f3ff-200d-2640":0,"1f473-1f3fb-200d-2642":0,"1f473-1f3fc-200d-2642":0,"1f473-1f3fd-200d-2642":0,"1f473-1f3fe-200d-2642":0,"1f473-1f3ff-200d-2642":0,"1f473-1f3fb":0,"1f473-1f3fc":0,"1f473-1f3fd":0,"1f473-1f3fe":0,"1f473-1f3ff":0,"1f474-1f3fb":0,"1f474-1f3fc":0,"1f474-1f3fd":0,"1f474-1f3fe":0,"1f474-1f3ff":0,"1f475-1f3fb":0,"1f475-1f3fc":0,"1f475-1f3fd":0,"1f475-1f3fe":0,"1f475-1f3ff":0,"1f476-1f3fb":0,"1f476-1f3fc":0,"1f476-1f3fd":0,"1f476-1f3fe":0,"1f476-1f3ff":0,"1f477-1f3fb-200d-2640":0,"1f477-1f3fc-200d-2640":0,"1f477-1f3fd-200d-2640":0,"1f477-1f3fe-200d-2640":0,"1f477-1f3ff-200d-2640":0,"1f477-1f3fb-200d-2642":0,"1f477-1f3fc-200d-2642":0,"1f477-1f3fd-200d-2642":0,"1f477-1f3fe-200d-2642":0,"1f477-1f3ff-200d-2642":0,"1f477-1f3fb":0,"1f477-1f3fc":0,"1f477-1f3fd":0,"1f477-1f3fe":0,"1f477-1f3ff":0,"1f478-1f3fb":0,"1f478-1f3fc":0,"1f478-1f3fd":0,"1f478-1f3fe":0,"1f478-1f3ff":0,"1f47c-1f3fb":0,"1f47c-1f3fc":0,"1f47c-1f3fd":0,"1f47c-1f3fe":0,"1f47c-1f3ff":0,"1f481-1f3fb-200d-2640":0,"1f481-1f3fc-200d-2640":0,"1f481-1f3fd-200d-2640":0,"1f481-1f3fe-200d-2640":0,"1f481-1f3ff-200d-2640":0,"1f481-1f3fb-200d-2642":0,"1f481-1f3fc-200d-2642":0,"1f481-1f3fd-200d-2642":0,"1f481-1f3fe-200d-2642":0,"1f481-1f3ff-200d-2642":0,"1f481-1f3fb":0,"1f481-1f3fc":0,"1f481-1f3fd":0,"1f481-1f3fe":0,"1f481-1f3ff":0,"1f482-1f3fb-200d-2640":0,"1f482-1f3fc-200d-2640":0,"1f482-1f3fd-200d-2640":0,"1f482-1f3fe-200d-2640":0,"1f482-1f3ff-200d-2640":0,"1f482-1f3fb-200d-2642":0,"1f482-1f3fc-200d-2642":0,"1f482-1f3fd-200d-2642":0,"1f482-1f3fe-200d-2642":0,"1f482-1f3ff-200d-2642":0,"1f482-1f3fb":0,"1f482-1f3fc":0,"1f482-1f3fd":0,"1f482-1f3fe":0,"1f482-1f3ff":0,"1f483-1f3fb":0,"1f483-1f3fc":0,"1f483-1f3fd":0,"1f483-1f3fe":0,"1f483-1f3ff":0,"1f485-1f3fb":0,"1f485-1f3fc":0,"1f485-1f3fd":0,"1f485-1f3fe":0,"1f485-1f3ff":0,"1f486-1f3fb-200d-2640":0,"1f486-1f3fc-200d-2640":0,"1f486-1f3fd-200d-2640":0,"1f486-1f3fe-200d-2640":0,"1f486-1f3ff-200d-2640":0,"1f486-1f3fb-200d-2642":0,"1f486-1f3fc-200d-2642":0,"1f486-1f3fd-200d-2642":0,"1f486-1f3fe-200d-2642":0,"1f486-1f3ff-200d-2642":0,"1f486-1f3fb":0,"1f486-1f3fc":0,"1f486-1f3fd":0,"1f486-1f3fe":0,"1f486-1f3ff":0,"1f487-1f3fb-200d-2640":0,"1f487-1f3fc-200d-2640":0,"1f487-1f3fd-200d-2640":0,"1f487-1f3fe-200d-2640":0,"1f487-1f3ff-200d-2640":0,"1f487-1f3fb-200d-2642":0,"1f487-1f3fc-200d-2642":0,"1f487-1f3fd-200d-2642":0,"1f487-1f3fe-200d-2642":0,"1f487-1f3ff-200d-2642":0,"1f487-1f3fb":0,"1f487-1f3fc":0,"1f487-1f3fd":0,"1f487-1f3fe":0,"1f487-1f3ff":0,"1f48f-1f3fb":0,"1f48f-1f3fc":0,"1f48f-1f3fd":0,"1f48f-1f3fe":0,"1f48f-1f3ff":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f491-1f3fb":0,"1f491-1f3fc":0,"1f491-1f3fd":0,"1f491-1f3fe":0,"1f491-1f3ff":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fe":0,"1f4aa-1f3fb":0,"1f4aa-1f3fc":0,"1f4aa-1f3fd":0,"1f4aa-1f3fe":0,"1f4aa-1f3ff":0,"1f574-1f3fb":0,"1f574-1f3fc":0,"1f574-1f3fd":0,"1f574-1f3fe":0,"1f574-1f3ff":0,"1f575-1f3fb-200d-2640":0,"1f575-1f3fc-200d-2640":0,"1f575-1f3fd-200d-2640":0,"1f575-1f3fe-200d-2640":0,"1f575-1f3ff-200d-2640":0,"1f575-1f3fb-200d-2642":0,"1f575-1f3fc-200d-2642":0,"1f575-1f3fd-200d-2642":0,"1f575-1f3fe-200d-2642":0,"1f575-1f3ff-200d-2642":0,"1f575-1f3fb":0,"1f575-1f3fc":0,"1f575-1f3fd":0,"1f575-1f3fe":0,"1f575-1f3ff":0,"1f57a-1f3fb":0,"1f57a-1f3fc":0,"1f57a-1f3fd":0,"1f57a-1f3fe":0,"1f57a-1f3ff":0,"1f590-1f3fb":0,"1f590-1f3fc":0,"1f590-1f3fd":0,"1f590-1f3fe":0,"1f590-1f3ff":0,"1f595-1f3fb":0,"1f595-1f3fc":0,"1f595-1f3fd":0,"1f595-1f3fe":0,"1f595-1f3ff":0,"1f596-1f3fb":0,"1f596-1f3fc":0,"1f596-1f3fd":0,"1f596-1f3fe":0,"1f596-1f3ff":0,"1f645-1f3fb-200d-2640":0,"1f645-1f3fc-200d-2640":0,"1f645-1f3fd-200d-2640":0,"1f645-1f3fe-200d-2640":0,"1f645-1f3ff-200d-2640":0,"1f645-1f3fb-200d-2642":0,"1f645-1f3fc-200d-2642":0,"1f645-1f3fd-200d-2642":0,"1f645-1f3fe-200d-2642":0,"1f645-1f3ff-200d-2642":0,"1f645-1f3fb":0,"1f645-1f3fc":0,"1f645-1f3fd":0,"1f645-1f3fe":0,"1f645-1f3ff":0,"1f646-1f3fb-200d-2640":0,"1f646-1f3fc-200d-2640":0,"1f646-1f3fd-200d-2640":0,"1f646-1f3fe-200d-2640":0,"1f646-1f3ff-200d-2640":0,"1f646-1f3fb-200d-2642":0,"1f646-1f3fc-200d-2642":0,"1f646-1f3fd-200d-2642":0,"1f646-1f3fe-200d-2642":0,"1f646-1f3ff-200d-2642":0,"1f646-1f3fb":0,"1f646-1f3fc":0,"1f646-1f3fd":0,"1f646-1f3fe":0,"1f646-1f3ff":0,"1f647-1f3fb-200d-2640":0,"1f647-1f3fc-200d-2640":0,"1f647-1f3fd-200d-2640":0,"1f647-1f3fe-200d-2640":0,"1f647-1f3ff-200d-2640":0,"1f647-1f3fb-200d-2642":0,"1f647-1f3fc-200d-2642":0,"1f647-1f3fd-200d-2642":0,"1f647-1f3fe-200d-2642":0,"1f647-1f3ff-200d-2642":0,"1f647-1f3fb":0,"1f647-1f3fc":0,"1f647-1f3fd":0,"1f647-1f3fe":0,"1f647-1f3ff":0,"1f64b-1f3fb-200d-2640":0,"1f64b-1f3fc-200d-2640":0,"1f64b-1f3fd-200d-2640":0,"1f64b-1f3fe-200d-2640":0,"1f64b-1f3ff-200d-2640":0,"1f64b-1f3fb-200d-2642":0,"1f64b-1f3fc-200d-2642":0,"1f64b-1f3fd-200d-2642":0,"1f64b-1f3fe-200d-2642":0,"1f64b-1f3ff-200d-2642":0,"1f64b-1f3fb":0,"1f64b-1f3fc":0,"1f64b-1f3fd":0,"1f64b-1f3fe":0,"1f64b-1f3ff":0,"1f64c-1f3fb":0,"1f64c-1f3fc":0,"1f64c-1f3fd":0,"1f64c-1f3fe":0,"1f64c-1f3ff":0,"1f64d-1f3fb-200d-2640":0,"1f64d-1f3fc-200d-2640":0,"1f64d-1f3fd-200d-2640":0,"1f64d-1f3fe-200d-2640":0,"1f64d-1f3ff-200d-2640":0,"1f64d-1f3fb-200d-2642":0,"1f64d-1f3fc-200d-2642":0,"1f64d-1f3fd-200d-2642":0,"1f64d-1f3fe-200d-2642":0,"1f64d-1f3ff-200d-2642":0,"1f64d-1f3fb":0,"1f64d-1f3fc":0,"1f64d-1f3fd":0,"1f64d-1f3fe":0,"1f64d-1f3ff":0,"1f64e-1f3fb-200d-2640":0,"1f64e-1f3fc-200d-2640":0,"1f64e-1f3fd-200d-2640":0,"1f64e-1f3fe-200d-2640":0,"1f64e-1f3ff-200d-2640":0,"1f64e-1f3fb-200d-2642":0,"1f64e-1f3fc-200d-2642":0,"1f64e-1f3fd-200d-2642":0,"1f64e-1f3fe-200d-2642":0,"1f64e-1f3ff-200d-2642":0,"1f64e-1f3fb":0,"1f64e-1f3fc":0,"1f64e-1f3fd":0,"1f64e-1f3fe":0,"1f64e-1f3ff":0,"1f64f-1f3fb":0,"1f64f-1f3fc":0,"1f64f-1f3fd":0,"1f64f-1f3fe":0,"1f64f-1f3ff":0,"1f6a3-1f3fb-200d-2640":0,"1f6a3-1f3fc-200d-2640":0,"1f6a3-1f3fd-200d-2640":0,"1f6a3-1f3fe-200d-2640":0,"1f6a3-1f3ff-200d-2640":0,"1f6a3-1f3fb-200d-2642":0,"1f6a3-1f3fc-200d-2642":0,"1f6a3-1f3fd-200d-2642":0,"1f6a3-1f3fe-200d-2642":0,"1f6a3-1f3ff-200d-2642":0,"1f6a3-1f3fb":0,"1f6a3-1f3fc":0,"1f6a3-1f3fd":0,"1f6a3-1f3fe":0,"1f6a3-1f3ff":0,"1f6b4-1f3fb-200d-2640":0,"1f6b4-1f3fc-200d-2640":0,"1f6b4-1f3fd-200d-2640":0,"1f6b4-1f3fe-200d-2640":0,"1f6b4-1f3ff-200d-2640":0,"1f6b4-1f3fb-200d-2642":0,"1f6b4-1f3fc-200d-2642":0,"1f6b4-1f3fd-200d-2642":0,"1f6b4-1f3fe-200d-2642":0,"1f6b4-1f3ff-200d-2642":0,"1f6b4-1f3fb":0,"1f6b4-1f3fc":0,"1f6b4-1f3fd":0,"1f6b4-1f3fe":0,"1f6b4-1f3ff":0,"1f6b5-1f3fb-200d-2640":0,"1f6b5-1f3fc-200d-2640":0,"1f6b5-1f3fd-200d-2640":0,"1f6b5-1f3fe-200d-2640":0,"1f6b5-1f3ff-200d-2640":0,"1f6b5-1f3fb-200d-2642":0,"1f6b5-1f3fc-200d-2642":0,"1f6b5-1f3fd-200d-2642":0,"1f6b5-1f3fe-200d-2642":0,"1f6b5-1f3ff-200d-2642":0,"1f6b5-1f3fb":0,"1f6b5-1f3fc":0,"1f6b5-1f3fd":0,"1f6b5-1f3fe":0,"1f6b5-1f3ff":0,"1f6b6-1f3fb-200d-2640":0,"1f6b6-1f3fc-200d-2640":0,"1f6b6-1f3fd-200d-2640":0,"1f6b6-1f3fe-200d-2640":0,"1f6b6-1f3ff-200d-2640":0,"1f6b6-1f3fb-200d-2642":0,"1f6b6-1f3fc-200d-2642":0,"1f6b6-1f3fd-200d-2642":0,"1f6b6-1f3fe-200d-2642":0,"1f6b6-1f3ff-200d-2642":0,"1f6b6-1f3fb":0,"1f6b6-1f3fc":0,"1f6b6-1f3fd":0,"1f6b6-1f3fe":0,"1f6b6-1f3ff":0,"1f6c0-1f3fb":0,"1f6c0-1f3fc":0,"1f6c0-1f3fd":0,"1f6c0-1f3fe":0,"1f6c0-1f3ff":0,"1f6cc-1f3fb":0,"1f6cc-1f3fc":0,"1f6cc-1f3fd":0,"1f6cc-1f3fe":0,"1f6cc-1f3ff":0,"1f90c-1f3fb":0,"1f90c-1f3fc":0,"1f90c-1f3fd":0,"1f90c-1f3fe":0,"1f90c-1f3ff":0,"1f90f-1f3fb":0,"1f90f-1f3fc":0,"1f90f-1f3fd":0,"1f90f-1f3fe":0,"1f90f-1f3ff":0,"1f918-1f3fb":0,"1f918-1f3fc":0,"1f918-1f3fd":0,"1f918-1f3fe":0,"1f918-1f3ff":0,"1f919-1f3fb":0,"1f919-1f3fc":0,"1f919-1f3fd":0,"1f919-1f3fe":0,"1f919-1f3ff":0,"1f91a-1f3fb":0,"1f91a-1f3fc":0,"1f91a-1f3fd":0,"1f91a-1f3fe":0,"1f91a-1f3ff":0,"1f91b-1f3fb":0,"1f91b-1f3fc":0,"1f91b-1f3fd":0,"1f91b-1f3fe":0,"1f91b-1f3ff":0,"1f91c-1f3fb":0,"1f91c-1f3fc":0,"1f91c-1f3fd":0,"1f91c-1f3fe":0,"1f91c-1f3ff":0,"1f91d-1f3fb":0,"1f91d-1f3fc":0,"1f91d-1f3fd":0,"1f91d-1f3fe":0,"1f91d-1f3ff":0,"1f91e-1f3fb":0,"1f91e-1f3fc":0,"1f91e-1f3fd":0,"1f91e-1f3fe":0,"1f91e-1f3ff":0,"1f91f-1f3fb":0,"1f91f-1f3fc":0,"1f91f-1f3fd":0,"1f91f-1f3fe":0,"1f91f-1f3ff":0,"1f926-1f3fb-200d-2640":0,"1f926-1f3fc-200d-2640":0,"1f926-1f3fd-200d-2640":0,"1f926-1f3fe-200d-2640":0,"1f926-1f3ff-200d-2640":0,"1f926-1f3fb-200d-2642":0,"1f926-1f3fc-200d-2642":0,"1f926-1f3fd-200d-2642":0,"1f926-1f3fe-200d-2642":0,"1f926-1f3ff-200d-2642":0,"1f926-1f3fb":0,"1f926-1f3fc":0,"1f926-1f3fd":0,"1f926-1f3fe":0,"1f926-1f3ff":0,"1f930-1f3fb":0,"1f930-1f3fc":0,"1f930-1f3fd":0,"1f930-1f3fe":0,"1f930-1f3ff":0,"1f931-1f3fb":0,"1f931-1f3fc":0,"1f931-1f3fd":0,"1f931-1f3fe":0,"1f931-1f3ff":0,"1f932-1f3fb":0,"1f932-1f3fc":0,"1f932-1f3fd":0,"1f932-1f3fe":0,"1f932-1f3ff":0,"1f933-1f3fb":0,"1f933-1f3fc":0,"1f933-1f3fd":0,"1f933-1f3fe":0,"1f933-1f3ff":0,"1f934-1f3fb":0,"1f934-1f3fc":0,"1f934-1f3fd":0,"1f934-1f3fe":0,"1f934-1f3ff":0,"1f935-1f3fb-200d-2640":0,"1f935-1f3fc-200d-2640":0,"1f935-1f3fd-200d-2640":0,"1f935-1f3fe-200d-2640":0,"1f935-1f3ff-200d-2640":0,"1f935-1f3fb-200d-2642":0,"1f935-1f3fc-200d-2642":0,"1f935-1f3fd-200d-2642":0,"1f935-1f3fe-200d-2642":0,"1f935-1f3ff-200d-2642":0,"1f935-1f3fb":0,"1f935-1f3fc":0,"1f935-1f3fd":0,"1f935-1f3fe":0,"1f935-1f3ff":0,"1f936-1f3fb":0,"1f936-1f3fc":0,"1f936-1f3fd":0,"1f936-1f3fe":0,"1f936-1f3ff":0,"1f937-1f3fb-200d-2640":0,"1f937-1f3fc-200d-2640":0,"1f937-1f3fd-200d-2640":0,"1f937-1f3fe-200d-2640":0,"1f937-1f3ff-200d-2640":0,"1f937-1f3fb-200d-2642":0,"1f937-1f3fc-200d-2642":0,"1f937-1f3fd-200d-2642":0,"1f937-1f3fe-200d-2642":0,"1f937-1f3ff-200d-2642":0,"1f937-1f3fb":0,"1f937-1f3fc":0,"1f937-1f3fd":0,"1f937-1f3fe":0,"1f937-1f3ff":0,"1f938-1f3fb-200d-2640":0,"1f938-1f3fc-200d-2640":0,"1f938-1f3fd-200d-2640":0,"1f938-1f3fe-200d-2640":0,"1f938-1f3ff-200d-2640":0,"1f938-1f3fb-200d-2642":0,"1f938-1f3fc-200d-2642":0,"1f938-1f3fd-200d-2642":0,"1f938-1f3fe-200d-2642":0,"1f938-1f3ff-200d-2642":0,"1f938-1f3fb":0,"1f938-1f3fc":0,"1f938-1f3fd":0,"1f938-1f3fe":0,"1f938-1f3ff":0,"1f939-1f3fb-200d-2640":0,"1f939-1f3fc-200d-2640":0,"1f939-1f3fd-200d-2640":0,"1f939-1f3fe-200d-2640":0,"1f939-1f3ff-200d-2640":0,"1f939-1f3fb-200d-2642":0,"1f939-1f3fc-200d-2642":0,"1f939-1f3fd-200d-2642":0,"1f939-1f3fe-200d-2642":0,"1f939-1f3ff-200d-2642":0,"1f939-1f3fb":0,"1f939-1f3fc":0,"1f939-1f3fd":0,"1f939-1f3fe":0,"1f939-1f3ff":0,"1f93d-1f3fb-200d-2640":0,"1f93d-1f3fc-200d-2640":0,"1f93d-1f3fd-200d-2640":0,"1f93d-1f3fe-200d-2640":0,"1f93d-1f3ff-200d-2640":0,"1f93d-1f3fb-200d-2642":0,"1f93d-1f3fc-200d-2642":0,"1f93d-1f3fd-200d-2642":0,"1f93d-1f3fe-200d-2642":0,"1f93d-1f3ff-200d-2642":0,"1f93d-1f3fb":0,"1f93d-1f3fc":0,"1f93d-1f3fd":0,"1f93d-1f3fe":0,"1f93d-1f3ff":0,"1f93e-1f3fb-200d-2640":0,"1f93e-1f3fc-200d-2640":0,"1f93e-1f3fd-200d-2640":0,"1f93e-1f3fe-200d-2640":0,"1f93e-1f3ff-200d-2640":0,"1f93e-1f3fb-200d-2642":0,"1f93e-1f3fc-200d-2642":0,"1f93e-1f3fd-200d-2642":0,"1f93e-1f3fe-200d-2642":0,"1f93e-1f3ff-200d-2642":0,"1f93e-1f3fb":0,"1f93e-1f3fc":0,"1f93e-1f3fd":0,"1f93e-1f3fe":0,"1f93e-1f3ff":0,"1f977-1f3fb":0,"1f977-1f3fc":0,"1f977-1f3fd":0,"1f977-1f3fe":0,"1f977-1f3ff":0,"1f9b5-1f3fb":0,"1f9b5-1f3fc":0,"1f9b5-1f3fd":0,"1f9b5-1f3fe":0,"1f9b5-1f3ff":0,"1f9b6-1f3fb":0,"1f9b6-1f3fc":0,"1f9b6-1f3fd":0,"1f9b6-1f3fe":0,"1f9b6-1f3ff":0,"1f9b8-1f3fb-200d-2640":0,"1f9b8-1f3fc-200d-2640":0,"1f9b8-1f3fd-200d-2640":0,"1f9b8-1f3fe-200d-2640":0,"1f9b8-1f3ff-200d-2640":0,"1f9b8-1f3fb-200d-2642":0,"1f9b8-1f3fc-200d-2642":0,"1f9b8-1f3fd-200d-2642":0,"1f9b8-1f3fe-200d-2642":0,"1f9b8-1f3ff-200d-2642":0,"1f9b8-1f3fb":0,"1f9b8-1f3fc":0,"1f9b8-1f3fd":0,"1f9b8-1f3fe":0,"1f9b8-1f3ff":0,"1f9b9-1f3fb-200d-2640":0,"1f9b9-1f3fc-200d-2640":0,"1f9b9-1f3fd-200d-2640":0,"1f9b9-1f3fe-200d-2640":0,"1f9b9-1f3ff-200d-2640":0,"1f9b9-1f3fb-200d-2642":0,"1f9b9-1f3fc-200d-2642":0,"1f9b9-1f3fd-200d-2642":0,"1f9b9-1f3fe-200d-2642":0,"1f9b9-1f3ff-200d-2642":0,"1f9b9-1f3fb":0,"1f9b9-1f3fc":0,"1f9b9-1f3fd":0,"1f9b9-1f3fe":0,"1f9b9-1f3ff":0,"1f9bb-1f3fb":0,"1f9bb-1f3fc":0,"1f9bb-1f3fd":0,"1f9bb-1f3fe":0,"1f9bb-1f3ff":0,"1f9cd-1f3fb-200d-2640":0,"1f9cd-1f3fc-200d-2640":0,"1f9cd-1f3fd-200d-2640":0,"1f9cd-1f3fe-200d-2640":0,"1f9cd-1f3ff-200d-2640":0,"1f9cd-1f3fb-200d-2642":0,"1f9cd-1f3fc-200d-2642":0,"1f9cd-1f3fd-200d-2642":0,"1f9cd-1f3fe-200d-2642":0,"1f9cd-1f3ff-200d-2642":0,"1f9cd-1f3fb":0,"1f9cd-1f3fc":0,"1f9cd-1f3fd":0,"1f9cd-1f3fe":0,"1f9cd-1f3ff":0,"1f9ce-1f3fb-200d-2640":0,"1f9ce-1f3fc-200d-2640":0,"1f9ce-1f3fd-200d-2640":0,"1f9ce-1f3fe-200d-2640":0,"1f9ce-1f3ff-200d-2640":0,"1f9ce-1f3fb-200d-2642":0,"1f9ce-1f3fc-200d-2642":0,"1f9ce-1f3fd-200d-2642":0,"1f9ce-1f3fe-200d-2642":0,"1f9ce-1f3ff-200d-2642":0,"1f9ce-1f3fb":0,"1f9ce-1f3fc":0,"1f9ce-1f3fd":0,"1f9ce-1f3fe":0,"1f9ce-1f3ff":0,"1f9cf-1f3fb-200d-2640":0,"1f9cf-1f3fc-200d-2640":0,"1f9cf-1f3fd-200d-2640":0,"1f9cf-1f3fe-200d-2640":0,"1f9cf-1f3ff-200d-2640":0,"1f9cf-1f3fb-200d-2642":0,"1f9cf-1f3fc-200d-2642":0,"1f9cf-1f3fd-200d-2642":0,"1f9cf-1f3fe-200d-2642":0,"1f9cf-1f3ff-200d-2642":0,"1f9cf-1f3fb":0,"1f9cf-1f3fc":0,"1f9cf-1f3fd":0,"1f9cf-1f3fe":0,"1f9cf-1f3ff":0,"1f9d1-1f3fb-200d-1f33e":0,"1f9d1-1f3fc-200d-1f33e":0,"1f9d1-1f3fd-200d-1f33e":0,"1f9d1-1f3fe-200d-1f33e":0,"1f9d1-1f3ff-200d-1f33e":0,"1f9d1-1f3fb-200d-1f373":0,"1f9d1-1f3fc-200d-1f373":0,"1f9d1-1f3fd-200d-1f373":0,"1f9d1-1f3fe-200d-1f373":0,"1f9d1-1f3ff-200d-1f373":0,"1f9d1-1f3fb-200d-1f37c":0,"1f9d1-1f3fc-200d-1f37c":0,"1f9d1-1f3fd-200d-1f37c":0,"1f9d1-1f3fe-200d-1f37c":0,"1f9d1-1f3ff-200d-1f37c":0,"1f9d1-1f3fb-200d-1f384":0,"1f9d1-1f3fc-200d-1f384":0,"1f9d1-1f3fd-200d-1f384":0,"1f9d1-1f3fe-200d-1f384":0,"1f9d1-1f3ff-200d-1f384":0,"1f9d1-1f3fb-200d-1f393":0,"1f9d1-1f3fc-200d-1f393":0,"1f9d1-1f3fd-200d-1f393":0,"1f9d1-1f3fe-200d-1f393":0,"1f9d1-1f3ff-200d-1f393":0,"1f9d1-1f3fb-200d-1f3a4":0,"1f9d1-1f3fc-200d-1f3a4":0,"1f9d1-1f3fd-200d-1f3a4":0,"1f9d1-1f3fe-200d-1f3a4":0,"1f9d1-1f3ff-200d-1f3a4":0,"1f9d1-1f3fb-200d-1f3a8":0,"1f9d1-1f3fc-200d-1f3a8":0,"1f9d1-1f3fd-200d-1f3a8":0,"1f9d1-1f3fe-200d-1f3a8":0,"1f9d1-1f3ff-200d-1f3a8":0,"1f9d1-1f3fb-200d-1f3eb":0,"1f9d1-1f3fc-200d-1f3eb":0,"1f9d1-1f3fd-200d-1f3eb":0,"1f9d1-1f3fe-200d-1f3eb":0,"1f9d1-1f3ff-200d-1f3eb":0,"1f9d1-1f3fb-200d-1f3ed":0,"1f9d1-1f3fc-200d-1f3ed":0,"1f9d1-1f3fd-200d-1f3ed":0,"1f9d1-1f3fe-200d-1f3ed":0,"1f9d1-1f3ff-200d-1f3ed":0,"1f9d1-1f3fb-200d-1f4bb":0,"1f9d1-1f3fc-200d-1f4bb":0,"1f9d1-1f3fd-200d-1f4bb":0,"1f9d1-1f3fe-200d-1f4bb":0,"1f9d1-1f3ff-200d-1f4bb":0,"1f9d1-1f3fb-200d-1f4bc":0,"1f9d1-1f3fc-200d-1f4bc":0,"1f9d1-1f3fd-200d-1f4bc":0,"1f9d1-1f3fe-200d-1f4bc":0,"1f9d1-1f3ff-200d-1f4bc":0,"1f9d1-1f3fb-200d-1f527":0,"1f9d1-1f3fc-200d-1f527":0,"1f9d1-1f3fd-200d-1f527":0,"1f9d1-1f3fe-200d-1f527":0,"1f9d1-1f3ff-200d-1f527":0,"1f9d1-1f3fb-200d-1f52c":0,"1f9d1-1f3fc-200d-1f52c":0,"1f9d1-1f3fd-200d-1f52c":0,"1f9d1-1f3fe-200d-1f52c":0,"1f9d1-1f3ff-200d-1f52c":0,"1f9d1-1f3fb-200d-1f680":0,"1f9d1-1f3fc-200d-1f680":0,"1f9d1-1f3fd-200d-1f680":0,"1f9d1-1f3fe-200d-1f680":0,"1f9d1-1f3ff-200d-1f680":0,"1f9d1-1f3fb-200d-1f692":0,"1f9d1-1f3fc-200d-1f692":0,"1f9d1-1f3fd-200d-1f692":0,"1f9d1-1f3fe-200d-1f692":0,"1f9d1-1f3ff-200d-1f692":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fb-200d-1f9af":0,"1f9d1-1f3fc-200d-1f9af":0,"1f9d1-1f3fd-200d-1f9af":0,"1f9d1-1f3fe-200d-1f9af":0,"1f9d1-1f3ff-200d-1f9af":0,"1f9d1-1f3fb-200d-1f9b0":0,"1f9d1-1f3fc-200d-1f9b0":0,"1f9d1-1f3fd-200d-1f9b0":0,"1f9d1-1f3fe-200d-1f9b0":0,"1f9d1-1f3ff-200d-1f9b0":0,"1f9d1-1f3fb-200d-1f9b1":0,"1f9d1-1f3fc-200d-1f9b1":0,"1f9d1-1f3fd-200d-1f9b1":0,"1f9d1-1f3fe-200d-1f9b1":0,"1f9d1-1f3ff-200d-1f9b1":0,"1f9d1-1f3fb-200d-1f9b2":0,"1f9d1-1f3fc-200d-1f9b2":0,"1f9d1-1f3fd-200d-1f9b2":0,"1f9d1-1f3fe-200d-1f9b2":0,"1f9d1-1f3ff-200d-1f9b2":0,"1f9d1-1f3fb-200d-1f9b3":0,"1f9d1-1f3fc-200d-1f9b3":0,"1f9d1-1f3fd-200d-1f9b3":0,"1f9d1-1f3fe-200d-1f9b3":0,"1f9d1-1f3ff-200d-1f9b3":0,"1f9d1-1f3fb-200d-1f9bc":0,"1f9d1-1f3fc-200d-1f9bc":0,"1f9d1-1f3fd-200d-1f9bc":0,"1f9d1-1f3fe-200d-1f9bc":0,"1f9d1-1f3ff-200d-1f9bc":0,"1f9d1-1f3fb-200d-1f9bd":0,"1f9d1-1f3fc-200d-1f9bd":0,"1f9d1-1f3fd-200d-1f9bd":0,"1f9d1-1f3fe-200d-1f9bd":0,"1f9d1-1f3ff-200d-1f9bd":0,"1f9d1-1f3fb-200d-2695":0,"1f9d1-1f3fc-200d-2695":0,"1f9d1-1f3fd-200d-2695":0,"1f9d1-1f3fe-200d-2695":0,"1f9d1-1f3ff-200d-2695":0,"1f9d1-1f3fb-200d-2696":0,"1f9d1-1f3fc-200d-2696":0,"1f9d1-1f3fd-200d-2696":0,"1f9d1-1f3fe-200d-2696":0,"1f9d1-1f3ff-200d-2696":0,"1f9d1-1f3fb-200d-2708":0,"1f9d1-1f3fc-200d-2708":0,"1f9d1-1f3fd-200d-2708":0,"1f9d1-1f3fe-200d-2708":0,"1f9d1-1f3ff-200d-2708":0,"1f9d1-1f3fb":0,"1f9d1-1f3fc":0,"1f9d1-1f3fd":0,"1f9d1-1f3fe":0,"1f9d1-1f3ff":0,"1f9d2-1f3fb":0,"1f9d2-1f3fc":0,"1f9d2-1f3fd":0,"1f9d2-1f3fe":0,"1f9d2-1f3ff":0,"1f9d3-1f3fb":0,"1f9d3-1f3fc":0,"1f9d3-1f3fd":0,"1f9d3-1f3fe":0,"1f9d3-1f3ff":0,"1f9d4-1f3fb-200d-2640":0,"1f9d4-1f3fc-200d-2640":0,"1f9d4-1f3fd-200d-2640":0,"1f9d4-1f3fe-200d-2640":0,"1f9d4-1f3ff-200d-2640":0,"1f9d4-1f3fb-200d-2642":0,"1f9d4-1f3fc-200d-2642":0,"1f9d4-1f3fd-200d-2642":0,"1f9d4-1f3fe-200d-2642":0,"1f9d4-1f3ff-200d-2642":0,"1f9d4-1f3fb":0,"1f9d4-1f3fc":0,"1f9d4-1f3fd":0,"1f9d4-1f3fe":0,"1f9d4-1f3ff":0,"1f9d5-1f3fb":0,"1f9d5-1f3fc":0,"1f9d5-1f3fd":0,"1f9d5-1f3fe":0,"1f9d5-1f3ff":0,"1f9d6-1f3fb-200d-2640":0,"1f9d6-1f3fc-200d-2640":0,"1f9d6-1f3fd-200d-2640":0,"1f9d6-1f3fe-200d-2640":0,"1f9d6-1f3ff-200d-2640":0,"1f9d6-1f3fb-200d-2642":0,"1f9d6-1f3fc-200d-2642":0,"1f9d6-1f3fd-200d-2642":0,"1f9d6-1f3fe-200d-2642":0,"1f9d6-1f3ff-200d-2642":0,"1f9d6-1f3fb":0,"1f9d6-1f3fc":0,"1f9d6-1f3fd":0,"1f9d6-1f3fe":0,"1f9d6-1f3ff":0,"1f9d7-1f3fb-200d-2640":0,"1f9d7-1f3fc-200d-2640":0,"1f9d7-1f3fd-200d-2640":0,"1f9d7-1f3fe-200d-2640":0,"1f9d7-1f3ff-200d-2640":0,"1f9d7-1f3fb-200d-2642":0,"1f9d7-1f3fc-200d-2642":0,"1f9d7-1f3fd-200d-2642":0,"1f9d7-1f3fe-200d-2642":0,"1f9d7-1f3ff-200d-2642":0,"1f9d7-1f3fb":0,"1f9d7-1f3fc":0,"1f9d7-1f3fd":0,"1f9d7-1f3fe":0,"1f9d7-1f3ff":0,"1f9d8-1f3fb-200d-2640":0,"1f9d8-1f3fc-200d-2640":0,"1f9d8-1f3fd-200d-2640":0,"1f9d8-1f3fe-200d-2640":0,"1f9d8-1f3ff-200d-2640":0,"1f9d8-1f3fb-200d-2642":0,"1f9d8-1f3fc-200d-2642":0,"1f9d8-1f3fd-200d-2642":0,"1f9d8-1f3fe-200d-2642":0,"1f9d8-1f3ff-200d-2642":0,"1f9d8-1f3fb":0,"1f9d8-1f3fc":0,"1f9d8-1f3fd":0,"1f9d8-1f3fe":0,"1f9d8-1f3ff":0,"1f9d9-1f3fb-200d-2640":0,"1f9d9-1f3fc-200d-2640":0,"1f9d9-1f3fd-200d-2640":0,"1f9d9-1f3fe-200d-2640":0,"1f9d9-1f3ff-200d-2640":0,"1f9d9-1f3fb-200d-2642":0,"1f9d9-1f3fc-200d-2642":0,"1f9d9-1f3fd-200d-2642":0,"1f9d9-1f3fe-200d-2642":0,"1f9d9-1f3ff-200d-2642":0,"1f9d9-1f3fb":0,"1f9d9-1f3fc":0,"1f9d9-1f3fd":0,"1f9d9-1f3fe":0,"1f9d9-1f3ff":0,"1f9da-1f3fb-200d-2640":0,"1f9da-1f3fc-200d-2640":0,"1f9da-1f3fd-200d-2640":0,"1f9da-1f3fe-200d-2640":0,"1f9da-1f3ff-200d-2640":0,"1f9da-1f3fb-200d-2642":0,"1f9da-1f3fc-200d-2642":0,"1f9da-1f3fd-200d-2642":0,"1f9da-1f3fe-200d-2642":0,"1f9da-1f3ff-200d-2642":0,"1f9da-1f3fb":0,"1f9da-1f3fc":0,"1f9da-1f3fd":0,"1f9da-1f3fe":0,"1f9da-1f3ff":0,"1f9db-1f3fb-200d-2640":0,"1f9db-1f3fc-200d-2640":0,"1f9db-1f3fd-200d-2640":0,"1f9db-1f3fe-200d-2640":0,"1f9db-1f3ff-200d-2640":0,"1f9db-1f3fb-200d-2642":0,"1f9db-1f3fc-200d-2642":0,"1f9db-1f3fd-200d-2642":0,"1f9db-1f3fe-200d-2642":0,"1f9db-1f3ff-200d-2642":0,"1f9db-1f3fb":0,"1f9db-1f3fc":0,"1f9db-1f3fd":0,"1f9db-1f3fe":0,"1f9db-1f3ff":0,"1f9dc-1f3fb-200d-2640":0,"1f9dc-1f3fc-200d-2640":0,"1f9dc-1f3fd-200d-2640":0,"1f9dc-1f3fe-200d-2640":0,"1f9dc-1f3ff-200d-2640":0,"1f9dc-1f3fb-200d-2642":0,"1f9dc-1f3fc-200d-2642":0,"1f9dc-1f3fd-200d-2642":0,"1f9dc-1f3fe-200d-2642":0,"1f9dc-1f3ff-200d-2642":0,"1f9dc-1f3fb":0,"1f9dc-1f3fc":0,"1f9dc-1f3fd":0,"1f9dc-1f3fe":0,"1f9dc-1f3ff":0,"1f9dd-1f3fb-200d-2640":0,"1f9dd-1f3fc-200d-2640":0,"1f9dd-1f3fd-200d-2640":0,"1f9dd-1f3fe-200d-2640":0,"1f9dd-1f3ff-200d-2640":0,"1f9dd-1f3fb-200d-2642":0,"1f9dd-1f3fc-200d-2642":0,"1f9dd-1f3fd-200d-2642":0,"1f9dd-1f3fe-200d-2642":0,"1f9dd-1f3ff-200d-2642":0,"1f9dd-1f3fb":0,"1f9dd-1f3fc":0,"1f9dd-1f3fd":0,"1f9dd-1f3fe":0,"1f9dd-1f3ff":0,"261d-1f3fb":0,"261d-1f3fc":0,"261d-1f3fd":0,"261d-1f3fe":0,"261d-1f3ff":0,"26f9-1f3fb-200d-2640":0,"26f9-1f3fc-200d-2640":0,"26f9-1f3fd-200d-2640":0,"26f9-1f3fe-200d-2640":0,"26f9-1f3ff-200d-2640":0,"26f9-1f3fb-200d-2642":0,"26f9-1f3fc-200d-2642":0,"26f9-1f3fd-200d-2642":0,"26f9-1f3fe-200d-2642":0,"26f9-1f3ff-200d-2642":0,"26f9-1f3fb":0,"26f9-1f3fc":0,"26f9-1f3fd":0,"26f9-1f3fe":0,"26f9-1f3ff":0,"270a-1f3fb":0,"270a-1f3fc":0,"270a-1f3fd":0,"270a-1f3fe":0,"270a-1f3ff":0,"270b-1f3fb":0,"270b-1f3fc":0,"270b-1f3fd":0,"270b-1f3fe":0,"270b-1f3ff":0,"270c-1f3fb":0,"270c-1f3fc":0,"270c-1f3fd":0,"270c-1f3fe":0,"270c-1f3ff":0,"270d-1f3fb":0,"270d-1f3fc":0,"270d-1f3fd":0,"270d-1f3fe":0,"270d-1f3ff":0}},n=s[""];for(const e in s)e&&Object.assign(n,s[e]);const i=n},4762:(e,t,a)=>{a.d(t,{IS_FIREFOX:()=>r,IS_SAFARI:()=>i});var s=a(6761);const n=navigator?navigator.userAgent:null,i=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&s.Z.MSStream,!!("safari"in s.Z)||!(!n||!(/\b(iPad|iPhone|iPod)\b/.test(n)||n.match("Safari")&&!n.match("Chrome")))),r=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;(void 0===navigator.maxTouchPoints||navigator.maxTouchPoints>0)&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},467:(e,t,a)=>{a.d(t,{ZP:()=>o,gV:()=>p});var s=a(5813);const n=/[`~!@#$%^&*()\-_=+\[\]\\|{}'";:\/?.>,<]+/g,i=/^\s+|\s$/g,r={ะน:"q",ั†:"w",ัƒ:"e",ะบ:"r",ะต:"t",ะฝ:"y",ะณ:"u",ัˆ:"i",ั‰:"o",ะท:"p",ั…:"[",ัŠ:"]",ั„:"a",ั‹:"s",ะฒ:"d",ะฐ:"f",ะฟ:"g",ั€:"h",ะพ:"j",ะป:"k",ะด:"l",ะถ:";",ั:"'",ั:"z",ั‡:"x",ั:"c",ะผ:"v",ะธ:"b",ั‚:"n",ัŒ:"m",ะฑ:",",ัŽ:".",".":"/"};function o(e,t=!0){return p(e,{clearBadChars:!0,latinize:t,ignoreCase:!0})}function p(e,t={}){const a=t.includeTag&&"%"===e.charAt(0),o=e;return t.clearBadChars&&(e=function(e){return e.replace(n,"").replace(i,"")}(e)),t.latinize&&(e=function(e){return e.replace(/[^A-Za-z0-9]/g,(e=>{const t=s.Z[e];return null!=t?t:e}))}(e)),t.ignoreCase&&(e=e.toLowerCase()),a&&(e="%"+e),t.latinize&&(e+=""+function(e){return e.toLowerCase().replace(/[\wะฐ-ั]/g,(e=>{const t=r[e];return null!=t?t:e}))}(o)),e}},8801:(e,t,a)=>{a.d(t,{P:()=>n,q:()=>i});const s="_";function n(e,t){const a=""["".length-1]||"";let n;switch(e._){case"inputPhotoFileLocation":n=["photo",""[0],e.id,e.thumb_size].filter(Boolean).join(s);break;case"inputDocumentFileLocation":n=["document",""[0],e.id,e.thumb_size].filter(Boolean).join(s);break;case"inputPeerPhotoFileLocation":n=["peerPhoto",e.photo_id,e.pFlags.big?"big":"small"].join(s);break;case"inputStickerSetThumb":n=["stickerSetThumb",e.stickerset.id||e.stickerset.short_name||e.stickerset.emoticon||e.stickerset._,e.thumb_version].join(s);break;case"inputFileLocation":n=[e.volume_id,e.local_id].join(s);break;case"inputWebFileLocation":n=["webFile",e.url].join(s);break;default:console.error("Unrecognized location:",e),n=""}return n+((null==t?void 0:t.downloadId)?"_download":"")+(a?"."+a:a)}function i(e,t){return e+"/"+encodeURIComponent(JSON.stringify(t))}},677:(e,t,a)=>{a.d(t,{Ki:()=>o,RP:()=>i,X:()=>r});const s=new Set(["all","web","webk"]),n=new Set;function i(e){return e.find((e=>s.has(e.platform)&&!n.has(e.reason)))}function r(e){return!!i(e)}function o(e){n.clear(),e.forEach((e=>{n.add(e)}))}},2946:(e,t,a)=>{a.d(t,{Z:()=>i});var s=a(5880),n=a(1507);function i(e){if(void 0!==e&&e.isPeerId&&e.isPeerId())return e;if((0,s.Z)(e)){const t=e.user_id;if(void 0!==t)return t.toPeerId(!1);const a=e.channel_id||e.chat_id;return void 0!==a?a.toPeerId(!0):n.NM}if(!e)return n.NM;const t="u"===e.charAt(0),a=e.substr(1).split("_");return t?a[0].toPeerId():(a[0]||"").toPeerId(!0)}},6666:(e,t,a)=>{a.d(t,{C:()=>o,Z:()=>p});var s=a(1267),n=a(5471),i=a(5953),r=a(5003);class o{constructor(e){(0,i.Z)(this,e),s.Z.test&&(this.name+="_test"),this.storageIsAvailable=!0,this.log=(0,r.kg)(["IDB",e.name].join("-")),this.log("constructor"),this.openDatabase(!0),o.INSTANCES.push(this)}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;const t=(e,t)=>{var a;const s=Array.from(e.indexNames);for(const t of s)e.deleteIndex(t);if(null===(a=t.indexes)||void 0===a?void 0:a.length)for(const a of t.indexes)e.indexNames.contains(a.indexName)||e.createIndex(a.indexName,a.keyPath,a.objectParameters)};try{var a=indexedDB.open(this.name,this.version);if(!a)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let s=!1;return setTimeout((()=>{s||a.onerror((0,n.Z)("IDB_CREATE_TIMEOUT"))}),3e3),this.openDbPromise=new Promise(((e,n)=>{a.onsuccess=t=>{s=!0;const i=a.result;let r=!1;this.log("Opened"),i.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},i.onclose=e=>{this.log.error("closed:",e),!r&&this.openDatabase()},i.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(r=!0),t.onerror&&t.onerror(e),i.close()},i.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=i)},a.onerror=e=>{s=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},a.onupgradeneeded=e=>{s=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);const a=e.target,n=a.result;this.stores.forEach((e=>{if(n.objectStoreNames.contains(e.name)){const s=a.transaction.objectStore(e.name);t(s,e)}else((e,a)=>{const s=e.createObjectStore(a.name);t(s,a)})(n,e)}))}}))}static create(e){var t;return null!==(t=this.INSTANCES.find((t=>t.name===e.name)))&&void 0!==t?t:new o(e)}static closeDatabases(e){this.INSTANCES.forEach((t=>{if(e&&e===t)return;const a=t.db;a&&(a.onclose=()=>{},a.close())}))}}o.INSTANCES=[];class p{constructor(e,t){this.storeName=t,this.log=(0,r.kg)(["IDB",e.name,t].join("-")),this.idb=o.create(e)}delete(e,t){const a=Array.isArray(e);return a||(e=[].concat(e)),this.getObjectStore("readwrite",(t=>{const s=e.map((e=>t.delete(e)));return a?s:s[0]}),"",t)}clear(e){return this.getObjectStore("readwrite",(e=>e.clear()),"",e)}save(e,t,a){const s=Array.isArray(e);return s||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",(a=>{const n=e.map(((e,s)=>a.put(t[s],e)));return s?n:n[0]}),"",a)}get(e,t){const a=Array.isArray(e);if(a){if(!e.length)return Promise.resolve([])}else{if(!e)return;e=[].concat(e)}return this.getObjectStore("readonly",(t=>{const s=e.map((e=>t.get(e)));return a?s:s[0]}),"",t)}getObjectStore(e,t,a,s=this.storeName){let n;return a&&(n=performance.now(),this.log(a+": start")),this.idb.openDatabase().then((i=>new Promise(((r,o)=>{const p=i.transaction([s],e),d=()=>{clearTimeout(l),o(p.error)},f=()=>{clearTimeout(l),a&&this.log(a+": end",performance.now()-n);const e=h.map((e=>e.result));r(g?e:e[0])};p.onerror=d;const c="readwrite"===e;c&&(p.oncomplete=()=>f());const l=setTimeout((()=>{this.log.error("transaction not finished",p,a)}),1e4),m=t(p.objectStore(s)),g=Array.isArray(m),h=g?m:[].concat(m);if(c)return;const u=h.length;let y=u;const _=()=>{p.error||--y||f()};for(let e=0;ee.getAll()),"",e)}}},9092:(e,t,a)=>{a.d(t,{r:()=>Ks,H:()=>zs}),a(690),a(4110);var s=a(8630);let n;function i(){return n}function r(e){return n=e}var o=a(1507),p=a(3241),d=a(410),f=a(3206),c=a(1352);class l extends p.Z{constructor(){super(),this.myId=o.NM,this.connectionStatus={},this.premium=!1,this.addEventListener("user_auth",(({id:e})=>{this.myId=e.toPeerId()})),this.addEventListener("premium_toggle_private",(({isNew:e,isPremium:t})=>{this.premium=t,this.dispatchEventSingle("premium_toggle",t)})),this.addEventListener("connection_status_change",(e=>{this.connectionStatus[e.name]=e})),this.dispatchEvent=(e,...t)=>{super.dispatchEvent(e,...t),f.Z.getInstance().invokeVoid("event",{name:e,args:t})},c.kC||this.addEventListener("settings_updated",(({settings:e})=>{this.settings=e}))}getConnectionStatus(){return this.connectionStatus}getPremium(){return this.premium}dispatchEventSingle(...e){super.dispatchEvent(...e)}}const m=new l;d.GO.rootScope=m;const g=m;var h=a(7922),u=a(9750);const y=new class{constructor(){this.state={},this.storage=h.Z}getState(){return Promise.resolve(this.state)}setByKey(e,t){!function(e,t,a){const s=t.split(".");(0,u.Z)(e,s.slice(0,-1).join("."))[s.pop()]=a}(this.state,e,t);const a=e.split(".")[0];"settings"===a&&g.dispatchEvent("settings_updated",{key:e,value:t,settings:this.state.settings}),this.pushToState(a,this.state[a])}pushToState(e,t,a=!0,s){a&&(this.state[e]=t),this.setKeyValueToStorage(e,t,s)}setKeyValueToStorage(e,t=this.state[e],a){f.Z.getInstance().invokeVoid("mirror",{name:"state",key:e,value:t}),this.storage.set({[e]:t},a)}};var _=a(4159),v=a(3725),P=a(5418),b=a(1267),M=a(1655),S=a(5003);class I{constructor(e,t,a){this.dcId=e,this.url=t,this.pending=[],this.debug=b.Z.debug&&!1;let s=S.v9.Error|S.v9.Log;this.debug&&(s|=S.v9.Debug),this.log=(0,S.kg)(`HTTP-${e}`+a,s),this.log("constructor"),this.connected=!1}_send(e,t){const a=e.length;return this.debug&&this.log.debug("-> body length to send:",a),fetch(this.url,{method:"POST",body:e,mode:t}).then((e=>{if(200!==e.status&&!t)throw e.arrayBuffer().then((e=>{this.log.error("not 200",new TextDecoder("utf-8").decode(new Uint8Array(e)))})),e;return this.setConnected(!0),e.arrayBuffer().then((e=>new Uint8Array(e)))}),(e=>{throw this.setConnected(!1),e}))}setConnected(e){this.connected===e||this.destroyed||(this.connected=e,Z.setTransportValue("https",e))}destroy(){this.setConnected(!1),this.destroyed=!0,this.pending.forEach((e=>e.reject())),this.pending.length=0}send(e){if(this.networker)return this._send(e);{const t=new Promise(((t,a)=>{this.pending.push({resolve:t,reject:a,body:e})}));return this.releasePending(),t}}releasePending(){return e=this,t=void 0,s=function*(){if(!this.releasing){this.releasing=!0;for(let e=0;e{this.log("opened"),this.debug&&this.log.debug("sending init packet"),this.dispatchEvent("open")},this.handleError=e=>{this.log.error("handleError",e),this.close()},this.handleClose=e=>{this.log("closed",e),this.removeListeners(),this.dispatchEvent("close")},this.handleMessage=e=>{this.debug&&this.log.debug("<-","handleMessage",e.data.byteLength),this.dispatchEvent("message",e.data)},this.send=e=>{this.debug&&this.log.debug("-> body length to send:",e.length),this.ws.send(e)};let s=S.v9.Error|S.v9.Log;return this.debug&&(s|=S.v9.Debug),this.log=(0,S.kg)(`WS-${e}`+a,s),this.log("constructor"),this.connect(),this}removeListeners(){this.ws&&(this.ws.removeEventListener("open",this.handleOpen),this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("error",this.handleError),this.ws.removeEventListener("message",this.handleMessage),this.ws=void 0)}connect(){this.ws=new WebSocket(this.url,"binary"),this.ws.binaryType="arraybuffer",this.ws.addEventListener("open",this.handleOpen),this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("error",this.handleError),this.ws.addEventListener("message",this.handleMessage)}close(){if(this.ws){this.log("close execution");try{this.ws.close()}catch(e){}this.handleClose()}}}function w(e){if(!crypto||!("getRandomValues"in crypto))throw new Error("NO_SECURE_RANDOM");return crypto.getRandomValues(e),e}var k=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class A{constructor(){this._process=(e,t)=>s.Z.invokeCryptoNew({method:"aes-ctr-process",args:[{id:this.id,data:e,operation:t}],transfer:[e.buffer]})}init(e){return k(this,void 0,void 0,(function*(){void 0!==this.idPromise&&this.release();const t=new Uint8Array(64);for(w(t);;){const e=t[3]<<24|t[2]<<16|t[1]<<8|t[0],a=t[7]<<24|t[6]<<16|t[5]<<8|t[4];if(239!==t[0]&&1145128264!==e&&1414745936!==e&&542393671!==e&&1230262351!==e&&4008636142!==e&&3722304989!==e&&0!==a)break;w(t)}const a=t.slice().reverse(),n=t.slice(8,40),i=t.slice(40,56),r=a.slice(8,40),o=a.slice(40,56),p=this.idPromise=s.Z.invokeCrypto("aes-ctr-prepare",{encKey:n,encIv:i,decKey:r,decIv:o});this.process=(e,t)=>k(this,void 0,void 0,(function*(){return yield p,this._process(e,t)})),this.id=yield p,this.process=this._process,t.set(e.obfuscateTag,56);const d=yield this.encode(t.slice());return t.set(d.slice(56,64),56),t}))}encode(e){return this.process(e,"encrypt")}decode(e){return this.process(e,"decrypt")}release(){return k(this,void 0,void 0,(function*(){const e=this.idPromise;if(void 0===e)return;this.id=void 0,this.idPromise=void 0;const t=yield e;s.Z.invokeCrypto("aes-ctr-destroy",t)}))}destroy(){this.release()}}const U=new class{constructor(){this.tag=239,this.obfuscateTag=new Uint8Array([this.tag,this.tag,this.tag,this.tag])}encodePacket(e){const t=e.byteLength>>2;let a;return a=t<127?new Uint8Array([t]):new Uint8Array([127,255&t,t>>8&255,t>>16&255]),a.concat(e)}readPacket(e){let t=e[0];return t>=127?(t=e[1]|e[2]<<8|e[3]<<16,e.slice(4,t<<3)):e.slice(1,t<<3)}};var D=a(9174);function E(e){const t=e.length,a=new Array(t);for(let s=0;sF(this,void 0,void 0,(function*(){this.connected=!0,Z.setTransportOpened("websocket");const e=yield this.obfuscation.init(this.codec);this.connected&&(this.connection.send(e),this.networker&&(this.pending.length=0,this.networker.setConnectionStatus(D.Q.Connected),this.networker.cleanupSent(),this.networker.resend()),setTimeout((()=>{this.releasePending()}),0))})),this.onMessage=e=>F(this,void 0,void 0,(function*(){let t=yield this.obfuscation.decode(new Uint8Array(e));if(t=this.codec.readPacket(t),this.networker)return this.debug&&this.log.debug("redirecting to networker",t.length),void this.networker.parseResponse(t).then((e=>{this.debug&&this.log.debug("redirecting to networker response:",e);try{this.networker.processMessage(e.response,e.messageId,e.sessionId)}catch(e){this.log.error("handleMessage networker processMessage error",e)}})).catch((e=>{this.log.error("handleMessage networker parseResponse error",e)}));const a=this.pending.shift();a?a.resolve(t):this.debug&&this.log.debug("no pending for res:",E(t))})),this.onClose=()=>{let e,t;if(this.clear(),this.autoReconnect){const a=Date.now(),s=a-this.lastCloseTime;e=!isNaN(s)&&s{if(void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0),!this.connection){if(this.log("trying to reconnect..."),this.lastCloseTime=Date.now(),this.networker)this.networker.setConnectionStatus(D.Q.Connecting);else for(const e of this.pending)e.bodySent&&(e.bodySent=!1);this.connect()}};let i=S.v9.Error|S.v9.Log;this.debug&&(i|=S.v9.Debug),this.log=(0,S.kg)(`TCP-${t}`+s,i),this.log("constructor"),this.connect()}clear(){this.connected&&Z.setTransportClosed("websocket"),this.connected=!1,this.connection&&(this.connection.removeEventListener("open",this.onOpen),this.connection.removeEventListener("close",this.onClose),this.connection.removeEventListener("message",this.onMessage),this.connection=void 0)}forceReconnect(){this.close(),this.reconnect()}destroy(){this.setAutoReconnect(!1),this.close(),this.obfuscation&&this.obfuscation.destroy(),this.pending.forEach((e=>{e.reject&&e.reject()})),this.pending.length=0}close(){const e=this.connection;if(e){const t=this.connected;this.clear(),t&&(e.addEventListener("message",this.onMessage),e.addEventListener("close",(()=>{e.removeEventListener("message",this.onMessage)}),{once:!0}),e.close())}}setAutoReconnect(e){this.autoReconnect=e,e?this.connection||void 0!==this.reconnectTimeout||this.reconnect():void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}connect(){this.connection&&this.close(),this.connection=new this.Connection(this.dcId,this.url,this.logSuffix),this.connection.addEventListener("open",this.onOpen),this.connection.addEventListener("close",this.onClose),this.connection.addEventListener("message",this.onMessage)}changeUrl(e){this.url!==e&&(this.url=e,this.forceReconnect())}encodeBody(e){const t=this.codec.encodePacket(e);return this.obfuscation.encode(t)}send(e){this.debug&&this.log.debug("-> body length to pending:",e.length);const t=void 0;if(!this.networker){const a=new Promise(((a,s)=>{this.pending.push({resolve:a,reject:s,body:e,encoded:t})}));return this.releasePending(),a}this.pending.push({body:e,encoded:t}),this.releasePending()}releasePending(){var e;return F(this,void 0,void 0,(function*(){if(!this.connected||this.releasingPending)return;this.releasingPending=!0;let t=this.pending.length,a=!1;for(let s=0;s body length to send:",i.length);const r=null!==(e=n.encoded)&&void 0!==e?e:n.encoded=yield this.encodeBody(i);if(!this.connected)break;this.connection.send(r),n.resolve?n.bodySent=!0:(this.pending.splice(s--,1),t--),a=!0}}this.releasingPending=void 0,this.pending.length&&a&&this.releasePending()}))}}const x=b.Z.test?"_test":"";function B(e){return"client"===e?"":"-1"}function V(e,t,a){const s=B(t),n="client"!==t?"apiws"+x+(a?"_premium":""):"apiws"+x;return`wss://${_.Z.suffix.toLowerCase()}ws${e}${s}.web.telegram.org/${n}`}class O{constructor(){this.sslSubdomains=["pluto","venus","aurora","vesta","flora"],this.dcOptions=b.Z.test?[{id:1,host:"149.154.175.10",port:80},{id:2,host:"149.154.167.40",port:80},{id:3,host:"149.154.175.117",port:80}]:[{id:1,host:"149.154.175.50",port:80},{id:2,host:"149.154.167.50",port:80},{id:3,host:"149.154.175.100",port:80},{id:4,host:"149.154.167.91",port:80},{id:5,host:"149.154.171.5",port:80}],this.chosenServers={},this.transportSocket=(e,t,a)=>{const s=V(e,t,a);let n;return n=C,new R(n,e,s,"upload"===t?"-U":"download"===t?"-D":"",1e4)},this.transportHTTP=(e,t,a)=>{let s;if(b.Z.ssl||!b.Z.http){const a=B(t);s="https://"+(this.sslSubdomains[e-1]+a)+".web.telegram.org/"+(b.Z.test?"apiw_test1":"apiw1")}else for(const t of this.dcOptions)if(t.id===e){s="http://"+t.host+(80!==t.port?":"+t.port:"")+"/apiw1";break}return new I(e,s,"upload"===t?"-U":"download"===t?"-D":"")}}chooseServer(e,t="client",a=b.Z.transport,s=!0,n){this.chosenServers.hasOwnProperty(a)||(this.chosenServers[a]={client:{},download:{},upload:{}});const i=this.chosenServers[a][t];e in i||(i[e]=[]);const r=i[e];if(!r.length||!s){let i;return i=("websocket"===a?this.transportSocket:this.transportHTTP)(e,t,n),i?(s&&r.push(i),i):(console.error("No chosenServer!",e),null)}return r[0]}static removeTransport(e,t){for(const a in e)for(const s in e[a])for(const n in e[a][s]){const i=e[a][s][n];(0,M.Z)(i,t)}}}var L=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class N extends p.Z{constructor(){super(!0),this.opened=new Map,this.addEventListener("change",(e=>{e.get("websocket")||this.waitForWebSocket()}))}pingTransports(){var e;return L(this,void 0,void 0,(function*(){const t=null!==(e=this.dcConfigurator)&&void 0!==e?e:this.dcConfigurator=new O,a=this.transports={https:t.chooseServer(_.Z.baseDcId,"client","https",!1),websocket:t.chooseServer(_.Z.baseDcId,"client","websocket",!1)},s=(0,v.Z)();this.transports.https._send(new Uint8Array,"no-cors").then((()=>s.resolve(!0)),(()=>s.resolve(!1))),setTimeout((()=>s.resolve(!1)),2e3);const n=(0,v.Z)(),i=a.websocket;i.setAutoReconnect(!1),i.connection.addEventListener("close",(()=>n.resolve(!1)),{once:!0}),i.connection.addEventListener("open",(()=>n.resolve(!0)),{once:!0}),setTimeout((()=>{n.isFulfilled||n.isRejected||(i.connection&&i.connection.close(),n.resolve(!1))}),2e3);const[r,o]=yield Promise.all([s,n]);for(const e in a)a[e].destroy();return{https:r||this.opened.get("https")>0,websocket:o||this.opened.get("websocket")>0}}))}waitForWebSocket(){return L(this,void 0,void 0,(function*(){if(!this.pinging){for(this.pinging=!0;;){const{https:e,websocket:t}=yield this.pingTransports();if((e||t)&&this.dispatchEvent("transport",t||!e?"websocket":"https"),t)break;yield(0,P.Z)(1e4)}this.pinging=!1}}))}setTransportValue(e,t){let a=this.opened.get(e)||0;a+=t?1:-1,this.opened.set(e,a),this.dispatchEvent("change",this.opened)}setTransportOpened(e){return this.setTransportValue(e,!0)}setTransportClosed(e){return this.setTransportValue(e,!1)}}const Z=new N,j=(0,v.Z)();var q=a(6654);class G{setManagers(e){Object.assign(this,e)}}var H=a(3127),W=a(3989),z=a(5466);let K;function J(e){return null!=K?K:K=function(e){return t=this,a=void 0,n=function*(){const t=(0,z.$)((0,S.kg)("STORAGES-LOADER")),a=Object.keys(e),s=a.map((a=>{const s=e[a].getAll();return t(s,"storage "+a)})),n={},i=yield Promise.all(s);for(let e=0,t=a.length;e({storage:this.storages[e],results:t[e]})))},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}}class Q extends G{getState(){return this.apiManager.invokeApi("account.getPassword").then((e=>e))}updateSettings(e={}){return this.getState().then((t=>{let a,s;const n={password:null,new_settings:{_:"account.passwordInputSettings",hint:e.hint,email:e.email}};a=e.currentPassword?this.cryptoWorker.invokeCrypto("computeSRP",e.currentPassword,t,!1):Promise.resolve({_:"inputCheckPasswordEmpty"});const i=t.new_algo,r=new Uint8Array(i.salt1.length+32);return w(r),r.set(i.salt1,0),i.salt1=r,s=e.newPassword?this.cryptoWorker.invokeCrypto("computeSRP",e.newPassword,t,!0):Promise.resolve(new Uint8Array),Promise.all([a,s]).then((e=>(n.password=e[0],n.new_settings.new_algo=i,n.new_settings.new_password_hash=e[1],this.apiManager.invokeApi("account.updatePasswordSettings",n))))}))}getInputCheckPassword(e,t){return this.cryptoWorker.invokeCrypto("computeSRP",e,t,!1)}check(e,t,a={}){return this.getInputCheckPassword(e,t).then((e=>this.apiManager.invokeApi("auth.checkPassword",{password:e},a).then((e=>("auth.authorization"===e._&&this.apiManager.setUser(e.user),e)))))}confirmPasswordEmail(e){return this.apiManager.invokeApi("account.confirmPasswordEmail",{code:e})}resendPasswordEmail(){return this.apiManager.invokeApi("account.resendPasswordEmail")}cancelPasswordEmail(){return this.apiManager.invokeApi("account.cancelPasswordEmail")}}var Y=a(6848),X=a(5471);class ee extends G{constructor(){super(...arguments),this.contexts=new Map,this.links={},this.log=(0,S.kg)("RD",void 0,!0)}saveContext(e,t,a){[a,e]=this.getContexts(e),a||(a=new Set,this.contexts.set(e,a)),this.links[E(e)]=e;for(const e of a)if((0,Y.Z)(e,t))return;a.add(t)}getReferenceByLink(e){return this.links[E(e)]}getContexts(e){return[this.contexts.get(e)||(e=this.getReferenceByLink(e)||e,this.contexts.get(e)),e]}getContext(e){const t=this.getContexts(e);return t[0]?[t[0].values().next().value,t[1]]:void 0}deleteContext(e,t,a){if([a,e]=this.getContexts(e),a)for(const s of a)if((0,Y.Z)(s,t))return a.delete(s),a.size||(this.contexts.delete(e),delete this.links[E(e)]),!0;return!1}refreshReference(e,t){if(this.log("refreshReference: start",e.slice(),t),!t){const a=this.getContext(e);if(!a)return this.log("refreshReference: got no context for reference:",e.slice()),Promise.reject("NO_CONTEXT");[t,e]=a}let a;switch(null==t?void 0:t.type){case"message":a=this.appMessagesManager.reloadMessages(t.peerId,t.messageId,!0);break;case"emojiesSounds":a=this.refreshEmojiesSoundsPromise||this.appStickersManager.getAnimatedEmojiSounds(!0).then((()=>{this.refreshEmojiesSoundsPromise=void 0}));break;case"userFull":a=Promise.resolve(this.appProfileManager.getProfile(t.userId,!0));break;case"customEmoji":a=this.appEmojiManager.getCustomEmojiDocuments([t.docId]);break;case"attachMenuBotIcon":a=this.appAttachMenuBotsManager.getAttachMenuBot(t.botId,!0);break;case"wallPaper":a=this.appThemesManager.getWallPaperById(t.wallPaperId);break;default:return this.log.warn("refreshReference: not implemented context",t),Promise.reject()}const s=E(e);return this.log("refreshReference: refreshing reference:",s),a.then((()=>{const a=E(e);if(this.log("refreshReference: refreshed, reference before:",s,"after:",a),s!==a)return e;this.deleteContext(e,t);const n=this.getContext(e);if(n)return this.refreshReference(e,n[0]);throw this.log.error("refreshReference: no new context, reference before:",s,"after:",a,t),(0,X.Z)("NO_NEW_CONTEXT")}))}}var te=a(7298),ae=a(7381),se=a(252),ne=a(7625),ie=a(6519);function re(e,t){if(!e)return t;for(var a in e)t.hasOwnProperty(a)||delete e[a];for(var a in t)e[a]=t[a];return e}var oe=a(2790),pe=a(3781),de=a(3385),fe=a(5880),ce=a(8050),le=a(2946);function me(e){var t,a;const s=[e.fromId,e.viaBotId,e.fwdFromId],n=e.media;if(n){const e=n.user_id;void 0!==e&&s.push(e.toPeerId());const t=n.results,a=null==t?void 0:t.recent_voters;(null==a?void 0:a.length)&&s.push(...a.map((e=>e.toPeerId())))}const i=null===(t=e.reactions)||void 0===t?void 0:t.recent_reactions;(null==i?void 0:i.length)&&s.push(...i.map((e=>(0,le.Z)(e.peer_id))));const r=e.action;if(r){const e=[...r.users||[],r.user_id,r.inviter_id];s.push(...e.filter(Boolean).map((e=>e.toPeerId())));const t=[r.channel_id,r.chat_id];s.push(...t.filter(Boolean).map((e=>e.toPeerId(!0))))}const o=null===(a=e.replies)||void 0===a?void 0:a.recent_repliers;return(null==o?void 0:o.length)&&s.push(...o.map((e=>(0,le.Z)(e)))),new Set(s.filter(Boolean))}var ge=a(8027);function he(e,t,a){return e[t]=a}var ue=a(8938);const ye=void 0;class _e extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{if(e){this.allDialogsLoaded={},this.pinnedOrders={};for(const e of o.DZ)this.pinnedOrders[e]=[]}else{this.storage.clear(),this.allDialogsLoaded={},this.saveAllDialogsLoaded(),this.pinnedOrders=Object.assign({},this.pinnedOrders);for(const e of o.DZ)this.resetPinnedOrder(e);this.savePinnedOrders()}this.forumTopics=new Map,this.folders={},this.dialogsOffsetDate={},this.dialogsNum=0,this.dialogsIndex=new ae.Z({clearBadChars:!0,ignoreCase:!0,latinize:!0,includeTag:!0}),this.cachedResults={query:"",count:0,dialogs:[],folderId:0}},this.onUpdateFolderPeers=e=>{e.folder_peers.forEach((e=>{var t;const{folder_id:a,peer:s}=e,n=this.appPeersManager.getPeerId(s),i=this.dropDialog(n)[0];i&&((null===(t=i.pFlags)||void 0===t?void 0:t.pinned)&&this.handleDialogUnpinning(i,a),i.folder_id=a,this.generateIndexForDialog(i),this.pushDialog({dialog:i})),this.appMessagesManager.scheduleHandleNewDialogs(n,i)}))},this.onUpdateDialogPinned=e=>{var t;const a=null!==(t=e.folder_id)&&void 0!==t?t:o.J$,s=this.appPeersManager.getPeerId(e.peer.peer),n=this.getDialogOnly(s);this.handleDialogTogglePinned(n,e.pFlags.pinned,a)},this.onUpdateChannelPinnedTopic=e=>{const t=e.channel_id.toPeerId(!0),a=(0,pe.Z)(e.topic_id),s=this.getForumTopic(t,a);s&&this.handleDialogTogglePinned(s,e.pFlags.pinned,this.getFilterIdForForum(s))},this.onUpdatePinnedDialogs=e=>{var t;const a=null!==(t=e.folder_id)&&void 0!==t?t:o.J$;e.order?this.handleDialogsPinned(a,e.order.map((e=>this.appPeersManager.getPeerId(e.peer)))):this.apiManager.invokeApi("messages.getPinnedDialogs",{folder_id:a}).then((e=>{this.applyDialogs(e),this.handleDialogsPinned(a,e.dialogs.map((e=>e.peerId)))}))},this.onUpdateChannelPinnedTopics=e=>{return t=this,a=void 0,n=function*(){const t=e.channel_id.toPeerId(!0);if(!this.forumTopics.get(t))return;const a=t;if(e.order){const t=e.order.map((e=>(0,pe.Z)(e)));this.handleDialogsPinned(a,t)}else{const e=yield this.apiManager.getLimit("topicPin",!0),s=this.apiManager.invokeApi("channels.getForumTopics",{channel:this.appChatsManager.getChannelInput(t.toChatId()),limit:e,offset_date:0,offset_id:0,offset_topic:0}),n=(yield this.processTopics(t,s)).topics.filter((e=>e.pFlags.pinned));this.handleDialogsPinned(a,n.map((e=>e.id)))}},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}}after(){this.clear(!0),this.rootScope.addEventListener("language_change",(()=>{const e=this.appUsersManager.getSelf().id.toPeerId(!1);if(this.getDialogOnly(e)){const t=this.appPeersManager.getPeerSearchText(e);this.dialogsIndex.indexObject(e,t)}}));const e=e=>{const t=this.getCachedDialogs(!1);for(let a=0;a{const e=this.getCachedDialogs(!1);for(const e in this.folders)+e>1&&delete this.folders[e];for(let t=0;t{const t=this.getCachedDialogs(!1),a=this.getDialogIndexKeyByFilterId(e.id);for(let e=0;e{this.processChangedUnreadOrUnmuted(e.peerId)})),this.rootScope.addEventListener("chat_update",(e=>{const t=this.appChatsManager.getChat(e),a=e.toPeerId(!0);t.pFlags.left&&this.getDialogOnly(a)&&this.dropDialogOnDeletion(a)})),this.rootScope.addEventListener("chat_toggle_forum",(({chatId:e,enabled:t})=>{const a=e.toPeerId(!0);t||this.flushForumTopicsCache(a),this.processChangedUnreadOrUnmuted(a)})),this.apiUpdatesManager.addMultipleEventsListeners({updateFolderPeers:this.onUpdateFolderPeers,updateDialogPinned:this.onUpdateDialogPinned,updateChannelPinnedTopic:this.onUpdateChannelPinnedTopic,updatePinnedDialogs:this.onUpdatePinnedDialogs,updateChannelPinnedTopics:this.onUpdateChannelPinnedTopics}),Promise.all([this.appStateManager.getState(),this.appStoragesManager.loadStorage("dialogs")]).then((([e,{results:t,storage:a}])=>{this.storage=a,this.dialogs=this.storage.getCache();for(const t of o.DZ){const a=e.pinnedOrders[t];if(!a)continue;const s=this.getPinnedOrders(t);s.splice(0,s.length,...a)}t.length&&W.Z.freezeSaving(this.setDialogsFromState.bind(this,t),["chats","dialogs","messages","users"]),this.allDialogsLoaded=e.allDialogsLoaded||{},t.length&&this.appDraftsManager.addMissedDialogs()}))}setDialogsFromState(e){for(let t=0,a=e.length;tthis.allDialogsLoaded[e]))&&(this.allDialogsLoaded[void 0]=!0),this.saveAllDialogsLoaded())}saveAllDialogsLoaded(){this.appStateManager.pushToState("allDialogsLoaded",this.allDialogsLoaded)}handleDialogUnpinning(e,t){delete e.pFlags.pinned,(0,M.Z)(this.getPinnedOrders(t),this.isFilterIdForForum(t)?e.id:e.peerId),this.savePinnedOrders()}savePinnedOrders(){this.appStateManager.pushToState("pinnedOrders",this.pinnedOrders)}resetPinnedOrder(e){this.getPinnedOrders(e).length=0}getPinnedOrders(e){let t=this.pinnedOrders[e];return!t&&this.isFilterIdForForum(e)&&((0,ge.Z)(this.pinnedOrders,[e]),t=this.pinnedOrders[e]=[]),t}isDialogPinned(e,t){const a=this.filtersStorage.getFilter(t);let s;return s=a?-1!==a.pinnedPeerIds.indexOf(e):!!this.getDialogOnly(e).pFlags.pinned,s}getOffsetDate(e){const t=this.dialogsOffsetDate[e]||0;return e!==ye||t?t:Math.min(...Array.from(o.DZ).sort(((e,t)=>e-t)))}generateFolder(e){const t={dialogs:[],id:e,unreadMessagesCount:0,unreadPeerIds:new Set,unreadUnmutedPeerIds:new Set};return(0,ge.Z)(t,["dispatchUnreadTimeout"]),t}getFolder(e){var t,a;return null!==(t=(a=this.folders)[e])&&void 0!==t?t:a[e]=this.generateFolder(e)}isFilterIdForForum(e){return e&&e<0}getFilterIdForForum(e){return e.peerId}getDialogKey(e){return this.isTopic(e)?e.id:e.peerId}getFolderDialogs(e,t=!0){if(e===ye)return this.getCachedDialogs(t);const a=this.getFolder(e);return this.isFilterIdForForum(e)?t?a.dialogs.filter((e=>!e.pFlags.hidden)):a.dialogs:t?a.dialogs.filter((e=>void 0===e.migratedTo)):a.dialogs}getNextDialog(e,t,a){const s=this.getFolderDialogs(a,!0);let n;if(e){const a=s.findIndex((t=>t.peerId===e));-1!==a&&(n=s[t?a+1:a-1])}else t&&(n=s[0]);return n}getDialogIndexKeyByFilterId(e){if(this.isFilterIdForForum(e))return(0,de.Z)();if(o.DZ.has(e))return(0,de.Z)(e);const t=this.filtersStorage.getFilter(e);return(0,de.Z)(t.localId)}isDialogUnmuted(e){return!this.appNotificationsManager.isPeerLocalMuted({peerId:e.peerId,respectType:!0,threadId:this.isTopic(e)?e.id:void 0})}getFolderUnreadCount(e){const t=this.getFolder(e);return{unreadUnmutedCount:t.unreadUnmutedPeerIds.size,unreadCount:t.unreadPeerIds.size}}getCachedDialogs(e){const t=Array.from(o.DZ).map((t=>this.getFolderDialogs(t,e)));return[].concat(...t)}setDialogIndexInFilter(e,t,a){var s,n;let i;const r=this.isTopic(e),p=r||o.DZ.has(a.id);if(this.filtersStorage.testDialogForFilter(e,a)){const t=r?this.getPinnedOrders(this.getFilterIdForForum(e)):a.pinnedPeerIds,o=this.getDialogKey(e),d=t.indexOf(o);i=-1!==d?this.generateDialogIndex(this.generateDialogPinnedDateByIndex(t.length-1-d),!0):(null===(s=e.pFlags)||void 0===s?void 0:s.pinned)||p?this.generateIndexForDialog(e,!0,void 0,!p):null!==(n=(0,ce.Z)(e))&&void 0!==n?n:this.generateIndexForDialog(e,!0)}return he(e,t,i)}getDialog(e,t,a,s=!0){const n=[];a&&(t=e),void 0===t?n.push(...Array.from(o.DZ).map((e=>this.getFolder(e).dialogs))):n.push(this.getFolderDialogs(t,!1));const i=a?e=>e.id===a:t=>t.peerId===e;for(const e of n){let t=0,a=0;for(let n=e.length;tt.id===e.id:t=>t.peerId===e.peerId,d=r.findIndex(p),f=r[d],c=this.getDialogIndex(f,i);a&&n>o.Zi&&(a=void 0);const l=a?void 0:this.setDialogIndexInFilter(e,i,t);return c!==l&&(!!c!=!!l&&this.prepareFolderUnreadCountModifyingByDialog(n,e,!!l),-1!==d&&r.splice(d,1),l&&(0,ie.Z)(r,e,(e=>this.getDialogIndex(e,i)),-1),!0)}prepareDialogUnreadCountModifying(e,t){const a=this.isTopic(e),s=[],n=a?this.getFilterIdForForum(e):e.folder_id;if(s.push(this.prepareFolderUnreadCountModifyingByDialog(n,e,t)),!a){const a=this.filtersStorage.getFilters();for(const n in a){const i=a[n];this.filtersStorage.testDialogForFilter(e,i)&&s.push(this.prepareFolderUnreadCountModifyingByDialog(i.id,e,t))}}return()=>!t&&s.forEach((e=>e()))}prepareFolderUnreadCountModifyingByDialog(e,t,a){const s=this.appMessagesManager.getDialogUnreadCount(t),n=this.isDialogUnmuted(t);if(void 0===a)return()=>{const a=this.appMessagesManager.getDialogUnreadCount(t),n=this.isDialogUnmuted(t),i=a-s;this.modifyFolderUnreadCount(e,i,!!a,a&&n,t)};{const i=a?s:-s;this.modifyFolderUnreadCount(e,i,!!s,s&&n,t)}}modifyFolderUnreadCount(e,t,a,s,n){var i;const{peerId:r}=n,o=this.appPeersManager.isForum(r),p=this.isTopic(n);if(o&&!p){const i=this.getForumUnreadCount(r);if(i instanceof Promise)return void i.then((({count:t,hasUnmuted:a})=>{n=this.getDialogOnly(r);const s=this.getFolder(e);n&&this.appPeersManager.isForum(r)&&s&&s.dialogs.some((e=>e.peerId===r))&&this.modifyFolderUnreadCount(e,0,!1,!1,n)}));t=0,a=i.count>0,s=i.hasUnmuted}const d=this.getFolder(e);t&&(d.unreadMessagesCount=Math.max(0,d.unreadMessagesCount+t));const f=this.getDialogKey(n);a?d.unreadPeerIds.add(f):d.unreadPeerIds.delete(f),s?d.unreadUnmutedPeerIds.add(f):d.unreadUnmutedPeerIds.delete(f),null!==(i=d.dispatchUnreadTimeout)&&void 0!==i||(d.dispatchUnreadTimeout=T.Z.setTimeout((()=>{d.dispatchUnreadTimeout=void 0;const e=Object.assign({},d);delete e.dialogs,this.rootScope.dispatchEvent("folder_unread",e),p&&this.processChangedUnreadOrUnmuted(r)}),0))}processChangedUnreadOrUnmuted(e){const t=this.getDialogOnly(e);t&&(this.processDialogForFilters(t),this.prepareDialogUnreadCountModifying(t)(),this.rootScope.dispatchEvent("dialog_unread",{peerId:e,dialog:t}))}generateIndexForDialog(e,t,a,s){var n;if(!t)return;const i=this.isTopic(e);let r,o=0;if(e.pFlags.hidden)o=this.generateDialogPinnedDateByIndex(4095),r=!0;else if(e.pFlags.pinned&&!s)o=this.generateDialogPinnedDate(e),r=!0;else{if(a||(a=this.appMessagesManager.getMessageByPeer(e.peerId,e.top_message)),o=(null==a?void 0:a.date)||o,!i){const t=this.appPeersManager.isChannel(e.peerId)&&e.peerId.toChatId();if(t){const e=this.appChatsManager.getChat(t);(!o||e.date&&e.date>o)&&(o=e.date)}}"draftMessage"===(null===(n=e.draft)||void 0===n?void 0:n._)&&e.draft.date>o&&(o=e.draft.date)}o||(o=(0,te.Z)(!0));const p=this.generateDialogIndex(o,r);if(t)return p;he(e,(0,de.Z)(e.folder_id),p)}generateDialogPinnedDateByIndex(e){return 2147418112+(65535&e)}generateDialogPinnedDate(e){const t=this.isTopic(e),a=this.getPinnedOrders(t?this.getFilterIdForForum(e):e.folder_id),s=this.getDialogKey(e);let n=a.indexOf(s);return-1===n&&(a.unshift(s),n=0,t||this.savePinnedOrders()),this.generateDialogPinnedDateByIndex(a.length-1-n)}setDialogToState(e){if(this.isTopic(e))return;const{peerId:t,pts:a}=e,s=this.appMessagesManager.getHistoryStorage(t),n=this.appMessagesManager.getHistoryMessagesStorage(t),i=s.history.slice;let r;for(let e=0,a=i.length;e{"dialogFolder"===t._&&e.dialogs.splice(a,1)})),(0,ue.Z)(s),this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.appMessagesManager.saveMessages(e.messages);const n=new Map;s.forEach((e=>{var t,s;const i=this.appPeersManager.getPeerId(e.peer);let r=e.top_message;const o=this.appMessagesManager.pendingTopMsgs[i];if(o){const t=this.appMessagesManager.getMessageByPeer(i,o),a=this.appMessagesManager.getMessageByPeer(i,r);(!r||t&&(!a||(null==t?void 0:t.date)>(null==a?void 0:a.date)))&&(e.top_message=r=o,this.appMessagesManager.getHistoryStorage(i).maxId=o)}if(r||"draftMessage"===(null===(t=e.draft)||void 0===t?void 0:t._)){if(this.saveDialog({dialog:e})){const t=(e=>{let t=n.get(e);return t||n.set(e,t={}),t})(i);a?(null!==(s=t.topics)&&void 0!==s?s:t.topics=new Map).set(e.id,e):t.dialog=e}}else this.dropDialogWithEvent(i,a?this.getDialogKey(e):void 0);const p=this.appMessagesManager.getUpdateAfterReloadKey(i,a?this.getDialogKey(e):void 0),d=this.appMessagesManager.newUpdatesAfterReloadToHandle[p];if(void 0!==d){for(const e of d)d.delete(e),this.apiUpdatesManager.saveUpdate(e);d.size||delete this.appMessagesManager.newUpdatesAfterReloadToHandle[p]}})),n.size&&this.rootScope.dispatchEvent("dialogs_multiupdate",n)}getDialogOffsetDate(e){const t=this.appMessagesManager.getMessageByPeer(e.peerId,e.top_message);return(null==t?void 0:t.date)||0}canSaveDialogByPeerId(e){if(e.isAnyChat()){const t=this.appChatsManager.getChat(e.toChatId());if("channelForbidden"===t._||t.pFlags.left)return!1}return!0}saveDialog({dialog:e,folderId:t,ignoreOffsetDate:a,saveGlobalOffset:s}){var n,i;const r=this.isTopic(e),p=!r,d=r?e.id=(0,pe.Z)(e.id):void 0;r||null!=t||(t=null!==(n=e.folder_id)&&void 0!==n?n:o.J$);const f=this.appPeersManager.getPeerId(e.peer);if(!f)return console.error("saveConversation no peerId???",e,t),!1;if(r||"dialog"===e._||console.error("saveConversation not regular dialog",e,Object.assign({},e)),p&&!this.canSaveDialogByPeerId(f))return!1;const c=this.appPeersManager.isChannel(f)?f.toChatId():o.NM;if(p){const e=this.appPeersManager.getPeerSearchText(f);this.dialogsIndex.indexObject(f,e)}const l=this.getDialogOrTopic(f,d);let m,g;if(e.top_message){m=(0,pe.Z)(e.top_message);const t=(null==l?void 0:l.top_message)&&this.appMessagesManager.getMessageByPeer(f,l.top_message);(null===(i=null==t?void 0:t.pFlags)||void 0===i?void 0:i.is_outgoing)&&l.top_message>=m&&(m=l.top_message),g=this.appMessagesManager.getMessageByPeer(f,m)}else m=this.appMessagesManager.generateTempMessageId(f),g={_:"message",id:m,mid:m,from_id:this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId(!1)),peer_id:this.appPeersManager.getOutputPeer(f),deleted:!0,pFlags:{out:!0},date:0,message:""},this.appMessagesManager.saveMessages([g],{isOutgoing:!0});if((null==g?void 0:g.pFlags)||this.appMessagesManager.log.error("saveConversation no message:",e,g),p&&!c&&f.isAnyChat()){const t=this.appChatsManager.getChat(f.toChatId());if(t&&t.migrated_to&&t.pFlags.deactivated){const a=this.appPeersManager.getPeerId(t.migrated_to);this.appMessagesManager.migratedFromTo[f]=a,this.appMessagesManager.migratedToFrom[a]=f,e.migratedTo=a}}if(e.top_message=m,e.read_inbox_max_id=(0,pe.Z)(l&&!e.read_inbox_max_id?l.read_inbox_max_id:e.read_inbox_max_id),e.read_outbox_max_id=(0,pe.Z)(l&&!e.read_outbox_max_id?l.read_outbox_max_id:e.read_outbox_max_id),p&&void 0===e.folder_id&&"dialog"===e._&&(e.folder_id=l?l.folder_id:t),e.draft=this.appDraftsManager.saveDraft({peerId:f,threadId:d,draft:e.draft}),e.peerId=f,g&&g.pFlags.is_outgoing){const t=g.pFlags.out;m>e[t?"read_outbox_max_id":"read_inbox_max_id"]?(g.pFlags.unread=!0,e.unread_count||t||++e.unread_count):delete g.pFlags.unread}const h=this.appMessagesManager.getHistoryStorage(f,d),u=h.history.slice;if(u.length?u.isEnd(se.D.Bottom)||(h.history.insertSlice([m]).setEnd(se.D.Bottom),h.count||(h.count=1),this.appMessagesManager.mergeReplyKeyboard(h,g)&&this.rootScope.dispatchEvent("history_reply_markup",{peerId:f})):(h.history.unshift(m),h.count||(h.count=1),this.appMessagesManager.mergeReplyKeyboard(h,g)&&this.rootScope.dispatchEvent("history_reply_markup",{peerId:f})),h.maxId=m,h.readMaxId=e.read_inbox_max_id,h.readOutboxMaxId=e.read_outbox_max_id,this.appNotificationsManager.savePeerSettings({peerId:f,threadId:r?e.id:void 0,settings:e.notify_settings}),p&&c&&e.pts&&this.apiUpdatesManager.addChannelState(c,e.pts),this.generateIndexForDialog(e),l){const t=this.dialogsStorage.prepareDialogUnreadCountModifying(l);re(l,e),t()}return this.pushDialog({dialog:e,offsetDate:null==g?void 0:g.date,ignoreOffsetDate:a,saveGlobalOffset:s}),r&&this.processTopicUpdate(e,l),!0}processTopicUpdate(e,t){if(!t)return;const{peerId:a,id:s}=e,n=e.icon_emoji_id!==t.icon_emoji_id,i=e.title!==t.title,r=n||i;n&&this.rootScope.dispatchEvent("avatar_update",{peerId:a,threadId:s}),r&&this.rootScope.dispatchEvent("peer_title_edit",{peerId:a,threadId:s})}getDialogs(e){const{query:t="",offsetIndex:a,limit:s=20,filterId:n=o.J$,skipMigrated:i=!1}=e,r=this.isFilterIdForForum(n);if(!r&&!o.DZ.has(n)){const t=[],a=this.appUsersManager.fillContacts();a.cached||t.push(a.promise);const s=this.filtersStorage.reloadMissingPeerIds(n);if(s&&t.push(s),t.length)return Promise.all(t).then((()=>this.getDialogs(e)))}const p=o.DZ.has(n)&&!this.getOffsetDate(n)||r?n:ye;let d=this.getFolderDialogs(n,i);const f=this.getDialogIndexKeyByFilterId(n);if(t&&!r){if(!s||this.cachedResults.query!==t||this.cachedResults.folderId!==n){this.cachedResults.query=t,this.cachedResults.folderId=n;const e=this.dialogsIndex.search(t),a=[];for(const t in this.dialogs){const s=this.dialogs[t];e.has(s.peerId)&&s.folder_id===n&&a.push(s)}a.sort(((e,t)=>this.getDialogIndex(t,f)-this.getDialogIndex(e,f))),this.cachedResults.dialogs=a,this.cachedResults.count=a.length}d=this.cachedResults.dialogs}else this.cachedResults.query="";let c=0;if(a>0)for(let e=d.length;cthis.getDialogIndex(d[c],f));++c);const l=this.isDialogsLoaded(p),m=d.length>=c+s;if(t||l||m){const e=d.slice(c,c+s);return{dialogs:e,count:l?d.length:null,isTopEnd:d.length&&(e[0]&&e[0]===d[0]||this.getDialogIndex(d[0],f)=d.length}}return this.appMessagesManager.getTopMessages({limit:s,folderId:p}).then((e=>{if(i&&(d=this.getFolderDialogs(n,i)),c=0,a>0)for(let e=d.length;cthis.getDialogIndex(d[c],f));++c);const t=d.slice(c,c+s);return{dialogs:t,count:void 0===e.count?d.length:e.count,isTopEnd:d.length&&(t[0]&&t[0]===d[0]||this.getDialogIndex(d[0],f){const t={},a=[];for(const[e,n]of s.getTopicPromises)t[e]=n,a.push((0,oe.Z)(e));s.getTopicPromises.clear();const n=()=>{for(const e in t)t[e].resolve(void 0),s.deletedTopics.add(+e)};if(this.getForumTopicsCache(e)===s)return this.apiManager.invokeApi("channels.getForumTopicsByID",{channel:this.appChatsManager.getChannelInput(e.toChatId()),topics:a}).then((a=>{if(this.getForumTopicsCache(e)===s)return this.applyDialogs(a,e),a.topics.forEach((a=>{"forumTopic"===a._&&(t[a.id].resolve(a),delete t[e])})),a}),(()=>{})).then((()=>{n(),s.getTopicsPromise=void 0,s.getTopicPromises.size&&this.getForumTopicById(e)}));n()}))),n||s.getTopicsPromise}getForumTopic(e,t){var a;const s=this.forumTopics.get(e);return null===(a=null==s?void 0:s.topics)||void 0===a?void 0:a.get(t)}getForumTopicOrReload(e,t){var a;const s=this.getForumTopic(e,t);if(s)return s;const n=this.getForumTopicsCache(e);return(null===(a=null==n?void 0:n.deletedTopics)||void 0===a?void 0:a.has(t))?void 0:this.getForumTopicById(e,t)}processTopics(e,t){return(0,q.Z)(t,(t=>{"pts"in t&&this.apiUpdatesManager.addChannelState(e.toChatId(),t.pts);const a=this.appPeersManager.getOutputPeer(e);return t.topics=t.topics.map((e=>{if("forumTopicDeleted"!==e._)return e.peer=a,e.id=(0,pe.Z)(e.id),e})).filter(Boolean),t}))}processTopicsPromise(e,t){return t.then((t=>(this.processTopics(e,t),t)))}getForumUnreadCount(e){if(!this.appPeersManager.isForum(e))return;const t=this.getFolder(e),a=t.dialogs.length>=20||this.isDialogsLoaded(e)?t.dialogs.slice(0,20):(0,q.Z)(this.getDialogs({filterId:e,limit:20}),(e=>e.dialogs));return(0,q.Z)(a,(e=>({count:e.reduce(((e,t)=>e+ +!!t.unread_count),0),hasUnmuted:e.some((e=>e.unread_count&&this.isDialogUnmuted(e)))})))}handleDialogTogglePinned(e,t,a){e&&(t?e.pFlags.pinned=!0:this.handleDialogUnpinning(e,a),this.generateIndexForDialog(e)),this.appMessagesManager.scheduleHandleNewDialogs(e.peerId,e)}handleDialogsPinned(e,t){const a=this.isFilterIdForForum(e);this.resetPinnedOrder(e),this.getPinnedOrders(e).push(...t),this.savePinnedOrders(),t.reverse();const s={};t.forEach((t=>{s[t]=!0;const n=a?e:t,i=a?t:void 0,r=this.getDialogOrTopic(n,i);this.appMessagesManager.scheduleHandleNewDialogs(n,r),r&&(r.pFlags.pinned=!0,this.generateIndexForDialog(r))}));const n=this.getFolderDialogs(e,!1);for(const e of n){if(!e.pFlags.pinned)break;s[this.getDialogKey(e)]||(delete e.pFlags.pinned,this.generateIndexForDialog(e),this.appMessagesManager.scheduleHandleNewDialogs(e.peerId,e))}}}var ve=a(8479),Pe=a(4064),be=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Me=[["pinned_peers","pinnedPeerIds"],["exclude_peers","excludePeerIds"],["include_peers","includePeerIds"]],Se=o.DZ.size,Ie={_:"dialogFilter",pFlags:{},flags:0,id:0,title:"",exclude_peers:[],include_peers:[],pinned_peers:[],excludePeerIds:[],includePeerIds:[],pinnedPeerIds:[]};class Ce extends G{constructor(){super(...arguments),this.clear=e=>{if(e){this.filters={},this.filtersArr=[],this.reloadedPeerIds=new Set,this.localFilters={};for(const e of o.DZ)this.localFilters[e]=this.generateLocalFilter(e)}else this.reloadedPeerIds.clear(),this.clearFilters();this.localId=o.Gu},this.onUpdateDialogFilter=e=>{e.filter?this.saveDialogFilter(e.filter):this.filters[e.id]&&(this.rootScope.dispatchEvent("filter_delete",this.filters[e.id]),delete this.filters[e.id],(0,Pe.Z)(this.filtersArr,(t=>t.id===e.id))),this.pushToState()},this.onUpdateDialogFilters=e=>{const t=(0,ve.Z)(this.filters);this.getDialogFilters(!0).then((e=>{for(const a in t){const t=+a;e.find((e=>e.id===t))||this.onUpdateDialogFilter({_:"updateDialogFilter",id:t})}this.onUpdateDialogFilterOrder({_:"updateDialogFilterOrder",order:e.map((e=>e.id))})}))},this.onUpdateDialogFilterOrder=e=>{const t=e.order.slice();t.includes(o.Zi)||t.splice(t[0]===o.J$?1:0,0,o.Zi),this.localId=o.Gu,t.forEach((e=>{const t=this.filters[e];delete t.localId,this.setLocalId(t)})),this.rootScope.dispatchEvent("filter_order",t),this.pushToState()}}after(){return this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateDialogFilter:this.onUpdateDialogFilter,updateDialogFilters:this.onUpdateDialogFilters,updateDialogFilterOrder:this.onUpdateDialogFilterOrder}),this.rootScope.addEventListener("premium_toggle",(()=>{this.onUpdateDialogFilters({_:"updateDialogFilters"})})),this.appStateManager.getState().then((e=>{this.prependFilters(e.filtersArr).map((e=>{this.saveDialogFilter(e,!1,!0)}))}))}prependFilters(e){e=e.slice();const t=this.localFilters[o.J$],a=this.localFilters[o.Zi],s=e.findIndex((e=>"dialogFilterDefault"===e._||e.id===o.J$));return-1!==s?e[s]=t:e.unshift(t),(0,Pe.Z)(e,(e=>e.id===o.Zi)),e.splice(e[0]===t?1:0,0,a),this.localId=o.Gu,e.forEach((e=>{delete e.localId})),e}generateLocalFilter(e){const t=Object.assign(Object.assign({},(0,ve.Z)(Ie)),{id:e});return e===o.J$?t.pFlags.exclude_archived=!0:e===o.Zi&&(t.pFlags.exclude_unarchived=!0),o.DZ.has(e)&&(t.pinnedPeerIds=this.dialogsStorage.getPinnedOrders(e)),t}pushToState(){this.appStateManager.pushToState("filtersArr",this.filtersArr)}testDialogForFilter(e,t){if(!t)return!0;if(o.DZ.has(t.id))return e.folder_id===t.id&&this.dialogsStorage.canSaveDialogByPeerId(e.peerId);const a=e.peerId;if(!this.appMessagesManager.getDialogOnly(a))return!1;if(t.excludePeerIds.includes(a))return!1;if(t.includePeerIds.includes(a))return!0;const s=t.pFlags;if(s.exclude_archived&&e.folder_id===o.Zi)return!1;if(s.exclude_read&&!this.appMessagesManager.isDialogUnread(e))return!1;if(s.exclude_muted&&this.appNotificationsManager.isPeerLocalMuted({peerId:a})&&(!e.unread_mentions_count||!e.unread_count))return!1;if(this.appPeersManager.isAnyChat(a)){if(s.broadcasts&&this.appPeersManager.isBroadcast(a))return!0;if(s.groups&&this.appPeersManager.isAnyGroup(a))return!0}else{const e=a.toUserId();if(this.appUsersManager.isBot(e))return!!s.bots;if(s.non_contacts&&!this.appUsersManager.isContact(e))return!0;if(s.contacts&&this.appUsersManager.isContact(e))return!0}return!1}testDialogForFilterId(e,t){return this.testDialogForFilter(e,this.filters[t])}getFilter(e){return this.filters[e]}getFilters(){return this.filters}clearFilters(){const e=this.getFilters();for(const t in e)o.DZ.has(+t)||this.onUpdateDialogFilter({_:"updateDialogFilter",id:+t})}toggleDialogPin(e,t){return be(this,void 0,void 0,(function*(){const a=this.filters[t],s=a.pinnedPeerIds.indexOf(e),n=-1!==s;if(n&&(a.pinned_peers.splice(s,1),a.pinnedPeerIds.splice(s,1)),!n){if(a.pinned_peers.length>=(yield this.apiManager.getConfig()).pinned_infolder_count_max)return Promise.reject((0,X.Z)("PINNED_DIALOGS_TOO_MUCH"));a.pinned_peers.unshift(this.appPeersManager.getInputPeerById(e)),a.pinnedPeerIds.unshift(e)}return this.updateDialogFilter(a)}))}createDialogFilter(e,t){const a=Math.max(1,...Object.keys(this.filters).map((e=>+e)));return(e=(0,ve.Z)(e)).id=a+1,this.updateDialogFilter(e,void 0,t)}updateDialogFilter(e,t=!1,a=!1){const s=t?0:1;return this.apiManager.invokeApi("messages.updateDialogFilter",{flags:s,id:e.id,filter:t?void 0:this.getOutputDialogFilter(e)}).then((s=>{if(this.onUpdateDialogFilter({_:"updateDialogFilter",id:e.id,filter:t?void 0:e}),a){const t=[];for(const e in this.filters){const a=this.filters[e];++a.localId,t.push(a)}e.localId=o.Gu;const a=t.sort(((e,t)=>e.localId-t.localId)).map((e=>e.id));this.onUpdateDialogFilterOrder({_:"updateDialogFilterOrder",order:a})}}))}updateDialogFiltersOrder(e){return this.apiManager.invokeApi("messages.updateDialogFiltersOrder",{order:e}).then((()=>{this.onUpdateDialogFilterOrder({_:"updateDialogFilterOrder",order:e})}))}getOutputDialogFilter(e){const t=(0,ve.Z)(e);return this.filterIncludedPinnedPeers(e),t}filterIncludedPinnedPeers(e){(0,ne.Z)(e.includePeerIds,((t,a)=>{e.pinnedPeerIds.includes(t)&&(e.include_peers.splice(a,1),e.includePeerIds.splice(a,1))}))}reloadMissingPeerIds(e,t="pinned_peers"){const a=this.getFilter(e),s=null==a?void 0:a[t];if(!(null==s?void 0:s.length))return;const n=s.filter((e=>{const t=this.appPeersManager.getPeerId(e),a=this.reloadedPeerIds.has(t),s=this.appMessagesManager.getDialogOnly(t);return!a&&!s}));if(!n.length)return;const i=n.map((e=>{const t=this.appPeersManager.getPeerId(e);return this.appMessagesManager.reloadConversation(e).then((e=>(this.reloadedPeerIds.add(t),e?void 0:t)))}));return Promise.all(i).then((e=>{(e=e.filter(Boolean)).length}))}getDialogFilters(e=!1){return be(this,void 0,void 0,(function*(){const t=Object.keys(this.filters);if(t.length>Se&&!e)return t.map((e=>this.filters[e])).sort(((e,t)=>e.localId-t.localId));const a=yield this.apiManager.invokeApiSingle("messages.getDialogFilters");return this.prependFilters(a).map((t=>this.saveDialogFilter(t,e))).filter(Boolean)}))}getSuggestedDialogsFilters(){return this.apiManager.invokeApi("messages.getSuggestedDialogFilters")}saveDialogFilter(e,t=!0,a){"dialogFilterDefault"===e._&&(e=this.localFilters[o.J$]),(0,ue.Z)(e),o.DZ.has(e.id)||(Me.forEach((([t,a])=>{(0,ue.Z)(e),e[a]=e[t].map((e=>this.appPeersManager.getPeerId(e)))})),this.filterIncludedPinnedPeers(e),e.include_peers=e.pinned_peers.concat(e.include_peers),e.includePeerIds=e.pinnedPeerIds.concat(e.includePeerIds));const s=this.filters[e.id];return s?Object.assign(s,e):this.filters[e.id]=e,this.setLocalId(e),a||(t?this.rootScope.dispatchEvent("filter_update",e):s||this.rootScope.dispatchEvent("filter_new",e)),e}setLocalId(e){void 0!==e.localId?e.localId>=this.localId&&(this.localId=e.localId+1):(e.localId=this.localId++,(0,Pe.Z)(this.filtersArr,(t=>t.id===e.id)),this.filtersArr.push(e),this.pushToState())}isFilterIdAvailable(e){return be(this,void 0,void 0,(function*(){if(o.DZ.has(e))return!0;const t=yield this.apiManager.getLimit("folders");return this.filtersArr.filter((e=>!o.DZ.has(e.id))).slice(0,t).some((t=>t.id===e))}))}}var we=a(6690),ke=a(2821);function Ae(e,t){t.forEach((t=>{Object.getOwnPropertyNames(t.prototype).forEach((a=>{const s=Object.getOwnPropertyDescriptor(t.prototype,a)||Object.create(null);"constructor"!==a&&Object.defineProperty(e.prototype,a,s)}))}))}class Ue{constructor(){this.updatesState={pendingPtsUpdates:[],pendingSeqUpdates:{},syncPending:null,syncLoading:null},this.channelStates={},this.attached=!1,this.log=(0,S.kg)("UPDATES",S.v9.Error|S.v9.Warn|S.v9.Log),this.debug=d.ZP,this.subscriptions={},this.processUpdateMessage=(e,t={})=>{const a={date:e.date,seq:e.seq,seqStart:e.seq_start};switch(this.debug&&this.log.debug("processUpdateMessage",e),e._){case"updatesTooLong":case"new_session_created":this.forceGetDifference();break;case"updateShort":this.processUpdate(e.update,a);break;case"updateShortMessage":case"updateShortChatMessage":{(0,ue.Z)(e),this.debug&&this.log.debug("updateShortMessage | updateShortChatMessage",Object.assign({},e));const t=e.pFlags.out,s=e.from_id||(t?this.appPeersManager.peerId:e.user_id),n=e.chat_id?e.chat_id.toPeerId(!0):e.user_id.toPeerId(!1)||this.appPeersManager.peerId;this.processUpdate({_:"updateNewMessage",message:{_:"message",pFlags:e.pFlags,id:e.id,from_id:this.appPeersManager.getOutputPeer(s.toPeerId()),peer_id:this.appPeersManager.getOutputPeer(n),date:e.date,message:e.message,fwd_from:e.fwd_from,reply_to:e.reply_to,entities:e.entities},pts:e.pts,pts_count:e.pts_count},a);break}case"updatesCombined":case"updates":this.appUsersManager.saveApiUsers(e.users,t.override),this.appChatsManager.saveApiChats(e.chats,t.override),e.updates.forEach((e=>{this.processUpdate(e,a)}));break;default:this.log.warn("Unknown update message",e)}},this._constructor(!1)}setProxy(){const e=this;this.updatesState=new Proxy(this.updatesState,{set:function(t,a,s){return t[a]=s,e.saveUpdatesState(),!0}})}saveUpdatesState(){const e=this.updatesState;this.appStateManager.pushToState("updates",{seq:e.seq,pts:e.pts,date:e.date})}popPendingSeqUpdate(){var e;const t=this.updatesState,a=t.seq+1,s=t.pendingSeqUpdates[a];if(!s)return!1;const n=s.updates;for(let e=0,t=n.length;e=t.syncPending.seqAwaiting&&(t.syncPending.ptsAwaiting?delete t.syncPending.seqAwaiting:this.clearStatePendingSync(t)),!0}popPendingPtsUpdate(e){const t=e?this.getChannelState(e):this.updatesState;if(!t.pendingPtsUpdates.length)return!1;t.pendingPtsUpdates.sort(((e,t)=>e.pts-t.pts));let a=t.pts,s=0,n=0;for(let e=0,i=t.pendingPtsUpdates.length;e=i.pts&&(s=i.pts,n=e)}if(!s)return!1;this.debug&&this.log.debug("pop pending pts updates",s,t.pendingPtsUpdates.slice(0,n+1)),t.pts=s;for(let e=0;e<=n;++e){const a=t.pendingPtsUpdates[e];this.saveUpdate(a)}return t.pendingPtsUpdates.splice(0,n+1),!t.pendingPtsUpdates.length&&t.syncPending&&(t.syncPending.seqAwaiting?delete t.syncPending.ptsAwaiting:this.clearStatePendingSync(t)),!0}forceGetDifference(){this.updatesState.syncLoading||this.getDifference()}processLocalUpdate(e){this.processUpdateMessage({_:"updateShort",update:e})}getDifference(e=!1){const t=this.updatesState,a=t.syncLoading;a||(t.pendingSeqUpdates={},t.pendingPtsUpdates=[]),this.clearStatePendingSync(t);const s=this.apiManager.invokeApi("updates.getDifference",{pts:t.pts,pts_total_limit:e?1200:void 0,date:t.date,qts:-1},{timeout:2147483647}).then((a=>{if(this.debug&&this.log.debug("Get diff result",a),"updates.differenceEmpty"===a._)return this.debug&&this.log.debug("apply empty diff",a.seq),t.date=a.date,void(t.seq=a.seq);if(e&&this.rootScope.dispatchEvent("state_synchronizing"),"updates.differenceTooLong"!==a._){this.appUsersManager.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),a.other_updates.forEach((e=>{switch(e._){case"updateChannelTooLong":case"updateNewChannelMessage":case"updateEditChannelMessage":return void this.processUpdate(e)}this.saveUpdate(e)})),a.new_messages.forEach((e=>{this.saveUpdate({_:"updateNewMessage",message:e,pts:t.pts,pts_count:0})}));const e="updates.difference"===a._?a.state:a.intermediate_state;t.seq=e.seq,t.pts=e.pts,t.date=e.date}else t.pts=a.pts,t.date=(0,te.Z)(!0)+this.timeManager.getServerTimeOffset(),delete t.seq,this.channelStates={},this.log.warn("getDifference:",a._),this.onDifferenceTooLong();if("updates.differenceSlice"===a._)return this.getDifference();this.debug&&this.log.debug("finished get diff")}));return a||this.justAName(t,s),s}clearStatePendingSync(e){e.syncPending&&(clearTimeout(e.syncPending.timeout),e.syncPending=null)}getChannelDifference(e){const t=this.getChannelState(e),a=t.syncLoading;a||(t.pendingPtsUpdates=[]),this.clearStatePendingSync(t);const s=this.debug?this.log.bindPrefix("getChannelDifference-"+e):void 0,n=this.apiManager.invokeApi("updates.getChannelDifference",{channel:this.appChatsManager.getChannelInput(e),filter:{_:"channelMessagesFilterEmpty"},pts:t.pts,limit:1e3},{timeout:2147483647}).then((a=>{if(null==s||s.debug("diff result",a),t.pts="pts"in a?a.pts:void 0,t.lastDifferenceTime=Date.now(),"updates.channelDifferenceEmpty"!==a._){if("updates.channelDifferenceTooLong"===a._)return delete this.channelStates[e],void this.saveUpdate({_:"updateChannelReload",channel_id:e});if(this.appUsersManager.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),null==s||s.debug("applying",a.other_updates.length,"channel other updates"),a.other_updates.forEach((e=>{this.saveUpdate(e)})),null==s||s.debug("applying",a.new_messages.length,"channel new messages"),a.new_messages.forEach((e=>{this.saveUpdate({_:"updateNewChannelMessage",message:e,pts:t.pts,pts_count:0})})),null==s||s.debug("apply channel diff",t.pts),"updates.channelDifference"===a._&&!a.pFlags.final)return this.getChannelDifference(e);null==s||s.debug("finished channel get diff")}}));return a||this.justAName(t,n,e),n}onDifferenceTooLong(){this.appUsersManager.clear(),this.appChatsManager.clear(),this.appMessagesManager.clear(),this.rootScope.dispatchEvent("state_cleared")}justAName(e,t,a){e.syncLoading=t,this.rootScope.dispatchEvent("state_synchronizing",a),t.then((()=>{e.syncLoading=null,this.rootScope.dispatchEvent("state_synchronized",a)}),(()=>{e.syncLoading=null}))}addChannelState(e,t){var a,s;if(!t)throw new Error("Add channel state without pts "+e);return null!==(a=(s=this.channelStates)[e])&&void 0!==a?a:s[e]={pts:t,pendingPtsUpdates:[],syncPending:null,syncLoading:null}}getChannelState(e,t){return void 0===this.channelStates[e]&&this.addChannelState(e,t),this.channelStates[e]}processUpdate(e,t={}){var a,s,n,i;let r;switch(e._){case"updateNewChannelMessage":case"updateEditChannelMessage":r=this.appPeersManager.getPeerId(e.message.peer_id).toChatId();break;case"updateChannelTooLong":if(r=e.channel_id,!(r in this.channelStates))return!1;break;default:"channel_id"in e&&"pts"in e&&(r=e.channel_id)}const{pts:o,pts_count:p}=e,d=r?this.getChannelState(r,o):this.updatesState;if(d.syncLoading)return!1;if("updateChannelTooLong"===e._)return(!d.lastPtsUpdateTime||d.lastPtsUpdateTime{d.syncPending=null,d.syncLoading||(r?this.getChannelDifference(r):this.getDifference())}),6)}),d.syncPending.ptsAwaiting=!0,!1;if(o>d.pts)d.pts=o,f=!0,d.lastPtsUpdateTime=Date.now();else if(p)return!1;r&&t.date&&this.updatesState.date0){const a=t.seq,r=t.seqStart||a;if(r!==d.seq+1&&r>d.seq)return this.debug&&this.log.warn("Seq hole",d,null===(s=d.syncPending)||void 0===s?void 0:s.seqAwaiting),null!==(n=(i=d.pendingSeqUpdates)[r])&&void 0!==n||(i[r]={seq:a,date:t.date,updates:[]}),d.pendingSeqUpdates[r].updates.push(e),d.syncPending||(d.syncPending={timeout:T.Z.setTimeout((()=>{d.syncPending=null,d.syncLoading||this.getDifference()}),6)}),(!d.syncPending.seqAwaiting||d.syncPending.seqAwaiting{const t=this.getChannelState(e);t.syncLoading||t.lastDifferenceTime&&!(Date.now()-t.lastDifferenceTime>2500)||this.getChannelDifference(e)};null!==(a=n.interval)&&void 0!==a||(n.interval=T.Z.setInterval(i,3e3)),i()}unsubscribeFromChannelUpdates(e,t){const a=this.subscriptions[e];!(null==a?void 0:a.interval)||--a.count&&!t||(clearInterval(a.interval),a.interval=void 0,delete this.subscriptions[e])}attach(e){this.attached||(this.log("attach"),this.attached=!0,this.appStateManager.getState().then((({updates:t})=>{const a=this.appStateManager.newVersion;t&&t.pts&&t.date?(Object.assign(this.updatesState,t),this.log("will get difference",Object.assign({},t)),this.getDifference(!0)):(this.log("will get new state"),this.updatesState.syncLoading=new Promise((e=>{this.apiManager.invokeApi("updates.getState",{},{noErrorBox:!0}).then((t=>{this.updatesState.seq=t.seq,this.updatesState.pts=t.pts,this.updatesState.date=t.date,this.saveUpdatesState(),this.updatesState.syncLoading=null,e()}))}))),this.apiManager.setUpdatesProcessor(this.processUpdateMessage),this.setProxy(),a&&this.updatesState.syncLoading.then((()=>{return t=this,s=void 0,i=function*(){const t={en:"was updated to version",ru:"ะพะฑะฝะพะฒะปั‘ะฝ ะดะพ ะฒะตั€ัะธะธ"},s=e=>{fetch(`changelogs/${e}_${a.split(" ")[0]}.md`).then((e=>200===e.status&&e.ok&&e.text()||Promise.reject())).then((s=>{const n=t[e]||t.en;s=`**Telegram Web${_.Z.suffix} ${n} ${a}**\n\n`+s;const i=[],r={_:"updateServiceNotification",entities:i,message:(0,ke.Z)(s,i),type:"local",pFlags:{},inbox_date:(0,te.Z)(!0),media:void 0};this.processLocalUpdate(r)}))},n=(0,we.Z)([e,"en"]);for(const e of n)try{yield s(e);break}catch(e){}},new((n=void 0)||(n=Promise))((function(e,a){function r(e){try{p(i.next(e))}catch(e){a(e)}}function o(e){try{p(i.throw(e))}catch(e){a(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof n?a:new n((function(e){e(a)}))).then(r,o)}p((i=i.apply(t,s||[])).next())}));var t,s,n,i}))})))}}Ae(Ue,[p.Z,G]);class De extends G{constructor(){super(...arguments),this.savedAvatarURLs={}}after(){this.rootScope.addEventListener("avatar_update",(({peerId:e,threadId:t})=>{t||this.removeFromAvatarsCache(e)}))}isAvatarCached(e,t){const a=this.savedAvatarURLs[e];return void 0===t?!!a:!(!a||!a[t]||a[t]instanceof Promise)}removeFromAvatarsCache(e){this.savedAvatarURLs[e]&&delete this.savedAvatarURLs[e]}loadAvatar(e,t,a){var s,n;const i=null!==(s=(n=this.savedAvatarURLs)[e])&&void 0!==s?s:n[e]={};if(i[a])return i[a];{const s={_:"inputPeerPhotoFileLocation",pFlags:{},peer:this.appPeersManager.getInputPeerById(e),photo_id:t.photo_id},n={dcId:t.dc_id,location:s};"photo_big"===a&&(s.pFlags.big=!0,n.limitPart=524288);const r=this.apiFileManager.download(n);return i[a]=r.then((e=>i[a]=URL.createObjectURL(e)))}}}var Ee=a(144),Te=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class Fe extends G{after(){this.calls=new Map,i().IS_CALL_SUPPORTED&&this.apiUpdatesManager.addMultipleEventsListeners({updatePhoneCall:e=>{this.saveCall(e.phone_call)},updatePhoneCallSignalingData:e=>{this.rootScope.dispatchEvent("call_signaling",{callId:e.phone_call_id,data:e.data})}})}computeKey(e,t,a){return this.cryptoWorker.invokeCrypto("compute-dh-key",e,t,a)}saveCall(e){const t="phoneCallDiscarded"===e._,a=this.calls.get(e.id);return a?(re(a,e),t&&this.calls.delete(e.id),e=a):t||this.calls.set(e.id,e),this.rootScope.dispatchEvent("call_update",e),e}getCall(e){return this.calls.get(e)}getCallInput(e){const t=this.getCall(e);return{_:"inputPhoneCall",id:t.id,access_hash:t.access_hash}}savePhonePhoneCall(e){return this.appUsersManager.saveApiUsers(e.users),this.saveCall(e.phone_call)}generateDh(){return this.apiManager.invokeApi("messages.getDhConfig",{version:0,random_length:256}).then((e=>this.cryptoWorker.invokeCrypto("generate-dh",e)))}requestCall(e,t,a,s){return Te(this,void 0,void 0,(function*(){const n=yield this.apiManager.invokeApi("phone.requestCall",{user_id:this.appUsersManager.getUserInput(e),protocol:t,video:s,random_id:(0,Ee.d)(32),g_a_hash:a});return this.savePhonePhoneCall(n)}))}discardCall(e,t,a,s){return Te(this,void 0,void 0,(function*(){if(!this.getCall(e))return;const n=yield this.apiManager.invokeApi("phone.discardCall",{video:s,peer:this.getCallInput(e),duration:t,reason:{_:a},connection_id:"0"});this.apiUpdatesManager.processUpdateMessage(n)}))}}var Re=a(7120),xe=a(2566),Be=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class Ve extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{if(e)this.chats={};else for(const e in this.chats)if(e&&!this.peersStorage.isPeerNeeded(e.toPeerId(!0))){const t=this.chats[e];this.appUsersManager.modifyUsernamesCache(t,!1),this.storage.delete(e),delete this.chats[e]}},this.onChatUpdated=(e,t)=>{var a;this.apiUpdatesManager.processUpdateMessage(t),(null===(a=null==t?void 0:t.updates)||void 0===a?void 0:a.length)&&this.isChannel(e)&&this.rootScope.dispatchEvent("invalidate_participants",e)},this.onUpdateChannelParticipant=e=>{this.apiManager.clearCache("channels.getParticipants",(t=>t.channel.channel_id===e.channel_id)),this.rootScope.dispatchEvent("chat_participant",e)},this.onUpdateChatDefaultBannedRights=e=>{const t=this.appPeersManager.getPeerId(e.peer).toChatId(),a=this.chats[t];a&&(a.default_banned_rights=e.default_banned_rights,this.rootScope.dispatchEvent("chat_update",t))}}after(){return this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateChannelParticipant:this.onUpdateChannelParticipant,updateChatDefaultBannedRights:this.onUpdateChatDefaultBannedRights}),Promise.all([this.appStateManager.getState(),this.appStoragesManager.loadStorage("chats")]).then((([e,{results:t,storage:a}])=>{this.storage=a,this.saveApiChats(t),this.peersStorage.addEventListener("peerNeeded",(e=>{e.isUser()||this.storage.getFromCache(e.toChatId())||this.storage.set({[e.toChatId()]:this.getChat(e.toChatId())})})),this.peersStorage.addEventListener("peerUnneeded",(e=>{!e.isUser()&&this.storage.getFromCache(e.toChatId())&&this.storage.delete(e.toChatId())}))}))}saveApiChats(e,t){e.saved||(e.saved=!0,e.forEach((e=>this.saveApiChat(e,t))))}saveApiChat(e,t){var a,s,n,i,r;if(!e||"chatEmpty"===e._)return;const o=this.chats[e.id];if(null!==(a=(r=e).pFlags)&&void 0!==a||(r.pFlags={}),e.pFlags.min&&void 0!==o)return;"channel"===e._&&void 0===e.participants_count&&void 0!==o&&o.participants_count&&(e.participants_count=o.participants_count),"chatPhotoEmpty"===(null===(s=e.photo)||void 0===s?void 0:s._)&&delete e.photo;const p=this.appUsersManager.setUsernameToCache(e,o),d=e.id.toPeerId(!0);if(void 0===o)this.chats[e.id]=e;else{const t=null===(n=o.photo)||void 0===n?void 0:n.photo_id,a=null===(i=e.photo)||void 0===i?void 0:i.photo_id,s=o.pFlags.forum!==e.pFlags.forum,r=t!==a||s,f=o.title!==e.title||p,c=o.pFlags.verified!==e.pFlags.verified||o.pFlags.scam!==e.pFlags.scam||o.pFlags.fake!==e.pFlags.fake;re(o,e),this.rootScope.dispatchEvent("chat_update",e.id),r&&this.rootScope.dispatchEvent("avatar_update",{peerId:d}),(f||c)&&this.rootScope.dispatchEvent("peer_title_edit",{peerId:d}),s&&this.rootScope.dispatchEvent("chat_toggle_forum",{chatId:e.id,enabled:!!e.pFlags.forum})}this.peersStorage.isPeerNeeded(d)&&this.storage.set({[e.id]:e})}getChat(e){return this.chats[e]}hasRights(e,t,a,s){return(0,Re.Z)(this.getChat(e),t,a,s)}editChatDefaultBannedRights(e,t){const a=this.getChat(e);return a.default_banned_rights&&a.default_banned_rights.until_date===t.until_date&&(0,Y.Z)(a.default_banned_rights.pFlags,t.pFlags)?Promise.resolve():this.apiManager.invokeApi("messages.editChatDefaultBannedRights",{peer:this.appPeersManager.getInputPeerById(e.toPeerId(!0)),banned_rights:t}).then(this.onChatUpdated.bind(this,e))}isChannel(e){const t=this.chats[e];return!(!t||"channel"!==t._&&"channelForbidden"!==t._)}isMegagroup(e){var t;const a=this.chats[e];return!!(null===(t=null==a?void 0:a.pFlags)||void 0===t?void 0:t.megagroup)}isForum(e){var t;const a=this.chats[e];return!!(null===(t=null==a?void 0:a.pFlags)||void 0===t?void 0:t.forum)}isBroadcast(e){return this.isChannel(e)&&!this.isMegagroup(e)}isInChat(e){let t=!0;const a=this.getChat(e);return(!a||"channelForbidden"===a._||"chatForbidden"===a._||"chatEmpty"===a._||a.pFlags.left||a.pFlags.deactivated)&&(t=!1),t}getChannelInput(e){const t=this.getChat(e);return t&&t.access_hash?{_:"inputChannel",channel_id:e,access_hash:t.access_hash||"0"}:{_:"inputChannelEmpty"}}getInputPeer(e){return this.isChannel(e)?this.getChannelInputPeer(e):this.getChatInputPeer(e)}getChatInputPeer(e){return{_:"inputPeerChat",chat_id:e}}getChannelInputPeer(e){return{_:"inputPeerChannel",channel_id:e,access_hash:this.getChat(e).access_hash||0}}hasChat(e,t){const a=this.chats[e];return(0,fe.Z)(a)&&(t||!a.pFlags.min)}getChatString(e){const t=this.getChat(e);return this.isChannel(e)?(this.isMegagroup(e)?"s":"c")+e+"_"+t.access_hash:"g"+e}createChannel(e){return this.apiManager.invokeApi("channels.createChannel",e).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e.chats[0].id)))}inviteToChannel(e,t){const a=this.getChannelInput(e),s=t.map((e=>this.appUsersManager.getUserInput(e)));return this.apiManager.invokeApi("channels.inviteToChannel",{channel:a,users:s}).then(this.onChatUpdated.bind(this,e))}createChat(e,t){return this.apiManager.invokeApi("messages.createChat",{users:t.map((e=>this.appUsersManager.getUserInput(e))),title:e}).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e.chats[0].id)))}leaveChannel(e){return this.apiManager.invokeApi("channels.leaveChannel",{channel:this.getChannelInput(e)}).then(this.onChatUpdated.bind(this,e))}joinChannel(e){return this.apiManager.invokeApi("channels.joinChannel",{channel:this.getChannelInput(e)}).then(this.onChatUpdated.bind(this,e))}addChatUser(e,t,a=100){return this.apiManager.invokeApi("messages.addChatUser",{chat_id:e,user_id:this.appUsersManager.getUserInput(t),fwd_limit:a}).then(this.onChatUpdated.bind(this,e))}deleteChatUser(e,t){return this.apiManager.invokeApi("messages.deleteChatUser",{chat_id:e,user_id:this.appUsersManager.getUserInput(t)}).then(this.onChatUpdated.bind(this,e))}leaveChat(e){return this.deleteChatUser(e,this.appUsersManager.getSelf().id)}leave(e){return this.isChannel(e)?this.leaveChannel(e):this.leaveChat(e)}delete(e){return this.isChannel(e)?this.deleteChannel(e):this.deleteChat(e)}deleteChannel(e){return this.apiManager.invokeApi("channels.deleteChannel",{channel:this.getChannelInput(e)}).then(this.onChatUpdated.bind(this,e))}deleteChat(e){return this.apiManager.invokeApi("messages.deleteChat",{chat_id:e})}migrateChat(e){const t=this.getChat(e);return"channel"===t._?Promise.resolve(t.id):this.apiManager.invokeApi("messages.migrateChat",{chat_id:e}).then((t=>(this.onChatUpdated(e,t),t.updates.find((e=>"updateChannel"===e._)).channel_id)))}updateUsername(e,t,a){const s=this.apiManager.invokeApi("channels.updateUsername",{channel:this.getChannelInput(e),username:t});return this.refreshChatAfterRequest(e,s,a)}editPhoto(e,t){const a={_:"inputChatUploadedPhoto",file:t};let s;return s=this.isChannel(e)?this.apiManager.invokeApi("channels.editPhoto",{channel:this.getChannelInput(e),photo:a}):this.apiManager.invokeApi("messages.editChatPhoto",{chat_id:e,photo:a}),s.then(this.onChatUpdated.bind(this,e))}editTitle(e,t){let a;return a=this.isChannel(e)?this.apiManager.invokeApi("channels.editTitle",{channel:this.getChannelInput(e),title:t}):this.apiManager.invokeApi("messages.editChatTitle",{chat_id:e,title:t}),a.then(this.onChatUpdated.bind(this,e))}editAbout(e,t){const a=e.toPeerId(!0);return this.apiManager.invokeApi("messages.editChatAbout",{peer:this.appPeersManager.getInputPeerById(a),about:t}).then((e=>(e&&this.rootScope.dispatchEvent("peer_bio_edit",a),e)))}editBanned(e,t,a){return Be(this,void 0,void 0,(function*(){const s="object"!=typeof t?t:(0,xe.Z)(t),n=this.isChannel(e);if(!n){const t=yield this.migrateChat(e);e=t}return this.apiManager.invokeApi("channels.editBanned",{channel:this.getChannelInput(e),participant:this.appPeersManager.getInputPeerById(s),banned_rights:a}).then((i=>{if(this.onChatUpdated(e,i),"object"==typeof t){const i=(0,te.Z)(!0);this.apiUpdatesManager.processLocalUpdate({_:"updateChannelParticipant",channel_id:e,date:i,actor_id:void 0,qts:void 0,user_id:s,prev_participant:n?t:void 0,new_participant:Object.keys(a.pFlags).length?{_:"channelParticipantBanned",date:i,banned_rights:a,kicked_by:this.appUsersManager.getSelf().id,peer:this.appPeersManager.getOutputPeer(s),pFlags:{}}:void 0})}}))}))}clearChannelParticipantBannedRights(e,t){return this.editBanned(e,t,{_:"chatBannedRights",until_date:0,pFlags:{}})}kickFromChannel(e,t){return this.editBanned(e,t,{_:"chatBannedRights",until_date:0,pFlags:{view_messages:!0}})}kickFromChat(e,t){return this.isChannel(e)?this.kickFromChannel(e,t):this.deleteChatUser(e,(0,fe.Z)(t)?(0,xe.Z)(t):t.toUserId())}resolveChannel(e){return this.apiManager.invokeApiSingle("channels.getChannels",{id:[{_:"inputChannel",channel_id:e,access_hash:"0"}]}).then((e=>{this.saveApiChats(e.chats)}))}togglePreHistoryHidden(e,t){return this.migrateChat(e).then((e=>this.apiManager.invokeApi("channels.togglePreHistoryHidden",{channel:this.getChannelInput(e),enabled:t}).then(this.onChatUpdated.bind(this,e))))}toggleSignatures(e,t){return this.apiManager.invokeApi("channels.toggleSignatures",{channel:this.getChannelInput(e),enabled:t}).then(this.onChatUpdated.bind(this,e))}toggleNoForwards(e,t){return this.apiManager.invokeApi("messages.toggleNoForwards",{peer:this.getInputPeer(e),enabled:t}).then(this.onChatUpdated.bind(this,e))}setChatAvailableReactions(e,t){const a=this.appProfileManager.getCachedFullChat(e);return a&&(a.available_reactions=t,this.rootScope.dispatchEvent("chat_full_update",e)),this.apiManager.invokeApi("messages.setChatAvailableReactions",{peer:this.getInputPeer(e),available_reactions:t}).then(this.onChatUpdated.bind(this,e))}getSendAs(e){return this.apiManager.invokeApiSingleProcess({method:"channels.getSendAs",params:{peer:this.getChannelInputPeer(e)},processResult:e=>(this.appUsersManager.saveApiUsers(e.users),this.saveApiChats(e.chats),e.peers)})}importChatInvite(e){return this.apiManager.invokeApi("messages.importChatInvite",{hash:e}).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e.chats[0].id)))}checkUsername(e,t){return this.apiManager.invokeApi("channels.checkUsername",{channel:this.getChannelInput(e),username:t})}getSponsoredMessage(e){return this.apiManager.invokeApiCacheable("channels.getSponsoredMessages",{channel:this.getChannelInput(e)},{cacheSeconds:300}).then((e=>{if("messages.sponsoredMessages"===e._){this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats);const t=e.messages.shift();e.messages.push(t)}return e}))}viewSponsoredMessage(e,t){return this.apiManager.invokeApiSingle("channels.viewSponsoredMessage",{channel:this.getChannelInput(e),random_id:t})}checkChatInvite(e){return this.apiManager.invokeApi("messages.checkChatInvite",{hash:e}).then((e=>(e.chat&&this.saveApiChat(e.chat,!0),e)))}toggleUsername(e,t,a){const s=this.apiManager.invokeApi("channels.toggleUsername",{channel:this.getChannelInput(e),username:t,active:a});return this.refreshChatAfterRequest(e,s)}reorderUsernames(e,t){const a=this.apiManager.invokeApi("channels.reorderUsernames",{channel:this.getChannelInput(e),order:t});return this.refreshChatAfterRequest(e,a)}deactivateAllUsernames(e,t){const a=this.apiManager.invokeApi("channels.deactivateAllUsernames",{channel:this.getChannelInput(e)});return this.refreshChatAfterRequest(e,a,t)}makeChannelPrivate(e){const t=[this.updateUsername(e,"",!0),this.deactivateAllUsernames(e,!0)],a=Promise.all(t).then((()=>!0));return this.refreshChatAfterRequest(e,a)}refreshChatAfterRequest(e,t,a){return a?t:t.then((t=>this.getChannels([e]).then((()=>t))))}getChannels(e){return this.apiManager.invokeApi("channels.getChannels",{id:e.map((e=>this.getChannelInput(e)))}).then((e=>{this.saveApiChats(e.chats)}))}toggleForum(e,t){return this.migrateChat(e).then((e=>this.apiManager.invokeApi("channels.toggleForum",{channel:this.getChannelInput(e),enabled:t}).then(this.onChatUpdated.bind(this,e))))}editForumTopic(e){const{chatId:t,topicId:a,title:s,iconEmojiId:n,closed:i,hidden:r}=e;return this.apiManager.invokeApi("channels.editForumTopic",{channel:this.getChannelInput(t),topic_id:(0,oe.Z)(a),title:s,icon_emoji_id:n,closed:i,hidden:r}).then(this.onChatUpdated.bind(this,t))}createForumTopic(e){return Be(this,void 0,void 0,(function*(){const{chatId:t,title:a,iconColor:s,iconEmojiId:n}=e,i=yield this.appProfileManager.getChannelFull(t),r=i.default_send_as&&this.appPeersManager.getInputPeerById(this.appPeersManager.getPeerId(i.default_send_as));return this.apiManager.invokeApi("channels.createForumTopic",{channel:this.getChannelInput(t),title:a,icon_color:s,icon_emoji_id:n,random_id:(0,Ee.a)(),send_as:r}).then((e=>{this.onChatUpdated(t,e);const a=e.updates.find((e=>"updateNewChannelMessage"===e._));return(0,pe.Z)(a.message.id)}))}))}updatePinnedForumTopic(e,t,a){return this.apiManager.invokeApi("channels.updatePinnedForumTopic",{channel:this.getChannelInput(e),topic_id:(0,oe.Z)(t),pinned:a}).then(this.onChatUpdated.bind(this,e))}}a(4762);var Oe,Le=a(5953),Ne=a(9005),Ze=a(6637),je=a(2423);function qe(e,t){(0,Ze.Z)(e)||(e="https://"+e);const a={url:e};let s,n,i,r;if(s=e.match(/^(?:https?:\/\/)?(?:(.+?)\.)?(?:(?:web|k|z)\.)?t(?:elegram)?\.me(?:\/(.+))?/)){const t=new URL(e);let a=s[1];a&&o.BX.has(s[1])&&(a=void 0),a&&(t.pathname=a+("/"===t.pathname?"":t.pathname));const n=t.pathname.slice(1),i=n.split("/");if(i[0]&&"$"===i[0][0]&&i[0].length>1)r="invoice";else if(/^\W/.test(n)&&!je.kO.test(n))r="joinchat";else switch(i[0]){case"joinchat":case"addstickers":case"addemoji":case"voicechat":case"invoice":if(1!==i.length&&!a){r=i[0];break}default:if(i[1]&&i[1].match(/^\d+(?:\?(?:comment|thread)=\d+)?$/)||1===i.length){r="im";break}}}else(n=e.match(/^(?:https?:\/\/)?telesco\.pe\/([^/?]+)\/(\d+)/))?r="im":(i=e.match(/tg:(?:\/\/)?(.+?)(?:\?|$)/))&&(r="tg_"+i[1]);return window[r]||(r=void 0),a.onclick=r,a}d.GO&&(d.GO.wrapUrl=qe),function(e){let t,s;function n(t){e.lastRequestedLangCode=t,e.lastRequestedNormalizedLangCode=t.split("-")[0]}function i(){if("h12"===e.timeFormat)try{const t=P({hour:"numeric",minute:"numeric",hour12:!0}),a=new Date;a.setHours(0);const s=t.format(a);e.amPmCache.am=s.split(/\s/)[1],a.setHours(12);const n=t.format(a);e.amPmCache.pm=n.split(/\s/)[1]}catch(t){console.error("cannot get am/pm",t),e.amPmCache={am:"AM",pm:"PM"}}}function r(){const e=_.Z.langPackCode;return n(e),Promise.all([a.e(104).then(a.bind(a,9104)),a.e(301).then(a.bind(a,9301)),a.e(8).then(a.bind(a,9179))]).then((([t,a,s])=>{const n=[];return p(t.default,n),p(a.default,n),f({_:"langPackDifference",from_version:0,lang_code:e,strings:n,version:0,local:!0,countries:s.default})}))}function o(t,s){e.requestedServerLanguage=!0;const n=g.managers;return Promise.all([n.apiManager.invokeApiCacheable("langpack.getLangPack",{lang_code:t,lang_pack:"web"}),!1,a.e(104).then(a.bind(a,9104)),a.e(301).then(a.bind(a,9301)),n.apiManager.invokeApiCacheable("help.getCountriesList",{lang_code:t,hash:0}),e.polyfillPromise])}function p(e,t=[]){for(const a in e){const s=e[a];"string"==typeof s?t.push({_:"langPackString",key:a,value:s}):t.push(Object.assign({_:"langPackStringPluralized",key:a},s))}return t}function f(e){return e.appVersion=_.Z.langPackVersion,h.Z.set({langPack:e}).then((()=>(c(e),e)))}function c(a){const s=e.lastRequestedLangCode;if(a.lang_code===s){try{t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode)}catch(a){console.error("pluralRules error",a),t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode.split("-",1)[0])}try{t=new Intl.PluralRules(a.lang_code)}catch(e){console.error("pluralRules error",e),t=new Intl.PluralRules(a.lang_code.split("-",1)[0])}e.strings.clear();for(const t of a.strings)e.strings.set(t.key,t);a.countries&&(e.countriesList.length=0,e.countriesList.push(...a.countries.countries),a.countries.countries.forEach((t=>{if(t.name){const a=t.default_name;e.strings.set(a,{_:"langPackString",key:a,value:t.name})}}))),e.lastAppliedLangCode!==s&&(g.dispatchEvent("language_change",s),e.lastAppliedLangCode=s,v.clear(),i()),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const a=e.weakMap.get(t);a&&a.update()}))}}function l(e,t,a={i:0}){const s=[];let n=0;return e.replace(/(\*\*|__)(.+?)\1|(\n)|(\[.+?\]\(.*?\))|un\d|%\d\$.|%./g,((e,i,r,o,p,d,f)=>{if(s.push(f.slice(n,d)),i){let e;switch(i){case"**":e=document.createElement("b");break;case"__":e=document.createElement("i")}e.append(...l(r,t,a)),s.push(e)}else if(o)s.push(document.createElement("br"));else if(p){const e=p.lastIndexOf("]"),n=p.slice(1,e),i=p.slice(e+2,p.length-1);let r;if(i&&(0,Ze.Z)(i)){r=document.createElement("a");const e=qe(i);r.href=e.url,e.onclick&&r.setAttribute("onclick",e.onclick),r.target="_blank"}else r=t[a.i++],r instanceof DocumentFragment&&(r=r.firstChild),r.textContent="";r.append(...l(n,t,a)),s.push(r)}else t&&function(e,t,a){const s=t[a.i++];Array.isArray(s)?e.push(...s):e.push(s)}(s,t,a);return n=d+e.length,""})),n!==e.length&&s.push(e.slice(n)),s}function m(a,s=!1,n){const i=e.strings.get(a);let r;if(i)if("langPackStringPluralized"===i._&&(null==n?void 0:n.length)){let e=n[0];"string"==typeof e&&(e=+e.replace(/\D/g,"")),r=i[t.select(e)+"_value"]||i.other_value}else r="langPackString"===i._?i.value:a;else r=a;const o=l(r,n);return s?o.map((e=>e instanceof Node?e.textContent:e)).join(""):o}e.strings=new Map,e.countriesList=[],e.requestedServerLanguage=!1,e.isRTL=!1,e.setRTL=function(t){e.isRTL=t},e.getCacheLangPack=function(){return s||(s=Promise.all([h.Z.get("langPack"),e.polyfillPromise]).then((([t])=>t?(d.ZP,e.lastRequestedLangCode||n(t.lang_code),c(t),t):r())).finally((()=>{s=void 0})))},e.setTimeFormat=function(t,a=!!e.timeFormat&&e.timeFormat!==t){e.timeFormat=t,i(),a&&(v.clear(),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const a=e.weakMap.get(t);a instanceof b&&a.update()})))},e.loadLocalLangPack=r,e.loadLangPack=o,e.getStrings=function(e,t){return g.managers.apiManager.invokeApi("langpack.getStrings",{lang_pack:_.Z.langPack,lang_code:e,keys:t})},e.formatLocalStrings=p,e.getLangPack=function(e,t){return n(e),o(e).then((([e,t,a,s,n,i])=>{let r=[];return[a,s].forEach((e=>{p(e.default,r)})),r=r.concat(...[e.strings,t.strings].filter(Boolean)),e.strings=r,e.countries=n,f(e)}))},e.saveLangPack=f,e.polyfillPromise="undefined"!=typeof Intl&&void 0!==Intl.PluralRules?Promise.resolve():a.e(642).then(a.bind(a,4642)).then((e=>{window.Intl=Object.assign("undefined"!=typeof Intl?Intl:{},e.default)})),e.applyLangPack=c,e.superFormatter=l,e.format=m,e.weakMap=new WeakMap;class u{constructor(t){this.element=(null==t?void 0:t.element)||document.createElement("span"),this.element.classList.add("i18n"),this.property=null==t?void 0:t.property,t&&(t.key||t.date)&&this.update(t),e.weakMap.set(this.element,this)}}class y extends u{constructor(e={}){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"innerHTML"}))}update(e){if((0,Le.Z)(this,e),"innerHTML"===this.property)this.element.textContent="",this.element.append(...m(this.key,!1,this.args));else{const e=this.element[this.property],t=m(this.key,!0,this.args);void 0===e?this.element.dataset[this.property]=t:this.element[this.property]=t}}compareAndUpdate(e){if(this.key!==e.key||!(0,Y.Z)(this.args,e.args))return this.update(e)}}e.IntlElement=y;const v=new Map;function P(t={}){const a=JSON.stringify(t);let s=v.get(a);return s||(s=new Intl.DateTimeFormat(e.lastRequestedNormalizedLangCode+"-u-hc-"+e.timeFormat,t),v.set(a,s)),s}e.amPmCache={am:"AM",pm:"PM"};class b extends u{constructor(e){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"textContent"})),this.element.setAttribute("dir","auto")}update(t){let a;if((0,Le.Z)(this,t),this.options.hour&&this.options.minute&&2===Object.keys(this.options).length){const t=this.date.getHours();a=("0"+("h12"===e.timeFormat?t%12||12:t)).slice(-2)+":"+("0"+this.date.getMinutes()).slice(-2),"h12"===e.timeFormat&&(a+=" "+(t<12?e.amPmCache.am:e.amPmCache.pm))}else{const e=P(this.options);a=(0,Ne.Z)(e.format(this.date))}this.element[this.property]=a}}e.IntlDateElement=b,e.i18n=function(e,t){return new y({key:e,args:t}).element},e.i18n_=function(e){return new y(e).element},e._i18n=function(e,t,a,s){return new y({element:e,key:t,args:a,property:s}).element}}(Oe||(Oe={}));const Ge=Oe;Oe.i18n,Oe.i18n_,Oe._i18n,d.GO.I18n=Oe;const He=["January","February","March","April","May","June","July","August","September","October","November","December"],We=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ze=e=>{const t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())),a=t.getUTCDay()||7;t.setUTCDate(t.getUTCDate()+4-a);const s=new Date(Date.UTC(t.getUTCFullYear(),0,1));return Math.ceil(((t.getTime()-s.getTime())/86400+1)/7)};d.GO&&(d.GO.formatDateAccordingToTodayNew=function(e){const t=new Date,a=t.getTime()/1e3|0,s=e.getTime()/1e3|0,n={};return a-s<86400&&t.getDate()===e.getDate()?n.hour=n.minute="2-digit":t.getFullYear()!==e.getFullYear()?(n.year=n.day="numeric",n.month="2-digit"):a-s<604800&&ze(t)===ze(e)?n.weekday="short":(n.month="short",n.day="numeric"),new Ge.IntlDateElement({date:e,options:n}).element});const Ke=2013,Je=new RegExp("20[0-9]{1,2}"),$e=new RegExp("(\\w{3,}) ([0-9]{0,4})","i"),Qe=new RegExp("([0-9]{0,4}) (\\w{2,})","i"),Ye=new RegExp("^([0-9]{1,4})(\\.| |/|\\-)([0-9]{1,4})$","i"),Xe=new RegExp("^([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,4})$","i"),et=[31,29,31,30,31,30,31,31,30,31,30,31];function tt(e,t,a){const s=(new Date).getFullYear(),n=Date.now();if(a>=Ke&&a<=s){const s=new Date;s.setFullYear(a,t,1),s.setHours(0,0,0);const i=s.getTime();if(i>n)return;s.setMonth(s.getMonth()+1);const r=s.getTime()-1;e.push({title:st(i),minDate:i,maxDate:r})}}function at(e,t,a){if(ot(t,a)){const n=(new Date).getFullYear(),i=Date.now();for(let r=n;r>=Ke;r--){if(1===a&&28===t&&((s=r)%4!=0||s%100==0)&&s%400!=0)continue;const o=new Date;o.setFullYear(r,a,t+1),o.setHours(0,0,0);const p=o.getTime();if(p>i)continue;o.setFullYear(r,a,t+2),o.setHours(0,0,0);const d=o.getTime()-1;r===n?e.push({title:nt(p),minDate:p,maxDate:d}):e.push({title:it(p),minDate:p,maxDate:d})}}var s}function st(e){const t=new Date(e);return He[t.getMonth()].slice(0,3)+" "+t.getFullYear()}function nt(e){const t=new Date(e);return He[t.getMonth()].slice(0,3)+" "+t.getDate()}function it(e){const t=new Date(e);return("0"+t.getDate()).slice(-2)+"."+("0"+(t.getMonth()+1)).slice(-2)+"."+t.getFullYear()}function rt(e){const t=new Date(e);return We[t.getDay()]}function ot(e,t){return t>=0&&t<12&&e>=0&&e{t[e][s]=a})),a[e]=t[e])}d.GO.fillTipDates=function(e,t){const a=e.trim().toLowerCase();if(a.length<3)return;if(0==="today".indexOf(a)){const e=new Date,a=e.getFullYear(),s=e.getMonth(),n=e.getDate();e.setFullYear(a,s,n),e.setHours(0,0,0);const i=e.getTime();e.setFullYear(a,s,n+1),e.setHours(0,0,0);const r=e.getTime()-1;return void t.push({title:"Today",minDate:i,maxDate:r})}if(0==="yesterday".indexOf(a)){const e=new Date,a=e.getFullYear(),s=e.getMonth(),n=e.getDate();e.setFullYear(a,s,n),e.setHours(0,0,0);const i=e.getTime()-864e5;e.setFullYear(a,s,n+1),e.setHours(0,0,0);const r=e.getTime()-86400001;return void t.push({title:"Yesterday",minDate:i,maxDate:r})}const s=function(e){const t=new Date;if(e.length<=3)return-1;for(let a=0;a<7;a++)if(t.setDate(t.getDate()+1),0===rt(t.getTime()).toLowerCase().indexOf(e))return t.getDay();return-1}(a);if(s>=0){const e=new Date,a=e.getTime(),n=s-e.getDay();e.setDate(e.getDate()+n),e.getTime()>a&&e.setTime(e.getTime()-6048e5);const i=e.getFullYear(),r=e.getMonth(),o=e.getDate();e.setFullYear(i,r,o),e.setHours(0,0,0);const p=e.getTime();e.setFullYear(i,r,o+1),e.setHours(0,0,0);const d=e.getTime()-1;return void t.push({title:rt(p),minDate:p,maxDate:d})}let n;if(null===(n=Ye.exec(a)))if(null===(n=Xe.exec(a)))if(null===(n=Je.exec(a))){if(null!==(n=$e.exec(a))){const e=n[1],a=n[2],s=pt(e);if(s>=0){const e=+a;if(e>0&&e<=31)return void at(t,e-1,s);if(e>=Ke)return void tt(t,s,e)}}if(null!==(n=Qe.exec(a))){const e=n[1],a=pt(n[2]);if(a>=0){const s=+e;if(s>0&&s<=31)return void at(t,s-1,a);s>=Ke&&tt(t,a,s)}}}else{let e=+a;const s=(new Date).getFullYear();if(e=e;a--){const e=new Date;e.setFullYear(a,0,1),e.setHours(0,0,0);const s=e.getTime();e.setFullYear(a+1,0,1),e.setHours(0,0,0);const n=e.getTime()-1;t.push({title:""+a,minDate:s,maxDate:n})}}else if(e<=s){const a=new Date;a.setFullYear(e,0,1),a.setHours(0,0,0);const s=a.getTime();a.setFullYear(e+1,0,1),a.setHours(0,0,0);const n=a.getTime()-1;t.push({title:""+e,minDate:s,maxDate:n})}}else{const e=n[1],a=n[3],s=n[5];if(!n[2]===n[4])return;const i=parseInt(e),r=parseInt(a)-1;let o=parseInt(s);o>=10&&o<=99&&(o+=2e3);const p=(new Date).getFullYear();if(ot(i-1,r)&&o>=Ke&&o<=p){const e=new Date;e.setFullYear(o,r,i),e.setHours(0,0,0);const a=e.getTime();e.setFullYear(o,r,i+1),e.setHours(0,0,0);const s=e.getTime()-1;return void t.push({title:it(a),minDate:a,maxDate:s})}}else{const e=n[1],a=n[3],s=parseInt(e),i=parseInt(a);if(s>0&&s<=31){if(i>=Ke&&s<=12)return void tt(t,s-1,i);i<=12&&at(t,s-1,i-1)}else s>=Ke&&i<=12&&tt(t,i-1,s)}};var ft=a(2491),ct=a(7072),lt=a(8801),mt=a(6658);const gt={pdf:"application/pdf",tgv:"application/x-tgwallpattern",tgs:"application/x-tgsticker",json:"application/json",wav:"audio/wav",mp3:"audio/mpeg",ogg:"audio/ogg",jpeg:"image/jpeg",jpg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",webm:"video/webm",mov:"video/quicktime",svg:"image/svg+xml"},ht={};for(const e in gt)ht[gt[e]]=e;let ut=0;class yt extends G{constructor(){super(...arguments),this.onServiceWorkerFail=()=>{for(const e in this.docs){const t=this.docs[e];t.supportsStreaming&&(delete t.supportsStreaming,this.thumbsStorage.deleteCacheContext(t))}}}after(){this.docs={},this.stickerCachedThumbs={},this.uploadingWallPapers={},f.Z.getInstance().addEventListener("serviceWorkerOnline",(e=>{e||this.onServiceWorkerFail()}))}saveDoc(e,t){if(!e||"documentEmpty"===e._)return;const a=this.docs[e.id];e.file_reference&&(dt("file_reference",a,e),this.referenceDatabase.saveContext(e.file_reference,t)),a||(this.docs[e.id]=e);for(let t=0,a=e.attributes.length;t"documentAttributeFilename"===e._)),a=t&&t.file_name.split(".").pop(),s=((e,t={})=>{const a=t.monthAsNumber?".":" ",s=("0"+e.getHours()).slice(-2)+":"+("0"+e.getMinutes()).slice(-2)+(t.noSeconds?"":":"+("0"+e.getSeconds()).slice(-2));return(t.leadingZero?("0"+e.getDate()).slice(-2):e.getDate())+a+(t.monthAsNumber?("0"+(e.getMonth()+1)).slice(-2):He[e.getMonth()])+a+e.getFullYear()+(t.noTime?"":", "+s)})(new Date(1e3*e.date),{monthAsNumber:!0,leadingZero:!0}).replace(/[:\.]/g,"-").replace(", ","_");e.file_name=`${e.type}_${s}${a?"."+a:""}`}return zs()&&("gif"===e.type&&e.size>8e6||"audio"===e.type||"video"===e.type)?(e.supportsStreaming=!0,this.thumbsStorage.getCacheContext(e).url||this.thumbsStorage.setCacheContextURL(e,void 0,function(e,t=!1,a){let s;return s=t?"download":a?"thumb":e.supportsStreaming?"stream":"document",(0,lt.q)(s,(0,mt.Z)(e,a))}(e),0)):e.supportsStreaming=!1,e.file_name||(e.file_name=""),a?Object.assign(a,e):e}getDoc(e){return(0,fe.Z)(e)?e:this.docs[e]}downloadDoc(e,t,a){return this.apiFileManager.downloadMedia({media:e,queueId:t,onlyCache:a})}getLottieCachedThumb(e,t){const a=this.stickerCachedThumbs[e];return a&&a[t]}saveLottiePreview(e,t,a,s,n){var i,r,o;const p=this.getDoc(e);if(!p)return;const d=null!==(i=(r=this.stickerCachedThumbs)[o=p.id])&&void 0!==i?i:r[o]={},f=d[n];f&&f.w>=a&&f.h>=s||(d[n]={url:URL.createObjectURL(t),w:a,h:s})}saveWebPConvertedStrippedThumb(e,t){const a=this.getDoc(e);if(!a)return;const s=a.thumbs&&a.thumbs.find((e=>"photoStrippedSize"===e._));s&&(a.pFlags.stickerThumbConverted=!0,s.bytes=t)}prepareWallPaperUpload(e){const t="wallpaper-upload-"+ ++ut,a={_:"photoSize",h:0,w:0,location:{},size:e.size,type:o.Pt};let s={_:"document",access_hash:"",attributes:[],dc_id:0,file_reference:[],id:t,mime_type:e.type,size:e.size,date:(0,te.Z)(!0),pFlags:{},thumbs:[a],file_name:e.name};s=this.saveDoc(s);const n=this.thumbsStorage.setCacheContextURL(s,void 0,URL.createObjectURL(e),e.size),i={_:"wallPaper",access_hash:"",document:s,id:t,slug:t,pFlags:{}};return this.uploadingWallPapers[t]={cacheContext:n,file:e},i}uploadWallPaper(e){const{cacheContext:t,file:a}=this.uploadingWallPapers[e];return delete this.uploadingWallPapers[e],this.apiFileManager.upload({file:a,fileName:a.name}).then((e=>this.apiManager.invokeApi("account.uploadWallPaper",{file:e,mime_type:a.type,settings:{_:"wallPaperSettings",pFlags:{}}}).then((e=>((0,ue.Z)(e),e.document=this.saveDoc(e.document),this.thumbsStorage.setCacheContextURL(e.document,void 0,t.url,t.downloaded),e)))))}getGifs(){return this.apiManager.invokeApiHashable({method:"messages.getSavedGifs",processResult:e=>((0,ue.Z)(e),e.gifs.map((e=>this.saveDoc(e))))})}requestDocPart(e,t,a,s){const n=this.getDoc(e);return n?this.apiFileManager.requestFilePart(t,(0,ct.Z)(n),a,s):Promise.reject((0,X.Z)("NO_DOC"))}}var _t=a(6034);class vt extends G{constructor(){super(...arguments),this.drafts={}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateDraftMessage:e=>{const t=this.appPeersManager.getPeerId(e.peer);this.saveDraft({peerId:t,threadId:e.threadId,draft:e.draft,notify:!0})}}),h.Z.get("drafts").then((e=>{this.drafts=e||{}}))}getKey(e,t){return e+(t?"_"+t:"")}getDraft(e,t){return this.drafts[this.getKey(e,t)]}addMissedDialogs(){return this.getAllDrafts().then((()=>{for(const e in this.drafts){if(-1!==e.indexOf("_"))continue;const t=e.toPeerId();this.appMessagesManager.getDialogOnly(t)||this.appMessagesManager.reloadConversation(t)}}))}getAllDrafts(){var e;return null!==(e=this.getAllDraftPromise)&&void 0!==e?e:this.getAllDraftPromise=this.apiManager.invokeApi("messages.getAllDrafts").then((e=>{(this.apiUpdatesManager.updatesState.syncLoading||Promise.resolve()).then((()=>{this.apiUpdatesManager.processUpdateMessage(e)}))}))}saveDraft({peerId:e,threadId:t,draft:a,notify:s,force:n}){const i=this.processApiDraft(a),r=this.getKey(e,t);return i?this.drafts[r]=i:delete this.drafts[r],h.Z.set({drafts:this.drafts}),s&&this.rootScope.dispatchEvent("draft_updated",{peerId:e,threadId:t,draft:i,force:n}),i}isEmptyDraft(e){return"draftMessage"!==(null==e?void 0:e._)||!(void 0!==e.reply_to_msg_id&&e.reply_to_msg_id>0)&&!e.message.length}processApiDraft(e){if(e&&"draftMessage"===e._)return e.reply_to_msg_id&&(e.reply_to_msg_id=(0,pe.Z)(e.reply_to_msg_id)),e}syncDraft(e,t,a,s=!0,n=!1){const i=this.getDraft(e,t);if((0,_t.Z)(i,a))return!0;const r={peer:this.appPeersManager.getInputPeerById(e),message:""};let o;if(this.isEmptyDraft(a))o={_:"draftMessageEmpty"};else{(0,ue.Z)(a);const e=a.message,t=a.entities;a.reply_to_msg_id&&(r.reply_to_msg_id=(0,oe.Z)(a.reply_to_msg_id)),(null==t?void 0:t.length)&&(r.entities=this.appMessagesManager.getInputEntities(t)),a.pFlags.no_webpage&&(r.no_webpage=a.pFlags.no_webpage),r.message=e}t&&(r.top_msg_id=(0,oe.Z)(t));const p=o||a;return p.date=(0,te.Z)(!0)+this.timeManager.getServerTimeOffset(),this.saveDraft({peerId:e,threadId:t,draft:p,notify:!0,force:n}),!s||this.apiManager.invokeApi("messages.saveDraft",r)}clearAllDrafts(){return this.apiManager.invokeApi("messages.clearAllDrafts").then((e=>{if(e)for(const e in this.drafts){const[t,a]=e.split("_");this.rootScope.dispatchEvent("draft_updated",{peerId:t.toPeerId(),threadId:a?+a:void 0,draft:void 0})}}))}clearDraft(e,t){const a={_:"draftMessageEmpty"};t?this.syncDraft(e,t,a,!1,!0):this.saveDraft({peerId:e,threadId:t,draft:a,notify:!0,force:!0})}setDraft(e,t,a,s){const n={_:"draftMessage",date:(0,te.Z)(!0),message:a,pFlags:{},entities:s};t?this.syncDraft(e,t,n,!1,!0):this.saveDraft({peerId:e,threadId:t,draft:n,notify:!0,force:!0})}}var Pt=a(946),bt=a(7746);const Mt={keywords:{},version:0,langCode:_.Z.langPackCode};class St extends G{constructor(){super(...arguments),this.keywordLangPacks={},this.indexedLangPacks={},this.getKeywordsPromises={},this.recent={},this.getRecentEmojisPromises={},this.getCustomEmojiDocumentPromises=new Map}getEmojiKeywords(e=_.Z.langPackCode){const t=this.getKeywordsPromises[e];if(t)return t;const a="emojiKeywords_"+e;return this.getKeywordsPromises[e]=h.Z.get(a).then((t=>((0,fe.Z)(t)||(t={}),(0,Pt.Z)(Mt,t),t.langCode=e,this.keywordLangPacks[e]=t,this.apiManager.invokeApi("messages.getEmojiKeywordsDifference",{lang_code:t.langCode,from_version:t.version}).then((e=>{t.version=e.version;const s=t.keywords,n=e.keywords;for(let e=0,t=n.length;et)))))}getBothEmojiKeywords(){const e=[this.getEmojiKeywords()];return this.networkerFactory.language!==_.Z.langPackCode&&e.push(this.getEmojiKeywords(this.networkerFactory.language)),this.recent.native||e.push(this.getRecentEmojis("native")),Promise.all(e)}indexEmojis(){this.index||(this.index=new ae.Z(void 0,2));for(const e in this.keywordLangPacks){if(this.indexedLangPacks[e])continue;const t=this.keywordLangPacks[e].keywords;for(const e in t){const a=t[e];this.index.indexObject(a,e)}this.indexedLangPacks[e]=!0}}searchEmojis(e){let t;if(this.indexEmojis(),(e=e.toLowerCase().replace(/_/g," ")).trim()){const a=this.index.search(e);t=Array.from(a).reduce(((e,t)=>e.concat(t)),[])}else t=this.recent.native.concat(St.POPULAR_EMOJI).slice(0,32);return t=Array.from(new Set(t)),t}getRecentEmojis(e){var t;const a=this.getRecentEmojisPromises;return null!==(t=a[e])&&void 0!==t?t:a[e]=this.appStateManager.getState().then((t=>{let a=[];if("native"===e){const{recentEmoji:e}=t;a=Array.isArray(e)&&e.length?e:St.POPULAR_EMOJI}else{const{recentCustomEmoji:e}=t;a=Array.isArray(e)&&e.length?e:[]}return this.recent[e]=a}))}pushRecentEmoji(e){const t=e.docId?"custom":"native";e.emoji=(0,bt.Z)(e.emoji),this.getRecentEmojis(t).then((a=>{const s=e.docId||e.emoji;(0,M.Z)(a,s),a.unshift(s),a.splice(32,a.length-32),this.appStateManager.pushToState("custom"===t?"recentCustomEmoji":"recentEmoji",a),this.rootScope.dispatchEvent("emoji_recent",e)}))}getCustomEmojiDocuments(e){return e.length?this.apiManager.invokeApi("messages.getCustomEmojiDocuments",{document_id:e}).then((e=>e.map((e=>this.appDocsManager.saveDoc(e,{type:"customEmoji",docId:e.id}))))):Promise.resolve([])}getCachedCustomEmojiDocuments(e){return e.map((e=>this.appDocsManager.getDoc(e)))}setDebouncedGetCustomEmojiDocuments(){!this.getCustomEmojiDocumentsPromise&&this.getCustomEmojiDocumentPromises.size&&(this.getCustomEmojiDocumentsPromise=(0,P.Z)(0).then((()=>{const e=[...this.getCustomEmojiDocumentPromises.keys()],t=[];do{const a=e.splice(0,100),s=this.getCustomEmojiDocuments(a).then((e=>{e.forEach(((e,t)=>{const s=a[t],n=this.getCustomEmojiDocumentPromises.get(s);this.getCustomEmojiDocumentPromises.delete(s),n.resolve(e)}))}));t.push(s)}while(e.length);return Promise.all(t)})).finally((()=>{this.getCustomEmojiDocumentsPromise=void 0,this.setDebouncedGetCustomEmojiDocuments()})))}getCustomEmojiDocument(e){let t=this.getCustomEmojiDocumentPromises.get(e);if(t)return t;return this.appDocsManager.getDoc(e)||(t=(0,v.Z)(),this.getCustomEmojiDocumentPromises.set(e,t),this.setDebouncedGetCustomEmojiDocuments(),t)}getCustomEmojis(){return this.appStickersManager.getEmojiStickers()}}St.POPULAR_EMOJI=["๐Ÿ˜‚","๐Ÿ˜˜","โค๏ธ","๐Ÿ˜","๐Ÿ˜Š","๐Ÿ˜","๐Ÿ‘","โ˜บ๏ธ","๐Ÿ˜”","๐Ÿ˜„","๐Ÿ˜ญ","๐Ÿ’‹","๐Ÿ˜’","๐Ÿ˜ณ","๐Ÿ˜œ","๐Ÿ™ˆ","๐Ÿ˜‰","๐Ÿ˜ƒ","๐Ÿ˜ข","๐Ÿ˜","๐Ÿ˜ฑ","๐Ÿ˜ก","๐Ÿ˜","๐Ÿ˜ž","๐Ÿ˜…","๐Ÿ˜š","๐Ÿ™Š","๐Ÿ˜Œ","๐Ÿ˜€","๐Ÿ˜‹","๐Ÿ˜†","๐Ÿ‘Œ","๐Ÿ˜","๐Ÿ˜•"];var It=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class Ct extends G{after(){this.log=(0,S.kg)("GROUP-CALLS"),this.groupCalls=new Map,this.participants=new Map,this.nextOffsets=new Map,this.apiUpdatesManager.addMultipleEventsListeners({updateGroupCall:e=>{this.saveGroupCall(e.call,e.chat_id)},updateGroupCallParticipants:e=>{this.saveGroupCall(e.call);const t=e.call.id;this.saveApiParticipants(t,e.participants)}}),this.rootScope.addEventListener("group_call_update",(e=>{"groupCallDiscarded"===e._&&this.participants.delete(e.id)}))}getCachedParticipants(e){let t=this.participants.get(e);return t||this.participants.set(e,t=new Map),t}prepareToSavingNextOffset(e){const t=this.nextOffsets,a=t.get(e);return{nextOffset:a,setNextOffset:s=>{t.get(e)===a&&t.set(e,s)}}}saveApiParticipant(e,t,a){const s=this.getCachedParticipants(e),n=(0,le.Z)(t.peer),i=s.get(n),r=t.pFlags.left;if(!i&&r)return;t.pFlags.muted||t.pFlags.can_self_unmute||(t.pFlags.can_self_unmute=!0),i?(re(i,t),t=i):s.set(n,t);const o=this.getGroupCall(e);if("groupCall"===(null==o?void 0:o._)){let e=!1;r?(--o.participants_count,e=!0):!t.pFlags.just_joined||i||t.pFlags.self||(++o.participants_count,e=!0),e&&this.rootScope.dispatchEvent("group_call_update",o)}r&&s.delete(n),this.rootScope.dispatchEvent("group_call_participant",{groupCallId:e,participant:t})}saveApiParticipants(e,t,a){t.saved||(t.saved=!0,t.forEach((t=>this.saveApiParticipant(e,t,a))))}editParticipant(e,t,a){return It(this,void 0,void 0,(function*(){this.saveApiParticipant(e,t);const s=t.pFlags.self?o.NM:(0,le.Z)(t.peer),n=yield this.apiManager.invokeApiSingle("phone.editGroupCallParticipant",{call:this.getGroupCallInput(e),participant:s===o.NM?this.appPeersManager.getInputPeerSelf():this.appPeersManager.getInputPeerById(s),muted:a.muted,volume:a.volume,raise_hand:a.raiseHand,video_paused:a.videoPaused,video_stopped:a.videoStopped,presentation_paused:a.presentationPaused});this.apiUpdatesManager.processUpdateMessage(n)}))}getGroupCall(e){return this.groupCalls.get(e)}getGroupCallFull(e,t){return It(this,void 0,void 0,(function*(){const a=this.getGroupCall(e);if(a&&"inputGroupCall"!==a._&&!t)return a;const s=this.getCachedParticipants(e).size?0:100;return this.apiManager.invokeApiSingleProcess({method:"phone.getGroupCall",params:{call:this.getGroupCallInput(e),limit:s},processResult:t=>{this.appUsersManager.saveApiUsers(t.users),this.appChatsManager.saveApiChats(t.chats),this.saveApiParticipants(e,t.participants,!0);const a=this.saveGroupCall(t.call);return s&&void 0===this.nextOffsets.get(e)&&this.nextOffsets.set(e,t.participants_next_offset),a}})}))}saveGroupCall(e,t){const a=this.groupCalls.get(e.id),s="inputGroupCall"!==e._&&(!a||"groupCallDiscarded"!==a._);return a?(s&&re(a,e),e=a):this.groupCalls.set(e.id,e),s&&this.rootScope.dispatchEvent("group_call_update",e),e}createGroupCall(e,t,a){return It(this,void 0,void 0,(function*(){const s=yield this.apiManager.invokeApi("phone.createGroupCall",{peer:this.appPeersManager.getInputPeerById(e.toPeerId(!0)),random_id:(0,Ee.d)(32),schedule_date:t,title:a});return this.apiUpdatesManager.processUpdateMessage(s),s.updates.find((e=>"updateGroupCall"===e._)).call}))}getGroupCallInput(e){const t=this.getGroupCall(e);return{_:"inputGroupCall",id:t.id,access_hash:t.access_hash}}getGroupCallParticipants(e){return It(this,void 0,void 0,(function*(){const{nextOffset:t,setNextOffset:a}=this.prepareToSavingNextOffset(e);return""!==t&&(yield this.apiManager.invokeApiSingleProcess({method:"phone.getGroupParticipants",params:{call:this.getGroupCallInput(e),ids:[],sources:[],offset:t||"",limit:100},processResult:t=>{const s=t.count===t.participants.length?"":t.next_offset;this.appChatsManager.saveApiChats(t.chats),this.appUsersManager.saveApiUsers(t.users),this.saveApiParticipants(e,t.participants),a(s)}})),{participants:this.getCachedParticipants(e),isEnd:""===this.nextOffsets.get(e)}}))}hangUp(e,t){const a=this.getGroupCallInput(e);let s;return s="boolean"==typeof t&&t?this.apiManager.invokeApi("phone.discardGroupCall",{call:a}):"number"==typeof t?this.apiManager.invokeApi("phone.leaveGroupCall",{call:a,source:t}):this.apiManager.invokeApi("phone.joinGroupCall",{call:a,join_as:this.appPeersManager.getInputPeerSelf(),muted:!0,video_stopped:!0,params:{_:"dataJSON",data:""}}),s.then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}joinGroupCall(e,t,a){return It(this,void 0,void 0,(function*(){const s=this.getGroupCallInput(e);let n;if("main"===a.type){const i={call:s,join_as:this.appPeersManager.getInputPeerSelf(),params:t,muted:a.isMuted,video_stopped:!a.joinVideo};n=this.apiManager.invokeApi("phone.joinGroupCall",i),this.log(`[api] joinGroupCall id=${e}`,i)}else{const a={call:s,params:t};n=this.apiManager.invokeApi("phone.joinGroupCallPresentation",a),this.log(`[api] joinGroupCallPresentation id=${e}`,a)}const i=yield n;return this.apiUpdatesManager.processUpdateMessage(i),i.updates.find((e=>"updateGroupCallConnection"===e._))}))}leaveGroupCallPresentation(e){return this.apiManager.invokeApi("phone.leaveGroupCallPresentation",{call:this.getGroupCallInput(e)}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}}function wt(e){return{_:"inputPhoto",id:e.id,access_hash:e.access_hash,file_reference:e.file_reference}}function kt(e){return{_:"inputMediaPhoto",id:wt(e),ttl_seconds:0,pFlags:{}}}var At=a(515);function Ut(e){return{_:"inputMediaDocument",id:{_:"inputDocument",id:e.id,access_hash:e.access_hash,file_reference:e.file_reference},ttl_seconds:0,pFlags:{}}}class Dt extends G{constructor(){super(...arguments),this.inlineResults={},this.setHash={}}getGeoInput(e){return"geoPoint"===e._?{_:"inputGeoPoint",lat:e.lat,long:e.long,accuracy_radius:e.accuracy_radius}:{_:"inputGeoPointEmpty"}}getInlineResults(e,t,a="",s="",n){return this.apiManager.invokeApi("messages.getInlineBotResults",{bot:this.appUsersManager.getUserInput(t),peer:this.appPeersManager.getInputPeerById(e),query:a,geo_point:n?this.getGeoInput(n):void 0,offset:s},{stopTime:-1,noErrorBox:!0}).then((e=>{const t=e.query_id;return e.results.forEach((e=>{"botInlineMediaResult"===e._&&(e.document&&(e.document=this.appDocsManager.saveDoc(e.document)),e.photo&&(e.photo=this.appPhotosManager.savePhoto(e.photo))),this.inlineResults[(0,At.Z)(t,e.id)]=e})),e}))}pushPopularBot(e){this.appUsersManager.getTopPeers("bots_inline").then((t=>{const a=e.toPeerId(),s=t.findIndex((e=>e.id===a));let n;n=-1!==s?t[s]:{id:a,rating:0},++n.rating,(0,ie.Z)(t,n,"rating"),this.appStateManager.setKeyValueToStorage("topPeersCache")}))}switchToPM(e,t,a){return this.setHash[t]={peerId:e,time:Date.now()},this.appMessagesManager.startBot(t,void 0,a)}checkSwitchReturn(e){return t=this,a=void 0,n=function*(){const t=this.appUsersManager.getUser(e);if(!t||!t.pFlags.bot||!t.bot_inline_placeholder)return;const a=this.setHash[e];return a&&(delete this.setHash[e],Date.now()-a.time<36e5)?a.peerId:void 0},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}switchInlineQuery(e,t,a,s){this.appDraftsManager.setDraft(e,t,"@"+this.appPeersManager.getPeerUsername(a.toPeerId())+" "+s)}callbackButtonClick(e,t,a){return this.apiManager.invokeApi("messages.getBotCallbackAnswer",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t),data:a.data},{stopTime:-1,noErrorBox:!0})}sendInlineResult(e,t,a,s={}){const n=this.inlineResults[a];if(!n)return;this.pushPopularBot(t);const i=a.split("_"),r=i.shift(),o=i.join("_");if(s.viaBotId=t,s.queryId=r,s.resultId=o,n.send_message.reply_markup&&(s.replyMarkup=n.send_message.reply_markup),"botInlineMessageText"===n.send_message._)s.entities=n.send_message.entities,this.appMessagesManager.sendText(e,n.send_message.message,s);else{let t,a,i="";const r=n.send_message;switch(r._){case"botInlineMessageMediaAuto":if(i=r.message,"botInlineMediaResult"===n._){const{document:e,photo:a}=n;t=e?Ut(e):kt(a)}break;case"botInlineMessageMediaGeo":t={_:"inputMediaGeoPoint",geo_point:this.getGeoInput(r.geo)},s.geoPoint=r.geo;break;case"botInlineMessageMediaVenue":t={_:"inputMediaVenue",geo_point:this.getGeoInput(r.geo),title:r.title,address:r.address,provider:r.provider,venue_id:r.venue_id,venue_type:r.venue_type},s.geoPoint=r.geo;break;case"botInlineMessageMediaContact":t={_:"inputMediaContact",phone_number:r.phone_number,first_name:r.first_name,last_name:r.last_name,vcard:r.vcard};break;case"botInlineMessageMediaInvoice":a={_:"messageMediaInvoice",title:r.title,description:r.description,photo:r.photo,currency:r.currency,total_amount:r.total_amount,pFlags:{shipping_address_requested:r.pFlags.shipping_address_requested,test:r.pFlags.test},start_param:void 0}}!t&&a&&(t={_:"messageMediaPending",messageMedia:a}),this.appMessagesManager.sendOther(e,t,s)}}}var Et=a(7082);class Tt{constructor(){this.tempNum=0}generateTempMessageId(e){const t=++this.tempNum;return(0,pe.Z)(e)+(t&Et.o-1)}}var Ft=a(4421),Rt=a(3624),xt=a(7401);function Bt(e,t){if(e.length{let o=e.slice(s,r);const p=n++;o.length>t&&(Bt(o.slice(t),t).forEach((e=>{i[n++]=e})),o=o.slice(0,t)),s=r,a=0,i[p]=(i[p]||"")+o};let o=0;for(;;){let s=e.indexOf(" ",o);if(-1===s){o!==e.length-1&&r();break}s+=" ".length;const n=s-o;a+n>t&&r(a),o=s,a+=n}return i}var Vt=a(5701),Ot=a(7667),Lt=a(6241),Nt=a(6535),Zt=a(6566),jt=a(2202),qt=a(319);const Gt=new class{constructor(){this.tabs=new Map}start(){f.Z.getInstance().addEventListener("tabState",((e,t)=>{this.tabs.get(t).state=e}))}getTabs(){return[...this.tabs.values()].filter((e=>!!e.state))}addTab(e){const t={source:e,state:void 0};this.tabs.set(e,t)}deleteTab(e){this.tabs.delete(e)}};d.GO&&(d.GO.appTabsManager=Gt);const Ht=Gt;var Wt=a(2381),zt=a(13);function Kt(e){return{_:"inputDocument",id:e.id,access_hash:e.access_hash,file_reference:e.file_reference}}var Jt=a(5285),$t=a(5102);function Qt(e,t,a){a?e[t]=!0:delete e[t]}var Yt=a(4993),Xt=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const ea=e=>{e()},ta=!0;class aa extends G{constructor(){super(...arguments),this.pendingByRandomId={},this.pendingByMessageId={},this.pendingAfterMsgs={},this.pendingTopMsgs={},this.tempFinalizeCallbacks={},this.sendSmthLazyLoadQueue=new Ft.Z(10),this.needSingleMessages=new Map,this.extendedMedia=new Map,this.maxSeenId=0,this.migratedFromTo={},this.migratedToFrom={},this.newDialogsToHandle=new Map,this.newUpdatesAfterReloadToHandle={},this.notificationsToHandle={},this.reloadConversationsPeers=new Map,this.log=(0,S.kg)("MESSAGES",S.v9.Error|S.v9.Debug|S.v9.Log|S.v9.Warn),this.groupedTempId=0,this.typings={},this.unreadMentions={},this.goToNextMentionPromises={},this.batchUpdates={},this.clear=e=>{this.middleware?this.middleware.clean():(this.middleware=(0,Rt.k)(),this.uploadFilePromises={}),this.messagesStorageByPeerId={},this.groupedMessagesStorage={},this.scheduledMessagesStorage={},this.historiesStorage={},this.threadsStorage={},this.searchesStorage={},this.pinnedMessages={},this.threadsServiceMessagesIdsStorage={},this.threadsToReplies={},this.dialogsStorage&&this.dialogsStorage.clear(e),this.filtersStorage&&this.filtersStorage.clear(e)},this.handleNewDialogs=()=>{let e=0;const t=new Map,a=a=>{var s;const{peerId:n}=a;this.dialogsStorage.pushDialog({dialog:a}),this.appPeersManager.isChannel(n)||(e=Math.max(e,a.top_message||0));let i=t.get(n);i||t.set(n,i={}),"forumTopic"===a._?(null!==(s=i.topics)&&void 0!==s?s:i.topics=new Map).set(a.id,a):i.dialog=a};for(const[e,t]of this.newDialogsToHandle){const s="dialog"in t,{dialog:n,topics:i}=t;s&&(n?this.dialogsStorage.getDialogOnly(e)&&a(n):this.reloadConversation(e.toPeerId())),i&&(null==i||i.forEach(((t,s)=>{t?this.dialogsStorage.getForumTopic(e,s)&&a(t):this.dialogsStorage.getForumTopicById(e,s)})))}0!==e&&this.incrementMaxSeenId(e),this.rootScope.dispatchEvent("dialogs_multiupdate",t),this.newDialogsToHandle.clear()},this.handleNotifications=()=>{T.Z.clearTimeout(this.notificationsHandlePromise),this.notificationsHandlePromise=void 0;for(const e in this.notificationsToHandle){const[t,a]=e.split("_"),s=this.notificationsToHandle[e];this.getNotifyPeerSettings(t.toPeerId(),a?+a:void 0).then((({muted:e,peerTypeNotifySettings:t})=>{const a=s.topMessage;e&&!a.pFlags.mentioned||!a.pFlags.unread||a.pFlags.unread&&this.notifyAboutMessage(a,{fwdCount:s.fwdCount,peerTypeNotifySettings:t})}))}this.notificationsToHandle={}},this.onUpdateMessageId=e=>{const t=e.random_id;if(!this.pendingByRandomId[t])return;const a=(0,pe.Z)(e.id);this.pendingByMessageId[a]=t},this.onUpdateNewMessage=e=>{var t,a,s,n;const i=e.message,r=this.getMessagePeer(i),p=this.getHistoryMessagesStorage(r),d="updateNewDiscussionMessage"===e._;this.saveMessages([i],{storage:this.createMessageStorage(r,"history")});const f=this.appPeersManager.isForum(r),c=this.getThreadKey(i),l=c?+c.split("_")[1]:void 0,m=this.dialogsStorage.getDialogOrTopic(r,d?l:void 0);if((!m||this.reloadConversationsPeers.has(r))&&!d){let t=!0;if(r.isAnyChat()&&(t=this.appChatsManager.isInChat(r.toChatId())),t)return void this.handleNewUpdateAfterReload(r,e)}if(l&&!d){const e=null===(t=this.threadsStorage[r])||void 0===t?void 0:t[l],a={_:"updateNewDiscussionMessage",message:i};this.appChatsManager.isForum(r.toChatId())&&!this.dialogsStorage.getForumTopic(r,l)?this.handleNewUpdateAfterReload(r,a,l):e&&this.onUpdateNewMessage(a)}if("messageService"===i._){const{action:e}=i;if("messageActionPaymentSent"===e._&&i.reply_to&&this.rootScope.dispatchEvent("payment_sent",{peerId:i.reply_to.reply_to_peer_id?this.appPeersManager.getPeerId(i.reply_to.reply_to_peer_id):i.peerId,mid:i.reply_to_mid,receiptMessage:i}),"messageActionTopicEdit"===e._&&!d){const t=this.dialogsStorage.getForumTopic(r,l);if(t){const a=(0,ve.Z)(t);void 0!==e.title&&(t.title=e.title),void 0!==e.closed&&Qt(t.pFlags,"closed",e.closed),void 0!==e.hidden&&Qt(t.pFlags,"hidden",e.hidden),void 0!==e.icon_emoji_id&&(t.icon_emoji_id=e.icon_emoji_id),this.scheduleHandleNewDialogs(r,t),this.dialogsStorage.processTopicUpdate(t,a)}else this.dialogsStorage.getForumTopicById(r,l)}}this.saveMessages([i],{storage:p}),this.checkPendingMessage(i);const g=this.getHistoryStorage(r,d?l:void 0);d||this.updateMessageRepliesIfNeeded(i);const h=e.ignoreExisting;if(g.history.findSlice(i.mid)){if(!h)return!1}else{const e=g.history.first;if(e.isEnd(se.D.Bottom)){let t=0;for(const a=e.length;te[t]);++t);e.splice(t,0,i.mid)}else g.history.unshift(i.mid);null!==g.count&&++g.count}(!g.maxId||i.mid>g.maxId)&&(g.maxId=i.mid),this.mergeReplyKeyboard(g,i)&&this.rootScope.dispatchEvent("history_reply_markup",{peerId:r});const u=i.fromId;if(u.isUser()&&!i.pFlags.out&&i.from_id){this.appUsersManager.forceUserOnline(u,i.date);const e={_:"sendMessageCancelAction"};let t;t=r.isUser()?{_:"updateUserTyping",action:e,user_id:u}:this.appPeersManager.isChannel(r)?{_:"updateChannelUserTyping",action:e,channel_id:r.toChatId(),from_id:this.appPeersManager.getOutputPeer(u),top_msg_id:l?(0,oe.Z)(l):void 0}:{_:"updateChatUserTyping",action:e,chat_id:r.toChatId(),from_id:this.appPeersManager.getOutputPeer(u)},this.apiUpdatesManager.processLocalUpdate(t)}this.handleNewMessage(i);const y="forumTopic"===(null==m?void 0:m._);if(d&&!y||!m)return;const _=!i.pFlags.out&&i.pFlags.unread;if(_&&i.mid>m.top_message){const e=this.dialogsStorage.prepareDialogUnreadCountModifying(m);++m.unread_count,i.pFlags.mentioned&&(++m.unread_mentions_count,this.modifyCachedMentions(r,i.mid,!0,y?l:void 0)),e()}if(i.mid>=m.top_message&&this.setDialogTopMessage(i,m),(!d&&!f||y)&&_){const e=c||r,t=null!==(a=(n=this.notificationsToHandle)[e])&&void 0!==a?a:n[e]={fwdCount:0,fromId:o.NM};t.fromId!==u&&(t.fromId=u,t.fwdCount=0),i.fwd_from&&++t.fwdCount,t.topMessage=i,null!==(s=this.notificationsHandlePromise)&&void 0!==s||(this.notificationsHandlePromise=T.Z.setTimeout(this.handleNotifications,0))}},this.onUpdateMessageReactions=e=>{const{peer:t,msg_id:a,reactions:s}=e,n=(0,pe.Z)(a),i=this.appPeersManager.getPeerId(t),r=this.getMessageByPeer(i,n);if("message"!==(null==r?void 0:r._))return;const o=null==s?void 0:s.recent_reactions;if((null==o?void 0:o.length)&&r.pFlags.out){const e=o[o.length-1],t=r.reactions,a=null==t?void 0:t.recent_reactions;this.appPeersManager.getPeerId(e.peer_id)===this.appPeersManager.peerId||a&&!(a.length<=o.length)||a&&(0,Y.Z)(e,a[a.length-1])||this.getNotifyPeerSettings(i).then((({muted:t,peerTypeNotifySettings:a})=>{a.show_previews&&this.notifyAboutMessage(r,{peerReaction:e,peerTypeNotifySettings:a})}))}const p=r.peerId+"_"+r.mid;this.pushBatchUpdate("messages_reactions",this.batchUpdateReactions,p,(()=>(0,ve.Z)(r.reactions))),r.reactions=s,e.local||this.setDialogToStateIfMessageIsTop(r)},this.onUpdateDialogUnreadMark=e=>{const t=this.appPeersManager.getPeerId(e.peer.peer),a=this.getDialogOnly(t);if(a){const s=this.dialogsStorage.prepareDialogUnreadCountModifying(a);e.pFlags.unread?a.pFlags.unread_mark=!0:delete a.pFlags.unread_mark,s(),this.dialogsStorage.setDialogToState(a),this.rootScope.dispatchEvent("dialogs_multiupdate",new Map([[t,{dialog:a}]]))}else this.scheduleHandleNewDialogs(t)},this.onUpdateEditMessage=e=>{var t,a;const s=e.message,n=this.getMessagePeer(s),i=(0,pe.Z)(s.id),r=this.getHistoryMessagesStorage(n);if(!r.has(i))return;const o=this.getMessageFromStorage(r,i);this.saveMessages([s],{storage:r});const p=this.getMessageFromStorage(r,i);this.handleEditedMessage(o,p,r);const d=this.getDialogOnly(n),f=(null==d?void 0:d.top_message)===i;if(s.clear_history)f&&this.rootScope.dispatchEvent("dialog_flush",{peerId:n,dialog:d});else{let e=!0;if("message"===(null==o?void 0:o._)&&!(0,Y.Z)(o.reactions,p.reactions)){const t=p.reactions;p.reactions=o.reactions,this.apiUpdatesManager.processLocalUpdate({_:"updateMessageReactions",peer:this.appPeersManager.getOutputPeer(n),msg_id:s.id,reactions:t}),e=!1}e&&this.rootScope.dispatchEvent("message_edit",{storageKey:r.key,peerId:n,mid:i,message:s}),f&&this.dialogsStorage.setDialogToState(d);const c=new Map,l=()=>{let e=c.get(n);return e||c.set(n,e={}),e};(f||s.grouped_id)&&d&&(l().dialog=d);const m=this.getThreadKey(s);if(m){const e=+m.split("_")[1],s=this.dialogsStorage.getForumTopic(n,e);s&&(null!==(t=(a=l()).topics)&&void 0!==t?t:a.topics=new Map).set(e,s)}c.size&&this.rootScope.dispatchEvent("dialogs_multiupdate",c)}},this.onUpdateReadHistory=e=>{const t=e.channel_id,a=(0,pe.Z)(e.max_id||e.read_max_id),s=(0,pe.Z)(e.top_msg_id),n=t?t.toPeerId(!0):this.appPeersManager.getPeerId(e.peer),i="updateReadHistoryOutbox"===e._||"updateReadChannelOutbox"===e._||"updateReadChannelDiscussionOutbox"===e._||void 0,r=!!t&&this.appChatsManager.isForum(t),o=this.getHistoryMessagesStorage(n),p=(0,xt.Z)(o,"desc"),d=s&&r?this.dialogsStorage.getForumTopic(n,s):this.getDialogOnly(n),f=e.still_unread_count;let c=0,l=0,m=!1;const g=this.getHistoryStorage(n,s);if(n.isUser()&&i&&this.appUsersManager.forceUserOnline(n.toUserId()),s){const e=this.threadsToReplies[n+"_"+s];if(e){const[t,a]=e.split("_");this.updateMessage(t.toPeerId(),+a,"replies_updated")}}const h=d&&this.dialogsStorage.prepareDialogUnreadCountModifying(d),u=this.getReadMaxIdIfUnread(n,s);for(let e=0,t=p.length;ea)continue;const g=o.get(t);if(g.pFlags.out!==i)continue;const h=(0,Yt.Z)(g,r);if(!s||h===s){if(!(g.pFlags.unread||u&&u=d.top_message||!u?e=0:c&&d.top_message>a&&(e=c),void 0!==e&&(d.unread_count=e),(l<0||!d.unread_count)&&(d.unread_mentions_count=0)}null==h||h(),this.dialogsStorage.processDialogForFilters(d),this.rootScope.dispatchEvent("dialog_unread",{peerId:n,dialog:d}),this.dialogsStorage.setDialogToState(d),m||void 0!==f||i||!d.unread_count||("forumTopic"===d._?this.dialogsStorage.getForumTopicById(n,s):this.reloadConversation(n))}if(m&&this.rootScope.dispatchEvent("messages_read"),!s&&t){const e=n+"_";for(const t in this.threadsToReplies)if(0===t.indexOf(e)){const[e,a]=this.threadsToReplies[t].split("_");this.rootScope.dispatchEvent("replies_updated",this.getMessageByPeer(e.toPeerId(),+a))}}},this.onUpdateReadMessagesContents=e=>{const t=e.channel_id,a=e.top_msg_id,s=a?(0,pe.Z)(a):void 0,n=e.messages.map((e=>(0,pe.Z)(e))),i=t?t.toPeerId(!0):this.findPeerIdByMids(n);for(let e=0,t=n.length;e{const t=e.channel_id.toPeerId(!0),a=this.getHistoryStorage(t).history.slice,s=(0,pe.Z)(e.available_min_id),n=a.filter((e=>e<=s));e.messages=n,this.onUpdateDeleteMessages(e)},this.onUpdateDeleteMessages=e=>{var t;const a=e.channel_id,s=e.messages.map((e=>(0,pe.Z)(e))),n=a?a.toPeerId(!0):this.findPeerIdByMids(s);if(!n)return;this.apiManager.clearCache("messages.getSearchCounters",(e=>this.appPeersManager.getPeerId(e.peer)===n));const i=new Set,r=new Map;for(const e of s){const a=this.getMessageByPeer(n,e),s=this.getThreadKey(a);if(!s)continue;const o=+s.split("_")[1];if((null===(t=this.threadsStorage[n])||void 0===t?void 0:t[o])&&(i.add(s),!r.has(o))){const e=this.dialogsStorage.getForumTopic(n,o);e&&r.set(o,e)}}const o=this.handleDeletedMessages(n,this.getHistoryMessagesStorage(n),s),p=Array.from(i).map((e=>{const[t,a]=e.split("_");return this.getHistoryStorage(t.toPeerId(),+a)}));[this.getHistoryStorage(n),...p].forEach((e=>{for(const t of o.msgs)e.history.delete(t);o.count&&e.count&&(e.count=Math.max(0,e.count-o.count))})),this.rootScope.dispatchEvent("history_delete",{peerId:n,msgs:o.msgs});const d=[...r.values()],f=this.getDialogOnly(n);f&&d.unshift(f),d.forEach((e=>{const t="forumTopic"===e._,a=o.unreadMentions||o.unread,s=a&&this.dialogsStorage.prepareDialogUnreadCountModifying(e);if(o.unread&&(e.unread_count=Math.max(0,e.unread_count-o.unread)),o.unreadMentions&&(e.unread_mentions_count=e.unread_count?Math.max(0,e.unread_mentions_count-o.unreadMentions):0),a&&(s(),t||this.rootScope.dispatchEvent("dialog_unread",{peerId:n,dialog:e})),o.msgs.has(e.top_message)){const a=this.getHistoryStorage(e.peerId,t?e.id:void 0).history.first;if(a.isEnd(se.D.Bottom)&&a.length){const t=a[0],s=this.getMessageByPeer(n,t);this.setDialogTopMessage(s,e)}else t?this.dialogsStorage.getForumTopicById(n,e.id):this.reloadConversation(n)}}))},this.onUpdateChannel=e=>{const t=e.channel_id,a=t.toPeerId(!0),s=this.appChatsManager.getChat(t),n=this.appChatsManager.isInChat(t);(!!(0,$t.Z)(s)[0]||!s.pFlags.left)!=(void 0!==this.historiesStorage[a])&&(delete this.historiesStorage[a],this.rootScope.dispatchEvent("history_forbidden",a)),!!this.getDialogOnly(a)!==n&&(n?this.reloadConversation(a):this.dialogsStorage.dropDialogOnDeletion(a)),this.rootScope.dispatchEvent("channel_update",t)},this.onUpdateChannelReload=e=>{const t=e.channel_id.toPeerId(!0);this.flushStoragesByPeerId(t),Promise.all([this.reloadConversation(t)]).then((()=>{this.rootScope.dispatchEvent("history_reload",t)}))},this.onUpdateChannelMessageViews=e=>{var t;const a=e.views,s=null!==(t=e.peerId)&&void 0!==t?t:e.channel_id.toPeerId(!0),n=(0,pe.Z)(e.id),i=this.getMessageByPeer(s,n);void 0!==(null==i?void 0:i.views)&&i.views{var t;if(null===(t=e.pFlags)||void 0===t?void 0:t.popup)return void this.rootScope.dispatchEvent("service_notification",e);const a=o.yF,s=a,n=this.generateTempMessageId(s),i={_:"message",id:n,from_id:this.appPeersManager.getOutputPeer(a),peer_id:this.appPeersManager.getOutputPeer(s),pFlags:{unread:!0},date:(e.inbox_date||(0,te.Z)(!0))+this.timeManager.getServerTimeOffset(),message:e.message,media:e.media,entities:e.entities};this.appUsersManager.hasUser(a)||this.appUsersManager.saveApiUsers([{_:"user",id:a,pFlags:{verified:!0},access_hash:"0",first_name:"Telegram",phone:"42777"}]),this.saveMessages([i],{isOutgoing:!0}),e.inbox_date&&(this.pendingTopMsgs[s]=n,this.onUpdateNewMessage({_:"updateNewMessage",message:i,pts:void 0,pts_count:void 0}))},this.onUpdatePinnedMessages=e=>{const t="updatePinnedChannelMessages"===e._?e.channel_id:void 0,a=t?t.toPeerId(!0):this.appPeersManager.getPeerId(e.peer),s=e.messages.map((e=>(0,pe.Z)(e))),n=this.getHistoryMessagesStorage(a),i=s.filter((e=>!n.has(e)));(i.length?Promise.all(i.map((e=>this.reloadMessages(a,e)))):Promise.resolve()).finally((()=>{var t;const i=null===(t=e.pFlags)||void 0===t?void 0:t.pinned;if(i)for(const e of s)n.get(e).pFlags.pinned=!0;else for(const e of s)delete n.get(e).pFlags.pinned;delete this.pinnedMessages[this.getPinnedMessagesKey(a)],this.appStateManager.getState().then((e=>{delete e.hiddenPinnedMessages[a],this.rootScope.dispatchEvent("peer_pinned_messages",{peerId:a,mids:s,pinned:i})}))}))},this.onUpdateNotifySettings=e=>{const{peer:t,notify_settings:a}=e,s="notifyForumTopic"===t._;if("notifyPeer"!==t._&&!s)return;const n=this.appPeersManager.getPeerId(t.peer),i=this.dialogsStorage.getDialogOrTopic(n,s?(0,pe.Z)(t.top_msg_id):void 0);i&&(i.notify_settings=a,this.rootScope.dispatchEvent("dialog_notify_settings",i),this.dialogsStorage.setDialogToState(i))},this.onUpdateNewScheduledMessage=e=>{const t=e.message,a=this.getMessagePeer(t),s=this.scheduledMessagesStorage[a];if(!s)return;const n=(0,pe.Z)(t.id),i=this.getMessageFromStorage(s,n);this.saveMessages([t],{storage:s,isScheduled:!0});const r=this.getMessageFromStorage(s,n);i?(this.handleEditedMessage(i,r,s),this.rootScope.dispatchEvent("message_edit",{storageKey:s.key,peerId:a,mid:t.mid,message:t})):this.checkPendingMessage(t)||this.rootScope.dispatchEvent("scheduled_new",t)},this.onUpdateDeleteScheduledMessages=e=>{const t=this.appPeersManager.getPeerId(e.peer),a=this.scheduledMessagesStorage[t];if(a){const s=e.messages.map((e=>(0,pe.Z)(e)));this.handleDeletedMessages(t,a,s),this.rootScope.dispatchEvent("scheduled_delete",{peerId:t,mids:s})}},this.onUpdateMessageExtendedMedia=e=>{var t;const a=this.appPeersManager.getPeerId(e.peer),s=(0,pe.Z)(e.msg_id),n=this.getHistoryMessagesStorage(a);if(!n.has(s))return;const i=this.getMessageFromStorage(n,s),r=i.media;"messageExtendedMedia"!==(null===(t=r.extended_media)||void 0===t?void 0:t._)&&(r.extended_media=e.extended_media,this.onUpdateEditMessage({_:"updateEditMessage",message:i,pts:0,pts_count:0}))},this.onUpdateTranscribedAudio=e=>{const t=this.appPeersManager.getPeerId(e.peer),a=e.text,s=(0,pe.Z)(e.msg_id);this.rootScope.dispatchEvent("message_transcribed",{peerId:t,mid:s,text:a,pending:e.pFlags.pending})},this.batchUpdateViews=e=>{const t=[],a=this.getMessagesFromMap(e);for(const[e]of a)t.push({peerId:e.peerId,mid:e.mid,views:e.views});return t},this.batchUpdateReactions=e=>{var t,a,s;const n=[],i=this.getMessagesFromMap(e);for(const[e,r]of i){const i=null!==(a=null===(t=e.reactions)||void 0===t?void 0:t.results)&&void 0!==a?a:[],o=null!==(s=null==r?void 0:r.results)&&void 0!==s?s:[],p=i.filter((t=>{const a=o.find((e=>(0,Jt.Z)(e.reaction,t.reaction)));return e.pFlags.out&&(!a||t.count>a.count)||void 0!==t.chosen_order&&(!a||void 0===a.chosen_order)}));n.push({message:e,changedResults:p})}return n}}after(){return this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateMessageID:this.onUpdateMessageId,updateNewDiscussionMessage:this.onUpdateNewMessage,updateNewMessage:this.onUpdateNewMessage,updateNewChannelMessage:this.onUpdateNewMessage,updateDialogUnreadMark:this.onUpdateDialogUnreadMark,updateEditMessage:this.onUpdateEditMessage,updateEditChannelMessage:this.onUpdateEditMessage,updateMessageReactions:this.onUpdateMessageReactions,updateReadChannelDiscussionInbox:this.onUpdateReadHistory,updateReadChannelDiscussionOutbox:this.onUpdateReadHistory,updateReadHistoryInbox:this.onUpdateReadHistory,updateReadHistoryOutbox:this.onUpdateReadHistory,updateReadChannelInbox:this.onUpdateReadHistory,updateReadChannelOutbox:this.onUpdateReadHistory,updateChannelReadMessagesContents:this.onUpdateReadMessagesContents,updateReadMessagesContents:this.onUpdateReadMessagesContents,updateChannelAvailableMessages:this.onUpdateChannelAvailableMessages,updateDeleteMessages:this.onUpdateDeleteMessages,updateDeleteChannelMessages:this.onUpdateDeleteMessages,updateChannel:this.onUpdateChannel,updateChannelReload:this.onUpdateChannelReload,updateChannelMessageViews:this.onUpdateChannelMessageViews,updateServiceNotification:this.onUpdateServiceNotification,updatePinnedMessages:this.onUpdatePinnedMessages,updatePinnedChannelMessages:this.onUpdatePinnedMessages,updateNotifySettings:this.onUpdateNotifySettings,updateNewScheduledMessage:this.onUpdateNewScheduledMessage,updateDeleteScheduledMessages:this.onUpdateDeleteScheduledMessages,updateMessageExtendedMedia:this.onUpdateMessageExtendedMedia,updateTranscribedAudio:this.onUpdateTranscribedAudio}),this.rootScope.addEventListener("notify_peer_type_settings",(({key:e,settings:t})=>{let a;a="notifyUsers"===e?e=>e.peerId.isUser():"notifyBroadcasts"===e?e=>this.appPeersManager.isBroadcast(e.peerId):e=>this.appPeersManager.isAnyGroup(e.peerId),this.dialogsStorage.getFolderDialogs(0).concat(this.dialogsStorage.getFolderDialogs(1)).filter(a).forEach((e=>{this.rootScope.dispatchEvent("dialog_notify_settings",e)}))})),this.rootScope.addEventListener("webpage_updated",(({id:e,msgs:t})=>{t.forEach((({peerId:t,mid:a,isScheduled:s})=>{const n=s?this.getScheduledMessagesStorage(t):this.getHistoryMessagesStorage(t),i=this.getMessageFromStorage(n,a);i&&(i.media={_:"messageMediaWebPage",webpage:this.appWebPagesManager.getCachedWebPage(e)},this.rootScope.dispatchEvent("message_edit",{storageKey:n.key,peerId:t,mid:a,message:i}))}))})),this.rootScope.addEventListener("draft_updated",(({peerId:e,threadId:t,draft:a})=>{const s=this.dialogsStorage.getDialogOrTopic(e,t);if(s){s.draft=a;let t=!1;a||(0,oe.Z)(s.top_message)?(this.dialogsStorage.generateIndexForDialog(s),this.dialogsStorage.pushDialog({dialog:s})):(this.dialogsStorage.dropDialog(e),t=!0),this.rootScope.dispatchEvent("dialog_draft",{peerId:e,dialog:s,drop:t,draft:a})}else if(t){const a=this.appChatsManager.getChat(e.toChatId());a?a.pFlags.forum&&this.dialogsStorage.getForumTopicById(e,t):this.reloadConversation(e)}else this.reloadConversation(e)})),this.rootScope.addEventListener("poll_update",(({poll:e})=>{const t=this.appPollsManager.pollToMessages[e.id];if(t)for(const e of t){const[t,a]=e.split("_"),s=this.getMessageByPeer(t.toPeerId(),+a);s&&this.setDialogToStateIfMessageIsTop(s)}})),this.rootScope.addEventListener("chat_toggle_forum",(({chatId:e,enabled:t})=>{const a=e.toPeerId(!0);if(!t){delete this.threadsStorage[a];for(const e in this.pinnedMessages)+e===a&&e.startsWith(a+"_")&&delete this.pinnedMessages[e]}})),this.batchUpdatesDebounced=(0,Vt.Z)((()=>{for(const e in this.batchUpdates){const t=this.batchUpdates[e];delete this.batchUpdates[e];const a=t.callback(t.batch);!a||a instanceof Array&&!a.length||rootScope.dispatchEvent(e,a)}}),33,!1,!0),this.appStateManager.getState().then((e=>{e.maxSeenMsgId&&(this.maxSeenId=e.maxSeenMsgId)}))}getInputEntities(e){const t=(0,ve.Z)(e);return t.forEach((e=>{"messageEntityMentionName"===e._&&(e._="inputMessageEntityMentionName",e.user_id=this.appUsersManager.getUserInput(e.user_id))})),t}invokeAfterMessageIsSent(e,t,a){var s,n,i;const r=null!==(s=(i=this.tempFinalizeCallbacks)[e])&&void 0!==s?s:i[e]={},o=null!==(n=r[t])&&void 0!==n?n:r[t]={deferred:(0,v.Z)()};return o.callback=a,o.deferred}editMessage(e,t,a={}){const{mid:s,peerId:n}=e;if(e.pFlags.is_outgoing)return this.invokeAfterMessageIsSent(s,"edit",(e=>this.editMessage(e,t,a)));const i=a.entities||[];t&&(t=(0,ke.Z)(t,i));const r=a.scheduleDate||(e.pFlags.is_scheduled?e.date:void 0);return this.apiManager.invokeApi("messages.editMessage",{peer:this.appPeersManager.getInputPeerById(n),id:e.id,message:t,media:a.newMedia,entities:i.length?this.getInputEntities(i):void 0,no_webpage:a.noWebPage,schedule_date:r}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{if(this.log.error("editMessage error:",e),!e||"MESSAGE_NOT_MODIFIED"!==e.type)return e&&"MESSAGE_EMPTY"===e.type&&(e.handled=!0),Promise.reject(e);e.handled=!0}))}transcribeAudio(e){return Xt(this,void 0,void 0,(function*(){const{id:t,peerId:a}=e,s=t=>{this.apiUpdatesManager.processLocalUpdate({_:"updateTranscribedAudio",msg_id:e.id,peer:this.appPeersManager.getOutputPeer(a),pFlags:t.pFlags,text:t.text,transcription_id:t.transcription_id})};return this.apiManager.invokeApiSingleProcess({method:"messages.transcribeAudio",params:{peer:this.appPeersManager.getInputPeerById(a),msg_id:t},processResult:e=>(s(e),e),processError:e=>{throw"TRANSCRIPTION_FAILED"===e.type&&s({_:"messages.transcribedAudio",transcription_id:0,text:"",pFlags:{}}),e}})}))}sendText(e,t,a={}){var s,n;return Xt(this,void 0,void 0,(function*(){if(!t.trim())return;null!==(s=a.entities)&&void 0!==s||(a.entities=[]),a.threadId&&!a.replyToMsgId&&(a.replyToMsgId=a.threadId);const i=(yield this.apiManager.getConfig()).message_length_max,r=Bt(t,i);t=r[0],r.length>1&&("webPage"!==(null===(n=a.webPage)||void 0===n?void 0:n._)||t.includes(a.webPage.url)||delete a.webPage),e=this.appPeersManager.getPeerMigratedTo(e)||e;const o=a.entities;a.viaBotId||(t=(0,ke.Z)(t,o));let p=this.getInputEntities(o);p.length||(p=void 0);const d=this.generateOutgoingMessage(e,a);d.entities=o,d.message=t;const f=a.replyToMsgId?(0,oe.Z)(a.replyToMsgId):void 0,c=this.appPeersManager.isChannel(e);a.webPage&&(d.media={_:"messageMediaWebPage",webpage:a.webPage});const l=e=>{this.onMessagesSendError([d],e),this.rootScope.dispatchEvent("messages_pending")};d.send=()=>{l();const s={};this.pendingAfterMsgs[e]&&(s.afterMessageId=this.pendingAfterMsgs[e].messageId);const n=a.sendAsPeerId?this.appPeersManager.getInputPeerById(a.sendAsPeerId):void 0;let i;return i=a.viaBotId?this.apiManager.invokeApiAfter("messages.sendInlineBotResult",{peer:this.appPeersManager.getInputPeerById(e),random_id:d.random_id,reply_to_msg_id:f||void 0,query_id:a.queryId,id:a.resultId,clear_draft:a.clearDraft,send_as:n},s):this.apiManager.invokeApiAfter("messages.sendMessage",{no_webpage:a.noWebPage,peer:this.appPeersManager.getInputPeerById(e),message:t,random_id:d.random_id,reply_to_msg_id:f||void 0,entities:p,clear_draft:a.clearDraft,schedule_date:a.scheduleDate||void 0,silent:a.silent,send_as:n,update_stickersets_order:ta},s),this.pendingAfterMsgs[e]=s,i.then((e=>{if("updateShortSentMessage"===e._){const t=d.promise;delete d.promise;const s=(0,ve.Z)(d);(0,ge.Z)(d,["promise"]),d.promise=t,s.date=e.date,s.id=e.id,s.media=e.media,s.entities=e.entities,this.wrapMessageEntities(s),e.pFlags.out&&(s.pFlags.out=!0),e={_:"updates",users:[],chats:[],seq:0,date:void 0,updates:[{_:"updateMessageID",random_id:d.random_id,id:s.id},{_:a.scheduleDate?"updateNewScheduledMessage":c?"updateNewChannelMessage":"updateNewMessage",message:s,pts:e.pts,pts_count:e.pts_count}]}}else e.updates&&e.updates.forEach((e=>{"updateDraftMessage"===e._&&(e.local=!0)}));this.apiUpdatesManager.processUpdateMessage(e),d.promise.resolve()}),(e=>{throw l(e),d.promise.reject(e),e})).finally((()=>{this.pendingAfterMsgs[e]===s&&delete this.pendingAfterMsgs[e]}))},this.beforeMessageSending(d,{isScheduled:!!a.scheduleDate||void 0,threadId:a.threadId,clearDraft:a.clearDraft,sequential:!0});const m=[d.promise];for(let t=1;t=0){r="audio",p="audio."+("ogg"===d.split("/")[1]?"ogg":"mp3"),P="sendMessageUploadAudioAction",t.isVoiceMessage&&(r="voice",s.pFlags.media_unread=!0);const e={_:"documentAttributeAudio",pFlags:{voice:t.isVoiceMessage||void 0},waveform:t.waveform,duration:t.duration||0};g.push(e)}else if(t.isMedia)if(h){r="photo",p="photo."+d.split("/")[1],P="sendMessageUploadPhotoAction";const e={_:"photoSize",w:t.width,h:t.height,type:o.Pt,location:null,size:a.size};y={_:"photo",id:""+s.id,sizes:[e],w:t.width,h:t.height},u&&y.sizes.unshift(u);const n=this.thumbsStorage.getCacheContext(y,e.type);n.downloaded=a.size,n.url=t.objectURL||"",y=this.appPhotosManager.savePhoto(y)}else if(i().VIDEO_MIME_TYPES_SUPPORTED.has(d)){r="video",p="video.mp4",P="sendMessageUploadVideoAction";const e={_:"documentAttributeVideo",pFlags:{round_message:t.isRoundMessage||void 0,supports_streaming:!0},duration:t.duration,w:t.width,h:t.height};g.push(e),t.noSound&&a.size>10240&&a.size<10485760&&g.push({_:"documentAttributeAnimated"})}else r="document",p="document."+d.split("/")[1],P="sendMessageUploadDocumentAction";else r="document",p="document."+d.split("/")[1],P="sendMessageUploadDocumentAction";if(g.push({_:"documentAttributeFilename",file_name:f||p}),-1!==["document","video","audio","voice"].indexOf(r)&&!c){const e=[];if(_={_:"document",id:""+s.id,duration:t.duration,attributes:g,w:t.width,h:t.height,thumbs:e,mime_type:d,size:a.size},t.objectURL){const e=this.thumbsStorage.getCacheContext(_);e.downloaded=a.size,e.url=t.objectURL}let n;if(h)g.push({_:"documentAttributeImageSize",w:t.width,h:t.height}),n={_:"photoSize",w:t.width,h:t.height,type:o.Pt,size:a.size};else if("video"===r&&t.thumb){n={_:"photoSize",w:t.thumb.size.width,h:t.thumb.size.height,type:"local-thumb",size:t.thumb.blob.size};const e=this.thumbsStorage.getCacheContext(_,n.type);e.downloaded=n.size,e.url=t.thumb.url}n&&e.push(n),u&&e.unshift(u),_=this.appDocsManager.saveDoc(_)}this.log("sendFile",r,p,a.type,t);const b=(0,v.Z)(),M=c?void 0:{_:y?"messageMediaPhoto":"messageMediaDocument",pFlags:{},photo:y,document:_};M&&((0,ge.Z)(M,["promise"]),M.promise=b,t.spoiler&&(M.pFlags.spoiler=!0)),s.entities=m,s.message=l,s.media=c?{_:"messageMediaDocument",pFlags:{},document:a}:M;const S=c?void 0:(0,jt.Z)(a);s.uploadingFileName=S,S&&(this.uploadFilePromises[S]=b);const I=e=>{this.onMessagesSendError([s],e),this.rootScope.dispatchEvent("messages_pending")};let C=!1,w=null;s.send=()=>{if(c){const e={_:"inputMediaDocument",id:Kt(a),pFlags:{}};b.resolve(e)}else if(a instanceof File||a instanceof Blob){const n=()=>{var n;let i;return C&&!s.error||(C=!1,w=this.apiFileManager.upload({file:a,fileName:S}),w.catch((a=>{C||(this.log("cancelling upload",M),this.cancelPendingMessage(s.random_id),this.setTyping(e,{_:"sendMessageCancelAction"},void 0,t.threadId),b.reject(a))})),w.addNotifyListener((a=>{const s=Math.max(1,Math.floor(100*a.done/a.total));P&&this.setTyping(e,{_:P,progress:0|s},void 0,t.threadId),b.notifyAll(a)})),b.notifyAll({done:0,total:a.size})),"video"===r&&t.objectURL&&(null===(n=t.thumb)||void 0===n?void 0:n.blob)&&(i=this.apiFileManager.upload({file:t.thumb.blob})),w&&w.then((e=>Xt(this,void 0,void 0,(function*(){let a;if(e.name=p,C=!0,a="photo"===r?{_:"inputMediaUploadedPhoto",file:e,pFlags:{spoiler:t.spoiler||void 0}}:{_:"inputMediaUploadedDocument",file:e,mime_type:d,pFlags:{force_file:"sendMessageUploadDocumentAction"===P||void 0,spoiler:t.spoiler||void 0},attributes:g},i)try{const e=yield i;a.thumb=e}catch(e){this.log.error("sendFile thumb upload error:",e)}b.resolve(a)}))),(e=>{throw I(e),e})),b};t.isGroupedItem?n():this.sendSmthLazyLoadQueue.push({load:n})}return b},this.beforeMessageSending(s,{isGroupedItem:t.isGroupedItem,isScheduled:!!t.scheduleDate||void 0,threadId:t.threadId,clearDraft:t.clearDraft,processAfter:t.processAfter}),t.isGroupedItem||(b.then((a=>(this.setTyping(e,{_:"sendMessageCancelAction"},void 0,t.threadId),this.apiManager.invokeApi("messages.sendMedia",{background:t.background,peer:this.appPeersManager.getInputPeerById(e),media:a,message:l,random_id:s.random_id,reply_to_msg_id:n,schedule_date:t.scheduleDate,silent:t.silent,entities:m,clear_draft:t.clearDraft,send_as:t.sendAsPeerId?this.appPeersManager.getInputPeerById(t.sendAsPeerId):void 0}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{if("photo"===r&&400===e.code&&("PHOTO_INVALID_DIMENSIONS"===e.type||"PHOTO_SAVE_FILE_INVALID"===e.type))return e.handled=!0,r="document",void s.send();throw I(e),e}))))),b.then(s.promise.resolve,s.promise.reject));const k={message:s};return(0,ge.Z)(k,["promise"]),k.promise=b,k}sendAlbum(e,t){return Xt(this,void 0,void 0,(function*(){if(t.threadId&&!t.replyToMsgId&&(t.replyToMsgId=t.threadId),1===t.sendFileDetails.length)return this.sendFile(e,Object.assign(Object.assign({},t),t.sendFileDetails[0]));e=this.appPeersManager.getPeerMigratedTo(e)||e;const a=t.replyToMsgId?(0,oe.Z)(t.replyToMsgId):void 0;let s=t.caption||"",n=t.entities||[];s&&(s=(0,ke.Z)(s,n)),this.log("sendAlbum",t);const i=""+ ++this.groupedTempId,r=[],o=e=>{r.push(e)},p=t.sendFileDetails.map(((r,p)=>{const d=Object.assign({isGroupedItem:!0,isMedia:t.isMedia,scheduleDate:t.scheduleDate,silent:t.silent,replyToMsgId:a,threadId:t.threadId,sendAsPeerId:t.sendAsPeerId,groupId:i,processAfter:o},r);return 0===p&&(d.caption=s,d.entities=n),this.sendFile(e,d).message}));t.clearDraft&&r.push((()=>{this.appDraftsManager.clearDraft(e,t.threadId)})),r.forEach((e=>{e()}));const d=(e,t)=>{this.onMessagesSendError([e],t),this.rootScope.dispatchEvent("messages_pending")},f=this.appPeersManager.getInputPeerById(e),c=s=>{this.setTyping(e,{_:"sendMessageCancelAction"},void 0,t.threadId);const n=(0,v.Z)();return this.sendSmthLazyLoadQueue.push({load:()=>this.apiManager.invokeApi("messages.sendMultiMedia",{peer:f,multi_media:s,reply_to_msg_id:a,schedule_date:t.scheduleDate,silent:t.silent,clear_draft:t.clearDraft,send_as:t.sendAsPeerId?this.appPeersManager.getInputPeerById(t.sendAsPeerId):void 0,update_stickersets_order:ta}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e),n.resolve()}),(e=>{p.forEach((t=>d(t,e))),n.reject(e)}))}),n},l=p.map((e=>e.send().then((e=>Promise.all([e,this.apiManager.invokeApi("messages.uploadMedia",{peer:f,media:e})]))).then((([t,a])=>{let i;if("messageMediaPhoto"===a._){const e=this.appPhotosManager.savePhoto(a.photo);i=kt(e)}else if("messageMediaDocument"===a._){const e=this.appDocsManager.saveDoc(a.document);i=Ut(e)}["pFlags","ttl_seconds"].forEach((e=>{var a;i[e]=null!==(a=t[e])&&void 0!==a?a:i[e]}));const r={_:"inputSingleMedia",media:i,random_id:e.random_id,message:s,entities:n};return s&&(s="",n=[]),r})).catch((t=>{throw this.log.error("sendAlbum upload item error:",t,e),d(e,t),t}))));return Promise.all(l).then((e=>c(e.filter(Boolean))))}))}sendContact(e,t){return this.sendOther(e,this.appUsersManager.getContactMediaInput(t))}sendOther(e,t,a={}){var s;e=this.appPeersManager.getPeerMigratedTo(e)||e;const n=this.generateOutgoingMessage(e,a),i=a.replyToMsgId?(0,oe.Z)(a.replyToMsgId):void 0;let r;switch(t._){case"inputMediaPoll":{const e=""+n.id;t.poll.id=e,this.appPollsManager.savePoll(t.poll,{_:"pollResults",flags:4,total_voters:0,pFlags:{},recent_voters:[]});const{poll:a,results:s}=this.appPollsManager.getPoll(e);r={_:"messageMediaPoll",poll:a,results:s};break}case"inputMediaPhoto":r={_:"messageMediaPhoto",photo:this.appPhotosManager.getPhoto(t.id.id),pFlags:{}};break;case"inputMediaDocument":r={_:"messageMediaDocument",document:this.appDocsManager.getDoc(t.id.id),pFlags:{}};break;case"inputMediaContact":r={_:"messageMediaContact",phone_number:t.phone_number,first_name:t.first_name,last_name:t.last_name,user_id:null!==(s=t.user_id)&&void 0!==s?s:"0",vcard:t.vcard};break;case"inputMediaGeoPoint":r={_:"messageMediaGeo",geo:a.geoPoint};break;case"inputMediaVenue":r={_:"messageMediaVenue",geo:a.geoPoint,title:t.title,address:t.address,provider:t.provider,venue_id:t.venue_id,venue_type:t.venue_type};break;case"messageMediaPending":r=t.messageMedia}n.media=r;const o=e=>{this.onMessagesSendError([n],e),this.rootScope.dispatchEvent("messages_pending")};return n.send=()=>{const s={};this.pendingAfterMsgs[e]&&(s.afterMessageId=this.pendingAfterMsgs[e].messageId);const r=a.sendAsPeerId?this.appPeersManager.getInputPeerById(a.sendAsPeerId):void 0;let p;return p=a.viaBotId?this.apiManager.invokeApiAfter("messages.sendInlineBotResult",{peer:this.appPeersManager.getInputPeerById(e),random_id:n.random_id,reply_to_msg_id:i||void 0,query_id:a.queryId,id:a.resultId,clear_draft:a.clearDraft,schedule_date:a.scheduleDate,silent:a.silent,send_as:r},s):this.apiManager.invokeApiAfter("messages.sendMedia",{peer:this.appPeersManager.getInputPeerById(e),media:t,random_id:n.random_id,reply_to_msg_id:i||void 0,message:"",clear_draft:a.clearDraft,schedule_date:a.scheduleDate,silent:a.silent,send_as:r,update_stickersets_order:ta},s),this.pendingAfterMsgs[e]=s,p.then((e=>{e.updates&&e.updates.forEach((e=>{"updateDraftMessage"===e._&&(e.local=!0)})),this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{throw o(e),e})).finally((()=>{this.pendingAfterMsgs[e]===s&&delete this.pendingAfterMsgs[e]}))},this.beforeMessageSending(n,{isScheduled:!!a.scheduleDate||void 0,threadId:a.threadId,clearDraft:a.clearDraft,sequential:!0}),n.promise}beforeMessageSending(e,t={}){const a=e.id,s=this.getMessagePeer(e),n=t.isScheduled?this.getScheduledMessagesStorage(s):this.getHistoryMessagesStorage(s);e.storageKey=n.key;const i=[];if(t.isScheduled)this.saveMessages([e],{storage:n,isScheduled:!0,isOutgoing:!0}),i.push((()=>{this.rootScope.dispatchEvent("scheduled_new",e)}));else{const r=[this.getHistoryStorage(s),t.threadId?this.getHistoryStorage(s,t.threadId):void 0];for(const e of r)e&&e.history.unshift(a);if(this.saveMessages([e],{storage:n,isOutgoing:!0}),this.setDialogTopMessage(e),t.threadId){const a=this.dialogsStorage.getForumTopic(s,t.threadId);a&&this.setDialogTopMessage(e,a)}i.push((()=>{this.rootScope.dispatchEvent("history_append",{storageKey:n.key,message:e})}))}const r=this.pendingByRandomId[e.random_id]={peerId:s,tempId:a,threadId:t.threadId,storage:n,sequential:t.sequential};return this.pendingTopMsgs[s]=a,!t.isGroupedItem&&e.send&&i.push((()=>{t.clearDraft&&this.appDraftsManager.clearDraft(s,t.threadId),e.send()})),i.length&&(t.processAfter||ea)((()=>{for(const e of i)e()})),r}generateOutgoingMessage(e,t){let a;t.threadId&&!t.replyToMsgId&&(t.replyToMsgId=t.threadId);const s=this.appPeersManager.isBroadcast(e);if(s&&this.appPeersManager.getPeer(e).pFlags.signatures){const e=this.appUsersManager.getSelf();a=e.first_name+(e.last_name?" "+e.last_name:"")}const n={_:"message",id:this.generateTempMessageId(e),from_id:t.sendAsPeerId?this.appPeersManager.getOutputPeer(t.sendAsPeerId):this.generateFromId(e),peer_id:this.appPeersManager.getOutputPeer(e),post_author:a,pFlags:this.generateFlags(e),date:t.scheduleDate||(0,te.Z)(!0)+this.timeManager.getServerTimeOffset(),message:"",grouped_id:t.groupId,random_id:(0,Ee.a)(),reply_to:this.generateReplyHeader(e,t.replyToMsgId,t.threadId),via_bot_id:t.viaBotId,reply_markup:t.replyMarkup,replies:this.generateReplies(e),views:s&&1,pending:!0};return(0,ge.Z)(n,["send","promise"]),void 0===t.groupId&&(n.promise=(0,v.Z)()),n}generateReplyHeader(e,t,a){const s=this.appPeersManager.isForum(e);if(s&&!a){const s=this.getMessageByPeer(e,t);s&&(a=(0,Yt.Z)(s,!0))}const n={_:"messageReplyHeader",reply_to_msg_id:t||a,pFlags:{}};return a&&s&&o.Ox!==a&&(n.pFlags.forum_topic=!0),a&&n.reply_to_msg_id!==a&&(n.reply_to_top_id=a),n}generateReplies(e){let t;if(this.appPeersManager.isBroadcast(e)){const a=this.appProfileManager.getCachedFullChat(e.toChatId());(null==a?void 0:a.linked_chat_id)&&(t={_:"messageReplies",flags:1,pFlags:{comments:!0},channel_id:a.linked_chat_id,replies:0,replies_pts:0})}return t}generateFromId(e){return this.appPeersManager.isAnyChat(e)&&(this.appPeersManager.isBroadcast(e)||this.isAnonymousSending(e))?void 0:this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId())}generateFlags(e){const t={};return e!==this.appUsersManager.getSelf().id&&(t.out=!0,this.appPeersManager.isChannel(e)||this.appUsersManager.isBot(e)||(t.unread=!0)),this.appPeersManager.isBroadcast(e)&&(t.post=!0),t}generateForwardHeader(e,t){const a=this.appUsersManager.getSelf().id.toPeerId(),s=t.fromId;if(s===a&&t.peerId===a&&!t.fwd_from)return;const n={_:"messageFwdHeader",flags:0,date:t.date,pFlags:{}};let i=!1;if(t.fwd_from)n.from_id=t.fwd_from.from_id,n.from_name=t.fwd_from.from_name,n.post_author=t.fwd_from.post_author;else{if(n.post_author=t.post_author,s.isUser()){const e=this.appProfileManager.getCachedFullUser(s.toUserId());(null==e?void 0:e.private_forward_name)&&(n.from_name=e.private_forward_name,i=!0)}i||(n.from_id=this.appPeersManager.getOutputPeer(s))}return this.appPeersManager.isBroadcast(t.peerId)&&(t.post_author&&(n.post_author=t.post_author),n.channel_post=t.id),e!==a||i||(n.saved_from_msg_id=t.id,n.saved_from_peer=this.appPeersManager.getOutputPeer(t.peerId)),n}generateFakeAvatarMessage(e,t){const a=Number.MAX_SAFE_INTEGER,s={_:"messageService",pFlags:{},action:{_:"messageActionChannelEditPhoto",photo:t},id:a,peer_id:this.appPeersManager.getOutputPeer(e),mid:a,peerId:e,date:t.date,fromId:e};return this.getHistoryMessagesStorage(e).set(a,s),s}getUploadPromise(e){return this.uploadFilePromises[e]}isAnonymousSending(e){var t,a;return!!e.isAnyChat()&&(null===(a=null===(t=this.appPeersManager.getPeer(e).admin_rights)||void 0===t?void 0:t.pFlags)||void 0===a?void 0:a.anonymous)}setDialogTopMessage(e,t=this.getDialogOnly(e.peerId)){t&&(t.top_message=e.mid,this.getHistoryStorage(e.peerId,"forumTopic"===t._?t.id:void 0).maxId=e.mid,this.dialogsStorage.generateIndexForDialog(t,!1,e),this.scheduleHandleNewDialogs(e.peerId,t))}cancelPendingMessage(e){const t=this.pendingByRandomId[e];if(t){const{peerId:a,tempId:s,storage:n}=t,i=this.getHistoryStorage(a);return this.apiUpdatesManager.processLocalUpdate({_:"updateDeleteMessages",messages:[s],pts:void 0,pts_count:void 0}),i.history.delete(s),delete this.pendingByRandomId[e],n.delete(s),!0}return!1}fillConversations(e){return Xt(this,void 0,void 0,(function*(){const t=this.middleware.get();for(;!this.dialogsStorage.isDialogsLoaded(e);){const a=yield this.getTopMessages({limit:100,folderId:e});if(!t()||a.isEnd)break}}))}getReadMaxIdIfUnread(e,t){var a,s,n;const i=this.getHistoryStorage(e,t);if(t&&!this.appChatsManager.isForum(e.toChatId())){const t=this.getHistoryStorage(e),n=Math.max(null!==(a=t.readMaxId)&&void 0!==a?a:0,i.readMaxId),r=this.getMessageByPeer(e,i.maxId);return!(null===(s=null==r?void 0:r.pFlags)||void 0===s?void 0:s.out)&&n{if(!n()||"messages.dialogsNotModified"===r._)return null;d.ZP&&this.log("messages.getDialogs result:",r),i||s||t===ye||this.dialogsStorage.resetPinnedOrder(t),i||s||this.appDraftsManager.addMissedDialogs(),this.appUsersManager.saveApiUsers(r.users),this.appChatsManager.saveApiChats(r.chats),this.saveMessages(r.messages);let p=!!s,c=!1;const l=new Map,m=t===ye?o.J$:t,g=!!i||t===ye,h=r.dialogs||r.topics;if((0,ne.Z)(h,(e=>{var t,s;if(e)if(i||null!==(t=(s=e).folder_id)&&void 0!==t||(s.folder_id=m),this.dialogsStorage.saveDialog({dialog:e,ignoreOffsetDate:!0,saveGlobalOffset:g}),void 0!==e.peerId)if(p||this.appPeersManager.isChannel(e.peerId||this.appPeersManager.getPeerId(e.peer))||(this.incrementMaxSeenId(e.top_message),p=!0),a&&(0,ce.Z)(e)>a&&(this.scheduleHandleNewDialogs(e.peerId,e),c=!0),i||(0,oe.Z)(e.read_inbox_max_id)||(0,oe.Z)(e.read_outbox_max_id)){if(e.top_message){const t=this.getMessageByPeer(e.peerId,e.top_message);t&&(this.setMessageUnreadByDialog(t,e),this.dialogsStorage.setDialogToState(e))}}else l.set(e.peerId,{dialog:e}),this.log.error("noIdsDialogs",e,f);else this.log.error("bugged dialog?",e)})),l.size){const e=[...l.keys()],t=e.map((e=>this.reloadConversation(e)));Promise.all(t).then((()=>{this.rootScope.dispatchEvent("dialogs_multiupdate",l);for(let t=0;t=u||!h.length;v&&this.dialogsStorage.setDialogsLoaded(t,!0),c?this.scheduleHandleNewDialogs():this.rootScope.dispatchEvent("dialogs_multiupdate",new Map);const P=h,b=100===e?P:P.slice(0,e);return{isEnd:v&&b[b.length-1]===P[P.length-1],count:u,dialogs:b}};let p,f;return p=i?this.apiManager.invokeApiSingleProcess({method:"channels.getForumTopics",params:f={channel:this.appChatsManager.getChannelInput(i.toChatId()),limit:100,offset_date:s,offset_id:0,offset_topic:0},options:{noErrorBox:!0},processResult:e=>(e=this.dialogsStorage.processTopics(i,e),r(e))}):this.apiManager.invokeApiSingleProcess({method:"messages.getDialogs",params:f={folder_id:t,offset_date:s,offset_id:0,offset_peer:this.appPeersManager.getInputPeerById(undefined),limit:100,hash:"0"},options:{noErrorBox:!0},processResult:r}),p}forwardMessages(e,t,a,s={}){return Xt(this,void 0,void 0,(function*(){delete s.replyToMsgId,delete s.threadId,e=this.appPeersManager.getPeerMigratedTo(e)||e;for(let n=0,i=(a=a.slice().sort(((e,t)=>e-t))).length;n{var i,p,d,f,c;const l=this.getMessageByPeer(t,n),m=this.generateOutgoingMessage(e,s);o.push(m.id);const g=["entities","media"];s.dropAuthor||(m.fwd_from=this.generateForwardHeader(e,l),g.push("views","forwards"),(null===(i=m.fwd_from)||void 0===i?void 0:i.from_name)&&e===this.appPeersManager.peerId&&delete m.from_id),s.dropCaptions&&l.media||g.push("message");const h=null===(p=l.reply_to)||void 0===p?void 0:p.reply_to_msg_id,u=a.indexOf(h);if(h&&-1!==u){const e=o[u];m.reply_to={_:"messageReplyHeader",reply_to_msg_id:e,pFlags:{}}}g.forEach((e=>{m[e]=(0,ve.Z)(l[e])}));const y=null===(d=m.media)||void 0===d?void 0:d.document;return y&&(["round","voice"].includes(y.type)&&(m.pFlags.media_unread=!0),y.sticker&&!this.rootScope.premium&&(0,zt.Z)(y)&&(m.media.pFlags.nopremium=!0)),l.grouped_id&&(null!==(f=r[c=l.grouped_id])&&void 0!==f?f:r[c]={tempId:""+ ++this.groupedTempId,messages:[]}).messages.push(m),m}));for(const e in r){const t=r[e];t.messages.length>1&&t.messages.forEach((e=>{e.grouped_id=t.tempId}))}p.forEach((e=>{this.beforeMessageSending(e,{isScheduled:!!s.scheduleDate||void 0,sequential:!0})}));const d={};this.pendingAfterMsgs[e]&&(d.afterMessageId=this.pendingAfterMsgs[e].messageId);const f=this.apiManager.invokeApiAfter("messages.forwardMessages",{from_peer:this.appPeersManager.getInputPeerById(t),id:a.map((e=>(0,oe.Z)(e))),random_id:p.map((e=>e.random_id)),to_peer:this.appPeersManager.getInputPeerById(e),with_my_score:s.withMyScore,silent:s.silent,schedule_date:s.scheduleDate,drop_author:s.dropAuthor,drop_media_captions:s.dropCaptions,send_as:s.sendAsPeerId?this.appPeersManager.getInputPeerById(s.sendAsPeerId):void 0},d).then((e=>{this.log("forwardMessages updates:",e),this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{throw this.onMessagesSendError(p,e),e})).finally((()=>{this.pendingAfterMsgs[e]===d&&delete this.pendingAfterMsgs[e]}));this.pendingAfterMsgs[e]=d;const c=[f];return i.length&&c.push(this.forwardMessages(e,t,i,s)),Promise.all(c).then(qt.Z)}))}generateEmptyMessage(e){}onMessagesSendError(e,t){e.forEach((e=>{if(e.error!==t)if(t){e.error=t,this.rootScope.dispatchEvent("message_error",{storageKey:e.storageKey,tempId:e.mid,error:t});const a=this.getDialogOnly(e.peerId);a&&this.rootScope.dispatchEvent("dialog_unread",{peerId:e.peerId,dialog:a})}else delete e.error}))}getMessagesStorageByKey(e){const t=e.split("_"),a=+t[0];return"scheduled"===t[1]?this.getScheduledMessagesStorage(a):this.getHistoryMessagesStorage(a)}getMessageFromStorage(e,t){return"string"==typeof e&&(e=this.getMessagesStorageByKey(e)),e&&e.get(t)}createMessageStorage(e,t){const a=new Map;return a.peerId=e,a.type=t,a.key=`${e}_${t}`,a}getHistoryMessagesStorage(e){var t,a;return null!==(t=(a=this.messagesStorageByPeerId)[e])&&void 0!==t?t:a[e]=this.createMessageStorage(e,"history")}getMessagesStorage(e){return"object"==typeof e?e:this.getMessagesStorageByKey(e)}getMessageById(e){for(const t in this.messagesStorageByPeerId){if(this.appPeersManager.isChannel(t.toPeerId()))continue;const a=this.messagesStorageByPeerId[t].get(e);if(a)return a}return this.getMessageFromStorage(null,e)}getMessageByPeer(e,t){return e?this.getMessageFromStorage(this.getHistoryMessagesStorage(e),t):this.getMessageById(t)}getMessagePeer(e){return e.peer_id&&this.appPeersManager.getPeerId(e.peer_id)||o.NM}getDialogOnly(e){return this.dialogsStorage.getDialogOnly(e)}cantForwardDeleteMids(e,t){const a=this.getMessagesStorage(e);let s=!t.length,n=!t.length;for(const e of t){const t=this.getMessageFromStorage(a,e);if(s||(s=!this.canForward(t)),n||(n=!this.canDeleteMessage(t)),s&&n)break}return{cantForward:s,cantDelete:n}}reloadConversationOrTopic(e,t){t?this.dialogsStorage.getForumTopicById(e,t):this.reloadConversation(e)}reloadConversation(e){let t;if(void 0!==e){const a=this.appPeersManager.getPeerId(e);this.log.warn("reloadConversation",a);let s=this.reloadConversationsPeers.get(a);if(s&&(t=s.promise),t)return t;t=(0,v.Z)(),this.reloadConversationsPeers.set(a,s={inputDialogPeer:this.appPeersManager.getInputDialogPeerById(e),promise:t})}return this.reloadConversationsPromise||(this.reloadConversationsPromise=(0,P.Z)(0).then((()=>{const e=[],t={};for(const[a,{inputDialogPeer:s,promise:n}]of this.reloadConversationsPeers)e.push(s),t[a]=n;const a=()=>{for(const e in t)this.reloadConversationsPeers.delete(+e),t[e].resolve(void 0)};return(()=>Xt(this,void 0,void 0,(function*(){for(;;){const t=yield this.apiManager.invokeApi("messages.getPeerDialogs",{peers:e}),a=this.apiUpdatesManager.updatesState,{state:s}=t;if(!a.pts||a.pts===s.pts)return t;yield(0,P.Z)(500)}})))().then((e=>{for(const e in t)this.reloadConversationsPeers.delete(+e);this.dialogsStorage.applyDialogs(e),e.dialogs.forEach((e=>{const a=e.peerId;a&&(t[a].resolve(e),delete t[a])}))}),qt.Z).then((()=>{a(),this.reloadConversationsPromise=null,this.reloadConversationsPeers.size&&this.reloadConversation()}))}))),t||this.reloadConversationsPromise}doFlushHistory(e,t,a,s){let n;const i=n=>(this.apiUpdatesManager.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:n.pts,pts_count:n.pts_count}}),!n.offset||this.doFlushHistory(e,t,a,s));return n=s?this.apiManager.invokeApiSingleProcess({method:"channels.deleteTopicHistory",params:{channel:this.appChatsManager.getChannelInput(e.toChatId()),top_msg_id:(0,oe.Z)(s)},processResult:i}):this.apiManager.invokeApiSingleProcess({method:"messages.deleteHistory",params:{just_clear:t,revoke:a,peer:this.appPeersManager.getInputPeerById(e),max_id:0},processResult:i}),n}flushHistory(e,t,a,s){return Xt(this,void 0,void 0,(function*(){if(this.appPeersManager.isChannel(e)&&!s){const t=this.getHistory(e,0,1),a=yield t,s=e.toChatId(),n=a.history[0]||0;return this.apiManager.invokeApiSingle("channels.deleteHistory",{channel:this.appChatsManager.getChannelInput(s),max_id:(0,oe.Z)(n)}).then((e=>(e&&this.apiUpdatesManager.processLocalUpdate({_:"updateChannelAvailableMessages",channel_id:s,available_min_id:n}),e)))}return this.doFlushHistory(e,t,a,s).then((()=>{if(s||this.flushStoragesByPeerId(e),t)this.rootScope.dispatchEvent("dialog_flush",{peerId:e,dialog:this.getDialogOnly(e)});else{const t=this.getTypingKey(e,s);if(delete this.notificationsToHandle[t],delete this.typings[t],!s){const t=this.reloadConversationsPeers.get(e);t&&(this.reloadConversationsPeers.delete(e),t.promise.resolve(void 0))}this.dialogsStorage.dropDialogOnDeletion(e,s)}}))}))}flushStoragesByPeerId(e){[this.historiesStorage,this.threadsStorage,this.searchesStorage,this.pendingAfterMsgs,this.pendingTopMsgs].forEach((t=>{delete t[e]}));for(const t in this.pinnedMessages)(+t===e||t.startsWith(e+"_"))&&delete this.pinnedMessages[t];const t=this.needSingleMessages.get(e);if(t){for(const[e,a]of t)a.resolve(this.generateEmptyMessage(e));t.clear()}[this.messagesStorageByPeerId,this.scheduledMessagesStorage].forEach((t=>{const a=t[e];a&&a.clear()})),this.dialogsStorage.flushForumTopicsCache(e)}hidePinnedMessages(e){return Promise.all([this.appStateManager.getState(),this.getPinnedMessage(e)]).then((([t,a])=>{t.hiddenPinnedMessages[e]=a.maxId,this.rootScope.dispatchEvent("peer_pinned_hidden",{peerId:e,maxId:a.maxId})}))}getPinnedMessagesKey(e,t){return e+(t?"_"+t:"")}getPinnedMessage(e,t){var a,s,n;const i=null!==(a=(s=this.pinnedMessages)[n=this.getPinnedMessagesKey(e,t)])&&void 0!==a?a:s[n]={};return i.promise?i.promise:i.maxId?Promise.resolve(i):i.promise=this.getSearch({peerId:e,inputFilter:{_:"inputMessagesFilterPinned"},maxId:0,limit:1,threadId:t}).then((e=>{var t;return i.count=e.count,i.maxId=null===(t=e.history[0])||void 0===t?void 0:t.mid,i})).finally((()=>{delete i.promise}))}getPinnedMessagesCount(e,t){var a;return null===(a=this.pinnedMessages[this.getPinnedMessagesKey(e,t)])||void 0===a?void 0:a.count}getPinnedMessagesMaxId(e,t){var a;return null===(a=this.pinnedMessages[this.getPinnedMessagesKey(e,t)])||void 0===a?void 0:a.maxId}updatePinnedMessage(e,t,a,s,n){return this.apiManager.invokeApi("messages.updatePinnedMessage",{peer:this.appPeersManager.getInputPeerById(e),unpin:a,silent:s,pm_oneside:n,id:(0,oe.Z)(t)}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}unpinAllMessages(e){return this.apiManager.invokeApiSingle("messages.unpinAllMessages",{peer:this.appPeersManager.getInputPeerById(e)}).then((t=>(this.apiUpdatesManager.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:t.pts,pts_count:t.pts_count}}),t.offset?this.unpinAllMessages(e):(this.getHistoryMessagesStorage(e).forEach((e=>{e.pFlags.pinned&&delete e.pFlags.pinned})),this.rootScope.dispatchEvent("peer_pinned_messages",{peerId:e,unpinAll:!0}),delete this.pinnedMessages[this.getPinnedMessagesKey(e)],!0))))}getAlbumText(e){const t=this.groupedMessagesStorage[e];return(0,Wt.Z)(Array.from(t.values()))}getGroupsFirstMessage(e){if(!(null==e?void 0:e.grouped_id))return e;const t=this.groupedMessagesStorage[e.grouped_id];let a=Number.MAX_SAFE_INTEGER;for(const[e,s]of t)s.midthis.getMessageFromStorage(a,e)))}getMidsByMessage(e){return e?e.grouped_id?this.getMidsByAlbum(e.grouped_id):[e.mid]:[]}filterMessages(e,t){const a=[];if(e.grouped_id){const s=this.groupedMessagesStorage[e.grouped_id];for(const[e,n]of s)t(n)&&a.push(n)}else t(e)&&a.push(e);return a}generateTempMessageId(e){const t=this.getDialogOnly(e);return this.appMessagesIdsManager.generateTempMessageId((null==t?void 0:t.top_message)||0)}setMessageUnreadByDialog(e,t=this.getDialogOnly(e.peerId)){t&&e.mid&&e.mid>t[e.pFlags.out?"read_outbox_max_id":"read_inbox_max_id"]&&(e.pFlags.unread=!0)}saveMessage(e,t={}){var a,s,n,i,r;if(!e||"messageEmpty"===e._)return;null!==(a=e.pFlags)&&void 0!==a||(e.pFlags={});const p=this.getMessagePeer(e),d=t.storage||this.getHistoryMessagesStorage(p),f="peerChannel"===e.peer_id._,c=f&&this.appChatsManager.isBroadcast(p.toChatId()),l="message"===e._;t.isOutgoing&&(e.pFlags.is_outgoing=!0);const m=(0,pe.Z)(e.id);e.mid=m,l&&(t.isScheduled&&(e.pFlags.is_scheduled=!0),e.grouped_id&&(null!==(s=(i=this.groupedMessagesStorage)[r=e.grouped_id])&&void 0!==s?s:i[r]=this.createMessageStorage(p,"grouped")).set(m,e),e.via_bot_id&&(e.viaBotId=e.via_bot_id));const g=e.reply_to;g&&(g.reply_to_msg_id&&(g.reply_to_msg_id=e.reply_to_mid=(0,pe.Z)(g.reply_to_msg_id)),g.reply_to_top_id&&(g.reply_to_top_id=(0,pe.Z)(g.reply_to_top_id)));const h=l&&e.replies;h&&(h.max_id&&(h.max_id=(0,pe.Z)(h.max_id)),h.read_max_id&&(h.read_max_id=(0,pe.Z)(h.read_max_id)));const u=!!p;u||(e.date-=this.timeManager.getServerTimeOffset());const y=this.appPeersManager.peerId,_=l&&e.fwd_from;if(e.peerId=p,e.fromId=p===y?_?_.from_id?this.appPeersManager.getPeerId(_.from_id):o.NM:y:e.pFlags.post||!e.from_id?p:this.appPeersManager.getPeerId(e.from_id),this.setMessageUnreadByDialog(e),_){_.saved_from_msg_id&&(_.saved_from_msg_id=(0,pe.Z)(_.saved_from_msg_id)),_.channel_post&&(_.channel_post=(0,pe.Z)(_.channel_post));const t=_.saved_from_peer||_.from_id,a=_.saved_from_msg_id||_.channel_post;if(t&&a){const s=this.appPeersManager.getPeerId(t),n=(0,pe.Z)(a);e.savedFrom=s+"_"+n}e.fwdFromId=this.appPeersManager.getPeerId(_.from_id),u||(_.date-=this.timeManager.getServerTimeOffset())}const v={type:"message",peerId:p,messageId:m};let P=!1;const b=l&&e.media;if(b)switch(b._){case"messageMediaEmpty":delete e.media;break;case"messageMediaPhoto":b.ttl_seconds?P=!0:b.photo=this.appPhotosManager.savePhoto(b.photo,v),b.photo||delete e.media;break;case"messageMediaPoll":{const t=this.appPollsManager.savePoll(b.poll,b.results,e);b.poll=t.poll,b.results=t.results;break}case"messageMediaDocument":if(b.ttl_seconds)P=!0;else{const e=b.document;b.document=this.appDocsManager.saveDoc(e,v),b.document||"documentEmpty"===e._||(P=!0)}break;case"messageMediaWebPage":{const a=this.appWebPagesManager.getMessageKeyForPendingWebPage(p,m,t.isScheduled);b.webpage=this.appWebPagesManager.saveWebPage(b.webpage,a,v),b.webpage||delete e.media;break}case"messageMediaInvoice":{b.photo=this.appWebDocsManager.saveWebDocument(b.photo);const e=b.extended_media;if("messageExtendedMedia"===(null==e?void 0:e._)){const t=e.media;t.photo=this.appPhotosManager.savePhoto(t.photo,v),t.document=this.appDocsManager.saveDoc(t.document,v)}break}case"messageMediaUnsupported":P=!0}if(l&&P&&(e.media={_:"messageMediaUnsupported"},e.message="",delete e.entities,delete e.totalEntities),!l&&e.action){const t=e.action,a=e.fromId===this.appUsersManager.getSelf().id?"You":"";let s,i;switch(t.photo&&(t.photo=this.appPhotosManager.savePhoto(t.photo,v)),t.document&&(t.document=this.appDocsManager.saveDoc(t.photo,v)),t._){case"messageActionChatEditPhoto":(null===(n=t.photo)||void 0===n?void 0:n.video_sizes)?t._=c?"messageActionChannelEditVideo":"messageActionChatEditVideo":c&&(t._="messageActionChannelEditPhoto");break;case"messageActionGroupCall":{let e;this.appGroupCallsManager.saveGroupCall(t.call),e=void 0===t.duration?"started":"ended",c||(e+="_by"+a),t.type=e;break}case"messageActionChatEditTitle":c&&(t._="messageActionChannelEditTitle");break;case"messageActionChatDeletePhoto":c&&(t._="messageActionChannelDeletePhoto");break;case"messageActionChatAddUser":1===t.users.length?(t.user_id=t.users[0],e.fromId===t.user_id&&(t._=f?"messageActionChatJoined"+a:"messageActionChatReturn"+a)):t.users.length>1&&(t._="messageActionChatAddUsers");break;case"messageActionChatDeleteUser":e.fromId===t.user_id&&(t._="messageActionChatLeave"+a);break;case"messageActionChannelMigrateFrom":s=t.chat_id.toPeerId(!0),i=p;break;case"messageActionChatMigrateTo":s=p,i=t.channel_id.toPeerId(!0);break;case"messageActionHistoryClear":e.clear_history=!0,delete e.pFlags.out,delete e.pFlags.unread;break;case"messageActionPhoneCall":t.type=(t.pFlags.video?"video_":"")+(void 0!==t.duration?e.pFlags.out?"out_":"in_":"")+(void 0!==t.duration?"ok":"phoneCallDiscardReasonMissed"===t.reason._?"missed":"cancelled")}s&&i&&!this.migratedFromTo[s]&&!this.migratedToFrom[i]&&this.migrateChecks(s,i)}return l&&e.message.length&&!e.totalEntities&&this.wrapMessageEntities(e),d.set(m,e),e}saveMessages(e,t={}){return e.saved||(e.saved=!0,e.forEach(((e,a,s)=>{s[a]=this.saveMessage(e,t)}))),e}getFirstMessageToEdit(e,t){return Xt(this,void 0,void 0,(function*(){const a=this.getHistoryStorage(e,t).history.slice;if(a.isEnd(se.D.Bottom)&&a.length){let t;const s=this.appPeersManager.peerId;for(const n of a){const a=this.getMessageByPeer(e,n);if((s===e?a.fromId===s:a.pFlags.out)&&(yield this.canEditMessage(a,"text"))){t=a;break}}return t}}))}wrapMessageEntities(e){const t=e.entities?e.entities.slice():[];e.message=(0,bt.Z)(e.message,t);const a=(0,Nt.Z)(e.message);e.totalEntities=(0,Lt.Z)(t,a)}reportMessages(e,t,a,s){return this.apiManager.invokeApiSingle("messages.report",{peer:this.appPeersManager.getInputPeerById(e),id:t.map((e=>(0,oe.Z)(e))),reason:{_:a},message:s})}startBot(e,t,a){const s=t?t.toPeerId(!0):e.toPeerId();if(a){const t=(0,Ee.a)();return this.apiManager.invokeApi("messages.startBot",{bot:this.appUsersManager.getUserInput(e),peer:this.appPeersManager.getInputPeerById(s),random_id:t,start_param:a}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}const n="/start";if(t){let a;return a=this.appChatsManager.isChannel(t)?this.appChatsManager.inviteToChannel(t,[e]):this.appChatsManager.addChatUser(t,e,0),a.catch((e=>{if("USER_ALREADY_PARTICIPANT"!=(null==e?void 0:e.type))throw e;e.handled=!0})).then((()=>this.sendText(s,n+"@"+this.appPeersManager.getPeerUsername(e.toPeerId()))))}return this.sendText(s,n)}editPeerFolders(e,t){this.apiManager.invokeApi("folders.editPeerFolders",{folder_peers:e.map((e=>({_:"inputFolderPeer",peer:this.appPeersManager.getInputPeerById(e),folder_id:t})))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}getFilter(e){return this.filtersStorage.getFilter(e)}toggleDialogPin(e){var t;return Xt(this,void 0,void 0,(function*(){const{peerId:a,topicId:s,filterId:n=(s?a:void 0)}=e;if(void 0===n)throw new Error("No filterId");if(n>1)return this.filtersStorage.toggleDialogPin(a,n);const i=this.dialogsStorage.getDialogOrTopic(a,s);if(!i)throw void 0;const r=!(null===(t=i.pFlags)||void 0===t?void 0:t.pinned)||void 0;if(r){const e=yield this.apiManager.getLimit(s?"topicPin":1===n?"folderPin":"pin");if(this.dialogsStorage.getPinnedOrders(n).length>=e)throw(0,X.Z)(s?"PINNED_TOO_MUCH":"PINNED_DIALOGS_TOO_MUCH")}return s?this.appChatsManager.updatePinnedForumTopic(a.toChatId(),s,r):this.apiManager.invokeApi("messages.toggleDialogPin",{peer:this.appPeersManager.getInputDialogPeerById(a),pinned:r}).then((e=>{const t=r?{pinned:r}:{};this.apiUpdatesManager.saveUpdate({_:"updateDialogPinned",peer:this.appPeersManager.getDialogPeer(a),folder_id:n,pFlags:t})}))}))}markDialogUnread(e,t){var a;const s=this.getDialogOnly(e);if(!s)return Promise.reject();const n=!t&&!(null===(a=s.pFlags)||void 0===a?void 0:a.unread_mark)||void 0;return this.apiManager.invokeApi("messages.markDialogUnread",{peer:this.appPeersManager.getInputDialogPeerById(e),unread:n}).then((t=>{if(t){const t=n?{unread:n}:{};this.onUpdateDialogUnreadMark({_:"updateDialogUnreadMark",peer:this.appPeersManager.getDialogPeer(e),pFlags:t})}}))}migrateChecks(e,t){if(!this.migratedFromTo[e]&&!this.migratedToFrom[t]&&this.appChatsManager.hasChat(t.toChatId())){const a=this.appChatsManager.getChat(e.toChatId());(null==a?void 0:a.migrated_to)&&a.migrated_to.channel_id===t.toChatId()&&(this.migratedFromTo[e]=t,this.migratedToFrom[t]=e,this.rootScope.dispatchEvent("dialog_migrate",{migrateFrom:e,migrateTo:t}),this.dialogsStorage.dropDialogWithEvent(e))}}canMessageBeEdited(e,t){var a,s;if(null===(a=null==e?void 0:e.pFlags)||void 0===a?void 0:a.is_outgoing)return!1;const n=["messageMediaPhoto","messageMediaDocument","messageMediaWebPage"];return"poll"===t&&n.push("messageMediaPoll"),!(!e||"message"!==e._||e.deleted||e.fwd_from||e.via_bot_id||e.media&&-1===n.indexOf(e.media._)||e.fromId&&this.appUsersManager.isBot(e.fromId)||"messageMediaDocument"===(null===(s=e.media)||void 0===s?void 0:s._)&&(e.media.document.sticker||"round"===e.media.document.type))}canEditMessage(e,t="text"){var a;return Xt(this,void 0,void 0,(function*(){if(!e||!this.canMessageBeEdited(e,t))return!1;if(this.getMessagePeer(e)===this.appUsersManager.getSelf().id)return!0;const{peerId:s}=e;return!(!(this.appPeersManager.isBroadcast(s)?this.appChatsManager.hasRights(s.toChatId(),"edit_messages"):(!s.isAnyChat()||"text"!==t||this.appChatsManager.hasRights(s.toChatId(),"send_plain")||this.appChatsManager.hasRights(s.toChatId(),"send_media"))&&e.pFlags.out)||"peerChannel"!==e.peer_id._&&e.date<(0,te.Z)(!0)-(yield this.apiManager.getConfig()).edit_time_limit&&"messageMediaPoll"!==(null===(a=e.media)||void 0===a?void 0:a._))}))}canDeleteMessage(e){return e&&(e.peerId.isUser()||e.pFlags.out||"chat"===this.appChatsManager.getChat(e.peerId.toChatId())._||this.appChatsManager.hasRights(e.peerId.toChatId(),"delete_messages"))&&(!e.pFlags.is_outgoing||!!e.error)}getReplyKeyboard(e){return this.getHistoryStorage(e).replyMarkup}mergeReplyKeyboard(e,t){var a,s;if(!t)return!1;const n=t.reply_markup;if(!n&&!(null===(a=t.pFlags)||void 0===a?void 0:a.out)&&!t.action)return!1;if("replyInlineMarkup"===(null==n?void 0:n._))return!1;const i=e.replyMarkup;if(n)return!(i&&i.mid>=t.mid||n.pFlags.selective||(e.maxOutId&&t.midi.mid||t.pFlags.is_outgoing)&&t.message)return i.pFlags.hidden=!0,!0}else(!e.maxOutId||t.mid>e.maxOutId)&&(e.maxOutId=t.mid);return(0,ue.Z)(t),!("messageActionChatDeleteUser"!==(null===(s=t.action)||void 0===s?void 0:s._)||!(i?t.action.user_id===i.fromId:this.appUsersManager.isBot(t.action.user_id))||(e.replyMarkup={_:"replyKeyboardHide",mid:t.mid,pFlags:{}},0))}getSearchStorage(e,t){return this.searchesStorage[e]||(this.searchesStorage[e]={}),this.searchesStorage[e][t]||(this.searchesStorage[e][t]={history:[]}),this.searchesStorage[e][t]}getSearchCounters(e,t,a=!0,s){return this.appPeersManager.isPeerRestricted(e)?Promise.resolve(t.map((e=>({_:"messages.searchCounter",pFlags:{},filter:e,count:0})))):(a?this.apiManager.invokeApiCacheable:this.apiManager.invokeApi).bind(this.apiManager)("messages.getSearchCounters",{peer:this.appPeersManager.getInputPeerById(e),filters:t,top_msg_id:s?(0,oe.Z)(s):void 0})}filterMessagesByInputFilterFromStorage(e,t,a,s){const n=this.getMessagesStorage(a);return(0,Zt.Z)(e,t.map((e=>n.get(e))),s)}getSearch({peerId:e,query:t,inputFilter:a,maxId:s,limit:n,nextRate:i,backLimit:r,threadId:o,folderId:p,minDate:f,maxDate:c}){if(this.appPeersManager.isPeerRestricted(e))return Promise.resolve({count:0,offset_id_offset:0,next_rate:void 0,history:[]});t||(t=""),a||(a={_:"inputMessagesFilterEmpty"}),void 0===n&&(n=20),i||(i=0),r||(r=0),f=f?f/1e3|0:0,c=c?c/1e3|0:0;let l=[];r&&(n+=r);let m;if(!e||r||s||t||1===n||o||(m=this.getHistoryStorage(e),l=this.filterMessagesByInputFilterFromStorage(a._,m.history.slice,this.getHistoryMessagesStorage(e),n)),l.length){if(!(l.length{this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.saveMessages(e.messages),d.ZP&&this.log("getSearch result:",a,e);const t=e.count||l.length+e.messages.length;return e.messages.forEach((e=>{const t=this.getMessagePeer(e);if(t.isAnyChat()){const e=this.appChatsManager.getChat(t.toChatId());e.migrated_to&&this.migrateChecks(t,e.migrated_to.channel_id.toPeerId(!0))}l.push(e)})),{count:t,offset_id_offset:e.offset_id_offset||0,next_rate:e.next_rate,history:l}}))}subscribeRepliesThread(e,t){const a=e+"_"+t;for(const e in this.threadsToReplies)if(this.threadsToReplies[e]===a)return;this.getDiscussionMessage(e,t)}generateThreadServiceStartMessage(e){const t=e.peerId+"_"+e.mid;if(this.threadsServiceMessagesIdsStorage[t])return;const a=(0,oe.Z)(Math.max(...this.getMidsByMessage(e))),s={_:"messageService",pFlags:{is_single:!0},id:this.appMessagesIdsManager.generateTempMessageId(a),date:e.date,from_id:{_:"peerUser",user_id:o.NM},peer_id:e.peer_id,action:{_:"messageActionDiscussionStarted"},reply_to:this.generateReplyHeader(e.peerId,e.id)};this.saveMessages([s],{isOutgoing:!0}),this.threadsServiceMessagesIdsStorage[t]=s.mid}getThreadServiceMessageId(e,t){return this.threadsServiceMessagesIdsStorage[e+"_"+t]}getDiscussionMessage(e,t){return this.apiManager.invokeApiSingle("messages.getDiscussionMessage",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}).then((a=>{var s;this.appChatsManager.saveApiChats(a.chats),this.appUsersManager.saveApiUsers(a.users),this.saveMessages(a.messages);const n=this.getMessageWithReplies(a.messages[0]),i=n.peerId+"_"+n.mid;this.generateThreadServiceStartMessage(n);const r=this.getHistoryStorage(n.peerId,n.mid),o=a.max_id=(0,pe.Z)(a.max_id)||0;a.read_inbox_max_id=r.readMaxId=(0,pe.Z)(null!==(s=a.read_inbox_max_id)&&void 0!==s?s:n.mid),a.read_outbox_max_id=r.readOutboxMaxId=(0,pe.Z)(a.read_outbox_max_id)||0;const p=r.history.first;return r.maxId&&r.maxId{this.newDialogsHandlePromise=void 0,this.handleNewDialogs()}))}deleteMessages(e,t,a,s){var n,i;return Xt(this,void 0,void 0,(function*(){let r;const o=this.appPeersManager.isChannel(e),p=o&&e.toChatId();if(o&&!s){const a=this.appChatsManager.getChat(p);if(!a.pFlags.creator&&!(null===(i=null===(n=a.admin_rights)||void 0===n?void 0:n.pFlags)||void 0===i?void 0:i.delete_messages)&&!(t=t.filter((t=>!!this.getMessageByPeer(e,t).pFlags.out))).length)return}const d=yield this.apiManager.getConfig(),f=t.splice(d.forwarded_count_max,t.length-d.forwarded_count_max),c=t.map((e=>{const t=(0,oe.Z)(e);return(0,pe.Z)(t)===e&&t})).filter(Boolean);r=o?this.apiManager.invokeApi("channels.deleteMessages",{channel:this.appChatsManager.getChannelInput(p),id:c}).then((e=>{this.apiUpdatesManager.processLocalUpdate({_:"updateDeleteChannelMessages",channel_id:p,messages:t,pts:e.pts,pts_count:e.pts_count})})):this.apiManager.invokeApi("messages.deleteMessages",{revoke:a,id:c}).then((e=>{this.apiUpdatesManager.processLocalUpdate({_:"updateDeleteMessages",messages:t,pts:e.pts,pts_count:e.pts_count})}));const l=[r];return f.length&&l.push(this.deleteMessages(e,f,a,!0)),Promise.all(l).then(qt.Z)}))}readHistory(e,t=0,a,s=!1){if(this.log("readHistory:",e,t,a),!this.getReadMaxIdIfUnread(e,a)){if(a&&!s){const t=this.dialogsStorage.getForumTopic(e,a);(0,oe.Z)(t.read_inbox_max_id)||(s=!0)}if(!s){const t=this.appChatsManager.isForum(e.toChatId())&&a?this.dialogsStorage.getForumTopic(e,a):this.getDialogOnly(e);t&&this.isDialogUnread(t)&&(s=!0)}if(!s)return this.log("readHistory: isn't unread"),Promise.resolve()}const n=this.getHistoryStorage(e,a);if(n.triedToReadMaxId>=t)return Promise.resolve();let i;return a?(n.readPromise||(i=this.apiManager.invokeApi("messages.readDiscussion",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(a),read_max_id:(0,oe.Z)(t)})),this.apiUpdatesManager.processLocalUpdate({_:"updateReadChannelDiscussionInbox",channel_id:e.toChatId(),top_msg_id:a,read_max_id:t})):this.appPeersManager.isChannel(e)?(n.readPromise||(i=this.apiManager.invokeApi("channels.readHistory",{channel:this.appChatsManager.getChannelInput(e.toChatId()),max_id:(0,oe.Z)(t)})),this.apiUpdatesManager.processLocalUpdate({_:"updateReadChannelInbox",max_id:t,channel_id:e.toChatId(),still_unread_count:void 0,pts:void 0})):(n.readPromise||(i=this.apiManager.invokeApi("messages.readHistory",{peer:this.appPeersManager.getInputPeerById(e),max_id:(0,oe.Z)(t)}).then((e=>{this.apiUpdatesManager.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:e.pts,pts_count:e.pts_count}})}))),this.apiUpdatesManager.processLocalUpdate({_:"updateReadHistoryInbox",max_id:t,peer:this.appPeersManager.getOutputPeer(e),still_unread_count:void 0,pts:void 0,pts_count:void 0})),this.rootScope.dispatchEvent("notification_reset",this.appPeersManager.getPeerString(e)),n.readPromise?n.readPromise:(n.triedToReadMaxId=t,i.finally((()=>{delete n.readPromise;const{readMaxId:s}=n;this.log("readHistory: promise finally",t,s),s>t&&this.readHistory(e,s,a,!0)})),n.readPromise=i)}readAllHistory(e,t,a=!1){const s=this.getHistoryStorage(e,t);s.maxId&&this.readHistory(e,s.maxId,t,a)}getUnreadMentionsKey(e,t){return e+(t?`_${t}`:"")}fixDialogUnreadMentionsIfNoMessage(e,t){const a=this.dialogsStorage.getDialogOrTopic(e,t);(null==a?void 0:a.unread_mentions_count)&&this.reloadConversationOrTopic(e)}modifyCachedMentions(e,t,a,s){const n=this.unreadMentions[this.getUnreadMentionsKey(e,s)];n&&(a?n.first.isEnd(se.D.Top)&&n.insertSlice([t]):n.delete(t))}fixUnreadMentionsCountIfNeeded(e,t,a){const s=this.dialogsStorage.getDialogOrTopic(e,a);!t.length&&(null==s?void 0:s.unread_mentions_count)&&this.reloadConversationOrTopic(e)}goToNextMention(e,t){var a,s;const n=this.getUnreadMentionsKey(e,t),i=this.goToNextMentionPromises[n];if(i)return i;const r=null!==(a=(s=this.unreadMentions)[e])&&void 0!==a?a:s[e]=new se.Z,o=r.length,p=r.first.isEnd(se.D.Top);if(!o&&p)return this.fixUnreadMentionsCountIfNeeded(e,r,t),Promise.resolve();let d=Promise.resolve();return!p&&o<25&&(d=this.loadNextMentions(e,t)),this.goToNextMentionPromises[n]=d.then((()=>{const a=r.last,s=a&&a[a.length-1];if(s)return r.delete(s),s;this.fixUnreadMentionsCountIfNeeded(e,r,t)})).finally((()=>{delete this.goToNextMentionPromises[n]}))}loadNextMentions(e,t){const a=this.unreadMentions[e],s=a.first[0]||1;return this.getUnreadMentions(e,s,-50,50,void 0,void 0,t).then((e=>{this.mergeHistoryResult(a,e,1===s?0:s,50,-50)}))}getUnreadMentions(e,t,a,s,n=0,i=0,r){return this.apiManager.invokeApiSingleProcess({method:"messages.getUnreadMentions",params:{peer:this.appPeersManager.getInputPeerById(e),offset_id:(0,oe.Z)(t),add_offset:a,limit:s,max_id:(0,oe.Z)(n),min_id:(0,oe.Z)(i),top_msg_id:r?(0,oe.Z)(r):void 0},processResult:e=>((0,ue.Z)(e),this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.saveMessages(e.messages),e)})}readMessages(e,t){if(!t.length)return Promise.resolve();let a,s;if(t=t.map((e=>(0,oe.Z)(e))),e.isAnyChat()&&this.appPeersManager.isChannel(e)){const n=e.toChatId();s={_:"updateChannelReadMessagesContents",channel_id:n,messages:t},a=this.apiManager.invokeApi("channels.readMessageContents",{channel:this.appChatsManager.getChannelInput(n),id:t})}else s={_:"updateReadMessagesContents",messages:t,pts:void 0,pts_count:void 0},a=this.apiManager.invokeApi("messages.readMessageContents",{id:t}).then((e=>{s.pts=e.pts,s.pts_count=e.pts_count,this.apiUpdatesManager.processLocalUpdate(s)}));return this.apiUpdatesManager.processLocalUpdate(s),a}getHistoryStorage(e,t){var a,s,n,i,r,o;return t?null!==(s=(r=null!==(a=(i=this.threadsStorage)[e])&&void 0!==a?a:i[e]={})[t])&&void 0!==s?s:r[t]={count:null,history:new se.Z}:null!==(n=(o=this.historiesStorage)[e])&&void 0!==n?n:o[e]={count:null,history:new se.Z}}getHistoryStorageTransferable(e,t){const a=this.getHistoryStorage(e,t),{count:s,history:n,maxId:i,readMaxId:r,readOutboxMaxId:o,maxOutId:p,replyMarkup:d}=a;return{count:s,history:void 0,historySerialized:n.toJSON(),maxId:i,readMaxId:r,readOutboxMaxId:o,maxOutId:p,replyMarkup:d}}getNotifyPeerSettings(e,t){const a=this.appPeersManager.getInputNotifyPeerById({peerId:e,ignorePeerId:!0,threadId:t});return Promise.all([this.appNotificationsManager.getNotifyPeerTypeSettings(),this.appNotificationsManager.getNotifySettings(a)]).then((([a,s])=>({muted:this.appNotificationsManager.isPeerLocalMuted({peerId:e,respectType:!0,threadId:t}),peerTypeNotifySettings:s})))}getUpdateAfterReloadKey(e,t){return e+(t?"_"+t:"")}handleNewUpdateAfterReload(e,t,a){var s,n,i;const r=null!==(s=(n=this.newUpdatesAfterReloadToHandle)[i=this.getUpdateAfterReloadKey(e,a)])&&void 0!==s?s:n[i]=new Set;r.has(t)?this.log.error("here we go again",e):(t.ignoreExisting=!0,r.add(t),this.scheduleHandleNewDialogs(e,a))}setDialogToStateIfMessageIsTop(e){this.isMessageIsTopMessage(e)&&this.dialogsStorage.setDialogToState(this.getDialogOnly(e.peerId))}isMessageIsTopMessage(e){const t=this.getDialogOnly(e.peerId);return t&&t.top_message===e.mid}updateMessageRepliesIfNeeded(e){try{const t=this.getThreadKey(e);if(t){const e=this.threadsToReplies[t];if(e){const[t,a]=e.split("_");this.updateMessage(t.toPeerId(),+a,"replies_updated")}}}catch(t){this.log.error("incrementMessageReplies err",t,e)}}getThreadKey(e){var t;let a="";if(null===(t=null==e?void 0:e.peerId)||void 0===t?void 0:t.isAnyChat()){const t=(0,Yt.Z)(e,this.appChatsManager.isForum(e.peerId.toChatId()));t&&(a=e.peerId+"_"+t)}return a}updateMessage(e,t,a){return this.reloadMessages(e,t,!0).then((()=>{const s=this.getMessageByPeer(e,t);if(s)return a&&this.rootScope.dispatchEvent(a,s),s}))}checkPendingMessage(e){const t=this.pendingByMessageId[e.mid];let a;if(t){const s=this.pendingByRandomId[t];(a=this.finalizePendingMessage(t,e))&&this.rootScope.dispatchEvent("history_update",{storageKey:s.storage.key,message:e,sequential:s.sequential}),delete this.pendingByMessageId[e.mid]}return a}mutePeer(e){if(!(e=this.appNotificationsManager.validatePeerSettings(e)))return;const{peerId:t,muteUntil:a,threadId:s}=e,n={_:"inputPeerNotifySettings"};n.mute_until=a;const i=this.appPeersManager.getInputPeerById(t);return this.appNotificationsManager.updateNotifySettings(s?{_:"inputNotifyForumTopic",peer:i,top_msg_id:(0,oe.Z)(s)}:{_:"inputNotifyPeer",peer:i},n)}togglePeerMute({peerId:e,mute:t,threadId:a}){return void 0===t&&(t=!this.appNotificationsManager.isPeerLocalMuted({peerId:e,respectType:!1,threadId:a})),this.mutePeer({peerId:e,muteUntil:t?o.rU:0,threadId:a})}findPeerIdByMids(e){for(let t=e.length-1;t>=0;--t){const a=e[t],s=this.getMessageById(a);if(s)return s.peerId}}canSendToPeer(e,t,a="send_messages"){var s;if(this.appPeersManager.isPeerRestricted(e))return!1;if(e.isAnyChat()){const n=e.toChatId();if(t){const a=this.dialogsStorage.getForumTopic(e,t);if((null===(s=null==a?void 0:a.pFlags)||void 0===s?void 0:s.closed)&&!this.appChatsManager.hasRights(n,"manage_topics"))return!1}const i=this.appChatsManager.getChat(n);return this.appChatsManager.hasRights(n,a,void 0,!!t)&&(!i.pFlags.left||!!t)}return this.appUsersManager.canSendToUser(e)}finalizePendingMessage(e,t){const a=this.pendingByRandomId[e];if(!a)return;const{peerId:s,tempId:n,threadId:i,storage:r}=a;[this.getHistoryStorage(s),i?this.getHistoryStorage(s,i):void 0].filter(Boolean).forEach((e=>{e.history.delete(n)}));const o=this.getMessageFromStorage(r,n);return o&&(delete t.pFlags.is_outgoing,delete t.pending,delete t.error,delete t.random_id,delete t.send),this.rootScope.dispatchEvent("messages_pending"),delete this.pendingByRandomId[e],this.finalizePendingMessageCallbacks(r,n,t),o}finalizePendingMessageCallbacks(e,t,a){const s=this.tempFinalizeCallbacks[t];if(void 0!==s){for(const e in s){const{deferred:t,callback:n}=s[e];n(a).then(t.resolve,t.reject)}delete this.tempFinalizeCallbacks[t]}if(a.media){(0,ue.Z)(a);const{photo:e,document:s}=a.media;if(e){const a=this.appPhotosManager.getPhoto(""+t);if(a){const t=e.sizes[e.sizes.length-1],s=this.thumbsStorage.getCacheContext(e,t.type),n=this.thumbsStorage.getCacheContext(a,o.Pt);Object.assign(s,n);const i=e.sizes[e.sizes.length-1],r=(0,Ot.Z)(e,i);(0,lt.P)(r.location)}}else if(s){const e=this.appDocsManager.getDoc(""+t);if(e){const t=this.thumbsStorage.getCacheContext(e);if(e.type&&"sticker"!==e.type&&"image/gif"!==e.mime_type&&t.url){const e=this.thumbsStorage.getCacheContext(s);Object.assign(e,t),n=s,(0,lt.P)((0,ct.Z)(n,undefined),{fileName:n.file_name})}}}else a.media.poll&&(delete this.appPollsManager.polls[t],delete this.appPollsManager.results[t])}var n;const i=this.getMessageFromStorage(e,t);e.delete(t),!i.reply_markup&&a.reply_markup&&setTimeout((()=>{this.getMessageFromStorage(e,a.mid)&&this.rootScope.dispatchEvent("message_edit",{storageKey:e.key,peerId:a.peerId,mid:a.mid,message:a})}),0),this.handleReleasingMessage(i,e),this.rootScope.dispatchEvent("message_sent",{storageKey:e.key,tempId:t,tempMessage:i,mid:a.mid,message:a})}incrementMaxSeenId(e){if(!e||this.maxSeenId&&!(e>this.maxSeenId))return!1;this.maxSeenId=e,this.appStateManager.pushToState("maxSeenMsgId",e),this.apiManager.invokeApi("messages.receivedMessages",{max_id:(0,oe.Z)(e)})}getMessageReactionsListAndReadParticipants(e,t,a,s,n,i){var r,o;return Xt(this,void 0,void 0,(function*(){const p={reactions:[],count:0,next_offset:void 0},d=yield this.canViewMessageReadParticipants(e);return d&&void 0===t?t=100:void 0===t&&(t=50),Promise.all([!d||a||n?[]:this.getMessageReadParticipants(e.peerId,e.mid).catch((()=>[])),(null===(o=null===(r=e.reactions)||void 0===r?void 0:r.recent_reactions)||void 0===o?void 0:o.length)&&!i?this.appReactionsManager.getMessageReactionsList(e.peerId,e.mid,t,a,s).catch((e=>p)):p]).then((([e,t])=>{const a=e.map((e=>e.toPeerId())),s=a.slice();(0,ne.Z)(s,((e,a,s)=>{t.reactions.some((t=>this.appPeersManager.getPeerId(t.peer_id)===e))&&s.splice(a,1)}));let n=t.reactions.map((e=>({peerId:this.appPeersManager.getPeerId(e.peer_id),reaction:e.reaction})));return n=n.concat(s.map((e=>({peerId:e})))),{reactions:t.reactions,reactionsCount:t.count,readParticipants:a,combined:n,nextOffset:t.next_offset}}))}))}getMessageReadParticipants(e,t){return this.apiManager.invokeApiSingle("messages.getMessageReadParticipants",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}).then((e=>e.map((e=>e.toUserId()))))}canViewMessageReadParticipants(e){return Xt(this,void 0,void 0,(function*(){if("message"!==(null==e?void 0:e._)||e.pFlags.is_outgoing||!e.pFlags.out||!this.appPeersManager.isAnyGroup(e.peerId))return!1;const t=this.appChatsManager.getChat(e.peerId.toChatId()),a=yield this.apiManager.getAppConfig();return t.participants_count<=a.chat_read_mark_size_threshold&&(0,te.Z)(!0)-e.date(0,oe.Z)(e))),increment:!0}).then((a=>{const s=new Array(t.length);for(let n=0,i=t.length;n{const{chatPeerIds:t}=e.state;return t[t.length-1]===a}));!n&&s.length&&(s.sort(((e,t)=>e.state.idleStartTime-t.state.idleStartTime)),n=s[0].state.idleStartTime?s[s.length-1]:s[0]),f.Z.getInstance().invokeVoid("notificationBuild",Object.assign({message:e},t),null==n?void 0:n.source)}getScheduledMessagesStorage(e){var t,a;return null!==(t=(a=this.scheduledMessagesStorage)[e])&&void 0!==t?t:a[e]=this.createMessageStorage(e,"scheduled")}getScheduledMessageByPeer(e,t){return this.getMessageFromStorage(this.getScheduledMessagesStorage(e),t)}getScheduledMessages(e){if(!this.canSendToPeer(e))return;const t=this.getScheduledMessagesStorage(e);return t.size?[...t.keys()]:this.apiManager.invokeApiSingle("messages.getScheduledHistory",{peer:this.appPeersManager.getInputPeerById(e),hash:""}).then((t=>{if("messages.messagesNotModified"!==t._){this.appUsersManager.saveApiUsers(t.users),this.appChatsManager.saveApiChats(t.chats);const a=this.getScheduledMessagesStorage(e);return this.saveMessages(t.messages,{storage:a,isScheduled:!0}),[...a.keys()]}return[]}))}sendScheduledMessages(e,t){return this.apiManager.invokeApi("messages.sendScheduledMessages",{peer:this.appPeersManager.getInputPeerById(e),id:t.map((e=>(0,oe.Z)(e)))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}deleteScheduledMessages(e,t){return this.apiManager.invokeApi("messages.deleteScheduledMessages",{peer:this.appPeersManager.getInputPeerById(e),id:t.map((e=>(0,oe.Z)(e)))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}getMessageWithReplies(e){return this.filterMessages(e,(e=>!!e.replies))[0]}getMessageWithCommentReplies(e){if(e.peerId!==o.hj){const t=null==(e=this.getMessageWithReplies(e))?void 0:e.replies;if(!t||!t.pFlags.comments||t.channel_id.toChatId()===o.IA)return}return e}isFetchIntervalNeeded(e){return e.isAnyChat()&&(!this.appChatsManager.isInChat(e.toChatId())||this.appChatsManager.isForum(e.toChatId()))}getNewHistory(e,t){var a;return Xt(this,void 0,void 0,(function*(){if(!this.isFetchIntervalNeeded(e))return;const s=this.getHistoryStorage(e,t),n=s.history.slice;if(!n.isEnd(se.D.Bottom))return;delete s.maxId,n.unsetEnd(se.D.Bottom);const i=yield this.getHistory(e,null!==(a=n[0])&&void 0!==a?a:1,0,50,t);for(let t=0,a=i.history.length;t{const e=i.history.sliceMe(t,r,a),s=(null==e?void 0:e.slice)||i.history.constructSlice();return{count:i.count,history:Array.from(s),isEnd:s.getEnds(),offsetIdOffset:(null==e?void 0:e.offsetIdOffset)||i.count}})):{count:i.count,history:Array.from(o.slice),isEnd:o.slice.getEnds(),offsetIdOffset:o.offsetIdOffset}}isHistoryResultEnd(e,t,a){const{offset_id_offset:s,messages:n}=e,i=e.count||n.length,r=s||0,o=a<0?t+a:t;return{count:i,offsetIdOffset:r,isTopEnd:r>=i-o||ie.mid));if(a&&(0,oe.Z)(a)&&!c.includes(a)&&pc[e]);++e);c.splice(e,0,a)}const l=e.insertSlice(c)||e.slice;return d&&l.setEnd(se.D.Top),f&&l.setEnd(se.D.Bottom),Object.assign({slice:l,mids:c,messages:i},r)}fillHistoryStorage(e,t,a,s,n,i){const r=n.maxId;return this.requestHistory(e,t,a,s,void 0,i).then((i=>{const{count:o,isBottomEnd:p,slice:d,messages:f}=this.mergeHistoryResult(n.history,i,t,a,s);n.count=o;for(let t=0,a=f.length;t{d.ZP&&this.log("requestHistory result:",e,r,t,a,s),this.appUsersManager.saveApiUsers(r.users),this.appChatsManager.saveApiChats(r.chats),this.saveMessages(r.messages),"pts"in r&&this.apiUpdatesManager.addChannelState(e.toChatId(),r.pts);let o=r.messages.length,p=r.count;o&&!r.messages[o-1]&&(r.messages.splice(o-1,1),o--,p--);const f=this.getHistoryStorage(e,i),c=r.messages[o-1];if(o&&c.grouped_id){const t=f.history.findSlice(c.mid);if(t&&t.slice.length+r.messages.lengthr))}return r}),(t=>{if("CHANNEL_PRIVATE"===t.type){let t=this.appChatsManager.getChat(e.toChatId());"channel"===t._&&(t={_:"channelForbidden",id:e.toChatId(),access_hash:t.access_hash,title:t.title,pFlags:t.pFlags}),this.apiUpdatesManager.processUpdateMessage({_:"updates",updates:[{_:"updateChannel",channel_id:e.toChatId()}],chats:[t],users:[]})}throw t}))}fetchSingleMessages(){return this.fetchSingleMessagesPromise?this.fetchSingleMessagesPromise:this.fetchSingleMessagesPromise=(0,P.Z)(0).then((()=>{const e=[];for(const[t,a]of this.needSingleMessages){const s=[...a.keys()],n=s.map((e=>({_:"inputMessageID",id:(0,oe.Z)(e)})));let i;i=t.isAnyChat()&&this.appPeersManager.isChannel(t)?this.apiManager.invokeApiSingle("channels.getMessages",{channel:this.appChatsManager.getChannelInput(t.toChatId()),id:n}):this.apiManager.invokeApiSingle("messages.getMessages",{id:n});const r=i.then((e=>{(0,ue.Z)(e),this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats);const t=this.saveMessages(e.messages);for(let e=0;e{this.rootScope.dispatchEvent("messages_downloaded",{peerId:t,mids:s})}));e.push(r)}return this.needSingleMessages.clear(),Promise.all(e).then(qt.Z,qt.Z).then((()=>{this.fetchSingleMessagesPromise=void 0,this.needSingleMessages.size&&this.fetchSingleMessages()}))}))}reloadMessages(e,t,a){if(Array.isArray(t))return Promise.all(t.map((t=>this.reloadMessages(e,t,a))));const s=this.getMessageByPeer(e,t);if(s&&!a)return this.rootScope.dispatchEvent("messages_downloaded",{peerId:e,mids:[t]}),Promise.resolve(s);{let a=this.needSingleMessages.get(e);a||this.needSingleMessages.set(e,a=new Map);let s=a.get(t);return s||(s=(0,v.Z)(),a.set(t,s),this.fetchSingleMessages(),s)}}getExtendedMedia(e,t){let a=this.extendedMedia.get(e);a||this.extendedMedia.set(e,a=new Map);const s=(0,v.Z)(),n=[],i=t.map((t=>{let i=a.get(t);return i||(a.set(t,i=s),n.push(t),i.then((()=>{a.delete(t),a.size||this.extendedMedia.get(e)!==a||this.extendedMedia.delete(e)}))),i}));return n.length?this.apiManager.invokeApi("messages.getExtendedMedia",{peer:this.appPeersManager.getInputPeerById(e),id:n.map((e=>(0,oe.Z)(e)))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e),s.resolve()})):s.resolve(),Promise.all(i)}fetchMessageReplyTo(e){if(!e.reply_to_mid)return Promise.resolve(this.generateEmptyMessage(0));const t=e.reply_to.reply_to_peer_id?this.appPeersManager.getPeerId(e.reply_to.reply_to_peer_id):e.peerId;return this.reloadMessages(t,e.reply_to_mid).then((t=>{if(t||delete(e=this.getMessageByPeer(e.peerId,e.mid)).reply_to_mid,"messageService"===e._){const t=e.peerId;this.rootScope.dispatchEvent("message_edit",{storageKey:`${t}_history`,peerId:t,mid:e.mid,message:e}),this.isMessageIsTopMessage(e)&&this.rootScope.dispatchEvent("dialogs_multiupdate",new Map([[t,{dialog:this.getDialogOnly(t)}]]))}return t}))}getTypingKey(e,t){return t?`${e}_${t}`:e}setTyping(e,t,a,s){var n;s&&!this.appPeersManager.isForum(e)&&(s=void 0);const i=this.getTypingKey(e,s);let r=this.typings[i];return e&&this.canSendToPeer(e)&&e!==this.appPeersManager.peerId&&(a||(null===(n=null==r?void 0:r.action)||void 0===n?void 0:n._)!==t._)?((null==r?void 0:r.timeout)&&clearTimeout(r.timeout),r=this.typings[i]={action:t},this.apiManager.invokeApi("messages.setTyping",{peer:this.appPeersManager.getInputPeerById(e),action:t,top_msg_id:s?(0,oe.Z)(s):void 0}).finally((()=>{r===this.typings[i]&&(r.timeout=T.Z.setTimeout((()=>{delete this.typings[i]}),6e3))}))):Promise.resolve(!1)}handleReleasingMessage(e,t){const a=e.media;if(a){const s=a.webpage||a,n=s.photo||s.document;if((null==n?void 0:n.file_reference)&&this.referenceDatabase.deleteContext(n.file_reference,{type:"message",peerId:e.peerId,messageId:e.mid}),"webpage"in a&&a.webpage){const s=this.getScheduledMessagesStorage(e.peerId)===t,n=this.appWebPagesManager.getMessageKeyForPendingWebPage(e.peerId,e.mid,s);this.appWebPagesManager.deleteWebPageFromPending(a.webpage,n)}a.poll&&this.appPollsManager.updatePollToMessage(e,!1)}}handleDeletedMessages(e,t,a){const s={count:0,unread:0,unreadMentions:0,msgs:new Set};for(const n of a){const a=this.getMessageFromStorage(t,n);if(!a){this.fixDialogUnreadMentionsIfNoMessage(e);continue}this.handleReleasingMessage(a,t),this.updateMessageRepliesIfNeeded(a),a.pFlags.out||a.pFlags.is_outgoing||!a.pFlags.unread||(++s.unread,this.rootScope.dispatchEvent("notification_cancel","msg"+n),a.pFlags.mentioned&&(++s.unreadMentions,this.modifyCachedMentions(e,n,!1))),++s.count,s.msgs.add(n),a.deleted=!0;const i=a.grouped_id;if(i){const e=this.groupedMessagesStorage[i];e&&(e.delete(n),s.albums||(s.albums={}),(s.albums[i]||(s.albums[i]=new Set)).add(n),e.size||(delete s.albums,delete this.groupedMessagesStorage[i]))}t.delete(n)}if(s.albums)for(const e in s.albums)this.dispatchAlbumEdit(e,t,[...s.albums[e]]);return s}handleEditedMessage(e,t,a){var s;if("message"===e._){if(null===(s=e.media)||void 0===s?void 0:s.webpage){const t=this.appWebPagesManager.getMessageKeyForPendingWebPage(e.peerId,e.mid,!!e.pFlags.is_scheduled);this.appWebPagesManager.deleteWebPageFromPending(e.media.webpage,t)}const t=e.grouped_id;t&&this.dispatchAlbumEdit(t,a,[])}}dispatchAlbumEdit(e,t,a){const s=this.getMidsByAlbum(e).map((e=>this.getMessageFromStorage(t,e)));this.rootScope.dispatchEvent("album_edit",{peerId:s[0].peerId,groupId:e,deletedMids:a||[],messages:s})}getDialogUnreadCount(e){var t;let a=e.unread_count;if(!this.dialogsStorage.isTopic(e)&&this.appPeersManager.isForum(e.peerId)){const t=this.dialogsStorage.getForumUnreadCount(e.peerId);a=t instanceof Promise?0:t.count}return a||+!!(null===(t=e.pFlags)||void 0===t?void 0:t.unread_mark)}isDialogUnread(e){return!!this.getDialogUnreadCount(e)}canForward(e){return"message"===(null==e?void 0:e._)&&!e.pFlags.noforwards&&!this.appPeersManager.noForwards(e.peerId)}pushBatchUpdate(e,t,a,s){let n=this.batchUpdates[e];n||(n=this.batchUpdates[e]={callback:t,batch:new Map}),n.batch.has(a)||(n.batch.set(a,s?s():void 0),this.batchUpdatesDebounced())}getMessagesFromMap(e){const t=new Map;for(const[a,s]of e){const[e,n]=a.split("_"),i=this.getMessageByPeer(e.toPeerId(),+n);i&&t.set(i,s)}return t}saveDefaultSendAs(e,t){return this.appProfileManager.getCachedFullChat(e.toChatId()).default_send_as=this.appPeersManager.getOutputPeer(t),this.apiManager.invokeApi("messages.saveDefaultSendAs",{peer:this.appPeersManager.getInputPeerById(e),send_as:this.appPeersManager.getInputPeerById(t)})}}var sa=a(6724);function na(e){const t=e.replace("input","");return t[0].toLowerCase()+t.slice(1)}class ia extends G{constructor(){super(...arguments),this.peerSettings={notifyPeer:{},notifyUsers:null,notifyChats:null,notifyBroadcasts:null,notifyForumTopic:{}},this.checkMuteUntil=()=>{void 0!==this.checkMuteUntilTimeout&&(clearTimeout(this.checkMuteUntilTimeout),this.checkMuteUntilTimeout=void 0);const e=(0,te.Z)(!0);let t=o.rU;const a=a=>{if(a instanceof Promise)return!1;const s=a.mute_until;return!!s&&(s<=e?(a.mute_until=0,!0):(s{for(const t in this.peerSettings[e]){const s=this.peerSettings[e][t];if(a(s)){const[e,a]=t.split("_"),n=this.appPeersManager.getOutputPeer(e.toPeerId());this.apiUpdatesManager.saveUpdate({_:"updateNotifySettings",peer:a?{_:"notifyForumTopic",peer:n,top_msg_id:+a}:{_:"notifyPeer",peer:n},notify_settings:s})}}}));const s=Math.min(18e5,1e3*(t-e));this.checkMuteUntilTimeout=T.Z.setTimeout(this.checkMuteUntil,s)}}after(){return this.checkMuteUntilThrottled=(0,sa.Z)(this.checkMuteUntil,1e3,!1),this.apiUpdatesManager.addMultipleEventsListeners({updateNotifySettings:e=>{const{peer:t}=e,a="notifyForumTopic"===t._,s="notifyPeer"===t._||a,n=s&&this.appPeersManager.getPeerId(t.peer),i=s?void 0:t._;this.savePeerSettings({key:i,peerId:n,threadId:a?(0,pe.Z)(t.top_msg_id):void 0,settings:e.notify_settings}),this.rootScope.dispatchEvent("notify_settings",e)}}),this.appStateManager.getState().then((e=>{if(e.notifySettings)for(const t in e.notifySettings)(0,ue.Z)(t),this.savePeerSettings({key:t,settings:e.notifySettings[t]})}))}getNotifySettings(e){let t,a=na(e._),s=this.peerSettings[a];return"inputNotifyPeer"===e._&&(t=a=this.appPeersManager.getPeerId(e.peer),s=s[a]),s||((s||this.peerSettings)[a]=this.apiManager.invokeApi("account.getNotifySettings",{peer:e}).then((e=>(this.savePeerSettings({key:a,peerId:t,settings:e}),e))))}getNotifyPeerTypeSettings(){if(this.getNotifyPeerTypePromise)return this.getNotifyPeerTypePromise;const e=["inputNotifyBroadcasts","inputNotifyUsers","inputNotifyChats"].map((e=>this.getNotifySettings({_:e})));return this.getNotifyPeerTypePromise=Promise.all(e)}updateNotifySettings(e,t){return this.apiManager.invokeApi("account.updateNotifySettings",{peer:e,settings:t}).then((a=>{a&&this.apiUpdatesManager.processLocalUpdate({_:"updateNotifySettings",peer:Object.assign(Object.assign({},e),{_:na(e._)}),notify_settings:Object.assign(Object.assign({},t),{_:"peerNotifySettings"})})}))}getContactSignUpNotification(){return this.notifyContactsSignUp?this.notifyContactsSignUp:this.notifyContactsSignUp=this.apiManager.invokeApi("account.getContactSignUpNotification")}setContactSignUpNotification(e){this.apiManager.invokeApi("account.setContactSignUpNotification",{silent:e}).then((t=>{this.notifyContactsSignUp=Promise.resolve(!e)}))}getPeerKey(e,t){return e+(t?"_"+t:"")}savePeerSettings({key:e,peerId:t,threadId:a,settings:s}){let n;t&&(e=this.getPeerKey(t,a),n=this.peerSettings[a?"notifyForumTopic":"notifyPeer"]),(n||this.peerSettings)[e]=s,t?this.checkMuteUntilThrottled():(this.rootScope.dispatchEvent("notify_peer_type_settings",{key:e,settings:s}),this.appStateManager.getState().then((t=>{const a=t.notifySettings;a[e]=s,this.appStateManager.pushToState("notifySettings",a)})))}isMuted(e){return"peerNotifySettings"===e._&&(e.silent||void 0!==e.mute_until&&1e3*e.mute_until>(0,te.Z)())}getPeerMuted(e){const t=this.getNotifySettings({_:"inputNotifyPeer",peer:this.appPeersManager.getInputPeerById(e)});return(t instanceof Promise?t:Promise.resolve(t)).then((e=>this.isMuted(e)))}getPeerLocalSettings({peerId:e,respectType:t=!0,threadId:a}){const s={_:"peerNotifySettings"},n=this.getPeerKey(e,a),i=this.peerSettings[a?"notifyForumTopic":"notifyPeer"][n];if(!i||i instanceof Promise||Object.assign(s,i),t){const t=na(this.appPeersManager.getInputNotifyPeerById({peerId:e,ignorePeerId:!0,threadId:a})._),n=this.peerSettings[t];if(n&&!(n instanceof Promise))for(const e in n)void 0===s[e]&&(s[e]=n[e])}return s}validatePeerSettings(e){if(e.peerId!==this.appPeersManager.peerId)return e.threadId&&!this.appPeersManager.isForum(e.peerId)&&(e.threadId=void 0),e}isPeerLocalMuted(e){if(!(e=this.validatePeerSettings(e)))return!1;if(e.threadId){const t=this.getPeerLocalSettings(Object.assign(Object.assign({},e),{respectType:!1}));return void 0!==t.silent||void 0!==t.mute_until?this.isMuted(t):this.isPeerLocalMuted(Object.assign(Object.assign({},e),{threadId:void 0}))}const t=this.getPeerLocalSettings(e);return this.isMuted(t)}}var ra=a(677),oa=a(617),pa=a(7361),da=a(7419),fa=a(7256);class ca extends G{get peerId(){return this.appUsersManager.userId.toPeerId()}canPinMessage(e){return e.isUser()||this.appChatsManager.hasRights(e.toChatId(),"pin_messages")}getPeerPhoto(e){const t=this.getPeer(e);return(0,fa.Z)(t)}getPeerMigratedTo(e){if(e.isUser())return!1;const t=this.appChatsManager.getChat(e.toChatId()),a=null==t?void 0:t.migrated_to;return!(!a||!t.pFlags.deactivated)&&(0,le.Z)(a)}getOutputPeer(e){if(e.isUser())return{_:"peerUser",user_id:e.toUserId()};const t=e.toChatId();return this.appChatsManager.isChannel(t)?{_:"peerChannel",channel_id:t}:{_:"peerChat",chat_id:t}}getPeerString(e){return e.isUser()?this.appUsersManager.getUserString(e.toUserId()):this.appChatsManager.getChatString(e.toChatId())}getPeerUsername(e){return this.getPeerActiveUsernames(e)[0]||""}getPeerActiveUsernames(e){const t=this.getPeer(e);return(0,$t.Z)(t)}getPeer(e){return e.isUser()?this.appUsersManager.getUser(e.toUserId()):this.appChatsManager.getChat(e.toChatId())}getPeerId(e){return(0,le.Z)(e)||(0,fe.Z)(e)&&"inputPeerSelf"===e._&&this.peerId||o.NM}getDialogPeer(e){return{_:"dialogPeer",peer:this.getOutputPeer(e)}}isChannel(e){return!e.isUser()&&this.appChatsManager.isChannel(e.toChatId())}isMegagroup(e){return!e.isUser()&&this.appChatsManager.isMegagroup(e.toChatId())}isForum(e){return!e.isUser()&&this.appChatsManager.isForum(e.toChatId())}isAnyGroup(e){return!e.isUser()&&!this.appChatsManager.isBroadcast(e.toChatId())}isBroadcast(e){return this.isChannel(e)&&!this.isMegagroup(e)}isBot(e){return e.isUser()&&this.appUsersManager.isBot(e.toUserId())}isContact(e){return e.isUser()&&this.appUsersManager.isContact(e.toUserId())}isUser(e){return(0,oa.Z)(e)}isAnyChat(e){return(0,pa.Z)(e)}isPeerRestricted(e){return(0,da.Z)(this.getPeer(e))}getRestrictionReasonText(e){const t=this.getPeer(e),a=t.restriction_reason?(0,ra.RP)(t.restriction_reason):void 0;return a?a.text:e.isUser()?"This user is restricted":"This chat is restricted"}getInputNotifyPeerById({peerId:e,ignorePeerId:t,threadId:a}){return t?e.isUser()?{_:"inputNotifyUsers"}:this.isBroadcast(e)?{_:"inputNotifyBroadcasts"}:{_:"inputNotifyChats"}:a?{_:"inputNotifyForumTopic",peer:this.getInputPeerById(e),top_msg_id:(0,oe.Z)(a)}:{_:"inputNotifyPeer",peer:this.getInputPeerById(e)}}getInputPeerById(e){if(!e)return{_:"inputPeerEmpty"};if(!e.isUser()){const t=e.toChatId();return this.appChatsManager.getInputPeer(t)}const t=e.toUserId();return this.appUsersManager.getUserInputPeer(t)}getInputPeerSelf(){return{_:"inputPeerSelf"}}getInputDialogPeerById(e){return{_:"inputDialogPeer",peer:(0,fe.Z)(e)?e:this.getInputPeerById(e)}}getPeerSearchText(e){let t;return t=this.isUser(e)?"%pu "+this.appUsersManager.getUserSearchText(e.toUserId()):"%pg "+(this.appChatsManager.getChat(e.toChatId()).title||""),t}getDialogType(e){return this.isMegagroup(e)?"megagroup":this.isChannel(e)?"channel":this.isUser(e)?e===this.peerId?"saved":"chat":"group"}getDeleteButtonText(e){switch(this.getDialogType(e)){case"channel":return this.appChatsManager.hasRights(e.toChatId(),"delete_chat")?"ChannelDelete":"ChatList.Context.LeaveChannel";case"megagroup":case"group":return this.appChatsManager.hasRights(e.toChatId(),"delete_chat")?"DeleteMega":"ChatList.Context.LeaveGroup";default:return"ChatList.Context.DeleteChat"}}noForwards(e){var t;return!e.isUser()&&!!(null===(t=this.appChatsManager.getChat(e.toChatId()).pFlags)||void 0===t?void 0:t.noforwards)}}class la extends G{constructor(){super(...arguments),this.photos={}}savePhoto(e,t){var a;if(!e||"photoEmpty"===e._)return;const s=this.photos[e.id];if(e.file_reference&&(dt("file_reference",s,e),this.referenceDatabase.saveContext(e.file_reference,t)),null===(a=e.sizes)||void 0===a?void 0:a.length){e.sizes.sort(((e,t)=>(e.size||(e.sizes?1/0:0))-(t.size||(t.sizes?1/0:0))));const t=e.sizes[e.sizes.length-1];"photoSizeProgressive"===t._&&(t.size=t.sizes[t.sizes.length-1])}return s?Object.assign(s,e):this.photos[e.id]=e}getUserPhotos(e,t="0",a=20){const s=this.appUsersManager.getUserInput(e);return this.apiManager.invokeApiCacheable("photos.getUserPhotos",{user_id:s,offset:0,limit:a,max_id:t},{cacheSeconds:60}).then((a=>{this.appUsersManager.saveApiUsers(a.users);const s=a.photos.map(((t,s)=>(a.photos[s]=this.savePhoto(t,{type:"profilePhoto",peerId:e.toPeerId()}),t.id)));if("0"!==t&&t){const e=s.indexOf(t);-1!==e&&s.splice(e,1)}return{count:a.count||s.length,photos:s}}))}getPhoto(e){return(0,fe.Z)(e)?e:this.photos[e]}}class ma extends G{constructor(){super(...arguments),this.polls={},this.results={},this.pollToMessages={},this.log=(0,S.kg)("POLLS",S.v9.Error)}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateMessagePoll:e=>{this.log("updateMessagePoll:",e);let t=e.poll||this.polls[e.poll_id];if(!t)return;let a=e.results;const s=this.savePoll(t,a);t=s.poll,a=s.results,this.rootScope.dispatchEvent("poll_update",{poll:t,results:a})}})}savePoll(e,t,a){a&&this.updatePollToMessage(a,!0);const s=e.id;return this.polls[s]?(e=Object.assign(this.polls[s],e),t=this.saveResults(e,t)):(this.polls[s]=e,e.chosenIndexes=[],t=this.saveResults(e,t)),{poll:e,results:t}}saveResults(e,t){var a;return this.results[e.id]?t=Object.assign(this.results[e.id],t):this.results[e.id]=t,t.pFlags.min||(e.chosenIndexes.length=0,(null===(a=null==t?void 0:t.results)||void 0===a?void 0:a.length)&&t.results.forEach(((t,a)=>{var s;(null===(s=t.pFlags)||void 0===s?void 0:s.chosen)&&e.chosenIndexes.push(a)}))),t}getPoll(e){return{poll:this.polls[e],results:this.results[e]}}getInputMediaPoll(e,t,a,s){return a?(s||(s=[]),a=(0,ke.Z)(a,s)):a=void 0,{_:"inputMediaPoll",poll:e,correct_answers:t,solution:a,solution_entities:a?s:void 0}}updatePollToMessage(e,t){const{id:a}=e.media.poll;let s=this.pollToMessages[a];if(!t&&!s)return;s||(s=this.pollToMessages[a]=new Set);const n=e.peerId+"_"+e.mid;t?s.add(n):s.delete(n),t||s.size||(delete this.polls[a],delete this.results[a],delete this.pollToMessages[a])}sendVote(e,t){const a=e.media.poll,s=t.map((e=>a.answers[e].option)),n=e.mid,i=e.peerId,r=this.appPeersManager.getInputPeerById(i);return e.pFlags.is_outgoing?this.appMessagesManager.invokeAfterMessageIsSent(n,"sendVote",(e=>(this.log("invoke sendVote callback"),this.sendVote(e,t)))):this.apiManager.invokeApi("messages.sendVote",{peer:r,msg_id:(0,oe.Z)(e.mid),options:s}).then((e=>{this.log("sendVote updates:",e),this.apiUpdatesManager.processUpdateMessage(e)}))}getResults(e){const t=this.appPeersManager.getInputPeerById(e.peerId);return this.apiManager.invokeApi("messages.getPollResults",{peer:t,msg_id:(0,oe.Z)(e.mid)}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e),this.log("getResults updates:",e)}))}getVotes(e,t,a,s=20){return this.apiManager.invokeApi("messages.getPollVotes",{peer:this.appPeersManager.getInputPeerById(e.peerId),id:(0,oe.Z)(e.mid),option:t,offset:a,limit:s}).then((e=>(this.log("getPollVotes messages:",e),this.appUsersManager.saveApiUsers(e.users),e)))}stopPoll(e){const t=e.media.poll;if(t.pFlags.closed)return Promise.resolve();const a=(0,ve.Z)(t);return a.pFlags.closed=!0,this.appMessagesManager.editMessage(e,void 0,{newMedia:this.getInputMediaPoll(a)}).then((()=>{}),(e=>{this.log.error("stopPoll error:",e)}))}}class ga extends G{constructor(){super(...arguments),this.privacy={}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updatePrivacy:e=>{const t=e.key._;this.privacy[t]=e.rules,this.rootScope.dispatchEvent("privacy_update",e)}})}setPrivacy(e,t){return this.apiManager.invokeApi("account.setPrivacy",{key:{_:e},rules:t}).then((a=>(this.appUsersManager.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),this.apiUpdatesManager.processLocalUpdate({_:"updatePrivacy",key:{_:na(e)},rules:t.map((e=>{const t={};return Object.assign(t,e),t._=na(t._),t}))}),a.rules)))}getPrivacy(e){const t=na(e),a=this.privacy[t];return a?Promise.resolve(a):this.privacy[t]=this.apiManager.invokeApi("account.getPrivacy",{key:{_:e}}).then((e=>(this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.privacy[t]=e.rules)))}getGlobalPrivacySettings(){return this.apiManager.invokeApi("account.getGlobalPrivacySettings")}setGlobalPrivacySettings(e){return this.apiManager.invokeApi("account.setGlobalPrivacySettings",{settings:e})}}var ha=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const ua=18e4;class ya extends G{constructor(){super(...arguments),this.usersFull={},this.chatsFull={},this.fullExpiration={},this.onUpdateChatParticipants=e=>{const t=e.participants;if("chatParticipants"!==t._)return;const a=t.chat_id,s=this.chatsFull[a];void 0!==s&&(s.participants=t,this.rootScope.dispatchEvent("chat_full_update",a))},this.onUpdateChatParticipantAdd=e=>{const t=this.chatsFull[e.chat_id];if(void 0===t)return;const a=t.participants,s=a.participants||[];for(let t=0,a=s.length;t{const t=this.chatsFull[e.chat_id];if(void 0===t)return;const a=t.participants,s=a.participants||[];for(let t=0,n=s.length;t{var t,a;const s=e.user_id?e.user_id.toPeerId():this.appPeersManager.getPeerId(e.from_id);if(this.appPeersManager.peerId===s||"speakingInGroupCallAction"===e.action._)return;const n=e.top_msg_id,i=n?(0,pe.Z)(n):void 0,r=this.appPeersManager.getPeerId(e),o=this.getTypingsKey(r,i),p=null!==(t=(a=this.typingsInPeer)[o])&&void 0!==t?t:a[o]=[];let d=p.find((e=>e.userId===s));const f=()=>{delete d.timeout;const e=p.indexOf(d);-1!==e&&p.splice(e,1),this.rootScope.dispatchEvent("peer_typings",{peerId:r,threadId:i,typings:p}),p.length||delete this.typingsInPeer[o]};if(void 0!==(null==d?void 0:d.timeout)&&clearTimeout(d.timeout),"sendMessageCancelAction"===e.action._){if(!d)return;return void f()}d||(d={userId:s},p.push(d)),d.action=e.action;const c=this.appUsersManager.hasUser(s);c?this.appUsersManager.forceUserOnline(s):"updateChatUserTyping"===e._&&e.chat_id&&this.appChatsManager.hasChat(e.chat_id)&&!this.appChatsManager.isChannel(e.chat_id)&&Promise.resolve(this.getChatFull(e.chat_id)).then((()=>{void 0!==d.timeout&&this.appUsersManager.hasUser(s)&&this.rootScope.dispatchEvent("peer_typings",{peerId:r,threadId:i,typings:p})})),d.timeout=T.Z.setTimeout(f,6e3),c&&this.rootScope.dispatchEvent("peer_typings",{peerId:r,threadId:i,typings:p})},this.onUpdatePeerBlocked=e=>{const t=this.appPeersManager.getPeerId(e.peer_id);if(this.appPeersManager.isUser(t)){const a=t.toUserId(),s=this.usersFull[a];s&&(e.blocked?s.pFlags.blocked=!0:delete s.pFlags.blocked),this.rootScope.dispatchEvent("user_full_update",a)}this.rootScope.dispatchEvent("peer_block",{peerId:t,blocked:e.blocked})}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateChatParticipants:this.onUpdateChatParticipants,updateChatParticipantAdd:this.onUpdateChatParticipantAdd,updateChatParticipantDelete:this.onUpdateChatParticipantDelete,updateUserTyping:this.onUpdateUserTyping,updateChatUserTyping:this.onUpdateUserTyping,updateChannelUserTyping:this.onUpdateUserTyping,updatePeerBlocked:this.onUpdatePeerBlocked}),this.rootScope.addEventListener("chat_update",(e=>{var t,a;const s=this.chatsFull[e],n=this.appChatsManager.getChat(e);if(!s||!n)return;let i=!1;!!s.call!=!!(null===(t=n.pFlags)||void 0===t?void 0:t.call_active)&&(i=!0);const{photo:r}=n;if(r){const e="chatPhotoEmpty"!==r._;(e!==!(!s.chat_photo||"photoEmpty"===s.chat_photo._)||e&&r.photo_id!==(null===(a=s.chat_photo)||void 0===a?void 0:a.id))&&(i=!0)}i&&this.refreshFullPeer(e.toPeerId(!0))})),this.rootScope.addEventListener("channel_update",(e=>{this.refreshFullPeer(e.toPeerId(!0))})),this.rootScope.addEventListener("chat_full_update",(e=>{this.rootScope.dispatchEvent("peer_full_update",e.toPeerId(!0))})),this.rootScope.addEventListener("user_full_update",(e=>{this.rootScope.dispatchEvent("peer_full_update",e.toPeerId(!1))})),this.rootScope.addEventListener("invalidate_participants",(e=>{this.invalidateChannelParticipants(e)})),this.typingsInPeer={}}getProfile(e,t){return this.usersFull[e]&&!t&&Date.now(){this.appChatsManager.saveApiChats(t.chats,!0),this.appUsersManager.saveApiUsers(t.users);const a=t.full_user,s=e.toPeerId(!1);a.profile_photo&&(a.profile_photo=this.appPhotosManager.savePhoto(a.profile_photo,{type:"profilePhoto",peerId:s}));const n=a.bot_info;if(n){const t={type:"userFull",userId:e};n.description_document=this.appDocsManager.saveDoc(n.description_document,t),n.description_photo=this.appPhotosManager.savePhoto(n.description_photo,t)}return this.appNotificationsManager.savePeerSettings({peerId:s,settings:a.notify_settings}),this.usersFull[e]=a,this.fullExpiration[s]=Date.now()+ua,this.rootScope.dispatchEvent("user_full_update",e),a}})}getProfileByPeerId(e,t){return this.appPeersManager.isAnyChat(e)?this.getChatFull(e.toChatId(),t):this.getProfile(e.toUserId(),t)}getCachedFullChat(e){return this.chatsFull[e]}getCachedFullUser(e){return this.usersFull[e]}getCachedProfileByPeerId(e){return e.isUser()?this.getCachedFullUser(e.toUserId()):this.getCachedFullChat(e.toChatId())}getFullPhoto(e){return ha(this,void 0,void 0,(function*(){const t=yield this.getProfileByPeerId(e);switch(t._){case"userFull":return t.profile_photo;case"channelFull":case"chatFull":return t.chat_photo}}))}getChatFull(e,t){if(this.appChatsManager.isChannel(e))return this.getChannelFull(e,t);const a=e.toPeerId(!0),s=this.chatsFull[e];if(s&&!t&&Date.now(){this.appChatsManager.saveApiChats(t.chats,!0),this.appUsersManager.saveApiUsers(t.users);const s=t.full_chat;return s&&s.chat_photo&&s.chat_photo.id&&(s.chat_photo=this.appPhotosManager.savePhoto(s.chat_photo,{type:"profilePhoto",peerId:a})),s.call&&this.appGroupCallsManager.saveGroupCall(s.call,e),this.appNotificationsManager.savePeerSettings({peerId:a,settings:s.notify_settings}),this.chatsFull[e]=s,this.fullExpiration[a]=Date.now()+ua,this.rootScope.dispatchEvent("chat_full_update",e),s}})}getChatInviteLink(e,t){return ha(this,void 0,void 0,(function*(){const a=yield this.getChatFull(e);return!t&&a.exported_invite&&"chatInviteExported"==a.exported_invite._?a.exported_invite.link:this.apiManager.invokeApi("messages.exportChatInvite",{peer:this.appPeersManager.getInputPeerById(e.toPeerId(!0))}).then((t=>(void 0!==this.chatsFull[e]&&(this.chatsFull[e].exported_invite=t),t.link)))}))}getParticipants(e,t={_:"channelParticipantsRecent"},a=200,s=0){return this.appChatsManager.isChannel(e)?this.getChannelParticipants(e,t,a,s):Promise.resolve(this.getChatFull(e)).then((e=>{const a=e.participants;if("chatParticipants"!==a._)throw(0,X.Z)("CHAT_PRIVATE");if("channelParticipantsSearch"===t._&&t.q.trim()){const e=this.appUsersManager.createSearchIndex();a.participants.forEach((t=>{const a=t.user_id;e.indexObject(a,this.appUsersManager.getUserSearchText(a))}));const s=e.search(t.q),n=a.participants.filter((e=>s.has(e.user_id)));return Object.assign(Object.assign({},a),{participants:n})}return a}))}getParticipant(e,t){return this.appChatsManager.isChannel(e)?this.getChannelParticipant(e,t):this.getParticipants(e).then((e=>{(0,ue.Z)(e);const a=e.participants.find((e=>{if((0,xe.Z)(e)===t)return e}));if(!a)throw(0,X.Z)("USER_NOT_PARTICIPANT");return a}))}getChannelParticipants(e,t={_:"channelParticipantsRecent"},a=200,s=0){if("channelParticipantsRecent"===t._){const t=this.appChatsManager.getChat(e);if((null==t?void 0:t.pFlags)&&t.pFlags.broadcast&&!t.pFlags.creator&&!t.admin_rights)return Promise.reject()}return this.apiManager.invokeApiCacheable("channels.getParticipants",{channel:this.appChatsManager.getChannelInput(e),filter:t,offset:s,limit:a,hash:"0"},{cacheSeconds:60}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e)))}getChannelParticipant(e,t){return this.apiManager.invokeApiSingle("channels.getParticipant",{channel:this.appChatsManager.getChannelInput(e),participant:this.appPeersManager.getInputPeerById(t)}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e.participant)))}getChannelFull(e,t){const a=e.toPeerId(!0);return void 0!==this.chatsFull[e]&&!t&&Date.now(){this.appChatsManager.saveApiChats(t.chats,!0),this.appUsersManager.saveApiUsers(t.users);const s=t.full_chat;return s&&s.chat_photo.id&&(s.chat_photo=this.appPhotosManager.savePhoto(s.chat_photo,{type:"profilePhoto",peerId:a})),s.call&&this.appGroupCallsManager.saveGroupCall(s.call,e),this.appNotificationsManager.savePeerSettings({peerId:a,settings:s.notify_settings}),this.chatsFull[e]=s,this.fullExpiration[a]=Date.now()+ua,this.rootScope.dispatchEvent("chat_full_update",e),s},processError:t=>{if("CHANNEL_PRIVATE"===t.type){const t=this.appChatsManager.getChat(e);this.apiUpdatesManager.processUpdateMessage({_:"updates",updates:[{_:"updateChannel",channel_id:e}],chats:["channelForbidden"===t._?t:{_:"channelForbidden",id:e,access_hash:t.access_hash,title:t.title,pFlags:t.pFlags}],users:[]})}throw t}})}getMentions(e,t,a){const s=e=>{"@"===t.charAt(0)&&(t=t.slice(1));const a=new ae.Z({ignoreCase:!0}),s=new Map;e.forEach((e=>{a.indexObject(e.id,this.appUsersManager.getUserSearchText(e.id)),s.set(e.id,e.rating)}));const n=Array.from(a.search(t));return n.sort(((e,t)=>s.get(t)-s.get(e))),n};let n;return n=this.appChatsManager.isChannel(e)?this.getChannelParticipants(e,{_:"channelParticipantsMentions",q:t,top_msg_id:(0,oe.Z)(a)},50,0).then((e=>e.participants.map((e=>(0,xe.Z)(e))))):e?Promise.resolve(this.getChatFull(e)).then((e=>e.participants.participants.map((e=>e.user_id.toPeerId())))):Promise.resolve([]),Promise.all([this.appUsersManager.getTopPeers("bots_inline").catch((()=>[])),n]).then((e=>{const t=e[0].concat(e[1].map((e=>({id:e,rating:0}))));return s(t)}))}invalidateChannelParticipants(e){this.apiManager.clearCache("channels.getParticipants",(t=>t.channel.channel_id===e)),this.refreshFullPeer(e.toPeerId(!0))}refreshFullPeer(e){if(e.isUser()){const t=e.toUserId();delete this.usersFull[t],this.rootScope.dispatchEvent("user_full_update",t)}else{const t=e.toChatId();delete this.chatsFull[t],this.rootScope.dispatchEvent("chat_full_update",t)}}updateProfile(e,t,a){return this.apiManager.invokeApi("account.updateProfile",{first_name:e,last_name:t,about:a}).then((e=>{if(this.appUsersManager.saveApiUser(e),void 0!==a){const t=e.id.toPeerId(),s=this.usersFull[e.id];s&&(s.about=a),this.rootScope.dispatchEvent("peer_bio_edit",t)}return this.getProfile(e.id,!0)}))}uploadProfilePhoto(e){return this.apiManager.invokeApi("photos.uploadProfilePhoto",{file:e}).then((e=>{const t=e.photo;if(!e.users.length){const a=t.sizes.find((e=>"photoStrippedSize"===e._));e.users.push(Object.assign(Object.assign({},this.appUsersManager.getSelf()),{photo:{_:"userProfilePhoto",dc_id:t.dc_id,photo_id:t.id,stripped_thumb:null==a?void 0:a.bytes,pFlags:{}}}))}this.appUsersManager.saveApiUsers(e.users);const a=this.appPeersManager.peerId;this.appPhotosManager.savePhoto(e.photo,{type:"profilePhoto",peerId:a});const s=a.toUserId();this.apiUpdatesManager.processLocalUpdate({_:"updateUser",user_id:s})}))}deletePhotos(e){return this.apiManager.invokeApiSingle("photos.deletePhotos",{id:e.map((e=>wt(this.appPhotosManager.getPhoto(e))))}).then((e=>{}))}verifyParticipantForOnlineCount(e){const t=this.appUsersManager.getUser(e.user_id);return!(!t||!t.status||"userStatusOnline"!==t.status._)}reduceParticipantsForOnlineCount(e){return e.reduce(((e,t)=>e+ +this.verifyParticipantForOnlineCount(t)),0)}getOnlines(e){var t;return ha(this,void 0,void 0,(function*(){if(this.appChatsManager.isBroadcast(e))return 1;const a=yield this.getChatFull(e);if(this.appChatsManager.isMegagroup(e)){if(a.participants_count<=100){const t=yield this.getChannelParticipants(e,{_:"channelParticipantsRecent"},100);return this.reduceParticipantsForOnlineCount(t.participants)}const s=yield this.apiManager.invokeApiCacheable("messages.getOnlines",{peer:this.appChatsManager.getChannelInputPeer(e)},{cacheSeconds:60});return null!==(t=s.onlines)&&void 0!==t?t:1}const s=a.participants;return(null==s?void 0:s.participants)?this.reduceParticipantsForOnlineCount(s.participants):1}))}getTypingsKey(e,t){return e+(t?`_${t}`:"")}getPeerTypings(e,t){return this.typingsInPeer[this.getTypingsKey(e,t)]}}function _a(e,t){return e.some((e=>e instanceof Promise))?Promise.all(e).then(t):t(e)}var va=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Pa=["static_icon","appear_animation","select_animation","activate_animation","effect_animation","around_animation","center_icon"],ba={type:"reactions"};class Ma extends G{after(){this.rootScope.addEventListener("language_change",(()=>{this.availableReactions=void 0,this.getAvailableReactions()})),this.sendReactionPromises=new Map,this.lastSendingTimes=new Map,this.rootScope.addEventListener("user_auth",(()=>{setTimeout((()=>{Promise.resolve(this.getAvailableReactions()).then((e=>va(this,void 0,void 0,(function*(){for(const t of e)yield Promise.all([t.around_animation&&this.apiFileManager.downloadMedia({media:t.around_animation}),t.static_icon&&this.apiFileManager.downloadMedia({media:t.static_icon}),t.appear_animation&&this.apiFileManager.downloadMedia({media:t.appear_animation}),t.center_icon&&this.apiFileManager.downloadMedia({media:t.center_icon})]),yield(0,P.Z)(1e3)}))))}),7500)}))}getAvailableReactions(){return this.availableReactions?this.availableReactions:this.apiManager.invokeApiSingleProcess({method:"messages.getAvailableReactions",processResult:e=>{(0,ue.Z)(e);const t=this.availableReactions=e.reactions;for(const e of t)for(const t of Pa)e[t]&&(e[t]=this.appDocsManager.saveDoc(e[t],ba));return t},params:{hash:0}})}getActiveAvailableReactions(){return(0,q.Z)(this.getAvailableReactions(),(e=>e.filter((e=>!e.pFlags.inactive))))}getAvailableReactionsForPeer(e){const t=this.getActiveAvailableReactions();return e.isUser()?this.unshiftQuickReaction(t):_a([t,this.appProfileManager.getChatFull(e.toChatId()),this.getQuickReaction()],(([e,t,a])=>{var s;const n=null!==(s=t.available_reactions)&&void 0!==s?s:{_:"chatReactionsNone"};let i=[];return"chatReactionsAll"===n._?i=e:"chatReactionsSome"===n._&&(i=n.reactions.map((t=>e.find((e=>e.reaction===t.emoticon)))).filter(Boolean)),this.unshiftQuickReactionInner(i,a)}))}unshiftQuickReactionInner(e,t){if(t&&"reactionEmoji"!==t._&&"availableReaction"!==t._)return e;const a=t.emoticon||t.reaction,s=(0,Pe.Z)(e,(e=>e.reaction===a));return s&&e.unshift(s),e}unshiftQuickReaction(e,t=this.getQuickReaction()){return _a([e,t],(([e,t])=>this.unshiftQuickReactionInner(e,t)))}getAvailableReactionsByMessage(e){var t;if(!e)return[];const a=(null===(t=e.fwd_from)||void 0===t?void 0:t.channel_post)&&this.appPeersManager.isMegagroup(e.peerId)&&e.fwdFromId||e.peerId;return this.getAvailableReactionsForPeer(a)}isReactionActive(e){return!!this.availableReactions&&!!this.availableReactions.find((t=>t.reaction===e))}getQuickReaction(){return _a([this.apiManager.getConfig(),this.getAvailableReactions()],(([e,t])=>{const a=e.reactions_default;return"reactionEmoji"===(null==a?void 0:a._)?t.find((e=>e.reaction===a.emoticon)):a}))}getReactionCached(e){return this.availableReactions.find((t=>t.reaction===e))}getReaction(e){return(0,q.Z)(this.getAvailableReactions(),(()=>this.getReactionCached(e)))}getMessagesReactions(e,t){return this.apiManager.invokeApiSingleProcess({method:"messages.getMessagesReactions",params:{id:t.map((e=>(0,oe.Z)(e))),peer:this.appPeersManager.getInputPeerById(e)},processResult:e=>{this.apiUpdatesManager.processUpdateMessage(e)}})}getMessageReactionsList(e,t,a,s,n){return this.apiManager.invokeApiSingleProcess({method:"messages.getMessageReactionsList",params:{peer:this.appPeersManager.getInputPeerById(e),id:(0,oe.Z)(t),limit:a,reaction:s,offset:n},processResult:e=>(this.appUsersManager.saveApiUsers(e.users),e)})}setDefaultReaction(e){return this.apiManager.invokeApi("messages.setDefaultReaction",{reaction:e}).then((t=>va(this,void 0,void 0,(function*(){if(t){const t=yield this.apiManager.getConfig();t&&(t.reactions_default=e),this.rootScope.dispatchEvent("quick_reaction",e)}return t}))))}sendReaction(e,t,a){var s,n;return va(this,void 0,void 0,(function*(){"availableReaction"===t._&&(t={_:"reactionEmoji",emoticon:t.reaction});const i=yield this.apiManager.getLimit("reactions"),r=e.peerId+"_"+e.mid;if(this.lastSendingTimes.get(r))return;this.lastSendingTimes.set(r,Date.now()),setTimeout((()=>{this.lastSendingTimes.delete(r)}),333);const{peerId:o,mid:p}=e,d=this.appPeersManager.peerId,f=e=>{--e.count,delete e.chosen_order,(0,Jt.Z)(t,e.reaction)&&(t=void 0),e.count||(0,M.Z)(l.results,e),l.recent_reactions&&(0,Pe.Z)(l.recent_reactions,(t=>(0,Jt.Z)(t.reaction,e.reaction)&&this.appPeersManager.getPeerId(t.peer_id)===d)),l.results.length||(l=void 0)},c=(null===(n=null===(s=e.reactions)||void 0===s?void 0:s.pFlags)||void 0===n?void 0:n.can_see_list)||!this.appPeersManager.isBroadcast(e.peerId)||e.peerId.isUser();e.reactions||(e.reactions={_:"messageReactions",results:[],recent_reactions:c?[]:void 0,pFlags:{can_see_list:c||void 0}});let l=a?e.reactions:(0,ve.Z)(e.reactions);const m=l.results.filter((e=>void 0!==e.chosen_order));m.sort(((e,t)=>t.chosen_order-e.chosen_order));const g=[],h=m.findIndex((e=>(0,Jt.Z)(e.reaction,t)));-1!==h&&g.push(...m.splice(h,1)),g.push(...m.splice(i-+(-1===h))),g.forEach((e=>{m.forEach((t=>{t.chosen_order>e.chosen_order&&--t.chosen_order})),f(e)}));const u=m.length;if(m.forEach(((e,t)=>{e.chosen_order=u-1-t})),t){l||(l={_:"messageReactions",results:[],pFlags:{}},c&&(l.pFlags.can_see_list=!0));let e=l.results.findIndex((e=>(0,Jt.Z)(e.reaction,t))),a=-1!==e&&l.results[e];if(a||(a={_:"reactionCount",count:0,reaction:t},e=l.results.push(a)-1),++a.count,a.chosen_order=m.length?m[0].chosen_order+1:0,m.unshift(a),!l.recent_reactions&&c&&(l.recent_reactions=[]),l.recent_reactions){const e={_:"messagePeerReaction",reaction:t,peer_id:this.appPeersManager.getOutputPeer(d),pFlags:{}};this.appPeersManager.isMegagroup(o),l.recent_reactions.unshift(e),l.recent_reactions=l.recent_reactions.slice(0,3)}}const y=this.availableReactions;if(l&&(null==y?void 0:y.length)){const e=new Map;y.forEach(((t,a)=>{e.set(t.reaction,a)})),l.results.sort(((t,a)=>{var s,n;const i=t.reaction.document_id||t.reaction.emoticon,r=a.reaction.document_id||a.reaction.emoticon;return a.count-t.count||(null!==(s=e.get(i))&&void 0!==s?s:0)-(null!==(n=e.get(r))&&void 0!==n?n:0)}))}if(a)return e.reactions=l,this.rootScope.dispatchEvent("messages_reactions",[{message:e,changedResults:[]}]),Promise.resolve();this.apiUpdatesManager.processLocalUpdate({_:"updateMessageReactions",peer:e.peer_id,msg_id:e.id,reactions:l,local:!0});const _=[o,p].join("-"),v=(0,oe.Z)(p),P=this.apiManager.invokeApi("messages.sendReaction",{peer:this.appPeersManager.getInputPeerById(o),msg_id:v,reaction:m.map((e=>e.reaction))}).then((e=>{(0,ue.Z)(e);const t=e.updates.findIndex((e=>"updateEditMessage"===e._||"updateEditChannelMessage"===e._));if(-1!==t){const a=e.updates[t];e.updates[t]={_:"updateMessageReactions",msg_id:v,peer:this.appPeersManager.getOutputPeer(o),reactions:a.message.reactions,pts:a.pts,pts_count:a.pts_count}}this.apiUpdatesManager.processUpdateMessage(e)})).catch((t=>{var a;"REACTION_INVALID"===t.type&&this.sendReactionPromises.get(_)===P&&this.sendReaction(e,null===(a=m[0])||void 0===a?void 0:a.reaction,!0)})).finally((()=>{this.sendReactionPromises.get(_)===P&&this.sendReactionPromises.delete(_)}));return this.sendReactionPromises.set(_,P),P}))}}var Sa=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Ia={EMOJI:"inputStickerSetAnimatedEmoji",EMOJI_ANIMATIONS:"inputStickerSetAnimatedEmojiAnimations",PREMIUM_GIFTS:"inputStickerSetPremiumGifts",GENERIC_ANIMATIONS:"inputStickerSetEmojiGenericAnimations",DEFAULT_STATUSES:"inputStickerSetEmojiDefaultStatuses",DEFAULT_TOPIC_ICONS:"inputStickerSetEmojiDefaultTopicIcons"},Ca=new Set(Object.values(Ia));class wa extends G{constructor(){super(...arguments),this.storage=new W.Z(H.Z,"stickerSets"),this.processAllStickersResult=e=>((0,ue.Z)(e),(0,ne.Z)(e.sets,((e,t,a)=>{e.pFlags.videos&&!i().IS_WEBM_SUPPORTED&&a.splice(t,1)})),e)}after(){this.getStickerSetPromises={},this.getStickersByEmoticonsPromises={},this.sounds={},this.names={},this.rootScope.addEventListener("user_auth",(()=>{setTimeout((()=>{this.getAnimatedEmojiStickerSet()}),1e3),this.getGreetingStickersPromise||void 0!==this.getGreetingStickersTimeout||(this.getGreetingStickersTimeout=T.Z.setTimeout((()=>{this.getGreetingStickersTimeout=void 0,this.getGreetingSticker(!0)}),5e3))})),this.rootScope.addEventListener("app_config",(()=>this.onStickersUpdated("faved",!0))),this.apiUpdatesManager.addMultipleEventsListeners({updateNewStickerSet:e=>{const t=e.stickerset;this.saveStickerSet(t,t.set.id),this.rootScope.dispatchEvent("stickers_installed",t.set)},updateRecentStickers:()=>this.onStickersUpdated("recent",!0),updateFavedStickers:()=>this.onStickersUpdated("faved",!0),updateMoveStickerSetToTop:e=>{this.rootScope.dispatchEvent("stickers_top",e.stickerset)}})}onStickersUpdated(e,t){return Sa(this,void 0,void 0,(function*(){const a=yield"faved"===e?this.getFavedStickersStickers(t):this.getRecentStickersStickers(t);this.rootScope.dispatchEvent("stickers_updated",{type:e,stickers:a})}))}getGreetingSticker(e=!1){return this.getGreetingStickersTimeout&&(clearTimeout(this.getGreetingStickersTimeout),this.getGreetingStickersTimeout=void 0),this.getGreetingStickersPromise||(this.getGreetingStickersPromise=this.getStickersByEmoticon("๐Ÿ‘‹โญ๏ธ",!1).then((e=>{if(!e.length)throw"NO_STICKERS";this.greetingStickers=e.slice(),this.greetingStickers.sort(((e,t)=>Math.random()-Math.random()))}))),this.getGreetingStickersPromise.then((()=>{let t;return e||(t=this.greetingStickers.shift(),this.greetingStickers.push(t)),this.apiFileManager.downloadMedia({media:this.greetingStickers[0]}),t}))}saveStickers(e){(0,ne.Z)(e,((t,a)=>{(t=this.appDocsManager.saveDoc(t))?e[a]=t:e.splice(a,1)}))}canUseStickerSetCache(e,t){var a;return e&&(null===(a=e.documents)||void 0===a?void 0:a.length)&&(Date.now()-e.refreshTime<36e5||t)}getStickerSet(e,t={}){let{id:a}=e;if(e.access_hash||(e=this.names[a]||e,a=e.id),this.getStickerSetPromises[a])return this.getStickerSetPromises[a];if(!t.overwrite){const e=this.storage.getFromCache(a);if(this.canUseStickerSetCache(e,t.useCache))return e}const s=this.getStickerSetPromises[a]=new Promise((n=>Sa(this,void 0,void 0,(function*(){if(!t.overwrite){const e=yield this.storage.get(a);if(this.canUseStickerSetCache(e,t.useCache))return this.saveStickers(e.documents),n(e),void(this.getStickerSetPromises[a]===s&&delete this.getStickerSetPromises[a])}try{const s=yield this.apiManager.invokeApi("messages.getStickerSet",{stickerset:this.getStickerSetInput(e),hash:0}),i=t.saveById?a:s.set.id;this.saveStickerSet(s,i),n(s)}catch(e){n(null)}this.getStickerSetPromises[a]===s&&delete this.getStickerSetPromises[a]}))));return s}getLocalStickerSet(e){return this.getStickerSet({id:e},{saveById:!0})}getAnimatedEmojiStickerSet(){return Promise.all([this.getLocalStickerSet(Ia.EMOJI),this.getLocalStickerSet(Ia.EMOJI_ANIMATIONS),this.getAnimatedEmojiSounds()]).then((([e,t])=>({emoji:e,animations:t})))}getAnimatedEmojiSounds(e){if(this.getAnimatedEmojiSoundsPromise&&!e)return this.getAnimatedEmojiSoundsPromise;const t=this.getAnimatedEmojiSoundsPromise=Promise.all([this.apiManager.getAppConfig(e),this.apiManager.getConfig()]).then((([e,a])=>{if(this.getAnimatedEmojiSoundsPromise===t)for(const t in e.emojies_sounds){const s=e.emojies_sounds[t],n=atob(s.file_reference_base64.replace(/-/g,"+").replace(/_/g,"/")),i=new Uint8Array(n.length);for(let e=0,t=i.length;e((0,ue.Z)(e),this.recentStickers=e.stickers,this.saveStickers(e.stickers),e),overwrite:e})}))}getRecentStickersStickers(e){if(e)this.recentStickers=void 0;else if(this.recentStickers)return this.recentStickers;return this.getRecentStickers(e).then((()=>this.recentStickers))}saveRecentSticker(e,t,a){const s=this.appDocsManager.getDoc(e);if((0,Pe.Z)(this.recentStickers,(t=>t.id===e)),!t){this.recentStickers.unshift(s);const e=(0,bt.Z)(s.stickerEmojiRaw);for(const t in this.getStickersByEmoticonsPromises)this.getStickersByEmoticonsPromises[t].then((a=>{const n=(0,Pe.Z)(a,(e=>e.id===s.id));n?a.unshift(n):t.includes(e)&&a.unshift(s)}))}return this.rootScope.dispatchEvent("sticker_updated",{type:"recent",faved:!t,document:s}),t&&this.onStickersUpdated("recent",!1),this.apiManager.invokeApi("messages.saveRecentSticker",{id:Kt(s),unsave:t,attached:a})}cleanEmoji(e){return e.replace(/\ufe0f/g,"").replace(/๐Ÿป|๐Ÿผ|๐Ÿฝ|๐Ÿพ|๐Ÿฟ/g,"")}getAnimatedEmojiSticker(e,t){const a=t?Ia.EMOJI_ANIMATIONS:Ia.EMOJI,s=this.storage.getFromCache(a);if(!(null==s?void 0:s.documents))return;t&&["๐Ÿงก","๐Ÿ’›","๐Ÿ’š","๐Ÿ’™","๐Ÿ’œ","๐Ÿ–ค","๐Ÿค","๐ŸคŽ"].includes(e)&&(e="โค๏ธ"),e=this.cleanEmoji(e);const n=s.packs.find((t=>t.emoticon===e));return n?this.appDocsManager.getDoc(n.documents[0]):void 0}getAnimatedEmojiSoundDocument(e){return this.sounds[this.cleanEmoji(e)]}preloadAnimatedEmojiSticker(e){const t=this.getAnimatedEmojiStickerSet().then((()=>this.getAnimatedEmojiSticker(e)));return Promise.all([t,this.preloadAnimatedEmojiStickerAnimation(e)]).then((([e,t])=>({doc:e,animation:null==t?void 0:t.doc,sound:null==t?void 0:t.sound})))}preloadAnimatedEmojiStickerAnimation(e){return this.getAnimatedEmojiStickerSet().then((()=>this.getAnimatedEmojiSticker(e,!0))).then((t=>{if(!t)return;const a=this.getAnimatedEmojiSoundDocument(e);return Promise.all([this.preloadSticker(t.id),a?this.preloadSticker(a.id):void 0]).then((()=>({doc:t,sound:a})))}))}preloadSticker(e,t){var a;const s=this.appDocsManager.getDoc(e);return this.apiFileManager.downloadMedia({media:s,thumb:t?null===(a=s.video_thumbs)||void 0===a?void 0:a[0]:void 0})}saveStickerSet(e,t){const a={_:"messages.stickerSet",set:e.set,packs:e.packs,documents:e.documents,keywords:e.keywords};let s=this.storage.getFromCache(t);s?Object.assign(s,a):s=this.storage.setToCache(t,a),s.set.short_name&&(this.names[s.set.short_name]=this.getStickerSetInput(a.set)),this.saveStickers(e.documents);const n=s.set.installed_date||Ca.has(t);s.refreshTime=Date.now(),this.storage.set({[t]:s},!n)}getStickerSetThumbDownloadOptions(e){var t;const a=e.thumbs.find((e=>"photoSize"===e._)),s=e.thumb_dc_id,n=null===(t=e.pFlags)||void 0===t?void 0:t.animated;return{dcId:s,location:{_:"inputStickerSetThumb",stickerset:this.getStickerSetInput(e),thumb_version:e.thumb_version},size:a.size,mimeType:n?"application/x-tgsticker":"image/webp"}}getStickerSetInput(e){return Ca.has(e.id)?{_:e.id}:e.access_hash?{_:"inputStickerSetID",id:e.id,access_hash:e.access_hash}:{_:"inputStickerSetShortName",short_name:""+e.id}}getFeaturedStickers(){return Sa(this,void 0,void 0,(function*(){return(yield this.apiManager.invokeApiHashable({method:"messages.getFeaturedStickers",processResult:e=>((0,ue.Z)(e),(0,ne.Z)(e.sets,((e,t,a)=>{e.set.pFlags.videos&&!i().IS_WEBM_SUPPORTED&&a.splice(t,1)})),e.sets.forEach((e=>{this.saveStickerSet({set:e.set,documents:[],packs:[],keywords:[]},e.set.id)})),e)})).sets}))}getPromoPremiumStickers(){return this.getStickersByEmoticon("โญ๏ธโญ๏ธ",!1)}getPremiumStickers(){return this.getStickersByEmoticon("๐Ÿ“‚โญ๏ธ",!1)}getFavedStickers(e){return this.apiManager.invokeApiHashable({method:"messages.getFavedStickers",processResult:e=>((0,ue.Z)(e),this.saveStickers(e.stickers),this.favedStickers=e.stickers,e),overwrite:e})}getFavedStickersStickers(e){if(e)this.favedStickers=void 0;else if(this.favedStickers)return this.favedStickers;return this.getFavedStickers(e).then((()=>this.favedStickers))}getFavedStickersLimit(){return this.apiManager.getLimit("favedStickers")}faveSticker(e,t){return Sa(this,void 0,void 0,(function*(){this.favedStickers||(yield this.getFavedStickersStickers());const a=yield this.getFavedStickersLimit(),s=this.appDocsManager.getDoc(e);return(0,Pe.Z)(this.favedStickers,(e=>e.id===s.id)),t||(this.favedStickers.unshift(s),this.favedStickers.splice(a,this.favedStickers.length-a)),this.rootScope.dispatchEvent("sticker_updated",{type:"faved",faved:!t,document:s}),this.apiManager.invokeApi("messages.faveSticker",{id:Kt(s),unfave:t}).then((()=>{t&&this.onStickersUpdated("faved",!0)}))}))}toggleStickerSet(e){return Sa(this,void 0,void 0,(function*(){if((e=this.storage.getFromCache(e.id).set).installed_date){if(yield this.apiManager.invokeApi("messages.uninstallStickerSet",{stickerset:this.getStickerSetInput(e)}))return delete e.installed_date,this.rootScope.dispatchEvent("stickers_deleted",e),this.storage.delete(e.id,!0),!0}else if(yield this.apiManager.invokeApi("messages.installStickerSet",{stickerset:this.getStickerSetInput(e),archived:!1}))return e.installed_date=(0,te.Z)(!0),this.rootScope.dispatchEvent("stickers_installed",e),!0;return!1}))}toggleStickerSets(e){return Promise.all(e.map((e=>this.toggleStickerSet(e))))}searchStickerSets(e,t=!0){return Sa(this,void 0,void 0,(function*(){const a=t?1:0,s=yield this.apiManager.invokeApiHashable({method:"messages.searchStickerSets",params:{flags:a,exclude_featured:t||void 0,q:e},processResult:e=>((0,ue.Z)(e),(0,ne.Z)(e.sets,((e,t,a)=>{e.set.pFlags.videos&&!i().IS_WEBM_SUPPORTED&&a.splice(t,1)})),e.sets.forEach((e=>{this.saveStickerSet({set:e.set,documents:[],packs:[],keywords:[]},e.set.id)})),e)}),n=[],r=this.storage.getCache();for(const t in r){const{set:a}=r[t];a.title.toLowerCase().includes(e.toLowerCase())&&!s.sets.find((e=>e.set.id===a.id))&&n.push({_:"stickerSetCovered",set:a,cover:null})}return s.sets.concat(n)}))}getAllStickers(){return this.apiManager.invokeApiHashable({method:"messages.getAllStickers",processResult:this.processAllStickersResult})}getEmojiStickers(){return this.apiManager.invokeApiHashable({method:"messages.getEmojiStickers",processResult:this.processAllStickersResult})}preloadStickerSets(){return this.getAllStickers().then((e=>Promise.all(e.sets.map((e=>this.getStickerSet(e,{useCache:!0}))))))}getStickersByEmoticon(e,t=!0){return e=(0,bt.Z)(e),this.getStickersByEmoticonsPromises[e]?this.getStickersByEmoticonsPromises[e]:this.getStickersByEmoticonsPromises[e]=Promise.all([this.apiManager.invokeApiHashable({method:"messages.getStickers",params:{emoticon:e},processResult:e=>e}),t?this.preloadStickerSets():[],t?this.getRecentStickers():void 0]).then((([t,a,s])=>{const n=t.stickers.map((e=>this.appDocsManager.saveDoc(e))),r=[],o=[],p=t=>{for(const a of t)if((0,bt.Z)(a.emoticon).includes(e))for(const e of a.documents){const t=this.appDocsManager.getDoc(e);(t.animated?r:o).push(t)}};if(s){p(s.packs);const e=s.stickers;[r,o].forEach((t=>{t.sort(((t,a)=>e.indexOf(t)-e.indexOf(a)))}))}for(const e of a)p(e.packs);const d=[...new Set(r.concat(o,n))];return(0,ne.Z)(d,((e,t,a)=>{(3===e.sticker&&!i().IS_WEBM_SUPPORTED||!this.rootScope.premium&&(0,zt.Z)(e))&&a.splice(t,1)})),d}))}clearRecentStickers(){return this.recentStickers&&(this.recentStickers.length=0,this.onStickersUpdated("recent",!1)),this.apiManager.invokeApi("messages.clearRecentStickers")}}var ka=a(467),Aa=a(8493);class Ua extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{if(e)this.users={},this.usernames={};else for(const e in this.users){if(!e)continue;const t=e.toPeerId();if(!this.peersStorage.isPeerNeeded(t)){const t=this.users[e];this.modifyUsernamesCache(t,!1),this.storage.delete(e),delete this.users[e]}}this.getTopPeersPromises={},this.contactsIndex=this.createSearchIndex(),this.contactsFillPromise=void 0,this.contactsList=new Set,this.updatedContactsList=!1},this.updateUsersStatuses=()=>{const e=(0,te.Z)(!0);for(const t in this.users){const a=this.users[t];this.updateUserStatus(a,e)}}}after(){return this.clear(!0),setInterval(this.updateUsersStatuses,6e4),this.rootScope.addEventListener("state_synchronized",this.updateUsersStatuses),this.apiUpdatesManager.addMultipleEventsListeners({updateUserStatus:e=>{const t=e.user_id,a=this.users[t];a&&(a.status=e.status,a.status&&("expires"in a.status&&(a.status.expires-=this.timeManager.getServerTimeOffset()),"was_online"in a.status&&(a.status.was_online-=this.timeManager.getServerTimeOffset())),this.rootScope.dispatchEvent("user_update",t),this.setUserToStateIfNeeded(a))},updateUserName:e=>{const t=e.user_id,a=this.users[t];a&&(this.forceUserOnline(t),this.saveApiUser(Object.assign(Object.assign({},a),{first_name:e.first_name,last_name:e.last_name,username:void 0,usernames:e.usernames}),!0))}}),this.rootScope.addEventListener("language_change",(e=>{const t=this.getSelf().id;this.contactsIndex.indexObject(t,this.getUserSearchText(t))})),Promise.all([this.appStateManager.getState(),this.appStoragesManager.loadStorage("users")]).then((([e,{results:t,storage:a}])=>{this.storage=a,this.saveApiUsers(t);for(let a=0,s=t.length;a{if(!this.appPeersManager.isUser(e))return;const t=e.toUserId();this.storage.getFromCache(t)||this.storage.set({[t]:this.getUser(t)})})),this.peersStorage.addEventListener("peerUnneeded",(e=>{if(!this.appPeersManager.isUser(e))return;const t=e.toUserId();this.storage.getFromCache(t)&&this.storage.delete(t)}))}))}get userId(){return this.rootScope.myId.toUserId()}onContactsModified(e){e&&this.appStateManager.pushToState("contactsListCachedTime",(0,te.Z)(!0))}pushRecentSearch(e){return this.appStateManager.getState().then((t=>{const a=t.recentSearch||[];if(a[0]!==e){(0,M.Z)(a,e),a.unshift(e),a.length>20&&(a.length=20),this.appStateManager.pushToState("recentSearch",a);for(const e of a)this.peersStorage.requestPeer(e,"recentSearch")}}))}clearRecentSearch(){return this.appStateManager.getState().then((e=>{const t=e.recentSearch||[];for(const e of t)this.peersStorage.releasePeer(e,"recentSearch");t.length=0,this.appStateManager.pushToState("recentSearch",t)}))}fillContacts(){var e;if(this.contactsFillPromise&&this.updatedContactsList)return{cached:this.contactsFillPromise.isFulfilled,promise:this.contactsFillPromise};this.updatedContactsList=!0;const t=(0,v.Z)();return this.apiManager.invokeApi("contacts.getContacts").then((e=>{"contacts.contacts"===e._&&(this.contactsList.clear(),this.saveApiUsers(e.users),e.contacts.forEach((e=>{this.pushContact(e.user_id)})),this.onContactsModified(!0),this.contactsFillPromise=t),t.resolve(this.contactsList)}),(()=>{this.updatedContactsList=!1})),{cached:null===(e=this.contactsFillPromise)||void 0===e?void 0:e.isFulfilled,promise:this.contactsFillPromise||(this.contactsFillPromise=t)}}resolveUsername(e){"@"===e[0]&&(e=e.slice(1)),e=e.toLowerCase();const t=this.usernames[e];return t?this.appPeersManager.getPeer(t):this.apiManager.invokeApiSingleProcess({method:"contacts.resolveUsername",params:{username:e},processResult:e=>this.processResolvedPeer(e)})}processResolvedPeer(e){return this.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.appPeersManager.getPeer((0,le.Z)(e.peer))}resolvePhone(e){return this.apiManager.invokeApi("contacts.resolvePhone",{phone:e}).then((e=>this.processResolvedPeer(e)))}pushContact(e){this.contactsList.add(e),this.contactsIndex.indexObject(e,this.getUserSearchText(e)),this.peersStorage.requestPeer(e.toPeerId(),"contact")}popContact(e){this.contactsList.delete(e),this.contactsIndex.indexObject(e,""),this.peersStorage.releasePeer(e.toPeerId(),"contact")}getUserSearchText(e){const t=this.users[e];return t?[t.first_name,t.last_name,t.phone,...(0,$t.Z)(t),t.pFlags.self?"Saved Messages":""].filter(Boolean).join(" "):""}getContacts(e,t=!1,a="name"){return this.fillContacts().promise.then((s=>{let n=[...s];if(e){const t=this.contactsIndex.search(e);n=[...n].filter((e=>t.has(e)))}"name"===a?n.sort(((e,t)=>{const a=(this.users[e]||{}).sortName||"",s=(this.users[t]||{}).sortName||"";return a.localeCompare(s)})):"online"===a&&n.sort(((e,t)=>{const a=this.getUserStatusForSort(this.getUser(e).status);return this.getUserStatusForSort(this.getUser(t).status)-a}));const i=this.userId;return(0,M.Z)(n,i),t&&this.testSelfSearch(e)&&n.unshift(i),n}))}getContactsPeerIds(e,t,a,s){return this.getContacts(e,t,a).then((e=>{const t=e.map((e=>e.toPeerId(!1)));return s?t.slice(0,s):t}))}toggleBlock(e,t){return this.apiManager.invokeApiSingle(t?"contacts.block":"contacts.unblock",{id:this.appPeersManager.getInputPeerById(e)}).then((a=>(a&&this.apiUpdatesManager.processLocalUpdate({_:"updatePeerBlocked",peer_id:this.appPeersManager.getOutputPeer(e),blocked:t}),a)))}testSelfSearch(e){const t=this.getSelf(),a=this.createSearchIndex();return a.indexObject(t.id,this.getUserSearchText(t.id)),a.search(e).has(t.id)}createSearchIndex(){return new ae.Z({clearBadChars:!0,ignoreCase:!0,latinize:!0,includeTag:!0})}saveApiUsers(e,t){e.saved||(e.saved=!0,e.forEach((e=>this.saveApiUser(e,t))))}modifyUsernamesCache(e,t){const a=(0,$t.Z)(e);if(!a.length)return;const s=a.map((e=>function(e){return e&&e.toLowerCase()||""}(e)));t?s.forEach((t=>{this.usernames[t]=e.id.toPeerId("user"!==e._)})):s.forEach((e=>{delete this.usernames[e]}))}setUsernameToCache(e,t){return!(t&&t.username===e.username&&(0,Y.Z)(t.usernames,e.usernames)||(this.modifyUsernamesCache(t,!1),this.modifyUsernamesCache(e,!0),0))}saveApiUser(e,t){var a,s,n,i;if(!e||"userEmpty"===e._)return;const r=e.id,o=this.users[r];if(null!==(a=e.pFlags)&&void 0!==a||(e.pFlags={}),e.pFlags.min&&void 0!==o)return;const p=this.setUsernameToCache(e,o);if(o&&void 0!==o.sortName&&o.first_name===e.first_name&&o.last_name===e.last_name)e.sortName=o.sortName;else{const t=e.first_name+(e.last_name?" "+e.last_name:"");e.sortName=e.pFlags.deleted?"":(0,ka.ZP)(t,!1)}if(e.status&&(e.status.expires&&(e.status.expires-=this.timeManager.getServerTimeOffset()),e.status.was_online&&(e.status.was_online-=this.timeManager.getServerTimeOffset())),"userProfilePhotoEmpty"===(null===(s=e.photo)||void 0===s?void 0:s._)&&delete e.photo,void 0===o)this.users[r]=e;else{const t=e.first_name!==o.first_name||e.last_name!==o.last_name||p,a=(null===(n=o.photo)||void 0===n?void 0:n.photo_id)!==(null===(i=e.photo)||void 0===i?void 0:i.photo_id),s=o.pFlags.premium!==e.pFlags.premium||o.pFlags.verified!==e.pFlags.verified||o.pFlags.scam!==e.pFlags.scam||o.pFlags.fake!==e.pFlags.fake,d=!!o.pFlags.contact,f=!!e.pFlags.contact;re(o,e),this.rootScope.dispatchEvent("user_update",r),d!==f&&this.onContactUpdated(r,f,d),a&&this.rootScope.dispatchEvent("avatar_update",{peerId:e.id.toPeerId()}),(t||s)&&this.rootScope.dispatchEvent("peer_title_edit",{peerId:e.id.toPeerId()})}this.checkPremium(e,o),this.setUserToStateIfNeeded(e)}checkPremium(e,t){if(e.pFlags.self){const a=!!e.pFlags.premium;this.rootScope.premium!==a&&this.rootScope.dispatchEvent("premium_toggle_private",{isNew:!t,isPremium:a})}}setUserToStateIfNeeded(e){this.peersStorage.isPeerNeeded(e.id.toPeerId())&&this.storage.set({[e.id]:e})}isUserOnlineVisible(e){return this.getUserStatusForSort(e)>3}getUserStatusForSort(e){if("object"!=typeof e){const t=this.getUser(e);e=null==t?void 0:t.status}if(e){const t="userStatusOnline"===e._?e.expires:"userStatusOffline"===e._?e.was_online:0;if(t)return t;switch(e._){case"userStatusRecently":return 3;case"userStatusLastWeek":return 2;case"userStatusLastMonth":return 1}}return 0}getUser(e){return(0,fe.Z)(e)?e:this.users[e]}getUserStatus(e){return this.isRegularUser(e)&&!this.users[e].pFlags.self&&this.users[e].status}getUserPhone(e){return t=this,a=void 0,n=function*(){const t=this.getUser(e);if(!(null==t?void 0:t.phone))return;const a=yield this.apiManager.getAppConfig();return{phone:t.phone,isAnonymous:a.fragment_prefixes.some((e=>t.phone.startsWith(e)))}},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}getSelf(){return this.getUser(this.userId)}isBot(e){return this.users[e]&&!!this.users[e].pFlags.bot}isAttachMenuBot(e){return this.isBot(e)&&!!this.users[e].pFlags.bot_attach_menu}isContact(e){return this.contactsList.has(e)||!(!this.users[e]||!this.users[e].pFlags.contact)}isRegularUser(e){const t=this.users[e];return t&&!this.isBot(e)&&!t.pFlags.deleted&&!t.pFlags.support}isNonContactUser(e){return this.isRegularUser(e)&&!this.isContact(e)&&e!==this.userId}hasUser(e,t){const a=this.users[e];return(0,fe.Z)(a)&&(t||!a.pFlags.min)}getUserString(e){const t=this.getUser(e);return"u"+e+(t.access_hash?"_"+t.access_hash:"")}getUserInput(e){const t=this.getUser(e);return t.pFlags&&t.pFlags.self?{_:"inputUserSelf"}:{_:"inputUser",user_id:e,access_hash:t.access_hash}}getUserInputPeer(e){return{_:"inputPeerUser",user_id:e,access_hash:this.getUser(e).access_hash}}getContactMediaInput(e){const t=this.getUser(e);return{_:"inputMediaContact",first_name:t.first_name,last_name:t.last_name,phone_number:t.phone,vcard:"",user_id:e}}updateUserStatus(e,t=(0,te.Z)(!0)){e.status&&"userStatusOnline"===e.status._&&e.status.expires=60)return}else if(this.apiUpdatesManager.updatesState.syncLoading)return;const s=this.getUser(e);!(null==s?void 0:s.status)||"userStatusOnline"===s.status._||"userStatusEmpty"===s.status._||s.pFlags.support||s.pFlags.deleted||(s.status={_:"userStatusOnline",expires:a+60},this.rootScope.dispatchEvent("user_update",e),this.setUserToStateIfNeeded(s))}importContact(e,t,a){return this.importContacts([{first_name:e,last_name:t,phones:[a]}]).then((e=>{if(!e.length){const e=new Error;throw e.type="NO_USER",e}return e[0]}))}importContacts(e){const t=[];for(let a=0;a(this.saveApiUsers(e.users),e.imported.map((e=>(this.onContactUpdated(e.user_id,!0),e.user_id))))))}getTopPeers(e){return this.getTopPeersPromises[e]?this.getTopPeersPromises[e]:this.getTopPeersPromises[e]=this.appStateManager.getState().then((t=>{const a=t.topPeersCache[e];return a&&a.cachedTime+864e5>Date.now()&&a.peers?a.peers:this.apiManager.invokeApi("contacts.getTopPeers",{[e]:!0,offset:0,limit:15,hash:"0"}).then((a=>{let s=[];return"contacts.topPeers"===a._&&(this.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),a.categories.length&&(s=a.categories[0].peers.map((e=>{const t=(0,le.Z)(e.peer);return this.peersStorage.requestPeer(t,"topPeer"),{id:t,rating:e.rating}})))),t.topPeersCache[e]={peers:s,cachedTime:Date.now()},this.appStateManager.pushToState("topPeersCache",t.topPeersCache),s}))}))}getBlocked(e=0,t=0){return this.apiManager.invokeApiSingle("contacts.getBlocked",{offset:e,limit:t}).then((e=>(this.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),{count:"contacts.blocked"===e._?e.users.length+e.chats.length:e.count,peerIds:e.users.map((e=>e.id.toPeerId())).concat(e.chats.map((e=>e.id.toPeerId(!0))))})))}getLocated(e,t,a,s=!1,n=0){const i={_:"inputGeoPoint",lat:e,long:t,accuracy_radius:a};return this.apiManager.invokeApi("contacts.getLocated",{geo_point:i,background:s}).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e)))}searchContacts(e,t=20){const a=(0,Nt.Z)(e);if(a.length&&a[0].length===e.trim().length&&"messageEntityUrl"===a[0]._)try{const t=new URL(qe(e).url).pathname.slice(1);t&&(e=t)}catch(e){}return this.apiManager.invokeApiCacheable("contacts.search",{q:e,limit:t},{cacheSeconds:60}).then((e=>(this.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),{my_results:(0,we.Z)(e.my_results.map((e=>(0,le.Z)(e)))),results:e.results.map((e=>(0,le.Z)(e)))})))}onContactUpdated(e,t,a=this.isContact(e)){t!==a&&(t?this.pushContact(e):this.popContact(e),this.onContactsModified(),this.rootScope.dispatchEvent("contacts_update",e))}updateUsername(e){return this.apiManager.invokeApi("account.updateUsername",{username:e}).then((e=>{this.saveApiUser(e)}))}setUserStatus(e,t){if(this.isBot(e))return;const a=this.users[e];if(a){const s=t?{_:"userStatusOffline",was_online:(0,te.Z)(!0)}:{_:"userStatusOnline",expires:(0,te.Z)(!0)+50};a.status=s,this.rootScope.dispatchEvent("user_update",e),this.setUserToStateIfNeeded(a)}}updateMyOnlineStatus(e){return this.setUserStatus(this.getSelf().id,e),this.apiManager.invokeApiSingle("account.updateStatus",{offline:e})}addContact(e,t,a,s,n){return this.apiManager.invokeApi("contacts.addContact",{id:this.getUserInput(e),first_name:t,last_name:a,phone:s,add_phone_privacy_exception:n}).then((t=>{this.apiUpdatesManager.processUpdateMessage(t,{override:!0}),this.onContactUpdated(e,!0)}))}deleteContacts(e){return this.apiManager.invokeApi("contacts.deleteContacts",{id:e.map((e=>this.getUserInput(e)))}).then((t=>{this.apiUpdatesManager.processUpdateMessage(t,{override:!0}),e.forEach((e=>{this.onContactUpdated(e,!1)}))}))}checkUsername(e){return this.apiManager.invokeApi("account.checkUsername",{username:e})}toggleUsername(e,t){return this.apiManager.invokeApi("account.toggleUsername",{username:e,active:t})}reorderUsernames(e){return this.apiManager.invokeApi("account.reorderUsernames",{order:e})}canSendToUser(e){return(0,Aa.Z)(this.getUser(e))}}const Da=new Set(["photo","video","gif","document"]);class Ea extends G{constructor(){super(...arguments),this.webpages={},this.pendingWebPages={}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateWebPage:e=>{this.saveWebPage(e.webpage)}})}saveWebPage(e,t,a){var s,n;if("webPageNotModified"===e._||"webPageEmpty"===e._)return;const{id:i}=e,r=this.webpages[i],o=r&&r._===e._&&r.hash==r.hash;if("webPage"===e._){"photo"===(null===(s=e.photo)||void 0===s?void 0:s._)?e.photo=this.appPhotosManager.savePhoto(e.photo,a):delete e.photo,"document"===(null===(n=e.document)||void 0===n?void 0:n._)?e.document=this.appDocsManager.saveDoc(e.document,a):("document"===e.type&&delete e.type,delete e.document);const t=e.site_name,i=e.title||e.author||t||"";t&&i===t&&delete e.site_name,Da.has(e.type)||e.description||!e.photo||(e.type="photo")}let p=this.pendingWebPages[i];if(t&&(p||(p=this.pendingWebPages[i]=new Set),p.add(t)),void 0===r?this.webpages[i]=e:re(r,e),!t&&void 0!==p&&o){const e=[];p.forEach((t=>{const[a,s,n]=t.split("_");e.push({peerId:a.toPeerId(),mid:+s,isScheduled:!!n})})),this.rootScope.dispatchEvent("webpage_updated",{id:i,msgs:e})}return e}getMessageKeyForPendingWebPage(e,t,a){return e+"_"+t+(a?"_s":"")}deleteWebPageFromPending(e,t){const a=e.id;if(!a)return;const s=this.pendingWebPages[a];s&&s.has(t)&&(s.delete(t),s.size||delete this.pendingWebPages[a])}getCachedWebPage(e){return this.webpages[e]}getWebPage(e){return this.apiManager.invokeApiHashable({method:"messages.getWebPage",processResult:e=>this.saveWebPage(e),params:{url:e}})}}var Ta=a(5936),Fa=a(3019);function Ra(e){return(0,Fa.Z)(e,"readAsArrayBuffer")}var xa=a(1243),Ba=a(7086);function Va(e){return encodeURIComponent(e).replace(/['()]/g,escape).replace(/\*/g,"%2A")}class Oa{constructor(e,t){this.serviceMessagePort=e,this.downloadId=t,this.serviceMessagePort=Ks()}write(e,t){return a=this,s=void 0,i=function*(){return this.serviceMessagePort.invoke("downloadChunk",{id:this.downloadId,chunk:e})},new((n=void 0)||(n=Promise))((function(e,t){function r(e){try{p(i.next(e))}catch(e){t(e)}}function o(e){try{p(i.throw(e))}catch(e){t(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof n?a:new n((function(e){e(a)}))).then(r,o)}p((i=i.apply(a,s||[])).next())}));var a,s,n,i}finalize(e){return this.serviceMessagePort.invoke("downloadFinalize",this.downloadId).then((()=>{}))}}class La{getFile(e){return Promise.reject((0,X.Z)("NO_ENTRY_FOUND"))}prepareWriting({fileName:e,downloadId:t,size:a}){const s=Object.assign({"Content-Type":"application/octet-stream; charset=utf-8","Content-Disposition":"attachment; filename*=UTF-8''"+Va(e)},a?{"Content-Length":a}:{}),n=Ks(),i=n.invoke("download",{headers:s,id:t}),r=(0,v.Z)();return r.cancel=()=>{r.reject((0,X.Z)("DOWNLOAD_CANCELED"))},r.catch((()=>{Ks().invoke("downloadCancel",t)})),i.then(r.resolve,r.reject),{deferred:r,getWriter:()=>new Oa(n,t)}}}var Na=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Za=131072,ja=new Set(["DOWNLOAD_CANCELED","UPLOAD_CANCELED","UNKNOWN","NO_NEW_CONTEXT"]);class qa extends G{constructor(){super(...arguments),this.cacheStorage=new Ta.Z("cachedFiles"),this.downloadStorage=new La,this.downloadPromises={},this.uploadPromises={},this.downloadPulls={},this.downloadActives={},this.refreshReferencePromises={},this.log=(0,S.kg)("AFM",S.v9.Error|S.v9.Log),this.tempId=0,this.queueId=0,this.debug=b.Z.debug,this.maxUploadParts=4e3,this.maxDownloadParts=8e3,this.uncompressTGS=(e,t)=>this.cryptoWorker.invokeCrypto("gzipUncompress",e.slice().buffer,!1),this.uncompressTGV=(e,t)=>{const a=e.slice().buffer;return i().IS_FIREFOX?this.cryptoWorker.invokeCrypto("gzipUncompress",a,!0).then((e=>function(e){const t=e.indexOf("/,` width="${n}" height="${i}">`).replace(/[^\x00-\x7F]/g,"")}(e))).then((e=>(new TextEncoder).encode(e))):this.cryptoWorker.invokeCrypto("gzipUncompress",a,!1)},this.convertWebp=(e,t)=>f.Z.getInstance().invoke("convertWebp",{fileName:t,bytes:e}),this.convertOpus=(e,t)=>f.Z.getInstance().invoke("convertOpus",{fileName:t,bytes:e})}after(){setInterval((()=>{for(const e in this.refreshReferencePromises){const{deferred:t}=this.refreshReferencePromises[e];(t.isFulfilled||t.isRejected)&&delete this.refreshReferencePromises[e]}}),18e5),this.rootScope.addEventListener("config",(e=>{this.webFileDcId=e.webfile_dc_id})),this.rootScope.addEventListener("app_config",(e=>{this.maxUploadParts=this.rootScope.premium?e.upload_max_fileparts_premium:e.upload_max_fileparts_default,this.maxDownloadParts=e.upload_max_fileparts_premium}))}downloadRequest(e,t,a,s,n=0){void 0===this.downloadPulls[e]&&(this.downloadPulls[e]=[],this.downloadActives[e]=0);const i=this.downloadPulls[e],r=new Promise(((e,r)=>{i.push({id:t,queueId:n,cb:a,deferred:{resolve:e,reject:r},activeDelta:s})}));return setTimeout((()=>{this.downloadCheck(e)}),0),r}downloadCheck(e){const t=this.downloadPulls[e],a=this.rootScope.premium?224:36;if(this.downloadActives[e]>=a||!(null==t?void 0:t.length))return!1;const s=(0,Pe.Z)(t,(e=>0===e.queueId))||(0,Pe.Z)(t,(e=>e.queueId===this.queueId))||t.shift(),n=s.activeDelta||1;this.downloadActives[e]+=n;const i=s.cb();i.then((()=>{this.downloadActives[e]-=n,this.downloadCheck(e)}),(t=>{(null==t?void 0:t.type)&&ja.has(t.type)||this.log.error("downloadCheck error:",t),this.downloadActives[e]-=n,this.downloadCheck(e)})).finally((()=>{i.then(s.deferred.resolve,s.deferred.reject)}))}setQueueId(e){this.queueId=e}getFileStorage(){return this.cacheStorage}cancelDownload(e){const t=[this.downloadPromises[e],this.uploadPromises[e]].filter(Boolean);let a=!1;for(let e=0,s=t.length;eNa(this,void 0,void 0,(function*(){if(null==r||r(),"url"in t){const e=t.url;if(this.isLocalWebFile(e))return fetch(e).then((e=>e.arrayBuffer())).then((t=>{const a=e.split(".").pop(),s=gt[a]||"application/octet-stream";return{_:"upload.webFile",size:t.byteLength,mime_type:s,file_type:{_:"storage.fileUnknown"},mtime:0,bytes:new Uint8Array(t)}}))}return this.apiManager.invokeApi("upload.getWebFile",{location:t,offset:a,limit:s},{dcId:e,fileDownload:!0})}))),this.getDelta(s),i)}requestFilePart(e,t,a,s,n=0,i=0,r){return this.downloadRequest(e,n,(()=>Na(this,void 0,void 0,(function*(){null==r||r();const n=()=>Na(this,void 0,void 0,(function*(){var i;null==r||r();const o=null===(i=t.file_reference)||void 0===i?void 0:i.slice();return this.apiManager.invokeApi("upload.getFile",{location:t,offset:a,limit:s},{dcId:e,fileDownload:!0}).catch((e=>{if(null==r||r(),"FILE_REFERENCE_EXPIRED"===e.type)return this.refreshReference(t,o).then(n);throw e}))}));(0,ue.Z)(t);const i=t.file_reference;if(i&&!t.checkedReference){t.checkedReference=!0;const e=E(i);if(this.refreshReferencePromises[e])return this.refreshReference(t,i).then(n)}return n()}))),this.getDelta(s),i)}getDelta(e){return e/Za}getLimitPart(e,t){if(!e)return 524288;let a=Za;const s=t?this.maxUploadParts:this.maxDownloadParts,n=t?524288:1048576;for(;e/a>s&&a{a===E(t)&&e.reject((0,X.Z)("REFERENCE_IS_NOT_REFRESHED")),e.resolve(t)}),e.reject)}return s.deferred.then((t=>{e.file_reference=t}))}isDownloading(e){return!!this.downloadPromises[e]}getDownload(e){return this.downloadPromises[e]}getUpload(e){return this.uploadPromises[e]}getConvertMethod(e){let t;return"application/x-tgwallpattern"===e?(t=this.uncompressTGV,e="image/svg+xml"):"image/webp"!==e||i().IS_WEBP_SUPPORTED?"application/x-tgsticker"===e?(t=this.uncompressTGS,e="application/json"):"audio/ogg"!==e||i().IS_OPUS_SUPPORTED||(t=this.convertOpus,e="audio/wav"):(t=this.convertWebp,e="image/png"),{mimeType:e,process:t}}allocateDeferredPromises(e,t,a){const s=[];let n,i=e,r=Promise.resolve();do{n=(0,v.Z)(),s.push({offset:i,writePromise:r,writeDeferred:n}),r=n,i+=a}while(i{if(!(null==e?void 0:e.error))for(const a of I)e&&e!==a||(a.error=t,a.deferred.reject(t))},y="inputWebFileLocation"===i._,_=y&&this.isLocalWebFile(i.url),v=this.tempId++,P=_?s:e.limitPart||this.getLimitPart(s,!1);let b,M,S=m.getFile.bind(m);const I=[],C=s||P,w=(e,t)=>{const{deferred:a}=e,s=u.bind(null,e);a.cancel=()=>a.reject((0,X.Z)("DOWNLOAD_CANCELED")),a.catch((t=>{var a,n;s(t),null===(n=null===(a=e.writer)||void 0===a?void 0:a.truncate)||void 0===n||n.call(a)})).finally((()=>{this.downloadPromises[t]===a&&delete this.downloadPromises[t],delete e.writer})),this.downloadPromises[t]=a,I.push(e)};if(m&&(!g||C<=o.Iw)&&(b=m.prepareWriting(l,C,e.mimeType),w(b,l)),g){let t=e.fileName;if(!t){t=l;const a=ht[e.mimeType];a&&(t+="."+a)}M=g.prepareWriting({fileName:t,downloadId:r,size:C}),w(M,c),b&&M.deferred.catch((e=>b.deferred.reject(e)))}h=null!==(a=null==M?void 0:M.deferred)&&void 0!==a?a:b.deferred,g&&f&&(S=g.getFile.bind(g)),S(l).then((e=>Na(this,void 0,void 0,(function*(){if(k(),M){const t=M.writer=M.getWriter();k();const a=yield function(e){return Ra(e).then((e=>new Uint8Array(e)))}(e);k(),yield t.write(a),k(),M.deferred.resolve(yield t.finalize())}b&&b.deferred.resolve(e)})))).catch((t=>Na(this,void 0,void 0,(function*(){if(e.onlyCache)return void u(null,t);I.forEach((e=>{e.writer=e.getWriter()}));const a=(y?this.requestWebFilePart:this.requestFilePart).bind(this);y&&void 0===this.webFileDcId&&!_&&(yield this.apiManager.getConfig(),k());const r=this.allocateDeferredPromises(0,s,P),p={done:0,offset:0,total:s,fileName:c},d=()=>{try{k(),p.done=g,this.rootScope.dispatchEvent("download_progress",p)}catch(e){}},m=(0,sa.Z)(d,50,!0);let g=0;const h=()=>Na(this,void 0,void 0,(function*(){const{offset:t,writePromise:p,writeDeferred:y}=r.shift();try{k();performance.now();const u=yield a(n,i,t,P,v,e.queueId,k),_=(performance.now(),u.bytes);r.length&&h();const b=_.byteLength;this.debug&&this.log("downloadFile requestFilePart result:",c,u);const M=t+P>=s||!b;if(b){g+=b,M?d():m();performance.now();yield p,k(),performance.now(),performance.now(),yield Promise.all(I.map((({writer:e})=>null==e?void 0:e.write(_,t)))),k()}if(M&&(!s||g{var t;return null===(t=null==e?void 0:e.trim)||void 0===t?void 0:t.call(e,g)})),M&&f){const e=I.filter((({writer:e})=>(null==e?void 0:e.getParts)&&e.replaceParts)).map((({writer:e})=>Na(this,void 0,void 0,(function*(){const t=e.getParts(),a=yield f(t,l);e.replaceParts(a)}))));yield Promise.all(e),k()}if(y.resolve(),M){const e=g<=o.Iw;I.forEach((t=>{const{deferred:a,writer:s}=t;if(a.isFulfilled||a.isRejected||!s)return;const n=s.finalize(e);a.resolve(n)}))}}catch(e){u(null,e)}}));for(let e=0,t=Math.min(1/0,r.length);e{if(I.reduce(((e,t)=>e+ +!!t.error),0)===I.length)throw I[0].error};return h}downloadMedia(e){let{media:t,thumb:a}=e;const s="photo"===t._;if(s&&!a)return Promise.reject("preloadPhoto photoEmpty!");const n="document"===t._;n?t=this.appDocsManager.getDoc(t.id):s&&(t=this.appPhotosManager.getPhoto(t.id));const{fileName:i,downloadOptions:r}=(0,xa.Z)(e);let o=this.getDownload(i);return o||(o=this.download(r),n&&!a&&(this.rootScope.dispatchEvent("document_downloading",t.id),o.then((()=>{this.rootScope.dispatchEvent("document_downloaded",t.id)})).catch(qt.Z))),o}downloadMediaURL(e){const{media:t,thumb:a}=e;let s=this.thumbsStorage.getCacheContext(t,null==a?void 0:a.type);return(!a||s.downloaded>=("size"in a?a.size:0))&&s.url?Promise.resolve(s.url):this.downloadMedia(e).then((e=>{if(!s.downloaded||s.downloaded=10485760,n=this.getLimitPart(a,!0),i=this.getDelta(n),r=Math.ceil(a/n),o=(0,Ee.a)(),p={_:s?"inputFileBig":"inputFile",id:o,parts:r,name:t,md5_checksum:""},d=(0,v.Z)();if(r>this.maxUploadParts)return d.reject((0,X.Z)("FILE_TOO_BIG")),d;let f=!1,c=!1,l=e=>{"UPLOAD_CANCELED"!==(null==e?void 0:e.type)&&this.log.error("Up Error",e),d.reject(e),f=!0,l=qt.Z};const m=s?"upload.saveBigFilePart":"upload.saveFilePart",g=this.tempId++,h=this,u=function*(){let u=0,y=0;for(let v=0;vNa(this,void 0,void 0,(function*(){_();const i=e.slice(v,v+n),g=yield Ra(i);return _(),h.debug&&h.log("Upload file part, isBig:",s,P,g.byteLength,new Uint8Array(g).length,new Uint8Array(g).slice().length),h.apiManager.invokeApi(m,{file_id:o,file_part:P,file_total_parts:r,bytes:g},{fileUpload:!0}).then((()=>{if(f)return;++y;const e={done:y*n,offset:v,total:a,fileName:t};d.notify(e),y>=r&&(d.resolve(p),c=!0)}),l)}))),i).catch(l)}}(),y=()=>{if(f)return;const e=u.next();e.done||f||e.value.then(y)};for(let e=0,t=Math.min(1/0,r);e{if(f)throw(0,X.Z)("UPLOAD_CANCELED")};return d.cancel=()=>{f||c||(f=!0,l((0,X.Z)("UPLOAD_CANCELED")))},d.notify=e=>{this.rootScope.dispatchEvent("download_progress",e)},d.finally((()=>{this.uploadPromises[t]===d&&delete this.uploadPromises[t]})),this.uploadPromises[t]=d}}var Ga=a(7487),Ha=a(6666),Wa=a(3306);class za extends G{constructor(){super(),this.hashes={},this.apiPromisesSingleProcess={},this.apiPromisesSingle={},this.apiPromisesCacheable={},this.afterMessageIdTemp=0}setUser(e){return this.setUserAuth(e.id)}invokeApiAfter(e,t={},a={}){let s=a;return s.prepareTempMessageId=""+ ++this.afterMessageIdTemp,s=Object.assign({},a),a.messageId=s.prepareTempMessageId,this.invokeApi(e,t,s)}invokeApiHashable(e){var t,a;null!==(t=e.params)&&void 0!==t||(e.params={}),null!==(a=e.options)&&void 0!==a||(e.options={});const{params:s,options:n,method:i,overwrite:r}=e,o=JSON.stringify(s);let p;return this.hashes[i]&&(p=this.hashes[i][o],p&&(r?(delete this.hashes[i][o],p=void 0):s.hash=p.hash)),this.invokeApiSingleProcess({method:i,processResult:t=>{if(t._.includes("NotModified"))return p.result;if(t.hash){const e=t.hash;this.hashes[i]||(this.hashes[i]={}),p=this.hashes[i][o]={hash:e,result:t}}if(e.processResult){const a=e.processResult(t);return p?p.result=a:a}return t},params:s,options:n})}invokeApiSingle(e,t={},a={}){const s=e+"-"+JSON.stringify(t),n=this.apiPromisesSingle;return n[s]?n[s]:n[s]=this.invokeApi(e,t,a).finally((()=>{delete n[s]}))}invokeApiSingleProcess(e){var t,a,s;null!==(t=e.params)&&void 0!==t||(e.params={}),null!==(a=e.options)&&void 0!==a||(e.options={});const{method:n,processResult:i,processError:r,params:o,options:p}=e,d=this.apiPromisesSingleProcess,f=p.cacheKey||JSON.stringify(o),c=null!==(s=d[n])&&void 0!==s?s:d[n]=new Map,l=c.get(f);if(l)return l;const m=()=>{const e=c.get(f);return e===h?void 0:e},g=this.invokeApi(n,o,p).then((e=>m()||i(e)),(e=>{const t=m();if(t)return t;if(!r)throw e;return r(e)})),h=g.finally((()=>{c.get(f)===h&&(c.delete(f),c.size||delete d[n])}));return c.set(f,h),h}invokeApiCacheable(e,t={},a={}){var s;const n=null!==(s=this.apiPromisesCacheable[e])&&void 0!==s?s:this.apiPromisesCacheable[e]={},i=JSON.stringify(t),r=n[i];if(r&&(!a.override||!r.fulfilled))return r.promise;let o;a.override&&(r&&r.timeout&&(clearTimeout(r.timeout),delete r.timeout),delete a.override),a.cacheSeconds&&(o=T.Z.setTimeout((()=>{delete n[i]}),1e3*a.cacheSeconds),delete a.cacheSeconds);const p=this.invokeApi(e,t,a);return n[i]={timestamp:Date.now(),fulfilled:!1,timeout:o,promise:p,params:t},p}clearCache(e,t){const a=this.apiPromisesCacheable[e];if(a)for(const e in a){const s=a[e];try{t(s.params)&&(s.timeout&&clearTimeout(s.timeout),delete a[e])}catch(e){}}}getConfig(e){return this.config&&!e?this.config:this.invokeApiSingleProcess({method:"help.getConfig",params:{},processResult:e=>(this.config=e,this.rootScope.dispatchEvent("config",e),e),options:{overwrite:e}})}getAppConfig(e){return this.appConfig&&!e?this.appConfig:this.invokeApiSingleProcess({method:"help.getAppConfig",params:{},processResult:e=>{var t;return this.appConfig=e,(0,ra.Ki)(null!==(t=e.ignore_restriction_reasons)&&void 0!==t?t:[]),this.rootScope.dispatchEvent("app_config",e),e},options:{overwrite:e}})}getLimit(e,t){return(0,q.Z)(this.getAppConfig(),(a=>{null!=t||(t=this.rootScope.premium);const s={pin:["dialogs_pinned_limit_default","dialogs_pinned_limit_premium"],folderPin:["dialogs_folder_pinned_limit_default","dialogs_folder_pinned_limit_premium"],folders:["dialog_filters_limit_default","dialog_filters_limit_premium"],favedStickers:["stickers_faved_limit_default","stickers_faved_limit_premium"],reactions:["reactions_user_max_default","reactions_user_max_premium"],bio:["about_length_limit_default","about_length_limit_premium"],topicPin:"topics_pinned_limit",caption:["caption_length_limit_default","caption_length_limit_premium"]}[e];return a[Array.isArray(s)?s[t?1:0]:s]}))}}var Ka=a(8453),Ja=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class $a extends za{constructor(){super(),this.log=(0,S.kg)("API"),this.cachedNetworkers={},this.cachedExportPromise={},this.gettingNetworkers={},this.baseDcId=0,this.afterMessageTempIds={},this.transportType=b.Z.transport,Z.addEventListener("transport",(e=>{this.changeTransportType(e)})),setInterval((()=>{this.getAppConfig(!0)}),997e4)}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateConfig:()=>{this.getConfig(!0),this.getAppConfig(!0)}}),this.rootScope.addEventListener("user_auth",(()=>{this.config&&this.apiUpdatesManager.processLocalUpdate({_:"updateConfig"})})),this.rootScope.addEventListener("premium_toggle",(e=>{this.iterateNetworkers((({networker:t,connectionType:a,dcId:s,transportType:n})=>{if("client"===a||"websocket"!==n)return;const i=t.transport;if(i){if(i.connection){const t=V(s,a,e);i.changeUrl(t)}}else this.log.error("wow what, no transport?",t)}))}))}getTransportType(e){return this.transportType}iterateNetworkers(e){for(const t in this.cachedNetworkers){const a=this.cachedNetworkers[t];for(const s in a){const n=a[s];for(const a in n)n[a].forEach(((n,i,r)=>{e({networker:n,dcId:+a,connectionType:s,transportType:t,index:i,array:r})}))}}}chooseServer(e,t,a){return this.dcConfigurator.chooseServer(e,t,a,"client"===t,this.rootScope.premium)}changeTransportType(e){const t=this.transportType;if(t===e)return;this.log("changing transport from",t,"to",e);const a=this.cachedNetworkers[t],s=this.cachedNetworkers[e];this.cachedNetworkers[e]=a,this.cachedNetworkers[t]=s,this.transportType=e;for(const a in this.gettingNetworkers){const s=this.gettingNetworkers[a];delete this.gettingNetworkers[a];const n=a.replace(t,e);this.gettingNetworkers[n]=s,this.log("changed networker getKey from",a,"to",n)}this.iterateNetworkers((e=>{const t=this.getTransportType(e.connectionType),a=this.chooseServer(e.dcId,e.connectionType,t);this.changeNetworkerTransport(e.networker,a)}))}getBaseDcId(){return Ja(this,void 0,void 0,(function*(){if(this.baseDcId)return this.baseDcId;const e=yield Ga.Z.get("dc");return this.baseDcId||(e?this.baseDcId=e:this.setBaseDcId(_.Z.baseDcId)),this.baseDcId}))}setUserAuth(e){return Ja(this,void 0,void 0,(function*(){if("string"!=typeof e&&"number"!=typeof e||(e={dcID:0,date:(0,te.Z)(!0),id:e.toPeerId(!1)}),this.rootScope.dispatchEvent("user_auth",e),!e.dcID){const t=yield this.getBaseDcId();e.dcID=t}Ga.Z.set({user_auth:e})}))}setBaseDcId(e){const t=this.baseDcId;t&&this.getNetworker(t).then((e=>{this.setOnDrainIfNeeded(e)})),this.baseDcId=e,Ga.Z.set({dc:this.baseDcId})}logOut(){return Ja(this,void 0,void 0,(function*(){if(this.loggingOut)return;this.loggingOut=!0;const e=[];for(let t=1;t<=5;t++)e.push("dc"+t+"_auth_key");const t=yield Promise.all(e.map((e=>Ga.Z.get(e)))),a=[];for(let e=0;eJa(this,void 0,void 0,(function*(){this.baseDcId=void 0,yield(0,Ka.Z)(!1,!0),Ha.C.closeDatabases(),this.rootScope.dispatchEvent("logging_out")}));return setTimeout(s,1e3),Promise.all(a).catch((e=>{e.handled=!0})).finally(s)}))}generateNetworkerGetKey(e,t,a){return[e,t,a].join("-")}getNetworker(e,t={}){const a=t.fileDownload?"download":t.fileUpload?"upload":"client",n=this.getTransportType(a);this.cachedNetworkers[n]||(this.cachedNetworkers[n]={client:{},download:{},upload:{}});const i=this.cachedNetworkers[n][a];e in i||(i[e]=[]);const r=i[e],o="client"===a||"https"===n?1:this.rootScope.premium?6:3;if(r.length>=o){let e=o-1,t=!1;for(;e>=0;--e)if(r[e].isOnline){t=!0;break}const a=r.splice(t?e:o-1,1)[0];return r.unshift(a),Promise.resolve(a)}let p=this.generateNetworkerGetKey(e,n,a);if(this.gettingNetworkers[p])return this.gettingNetworkers[p];const d=`dc${e}_auth_key`,f=`dc${e}_server_salt`;let c=this.chooseServer(e,a,n);return this.gettingNetworkers[p]=Promise.all([d,f].map((e=>Ga.Z.get(e)))).then((([i,o])=>Ja(this,void 0,void 0,(function*(){let l,m;if(i&&512===i.length){o&&16===o.length||(o="AAAAAAAAAAAAAAAA");const a=(0,Wa.Z)(i),n=(yield s.Z.invokeCrypto("sha1",a)).slice(-8),r=(0,Wa.Z)(o);l=this.networkerFactory.getNetworker(e,a,n,r,t)}else try{const a=yield this.authorizer.auth(e);Ga.Z.set({[d]:E(a.authKey),[f]:E(a.serverSalt)}),l=this.networkerFactory.getNetworker(e,a.authKey,a.authKeyId,a.serverSalt,t)}catch(e){m=e}const g=this.getTransportType(a);if(g!==n&&(p=this.generateNetworkerGetKey(e,g,a),c.destroy(),O.removeTransport(this.dcConfigurator.chosenServers,c),l&&(c=this.chooseServer(e,a,g)),this.log("transport has been changed during authorization from",n,"to",g)),delete this.gettingNetworkers[p],m)throw this.log("get networker error",m,m.stack),m;return this.changeNetworkerTransport(l,c),r.unshift(l),this.setOnDrainIfNeeded(l),l}))))}getNetworkerVoid(e){return this.getNetworker(e).then(qt.Z,qt.Z)}changeNetworkerTransport(e,t){const a=e.transport;a&&O.removeTransport(this.dcConfigurator.chosenServers,a),e.changeTransport(t)}onNetworkerDrain(e){this.log("networker drain",e.dcId),e.onDrain=void 0,this.changeNetworkerTransport(e),e.destroy(),this.networkerFactory.removeNetworker(e),O.removeTransport(this.cachedNetworkers,e)}setOnDrainIfNeeded(e){e.onDrain||(e.isFileNetworker?Promise.resolve(!0):this.getBaseDcId().then((t=>e.dcId!==t))).then((t=>{e.onDrain||t&&(e.onDrain=()=>this.onNetworkerDrain(e),e.setDrainTimeout())}))}setUpdatesProcessor(e){this.updatesProcessor=e,this.networkerFactory.setUpdatesProcessor(e)}invokeApi(e,t={},a={}){const s=(0,v.Z)();let n,i,{afterMessageId:r,prepareTempMessageId:o}=a;if(o&&s.then((()=>{delete this.afterMessageTempIds[o]})),d.GO){const n=Date.now(),r=T.Z.setInterval((()=>{i&&i.isStopped()||this.log.error("Request is still processing:",e,t,a,"time:",(Date.now()-n)/1e3)}),5e3);s.catch(qt.Z).finally((()=>{clearInterval(r)}))}const p=(new Error).stack||"empty stack",f=()=>{if(r){const e=this.afterMessageTempIds[r];e&&(a.afterMessageId=e.messageId)}const p=i.wrapApiCall(e,t,a);return o&&(this.afterMessageTempIds[o]={messageId:a.messageId,promise:s}),p.catch((s=>{var i;if("FILE_REFERENCE_EXPIRED"!==s.type&&this.log.error("Error",s.code,s.type,this.baseDcId,n,e,t),401===s.code&&this.baseDcId===n)throw"SESSION_PASSWORD_NEEDED"!==s.type&&(Ga.Z.delete("dc"),Ga.Z.delete("user_auth")),s;if(401===s.code&&this.baseDcId&&n!==this.baseDcId){if(void 0===this.cachedExportPromise[n]){const e=new Promise(((e,t)=>{this.invokeApi("auth.exportAuthorization",{dc_id:n},{noErrorBox:!0}).then((a=>{this.invokeApi("auth.importAuthorization",{id:a.id,bytes:a.bytes},{dcId:n,noErrorBox:!0}).then(e,t)}),t)}));this.cachedExportPromise[n]=e}return this.cachedExportPromise[n].then((()=>f()))}if(303!==s.code){if(400===s.code&&0===s.type.indexOf("FILE_MIGRATE")){const i=+s.type.match(/^(FILE_MIGRATE_)(\d+)/)[2];if(i!==n)return a.dcId=i,this.invokeApi(e,t,a);throw s}if(400===s.code&&"CONNECTION_NOT_INITED"===s.type)return this.networkerFactory.unsetConnectionInited(),f();if(a.rawError||420!==s.code){if(!a.rawError&&["MSG_WAIT_FAILED","MSG_WAIT_TIMEOUT"].includes(s.type)){const e=this.afterMessageTempIds[r];return r=void 0,delete a.afterMessageId,e?e.promise.then((()=>f())):f()}if(a.rawError||500!==s.code){if("UNKNOWN"===s.type||"MTPROTO_CLUSTER_INVALID"===s.type)return(0,P.Z)(1e3).then((()=>f()));throw s}{const e=Date.now();if(a.stopTime&&e>=a.stopTime)throw s;return a.waitTime=a.waitTime?Math.min(60,1.5*a.waitTime):1,(0,P.Z)(1e3*a.waitTime).then((()=>f()))}}{const e=+s.type.match(/^FLOOD_WAIT_(\d+)/)[1]||1;if(e>(null!==(i=a.floodMaxTimeout)&&void 0!==i?i:60)&&!a.prepareTempMessageId)throw s;return(0,P.Z)(1e3*e).then((()=>f()))}}{const i=+s.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2];if(i!==n)return a.dcId?a.dcId=i:this.setBaseDcId(i),this.invokeApi(e,t,a)}}))};let c;return c=(n=a.dcId||this.baseDcId)?this.getNetworker(n,a):this.getBaseDcId().then((e=>this.getNetworker(n=e,a))),c.then((e=>{i=e;const t=f();return i.attachPromise(s,a),t})).then(s.resolve).catch((t=>Ja(this,void 0,void 0,(function*(){if(t?(0,fe.Z)(t)||(t={message:t}):t={type:"ERROR_EMPTY"},(401===t.code&&"SESSION_REVOKED"===t.type||406===t.code&&"AUTH_KEY_DUPLICATED"===t.type)&&this.logOut(),a.ignoreErrors)throw t;throw 406===t.code&&(t.handled=!0),a.noErrorBox||(t.input=e,t.stack=p||t.originalError&&t.originalError.stack||t.stack||(new Error).stack,setTimeout((()=>{t.handled||(401===t.code&&this.logOut(),t.handled=!0)}),100)),t})))).catch(s.reject),s}}class Qa{constructor(){this.neededPeers=new Map,this.singlePeerMap=new Map,this._constructor(!1)}after(){this.rootScope.addEventListener("user_auth",(()=>{this.requestPeer(this.appPeersManager.peerId,"self")}))}requestPeer(e,t){let a=this.neededPeers.get(e);a&&a.has(t)||(a||(a=new Set,this.neededPeers.set(e,a)),a.add(t),this.dispatchEvent("peerNeeded",e))}releasePeer(e,t){const a=this.neededPeers.get(e);a&&(a.delete(t),a.size||(this.neededPeers.delete(e),this.dispatchEvent("peerUnneeded",e)))}requestPeersForKey(e,t){Array.isArray(e)&&(e=new Set(e));let a=this.singlePeerMap.get(t);if(a){for(const s of a)e.has(s)||(this.releasePeer(s,t),a.delete(s));if(!a.size&&!e.size)return void this.singlePeerMap.delete(t)}if(e.size){a||(a=new Set,this.singlePeerMap.set(t,a));for(const s of e)a.has(s)||(this.requestPeer(s,t),a.add(s))}}isPeerNeeded(e){return this.neededPeers.has(e)}}Ae(Qa,[p.Z,G]);const Ya=Qa,Xa=o.Pt;class es{constructor(){this.thumbsCache={}}getKey(e){var t;return e._+(null!==(t=e.id)&&void 0!==t?t:e.url)}getCacheContext(e,t=Xa){var a,s,n,i;const r=null!==(a=(n=this.thumbsCache)[i=this.getKey(e)])&&void 0!==a?a:n[i]={};return null!==(s=r[t])&&void 0!==s?s:r[t]={downloaded:0,url:"",type:t}}setCacheContextURL(e,t=Xa,a,s=0){const n=this.getCacheContext(e,t);return n.url=a,n.downloaded=s,n}deleteCacheContext(e,t=Xa){const a=this.thumbsCache[this.getKey(e)];a&&delete a[t]}}const ts={MTProto:{constructors:[{id:481674261,predicate:"vector",params:[],type:"Vector t"},{id:85337187,predicate:"resPQ",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"pq",type:"bytes"},{name:"server_public_key_fingerprints",type:"Vector"}],type:"ResPQ"},{id:-1443537003,predicate:"p_q_inner_data_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"}],type:"P_Q_inner_data"},{id:1459478408,predicate:"p_q_inner_data_temp_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"},{name:"expires_in",type:"int"}],type:"P_Q_inner_data"},{id:-790100132,predicate:"server_DH_params_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_answer",type:"bytes"}],type:"Server_DH_Params"},{id:-1249309254,predicate:"server_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"g",type:"int"},{name:"dh_prime",type:"bytes"},{name:"g_a",type:"bytes"},{name:"server_time",type:"int"}],type:"Server_DH_inner_data"},{id:1715713620,predicate:"client_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"retry_id",type:"long"},{name:"g_b",type:"bytes"}],type:"Client_DH_Inner_Data"},{id:1003222836,predicate:"dh_gen_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash1",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1188831161,predicate:"dh_gen_retry",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash2",type:"int128"}],type:"Set_client_DH_params_answer"},{id:-1499615742,predicate:"dh_gen_fail",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash3",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1973679973,predicate:"bind_auth_key_inner",params:[{name:"nonce",type:"long"},{name:"temp_auth_key_id",type:"long"},{name:"perm_auth_key_id",type:"long"},{name:"temp_session_id",type:"long"},{name:"expires_at",type:"int"}],type:"BindAuthKeyInner"},{id:-212046591,predicate:"rpc_result",params:[{name:"req_msg_id",type:"long"},{name:"result",type:"Object"}],type:"RpcResult"},{id:558156313,predicate:"rpc_error",params:[{name:"error_code",type:"int"},{name:"error_message",type:"string"}],type:"RpcError"},{id:1579864942,predicate:"rpc_answer_unknown",params:[],type:"RpcDropAnswer"},{id:-847714938,predicate:"rpc_answer_dropped_running",params:[],type:"RpcDropAnswer"},{id:-1539647305,predicate:"rpc_answer_dropped",params:[{name:"msg_id",type:"long"},{name:"seq_no",type:"int"},{name:"bytes",type:"int"}],type:"RpcDropAnswer"},{id:155834844,predicate:"future_salt",params:[{name:"valid_since",type:"int"},{name:"valid_until",type:"int"},{name:"salt",type:"long"}],type:"FutureSalt"},{id:-1370486635,predicate:"future_salts",params:[{name:"req_msg_id",type:"long"},{name:"now",type:"int"},{name:"salts",type:"vector"}],type:"FutureSalts"},{id:880243653,predicate:"pong",params:[{name:"msg_id",type:"long"},{name:"ping_id",type:"long"}],type:"Pong"},{id:-501201412,predicate:"destroy_session_ok",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:1658015945,predicate:"destroy_session_none",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1631450872,predicate:"new_session_created",params:[{name:"first_msg_id",type:"long"},{name:"unique_id",type:"long"},{name:"server_salt",type:"long"}],type:"NewSession"},{id:1945237724,predicate:"msg_container",params:[{name:"messages",type:"vector<%Message>"}],type:"MessageContainer"},{id:1538843921,predicate:"message",params:[{name:"msg_id",type:"long"},{name:"seqno",type:"int"},{name:"bytes",type:"int"},{name:"body",type:"Object"}],type:"Message"},{id:-530561358,predicate:"msg_copy",params:[{name:"orig_message",type:"Message"}],type:"MessageCopy"},{id:812830625,predicate:"gzip_packed",params:[{name:"packed_data",type:"bytes"}],type:"Object"},{id:1658238041,predicate:"msgs_ack",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsAck"},{id:-1477445615,predicate:"bad_msg_notification",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"}],type:"BadMsgNotification"},{id:-307542917,predicate:"bad_server_salt",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"},{name:"new_server_salt",type:"long"}],type:"BadMsgNotification"},{id:2105940488,predicate:"msg_resend_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgResendReq"},{id:-630588590,predicate:"msgs_state_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsStateReq"},{id:81704317,predicate:"msgs_state_info",params:[{name:"req_msg_id",type:"long"},{name:"info",type:"bytes"}],type:"MsgsStateInfo"},{id:-1933520591,predicate:"msgs_all_info",params:[{name:"msg_ids",type:"Vector"},{name:"info",type:"bytes"}],type:"MsgsAllInfo"},{id:661470918,predicate:"msg_detailed_info",params:[{name:"msg_id",type:"long"},{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-2137147681,predicate:"msg_new_detailed_info",params:[{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-161422892,predicate:"destroy_auth_key_ok",params:[],type:"DestroyAuthKeyRes"},{id:178201177,predicate:"destroy_auth_key_none",params:[],type:"DestroyAuthKeyRes"},{id:-368010477,predicate:"destroy_auth_key_fail",params:[],type:"DestroyAuthKeyRes"}],methods:[{id:-1099002127,method:"req_pq_multi",params:[{name:"nonce",type:"int128"}],type:"ResPQ"},{id:-686627650,method:"req_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"public_key_fingerprint",type:"long"},{name:"encrypted_data",type:"bytes"}],type:"Server_DH_Params"},{id:-184262881,method:"set_client_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_data",type:"bytes"}],type:"Set_client_DH_params_answer"},{id:1491380032,method:"rpc_drop_answer",params:[{name:"req_msg_id",type:"long"}],type:"RpcDropAnswer"},{id:-1188971260,method:"get_future_salts",params:[{name:"num",type:"int"}],type:"FutureSalts"},{id:2059302892,method:"ping",params:[{name:"ping_id",type:"long"}],type:"Pong"},{id:-213746804,method:"ping_delay_disconnect",params:[{name:"ping_id",type:"long"},{name:"disconnect_delay",type:"int"}],type:"Pong"},{id:-414113498,method:"destroy_session",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1835453025,method:"http_wait",params:[{name:"max_delay",type:"int"},{name:"wait_after",type:"int"},{name:"max_wait",type:"int"}],type:"HttpWait"},{id:-784117408,method:"destroy_auth_key",params:[],type:"DestroyAuthKeyRes"}]},API:{constructors:[{id:-1132882121,predicate:"boolFalse",params:[],type:"Bool"},{id:-1720552011,predicate:"boolTrue",params:[],type:"Bool"},{id:1072550713,predicate:"true",params:[],type:"True"},{id:481674261,predicate:"vector",params:[],type:"Vector t"},{id:-994444869,predicate:"error",params:[{name:"code",type:"int"},{name:"text",type:"string"}],type:"Error"},{id:1450380236,predicate:"null",params:[],type:"Null"},{id:2134579434,predicate:"inputPeerEmpty",params:[],type:"InputPeer"},{id:2107670217,predicate:"inputPeerSelf",params:[],type:"InputPeer"},{id:900291769,predicate:"inputPeerChat",params:[{name:"chat_id",type:"long"}],type:"InputPeer"},{id:-1182234929,predicate:"inputUserEmpty",params:[],type:"InputUser"},{id:-138301121,predicate:"inputUserSelf",params:[],type:"InputUser"},{id:-208488460,predicate:"inputPhoneContact",params:[{name:"client_id",type:"long"},{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"InputContact"},{id:-181407105,predicate:"inputFile",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"},{name:"md5_checksum",type:"string"}],type:"InputFile"},{id:-1771768449,predicate:"inputMediaEmpty",params:[],type:"InputMedia"},{id:505969924,predicate:"inputMediaUploadedPhoto",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.2?true"},{name:"file",type:"InputFile"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:-1279654347,predicate:"inputMediaPhoto",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.1?true"},{name:"id",type:"InputPhoto"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-104578748,predicate:"inputMediaGeoPoint",params:[{name:"geo_point",type:"InputGeoPoint"}],type:"InputMedia"},{id:-122978821,predicate:"inputMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"}],type:"InputMedia"},{id:480546647,predicate:"inputChatPhotoEmpty",params:[],type:"InputChatPhoto"},{id:-1110593856,predicate:"inputChatUploadedPhoto",params:[{name:"flags",type:"#"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"},{name:"video_emoji_markup",type:"flags.3?VideoSize"}],type:"InputChatPhoto"},{id:-1991004873,predicate:"inputChatPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputChatPhoto"},{id:-457104426,predicate:"inputGeoPointEmpty",params:[],type:"InputGeoPoint"},{id:1210199983,predicate:"inputGeoPoint",params:[{name:"flags",type:"#"},{name:"lat",type:"double"},{name:"long",type:"double"},{name:"accuracy_radius",type:"flags.0?int"}],type:"InputGeoPoint"},{id:483901197,predicate:"inputPhotoEmpty",params:[],type:"InputPhoto"},{id:1001634122,predicate:"inputPhoto",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputPhoto"},{id:-539317279,predicate:"inputFileLocation",params:[{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputFileLocation"},{id:1498486562,predicate:"peerUser",params:[{name:"user_id",type:"long"}],type:"Peer"},{id:918946202,predicate:"peerChat",params:[{name:"chat_id",type:"long"}],type:"Peer"},{id:-1432995067,predicate:"storage.fileUnknown",params:[],type:"storage.FileType"},{id:1086091090,predicate:"storage.filePartial",params:[],type:"storage.FileType"},{id:8322574,predicate:"storage.fileJpeg",params:[],type:"storage.FileType"},{id:-891180321,predicate:"storage.fileGif",params:[],type:"storage.FileType"},{id:172975040,predicate:"storage.filePng",params:[],type:"storage.FileType"},{id:-1373745011,predicate:"storage.filePdf",params:[],type:"storage.FileType"},{id:1384777335,predicate:"storage.fileMp3",params:[],type:"storage.FileType"},{id:1258941372,predicate:"storage.fileMov",params:[],type:"storage.FileType"},{id:-1278304028,predicate:"storage.fileMp4",params:[],type:"storage.FileType"},{id:276907596,predicate:"storage.fileWebp",params:[],type:"storage.FileType"},{id:-742634630,predicate:"userEmpty",params:[{name:"id",type:"long"}],type:"User"},{id:1326562017,predicate:"userProfilePhotoEmpty",params:[],type:"UserProfilePhoto"},{id:-2100168954,predicate:"userProfilePhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"personal",type:"flags.2?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"UserProfilePhoto"},{id:164646985,predicate:"userStatusEmpty",params:[],type:"UserStatus"},{id:-306628279,predicate:"userStatusOnline",params:[{name:"expires",type:"int"}],type:"UserStatus"},{id:9203775,predicate:"userStatusOffline",params:[{name:"was_online",type:"int"}],type:"UserStatus"},{id:693512293,predicate:"chatEmpty",params:[{name:"id",type:"long"}],type:"Chat"},{id:1103884886,predicate:"chat",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"left",type:"flags.2?true"},{name:"deactivated",type:"flags.5?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"noforwards",type:"flags.25?true"},{name:"id",type:"long"},{name:"title",type:"string"},{name:"photo",type:"ChatPhoto"},{name:"participants_count",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"migrated_to",type:"flags.6?InputChannel"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"}],type:"Chat"},{id:1704108455,predicate:"chatForbidden",params:[{name:"id",type:"long"},{name:"title",type:"string"}],type:"Chat"},{id:-908914376,predicate:"chatFull",params:[{name:"flags",type:"#"},{name:"can_set_username",type:"flags.7?true"},{name:"has_scheduled",type:"flags.8?true"},{name:"translations_disabled",type:"flags.19?true"},{name:"id",type:"long"},{name:"about",type:"string"},{name:"participants",type:"ChatParticipants"},{name:"chat_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.13?ExportedChatInvite"},{name:"bot_info",type:"flags.3?Vector"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"folder_id",type:"flags.11?int"},{name:"call",type:"flags.12?InputGroupCall"},{name:"ttl_period",type:"flags.14?int"},{name:"groupcall_default_join_as",type:"flags.15?Peer"},{name:"theme_emoticon",type:"flags.16?string"},{name:"requests_pending",type:"flags.17?int"},{name:"recent_requesters",type:"flags.17?Vector"},{name:"available_reactions",type:"flags.18?ChatReactions"}],type:"ChatFull"},{id:-1070776313,predicate:"chatParticipant",params:[{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-2023500831,predicate:"chatParticipantsForbidden",params:[{name:"flags",type:"#"},{name:"chat_id",type:"long"},{name:"self_participant",type:"flags.0?ChatParticipant"}],type:"ChatParticipants"},{id:1018991608,predicate:"chatParticipants",params:[{name:"chat_id",type:"long"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"ChatParticipants"},{id:935395612,predicate:"chatPhotoEmpty",params:[],type:"ChatPhoto"},{id:476978193,predicate:"chatPhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"ChatPhoto"},{id:-1868117372,predicate:"messageEmpty",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"peer_id",type:"flags.0?Peer"}],type:"Message"},{id:940666592,predicate:"message",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"from_scheduled",type:"flags.18?true"},{name:"legacy",type:"flags.19?true"},{name:"edit_hide",type:"flags.21?true"},{name:"pinned",type:"flags.24?true"},{name:"noforwards",type:"flags.26?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?long"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"message",type:"string"},{name:"media",type:"flags.9?MessageMedia"},{name:"reply_markup",type:"flags.6?ReplyMarkup"},{name:"entities",type:"flags.7?Vector"},{name:"views",type:"flags.10?int"},{name:"forwards",type:"flags.10?int"},{name:"replies",type:"flags.23?MessageReplies"},{name:"edit_date",type:"flags.15?int"},{name:"post_author",type:"flags.16?string"},{name:"grouped_id",type:"flags.17?long"},{name:"reactions",type:"flags.20?MessageReactions"},{name:"restriction_reason",type:"flags.22?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:721967202,predicate:"messageService",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"legacy",type:"flags.19?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"action",type:"MessageAction"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:1038967584,predicate:"messageMediaEmpty",params:[],type:"MessageMedia"},{id:1766936791,predicate:"messageMediaPhoto",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.3?true"},{name:"photo",type:"flags.0?Photo"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1457575028,predicate:"messageMediaGeo",params:[{name:"geo",type:"GeoPoint"}],type:"MessageMedia"},{id:1882335561,predicate:"messageMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"user_id",type:"long"}],type:"MessageMedia"},{id:-1618676578,predicate:"messageMediaUnsupported",params:[],type:"MessageMedia"},{id:-1230047312,predicate:"messageActionEmpty",params:[],type:"MessageAction"},{id:-1119368275,predicate:"messageActionChatCreate",params:[{name:"title",type:"string"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1247687078,predicate:"messageActionChatEditTitle",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:2144015272,predicate:"messageActionChatEditPhoto",params:[{name:"photo",type:"Photo"}],type:"MessageAction"},{id:-1780220945,predicate:"messageActionChatDeletePhoto",params:[],type:"MessageAction"},{id:365886720,predicate:"messageActionChatAddUser",params:[{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1539362612,predicate:"messageActionChatDeleteUser",params:[{name:"user_id",type:"long"}],type:"MessageAction"},{id:-712374074,predicate:"dialog",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"unread_mark",type:"flags.3?true"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"unread_mentions_count",type:"int"},{name:"unread_reactions_count",type:"int"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"pts",type:"flags.0?int"},{name:"draft",type:"flags.1?DraftMessage"},{name:"folder_id",type:"flags.4?int"},{name:"ttl_period",type:"flags.5?int"}],type:"Dialog"},{id:590459437,predicate:"photoEmpty",params:[{name:"id",type:"long"}],type:"Photo"},{id:-82216347,predicate:"photo",params:[{name:"flags",type:"#"},{name:"has_stickers",type:"flags.0?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"sizes",type:"Vector"},{name:"video_sizes",type:"flags.1?Vector"},{name:"dc_id",type:"int"}],type:"Photo"},{id:236446268,predicate:"photoSizeEmpty",params:[{name:"type",type:"string"}],type:"PhotoSize"},{id:1976012384,predicate:"photoSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"}],type:"PhotoSize"},{id:35527382,predicate:"photoCachedSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:286776671,predicate:"geoPointEmpty",params:[],type:"GeoPoint"},{id:-1297942941,predicate:"geoPoint",params:[{name:"flags",type:"#"},{name:"long",type:"double"},{name:"lat",type:"double"},{name:"access_hash",type:"long"},{name:"accuracy_radius",type:"flags.0?int"}],type:"GeoPoint"},{id:1577067778,predicate:"auth.sentCode",params:[{name:"flags",type:"#"},{name:"type",type:"auth.SentCodeType"},{name:"phone_code_hash",type:"string"},{name:"next_type",type:"flags.1?auth.CodeType"},{name:"timeout",type:"flags.2?int"}],type:"auth.SentCode"},{id:782418132,predicate:"auth.authorization",params:[{name:"flags",type:"#"},{name:"setup_password_required",type:"flags.1?true"},{name:"otherwise_relogin_days",type:"flags.1?int"},{name:"tmp_sessions",type:"flags.0?int"},{name:"future_auth_token",type:"flags.2?bytes"},{name:"user",type:"User"}],type:"auth.Authorization"},{id:-1271602504,predicate:"auth.exportedAuthorization",params:[{name:"id",type:"long"},{name:"bytes",type:"bytes"}],type:"auth.ExportedAuthorization"},{id:-1195615476,predicate:"inputNotifyPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputNotifyPeer"},{id:423314455,predicate:"inputNotifyUsers",params:[],type:"InputNotifyPeer"},{id:1251338318,predicate:"inputNotifyChats",params:[],type:"InputNotifyPeer"},{id:-551616469,predicate:"inputPeerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?NotificationSound"}],type:"InputPeerNotifySettings"},{id:-1472527322,predicate:"peerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"ios_sound",type:"flags.3?NotificationSound"},{name:"android_sound",type:"flags.4?NotificationSound"},{name:"other_sound",type:"flags.5?NotificationSound"}],type:"PeerNotifySettings"},{id:-1525149427,predicate:"peerSettings",params:[{name:"flags",type:"#"},{name:"report_spam",type:"flags.0?true"},{name:"add_contact",type:"flags.1?true"},{name:"block_contact",type:"flags.2?true"},{name:"share_contact",type:"flags.3?true"},{name:"need_contacts_exception",type:"flags.4?true"},{name:"report_geo",type:"flags.5?true"},{name:"autoarchived",type:"flags.7?true"},{name:"invite_members",type:"flags.8?true"},{name:"request_chat_broadcast",type:"flags.10?true"},{name:"geo_distance",type:"flags.6?int"},{name:"request_chat_title",type:"flags.9?string"},{name:"request_chat_date",type:"flags.9?int"}],type:"PeerSettings"},{id:-1539849235,predicate:"wallPaper",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"pattern",type:"flags.3?true"},{name:"dark",type:"flags.4?true"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"document",type:"Document"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:1490799288,predicate:"inputReportReasonSpam",params:[],type:"ReportReason"},{id:505595789,predicate:"inputReportReasonViolence",params:[],type:"ReportReason"},{id:777640226,predicate:"inputReportReasonPornography",params:[],type:"ReportReason"},{id:-1376497949,predicate:"inputReportReasonChildAbuse",params:[],type:"ReportReason"},{id:-1041980751,predicate:"inputReportReasonOther",params:[],type:"ReportReason"},{id:-120378643,predicate:"userFull",params:[{name:"flags",type:"#"},{name:"blocked",type:"flags.0?true"},{name:"phone_calls_available",type:"flags.4?true"},{name:"phone_calls_private",type:"flags.5?true"},{name:"can_pin_message",type:"flags.7?true"},{name:"has_scheduled",type:"flags.12?true"},{name:"video_calls_available",type:"flags.13?true"},{name:"voice_messages_forbidden",type:"flags.20?true"},{name:"translations_disabled",type:"flags.23?true"},{name:"id",type:"long"},{name:"about",type:"flags.1?string"},{name:"settings",type:"PeerSettings"},{name:"personal_photo",type:"flags.21?Photo"},{name:"profile_photo",type:"flags.2?Photo"},{name:"fallback_photo",type:"flags.22?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"bot_info",type:"flags.3?BotInfo"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"common_chats_count",type:"int"},{name:"folder_id",type:"flags.11?int"},{name:"ttl_period",type:"flags.14?int"},{name:"theme_emoticon",type:"flags.15?string"},{name:"private_forward_name",type:"flags.16?string"},{name:"bot_group_admin_rights",type:"flags.17?ChatAdminRights"},{name:"bot_broadcast_admin_rights",type:"flags.18?ChatAdminRights"},{name:"premium_gifts",type:"flags.19?Vector"}],type:"UserFull"},{id:341499403,predicate:"contact",params:[{name:"user_id",type:"long"},{name:"mutual",type:"Bool"}],type:"Contact"},{id:-1052885936,predicate:"importedContact",params:[{name:"user_id",type:"long"},{name:"client_id",type:"long"}],type:"ImportedContact"},{id:383348795,predicate:"contactStatus",params:[{name:"user_id",type:"long"},{name:"status",type:"UserStatus"}],type:"ContactStatus"},{id:-1219778094,predicate:"contacts.contactsNotModified",params:[],type:"contacts.Contacts"},{id:-353862078,predicate:"contacts.contacts",params:[{name:"contacts",type:"Vector"},{name:"saved_count",type:"int"},{name:"users",type:"Vector"}],type:"contacts.Contacts"},{id:2010127419,predicate:"contacts.importedContacts",params:[{name:"imported",type:"Vector"},{name:"popular_invites",type:"Vector"},{name:"retry_contacts",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ImportedContacts"},{id:182326673,predicate:"contacts.blocked",params:[{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:-513392236,predicate:"contacts.blockedSlice",params:[{name:"count",type:"int"},{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:364538944,predicate:"messages.dialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:1910543603,predicate:"messages.dialogsSlice",params:[{name:"count",type:"int"},{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:-1938715001,predicate:"messages.messages",params:[{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:978610270,predicate:"messages.messagesSlice",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"count",type:"int"},{name:"next_rate",type:"flags.0?int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:1694474197,predicate:"messages.chats",params:[{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-438840932,predicate:"messages.chatFull",params:[{name:"full_chat",type:"ChatFull"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatFull"},{id:-1269012015,predicate:"messages.affectedHistory",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"}],type:"messages.AffectedHistory"},{id:1474492012,predicate:"inputMessagesFilterEmpty",params:[],type:"MessagesFilter"},{id:-1777752804,predicate:"inputMessagesFilterPhotos",params:[],type:"MessagesFilter"},{id:-1614803355,predicate:"inputMessagesFilterVideo",params:[],type:"MessagesFilter"},{id:1458172132,predicate:"inputMessagesFilterPhotoVideo",params:[],type:"MessagesFilter"},{id:-1629621880,predicate:"inputMessagesFilterDocument",params:[],type:"MessagesFilter"},{id:2129714567,predicate:"inputMessagesFilterUrl",params:[],type:"MessagesFilter"},{id:-3644025,predicate:"inputMessagesFilterGif",params:[],type:"MessagesFilter"},{id:522914557,predicate:"updateNewMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1318109142,predicate:"updateMessageID",params:[{name:"id",type:"int"},{name:"random_id",type:"long"}],type:"Update"},{id:-1576161051,predicate:"updateDeleteMessages",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1071741569,predicate:"updateUserTyping",params:[{name:"user_id",type:"long"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-2092401936,predicate:"updateChatUserTyping",params:[{name:"chat_id",type:"long"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:125178264,predicate:"updateChatParticipants",params:[{name:"participants",type:"ChatParticipants"}],type:"Update"},{id:-440534818,predicate:"updateUserStatus",params:[{name:"user_id",type:"long"},{name:"status",type:"UserStatus"}],type:"Update"},{id:-1484486364,predicate:"updateUserName",params:[{name:"user_id",type:"long"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"usernames",type:"Vector"}],type:"Update"},{id:-1519637954,predicate:"updates.state",params:[{name:"pts",type:"int"},{name:"qts",type:"int"},{name:"date",type:"int"},{name:"seq",type:"int"},{name:"unread_count",type:"int"}],type:"updates.State"},{id:1567990072,predicate:"updates.differenceEmpty",params:[{name:"date",type:"int"},{name:"seq",type:"int"}],type:"updates.Difference"},{id:16030880,predicate:"updates.difference",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"updates.Difference"},{id:-1459938943,predicate:"updates.differenceSlice",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"intermediate_state",type:"updates.State"}],type:"updates.Difference"},{id:-484987010,predicate:"updatesTooLong",params:[],type:"Updates"},{id:826001400,predicate:"updateShortMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"user_id",type:"long"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?long"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:1299050149,predicate:"updateShortChatMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"from_id",type:"long"},{name:"chat_id",type:"long"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?long"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:2027216577,predicate:"updateShort",params:[{name:"update",type:"Update"},{name:"date",type:"int"}],type:"Updates"},{id:1918567619,predicate:"updatesCombined",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq_start",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:1957577280,predicate:"updates",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:-1916114267,predicate:"photos.photos",params:[{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:352657236,predicate:"photos.photosSlice",params:[{name:"count",type:"int"},{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:539045032,predicate:"photos.photo",params:[{name:"photo",type:"Photo"},{name:"users",type:"Vector"}],type:"photos.Photo"},{id:157948117,predicate:"upload.file",params:[{name:"type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.File"},{id:414687501,predicate:"dcOption",params:[{name:"flags",type:"#"},{name:"ipv6",type:"flags.0?true"},{name:"media_only",type:"flags.1?true"},{name:"tcpo_only",type:"flags.2?true"},{name:"cdn",type:"flags.3?true"},{name:"static",type:"flags.4?true"},{name:"this_port_only",type:"flags.5?true"},{name:"id",type:"int"},{name:"ip_address",type:"string"},{name:"port",type:"int"},{name:"secret",type:"flags.10?bytes"}],type:"DcOption"},{id:589653676,predicate:"config",params:[{name:"flags",type:"#"},{name:"phonecalls_enabled",type:"flags.1?true"},{name:"default_p2p_contacts",type:"flags.3?true"},{name:"preload_featured_stickers",type:"flags.4?true"},{name:"ignore_phone_entities",type:"flags.5?true"},{name:"revoke_pm_inbox",type:"flags.6?true"},{name:"blocked_mode",type:"flags.8?true"},{name:"pfs_enabled",type:"flags.13?true"},{name:"force_try_ipv6",type:"flags.14?true"},{name:"date",type:"int"},{name:"expires",type:"int"},{name:"test_mode",type:"Bool"},{name:"this_dc",type:"int"},{name:"dc_options",type:"Vector"},{name:"dc_txt_domain_name",type:"string"},{name:"chat_size_max",type:"int"},{name:"megagroup_size_max",type:"int"},{name:"forwarded_count_max",type:"int"},{name:"online_update_period_ms",type:"int"},{name:"offline_blur_timeout_ms",type:"int"},{name:"offline_idle_timeout_ms",type:"int"},{name:"online_cloud_timeout_ms",type:"int"},{name:"notify_cloud_delay_ms",type:"int"},{name:"notify_default_delay_ms",type:"int"},{name:"push_chat_period_ms",type:"int"},{name:"push_chat_limit",type:"int"},{name:"saved_gifs_limit",type:"int"},{name:"edit_time_limit",type:"int"},{name:"revoke_time_limit",type:"int"},{name:"revoke_pm_time_limit",type:"int"},{name:"rating_e_decay",type:"int"},{name:"stickers_recent_limit",type:"int"},{name:"stickers_faved_limit",type:"int"},{name:"channels_read_media_period",type:"int"},{name:"tmp_sessions",type:"flags.0?int"},{name:"pinned_dialogs_count_max",type:"int"},{name:"pinned_infolder_count_max",type:"int"},{name:"call_receive_timeout_ms",type:"int"},{name:"call_ring_timeout_ms",type:"int"},{name:"call_connect_timeout_ms",type:"int"},{name:"call_packet_timeout_ms",type:"int"},{name:"me_url_prefix",type:"string"},{name:"autoupdate_url_prefix",type:"flags.7?string"},{name:"gif_search_username",type:"flags.9?string"},{name:"venue_search_username",type:"flags.10?string"},{name:"img_search_username",type:"flags.11?string"},{name:"static_maps_provider",type:"flags.12?string"},{name:"caption_length_max",type:"int"},{name:"message_length_max",type:"int"},{name:"webfile_dc_id",type:"int"},{name:"suggested_lang_code",type:"flags.2?string"},{name:"lang_pack_version",type:"flags.2?int"},{name:"base_lang_pack_version",type:"flags.2?int"},{name:"reactions_default",type:"flags.15?Reaction"}],type:"Config"},{id:-1910892683,predicate:"nearestDc",params:[{name:"country",type:"string"},{name:"this_dc",type:"int"},{name:"nearest_dc",type:"int"}],type:"NearestDc"},{id:-860107216,predicate:"help.appUpdate",params:[{name:"flags",type:"#"},{name:"can_not_skip",type:"flags.0?true"},{name:"id",type:"int"},{name:"version",type:"string"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"document",type:"flags.1?Document"},{name:"url",type:"flags.2?string"},{name:"sticker",type:"flags.3?Document"}],type:"help.AppUpdate"},{id:-1000708810,predicate:"help.noAppUpdate",params:[],type:"help.AppUpdate"},{id:415997816,predicate:"help.inviteText",params:[{name:"message",type:"string"}],type:"help.InviteText"},{id:314359194,predicate:"updateNewEncryptedMessage",params:[{name:"message",type:"EncryptedMessage"},{name:"qts",type:"int"}],type:"Update"},{id:386986326,predicate:"updateEncryptedChatTyping",params:[{name:"chat_id",type:"int"}],type:"Update"},{id:-1264392051,predicate:"updateEncryption",params:[{name:"chat",type:"EncryptedChat"},{name:"date",type:"int"}],type:"Update"},{id:956179895,predicate:"updateEncryptedMessagesRead",params:[{name:"chat_id",type:"int"},{name:"max_date",type:"int"},{name:"date",type:"int"}],type:"Update"},{id:-1417756512,predicate:"encryptedChatEmpty",params:[{name:"id",type:"int"}],type:"EncryptedChat"},{id:1722964307,predicate:"encryptedChatWaiting",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"}],type:"EncryptedChat"},{id:1223809356,predicate:"encryptedChatRequested",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:1643173063,predicate:"encryptedChat",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:505183301,predicate:"encryptedChatDiscarded",params:[{name:"flags",type:"#"},{name:"history_deleted",type:"flags.0?true"},{name:"id",type:"int"}],type:"EncryptedChat"},{id:-247351839,predicate:"inputEncryptedChat",params:[{name:"chat_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputEncryptedChat"},{id:-1038136962,predicate:"encryptedFileEmpty",params:[],type:"EncryptedFile"},{id:-1476358952,predicate:"encryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"long"},{name:"dc_id",type:"int"},{name:"key_fingerprint",type:"int"}],type:"EncryptedFile"},{id:406307684,predicate:"inputEncryptedFileEmpty",params:[],type:"InputEncryptedFile"},{id:1690108678,predicate:"inputEncryptedFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:1511503333,predicate:"inputEncryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputEncryptedFile"},{id:-182231723,predicate:"inputEncryptedFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:-317144808,predicate:"encryptedMessage",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"},{name:"file",type:"EncryptedFile"}],type:"EncryptedMessage"},{id:594758406,predicate:"encryptedMessageService",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"}],type:"EncryptedMessage"},{id:-1058912715,predicate:"messages.dhConfigNotModified",params:[{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:740433629,predicate:"messages.dhConfig",params:[{name:"g",type:"int"},{name:"p",type:"bytes"},{name:"version",type:"int"},{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:1443858741,predicate:"messages.sentEncryptedMessage",params:[{name:"date",type:"int"}],type:"messages.SentEncryptedMessage"},{id:-1802240206,predicate:"messages.sentEncryptedFile",params:[{name:"date",type:"int"},{name:"file",type:"EncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:-95482955,predicate:"inputFileBig",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"}],type:"InputFile"},{id:767652808,predicate:"inputEncryptedFileBigUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:1037718609,predicate:"updateChatParticipantAdd",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:-483443337,predicate:"updateChatParticipantDelete",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"long"},{name:"version",type:"int"}],type:"Update"},{id:-1906403213,predicate:"updateDcOptions",params:[{name:"dc_options",type:"Vector"}],type:"Update"},{id:1530447553,predicate:"inputMediaUploadedDocument",params:[{name:"flags",type:"#"},{name:"nosound_video",type:"flags.3?true"},{name:"force_file",type:"flags.4?true"},{name:"spoiler",type:"flags.5?true"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.2?InputFile"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:860303448,predicate:"inputMediaDocument",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.2?true"},{name:"id",type:"InputDocument"},{name:"ttl_seconds",type:"flags.0?int"},{name:"query",type:"flags.1?string"}],type:"InputMedia"},{id:-1666158377,predicate:"messageMediaDocument",params:[{name:"flags",type:"#"},{name:"nopremium",type:"flags.3?true"},{name:"spoiler",type:"flags.4?true"},{name:"document",type:"flags.0?Document"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1928391342,predicate:"inputDocumentEmpty",params:[],type:"InputDocument"},{id:448771445,predicate:"inputDocument",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputDocument"},{id:-1160743548,predicate:"inputDocumentFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:922273905,predicate:"documentEmpty",params:[{name:"id",type:"long"}],type:"Document"},{id:-1881881384,predicate:"document",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"mime_type",type:"string"},{name:"size",type:"long"},{name:"thumbs",type:"flags.0?Vector"},{name:"video_thumbs",type:"flags.1?Vector"},{name:"dc_id",type:"int"},{name:"attributes",type:"Vector"}],type:"Document"},{id:398898678,predicate:"help.support",params:[{name:"phone_number",type:"string"},{name:"user",type:"User"}],type:"help.Support"},{id:-1613493288,predicate:"notifyPeer",params:[{name:"peer",type:"Peer"}],type:"NotifyPeer"},{id:-1261946036,predicate:"notifyUsers",params:[],type:"NotifyPeer"},{id:-1073230141,predicate:"notifyChats",params:[],type:"NotifyPeer"},{id:-1094555409,predicate:"updateNotifySettings",params:[{name:"peer",type:"NotifyPeer"},{name:"notify_settings",type:"PeerNotifySettings"}],type:"Update"},{id:381645902,predicate:"sendMessageTypingAction",params:[],type:"SendMessageAction"},{id:-44119819,predicate:"sendMessageCancelAction",params:[],type:"SendMessageAction"},{id:-1584933265,predicate:"sendMessageRecordVideoAction",params:[],type:"SendMessageAction"},{id:-378127636,predicate:"sendMessageUploadVideoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-718310409,predicate:"sendMessageRecordAudioAction",params:[],type:"SendMessageAction"},{id:-212740181,predicate:"sendMessageUploadAudioAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-774682074,predicate:"sendMessageUploadPhotoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-1441998364,predicate:"sendMessageUploadDocumentAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:393186209,predicate:"sendMessageGeoLocationAction",params:[],type:"SendMessageAction"},{id:1653390447,predicate:"sendMessageChooseContactAction",params:[],type:"SendMessageAction"},{id:-1290580579,predicate:"contacts.found",params:[{name:"my_results",type:"Vector"},{name:"results",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Found"},{id:-337352679,predicate:"updateServiceNotification",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"inbox_date",type:"flags.1?int"},{name:"type",type:"string"},{name:"message",type:"string"},{name:"media",type:"MessageMedia"},{name:"entities",type:"Vector"}],type:"Update"},{id:-496024847,predicate:"userStatusRecently",params:[],type:"UserStatus"},{id:129960444,predicate:"userStatusLastWeek",params:[],type:"UserStatus"},{id:2011940674,predicate:"userStatusLastMonth",params:[],type:"UserStatus"},{id:-298113238,predicate:"updatePrivacy",params:[{name:"key",type:"PrivacyKey"},{name:"rules",type:"Vector"}],type:"Update"},{id:1335282456,predicate:"inputPrivacyKeyStatusTimestamp",params:[],type:"InputPrivacyKey"},{id:-1137792208,predicate:"privacyKeyStatusTimestamp",params:[],type:"PrivacyKey"},{id:218751099,predicate:"inputPrivacyValueAllowContacts",params:[],type:"InputPrivacyRule"},{id:407582158,predicate:"inputPrivacyValueAllowAll",params:[],type:"InputPrivacyRule"},{id:320652927,predicate:"inputPrivacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:195371015,predicate:"inputPrivacyValueDisallowContacts",params:[],type:"InputPrivacyRule"},{id:-697604407,predicate:"inputPrivacyValueDisallowAll",params:[],type:"InputPrivacyRule"},{id:-1877932953,predicate:"inputPrivacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:-123988,predicate:"privacyValueAllowContacts",params:[],type:"PrivacyRule"},{id:1698855810,predicate:"privacyValueAllowAll",params:[],type:"PrivacyRule"},{id:-1198497870,predicate:"privacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:-125240806,predicate:"privacyValueDisallowContacts",params:[],type:"PrivacyRule"},{id:-1955338397,predicate:"privacyValueDisallowAll",params:[],type:"PrivacyRule"},{id:-463335103,predicate:"privacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:1352683077,predicate:"account.privacyRules",params:[{name:"rules",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"account.PrivacyRules"},{id:-1194283041,predicate:"accountDaysTTL",params:[{name:"days",type:"int"}],type:"AccountDaysTTL"},{id:88680979,predicate:"updateUserPhone",params:[{name:"user_id",type:"long"},{name:"phone",type:"string"}],type:"Update"},{id:1815593308,predicate:"documentAttributeImageSize",params:[{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:297109817,predicate:"documentAttributeAnimated",params:[],type:"DocumentAttribute"},{id:1662637586,predicate:"documentAttributeSticker",params:[{name:"flags",type:"#"},{name:"mask",type:"flags.1?true"},{name:"alt",type:"string"},{name:"stickerset",type:"InputStickerSet"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"DocumentAttribute"},{id:250621158,predicate:"documentAttributeVideo",params:[{name:"flags",type:"#"},{name:"round_message",type:"flags.0?true"},{name:"supports_streaming",type:"flags.1?true"},{name:"duration",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:-1739392570,predicate:"documentAttributeAudio",params:[{name:"flags",type:"#"},{name:"voice",type:"flags.10?true"},{name:"duration",type:"int"},{name:"title",type:"flags.0?string"},{name:"performer",type:"flags.1?string"},{name:"waveform",type:"flags.2?bytes"}],type:"DocumentAttribute"},{id:358154344,predicate:"documentAttributeFilename",params:[{name:"file_name",type:"string"}],type:"DocumentAttribute"},{id:-244016606,predicate:"messages.stickersNotModified",params:[],type:"messages.Stickers"},{id:816245886,predicate:"messages.stickers",params:[{name:"hash",type:"long"},{name:"stickers",type:"Vector"}],type:"messages.Stickers"},{id:313694676,predicate:"stickerPack",params:[{name:"emoticon",type:"string"},{name:"documents",type:"Vector"}],type:"StickerPack"},{id:-395967805,predicate:"messages.allStickersNotModified",params:[],type:"messages.AllStickers"},{id:-843329861,predicate:"messages.allStickers",params:[{name:"hash",type:"long"},{name:"sets",type:"Vector"}],type:"messages.AllStickers"},{id:-1667805217,predicate:"updateReadHistoryInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:791617983,predicate:"updateReadHistoryOutbox",params:[{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-2066640507,predicate:"messages.affectedMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"messages.AffectedMessages"},{id:2139689491,predicate:"updateWebPage",params:[{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-350980120,predicate:"webPageEmpty",params:[{name:"id",type:"long"}],type:"WebPage"},{id:-981018084,predicate:"webPagePending",params:[{name:"id",type:"long"},{name:"date",type:"int"}],type:"WebPage"},{id:-392411726,predicate:"webPage",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"url",type:"string"},{name:"display_url",type:"string"},{name:"hash",type:"int"},{name:"type",type:"flags.0?string"},{name:"site_name",type:"flags.1?string"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"photo",type:"flags.4?Photo"},{name:"embed_url",type:"flags.5?string"},{name:"embed_type",type:"flags.5?string"},{name:"embed_width",type:"flags.6?int"},{name:"embed_height",type:"flags.6?int"},{name:"duration",type:"flags.7?int"},{name:"author",type:"flags.8?string"},{name:"document",type:"flags.9?Document"},{name:"cached_page",type:"flags.10?Page"},{name:"attributes",type:"flags.12?Vector"}],type:"WebPage"},{id:-1557277184,predicate:"messageMediaWebPage",params:[{name:"webpage",type:"WebPage"}],type:"MessageMedia"},{id:-1392388579,predicate:"authorization",params:[{name:"flags",type:"#"},{name:"current",type:"flags.0?true"},{name:"official_app",type:"flags.1?true"},{name:"password_pending",type:"flags.2?true"},{name:"encrypted_requests_disabled",type:"flags.3?true"},{name:"call_requests_disabled",type:"flags.4?true"},{name:"hash",type:"long"},{name:"device_model",type:"string"},{name:"platform",type:"string"},{name:"system_version",type:"string"},{name:"api_id",type:"int"},{name:"app_name",type:"string"},{name:"app_version",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"country",type:"string"},{name:"region",type:"string"}],type:"Authorization"},{id:1275039392,predicate:"account.authorizations",params:[{name:"authorization_ttl_days",type:"int"},{name:"authorizations",type:"Vector"}],type:"account.Authorizations"},{id:-1787080453,predicate:"account.password",params:[{name:"flags",type:"#"},{name:"has_recovery",type:"flags.0?true"},{name:"has_secure_values",type:"flags.1?true"},{name:"has_password",type:"flags.2?true"},{name:"current_algo",type:"flags.2?PasswordKdfAlgo"},{name:"srp_B",type:"flags.2?bytes"},{name:"srp_id",type:"flags.2?long"},{name:"hint",type:"flags.3?string"},{name:"email_unconfirmed_pattern",type:"flags.4?string"},{name:"new_algo",type:"PasswordKdfAlgo"},{name:"new_secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_random",type:"bytes"},{name:"pending_reset_date",type:"flags.5?int"},{name:"login_email_pattern",type:"flags.6?string"}],type:"account.Password"},{id:-1705233435,predicate:"account.passwordSettings",params:[{name:"flags",type:"#"},{name:"email",type:"flags.0?string"},{name:"secure_settings",type:"flags.1?SecureSecretSettings"}],type:"account.PasswordSettings"},{id:-1036572727,predicate:"account.passwordInputSettings",params:[{name:"flags",type:"#"},{name:"new_algo",type:"flags.0?PasswordKdfAlgo"},{name:"new_password_hash",type:"flags.0?bytes"},{name:"hint",type:"flags.0?string"},{name:"email",type:"flags.1?string"},{name:"new_secure_settings",type:"flags.2?SecureSecretSettings"}],type:"account.PasswordInputSettings"},{id:326715557,predicate:"auth.passwordRecovery",params:[{name:"email_pattern",type:"string"}],type:"auth.PasswordRecovery"},{id:-1052959727,predicate:"inputMediaVenue",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"InputMedia"},{id:784356159,predicate:"messageMediaVenue",params:[{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"MessageMedia"},{id:-1551583367,predicate:"receivedNotifyMessage",params:[{name:"id",type:"int"},{name:"flags",type:"int"}],type:"ReceivedNotifyMessage"},{id:179611673,predicate:"chatInviteExported",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.0?true"},{name:"permanent",type:"flags.5?true"},{name:"request_needed",type:"flags.6?true"},{name:"link",type:"string"},{name:"admin_id",type:"long"},{name:"date",type:"int"},{name:"start_date",type:"flags.4?int"},{name:"expire_date",type:"flags.1?int"},{name:"usage_limit",type:"flags.2?int"},{name:"usage",type:"flags.3?int"},{name:"requested",type:"flags.7?int"},{name:"title",type:"flags.8?string"}],type:"ExportedChatInvite"},{id:1516793212,predicate:"chatInviteAlready",params:[{name:"chat",type:"Chat"}],type:"ChatInvite"},{id:806110401,predicate:"chatInvite",params:[{name:"flags",type:"#"},{name:"channel",type:"flags.0?true"},{name:"broadcast",type:"flags.1?true"},{name:"public",type:"flags.2?true"},{name:"megagroup",type:"flags.3?true"},{name:"request_needed",type:"flags.6?true"},{name:"title",type:"string"},{name:"about",type:"flags.5?string"},{name:"photo",type:"Photo"},{name:"participants_count",type:"int"},{name:"participants",type:"flags.4?Vector"}],type:"ChatInvite"},{id:51520707,predicate:"messageActionChatJoinedByLink",params:[{name:"inviter_id",type:"long"}],type:"MessageAction"},{id:1757493555,predicate:"updateReadMessagesContents",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-4838507,predicate:"inputStickerSetEmpty",params:[],type:"InputStickerSet"},{id:-1645763991,predicate:"inputStickerSetID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputStickerSet"},{id:-2044933984,predicate:"inputStickerSetShortName",params:[{name:"short_name",type:"string"}],type:"InputStickerSet"},{id:768691932,predicate:"stickerSet",params:[{name:"flags",type:"#"},{name:"archived",type:"flags.1?true"},{name:"official",type:"flags.2?true"},{name:"masks",type:"flags.3?true"},{name:"animated",type:"flags.5?true"},{name:"videos",type:"flags.6?true"},{name:"emojis",type:"flags.7?true"},{name:"installed_date",type:"flags.0?int"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumbs",type:"flags.4?Vector"},{name:"thumb_dc_id",type:"flags.4?int"},{name:"thumb_version",type:"flags.4?int"},{name:"thumb_document_id",type:"flags.8?long"},{name:"count",type:"int"},{name:"hash",type:"int"}],type:"StickerSet"},{id:1846886166,predicate:"messages.stickerSet",params:[{name:"set",type:"StickerSet"},{name:"packs",type:"Vector"},{name:"keywords",type:"Vector"},{name:"documents",type:"Vector"}],type:"messages.StickerSet"},{id:-1885878744,predicate:"user",params:[{name:"flags",type:"#"},{name:"self",type:"flags.10?true"},{name:"contact",type:"flags.11?true"},{name:"mutual_contact",type:"flags.12?true"},{name:"deleted",type:"flags.13?true"},{name:"bot",type:"flags.14?true"},{name:"bot_chat_history",type:"flags.15?true"},{name:"bot_nochats",type:"flags.16?true"},{name:"verified",type:"flags.17?true"},{name:"restricted",type:"flags.18?true"},{name:"min",type:"flags.20?true"},{name:"bot_inline_geo",type:"flags.21?true"},{name:"support",type:"flags.23?true"},{name:"scam",type:"flags.24?true"},{name:"apply_min_photo",type:"flags.25?true"},{name:"fake",type:"flags.26?true"},{name:"bot_attach_menu",type:"flags.27?true"},{name:"premium",type:"flags.28?true"},{name:"attach_menu_enabled",type:"flags.29?true"},{name:"flags2",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"flags.0?long"},{name:"first_name",type:"flags.1?string"},{name:"last_name",type:"flags.2?string"},{name:"username",type:"flags.3?string"},{name:"phone",type:"flags.4?string"},{name:"photo",type:"flags.5?UserProfilePhoto"},{name:"status",type:"flags.6?UserStatus"},{name:"bot_info_version",type:"flags.14?int"},{name:"restriction_reason",type:"flags.18?Vector"},{name:"bot_inline_placeholder",type:"flags.19?string"},{name:"lang_code",type:"flags.22?string"},{name:"emoji_status",type:"flags.30?EmojiStatus"},{name:"usernames",type:"flags2.0?Vector"}],type:"User"},{id:-1032140601,predicate:"botCommand",params:[{name:"command",type:"string"},{name:"description",type:"string"}],type:"BotCommand"},{id:-1892676777,predicate:"botInfo",params:[{name:"flags",type:"#"},{name:"user_id",type:"flags.0?long"},{name:"description",type:"flags.1?string"},{name:"description_photo",type:"flags.4?Photo"},{name:"description_document",type:"flags.5?Document"},{name:"commands",type:"flags.2?Vector"},{name:"menu_button",type:"flags.3?BotMenuButton"}],type:"BotInfo"},{id:-1560655744,predicate:"keyboardButton",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:2002815875,predicate:"keyboardButtonRow",params:[{name:"buttons",type:"Vector"}],type:"KeyboardButtonRow"},{id:-1606526075,predicate:"replyKeyboardHide",params:[{name:"flags",type:"#"},{name:"selective",type:"flags.2?true"}],type:"ReplyMarkup"},{id:-2035021048,predicate:"replyKeyboardForceReply",params:[{name:"flags",type:"#"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:-2049074735,predicate:"replyKeyboardMarkup",params:[{name:"flags",type:"#"},{name:"resize",type:"flags.0?true"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"persistent",type:"flags.4?true"},{name:"rows",type:"Vector"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:-571955892,predicate:"inputPeerUser",params:[{name:"user_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-233744186,predicate:"inputUser",params:[{name:"user_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputUser"},{id:-1148011883,predicate:"messageEntityUnknown",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-100378723,predicate:"messageEntityMention",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1868782349,predicate:"messageEntityHashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1827637959,predicate:"messageEntityBotCommand",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1859134776,predicate:"messageEntityUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1692693954,predicate:"messageEntityEmail",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1117713463,predicate:"messageEntityBold",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-2106619040,predicate:"messageEntityItalic",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:681706865,predicate:"messageEntityCode",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1938967520,predicate:"messageEntityPre",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"language",type:"string"}],type:"MessageEntity"},{id:1990644519,predicate:"messageEntityTextUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"url",type:"string"}],type:"MessageEntity"},{id:-1877614335,predicate:"updateShortSentMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"media",type:"flags.9?MessageMedia"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:-292807034,predicate:"inputChannelEmpty",params:[],type:"InputChannel"},{id:-212145112,predicate:"inputChannel",params:[{name:"channel_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputChannel"},{id:-1566230754,predicate:"peerChannel",params:[{name:"channel_id",type:"long"}],type:"Peer"},{id:666680316,predicate:"inputPeerChannel",params:[{name:"channel_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-2094689180,predicate:"channel",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"left",type:"flags.2?true"},{name:"broadcast",type:"flags.5?true"},{name:"verified",type:"flags.7?true"},{name:"megagroup",type:"flags.8?true"},{name:"restricted",type:"flags.9?true"},{name:"signatures",type:"flags.11?true"},{name:"min",type:"flags.12?true"},{name:"scam",type:"flags.19?true"},{name:"has_link",type:"flags.20?true"},{name:"has_geo",type:"flags.21?true"},{name:"slowmode_enabled",type:"flags.22?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"fake",type:"flags.25?true"},{name:"gigagroup",type:"flags.26?true"},{name:"noforwards",type:"flags.27?true"},{name:"join_to_send",type:"flags.28?true"},{name:"join_request",type:"flags.29?true"},{name:"forum",type:"flags.30?true"},{name:"flags2",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"flags.13?long"},{name:"title",type:"string"},{name:"username",type:"flags.6?string"},{name:"photo",type:"ChatPhoto"},{name:"date",type:"int"},{name:"restriction_reason",type:"flags.9?Vector"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"banned_rights",type:"flags.15?ChatBannedRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"},{name:"participants_count",type:"flags.17?int"},{name:"usernames",type:"flags2.0?Vector"}],type:"Chat"},{id:399807445,predicate:"channelForbidden",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.5?true"},{name:"megagroup",type:"flags.8?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"until_date",type:"flags.16?int"}],type:"Chat"},{id:2131196633,predicate:"contacts.resolvedPeer",params:[{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ResolvedPeer"},{id:-231385849,predicate:"channelFull",params:[{name:"flags",type:"#"},{name:"can_view_participants",type:"flags.3?true"},{name:"can_set_username",type:"flags.6?true"},{name:"can_set_stickers",type:"flags.7?true"},{name:"hidden_prehistory",type:"flags.10?true"},{name:"can_set_location",type:"flags.16?true"},{name:"has_scheduled",type:"flags.19?true"},{name:"can_view_stats",type:"flags.20?true"},{name:"blocked",type:"flags.22?true"},{name:"flags2",type:"#"},{name:"can_delete_channel",type:"flags2.0?true"},{name:"antispam",type:"flags2.1?true"},{name:"participants_hidden",type:"flags2.2?true"},{name:"translations_disabled",type:"flags2.3?true"},{name:"id",type:"long"},{name:"about",type:"string"},{name:"participants_count",type:"flags.0?int"},{name:"admins_count",type:"flags.1?int"},{name:"kicked_count",type:"flags.2?int"},{name:"banned_count",type:"flags.2?int"},{name:"online_count",type:"flags.13?int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"chat_photo",type:"Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.23?ExportedChatInvite"},{name:"bot_info",type:"Vector"},{name:"migrated_from_chat_id",type:"flags.4?long"},{name:"migrated_from_max_id",type:"flags.4?int"},{name:"pinned_msg_id",type:"flags.5?int"},{name:"stickerset",type:"flags.8?StickerSet"},{name:"available_min_id",type:"flags.9?int"},{name:"folder_id",type:"flags.11?int"},{name:"linked_chat_id",type:"flags.14?long"},{name:"location",type:"flags.15?ChannelLocation"},{name:"slowmode_seconds",type:"flags.17?int"},{name:"slowmode_next_send_date",type:"flags.18?int"},{name:"stats_dc",type:"flags.12?int"},{name:"pts",type:"int"},{name:"call",type:"flags.21?InputGroupCall"},{name:"ttl_period",type:"flags.24?int"},{name:"pending_suggestions",type:"flags.25?Vector"},{name:"groupcall_default_join_as",type:"flags.26?Peer"},{name:"theme_emoticon",type:"flags.27?string"},{name:"requests_pending",type:"flags.28?int"},{name:"recent_requesters",type:"flags.28?Vector"},{name:"default_send_as",type:"flags.29?Peer"},{name:"available_reactions",type:"flags.30?ChatReactions"}],type:"ChatFull"},{id:182649427,predicate:"messageRange",params:[{name:"min_id",type:"int"},{name:"max_id",type:"int"}],type:"MessageRange"},{id:-948520370,predicate:"messages.channelMessages",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"pts",type:"int"},{name:"count",type:"int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"topics",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:-1781355374,predicate:"messageActionChannelCreate",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:277713951,predicate:"updateChannelTooLong",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"pts",type:"flags.0?int"}],type:"Update"},{id:1666927625,predicate:"updateChannel",params:[{name:"channel_id",type:"long"}],type:"Update"},{id:1656358105,predicate:"updateNewChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1842450928,predicate:"updateReadChannelInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"channel_id",type:"long"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"}],type:"Update"},{id:-1020437742,predicate:"updateDeleteChannelMessages",params:[{name:"channel_id",type:"long"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-232346616,predicate:"updateChannelMessageViews",params:[{name:"channel_id",type:"long"},{name:"id",type:"int"},{name:"views",type:"int"}],type:"Update"},{id:1041346555,predicate:"updates.channelDifferenceEmpty",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"}],type:"updates.ChannelDifference"},{id:-1531132162,predicate:"updates.channelDifferenceTooLong",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"timeout",type:"flags.1?int"},{name:"dialog",type:"Dialog"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:543450958,predicate:"updates.channelDifference",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"},{name:"new_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:-1798033689,predicate:"channelMessagesFilterEmpty",params:[],type:"ChannelMessagesFilter"},{id:-847783593,predicate:"channelMessagesFilter",params:[{name:"flags",type:"#"},{name:"exclude_new_messages",type:"flags.1?true"},{name:"ranges",type:"Vector"}],type:"ChannelMessagesFilter"},{id:-1072953408,predicate:"channelParticipant",params:[{name:"user_id",type:"long"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:900251559,predicate:"channelParticipantSelf",params:[{name:"flags",type:"#"},{name:"via_request",type:"flags.0?true"},{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:803602899,predicate:"channelParticipantCreator",params:[{name:"flags",type:"#"},{name:"user_id",type:"long"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.0?string"}],type:"ChannelParticipant"},{id:-566281095,predicate:"channelParticipantsRecent",params:[],type:"ChannelParticipantsFilter"},{id:-1268741783,predicate:"channelParticipantsAdmins",params:[],type:"ChannelParticipantsFilter"},{id:-1548400251,predicate:"channelParticipantsKicked",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-1699676497,predicate:"channels.channelParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipants"},{id:-541588713,predicate:"channels.channelParticipant",params:[{name:"participant",type:"ChannelParticipant"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipant"},{id:-462696732,predicate:"chatParticipantCreator",params:[{name:"user_id",type:"long"}],type:"ChatParticipant"},{id:-1600962725,predicate:"chatParticipantAdmin",params:[{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-674602590,predicate:"updateChatParticipantAdmin",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"long"},{name:"is_admin",type:"Bool"},{name:"version",type:"int"}],type:"Update"},{id:-519864430,predicate:"messageActionChatMigrateTo",params:[{name:"channel_id",type:"long"}],type:"MessageAction"},{id:-365344535,predicate:"messageActionChannelMigrateFrom",params:[{name:"title",type:"string"},{name:"chat_id",type:"long"}],type:"MessageAction"},{id:-1328445861,predicate:"channelParticipantsBots",params:[],type:"ChannelParticipantsFilter"},{id:2013922064,predicate:"help.termsOfService",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"id",type:"DataJSON"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"min_age_confirm",type:"flags.1?int"}],type:"help.TermsOfService"},{id:1753886890,predicate:"updateNewStickerSet",params:[{name:"stickerset",type:"messages.StickerSet"}],type:"Update"},{id:196268545,predicate:"updateStickerSetsOrder",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"order",type:"Vector"}],type:"Update"},{id:834816008,predicate:"updateStickerSets",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"}],type:"Update"},{id:-402498398,predicate:"messages.savedGifsNotModified",params:[],type:"messages.SavedGifs"},{id:-2069878259,predicate:"messages.savedGifs",params:[{name:"hash",type:"long"},{name:"gifs",type:"Vector"}],type:"messages.SavedGifs"},{id:-1821035490,predicate:"updateSavedGifs",params:[],type:"Update"},{id:864077702,predicate:"inputBotInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1036876423,predicate:"inputBotInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-2000710887,predicate:"inputBotInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?InputWebDocument"},{name:"content",type:"flags.5?InputWebDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1984755728,predicate:"botInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1937807902,predicate:"botInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:295067450,predicate:"botInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?WebDocument"},{name:"content",type:"flags.5?WebDocument"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1803769784,predicate:"messages.botResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"query_id",type:"long"},{name:"next_offset",type:"flags.1?string"},{name:"switch_pm",type:"flags.2?InlineBotSwitchPM"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"users",type:"Vector"}],type:"messages.BotResults"},{id:1232025500,predicate:"updateBotInlineQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"peer_type",type:"flags.1?InlineQueryPeerType"},{name:"offset",type:"string"}],type:"Update"},{id:317794823,predicate:"updateBotInlineSend",params:[{name:"flags",type:"#"},{name:"user_id",type:"long"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"id",type:"string"},{name:"msg_id",type:"flags.1?InputBotInlineMessageID"}],type:"Update"},{id:1358283666,predicate:"inputMessagesFilterVoice",params:[],type:"MessagesFilter"},{id:928101534,predicate:"inputMessagesFilterMusic",params:[],type:"MessagesFilter"},{id:-1107622874,predicate:"inputPrivacyKeyChatInvite",params:[],type:"InputPrivacyKey"},{id:1343122938,predicate:"privacyKeyChatInvite",params:[],type:"PrivacyKey"},{id:1571494644,predicate:"exportedMessageLink",params:[{name:"link",type:"string"},{name:"html",type:"string"}],type:"ExportedMessageLink"},{id:1601666510,predicate:"messageFwdHeader",params:[{name:"flags",type:"#"},{name:"imported",type:"flags.7?true"},{name:"from_id",type:"flags.0?Peer"},{name:"from_name",type:"flags.5?string"},{name:"date",type:"int"},{name:"channel_post",type:"flags.2?int"},{name:"post_author",type:"flags.3?string"},{name:"saved_from_peer",type:"flags.4?Peer"},{name:"saved_from_msg_id",type:"flags.4?int"},{name:"psa_type",type:"flags.6?string"}],type:"MessageFwdHeader"},{id:457133559,predicate:"updateEditChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1799538451,predicate:"messageActionPinMessage",params:[],type:"MessageAction"},{id:1923290508,predicate:"auth.codeTypeSms",params:[],type:"auth.CodeType"},{id:1948046307,predicate:"auth.codeTypeCall",params:[],type:"auth.CodeType"},{id:577556219,predicate:"auth.codeTypeFlashCall",params:[],type:"auth.CodeType"},{id:1035688326,predicate:"auth.sentCodeTypeApp",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1073693790,predicate:"auth.sentCodeTypeSms",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:1398007207,predicate:"auth.sentCodeTypeCall",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1425815847,predicate:"auth.sentCodeTypeFlashCall",params:[{name:"pattern",type:"string"}],type:"auth.SentCodeType"},{id:629866245,predicate:"keyboardButtonUrl",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:901503851,predicate:"keyboardButtonCallback",params:[{name:"flags",type:"#"},{name:"requires_password",type:"flags.0?true"},{name:"text",type:"string"},{name:"data",type:"bytes"}],type:"KeyboardButton"},{id:-1318425559,predicate:"keyboardButtonRequestPhone",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-59151553,predicate:"keyboardButtonRequestGeoLocation",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:90744648,predicate:"keyboardButtonSwitchInline",params:[{name:"flags",type:"#"},{name:"same_peer",type:"flags.0?true"},{name:"text",type:"string"},{name:"query",type:"string"}],type:"KeyboardButton"},{id:1218642516,predicate:"replyInlineMarkup",params:[{name:"rows",type:"Vector"}],type:"ReplyMarkup"},{id:911761060,predicate:"messages.botCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"has_url",type:"flags.3?true"},{name:"native_ui",type:"flags.4?true"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"messages.BotCallbackAnswer"},{id:-1177566067,predicate:"updateBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:649453030,predicate:"messages.messageEditData",params:[{name:"flags",type:"#"},{name:"caption",type:"flags.0?true"}],type:"messages.MessageEditData"},{id:-469536605,predicate:"updateEditMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1768777083,predicate:"inputBotInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1098628881,predicate:"inputBotInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-1494368259,predicate:"inputBotInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:85477117,predicate:"botInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1970903652,predicate:"botInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:416402882,predicate:"botInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1462213465,predicate:"inputBotInlineResultPhoto",params:[{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"InputPhoto"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:-459324,predicate:"inputBotInlineResultDocument",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"document",type:"InputDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:400266251,predicate:"botInlineMediaResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"flags.0?Photo"},{name:"document",type:"flags.1?Document"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1995686519,predicate:"inputBotInlineMessageID",params:[{name:"dc_id",type:"int"},{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputBotInlineMessageID"},{id:1763610706,predicate:"updateInlineBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"msg_id",type:"InputBotInlineMessageID"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:1008755359,predicate:"inlineBotSwitchPM",params:[{name:"text",type:"string"},{name:"start_param",type:"string"}],type:"InlineBotSwitchPM"},{id:863093588,predicate:"messages.peerDialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"messages.PeerDialogs"},{id:-305282981,predicate:"topPeer",params:[{name:"peer",type:"Peer"},{name:"rating",type:"double"}],type:"TopPeer"},{id:-1419371685,predicate:"topPeerCategoryBotsPM",params:[],type:"TopPeerCategory"},{id:344356834,predicate:"topPeerCategoryBotsInline",params:[],type:"TopPeerCategory"},{id:104314861,predicate:"topPeerCategoryCorrespondents",params:[],type:"TopPeerCategory"},{id:-1122524854,predicate:"topPeerCategoryGroups",params:[],type:"TopPeerCategory"},{id:371037736,predicate:"topPeerCategoryChannels",params:[],type:"TopPeerCategory"},{id:-75283823,predicate:"topPeerCategoryPeers",params:[{name:"category",type:"TopPeerCategory"},{name:"count",type:"int"},{name:"peers",type:"Vector"}],type:"TopPeerCategoryPeers"},{id:-567906571,predicate:"contacts.topPeersNotModified",params:[],type:"contacts.TopPeers"},{id:1891070632,predicate:"contacts.topPeers",params:[{name:"categories",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.TopPeers"},{id:-595914432,predicate:"messageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"long"}],type:"MessageEntity"},{id:546203849,predicate:"inputMessageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"InputUser"}],type:"MessageEntity"},{id:975236280,predicate:"inputMessagesFilterChatPhotos",params:[],type:"MessagesFilter"},{id:-1218471511,predicate:"updateReadChannelOutbox",params:[{name:"channel_id",type:"long"},{name:"max_id",type:"int"}],type:"Update"},{id:457829485,predicate:"updateDraftMessage",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"top_msg_id",type:"flags.0?int"},{name:"draft",type:"DraftMessage"}],type:"Update"},{id:453805082,predicate:"draftMessageEmpty",params:[{name:"flags",type:"#"},{name:"date",type:"flags.0?int"}],type:"DraftMessage"},{id:-40996577,predicate:"draftMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"},{name:"date",type:"int"}],type:"DraftMessage"},{id:-1615153660,predicate:"messageActionHistoryClear",params:[],type:"MessageAction"},{id:-958657434,predicate:"messages.featuredStickersNotModified",params:[{name:"count",type:"int"}],type:"messages.FeaturedStickers"},{id:-1103615738,predicate:"messages.featuredStickers",params:[{name:"flags",type:"#"},{name:"premium",type:"flags.0?true"},{name:"hash",type:"long"},{name:"count",type:"int"},{name:"sets",type:"Vector"},{name:"unread",type:"Vector"}],type:"messages.FeaturedStickers"},{id:1461528386,predicate:"updateReadFeaturedStickers",params:[],type:"Update"},{id:186120336,predicate:"messages.recentStickersNotModified",params:[],type:"messages.RecentStickers"},{id:-1999405994,predicate:"messages.recentStickers",params:[{name:"hash",type:"long"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"},{name:"dates",type:"Vector"}],type:"messages.RecentStickers"},{id:-1706939360,predicate:"updateRecentStickers",params:[],type:"Update"},{id:1338747336,predicate:"messages.archivedStickers",params:[{name:"count",type:"int"},{name:"sets",type:"Vector"}],type:"messages.ArchivedStickers"},{id:946083368,predicate:"messages.stickerSetInstallResultSuccess",params:[],type:"messages.StickerSetInstallResult"},{id:904138920,predicate:"messages.stickerSetInstallResultArchive",params:[{name:"sets",type:"Vector"}],type:"messages.StickerSetInstallResult"},{id:1678812626,predicate:"stickerSetCovered",params:[{name:"set",type:"StickerSet"},{name:"cover",type:"Document"}],type:"StickerSetCovered"},{id:-1574314746,predicate:"updateConfig",params:[],type:"Update"},{id:861169551,predicate:"updatePtsChanged",params:[],type:"Update"},{id:-440664550,predicate:"inputMediaPhotoExternal",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.1?true"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-78455655,predicate:"inputMediaDocumentExternal",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.1?true"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:872932635,predicate:"stickerSetMultiCovered",params:[{name:"set",type:"StickerSet"},{name:"covers",type:"Vector"}],type:"StickerSetCovered"},{id:-1361650766,predicate:"maskCoords",params:[{name:"n",type:"int"},{name:"x",type:"double"},{name:"y",type:"double"},{name:"zoom",type:"double"}],type:"MaskCoords"},{id:-1744710921,predicate:"documentAttributeHasStickers",params:[],type:"DocumentAttribute"},{id:1251549527,predicate:"inputStickeredMediaPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputStickeredMedia"},{id:70813275,predicate:"inputStickeredMediaDocument",params:[{name:"id",type:"InputDocument"}],type:"InputStickeredMedia"},{id:-1107729093,predicate:"game",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"short_name",type:"string"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"Photo"},{name:"document",type:"flags.0?Document"}],type:"Game"},{id:1336154098,predicate:"inputBotInlineResultGame",params:[{name:"id",type:"string"},{name:"short_name",type:"string"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1262639204,predicate:"inputBotInlineMessageGame",params:[{name:"flags",type:"#"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-38694904,predicate:"messageMediaGame",params:[{name:"game",type:"Game"}],type:"MessageMedia"},{id:-750828557,predicate:"inputMediaGame",params:[{name:"id",type:"InputGame"}],type:"InputMedia"},{id:53231223,predicate:"inputGameID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGame"},{id:-1020139510,predicate:"inputGameShortName",params:[{name:"bot_id",type:"InputUser"},{name:"short_name",type:"string"}],type:"InputGame"},{id:1358175439,predicate:"keyboardButtonGame",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-1834538890,predicate:"messageActionGameScore",params:[{name:"game_id",type:"long"},{name:"score",type:"int"}],type:"MessageAction"},{id:1940093419,predicate:"highScore",params:[{name:"pos",type:"int"},{name:"user_id",type:"long"},{name:"score",type:"int"}],type:"HighScore"},{id:-1707344487,predicate:"messages.highScores",params:[{name:"scores",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.HighScores"},{id:1258196845,predicate:"updates.differenceTooLong",params:[{name:"pts",type:"int"}],type:"updates.Difference"},{id:791390623,predicate:"updateChannelWebPage",params:[{name:"channel_id",type:"long"},{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1663561404,predicate:"messages.chatsSlice",params:[{name:"count",type:"int"},{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-599948721,predicate:"textEmpty",params:[],type:"RichText"},{id:1950782688,predicate:"textPlain",params:[{name:"text",type:"string"}],type:"RichText"},{id:1730456516,predicate:"textBold",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-653089380,predicate:"textItalic",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1054465340,predicate:"textUnderline",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1678197867,predicate:"textStrike",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1816074681,predicate:"textFixed",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1009288385,predicate:"textUrl",params:[{name:"text",type:"RichText"},{name:"url",type:"string"},{name:"webpage_id",type:"long"}],type:"RichText"},{id:-564523562,predicate:"textEmail",params:[{name:"text",type:"RichText"},{name:"email",type:"string"}],type:"RichText"},{id:2120376535,predicate:"textConcat",params:[{name:"texts",type:"Vector"}],type:"RichText"},{id:324435594,predicate:"pageBlockUnsupported",params:[],type:"PageBlock"},{id:1890305021,predicate:"pageBlockTitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1879401953,predicate:"pageBlockSubtitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1162877472,predicate:"pageBlockAuthorDate",params:[{name:"author",type:"RichText"},{name:"published_date",type:"int"}],type:"PageBlock"},{id:-1076861716,predicate:"pageBlockHeader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-248793375,predicate:"pageBlockSubheader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:1182402406,predicate:"pageBlockParagraph",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1066346178,predicate:"pageBlockPreformatted",params:[{name:"text",type:"RichText"},{name:"language",type:"string"}],type:"PageBlock"},{id:1216809369,predicate:"pageBlockFooter",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-618614392,predicate:"pageBlockDivider",params:[],type:"PageBlock"},{id:-837994576,predicate:"pageBlockAnchor",params:[{name:"name",type:"string"}],type:"PageBlock"},{id:-454524911,predicate:"pageBlockList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:641563686,predicate:"pageBlockBlockquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:1329878739,predicate:"pageBlockPullquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:391759200,predicate:"pageBlockPhoto",params:[{name:"flags",type:"#"},{name:"photo_id",type:"long"},{name:"caption",type:"PageCaption"},{name:"url",type:"flags.0?string"},{name:"webpage_id",type:"flags.0?long"}],type:"PageBlock"},{id:2089805750,predicate:"pageBlockVideo",params:[{name:"flags",type:"#"},{name:"autoplay",type:"flags.0?true"},{name:"loop",type:"flags.1?true"},{name:"video_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:972174080,predicate:"pageBlockCover",params:[{name:"cover",type:"PageBlock"}],type:"PageBlock"},{id:-1468953147,predicate:"pageBlockEmbed",params:[{name:"flags",type:"#"},{name:"full_width",type:"flags.0?true"},{name:"allow_scrolling",type:"flags.3?true"},{name:"url",type:"flags.1?string"},{name:"html",type:"flags.2?string"},{name:"poster_photo_id",type:"flags.4?long"},{name:"w",type:"flags.5?int"},{name:"h",type:"flags.5?int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-229005301,predicate:"pageBlockEmbedPost",params:[{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"author_photo_id",type:"long"},{name:"author",type:"string"},{name:"date",type:"int"},{name:"blocks",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1705048653,predicate:"pageBlockCollage",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:52401552,predicate:"pageBlockSlideshow",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1930545681,predicate:"webPageNotModified",params:[{name:"flags",type:"#"},{name:"cached_page_views",type:"flags.0?int"}],type:"WebPage"},{id:-88417185,predicate:"inputPrivacyKeyPhoneCall",params:[],type:"InputPrivacyKey"},{id:1030105979,predicate:"privacyKeyPhoneCall",params:[],type:"PrivacyKey"},{id:-580219064,predicate:"sendMessageGamePlayAction",params:[],type:"SendMessageAction"},{id:-2048646399,predicate:"phoneCallDiscardReasonMissed",params:[],type:"PhoneCallDiscardReason"},{id:-527056480,predicate:"phoneCallDiscardReasonDisconnect",params:[],type:"PhoneCallDiscardReason"},{id:1471006352,predicate:"phoneCallDiscardReasonHangup",params:[],type:"PhoneCallDiscardReason"},{id:-84416311,predicate:"phoneCallDiscardReasonBusy",params:[],type:"PhoneCallDiscardReason"},{id:1852826908,predicate:"updateDialogPinned",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-99664734,predicate:"updatePinnedDialogs",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.1?int"},{name:"order",type:"flags.0?Vector"}],type:"Update"},{id:2104790276,predicate:"dataJSON",params:[{name:"data",type:"string"}],type:"DataJSON"},{id:-2095595325,predicate:"updateBotWebhookJSON",params:[{name:"data",type:"DataJSON"}],type:"Update"},{id:-1684914010,predicate:"updateBotWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"},{name:"timeout",type:"int"}],type:"Update"},{id:-886477832,predicate:"labeledPrice",params:[{name:"label",type:"string"},{name:"amount",type:"long"}],type:"LabeledPrice"},{id:1048946971,predicate:"invoice",params:[{name:"flags",type:"#"},{name:"test",type:"flags.0?true"},{name:"name_requested",type:"flags.1?true"},{name:"phone_requested",type:"flags.2?true"},{name:"email_requested",type:"flags.3?true"},{name:"shipping_address_requested",type:"flags.4?true"},{name:"flexible",type:"flags.5?true"},{name:"phone_to_provider",type:"flags.6?true"},{name:"email_to_provider",type:"flags.7?true"},{name:"recurring",type:"flags.9?true"},{name:"currency",type:"string"},{name:"prices",type:"Vector"},{name:"max_tip_amount",type:"flags.8?long"},{name:"suggested_tip_amounts",type:"flags.8?Vector"},{name:"recurring_terms_url",type:"flags.9?string"}],type:"Invoice"},{id:-1900697899,predicate:"inputMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"start_param",type:"flags.1?string"},{name:"extended_media",type:"flags.2?InputMedia"}],type:"InputMedia"},{id:-368917890,predicate:"paymentCharge",params:[{name:"id",type:"string"},{name:"provider_charge_id",type:"string"}],type:"PaymentCharge"},{id:-1892568281,predicate:"messageActionPaymentSentMe",params:[{name:"flags",type:"#"},{name:"recurring_init",type:"flags.2?true"},{name:"recurring_used",type:"flags.3?true"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"charge",type:"PaymentCharge"}],type:"MessageAction"},{id:-156940077,predicate:"messageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"receipt_msg_id",type:"flags.2?int"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"start_param",type:"string"},{name:"extended_media",type:"flags.4?MessageExtendedMedia"}],type:"MessageMedia"},{id:512535275,predicate:"postAddress",params:[{name:"street_line1",type:"string"},{name:"street_line2",type:"string"},{name:"city",type:"string"},{name:"state",type:"string"},{name:"country_iso2",type:"string"},{name:"post_code",type:"string"}],type:"PostAddress"},{id:-1868808300,predicate:"paymentRequestedInfo",params:[{name:"flags",type:"#"},{name:"name",type:"flags.0?string"},{name:"phone",type:"flags.1?string"},{name:"email",type:"flags.2?string"},{name:"shipping_address",type:"flags.3?PostAddress"}],type:"PaymentRequestedInfo"},{id:-1344716869,predicate:"keyboardButtonBuy",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-1776926890,predicate:"messageActionPaymentSent",params:[{name:"flags",type:"#"},{name:"recurring_init",type:"flags.2?true"},{name:"recurring_used",type:"flags.3?true"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"invoice_slug",type:"flags.0?string"}],type:"MessageAction"},{id:-842892769,predicate:"paymentSavedCredentialsCard",params:[{name:"id",type:"string"},{name:"title",type:"string"}],type:"PaymentSavedCredentials"},{id:475467473,predicate:"webDocument",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:-1678949555,predicate:"inputWebDocument",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"InputWebDocument"},{id:-1036396922,predicate:"inputWebFileLocation",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"}],type:"InputWebFileLocation"},{id:568808380,predicate:"upload.webFile",params:[{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"file_type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.WebFile"},{id:-1610250415,predicate:"payments.paymentForm",params:[{name:"flags",type:"#"},{name:"can_save_credentials",type:"flags.2?true"},{name:"password_missing",type:"flags.3?true"},{name:"form_id",type:"long"},{name:"bot_id",type:"long"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.5?WebDocument"},{name:"invoice",type:"Invoice"},{name:"provider_id",type:"long"},{name:"url",type:"string"},{name:"native_provider",type:"flags.4?string"},{name:"native_params",type:"flags.4?DataJSON"},{name:"additional_methods",type:"flags.6?Vector"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"},{name:"saved_credentials",type:"flags.1?Vector"},{name:"users",type:"Vector"}],type:"payments.PaymentForm"},{id:-784000893,predicate:"payments.validatedRequestedInfo",params:[{name:"flags",type:"#"},{name:"id",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"payments.ValidatedRequestedInfo"},{id:1314881805,predicate:"payments.paymentResult",params:[{name:"updates",type:"Updates"}],type:"payments.PaymentResult"},{id:1891958275,predicate:"payments.paymentReceipt",params:[{name:"flags",type:"#"},{name:"date",type:"int"},{name:"bot_id",type:"long"},{name:"provider_id",type:"long"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.2?WebDocument"},{name:"invoice",type:"Invoice"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping",type:"flags.1?ShippingOption"},{name:"tip_amount",type:"flags.3?long"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"credentials_title",type:"string"},{name:"users",type:"Vector"}],type:"payments.PaymentReceipt"},{id:-74456004,predicate:"payments.savedInfo",params:[{name:"flags",type:"#"},{name:"has_saved_credentials",type:"flags.1?true"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"}],type:"payments.SavedInfo"},{id:-1056001329,predicate:"inputPaymentCredentialsSaved",params:[{name:"id",type:"string"},{name:"tmp_password",type:"bytes"}],type:"InputPaymentCredentials"},{id:873977640,predicate:"inputPaymentCredentials",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-614138572,predicate:"account.tmpPassword",params:[{name:"tmp_password",type:"bytes"},{name:"valid_until",type:"int"}],type:"account.TmpPassword"},{id:-1239335713,predicate:"shippingOption",params:[{name:"id",type:"string"},{name:"title",type:"string"},{name:"prices",type:"Vector"}],type:"ShippingOption"},{id:-1246823043,predicate:"updateBotShippingQuery",params:[{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"payload",type:"bytes"},{name:"shipping_address",type:"PostAddress"}],type:"Update"},{id:-1934976362,predicate:"updateBotPrecheckoutQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"Update"},{id:-6249322,predicate:"inputStickerSetItem",params:[{name:"flags",type:"#"},{name:"document",type:"InputDocument"},{name:"emoji",type:"string"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"InputStickerSetItem"},{id:-1425052898,predicate:"updatePhoneCall",params:[{name:"phone_call",type:"PhoneCall"}],type:"Update"},{id:506920429,predicate:"inputPhoneCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPhoneCall"},{id:1399245077,predicate:"phoneCallEmpty",params:[{name:"id",type:"long"}],type:"PhoneCall"},{id:-987599081,predicate:"phoneCallWaiting",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"protocol",type:"PhoneCallProtocol"},{name:"receive_date",type:"flags.0?int"}],type:"PhoneCall"},{id:347139340,predicate:"phoneCallRequested",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:912311057,predicate:"phoneCallAccepted",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:-1770029977,predicate:"phoneCall",params:[{name:"flags",type:"#"},{name:"p2p_allowed",type:"flags.5?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"},{name:"connections",type:"Vector"},{name:"start_date",type:"int"}],type:"PhoneCall"},{id:1355435489,predicate:"phoneCallDiscarded",params:[{name:"flags",type:"#"},{name:"need_rating",type:"flags.2?true"},{name:"need_debug",type:"flags.3?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"PhoneCall"},{id:-1665063993,predicate:"phoneConnection",params:[{name:"flags",type:"#"},{name:"tcp",type:"flags.0?true"},{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"peer_tag",type:"bytes"}],type:"PhoneConnection"},{id:-58224696,predicate:"phoneCallProtocol",params:[{name:"flags",type:"#"},{name:"udp_p2p",type:"flags.0?true"},{name:"udp_reflector",type:"flags.1?true"},{name:"min_layer",type:"int"},{name:"max_layer",type:"int"},{name:"library_versions",type:"Vector"}],type:"PhoneCallProtocol"},{id:-326966976,predicate:"phone.phoneCall",params:[{name:"phone_call",type:"PhoneCall"},{name:"users",type:"Vector"}],type:"phone.PhoneCall"},{id:-2134272152,predicate:"inputMessagesFilterPhoneCalls",params:[{name:"flags",type:"#"},{name:"missed",type:"flags.0?true"}],type:"MessagesFilter"},{id:-2132731265,predicate:"messageActionPhoneCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.2?true"},{name:"call_id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"MessageAction"},{id:2054952868,predicate:"inputMessagesFilterRoundVoice",params:[],type:"MessagesFilter"},{id:-1253451181,predicate:"inputMessagesFilterRoundVideo",params:[],type:"MessagesFilter"},{id:-1997373508,predicate:"sendMessageRecordRoundAction",params:[],type:"SendMessageAction"},{id:608050278,predicate:"sendMessageUploadRoundAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-242427324,predicate:"upload.fileCdnRedirect",params:[{name:"dc_id",type:"int"},{name:"file_token",type:"bytes"},{name:"encryption_key",type:"bytes"},{name:"encryption_iv",type:"bytes"},{name:"file_hashes",type:"Vector"}],type:"upload.File"},{id:-290921362,predicate:"upload.cdnFileReuploadNeeded",params:[{name:"request_token",type:"bytes"}],type:"upload.CdnFile"},{id:-1449145777,predicate:"upload.cdnFile",params:[{name:"bytes",type:"bytes"}],type:"upload.CdnFile"},{id:-914167110,predicate:"cdnPublicKey",params:[{name:"dc_id",type:"int"},{name:"public_key",type:"string"}],type:"CdnPublicKey"},{id:1462101002,predicate:"cdnConfig",params:[{name:"public_keys",type:"Vector"}],type:"CdnConfig"},{id:-283684427,predicate:"pageBlockChannel",params:[{name:"channel",type:"Chat"}],type:"PageBlock"},{id:-892239370,predicate:"langPackString",params:[{name:"key",type:"string"},{name:"value",type:"string"}],type:"LangPackString"},{id:1816636575,predicate:"langPackStringPluralized",params:[{name:"flags",type:"#"},{name:"key",type:"string"},{name:"zero_value",type:"flags.0?string"},{name:"one_value",type:"flags.1?string"},{name:"two_value",type:"flags.2?string"},{name:"few_value",type:"flags.3?string"},{name:"many_value",type:"flags.4?string"},{name:"other_value",type:"string"}],type:"LangPackString"},{id:695856818,predicate:"langPackStringDeleted",params:[{name:"key",type:"string"}],type:"LangPackString"},{id:-209337866,predicate:"langPackDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"strings",type:"Vector"}],type:"LangPackDifference"},{id:-288727837,predicate:"langPackLanguage",params:[{name:"flags",type:"#"},{name:"official",type:"flags.0?true"},{name:"rtl",type:"flags.2?true"},{name:"beta",type:"flags.3?true"},{name:"name",type:"string"},{name:"native_name",type:"string"},{name:"lang_code",type:"string"},{name:"base_lang_code",type:"flags.1?string"},{name:"plural_code",type:"string"},{name:"strings_count",type:"int"},{name:"translated_count",type:"int"},{name:"translations_url",type:"string"}],type:"LangPackLanguage"},{id:1180041828,predicate:"updateLangPackTooLong",params:[{name:"lang_code",type:"string"}],type:"Update"},{id:1442983757,predicate:"updateLangPack",params:[{name:"difference",type:"LangPackDifference"}],type:"Update"},{id:885242707,predicate:"channelParticipantAdmin",params:[{name:"flags",type:"#"},{name:"can_edit",type:"flags.0?true"},{name:"self",type:"flags.1?true"},{name:"user_id",type:"long"},{name:"inviter_id",type:"flags.1?long"},{name:"promoted_by",type:"long"},{name:"date",type:"int"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.2?string"}],type:"ChannelParticipant"},{id:1844969806,predicate:"channelParticipantBanned",params:[{name:"flags",type:"#"},{name:"left",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"kicked_by",type:"long"},{name:"date",type:"int"},{name:"banned_rights",type:"ChatBannedRights"}],type:"ChannelParticipant"},{id:338142689,predicate:"channelParticipantsBanned",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:106343499,predicate:"channelParticipantsSearch",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-421545947,predicate:"channelAdminLogEventActionChangeTitle",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1427671598,predicate:"channelAdminLogEventActionChangeAbout",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1783299128,predicate:"channelAdminLogEventActionChangeUsername",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1129042607,predicate:"channelAdminLogEventActionChangePhoto",params:[{name:"prev_photo",type:"Photo"},{name:"new_photo",type:"Photo"}],type:"ChannelAdminLogEventAction"},{id:460916654,predicate:"channelAdminLogEventActionToggleInvites",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:648939889,predicate:"channelAdminLogEventActionToggleSignatures",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-370660328,predicate:"channelAdminLogEventActionUpdatePinned",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1889215493,predicate:"channelAdminLogEventActionEditMessage",params:[{name:"prev_message",type:"Message"},{name:"new_message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1121994683,predicate:"channelAdminLogEventActionDeleteMessage",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:405815507,predicate:"channelAdminLogEventActionParticipantJoin",params:[],type:"ChannelAdminLogEventAction"},{id:-124291086,predicate:"channelAdminLogEventActionParticipantLeave",params:[],type:"ChannelAdminLogEventAction"},{id:-484690728,predicate:"channelAdminLogEventActionParticipantInvite",params:[{name:"participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-422036098,predicate:"channelAdminLogEventActionParticipantToggleBan",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-714643696,predicate:"channelAdminLogEventActionParticipantToggleAdmin",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:531458253,predicate:"channelAdminLogEvent",params:[{name:"id",type:"long"},{name:"date",type:"int"},{name:"user_id",type:"long"},{name:"action",type:"ChannelAdminLogEventAction"}],type:"ChannelAdminLogEvent"},{id:-309659827,predicate:"channels.adminLogResults",params:[{name:"events",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.AdminLogResults"},{id:-368018716,predicate:"channelAdminLogEventsFilter",params:[{name:"flags",type:"#"},{name:"join",type:"flags.0?true"},{name:"leave",type:"flags.1?true"},{name:"invite",type:"flags.2?true"},{name:"ban",type:"flags.3?true"},{name:"unban",type:"flags.4?true"},{name:"kick",type:"flags.5?true"},{name:"unkick",type:"flags.6?true"},{name:"promote",type:"flags.7?true"},{name:"demote",type:"flags.8?true"},{name:"info",type:"flags.9?true"},{name:"settings",type:"flags.10?true"},{name:"pinned",type:"flags.11?true"},{name:"edit",type:"flags.12?true"},{name:"delete",type:"flags.13?true"},{name:"group_call",type:"flags.14?true"},{name:"invites",type:"flags.15?true"},{name:"send",type:"flags.16?true"},{name:"forums",type:"flags.17?true"}],type:"ChannelAdminLogEventsFilter"},{id:511092620,predicate:"topPeerCategoryPhoneCalls",params:[],type:"TopPeerCategory"},{id:-2143067670,predicate:"pageBlockAudio",params:[{name:"audio_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1558266229,predicate:"popularContact",params:[{name:"client_id",type:"long"},{name:"importers",type:"int"}],type:"PopularContact"},{id:1200788123,predicate:"messageActionScreenshotTaken",params:[],type:"MessageAction"},{id:-1634752813,predicate:"messages.favedStickersNotModified",params:[],type:"messages.FavedStickers"},{id:750063767,predicate:"messages.favedStickers",params:[{name:"hash",type:"long"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"}],type:"messages.FavedStickers"},{id:-451831443,predicate:"updateFavedStickers",params:[],type:"Update"},{id:-366410403,predicate:"updateChannelReadMessagesContents",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"top_msg_id",type:"flags.0?int"},{name:"messages",type:"Vector"}],type:"Update"},{id:-1040652646,predicate:"inputMessagesFilterMyMentions",params:[],type:"MessagesFilter"},{id:1887741886,predicate:"updateContactsReset",params:[],type:"Update"},{id:-1312568665,predicate:"channelAdminLogEventActionChangeStickerSet",params:[{name:"prev_stickerset",type:"InputStickerSet"},{name:"new_stickerset",type:"InputStickerSet"}],type:"ChannelAdminLogEventAction"},{id:-85549226,predicate:"messageActionCustomAction",params:[{name:"message",type:"string"}],type:"MessageAction"},{id:178373535,predicate:"inputPaymentCredentialsApplePay",params:[{name:"payment_data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-419271411,predicate:"inputMessagesFilterGeo",params:[],type:"MessagesFilter"},{id:-530392189,predicate:"inputMessagesFilterContacts",params:[],type:"MessagesFilter"},{id:-1304443240,predicate:"updateChannelAvailableMessages",params:[{name:"channel_id",type:"long"},{name:"available_min_id",type:"int"}],type:"Update"},{id:1599903217,predicate:"channelAdminLogEventActionTogglePreHistoryHidden",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1759532989,predicate:"inputMediaGeoLive",params:[{name:"flags",type:"#"},{name:"stopped",type:"flags.0?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.2?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"}],type:"InputMedia"},{id:-1186937242,predicate:"messageMediaGeoLive",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"int"},{name:"proximity_notification_radius",type:"flags.1?int"}],type:"MessageMedia"},{id:1189204285,predicate:"recentMeUrlUnknown",params:[{name:"url",type:"string"}],type:"RecentMeUrl"},{id:-1188296222,predicate:"recentMeUrlUser",params:[{name:"url",type:"string"},{name:"user_id",type:"long"}],type:"RecentMeUrl"},{id:-1294306862,predicate:"recentMeUrlChat",params:[{name:"url",type:"string"},{name:"chat_id",type:"long"}],type:"RecentMeUrl"},{id:-347535331,predicate:"recentMeUrlChatInvite",params:[{name:"url",type:"string"},{name:"chat_invite",type:"ChatInvite"}],type:"RecentMeUrl"},{id:-1140172836,predicate:"recentMeUrlStickerSet",params:[{name:"url",type:"string"},{name:"set",type:"StickerSetCovered"}],type:"RecentMeUrl"},{id:235081943,predicate:"help.recentMeUrls",params:[{name:"urls",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"help.RecentMeUrls"},{id:-266911767,predicate:"channels.channelParticipantsNotModified",params:[],type:"channels.ChannelParticipants"},{id:1951620897,predicate:"messages.messagesNotModified",params:[{name:"count",type:"int"}],type:"messages.Messages"},{id:482797855,predicate:"inputSingleMedia",params:[{name:"flags",type:"#"},{name:"media",type:"InputMedia"},{name:"random_id",type:"long"},{name:"message",type:"string"},{name:"entities",type:"flags.0?Vector"}],type:"InputSingleMedia"},{id:-1493633966,predicate:"webAuthorization",params:[{name:"hash",type:"long"},{name:"bot_id",type:"long"},{name:"domain",type:"string"},{name:"browser",type:"string"},{name:"platform",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"region",type:"string"}],type:"WebAuthorization"},{id:-313079300,predicate:"account.webAuthorizations",params:[{name:"authorizations",type:"Vector"},{name:"users",type:"Vector"}],type:"account.WebAuthorizations"},{id:-1502174430,predicate:"inputMessageID",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-1160215659,predicate:"inputMessageReplyTo",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-2037963464,predicate:"inputMessagePinned",params:[],type:"InputMessage"},{id:-1687559349,predicate:"messageEntityPhone",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1280209983,predicate:"messageEntityCashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1410748418,predicate:"messageActionBotAllowed",params:[{name:"domain",type:"string"}],type:"MessageAction"},{id:-55902537,predicate:"inputDialogPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputDialogPeer"},{id:-445792507,predicate:"dialogPeer",params:[{name:"peer",type:"Peer"}],type:"DialogPeer"},{id:223655517,predicate:"messages.foundStickerSetsNotModified",params:[],type:"messages.FoundStickerSets"},{id:-1963942446,predicate:"messages.foundStickerSets",params:[{name:"hash",type:"long"},{name:"sets",type:"Vector"}],type:"messages.FoundStickerSets"},{id:-207944868,predicate:"fileHash",params:[{name:"offset",type:"long"},{name:"limit",type:"int"},{name:"hash",type:"bytes"}],type:"FileHash"},{id:-104284986,predicate:"webDocumentNoProxy",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:1968737087,predicate:"inputClientProxy",params:[{name:"address",type:"string"},{name:"port",type:"int"}],type:"InputClientProxy"},{id:-483352705,predicate:"help.termsOfServiceUpdateEmpty",params:[{name:"expires",type:"int"}],type:"help.TermsOfServiceUpdate"},{id:686618977,predicate:"help.termsOfServiceUpdate",params:[{name:"expires",type:"int"},{name:"terms_of_service",type:"help.TermsOfService"}],type:"help.TermsOfServiceUpdate"},{id:859091184,predicate:"inputSecureFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"InputSecureFile"},{id:1399317950,predicate:"inputSecureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputSecureFile"},{id:-876089816,predicate:"inputSecureFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:1679398724,predicate:"secureFileEmpty",params:[],type:"SecureFile"},{id:2097791614,predicate:"secureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"long"},{name:"dc_id",type:"int"},{name:"date",type:"int"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureFile"},{id:-1964327229,predicate:"secureData",params:[{name:"data",type:"bytes"},{name:"data_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureData"},{id:2103482845,predicate:"securePlainPhone",params:[{name:"phone",type:"string"}],type:"SecurePlainData"},{id:569137759,predicate:"securePlainEmail",params:[{name:"email",type:"string"}],type:"SecurePlainData"},{id:-1658158621,predicate:"secureValueTypePersonalDetails",params:[],type:"SecureValueType"},{id:1034709504,predicate:"secureValueTypePassport",params:[],type:"SecureValueType"},{id:115615172,predicate:"secureValueTypeDriverLicense",params:[],type:"SecureValueType"},{id:-1596951477,predicate:"secureValueTypeIdentityCard",params:[],type:"SecureValueType"},{id:-1717268701,predicate:"secureValueTypeInternalPassport",params:[],type:"SecureValueType"},{id:-874308058,predicate:"secureValueTypeAddress",params:[],type:"SecureValueType"},{id:-63531698,predicate:"secureValueTypeUtilityBill",params:[],type:"SecureValueType"},{id:-1995211763,predicate:"secureValueTypeBankStatement",params:[],type:"SecureValueType"},{id:-1954007928,predicate:"secureValueTypeRentalAgreement",params:[],type:"SecureValueType"},{id:-1713143702,predicate:"secureValueTypePassportRegistration",params:[],type:"SecureValueType"},{id:-368907213,predicate:"secureValueTypeTemporaryRegistration",params:[],type:"SecureValueType"},{id:-1289704741,predicate:"secureValueTypePhone",params:[],type:"SecureValueType"},{id:-1908627474,predicate:"secureValueTypeEmail",params:[],type:"SecureValueType"},{id:411017418,predicate:"secureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?SecureFile"},{name:"reverse_side",type:"flags.2?SecureFile"},{name:"selfie",type:"flags.3?SecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"},{name:"hash",type:"bytes"}],type:"SecureValue"},{id:-618540889,predicate:"inputSecureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?InputSecureFile"},{name:"reverse_side",type:"flags.2?InputSecureFile"},{name:"selfie",type:"flags.3?InputSecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"}],type:"InputSecureValue"},{id:-316748368,predicate:"secureValueHash",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"}],type:"SecureValueHash"},{id:-391902247,predicate:"secureValueErrorData",params:[{name:"type",type:"SecureValueType"},{name:"data_hash",type:"bytes"},{name:"field",type:"string"},{name:"text",type:"string"}],type:"SecureValueError"},{id:12467706,predicate:"secureValueErrorFrontSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2037765467,predicate:"secureValueErrorReverseSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-449327402,predicate:"secureValueErrorSelfie",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:2054162547,predicate:"secureValueErrorFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:1717706985,predicate:"secureValueErrorFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:871426631,predicate:"secureCredentialsEncrypted",params:[{name:"data",type:"bytes"},{name:"hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureCredentialsEncrypted"},{id:-1389486888,predicate:"account.authorizationForm",params:[{name:"flags",type:"#"},{name:"required_types",type:"Vector"},{name:"values",type:"Vector"},{name:"errors",type:"Vector"},{name:"users",type:"Vector"},{name:"privacy_policy_url",type:"flags.0?string"}],type:"account.AuthorizationForm"},{id:-2128640689,predicate:"account.sentEmailCode",params:[{name:"email_pattern",type:"string"},{name:"length",type:"int"}],type:"account.SentEmailCode"},{id:455635795,predicate:"messageActionSecureValuesSentMe",params:[{name:"values",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"MessageAction"},{id:-648257196,predicate:"messageActionSecureValuesSent",params:[{name:"types",type:"Vector"}],type:"MessageAction"},{id:1722786150,predicate:"help.deepLinkInfoEmpty",params:[],type:"help.DeepLinkInfo"},{id:1783556146,predicate:"help.deepLinkInfo",params:[{name:"flags",type:"#"},{name:"update_app",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"}],type:"help.DeepLinkInfo"},{id:289586518,predicate:"savedPhoneContact",params:[{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"date",type:"int"}],type:"SavedContact"},{id:1304052993,predicate:"account.takeout",params:[{name:"id",type:"long"}],type:"account.Takeout"},{id:700340377,predicate:"inputTakeoutFileLocation",params:[],type:"InputFileLocation"},{id:-513517117,predicate:"updateDialogUnreadMark",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-253500010,predicate:"messages.dialogsNotModified",params:[{name:"count",type:"int"}],type:"messages.Dialogs"},{id:-1625153079,predicate:"inputWebFileGeoPointLocation",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"access_hash",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"zoom",type:"int"},{name:"scale",type:"int"}],type:"InputWebFileLocation"},{id:-1255369827,predicate:"contacts.topPeersDisabled",params:[],type:"contacts.TopPeers"},{id:-1685456582,predicate:"inputReportReasonCopyright",params:[],type:"ReportReason"},{id:-732254058,predicate:"passwordKdfAlgoUnknown",params:[],type:"PasswordKdfAlgo"},{id:4883767,predicate:"securePasswordKdfAlgoUnknown",params:[],type:"SecurePasswordKdfAlgo"},{id:-1141711456,predicate:"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:-2042159726,predicate:"securePasswordKdfAlgoSHA512",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:354925740,predicate:"secureSecretSettings",params:[{name:"secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_secret",type:"bytes"},{name:"secure_secret_id",type:"long"}],type:"SecureSecretSettings"},{id:982592842,predicate:"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow",params:[{name:"salt1",type:"bytes"},{name:"salt2",type:"bytes"},{name:"g",type:"int"},{name:"p",type:"bytes"}],type:"PasswordKdfAlgo"},{id:-1736378792,predicate:"inputCheckPasswordEmpty",params:[],type:"InputCheckPasswordSRP"},{id:-763367294,predicate:"inputCheckPasswordSRP",params:[{name:"srp_id",type:"long"},{name:"A",type:"bytes"},{name:"M1",type:"bytes"}],type:"InputCheckPasswordSRP"},{id:-2036501105,predicate:"secureValueError",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-1592506512,predicate:"secureValueErrorTranslationFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:878931416,predicate:"secureValueErrorTranslationFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2103600678,predicate:"secureRequiredType",params:[{name:"flags",type:"#"},{name:"native_names",type:"flags.0?true"},{name:"selfie_required",type:"flags.1?true"},{name:"translation_required",type:"flags.2?true"},{name:"type",type:"SecureValueType"}],type:"SecureRequiredType"},{id:41187252,predicate:"secureRequiredTypeOneOf",params:[{name:"types",type:"Vector"}],type:"SecureRequiredType"},{id:-1078332329,predicate:"help.passportConfigNotModified",params:[],type:"help.PassportConfig"},{id:-1600596305,predicate:"help.passportConfig",params:[{name:"hash",type:"int"},{name:"countries_langs",type:"DataJSON"}],type:"help.PassportConfig"},{id:488313413,predicate:"inputAppEvent",params:[{name:"time",type:"double"},{name:"type",type:"string"},{name:"peer",type:"long"},{name:"data",type:"JSONValue"}],type:"InputAppEvent"},{id:-1059185703,predicate:"jsonObjectValue",params:[{name:"key",type:"string"},{name:"value",type:"JSONValue"}],type:"JSONObjectValue"},{id:1064139624,predicate:"jsonNull",params:[],type:"JSONValue"},{id:-952869270,predicate:"jsonBool",params:[{name:"value",type:"Bool"}],type:"JSONValue"},{id:736157604,predicate:"jsonNumber",params:[{name:"value",type:"double"}],type:"JSONValue"},{id:-1222740358,predicate:"jsonString",params:[{name:"value",type:"string"}],type:"JSONValue"},{id:-146520221,predicate:"jsonArray",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1715350371,predicate:"jsonObject",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1311015810,predicate:"inputNotifyBroadcasts",params:[],type:"InputNotifyPeer"},{id:-703403793,predicate:"notifyBroadcasts",params:[],type:"NotifyPeer"},{id:-311786236,predicate:"textSubscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-939827711,predicate:"textSuperscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:55281185,predicate:"textMarked",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:483104362,predicate:"textPhone",params:[{name:"text",type:"RichText"},{name:"phone",type:"string"}],type:"RichText"},{id:136105807,predicate:"textImage",params:[{name:"document_id",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"RichText"},{id:504660880,predicate:"pageBlockKicker",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:878078826,predicate:"pageTableCell",params:[{name:"flags",type:"#"},{name:"header",type:"flags.0?true"},{name:"align_center",type:"flags.3?true"},{name:"align_right",type:"flags.4?true"},{name:"valign_middle",type:"flags.5?true"},{name:"valign_bottom",type:"flags.6?true"},{name:"text",type:"flags.7?RichText"},{name:"colspan",type:"flags.1?int"},{name:"rowspan",type:"flags.2?int"}],type:"PageTableCell"},{id:-524237339,predicate:"pageTableRow",params:[{name:"cells",type:"Vector"}],type:"PageTableRow"},{id:-1085412734,predicate:"pageBlockTable",params:[{name:"flags",type:"#"},{name:"bordered",type:"flags.0?true"},{name:"striped",type:"flags.1?true"},{name:"title",type:"RichText"},{name:"rows",type:"Vector"}],type:"PageBlock"},{id:1869903447,predicate:"pageCaption",params:[{name:"text",type:"RichText"},{name:"credit",type:"RichText"}],type:"PageCaption"},{id:-1188055347,predicate:"pageListItemText",params:[{name:"text",type:"RichText"}],type:"PageListItem"},{id:635466748,predicate:"pageListItemBlocks",params:[{name:"blocks",type:"Vector"}],type:"PageListItem"},{id:1577484359,predicate:"pageListOrderedItemText",params:[{name:"num",type:"string"},{name:"text",type:"RichText"}],type:"PageListOrderedItem"},{id:-1730311882,predicate:"pageListOrderedItemBlocks",params:[{name:"num",type:"string"},{name:"blocks",type:"Vector"}],type:"PageListOrderedItem"},{id:-1702174239,predicate:"pageBlockOrderedList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:1987480557,predicate:"pageBlockDetails",params:[{name:"flags",type:"#"},{name:"open",type:"flags.0?true"},{name:"blocks",type:"Vector"},{name:"title",type:"RichText"}],type:"PageBlock"},{id:-1282352120,predicate:"pageRelatedArticle",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"title",type:"flags.0?string"},{name:"description",type:"flags.1?string"},{name:"photo_id",type:"flags.2?long"},{name:"author",type:"flags.3?string"},{name:"published_date",type:"flags.4?int"}],type:"PageRelatedArticle"},{id:370236054,predicate:"pageBlockRelatedArticles",params:[{name:"title",type:"RichText"},{name:"articles",type:"Vector"}],type:"PageBlock"},{id:-1538310410,predicate:"pageBlockMap",params:[{name:"geo",type:"GeoPoint"},{name:"zoom",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-1738178803,predicate:"page",params:[{name:"flags",type:"#"},{name:"part",type:"flags.0?true"},{name:"rtl",type:"flags.1?true"},{name:"v2",type:"flags.2?true"},{name:"url",type:"string"},{name:"blocks",type:"Vector"},{name:"photos",type:"Vector"},{name:"documents",type:"Vector"},{name:"views",type:"flags.3?int"}],type:"Page"},{id:-610373422,predicate:"inputPrivacyKeyPhoneP2P",params:[],type:"InputPrivacyKey"},{id:961092808,predicate:"privacyKeyPhoneP2P",params:[],type:"PrivacyKey"},{id:894777186,predicate:"textAnchor",params:[{name:"text",type:"RichText"},{name:"name",type:"string"}],type:"RichText"},{id:-1945767479,predicate:"help.supportName",params:[{name:"name",type:"string"}],type:"help.SupportName"},{id:-206688531,predicate:"help.userInfoEmpty",params:[],type:"help.UserInfo"},{id:32192344,predicate:"help.userInfo",params:[{name:"message",type:"string"},{name:"entities",type:"Vector"},{name:"author",type:"string"},{name:"date",type:"int"}],type:"help.UserInfo"},{id:-202219658,predicate:"messageActionContactSignUp",params:[],type:"MessageAction"},{id:-1398708869,predicate:"updateMessagePoll",params:[{name:"flags",type:"#"},{name:"poll_id",type:"long"},{name:"poll",type:"flags.0?Poll"},{name:"results",type:"PollResults"}],type:"Update"},{id:1823064809,predicate:"pollAnswer",params:[{name:"text",type:"string"},{name:"option",type:"bytes"}],type:"PollAnswer"},{id:-2032041631,predicate:"poll",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"closed",type:"flags.0?true"},{name:"public_voters",type:"flags.1?true"},{name:"multiple_choice",type:"flags.2?true"},{name:"quiz",type:"flags.3?true"},{name:"question",type:"string"},{name:"answers",type:"Vector"},{name:"close_period",type:"flags.4?int"},{name:"close_date",type:"flags.5?int"}],type:"Poll"},{id:997055186,predicate:"pollAnswerVoters",params:[{name:"flags",type:"#"},{name:"chosen",type:"flags.0?true"},{name:"correct",type:"flags.1?true"},{name:"option",type:"bytes"},{name:"voters",type:"int"}],type:"PollAnswerVoters"},{id:-591909213,predicate:"pollResults",params:[{name:"flags",type:"#"},{name:"min",type:"flags.0?true"},{name:"results",type:"flags.1?Vector"},{name:"total_voters",type:"flags.2?int"},{name:"recent_voters",type:"flags.3?Vector"},{name:"solution",type:"flags.4?string"},{name:"solution_entities",type:"flags.4?Vector"}],type:"PollResults"},{id:261416433,predicate:"inputMediaPoll",params:[{name:"flags",type:"#"},{name:"poll",type:"Poll"},{name:"correct_answers",type:"flags.0?Vector"},{name:"solution",type:"flags.1?string"},{name:"solution_entities",type:"flags.1?Vector"}],type:"InputMedia"},{id:1272375192,predicate:"messageMediaPoll",params:[{name:"poll",type:"Poll"},{name:"results",type:"PollResults"}],type:"MessageMedia"},{id:-264117680,predicate:"chatOnlines",params:[{name:"onlines",type:"int"}],type:"ChatOnlines"},{id:1202287072,predicate:"statsURL",params:[{name:"url",type:"string"}],type:"StatsURL"},{id:-525288402,predicate:"photoStrippedSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:1605510357,predicate:"chatAdminRights",params:[{name:"flags",type:"#"},{name:"change_info",type:"flags.0?true"},{name:"post_messages",type:"flags.1?true"},{name:"edit_messages",type:"flags.2?true"},{name:"delete_messages",type:"flags.3?true"},{name:"ban_users",type:"flags.4?true"},{name:"invite_users",type:"flags.5?true"},{name:"pin_messages",type:"flags.7?true"},{name:"add_admins",type:"flags.9?true"},{name:"anonymous",type:"flags.10?true"},{name:"manage_call",type:"flags.11?true"},{name:"other",type:"flags.12?true"},{name:"manage_topics",type:"flags.13?true"}],type:"ChatAdminRights"},{id:-1626209256,predicate:"chatBannedRights",params:[{name:"flags",type:"#"},{name:"view_messages",type:"flags.0?true"},{name:"send_messages",type:"flags.1?true"},{name:"send_media",type:"flags.2?true"},{name:"send_stickers",type:"flags.3?true"},{name:"send_gifs",type:"flags.4?true"},{name:"send_games",type:"flags.5?true"},{name:"send_inline",type:"flags.6?true"},{name:"embed_links",type:"flags.7?true"},{name:"send_polls",type:"flags.8?true"},{name:"change_info",type:"flags.10?true"},{name:"invite_users",type:"flags.15?true"},{name:"pin_messages",type:"flags.17?true"},{name:"manage_topics",type:"flags.18?true"},{name:"send_photos",type:"flags.19?true"},{name:"send_videos",type:"flags.20?true"},{name:"send_roundvideos",type:"flags.21?true"},{name:"send_audios",type:"flags.22?true"},{name:"send_voices",type:"flags.23?true"},{name:"send_docs",type:"flags.24?true"},{name:"send_plain",type:"flags.25?true"},{name:"until_date",type:"int"}],type:"ChatBannedRights"},{id:1421875280,predicate:"updateChatDefaultBannedRights",params:[{name:"peer",type:"Peer"},{name:"default_banned_rights",type:"ChatBannedRights"},{name:"version",type:"int"}],type:"Update"},{id:-433014407,predicate:"inputWallPaper",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputWallPaper"},{id:1913199744,predicate:"inputWallPaperSlug",params:[{name:"slug",type:"string"}],type:"InputWallPaper"},{id:-1150621555,predicate:"channelParticipantsContacts",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:771095562,predicate:"channelAdminLogEventActionDefaultBannedRights",params:[{name:"prev_banned_rights",type:"ChatBannedRights"},{name:"new_banned_rights",type:"ChatBannedRights"}],type:"ChannelAdminLogEventAction"},{id:-1895328189,predicate:"channelAdminLogEventActionStopPoll",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:471437699,predicate:"account.wallPapersNotModified",params:[],type:"account.WallPapers"},{id:-842824308,predicate:"account.wallPapers",params:[{name:"hash",type:"long"},{name:"wallpapers",type:"Vector"}],type:"account.WallPapers"},{id:-1390068360,predicate:"codeSettings",params:[{name:"flags",type:"#"},{name:"allow_flashcall",type:"flags.0?true"},{name:"current_number",type:"flags.1?true"},{name:"allow_app_hash",type:"flags.4?true"},{name:"allow_missed_call",type:"flags.5?true"},{name:"allow_firebase",type:"flags.7?true"},{name:"logout_tokens",type:"flags.6?Vector"},{name:"token",type:"flags.8?string"},{name:"app_sandbox",type:"flags.8?Bool"}],type:"CodeSettings"},{id:499236004,predicate:"wallPaperSettings",params:[{name:"flags",type:"#"},{name:"blur",type:"flags.1?true"},{name:"motion",type:"flags.2?true"},{name:"background_color",type:"flags.0?int"},{name:"second_background_color",type:"flags.4?int"},{name:"third_background_color",type:"flags.5?int"},{name:"fourth_background_color",type:"flags.6?int"},{name:"intensity",type:"flags.3?int"},{name:"rotation",type:"flags.4?int"}],type:"WallPaperSettings"},{id:-1896171181,predicate:"autoDownloadSettings",params:[{name:"flags",type:"#"},{name:"disabled",type:"flags.0?true"},{name:"video_preload_large",type:"flags.1?true"},{name:"audio_preload_next",type:"flags.2?true"},{name:"phonecalls_less_data",type:"flags.3?true"},{name:"photo_size_max",type:"int"},{name:"video_size_max",type:"long"},{name:"file_size_max",type:"long"},{name:"video_upload_maxbitrate",type:"int"}],type:"AutoDownloadSettings"},{id:1674235686,predicate:"account.autoDownloadSettings",params:[{name:"low",type:"AutoDownloadSettings"},{name:"medium",type:"AutoDownloadSettings"},{name:"high",type:"AutoDownloadSettings"}],type:"account.AutoDownloadSettings"},{id:-709641735,predicate:"emojiKeyword",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:594408994,predicate:"emojiKeywordDeleted",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:1556570557,predicate:"emojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"keywords",type:"Vector"}],type:"EmojiKeywordsDifference"},{id:-1519029347,predicate:"emojiURL",params:[{name:"url",type:"string"}],type:"EmojiURL"},{id:-1275374751,predicate:"emojiLanguage",params:[{name:"lang_code",type:"string"}],type:"EmojiLanguage"},{id:-1529000952,predicate:"inputPrivacyKeyForwards",params:[],type:"InputPrivacyKey"},{id:1777096355,predicate:"privacyKeyForwards",params:[],type:"PrivacyKey"},{id:1461304012,predicate:"inputPrivacyKeyProfilePhoto",params:[],type:"InputPrivacyKey"},{id:-1777000467,predicate:"privacyKeyProfilePhoto",params:[],type:"PrivacyKey"},{id:1075322878,predicate:"inputPhotoFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:-667654413,predicate:"inputPhotoLegacyFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"}],type:"InputFileLocation"},{id:925204121,predicate:"inputPeerPhotoFileLocation",params:[{name:"flags",type:"#"},{name:"big",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"photo_id",type:"long"}],type:"InputFileLocation"},{id:-1652231205,predicate:"inputStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb_version",type:"int"}],type:"InputFileLocation"},{id:-11252123,predicate:"folder",params:[{name:"flags",type:"#"},{name:"autofill_new_broadcasts",type:"flags.0?true"},{name:"autofill_public_groups",type:"flags.1?true"},{name:"autofill_new_correspondents",type:"flags.2?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"flags.3?ChatPhoto"}],type:"Folder"},{id:1908216652,predicate:"dialogFolder",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"folder",type:"Folder"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"unread_muted_peers_count",type:"int"},{name:"unread_unmuted_peers_count",type:"int"},{name:"unread_muted_messages_count",type:"int"},{name:"unread_unmuted_messages_count",type:"int"}],type:"Dialog"},{id:1684014375,predicate:"inputDialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"InputDialogPeer"},{id:1363483106,predicate:"dialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"DialogPeer"},{id:-70073706,predicate:"inputFolderPeer",params:[{name:"peer",type:"InputPeer"},{name:"folder_id",type:"int"}],type:"InputFolderPeer"},{id:-373643672,predicate:"folderPeer",params:[{name:"peer",type:"Peer"},{name:"folder_id",type:"int"}],type:"FolderPeer"},{id:422972864,predicate:"updateFolderPeers",params:[{name:"folder_peers",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:497305826,predicate:"inputUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"long"}],type:"InputUser"},{id:1536380829,predicate:"inputChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"long"}],type:"InputChannel"},{id:-1468331492,predicate:"inputPeerUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"long"}],type:"InputPeer"},{id:-1121318848,predicate:"inputPeerChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"long"}],type:"InputPeer"},{id:55761658,predicate:"inputPrivacyKeyPhoneNumber",params:[],type:"InputPrivacyKey"},{id:-778378131,predicate:"privacyKeyPhoneNumber",params:[],type:"PrivacyKey"},{id:-1472172887,predicate:"topPeerCategoryForwardUsers",params:[],type:"TopPeerCategory"},{id:-68239120,predicate:"topPeerCategoryForwardChats",params:[],type:"TopPeerCategory"},{id:84703944,predicate:"channelAdminLogEventActionChangeLinkedChat",params:[{name:"prev_value",type:"long"},{name:"new_value",type:"long"}],type:"ChannelAdminLogEventAction"},{id:-398136321,predicate:"messages.searchCounter",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"filter",type:"MessagesFilter"},{name:"count",type:"int"}],type:"messages.SearchCounter"},{id:280464681,predicate:"keyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.0?string"},{name:"url",type:"string"},{name:"button_id",type:"int"}],type:"KeyboardButton"},{id:-802258988,predicate:"inputKeyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.1?string"},{name:"url",type:"string"},{name:"bot",type:"InputUser"}],type:"KeyboardButton"},{id:-1831650802,predicate:"urlAuthResultRequest",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"bot",type:"User"},{name:"domain",type:"string"}],type:"UrlAuthResult"},{id:-1886646706,predicate:"urlAuthResultAccepted",params:[{name:"url",type:"string"}],type:"UrlAuthResult"},{id:-1445536993,predicate:"urlAuthResultDefault",params:[],type:"UrlAuthResult"},{id:-2079962673,predicate:"inputPrivacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:-380694650,predicate:"inputPrivacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:1796427406,predicate:"privacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:1103656293,predicate:"privacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:-1672577397,predicate:"messageEntityUnderline",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1090087980,predicate:"messageEntityStrike",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:34469328,predicate:"messageEntityBlockquote",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1786671974,predicate:"updatePeerSettings",params:[{name:"peer",type:"Peer"},{name:"settings",type:"PeerSettings"}],type:"Update"},{id:-1078612597,predicate:"channelLocationEmpty",params:[],type:"ChannelLocation"},{id:547062491,predicate:"channelLocation",params:[{name:"geo_point",type:"GeoPoint"},{name:"address",type:"string"}],type:"ChannelLocation"},{id:-901375139,predicate:"peerLocated",params:[{name:"peer",type:"Peer"},{name:"expires",type:"int"},{name:"distance",type:"int"}],type:"PeerLocated"},{id:-1263546448,predicate:"updatePeerLocated",params:[{name:"peers",type:"Vector"}],type:"Update"},{id:241923758,predicate:"channelAdminLogEventActionChangeLocation",params:[{name:"prev_value",type:"ChannelLocation"},{name:"new_value",type:"ChannelLocation"}],type:"ChannelAdminLogEventAction"},{id:-606798099,predicate:"inputReportReasonGeoIrrelevant",params:[],type:"ReportReason"},{id:1401984889,predicate:"channelAdminLogEventActionToggleSlowMode",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:1148485274,predicate:"auth.authorizationSignUpRequired",params:[{name:"flags",type:"#"},{name:"terms_of_service",type:"flags.0?help.TermsOfService"}],type:"auth.Authorization"},{id:-666824391,predicate:"payments.paymentVerificationNeeded",params:[{name:"url",type:"string"}],type:"payments.PaymentResult"},{id:42402760,predicate:"inputStickerSetAnimatedEmoji",params:[],type:"InputStickerSet"},{id:967122427,predicate:"updateNewScheduledMessage",params:[{name:"message",type:"Message"}],type:"Update"},{id:-1870238482,predicate:"updateDeleteScheduledMessages",params:[{name:"peer",type:"Peer"},{name:"messages",type:"Vector"}],type:"Update"},{id:-797791052,predicate:"restrictionReason",params:[{name:"platform",type:"string"},{name:"reason",type:"string"},{name:"text",type:"string"}],type:"RestrictionReason"},{id:1012306921,predicate:"inputTheme",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputTheme"},{id:-175567375,predicate:"inputThemeSlug",params:[{name:"slug",type:"string"}],type:"InputTheme"},{id:-1609668650,predicate:"theme",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"for_chat",type:"flags.5?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?Document"},{name:"settings",type:"flags.3?Vector"},{name:"emoticon",type:"flags.6?string"},{name:"installs_count",type:"flags.4?int"}],type:"Theme"},{id:-199313886,predicate:"account.themesNotModified",params:[],type:"account.Themes"},{id:-1707242387,predicate:"account.themes",params:[{name:"hash",type:"long"},{name:"themes",type:"Vector"}],type:"account.Themes"},{id:-2112423005,predicate:"updateTheme",params:[{name:"theme",type:"Theme"}],type:"Update"},{id:-786326563,predicate:"inputPrivacyKeyAddedByPhone",params:[],type:"InputPrivacyKey"},{id:1124062251,predicate:"privacyKeyAddedByPhone",params:[],type:"PrivacyKey"},{id:-2027964103,predicate:"updateGeoLiveViewed",params:[{name:"peer",type:"Peer"},{name:"msg_id",type:"int"}],type:"Update"},{id:1448076945,predicate:"updateLoginToken",params:[],type:"Update"},{id:1654593920,predicate:"auth.loginToken",params:[{name:"expires",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:110008598,predicate:"auth.loginTokenMigrateTo",params:[{name:"dc_id",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:957176926,predicate:"auth.loginTokenSuccess",params:[{name:"authorization",type:"auth.Authorization"}],type:"auth.LoginToken"},{id:1474462241,predicate:"account.contentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"},{name:"sensitive_can_change",type:"flags.1?true"}],type:"account.ContentSettings"},{id:-1456996667,predicate:"messages.inactiveChats",params:[{name:"dates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.InactiveChats"},{id:-1012849566,predicate:"baseThemeClassic",params:[],type:"BaseTheme"},{id:-69724536,predicate:"baseThemeDay",params:[],type:"BaseTheme"},{id:-1212997976,predicate:"baseThemeNight",params:[],type:"BaseTheme"},{id:1834973166,predicate:"baseThemeTinted",params:[],type:"BaseTheme"},{id:1527845466,predicate:"baseThemeArctic",params:[],type:"BaseTheme"},{id:-1770371538,predicate:"inputWallPaperNoFile",params:[{name:"id",type:"long"}],type:"InputWallPaper"},{id:-528465642,predicate:"wallPaperNoFile",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"default",type:"flags.1?true"},{name:"dark",type:"flags.4?true"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:-1881255857,predicate:"inputThemeSettings",params:[{name:"flags",type:"#"},{name:"message_colors_animated",type:"flags.2?true"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"outbox_accent_color",type:"flags.3?int"},{name:"message_colors",type:"flags.0?Vector"},{name:"wallpaper",type:"flags.1?InputWallPaper"},{name:"wallpaper_settings",type:"flags.1?WallPaperSettings"}],type:"InputThemeSettings"},{id:-94849324,predicate:"themeSettings",params:[{name:"flags",type:"#"},{name:"message_colors_animated",type:"flags.2?true"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"outbox_accent_color",type:"flags.3?int"},{name:"message_colors",type:"flags.0?Vector"},{name:"wallpaper",type:"flags.1?WallPaper"}],type:"ThemeSettings"},{id:1421174295,predicate:"webPageAttributeTheme",params:[{name:"flags",type:"#"},{name:"documents",type:"flags.0?Vector"},{name:"settings",type:"flags.1?ThemeSettings"}],type:"WebPageAttribute"},{id:274961865,predicate:"updateMessagePollVote",params:[{name:"poll_id",type:"long"},{name:"user_id",type:"long"},{name:"options",type:"Vector"},{name:"qts",type:"int"}],type:"Update"},{id:886196148,predicate:"messageUserVote",params:[{name:"user_id",type:"long"},{name:"option",type:"bytes"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:1017491692,predicate:"messageUserVoteInputOption",params:[{name:"user_id",type:"long"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:-1973033641,predicate:"messageUserVoteMultiple",params:[{name:"user_id",type:"long"},{name:"options",type:"Vector"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:136574537,predicate:"messages.votesList",params:[{name:"flags",type:"#"},{name:"count",type:"int"},{name:"votes",type:"Vector"},{name:"users",type:"Vector"},{name:"next_offset",type:"flags.0?string"}],type:"messages.VotesList"},{id:-1144565411,predicate:"keyboardButtonRequestPoll",params:[{name:"flags",type:"#"},{name:"quiz",type:"flags.0?Bool"},{name:"text",type:"string"}],type:"KeyboardButton"},{id:1981704948,predicate:"messageEntityBankCard",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-177732982,predicate:"bankCardOpenUrl",params:[{name:"url",type:"string"},{name:"name",type:"string"}],type:"BankCardOpenUrl"},{id:1042605427,predicate:"payments.bankCardData",params:[{name:"title",type:"string"},{name:"open_urls",type:"Vector"}],type:"payments.BankCardData"},{id:-118740917,predicate:"peerSelfLocated",params:[{name:"expires",type:"int"}],type:"PeerLocated"},{id:1949890536,predicate:"dialogFilter",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"non_contacts",type:"flags.1?true"},{name:"groups",type:"flags.2?true"},{name:"broadcasts",type:"flags.3?true"},{name:"bots",type:"flags.4?true"},{name:"exclude_muted",type:"flags.11?true"},{name:"exclude_read",type:"flags.12?true"},{name:"exclude_archived",type:"flags.13?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"emoticon",type:"flags.25?string"},{name:"pinned_peers",type:"Vector"},{name:"include_peers",type:"Vector"},{name:"exclude_peers",type:"Vector"}],type:"DialogFilter"},{id:2004110666,predicate:"dialogFilterSuggested",params:[{name:"filter",type:"DialogFilter"},{name:"description",type:"string"}],type:"DialogFilterSuggested"},{id:654302845,predicate:"updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Update"},{id:-1512627963,predicate:"updateDialogFilterOrder",params:[{name:"order",type:"Vector"}],type:"Update"},{id:889491791,predicate:"updateDialogFilters",params:[],type:"Update"},{id:-1237848657,predicate:"statsDateRangeDays",params:[{name:"min_date",type:"int"},{name:"max_date",type:"int"}],type:"StatsDateRangeDays"},{id:-884757282,predicate:"statsAbsValueAndPrev",params:[{name:"current",type:"double"},{name:"previous",type:"double"}],type:"StatsAbsValueAndPrev"},{id:-875679776,predicate:"statsPercentValue",params:[{name:"part",type:"double"},{name:"total",type:"double"}],type:"StatsPercentValue"},{id:1244130093,predicate:"statsGraphAsync",params:[{name:"token",type:"string"}],type:"StatsGraph"},{id:-1092839390,predicate:"statsGraphError",params:[{name:"error",type:"string"}],type:"StatsGraph"},{id:-1901828938,predicate:"statsGraph",params:[{name:"flags",type:"#"},{name:"json",type:"DataJSON"},{name:"zoom_token",type:"flags.0?string"}],type:"StatsGraph"},{id:-1387279939,predicate:"messageInteractionCounters",params:[{name:"msg_id",type:"int"},{name:"views",type:"int"},{name:"forwards",type:"int"}],type:"MessageInteractionCounters"},{id:-1107852396,predicate:"stats.broadcastStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"followers",type:"StatsAbsValueAndPrev"},{name:"views_per_post",type:"StatsAbsValueAndPrev"},{name:"shares_per_post",type:"StatsAbsValueAndPrev"},{name:"enabled_notifications",type:"StatsPercentValue"},{name:"growth_graph",type:"StatsGraph"},{name:"followers_graph",type:"StatsGraph"},{name:"mute_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"interactions_graph",type:"StatsGraph"},{name:"iv_interactions_graph",type:"StatsGraph"},{name:"views_by_source_graph",type:"StatsGraph"},{name:"new_followers_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"recent_message_interactions",type:"Vector"}],type:"stats.BroadcastStats"},{id:-428884101,predicate:"inputMediaDice",params:[{name:"emoticon",type:"string"}],type:"InputMedia"},{id:1065280907,predicate:"messageMediaDice",params:[{name:"value",type:"int"},{name:"emoticon",type:"string"}],type:"MessageMedia"},{id:-427863538,predicate:"inputStickerSetDice",params:[{name:"emoticon",type:"string"}],type:"InputStickerSet"},{id:-1728664459,predicate:"help.promoDataEmpty",params:[{name:"expires",type:"int"}],type:"help.PromoData"},{id:-1942390465,predicate:"help.promoData",params:[{name:"flags",type:"#"},{name:"proxy",type:"flags.0?true"},{name:"expires",type:"int"},{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"psa_type",type:"flags.1?string"},{name:"psa_message",type:"flags.2?string"}],type:"help.PromoData"},{id:-567037804,predicate:"videoSize",params:[{name:"flags",type:"#"},{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"},{name:"video_start_ts",type:"flags.0?double"}],type:"VideoSize"},{id:643940105,predicate:"updatePhoneCallSignalingData",params:[{name:"phone_call_id",type:"long"},{name:"data",type:"bytes"}],type:"Update"},{id:1634294960,predicate:"chatInvitePeek",params:[{name:"chat",type:"Chat"},{name:"expires",type:"int"}],type:"ChatInvite"},{id:-1660637285,predicate:"statsGroupTopPoster",params:[{name:"user_id",type:"long"},{name:"messages",type:"int"},{name:"avg_chars",type:"int"}],type:"StatsGroupTopPoster"},{id:-682079097,predicate:"statsGroupTopAdmin",params:[{name:"user_id",type:"long"},{name:"deleted",type:"int"},{name:"kicked",type:"int"},{name:"banned",type:"int"}],type:"StatsGroupTopAdmin"},{id:1398765469,predicate:"statsGroupTopInviter",params:[{name:"user_id",type:"long"},{name:"invitations",type:"int"}],type:"StatsGroupTopInviter"},{id:-276825834,predicate:"stats.megagroupStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"members",type:"StatsAbsValueAndPrev"},{name:"messages",type:"StatsAbsValueAndPrev"},{name:"viewers",type:"StatsAbsValueAndPrev"},{name:"posters",type:"StatsAbsValueAndPrev"},{name:"growth_graph",type:"StatsGraph"},{name:"members_graph",type:"StatsGraph"},{name:"new_members_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"messages_graph",type:"StatsGraph"},{name:"actions_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"weekdays_graph",type:"StatsGraph"},{name:"top_posters",type:"Vector"},{name:"top_admins",type:"Vector"},{name:"top_inviters",type:"Vector"},{name:"users",type:"Vector"}],type:"stats.MegagroupStats"},{id:-1096616924,predicate:"globalPrivacySettings",params:[{name:"flags",type:"#"},{name:"archive_and_mute_new_noncontact_peers",type:"flags.0?Bool"}],type:"GlobalPrivacySettings"},{id:1667228533,predicate:"phoneConnectionWebrtc",params:[{name:"flags",type:"#"},{name:"turn",type:"flags.0?true"},{name:"stun",type:"flags.1?true"},{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"username",type:"string"},{name:"password",type:"string"}],type:"PhoneConnection"},{id:1107543535,predicate:"help.countryCode",params:[{name:"flags",type:"#"},{name:"country_code",type:"string"},{name:"prefixes",type:"flags.0?Vector"},{name:"patterns",type:"flags.1?Vector"}],type:"help.CountryCode"},{id:-1014526429,predicate:"help.country",params:[{name:"flags",type:"#"},{name:"hidden",type:"flags.0?true"},{name:"iso2",type:"string"},{name:"default_name",type:"string"},{name:"name",type:"flags.1?string"},{name:"country_codes",type:"Vector"}],type:"help.Country"},{id:-1815339214,predicate:"help.countriesListNotModified",params:[],type:"help.CountriesList"},{id:-2016381538,predicate:"help.countriesList",params:[{name:"countries",type:"Vector"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:1163625789,predicate:"messageViews",params:[{name:"flags",type:"#"},{name:"views",type:"flags.0?int"},{name:"forwards",type:"flags.1?int"},{name:"replies",type:"flags.2?MessageReplies"}],type:"MessageViews"},{id:-761649164,predicate:"updateChannelMessageForwards",params:[{name:"channel_id",type:"long"},{name:"id",type:"int"},{name:"forwards",type:"int"}],type:"Update"},{id:-96535659,predicate:"photoSizeProgressive",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"sizes",type:"Vector"}],type:"PhotoSize"},{id:-1228606141,predicate:"messages.messageViews",params:[{name:"views",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.MessageViews"},{id:-693004986,predicate:"updateReadChannelDiscussionInbox",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"},{name:"broadcast_id",type:"flags.0?long"},{name:"broadcast_post",type:"flags.0?int"}],type:"Update"},{id:1767677564,predicate:"updateReadChannelDiscussionOutbox",params:[{name:"channel_id",type:"long"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Update"},{id:-1506535550,predicate:"messages.discussionMessage",params:[{name:"flags",type:"#"},{name:"messages",type:"Vector"},{name:"max_id",type:"flags.0?int"},{name:"read_inbox_max_id",type:"flags.1?int"},{name:"read_outbox_max_id",type:"flags.2?int"},{name:"unread_count",type:"int"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.DiscussionMessage"},{id:-1495959709,predicate:"messageReplyHeader",params:[{name:"flags",type:"#"},{name:"reply_to_scheduled",type:"flags.2?true"},{name:"forum_topic",type:"flags.3?true"},{name:"reply_to_msg_id",type:"int"},{name:"reply_to_peer_id",type:"flags.0?Peer"},{name:"reply_to_top_id",type:"flags.1?int"}],type:"MessageReplyHeader"},{id:-2083123262,predicate:"messageReplies",params:[{name:"flags",type:"#"},{name:"comments",type:"flags.0?true"},{name:"replies",type:"int"},{name:"replies_pts",type:"int"},{name:"recent_repliers",type:"flags.1?Vector"},{name:"channel_id",type:"flags.0?long"},{name:"max_id",type:"flags.2?int"},{name:"read_max_id",type:"flags.3?int"}],type:"MessageReplies"},{id:610945826,predicate:"updatePeerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"blocked",type:"Bool"}],type:"Update"},{id:-386039788,predicate:"peerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"date",type:"int"}],type:"PeerBlocked"},{id:-1937192669,predicate:"updateChannelUserTyping",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"top_msg_id",type:"flags.0?int"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-1392895362,predicate:"inputMessageCallbackQuery",params:[{name:"id",type:"int"},{name:"query_id",type:"long"}],type:"InputMessage"},{id:453242886,predicate:"channelParticipantLeft",params:[{name:"peer",type:"Peer"}],type:"ChannelParticipant"},{id:-531931925,predicate:"channelParticipantsMentions",params:[{name:"flags",type:"#"},{name:"q",type:"flags.0?string"},{name:"top_msg_id",type:"flags.1?int"}],type:"ChannelParticipantsFilter"},{id:-309990731,predicate:"updatePinnedMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1538885128,predicate:"updatePinnedChannelMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"channel_id",type:"long"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:464520273,predicate:"inputMessagesFilterPinned",params:[],type:"MessagesFilter"},{id:-1986399595,predicate:"stats.messageStats",params:[{name:"views_graph",type:"StatsGraph"}],type:"stats.MessageStats"},{id:-1730095465,predicate:"messageActionGeoProximityReached",params:[{name:"from_id",type:"Peer"},{name:"to_id",type:"Peer"},{name:"distance",type:"int"}],type:"MessageAction"},{id:-668906175,predicate:"photoPathSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:-651419003,predicate:"speakingInGroupCallAction",params:[],type:"SendMessageAction"},{id:2004925620,predicate:"groupCallDiscarded",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"duration",type:"int"}],type:"GroupCall"},{id:-711498484,predicate:"groupCall",params:[{name:"flags",type:"#"},{name:"join_muted",type:"flags.1?true"},{name:"can_change_join_muted",type:"flags.2?true"},{name:"join_date_asc",type:"flags.6?true"},{name:"schedule_start_subscribed",type:"flags.8?true"},{name:"can_start_video",type:"flags.9?true"},{name:"record_video_active",type:"flags.11?true"},{name:"rtmp_stream",type:"flags.12?true"},{name:"listeners_hidden",type:"flags.13?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"participants_count",type:"int"},{name:"title",type:"flags.3?string"},{name:"stream_dc_id",type:"flags.4?int"},{name:"record_start_date",type:"flags.5?int"},{name:"schedule_date",type:"flags.7?int"},{name:"unmuted_video_count",type:"flags.10?int"},{name:"unmuted_video_limit",type:"int"},{name:"version",type:"int"}],type:"GroupCall"},{id:-659913713,predicate:"inputGroupCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGroupCall"},{id:2047704898,predicate:"messageActionGroupCall",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"duration",type:"flags.0?int"}],type:"MessageAction"},{id:1345295095,predicate:"messageActionInviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-341428482,predicate:"groupCallParticipant",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"left",type:"flags.1?true"},{name:"can_self_unmute",type:"flags.2?true"},{name:"just_joined",type:"flags.4?true"},{name:"versioned",type:"flags.5?true"},{name:"min",type:"flags.8?true"},{name:"muted_by_you",type:"flags.9?true"},{name:"volume_by_admin",type:"flags.10?true"},{name:"self",type:"flags.12?true"},{name:"video_joined",type:"flags.15?true"},{name:"peer",type:"Peer"},{name:"date",type:"int"},{name:"active_date",type:"flags.3?int"},{name:"source",type:"int"},{name:"volume",type:"flags.7?int"},{name:"about",type:"flags.11?string"},{name:"raise_hand_rating",type:"flags.13?long"},{name:"video",type:"flags.6?GroupCallParticipantVideo"},{name:"presentation",type:"flags.14?GroupCallParticipantVideo"}],type:"GroupCallParticipant"},{id:-124097970,predicate:"updateChat",params:[{name:"chat_id",type:"long"}],type:"Update"},{id:-219423922,predicate:"updateGroupCallParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"Update"},{id:347227392,predicate:"updateGroupCall",params:[{name:"chat_id",type:"long"},{name:"call",type:"GroupCall"}],type:"Update"},{id:-1636664659,predicate:"phone.groupCall",params:[{name:"call",type:"GroupCall"},{name:"participants",type:"Vector"},{name:"participants_next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.GroupCall"},{id:-193506890,predicate:"phone.groupParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"version",type:"int"}],type:"phone.GroupParticipants"},{id:813821341,predicate:"inlineQueryPeerTypeSameBotPM",params:[],type:"InlineQueryPeerType"},{id:-2093215828,predicate:"inlineQueryPeerTypePM",params:[],type:"InlineQueryPeerType"},{id:-681130742,predicate:"inlineQueryPeerTypeChat",params:[],type:"InlineQueryPeerType"},{id:1589952067,predicate:"inlineQueryPeerTypeMegagroup",params:[],type:"InlineQueryPeerType"},{id:1664413338,predicate:"inlineQueryPeerTypeBroadcast",params:[],type:"InlineQueryPeerType"},{id:589338437,predicate:"channelAdminLogEventActionStartGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-610299584,predicate:"channelAdminLogEventActionDiscardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-115071790,predicate:"channelAdminLogEventActionParticipantMute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:-431740480,predicate:"channelAdminLogEventActionParticipantUnmute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1456906823,predicate:"channelAdminLogEventActionToggleGroupCallSetting",params:[{name:"join_muted",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1966921727,predicate:"inputPaymentCredentialsGooglePay",params:[{name:"payment_token",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:375566091,predicate:"messages.historyImport",params:[{name:"id",type:"long"}],type:"messages.HistoryImport"},{id:-606432698,predicate:"sendMessageHistoryImportAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:1578088377,predicate:"messages.historyImportParsed",params:[{name:"flags",type:"#"},{name:"pm",type:"flags.0?true"},{name:"group",type:"flags.1?true"},{name:"title",type:"flags.2?string"}],type:"messages.HistoryImportParsed"},{id:-170010905,predicate:"inputReportReasonFake",params:[],type:"ReportReason"},{id:-275956116,predicate:"messages.affectedFoundMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"},{name:"messages",type:"Vector"}],type:"messages.AffectedFoundMessages"},{id:1007897979,predicate:"messageActionSetMessagesTTL",params:[{name:"flags",type:"#"},{name:"period",type:"int"},{name:"auto_setting_from",type:"flags.0?long"}],type:"MessageAction"},{id:-1147422299,predicate:"updatePeerHistoryTTL",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"ttl_period",type:"flags.0?int"}],type:"Update"},{id:-796432838,predicate:"updateChatParticipant",params:[{name:"flags",type:"#"},{name:"chat_id",type:"long"},{name:"date",type:"int"},{name:"actor_id",type:"long"},{name:"user_id",type:"long"},{name:"prev_participant",type:"flags.0?ChatParticipant"},{name:"new_participant",type:"flags.1?ChatParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:-1738720581,predicate:"updateChannelParticipant",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"date",type:"int"},{name:"actor_id",type:"long"},{name:"user_id",type:"long"},{name:"prev_participant",type:"flags.0?ChannelParticipant"},{name:"new_participant",type:"flags.1?ChannelParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:-997782967,predicate:"updateBotStopped",params:[{name:"user_id",type:"long"},{name:"date",type:"int"},{name:"stopped",type:"Bool"},{name:"qts",type:"int"}],type:"Update"},{id:-1940201511,predicate:"chatInviteImporter",params:[{name:"flags",type:"#"},{name:"requested",type:"flags.0?true"},{name:"user_id",type:"long"},{name:"date",type:"int"},{name:"about",type:"flags.2?string"},{name:"approved_by",type:"flags.1?long"}],type:"ChatInviteImporter"},{id:-1111085620,predicate:"messages.exportedChatInvites",params:[{name:"count",type:"int"},{name:"invites",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvites"},{id:410107472,predicate:"messages.exportedChatInvite",params:[{name:"invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:572915951,predicate:"messages.exportedChatInviteReplaced",params:[{name:"invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:-2118733814,predicate:"messages.chatInviteImporters",params:[{name:"count",type:"int"},{name:"importers",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatInviteImporters"},{id:-219353309,predicate:"chatAdminWithInvites",params:[{name:"admin_id",type:"long"},{name:"invites_count",type:"int"},{name:"revoked_invites_count",type:"int"}],type:"ChatAdminWithInvites"},{id:-1231326505,predicate:"messages.chatAdminsWithInvites",params:[{name:"admins",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatAdminsWithInvites"},{id:1557846647,predicate:"channelAdminLogEventActionParticipantJoinByInvite",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1515256996,predicate:"channelAdminLogEventActionExportedInviteDelete",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1091179342,predicate:"channelAdminLogEventActionExportedInviteRevoke",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:-384910503,predicate:"channelAdminLogEventActionExportedInviteEdit",params:[{name:"prev_invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1048537159,predicate:"channelAdminLogEventActionParticipantVolume",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1855199800,predicate:"channelAdminLogEventActionChangeHistoryTTL",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:-1571952873,predicate:"messages.checkedHistoryImportPeer",params:[{name:"confirm_text",type:"string"}],type:"messages.CheckedHistoryImportPeer"},{id:93890858,predicate:"inputGroupCallStream",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"time_ms",type:"long"},{name:"scale",type:"int"},{name:"video_channel",type:"flags.0?int"},{name:"video_quality",type:"flags.0?int"}],type:"InputFileLocation"},{id:-1343921601,predicate:"phone.joinAsPeers",params:[{name:"peers",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.JoinAsPeers"},{id:541839704,predicate:"phone.exportedGroupCallInvite",params:[{name:"link",type:"string"}],type:"phone.ExportedGroupCallInvite"},{id:-672693723,predicate:"inputBotInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:894081801,predicate:"botInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1281329567,predicate:"messageActionGroupCallScheduled",params:[{name:"call",type:"InputGroupCall"},{name:"schedule_date",type:"int"}],type:"MessageAction"},{id:-592373577,predicate:"groupCallParticipantVideoSourceGroup",params:[{name:"semantics",type:"string"},{name:"sources",type:"Vector"}],type:"GroupCallParticipantVideoSourceGroup"},{id:1735736008,predicate:"groupCallParticipantVideo",params:[{name:"flags",type:"#"},{name:"paused",type:"flags.0?true"},{name:"endpoint",type:"string"},{name:"source_groups",type:"Vector"},{name:"audio_source",type:"flags.1?int"}],type:"GroupCallParticipantVideo"},{id:192428418,predicate:"updateGroupCallConnection",params:[{name:"flags",type:"#"},{name:"presentation",type:"flags.0?true"},{name:"params",type:"DataJSON"}],type:"Update"},{id:-2046910401,predicate:"stickers.suggestedShortName",params:[{name:"short_name",type:"string"}],type:"stickers.SuggestedShortName"},{id:795652779,predicate:"botCommandScopeDefault",params:[],type:"BotCommandScope"},{id:1011811544,predicate:"botCommandScopeUsers",params:[],type:"BotCommandScope"},{id:1877059713,predicate:"botCommandScopeChats",params:[],type:"BotCommandScope"},{id:-1180016534,predicate:"botCommandScopeChatAdmins",params:[],type:"BotCommandScope"},{id:-610432643,predicate:"botCommandScopePeer",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:1071145937,predicate:"botCommandScopePeerAdmins",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:169026035,predicate:"botCommandScopePeerUser",params:[{name:"peer",type:"InputPeer"},{name:"user_id",type:"InputUser"}],type:"BotCommandScope"},{id:-478701471,predicate:"account.resetPasswordFailedWait",params:[{name:"retry_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-370148227,predicate:"account.resetPasswordRequestedWait",params:[{name:"until_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-383330754,predicate:"account.resetPasswordOk",params:[],type:"account.ResetPasswordResult"},{id:1299263278,predicate:"updateBotCommands",params:[{name:"peer",type:"Peer"},{name:"bot_id",type:"long"},{name:"commands",type:"Vector"}],type:"Update"},{id:-1434950843,predicate:"messageActionSetChatTheme",params:[{name:"emoticon",type:"string"}],type:"MessageAction"},{id:-1336228175,predicate:"sendMessageChooseStickerAction",params:[],type:"SendMessageAction"},{id:981691896,predicate:"sponsoredMessage",params:[{name:"flags",type:"#"},{name:"recommended",type:"flags.5?true"},{name:"show_peer_photo",type:"flags.6?true"},{name:"random_id",type:"bytes"},{name:"from_id",type:"flags.3?Peer"},{name:"chat_invite",type:"flags.4?ChatInvite"},{name:"chat_invite_hash",type:"flags.4?string"},{name:"channel_post",type:"flags.2?int"},{name:"start_param",type:"flags.0?string"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"}],type:"SponsoredMessage"},{id:-907141753,predicate:"messages.sponsoredMessages",params:[{name:"flags",type:"#"},{name:"posts_between",type:"flags.0?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.SponsoredMessages"},{id:215889721,predicate:"inputStickerSetAnimatedEmojiAnimations",params:[],type:"InputStickerSet"},{id:630664139,predicate:"sendMessageEmojiInteraction",params:[{name:"emoticon",type:"string"},{name:"msg_id",type:"int"},{name:"interaction",type:"DataJSON"}],type:"SendMessageAction"},{id:-1234857938,predicate:"sendMessageEmojiInteractionSeen",params:[{name:"emoticon",type:"string"}],type:"SendMessageAction"},{id:-1227287081,predicate:"inputBotInlineMessageID64",params:[{name:"dc_id",type:"int"},{name:"owner_id",type:"long"},{name:"id",type:"int"},{name:"access_hash",type:"long"}],type:"InputBotInlineMessageID"},{id:-911191137,predicate:"searchResultsCalendarPeriod",params:[{name:"date",type:"int"},{name:"min_msg_id",type:"int"},{name:"max_msg_id",type:"int"},{name:"count",type:"int"}],type:"SearchResultsCalendarPeriod"},{id:343859772,predicate:"messages.searchResultsCalendar",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.0?true"},{name:"count",type:"int"},{name:"min_date",type:"int"},{name:"min_msg_id",type:"int"},{name:"offset_id_offset",type:"flags.1?int"},{name:"periods",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.SearchResultsCalendar"},{id:2137295719,predicate:"searchResultPosition",params:[{name:"msg_id",type:"int"},{name:"date",type:"int"},{name:"offset",type:"int"}],type:"SearchResultsPosition"},{id:1404185519,predicate:"messages.searchResultsPositions",params:[{name:"count",type:"int"},{name:"positions",type:"Vector"}],type:"messages.SearchResultsPositions"},{id:-339958837,predicate:"messageActionChatJoinedByRequest",params:[],type:"MessageAction"},{id:1885586395,predicate:"updatePendingJoinRequests",params:[{name:"peer",type:"Peer"},{name:"requests_pending",type:"int"},{name:"recent_requesters",type:"Vector"}],type:"Update"},{id:299870598,predicate:"updateBotChatInviteRequester",params:[{name:"peer",type:"Peer"},{name:"date",type:"int"},{name:"user_id",type:"long"},{name:"about",type:"string"},{name:"invite",type:"ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:-1347021750,predicate:"channelAdminLogEventActionParticipantJoinByRequest",params:[{name:"invite",type:"ExportedChatInvite"},{name:"approved_by",type:"long"}],type:"ChannelAdminLogEventAction"},{id:-376962181,predicate:"inputKeyboardButtonUserProfile",params:[{name:"text",type:"string"},{name:"user_id",type:"InputUser"}],type:"KeyboardButton"},{id:814112961,predicate:"keyboardButtonUserProfile",params:[{name:"text",type:"string"},{name:"user_id",type:"long"}],type:"KeyboardButton"},{id:-191450938,predicate:"channels.sendAsPeers",params:[{name:"peers",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.SendAsPeers"},{id:-886388890,predicate:"channelAdminLogEventActionToggleNoForwards",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-738646805,predicate:"messages.stickerSetNotModified",params:[],type:"messages.StickerSet"},{id:997004590,predicate:"users.userFull",params:[{name:"full_user",type:"UserFull"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"users.UserFull"},{id:1753266509,predicate:"messages.peerSettings",params:[{name:"settings",type:"PeerSettings"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.PeerSettings"},{id:663693416,predicate:"channelAdminLogEventActionSendMessage",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:-702884114,predicate:"auth.codeTypeMissedCall",params:[],type:"auth.CodeType"},{id:-2113903484,predicate:"auth.sentCodeTypeMissedCall",params:[{name:"prefix",type:"string"},{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1012759713,predicate:"auth.loggedOut",params:[{name:"flags",type:"#"},{name:"future_auth_token",type:"flags.0?bytes"}],type:"auth.LoggedOut"},{id:1578843320,predicate:"updateMessageReactions",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"top_msg_id",type:"flags.0?int"},{name:"reactions",type:"MessageReactions"}],type:"Update"},{id:-1546531968,predicate:"reactionCount",params:[{name:"flags",type:"#"},{name:"chosen_order",type:"flags.0?int"},{name:"reaction",type:"Reaction"},{name:"count",type:"int"}],type:"ReactionCount"},{id:1328256121,predicate:"messageReactions",params:[{name:"flags",type:"#"},{name:"min",type:"flags.0?true"},{name:"can_see_list",type:"flags.2?true"},{name:"results",type:"Vector"},{name:"recent_reactions",type:"flags.1?Vector"}],type:"MessageReactions"},{id:834488621,predicate:"messages.messageReactionsList",params:[{name:"flags",type:"#"},{name:"count",type:"int"},{name:"reactions",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"next_offset",type:"flags.0?string"}],type:"messages.MessageReactionsList"},{id:-1065882623,predicate:"availableReaction",params:[{name:"flags",type:"#"},{name:"inactive",type:"flags.0?true"},{name:"premium",type:"flags.2?true"},{name:"reaction",type:"string"},{name:"title",type:"string"},{name:"static_icon",type:"Document"},{name:"appear_animation",type:"Document"},{name:"select_animation",type:"Document"},{name:"activate_animation",type:"Document"},{name:"effect_animation",type:"Document"},{name:"around_animation",type:"flags.1?Document"},{name:"center_icon",type:"flags.1?Document"}],type:"AvailableReaction"},{id:-1626924713,predicate:"messages.availableReactionsNotModified",params:[],type:"messages.AvailableReactions"},{id:1989032621,predicate:"messages.availableReactions",params:[{name:"hash",type:"int"},{name:"reactions",type:"Vector"}],type:"messages.AvailableReactions"},{id:852137487,predicate:"messageEntitySpoiler",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1102180616,predicate:"channelAdminLogEventActionChangeAvailableReactions",params:[{name:"prev_value",type:"ChatReactions"},{name:"new_value",type:"ChatReactions"}],type:"ChannelAdminLogEventAction"},{id:-1319698788,predicate:"messagePeerReaction",params:[{name:"flags",type:"#"},{name:"big",type:"flags.0?true"},{name:"unread",type:"flags.1?true"},{name:"peer_id",type:"Peer"},{name:"reaction",type:"Reaction"}],type:"MessagePeerReaction"},{id:-2132064081,predicate:"groupCallStreamChannel",params:[{name:"channel",type:"int"},{name:"scale",type:"int"},{name:"last_timestamp_ms",type:"long"}],type:"GroupCallStreamChannel"},{id:-790330702,predicate:"phone.groupCallStreamChannels",params:[{name:"channels",type:"Vector"}],type:"phone.GroupCallStreamChannels"},{id:177124030,predicate:"inputReportReasonIllegalDrugs",params:[],type:"ReportReason"},{id:-1631091139,predicate:"inputReportReasonPersonalDetails",params:[],type:"ReportReason"},{id:767505458,predicate:"phone.groupCallStreamRtmpUrl",params:[{name:"url",type:"string"},{name:"key",type:"string"}],type:"phone.GroupCallStreamRtmpUrl"},{id:1165423600,predicate:"attachMenuBotIconColor",params:[{name:"name",type:"string"},{name:"color",type:"int"}],type:"AttachMenuBotIconColor"},{id:-1297663893,predicate:"attachMenuBotIcon",params:[{name:"flags",type:"#"},{name:"name",type:"string"},{name:"icon",type:"Document"},{name:"colors",type:"flags.0?Vector"}],type:"AttachMenuBotIcon"},{id:-928371502,predicate:"attachMenuBot",params:[{name:"flags",type:"#"},{name:"inactive",type:"flags.0?true"},{name:"has_settings",type:"flags.1?true"},{name:"request_write_access",type:"flags.2?true"},{name:"bot_id",type:"long"},{name:"short_name",type:"string"},{name:"peer_types",type:"Vector"},{name:"icons",type:"Vector"}],type:"AttachMenuBot"},{id:-237467044,predicate:"attachMenuBotsNotModified",params:[],type:"AttachMenuBots"},{id:1011024320,predicate:"attachMenuBots",params:[{name:"hash",type:"long"},{name:"bots",type:"Vector"},{name:"users",type:"Vector"}],type:"AttachMenuBots"},{id:-1816172929,predicate:"attachMenuBotsBot",params:[{name:"bot",type:"AttachMenuBot"},{name:"users",type:"Vector"}],type:"AttachMenuBotsBot"},{id:397910539,predicate:"updateAttachMenuBots",params:[],type:"Update"},{id:202659196,predicate:"webViewResultUrl",params:[{name:"query_id",type:"long"},{name:"url",type:"string"}],type:"WebViewResult"},{id:-2010155333,predicate:"simpleWebViewResultUrl",params:[{name:"url",type:"string"}],type:"SimpleWebViewResult"},{id:211046684,predicate:"webViewMessageSent",params:[{name:"flags",type:"#"},{name:"msg_id",type:"flags.0?InputBotInlineMessageID"}],type:"WebViewMessageSent"},{id:361936797,predicate:"updateWebViewResultSent",params:[{name:"query_id",type:"long"}],type:"Update"},{id:326529584,predicate:"keyboardButtonWebView",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:-1598009252,predicate:"keyboardButtonSimpleWebView",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:1205698681,predicate:"messageActionWebViewDataSentMe",params:[{name:"text",type:"string"},{name:"data",type:"string"}],type:"MessageAction"},{id:-1262252875,predicate:"messageActionWebViewDataSent",params:[{name:"text",type:"string"}],type:"MessageAction"},{id:347625491,predicate:"updateBotMenuButton",params:[{name:"bot_id",type:"long"},{name:"button",type:"BotMenuButton"}],type:"Update"},{id:1966318984,predicate:"botMenuButtonDefault",params:[],type:"BotMenuButton"},{id:1113113093,predicate:"botMenuButtonCommands",params:[],type:"BotMenuButton"},{id:-944407322,predicate:"botMenuButton",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"BotMenuButton"},{id:-67704655,predicate:"account.savedRingtonesNotModified",params:[],type:"account.SavedRingtones"},{id:-1041683259,predicate:"account.savedRingtones",params:[{name:"hash",type:"long"},{name:"ringtones",type:"Vector"}],type:"account.SavedRingtones"},{id:1960361625,predicate:"updateSavedRingtones",params:[],type:"Update"},{id:-1746354498,predicate:"notificationSoundDefault",params:[],type:"NotificationSound"},{id:1863070943,predicate:"notificationSoundNone",params:[],type:"NotificationSound"},{id:-2096391452,predicate:"notificationSoundLocal",params:[{name:"title",type:"string"},{name:"data",type:"string"}],type:"NotificationSound"},{id:-9666487,predicate:"notificationSoundRingtone",params:[{name:"id",type:"long"}],type:"NotificationSound"},{id:-1222230163,predicate:"account.savedRingtone",params:[],type:"account.SavedRingtone"},{id:523271863,predicate:"account.savedRingtoneConverted",params:[{name:"document",type:"Document"}],type:"account.SavedRingtone"},{id:2104224014,predicate:"attachMenuPeerTypeSameBotPM",params:[],type:"AttachMenuPeerType"},{id:-1020528102,predicate:"attachMenuPeerTypeBotPM",params:[],type:"AttachMenuPeerType"},{id:-247016673,predicate:"attachMenuPeerTypePM",params:[],type:"AttachMenuPeerType"},{id:84480319,predicate:"attachMenuPeerTypeChat",params:[],type:"AttachMenuPeerType"},{id:2080104188,predicate:"attachMenuPeerTypeBroadcast",params:[],type:"AttachMenuPeerType"},{id:-317687113,predicate:"chatInvitePublicJoinRequests",params:[],type:"ExportedChatInvite"},{id:-977967015,predicate:"inputInvoiceMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"InputInvoice"},{id:-1020867857,predicate:"inputInvoiceSlug",params:[{name:"slug",type:"string"}],type:"InputInvoice"},{id:-1362048039,predicate:"payments.exportedInvoice",params:[{name:"url",type:"string"}],type:"payments.ExportedInvoice"},{id:8703322,predicate:"updateTranscribedAudio",params:[{name:"flags",type:"#"},{name:"pending",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"transcription_id",type:"long"},{name:"text",type:"string"}],type:"Update"},{id:-1821037486,predicate:"messages.transcribedAudio",params:[{name:"flags",type:"#"},{name:"pending",type:"flags.0?true"},{name:"transcription_id",type:"long"},{name:"text",type:"string"}],type:"messages.TranscribedAudio"},{id:909284270,predicate:"dialogFilterDefault",params:[],type:"DialogFilter"},{id:1395946908,predicate:"help.premiumPromo",params:[{name:"status_text",type:"string"},{name:"status_entities",type:"Vector"},{name:"video_sections",type:"Vector"},{name:"videos",type:"Vector"},{name:"period_options",type:"Vector"},{name:"users",type:"Vector"}],type:"help.PremiumPromo"},{id:-925956616,predicate:"messageEntityCustomEmoji",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"document_id",type:"long"}],type:"MessageEntity"},{id:-48981863,predicate:"documentAttributeCustomEmoji",params:[{name:"flags",type:"#"},{name:"free",type:"flags.0?true"},{name:"text_color",type:"flags.1?true"},{name:"alt",type:"string"},{name:"stickerset",type:"InputStickerSet"}],type:"DocumentAttribute"},{id:1087454222,predicate:"stickerSetFullCovered",params:[{name:"set",type:"StickerSet"},{name:"packs",type:"Vector"},{name:"keywords",type:"Vector"},{name:"documents",type:"Vector"}],type:"StickerSetCovered"},{id:-1502273946,predicate:"inputStorePaymentPremiumSubscription",params:[{name:"flags",type:"#"},{name:"restore",type:"flags.0?true"},{name:"upgrade",type:"flags.1?true"}],type:"InputStorePaymentPurpose"},{id:1634697192,predicate:"inputStorePaymentGiftPremium",params:[{name:"user_id",type:"InputUser"},{name:"currency",type:"string"},{name:"amount",type:"long"}],type:"InputStorePaymentPurpose"},{id:-1415514682,predicate:"messageActionGiftPremium",params:[{name:"currency",type:"string"},{name:"amount",type:"long"},{name:"months",type:"int"}],type:"MessageAction"},{id:1958953753,predicate:"premiumGiftOption",params:[{name:"flags",type:"#"},{name:"months",type:"int"},{name:"currency",type:"string"},{name:"amount",type:"long"},{name:"bot_url",type:"string"},{name:"store_product",type:"flags.0?string"}],type:"PremiumGiftOption"},{id:-930399486,predicate:"inputStickerSetPremiumGifts",params:[],type:"InputStickerSet"},{id:-78886548,predicate:"updateReadFeaturedEmojiStickers",params:[],type:"Update"},{id:-1360618136,predicate:"inputPrivacyKeyVoiceMessages",params:[],type:"InputPrivacyKey"},{id:110621716,predicate:"privacyKeyVoiceMessages",params:[],type:"PrivacyKey"},{id:-1996951013,predicate:"paymentFormMethod",params:[{name:"url",type:"string"},{name:"title",type:"string"}],type:"PaymentFormMethod"},{id:-193992412,predicate:"inputWebFileAudioAlbumThumbLocation",params:[{name:"flags",type:"#"},{name:"small",type:"flags.2?true"},{name:"document",type:"flags.0?InputDocument"},{name:"title",type:"flags.1?string"},{name:"performer",type:"flags.1?string"}],type:"InputWebFileLocation"},{id:183518013,predicate:"bots.premiumGiftsOptions",params:[{name:"name",type:"string"},{name:"gifts",type:"Vector"}],type:"bots.PremiumGiftsOptions"},{id:769727150,predicate:"emojiStatusEmpty",params:[],type:"EmojiStatus"},{id:-1835310691,predicate:"emojiStatus",params:[{name:"document_id",type:"long"}],type:"EmojiStatus"},{id:-97474361,predicate:"emojiStatusUntil",params:[{name:"document_id",type:"long"},{name:"until",type:"int"}],type:"EmojiStatus"},{id:674706841,predicate:"updateUserEmojiStatus",params:[{name:"user_id",type:"long"},{name:"emoji_status",type:"EmojiStatus"}],type:"Update"},{id:821314523,predicate:"updateRecentEmojiStatuses",params:[],type:"Update"},{id:-796072379,predicate:"account.emojiStatusesNotModified",params:[],type:"account.EmojiStatuses"},{id:-1866176559,predicate:"account.emojiStatuses",params:[{name:"hash",type:"long"},{name:"statuses",type:"Vector"}],type:"account.EmojiStatuses"},{id:2046153753,predicate:"reactionEmpty",params:[],type:"Reaction"},{id:455247544,predicate:"reactionEmoji",params:[{name:"emoticon",type:"string"}],type:"Reaction"},{id:-1992950669,predicate:"reactionCustomEmoji",params:[{name:"document_id",type:"long"}],type:"Reaction"},{id:-352570692,predicate:"chatReactionsNone",params:[],type:"ChatReactions"},{id:1385335754,predicate:"chatReactionsAll",params:[{name:"flags",type:"#"},{name:"allow_custom",type:"flags.0?true"}],type:"ChatReactions"},{id:1713193015,predicate:"chatReactionsSome",params:[{name:"reactions",type:"Vector"}],type:"ChatReactions"},{id:-1334846497,predicate:"messages.reactionsNotModified",params:[],type:"messages.Reactions"},{id:-352454890,predicate:"messages.reactions",params:[{name:"hash",type:"long"},{name:"reactions",type:"Vector"}],type:"messages.Reactions"},{id:1870160884,predicate:"updateRecentReactions",params:[],type:"Update"},{id:-2030252155,predicate:"updateMoveStickerSetToTop",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"stickerset",type:"long"}],type:"Update"},{id:1511364673,predicate:"auth.sentCodeTypeEmailCode",params:[{name:"flags",type:"#"},{name:"apple_signin_allowed",type:"flags.0?true"},{name:"google_signin_allowed",type:"flags.1?true"},{name:"email_pattern",type:"string"},{name:"length",type:"int"},{name:"next_phone_login_date",type:"flags.2?int"}],type:"auth.SentCodeType"},{id:-1521934870,predicate:"auth.sentCodeTypeSetUpEmailRequired",params:[{name:"flags",type:"#"},{name:"apple_signin_allowed",type:"flags.0?true"},{name:"google_signin_allowed",type:"flags.1?true"}],type:"auth.SentCodeType"},{id:1128644211,predicate:"emailVerifyPurposeLoginSetup",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"EmailVerifyPurpose"},{id:1383932651,predicate:"emailVerifyPurposeLoginChange",params:[],type:"EmailVerifyPurpose"},{id:-1141565819,predicate:"emailVerifyPurposePassport",params:[],type:"EmailVerifyPurpose"},{id:-1842457175,predicate:"emailVerificationCode",params:[{name:"code",type:"string"}],type:"EmailVerification"},{id:-611279166,predicate:"emailVerificationGoogle",params:[{name:"token",type:"string"}],type:"EmailVerification"},{id:-1764723459,predicate:"emailVerificationApple",params:[{name:"token",type:"string"}],type:"EmailVerification"},{id:731303195,predicate:"account.emailVerified",params:[{name:"email",type:"string"}],type:"account.EmailVerified"},{id:-507835039,predicate:"account.emailVerifiedLogin",params:[{name:"email",type:"string"},{name:"sent_code",type:"auth.SentCode"}],type:"account.EmailVerified"},{id:1596792306,predicate:"premiumSubscriptionOption",params:[{name:"flags",type:"#"},{name:"current",type:"flags.1?true"},{name:"can_purchase_upgrade",type:"flags.2?true"},{name:"transaction",type:"flags.3?string"},{name:"months",type:"int"},{name:"currency",type:"string"},{name:"amount",type:"long"},{name:"bot_url",type:"string"},{name:"store_product",type:"flags.0?string"}],type:"PremiumSubscriptionOption"},{id:80008398,predicate:"inputStickerSetEmojiGenericAnimations",params:[],type:"InputStickerSet"},{id:701560302,predicate:"inputStickerSetEmojiDefaultStatuses",params:[],type:"InputStickerSet"},{id:-1206095820,predicate:"sendAsPeer",params:[{name:"flags",type:"#"},{name:"premium_required",type:"flags.0?true"},{name:"peer",type:"Peer"}],type:"SendAsPeer"},{id:-1386050360,predicate:"messageExtendedMediaPreview",params:[{name:"flags",type:"#"},{name:"w",type:"flags.0?int"},{name:"h",type:"flags.0?int"},{name:"thumb",type:"flags.1?PhotoSize"},{name:"video_duration",type:"flags.2?int"}],type:"MessageExtendedMedia"},{id:-297296796,predicate:"messageExtendedMedia",params:[{name:"media",type:"MessageMedia"}],type:"MessageExtendedMedia"},{id:1517529484,predicate:"updateMessageExtendedMedia",params:[{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"extended_media",type:"MessageExtendedMedia"}],type:"Update"},{id:-50416996,predicate:"stickerKeyword",params:[{name:"document_id",type:"long"},{name:"keyword",type:"Vector"}],type:"StickerKeyword"},{id:-1274595769,predicate:"username",params:[{name:"flags",type:"#"},{name:"editable",type:"flags.0?true"},{name:"active",type:"flags.1?true"},{name:"username",type:"string"}],type:"Username"},{id:-263212119,predicate:"channelAdminLogEventActionChangeUsernames",params:[{name:"prev_value",type:"Vector"},{name:"new_value",type:"Vector"}],type:"ChannelAdminLogEventAction"},{id:46949251,predicate:"channelAdminLogEventActionToggleForum",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:1483767080,predicate:"channelAdminLogEventActionCreateTopic",params:[{name:"topic",type:"ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:-261103096,predicate:"channelAdminLogEventActionEditTopic",params:[{name:"prev_topic",type:"ForumTopic"},{name:"new_topic",type:"ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:-1374254839,predicate:"channelAdminLogEventActionDeleteTopic",params:[{name:"topic",type:"ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:1569535291,predicate:"channelAdminLogEventActionPinTopic",params:[{name:"flags",type:"#"},{name:"prev_topic",type:"flags.0?ForumTopic"},{name:"new_topic",type:"flags.1?ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:37687451,predicate:"forumTopicDeleted",params:[{name:"id",type:"int"}],type:"ForumTopic"},{id:1903173033,predicate:"forumTopic",params:[{name:"flags",type:"#"},{name:"my",type:"flags.1?true"},{name:"closed",type:"flags.2?true"},{name:"pinned",type:"flags.3?true"},{name:"short",type:"flags.5?true"},{name:"hidden",type:"flags.6?true"},{name:"id",type:"int"},{name:"date",type:"int"},{name:"title",type:"string"},{name:"icon_color",type:"int"},{name:"icon_emoji_id",type:"flags.0?long"},{name:"top_message",type:"int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"unread_mentions_count",type:"int"},{name:"unread_reactions_count",type:"int"},{name:"from_id",type:"Peer"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"draft",type:"flags.4?DraftMessage"}],type:"ForumTopic"},{id:913709011,predicate:"messages.forumTopics",params:[{name:"flags",type:"#"},{name:"order_by_create_date",type:"flags.0?true"},{name:"count",type:"int"},{name:"topics",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"pts",type:"int"}],type:"messages.ForumTopics"},{id:228168278,predicate:"messageActionTopicCreate",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"icon_color",type:"int"},{name:"icon_emoji_id",type:"flags.0?long"}],type:"MessageAction"},{id:-1064024032,predicate:"messageActionTopicEdit",params:[{name:"flags",type:"#"},{name:"title",type:"flags.0?string"},{name:"icon_emoji_id",type:"flags.1?long"},{name:"closed",type:"flags.2?Bool"},{name:"hidden",type:"flags.3?Bool"}],type:"MessageAction"},{id:422509539,predicate:"updateChannelPinnedTopic",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"channel_id",type:"long"},{name:"topic_id",type:"int"}],type:"Update"},{id:1548122514,predicate:"inputNotifyForumTopic",params:[{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"int"}],type:"InputNotifyPeer"},{id:577659656,predicate:"notifyForumTopic",params:[{name:"peer",type:"Peer"},{name:"top_msg_id",type:"int"}],type:"NotifyPeer"},{id:1153562857,predicate:"inputStickerSetEmojiDefaultTopicIcons",params:[],type:"InputStickerSet"},{id:406407439,predicate:"messages.sponsoredMessagesEmpty",params:[],type:"messages.SponsoredMessages"},{id:-31881726,predicate:"updateChannelPinnedTopics",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"order",type:"flags.0?Vector"}],type:"Update"},{id:1135897376,predicate:"defaultHistoryTTL",params:[{name:"period",type:"int"}],type:"DefaultHistoryTTL"},{id:116234636,predicate:"auth.codeTypeFragmentSms",params:[],type:"auth.CodeType"},{id:-648651719,predicate:"auth.sentCodeTypeFragmentSms",params:[{name:"url",type:"string"},{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:1103040667,predicate:"exportedContactToken",params:[{name:"url",type:"string"},{name:"expires",type:"int"}],type:"ExportedContactToken"},{id:1693675004,predicate:"channelAdminLogEventActionToggleAntiSpam",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:1474192222,predicate:"messageActionSuggestProfilePhoto",params:[{name:"photo",type:"Photo"}],type:"MessageAction"},{id:-404267113,predicate:"messageActionAttachMenuBotAllowed",params:[],type:"MessageAction"},{id:2008112412,predicate:"stickerSetNoCovered",params:[{name:"set",type:"StickerSet"}],type:"StickerSetCovered"},{id:542282808,predicate:"updateUser",params:[{name:"user_id",type:"long"}],type:"Update"},{id:596704836,predicate:"auth.sentCodeSuccess",params:[{name:"authorization",type:"auth.Authorization"}],type:"auth.SentCode"},{id:-25742243,predicate:"messageActionRequestedPeer",params:[{name:"button_id",type:"int"},{name:"peer",type:"Peer"}],type:"MessageAction"},{id:1597737472,predicate:"requestPeerTypeUser",params:[{name:"flags",type:"#"},{name:"bot",type:"flags.0?Bool"},{name:"premium",type:"flags.1?Bool"}],type:"RequestPeerType"},{id:-906990053,predicate:"requestPeerTypeChat",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"bot_participant",type:"flags.5?true"},{name:"has_username",type:"flags.3?Bool"},{name:"forum",type:"flags.4?Bool"},{name:"user_admin_rights",type:"flags.1?ChatAdminRights"},{name:"bot_admin_rights",type:"flags.2?ChatAdminRights"}],type:"RequestPeerType"},{id:865857388,predicate:"requestPeerTypeBroadcast",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"has_username",type:"flags.3?Bool"},{name:"user_admin_rights",type:"flags.1?ChatAdminRights"},{name:"bot_admin_rights",type:"flags.2?ChatAdminRights"}],type:"RequestPeerType"},{id:218842764,predicate:"keyboardButtonRequestPeer",params:[{name:"text",type:"string"},{name:"button_id",type:"int"},{name:"peer_type",type:"RequestPeerType"}],type:"KeyboardButton"},{id:1209970170,predicate:"emojiListNotModified",params:[],type:"EmojiList"},{id:2048790993,predicate:"emojiList",params:[{name:"hash",type:"long"},{name:"document_id",type:"Vector"}],type:"EmojiList"},{id:-444918734,predicate:"auth.sentCodeTypeFirebaseSms",params:[{name:"flags",type:"#"},{name:"nonce",type:"flags.0?bytes"},{name:"receipt",type:"flags.1?string"},{name:"push_timeout",type:"flags.1?int"},{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:2056961449,predicate:"emojiGroup",params:[{name:"title",type:"string"},{name:"icon_emoji_id",type:"long"},{name:"emoticons",type:"Vector"}],type:"EmojiGroup"},{id:1874111879,predicate:"messages.emojiGroupsNotModified",params:[],type:"messages.EmojiGroups"},{id:-2011186869,predicate:"messages.emojiGroups",params:[{name:"hash",type:"int"},{name:"groups",type:"Vector"}],type:"messages.EmojiGroups"},{id:-128171716,predicate:"videoSizeEmojiMarkup",params:[{name:"emoji_id",type:"long"},{name:"background_colors",type:"Vector"}],type:"VideoSize"},{id:228623102,predicate:"videoSizeStickerMarkup",params:[{name:"stickerset",type:"InputStickerSet"},{name:"sticker_id",type:"long"},{name:"background_colors",type:"Vector"}],type:"VideoSize"},{id:1964978502,predicate:"textWithEntities",params:[{name:"text",type:"string"},{name:"entities",type:"Vector"}],type:"TextWithEntities"},{id:870003448,predicate:"messages.translateResult",params:[{name:"result",type:"Vector"}],type:"messages.TranslatedText"},{id:-934791986,predicate:"autoSaveSettings",params:[{name:"flags",type:"#"},{name:"photos",type:"flags.0?true"},{name:"videos",type:"flags.1?true"},{name:"video_max_size",type:"flags.2?long"}],type:"AutoSaveSettings"},{id:-2124403385,predicate:"autoSaveException",params:[{name:"peer",type:"Peer"},{name:"settings",type:"AutoSaveSettings"}],type:"AutoSaveException"},{id:1279133341,predicate:"account.autoSaveSettings",params:[{name:"users_settings",type:"AutoSaveSettings"},{name:"chats_settings",type:"AutoSaveSettings"},{name:"broadcasts_settings",type:"AutoSaveSettings"},{name:"exceptions",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"account.AutoSaveSettings"},{id:-335171433,predicate:"updateAutoSaveSettings",params:[],type:"Update"}],methods:[{id:-878758099,method:"invokeAfterMsg",params:[{name:"msg_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:1036301552,method:"invokeAfterMsgs",params:[{name:"msg_ids",type:"Vector"},{name:"query",type:"!X"}],type:"X"},{id:-1502141361,method:"auth.sendCode",params:[{name:"phone_number",type:"string"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:-2131827673,method:"auth.signUp",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"auth.Authorization"},{id:-1923962543,method:"auth.signIn",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"flags.0?string"},{name:"email_verification",type:"flags.1?EmailVerification"}],type:"auth.Authorization"},{id:1047706137,method:"auth.logOut",params:[],type:"auth.LoggedOut"},{id:-1616179942,method:"auth.resetAuthorizations",params:[],type:"Bool"},{id:-440401971,method:"auth.exportAuthorization",params:[{name:"dc_id",type:"int"}],type:"auth.ExportedAuthorization"},{id:-1518699091,method:"auth.importAuthorization",params:[{name:"id",type:"long"},{name:"bytes",type:"bytes"}],type:"auth.Authorization"},{id:-841733627,method:"auth.bindTempAuthKey",params:[{name:"perm_auth_key_id",type:"long"},{name:"nonce",type:"long"},{name:"expires_at",type:"int"},{name:"encrypted_message",type:"bytes"}],type:"Bool"},{id:-326762118,method:"account.registerDevice",params:[{name:"flags",type:"#"},{name:"no_muted",type:"flags.0?true"},{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"app_sandbox",type:"Bool"},{name:"secret",type:"bytes"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:1779249670,method:"account.unregisterDevice",params:[{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:-2067899501,method:"account.updateNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"},{name:"settings",type:"InputPeerNotifySettings"}],type:"Bool"},{id:313765169,method:"account.getNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"}],type:"PeerNotifySettings"},{id:-612493497,method:"account.resetNotifySettings",params:[],type:"Bool"},{id:2018596725,method:"account.updateProfile",params:[{name:"flags",type:"#"},{name:"first_name",type:"flags.0?string"},{name:"last_name",type:"flags.1?string"},{name:"about",type:"flags.2?string"}],type:"User"},{id:1713919532,method:"account.updateStatus",params:[{name:"offline",type:"Bool"}],type:"Bool"},{id:127302966,method:"account.getWallPapers",params:[{name:"hash",type:"long"}],type:"account.WallPapers"},{id:-977650298,method:"account.reportPeer",params:[{name:"peer",type:"InputPeer"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:227648840,method:"users.getUsers",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-1240508136,method:"users.getFullUser",params:[{name:"id",type:"InputUser"}],type:"users.UserFull"},{id:2061264541,method:"contacts.getContactIDs",params:[{name:"hash",type:"long"}],type:"Vector"},{id:-995929106,method:"contacts.getStatuses",params:[],type:"Vector"},{id:1574346258,method:"contacts.getContacts",params:[{name:"hash",type:"long"}],type:"contacts.Contacts"},{id:746589157,method:"contacts.importContacts",params:[{name:"contacts",type:"Vector"}],type:"contacts.ImportedContacts"},{id:157945344,method:"contacts.deleteContacts",params:[{name:"id",type:"Vector"}],type:"Updates"},{id:269745566,method:"contacts.deleteByPhones",params:[{name:"phones",type:"Vector"}],type:"Bool"},{id:1758204945,method:"contacts.block",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-1096393392,method:"contacts.unblock",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-176409329,method:"contacts.getBlocked",params:[{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"contacts.Blocked"},{id:1673946374,method:"messages.getMessages",params:[{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1594569905,method:"messages.getDialogs",params:[{name:"flags",type:"#"},{name:"exclude_pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"offset_date",type:"int"},{name:"offset_id",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Dialogs"},{id:1143203525,method:"messages.getHistory",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:-1593989278,method:"messages.search",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"q",type:"string"},{name:"from_id",type:"flags.0?InputPeer"},{name:"top_msg_id",type:"flags.1?int"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:238054714,method:"messages.readHistory",params:[{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedMessages"},{id:-1332768214,method:"messages.deleteHistory",params:[{name:"flags",type:"#"},{name:"just_clear",type:"flags.0?true"},{name:"revoke",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"},{name:"min_date",type:"flags.2?int"},{name:"max_date",type:"flags.3?int"}],type:"messages.AffectedHistory"},{id:-443640366,method:"messages.deleteMessages",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:94983360,method:"messages.receivedMessages",params:[{name:"max_id",type:"int"}],type:"Vector"},{id:1486110434,method:"messages.setTyping",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"action",type:"SendMessageAction"}],type:"Bool"},{id:482476935,method:"messages.sendMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"noforwards",type:"flags.14?true"},{name:"update_stickersets_order",type:"flags.15?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:1967638886,method:"messages.sendMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"noforwards",type:"flags.14?true"},{name:"update_stickersets_order",type:"flags.15?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"media",type:"InputMedia"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:-966673468,method:"messages.forwardMessages",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"with_my_score",type:"flags.8?true"},{name:"drop_author",type:"flags.11?true"},{name:"drop_media_captions",type:"flags.12?true"},{name:"noforwards",type:"flags.14?true"},{name:"from_peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"random_id",type:"Vector"},{name:"to_peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.9?int"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:-820669733,method:"messages.reportSpam",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-270948702,method:"messages.getPeerSettings",params:[{name:"peer",type:"InputPeer"}],type:"messages.PeerSettings"},{id:-1991005362,method:"messages.report",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:1240027791,method:"messages.getChats",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:-1364194508,method:"messages.getFullChat",params:[{name:"chat_id",type:"long"}],type:"messages.ChatFull"},{id:1937260541,method:"messages.editChatTitle",params:[{name:"chat_id",type:"long"},{name:"title",type:"string"}],type:"Updates"},{id:903730804,method:"messages.editChatPhoto",params:[{name:"chat_id",type:"long"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:-230206493,method:"messages.addChatUser",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"InputUser"},{name:"fwd_limit",type:"int"}],type:"Updates"},{id:-1575461717,method:"messages.deleteChatUser",params:[{name:"flags",type:"#"},{name:"revoke_history",type:"flags.0?true"},{name:"chat_id",type:"long"},{name:"user_id",type:"InputUser"}],type:"Updates"},{id:3450904,method:"messages.createChat",params:[{name:"flags",type:"#"},{name:"users",type:"Vector"},{name:"title",type:"string"},{name:"ttl_period",type:"flags.0?int"}],type:"Updates"},{id:-304838614,method:"updates.getState",params:[],type:"updates.State"},{id:630429265,method:"updates.getDifference",params:[{name:"flags",type:"#"},{name:"pts",type:"int"},{name:"pts_total_limit",type:"flags.0?int"},{name:"date",type:"int"},{name:"qts",type:"int"}],type:"updates.Difference"},{id:473782614,method:"photos.updateProfilePhoto",params:[{name:"flags",type:"#"},{name:"fallback",type:"flags.0?true"},{name:"id",type:"InputPhoto"}],type:"photos.Photo"},{id:154966609,method:"photos.uploadProfilePhoto",params:[{name:"flags",type:"#"},{name:"fallback",type:"flags.3?true"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"},{name:"video_emoji_markup",type:"flags.4?VideoSize"}],type:"photos.Photo"},{id:-2016444625,method:"photos.deletePhotos",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-1291540959,method:"upload.saveFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1101843010,method:"upload.getFile",params:[{name:"flags",type:"#"},{name:"precise",type:"flags.0?true"},{name:"cdn_supported",type:"flags.1?true"},{name:"location",type:"InputFileLocation"},{name:"offset",type:"long"},{name:"limit",type:"int"}],type:"upload.File"},{id:-990308245,method:"help.getConfig",params:[],type:"Config"},{id:531836966,method:"help.getNearestDc",params:[],type:"NearestDc"},{id:1378703997,method:"help.getAppUpdate",params:[{name:"source",type:"string"}],type:"help.AppUpdate"},{id:1295590211,method:"help.getInviteText",params:[],type:"help.InviteText"},{id:-1848823128,method:"photos.getUserPhotos",params:[{name:"user_id",type:"InputUser"},{name:"offset",type:"int"},{name:"max_id",type:"long"},{name:"limit",type:"int"}],type:"photos.Photos"},{id:651135312,method:"messages.getDhConfig",params:[{name:"version",type:"int"},{name:"random_length",type:"int"}],type:"messages.DhConfig"},{id:-162681021,method:"messages.requestEncryption",params:[{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:1035731989,method:"messages.acceptEncryption",params:[{name:"peer",type:"InputEncryptedChat"},{name:"g_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:-208425312,method:"messages.discardEncryption",params:[{name:"flags",type:"#"},{name:"delete_history",type:"flags.0?true"},{name:"chat_id",type:"int"}],type:"Bool"},{id:2031374829,method:"messages.setEncryptedTyping",params:[{name:"peer",type:"InputEncryptedChat"},{name:"typing",type:"Bool"}],type:"Bool"},{id:2135648522,method:"messages.readEncryptedHistory",params:[{name:"peer",type:"InputEncryptedChat"},{name:"max_date",type:"int"}],type:"Bool"},{id:1157265941,method:"messages.sendEncrypted",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1431914525,method:"messages.sendEncryptedFile",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"},{name:"file",type:"InputEncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:852769188,method:"messages.sendEncryptedService",params:[{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1436924774,method:"messages.receivedQueue",params:[{name:"max_qts",type:"int"}],type:"Vector"},{id:1259113487,method:"messages.reportEncryptedSpam",params:[{name:"peer",type:"InputEncryptedChat"}],type:"Bool"},{id:-562337987,method:"upload.saveBigFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"file_total_parts",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1043505495,method:"initConnection",params:[{name:"flags",type:"#"},{name:"api_id",type:"int"},{name:"device_model",type:"string"},{name:"system_version",type:"string"},{name:"app_version",type:"string"},{name:"system_lang_code",type:"string"},{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"proxy",type:"flags.0?InputClientProxy"},{name:"params",type:"flags.1?JSONValue"},{name:"query",type:"!X"}],type:"X"},{id:-1663104819,method:"help.getSupport",params:[],type:"help.Support"},{id:916930423,method:"messages.readMessageContents",params:[{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:655677548,method:"account.checkUsername",params:[{name:"username",type:"string"}],type:"Bool"},{id:1040964988,method:"account.updateUsername",params:[{name:"username",type:"string"}],type:"User"},{id:301470424,method:"contacts.search",params:[{name:"q",type:"string"},{name:"limit",type:"int"}],type:"contacts.Found"},{id:-623130288,method:"account.getPrivacy",params:[{name:"key",type:"InputPrivacyKey"}],type:"account.PrivacyRules"},{id:-906486552,method:"account.setPrivacy",params:[{name:"key",type:"InputPrivacyKey"},{name:"rules",type:"Vector"}],type:"account.PrivacyRules"},{id:-1564422284,method:"account.deleteAccount",params:[{name:"flags",type:"#"},{name:"reason",type:"string"},{name:"password",type:"flags.0?InputCheckPasswordSRP"}],type:"Bool"},{id:150761757,method:"account.getAccountTTL",params:[],type:"AccountDaysTTL"},{id:608323678,method:"account.setAccountTTL",params:[{name:"ttl",type:"AccountDaysTTL"}],type:"Bool"},{id:-627372787,method:"invokeWithLayer",params:[{name:"layer",type:"int"},{name:"query",type:"!X"}],type:"X"},{id:-113456221,method:"contacts.resolveUsername",params:[{name:"username",type:"string"}],type:"contacts.ResolvedPeer"},{id:-2108208411,method:"account.sendChangePhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1891839707,method:"account.changePhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"User"},{id:-710552671,method:"messages.getStickers",params:[{name:"emoticon",type:"string"},{name:"hash",type:"long"}],type:"messages.Stickers"},{id:-1197432408,method:"messages.getAllStickers",params:[{name:"hash",type:"long"}],type:"messages.AllStickers"},{id:954152242,method:"account.updateDeviceLocked",params:[{name:"period",type:"int"}],type:"Bool"},{id:1738800940,method:"auth.importBotAuthorization",params:[{name:"flags",type:"int"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"bot_auth_token",type:"string"}],type:"auth.Authorization"},{id:-1956073268,method:"messages.getWebPagePreview",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"MessageMedia"},{id:-484392616,method:"account.getAuthorizations",params:[],type:"account.Authorizations"},{id:-545786948,method:"account.resetAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1418342645,method:"account.getPassword",params:[],type:"account.Password"},{id:-1663767815,method:"account.getPasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"account.PasswordSettings"},{id:-1516564433,method:"account.updatePasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"new_settings",type:"account.PasswordInputSettings"}],type:"Bool"},{id:-779399914,method:"auth.checkPassword",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"auth.Authorization"},{id:-661144474,method:"auth.requestPasswordRecovery",params:[],type:"auth.PasswordRecovery"},{id:923364464,method:"auth.recoverPassword",params:[{name:"flags",type:"#"},{name:"code",type:"string"},{name:"new_settings",type:"flags.0?account.PasswordInputSettings"}],type:"auth.Authorization"},{id:-1080796745,method:"invokeWithoutUpdates",params:[{name:"query",type:"!X"}],type:"X"},{id:-1607670315,method:"messages.exportChatInvite",params:[{name:"flags",type:"#"},{name:"legacy_revoke_permanent",type:"flags.2?true"},{name:"request_needed",type:"flags.3?true"},{name:"peer",type:"InputPeer"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"},{name:"title",type:"flags.4?string"}],type:"ExportedChatInvite"},{id:1051570619,method:"messages.checkChatInvite",params:[{name:"hash",type:"string"}],type:"ChatInvite"},{id:1817183516,method:"messages.importChatInvite",params:[{name:"hash",type:"string"}],type:"Updates"},{id:-928977804,method:"messages.getStickerSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"hash",type:"int"}],type:"messages.StickerSet"},{id:-946871200,method:"messages.installStickerSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"archived",type:"Bool"}],type:"messages.StickerSetInstallResult"},{id:-110209570,method:"messages.uninstallStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:-421563528,method:"messages.startBot",params:[{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"long"},{name:"start_param",type:"string"}],type:"Updates"},{id:-1877938321,method:"help.getAppChangelog",params:[{name:"prev_app_version",type:"string"}],type:"Updates"},{id:1468322785,method:"messages.getMessagesViews",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"increment",type:"Bool"}],type:"messages.MessageViews"},{id:-871347913,method:"channels.readHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:-2067661490,method:"channels.deleteMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:-196443371,method:"channels.reportSpam",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Bool"},{id:-1383294429,method:"channels.getMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:2010044880,method:"channels.getParticipants",params:[{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelParticipantsFilter"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"channels.ChannelParticipants"},{id:-1599378234,method:"channels.getParticipant",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"}],type:"channels.ChannelParticipant"},{id:176122811,method:"channels.getChannels",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:141781513,method:"channels.getFullChannel",params:[{name:"channel",type:"InputChannel"}],type:"messages.ChatFull"},{id:-1862244601,method:"channels.createChannel",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.0?true"},{name:"megagroup",type:"flags.1?true"},{name:"for_import",type:"flags.3?true"},{name:"forum",type:"flags.5?true"},{name:"title",type:"string"},{name:"about",type:"string"},{name:"geo_point",type:"flags.2?InputGeoPoint"},{name:"address",type:"flags.2?string"},{name:"ttl_period",type:"flags.4?int"}],type:"Updates"},{id:-751007486,method:"channels.editAdmin",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"string"}],type:"Updates"},{id:1450044624,method:"channels.editTitle",params:[{name:"channel",type:"InputChannel"},{name:"title",type:"string"}],type:"Updates"},{id:-248621111,method:"channels.editPhoto",params:[{name:"channel",type:"InputChannel"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:283557164,method:"channels.checkUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:890549214,method:"channels.updateUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:615851205,method:"channels.joinChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:-130635115,method:"channels.leaveChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:429865580,method:"channels.inviteToChannel",params:[{name:"channel",type:"InputChannel"},{name:"users",type:"Vector"}],type:"Updates"},{id:-1072619549,method:"channels.deleteChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:51854712,method:"updates.getChannelDifference",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelMessagesFilter"},{name:"pts",type:"int"},{name:"limit",type:"int"}],type:"updates.ChannelDifference"},{id:-1470377534,method:"messages.editChatAdmin",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"InputUser"},{name:"is_admin",type:"Bool"}],type:"Bool"},{id:-1568189671,method:"messages.migrateChat",params:[{name:"chat_id",type:"long"}],type:"Updates"},{id:1271290010,method:"messages.searchGlobal",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"q",type:"string"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:2016638777,method:"messages.reorderStickerSets",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"order",type:"Vector"}],type:"Bool"},{id:-1309538785,method:"messages.getDocumentByHash",params:[{name:"sha256",type:"bytes"},{name:"size",type:"long"},{name:"mime_type",type:"string"}],type:"Document"},{id:1559270965,method:"messages.getSavedGifs",params:[{name:"hash",type:"long"}],type:"messages.SavedGifs"},{id:846868683,method:"messages.saveGif",params:[{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:1364105629,method:"messages.getInlineBotResults",params:[{name:"flags",type:"#"},{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"geo_point",type:"flags.0?InputGeoPoint"},{name:"query",type:"string"},{name:"offset",type:"string"}],type:"messages.BotResults"},{id:-346119674,method:"messages.setInlineBotResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"private",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"next_offset",type:"flags.2?string"},{name:"switch_pm",type:"flags.3?InlineBotSwitchPM"}],type:"Bool"},{id:-738468661,method:"messages.sendInlineBotResult",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"hide_via",type:"flags.11?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"random_id",type:"long"},{name:"query_id",type:"long"},{name:"id",type:"string"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:-432034325,method:"channels.exportMessageLink",params:[{name:"flags",type:"#"},{name:"grouped",type:"flags.0?true"},{name:"thread",type:"flags.1?true"},{name:"channel",type:"InputChannel"},{name:"id",type:"int"}],type:"ExportedMessageLink"},{id:527021574,method:"channels.toggleSignatures",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:1056025023,method:"auth.resendCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"auth.SentCode"},{id:520357240,method:"auth.cancelCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"Bool"},{id:-39416522,method:"messages.getMessageEditData",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"messages.MessageEditData"},{id:1224152952,method:"messages.editMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.15?int"}],type:"Updates"},{id:-2091549254,method:"messages.editInlineBotMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:-1824339449,method:"messages.getBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"game",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"data",type:"flags.0?bytes"},{name:"password",type:"flags.2?InputCheckPasswordSRP"}],type:"messages.BotCallbackAnswer"},{id:-712043766,method:"messages.setBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"Bool"},{id:-1758168906,method:"contacts.getTopPeers",params:[{name:"flags",type:"#"},{name:"correspondents",type:"flags.0?true"},{name:"bots_pm",type:"flags.1?true"},{name:"bots_inline",type:"flags.2?true"},{name:"phone_calls",type:"flags.3?true"},{name:"forward_users",type:"flags.4?true"},{name:"forward_chats",type:"flags.5?true"},{name:"groups",type:"flags.10?true"},{name:"channels",type:"flags.15?true"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"contacts.TopPeers"},{id:451113900,method:"contacts.resetTopPeerRating",params:[{name:"category",type:"TopPeerCategory"},{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-462373635,method:"messages.getPeerDialogs",params:[{name:"peers",type:"Vector"}],type:"messages.PeerDialogs"},{id:-1271718337,method:"messages.saveDraft",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.2?int"},{name:"peer",type:"InputPeer"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:1782549861,method:"messages.getAllDrafts",params:[],type:"Updates"},{id:1685588756,method:"messages.getFeaturedStickers",params:[{name:"hash",type:"long"}],type:"messages.FeaturedStickers"},{id:1527873830,method:"messages.readFeaturedStickers",params:[{name:"id",type:"Vector"}],type:"Bool"},{id:-1649852357,method:"messages.getRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"hash",type:"long"}],type:"messages.RecentStickers"},{id:958863608,method:"messages.saveRecentSticker",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:-1986437075,method:"messages.clearRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"}],type:"Bool"},{id:1475442322,method:"messages.getArchivedStickers",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"offset_id",type:"long"},{name:"limit",type:"int"}],type:"messages.ArchivedStickers"},{id:457157256,method:"account.sendConfirmPhoneCode",params:[{name:"hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1596029123,method:"account.confirmPhone",params:[{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:-122669393,method:"channels.getAdminedPublicChannels",params:[{name:"flags",type:"#"},{name:"by_location",type:"flags.0?true"},{name:"check_limit",type:"flags.1?true"}],type:"messages.Chats"},{id:1678738104,method:"messages.getMaskStickers",params:[{name:"hash",type:"long"}],type:"messages.AllStickers"},{id:-866424884,method:"messages.getAttachedStickers",params:[{name:"media",type:"InputStickeredMedia"}],type:"Vector"},{id:-1907842680,method:"auth.dropTempAuthKeys",params:[{name:"except_auth_keys",type:"Vector"}],type:"Bool"},{id:-1896289088,method:"messages.setGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Updates"},{id:363700068,method:"messages.setInlineGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Bool"},{id:-400399203,method:"messages.getGameHighScores",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:258170395,method:"messages.getInlineGameHighScores",params:[{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:-468934396,method:"messages.getCommonChats",params:[{name:"user_id",type:"InputUser"},{name:"max_id",type:"long"},{name:"limit",type:"int"}],type:"messages.Chats"},{id:-2023787330,method:"messages.getAllChats",params:[{name:"except_ids",type:"Vector"}],type:"messages.Chats"},{id:-333262899,method:"help.setBotUpdatesStatus",params:[{name:"pending_updates_count",type:"int"},{name:"message",type:"string"}],type:"Bool"},{id:852135825,method:"messages.getWebPage",params:[{name:"url",type:"string"},{name:"hash",type:"int"}],type:"WebPage"},{id:-1489903017,method:"messages.toggleDialogPin",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:991616823,method:"messages.reorderPinnedDialogs",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"folder_id",type:"int"},{name:"order",type:"Vector"}],type:"Bool"},{id:-692498958,method:"messages.getPinnedDialogs",params:[{name:"folder_id",type:"int"}],type:"messages.PeerDialogs"},{id:-1440257555,method:"bots.sendCustomRequest",params:[{name:"custom_method",type:"string"},{name:"params",type:"DataJSON"}],type:"DataJSON"},{id:-434028723,method:"bots.answerWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"}],type:"Bool"},{id:619086221,method:"upload.getWebFile",params:[{name:"location",type:"InputWebFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.WebFile"},{id:924093883,method:"payments.getPaymentForm",params:[{name:"flags",type:"#"},{name:"invoice",type:"InputInvoice"},{name:"theme_params",type:"flags.0?DataJSON"}],type:"payments.PaymentForm"},{id:611897804,method:"payments.getPaymentReceipt",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"payments.PaymentReceipt"},{id:-1228345045,method:"payments.validateRequestedInfo",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"invoice",type:"InputInvoice"},{name:"info",type:"PaymentRequestedInfo"}],type:"payments.ValidatedRequestedInfo"},{id:755192367,method:"payments.sendPaymentForm",params:[{name:"flags",type:"#"},{name:"form_id",type:"long"},{name:"invoice",type:"InputInvoice"},{name:"requested_info_id",type:"flags.0?string"},{name:"shipping_option_id",type:"flags.1?string"},{name:"credentials",type:"InputPaymentCredentials"},{name:"tip_amount",type:"flags.2?long"}],type:"payments.PaymentResult"},{id:1151208273,method:"account.getTmpPassword",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"period",type:"int"}],type:"account.TmpPassword"},{id:578650699,method:"payments.getSavedInfo",params:[],type:"payments.SavedInfo"},{id:-667062079,method:"payments.clearSavedInfo",params:[{name:"flags",type:"#"},{name:"credentials",type:"flags.0?true"},{name:"info",type:"flags.1?true"}],type:"Bool"},{id:-436833542,method:"messages.setBotShippingResults",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"Bool"},{id:163765653,method:"messages.setBotPrecheckoutResults",params:[{name:"flags",type:"#"},{name:"success",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"}],type:"Bool"},{id:-1876841625,method:"stickers.createStickerSet",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"animated",type:"flags.1?true"},{name:"videos",type:"flags.4?true"},{name:"emojis",type:"flags.5?true"},{name:"text_color",type:"flags.6?true"},{name:"user_id",type:"InputUser"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumb",type:"flags.2?InputDocument"},{name:"stickers",type:"Vector"},{name:"software",type:"flags.3?string"}],type:"messages.StickerSet"},{id:-143257775,method:"stickers.removeStickerFromSet",params:[{name:"sticker",type:"InputDocument"}],type:"messages.StickerSet"},{id:-4795190,method:"stickers.changeStickerPosition",params:[{name:"sticker",type:"InputDocument"},{name:"position",type:"int"}],type:"messages.StickerSet"},{id:-2041315650,method:"stickers.addStickerToSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"sticker",type:"InputStickerSetItem"}],type:"messages.StickerSet"},{id:1369162417,method:"messages.uploadMedia",params:[{name:"peer",type:"InputPeer"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:1430593449,method:"phone.getCallConfig",params:[],type:"DataJSON"},{id:1124046573,method:"phone.requestCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:1003664544,method:"phone.acceptCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:788404002,method:"phone.confirmCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_a",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:399855457,method:"phone.receivedCall",params:[{name:"peer",type:"InputPhoneCall"}],type:"Bool"},{id:-1295269440,method:"phone.discardCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"duration",type:"int"},{name:"reason",type:"PhoneCallDiscardReason"},{name:"connection_id",type:"long"}],type:"Updates"},{id:1508562471,method:"phone.setCallRating",params:[{name:"flags",type:"#"},{name:"user_initiative",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"rating",type:"int"},{name:"comment",type:"string"}],type:"Updates"},{id:662363518,method:"phone.saveCallDebug",params:[{name:"peer",type:"InputPhoneCall"},{name:"debug",type:"DataJSON"}],type:"Bool"},{id:962554330,method:"upload.getCdnFile",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"long"},{name:"limit",type:"int"}],type:"upload.CdnFile"},{id:-1691921240,method:"upload.reuploadCdnFile",params:[{name:"file_token",type:"bytes"},{name:"request_token",type:"bytes"}],type:"Vector"},{id:1375900482,method:"help.getCdnConfig",params:[],type:"CdnConfig"},{id:-219008246,method:"langpack.getLangPack",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackDifference"},{id:-269862909,method:"langpack.getStrings",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"keys",type:"Vector"}],type:"Vector"},{id:-845657435,method:"langpack.getDifference",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"LangPackDifference"},{id:1120311183,method:"langpack.getLanguages",params:[{name:"lang_pack",type:"string"}],type:"Vector"},{id:-1763259007,method:"channels.editBanned",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:870184064,method:"channels.getAdminLog",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"q",type:"string"},{name:"events_filter",type:"flags.0?ChannelAdminLogEventsFilter"},{name:"admins",type:"flags.1?Vector"},{name:"max_id",type:"long"},{name:"min_id",type:"long"},{name:"limit",type:"int"}],type:"channels.AdminLogResults"},{id:-1847836879,method:"upload.getCdnFileHashes",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"long"}],type:"Vector"},{id:-914493408,method:"messages.sendScreenshotNotification",params:[{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"int"},{name:"random_id",type:"long"}],type:"Updates"},{id:-359881479,method:"channels.setStickers",params:[{name:"channel",type:"InputChannel"},{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:82946729,method:"messages.getFavedStickers",params:[{name:"hash",type:"long"}],type:"messages.FavedStickers"},{id:-1174420133,method:"messages.faveSticker",params:[{name:"id",type:"InputDocument"},{name:"unfave",type:"Bool"}],type:"Bool"},{id:-357180360,method:"channels.readMessageContents",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"Bool"},{id:-2020263951,method:"contacts.resetSaved",params:[],type:"Bool"},{id:-251140208,method:"messages.getUnreadMentions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"}],type:"messages.Messages"},{id:-1683319225,method:"channels.deleteHistory",params:[{name:"flags",type:"#"},{name:"for_everyone",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Updates"},{id:1036054804,method:"help.getRecentMeUrls",params:[{name:"referer",type:"string"}],type:"help.RecentMeUrls"},{id:-356796084,method:"channels.togglePreHistoryHidden",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:921026381,method:"messages.readMentions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"}],type:"messages.AffectedHistory"},{id:1881817312,method:"messages.getRecentLocations",params:[{name:"peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:-1225713124,method:"messages.sendMultiMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"noforwards",type:"flags.14?true"},{name:"update_stickersets_order",type:"flags.15?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"multi_media",type:"Vector"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:1347929239,method:"messages.uploadEncryptedFile",params:[{name:"peer",type:"InputEncryptedChat"},{name:"file",type:"InputEncryptedFile"}],type:"EncryptedFile"},{id:405695855,method:"account.getWebAuthorizations",params:[],type:"account.WebAuthorizations"},{id:755087855,method:"account.resetWebAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1747789204,method:"account.resetWebAuthorizations",params:[],type:"Bool"},{id:896555914,method:"messages.searchStickerSets",params:[{name:"flags",type:"#"},{name:"exclude_featured",type:"flags.0?true"},{name:"q",type:"string"},{name:"hash",type:"long"}],type:"messages.FoundStickerSets"},{id:-1856595926,method:"upload.getFileHashes",params:[{name:"location",type:"InputFileLocation"},{name:"offset",type:"long"}],type:"Vector"},{id:749019089,method:"help.getTermsOfServiceUpdate",params:[],type:"help.TermsOfServiceUpdate"},{id:-294455398,method:"help.acceptTermsOfService",params:[{name:"id",type:"DataJSON"}],type:"Bool"},{id:-1299661699,method:"account.getAllSecureValues",params:[],type:"Vector"},{id:1936088002,method:"account.getSecureValue",params:[{name:"types",type:"Vector"}],type:"Vector"},{id:-1986010339,method:"account.saveSecureValue",params:[{name:"value",type:"InputSecureValue"},{name:"secure_secret_id",type:"long"}],type:"SecureValue"},{id:-1199522741,method:"account.deleteSecureValue",params:[{name:"types",type:"Vector"}],type:"Bool"},{id:-1865902923,method:"users.setSecureValueErrors",params:[{name:"id",type:"InputUser"},{name:"errors",type:"Vector"}],type:"Bool"},{id:-1456907910,method:"account.getAuthorizationForm",params:[{name:"bot_id",type:"long"},{name:"scope",type:"string"},{name:"public_key",type:"string"}],type:"account.AuthorizationForm"},{id:-202552205,method:"account.acceptAuthorization",params:[{name:"bot_id",type:"long"},{name:"scope",type:"string"},{name:"public_key",type:"string"},{name:"value_hashes",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"Bool"},{id:-1516022023,method:"account.sendVerifyPhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1305716726,method:"account.verifyPhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:-1730136133,method:"account.sendVerifyEmailCode",params:[{name:"purpose",type:"EmailVerifyPurpose"},{name:"email",type:"string"}],type:"account.SentEmailCode"},{id:53322959,method:"account.verifyEmail",params:[{name:"purpose",type:"EmailVerifyPurpose"},{name:"verification",type:"EmailVerification"}],type:"account.EmailVerified"},{id:1072547679,method:"help.getDeepLinkInfo",params:[{name:"path",type:"string"}],type:"help.DeepLinkInfo"},{id:-2098076769,method:"contacts.getSaved",params:[],type:"Vector"},{id:-2092831552,method:"channels.getLeftChannels",params:[{name:"offset",type:"int"}],type:"messages.Chats"},{id:-1896617296,method:"account.initTakeoutSession",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"message_users",type:"flags.1?true"},{name:"message_chats",type:"flags.2?true"},{name:"message_megagroups",type:"flags.3?true"},{name:"message_channels",type:"flags.4?true"},{name:"files",type:"flags.5?true"},{name:"file_max_size",type:"flags.5?long"}],type:"account.Takeout"},{id:489050862,method:"account.finishTakeoutSession",params:[{name:"flags",type:"#"},{name:"success",type:"flags.0?true"}],type:"Bool"},{id:486505992,method:"messages.getSplitRanges",params:[],type:"Vector"},{id:911373810,method:"invokeWithMessagesRange",params:[{name:"range",type:"MessageRange"},{name:"query",type:"!X"}],type:"X"},{id:-1398145746,method:"invokeWithTakeout",params:[{name:"takeout_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:-1031349873,method:"messages.markDialogUnread",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:585256482,method:"messages.getDialogUnreadMarks",params:[],type:"Vector"},{id:-2062238246,method:"contacts.toggleTopPeers",params:[{name:"enabled",type:"Bool"}],type:"Bool"},{id:2119757468,method:"messages.clearAllDrafts",params:[],type:"Bool"},{id:-1735311088,method:"help.getAppConfig",params:[],type:"JSONValue"},{id:1862465352,method:"help.saveAppLog",params:[{name:"events",type:"Vector"}],type:"Bool"},{id:-966677240,method:"help.getPassportConfig",params:[{name:"hash",type:"int"}],type:"help.PassportConfig"},{id:1784243458,method:"langpack.getLanguage",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackLanguage"},{id:-760547348,method:"messages.updatePinnedMessage",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"unpin",type:"flags.1?true"},{name:"pm_oneside",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"Updates"},{id:-1881204448,method:"account.confirmPasswordEmail",params:[{name:"code",type:"string"}],type:"Bool"},{id:2055154197,method:"account.resendPasswordEmail",params:[],type:"Bool"},{id:-1043606090,method:"account.cancelPasswordEmail",params:[],type:"Bool"},{id:-748624084,method:"help.getSupportName",params:[],type:"help.SupportName"},{id:59377875,method:"help.getUserInfo",params:[{name:"user_id",type:"InputUser"}],type:"help.UserInfo"},{id:1723407216,method:"help.editUserInfo",params:[{name:"user_id",type:"InputUser"},{name:"message",type:"string"},{name:"entities",type:"Vector"}],type:"help.UserInfo"},{id:-1626880216,method:"account.getContactSignUpNotification",params:[],type:"Bool"},{id:-806076575,method:"account.setContactSignUpNotification",params:[{name:"silent",type:"Bool"}],type:"Bool"},{id:1398240377,method:"account.getNotifyExceptions",params:[{name:"flags",type:"#"},{name:"compare_sound",type:"flags.1?true"},{name:"peer",type:"flags.0?InputNotifyPeer"}],type:"Updates"},{id:283795844,method:"messages.sendVote",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"options",type:"Vector"}],type:"Updates"},{id:1941660731,method:"messages.getPollResults",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1848369232,method:"messages.getOnlines",params:[{name:"peer",type:"InputPeer"}],type:"ChatOnlines"},{id:-554301545,method:"messages.editChatAbout",params:[{name:"peer",type:"InputPeer"},{name:"about",type:"string"}],type:"Bool"},{id:-1517917375,method:"messages.editChatDefaultBannedRights",params:[{name:"peer",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:-57811990,method:"account.getWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"}],type:"WallPaper"},{id:-578472351,method:"account.uploadWallPaper",params:[{name:"file",type:"InputFile"},{name:"mime_type",type:"string"},{name:"settings",type:"WallPaperSettings"}],type:"WallPaper"},{id:1817860919,method:"account.saveWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"unsave",type:"Bool"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-18000023,method:"account.installWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-1153722364,method:"account.resetWallPapers",params:[],type:"Bool"},{id:1457130303,method:"account.getAutoDownloadSettings",params:[],type:"account.AutoDownloadSettings"},{id:1995661875,method:"account.saveAutoDownloadSettings",params:[{name:"flags",type:"#"},{name:"low",type:"flags.0?true"},{name:"high",type:"flags.1?true"},{name:"settings",type:"AutoDownloadSettings"}],type:"Bool"},{id:899735650,method:"messages.getEmojiKeywords",params:[{name:"lang_code",type:"string"}],type:"EmojiKeywordsDifference"},{id:352892591,method:"messages.getEmojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"EmojiKeywordsDifference"},{id:1318675378,method:"messages.getEmojiKeywordsLanguages",params:[{name:"lang_codes",type:"Vector"}],type:"Vector"},{id:-709817306,method:"messages.getEmojiURL",params:[{name:"lang_code",type:"string"}],type:"EmojiURL"},{id:1749536939,method:"folders.editPeerFolders",params:[{name:"folder_peers",type:"Vector"}],type:"Updates"},{id:472471681,method:"folders.deleteFolder",params:[{name:"folder_id",type:"int"}],type:"Updates"},{id:11435201,method:"messages.getSearchCounters",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"filters",type:"Vector"}],type:"Vector"},{id:-170208392,method:"channels.getGroupsForDiscussion",params:[],type:"messages.Chats"},{id:1079520178,method:"channels.setDiscussionGroup",params:[{name:"broadcast",type:"InputChannel"},{name:"group",type:"InputChannel"}],type:"Bool"},{id:428848198,method:"messages.requestUrlAuth",params:[{name:"flags",type:"#"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:-1322487515,method:"messages.acceptUrlAuth",params:[{name:"flags",type:"#"},{name:"write_allowed",type:"flags.0?true"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:1336717624,method:"messages.hidePeerSettingsBar",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-386636848,method:"contacts.addContact",params:[{name:"flags",type:"#"},{name:"add_phone_privacy_exception",type:"flags.0?true"},{name:"id",type:"InputUser"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"phone",type:"string"}],type:"Updates"},{id:-130964977,method:"contacts.acceptContact",params:[{name:"id",type:"InputUser"}],type:"Updates"},{id:-1892102881,method:"channels.editCreator",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"password",type:"InputCheckPasswordSRP"}],type:"Updates"},{id:-750207932,method:"contacts.getLocated",params:[{name:"flags",type:"#"},{name:"background",type:"flags.1?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"self_expires",type:"flags.0?int"}],type:"Updates"},{id:1491484525,method:"channels.editLocation",params:[{name:"channel",type:"InputChannel"},{name:"geo_point",type:"InputGeoPoint"},{name:"address",type:"string"}],type:"Bool"},{id:-304832784,method:"channels.toggleSlowMode",params:[{name:"channel",type:"InputChannel"},{name:"seconds",type:"int"}],type:"Updates"},{id:-183077365,method:"messages.getScheduledHistory",params:[{name:"peer",type:"InputPeer"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:-1111817116,method:"messages.getScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1120369398,method:"messages.sendScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:1504586518,method:"messages.deleteScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:473805619,method:"account.uploadTheme",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.0?InputFile"},{name:"file_name",type:"string"},{name:"mime_type",type:"string"}],type:"Document"},{id:1697530880,method:"account.createTheme",params:[{name:"flags",type:"#"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?Vector"}],type:"Theme"},{id:737414348,method:"account.updateTheme",params:[{name:"flags",type:"#"},{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"slug",type:"flags.0?string"},{name:"title",type:"flags.1?string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?Vector"}],type:"Theme"},{id:-229175188,method:"account.saveTheme",params:[{name:"theme",type:"InputTheme"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:-953697477,method:"account.installTheme",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"theme",type:"flags.1?InputTheme"},{name:"format",type:"flags.2?string"},{name:"base_theme",type:"flags.3?BaseTheme"}],type:"Bool"},{id:978872812,method:"account.getTheme",params:[{name:"format",type:"string"},{name:"theme",type:"InputTheme"}],type:"Theme"},{id:1913054296,method:"account.getThemes",params:[{name:"format",type:"string"},{name:"hash",type:"long"}],type:"account.Themes"},{id:-1210022402,method:"auth.exportLoginToken",params:[{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"except_ids",type:"Vector"}],type:"auth.LoginToken"},{id:-1783866140,method:"auth.importLoginToken",params:[{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:-392909491,method:"auth.acceptLoginToken",params:[{name:"token",type:"bytes"}],type:"Authorization"},{id:-1250643605,method:"account.setContentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"}],type:"Bool"},{id:-1952756306,method:"account.getContentSettings",params:[],type:"account.ContentSettings"},{id:300429806,method:"channels.getInactiveChannels",params:[],type:"messages.InactiveChats"},{id:1705865692,method:"account.getMultiWallPapers",params:[{name:"wallpapers",type:"Vector"}],type:"Vector"},{id:-1200736242,method:"messages.getPollVotes",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"option",type:"flags.0?bytes"},{name:"offset",type:"flags.1?string"},{name:"limit",type:"int"}],type:"messages.VotesList"},{id:-1257951254,method:"messages.toggleStickerSets",params:[{name:"flags",type:"#"},{name:"uninstall",type:"flags.0?true"},{name:"archive",type:"flags.1?true"},{name:"unarchive",type:"flags.2?true"},{name:"stickersets",type:"Vector"}],type:"Bool"},{id:779736953,method:"payments.getBankCardData",params:[{name:"number",type:"string"}],type:"payments.BankCardData"},{id:-241247891,method:"messages.getDialogFilters",params:[],type:"Vector"},{id:-1566780372,method:"messages.getSuggestedDialogFilters",params:[],type:"Vector"},{id:450142282,method:"messages.updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Bool"},{id:-983318044,method:"messages.updateDialogFiltersOrder",params:[{name:"order",type:"Vector"}],type:"Bool"},{id:-1421720550,method:"stats.getBroadcastStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.BroadcastStats"},{id:1646092192,method:"stats.loadAsyncGraph",params:[{name:"flags",type:"#"},{name:"token",type:"string"},{name:"x",type:"flags.0?long"}],type:"StatsGraph"},{id:-1707717072,method:"stickers.setStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb",type:"InputDocument"}],type:"messages.StickerSet"},{id:85399130,method:"bots.setBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"},{name:"commands",type:"Vector"}],type:"Bool"},{id:2127598753,method:"messages.getOldFeaturedStickers",params:[{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.FeaturedStickers"},{id:-1063816159,method:"help.getPromoData",params:[],type:"help.PromoData"},{id:505748629,method:"help.hidePromoData",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-8744061,method:"phone.sendSignalingData",params:[{name:"peer",type:"InputPhoneCall"},{name:"data",type:"bytes"}],type:"Bool"},{id:-589330937,method:"stats.getMegagroupStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.MegagroupStats"},{id:-349483786,method:"account.getGlobalPrivacySettings",params:[],type:"GlobalPrivacySettings"},{id:517647042,method:"account.setGlobalPrivacySettings",params:[{name:"settings",type:"GlobalPrivacySettings"}],type:"GlobalPrivacySettings"},{id:-183649631,method:"help.dismissSuggestion",params:[{name:"peer",type:"InputPeer"},{name:"suggestion",type:"string"}],type:"Bool"},{id:1935116200,method:"help.getCountriesList",params:[{name:"lang_code",type:"string"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:584962828,method:"messages.getReplies",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:1147761405,method:"messages.getDiscussionMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"messages.DiscussionMessage"},{id:-147740172,method:"messages.readDiscussion",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Bool"},{id:698914348,method:"contacts.blockFromReplies",params:[{name:"flags",type:"#"},{name:"delete_message",type:"flags.0?true"},{name:"delete_history",type:"flags.1?true"},{name:"report_spam",type:"flags.2?true"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1445996571,method:"stats.getMessagePublicForwards",params:[{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:-1226791947,method:"stats.getMessageStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"}],type:"stats.MessageStats"},{id:-299714136,method:"messages.unpinAllMessages",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"}],type:"messages.AffectedHistory"},{id:1221445336,method:"phone.createGroupCall",params:[{name:"flags",type:"#"},{name:"rtmp_stream",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"int"},{name:"title",type:"flags.0?string"},{name:"schedule_date",type:"flags.1?int"}],type:"Updates"},{id:-1322057861,method:"phone.joinGroupCall",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"video_stopped",type:"flags.2?true"},{name:"call",type:"InputGroupCall"},{name:"join_as",type:"InputPeer"},{name:"invite_hash",type:"flags.1?string"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:1342404601,method:"phone.leaveGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"source",type:"int"}],type:"Updates"},{id:2067345760,method:"phone.inviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"Updates"},{id:2054648117,method:"phone.discardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1958458429,method:"phone.toggleGroupCallSettings",params:[{name:"flags",type:"#"},{name:"reset_invite_hash",type:"flags.1?true"},{name:"call",type:"InputGroupCall"},{name:"join_muted",type:"flags.0?Bool"}],type:"Updates"},{id:68699611,method:"phone.getGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"limit",type:"int"}],type:"phone.GroupCall"},{id:-984033109,method:"phone.getGroupParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"ids",type:"Vector"},{name:"sources",type:"Vector"},{name:"offset",type:"string"},{name:"limit",type:"int"}],type:"phone.GroupParticipants"},{id:-1248003721,method:"phone.checkGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"sources",type:"Vector"}],type:"Vector"},{id:1540419152,method:"messages.deleteChat",params:[{name:"chat_id",type:"long"}],type:"Bool"},{id:-104078327,method:"messages.deletePhoneCallHistory",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"}],type:"messages.AffectedFoundMessages"},{id:1140726259,method:"messages.checkHistoryImport",params:[{name:"import_head",type:"string"}],type:"messages.HistoryImportParsed"},{id:873008187,method:"messages.initHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"file",type:"InputFile"},{name:"media_count",type:"int"}],type:"messages.HistoryImport"},{id:713433234,method:"messages.uploadImportedMedia",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"},{name:"file_name",type:"string"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:-1271008444,method:"messages.startHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"}],type:"Bool"},{id:-1565154314,method:"messages.getExportedChatInvites",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.3?true"},{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"},{name:"offset_date",type:"flags.2?int"},{name:"offset_link",type:"flags.2?string"},{name:"limit",type:"int"}],type:"messages.ExportedChatInvites"},{id:1937010524,method:"messages.getExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"messages.ExportedChatInvite"},{id:-1110823051,method:"messages.editExportedChatInvite",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"string"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"},{name:"request_needed",type:"flags.3?Bool"},{name:"title",type:"flags.4?string"}],type:"messages.ExportedChatInvite"},{id:1452833749,method:"messages.deleteRevokedExportedChatInvites",params:[{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"}],type:"Bool"},{id:-731601877,method:"messages.deleteExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"Bool"},{id:958457583,method:"messages.getAdminsWithInvites",params:[{name:"peer",type:"InputPeer"}],type:"messages.ChatAdminsWithInvites"},{id:-553329330,method:"messages.getChatInviteImporters",params:[{name:"flags",type:"#"},{name:"requested",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"flags.1?string"},{name:"q",type:"flags.2?string"},{name:"offset_date",type:"int"},{name:"offset_user",type:"InputUser"},{name:"limit",type:"int"}],type:"messages.ChatInviteImporters"},{id:-1207017500,method:"messages.setHistoryTTL",params:[{name:"peer",type:"InputPeer"},{name:"period",type:"int"}],type:"Updates"},{id:-91437323,method:"account.reportProfilePhoto",params:[{name:"peer",type:"InputPeer"},{name:"photo_id",type:"InputPhoto"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:187239529,method:"channels.convertToGigagroup",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:1573261059,method:"messages.checkHistoryImportPeer",params:[{name:"peer",type:"InputPeer"}],type:"messages.CheckedHistoryImportPeer"},{id:-248985848,method:"phone.toggleGroupCallRecord",params:[{name:"flags",type:"#"},{name:"start",type:"flags.0?true"},{name:"video",type:"flags.2?true"},{name:"call",type:"InputGroupCall"},{name:"title",type:"flags.1?string"},{name:"video_portrait",type:"flags.2?Bool"}],type:"Updates"},{id:-1524155713,method:"phone.editGroupCallParticipant",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"participant",type:"InputPeer"},{name:"muted",type:"flags.0?Bool"},{name:"volume",type:"flags.1?int"},{name:"raise_hand",type:"flags.2?Bool"},{name:"video_stopped",type:"flags.3?Bool"},{name:"video_paused",type:"flags.4?Bool"},{name:"presentation_paused",type:"flags.5?Bool"}],type:"Updates"},{id:480685066,method:"phone.editGroupCallTitle",params:[{name:"call",type:"InputGroupCall"},{name:"title",type:"string"}],type:"Updates"},{id:-277077702,method:"phone.getGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"}],type:"phone.JoinAsPeers"},{id:-425040769,method:"phone.exportGroupCallInvite",params:[{name:"flags",type:"#"},{name:"can_self_unmute",type:"flags.0?true"},{name:"call",type:"InputGroupCall"}],type:"phone.ExportedGroupCallInvite"},{id:563885286,method:"phone.toggleGroupCallStartSubscription",params:[{name:"call",type:"InputGroupCall"},{name:"subscribed",type:"Bool"}],type:"Updates"},{id:1451287362,method:"phone.startScheduledGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1465786252,method:"phone.saveDefaultGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"},{name:"join_as",type:"InputPeer"}],type:"Bool"},{id:-873829436,method:"phone.joinGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:475058500,method:"phone.leaveGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:676017721,method:"stickers.checkShortName",params:[{name:"short_name",type:"string"}],type:"Bool"},{id:1303364867,method:"stickers.suggestShortName",params:[{name:"title",type:"string"}],type:"stickers.SuggestedShortName"},{id:1032708345,method:"bots.resetBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Bool"},{id:-481554986,method:"bots.getBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Vector"},{id:-1828139493,method:"account.resetPassword",params:[],type:"account.ResetPasswordResult"},{id:1284770294,method:"account.declinePasswordReset",params:[],type:"Bool"},{id:221691769,method:"auth.checkRecoveryPassword",params:[{name:"code",type:"string"}],type:"Bool"},{id:-700916087,method:"account.getChatThemes",params:[{name:"hash",type:"long"}],type:"account.Themes"},{id:-432283329,method:"messages.setChatTheme",params:[{name:"peer",type:"InputPeer"},{name:"emoticon",type:"string"}],type:"Updates"},{id:-1095836780,method:"channels.viewSponsoredMessage",params:[{name:"channel",type:"InputChannel"},{name:"random_id",type:"bytes"}],type:"Bool"},{id:-333377601,method:"channels.getSponsoredMessages",params:[{name:"channel",type:"InputChannel"}],type:"messages.SponsoredMessages"},{id:745510839,method:"messages.getMessageReadParticipants",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"Vector"},{id:1240514025,method:"messages.getSearchResultsCalendar",params:[{name:"peer",type:"InputPeer"},{name:"filter",type:"MessagesFilter"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"}],type:"messages.SearchResultsCalendar"},{id:1855292323,method:"messages.getSearchResultsPositions",params:[{name:"peer",type:"InputPeer"},{name:"filter",type:"MessagesFilter"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.SearchResultsPositions"},{id:2145904661,method:"messages.hideChatJoinRequest",params:[{name:"flags",type:"#"},{name:"approved",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"user_id",type:"InputUser"}],type:"Updates"},{id:-528091926,method:"messages.hideAllChatJoinRequests",params:[{name:"flags",type:"#"},{name:"approved",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"flags.1?string"}],type:"Updates"},{id:-1323389022,method:"messages.toggleNoForwards",params:[{name:"peer",type:"InputPeer"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-855777386,method:"messages.saveDefaultSendAs",params:[{name:"peer",type:"InputPeer"},{name:"send_as",type:"InputPeer"}],type:"Bool"},{id:231174382,method:"channels.getSendAs",params:[{name:"peer",type:"InputPeer"}],type:"channels.SendAsPeers"},{id:-1081501024,method:"account.setAuthorizationTTL",params:[{name:"authorization_ttl_days",type:"int"}],type:"Bool"},{id:1089766498,method:"account.changeAuthorizationSettings",params:[{name:"flags",type:"#"},{name:"hash",type:"long"},{name:"encrypted_requests_disabled",type:"flags.0?Bool"},{name:"call_requests_disabled",type:"flags.1?Bool"}],type:"Bool"},{id:913655003,method:"channels.deleteParticipantHistory",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"}],type:"messages.AffectedHistory"},{id:-754091820,method:"messages.sendReaction",params:[{name:"flags",type:"#"},{name:"big",type:"flags.1?true"},{name:"add_to_recent",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"reaction",type:"flags.0?Vector"}],type:"Updates"},{id:-1950707482,method:"messages.getMessagesReactions",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:1176190792,method:"messages.getMessageReactionsList",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"reaction",type:"flags.0?Reaction"},{name:"offset",type:"flags.1?string"},{name:"limit",type:"int"}],type:"messages.MessageReactionsList"},{id:-21928079,method:"messages.setChatAvailableReactions",params:[{name:"peer",type:"InputPeer"},{name:"available_reactions",type:"ChatReactions"}],type:"Updates"},{id:417243308,method:"messages.getAvailableReactions",params:[{name:"hash",type:"int"}],type:"messages.AvailableReactions"},{id:1330094102,method:"messages.setDefaultReaction",params:[{name:"reaction",type:"Reaction"}],type:"Bool"},{id:1662529584,method:"messages.translateText",params:[{name:"flags",type:"#"},{name:"peer",type:"flags.0?InputPeer"},{name:"id",type:"flags.0?Vector"},{name:"text",type:"flags.1?Vector"},{name:"to_lang",type:"string"}],type:"messages.TranslatedText"},{id:841173339,method:"messages.getUnreadReactions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"}],type:"messages.Messages"},{id:1420459918,method:"messages.readReactions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"}],type:"messages.AffectedHistory"},{id:-1963375804,method:"contacts.resolvePhone",params:[{name:"phone",type:"string"}],type:"contacts.ResolvedPeer"},{id:447879488,method:"phone.getGroupCallStreamChannels",params:[{name:"call",type:"InputGroupCall"}],type:"phone.GroupCallStreamChannels"},{id:-558650433,method:"phone.getGroupCallStreamRtmpUrl",params:[{name:"peer",type:"InputPeer"},{name:"revoke",type:"Bool"}],type:"phone.GroupCallStreamRtmpUrl"},{id:276705696,method:"messages.searchSentMedia",params:[{name:"q",type:"string"},{name:"filter",type:"MessagesFilter"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:385663691,method:"messages.getAttachMenuBots",params:[{name:"hash",type:"long"}],type:"AttachMenuBots"},{id:1998676370,method:"messages.getAttachMenuBot",params:[{name:"bot",type:"InputUser"}],type:"AttachMenuBotsBot"},{id:1777704297,method:"messages.toggleBotInAttachMenu",params:[{name:"flags",type:"#"},{name:"write_allowed",type:"flags.0?true"},{name:"bot",type:"InputUser"},{name:"enabled",type:"Bool"}],type:"Bool"},{id:395003915,method:"messages.requestWebView",params:[{name:"flags",type:"#"},{name:"from_bot_menu",type:"flags.4?true"},{name:"silent",type:"flags.5?true"},{name:"peer",type:"InputPeer"},{name:"bot",type:"InputUser"},{name:"url",type:"flags.1?string"},{name:"start_param",type:"flags.3?string"},{name:"theme_params",type:"flags.2?DataJSON"},{name:"platform",type:"string"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"WebViewResult"},{id:2146648841,method:"messages.prolongWebView",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"peer",type:"InputPeer"},{name:"bot",type:"InputUser"},{name:"query_id",type:"long"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Bool"},{id:698084494,method:"messages.requestSimpleWebView",params:[{name:"flags",type:"#"},{name:"bot",type:"InputUser"},{name:"url",type:"string"},{name:"theme_params",type:"flags.0?DataJSON"},{name:"platform",type:"string"}],type:"SimpleWebViewResult"},{id:172168437,method:"messages.sendWebViewResultMessage",params:[{name:"bot_query_id",type:"string"},{name:"result",type:"InputBotInlineResult"}],type:"WebViewMessageSent"},{id:-603831608,method:"messages.sendWebViewData",params:[{name:"bot",type:"InputUser"},{name:"random_id",type:"long"},{name:"button_text",type:"string"},{name:"data",type:"string"}],type:"Updates"},{id:1157944655,method:"bots.setBotMenuButton",params:[{name:"user_id",type:"InputUser"},{name:"button",type:"BotMenuButton"}],type:"Bool"},{id:-1671369944,method:"bots.getBotMenuButton",params:[{name:"user_id",type:"InputUser"}],type:"BotMenuButton"},{id:-510647672,method:"account.getSavedRingtones",params:[{name:"hash",type:"long"}],type:"account.SavedRingtones"},{id:1038768899,method:"account.saveRingtone",params:[{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"account.SavedRingtone"},{id:-2095414366,method:"account.uploadRingtone",params:[{name:"file",type:"InputFile"},{name:"file_name",type:"string"},{name:"mime_type",type:"string"}],type:"Document"},{id:2021942497,method:"bots.setBotBroadcastDefaultAdminRights",params:[{name:"admin_rights",type:"ChatAdminRights"}],type:"Bool"},{id:-1839281686,method:"bots.setBotGroupDefaultAdminRights",params:[{name:"admin_rights",type:"ChatAdminRights"}],type:"Bool"},{id:1092913030,method:"phone.saveCallLog",params:[{name:"peer",type:"InputPhoneCall"},{name:"file",type:"InputFile"}],type:"Bool"},{id:-456419968,method:"channels.toggleJoinToSend",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:1277789622,method:"channels.toggleJoinRequest",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:261206117,method:"payments.exportInvoice",params:[{name:"invoice_media",type:"InputMedia"}],type:"payments.ExportedInvoice"},{id:647928393,method:"messages.transcribeAudio",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"messages.TranscribedAudio"},{id:2132608815,method:"messages.rateTranscribedAudio",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"transcription_id",type:"long"},{name:"good",type:"Bool"}],type:"Bool"},{id:-2131921795,method:"payments.assignAppStoreTransaction",params:[{name:"receipt",type:"bytes"},{name:"purpose",type:"InputStorePaymentPurpose"}],type:"Updates"},{id:-537046829,method:"payments.assignPlayMarketTransaction",params:[{name:"receipt",type:"DataJSON"},{name:"purpose",type:"InputStorePaymentPurpose"}],type:"Updates"},{id:-1614700874,method:"payments.canPurchasePremium",params:[{name:"purpose",type:"InputStorePaymentPurpose"}],type:"Bool"},{id:-1206152236,method:"help.getPremiumPromo",params:[],type:"help.PremiumPromo"},{id:-643100844,method:"messages.getCustomEmojiDocuments",params:[{name:"document_id",type:"Vector"}],type:"Vector"},{id:-67329649,method:"messages.getEmojiStickers",params:[{name:"hash",type:"long"}],type:"messages.AllStickers"},{id:248473398,method:"messages.getFeaturedEmojiStickers",params:[{name:"hash",type:"long"}],type:"messages.FeaturedStickers"},{id:-70001045,method:"account.updateEmojiStatus",params:[{name:"emoji_status",type:"EmojiStatus"}],type:"Bool"},{id:-696962170,method:"account.getDefaultEmojiStatuses",params:[{name:"hash",type:"long"}],type:"account.EmojiStatuses"},{id:257392901,method:"account.getRecentEmojiStatuses",params:[{name:"hash",type:"long"}],type:"account.EmojiStatuses"},{id:404757166,method:"account.clearRecentEmojiStatuses",params:[],type:"Bool"},{id:1063567478,method:"messages.reportReaction",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"reaction_peer",type:"InputPeer"}],type:"Bool"},{id:-1149164102,method:"messages.getTopReactions",params:[{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Reactions"},{id:960896434,method:"messages.getRecentReactions",params:[{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Reactions"},{id:-1644236876,method:"messages.clearRecentReactions",params:[],type:"Bool"},{id:-2064119788,method:"messages.getExtendedMedia",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:767062953,method:"auth.importWebTokenAuthorization",params:[{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"web_auth_token",type:"string"}],type:"auth.Authorization"},{id:-279966037,method:"account.reorderUsernames",params:[{name:"order",type:"Vector"}],type:"Bool"},{id:1490465654,method:"account.toggleUsername",params:[{name:"username",type:"string"},{name:"active",type:"Bool"}],type:"Bool"},{id:-1268978403,method:"channels.reorderUsernames",params:[{name:"channel",type:"InputChannel"},{name:"order",type:"Vector"}],type:"Bool"},{id:1358053637,method:"channels.toggleUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"},{name:"active",type:"Bool"}],type:"Bool"},{id:170155475,method:"channels.deactivateAllUsernames",params:[{name:"channel",type:"InputChannel"}],type:"Bool"},{id:-1540781271,method:"channels.toggleForum",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-200539612,method:"channels.createForumTopic",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"title",type:"string"},{name:"icon_color",type:"flags.0?int"},{name:"icon_emoji_id",type:"flags.3?long"},{name:"random_id",type:"long"},{name:"send_as",type:"flags.2?InputPeer"}],type:"Updates"},{id:233136337,method:"channels.getForumTopics",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"q",type:"flags.0?string"},{name:"offset_date",type:"int"},{name:"offset_id",type:"int"},{name:"offset_topic",type:"int"},{name:"limit",type:"int"}],type:"messages.ForumTopics"},{id:-1333584199,method:"channels.getForumTopicsByID",params:[{name:"channel",type:"InputChannel"},{name:"topics",type:"Vector"}],type:"messages.ForumTopics"},{id:-186670715,method:"channels.editForumTopic",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"topic_id",type:"int"},{name:"title",type:"flags.0?string"},{name:"icon_emoji_id",type:"flags.1?long"},{name:"closed",type:"flags.2?Bool"},{name:"hidden",type:"flags.3?Bool"}],type:"Updates"},{id:1814925350,method:"channels.updatePinnedForumTopic",params:[{name:"channel",type:"InputChannel"},{name:"topic_id",type:"int"},{name:"pinned",type:"Bool"}],type:"Updates"},{id:876830509,method:"channels.deleteTopicHistory",params:[{name:"channel",type:"InputChannel"},{name:"top_msg_id",type:"int"}],type:"messages.AffectedHistory"},{id:693150095,method:"channels.reorderPinnedForumTopics",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"order",type:"Vector"}],type:"Updates"},{id:1760814315,method:"channels.toggleAntiSpam",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-1471109485,method:"channels.reportAntiSpamFalsePositive",params:[{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"}],type:"Bool"},{id:-1632299963,method:"messages.setDefaultHistoryTTL",params:[{name:"period",type:"int"}],type:"Bool"},{id:1703637384,method:"messages.getDefaultHistoryTTL",params:[],type:"DefaultHistoryTTL"},{id:-127582169,method:"contacts.exportContactToken",params:[],type:"ExportedContactToken"},{id:318789512,method:"contacts.importContactToken",params:[{name:"token",type:"string"}],type:"User"},{id:-515093903,method:"photos.uploadContactProfilePhoto",params:[{name:"flags",type:"#"},{name:"suggest",type:"flags.3?true"},{name:"save",type:"flags.4?true"},{name:"user_id",type:"InputUser"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"},{name:"video_emoji_markup",type:"flags.5?VideoSize"}],type:"photos.Photo"},{id:1785624660,method:"channels.toggleParticipantsHidden",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-29831141,method:"messages.sendBotRequestedPeer",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"button_id",type:"int"},{name:"requested_peer",type:"InputPeer"}],type:"Updates"},{id:-495647960,method:"account.getDefaultProfilePhotoEmojis",params:[{name:"hash",type:"long"}],type:"EmojiList"},{id:-1856479058,method:"account.getDefaultGroupPhotoEmojis",params:[{name:"hash",type:"long"}],type:"EmojiList"},{id:-1991881904,method:"auth.requestFirebaseSms",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"safety_net_token",type:"flags.0?string"},{name:"ios_push_secret",type:"flags.1?string"}],type:"Bool"},{id:1955122779,method:"messages.getEmojiGroups",params:[{name:"hash",type:"int"}],type:"messages.EmojiGroups"},{id:785209037,method:"messages.getEmojiStatusGroups",params:[{name:"hash",type:"int"}],type:"messages.EmojiGroups"},{id:564480243,method:"messages.getEmojiProfilePhotoGroups",params:[{name:"hash",type:"int"}],type:"messages.EmojiGroups"},{id:739360983,method:"messages.searchCustomEmoji",params:[{name:"emoticon",type:"string"},{name:"hash",type:"long"}],type:"EmojiList"},{id:-461589127,method:"messages.togglePeerTranslations",params:[{name:"flags",type:"#"},{name:"disabled",type:"flags.0?true"},{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-1379156774,method:"account.getAutoSaveSettings",params:[],type:"account.AutoSaveSettings"},{id:-694451359,method:"account.saveAutoSaveSettings",params:[{name:"flags",type:"#"},{name:"users",type:"flags.0?true"},{name:"chats",type:"flags.1?true"},{name:"broadcasts",type:"flags.2?true"},{name:"peer",type:"flags.3?InputPeer"},{name:"settings",type:"AutoSaveSettings"}],type:"Bool"},{id:1404829728,method:"account.deleteAutoSaveExceptions",params:[],type:"Bool"}]},layer:152};var as=a(745),ss=a.n(as),ns=a(4736),is=a.n(ns);function rs(e){return e>>>0}function os(e,t){return e=rs(e),t=rs(t),is()(e).shiftLeft(32).add(is()(t))}const ps=is()(Number.MAX_SAFE_INTEGER),ds=is()(is()[2]).pow(64),fs=ds.divide(is()[2]);function cs(e,t=256){return is().fromArray(e instanceof Uint8Array?[...e]:e,t)}const ls=+ts.API.constructors.find((e=>"boolFalse"===e.predicate)).id,ms=+ts.API.constructors.find((e=>"boolTrue"===e.predicate)).id,gs=+ts.API.constructors.find((e=>"vector"===e.predicate)).id,hs=+ts.MTProto.constructors.find((e=>"gzip_packed"===e.predicate)).id,us="slice";class ys{constructor(e={}){this.maxLength=2048,this.offset=0,this.mtproto=!1,this.debug=!1,this.maxLength=e.startMaxLength||2048,this.mtproto=e.mtproto||!1,this.createBuffer()}createBuffer(){this.buffer=new ArrayBuffer(this.maxLength),this.intView=new Int32Array(this.buffer),this.byteView=new Uint8Array(this.buffer)}getArray(){const e=new ArrayBuffer(this.offset),t=new Int32Array(e);return t.set(this.intView.subarray(0,this.offset/4)),t}getBuffer(){return this.getArray().buffer}getBytes(e=!0){if(e){const e=new ArrayBuffer(this.offset),t=new Uint8Array(e);return t.set(this.byteView.subarray(0,this.offset)),t}const t=new Array(this.offset);for(let e=0;e>>",e.toString(16),e,t);const a=this.offset/4;return this.checkLength(4),this.intView[a]=e,this.offset+=4,a}storeInt(e,t){return this.writeInt(e,(t||"")+":int")}storeBool(e,t){e?this.writeInt(ms,(t||"")+":bool"):this.writeInt(ls,(t||"")+":bool")}storeLongP(e,t,a){this.writeInt(t,(a||"")+":long[low]"),this.writeInt(e,(a||"")+":long[high]")}storeLong(e,t){if(Array.isArray(e))return 2===e.length?this.storeLongP(e[0],e[1],t):this.storeIntBytes(e,64,t);const a=(s=is()(e)).isNegative()?ds.add(s):s;var s;const{quotient:n,remainder:i}=a.divmod(4294967296),r=n.toJSNumber(),o=i.toJSNumber();this.writeInt(o,(t||"")+":long[low]"),this.writeInt(r,(t||"")+":long[high]")}storeDouble(e,t){const a=new ArrayBuffer(8),s=new Int32Array(a);new Float64Array(a)[0]=e,this.writeInt(s[0],(t||"")+":double[low]"),this.writeInt(s[1],(t||"")+":double[high]")}storeString(e,t){this.debug&&console.log(">>>",e,(t||"")+":string"),void 0===e&&(e="");const a=unescape(encodeURIComponent(e));this.checkLength(a.length+8);const s=a.length;s<=253?this.byteView[this.offset++]=s:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&s,this.byteView[this.offset++]=(65280&s)>>8,this.byteView[this.offset++]=(16711680&s)>>16);for(let e=0;e>>",E(e),(t||"")+":bytes");const a=e.length;for(this.checkLength(a+8),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),this.byteView.set(e,this.offset),this.offset+=a;this.offset%4;)this.byteView[this.offset++]=0}storeIntBytes(e,t,a){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const s=e.length;if(t%32||8*s!==t){const n=new Error("Invalid bits: "+t+", "+s);throw console.error(n,e,a),n}this.debug&&console.log(">>>",E(e),(a||"")+":int"+t),this.checkLength(s),this.byteView.set(e,this.offset),this.offset+=s}storeRawBytes(e,t){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const a=e.length;this.debug&&console.log(">>>",E(e),t||""),this.checkLength(a),this.byteView.set(e,this.offset),this.offset+=a}storeMethod(e,t){const a=(this.mtproto?ts.MTProto:ts.API).methods.find((t=>t.method===e));if(!a)throw new Error("No method "+e+" found");this.storeInt(a.id,e+"[id]");const s=t.pFlags||t,n={};for(const i of a.params){let a=i.type;if(-1!==a.indexOf("?")){const e=a.split("?"),n=e[0].split(".");if(!(t[n[0]]&1<<+n[1])){if(!("true"===e[1]?s[i.name]:void 0!==t[i.name]))continue;t[n[0]]|=1<<+n[1]}a=e[1]}const r=this.storeObject(t[i.name],a,e+"["+i.name+"]");"#"===a&&(t[i.name]=t[i.name]||0,n[i.name]=r)}for(const e in n)this.intView[n[e]]=t[e];return a.type}storeObject(e,t,a){switch(t){case"#":e=e||0;case"int":return this.storeInt(e,a);case"long":return this.storeLong(e,a);case"int128":return this.storeIntBytes(e,128,a);case"int256":return this.storeIntBytes(e,256,a);case"int512":return this.storeIntBytes(e,512,a);case"string":return this.storeString(e,a);case"bytes":return this.storeBytes(e,a);case"double":return this.storeDouble(e,a);case"Bool":return this.storeBool(e,a);case"true":return}if(Array.isArray(e)){if("Vector"===t.substr(0,6))this.writeInt(gs,a+"[id]");else if("vector"!==t.substr(0,6))throw new Error("Invalid vector type "+t);const s=t.substr(7,t.length-8);this.writeInt(e.length,a+"[count]");for(let t=0;te.predicate===n));if((i="%"===t.charAt(0))&&(t=t.substr(1)),!r)throw new Error("No predicate "+n+" found");n===t&&(i=!0),i||this.writeInt(r.id,a+"["+n+"][id]");const o=e.pFlags,p={};for(const t of r.params){let s=t.type;if(-1!==s.indexOf("?")){const a=s.split("?"),n=a[0].split(".");if(!(e[n[0]]&1<<+n[1])){if(!("true"===a[1]?o&&o[t.name]:void 0!==e[t.name]))continue;e[n[0]]|=1<<+n[1]}s=a[1]}const i=this.storeObject(e[t.name],s,a+"["+n+"]["+t.name+"]");"#"===s&&(e[t.name]=e[t.name]||0,p[t.name]=i)}for(const t in p)this.intView[p[t]]=e[t];return r.type}}class _s{constructor(e,t={}){this.offset=0,this.mtproto=!1,e instanceof ArrayBuffer?(this.buffer=e,this.intView=new Int32Array(e),this.byteView=new Uint8Array(this.buffer)):(this.buffer=e.buffer,this.intView=new Int32Array(e.buffer),this.byteView=e),this.override=t.override||{},this.mtproto=!!t.mtproto,this.debug=void 0!==t.debug&&t.debug}readInt(e){if(this.byteView.length-this.offset<4)throw console.error(this.byteView,this.offset),new Error("Nothing to fetch: "+e);const t=this.intView[this.offset/4];return this.debug&&console.log("<<<",t.toString(16),t,e,this.byteView.slice(this.offset-16,this.offset+16),E(this.byteView.slice(this.offset-16,this.offset+16))),this.offset+=4,t}fetchInt(e){return this.readInt((e||"")+":int")}fetchDouble(e){const t=new ArrayBuffer(8),a=new Int32Array(t),s=new Float64Array(t);return a[0]=this.readInt((e||"")+":double[low]"),a[1]=this.readInt((e||"")+":double[high]"),s[0]}fetchLong(e){const t=this.readInt((e||"")+":long[low]");let a=os(this.readInt((e||"")+":long[high]"),t);var s;return this.mtproto||(a=(s=a).greater(fs)?s.minus(ds):s),!this.mtproto&&ps.greaterOrEquals(a.abs())?a.toJSNumber():a.toString(10)}fetchBool(e){const t=this.readInt((e||"")+":bool");return t===ms||t!==ls&&(this.offset-=4,this.fetchObject("Object",e))}fetchString(e){let t=this.byteView[this.offset++];254===t&&(t=this.byteView[this.offset++]|this.byteView[this.offset++]<<8|this.byteView[this.offset++]<<16);let a,s="";for(let e=0;ethis.byteView.byteLength)throw new Error("Invalid raw bytes length: "+e+", buffer len: "+this.byteView.byteLength);if(t){const t=new Uint8Array(e);return t.set(this.byteView[us](this.offset,this.offset+e)),this.offset+=e,t}const s=new Array(e);for(let t=0;t0){const n=e.substr(7,e.length-8);for(let e=0;ee.type===t)),!s)throw new Error("Constructor not found for type: "+e)}else{const r=this.readInt(t+"[id]");if(r===hs){const a=(i=this.fetchBytes(t+"[packed_string]"),ss().inflate(i,void 0));return new _s(a).fetchObject(e,t)}if(r===gs)return this.fetchVector(e,t);let o=a.constructorsIndex;if(!o){a.constructorsIndex=o={};for(let e=0,t=a.constructors.length;e0&&r{var e;if(this.pingDelayDisconnectDeferred||!this.transport||!this.transport.connected)return;const t=this.pingDelayDisconnectDeferred=(0,v.Z)(),a=this.delays,s=this.delays.pingMaxTime,n=Math.min(null!==(e=this.lastPingTime)&&void 0!==e?e:0,s),i=Math.round(a.disconnectDelayMin+n/s*(a.disconnectDelayMax-a.disconnectDelayMin)),r=1e3*i,o=this.lastPingStartTime=Date.now(),p=this.lastPingDelayDisconnectId=(0,Ee.a)(),d={notContentRelated:!0};this.wrapMtpCall("ping_delay_disconnect",{ping_id:p,disconnect_delay:i},d);const f=this.log.bindPrefix("sendPingDelayDisconnect");this.debug&&f.debug(`ping, timeout=${r}, lastPingTime=${this.lastPingTime}, msgId=${d.messageId}, pingId=${p}`);const c=T.Z.setTimeout(t.reject,r);t.then((e=>{clearTimeout(c);const t=Date.now()-o;if(this.lastPingTime=t/1e3,this.debug&&f.debug(`pong, reason='${e}', time=${n}, msgId=${d.messageId}`),t>r)throw void 0;return(0,P.Z)(Math.max(0,this.delays.pingInterval-t))})).catch((()=>{clearTimeout(c);const e=this.transport;this.pingDelayDisconnectDeferred===t&&(null==e?void 0:e.connection)&&(f.error("catch, closing connection",this.lastPingTime,d.messageId),e.connection.close())})).finally((()=>{this.pingDelayDisconnectDeferred===t&&(this.pingDelayDisconnectDeferred=void 0,this.sendPingDelayDisconnect())}))},this.checkLongPoll=()=>{const e=this.cleanupSent();if(this.longPollPending&&Date.now(){e&&(t!==this.dcId||this.sleepAfter&&Date.now()>this.sleepAfter)||this.sendLongPoll()}))},this.checkConnection=e=>{if(this.debug&&this.log("Check connection",e),this.clearCheckConnectionTimeout(),!this.transport)return void this.log.warn("No transport for checkConnection");const t=new ys({mtproto:!0}),a=(0,Ee.a)();t.storeMethod("ping",{ping_id:a});const s={msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(!0),body:t.getBytes(!0)};this.offline&&this.setConnectionStatus(D.Q.Connecting),this.sendEncryptedRequest(s).then((()=>{this.toggleOffline(!1)}),(()=>{this.debug&&this.log("Delay",1e3*this.checkConnectionPeriod),this.checkConnectionTimeout=T.Z.setTimeout((()=>this.checkConnection("from failed checkConnection request")),1e3*this.checkConnectionPeriod|0),this.checkConnectionPeriod=Math.min(60,1.5*this.checkConnectionPeriod)}))},this.authKeyUint8=(0,Ms.Z)(this.authKey),this.serverSalt=(0,Ms.Z)(i),this.isFileUpload=!!r.fileUpload,this.isFileDownload=!!r.fileDownload,this.isFileNetworker=this.isFileUpload||this.isFileDownload,this.delays=this.isFileNetworker?Is.file:Is.client;const o=this.isFileUpload?"-U":this.isFileDownload?"-D":"";this.name="NET-"+a+o,this.log=(0,S.kg)(this.name+(o?"":"-C")+"-"+ks++,S.v9.Log|S.v9.Error|S.v9.Warn),this.log("constructor"),this.updateSession()}updateSession(){this.seqNo=0,this.prevSessionId=this.sessionId,this.sessionId=w(new Uint8Array(8))}updateSentMessage(e){const t=this.sentMessages[e];return!!t&&(t.container&&(0,ne.Z)(t.inner,((e,a)=>{const s=this.updateSentMessage(e);s?t.inner[a]=s.msg_id:t.inner.splice(a,1)})),t.msg_id=this.timeManager.generateId(),t.seq_no=this.generateSeqNo(t.notContentRelated||t.container),this.debug&&this.log(`updateSentMessage, old=${e}, new=${t.msg_id}`),this.sentMessages[t.msg_id]=t,delete this.sentMessages[e],t)}generateSeqNo(e){let t=2*this.seqNo;return e||(t++,this.seqNo++),t}wrapMtpCall(e,t,a){const s=new ys({mtproto:!0});s.storeMethod(e,t);const n=this.timeManager.generateId(),i=this.generateSeqNo(),r={msg_id:n,seq_no:i,body:s.getBytes(!0)};return b.Z.debug&&this.log("MT call",e,t,n,i),this.pushMessage(r,a)}wrapMtpMessage(e,t){const a=new ys({mtproto:!0});a.storeObject(e,"Object");const s=this.timeManager.generateId(),n=this.generateSeqNo(t.notContentRelated),i={msg_id:s,seq_no:n,body:a.getBytes(!0)};return b.Z.debug&&this.log("MT message",e,s,n),this.pushMessage(i,t)}wrapApiCall(e,t={},a={}){const s=new ys(a);if(!this.connectionInited){const e=ts.API.methods.find((e=>"invokeWithLayer"===e.method));if(!e)throw new Error("no invokeWithLayer!");s.storeInt(+e.id,"invokeWithLayer"),s.storeInt(ts.layer,"layer");const t=ts.API.methods.find((e=>"initConnection"===e.method));if(!t)throw new Error("no initConnection!");s.storeInt(+t.id,"initConnection"),s.storeInt(0,"flags"),s.storeInt(_.Z.id,"api_id"),s.storeString(i().USER_AGENT||"Unknown UserAgent","device_model"),s.storeString(navigator.platform||"Unknown Platform","system_version"),s.storeString(_.Z.version+(_.Z.isMainDomain?" "+_.Z.suffix:""),"app_version"),s.storeString(navigator.language||"en","system_lang_code"),s.storeString(_.Z.langPack,"lang_pack"),s.storeString(this.networkerFactory.language,"lang_code")}if(a.afterMessageId){if(void 0===ws){const e=ts.API.methods.find((e=>"invokeAfterMsg"===e.method));ws=e?+e.id:0}ws?(s.storeInt(ws,"invokeAfterMsg"),s.storeLong(a.afterMessageId,"msg_id")):this.log.error("no invokeAfterMsg!")}a.resultType=s.storeMethod(e,t);const n={msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(),body:s.getBytes(!0),isAPI:!0};return b.Z.debug?this.log("Api call",e,n,t,a):this.debug&&this.log("Api call",e,t,a),this.pushMessage(n,a)}changeTransport(e){const t=this.transport;t&&(t.destroy(),this.nextReqTimeout&&(clearTimeout(this.nextReqTimeout),this.nextReqTimeout=0,this.nextReq=0),this.connectionInited=!1,void 0!==this.longPollInterval&&(clearInterval(this.longPollInterval),this.longPollInterval=void 0),this.clearCheckConnectionTimeout()),this.log("change transport",e,t),this.clearPingDelayDisconnect(),this.transport=e,e&&(e.networker=this,e instanceof I&&(this.longPollInterval=T.Z.setInterval(this.checkLongPoll,1e4),this.checkLongPoll(),this.checkConnection("changed transport")),e.connection&&e.connected&&this.setConnectionStatus(D.Q.Connected),this.resend())}destroy(){this.log("destroy")}forceReconnectTimeout(){this.transport.reconnect?this.transport.reconnect():this.resend()}forceReconnect(){this.transport.forceReconnect?this.transport.forceReconnect():this.checkConnection("force reconnect")}clearPingDelayDisconnect(){const e=this.pingDelayDisconnectDeferred;this.pingDelayDisconnectDeferred=void 0,this.lastPingDelayDisconnectId=void 0,e&&e.reject()}sendLongPoll(){this.sendingLongPoll||(this.sendingLongPoll=!0,this.longPollPending=Date.now()+25e3,this.debug&&this.log.debug("sendLongPoll",this.longPollPending),this.wrapMtpCall("http_wait",{max_delay:500,wait_after:150,max_wait:25e3},{noResponse:!0,longPoll:!0}).then((()=>{this.longPollPending=void 0,setTimeout(this.checkLongPoll,0)}),(e=>{this.log("Long-poll failed",e)})).finally((()=>{this.sendingLongPoll=void 0})))}clearCheckConnectionTimeout(){void 0!==this.checkConnectionTimeout&&(clearTimeout(this.checkConnectionTimeout),this.checkConnectionTimeout=void 0)}toggleOffline(e){if(this.offline!==e)if(this.offline=e,this.clearCheckConnectionTimeout(),e){clearTimeout(this.nextReqTimeout),this.nextReqTimeout=0,this.nextReq=0,this.checkConnectionPeriod<1.5&&(this.checkConnectionPeriod=0);const e=1e3*this.checkConnectionPeriod|0;this.checkConnectionRetryAt=Date.now()+e,this.setConnectionStatus(D.Q.Closed,this.checkConnectionRetryAt),this.checkConnectionTimeout=T.Z.setTimeout((()=>this.checkConnection("from toggleOfline")),e),this.checkConnectionPeriod=Math.min(30,1.5*(1+this.checkConnectionPeriod))}else this.setConnectionStatus(D.Q.Connected),this.checkLongPoll(),this.scheduleRequest();this.setConnectionStatus(e?D.Q.Closed:D.Q.Connected,e?this.checkConnectionRetryAt:void 0)}handleSentEncryptedRequestHTTP(e,t,a){e.then((e=>(this.toggleOffline(!1),this.parseResponse(e).then((e=>(this.debug&&this.log.debug("Server response",e),this.processMessage(e.response,e.messageId,e.sessionId),this.checkLongPoll(),this.checkConnectionPeriod=Math.max(1.1,Math.sqrt(this.checkConnectionPeriod)),!0))))),(e=>(this.log.error("Encrypted request failed",e,t),this.pushResend(t.msg_id),this.toggleOffline(!0),!1))).then((e=>{const t=this.sentMessages;a.forEach((a=>{const s=t[a];if(s){const n=s.deferred;delete t[a],delete this.pendingMessages[a],e?n.resolve():n.reject()}}))}))}pushMessage(e,t){let a;return t.notContentRelated&&!t.noResponse||(a=(0,v.Z)()),this.sentMessages[e.msg_id]=Object.assign(e,t,a?{deferred:a}:void 0),this.pendingMessages[e.msg_id]=0,t.noSchedule||this.scheduleRequest(),(0,fe.Z)(t)&&(t.messageId=e.msg_id),a}attachPromise(e,t){const a=setTimeout((()=>{this.lastResponseTime&&Date.now()-this.lastResponseTime{clearTimeout(a),this.setConnectionStatus(D.Q.Connected),--this.activeRequests,this.setDrainTimeout()})),++this.activeRequests,void 0!==this.onDrainTimeout&&(clearTimeout(this.onDrainTimeout),this.onDrainTimeout=void 0)}setDrainTimeout(){!this.activeRequests&&this.onDrain&&void 0===this.onDrainTimeout&&(this.onDrainTimeout=T.Z.setTimeout((()=>{this.onDrainTimeout=void 0,this.log("drain"),this.onDrain()}),1e4))}setConnectionStatus(e,t){var a;const s=e===D.Q.Connected,n=this.status!==e;this.isOnline=s,this.status=e,n&&(this.networkerFactory.onConnectionStatusChange&&this.networkerFactory.onConnectionStatusChange({_:"networkerStatus",status:e,dcId:this.dcId,name:this.name,isFileNetworker:this.isFileNetworker,isFileDownload:this.isFileDownload,isFileUpload:this.isFileUpload,retryAt:t}),this.isOnline&&this.scheduleRequest(),(null===(a=this.transport)||void 0===a?void 0:a.connection)&&(this.clearPingDelayDisconnect(),this.sendPingDelayDisconnect()))}pushResend(e,t=100){const a=t?Date.now()+t:0,s=this.sentMessages[e];if(s.container)for(const e of s.inner)this.pendingMessages[e]=a;else this.pendingMessages[e]=a;s.acked&&this.log.error("pushResend: acked message?",s),this.debug&&this.log.debug("pushResend:",e,s,this.pendingMessages,t),this.scheduleRequest(t)}getMsgKey(e,t){return Ss(this,void 0,void 0,(function*(){const a=t?0:8,n=(0,vs.Z)(this.authKeyUint8.subarray(88+a,88+a+32),e),i=yield s.Z.invokeCrypto("sha256",n);return new Uint8Array(i).subarray(8,24)}))}getAesKeyIv(e,t){const a=t?0:8,n=new Uint8Array(52),i=new Uint8Array(52),r=[];return n.set(e,0),n.set(this.authKeyUint8.subarray(a,a+36),16),r.push(s.Z.invokeCrypto("sha256",n)),i.set(this.authKeyUint8.subarray(40+a,40+a+36),0),i.set(e,36),r.push(s.Z.invokeCrypto("sha256",i)),Promise.all(r).then((e=>{const t=new Uint8Array(32),a=new Uint8Array(32),s=new Uint8Array(e[0]),n=new Uint8Array(e[1]);return t.set(s.subarray(0,8)),t.set(n.subarray(8,24),8),t.set(s.subarray(24,32),24),a.set(n.subarray(0,8)),a.set(s.subarray(8,24),8),a.set(n.subarray(24,32),24),[t,a]}))}isStopped(){return this.networkerFactory.akStopped&&!this.isFileNetworker}performScheduledRequest(){if(this.isStopped())return!1;if(this.pendingAcks.length){const e=this.pendingAcks.slice();this.wrapMtpMessage({_:"msgs_ack",msg_ids:e},{notContentRelated:!0,noSchedule:!0})}const e=this.pendingResendReq.length;if(e){const t=Object.assign({},Cs),a=this.pendingResendReq.splice(0,e);this.wrapMtpMessage({_:"msg_resend_req",msg_ids:a},t),this.log("resend: resending requests",t.messageId,a)}let t;const a=[];let s=0,n=!1,i=!1,r=!1;const o=Object.keys(this.pendingMessages).map((e=>is()(e))).sort(((e,t)=>e.compare(t))).map((e=>e.toString(10)));for(const e of o){const o=this.sentMessages[e];if(o&&o.body){const e=o.body.length+32;if(s+e>655360&&(this.log.warn("lengthOverflow",o,a),r=!0,t))break;a.push(o),s+=e,o.isAPI?n=!0:o.longPoll&&(i=!0),t=o}delete this.pendingMessages[e]}if(this.transport instanceof I&&n&&!i){const e=new ys({mtproto:!0});e.storeMethod("http_wait",{max_delay:500,wait_after:150,max_wait:3e3}),a.push({msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(),body:e.getBytes(!0)})}if(!a.length)return;const p=a.filter((e=>e.noResponse)).map((e=>e.msg_id));if(a.length>1){const e=this.generateContainerMessage(s,a);t=e.messageWithBody,this.sentMessages[t.msg_id]=e.message}else this.sentMessages[t.msg_id]=t;this.pendingAcks=[];const d=this.sendEncryptedRequest(t);this.transport instanceof I&&this.handleSentEncryptedRequestHTTP(d,t,p),this.transport instanceof I||this.cleanupSent(),r&&this.scheduleRequest()}generateContainerMessage(e,t){const a=new ys({mtproto:!0,startMaxLength:e+64});a.storeInt(1945237724,"CONTAINER[id]"),a.storeInt(t.length,"CONTAINER[count]");const s=[];t.forEach(((e,t)=>{s.push(e.msg_id),a.storeLong(e.msg_id,"CONTAINER["+t+"][msg_id]"),a.storeInt(e.seq_no,"CONTAINER["+t+"][seq_no]"),a.storeInt(e.body.length,"CONTAINER["+t+"][bytes]"),a.storeRawBytes(e.body,"CONTAINER["+t+"][body]")}));const n={msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(!0),container:!0,inner:s};return b.Z.debug&&this.log.warn("Container",s,n.msg_id,n.seq_no),{message:n,messageWithBody:Object.assign({body:a.getBytes(!0)},n)}}getEncryptedMessage(e){return Ss(this,void 0,void 0,(function*(){const t=yield this.getMsgKey(e,!0),a=yield this.getAesKeyIv(t,!0);return{bytes:yield s.Z.invokeCrypto("aes-encrypt",e,a[0],a[1]),msgKey:t}}))}getDecryptedMessage(e,t){return this.getAesKeyIv(e,!1).then((e=>s.Z.invokeCrypto("aes-decrypt",t,e[0],e[1])))}getEncryptedOutput(e){const t=new ys({startMaxLength:e.body.length+2048});t.storeIntBytes(this.serverSalt,64,"salt"),t.storeIntBytes(this.sessionId,64,"session_id"),t.storeLong(e.msg_id,"message_id"),t.storeInt(e.seq_no,"seq_no"),t.storeInt(e.body.length,"message_data_length"),t.storeRawBytes(e.body,"message_data");const a=t.getBuffer(),s=16-t.getOffset()%16+16*(1+(0,Ee.d)(8)%5),n=w(new Uint8Array(s)),i=(0,vs.Z)(a,n);return this.getEncryptedMessage(i).then((e=>{const t=new ys({startMaxLength:e.bytes.length+256});return t.storeIntBytes(this.authKeyId,64,"auth_key_id"),t.storeIntBytes(e.msgKey,128,"msg_key"),t.storeRawBytes(e.bytes,"encrypted_data"),t.getBytes(!0)}))}sendEncryptedRequest(e){return Ss(this,void 0,void 0,(function*(){const t=yield this.getEncryptedOutput(e);this.transport||this.log.error("trying to send something when offline",this.transport,this),this.debug&&this.log.debug("sending:",e,[e.msg_id].concat(e.inner||[]),t.length);const a=this.transport?this.transport.send(t):Promise.reject({});if(!(this.transport instanceof I))return a;const s={code:406,type:"NETWORK_BAD_RESPONSE",transport:this.transport};return a.then((e=>{if(!(null==e?void 0:e.byteLength))throw s;return e}),(e=>{throw e.message||e.type||(e=Object.assign(s,{type:"NETWORK_BAD_REQUEST",originalError:e})),e}))}))}parseResponse(e){this.lastResponseTime=Date.now();const t=new _s(e),a=t.fetchIntBytes(64,!0,"auth_key_id");if(!(0,bs.Z)(a,this.authKeyId))throw new Error("[MT] Invalid server auth_key_id: "+E(a));const s=t.fetchIntBytes(128,!0,"msg_key"),n=t.fetchRawBytes(e.byteLength-t.getOffset(),!0,"encrypted_data");return this.getDecryptedMessage(s,n).then((e=>this.getMsgKey(e,!1).then((t=>{if(!(0,bs.Z)(s,t))throw this.log.warn("[MT] msg_keys",s,t),this.updateSession(),new Error("[MT] server msgKey mismatch, updating session");let a=new _s(e,{mtproto:!0});a.fetchIntBytes(64,!0,"salt");const n=a.fetchIntBytes(64,!0,"session_id"),i=a.fetchLong("message_id");if(!((0,bs.Z)(n,this.sessionId)||this.prevSessionId&&(0,bs.Z)(n,this.prevSessionId)))throw this.log.warn("Sessions",n,this.sessionId,this.prevSessionId,e),new Error("[MT] Invalid server session_id: "+E(n));const r=a.fetchInt("seq_no"),o=e.byteLength,p=a.fetchInt("message_data[length]");let d=a.getOffset();if(p%4||p>o-d)throw new Error("[MT] Invalid body length: "+p);const f=a.fetchRawBytes(p,!0,"message_data");d=a.getOffset();const c=o-d;if(c<12||c>1024)throw new Error("[MT] Invalid padding length: "+c);return a=new _s(f,{mtproto:!0,override:{mt_message:(e,t)=>{e.msg_id=a.fetchLong(t+"[msg_id]"),e.seqno=a.fetchInt(t+"[seqno]"),e.bytes=a.fetchInt(t+"[bytes]");const s=a.getOffset();try{e.body=a.fetchObject("Object",t+"[body]")}catch(t){this.log.error("parse error",t.message,t.stack),e.body={_:"parse_error",error:t}}a.getOffset()!==s+e.bytes&&a.setOffset(s+e.bytes)},mt_rpc_result:(e,t)=>{e.req_msg_id=a.fetchLong(t+"[req_msg_id]");const s=this.sentMessages[e.req_msg_id],n=s&&s.resultType||"Object";e.req_msg_id&&!s||(e.result=a.fetchObject(n,t+"[result]"))}}}),{response:a.fetchObject("","INPUT"),messageId:i,sessionId:n,seqNo:r}}))))}applyServerSalt(e){const t=(a=e,Ps((s=is()(a),new Uint8Array(s.toArray(256).value)).reverse(),8,!0,!1,!1));var a,s;Ga.Z.set({["dc"+this.dcId+"_server_salt"]:E(t)}),this.serverSalt=new Uint8Array(t)}scheduleRequest(e){this.transport instanceof I&&(this.offline&&this.checkConnection("forced schedule"),e||(e=0));const t=Date.now()+(e||0);if(this.nextReq&&(void 0===e||this.nextReq<=t))return;this.nextReqTimeout&&clearTimeout(this.nextReqTimeout);const a=()=>{this.nextReqTimeout=0,this.nextReq=0,this.transport instanceof I&&this.offline||this.performScheduledRequest()};this.nextReq=t,void 0!==e?this.nextReqTimeout=T.Z.setTimeout(a,e):a()}ackMessage(e){let t;this.pendingAcks.push(e),this.transport instanceof I&&(t=3e4),this.scheduleRequest(t)}reqResend(e){this.debug&&this.log.debug("Req resend",e),this.pendingResendReq.push(e),this.scheduleRequest(100)}cleanupSent(){let e=!1;const t=this.sentMessages;return Object.keys(t).forEach((a=>{const s=t[a];if(s.notContentRelated&&void 0===this.pendingMessages[a])delete t[a];else if(s.container){for(const a of s.inner)if(void 0!==t[a])return void(e=!0);delete t[a]}else e=!0})),!e}processMessageAck(e){const t=this.sentMessages[e];t&&!t.acked&&(t.acked=!0)}processError(e){const t=(e.error_message||"").match(/^([A-Z_0-9]+\b)(: (.+))?/)||[];return e.error_code=e.error_code,{code:!e.error_code||e.error_code<=0?500:e.error_code,type:t[1]||"UNKNOWN",description:t[3]||"CODE#"+e.error_code+" "+e.error_message,originalError:e}}resend(){const e=this.sentMessages;for(const t in e){const a=e[t];(a.body||a.container)&&this.pushResend(t)}this.transport.connection&&(this.clearPingDelayDisconnect(),this.sendPingDelayDisconnect())}applyServerTime(e){const t=is()(e).shiftRight(32).toJSNumber();return this.log("applying server time",t),this.timeManager.applyServerTime(t)}processMessage(e,t,a){if("messageEmpty"!==e._)if(parseInt(t.substr(0,-10),10)%2)this.log.warn("Server even message id: ",t,e);else switch(this.debug&&this.log.debug("process message",e,t),this.pingDelayDisconnectDeferred&&this.pingDelayDisconnectDeferred.resolve("any message"),e._){case"msg_container":for(const t of e.messages)this.processMessage(t,t.msg_id,a);break;case"bad_server_salt":this.log("Bad server salt",e),this.applyServerSalt(e.new_server_salt),this.sentMessages[e.bad_msg_id]&&this.pushResend(e.bad_msg_id),this.ackMessage(t);break;case"bad_msg_notification":switch(this.log.error("Bad msg notification",e),e.error_code){case 16:case 17:case 32:case 33:case 64:{const a=this.applyServerTime(t);(17===e.error_code||a)&&(this.log("Update session"),this.updateSession());const s=this.updateSentMessage(e.bad_msg_id);s&&this.pushResend(s.msg_id)}}break;case"message":if(-1!==this.lastServerMessages.indexOf(t))return void this.ackMessage(t);this.lastServerMessages.push(t),this.lastServerMessages.length>100&&this.lastServerMessages.shift(),this.processMessage(e.body,e.msg_id,a);break;case"new_session_created":this.ackMessage(t),this.debug&&this.log.debug("new_session_created",e),this.processMessageAck(e.first_msg_id),this.applyServerSalt(e.server_salt),Ga.Z.get("dc").then((t=>{t===this.dcId&&!this.isFileNetworker&&this.networkerFactory.updatesProcessor&&this.networkerFactory.updatesProcessor(e)}));break;case"msgs_ack":this.debug&&this.log("got acks",e.msg_ids);for(const t of e.msg_ids)this.processMessageAck(t);break;case"msg_detailed_info":if(!this.sentMessages[e.msg_id]){this.ackMessage(e.answer_msg_id);break}case"msg_new_detailed_info":if(-1!==this.pendingAcks.indexOf(e.answer_msg_id))break;this.reqResend(e.answer_msg_id);break;case"msgs_state_info":{this.ackMessage(e.answer_msg_id);const t=[[this.lastResendReq,this.pendingResendReq]];for(const[a,s]of t)if((null==a?void 0:a.reqMsgId)===e.req_msg_id&&s.length)for(const e of a.msgIds){const t=s.indexOf(e);-1!==t&&s.splice(t,1)}break}case"rpc_result":{this.ackMessage(t);const a=e.req_msg_id,s=this.sentMessages[a];if(this.debug&&this.log("Rpc response",e.result,s),this.processMessageAck(a),s){const t=s.deferred;if("rpc_error"===e.result._){const a=this.processError(e.result);this.log("Rpc error",a),t&&t.reject(a)}else t&&t.resolve(e.result),s.isAPI&&!this.connectionInited&&(this.connectionInited=!0);delete this.sentMessages[a]}else this.debug&&this.log("Rpc result for unknown message:",a,e);break}case"pong":{const t=e.ping_id;if(this.lastPingDelayDisconnectId===t){const e=this.pingDelayDisconnectDeferred;e?e.resolve("pong"):this.log("ping deferred deleted",t)}break}default:this.ackMessage(t),null!==this.networkerFactory.updatesProcessor&&this.networkerFactory.updatesProcessor(e)}else this.log.warn("processMessage: messageEmpty",e,t)}}class Us extends G{constructor(){super(...arguments),this.networkers=[],this.language=navigator.language||_.Z.langPackCode,this.updatesProcessor=null,this.akStopped=!1}onConnectionStatusChange(e){this.rootScope.dispatchEvent("connection_status_change",e)}removeNetworker(e){(0,M.Z)(this.networkers,e)}setUpdatesProcessor(e){this.updatesProcessor=e}getNetworker(e,t,a,s,n){const i=new As(this,this.timeManager,e,t,a,s,n);return this.networkers.push(i),i}startAll(){if(this.akStopped){const e=this.networkers.filter((e=>e.isStopped()));this.akStopped=!1,this.updatesProcessor&&this.updatesProcessor({_:"new_session_created"});for(const t of e)t.scheduleRequest()}}stopAll(){this.akStopped=!0}setLanguage(e){this.language=e;for(const e of this.networkers)e.isFileNetworker||(e.connectionInited=!1)}unsetConnectionInited(){for(const e of this.networkers)e.connectionInited=!1}forceReconnectTimeout(){for(const e of this.networkers)e.forceReconnectTimeout()}forceReconnect(){for(const e of this.networkers)if(!e.isFileNetworker){e.forceReconnect();break}}}const Ds=new class{constructor(){this.testPublicKeysHex=[{modulus:"c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5",exponent:"010001"}],this.publisKeysHex=[{modulus:"e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3",exponent:"010001"}],this.publicKeysParsed={},this.prepared=!1,this.preparePromise=null,b.Z.test&&(this.publisKeysHex=this.testPublicKeysHex)}prepare(){return this.preparePromise?this.preparePromise:this.prepared?Promise.resolve():this.preparePromise=Promise.all(this.publisKeysHex.map((e=>{const t=new ys;t.storeBytes((0,Wa.Z)(e.modulus),"n"),t.storeBytes((0,Wa.Z)(e.exponent),"e");const a=t.getBuffer();return s.Z.invokeCrypto("sha1",a).then((t=>{const a=t.slice(-8);a.reverse(),this.publicKeysParsed[E(a).toLowerCase()]={modulus:e.modulus,exponent:e.exponent}}))}))).then((()=>{this.prepared=!0,this.preparePromise=null}))}select(e){return t=this,a=void 0,n=function*(){yield this.prepare();for(let t=0;t{if(d.ZP&&this.log("mtpSendPlainRequest: in good sector",e),!e||!e.byteLength)throw o;try{const t=new _s(e,{mtproto:!0});if(4===e.length){const e=t.fetchInt();throw this.log.error("mtpSendPlainRequest: wrong response, error code:",e),e}const a=t.fetchLong("auth_key_id");"0"!==a&&this.log.error("auth_key_id !== 0",a);const s=t.fetchLong("msg_id");"0"===s&&this.log.error("msg_id === 0",s);const n=t.fetchInt("msg_len");return n||this.log.error("no msg_len",n),t}catch(e){throw this.log.error("mtpSendPlainRequest: deserialization went bad",e),Object.assign(o,{originalError:e})}}),(e=>{throw e.message||e.type||(e=Object.assign(o,{originalError:e})),e}))}sendReqPQ(e){return Ts(this,void 0,void 0,(function*(){const t=new ys({mtproto:!0});let a;t.storeMethod("req_pq_multi",{nonce:e.nonce}),d.ZP&&this.log("Send req_pq",E(e.nonce));try{const s=this.sendPlainRequest(e.dcId,t.getBytes(!0));Ds.prepare(),a=yield s}catch(e){throw this.log.error("req_pq error",e.message),e}const n=a.fetchObject("ResPQ");if("resPQ"!==n._)throw new Error("[MT] resPQ response invalid: "+n._);if(!(0,bs.Z)(e.nonce,n.nonce))throw this.log.error(e.nonce,n.nonce),new Error("[MT] resPQ nonce mismatch");e.serverNonce=n.server_nonce,e.pq=n.pq,e.fingerprints=n.server_public_key_fingerprints,d.ZP&&this.log("Got ResPQ",E(e.serverNonce),E(e.pq),e.fingerprints);const i=yield Ds.select(e.fingerprints);if(!i)throw new Error("[MT] No public key found");e.publicKey=i,d.ZP&&this.log("PQ factorization start",e.pq);try{var r=yield s.Z.invokeCrypto("factorize",e.pq)}catch(e){throw this.log.error("worker error factorize",e),e}return e.p=r[0],e.q=r[1],d.ZP&&this.log("PQ factorization done",r),this.sendReqDhParams(e)}))}sendReqDhParams(e){return Ts(this,void 0,void 0,(function*(){e.newNonce=w(new Uint8Array(32));const t={_:"p_q_inner_data_dc",pq:e.pq,p:e.p,q:e.q,nonce:e.nonce,server_nonce:e.serverNonce,new_nonce:e.newNonce,dc:0},a=new ys({mtproto:!0});a.storeObject(t,"P_Q_inner_data","DECRYPTED_DATA");const n=a.getBytes(!0);if(n.length>144)throw"DH_params: data is more than 144 bytes!";const i=Ps(n,192,!1,!0,!1),r=i.slice().reverse(),o=yield(()=>Ts(this,void 0,void 0,(function*(){for(;;){const t=w(new Uint8Array(32)),a=r.concat(yield s.Z.invokeCrypto("sha256",t.concat(i)));if(224!==a.length)throw"DH_params: dataWithHash !== 224 bytes!";const n=yield s.Z.invokeCrypto("aes-encrypt",a,t,new Uint8Array([0])),o=Es(t,yield s.Z.invokeCrypto("sha256",n)).concat(n),p=cs(o),d=is()(e.publicKey.modulus,16);if(-1===p.compare(d))return o}})))(),p=Ps(yield s.Z.invokeCrypto("rsa-encrypt",o,e.publicKey),256,!0,!0,!0),f={nonce:e.nonce,server_nonce:e.serverNonce,p:e.p,q:e.q,public_key_fingerprint:e.publicKey.fingerprint,encrypted_data:p},c=new ys({mtproto:!0});c.storeMethod("req_DH_params",f);const l=c.getBytes(!0);let m;d.ZP&&this.log("Send req_DH_params",f);try{m=yield this.sendPlainRequest(e.dcId,l)}catch(e){throw this.log.error("Send req_DH_params FAIL!",e),e}const g=m.fetchObject("Server_DH_Params","RESPONSE");if(d.ZP&&this.log("Sent req_DH_params, response:",g),"server_DH_params_fail"!==g._&&"server_DH_params_ok"!==g._)throw new Error("[MT] Server_DH_Params response invalid: "+g._);if(!(0,bs.Z)(e.nonce,g.nonce))throw new Error("[MT] Server_DH_Params nonce mismatch");if(!(0,bs.Z)(e.serverNonce,g.server_nonce))throw new Error("[MT] Server_DH_Params server_nonce mismatch");if("server_DH_params_fail"===g._){const t=(yield s.Z.invokeCrypto("sha1",e.newNonce)).slice(-16);if(!(0,bs.Z)(t,g.new_nonce_hash))throw new Error("[MT] server_DH_params_fail new_nonce_hash mismatch");throw new Error("[MT] server_DH_params_fail")}try{yield this.decryptServerDhDataAnswer(e,g.encrypted_answer)}catch(e){throw this.log.error("mtpDecryptServerDhDataAnswer FAILED!",e),e}return this.sendSetClientDhParams(e)}))}decryptServerDhDataAnswer(e,t){return Ts(this,void 0,void 0,(function*(){e.localTime=Date.now(),e.tmpAesKey=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat(e.serverNonce))).concat((yield s.Z.invokeCrypto("sha1",e.serverNonce.concat(e.newNonce))).slice(0,12)),e.tmpAesIv=(yield s.Z.invokeCrypto("sha1",e.serverNonce.concat(e.newNonce))).slice(12).concat(yield s.Z.invokeCrypto("sha1",e.newNonce.concat(e.newNonce)),e.newNonce.slice(0,4));const a=new Uint8Array(yield s.Z.invokeCrypto("aes-decrypt",t,e.tmpAesKey,e.tmpAesIv)),n=a.slice(0,20),i=a.slice(20),r=new _s(i,{mtproto:!0}),o=r.fetchObject("Server_DH_inner_data");if("server_DH_inner_data"!==o._)throw new Error("[MT] server_DH_inner_data response invalid: "+o);if(!(0,bs.Z)(e.nonce,o.nonce))throw new Error("[MT] server_DH_inner_data nonce mismatch");if(!(0,bs.Z)(e.serverNonce,o.server_nonce))throw new Error("[MT] server_DH_inner_data serverNonce mismatch");d.ZP&&this.log("Done decrypting answer"),e.g=o.g,e.dhPrime=o.dh_prime,e.gA=o.g_a,e.serverTime=o.server_time,e.retry=0,this.verifyDhParams(e.g,e.dhPrime,e.gA);const p=r.getOffset();if(!(0,bs.Z)(n,yield s.Z.invokeCrypto("sha1",i.slice(0,p))))throw new Error("[MT] server_DH_inner_data SHA1 mismatch");this.timeManager.applyServerTime(e.serverTime,e.localTime)}))}verifyDhParams(e,t,a){d.ZP&&this.log("Verifying DH params",e,t,a);const s=E(t);if(3!==e||"c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b"!==s)throw new Error("[MT] DH params are not verified: unknown dhPrime");d.ZP&&this.log("dhPrime cmp OK");const n=cs(a),i=is()(s,16);if(n.compare(is().one)<=0)throw new Error("[MT] DH params are not verified: gA <= 1");if(n.compare(i.subtract(is().one))>=0)throw new Error("[MT] DH params are not verified: gA >= dhPrime - 1");d.ZP&&this.log("1 < gA < dhPrime-1 OK");const r=is()(2).pow(1984);if(n.compare(r)<0)throw new Error("[MT] DH params are not verified: gA < 2^{2048-64}");if(n.compare(i.subtract(r))>=0)throw new Error("[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}");return d.ZP&&this.log("2^{2048-64} < gA < dhPrime-2^{2048-64} OK"),!0}sendSetClientDhParams(e){return Ts(this,void 0,void 0,(function*(){const t=(0,Wa.Z)(e.g.toString(16));e.b=w(new Uint8Array(256));try{var a=yield s.Z.invokeCrypto("mod-pow",t,e.b,e.dhPrime)}catch(e){throw e}const n=new ys({mtproto:!0});n.storeObject({_:"client_DH_inner_data",nonce:e.nonce,server_nonce:e.serverNonce,retry_id:[0,e.retry++],g_b:a},"Client_DH_Inner_Data");const i=(yield s.Z.invokeCrypto("sha1",n.getBuffer())).concat(n.getBytes(!0)),r=yield s.Z.invokeCrypto("aes-encrypt",i,e.tmpAesKey,e.tmpAesIv),o=new ys({mtproto:!0});let p;o.storeMethod("set_client_DH_params",{nonce:e.nonce,server_nonce:e.serverNonce,encrypted_data:r}),d.ZP&&this.log("Send set_client_DH_params");try{p=yield this.sendPlainRequest(e.dcId,o.getBytes(!0))}catch(e){throw e}const f=p.fetchObject("Set_client_DH_params_answer");if("dh_gen_ok"!==f._&&"dh_gen_retry"!==f._&&"dh_gen_fail"!==f._)throw new Error("[MT] Set_client_DH_params_answer response invalid: "+f._);if(!(0,bs.Z)(e.nonce,f.nonce))throw new Error("[MT] Set_client_DH_params_answer nonce mismatch");if(!(0,bs.Z)(e.serverNonce,f.server_nonce))throw new Error("[MT] Set_client_DH_params_answer server_nonce mismatch");try{var c=yield s.Z.invokeCrypto("mod-pow",e.gA,e.b,e.dhPrime)}catch(e){throw c}const l=yield s.Z.invokeCrypto("sha1",c),m=l.slice(0,8),g=l.slice(-8);switch(d.ZP&&this.log("Got Set_client_DH_params_answer",f._,c),f._){case"dh_gen_ok":{const t=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat([1],m))).slice(-16);if(!(0,bs.Z)(t,f.new_nonce_hash1))throw this.log.error("Set_client_DH_params_answer new_nonce_hash1 mismatch",t,f),new Error("new_nonce_hash1 mismatch");const a=Es(e.newNonce.slice(0,8),e.serverNonce.slice(0,8));return d.ZP&&this.log("Auth successfull!",g,c,a),e.authKeyId=g,e.authKey=c,e.serverSalt=a,e}case"dh_gen_retry":{const t=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat([2],m))).slice(-16);if(!(0,bs.Z)(t,f.new_nonce_hash2))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch");return this.sendSetClientDhParams(e)}case"dh_gen_fail":{const t=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat([3],m))).slice(-16);if(!(0,bs.Z)(t,f.new_nonce_hash3))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch");throw new Error("[MT] Set_client_DH_params_answer fail")}}}))}getTransportType(){return this.getTransportTypePromise?this.getTransportTypePromise:this.getTransportTypePromise=Z.pingTransports().then((({websocket:e})=>{this.transportType=e?"websocket":"https",this.log("will use transport:",this.transportType)}))}auth(e){let t=this.cached[e];return t||(t=new Promise(((t,a)=>Ts(this,void 0,void 0,(function*(){let s;yield this.getTransportType();let n=1;for(;n++<=3;)try{const a={dcId:e,nonce:w(new Uint8Array(16))},s=this.sendReqPQ(a);return void t(yield s)}catch(e){s=e}a(s)})))),this.cached[e]=t)}}class Rs extends G{after(){this.lastMessageId=[0,0],this.timeOffset=0,Ga.Z.get("server_time_offset").then((e=>{e&&(this.timeOffset=e)}))}getServerTimeOffset(){return this.timeOffset}generateId(){const e=Date.now();let t=[Math.floor(e/1e3)+this.timeOffset,e%1e3<<21|(0,Ee.d)(16)<<3|4];return(this.lastMessageId[0]>t[0]||this.lastMessageId[0]===t[0]&&this.lastMessageId[1]>=t[1])&&(t=[this.lastMessageId[0],this.lastMessageId[1]+4]),this.lastMessageId=t,os(t[0],t[1]).toString(10)}applyServerTime(e,t){const a=e-(t=(t||Date.now())/1e3|0),s=Math.abs(this.timeOffset-a)>10;return this.lastMessageId=[0,0],this.timeOffset!==a&&(Ga.Z.set({server_time_offset:a}),this.timeOffset=a),s}}class xs{saveWebDocument(e){if(!e)return;const t=e.attributes.find((e=>"documentAttributeImageSize"===e._));return t&&(e.w=t.w,e.h=t.h),e}}class Bs extends G{getInputInvoiceBySlug(e){return{_:"inputInvoiceSlug",slug:e}}getInputInvoiceByPeerId(e,t){return{_:"inputInvoiceMessage",peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}}getPaymentForm(e){return this.apiManager.invokeApi("payments.getPaymentForm",{invoice:e}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e)))}getPaymentReceipt(e,t){return this.apiManager.invokeApi("payments.getPaymentReceipt",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e)))}validateRequestedInfo(e,t,a){return this.apiManager.invokeApi("payments.validateRequestedInfo",{save:a,invoice:e,info:t})}sendPaymentForm(e,t,a,s,n,i){return this.apiManager.invokeApi("payments.sendPaymentForm",{form_id:t,invoice:e,requested_info_id:a,shipping_option_id:s,credentials:n,tip_amount:i||void 0}).then((e=>("payments.paymentResult"===e._&&this.apiUpdatesManager.processUpdateMessage(e.updates),e)))}clearSavedInfo(e,t){return this.apiManager.invokeApi("payments.clearSavedInfo",{info:e,credentials:t})}}var Vs=a(8794);class Os extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{e?this.attachMenuBots=new Map:(this.attachMenuBots.clear(),this.attachMenuBotsArr=void 0)},this.onUpdateAttachMenuBots=e=>{this.clear(),this.getAttachMenuBots()}}after(){this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateAttachMenuBots:this.onUpdateAttachMenuBots})}saveAttachMenuBot(e){this.attachMenuBots.set(e.bot_id,e);const t=(0,Vs.Z)(e);return t.icon=this.appDocsManager.saveDoc(t.icon,{type:"attachMenuBotIcon",botId:e.bot_id}),e}saveAttachMenuBots(e){e.saved||(e.saved=!0,e.forEach((e=>this.saveAttachMenuBot(e))))}getAttachMenuBots(){var e;return null!==(e=this.attachMenuBotsArr)&&void 0!==e?e:this.apiManager.invokeApiSingleProcess({method:"messages.getAttachMenuBots",processResult:e=>((0,ue.Z)(e),this.appUsersManager.saveApiUsers(e.users),this.saveAttachMenuBots(e.bots),this.attachMenuBotsArr=e.bots.slice(0,0))})}getAttachMenuBotCached(e){return this.attachMenuBots.get(e)}getAttachMenuBot(e,t){throw this.appUsersManager.isAttachMenuBot(e),(0,X.Z)("BOT_INVALID")}requestWebView(e){const{botId:t,peerId:a,url:s,fromBotMenu:n,themeParams:i,replyToMsgId:r,silent:o,sendAsPeerId:p,startParam:d,threadId:f}=e;return this.apiManager.invokeApiSingleProcess({method:"messages.requestWebView",params:{peer:this.appPeersManager.getInputPeerById(a),bot:this.appUsersManager.getUserInput(t),silent:o,platform:"web",url:s,reply_to_msg_id:r?(0,oe.Z)(r):void 0,from_bot_menu:n,theme_params:i,send_as:p?this.appPeersManager.getInputPeerById(p):void 0,start_param:d,top_msg_id:f?(0,oe.Z)(f):void 0},processResult:e=>(console.log(e),e)})}prolongWebView(e){return this.apiManager.invokeApiSingleProcess({method:"messages.prolongWebView",params:{peer:this.appPeersManager.getInputPeerById(e.peerId),bot:this.appUsersManager.getUserInput(e.botId),query_id:e.queryId,silent:e.silent,reply_to_msg_id:e.replyToMsgId?(0,oe.Z)(e.replyToMsgId):void 0,send_as:e.sendAsPeerId?this.appPeersManager.getInputPeerById(e.sendAsPeerId):void 0,top_msg_id:e.threadId?(0,oe.Z)(e.threadId):void 0},processResult:e=>{console.log(e)}})}}class Ls extends G{requestUrlAuth(e,t,a,s){return this.apiManager.invokeApi("messages.requestUrlAuth",{button_id:s,msg_id:a?(0,oe.Z)(a):void 0,peer:t?this.appPeersManager.getInputPeerById(t):void 0,url:e}).then((e=>("urlAuthResultRequest"===e._&&this.appUsersManager.saveApiUser(e.bot),e)))}acceptUrlAuth(e,t,a,s,n){return this.apiManager.invokeApi("messages.acceptUrlAuth",{button_id:s,msg_id:a?(0,oe.Z)(a):void 0,peer:t?this.appPeersManager.getInputPeerById(t):void 0,url:e,write_allowed:n}).then((e=>e))}getWebAuthorizations(){return this.apiManager.invokeApi("account.getWebAuthorizations").then((e=>(this.appUsersManager.saveApiUsers(e.users),e.authorizations)))}resetWebAuthorization(e){return this.apiManager.invokeApi("account.resetWebAuthorization",{hash:e})}resetWebAuthorizations(){return this.apiManager.invokeApi("account.resetWebAuthorizations")}}class Ns extends G{after(){this.wallPapers={}}saveWallPaper(e){return e?("wallPaperNoFile"!==e._&&(e.document=this.appDocsManager.saveDoc(e.document,{type:"wallPaper",wallPaperId:e.id})),this.wallPapers[e.id]=e,e):e}getWallPaper(e){return this.apiManager.invokeApiSingleProcess({method:"account.getWallPaper",params:{wallpaper:e},processResult:e=>this.saveWallPaper(e)})}getInputWallPaper(e){return"string"==typeof e?{_:"inputWallPaperSlug",slug:e}:"wallPaperNoFile"===e._?{_:"inputWallPaperNoFile",id:e.id}:{_:"inputWallPaper",id:e.id,access_hash:e.access_hash}}getWallPaperById(e){const t=this.wallPapers[e];return this.getWallPaper(this.getInputWallPaper(t))}getThemes(){return this.apiManager.invokeApiSingleProcess({method:"account.getThemes",params:{format:"macos",hash:0},processResult:e=>((0,ue.Z)(e),e.themes.forEach((e=>{e.settings&&e.settings.forEach((e=>{e.wallpaper=this.saveWallPaper(e.wallpaper)}))})),e.themes)})}getWallPapers(){return this.apiManager.invokeApiHashable({method:"account.getWallPapers"}).then((e=>{const t=e.wallpapers;return t.forEach(((e,t,a)=>{a[t]=this.saveWallPaper(e)})),t}))}}const Zs=new class{constructor(){this.cryptoWorkersURLs=[],this.cryptoPortsAttached=0,this.cryptoPortPromise=(0,v.Z)(),this.cryptoPortPromise.then((()=>{this.cryptoPortPromise=void 0}))}start(){const e=f.Z.getInstance();e.addEventListener("manager",(({name:e,method:t,args:a})=>(0,q.Z)(this.getManagers(),(s=>{const n=s[e];return n[t].apply(n,a)})))),e.addEventListener("cryptoPort",((e,t,a)=>{var n;const i=a.ports[0];this.cryptoPortsAttached>=this.cryptoWorkersURLs.length?i.close():(++this.cryptoPortsAttached,s.Z.attachPort(i),null===(n=this.cryptoPortPromise)||void 0===n||n.resolve())})),e.addEventListener("createProxyWorkerURLs",(({originalUrl:e,blob:t})=>{let a=this.cryptoWorkersURLs.length;a||(this.cryptoWorkersURLs.push(e),++a);const s=_.Z.cryptoWorkers;if(a===s)return this.cryptoWorkersURLs;const n=new Array(s-a).fill(void 0).map((()=>URL.createObjectURL(t)));return this.cryptoWorkersURLs.push(...n),this.cryptoWorkersURLs}))}createManagers(){return e=this,t=void 0,n=function*(){const e=new $;yield Promise.all([e.loadStorages(),this.cryptoPortPromise]);const t=yield function(e,t){const a={appPeersManager:new ca,appChatsManager:new Ve,appDocsManager:new yt,appPhotosManager:new la,appPollsManager:new ma,appUsersManager:new Ua,appWebPagesManager:new Ea,appDraftsManager:new vt,appProfileManager:new ya,appNotificationsManager:new ia,apiUpdatesManager:new Ue,appAvatarsManager:new De,appGroupCallsManager:new Ct,appCallsManager:new Fe,appReactionsManager:new Ma,appMessagesManager:new aa,appMessagesIdsManager:new Tt,appPrivacyManager:new ga,appInlineBotsManager:new Dt,appStickersManager:new wa,referenceDatabase:new ee,appEmojiManager:new St,filtersStorage:new Ce,dialogsStorage:new _e,apiManager:new $a,cryptoWorker:s.Z,passwordManager:new Q,apiFileManager:new qa,peersStorage:new Ya,thumbsStorage:new es,networkerFactory:new Us,rootScope:new l,authorizer:new Fs,dcConfigurator:new O,timeManager:new Rs,appStoragesManager:e,appStateManager:y,appWebDocsManager:new xs,appPaymentsManager:new Bs,appAttachMenuBotsManager:new Os,appSeamlessLoginManager:new Ls,appThemesManager:new Ns};for(const e in a){const t=a[e];t&&(t.setManagers&&(t.setManagers(a),delete t.setManagers),T.Z[e]=t)}const n=[];let i=Object.keys(a);i.unshift("appUsersManager","appChatsManager","appNotificationsManager","appMessagesManager","dialogsStorage"),i=(0,we.Z)(i);for(const e of i){const t=a[e];if(null==t?void 0:t.after){const e=t.after();n.push(e)}}return t&&a.apiManager.setUserAuth(t),Promise.all(n).then((()=>a))}(e,y.userId);return this.managers=t},new((a=void 0)||(a=Promise))((function(s,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((n=n.apply(e,t||[])).next())}));var e,t,a,n}getManagers(){var e;return null!==(e=this.managers)&&void 0!==e?e:this.managers=this.createManagers()}};d.GO&&(d.GO.appManagersManager=Zs);const js=Zs;var qs=a(3655);let Gs,Hs,Ws=!0;function zs(){return Ws}function Ks(){return Ws?Gs:void 0}const Js=(0,S.kg)("MTPROTO"),$s=new f.Z;$s.addMultipleEventsListeners({environment:e=>{r(e),Z.waitForWebSocket()},crypto:({method:e,args:t})=>s.Z.invokeCrypto(e,...t),state:({state:e,resetStorages:t,pushedKeys:a,newVersion:s,oldVersion:n,userId:i})=>{Js("got state",e,a),y.userId=i,y.newVersion=s,y.oldVersion=n,Object.keys(e).forEach((t=>{y.pushToState(t,e[t],!0,!a.includes(t))})),j.resolve(t)},toggleStorages:({enabled:e,clearWrite:t})=>(0,Ka.Z)(e,t),event:(e,t)=>{Js("will redirect event",e,t),$s.invokeExceptSource("event",e,t)},serviceWorkerOnline:e=>{Ws=e},serviceWorkerPort:(e,t,a)=>{Gs?(Gs.detachPort(Hs),Hs=void 0):(Gs=new qs.Z,Gs.addMultipleEventsListeners({requestFilePart:e=>(0,q.Z)(js.getManagers(),(t=>{const{docId:a,dcId:s,offset:n,limit:i}=e;return t.appDocsManager.requestDocPart(a,s,n,i)}))})),(Hs=a.ports[0])&&Gs.attachPort(Hs)},createObjectURL:e=>URL.createObjectURL(e)}),Js("MTProto start"),js.start(),js.getManagers(),Ht.start(),function(e,t,a){const s=(a,s)=>{e.attachListenPort(a),s&&e.attachSendPort(s),null==t||t(a)};e.setOnPortDisconnect((e=>{Ht.deleteTab(e)})),"undefined"!=typeof SharedWorkerGlobalScope?T.Z.addEventListener("connect",(e=>s(e.source,e.source))):"undefined"!=typeof ServiceWorkerGlobalScope?s(T.Z,null):s(T.Z,T.Z)}($s,(e=>{Ht.addTab(e)}))},1507:(e,t,a)=>{a.d(t,{BP:()=>f,BX:()=>l,DZ:()=>h,Gu:()=>u,IA:()=>i,Iw:()=>p,J$:()=>m,NM:()=>s,Ox:()=>c,Pt:()=>d,Zi:()=>g,hj:()=>n,rU:()=>o,yF:()=>r});const s=0,n=1271266957,i=777,r=777e3,o=2147483647,p=20971520,d="",f="default_static",c=4295032831,l=new Set(["web","k","z"]),m=0,g=1,h=new Set([m,g]),u=Math.max(...Array.from(h))+1},2423:(e,t,a)=>{a.d(t,{$2:()=>l,E:()=>m,QB:()=>g,SC:()=>h,bu:()=>d,it:()=>p,kO:()=>y,tY:()=>u});var s=a(1229);const n="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",i="0-9_"+n,r="["+n+"0-9]",o="((?:https?|ftp)://|mailto:)?",p=o+"(?:"+r+"{1,64}(?::"+r+"{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}|"+r+"["+n+"ยท0-9-]{0,64}(?:\\."+r+"["+n+"ยท0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|["+n+"]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?",d=(new RegExp("^"+o.slice(0,-1),"i"),/^((?:[^\/]+?):\/\/|mailto:)/),f="[a-zA-Z\\d_]{5,32}",c="\\/([a-zA-Z\\d_]{1,32})(?:@("+f+"))?(\\b|$)",l=new RegExp("(^| )(@)("+f+")|("+p+")|(\\n)|("+s.Z+")|(^|[\\s\\(\\]])(#["+i+"]{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,}))$/,g=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s|\x01)(`|~~|\*\*|__|_-_|\|\|)([^\n]+?)\7([\x01\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)|(\[(.+?)\]\((.+?)\))/m,h={"`":"messageEntityCode","``":"messageEntityPre","**":"messageEntityBold",__:"messageEntityItalic","~~":"messageEntityStrike","_-_":"messageEntityUnderline","||":"messageEntitySpoiler"},u=new Set(["messageEntityEmoji","messageEntityLinebreak","messageEntityCaret"]);for(const e in h)u.add(h[e]);const y=/^\+\d+$/},671:(e,t,a)=>{function s(e){return function(e){const t=[];let a=0,s=0,n=0;for(;n55296&&a<=56319?s=a:t.push(a.toString(16));return t.length&&2===t[0].length&&(t[0]="00"+t[0]),t}(r(e)).join("-")}a.d(t,{N0:()=>s});const n=/\uFE0F/g,i=String.fromCharCode(8205),r=e=>e.indexOf(i)<0?e.replace(n,""):e;new Map([["FT","๐Ÿดโ€โ˜ "]])}},s={};function n(e){var t=s[e];if(void 0!==t)return t.exports;var i=s[e]={id:e,loaded:!1,exports:{}};return a[e].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=a,n.x=()=>{var e=n.O(void 0,[699,211,147,85,110],(()=>n(9092)));return n.O(e)},e=[],n.O=(t,a,s,i)=>{if(!a){var r=1/0;for(f=0;f=i)&&Object.keys(n.O).every((e=>n.O[e](a[p])))?a.splice(p--,1):(o=!1,i0&&e[f-1][2]>i;f--)e[f]=e[f-1];e[f]=[a,s,i]},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,a)=>(n.f[a](e,t),t)),[])),n.u=e=>85===e?"85.887945ef5f43bc205112.bundle.js":110===e?"110.d2d030648acd67138f89.bundle.js":({211:"npm.big-integer",699:"npm.pako"}[e]||e)+"."+{8:"93d2f33af815eb0455aa",104:"f68acff124bec8da4bd6",147:"d3d1728d5fd59c12e18f",211:"363d763daad0ee4e2741",301:"95838a8203f23dd1ce8f",642:"be93122d1116ecdc9322",699:"89deb457201f16c93925"}[e]+".chunk.js",n.miniCssF=e=>{},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var t=n.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var a=t.getElementsByTagName("script");a.length&&(e=a[a.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{if(void 0!==n){var e=n.u,t=n.e,a={},s={};n.u=function(t){return e(t)+(a.hasOwnProperty(t)?"?"+a[t]:"")},n.e=function(i){return t(i).catch((function(t){var r=s.hasOwnProperty(i)?s[i]:999999;if(r<1){var o=e(i);throw t.message="Loading chunk "+i+" failed after 999999 retries.\n("+o+")",t.request=o,t}return new Promise((function(e){setTimeout((function(){var t=Date.now();a[i]=t,s[i]=r-1,e(n.e(i))}),3e3)}))}))}}})(),(()=>{var e={678:1};n.f.i=(t,a)=>{e[t]||importScripts(n.p+n.u(t))};var t=this.webpackChunktweb=this.webpackChunktweb||[],a=t.push.bind(t);t.push=t=>{var[s,i,r]=t;for(var o in i)n.o(i,o)&&(n.m[o]=i[o]);for(r&&r(n);s.length;)e[s.pop()]=1;a(t)}})(),t=n.x,n.x=()=>Promise.all([699,211,147,85,110].map(n.e,n)).then(t),n.x()})(); -//# sourceMappingURL=mtproto.worker.50a758787fa4b84d353d.chunk.js.map \ No newline at end of file +(()=>{"use strict";var e,t,a={410:(e,t,a)=>{a.d(t,{GO:()=>n,ZP:()=>i});const s=a(1267).Z.debug,n="undefined"!=typeof window?window:self,i=s},3447:(e,t,a)=>{a.d(t,{Z:()=>i});const s={14:{"1f6dd":4867,"1f6de":4916,"1f6df":4923,"1f7f0":62832,"1f979":183,"1f9cc":1557,"1fa7b":61332,"1fa7c":61330,"1faa9":51093,"1faaa":61364,"1faab":61189,"1faac":51085,"1fab7":2651,"1fab8":2631,"1fab9":2672,"1faba":2673,"1fac3":1520,"1fac4":1521,"1fac5":1505,"1fad7":3793,"1fad8":3707,"1fad9":3804,"1fae0":111,"1fae1":136,"1fae2":132,"1fae3":133,"1fae4":174,"1fae5":142,"1fae6":1385,"1fae7":61353,"1faf0":1341,"1faf1":1332,"1faf2":1333,"1faf3":1334,"1faf4":1335,"1faf5":1351,"1faf6":1360,"1faf1-1f3fb-200d-1faf2-1f3fc":0,"1faf1-1f3fb-200d-1faf2-1f3fd":0,"1faf1-1f3fb-200d-1faf2-1f3fe":0,"1faf1-1f3fb-200d-1faf2-1f3ff":0,"1faf1-1f3fc-200d-1faf2-1f3fb":0,"1faf1-1f3fc-200d-1faf2-1f3fd":0,"1faf1-1f3fc-200d-1faf2-1f3fe":0,"1faf1-1f3fc-200d-1faf2-1f3ff":0,"1faf1-1f3fd-200d-1faf2-1f3fb":0,"1faf1-1f3fd-200d-1faf2-1f3fc":0,"1faf1-1f3fd-200d-1faf2-1f3fe":0,"1faf1-1f3fd-200d-1faf2-1f3ff":0,"1faf1-1f3fe-200d-1faf2-1f3fb":0,"1faf1-1f3fe-200d-1faf2-1f3fc":0,"1faf1-1f3fe-200d-1faf2-1f3fd":0,"1faf1-1f3fe-200d-1faf2-1f3ff":0,"1faf1-1f3ff-200d-1faf2-1f3fb":0,"1faf1-1f3ff-200d-1faf2-1f3fc":0,"1faf1-1f3ff-200d-1faf2-1f3fd":0,"1faf1-1f3ff-200d-1faf2-1f3fe":0,"1fac3-1f3fb":0,"1fac3-1f3fc":0,"1fac3-1f3fd":0,"1fac3-1f3fe":0,"1fac3-1f3ff":0,"1fac4-1f3fb":0,"1fac4-1f3fc":0,"1fac4-1f3fd":0,"1fac4-1f3fe":0,"1fac4-1f3ff":0,"1fac5-1f3fb":0,"1fac5-1f3fc":0,"1fac5-1f3fd":0,"1fac5-1f3fe":0,"1fac5-1f3ff":0,"1faf0-1f3fb":0,"1faf0-1f3fc":0,"1faf0-1f3fd":0,"1faf0-1f3fe":0,"1faf0-1f3ff":0,"1faf1-1f3fb":0,"1faf1-1f3fc":0,"1faf1-1f3fd":0,"1faf1-1f3fe":0,"1faf1-1f3ff":0,"1faf2-1f3fb":0,"1faf2-1f3fc":0,"1faf2-1f3fd":0,"1faf2-1f3fe":0,"1faf2-1f3ff":0,"1faf3-1f3fb":0,"1faf3-1f3fc":0,"1faf3-1f3fd":0,"1faf3-1f3fe":0,"1faf3-1f3ff":0,"1faf4-1f3fb":0,"1faf4-1f3fc":0,"1faf4-1f3fd":0,"1faf4-1f3fe":0,"1faf4-1f3ff":0,"1faf5-1f3fb":0,"1faf5-1f3fc":0,"1faf5-1f3fd":0,"1faf5-1f3fe":0,"1faf5-1f3ff":0,"1faf6-1f3fb":0,"1faf6-1f3fc":0,"1faf6-1f3fd":0,"1faf6-1f3fe":0,"1faf6-1f3ff":0},"":{2049:62835,2122:62863,2139:62888,2194:62764,2195:62763,2196:62762,2197:62756,2198:62758,2199:62760,2328:61194,2600:4990,2601:4998,2602:41013,2603:41018,2604:41020,2611:62851,2614:41014,2615:3781,2618:2667,2620:1106,2622:62753,2623:62754,2626:62783,2638:62780,2639:177,2648:62788,2649:62789,2650:62796,2651:62797,2652:62798,2653:62799,2660:51095,2663:51098,2665:51096,2666:51097,2668:4865,2692:61297,2693:4922,2694:61300,2696:61311,2697:61319,2699:61309,2702:61284,2705:62850,2708:4931,2709:61245,2712:61259,2714:62852,2716:62828,2721:62779,2728:51029,2733:62858,2734:62859,2744:41017,2747:62860,2753:62836,2754:62837,2755:62838,2757:62839,2763:1137,2764:1141,2795:62829,2796:62830,2797:62831,2934:62767,2935:62768,3030:62840,3297:62912,3299:62913,"0023-20e3":62864,"002a-20e3":62865,"0030-20e3":62866,"0031-20e3":62867,"0032-20e3":62868,"0033-20e3":62869,"0034-20e3":62870,"0035-20e3":62871,"0036-20e3":62872,"0037-20e3":62873,"0038-20e3":62874,"0039-20e3":62875,"00a9":62861,"00ae":62862,"1f004":51101,"1f0cf":51100,"1f170":62882,"1f171":62884,"1f17e":62893,"1f17f":62895,"1f18e":62883,"1f191":62885,"1f192":62886,"1f193":62887,"1f194":62889,"1f195":62891,"1f196":62892,"1f197":62894,"1f198":62896,"1f199":62897,"1f19a":62898,"1f1e6-1f1e8":71594,"1f1e6-1f1e9":71595,"1f1e6-1f1ea":71596,"1f1e6-1f1eb":71597,"1f1e6-1f1ec":71598,"1f1e6-1f1ee":71599,"1f1e6-1f1f1":71600,"1f1e6-1f1f2":71601,"1f1e6-1f1f4":71602,"1f1e6-1f1f6":71603,"1f1e6-1f1f7":71604,"1f1e6-1f1f8":71605,"1f1e6-1f1f9":71606,"1f1e6-1f1fa":71607,"1f1e6-1f1fc":71608,"1f1e6-1f1fd":71609,"1f1e6-1f1ff":71610,"1f1e7-1f1e6":71611,"1f1e7-1f1e7":71612,"1f1e7-1f1e9":71613,"1f1e7-1f1ea":71614,"1f1e7-1f1eb":71615,"1f1e7-1f1ec":71616,"1f1e7-1f1ed":71617,"1f1e7-1f1ee":71618,"1f1e7-1f1ef":71619,"1f1e7-1f1f1":71620,"1f1e7-1f1f2":71621,"1f1e7-1f1f3":71622,"1f1e7-1f1f4":71623,"1f1e7-1f1f6":71624,"1f1e7-1f1f7":71625,"1f1e7-1f1f8":71626,"1f1e7-1f1f9":71627,"1f1e7-1f1fb":71628,"1f1e7-1f1fc":71629,"1f1e7-1f1fe":71630,"1f1e7-1f1ff":71631,"1f1e8-1f1e6":71632,"1f1e8-1f1e8":71633,"1f1e8-1f1e9":71634,"1f1e8-1f1eb":71635,"1f1e8-1f1ec":71636,"1f1e8-1f1ed":71637,"1f1e8-1f1ee":71638,"1f1e8-1f1f0":71639,"1f1e8-1f1f1":71640,"1f1e8-1f1f2":71641,"1f1e8-1f1f3":71642,"1f1e8-1f1f4":71643,"1f1e8-1f1f5":71644,"1f1e8-1f1f7":71645,"1f1e8-1f1fa":71646,"1f1e8-1f1fb":71647,"1f1e8-1f1fc":71648,"1f1e8-1f1fd":71649,"1f1e8-1f1fe":71650,"1f1e8-1f1ff":71651,"1f1e9-1f1ea":71652,"1f1e9-1f1ec":71653,"1f1e9-1f1ef":71654,"1f1e9-1f1f0":71655,"1f1e9-1f1f2":71656,"1f1e9-1f1f4":71657,"1f1e9-1f1ff":71658,"1f1ea-1f1e6":71659,"1f1ea-1f1e8":71660,"1f1ea-1f1ea":71661,"1f1ea-1f1ec":71662,"1f1ea-1f1ed":71663,"1f1ea-1f1f7":71664,"1f1ea-1f1f8":71665,"1f1ea-1f1f9":71666,"1f1ea-1f1fa":71667,"1f1eb-1f1ee":71668,"1f1eb-1f1ef":71669,"1f1eb-1f1f0":71670,"1f1eb-1f1f2":71671,"1f1eb-1f1f4":71672,"1f1eb-1f1f7":71673,"1f1ec-1f1e6":71674,"1f1ec-1f1e7":71675,"1f1ec-1f1e9":71676,"1f1ec-1f1ea":71677,"1f1ec-1f1eb":71678,"1f1ec-1f1ec":71679,"1f1ec-1f1ed":71680,"1f1ec-1f1ee":71681,"1f1ec-1f1f1":71682,"1f1ec-1f1f2":71683,"1f1ec-1f1f3":71684,"1f1ec-1f1f5":71685,"1f1ec-1f1f6":71686,"1f1ec-1f1f7":71687,"1f1ec-1f1f8":71688,"1f1ec-1f1f9":71689,"1f1ec-1f1fa":71690,"1f1ec-1f1fc":71691,"1f1ec-1f1fe":71692,"1f1ed-1f1f0":71693,"1f1ed-1f1f2":71694,"1f1ed-1f1f3":71695,"1f1ed-1f1f7":71696,"1f1ed-1f1f9":71697,"1f1ed-1f1fa":71698,"1f1ee-1f1e8":71699,"1f1ee-1f1e9":71700,"1f1ee-1f1ea":71701,"1f1ee-1f1f1":71702,"1f1ee-1f1f2":71703,"1f1ee-1f1f3":71704,"1f1ee-1f1f4":71705,"1f1ee-1f1f6":71706,"1f1ee-1f1f7":71707,"1f1ee-1f1f8":71708,"1f1ee-1f1f9":71709,"1f1ef-1f1ea":71710,"1f1ef-1f1f2":71711,"1f1ef-1f1f4":71712,"1f1ef-1f1f5":71713,"1f1f0-1f1ea":71714,"1f1f0-1f1ec":71715,"1f1f0-1f1ed":71716,"1f1f0-1f1ee":71717,"1f1f0-1f1f2":71718,"1f1f0-1f1f3":71719,"1f1f0-1f1f5":71720,"1f1f0-1f1f7":71721,"1f1f0-1f1fc":71722,"1f1f0-1f1fe":71723,"1f1f0-1f1ff":71724,"1f1f1-1f1e6":71725,"1f1f1-1f1e7":71726,"1f1f1-1f1e8":71727,"1f1f1-1f1ee":71728,"1f1f1-1f1f0":71729,"1f1f1-1f1f7":71730,"1f1f1-1f1f8":71731,"1f1f1-1f1f9":71732,"1f1f1-1f1fa":71733,"1f1f1-1f1fb":71734,"1f1f1-1f1fe":71735,"1f1f2-1f1e6":71736,"1f1f2-1f1e8":71737,"1f1f2-1f1e9":71738,"1f1f2-1f1ea":71739,"1f1f2-1f1eb":71740,"1f1f2-1f1ec":71741,"1f1f2-1f1ed":71742,"1f1f2-1f1f0":71743,"1f1f2-1f1f1":71744,"1f1f2-1f1f2":71745,"1f1f2-1f1f3":71746,"1f1f2-1f1f4":71747,"1f1f2-1f1f5":71748,"1f1f2-1f1f6":71749,"1f1f2-1f1f7":71750,"1f1f2-1f1f8":71751,"1f1f2-1f1f9":71752,"1f1f2-1f1fa":71753,"1f1f2-1f1fb":71754,"1f1f2-1f1fc":71755,"1f1f2-1f1fd":71756,"1f1f2-1f1fe":71757,"1f1f2-1f1ff":71758,"1f1f3-1f1e6":71759,"1f1f3-1f1e8":71760,"1f1f3-1f1ea":71761,"1f1f3-1f1eb":71762,"1f1f3-1f1ec":71763,"1f1f3-1f1ee":71764,"1f1f3-1f1f1":71765,"1f1f3-1f1f4":71766,"1f1f3-1f1f5":71767,"1f1f3-1f1f7":71768,"1f1f3-1f1fa":71769,"1f1f3-1f1ff":71770,"1f1f4-1f1f2":71771,"1f1f5-1f1e6":71772,"1f1f5-1f1ea":71773,"1f1f5-1f1eb":71774,"1f1f5-1f1ec":71775,"1f1f5-1f1ed":71776,"1f1f5-1f1f0":71777,"1f1f5-1f1f1":71778,"1f1f5-1f1f2":71779,"1f1f5-1f1f3":71780,"1f1f5-1f1f7":71781,"1f1f5-1f1f8":71782,"1f1f5-1f1f9":71783,"1f1f5-1f1fc":71784,"1f1f5-1f1fe":71785,"1f1f6-1f1e6":71786,"1f1f7-1f1ea":71787,"1f1f7-1f1f4":71788,"1f1f7-1f1f8":71789,"1f1f7-1f1fa":71790,"1f1f7-1f1fc":71791,"1f1f8-1f1e6":71792,"1f1f8-1f1e7":71793,"1f1f8-1f1e8":71794,"1f1f8-1f1e9":71795,"1f1f8-1f1ea":71796,"1f1f8-1f1ec":71797,"1f1f8-1f1ed":71798,"1f1f8-1f1ee":71799,"1f1f8-1f1ef":71800,"1f1f8-1f1f0":71801,"1f1f8-1f1f1":71802,"1f1f8-1f1f2":71803,"1f1f8-1f1f3":71804,"1f1f8-1f1f4":71805,"1f1f8-1f1f7":71806,"1f1f8-1f1f8":71807,"1f1f8-1f1f9":71808,"1f1f8-1f1fb":71809,"1f1f8-1f1fd":71810,"1f1f8-1f1fe":71811,"1f1f8-1f1ff":71812,"1f1f9-1f1e6":71813,"1f1f9-1f1e8":71814,"1f1f9-1f1e9":71815,"1f1f9-1f1eb":71816,"1f1f9-1f1ec":71817,"1f1f9-1f1ed":71818,"1f1f9-1f1ef":71819,"1f1f9-1f1f0":71820,"1f1f9-1f1f1":71821,"1f1f9-1f1f2":71822,"1f1f9-1f1f3":71823,"1f1f9-1f1f4":71824,"1f1f9-1f1f7":71825,"1f1f9-1f1f9":71826,"1f1f9-1f1fb":71827,"1f1f9-1f1fc":71828,"1f1f9-1f1ff":71829,"1f1fa-1f1e6":71830,"1f1fa-1f1ec":71831,"1f1fa-1f1f2":71832,"1f1fa-1f1f3":71833,"1f1fa-1f1f8":71834,"1f1fa-1f1fe":71835,"1f1fa-1f1ff":71836,"1f1fb-1f1e6":71837,"1f1fb-1f1e8":71838,"1f1fb-1f1ea":71839,"1f1fb-1f1ec":71840,"1f1fb-1f1ee":71841,"1f1fb-1f1f3":71842,"1f1fb-1f1fa":71843,"1f1fc-1f1eb":71844,"1f1fc-1f1f8":71845,"1f1fd-1f1f0":71846,"1f1fe-1f1ea":71847,"1f1fe-1f1f9":71848,"1f1ff-1f1e6":71849,"1f1ff-1f1f2":71850,"1f1ff-1f1fc":71851,"1f201":62899,"1f202":62900,"1f21a":62906,"1f22f":62903,"1f232":62907,"1f233":62911,"1f234":62910,"1f235":62915,"1f236":62902,"1f237":62901,"1f238":62909,"1f239":62905,"1f23a":62914,"1f250":62904,"1f251":62908,"1f300":41010,"1f301":4857,"1f302":41012,"1f303":4858,"1f304":4860,"1f305":4861,"1f306":4862,"1f307":4863,"1f308":41011,"1f309":4864,"1f30a":41023,"1f30b":4815,"1f30c":4997,"1f30d":4806,"1f30e":4807,"1f30f":4808,"1f310":4809,"1f311":4977,"1f312":4978,"1f313":4979,"1f314":4980,"1f315":4981,"1f316":4982,"1f317":4983,"1f318":4984,"1f319":4985,"1f31a":4986,"1f31b":4987,"1f31c":4988,"1f31d":4991,"1f31e":4992,"1f31f":4995,"1f320":4996,"1f321":4989,"1f324":41001,"1f325":41002,"1f326":41003,"1f327":41004,"1f328":41005,"1f329":41006,"1f32a":41007,"1f32b":41008,"1f32c":41009,"1f32d":3725,"1f32e":3727,"1f32f":3728,"1f330":3708,"1f331":2659,"1f332":2661,"1f333":2662,"1f334":2663,"1f335":2664,"1f336":3698,"1f337":2658,"1f338":2649,"1f339":2653,"1f33a":2655,"1f33b":2656,"1f33c":2657,"1f33d":3697,"1f33e":2665,"1f33f":2666,"1f340":2668,"1f341":2669,"1f342":2670,"1f343":2671,"1f344":3705,"1f345":3690,"1f346":3694,"1f347":3674,"1f348":3675,"1f349":3676,"1f34a":3677,"1f34b":3678,"1f34c":3679,"1f34d":3680,"1f34e":3682,"1f34f":3683,"1f350":3684,"1f351":3685,"1f352":3686,"1f353":3687,"1f354":3722,"1f355":3724,"1f356":3718,"1f357":3719,"1f358":3744,"1f359":3745,"1f35a":3746,"1f35b":3747,"1f35c":3748,"1f35d":3749,"1f35e":3709,"1f35f":3723,"1f360":3750,"1f361":3756,"1f362":3751,"1f363":3752,"1f364":3753,"1f365":3754,"1f366":3765,"1f367":3766,"1f368":3767,"1f369":3768,"1f36a":3769,"1f36b":3774,"1f36c":3775,"1f36d":3776,"1f36e":3777,"1f36f":3778,"1f370":3771,"1f371":3743,"1f372":3735,"1f373":3733,"1f374":3801,"1f375":3783,"1f376":3784,"1f377":3786,"1f378":3787,"1f379":3788,"1f37a":3789,"1f37b":3790,"1f37c":3779,"1f37d":3800,"1f37e":3785,"1f37f":3739,"1f380":51040,"1f381":51041,"1f382":3770,"1f383":51024,"1f384":51025,"1f385":1527,"1f386":51026,"1f387":51027,"1f388":51030,"1f389":51031,"1f38a":51032,"1f38b":51033,"1f38c":71588,"1f38d":51034,"1f38e":51035,"1f38f":51036,"1f390":51037,"1f391":51038,"1f392":61134,"1f393":61147,"1f396":51045,"1f397":51042,"1f399":61167,"1f39a":61168,"1f39b":61169,"1f39e":61203,"1f39f":51043,"1f3a0":4866,"1f3a1":4868,"1f3a2":4869,"1f3a3":51072,"1f3a4":61170,"1f3a5":61202,"1f3a6":62819,"1f3a7":61171,"1f3a8":51105,"1f3a9":61146,"1f3aa":4871,"1f3ab":51044,"1f3ac":61205,"1f3ad":51103,"1f3ae":51086,"1f3af":51078,"1f3b0":51088,"1f3b1":51081,"1f3b2":51089,"1f3b3":51060,"1f3b4":51102,"1f3b5":61165,"1f3b6":61166,"1f3b7":61173,"1f3b8":61175,"1f3b9":61176,"1f3ba":61177,"1f3bb":61178,"1f3bc":61164,"1f3bd":51074,"1f3be":51058,"1f3bf":51075,"1f3c0":51054,"1f3c1":71586,"1f3c2":1600,"1f3c3-200d-2640":1584,"1f3c3-200d-2642":1583,"1f3c3":1582,"1f3c4-200d-2640":1606,"1f3c4-200d-2642":1605,"1f3c4":1604,"1f3c5":51047,"1f3c6":51046,"1f3c7":1598,"1f3c8":51056,"1f3c9":51057,"1f3ca-200d-2640":1612,"1f3ca-200d-2642":1611,"1f3ca":1610,"1f3cb-200d-2640":1618,"1f3cb-200d-2642":1617,"1f3cb":1616,"1f3cc-200d-2640":1603,"1f3cc-200d-2642":1602,"1f3cc":1601,"1f3cd":4902,"1f3ce":4901,"1f3cf":51061,"1f3d0":51055,"1f3d1":51062,"1f3d2":51063,"1f3d3":51065,"1f3d4":4813,"1f3d5":4817,"1f3d6":4818,"1f3d7":4824,"1f3d8":4829,"1f3d9":4859,"1f3da":4830,"1f3db":4823,"1f3dc":4819,"1f3dd":4820,"1f3de":4821,"1f3df":4822,"1f3e0":4831,"1f3e1":4832,"1f3e2":4833,"1f3e3":4834,"1f3e4":4835,"1f3e5":4836,"1f3e6":4837,"1f3e7":62729,"1f3e8":4838,"1f3e9":4839,"1f3ea":4840,"1f3eb":4841,"1f3ec":4842,"1f3ed":4843,"1f3ee":61216,"1f3ef":4844,"1f3f0":4845,"1f3f3-200d-1f308":71591,"1f3f3-200d-26a7":71592,"1f3f3":71590,"1f3f4-200d-2620":71593,"1f3f4-e0067-e0062-e0065-e006e-e0067-e007f":71852,"1f3f4-e0067-e0062-e0073-e0063-e0074-e007f":71853,"1f3f4-e0067-e0062-e0077-e006c-e0073-e007f":71854,"1f3f4":71589,"1f3f5":2652,"1f3f7":61234,"1f3f8":51066,"1f3f9":61303,"1f3fa":3805,"1f3fb":9525,"1f3fc":9526,"1f3fd":9527,"1f3fe":9528,"1f3ff":9529,"1f400":2576,"1f401":2575,"1f402":2556,"1f403":2557,"1f404":2558,"1f405":2547,"1f406":2548,"1f407":2579,"1f408-200d-2b1b":2544,"1f408":2543,"1f409":2618,"1f40a":2613,"1f40b":2622,"1f40c":2632,"1f40d":2616,"1f40e":2550,"1f40f":2563,"1f410":2565,"1f411":2564,"1f412":2531,"1f413":2596,"1f414":2595,"1f415-200d-1f9ba":2537,"1f415":2535,"1f416":2560,"1f417":2561,"1f418":2570,"1f419":2629,"1f41a":2630,"1f41b":2634,"1f41c":2635,"1f41d":2636,"1f41e":2638,"1f41f":2625,"1f420":2626,"1f421":2627,"1f422":2614,"1f423":2597,"1f424":2598,"1f425":2599,"1f426":2600,"1f427":2601,"1f428":2586,"1f429":2538,"1f42a":2566,"1f42b":2567,"1f42c":2623,"1f42d":2574,"1f42e":2555,"1f42f":2546,"1f430":2578,"1f431":2542,"1f432":2617,"1f433":2621,"1f434":2549,"1f435":2530,"1f436":2534,"1f437":2559,"1f438":2612,"1f439":2577,"1f43a":2539,"1f43b-200d-2744":2585,"1f43b":2584,"1f43c":2587,"1f43d":2562,"1f43e":2593,"1f43f":2580,"1f440":1381,"1f441-200d-1f5e8":1159,"1f441":1382,"1f442":1373,"1f443":1375,"1f444":1384,"1f445":1383,"1f446":1347,"1f447":1349,"1f448":1345,"1f449":1346,"1f44a":1355,"1f44b":1327,"1f44c":1336,"1f44d":1352,"1f44e":1353,"1f44f":1358,"1f450":1361,"1f451":61144,"1f452":61145,"1f453":61110,"1f454":61115,"1f455":61116,"1f456":61117,"1f457":61122,"1f458":61123,"1f459":61128,"1f45a":61129,"1f45b":61130,"1f45c":61131,"1f45d":61132,"1f45e":61136,"1f45f":61137,"1f460":61140,"1f461":61141,"1f462":61143,"1f463":1687,"1f464":1684,"1f465":1685,"1f466":1388,"1f467":1389,"1f468-200d-1f33e":1457,"1f468-200d-1f373":1460,"1f468-200d-1f37c":1524,"1f468-200d-1f393":1448,"1f468-200d-1f3a4":1478,"1f468-200d-1f3a8":1481,"1f468-200d-1f3eb":1451,"1f468-200d-1f3ed":1466,"1f468-200d-1f466-200d-1f466":1674,"1f468-200d-1f466":1673,"1f468-200d-1f467-200d-1f466":1676,"1f468-200d-1f467-200d-1f467":1677,"1f468-200d-1f467":1675,"1f468-200d-1f468-200d-1f466":1663,"1f468-200d-1f468-200d-1f466-200d-1f466":1666,"1f468-200d-1f468-200d-1f467":1664,"1f468-200d-1f468-200d-1f467-200d-1f466":1665,"1f468-200d-1f468-200d-1f467-200d-1f467":1667,"1f468-200d-1f469-200d-1f466":1658,"1f468-200d-1f469-200d-1f466-200d-1f466":1661,"1f468-200d-1f469-200d-1f467":1659,"1f468-200d-1f469-200d-1f467-200d-1f466":1660,"1f468-200d-1f469-200d-1f467-200d-1f467":1662,"1f468-200d-1f4bb":1475,"1f468-200d-1f4bc":1469,"1f468-200d-1f527":1463,"1f468-200d-1f52c":1472,"1f468-200d-1f680":1487,"1f468-200d-1f692":1490,"1f468-200d-1f9af":1574,"1f468-200d-1f9b0":1396,"1f468-200d-1f9b1":1397,"1f468-200d-1f9b2":1399,"1f468-200d-1f9b3":1398,"1f468-200d-1f9bc":1577,"1f468-200d-1f9bd":1580,"1f468-200d-2695":1445,"1f468-200d-2696":1454,"1f468-200d-2708":1484,"1f468-200d-2764-200d-1f468":1655,"1f468-200d-2764-200d-1f48b-200d-1f468":1651,"1f468":1392,"1f469-200d-1f33e":1458,"1f469-200d-1f373":1461,"1f469-200d-1f37c":1523,"1f469-200d-1f393":1449,"1f469-200d-1f3a4":1479,"1f469-200d-1f3a8":1482,"1f469-200d-1f3eb":1452,"1f469-200d-1f3ed":1467,"1f469-200d-1f466-200d-1f466":1679,"1f469-200d-1f466":1678,"1f469-200d-1f467-200d-1f466":1681,"1f469-200d-1f467-200d-1f467":1682,"1f469-200d-1f467":1680,"1f469-200d-1f469-200d-1f466":1668,"1f469-200d-1f469-200d-1f466-200d-1f466":1671,"1f469-200d-1f469-200d-1f467":1669,"1f469-200d-1f469-200d-1f467-200d-1f466":1670,"1f469-200d-1f469-200d-1f467-200d-1f467":1672,"1f469-200d-1f4bb":1476,"1f469-200d-1f4bc":1470,"1f469-200d-1f527":1464,"1f469-200d-1f52c":1473,"1f469-200d-1f680":1488,"1f469-200d-1f692":1491,"1f469-200d-1f9af":1575,"1f469-200d-1f9b0":1401,"1f469-200d-1f9b1":1403,"1f469-200d-1f9b2":1407,"1f469-200d-1f9b3":1405,"1f469-200d-1f9bc":1578,"1f469-200d-1f9bd":1581,"1f469-200d-2695":1446,"1f469-200d-2696":1455,"1f469-200d-2708":1485,"1f469-200d-2764-200d-1f468":1654,"1f469-200d-2764-200d-1f469":1656,"1f469-200d-2764-200d-1f48b-200d-1f468":1650,"1f469-200d-2764-200d-1f48b-200d-1f469":1652,"1f469":1400,"1f46a":1657,"1f46b":1647,"1f46c":1648,"1f46d":1646,"1f46e-200d-2640":1494,"1f46e-200d-2642":1493,"1f46e":1492,"1f46f-200d-2640":1590,"1f46f-200d-2642":1589,"1f46f":1588,"1f470-200d-2640":1518,"1f470-200d-2642":1517,"1f470":1516,"1f471-200d-2640":1409,"1f471-200d-2642":1410,"1f471":1391,"1f472":1511,"1f473-200d-2640":1510,"1f473-200d-2642":1509,"1f473":1508,"1f474":1412,"1f475":1413,"1f476":1386,"1f477-200d-2640":1504,"1f477-200d-2642":1503,"1f477":1502,"1f478":1507,"1f479":1109,"1f47a":1110,"1f47b":1111,"1f47c":1526,"1f47d":1112,"1f47e":1113,"1f47f":1104,"1f480":1105,"1f481-200d-2640":1428,"1f481-200d-2642":1427,"1f481":1426,"1f482-200d-2640":1500,"1f482-200d-2642":1499,"1f482":1498,"1f483":1585,"1f484":61152,"1f485":1366,"1f486-200d-2640":1560,"1f486-200d-2642":1559,"1f486":1558,"1f487-200d-2640":1563,"1f487-200d-2642":1562,"1f487":1561,"1f488":4870,"1f489":61326,"1f48a":61328,"1f48b":1127,"1f48c":1128,"1f48d":61153,"1f48e":61154,"1f48f":1649,"1f490":2648,"1f491":1653,"1f492":4846,"1f493":1133,"1f494":1138,"1f495":1135,"1f496":1131,"1f497":1132,"1f498":1129,"1f499":1145,"1f49a":1144,"1f49b":1143,"1f49c":1146,"1f49d":1130,"1f49e":1134,"1f49f":1136,"1f4a0":62946,"1f4a1":61214,"1f4a2":1151,"1f4a3":1157,"1f4a4":1163,"1f4a5":1152,"1f4a6":1154,"1f4a7":41022,"1f4a8":1155,"1f4a9":1107,"1f4aa":1368,"1f4ab":1153,"1f4ac":1158,"1f4ad":1162,"1f4ae":2650,"1f4af":1150,"1f4b0":61235,"1f4b1":62841,"1f4b2":62842,"1f4b3":61242,"1f4b4":61237,"1f4b5":61238,"1f4b6":61239,"1f4b7":61240,"1f4b8":61241,"1f4b9":61244,"1f4ba":4936,"1f4bb":61191,"1f4bc":61265,"1f4bd":61197,"1f4be":61198,"1f4bf":61199,"1f4c0":61200,"1f4c1":61266,"1f4c2":61267,"1f4c3":61227,"1f4c4":61229,"1f4c5":61269,"1f4c6":61270,"1f4c7":61273,"1f4c8":61274,"1f4c9":61275,"1f4ca":61276,"1f4cb":61277,"1f4cc":61278,"1f4cd":61279,"1f4ce":61280,"1f4cf":61282,"1f4d0":61283,"1f4d1":61232,"1f4d2":61226,"1f4d3":61225,"1f4d4":61218,"1f4d5":61219,"1f4d6":61220,"1f4d7":61221,"1f4d8":61222,"1f4d9":61223,"1f4da":61224,"1f4db":62847,"1f4dc":61228,"1f4dd":61264,"1f4de":61185,"1f4df":61186,"1f4e0":61187,"1f4e1":61325,"1f4e2":61159,"1f4e3":61160,"1f4e4":61249,"1f4e5":61250,"1f4e6":61251,"1f4e7":61246,"1f4e8":61247,"1f4e9":61248,"1f4ea":61253,"1f4eb":61252,"1f4ec":61254,"1f4ed":61255,"1f4ee":61256,"1f4ef":61161,"1f4f0":61230,"1f4f1":61182,"1f4f2":61183,"1f4f3":62823,"1f4f4":62824,"1f4f5":62751,"1f4f6":62822,"1f4f7":61207,"1f4f8":61208,"1f4f9":61209,"1f4fa":61206,"1f4fb":61172,"1f4fc":61210,"1f4fd":61204,"1f4ff":61151,"1f500":62801,"1f501":62802,"1f502":62803,"1f503":62769,"1f504":62770,"1f505":62820,"1f506":62821,"1f507":61155,"1f508":61156,"1f509":61157,"1f50a":61158,"1f50b":61188,"1f50c":61190,"1f50d":61211,"1f50e":61212,"1f50f":61290,"1f510":61291,"1f511":61292,"1f512":61288,"1f513":61289,"1f514":61162,"1f515":61163,"1f516":61233,"1f517":61313,"1f518":62947,"1f519":62771,"1f51a":62772,"1f51b":62773,"1f51c":62774,"1f51d":62775,"1f51e":62752,"1f51f":62876,"1f520":62877,"1f521":62878,"1f522":62879,"1f523":62880,"1f524":62881,"1f525":41021,"1f526":61215,"1f527":61306,"1f528":61294,"1f529":61308,"1f52a":3803,"1f52b":61301,"1f52c":61323,"1f52d":61324,"1f52e":51082,"1f52f":62787,"1f530":62848,"1f531":62846,"1f532":62949,"1f533":62948,"1f534":62916,"1f535":62920,"1f536":62940,"1f537":62941,"1f538":62942,"1f539":62943,"1f53a":62944,"1f53b":62945,"1f53c":62811,"1f53d":62813,"1f549":62778,"1f54a":2602,"1f54b":4854,"1f54c":4850,"1f54d":4852,"1f54e":62786,"1f550":4955,"1f551":4957,"1f552":4959,"1f553":4961,"1f554":4963,"1f555":4965,"1f556":4967,"1f557":4969,"1f558":4971,"1f559":4973,"1f55a":4975,"1f55b":4953,"1f55c":4956,"1f55d":4958,"1f55e":4960,"1f55f":4962,"1f560":4964,"1f561":4966,"1f562":4968,"1f563":4970,"1f564":4972,"1f565":4974,"1f566":4976,"1f567":4954,"1f56f":61213,"1f570":4952,"1f573":1156,"1f574":1587,"1f575-200d-2640":1497,"1f575-200d-2642":1496,"1f575":1495,"1f576":61111,"1f577":2641,"1f578":2642,"1f579":51087,"1f57a":1586,"1f587":61281,"1f58a":61261,"1f58b":61260,"1f58c":61262,"1f58d":61263,"1f590":1329,"1f595":1348,"1f596":1331,"1f5a4":1148,"1f5a5":61192,"1f5a8":61193,"1f5b1":61195,"1f5b2":61196,"1f5bc":51104,"1f5c2":61268,"1f5c3":61285,"1f5c4":61286,"1f5d1":61287,"1f5d2":61271,"1f5d3":61272,"1f5dc":61310,"1f5dd":61293,"1f5de":61231,"1f5e1":61299,"1f5e3":1683,"1f5e8":1160,"1f5ef":1161,"1f5f3":61257,"1f5fa":4810,"1f5fb":4816,"1f5fc":4847,"1f5fd":4848,"1f5fe":4811,"1f5ff":61362,"1f600":11,"1f601":14,"1f602":18,"1f603":12,"1f604":13,"1f605":16,"1f606":15,"1f607":114,"1f608":1103,"1f609":112,"1f60a":113,"1f60b":124,"1f60c":150,"1f60d":116,"1f60e":170,"1f60f":144,"1f610":139,"1f611":140,"1f612":145,"1f613":195,"1f614":151,"1f615":173,"1f616":192,"1f617":119,"1f618":118,"1f619":122,"1f61a":121,"1f61b":125,"1f61c":126,"1f61d":128,"1f61e":194,"1f61f":175,"1f620":1101,"1f621":1100,"1f622":189,"1f623":193,"1f624":199,"1f625":188,"1f626":184,"1f627":185,"1f628":186,"1f629":196,"1f62a":152,"1f62b":197,"1f62c":147,"1f62d":190,"1f62e-200d-1f4a8":148,"1f62e":178,"1f62f":179,"1f630":187,"1f631":191,"1f632":180,"1f633":181,"1f634":154,"1f635-200d-1f4ab":165,"1f635":164,"1f636-200d-1f32b":143,"1f636":141,"1f637":155,"1f638":1116,"1f639":1117,"1f63a":1115,"1f63b":1118,"1f63c":1119,"1f63d":1120,"1f63e":1123,"1f63f":1122,"1f640":1121,"1f641":176,"1f642":19,"1f643":110,"1f644":146,"1f645-200d-2640":1422,"1f645-200d-2642":1421,"1f645":1420,"1f646-200d-2640":1425,"1f646-200d-2642":1424,"1f646":1423,"1f647-200d-2640":1437,"1f647-200d-2642":1436,"1f647":1435,"1f648":1124,"1f649":1125,"1f64a":1126,"1f64b-200d-2640":1431,"1f64b-200d-2642":1430,"1f64b":1429,"1f64c":1359,"1f64d-200d-2640":1416,"1f64d-200d-2642":1415,"1f64d":1414,"1f64e-200d-2640":1419,"1f64e-200d-2642":1418,"1f64e":1417,"1f64f":1364,"1f680":4942,"1f681":4937,"1f682":4872,"1f683":4873,"1f684":4874,"1f685":4875,"1f686":4876,"1f687":4877,"1f688":4878,"1f689":4879,"1f68a":4880,"1f68b":4883,"1f68c":4884,"1f68d":4885,"1f68e":4886,"1f68f":4911,"1f690":4887,"1f691":4888,"1f692":4889,"1f693":4890,"1f694":4891,"1f695":4892,"1f696":4893,"1f697":4894,"1f698":4895,"1f699":4896,"1f69a":4898,"1f69b":4899,"1f69c":4900,"1f69d":4881,"1f69e":4882,"1f69f":4938,"1f6a0":4939,"1f6a1":4940,"1f6a2":4930,"1f6a3-200d-2640":1609,"1f6a3-200d-2642":1608,"1f6a3":1607,"1f6a4":4926,"1f6a5":4918,"1f6a6":4919,"1f6a7":4921,"1f6a8":4917,"1f6a9":71587,"1f6aa":61333,"1f6ab":62745,"1f6ac":61358,"1f6ad":62747,"1f6ae":62730,"1f6af":62748,"1f6b0":62731,"1f6b1":62749,"1f6b2":4907,"1f6b3":62746,"1f6b4-200d-2640":1621,"1f6b4-200d-2642":1620,"1f6b4":1619,"1f6b5-200d-2640":1624,"1f6b5-200d-2642":1623,"1f6b5":1622,"1f6b6-200d-2640":1566,"1f6b6-200d-2642":1565,"1f6b6":1564,"1f6b7":62750,"1f6b8":62743,"1f6b9":62733,"1f6ba":62734,"1f6bb":62735,"1f6bc":62736,"1f6bd":61340,"1f6be":62737,"1f6bf":61342,"1f6c0":1643,"1f6c1":61343,"1f6c2":62738,"1f6c3":62739,"1f6c4":62740,"1f6c5":62741,"1f6cb":61338,"1f6cc":1644,"1f6cd":61133,"1f6ce":4944,"1f6cf":61337,"1f6d0":62776,"1f6d1":4920,"1f6d2":61357,"1f6d5":4851,"1f6d6":4828,"1f6d7":61334,"1f6e0":61298,"1f6e1":61304,"1f6e2":4914,"1f6e3":4912,"1f6e4":4913,"1f6e5":4929,"1f6e9":4932,"1f6eb":4933,"1f6ec":4934,"1f6f0":4941,"1f6f3":4927,"1f6f4":4908,"1f6f5":4903,"1f6f6":4925,"1f6f7":51076,"1f6f8":4943,"1f6f9":4909,"1f6fa":4906,"1f6fb":4897,"1f6fc":4910,"1f7e0":62917,"1f7e1":62918,"1f7e2":62919,"1f7e3":62921,"1f7e4":62922,"1f7e5":62925,"1f7e6":62929,"1f7e7":62926,"1f7e8":62927,"1f7e9":62928,"1f7ea":62930,"1f7eb":62931,"1f90c":1337,"1f90d":1149,"1f90e":1147,"1f90f":1338,"1f910":137,"1f911":129,"1f912":156,"1f913":171,"1f914":135,"1f915":157,"1f916":1114,"1f917":130,"1f918":1343,"1f919":1344,"1f91a":1328,"1f91b":1356,"1f91c":1357,"1f91d":1363,"1f91e":1340,"1f91f":1342,"1f920":167,"1f921":1108,"1f922":158,"1f923":17,"1f924":153,"1f925":149,"1f926-200d-2640":1440,"1f926-200d-2642":1439,"1f926":1438,"1f927":160,"1f928":138,"1f929":117,"1f92a":127,"1f92b":134,"1f92c":1102,"1f92d":131,"1f92e":159,"1f92f":166,"1f930":1519,"1f931":1522,"1f932":1362,"1f933":1367,"1f934":1506,"1f935-200d-2640":1515,"1f935-200d-2642":1514,"1f935":1513,"1f936":1528,"1f937-200d-2640":1443,"1f937-200d-2642":1442,"1f937":1441,"1f938-200d-2640":1627,"1f938-200d-2642":1626,"1f938":1625,"1f939-200d-2640":1639,"1f939-200d-2642":1638,"1f939":1637,"1f93a":1597,"1f93c-200d-2640":1630,"1f93c-200d-2642":1629,"1f93c":1628,"1f93d-200d-2640":1633,"1f93d-200d-2642":1632,"1f93d":1631,"1f93e-200d-2640":1636,"1f93e-200d-2642":1635,"1f93e":1634,"1f93f":51073,"1f940":2654,"1f941":61180,"1f942":3791,"1f943":3792,"1f944":3802,"1f945":51069,"1f947":51048,"1f948":51049,"1f949":51050,"1f94a":51067,"1f94b":51068,"1f94c":51077,"1f94d":51064,"1f94e":51053,"1f94f":51059,"1f950":3710,"1f951":3693,"1f952":3700,"1f953":3721,"1f954":3695,"1f955":3696,"1f956":3711,"1f957":3738,"1f958":3734,"1f959":3730,"1f95a":3732,"1f95b":3780,"1f95c":3706,"1f95d":3689,"1f95e":3715,"1f95f":3757,"1f960":3758,"1f961":3759,"1f962":3799,"1f963":3737,"1f964":3794,"1f965":3692,"1f966":3702,"1f967":3773,"1f968":3713,"1f969":3720,"1f96a":3726,"1f96b":3742,"1f96c":3701,"1f96d":3681,"1f96e":3755,"1f96f":3714,"1f970":115,"1f971":198,"1f972":123,"1f973":168,"1f974":163,"1f975":161,"1f976":162,"1f977":1501,"1f978":169,"1f97a":182,"1f97b":61124,"1f97c":61113,"1f97d":61112,"1f97e":61138,"1f97f":61139,"1f980":3760,"1f981":2545,"1f982":2643,"1f983":2594,"1f984":2551,"1f985":2603,"1f986":2604,"1f987":2583,"1f988":2628,"1f989":2606,"1f98a":2540,"1f98b":2633,"1f98c":2553,"1f98d":2532,"1f98e":2615,"1f98f":2572,"1f990":3762,"1f991":3763,"1f992":2569,"1f993":2552,"1f994":2582,"1f995":2619,"1f996":2620,"1f997":2639,"1f998":2591,"1f999":2568,"1f99a":2610,"1f99b":2573,"1f99c":2611,"1f99d":2541,"1f99e":3761,"1f99f":2644,"1f9a0":2647,"1f9a1":2592,"1f9a2":2605,"1f9a3":2571,"1f9a4":2607,"1f9a5":2588,"1f9a6":2589,"1f9a7":2533,"1f9a8":2590,"1f9a9":2609,"1f9aa":3764,"1f9ab":2581,"1f9ac":2554,"1f9ad":2624,"1f9ae":2536,"1f9af":61312,"1f9b4":1380,"1f9b5":1371,"1f9b6":1372,"1f9b7":1379,"1f9b8-200d-2640":1532,"1f9b8-200d-2642":1531,"1f9b8":1530,"1f9b9-200d-2640":1535,"1f9b9-200d-2642":1534,"1f9b9":1533,"1f9ba":61114,"1f9bb":1374,"1f9bc":4905,"1f9bd":4904,"1f9be":1369,"1f9bf":1370,"1f9c0":3717,"1f9c1":3772,"1f9c2":3741,"1f9c3":3796,"1f9c4":3703,"1f9c5":3704,"1f9c6":3731,"1f9c7":3716,"1f9c8":3740,"1f9c9":3797,"1f9ca":3798,"1f9cb":3795,"1f9cd-200d-2640":1569,"1f9cd-200d-2642":1568,"1f9cd":1567,"1f9ce-200d-2640":1572,"1f9ce-200d-2642":1571,"1f9ce":1570,"1f9cf-200d-2640":1434,"1f9cf-200d-2642":1433,"1f9cf":1432,"1f9d0":172,"1f9d1-200d-1f33e":1456,"1f9d1-200d-1f373":1459,"1f9d1-200d-1f37c":1525,"1f9d1-200d-1f384":1529,"1f9d1-200d-1f393":1447,"1f9d1-200d-1f3a4":1477,"1f9d1-200d-1f3a8":1480,"1f9d1-200d-1f3eb":1450,"1f9d1-200d-1f3ed":1465,"1f9d1-200d-1f4bb":1474,"1f9d1-200d-1f4bc":1468,"1f9d1-200d-1f527":1462,"1f9d1-200d-1f52c":1471,"1f9d1-200d-1f680":1486,"1f9d1-200d-1f692":1489,"1f9d1-200d-1f91d-200d-1f9d1":1645,"1f9d1-200d-1f9af":1573,"1f9d1-200d-1f9b0":1402,"1f9d1-200d-1f9b1":1404,"1f9d1-200d-1f9b2":1408,"1f9d1-200d-1f9b3":1406,"1f9d1-200d-1f9bc":1576,"1f9d1-200d-1f9bd":1579,"1f9d1-200d-2695":1444,"1f9d1-200d-2696":1453,"1f9d1-200d-2708":1483,"1f9d1":1390,"1f9d2":1387,"1f9d3":1411,"1f9d4-200d-2640":1395,"1f9d4-200d-2642":1394,"1f9d4":1393,"1f9d5":1512,"1f9d6-200d-2640":1593,"1f9d6-200d-2642":1592,"1f9d6":1591,"1f9d7-200d-2640":1596,"1f9d7-200d-2642":1595,"1f9d7":1594,"1f9d8-200d-2640":1642,"1f9d8-200d-2642":1641,"1f9d8":1640,"1f9d9-200d-2640":1538,"1f9d9-200d-2642":1537,"1f9d9":1536,"1f9da-200d-2640":1541,"1f9da-200d-2642":1540,"1f9da":1539,"1f9db-200d-2640":1544,"1f9db-200d-2642":1543,"1f9db":1542,"1f9dc-200d-2640":1547,"1f9dc-200d-2642":1546,"1f9dc":1545,"1f9dd-200d-2640":1550,"1f9dd-200d-2642":1549,"1f9dd":1548,"1f9de-200d-2640":1553,"1f9de-200d-2642":1552,"1f9de":1551,"1f9df-200d-2640":1556,"1f9df-200d-2642":1555,"1f9df":1554,"1f9e0":1376,"1f9e1":1142,"1f9e2":61148,"1f9e3":61118,"1f9e4":61119,"1f9e5":61120,"1f9e6":61121,"1f9e7":51039,"1f9e8":51028,"1f9e9":51090,"1f9ea":61320,"1f9eb":61321,"1f9ec":61322,"1f9ed":4812,"1f9ee":61201,"1f9ef":61356,"1f9f0":61316,"1f9f1":4825,"1f9f2":61317,"1f9f3":4945,"1f9f4":61346,"1f9f5":51106,"1f9f6":51108,"1f9f7":61347,"1f9f8":51091,"1f9f9":61348,"1f9fa":61349,"1f9fb":61350,"1f9fc":61352,"1f9fd":61355,"1f9fe":61243,"1f9ff":51084,"1fa70":61142,"1fa71":61125,"1fa72":61126,"1fa73":61127,"1fa74":61135,"1fa78":61327,"1fa79":61329,"1fa7a":61331,"1fa80":51079,"1fa81":51080,"1fa82":4935,"1fa83":61302,"1fa84":51083,"1fa85":51092,"1fa86":51094,"1fa90":4993,"1fa91":61339,"1fa92":61345,"1fa93":61295,"1fa94":61217,"1fa95":61179,"1fa96":61149,"1fa97":61174,"1fa98":61181,"1fa99":61236,"1fa9a":61305,"1fa9b":61307,"1fa9c":61318,"1fa9d":61315,"1fa9e":61335,"1fa9f":61336,"1faa0":61341,"1faa1":51107,"1faa2":51109,"1faa3":61351,"1faa4":61344,"1faa5":61354,"1faa6":61360,"1faa7":61363,"1faa8":4826,"1fab0":2645,"1fab1":2646,"1fab2":2637,"1fab3":2640,"1fab4":2660,"1fab5":4827,"1fab6":2608,"1fac0":1377,"1fac1":1378,"1fac2":1686,"1fad0":3688,"1fad1":3699,"1fad2":3691,"1fad3":3712,"1fad4":3729,"1fad5":3736,"1fad6":3782,"203c":62834,"21a9":62765,"21aa":62766,"231a":4948,"231b":4946,"23cf":62818,"23e9":62805,"23ea":62809,"23eb":62812,"23ec":62814,"23ed":62806,"23ee":62810,"23ef":62807,"23f0":4949,"23f1":4950,"23f2":4951,"23f3":4947,"23f8":62815,"23f9":62816,"23fa":62817,"24c2":62890,"25aa":62938,"25ab":62939,"25b6":62804,"25c0":62808,"25fb":62935,"25fc":62934,"25fd":62937,"25fe":62936,"260e":61184,"261d":1350,"262a":62784,"262e":62785,"262f":62781,"263a":120,"264a":62790,"264b":62791,"264c":62792,"264d":62793,"264e":62794,"264f":62795,"265f":51099,"267b":62844,"267e":62833,"267f":62732,"269b":62777,"269c":62845,"26a0":62742,"26a1":41016,"26a7":62827,"26aa":62924,"26ab":62923,"26b0":61359,"26b1":61361,"26bd":51051,"26be":51052,"26c4":41019,"26c5":4999,"26c8":41e3,"26ce":62800,"26cf":61296,"26d1":61150,"26d3":61314,"26d4":62744,"26e9":4853,"26ea":4849,"26f0":4814,"26f1":41015,"26f2":4855,"26f3":51070,"26f4":4928,"26f5":4924,"26f7":1599,"26f8":51071,"26f9-200d-2640":1615,"26f9-200d-2642":1614,"26f9":1613,"26fa":4856,"26fd":4915,"270a":1354,"270b":1330,"270c":1339,"270d":1365,"270f":61258,"271d":62782,"274c":62853,"274e":62854,"2764-200d-1f525":1139,"2764-200d-1fa79":1140,"27a1":62757,"27b0":62855,"27bf":62856,"2b05":62761,"2b06":62755,"2b07":62759,"2b1b":62932,"2b1c":62933,"2b50":4994,"2b55":62849,"303d":62857,"1f385-1f3fb":0,"1f385-1f3fc":0,"1f385-1f3fd":0,"1f385-1f3fe":0,"1f385-1f3ff":0,"1f3c2-1f3fb":0,"1f3c2-1f3fc":0,"1f3c2-1f3fd":0,"1f3c2-1f3fe":0,"1f3c2-1f3ff":0,"1f3c3-1f3fb-200d-2640":0,"1f3c3-1f3fc-200d-2640":0,"1f3c3-1f3fd-200d-2640":0,"1f3c3-1f3fe-200d-2640":0,"1f3c3-1f3ff-200d-2640":0,"1f3c3-1f3fb-200d-2642":0,"1f3c3-1f3fc-200d-2642":0,"1f3c3-1f3fd-200d-2642":0,"1f3c3-1f3fe-200d-2642":0,"1f3c3-1f3ff-200d-2642":0,"1f3c3-1f3fb":0,"1f3c3-1f3fc":0,"1f3c3-1f3fd":0,"1f3c3-1f3fe":0,"1f3c3-1f3ff":0,"1f3c4-1f3fb-200d-2640":0,"1f3c4-1f3fc-200d-2640":0,"1f3c4-1f3fd-200d-2640":0,"1f3c4-1f3fe-200d-2640":0,"1f3c4-1f3ff-200d-2640":0,"1f3c4-1f3fb-200d-2642":0,"1f3c4-1f3fc-200d-2642":0,"1f3c4-1f3fd-200d-2642":0,"1f3c4-1f3fe-200d-2642":0,"1f3c4-1f3ff-200d-2642":0,"1f3c4-1f3fb":0,"1f3c4-1f3fc":0,"1f3c4-1f3fd":0,"1f3c4-1f3fe":0,"1f3c4-1f3ff":0,"1f3c7-1f3fb":0,"1f3c7-1f3fc":0,"1f3c7-1f3fd":0,"1f3c7-1f3fe":0,"1f3c7-1f3ff":0,"1f3ca-1f3fb-200d-2640":0,"1f3ca-1f3fc-200d-2640":0,"1f3ca-1f3fd-200d-2640":0,"1f3ca-1f3fe-200d-2640":0,"1f3ca-1f3ff-200d-2640":0,"1f3ca-1f3fb-200d-2642":0,"1f3ca-1f3fc-200d-2642":0,"1f3ca-1f3fd-200d-2642":0,"1f3ca-1f3fe-200d-2642":0,"1f3ca-1f3ff-200d-2642":0,"1f3ca-1f3fb":0,"1f3ca-1f3fc":0,"1f3ca-1f3fd":0,"1f3ca-1f3fe":0,"1f3ca-1f3ff":0,"1f3cb-1f3fb-200d-2640":0,"1f3cb-1f3fc-200d-2640":0,"1f3cb-1f3fd-200d-2640":0,"1f3cb-1f3fe-200d-2640":0,"1f3cb-1f3ff-200d-2640":0,"1f3cb-1f3fb-200d-2642":0,"1f3cb-1f3fc-200d-2642":0,"1f3cb-1f3fd-200d-2642":0,"1f3cb-1f3fe-200d-2642":0,"1f3cb-1f3ff-200d-2642":0,"1f3cb-1f3fb":0,"1f3cb-1f3fc":0,"1f3cb-1f3fd":0,"1f3cb-1f3fe":0,"1f3cb-1f3ff":0,"1f3cc-1f3fb-200d-2640":0,"1f3cc-1f3fc-200d-2640":0,"1f3cc-1f3fd-200d-2640":0,"1f3cc-1f3fe-200d-2640":0,"1f3cc-1f3ff-200d-2640":0,"1f3cc-1f3fb-200d-2642":0,"1f3cc-1f3fc-200d-2642":0,"1f3cc-1f3fd-200d-2642":0,"1f3cc-1f3fe-200d-2642":0,"1f3cc-1f3ff-200d-2642":0,"1f3cc-1f3fb":0,"1f3cc-1f3fc":0,"1f3cc-1f3fd":0,"1f3cc-1f3fe":0,"1f3cc-1f3ff":0,"1f442-1f3fb":0,"1f442-1f3fc":0,"1f442-1f3fd":0,"1f442-1f3fe":0,"1f442-1f3ff":0,"1f443-1f3fb":0,"1f443-1f3fc":0,"1f443-1f3fd":0,"1f443-1f3fe":0,"1f443-1f3ff":0,"1f446-1f3fb":0,"1f446-1f3fc":0,"1f446-1f3fd":0,"1f446-1f3fe":0,"1f446-1f3ff":0,"1f447-1f3fb":0,"1f447-1f3fc":0,"1f447-1f3fd":0,"1f447-1f3fe":0,"1f447-1f3ff":0,"1f448-1f3fb":0,"1f448-1f3fc":0,"1f448-1f3fd":0,"1f448-1f3fe":0,"1f448-1f3ff":0,"1f449-1f3fb":0,"1f449-1f3fc":0,"1f449-1f3fd":0,"1f449-1f3fe":0,"1f449-1f3ff":0,"1f44a-1f3fb":0,"1f44a-1f3fc":0,"1f44a-1f3fd":0,"1f44a-1f3fe":0,"1f44a-1f3ff":0,"1f44b-1f3fb":0,"1f44b-1f3fc":0,"1f44b-1f3fd":0,"1f44b-1f3fe":0,"1f44b-1f3ff":0,"1f44c-1f3fb":0,"1f44c-1f3fc":0,"1f44c-1f3fd":0,"1f44c-1f3fe":0,"1f44c-1f3ff":0,"1f44d-1f3fb":0,"1f44d-1f3fc":0,"1f44d-1f3fd":0,"1f44d-1f3fe":0,"1f44d-1f3ff":0,"1f44e-1f3fb":0,"1f44e-1f3fc":0,"1f44e-1f3fd":0,"1f44e-1f3fe":0,"1f44e-1f3ff":0,"1f44f-1f3fb":0,"1f44f-1f3fc":0,"1f44f-1f3fd":0,"1f44f-1f3fe":0,"1f44f-1f3ff":0,"1f450-1f3fb":0,"1f450-1f3fc":0,"1f450-1f3fd":0,"1f450-1f3fe":0,"1f450-1f3ff":0,"1f466-1f3fb":0,"1f466-1f3fc":0,"1f466-1f3fd":0,"1f466-1f3fe":0,"1f466-1f3ff":0,"1f467-1f3fb":0,"1f467-1f3fc":0,"1f467-1f3fd":0,"1f467-1f3fe":0,"1f467-1f3ff":0,"1f468-1f3fb-200d-1f33e":0,"1f468-1f3fc-200d-1f33e":0,"1f468-1f3fd-200d-1f33e":0,"1f468-1f3fe-200d-1f33e":0,"1f468-1f3ff-200d-1f33e":0,"1f468-1f3fb-200d-1f373":0,"1f468-1f3fc-200d-1f373":0,"1f468-1f3fd-200d-1f373":0,"1f468-1f3fe-200d-1f373":0,"1f468-1f3ff-200d-1f373":0,"1f468-1f3fb-200d-1f37c":0,"1f468-1f3fc-200d-1f37c":0,"1f468-1f3fd-200d-1f37c":0,"1f468-1f3fe-200d-1f37c":0,"1f468-1f3ff-200d-1f37c":0,"1f468-1f3fb-200d-1f393":0,"1f468-1f3fc-200d-1f393":0,"1f468-1f3fd-200d-1f393":0,"1f468-1f3fe-200d-1f393":0,"1f468-1f3ff-200d-1f393":0,"1f468-1f3fb-200d-1f3a4":0,"1f468-1f3fc-200d-1f3a4":0,"1f468-1f3fd-200d-1f3a4":0,"1f468-1f3fe-200d-1f3a4":0,"1f468-1f3ff-200d-1f3a4":0,"1f468-1f3fb-200d-1f3a8":0,"1f468-1f3fc-200d-1f3a8":0,"1f468-1f3fd-200d-1f3a8":0,"1f468-1f3fe-200d-1f3a8":0,"1f468-1f3ff-200d-1f3a8":0,"1f468-1f3fb-200d-1f3eb":0,"1f468-1f3fc-200d-1f3eb":0,"1f468-1f3fd-200d-1f3eb":0,"1f468-1f3fe-200d-1f3eb":0,"1f468-1f3ff-200d-1f3eb":0,"1f468-1f3fb-200d-1f3ed":0,"1f468-1f3fc-200d-1f3ed":0,"1f468-1f3fd-200d-1f3ed":0,"1f468-1f3fe-200d-1f3ed":0,"1f468-1f3ff-200d-1f3ed":0,"1f468-1f3fb-200d-1f4bb":0,"1f468-1f3fc-200d-1f4bb":0,"1f468-1f3fd-200d-1f4bb":0,"1f468-1f3fe-200d-1f4bb":0,"1f468-1f3ff-200d-1f4bb":0,"1f468-1f3fb-200d-1f4bc":0,"1f468-1f3fc-200d-1f4bc":0,"1f468-1f3fd-200d-1f4bc":0,"1f468-1f3fe-200d-1f4bc":0,"1f468-1f3ff-200d-1f4bc":0,"1f468-1f3fb-200d-1f527":0,"1f468-1f3fc-200d-1f527":0,"1f468-1f3fd-200d-1f527":0,"1f468-1f3fe-200d-1f527":0,"1f468-1f3ff-200d-1f527":0,"1f468-1f3fb-200d-1f52c":0,"1f468-1f3fc-200d-1f52c":0,"1f468-1f3fd-200d-1f52c":0,"1f468-1f3fe-200d-1f52c":0,"1f468-1f3ff-200d-1f52c":0,"1f468-1f3fb-200d-1f680":0,"1f468-1f3fc-200d-1f680":0,"1f468-1f3fd-200d-1f680":0,"1f468-1f3fe-200d-1f680":0,"1f468-1f3ff-200d-1f680":0,"1f468-1f3fb-200d-1f692":0,"1f468-1f3fc-200d-1f692":0,"1f468-1f3fd-200d-1f692":0,"1f468-1f3fe-200d-1f692":0,"1f468-1f3ff-200d-1f692":0,"1f468-1f3fb-200d-1f9af":0,"1f468-1f3fc-200d-1f9af":0,"1f468-1f3fd-200d-1f9af":0,"1f468-1f3fe-200d-1f9af":0,"1f468-1f3ff-200d-1f9af":0,"1f468-1f3fb-200d-1f9b0":0,"1f468-1f3fc-200d-1f9b0":0,"1f468-1f3fd-200d-1f9b0":0,"1f468-1f3fe-200d-1f9b0":0,"1f468-1f3ff-200d-1f9b0":0,"1f468-1f3fb-200d-1f9b1":0,"1f468-1f3fc-200d-1f9b1":0,"1f468-1f3fd-200d-1f9b1":0,"1f468-1f3fe-200d-1f9b1":0,"1f468-1f3ff-200d-1f9b1":0,"1f468-1f3fb-200d-1f9b2":0,"1f468-1f3fc-200d-1f9b2":0,"1f468-1f3fd-200d-1f9b2":0,"1f468-1f3fe-200d-1f9b2":0,"1f468-1f3ff-200d-1f9b2":0,"1f468-1f3fb-200d-1f9b3":0,"1f468-1f3fc-200d-1f9b3":0,"1f468-1f3fd-200d-1f9b3":0,"1f468-1f3fe-200d-1f9b3":0,"1f468-1f3ff-200d-1f9b3":0,"1f468-1f3fb-200d-1f9bc":0,"1f468-1f3fc-200d-1f9bc":0,"1f468-1f3fd-200d-1f9bc":0,"1f468-1f3fe-200d-1f9bc":0,"1f468-1f3ff-200d-1f9bc":0,"1f468-1f3fb-200d-1f9bd":0,"1f468-1f3fc-200d-1f9bd":0,"1f468-1f3fd-200d-1f9bd":0,"1f468-1f3fe-200d-1f9bd":0,"1f468-1f3ff-200d-1f9bd":0,"1f468-1f3fb-200d-2695":0,"1f468-1f3fc-200d-2695":0,"1f468-1f3fd-200d-2695":0,"1f468-1f3fe-200d-2695":0,"1f468-1f3ff-200d-2695":0,"1f468-1f3fb-200d-2696":0,"1f468-1f3fc-200d-2696":0,"1f468-1f3fd-200d-2696":0,"1f468-1f3fe-200d-2696":0,"1f468-1f3ff-200d-2696":0,"1f468-1f3fb-200d-2708":0,"1f468-1f3fc-200d-2708":0,"1f468-1f3fd-200d-2708":0,"1f468-1f3fe-200d-2708":0,"1f468-1f3ff-200d-2708":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3fe-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3fe":0,"1f468-1f3ff-200d-2764-200d-1f468-1f3ff":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f468-1f3fb":0,"1f468-1f3fc":0,"1f468-1f3fd":0,"1f468-1f3fe":0,"1f468-1f3ff":0,"1f469-1f3fb-200d-1f33e":0,"1f469-1f3fc-200d-1f33e":0,"1f469-1f3fd-200d-1f33e":0,"1f469-1f3fe-200d-1f33e":0,"1f469-1f3ff-200d-1f33e":0,"1f469-1f3fb-200d-1f373":0,"1f469-1f3fc-200d-1f373":0,"1f469-1f3fd-200d-1f373":0,"1f469-1f3fe-200d-1f373":0,"1f469-1f3ff-200d-1f373":0,"1f469-1f3fb-200d-1f37c":0,"1f469-1f3fc-200d-1f37c":0,"1f469-1f3fd-200d-1f37c":0,"1f469-1f3fe-200d-1f37c":0,"1f469-1f3ff-200d-1f37c":0,"1f469-1f3fb-200d-1f393":0,"1f469-1f3fc-200d-1f393":0,"1f469-1f3fd-200d-1f393":0,"1f469-1f3fe-200d-1f393":0,"1f469-1f3ff-200d-1f393":0,"1f469-1f3fb-200d-1f3a4":0,"1f469-1f3fc-200d-1f3a4":0,"1f469-1f3fd-200d-1f3a4":0,"1f469-1f3fe-200d-1f3a4":0,"1f469-1f3ff-200d-1f3a4":0,"1f469-1f3fb-200d-1f3a8":0,"1f469-1f3fc-200d-1f3a8":0,"1f469-1f3fd-200d-1f3a8":0,"1f469-1f3fe-200d-1f3a8":0,"1f469-1f3ff-200d-1f3a8":0,"1f469-1f3fb-200d-1f3eb":0,"1f469-1f3fc-200d-1f3eb":0,"1f469-1f3fd-200d-1f3eb":0,"1f469-1f3fe-200d-1f3eb":0,"1f469-1f3ff-200d-1f3eb":0,"1f469-1f3fb-200d-1f3ed":0,"1f469-1f3fc-200d-1f3ed":0,"1f469-1f3fd-200d-1f3ed":0,"1f469-1f3fe-200d-1f3ed":0,"1f469-1f3ff-200d-1f3ed":0,"1f469-1f3fb-200d-1f4bb":0,"1f469-1f3fc-200d-1f4bb":0,"1f469-1f3fd-200d-1f4bb":0,"1f469-1f3fe-200d-1f4bb":0,"1f469-1f3ff-200d-1f4bb":0,"1f469-1f3fb-200d-1f4bc":0,"1f469-1f3fc-200d-1f4bc":0,"1f469-1f3fd-200d-1f4bc":0,"1f469-1f3fe-200d-1f4bc":0,"1f469-1f3ff-200d-1f4bc":0,"1f469-1f3fb-200d-1f527":0,"1f469-1f3fc-200d-1f527":0,"1f469-1f3fd-200d-1f527":0,"1f469-1f3fe-200d-1f527":0,"1f469-1f3ff-200d-1f527":0,"1f469-1f3fb-200d-1f52c":0,"1f469-1f3fc-200d-1f52c":0,"1f469-1f3fd-200d-1f52c":0,"1f469-1f3fe-200d-1f52c":0,"1f469-1f3ff-200d-1f52c":0,"1f469-1f3fb-200d-1f680":0,"1f469-1f3fc-200d-1f680":0,"1f469-1f3fd-200d-1f680":0,"1f469-1f3fe-200d-1f680":0,"1f469-1f3ff-200d-1f680":0,"1f469-1f3fb-200d-1f692":0,"1f469-1f3fc-200d-1f692":0,"1f469-1f3fd-200d-1f692":0,"1f469-1f3fe-200d-1f692":0,"1f469-1f3ff-200d-1f692":0,"1f469-1f3fb-200d-1f9af":0,"1f469-1f3fc-200d-1f9af":0,"1f469-1f3fd-200d-1f9af":0,"1f469-1f3fe-200d-1f9af":0,"1f469-1f3ff-200d-1f9af":0,"1f469-1f3fb-200d-1f9b0":0,"1f469-1f3fc-200d-1f9b0":0,"1f469-1f3fd-200d-1f9b0":0,"1f469-1f3fe-200d-1f9b0":0,"1f469-1f3ff-200d-1f9b0":0,"1f469-1f3fb-200d-1f9b1":0,"1f469-1f3fc-200d-1f9b1":0,"1f469-1f3fd-200d-1f9b1":0,"1f469-1f3fe-200d-1f9b1":0,"1f469-1f3ff-200d-1f9b1":0,"1f469-1f3fb-200d-1f9b2":0,"1f469-1f3fc-200d-1f9b2":0,"1f469-1f3fd-200d-1f9b2":0,"1f469-1f3fe-200d-1f9b2":0,"1f469-1f3ff-200d-1f9b2":0,"1f469-1f3fb-200d-1f9b3":0,"1f469-1f3fc-200d-1f9b3":0,"1f469-1f3fd-200d-1f9b3":0,"1f469-1f3fe-200d-1f9b3":0,"1f469-1f3ff-200d-1f9b3":0,"1f469-1f3fb-200d-1f9bc":0,"1f469-1f3fc-200d-1f9bc":0,"1f469-1f3fd-200d-1f9bc":0,"1f469-1f3fe-200d-1f9bc":0,"1f469-1f3ff-200d-1f9bc":0,"1f469-1f3fb-200d-1f9bd":0,"1f469-1f3fc-200d-1f9bd":0,"1f469-1f3fd-200d-1f9bd":0,"1f469-1f3fe-200d-1f9bd":0,"1f469-1f3ff-200d-1f9bd":0,"1f469-1f3fb-200d-2695":0,"1f469-1f3fc-200d-2695":0,"1f469-1f3fd-200d-2695":0,"1f469-1f3fe-200d-2695":0,"1f469-1f3ff-200d-2695":0,"1f469-1f3fb-200d-2696":0,"1f469-1f3fc-200d-2696":0,"1f469-1f3fd-200d-2696":0,"1f469-1f3fe-200d-2696":0,"1f469-1f3ff-200d-2696":0,"1f469-1f3fb-200d-2708":0,"1f469-1f3fc-200d-2708":0,"1f469-1f3fd-200d-2708":0,"1f469-1f3fe-200d-2708":0,"1f469-1f3ff-200d-2708":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f468-1f3ff":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f469-1f3ff":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fe":0,"1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3ff":0,"1f469-1f3fb":0,"1f469-1f3fc":0,"1f469-1f3fd":0,"1f469-1f3fe":0,"1f469-1f3ff":0,"1f46b-1f3fb":0,"1f46b-1f3fc":0,"1f46b-1f3fd":0,"1f46b-1f3fe":0,"1f46b-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46c-1f3fb":0,"1f46c-1f3fc":0,"1f46c-1f3fd":0,"1f46c-1f3fe":0,"1f46c-1f3ff":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe":0,"1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd":0,"1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe":0,"1f46d-1f3fb":0,"1f46d-1f3fc":0,"1f46d-1f3fd":0,"1f46d-1f3fe":0,"1f46d-1f3ff":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe":0,"1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd":0,"1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe":0,"1f46e-1f3fb-200d-2640":0,"1f46e-1f3fc-200d-2640":0,"1f46e-1f3fd-200d-2640":0,"1f46e-1f3fe-200d-2640":0,"1f46e-1f3ff-200d-2640":0,"1f46e-1f3fb-200d-2642":0,"1f46e-1f3fc-200d-2642":0,"1f46e-1f3fd-200d-2642":0,"1f46e-1f3fe-200d-2642":0,"1f46e-1f3ff-200d-2642":0,"1f46e-1f3fb":0,"1f46e-1f3fc":0,"1f46e-1f3fd":0,"1f46e-1f3fe":0,"1f46e-1f3ff":0,"1f470-1f3fb-200d-2640":0,"1f470-1f3fc-200d-2640":0,"1f470-1f3fd-200d-2640":0,"1f470-1f3fe-200d-2640":0,"1f470-1f3ff-200d-2640":0,"1f470-1f3fb-200d-2642":0,"1f470-1f3fc-200d-2642":0,"1f470-1f3fd-200d-2642":0,"1f470-1f3fe-200d-2642":0,"1f470-1f3ff-200d-2642":0,"1f470-1f3fb":0,"1f470-1f3fc":0,"1f470-1f3fd":0,"1f470-1f3fe":0,"1f470-1f3ff":0,"1f471-1f3fb-200d-2640":0,"1f471-1f3fc-200d-2640":0,"1f471-1f3fd-200d-2640":0,"1f471-1f3fe-200d-2640":0,"1f471-1f3ff-200d-2640":0,"1f471-1f3fb-200d-2642":0,"1f471-1f3fc-200d-2642":0,"1f471-1f3fd-200d-2642":0,"1f471-1f3fe-200d-2642":0,"1f471-1f3ff-200d-2642":0,"1f471-1f3fb":0,"1f471-1f3fc":0,"1f471-1f3fd":0,"1f471-1f3fe":0,"1f471-1f3ff":0,"1f472-1f3fb":0,"1f472-1f3fc":0,"1f472-1f3fd":0,"1f472-1f3fe":0,"1f472-1f3ff":0,"1f473-1f3fb-200d-2640":0,"1f473-1f3fc-200d-2640":0,"1f473-1f3fd-200d-2640":0,"1f473-1f3fe-200d-2640":0,"1f473-1f3ff-200d-2640":0,"1f473-1f3fb-200d-2642":0,"1f473-1f3fc-200d-2642":0,"1f473-1f3fd-200d-2642":0,"1f473-1f3fe-200d-2642":0,"1f473-1f3ff-200d-2642":0,"1f473-1f3fb":0,"1f473-1f3fc":0,"1f473-1f3fd":0,"1f473-1f3fe":0,"1f473-1f3ff":0,"1f474-1f3fb":0,"1f474-1f3fc":0,"1f474-1f3fd":0,"1f474-1f3fe":0,"1f474-1f3ff":0,"1f475-1f3fb":0,"1f475-1f3fc":0,"1f475-1f3fd":0,"1f475-1f3fe":0,"1f475-1f3ff":0,"1f476-1f3fb":0,"1f476-1f3fc":0,"1f476-1f3fd":0,"1f476-1f3fe":0,"1f476-1f3ff":0,"1f477-1f3fb-200d-2640":0,"1f477-1f3fc-200d-2640":0,"1f477-1f3fd-200d-2640":0,"1f477-1f3fe-200d-2640":0,"1f477-1f3ff-200d-2640":0,"1f477-1f3fb-200d-2642":0,"1f477-1f3fc-200d-2642":0,"1f477-1f3fd-200d-2642":0,"1f477-1f3fe-200d-2642":0,"1f477-1f3ff-200d-2642":0,"1f477-1f3fb":0,"1f477-1f3fc":0,"1f477-1f3fd":0,"1f477-1f3fe":0,"1f477-1f3ff":0,"1f478-1f3fb":0,"1f478-1f3fc":0,"1f478-1f3fd":0,"1f478-1f3fe":0,"1f478-1f3ff":0,"1f47c-1f3fb":0,"1f47c-1f3fc":0,"1f47c-1f3fd":0,"1f47c-1f3fe":0,"1f47c-1f3ff":0,"1f481-1f3fb-200d-2640":0,"1f481-1f3fc-200d-2640":0,"1f481-1f3fd-200d-2640":0,"1f481-1f3fe-200d-2640":0,"1f481-1f3ff-200d-2640":0,"1f481-1f3fb-200d-2642":0,"1f481-1f3fc-200d-2642":0,"1f481-1f3fd-200d-2642":0,"1f481-1f3fe-200d-2642":0,"1f481-1f3ff-200d-2642":0,"1f481-1f3fb":0,"1f481-1f3fc":0,"1f481-1f3fd":0,"1f481-1f3fe":0,"1f481-1f3ff":0,"1f482-1f3fb-200d-2640":0,"1f482-1f3fc-200d-2640":0,"1f482-1f3fd-200d-2640":0,"1f482-1f3fe-200d-2640":0,"1f482-1f3ff-200d-2640":0,"1f482-1f3fb-200d-2642":0,"1f482-1f3fc-200d-2642":0,"1f482-1f3fd-200d-2642":0,"1f482-1f3fe-200d-2642":0,"1f482-1f3ff-200d-2642":0,"1f482-1f3fb":0,"1f482-1f3fc":0,"1f482-1f3fd":0,"1f482-1f3fe":0,"1f482-1f3ff":0,"1f483-1f3fb":0,"1f483-1f3fc":0,"1f483-1f3fd":0,"1f483-1f3fe":0,"1f483-1f3ff":0,"1f485-1f3fb":0,"1f485-1f3fc":0,"1f485-1f3fd":0,"1f485-1f3fe":0,"1f485-1f3ff":0,"1f486-1f3fb-200d-2640":0,"1f486-1f3fc-200d-2640":0,"1f486-1f3fd-200d-2640":0,"1f486-1f3fe-200d-2640":0,"1f486-1f3ff-200d-2640":0,"1f486-1f3fb-200d-2642":0,"1f486-1f3fc-200d-2642":0,"1f486-1f3fd-200d-2642":0,"1f486-1f3fe-200d-2642":0,"1f486-1f3ff-200d-2642":0,"1f486-1f3fb":0,"1f486-1f3fc":0,"1f486-1f3fd":0,"1f486-1f3fe":0,"1f486-1f3ff":0,"1f487-1f3fb-200d-2640":0,"1f487-1f3fc-200d-2640":0,"1f487-1f3fd-200d-2640":0,"1f487-1f3fe-200d-2640":0,"1f487-1f3ff-200d-2640":0,"1f487-1f3fb-200d-2642":0,"1f487-1f3fc-200d-2642":0,"1f487-1f3fd-200d-2642":0,"1f487-1f3fe-200d-2642":0,"1f487-1f3ff-200d-2642":0,"1f487-1f3fb":0,"1f487-1f3fc":0,"1f487-1f3fd":0,"1f487-1f3fe":0,"1f487-1f3ff":0,"1f48f-1f3fb":0,"1f48f-1f3fc":0,"1f48f-1f3fd":0,"1f48f-1f3fe":0,"1f48f-1f3ff":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fe":0,"1f491-1f3fb":0,"1f491-1f3fc":0,"1f491-1f3fd":0,"1f491-1f3fe":0,"1f491-1f3ff":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fe":0,"1f4aa-1f3fb":0,"1f4aa-1f3fc":0,"1f4aa-1f3fd":0,"1f4aa-1f3fe":0,"1f4aa-1f3ff":0,"1f574-1f3fb":0,"1f574-1f3fc":0,"1f574-1f3fd":0,"1f574-1f3fe":0,"1f574-1f3ff":0,"1f575-1f3fb-200d-2640":0,"1f575-1f3fc-200d-2640":0,"1f575-1f3fd-200d-2640":0,"1f575-1f3fe-200d-2640":0,"1f575-1f3ff-200d-2640":0,"1f575-1f3fb-200d-2642":0,"1f575-1f3fc-200d-2642":0,"1f575-1f3fd-200d-2642":0,"1f575-1f3fe-200d-2642":0,"1f575-1f3ff-200d-2642":0,"1f575-1f3fb":0,"1f575-1f3fc":0,"1f575-1f3fd":0,"1f575-1f3fe":0,"1f575-1f3ff":0,"1f57a-1f3fb":0,"1f57a-1f3fc":0,"1f57a-1f3fd":0,"1f57a-1f3fe":0,"1f57a-1f3ff":0,"1f590-1f3fb":0,"1f590-1f3fc":0,"1f590-1f3fd":0,"1f590-1f3fe":0,"1f590-1f3ff":0,"1f595-1f3fb":0,"1f595-1f3fc":0,"1f595-1f3fd":0,"1f595-1f3fe":0,"1f595-1f3ff":0,"1f596-1f3fb":0,"1f596-1f3fc":0,"1f596-1f3fd":0,"1f596-1f3fe":0,"1f596-1f3ff":0,"1f645-1f3fb-200d-2640":0,"1f645-1f3fc-200d-2640":0,"1f645-1f3fd-200d-2640":0,"1f645-1f3fe-200d-2640":0,"1f645-1f3ff-200d-2640":0,"1f645-1f3fb-200d-2642":0,"1f645-1f3fc-200d-2642":0,"1f645-1f3fd-200d-2642":0,"1f645-1f3fe-200d-2642":0,"1f645-1f3ff-200d-2642":0,"1f645-1f3fb":0,"1f645-1f3fc":0,"1f645-1f3fd":0,"1f645-1f3fe":0,"1f645-1f3ff":0,"1f646-1f3fb-200d-2640":0,"1f646-1f3fc-200d-2640":0,"1f646-1f3fd-200d-2640":0,"1f646-1f3fe-200d-2640":0,"1f646-1f3ff-200d-2640":0,"1f646-1f3fb-200d-2642":0,"1f646-1f3fc-200d-2642":0,"1f646-1f3fd-200d-2642":0,"1f646-1f3fe-200d-2642":0,"1f646-1f3ff-200d-2642":0,"1f646-1f3fb":0,"1f646-1f3fc":0,"1f646-1f3fd":0,"1f646-1f3fe":0,"1f646-1f3ff":0,"1f647-1f3fb-200d-2640":0,"1f647-1f3fc-200d-2640":0,"1f647-1f3fd-200d-2640":0,"1f647-1f3fe-200d-2640":0,"1f647-1f3ff-200d-2640":0,"1f647-1f3fb-200d-2642":0,"1f647-1f3fc-200d-2642":0,"1f647-1f3fd-200d-2642":0,"1f647-1f3fe-200d-2642":0,"1f647-1f3ff-200d-2642":0,"1f647-1f3fb":0,"1f647-1f3fc":0,"1f647-1f3fd":0,"1f647-1f3fe":0,"1f647-1f3ff":0,"1f64b-1f3fb-200d-2640":0,"1f64b-1f3fc-200d-2640":0,"1f64b-1f3fd-200d-2640":0,"1f64b-1f3fe-200d-2640":0,"1f64b-1f3ff-200d-2640":0,"1f64b-1f3fb-200d-2642":0,"1f64b-1f3fc-200d-2642":0,"1f64b-1f3fd-200d-2642":0,"1f64b-1f3fe-200d-2642":0,"1f64b-1f3ff-200d-2642":0,"1f64b-1f3fb":0,"1f64b-1f3fc":0,"1f64b-1f3fd":0,"1f64b-1f3fe":0,"1f64b-1f3ff":0,"1f64c-1f3fb":0,"1f64c-1f3fc":0,"1f64c-1f3fd":0,"1f64c-1f3fe":0,"1f64c-1f3ff":0,"1f64d-1f3fb-200d-2640":0,"1f64d-1f3fc-200d-2640":0,"1f64d-1f3fd-200d-2640":0,"1f64d-1f3fe-200d-2640":0,"1f64d-1f3ff-200d-2640":0,"1f64d-1f3fb-200d-2642":0,"1f64d-1f3fc-200d-2642":0,"1f64d-1f3fd-200d-2642":0,"1f64d-1f3fe-200d-2642":0,"1f64d-1f3ff-200d-2642":0,"1f64d-1f3fb":0,"1f64d-1f3fc":0,"1f64d-1f3fd":0,"1f64d-1f3fe":0,"1f64d-1f3ff":0,"1f64e-1f3fb-200d-2640":0,"1f64e-1f3fc-200d-2640":0,"1f64e-1f3fd-200d-2640":0,"1f64e-1f3fe-200d-2640":0,"1f64e-1f3ff-200d-2640":0,"1f64e-1f3fb-200d-2642":0,"1f64e-1f3fc-200d-2642":0,"1f64e-1f3fd-200d-2642":0,"1f64e-1f3fe-200d-2642":0,"1f64e-1f3ff-200d-2642":0,"1f64e-1f3fb":0,"1f64e-1f3fc":0,"1f64e-1f3fd":0,"1f64e-1f3fe":0,"1f64e-1f3ff":0,"1f64f-1f3fb":0,"1f64f-1f3fc":0,"1f64f-1f3fd":0,"1f64f-1f3fe":0,"1f64f-1f3ff":0,"1f6a3-1f3fb-200d-2640":0,"1f6a3-1f3fc-200d-2640":0,"1f6a3-1f3fd-200d-2640":0,"1f6a3-1f3fe-200d-2640":0,"1f6a3-1f3ff-200d-2640":0,"1f6a3-1f3fb-200d-2642":0,"1f6a3-1f3fc-200d-2642":0,"1f6a3-1f3fd-200d-2642":0,"1f6a3-1f3fe-200d-2642":0,"1f6a3-1f3ff-200d-2642":0,"1f6a3-1f3fb":0,"1f6a3-1f3fc":0,"1f6a3-1f3fd":0,"1f6a3-1f3fe":0,"1f6a3-1f3ff":0,"1f6b4-1f3fb-200d-2640":0,"1f6b4-1f3fc-200d-2640":0,"1f6b4-1f3fd-200d-2640":0,"1f6b4-1f3fe-200d-2640":0,"1f6b4-1f3ff-200d-2640":0,"1f6b4-1f3fb-200d-2642":0,"1f6b4-1f3fc-200d-2642":0,"1f6b4-1f3fd-200d-2642":0,"1f6b4-1f3fe-200d-2642":0,"1f6b4-1f3ff-200d-2642":0,"1f6b4-1f3fb":0,"1f6b4-1f3fc":0,"1f6b4-1f3fd":0,"1f6b4-1f3fe":0,"1f6b4-1f3ff":0,"1f6b5-1f3fb-200d-2640":0,"1f6b5-1f3fc-200d-2640":0,"1f6b5-1f3fd-200d-2640":0,"1f6b5-1f3fe-200d-2640":0,"1f6b5-1f3ff-200d-2640":0,"1f6b5-1f3fb-200d-2642":0,"1f6b5-1f3fc-200d-2642":0,"1f6b5-1f3fd-200d-2642":0,"1f6b5-1f3fe-200d-2642":0,"1f6b5-1f3ff-200d-2642":0,"1f6b5-1f3fb":0,"1f6b5-1f3fc":0,"1f6b5-1f3fd":0,"1f6b5-1f3fe":0,"1f6b5-1f3ff":0,"1f6b6-1f3fb-200d-2640":0,"1f6b6-1f3fc-200d-2640":0,"1f6b6-1f3fd-200d-2640":0,"1f6b6-1f3fe-200d-2640":0,"1f6b6-1f3ff-200d-2640":0,"1f6b6-1f3fb-200d-2642":0,"1f6b6-1f3fc-200d-2642":0,"1f6b6-1f3fd-200d-2642":0,"1f6b6-1f3fe-200d-2642":0,"1f6b6-1f3ff-200d-2642":0,"1f6b6-1f3fb":0,"1f6b6-1f3fc":0,"1f6b6-1f3fd":0,"1f6b6-1f3fe":0,"1f6b6-1f3ff":0,"1f6c0-1f3fb":0,"1f6c0-1f3fc":0,"1f6c0-1f3fd":0,"1f6c0-1f3fe":0,"1f6c0-1f3ff":0,"1f6cc-1f3fb":0,"1f6cc-1f3fc":0,"1f6cc-1f3fd":0,"1f6cc-1f3fe":0,"1f6cc-1f3ff":0,"1f90c-1f3fb":0,"1f90c-1f3fc":0,"1f90c-1f3fd":0,"1f90c-1f3fe":0,"1f90c-1f3ff":0,"1f90f-1f3fb":0,"1f90f-1f3fc":0,"1f90f-1f3fd":0,"1f90f-1f3fe":0,"1f90f-1f3ff":0,"1f918-1f3fb":0,"1f918-1f3fc":0,"1f918-1f3fd":0,"1f918-1f3fe":0,"1f918-1f3ff":0,"1f919-1f3fb":0,"1f919-1f3fc":0,"1f919-1f3fd":0,"1f919-1f3fe":0,"1f919-1f3ff":0,"1f91a-1f3fb":0,"1f91a-1f3fc":0,"1f91a-1f3fd":0,"1f91a-1f3fe":0,"1f91a-1f3ff":0,"1f91b-1f3fb":0,"1f91b-1f3fc":0,"1f91b-1f3fd":0,"1f91b-1f3fe":0,"1f91b-1f3ff":0,"1f91c-1f3fb":0,"1f91c-1f3fc":0,"1f91c-1f3fd":0,"1f91c-1f3fe":0,"1f91c-1f3ff":0,"1f91d-1f3fb":0,"1f91d-1f3fc":0,"1f91d-1f3fd":0,"1f91d-1f3fe":0,"1f91d-1f3ff":0,"1f91e-1f3fb":0,"1f91e-1f3fc":0,"1f91e-1f3fd":0,"1f91e-1f3fe":0,"1f91e-1f3ff":0,"1f91f-1f3fb":0,"1f91f-1f3fc":0,"1f91f-1f3fd":0,"1f91f-1f3fe":0,"1f91f-1f3ff":0,"1f926-1f3fb-200d-2640":0,"1f926-1f3fc-200d-2640":0,"1f926-1f3fd-200d-2640":0,"1f926-1f3fe-200d-2640":0,"1f926-1f3ff-200d-2640":0,"1f926-1f3fb-200d-2642":0,"1f926-1f3fc-200d-2642":0,"1f926-1f3fd-200d-2642":0,"1f926-1f3fe-200d-2642":0,"1f926-1f3ff-200d-2642":0,"1f926-1f3fb":0,"1f926-1f3fc":0,"1f926-1f3fd":0,"1f926-1f3fe":0,"1f926-1f3ff":0,"1f930-1f3fb":0,"1f930-1f3fc":0,"1f930-1f3fd":0,"1f930-1f3fe":0,"1f930-1f3ff":0,"1f931-1f3fb":0,"1f931-1f3fc":0,"1f931-1f3fd":0,"1f931-1f3fe":0,"1f931-1f3ff":0,"1f932-1f3fb":0,"1f932-1f3fc":0,"1f932-1f3fd":0,"1f932-1f3fe":0,"1f932-1f3ff":0,"1f933-1f3fb":0,"1f933-1f3fc":0,"1f933-1f3fd":0,"1f933-1f3fe":0,"1f933-1f3ff":0,"1f934-1f3fb":0,"1f934-1f3fc":0,"1f934-1f3fd":0,"1f934-1f3fe":0,"1f934-1f3ff":0,"1f935-1f3fb-200d-2640":0,"1f935-1f3fc-200d-2640":0,"1f935-1f3fd-200d-2640":0,"1f935-1f3fe-200d-2640":0,"1f935-1f3ff-200d-2640":0,"1f935-1f3fb-200d-2642":0,"1f935-1f3fc-200d-2642":0,"1f935-1f3fd-200d-2642":0,"1f935-1f3fe-200d-2642":0,"1f935-1f3ff-200d-2642":0,"1f935-1f3fb":0,"1f935-1f3fc":0,"1f935-1f3fd":0,"1f935-1f3fe":0,"1f935-1f3ff":0,"1f936-1f3fb":0,"1f936-1f3fc":0,"1f936-1f3fd":0,"1f936-1f3fe":0,"1f936-1f3ff":0,"1f937-1f3fb-200d-2640":0,"1f937-1f3fc-200d-2640":0,"1f937-1f3fd-200d-2640":0,"1f937-1f3fe-200d-2640":0,"1f937-1f3ff-200d-2640":0,"1f937-1f3fb-200d-2642":0,"1f937-1f3fc-200d-2642":0,"1f937-1f3fd-200d-2642":0,"1f937-1f3fe-200d-2642":0,"1f937-1f3ff-200d-2642":0,"1f937-1f3fb":0,"1f937-1f3fc":0,"1f937-1f3fd":0,"1f937-1f3fe":0,"1f937-1f3ff":0,"1f938-1f3fb-200d-2640":0,"1f938-1f3fc-200d-2640":0,"1f938-1f3fd-200d-2640":0,"1f938-1f3fe-200d-2640":0,"1f938-1f3ff-200d-2640":0,"1f938-1f3fb-200d-2642":0,"1f938-1f3fc-200d-2642":0,"1f938-1f3fd-200d-2642":0,"1f938-1f3fe-200d-2642":0,"1f938-1f3ff-200d-2642":0,"1f938-1f3fb":0,"1f938-1f3fc":0,"1f938-1f3fd":0,"1f938-1f3fe":0,"1f938-1f3ff":0,"1f939-1f3fb-200d-2640":0,"1f939-1f3fc-200d-2640":0,"1f939-1f3fd-200d-2640":0,"1f939-1f3fe-200d-2640":0,"1f939-1f3ff-200d-2640":0,"1f939-1f3fb-200d-2642":0,"1f939-1f3fc-200d-2642":0,"1f939-1f3fd-200d-2642":0,"1f939-1f3fe-200d-2642":0,"1f939-1f3ff-200d-2642":0,"1f939-1f3fb":0,"1f939-1f3fc":0,"1f939-1f3fd":0,"1f939-1f3fe":0,"1f939-1f3ff":0,"1f93d-1f3fb-200d-2640":0,"1f93d-1f3fc-200d-2640":0,"1f93d-1f3fd-200d-2640":0,"1f93d-1f3fe-200d-2640":0,"1f93d-1f3ff-200d-2640":0,"1f93d-1f3fb-200d-2642":0,"1f93d-1f3fc-200d-2642":0,"1f93d-1f3fd-200d-2642":0,"1f93d-1f3fe-200d-2642":0,"1f93d-1f3ff-200d-2642":0,"1f93d-1f3fb":0,"1f93d-1f3fc":0,"1f93d-1f3fd":0,"1f93d-1f3fe":0,"1f93d-1f3ff":0,"1f93e-1f3fb-200d-2640":0,"1f93e-1f3fc-200d-2640":0,"1f93e-1f3fd-200d-2640":0,"1f93e-1f3fe-200d-2640":0,"1f93e-1f3ff-200d-2640":0,"1f93e-1f3fb-200d-2642":0,"1f93e-1f3fc-200d-2642":0,"1f93e-1f3fd-200d-2642":0,"1f93e-1f3fe-200d-2642":0,"1f93e-1f3ff-200d-2642":0,"1f93e-1f3fb":0,"1f93e-1f3fc":0,"1f93e-1f3fd":0,"1f93e-1f3fe":0,"1f93e-1f3ff":0,"1f977-1f3fb":0,"1f977-1f3fc":0,"1f977-1f3fd":0,"1f977-1f3fe":0,"1f977-1f3ff":0,"1f9b5-1f3fb":0,"1f9b5-1f3fc":0,"1f9b5-1f3fd":0,"1f9b5-1f3fe":0,"1f9b5-1f3ff":0,"1f9b6-1f3fb":0,"1f9b6-1f3fc":0,"1f9b6-1f3fd":0,"1f9b6-1f3fe":0,"1f9b6-1f3ff":0,"1f9b8-1f3fb-200d-2640":0,"1f9b8-1f3fc-200d-2640":0,"1f9b8-1f3fd-200d-2640":0,"1f9b8-1f3fe-200d-2640":0,"1f9b8-1f3ff-200d-2640":0,"1f9b8-1f3fb-200d-2642":0,"1f9b8-1f3fc-200d-2642":0,"1f9b8-1f3fd-200d-2642":0,"1f9b8-1f3fe-200d-2642":0,"1f9b8-1f3ff-200d-2642":0,"1f9b8-1f3fb":0,"1f9b8-1f3fc":0,"1f9b8-1f3fd":0,"1f9b8-1f3fe":0,"1f9b8-1f3ff":0,"1f9b9-1f3fb-200d-2640":0,"1f9b9-1f3fc-200d-2640":0,"1f9b9-1f3fd-200d-2640":0,"1f9b9-1f3fe-200d-2640":0,"1f9b9-1f3ff-200d-2640":0,"1f9b9-1f3fb-200d-2642":0,"1f9b9-1f3fc-200d-2642":0,"1f9b9-1f3fd-200d-2642":0,"1f9b9-1f3fe-200d-2642":0,"1f9b9-1f3ff-200d-2642":0,"1f9b9-1f3fb":0,"1f9b9-1f3fc":0,"1f9b9-1f3fd":0,"1f9b9-1f3fe":0,"1f9b9-1f3ff":0,"1f9bb-1f3fb":0,"1f9bb-1f3fc":0,"1f9bb-1f3fd":0,"1f9bb-1f3fe":0,"1f9bb-1f3ff":0,"1f9cd-1f3fb-200d-2640":0,"1f9cd-1f3fc-200d-2640":0,"1f9cd-1f3fd-200d-2640":0,"1f9cd-1f3fe-200d-2640":0,"1f9cd-1f3ff-200d-2640":0,"1f9cd-1f3fb-200d-2642":0,"1f9cd-1f3fc-200d-2642":0,"1f9cd-1f3fd-200d-2642":0,"1f9cd-1f3fe-200d-2642":0,"1f9cd-1f3ff-200d-2642":0,"1f9cd-1f3fb":0,"1f9cd-1f3fc":0,"1f9cd-1f3fd":0,"1f9cd-1f3fe":0,"1f9cd-1f3ff":0,"1f9ce-1f3fb-200d-2640":0,"1f9ce-1f3fc-200d-2640":0,"1f9ce-1f3fd-200d-2640":0,"1f9ce-1f3fe-200d-2640":0,"1f9ce-1f3ff-200d-2640":0,"1f9ce-1f3fb-200d-2642":0,"1f9ce-1f3fc-200d-2642":0,"1f9ce-1f3fd-200d-2642":0,"1f9ce-1f3fe-200d-2642":0,"1f9ce-1f3ff-200d-2642":0,"1f9ce-1f3fb":0,"1f9ce-1f3fc":0,"1f9ce-1f3fd":0,"1f9ce-1f3fe":0,"1f9ce-1f3ff":0,"1f9cf-1f3fb-200d-2640":0,"1f9cf-1f3fc-200d-2640":0,"1f9cf-1f3fd-200d-2640":0,"1f9cf-1f3fe-200d-2640":0,"1f9cf-1f3ff-200d-2640":0,"1f9cf-1f3fb-200d-2642":0,"1f9cf-1f3fc-200d-2642":0,"1f9cf-1f3fd-200d-2642":0,"1f9cf-1f3fe-200d-2642":0,"1f9cf-1f3ff-200d-2642":0,"1f9cf-1f3fb":0,"1f9cf-1f3fc":0,"1f9cf-1f3fd":0,"1f9cf-1f3fe":0,"1f9cf-1f3ff":0,"1f9d1-1f3fb-200d-1f33e":0,"1f9d1-1f3fc-200d-1f33e":0,"1f9d1-1f3fd-200d-1f33e":0,"1f9d1-1f3fe-200d-1f33e":0,"1f9d1-1f3ff-200d-1f33e":0,"1f9d1-1f3fb-200d-1f373":0,"1f9d1-1f3fc-200d-1f373":0,"1f9d1-1f3fd-200d-1f373":0,"1f9d1-1f3fe-200d-1f373":0,"1f9d1-1f3ff-200d-1f373":0,"1f9d1-1f3fb-200d-1f37c":0,"1f9d1-1f3fc-200d-1f37c":0,"1f9d1-1f3fd-200d-1f37c":0,"1f9d1-1f3fe-200d-1f37c":0,"1f9d1-1f3ff-200d-1f37c":0,"1f9d1-1f3fb-200d-1f384":0,"1f9d1-1f3fc-200d-1f384":0,"1f9d1-1f3fd-200d-1f384":0,"1f9d1-1f3fe-200d-1f384":0,"1f9d1-1f3ff-200d-1f384":0,"1f9d1-1f3fb-200d-1f393":0,"1f9d1-1f3fc-200d-1f393":0,"1f9d1-1f3fd-200d-1f393":0,"1f9d1-1f3fe-200d-1f393":0,"1f9d1-1f3ff-200d-1f393":0,"1f9d1-1f3fb-200d-1f3a4":0,"1f9d1-1f3fc-200d-1f3a4":0,"1f9d1-1f3fd-200d-1f3a4":0,"1f9d1-1f3fe-200d-1f3a4":0,"1f9d1-1f3ff-200d-1f3a4":0,"1f9d1-1f3fb-200d-1f3a8":0,"1f9d1-1f3fc-200d-1f3a8":0,"1f9d1-1f3fd-200d-1f3a8":0,"1f9d1-1f3fe-200d-1f3a8":0,"1f9d1-1f3ff-200d-1f3a8":0,"1f9d1-1f3fb-200d-1f3eb":0,"1f9d1-1f3fc-200d-1f3eb":0,"1f9d1-1f3fd-200d-1f3eb":0,"1f9d1-1f3fe-200d-1f3eb":0,"1f9d1-1f3ff-200d-1f3eb":0,"1f9d1-1f3fb-200d-1f3ed":0,"1f9d1-1f3fc-200d-1f3ed":0,"1f9d1-1f3fd-200d-1f3ed":0,"1f9d1-1f3fe-200d-1f3ed":0,"1f9d1-1f3ff-200d-1f3ed":0,"1f9d1-1f3fb-200d-1f4bb":0,"1f9d1-1f3fc-200d-1f4bb":0,"1f9d1-1f3fd-200d-1f4bb":0,"1f9d1-1f3fe-200d-1f4bb":0,"1f9d1-1f3ff-200d-1f4bb":0,"1f9d1-1f3fb-200d-1f4bc":0,"1f9d1-1f3fc-200d-1f4bc":0,"1f9d1-1f3fd-200d-1f4bc":0,"1f9d1-1f3fe-200d-1f4bc":0,"1f9d1-1f3ff-200d-1f4bc":0,"1f9d1-1f3fb-200d-1f527":0,"1f9d1-1f3fc-200d-1f527":0,"1f9d1-1f3fd-200d-1f527":0,"1f9d1-1f3fe-200d-1f527":0,"1f9d1-1f3ff-200d-1f527":0,"1f9d1-1f3fb-200d-1f52c":0,"1f9d1-1f3fc-200d-1f52c":0,"1f9d1-1f3fd-200d-1f52c":0,"1f9d1-1f3fe-200d-1f52c":0,"1f9d1-1f3ff-200d-1f52c":0,"1f9d1-1f3fb-200d-1f680":0,"1f9d1-1f3fc-200d-1f680":0,"1f9d1-1f3fd-200d-1f680":0,"1f9d1-1f3fe-200d-1f680":0,"1f9d1-1f3ff-200d-1f680":0,"1f9d1-1f3fb-200d-1f692":0,"1f9d1-1f3fc-200d-1f692":0,"1f9d1-1f3fd-200d-1f692":0,"1f9d1-1f3fe-200d-1f692":0,"1f9d1-1f3ff-200d-1f692":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe":0,"1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff":0,"1f9d1-1f3fb-200d-1f9af":0,"1f9d1-1f3fc-200d-1f9af":0,"1f9d1-1f3fd-200d-1f9af":0,"1f9d1-1f3fe-200d-1f9af":0,"1f9d1-1f3ff-200d-1f9af":0,"1f9d1-1f3fb-200d-1f9b0":0,"1f9d1-1f3fc-200d-1f9b0":0,"1f9d1-1f3fd-200d-1f9b0":0,"1f9d1-1f3fe-200d-1f9b0":0,"1f9d1-1f3ff-200d-1f9b0":0,"1f9d1-1f3fb-200d-1f9b1":0,"1f9d1-1f3fc-200d-1f9b1":0,"1f9d1-1f3fd-200d-1f9b1":0,"1f9d1-1f3fe-200d-1f9b1":0,"1f9d1-1f3ff-200d-1f9b1":0,"1f9d1-1f3fb-200d-1f9b2":0,"1f9d1-1f3fc-200d-1f9b2":0,"1f9d1-1f3fd-200d-1f9b2":0,"1f9d1-1f3fe-200d-1f9b2":0,"1f9d1-1f3ff-200d-1f9b2":0,"1f9d1-1f3fb-200d-1f9b3":0,"1f9d1-1f3fc-200d-1f9b3":0,"1f9d1-1f3fd-200d-1f9b3":0,"1f9d1-1f3fe-200d-1f9b3":0,"1f9d1-1f3ff-200d-1f9b3":0,"1f9d1-1f3fb-200d-1f9bc":0,"1f9d1-1f3fc-200d-1f9bc":0,"1f9d1-1f3fd-200d-1f9bc":0,"1f9d1-1f3fe-200d-1f9bc":0,"1f9d1-1f3ff-200d-1f9bc":0,"1f9d1-1f3fb-200d-1f9bd":0,"1f9d1-1f3fc-200d-1f9bd":0,"1f9d1-1f3fd-200d-1f9bd":0,"1f9d1-1f3fe-200d-1f9bd":0,"1f9d1-1f3ff-200d-1f9bd":0,"1f9d1-1f3fb-200d-2695":0,"1f9d1-1f3fc-200d-2695":0,"1f9d1-1f3fd-200d-2695":0,"1f9d1-1f3fe-200d-2695":0,"1f9d1-1f3ff-200d-2695":0,"1f9d1-1f3fb-200d-2696":0,"1f9d1-1f3fc-200d-2696":0,"1f9d1-1f3fd-200d-2696":0,"1f9d1-1f3fe-200d-2696":0,"1f9d1-1f3ff-200d-2696":0,"1f9d1-1f3fb-200d-2708":0,"1f9d1-1f3fc-200d-2708":0,"1f9d1-1f3fd-200d-2708":0,"1f9d1-1f3fe-200d-2708":0,"1f9d1-1f3ff-200d-2708":0,"1f9d1-1f3fb":0,"1f9d1-1f3fc":0,"1f9d1-1f3fd":0,"1f9d1-1f3fe":0,"1f9d1-1f3ff":0,"1f9d2-1f3fb":0,"1f9d2-1f3fc":0,"1f9d2-1f3fd":0,"1f9d2-1f3fe":0,"1f9d2-1f3ff":0,"1f9d3-1f3fb":0,"1f9d3-1f3fc":0,"1f9d3-1f3fd":0,"1f9d3-1f3fe":0,"1f9d3-1f3ff":0,"1f9d4-1f3fb-200d-2640":0,"1f9d4-1f3fc-200d-2640":0,"1f9d4-1f3fd-200d-2640":0,"1f9d4-1f3fe-200d-2640":0,"1f9d4-1f3ff-200d-2640":0,"1f9d4-1f3fb-200d-2642":0,"1f9d4-1f3fc-200d-2642":0,"1f9d4-1f3fd-200d-2642":0,"1f9d4-1f3fe-200d-2642":0,"1f9d4-1f3ff-200d-2642":0,"1f9d4-1f3fb":0,"1f9d4-1f3fc":0,"1f9d4-1f3fd":0,"1f9d4-1f3fe":0,"1f9d4-1f3ff":0,"1f9d5-1f3fb":0,"1f9d5-1f3fc":0,"1f9d5-1f3fd":0,"1f9d5-1f3fe":0,"1f9d5-1f3ff":0,"1f9d6-1f3fb-200d-2640":0,"1f9d6-1f3fc-200d-2640":0,"1f9d6-1f3fd-200d-2640":0,"1f9d6-1f3fe-200d-2640":0,"1f9d6-1f3ff-200d-2640":0,"1f9d6-1f3fb-200d-2642":0,"1f9d6-1f3fc-200d-2642":0,"1f9d6-1f3fd-200d-2642":0,"1f9d6-1f3fe-200d-2642":0,"1f9d6-1f3ff-200d-2642":0,"1f9d6-1f3fb":0,"1f9d6-1f3fc":0,"1f9d6-1f3fd":0,"1f9d6-1f3fe":0,"1f9d6-1f3ff":0,"1f9d7-1f3fb-200d-2640":0,"1f9d7-1f3fc-200d-2640":0,"1f9d7-1f3fd-200d-2640":0,"1f9d7-1f3fe-200d-2640":0,"1f9d7-1f3ff-200d-2640":0,"1f9d7-1f3fb-200d-2642":0,"1f9d7-1f3fc-200d-2642":0,"1f9d7-1f3fd-200d-2642":0,"1f9d7-1f3fe-200d-2642":0,"1f9d7-1f3ff-200d-2642":0,"1f9d7-1f3fb":0,"1f9d7-1f3fc":0,"1f9d7-1f3fd":0,"1f9d7-1f3fe":0,"1f9d7-1f3ff":0,"1f9d8-1f3fb-200d-2640":0,"1f9d8-1f3fc-200d-2640":0,"1f9d8-1f3fd-200d-2640":0,"1f9d8-1f3fe-200d-2640":0,"1f9d8-1f3ff-200d-2640":0,"1f9d8-1f3fb-200d-2642":0,"1f9d8-1f3fc-200d-2642":0,"1f9d8-1f3fd-200d-2642":0,"1f9d8-1f3fe-200d-2642":0,"1f9d8-1f3ff-200d-2642":0,"1f9d8-1f3fb":0,"1f9d8-1f3fc":0,"1f9d8-1f3fd":0,"1f9d8-1f3fe":0,"1f9d8-1f3ff":0,"1f9d9-1f3fb-200d-2640":0,"1f9d9-1f3fc-200d-2640":0,"1f9d9-1f3fd-200d-2640":0,"1f9d9-1f3fe-200d-2640":0,"1f9d9-1f3ff-200d-2640":0,"1f9d9-1f3fb-200d-2642":0,"1f9d9-1f3fc-200d-2642":0,"1f9d9-1f3fd-200d-2642":0,"1f9d9-1f3fe-200d-2642":0,"1f9d9-1f3ff-200d-2642":0,"1f9d9-1f3fb":0,"1f9d9-1f3fc":0,"1f9d9-1f3fd":0,"1f9d9-1f3fe":0,"1f9d9-1f3ff":0,"1f9da-1f3fb-200d-2640":0,"1f9da-1f3fc-200d-2640":0,"1f9da-1f3fd-200d-2640":0,"1f9da-1f3fe-200d-2640":0,"1f9da-1f3ff-200d-2640":0,"1f9da-1f3fb-200d-2642":0,"1f9da-1f3fc-200d-2642":0,"1f9da-1f3fd-200d-2642":0,"1f9da-1f3fe-200d-2642":0,"1f9da-1f3ff-200d-2642":0,"1f9da-1f3fb":0,"1f9da-1f3fc":0,"1f9da-1f3fd":0,"1f9da-1f3fe":0,"1f9da-1f3ff":0,"1f9db-1f3fb-200d-2640":0,"1f9db-1f3fc-200d-2640":0,"1f9db-1f3fd-200d-2640":0,"1f9db-1f3fe-200d-2640":0,"1f9db-1f3ff-200d-2640":0,"1f9db-1f3fb-200d-2642":0,"1f9db-1f3fc-200d-2642":0,"1f9db-1f3fd-200d-2642":0,"1f9db-1f3fe-200d-2642":0,"1f9db-1f3ff-200d-2642":0,"1f9db-1f3fb":0,"1f9db-1f3fc":0,"1f9db-1f3fd":0,"1f9db-1f3fe":0,"1f9db-1f3ff":0,"1f9dc-1f3fb-200d-2640":0,"1f9dc-1f3fc-200d-2640":0,"1f9dc-1f3fd-200d-2640":0,"1f9dc-1f3fe-200d-2640":0,"1f9dc-1f3ff-200d-2640":0,"1f9dc-1f3fb-200d-2642":0,"1f9dc-1f3fc-200d-2642":0,"1f9dc-1f3fd-200d-2642":0,"1f9dc-1f3fe-200d-2642":0,"1f9dc-1f3ff-200d-2642":0,"1f9dc-1f3fb":0,"1f9dc-1f3fc":0,"1f9dc-1f3fd":0,"1f9dc-1f3fe":0,"1f9dc-1f3ff":0,"1f9dd-1f3fb-200d-2640":0,"1f9dd-1f3fc-200d-2640":0,"1f9dd-1f3fd-200d-2640":0,"1f9dd-1f3fe-200d-2640":0,"1f9dd-1f3ff-200d-2640":0,"1f9dd-1f3fb-200d-2642":0,"1f9dd-1f3fc-200d-2642":0,"1f9dd-1f3fd-200d-2642":0,"1f9dd-1f3fe-200d-2642":0,"1f9dd-1f3ff-200d-2642":0,"1f9dd-1f3fb":0,"1f9dd-1f3fc":0,"1f9dd-1f3fd":0,"1f9dd-1f3fe":0,"1f9dd-1f3ff":0,"261d-1f3fb":0,"261d-1f3fc":0,"261d-1f3fd":0,"261d-1f3fe":0,"261d-1f3ff":0,"26f9-1f3fb-200d-2640":0,"26f9-1f3fc-200d-2640":0,"26f9-1f3fd-200d-2640":0,"26f9-1f3fe-200d-2640":0,"26f9-1f3ff-200d-2640":0,"26f9-1f3fb-200d-2642":0,"26f9-1f3fc-200d-2642":0,"26f9-1f3fd-200d-2642":0,"26f9-1f3fe-200d-2642":0,"26f9-1f3ff-200d-2642":0,"26f9-1f3fb":0,"26f9-1f3fc":0,"26f9-1f3fd":0,"26f9-1f3fe":0,"26f9-1f3ff":0,"270a-1f3fb":0,"270a-1f3fc":0,"270a-1f3fd":0,"270a-1f3fe":0,"270a-1f3ff":0,"270b-1f3fb":0,"270b-1f3fc":0,"270b-1f3fd":0,"270b-1f3fe":0,"270b-1f3ff":0,"270c-1f3fb":0,"270c-1f3fc":0,"270c-1f3fd":0,"270c-1f3fe":0,"270c-1f3ff":0,"270d-1f3fb":0,"270d-1f3fc":0,"270d-1f3fd":0,"270d-1f3fe":0,"270d-1f3ff":0}},n=s[""];for(const e in s)e&&Object.assign(n,s[e]);const i=n},4762:(e,t,a)=>{a.d(t,{IS_FIREFOX:()=>r,IS_SAFARI:()=>i});var s=a(6761);const n=navigator?navigator.userAgent:null,i=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&s.Z.MSStream,!!("safari"in s.Z)||!(!n||!(/\b(iPad|iPhone|iPod)\b/.test(n)||n.match("Safari")&&!n.match("Chrome")))),r=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;(void 0===navigator.maxTouchPoints||navigator.maxTouchPoints>0)&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},467:(e,t,a)=>{a.d(t,{ZP:()=>o,gV:()=>p});var s=a(5813);const n=/[`~!@#$%^&*()\-_=+\[\]\\|{}'";:\/?.>,<]+/g,i=/^\s+|\s$/g,r={ะน:"q",ั†:"w",ัƒ:"e",ะบ:"r",ะต:"t",ะฝ:"y",ะณ:"u",ัˆ:"i",ั‰:"o",ะท:"p",ั…:"[",ัŠ:"]",ั„:"a",ั‹:"s",ะฒ:"d",ะฐ:"f",ะฟ:"g",ั€:"h",ะพ:"j",ะป:"k",ะด:"l",ะถ:";",ั:"'",ั:"z",ั‡:"x",ั:"c",ะผ:"v",ะธ:"b",ั‚:"n",ัŒ:"m",ะฑ:",",ัŽ:".",".":"/"};function o(e,t=!0){return p(e,{clearBadChars:!0,latinize:t,ignoreCase:!0})}function p(e,t={}){const a=t.includeTag&&"%"===e.charAt(0),o=e;return t.clearBadChars&&(e=function(e){return e.replace(n,"").replace(i,"")}(e)),t.latinize&&(e=function(e){return e.replace(/[^A-Za-z0-9]/g,(e=>{const t=s.Z[e];return null!=t?t:e}))}(e)),t.ignoreCase&&(e=e.toLowerCase()),a&&(e="%"+e),t.latinize&&(e+=""+function(e){return e.toLowerCase().replace(/[\wะฐ-ั]/g,(e=>{const t=r[e];return null!=t?t:e}))}(o)),e}},8801:(e,t,a)=>{a.d(t,{P:()=>n,q:()=>i});const s="_";function n(e,t){const a=""["".length-1]||"";let n;switch(e._){case"inputPhotoFileLocation":n=["photo",""[0],e.id,e.thumb_size].filter(Boolean).join(s);break;case"inputDocumentFileLocation":n=["document",""[0],e.id,e.thumb_size].filter(Boolean).join(s);break;case"inputPeerPhotoFileLocation":n=["peerPhoto",e.photo_id,e.pFlags.big?"big":"small"].join(s);break;case"inputStickerSetThumb":n=["stickerSetThumb",e.stickerset.id||e.stickerset.short_name||e.stickerset.emoticon||e.stickerset._,e.thumb_version].join(s);break;case"inputFileLocation":n=[e.volume_id,e.local_id].join(s);break;case"inputWebFileLocation":n=["webFile",e.url].join(s);break;default:console.error("Unrecognized location:",e),n=""}return n+((null==t?void 0:t.downloadId)?"_download":"")+(a?"."+a:a)}function i(e,t){return e+"/"+encodeURIComponent(JSON.stringify(t))}},677:(e,t,a)=>{a.d(t,{Ki:()=>o,RP:()=>i,X:()=>r});const s=new Set(["all","web","webk"]),n=new Set;function i(e){return e.find((e=>s.has(e.platform)&&!n.has(e.reason)))}function r(e){return!!i(e)}function o(e){n.clear(),e.forEach((e=>{n.add(e)}))}},2946:(e,t,a)=>{a.d(t,{Z:()=>i});var s=a(5880),n=a(1507);function i(e){if(void 0!==e&&e.isPeerId&&e.isPeerId())return e;if((0,s.Z)(e)){const t=e.user_id;if(void 0!==t)return t.toPeerId(!1);const a=e.channel_id||e.chat_id;return void 0!==a?a.toPeerId(!0):n.NM}if(!e)return n.NM;const t="u"===e.charAt(0),a=e.substr(1).split("_");return t?a[0].toPeerId():(a[0]||"").toPeerId(!0)}},6666:(e,t,a)=>{a.d(t,{C:()=>o,Z:()=>p});var s=a(1267),n=a(5471),i=a(5953),r=a(5003);class o{constructor(e){(0,i.Z)(this,e),s.Z.test&&(this.name+="_test"),this.storageIsAvailable=!0,this.log=(0,r.kg)(["IDB",e.name].join("-")),this.log("constructor"),this.openDatabase(!0),o.INSTANCES.push(this)}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;const t=(e,t)=>{var a;const s=Array.from(e.indexNames);for(const t of s)e.deleteIndex(t);if(null===(a=t.indexes)||void 0===a?void 0:a.length)for(const a of t.indexes)e.indexNames.contains(a.indexName)||e.createIndex(a.indexName,a.keyPath,a.objectParameters)};try{var a=indexedDB.open(this.name,this.version);if(!a)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let s=!1;return setTimeout((()=>{s||a.onerror((0,n.Z)("IDB_CREATE_TIMEOUT"))}),3e3),this.openDbPromise=new Promise(((e,n)=>{a.onsuccess=t=>{s=!0;const i=a.result;let r=!1;this.log("Opened"),i.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},i.onclose=e=>{this.log.error("closed:",e),!r&&this.openDatabase()},i.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(r=!0),t.onerror&&t.onerror(e),i.close()},i.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=i)},a.onerror=e=>{s=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),n(e)},a.onupgradeneeded=e=>{s=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);const a=e.target,n=a.result;this.stores.forEach((e=>{if(n.objectStoreNames.contains(e.name)){const s=a.transaction.objectStore(e.name);t(s,e)}else((e,a)=>{const s=e.createObjectStore(a.name);t(s,a)})(n,e)}))}}))}static create(e){var t;return null!==(t=this.INSTANCES.find((t=>t.name===e.name)))&&void 0!==t?t:new o(e)}static closeDatabases(e){this.INSTANCES.forEach((t=>{if(e&&e===t)return;const a=t.db;a&&(a.onclose=()=>{},a.close())}))}}o.INSTANCES=[];class p{constructor(e,t){this.storeName=t,this.log=(0,r.kg)(["IDB",e.name,t].join("-")),this.idb=o.create(e)}delete(e,t){const a=Array.isArray(e);return a||(e=[].concat(e)),this.getObjectStore("readwrite",(t=>{const s=e.map((e=>t.delete(e)));return a?s:s[0]}),"",t)}clear(e){return this.getObjectStore("readwrite",(e=>e.clear()),"",e)}save(e,t,a){const s=Array.isArray(e);return s||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",(a=>{const n=e.map(((e,s)=>a.put(t[s],e)));return s?n:n[0]}),"",a)}get(e,t){const a=Array.isArray(e);if(a){if(!e.length)return Promise.resolve([])}else{if(!e)return;e=[].concat(e)}return this.getObjectStore("readonly",(t=>{const s=e.map((e=>t.get(e)));return a?s:s[0]}),"",t)}getObjectStore(e,t,a,s=this.storeName){let n;return a&&(n=performance.now(),this.log(a+": start")),this.idb.openDatabase().then((i=>new Promise(((r,o)=>{const p=i.transaction([s],e),d=()=>{clearTimeout(l),o(p.error)},f=()=>{clearTimeout(l),a&&this.log(a+": end",performance.now()-n);const e=h.map((e=>e.result));r(g?e:e[0])};p.onerror=d;const c="readwrite"===e;c&&(p.oncomplete=()=>f());const l=setTimeout((()=>{this.log.error("transaction not finished",p,a)}),1e4),m=t(p.objectStore(s)),g=Array.isArray(m),h=g?m:[].concat(m);if(c)return;const u=h.length;let y=u;const _=()=>{p.error||--y||f()};for(let e=0;ee.getAll()),"",e)}}},9092:(e,t,a)=>{a.d(t,{r:()=>Ks,H:()=>zs}),a(690),a(4110);var s=a(8630);let n;function i(){return n}function r(e){return n=e}var o=a(1507),p=a(3241),d=a(410),f=a(3206),c=a(1352);class l extends p.Z{constructor(){super(),this.myId=o.NM,this.connectionStatus={},this.premium=!1,this.addEventListener("user_auth",(({id:e})=>{this.myId=e.toPeerId()})),this.addEventListener("premium_toggle_private",(({isNew:e,isPremium:t})=>{this.premium=t,this.dispatchEventSingle("premium_toggle",t)})),this.addEventListener("connection_status_change",(e=>{this.connectionStatus[e.name]=e})),this.dispatchEvent=(e,...t)=>{super.dispatchEvent(e,...t),f.Z.getInstance().invokeVoid("event",{name:e,args:t})},c.kC||this.addEventListener("settings_updated",(({settings:e})=>{this.settings=e}))}getConnectionStatus(){return this.connectionStatus}getPremium(){return this.premium}dispatchEventSingle(...e){super.dispatchEvent(...e)}}const m=new l;d.GO.rootScope=m;const g=m;var h=a(7922),u=a(9750);const y=new class{constructor(){this.state={},this.storage=h.Z}getState(){return Promise.resolve(this.state)}setByKey(e,t){!function(e,t,a){const s=t.split(".");(0,u.Z)(e,s.slice(0,-1).join("."))[s.pop()]=a}(this.state,e,t);const a=e.split(".")[0];"settings"===a&&g.dispatchEvent("settings_updated",{key:e,value:t,settings:this.state.settings}),this.pushToState(a,this.state[a])}pushToState(e,t,a=!0,s){a&&(this.state[e]=t),this.setKeyValueToStorage(e,t,s)}setKeyValueToStorage(e,t=this.state[e],a){f.Z.getInstance().invokeVoid("mirror",{name:"state",key:e,value:t}),this.storage.set({[e]:t},a)}};var _=a(4159),v=a(3725),P=a(5418),b=a(1267),M=a(1655),S=a(5003);class I{constructor(e,t,a){this.dcId=e,this.url=t,this.pending=[],this.debug=b.Z.debug&&!1;let s=S.v9.Error|S.v9.Log;this.debug&&(s|=S.v9.Debug),this.log=(0,S.kg)(`HTTP-${e}`+a,s),this.log("constructor"),this.connected=!1}_send(e,t){const a=e.length;return this.debug&&this.log.debug("-> body length to send:",a),fetch(this.url,{method:"POST",body:e,mode:t}).then((e=>{if(200!==e.status&&!t)throw e.arrayBuffer().then((e=>{this.log.error("not 200",new TextDecoder("utf-8").decode(new Uint8Array(e)))})),e;return this.setConnected(!0),e.arrayBuffer().then((e=>new Uint8Array(e)))}),(e=>{throw this.setConnected(!1),e}))}setConnected(e){this.connected===e||this.destroyed||(this.connected=e,Z.setTransportValue("https",e))}destroy(){this.setConnected(!1),this.destroyed=!0,this.pending.forEach((e=>e.reject())),this.pending.length=0}send(e){if(this.networker)return this._send(e);{const t=new Promise(((t,a)=>{this.pending.push({resolve:t,reject:a,body:e})}));return this.releasePending(),t}}releasePending(){return e=this,t=void 0,s=function*(){if(!this.releasing){this.releasing=!0;for(let e=0;e{this.log("opened"),this.debug&&this.log.debug("sending init packet"),this.dispatchEvent("open")},this.handleError=e=>{this.log.error("handleError",e),this.close()},this.handleClose=e=>{this.log("closed",e),this.removeListeners(),this.dispatchEvent("close")},this.handleMessage=e=>{this.debug&&this.log.debug("<-","handleMessage",e.data.byteLength),this.dispatchEvent("message",e.data)},this.send=e=>{this.debug&&this.log.debug("-> body length to send:",e.length),this.ws.send(e)};let s=S.v9.Error|S.v9.Log;return this.debug&&(s|=S.v9.Debug),this.log=(0,S.kg)(`WS-${e}`+a,s),this.log("constructor"),this.connect(),this}removeListeners(){this.ws&&(this.ws.removeEventListener("open",this.handleOpen),this.ws.removeEventListener("close",this.handleClose),this.ws.removeEventListener("error",this.handleError),this.ws.removeEventListener("message",this.handleMessage),this.ws=void 0)}connect(){this.ws=new WebSocket(this.url,"binary"),this.ws.binaryType="arraybuffer",this.ws.addEventListener("open",this.handleOpen),this.ws.addEventListener("close",this.handleClose),this.ws.addEventListener("error",this.handleError),this.ws.addEventListener("message",this.handleMessage)}close(){if(this.ws){this.log("close execution");try{this.ws.close()}catch(e){}this.handleClose()}}}function w(e){if(!crypto||!("getRandomValues"in crypto))throw new Error("NO_SECURE_RANDOM");return crypto.getRandomValues(e),e}var k=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class A{constructor(){this._process=(e,t)=>s.Z.invokeCryptoNew({method:"aes-ctr-process",args:[{id:this.id,data:e,operation:t}],transfer:[e.buffer]})}init(e){return k(this,void 0,void 0,(function*(){void 0!==this.idPromise&&this.release();const t=new Uint8Array(64);for(w(t);;){const e=t[3]<<24|t[2]<<16|t[1]<<8|t[0],a=t[7]<<24|t[6]<<16|t[5]<<8|t[4];if(239!==t[0]&&1145128264!==e&&1414745936!==e&&542393671!==e&&1230262351!==e&&4008636142!==e&&3722304989!==e&&0!==a)break;w(t)}const a=t.slice().reverse(),n=t.slice(8,40),i=t.slice(40,56),r=a.slice(8,40),o=a.slice(40,56),p=this.idPromise=s.Z.invokeCrypto("aes-ctr-prepare",{encKey:n,encIv:i,decKey:r,decIv:o});this.process=(e,t)=>k(this,void 0,void 0,(function*(){return yield p,this._process(e,t)})),this.id=yield p,this.process=this._process,t.set(e.obfuscateTag,56);const d=yield this.encode(t.slice());return t.set(d.slice(56,64),56),t}))}encode(e){return this.process(e,"encrypt")}decode(e){return this.process(e,"decrypt")}release(){return k(this,void 0,void 0,(function*(){const e=this.idPromise;if(void 0===e)return;this.id=void 0,this.idPromise=void 0;const t=yield e;s.Z.invokeCrypto("aes-ctr-destroy",t)}))}destroy(){this.release()}}const U=new class{constructor(){this.tag=239,this.obfuscateTag=new Uint8Array([this.tag,this.tag,this.tag,this.tag])}encodePacket(e){const t=e.byteLength>>2;let a;return a=t<127?new Uint8Array([t]):new Uint8Array([127,255&t,t>>8&255,t>>16&255]),a.concat(e)}readPacket(e){let t=e[0];return t>=127?(t=e[1]|e[2]<<8|e[3]<<16,e.slice(4,t<<3)):e.slice(1,t<<3)}};var D=a(9174);function E(e){const t=e.length,a=new Array(t);for(let s=0;sF(this,void 0,void 0,(function*(){this.connected=!0,Z.setTransportOpened("websocket");const e=yield this.obfuscation.init(this.codec);this.connected&&(this.connection.send(e),this.networker&&(this.pending.length=0,this.networker.setConnectionStatus(D.Q.Connected),this.networker.cleanupSent(),this.networker.resend()),setTimeout((()=>{this.releasePending()}),0))})),this.onMessage=e=>F(this,void 0,void 0,(function*(){let t=yield this.obfuscation.decode(new Uint8Array(e));if(t=this.codec.readPacket(t),this.networker)return this.debug&&this.log.debug("redirecting to networker",t.length),void this.networker.parseResponse(t).then((e=>{this.debug&&this.log.debug("redirecting to networker response:",e);try{this.networker.processMessage(e.response,e.messageId,e.sessionId)}catch(e){this.log.error("handleMessage networker processMessage error",e)}})).catch((e=>{this.log.error("handleMessage networker parseResponse error",e)}));const a=this.pending.shift();a?a.resolve(t):this.debug&&this.log.debug("no pending for res:",E(t))})),this.onClose=()=>{let e,t;if(this.clear(),this.autoReconnect){const a=Date.now(),s=a-this.lastCloseTime;e=!isNaN(s)&&s{if(void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0),!this.connection){if(this.log("trying to reconnect..."),this.lastCloseTime=Date.now(),this.networker)this.networker.setConnectionStatus(D.Q.Connecting);else for(const e of this.pending)e.bodySent&&(e.bodySent=!1);this.connect()}};let i=S.v9.Error|S.v9.Log;this.debug&&(i|=S.v9.Debug),this.log=(0,S.kg)(`TCP-${t}`+s,i),this.log("constructor"),this.connect()}clear(){this.connected&&Z.setTransportClosed("websocket"),this.connected=!1,this.connection&&(this.connection.removeEventListener("open",this.onOpen),this.connection.removeEventListener("close",this.onClose),this.connection.removeEventListener("message",this.onMessage),this.connection=void 0)}forceReconnect(){this.close(),this.reconnect()}destroy(){this.setAutoReconnect(!1),this.close(),this.obfuscation&&this.obfuscation.destroy(),this.pending.forEach((e=>{e.reject&&e.reject()})),this.pending.length=0}close(){const e=this.connection;if(e){const t=this.connected;this.clear(),t&&(e.addEventListener("message",this.onMessage),e.addEventListener("close",(()=>{e.removeEventListener("message",this.onMessage)}),{once:!0}),e.close())}}setAutoReconnect(e){this.autoReconnect=e,e?this.connection||void 0!==this.reconnectTimeout||this.reconnect():void 0!==this.reconnectTimeout&&(clearTimeout(this.reconnectTimeout),this.reconnectTimeout=void 0)}connect(){this.connection&&this.close(),this.connection=new this.Connection(this.dcId,this.url,this.logSuffix),this.connection.addEventListener("open",this.onOpen),this.connection.addEventListener("close",this.onClose),this.connection.addEventListener("message",this.onMessage)}changeUrl(e){this.url!==e&&(this.url=e,this.forceReconnect())}encodeBody(e){const t=this.codec.encodePacket(e);return this.obfuscation.encode(t)}send(e){this.debug&&this.log.debug("-> body length to pending:",e.length);const t=void 0;if(!this.networker){const a=new Promise(((a,s)=>{this.pending.push({resolve:a,reject:s,body:e,encoded:t})}));return this.releasePending(),a}this.pending.push({body:e,encoded:t}),this.releasePending()}releasePending(){var e;return F(this,void 0,void 0,(function*(){if(!this.connected||this.releasingPending)return;this.releasingPending=!0;let t=this.pending.length,a=!1;for(let s=0;s body length to send:",i.length);const r=null!==(e=n.encoded)&&void 0!==e?e:n.encoded=yield this.encodeBody(i);if(!this.connected)break;this.connection.send(r),n.resolve?n.bodySent=!0:(this.pending.splice(s--,1),t--),a=!0}}this.releasingPending=void 0,this.pending.length&&a&&this.releasePending()}))}}const x=b.Z.test?"_test":"";function B(e){return"client"===e?"":"-1"}function V(e,t,a){const s=B(t),n="client"!==t?"apiws"+x+(a?"_premium":""):"apiws"+x;return`wss://${_.Z.suffix.toLowerCase()}ws${e}${s}.web.telegram.org/${n}`}class O{constructor(){this.sslSubdomains=["pluto","venus","aurora","vesta","flora"],this.dcOptions=b.Z.test?[{id:1,host:"149.154.175.10",port:80},{id:2,host:"149.154.167.40",port:80},{id:3,host:"149.154.175.117",port:80}]:[{id:1,host:"149.154.175.50",port:80},{id:2,host:"149.154.167.50",port:80},{id:3,host:"149.154.175.100",port:80},{id:4,host:"149.154.167.91",port:80},{id:5,host:"149.154.171.5",port:80}],this.chosenServers={},this.transportSocket=(e,t,a)=>{const s=V(e,t,a);let n;return n=C,new R(n,e,s,"upload"===t?"-U":"download"===t?"-D":"",1e4)},this.transportHTTP=(e,t,a)=>{let s;if(b.Z.ssl||!b.Z.http){const a=B(t);s="https://"+(this.sslSubdomains[e-1]+a)+".web.telegram.org/"+(b.Z.test?"apiw_test1":"apiw1")}else for(const t of this.dcOptions)if(t.id===e){s="http://"+t.host+(80!==t.port?":"+t.port:"")+"/apiw1";break}return new I(e,s,"upload"===t?"-U":"download"===t?"-D":"")}}chooseServer(e,t="client",a=b.Z.transport,s=!0,n){this.chosenServers.hasOwnProperty(a)||(this.chosenServers[a]={client:{},download:{},upload:{}});const i=this.chosenServers[a][t];e in i||(i[e]=[]);const r=i[e];if(!r.length||!s){let i;return i=("websocket"===a?this.transportSocket:this.transportHTTP)(e,t,n),i?(s&&r.push(i),i):(console.error("No chosenServer!",e),null)}return r[0]}static removeTransport(e,t){for(const a in e)for(const s in e[a])for(const n in e[a][s]){const i=e[a][s][n];(0,M.Z)(i,t)}}}var L=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class N extends p.Z{constructor(){super(!0),this.opened=new Map,this.addEventListener("change",(e=>{e.get("websocket")||this.waitForWebSocket()}))}pingTransports(){var e;return L(this,void 0,void 0,(function*(){const t=null!==(e=this.dcConfigurator)&&void 0!==e?e:this.dcConfigurator=new O,a=this.transports={https:t.chooseServer(_.Z.baseDcId,"client","https",!1),websocket:t.chooseServer(_.Z.baseDcId,"client","websocket",!1)},s=(0,v.Z)();this.transports.https._send(new Uint8Array,"no-cors").then((()=>s.resolve(!0)),(()=>s.resolve(!1))),setTimeout((()=>s.resolve(!1)),2e3);const n=(0,v.Z)(),i=a.websocket;i.setAutoReconnect(!1),i.connection.addEventListener("close",(()=>n.resolve(!1)),{once:!0}),i.connection.addEventListener("open",(()=>n.resolve(!0)),{once:!0}),setTimeout((()=>{n.isFulfilled||n.isRejected||(i.connection&&i.connection.close(),n.resolve(!1))}),2e3);const[r,o]=yield Promise.all([s,n]);for(const e in a)a[e].destroy();return{https:r||this.opened.get("https")>0,websocket:o||this.opened.get("websocket")>0}}))}waitForWebSocket(){return L(this,void 0,void 0,(function*(){if(!this.pinging){for(this.pinging=!0;;){const{https:e,websocket:t}=yield this.pingTransports();if((e||t)&&this.dispatchEvent("transport",t||!e?"websocket":"https"),t)break;yield(0,P.Z)(1e4)}this.pinging=!1}}))}setTransportValue(e,t){let a=this.opened.get(e)||0;a+=t?1:-1,this.opened.set(e,a),this.dispatchEvent("change",this.opened)}setTransportOpened(e){return this.setTransportValue(e,!0)}setTransportClosed(e){return this.setTransportValue(e,!1)}}const Z=new N,j=(0,v.Z)();var q=a(6654);class G{setManagers(e){Object.assign(this,e)}}var H=a(3127),W=a(3989),z=a(5466);let K;function J(e){return null!=K?K:K=function(e){return t=this,a=void 0,n=function*(){const t=(0,z.$)((0,S.kg)("STORAGES-LOADER")),a=Object.keys(e),s=a.map((a=>{const s=e[a].getAll();return t(s,"storage "+a)})),n={},i=yield Promise.all(s);for(let e=0,t=a.length;e({storage:this.storages[e],results:t[e]})))},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}}class Q extends G{getState(){return this.apiManager.invokeApi("account.getPassword").then((e=>e))}updateSettings(e={}){return this.getState().then((t=>{let a,s;const n={password:null,new_settings:{_:"account.passwordInputSettings",hint:e.hint,email:e.email}};a=e.currentPassword?this.cryptoWorker.invokeCrypto("computeSRP",e.currentPassword,t,!1):Promise.resolve({_:"inputCheckPasswordEmpty"});const i=t.new_algo,r=new Uint8Array(i.salt1.length+32);return w(r),r.set(i.salt1,0),i.salt1=r,s=e.newPassword?this.cryptoWorker.invokeCrypto("computeSRP",e.newPassword,t,!0):Promise.resolve(new Uint8Array),Promise.all([a,s]).then((e=>(n.password=e[0],n.new_settings.new_algo=i,n.new_settings.new_password_hash=e[1],this.apiManager.invokeApi("account.updatePasswordSettings",n))))}))}getInputCheckPassword(e,t){return this.cryptoWorker.invokeCrypto("computeSRP",e,t,!1)}check(e,t,a={}){return this.getInputCheckPassword(e,t).then((e=>this.apiManager.invokeApi("auth.checkPassword",{password:e},a).then((e=>("auth.authorization"===e._&&this.apiManager.setUser(e.user),e)))))}confirmPasswordEmail(e){return this.apiManager.invokeApi("account.confirmPasswordEmail",{code:e})}resendPasswordEmail(){return this.apiManager.invokeApi("account.resendPasswordEmail")}cancelPasswordEmail(){return this.apiManager.invokeApi("account.cancelPasswordEmail")}}var Y=a(6848),X=a(5471);class ee extends G{constructor(){super(...arguments),this.contexts=new Map,this.links={},this.log=(0,S.kg)("RD",void 0,!0)}saveContext(e,t,a){[a,e]=this.getContexts(e),a||(a=new Set,this.contexts.set(e,a)),this.links[E(e)]=e;for(const e of a)if((0,Y.Z)(e,t))return;a.add(t)}getReferenceByLink(e){return this.links[E(e)]}getContexts(e){return[this.contexts.get(e)||(e=this.getReferenceByLink(e)||e,this.contexts.get(e)),e]}getContext(e){const t=this.getContexts(e);return t[0]?[t[0].values().next().value,t[1]]:void 0}deleteContext(e,t,a){if([a,e]=this.getContexts(e),a)for(const s of a)if((0,Y.Z)(s,t))return a.delete(s),a.size||(this.contexts.delete(e),delete this.links[E(e)]),!0;return!1}refreshReference(e,t){if(this.log("refreshReference: start",e.slice(),t),!t){const a=this.getContext(e);if(!a)return this.log("refreshReference: got no context for reference:",e.slice()),Promise.reject("NO_CONTEXT");[t,e]=a}let a;switch(null==t?void 0:t.type){case"message":a=this.appMessagesManager.reloadMessages(t.peerId,t.messageId,!0);break;case"emojiesSounds":a=this.refreshEmojiesSoundsPromise||this.appStickersManager.getAnimatedEmojiSounds(!0).then((()=>{this.refreshEmojiesSoundsPromise=void 0}));break;case"userFull":a=Promise.resolve(this.appProfileManager.getProfile(t.userId,!0));break;case"customEmoji":a=this.appEmojiManager.getCustomEmojiDocuments([t.docId]);break;case"attachMenuBotIcon":a=this.appAttachMenuBotsManager.getAttachMenuBot(t.botId,!0);break;case"wallPaper":a=this.appThemesManager.getWallPaperById(t.wallPaperId);break;default:return this.log.warn("refreshReference: not implemented context",t),Promise.reject()}const s=E(e);return this.log("refreshReference: refreshing reference:",s),a.then((()=>{const a=E(e);if(this.log("refreshReference: refreshed, reference before:",s,"after:",a),s!==a)return e;this.deleteContext(e,t);const n=this.getContext(e);if(n)return this.refreshReference(e,n[0]);throw this.log.error("refreshReference: no new context, reference before:",s,"after:",a,t),(0,X.Z)("NO_NEW_CONTEXT")}))}}var te=a(7298),ae=a(7381),se=a(252),ne=a(7625),ie=a(6519);function re(e,t){if(!e)return t;for(var a in e)t.hasOwnProperty(a)||delete e[a];for(var a in t)e[a]=t[a];return e}var oe=a(2790),pe=a(3781),de=a(3385),fe=a(5880),ce=a(8050),le=a(2946);function me(e){var t,a;const s=[e.fromId,e.viaBotId,e.fwdFromId],n=e.media;if(n){const e=n.user_id;void 0!==e&&s.push(e.toPeerId());const t=n.results,a=null==t?void 0:t.recent_voters;(null==a?void 0:a.length)&&s.push(...a.map((e=>e.toPeerId())))}const i=null===(t=e.reactions)||void 0===t?void 0:t.recent_reactions;(null==i?void 0:i.length)&&s.push(...i.map((e=>(0,le.Z)(e.peer_id))));const r=e.action;if(r){const e=[...r.users||[],r.user_id,r.inviter_id];s.push(...e.filter(Boolean).map((e=>e.toPeerId())));const t=[r.channel_id,r.chat_id];s.push(...t.filter(Boolean).map((e=>e.toPeerId(!0))))}const o=null===(a=e.replies)||void 0===a?void 0:a.recent_repliers;return(null==o?void 0:o.length)&&s.push(...o.map((e=>(0,le.Z)(e)))),new Set(s.filter(Boolean))}var ge=a(8027);function he(e,t,a){return e[t]=a}var ue=a(8938);const ye=void 0;class _e extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{if(e){this.allDialogsLoaded={},this.pinnedOrders={};for(const e of o.DZ)this.pinnedOrders[e]=[]}else{this.storage.clear(),this.allDialogsLoaded={},this.saveAllDialogsLoaded(),this.pinnedOrders=Object.assign({},this.pinnedOrders);for(const e of o.DZ)this.resetPinnedOrder(e);this.savePinnedOrders()}this.forumTopics=new Map,this.folders={},this.dialogsOffsetDate={},this.dialogsNum=0,this.dialogsIndex=new ae.Z({clearBadChars:!0,ignoreCase:!0,latinize:!0,includeTag:!0}),this.cachedResults={query:"",count:0,dialogs:[],folderId:0}},this.onUpdateFolderPeers=e=>{e.folder_peers.forEach((e=>{var t;const{folder_id:a,peer:s}=e,n=this.appPeersManager.getPeerId(s),i=this.dropDialog(n)[0];i&&((null===(t=i.pFlags)||void 0===t?void 0:t.pinned)&&this.handleDialogUnpinning(i,a),i.folder_id=a,this.generateIndexForDialog(i),this.pushDialog({dialog:i})),this.appMessagesManager.scheduleHandleNewDialogs(n,i)}))},this.onUpdateDialogPinned=e=>{var t;const a=null!==(t=e.folder_id)&&void 0!==t?t:o.J$,s=this.appPeersManager.getPeerId(e.peer.peer),n=this.getDialogOnly(s);this.handleDialogTogglePinned(n,e.pFlags.pinned,a)},this.onUpdateChannelPinnedTopic=e=>{const t=e.channel_id.toPeerId(!0),a=(0,pe.Z)(e.topic_id),s=this.getForumTopic(t,a);s&&this.handleDialogTogglePinned(s,e.pFlags.pinned,this.getFilterIdForForum(s))},this.onUpdatePinnedDialogs=e=>{var t;const a=null!==(t=e.folder_id)&&void 0!==t?t:o.J$;e.order?this.handleDialogsPinned(a,e.order.map((e=>this.appPeersManager.getPeerId(e.peer)))):this.apiManager.invokeApi("messages.getPinnedDialogs",{folder_id:a}).then((e=>{this.applyDialogs(e),this.handleDialogsPinned(a,e.dialogs.map((e=>e.peerId)))}))},this.onUpdateChannelPinnedTopics=e=>{return t=this,a=void 0,n=function*(){const t=e.channel_id.toPeerId(!0);if(!this.forumTopics.get(t))return;const a=t;if(e.order){const t=e.order.map((e=>(0,pe.Z)(e)));this.handleDialogsPinned(a,t)}else{const e=yield this.apiManager.getLimit("topicPin",!0),s=this.apiManager.invokeApi("channels.getForumTopics",{channel:this.appChatsManager.getChannelInput(t.toChatId()),limit:e,offset_date:0,offset_id:0,offset_topic:0}),n=(yield this.processTopics(t,s)).topics.filter((e=>e.pFlags.pinned));this.handleDialogsPinned(a,n.map((e=>e.id)))}},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}}after(){this.clear(!0),this.rootScope.addEventListener("language_change",(()=>{const e=this.appUsersManager.getSelf().id.toPeerId(!1);if(this.getDialogOnly(e)){const t=this.appPeersManager.getPeerSearchText(e);this.dialogsIndex.indexObject(e,t)}}));const e=e=>{const t=this.getCachedDialogs(!1);for(let a=0;a{const e=this.getCachedDialogs(!1);for(const e in this.folders)+e>1&&delete this.folders[e];for(let t=0;t{const t=this.getCachedDialogs(!1),a=this.getDialogIndexKeyByFilterId(e.id);for(let e=0;e{this.processChangedUnreadOrUnmuted(e.peerId)})),this.rootScope.addEventListener("chat_update",(e=>{const t=this.appChatsManager.getChat(e),a=e.toPeerId(!0);t.pFlags.left&&this.getDialogOnly(a)&&this.dropDialogOnDeletion(a)})),this.rootScope.addEventListener("chat_toggle_forum",(({chatId:e,enabled:t})=>{const a=e.toPeerId(!0);t||this.flushForumTopicsCache(a),this.processChangedUnreadOrUnmuted(a)})),this.apiUpdatesManager.addMultipleEventsListeners({updateFolderPeers:this.onUpdateFolderPeers,updateDialogPinned:this.onUpdateDialogPinned,updateChannelPinnedTopic:this.onUpdateChannelPinnedTopic,updatePinnedDialogs:this.onUpdatePinnedDialogs,updateChannelPinnedTopics:this.onUpdateChannelPinnedTopics}),Promise.all([this.appStateManager.getState(),this.appStoragesManager.loadStorage("dialogs")]).then((([e,{results:t,storage:a}])=>{this.storage=a,this.dialogs=this.storage.getCache();for(const t of o.DZ){const a=e.pinnedOrders[t];if(!a)continue;const s=this.getPinnedOrders(t);s.splice(0,s.length,...a)}t.length&&W.Z.freezeSaving(this.setDialogsFromState.bind(this,t),["chats","dialogs","messages","users"]),this.allDialogsLoaded=e.allDialogsLoaded||{},t.length&&this.appDraftsManager.addMissedDialogs()}))}setDialogsFromState(e){for(let t=0,a=e.length;tthis.allDialogsLoaded[e]))&&(this.allDialogsLoaded[void 0]=!0),this.saveAllDialogsLoaded())}saveAllDialogsLoaded(){this.appStateManager.pushToState("allDialogsLoaded",this.allDialogsLoaded)}handleDialogUnpinning(e,t){delete e.pFlags.pinned,(0,M.Z)(this.getPinnedOrders(t),this.isFilterIdForForum(t)?e.id:e.peerId),this.savePinnedOrders()}savePinnedOrders(){this.appStateManager.pushToState("pinnedOrders",this.pinnedOrders)}resetPinnedOrder(e){this.getPinnedOrders(e).length=0}getPinnedOrders(e){let t=this.pinnedOrders[e];return!t&&this.isFilterIdForForum(e)&&((0,ge.Z)(this.pinnedOrders,[e]),t=this.pinnedOrders[e]=[]),t}isDialogPinned(e,t){const a=this.filtersStorage.getFilter(t);let s;return s=a?-1!==a.pinnedPeerIds.indexOf(e):!!this.getDialogOnly(e).pFlags.pinned,s}getOffsetDate(e){const t=this.dialogsOffsetDate[e]||0;return e!==ye||t?t:Math.min(...Array.from(o.DZ).sort(((e,t)=>e-t)))}generateFolder(e){const t={dialogs:[],id:e,unreadMessagesCount:0,unreadPeerIds:new Set,unreadUnmutedPeerIds:new Set};return(0,ge.Z)(t,["dispatchUnreadTimeout"]),t}getFolder(e){var t,a;return null!==(t=(a=this.folders)[e])&&void 0!==t?t:a[e]=this.generateFolder(e)}isFilterIdForForum(e){return e&&e<0}getFilterIdForForum(e){return e.peerId}getDialogKey(e){return this.isTopic(e)?e.id:e.peerId}getFolderDialogs(e,t=!0){if(e===ye)return this.getCachedDialogs(t);const a=this.getFolder(e);return this.isFilterIdForForum(e)?t?a.dialogs.filter((e=>!e.pFlags.hidden)):a.dialogs:t?a.dialogs.filter((e=>void 0===e.migratedTo)):a.dialogs}getNextDialog(e,t,a){const s=this.getFolderDialogs(a,!0);let n;if(e){const a=s.findIndex((t=>t.peerId===e));-1!==a&&(n=s[t?a+1:a-1])}else t&&(n=s[0]);return n}getDialogIndexKeyByFilterId(e){if(this.isFilterIdForForum(e))return(0,de.Z)();if(o.DZ.has(e))return(0,de.Z)(e);const t=this.filtersStorage.getFilter(e);return(0,de.Z)(t.localId)}isDialogUnmuted(e){return!this.appNotificationsManager.isPeerLocalMuted({peerId:e.peerId,respectType:!0,threadId:this.isTopic(e)?e.id:void 0})}getFolderUnreadCount(e){const t=this.getFolder(e);return{unreadUnmutedCount:t.unreadUnmutedPeerIds.size,unreadCount:t.unreadPeerIds.size}}getCachedDialogs(e){const t=Array.from(o.DZ).map((t=>this.getFolderDialogs(t,e)));return[].concat(...t)}setDialogIndexInFilter(e,t,a){var s,n;let i;const r=this.isTopic(e),p=r||o.DZ.has(a.id);if(this.filtersStorage.testDialogForFilter(e,a)){const t=r?this.getPinnedOrders(this.getFilterIdForForum(e)):a.pinnedPeerIds,o=this.getDialogKey(e),d=t.indexOf(o);i=-1!==d?this.generateDialogIndex(this.generateDialogPinnedDateByIndex(t.length-1-d),!0):(null===(s=e.pFlags)||void 0===s?void 0:s.pinned)||p?this.generateIndexForDialog(e,!0,void 0,!p):null!==(n=(0,ce.Z)(e))&&void 0!==n?n:this.generateIndexForDialog(e,!0)}return he(e,t,i)}getDialog(e,t,a,s=!0){const n=[];a&&(t=e),void 0===t?n.push(...Array.from(o.DZ).map((e=>this.getFolder(e).dialogs))):n.push(this.getFolderDialogs(t,!1));const i=a?e=>e.id===a:t=>t.peerId===e;for(const e of n){let t=0,a=0;for(let n=e.length;tt.id===e.id:t=>t.peerId===e.peerId,d=r.findIndex(p),f=r[d],c=this.getDialogIndex(f,i);a&&n>o.Zi&&(a=void 0);const l=a?void 0:this.setDialogIndexInFilter(e,i,t);return c!==l&&(!!c!=!!l&&this.prepareFolderUnreadCountModifyingByDialog(n,e,!!l),-1!==d&&r.splice(d,1),l&&(0,ie.Z)(r,e,(e=>this.getDialogIndex(e,i)),-1),!0)}prepareDialogUnreadCountModifying(e,t){const a=this.isTopic(e),s=[],n=a?this.getFilterIdForForum(e):e.folder_id;if(s.push(this.prepareFolderUnreadCountModifyingByDialog(n,e,t)),!a){const a=this.filtersStorage.getFilters();for(const n in a){const i=a[n];this.filtersStorage.testDialogForFilter(e,i)&&s.push(this.prepareFolderUnreadCountModifyingByDialog(i.id,e,t))}}return()=>!t&&s.forEach((e=>e()))}prepareFolderUnreadCountModifyingByDialog(e,t,a){const s=this.appMessagesManager.getDialogUnreadCount(t),n=this.isDialogUnmuted(t);if(void 0===a)return()=>{const a=this.appMessagesManager.getDialogUnreadCount(t),n=this.isDialogUnmuted(t),i=a-s;this.modifyFolderUnreadCount(e,i,!!a,a&&n,t)};{const i=a?s:-s;this.modifyFolderUnreadCount(e,i,!!s,s&&n,t)}}modifyFolderUnreadCount(e,t,a,s,n){var i;const{peerId:r}=n,o=this.appPeersManager.isForum(r),p=this.isTopic(n);if(o&&!p){const i=this.getForumUnreadCount(r);if(i instanceof Promise)return void i.then((({count:t,hasUnmuted:a})=>{n=this.getDialogOnly(r);const s=this.getFolder(e);n&&this.appPeersManager.isForum(r)&&s&&s.dialogs.some((e=>e.peerId===r))&&this.modifyFolderUnreadCount(e,0,!1,!1,n)}));t=0,a=i.count>0,s=i.hasUnmuted}const d=this.getFolder(e);t&&(d.unreadMessagesCount=Math.max(0,d.unreadMessagesCount+t));const f=this.getDialogKey(n);a?d.unreadPeerIds.add(f):d.unreadPeerIds.delete(f),s?d.unreadUnmutedPeerIds.add(f):d.unreadUnmutedPeerIds.delete(f),null!==(i=d.dispatchUnreadTimeout)&&void 0!==i||(d.dispatchUnreadTimeout=T.Z.setTimeout((()=>{d.dispatchUnreadTimeout=void 0;const e=Object.assign({},d);delete e.dialogs,this.rootScope.dispatchEvent("folder_unread",e),p&&this.processChangedUnreadOrUnmuted(r)}),0))}processChangedUnreadOrUnmuted(e){const t=this.getDialogOnly(e);t&&(this.processDialogForFilters(t),this.prepareDialogUnreadCountModifying(t)(),this.rootScope.dispatchEvent("dialog_unread",{peerId:e,dialog:t}))}generateIndexForDialog(e,t,a,s){var n;if(!t)return;const i=this.isTopic(e);let r,o=0;if(e.pFlags.hidden)o=this.generateDialogPinnedDateByIndex(4095),r=!0;else if(e.pFlags.pinned&&!s)o=this.generateDialogPinnedDate(e),r=!0;else{if(a||(a=this.appMessagesManager.getMessageByPeer(e.peerId,e.top_message)),o=(null==a?void 0:a.date)||o,!i){const t=this.appPeersManager.isChannel(e.peerId)&&e.peerId.toChatId();if(t){const e=this.appChatsManager.getChat(t);(!o||e.date&&e.date>o)&&(o=e.date)}}"draftMessage"===(null===(n=e.draft)||void 0===n?void 0:n._)&&e.draft.date>o&&(o=e.draft.date)}o||(o=(0,te.Z)(!0));const p=this.generateDialogIndex(o,r);if(t)return p;he(e,(0,de.Z)(e.folder_id),p)}generateDialogPinnedDateByIndex(e){return 2147418112+(65535&e)}generateDialogPinnedDate(e){const t=this.isTopic(e),a=this.getPinnedOrders(t?this.getFilterIdForForum(e):e.folder_id),s=this.getDialogKey(e);let n=a.indexOf(s);return-1===n&&(a.unshift(s),n=0,t||this.savePinnedOrders()),this.generateDialogPinnedDateByIndex(a.length-1-n)}setDialogToState(e){if(this.isTopic(e))return;const{peerId:t,pts:a}=e,s=this.appMessagesManager.getHistoryStorage(t),n=this.appMessagesManager.getHistoryMessagesStorage(t),i=s.history.slice;let r;for(let e=0,a=i.length;e{"dialogFolder"===t._&&e.dialogs.splice(a,1)})),(0,ue.Z)(s),this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.appMessagesManager.saveMessages(e.messages);const n=new Map;s.forEach((e=>{var t,s;const i=this.appPeersManager.getPeerId(e.peer);let r=e.top_message;const o=this.appMessagesManager.pendingTopMsgs[i];if(o){const t=this.appMessagesManager.getMessageByPeer(i,o),a=this.appMessagesManager.getMessageByPeer(i,r);(!r||t&&(!a||(null==t?void 0:t.date)>(null==a?void 0:a.date)))&&(e.top_message=r=o,this.appMessagesManager.getHistoryStorage(i).maxId=o)}if(r||"draftMessage"===(null===(t=e.draft)||void 0===t?void 0:t._)){if(this.saveDialog({dialog:e})){const t=(e=>{let t=n.get(e);return t||n.set(e,t={}),t})(i);a?(null!==(s=t.topics)&&void 0!==s?s:t.topics=new Map).set(e.id,e):t.dialog=e}}else this.dropDialogWithEvent(i,a?this.getDialogKey(e):void 0);const p=this.appMessagesManager.getUpdateAfterReloadKey(i,a?this.getDialogKey(e):void 0),d=this.appMessagesManager.newUpdatesAfterReloadToHandle[p];if(void 0!==d){for(const e of d)d.delete(e),this.apiUpdatesManager.saveUpdate(e);d.size||delete this.appMessagesManager.newUpdatesAfterReloadToHandle[p]}})),n.size&&this.rootScope.dispatchEvent("dialogs_multiupdate",n)}getDialogOffsetDate(e){const t=this.appMessagesManager.getMessageByPeer(e.peerId,e.top_message);return(null==t?void 0:t.date)||0}canSaveDialogByPeerId(e){if(e.isAnyChat()){const t=this.appChatsManager.getChat(e.toChatId());if("channelForbidden"===t._||t.pFlags.left)return!1}return!0}saveDialog({dialog:e,folderId:t,ignoreOffsetDate:a,saveGlobalOffset:s}){var n,i;const r=this.isTopic(e),p=!r,d=r?e.id=(0,pe.Z)(e.id):void 0;r||null!=t||(t=null!==(n=e.folder_id)&&void 0!==n?n:o.J$);const f=this.appPeersManager.getPeerId(e.peer);if(!f)return console.error("saveConversation no peerId???",e,t),!1;if(r||"dialog"===e._||console.error("saveConversation not regular dialog",e,Object.assign({},e)),p&&!this.canSaveDialogByPeerId(f))return!1;const c=this.appPeersManager.isChannel(f)?f.toChatId():o.NM;if(p){const e=this.appPeersManager.getPeerSearchText(f);this.dialogsIndex.indexObject(f,e)}const l=this.getDialogOrTopic(f,d);let m,g;if(e.top_message){m=(0,pe.Z)(e.top_message);const t=(null==l?void 0:l.top_message)&&this.appMessagesManager.getMessageByPeer(f,l.top_message);(null===(i=null==t?void 0:t.pFlags)||void 0===i?void 0:i.is_outgoing)&&l.top_message>=m&&(m=l.top_message),g=this.appMessagesManager.getMessageByPeer(f,m)}else m=this.appMessagesManager.generateTempMessageId(f),g={_:"message",id:m,mid:m,from_id:this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId(!1)),peer_id:this.appPeersManager.getOutputPeer(f),deleted:!0,pFlags:{out:!0},date:0,message:""},this.appMessagesManager.saveMessages([g],{isOutgoing:!0});if((null==g?void 0:g.pFlags)||this.appMessagesManager.log.error("saveConversation no message:",e,g),p&&!c&&f.isAnyChat()){const t=this.appChatsManager.getChat(f.toChatId());if(t&&t.migrated_to&&t.pFlags.deactivated){const a=this.appPeersManager.getPeerId(t.migrated_to);this.appMessagesManager.migratedFromTo[f]=a,this.appMessagesManager.migratedToFrom[a]=f,e.migratedTo=a}}if(e.top_message=m,e.read_inbox_max_id=(0,pe.Z)(l&&!e.read_inbox_max_id?l.read_inbox_max_id:e.read_inbox_max_id),e.read_outbox_max_id=(0,pe.Z)(l&&!e.read_outbox_max_id?l.read_outbox_max_id:e.read_outbox_max_id),p&&void 0===e.folder_id&&"dialog"===e._&&(e.folder_id=l?l.folder_id:t),e.draft=this.appDraftsManager.saveDraft({peerId:f,threadId:d,draft:e.draft}),e.peerId=f,g&&g.pFlags.is_outgoing){const t=g.pFlags.out;m>e[t?"read_outbox_max_id":"read_inbox_max_id"]?(g.pFlags.unread=!0,e.unread_count||t||++e.unread_count):delete g.pFlags.unread}const h=this.appMessagesManager.getHistoryStorage(f,d),u=h.history.slice;if(u.length?u.isEnd(se.D.Bottom)||(h.history.insertSlice([m]).setEnd(se.D.Bottom),h.count||(h.count=1),this.appMessagesManager.mergeReplyKeyboard(h,g)&&this.rootScope.dispatchEvent("history_reply_markup",{peerId:f})):(h.history.unshift(m),h.count||(h.count=1),this.appMessagesManager.mergeReplyKeyboard(h,g)&&this.rootScope.dispatchEvent("history_reply_markup",{peerId:f})),h.maxId=m,h.readMaxId=e.read_inbox_max_id,h.readOutboxMaxId=e.read_outbox_max_id,this.appNotificationsManager.savePeerSettings({peerId:f,threadId:r?e.id:void 0,settings:e.notify_settings}),p&&c&&e.pts&&this.apiUpdatesManager.addChannelState(c,e.pts),this.generateIndexForDialog(e),l){const t=this.dialogsStorage.prepareDialogUnreadCountModifying(l);re(l,e),t()}return this.pushDialog({dialog:e,offsetDate:null==g?void 0:g.date,ignoreOffsetDate:a,saveGlobalOffset:s}),r&&this.processTopicUpdate(e,l),!0}processTopicUpdate(e,t){if(!t)return;const{peerId:a,id:s}=e,n=e.icon_emoji_id!==t.icon_emoji_id,i=e.title!==t.title,r=n||i;n&&this.rootScope.dispatchEvent("avatar_update",{peerId:a,threadId:s}),r&&this.rootScope.dispatchEvent("peer_title_edit",{peerId:a,threadId:s})}getDialogs(e){const{query:t="",offsetIndex:a,limit:s=20,filterId:n=o.J$,skipMigrated:i=!1}=e,r=this.isFilterIdForForum(n);if(!r&&!o.DZ.has(n)){const t=[],a=this.appUsersManager.fillContacts();a.cached||t.push(a.promise);const s=this.filtersStorage.reloadMissingPeerIds(n);if(s&&t.push(s),t.length)return Promise.all(t).then((()=>this.getDialogs(e)))}const p=o.DZ.has(n)&&!this.getOffsetDate(n)||r?n:ye;let d=this.getFolderDialogs(n,i);const f=this.getDialogIndexKeyByFilterId(n);if(t&&!r){if(!s||this.cachedResults.query!==t||this.cachedResults.folderId!==n){this.cachedResults.query=t,this.cachedResults.folderId=n;const e=this.dialogsIndex.search(t),a=[];for(const t in this.dialogs){const s=this.dialogs[t];e.has(s.peerId)&&s.folder_id===n&&a.push(s)}a.sort(((e,t)=>this.getDialogIndex(t,f)-this.getDialogIndex(e,f))),this.cachedResults.dialogs=a,this.cachedResults.count=a.length}d=this.cachedResults.dialogs}else this.cachedResults.query="";let c=0;if(a>0)for(let e=d.length;cthis.getDialogIndex(d[c],f));++c);const l=this.isDialogsLoaded(p),m=d.length>=c+s;if(t||l||m){const e=d.slice(c,c+s);return{dialogs:e,count:l?d.length:null,isTopEnd:d.length&&(e[0]&&e[0]===d[0]||this.getDialogIndex(d[0],f)=d.length}}return this.appMessagesManager.getTopMessages({limit:s,folderId:p}).then((e=>{if(i&&(d=this.getFolderDialogs(n,i)),c=0,a>0)for(let e=d.length;cthis.getDialogIndex(d[c],f));++c);const t=d.slice(c,c+s);return{dialogs:t,count:void 0===e.count?d.length:e.count,isTopEnd:d.length&&(t[0]&&t[0]===d[0]||this.getDialogIndex(d[0],f){const t={},a=[];for(const[e,n]of s.getTopicPromises)t[e]=n,a.push((0,oe.Z)(e));s.getTopicPromises.clear();const n=()=>{for(const e in t)t[e].resolve(void 0),s.deletedTopics.add(+e)};if(this.getForumTopicsCache(e)===s)return this.apiManager.invokeApi("channels.getForumTopicsByID",{channel:this.appChatsManager.getChannelInput(e.toChatId()),topics:a}).then((a=>{if(this.getForumTopicsCache(e)===s)return this.applyDialogs(a,e),a.topics.forEach((a=>{"forumTopic"===a._&&(t[a.id].resolve(a),delete t[e])})),a}),(()=>{})).then((()=>{n(),s.getTopicsPromise=void 0,s.getTopicPromises.size&&this.getForumTopicById(e)}));n()}))),n||s.getTopicsPromise}getForumTopic(e,t){var a;const s=this.forumTopics.get(e);return null===(a=null==s?void 0:s.topics)||void 0===a?void 0:a.get(t)}getForumTopicOrReload(e,t){var a;const s=this.getForumTopic(e,t);if(s)return s;const n=this.getForumTopicsCache(e);return(null===(a=null==n?void 0:n.deletedTopics)||void 0===a?void 0:a.has(t))?void 0:this.getForumTopicById(e,t)}processTopics(e,t){return(0,q.Z)(t,(t=>{"pts"in t&&this.apiUpdatesManager.addChannelState(e.toChatId(),t.pts);const a=this.appPeersManager.getOutputPeer(e);return t.topics=t.topics.map((e=>{if("forumTopicDeleted"!==e._)return e.peer=a,e.id=(0,pe.Z)(e.id),e})).filter(Boolean),t}))}processTopicsPromise(e,t){return t.then((t=>(this.processTopics(e,t),t)))}getForumUnreadCount(e){if(!this.appPeersManager.isForum(e))return;const t=this.getFolder(e),a=t.dialogs.length>=20||this.isDialogsLoaded(e)?t.dialogs.slice(0,20):(0,q.Z)(this.getDialogs({filterId:e,limit:20}),(e=>e.dialogs));return(0,q.Z)(a,(e=>({count:e.reduce(((e,t)=>e+ +!!t.unread_count),0),hasUnmuted:e.some((e=>e.unread_count&&this.isDialogUnmuted(e)))})))}handleDialogTogglePinned(e,t,a){e&&(t?e.pFlags.pinned=!0:this.handleDialogUnpinning(e,a),this.generateIndexForDialog(e)),this.appMessagesManager.scheduleHandleNewDialogs(e.peerId,e)}handleDialogsPinned(e,t){const a=this.isFilterIdForForum(e);this.resetPinnedOrder(e),this.getPinnedOrders(e).push(...t),this.savePinnedOrders(),t.reverse();const s={};t.forEach((t=>{s[t]=!0;const n=a?e:t,i=a?t:void 0,r=this.getDialogOrTopic(n,i);this.appMessagesManager.scheduleHandleNewDialogs(n,r),r&&(r.pFlags.pinned=!0,this.generateIndexForDialog(r))}));const n=this.getFolderDialogs(e,!1);for(const e of n){if(!e.pFlags.pinned)break;s[this.getDialogKey(e)]||(delete e.pFlags.pinned,this.generateIndexForDialog(e),this.appMessagesManager.scheduleHandleNewDialogs(e.peerId,e))}}}var ve=a(8479),Pe=a(4064),be=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Me=[["pinned_peers","pinnedPeerIds"],["exclude_peers","excludePeerIds"],["include_peers","includePeerIds"]],Se=o.DZ.size,Ie={_:"dialogFilter",pFlags:{},flags:0,id:0,title:"",exclude_peers:[],include_peers:[],pinned_peers:[],excludePeerIds:[],includePeerIds:[],pinnedPeerIds:[]};class Ce extends G{constructor(){super(...arguments),this.clear=e=>{if(e){this.filters={},this.filtersArr=[],this.reloadedPeerIds=new Set,this.localFilters={};for(const e of o.DZ)this.localFilters[e]=this.generateLocalFilter(e)}else this.reloadedPeerIds.clear(),this.clearFilters();this.localId=o.Gu},this.onUpdateDialogFilter=e=>{e.filter?this.saveDialogFilter(e.filter):this.filters[e.id]&&(this.rootScope.dispatchEvent("filter_delete",this.filters[e.id]),delete this.filters[e.id],(0,Pe.Z)(this.filtersArr,(t=>t.id===e.id))),this.pushToState()},this.onUpdateDialogFilters=e=>{const t=(0,ve.Z)(this.filters);this.getDialogFilters(!0).then((e=>{for(const a in t){const t=+a;e.find((e=>e.id===t))||this.onUpdateDialogFilter({_:"updateDialogFilter",id:t})}this.onUpdateDialogFilterOrder({_:"updateDialogFilterOrder",order:e.map((e=>e.id))})}))},this.onUpdateDialogFilterOrder=e=>{const t=e.order.slice();t.includes(o.Zi)||t.splice(t[0]===o.J$?1:0,0,o.Zi),this.localId=o.Gu,t.forEach((e=>{const t=this.filters[e];delete t.localId,this.setLocalId(t)})),this.rootScope.dispatchEvent("filter_order",t),this.pushToState()}}after(){return this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateDialogFilter:this.onUpdateDialogFilter,updateDialogFilters:this.onUpdateDialogFilters,updateDialogFilterOrder:this.onUpdateDialogFilterOrder}),this.rootScope.addEventListener("premium_toggle",(()=>{this.onUpdateDialogFilters({_:"updateDialogFilters"})})),this.appStateManager.getState().then((e=>{this.prependFilters(e.filtersArr).map((e=>{this.saveDialogFilter(e,!1,!0)}))}))}prependFilters(e){e=e.slice();const t=this.localFilters[o.J$],a=this.localFilters[o.Zi],s=e.findIndex((e=>"dialogFilterDefault"===e._||e.id===o.J$));return-1!==s?e[s]=t:e.unshift(t),(0,Pe.Z)(e,(e=>e.id===o.Zi)),e.splice(e[0]===t?1:0,0,a),this.localId=o.Gu,e.forEach((e=>{delete e.localId})),e}generateLocalFilter(e){const t=Object.assign(Object.assign({},(0,ve.Z)(Ie)),{id:e});return e===o.J$?t.pFlags.exclude_archived=!0:e===o.Zi&&(t.pFlags.exclude_unarchived=!0),o.DZ.has(e)&&(t.pinnedPeerIds=this.dialogsStorage.getPinnedOrders(e)),t}pushToState(){this.appStateManager.pushToState("filtersArr",this.filtersArr)}testDialogForFilter(e,t){if(!t)return!0;if(o.DZ.has(t.id))return e.folder_id===t.id&&this.dialogsStorage.canSaveDialogByPeerId(e.peerId);const a=e.peerId;if(!this.appMessagesManager.getDialogOnly(a))return!1;if(t.excludePeerIds.includes(a))return!1;if(t.includePeerIds.includes(a))return!0;const s=t.pFlags;if(s.exclude_archived&&e.folder_id===o.Zi)return!1;if(s.exclude_read&&!this.appMessagesManager.isDialogUnread(e))return!1;if(s.exclude_muted&&this.appNotificationsManager.isPeerLocalMuted({peerId:a})&&(!e.unread_mentions_count||!e.unread_count))return!1;if(this.appPeersManager.isAnyChat(a)){if(s.broadcasts&&this.appPeersManager.isBroadcast(a))return!0;if(s.groups&&this.appPeersManager.isAnyGroup(a))return!0}else{const e=a.toUserId();if(this.appUsersManager.isBot(e))return!!s.bots;if(s.non_contacts&&!this.appUsersManager.isContact(e))return!0;if(s.contacts&&this.appUsersManager.isContact(e))return!0}return!1}testDialogForFilterId(e,t){return this.testDialogForFilter(e,this.filters[t])}getFilter(e){return this.filters[e]}getFilters(){return this.filters}clearFilters(){const e=this.getFilters();for(const t in e)o.DZ.has(+t)||this.onUpdateDialogFilter({_:"updateDialogFilter",id:+t})}toggleDialogPin(e,t){return be(this,void 0,void 0,(function*(){const a=this.filters[t],s=a.pinnedPeerIds.indexOf(e),n=-1!==s;if(n&&(a.pinned_peers.splice(s,1),a.pinnedPeerIds.splice(s,1)),!n){if(a.pinned_peers.length>=(yield this.apiManager.getConfig()).pinned_infolder_count_max)return Promise.reject((0,X.Z)("PINNED_DIALOGS_TOO_MUCH"));a.pinned_peers.unshift(this.appPeersManager.getInputPeerById(e)),a.pinnedPeerIds.unshift(e)}return this.updateDialogFilter(a)}))}createDialogFilter(e,t){const a=Math.max(1,...Object.keys(this.filters).map((e=>+e)));return(e=(0,ve.Z)(e)).id=a+1,this.updateDialogFilter(e,void 0,t)}updateDialogFilter(e,t=!1,a=!1){const s=t?0:1;return this.apiManager.invokeApi("messages.updateDialogFilter",{flags:s,id:e.id,filter:t?void 0:this.getOutputDialogFilter(e)}).then((s=>{if(this.onUpdateDialogFilter({_:"updateDialogFilter",id:e.id,filter:t?void 0:e}),a){const t=[];for(const e in this.filters){const a=this.filters[e];++a.localId,t.push(a)}e.localId=o.Gu;const a=t.sort(((e,t)=>e.localId-t.localId)).map((e=>e.id));this.onUpdateDialogFilterOrder({_:"updateDialogFilterOrder",order:a})}}))}updateDialogFiltersOrder(e){return this.apiManager.invokeApi("messages.updateDialogFiltersOrder",{order:e}).then((()=>{this.onUpdateDialogFilterOrder({_:"updateDialogFilterOrder",order:e})}))}getOutputDialogFilter(e){const t=(0,ve.Z)(e);return this.filterIncludedPinnedPeers(e),t}filterIncludedPinnedPeers(e){(0,ne.Z)(e.includePeerIds,((t,a)=>{e.pinnedPeerIds.includes(t)&&(e.include_peers.splice(a,1),e.includePeerIds.splice(a,1))}))}reloadMissingPeerIds(e,t="pinned_peers"){const a=this.getFilter(e),s=null==a?void 0:a[t];if(!(null==s?void 0:s.length))return;const n=s.filter((e=>{const t=this.appPeersManager.getPeerId(e),a=this.reloadedPeerIds.has(t),s=this.appMessagesManager.getDialogOnly(t);return!a&&!s}));if(!n.length)return;const i=n.map((e=>{const t=this.appPeersManager.getPeerId(e);return this.appMessagesManager.reloadConversation(e).then((e=>(this.reloadedPeerIds.add(t),e?void 0:t)))}));return Promise.all(i).then((e=>{(e=e.filter(Boolean)).length}))}getDialogFilters(e=!1){return be(this,void 0,void 0,(function*(){const t=Object.keys(this.filters);if(t.length>Se&&!e)return t.map((e=>this.filters[e])).sort(((e,t)=>e.localId-t.localId));const a=yield this.apiManager.invokeApiSingle("messages.getDialogFilters");return this.prependFilters(a).map((t=>this.saveDialogFilter(t,e))).filter(Boolean)}))}getSuggestedDialogsFilters(){return this.apiManager.invokeApi("messages.getSuggestedDialogFilters")}saveDialogFilter(e,t=!0,a){"dialogFilterDefault"===e._&&(e=this.localFilters[o.J$]),(0,ue.Z)(e),o.DZ.has(e.id)||(Me.forEach((([t,a])=>{(0,ue.Z)(e),e[a]=e[t].map((e=>this.appPeersManager.getPeerId(e)))})),this.filterIncludedPinnedPeers(e),e.include_peers=e.pinned_peers.concat(e.include_peers),e.includePeerIds=e.pinnedPeerIds.concat(e.includePeerIds));const s=this.filters[e.id];return s?Object.assign(s,e):this.filters[e.id]=e,this.setLocalId(e),a||(t?this.rootScope.dispatchEvent("filter_update",e):s||this.rootScope.dispatchEvent("filter_new",e)),e}setLocalId(e){void 0!==e.localId?e.localId>=this.localId&&(this.localId=e.localId+1):(e.localId=this.localId++,(0,Pe.Z)(this.filtersArr,(t=>t.id===e.id)),this.filtersArr.push(e),this.pushToState())}isFilterIdAvailable(e){return be(this,void 0,void 0,(function*(){if(o.DZ.has(e))return!0;const t=yield this.apiManager.getLimit("folders");return this.filtersArr.filter((e=>!o.DZ.has(e.id))).slice(0,t).some((t=>t.id===e))}))}}var we=a(6690),ke=a(2821);function Ae(e,t){t.forEach((t=>{Object.getOwnPropertyNames(t.prototype).forEach((a=>{const s=Object.getOwnPropertyDescriptor(t.prototype,a)||Object.create(null);"constructor"!==a&&Object.defineProperty(e.prototype,a,s)}))}))}class Ue{constructor(){this.updatesState={pendingPtsUpdates:[],pendingSeqUpdates:{},syncPending:null,syncLoading:null},this.channelStates={},this.attached=!1,this.log=(0,S.kg)("UPDATES",S.v9.Error|S.v9.Warn|S.v9.Log),this.debug=d.ZP,this.subscriptions={},this.processUpdateMessage=(e,t={})=>{const a={date:e.date,seq:e.seq,seqStart:e.seq_start};switch(this.debug&&this.log.debug("processUpdateMessage",e),e._){case"updatesTooLong":case"new_session_created":this.forceGetDifference();break;case"updateShort":this.processUpdate(e.update,a);break;case"updateShortMessage":case"updateShortChatMessage":{(0,ue.Z)(e),this.debug&&this.log.debug("updateShortMessage | updateShortChatMessage",Object.assign({},e));const t=e.pFlags.out,s=e.from_id||(t?this.appPeersManager.peerId:e.user_id),n=e.chat_id?e.chat_id.toPeerId(!0):e.user_id.toPeerId(!1)||this.appPeersManager.peerId;this.processUpdate({_:"updateNewMessage",message:{_:"message",pFlags:e.pFlags,id:e.id,from_id:this.appPeersManager.getOutputPeer(s.toPeerId()),peer_id:this.appPeersManager.getOutputPeer(n),date:e.date,message:e.message,fwd_from:e.fwd_from,reply_to:e.reply_to,entities:e.entities},pts:e.pts,pts_count:e.pts_count},a);break}case"updatesCombined":case"updates":this.appUsersManager.saveApiUsers(e.users,t.override),this.appChatsManager.saveApiChats(e.chats,t.override),e.updates.forEach((e=>{this.processUpdate(e,a)}));break;default:this.log.warn("Unknown update message",e)}},this._constructor(!1)}setProxy(){const e=this;this.updatesState=new Proxy(this.updatesState,{set:function(t,a,s){return t[a]=s,e.saveUpdatesState(),!0}})}saveUpdatesState(){const e=this.updatesState;this.appStateManager.pushToState("updates",{seq:e.seq,pts:e.pts,date:e.date})}popPendingSeqUpdate(){var e;const t=this.updatesState,a=t.seq+1,s=t.pendingSeqUpdates[a];if(!s)return!1;const n=s.updates;for(let e=0,t=n.length;e=t.syncPending.seqAwaiting&&(t.syncPending.ptsAwaiting?delete t.syncPending.seqAwaiting:this.clearStatePendingSync(t)),!0}popPendingPtsUpdate(e){const t=e?this.getChannelState(e):this.updatesState;if(!t.pendingPtsUpdates.length)return!1;t.pendingPtsUpdates.sort(((e,t)=>e.pts-t.pts));let a=t.pts,s=0,n=0;for(let e=0,i=t.pendingPtsUpdates.length;e=i.pts&&(s=i.pts,n=e)}if(!s)return!1;this.debug&&this.log.debug("pop pending pts updates",s,t.pendingPtsUpdates.slice(0,n+1)),t.pts=s;for(let e=0;e<=n;++e){const a=t.pendingPtsUpdates[e];this.saveUpdate(a)}return t.pendingPtsUpdates.splice(0,n+1),!t.pendingPtsUpdates.length&&t.syncPending&&(t.syncPending.seqAwaiting?delete t.syncPending.ptsAwaiting:this.clearStatePendingSync(t)),!0}forceGetDifference(){this.updatesState.syncLoading||this.getDifference()}processLocalUpdate(e){this.processUpdateMessage({_:"updateShort",update:e})}getDifference(e=!1){const t=this.updatesState,a=t.syncLoading;a||(t.pendingSeqUpdates={},t.pendingPtsUpdates=[]),this.clearStatePendingSync(t);const s=this.apiManager.invokeApi("updates.getDifference",{pts:t.pts,pts_total_limit:e?1200:void 0,date:t.date,qts:-1},{timeout:2147483647}).then((a=>{if(this.debug&&this.log.debug("Get diff result",a),"updates.differenceEmpty"===a._)return this.debug&&this.log.debug("apply empty diff",a.seq),t.date=a.date,void(t.seq=a.seq);if(e&&this.rootScope.dispatchEvent("state_synchronizing"),"updates.differenceTooLong"!==a._){this.appUsersManager.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),a.other_updates.forEach((e=>{switch(e._){case"updateChannelTooLong":case"updateNewChannelMessage":case"updateEditChannelMessage":return void this.processUpdate(e)}this.saveUpdate(e)})),a.new_messages.forEach((e=>{this.saveUpdate({_:"updateNewMessage",message:e,pts:t.pts,pts_count:0})}));const e="updates.difference"===a._?a.state:a.intermediate_state;t.seq=e.seq,t.pts=e.pts,t.date=e.date}else t.pts=a.pts,t.date=(0,te.Z)(!0)+this.timeManager.getServerTimeOffset(),delete t.seq,this.channelStates={},this.log.warn("getDifference:",a._),this.onDifferenceTooLong();if("updates.differenceSlice"===a._)return this.getDifference();this.debug&&this.log.debug("finished get diff")}));return a||this.justAName(t,s),s}clearStatePendingSync(e){e.syncPending&&(clearTimeout(e.syncPending.timeout),e.syncPending=null)}getChannelDifference(e){const t=this.getChannelState(e),a=t.syncLoading;a||(t.pendingPtsUpdates=[]),this.clearStatePendingSync(t);const s=this.debug?this.log.bindPrefix("getChannelDifference-"+e):void 0,n=this.apiManager.invokeApi("updates.getChannelDifference",{channel:this.appChatsManager.getChannelInput(e),filter:{_:"channelMessagesFilterEmpty"},pts:t.pts,limit:1e3},{timeout:2147483647}).then((a=>{if(null==s||s.debug("diff result",a),t.pts="pts"in a?a.pts:void 0,t.lastDifferenceTime=Date.now(),"updates.channelDifferenceEmpty"!==a._){if("updates.channelDifferenceTooLong"===a._)return delete this.channelStates[e],void this.saveUpdate({_:"updateChannelReload",channel_id:e});if(this.appUsersManager.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),null==s||s.debug("applying",a.other_updates.length,"channel other updates"),a.other_updates.forEach((e=>{this.saveUpdate(e)})),null==s||s.debug("applying",a.new_messages.length,"channel new messages"),a.new_messages.forEach((e=>{this.saveUpdate({_:"updateNewChannelMessage",message:e,pts:t.pts,pts_count:0})})),null==s||s.debug("apply channel diff",t.pts),"updates.channelDifference"===a._&&!a.pFlags.final)return this.getChannelDifference(e);null==s||s.debug("finished channel get diff")}}));return a||this.justAName(t,n,e),n}onDifferenceTooLong(){this.appUsersManager.clear(),this.appChatsManager.clear(),this.appMessagesManager.clear(),this.rootScope.dispatchEvent("state_cleared")}justAName(e,t,a){e.syncLoading=t,this.rootScope.dispatchEvent("state_synchronizing",a),t.then((()=>{e.syncLoading=null,this.rootScope.dispatchEvent("state_synchronized",a)}),(()=>{e.syncLoading=null}))}addChannelState(e,t){var a,s;if(!t)throw new Error("Add channel state without pts "+e);return null!==(a=(s=this.channelStates)[e])&&void 0!==a?a:s[e]={pts:t,pendingPtsUpdates:[],syncPending:null,syncLoading:null}}getChannelState(e,t){return void 0===this.channelStates[e]&&this.addChannelState(e,t),this.channelStates[e]}processUpdate(e,t={}){var a,s,n,i;let r;switch(e._){case"updateNewChannelMessage":case"updateEditChannelMessage":r=this.appPeersManager.getPeerId(e.message.peer_id).toChatId();break;case"updateChannelTooLong":if(r=e.channel_id,!(r in this.channelStates))return!1;break;default:"channel_id"in e&&"pts"in e&&(r=e.channel_id)}const{pts:o,pts_count:p}=e,d=r?this.getChannelState(r,o):this.updatesState;if(d.syncLoading)return!1;if("updateChannelTooLong"===e._)return(!d.lastPtsUpdateTime||d.lastPtsUpdateTime{d.syncPending=null,d.syncLoading||(r?this.getChannelDifference(r):this.getDifference())}),6)}),d.syncPending.ptsAwaiting=!0,!1;if(o>d.pts)d.pts=o,f=!0,d.lastPtsUpdateTime=Date.now();else if(p)return!1;r&&t.date&&this.updatesState.date0){const a=t.seq,r=t.seqStart||a;if(r!==d.seq+1&&r>d.seq)return this.debug&&this.log.warn("Seq hole",d,null===(s=d.syncPending)||void 0===s?void 0:s.seqAwaiting),null!==(n=(i=d.pendingSeqUpdates)[r])&&void 0!==n||(i[r]={seq:a,date:t.date,updates:[]}),d.pendingSeqUpdates[r].updates.push(e),d.syncPending||(d.syncPending={timeout:T.Z.setTimeout((()=>{d.syncPending=null,d.syncLoading||this.getDifference()}),6)}),(!d.syncPending.seqAwaiting||d.syncPending.seqAwaiting{const t=this.getChannelState(e);t.syncLoading||t.lastDifferenceTime&&!(Date.now()-t.lastDifferenceTime>2500)||this.getChannelDifference(e)};null!==(a=n.interval)&&void 0!==a||(n.interval=T.Z.setInterval(i,3e3)),i()}unsubscribeFromChannelUpdates(e,t){const a=this.subscriptions[e];!(null==a?void 0:a.interval)||--a.count&&!t||(clearInterval(a.interval),a.interval=void 0,delete this.subscriptions[e])}attach(e){this.attached||(this.log("attach"),this.attached=!0,this.appStateManager.getState().then((({updates:t})=>{const a=this.appStateManager.newVersion;t&&t.pts&&t.date?(Object.assign(this.updatesState,t),this.log("will get difference",Object.assign({},t)),this.getDifference(!0)):(this.log("will get new state"),this.updatesState.syncLoading=new Promise((e=>{this.apiManager.invokeApi("updates.getState",{},{noErrorBox:!0}).then((t=>{this.updatesState.seq=t.seq,this.updatesState.pts=t.pts,this.updatesState.date=t.date,this.saveUpdatesState(),this.updatesState.syncLoading=null,e()}))}))),this.apiManager.setUpdatesProcessor(this.processUpdateMessage),this.setProxy(),a&&this.updatesState.syncLoading.then((()=>{return t=this,s=void 0,i=function*(){const t={en:"was updated to version",ru:"ะพะฑะฝะพะฒะปั‘ะฝ ะดะพ ะฒะตั€ัะธะธ"},s=e=>{fetch(`changelogs/${e}_${a.split(" ")[0]}.md`).then((e=>200===e.status&&e.ok&&e.text()||Promise.reject())).then((s=>{const n=t[e]||t.en;s=`**Telegram Web${_.Z.suffix} ${n} ${a}**\n\n`+s;const i=[],r={_:"updateServiceNotification",entities:i,message:(0,ke.Z)(s,i),type:"local",pFlags:{},inbox_date:(0,te.Z)(!0),media:void 0};this.processLocalUpdate(r)}))},n=(0,we.Z)([e,"en"]);for(const e of n)try{yield s(e);break}catch(e){}},new((n=void 0)||(n=Promise))((function(e,a){function r(e){try{p(i.next(e))}catch(e){a(e)}}function o(e){try{p(i.throw(e))}catch(e){a(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof n?a:new n((function(e){e(a)}))).then(r,o)}p((i=i.apply(t,s||[])).next())}));var t,s,n,i}))})))}}Ae(Ue,[p.Z,G]);class De extends G{constructor(){super(...arguments),this.savedAvatarURLs={}}after(){this.rootScope.addEventListener("avatar_update",(({peerId:e,threadId:t})=>{t||this.removeFromAvatarsCache(e)}))}isAvatarCached(e,t){const a=this.savedAvatarURLs[e];return void 0===t?!!a:!(!a||!a[t]||a[t]instanceof Promise)}removeFromAvatarsCache(e){this.savedAvatarURLs[e]&&delete this.savedAvatarURLs[e]}loadAvatar(e,t,a){var s,n;const i=null!==(s=(n=this.savedAvatarURLs)[e])&&void 0!==s?s:n[e]={};if(i[a])return i[a];{const s={_:"inputPeerPhotoFileLocation",pFlags:{},peer:this.appPeersManager.getInputPeerById(e),photo_id:t.photo_id},n={dcId:t.dc_id,location:s};"photo_big"===a&&(s.pFlags.big=!0,n.limitPart=524288);const r=this.apiFileManager.download(n);return i[a]=r.then((e=>i[a]=URL.createObjectURL(e)))}}}var Ee=a(144),Te=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class Fe extends G{after(){this.calls=new Map,i().IS_CALL_SUPPORTED&&this.apiUpdatesManager.addMultipleEventsListeners({updatePhoneCall:e=>{this.saveCall(e.phone_call)},updatePhoneCallSignalingData:e=>{this.rootScope.dispatchEvent("call_signaling",{callId:e.phone_call_id,data:e.data})}})}computeKey(e,t,a){return this.cryptoWorker.invokeCrypto("compute-dh-key",e,t,a)}saveCall(e){const t="phoneCallDiscarded"===e._,a=this.calls.get(e.id);return a?(re(a,e),t&&this.calls.delete(e.id),e=a):t||this.calls.set(e.id,e),this.rootScope.dispatchEvent("call_update",e),e}getCall(e){return this.calls.get(e)}getCallInput(e){const t=this.getCall(e);return{_:"inputPhoneCall",id:t.id,access_hash:t.access_hash}}savePhonePhoneCall(e){return this.appUsersManager.saveApiUsers(e.users),this.saveCall(e.phone_call)}generateDh(){return this.apiManager.invokeApi("messages.getDhConfig",{version:0,random_length:256}).then((e=>this.cryptoWorker.invokeCrypto("generate-dh",e)))}requestCall(e,t,a,s){return Te(this,void 0,void 0,(function*(){const n=yield this.apiManager.invokeApi("phone.requestCall",{user_id:this.appUsersManager.getUserInput(e),protocol:t,video:s,random_id:(0,Ee.d)(32),g_a_hash:a});return this.savePhonePhoneCall(n)}))}discardCall(e,t,a,s){return Te(this,void 0,void 0,(function*(){if(!this.getCall(e))return;const n=yield this.apiManager.invokeApi("phone.discardCall",{video:s,peer:this.getCallInput(e),duration:t,reason:{_:a},connection_id:"0"});this.apiUpdatesManager.processUpdateMessage(n)}))}}var Re=a(7120),xe=a(2566),Be=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class Ve extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{if(e)this.chats={};else for(const e in this.chats)if(e&&!this.peersStorage.isPeerNeeded(e.toPeerId(!0))){const t=this.chats[e];this.appUsersManager.modifyUsernamesCache(t,!1),this.storage.delete(e),delete this.chats[e]}},this.onChatUpdated=(e,t)=>{var a;this.apiUpdatesManager.processUpdateMessage(t),(null===(a=null==t?void 0:t.updates)||void 0===a?void 0:a.length)&&this.isChannel(e)&&this.rootScope.dispatchEvent("invalidate_participants",e)},this.onUpdateChannelParticipant=e=>{this.apiManager.clearCache("channels.getParticipants",(t=>t.channel.channel_id===e.channel_id)),this.rootScope.dispatchEvent("chat_participant",e)},this.onUpdateChatDefaultBannedRights=e=>{const t=this.appPeersManager.getPeerId(e.peer).toChatId(),a=this.chats[t];a&&(a.default_banned_rights=e.default_banned_rights,this.rootScope.dispatchEvent("chat_update",t))}}after(){return this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateChannelParticipant:this.onUpdateChannelParticipant,updateChatDefaultBannedRights:this.onUpdateChatDefaultBannedRights}),Promise.all([this.appStateManager.getState(),this.appStoragesManager.loadStorage("chats")]).then((([e,{results:t,storage:a}])=>{this.storage=a,this.saveApiChats(t),this.peersStorage.addEventListener("peerNeeded",(e=>{e.isUser()||this.storage.getFromCache(e.toChatId())||this.storage.set({[e.toChatId()]:this.getChat(e.toChatId())})})),this.peersStorage.addEventListener("peerUnneeded",(e=>{!e.isUser()&&this.storage.getFromCache(e.toChatId())&&this.storage.delete(e.toChatId())}))}))}saveApiChats(e,t){e.saved||(e.saved=!0,e.forEach((e=>this.saveApiChat(e,t))))}saveApiChat(e,t){var a,s,n,i,r;if(!e||"chatEmpty"===e._)return;const o=this.chats[e.id];if(null!==(a=(r=e).pFlags)&&void 0!==a||(r.pFlags={}),e.pFlags.min&&void 0!==o)return;"channel"===e._&&void 0===e.participants_count&&void 0!==o&&o.participants_count&&(e.participants_count=o.participants_count),"chatPhotoEmpty"===(null===(s=e.photo)||void 0===s?void 0:s._)&&delete e.photo;const p=this.appUsersManager.setUsernameToCache(e,o),d=e.id.toPeerId(!0);if(void 0===o)this.chats[e.id]=e;else{const t=null===(n=o.photo)||void 0===n?void 0:n.photo_id,a=null===(i=e.photo)||void 0===i?void 0:i.photo_id,s=o.pFlags.forum!==e.pFlags.forum,r=t!==a||s,f=o.title!==e.title||p,c=o.pFlags.verified!==e.pFlags.verified||o.pFlags.scam!==e.pFlags.scam||o.pFlags.fake!==e.pFlags.fake;re(o,e),this.rootScope.dispatchEvent("chat_update",e.id),r&&this.rootScope.dispatchEvent("avatar_update",{peerId:d}),(f||c)&&this.rootScope.dispatchEvent("peer_title_edit",{peerId:d}),s&&this.rootScope.dispatchEvent("chat_toggle_forum",{chatId:e.id,enabled:!!e.pFlags.forum})}this.peersStorage.isPeerNeeded(d)&&this.storage.set({[e.id]:e})}getChat(e){return this.chats[e]}hasRights(e,t,a,s){return(0,Re.Z)(this.getChat(e),t,a,s)}editChatDefaultBannedRights(e,t){const a=this.getChat(e);return a.default_banned_rights&&a.default_banned_rights.until_date===t.until_date&&(0,Y.Z)(a.default_banned_rights.pFlags,t.pFlags)?Promise.resolve():this.apiManager.invokeApi("messages.editChatDefaultBannedRights",{peer:this.appPeersManager.getInputPeerById(e.toPeerId(!0)),banned_rights:t}).then(this.onChatUpdated.bind(this,e))}isChannel(e){const t=this.chats[e];return!(!t||"channel"!==t._&&"channelForbidden"!==t._)}isMegagroup(e){var t;const a=this.chats[e];return!!(null===(t=null==a?void 0:a.pFlags)||void 0===t?void 0:t.megagroup)}isForum(e){var t;const a=this.chats[e];return!!(null===(t=null==a?void 0:a.pFlags)||void 0===t?void 0:t.forum)}isBroadcast(e){return this.isChannel(e)&&!this.isMegagroup(e)}isInChat(e){let t=!0;const a=this.getChat(e);return(!a||"channelForbidden"===a._||"chatForbidden"===a._||"chatEmpty"===a._||a.pFlags.left||a.pFlags.deactivated)&&(t=!1),t}getChannelInput(e){const t=this.getChat(e);return t&&t.access_hash?{_:"inputChannel",channel_id:e,access_hash:t.access_hash||"0"}:{_:"inputChannelEmpty"}}getInputPeer(e){return this.isChannel(e)?this.getChannelInputPeer(e):this.getChatInputPeer(e)}getChatInputPeer(e){return{_:"inputPeerChat",chat_id:e}}getChannelInputPeer(e){return{_:"inputPeerChannel",channel_id:e,access_hash:this.getChat(e).access_hash||0}}hasChat(e,t){const a=this.chats[e];return(0,fe.Z)(a)&&(t||!a.pFlags.min)}getChatString(e){const t=this.getChat(e);return this.isChannel(e)?(this.isMegagroup(e)?"s":"c")+e+"_"+t.access_hash:"g"+e}createChannel(e){return this.apiManager.invokeApi("channels.createChannel",e).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e.chats[0].id)))}inviteToChannel(e,t){const a=this.getChannelInput(e),s=t.map((e=>this.appUsersManager.getUserInput(e)));return this.apiManager.invokeApi("channels.inviteToChannel",{channel:a,users:s}).then(this.onChatUpdated.bind(this,e))}createChat(e,t){return this.apiManager.invokeApi("messages.createChat",{users:t.map((e=>this.appUsersManager.getUserInput(e))),title:e}).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e.chats[0].id)))}leaveChannel(e){return this.apiManager.invokeApi("channels.leaveChannel",{channel:this.getChannelInput(e)}).then(this.onChatUpdated.bind(this,e))}joinChannel(e){return this.apiManager.invokeApi("channels.joinChannel",{channel:this.getChannelInput(e)}).then(this.onChatUpdated.bind(this,e))}addChatUser(e,t,a=100){return this.apiManager.invokeApi("messages.addChatUser",{chat_id:e,user_id:this.appUsersManager.getUserInput(t),fwd_limit:a}).then(this.onChatUpdated.bind(this,e))}deleteChatUser(e,t){return this.apiManager.invokeApi("messages.deleteChatUser",{chat_id:e,user_id:this.appUsersManager.getUserInput(t)}).then(this.onChatUpdated.bind(this,e))}leaveChat(e){return this.deleteChatUser(e,this.appUsersManager.getSelf().id)}leave(e){return this.isChannel(e)?this.leaveChannel(e):this.leaveChat(e)}delete(e){return this.isChannel(e)?this.deleteChannel(e):this.deleteChat(e)}deleteChannel(e){return this.apiManager.invokeApi("channels.deleteChannel",{channel:this.getChannelInput(e)}).then(this.onChatUpdated.bind(this,e))}deleteChat(e){return this.apiManager.invokeApi("messages.deleteChat",{chat_id:e})}migrateChat(e){const t=this.getChat(e);return"channel"===t._?Promise.resolve(t.id):this.apiManager.invokeApi("messages.migrateChat",{chat_id:e}).then((t=>(this.onChatUpdated(e,t),t.updates.find((e=>"updateChannel"===e._)).channel_id)))}updateUsername(e,t,a){const s=this.apiManager.invokeApi("channels.updateUsername",{channel:this.getChannelInput(e),username:t});return this.refreshChatAfterRequest(e,s,a)}editPhoto(e,t){const a={_:"inputChatUploadedPhoto",file:t};let s;return s=this.isChannel(e)?this.apiManager.invokeApi("channels.editPhoto",{channel:this.getChannelInput(e),photo:a}):this.apiManager.invokeApi("messages.editChatPhoto",{chat_id:e,photo:a}),s.then(this.onChatUpdated.bind(this,e))}editTitle(e,t){let a;return a=this.isChannel(e)?this.apiManager.invokeApi("channels.editTitle",{channel:this.getChannelInput(e),title:t}):this.apiManager.invokeApi("messages.editChatTitle",{chat_id:e,title:t}),a.then(this.onChatUpdated.bind(this,e))}editAbout(e,t){const a=e.toPeerId(!0);return this.apiManager.invokeApi("messages.editChatAbout",{peer:this.appPeersManager.getInputPeerById(a),about:t}).then((e=>(e&&this.rootScope.dispatchEvent("peer_bio_edit",a),e)))}editBanned(e,t,a){return Be(this,void 0,void 0,(function*(){const s="object"!=typeof t?t:(0,xe.Z)(t),n=this.isChannel(e);if(!n){const t=yield this.migrateChat(e);e=t}return this.apiManager.invokeApi("channels.editBanned",{channel:this.getChannelInput(e),participant:this.appPeersManager.getInputPeerById(s),banned_rights:a}).then((i=>{if(this.onChatUpdated(e,i),"object"==typeof t){const i=(0,te.Z)(!0);this.apiUpdatesManager.processLocalUpdate({_:"updateChannelParticipant",channel_id:e,date:i,actor_id:void 0,qts:void 0,user_id:s,prev_participant:n?t:void 0,new_participant:Object.keys(a.pFlags).length?{_:"channelParticipantBanned",date:i,banned_rights:a,kicked_by:this.appUsersManager.getSelf().id,peer:this.appPeersManager.getOutputPeer(s),pFlags:{}}:void 0})}}))}))}clearChannelParticipantBannedRights(e,t){return this.editBanned(e,t,{_:"chatBannedRights",until_date:0,pFlags:{}})}kickFromChannel(e,t){return this.editBanned(e,t,{_:"chatBannedRights",until_date:0,pFlags:{view_messages:!0}})}kickFromChat(e,t){return this.isChannel(e)?this.kickFromChannel(e,t):this.deleteChatUser(e,(0,fe.Z)(t)?(0,xe.Z)(t):t.toUserId())}resolveChannel(e){return this.apiManager.invokeApiSingle("channels.getChannels",{id:[{_:"inputChannel",channel_id:e,access_hash:"0"}]}).then((e=>{this.saveApiChats(e.chats)}))}togglePreHistoryHidden(e,t){return this.migrateChat(e).then((e=>this.apiManager.invokeApi("channels.togglePreHistoryHidden",{channel:this.getChannelInput(e),enabled:t}).then(this.onChatUpdated.bind(this,e))))}toggleSignatures(e,t){return this.apiManager.invokeApi("channels.toggleSignatures",{channel:this.getChannelInput(e),enabled:t}).then(this.onChatUpdated.bind(this,e))}toggleNoForwards(e,t){return this.apiManager.invokeApi("messages.toggleNoForwards",{peer:this.getInputPeer(e),enabled:t}).then(this.onChatUpdated.bind(this,e))}setChatAvailableReactions(e,t){const a=this.appProfileManager.getCachedFullChat(e);return a&&(a.available_reactions=t,this.rootScope.dispatchEvent("chat_full_update",e)),this.apiManager.invokeApi("messages.setChatAvailableReactions",{peer:this.getInputPeer(e),available_reactions:t}).then(this.onChatUpdated.bind(this,e))}getSendAs(e){return this.apiManager.invokeApiSingleProcess({method:"channels.getSendAs",params:{peer:this.getChannelInputPeer(e)},processResult:e=>(this.appUsersManager.saveApiUsers(e.users),this.saveApiChats(e.chats),e.peers)})}importChatInvite(e){return this.apiManager.invokeApi("messages.importChatInvite",{hash:e}).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e.chats[0].id)))}checkUsername(e,t){return this.apiManager.invokeApi("channels.checkUsername",{channel:this.getChannelInput(e),username:t})}getSponsoredMessage(e){return this.apiManager.invokeApiCacheable("channels.getSponsoredMessages",{channel:this.getChannelInput(e)},{cacheSeconds:300}).then((e=>{if("messages.sponsoredMessages"===e._){this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats);const t=e.messages.shift();e.messages.push(t)}return e}))}viewSponsoredMessage(e,t){return this.apiManager.invokeApiSingle("channels.viewSponsoredMessage",{channel:this.getChannelInput(e),random_id:t})}checkChatInvite(e){return this.apiManager.invokeApi("messages.checkChatInvite",{hash:e}).then((e=>(e.chat&&this.saveApiChat(e.chat,!0),e)))}toggleUsername(e,t,a){const s=this.apiManager.invokeApi("channels.toggleUsername",{channel:this.getChannelInput(e),username:t,active:a});return this.refreshChatAfterRequest(e,s)}reorderUsernames(e,t){const a=this.apiManager.invokeApi("channels.reorderUsernames",{channel:this.getChannelInput(e),order:t});return this.refreshChatAfterRequest(e,a)}deactivateAllUsernames(e,t){const a=this.apiManager.invokeApi("channels.deactivateAllUsernames",{channel:this.getChannelInput(e)});return this.refreshChatAfterRequest(e,a,t)}makeChannelPrivate(e){const t=[this.updateUsername(e,"",!0),this.deactivateAllUsernames(e,!0)],a=Promise.all(t).then((()=>!0));return this.refreshChatAfterRequest(e,a)}refreshChatAfterRequest(e,t,a){return a?t:t.then((t=>this.getChannels([e]).then((()=>t))))}getChannels(e){return this.apiManager.invokeApi("channels.getChannels",{id:e.map((e=>this.getChannelInput(e)))}).then((e=>{this.saveApiChats(e.chats)}))}toggleForum(e,t){return this.migrateChat(e).then((e=>this.apiManager.invokeApi("channels.toggleForum",{channel:this.getChannelInput(e),enabled:t}).then(this.onChatUpdated.bind(this,e))))}editForumTopic(e){const{chatId:t,topicId:a,title:s,iconEmojiId:n,closed:i,hidden:r}=e;return this.apiManager.invokeApi("channels.editForumTopic",{channel:this.getChannelInput(t),topic_id:(0,oe.Z)(a),title:s,icon_emoji_id:n,closed:i,hidden:r}).then(this.onChatUpdated.bind(this,t))}createForumTopic(e){return Be(this,void 0,void 0,(function*(){const{chatId:t,title:a,iconColor:s,iconEmojiId:n}=e,i=yield this.appProfileManager.getChannelFull(t),r=i.default_send_as&&this.appPeersManager.getInputPeerById(this.appPeersManager.getPeerId(i.default_send_as));return this.apiManager.invokeApi("channels.createForumTopic",{channel:this.getChannelInput(t),title:a,icon_color:s,icon_emoji_id:n,random_id:(0,Ee.a)(),send_as:r}).then((e=>{this.onChatUpdated(t,e);const a=e.updates.find((e=>"updateNewChannelMessage"===e._));return(0,pe.Z)(a.message.id)}))}))}updatePinnedForumTopic(e,t,a){return this.apiManager.invokeApi("channels.updatePinnedForumTopic",{channel:this.getChannelInput(e),topic_id:(0,oe.Z)(t),pinned:a}).then(this.onChatUpdated.bind(this,e))}}a(4762);var Oe,Le=a(5953),Ne=a(9005),Ze=a(6637),je=a(2423);function qe(e,t){(0,Ze.Z)(e)||(e="https://"+e);const a={url:e};let s,n,i,r;if(s=e.match(/^(?:https?:\/\/)?(?:(.+?)\.)?(?:(?:web|k|z)\.)?t(?:elegram)?\.me(?:\/(.+))?/)){const t=new URL(e);let a=s[1];a&&o.BX.has(s[1])&&(a=void 0),a&&(t.pathname=a+("/"===t.pathname?"":t.pathname));const n=t.pathname.slice(1),i=n.split("/");if(i[0]&&"$"===i[0][0]&&i[0].length>1)r="invoice";else if(/^\W/.test(n)&&!je.kO.test(n))r="joinchat";else switch(i[0]){case"joinchat":case"addstickers":case"addemoji":case"voicechat":case"invoice":if(1!==i.length&&!a){r=i[0];break}default:if(i[1]&&i[1].match(/^\d+(?:\?(?:comment|thread)=\d+)?$/)||1===i.length){r="im";break}}}else(n=e.match(/^(?:https?:\/\/)?telesco\.pe\/([^/?]+)\/(\d+)/))?r="im":(i=e.match(/tg:(?:\/\/)?(.+?)(?:\?|$)/))&&(r="tg_"+i[1]);return window[r]||(r=void 0),a.onclick=r,a}d.GO&&(d.GO.wrapUrl=qe),function(e){let t,s;function n(t){e.lastRequestedLangCode=t,e.lastRequestedNormalizedLangCode=t.split("-")[0]}function i(){if("h12"===e.timeFormat)try{const t=P({hour:"numeric",minute:"numeric",hour12:!0}),a=new Date;a.setHours(0);const s=t.format(a);e.amPmCache.am=s.split(/\s/)[1],a.setHours(12);const n=t.format(a);e.amPmCache.pm=n.split(/\s/)[1]}catch(t){console.error("cannot get am/pm",t),e.amPmCache={am:"AM",pm:"PM"}}}function r(){const e=_.Z.langPackCode;return n(e),Promise.all([a.e(104).then(a.bind(a,9104)),a.e(301).then(a.bind(a,9301)),a.e(8).then(a.bind(a,9179))]).then((([t,a,s])=>{const n=[];return p(t.default,n),p(a.default,n),f({_:"langPackDifference",from_version:0,lang_code:e,strings:n,version:0,local:!0,countries:s.default})}))}function o(t,s){e.requestedServerLanguage=!0;const n=g.managers;return Promise.all([n.apiManager.invokeApiCacheable("langpack.getLangPack",{lang_code:t,lang_pack:"web"}),!1,a.e(104).then(a.bind(a,9104)),a.e(301).then(a.bind(a,9301)),n.apiManager.invokeApiCacheable("help.getCountriesList",{lang_code:t,hash:0}),e.polyfillPromise])}function p(e,t=[]){for(const a in e){const s=e[a];"string"==typeof s?t.push({_:"langPackString",key:a,value:s}):t.push(Object.assign({_:"langPackStringPluralized",key:a},s))}return t}function f(e){return e.appVersion=_.Z.langPackVersion,h.Z.set({langPack:e}).then((()=>(c(e),e)))}function c(a){const s=e.lastRequestedLangCode;if(a.lang_code===s){try{t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode)}catch(a){console.error("pluralRules error",a),t=new Intl.PluralRules(e.lastRequestedNormalizedLangCode.split("-",1)[0])}try{t=new Intl.PluralRules(a.lang_code)}catch(e){console.error("pluralRules error",e),t=new Intl.PluralRules(a.lang_code.split("-",1)[0])}e.strings.clear();for(const t of a.strings)e.strings.set(t.key,t);a.countries&&(e.countriesList.length=0,e.countriesList.push(...a.countries.countries),a.countries.countries.forEach((t=>{if(t.name){const a=t.default_name;e.strings.set(a,{_:"langPackString",key:a,value:t.name})}}))),e.lastAppliedLangCode!==s&&(g.dispatchEvent("language_change",s),e.lastAppliedLangCode=s,v.clear(),i()),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const a=e.weakMap.get(t);a&&a.update()}))}}function l(e,t,a={i:0}){const s=[];let n=0;return e.replace(/(\*\*|__)(.+?)\1|(\n)|(\[.+?\]\(.*?\))|un\d|%\d\$.|%./g,((e,i,r,o,p,d,f)=>{if(s.push(f.slice(n,d)),i){let e;switch(i){case"**":e=document.createElement("b");break;case"__":e=document.createElement("i")}e.append(...l(r,t,a)),s.push(e)}else if(o)s.push(document.createElement("br"));else if(p){const e=p.lastIndexOf("]"),n=p.slice(1,e),i=p.slice(e+2,p.length-1);let r;if(i&&(0,Ze.Z)(i)){r=document.createElement("a");const e=qe(i);r.href=e.url,e.onclick&&r.setAttribute("onclick",e.onclick),r.target="_blank"}else r=t[a.i++],r instanceof DocumentFragment&&(r=r.firstChild),r.textContent="";r.append(...l(n,t,a)),s.push(r)}else t&&function(e,t,a){const s=t[a.i++];Array.isArray(s)?e.push(...s):e.push(s)}(s,t,a);return n=d+e.length,""})),n!==e.length&&s.push(e.slice(n)),s}function m(a,s=!1,n){const i=e.strings.get(a);let r;if(i)if("langPackStringPluralized"===i._&&(null==n?void 0:n.length)){let e=n[0];"string"==typeof e&&(e=+e.replace(/\D/g,"")),r=i[t.select(e)+"_value"]||i.other_value}else r="langPackString"===i._?i.value:a;else r=a;const o=l(r,n);return s?o.map((e=>e instanceof Node?e.textContent:e)).join(""):o}e.strings=new Map,e.countriesList=[],e.requestedServerLanguage=!1,e.isRTL=!1,e.setRTL=function(t){e.isRTL=t},e.getCacheLangPack=function(){return s||(s=Promise.all([h.Z.get("langPack"),e.polyfillPromise]).then((([t])=>t?(d.ZP,e.lastRequestedLangCode||n(t.lang_code),c(t),t):r())).finally((()=>{s=void 0})))},e.setTimeFormat=function(t,a=!!e.timeFormat&&e.timeFormat!==t){e.timeFormat=t,i(),a&&(v.clear(),Array.from(document.querySelectorAll(".i18n")).forEach((t=>{const a=e.weakMap.get(t);a instanceof b&&a.update()})))},e.loadLocalLangPack=r,e.loadLangPack=o,e.getStrings=function(e,t){return g.managers.apiManager.invokeApi("langpack.getStrings",{lang_pack:_.Z.langPack,lang_code:e,keys:t})},e.formatLocalStrings=p,e.getLangPack=function(e,t){return n(e),o(e).then((([e,t,a,s,n,i])=>{let r=[];return[a,s].forEach((e=>{p(e.default,r)})),r=r.concat(...[e.strings,t.strings].filter(Boolean)),e.strings=r,e.countries=n,f(e)}))},e.saveLangPack=f,e.polyfillPromise="undefined"!=typeof Intl&&void 0!==Intl.PluralRules?Promise.resolve():a.e(642).then(a.bind(a,4642)).then((e=>{window.Intl=Object.assign("undefined"!=typeof Intl?Intl:{},e.default)})),e.applyLangPack=c,e.superFormatter=l,e.format=m,e.weakMap=new WeakMap;class u{constructor(t){this.element=(null==t?void 0:t.element)||document.createElement("span"),this.element.classList.add("i18n"),this.property=null==t?void 0:t.property,t&&(t.key||t.date)&&this.update(t),e.weakMap.set(this.element,this)}}class y extends u{constructor(e={}){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"innerHTML"}))}update(e){if((0,Le.Z)(this,e),"innerHTML"===this.property)this.element.textContent="",this.element.append(...m(this.key,!1,this.args));else{const e=this.element[this.property],t=m(this.key,!0,this.args);void 0===e?this.element.dataset[this.property]=t:this.element[this.property]=t}}compareAndUpdate(e){if(this.key!==e.key||!(0,Y.Z)(this.args,e.args))return this.update(e)}}e.IntlElement=y;const v=new Map;function P(t={}){const a=JSON.stringify(t);let s=v.get(a);return s||(s=new Intl.DateTimeFormat(e.lastRequestedNormalizedLangCode+"-u-hc-"+e.timeFormat,t),v.set(a,s)),s}e.amPmCache={am:"AM",pm:"PM"};class b extends u{constructor(e){var t;super(Object.assign(Object.assign({},e),{property:null!==(t=e.property)&&void 0!==t?t:"textContent"})),this.element.setAttribute("dir","auto")}update(t){let a;if((0,Le.Z)(this,t),this.options.hour&&this.options.minute&&2===Object.keys(this.options).length){const t=this.date.getHours();a=("0"+("h12"===e.timeFormat?t%12||12:t)).slice(-2)+":"+("0"+this.date.getMinutes()).slice(-2),"h12"===e.timeFormat&&(a+=" "+(t<12?e.amPmCache.am:e.amPmCache.pm))}else{const e=P(this.options);a=(0,Ne.Z)(e.format(this.date))}this.element[this.property]=a}}e.IntlDateElement=b,e.i18n=function(e,t){return new y({key:e,args:t}).element},e.i18n_=function(e){return new y(e).element},e._i18n=function(e,t,a,s){return new y({element:e,key:t,args:a,property:s}).element}}(Oe||(Oe={}));const Ge=Oe;Oe.i18n,Oe.i18n_,Oe._i18n,d.GO.I18n=Oe;const He=["January","February","March","April","May","June","July","August","September","October","November","December"],We=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],ze=e=>{const t=new Date(Date.UTC(e.getFullYear(),e.getMonth(),e.getDate())),a=t.getUTCDay()||7;t.setUTCDate(t.getUTCDate()+4-a);const s=new Date(Date.UTC(t.getUTCFullYear(),0,1));return Math.ceil(((t.getTime()-s.getTime())/86400+1)/7)};d.GO&&(d.GO.formatDateAccordingToTodayNew=function(e){const t=new Date,a=t.getTime()/1e3|0,s=e.getTime()/1e3|0,n={};return a-s<86400&&t.getDate()===e.getDate()?n.hour=n.minute="2-digit":t.getFullYear()!==e.getFullYear()?(n.year=n.day="numeric",n.month="2-digit"):a-s<604800&&ze(t)===ze(e)?n.weekday="short":(n.month="short",n.day="numeric"),new Ge.IntlDateElement({date:e,options:n}).element});const Ke=2013,Je=new RegExp("20[0-9]{1,2}"),$e=new RegExp("(\\w{3,}) ([0-9]{0,4})","i"),Qe=new RegExp("([0-9]{0,4}) (\\w{2,})","i"),Ye=new RegExp("^([0-9]{1,4})(\\.| |/|\\-)([0-9]{1,4})$","i"),Xe=new RegExp("^([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,2})(\\.| |/|\\-)([0-9]{1,4})$","i"),et=[31,29,31,30,31,30,31,31,30,31,30,31];function tt(e,t,a){const s=(new Date).getFullYear(),n=Date.now();if(a>=Ke&&a<=s){const s=new Date;s.setFullYear(a,t,1),s.setHours(0,0,0);const i=s.getTime();if(i>n)return;s.setMonth(s.getMonth()+1);const r=s.getTime()-1;e.push({title:st(i),minDate:i,maxDate:r})}}function at(e,t,a){if(ot(t,a)){const n=(new Date).getFullYear(),i=Date.now();for(let r=n;r>=Ke;r--){if(1===a&&28===t&&((s=r)%4!=0||s%100==0)&&s%400!=0)continue;const o=new Date;o.setFullYear(r,a,t+1),o.setHours(0,0,0);const p=o.getTime();if(p>i)continue;o.setFullYear(r,a,t+2),o.setHours(0,0,0);const d=o.getTime()-1;r===n?e.push({title:nt(p),minDate:p,maxDate:d}):e.push({title:it(p),minDate:p,maxDate:d})}}var s}function st(e){const t=new Date(e);return He[t.getMonth()].slice(0,3)+" "+t.getFullYear()}function nt(e){const t=new Date(e);return He[t.getMonth()].slice(0,3)+" "+t.getDate()}function it(e){const t=new Date(e);return("0"+t.getDate()).slice(-2)+"."+("0"+(t.getMonth()+1)).slice(-2)+"."+t.getFullYear()}function rt(e){const t=new Date(e);return We[t.getDay()]}function ot(e,t){return t>=0&&t<12&&e>=0&&e{t[e][s]=a})),a[e]=t[e])}d.GO.fillTipDates=function(e,t){const a=e.trim().toLowerCase();if(a.length<3)return;if(0==="today".indexOf(a)){const e=new Date,a=e.getFullYear(),s=e.getMonth(),n=e.getDate();e.setFullYear(a,s,n),e.setHours(0,0,0);const i=e.getTime();e.setFullYear(a,s,n+1),e.setHours(0,0,0);const r=e.getTime()-1;return void t.push({title:"Today",minDate:i,maxDate:r})}if(0==="yesterday".indexOf(a)){const e=new Date,a=e.getFullYear(),s=e.getMonth(),n=e.getDate();e.setFullYear(a,s,n),e.setHours(0,0,0);const i=e.getTime()-864e5;e.setFullYear(a,s,n+1),e.setHours(0,0,0);const r=e.getTime()-86400001;return void t.push({title:"Yesterday",minDate:i,maxDate:r})}const s=function(e){const t=new Date;if(e.length<=3)return-1;for(let a=0;a<7;a++)if(t.setDate(t.getDate()+1),0===rt(t.getTime()).toLowerCase().indexOf(e))return t.getDay();return-1}(a);if(s>=0){const e=new Date,a=e.getTime(),n=s-e.getDay();e.setDate(e.getDate()+n),e.getTime()>a&&e.setTime(e.getTime()-6048e5);const i=e.getFullYear(),r=e.getMonth(),o=e.getDate();e.setFullYear(i,r,o),e.setHours(0,0,0);const p=e.getTime();e.setFullYear(i,r,o+1),e.setHours(0,0,0);const d=e.getTime()-1;return void t.push({title:rt(p),minDate:p,maxDate:d})}let n;if(null===(n=Ye.exec(a)))if(null===(n=Xe.exec(a)))if(null===(n=Je.exec(a))){if(null!==(n=$e.exec(a))){const e=n[1],a=n[2],s=pt(e);if(s>=0){const e=+a;if(e>0&&e<=31)return void at(t,e-1,s);if(e>=Ke)return void tt(t,s,e)}}if(null!==(n=Qe.exec(a))){const e=n[1],a=pt(n[2]);if(a>=0){const s=+e;if(s>0&&s<=31)return void at(t,s-1,a);s>=Ke&&tt(t,a,s)}}}else{let e=+a;const s=(new Date).getFullYear();if(e=e;a--){const e=new Date;e.setFullYear(a,0,1),e.setHours(0,0,0);const s=e.getTime();e.setFullYear(a+1,0,1),e.setHours(0,0,0);const n=e.getTime()-1;t.push({title:""+a,minDate:s,maxDate:n})}}else if(e<=s){const a=new Date;a.setFullYear(e,0,1),a.setHours(0,0,0);const s=a.getTime();a.setFullYear(e+1,0,1),a.setHours(0,0,0);const n=a.getTime()-1;t.push({title:""+e,minDate:s,maxDate:n})}}else{const e=n[1],a=n[3],s=n[5];if(!n[2]===n[4])return;const i=parseInt(e),r=parseInt(a)-1;let o=parseInt(s);o>=10&&o<=99&&(o+=2e3);const p=(new Date).getFullYear();if(ot(i-1,r)&&o>=Ke&&o<=p){const e=new Date;e.setFullYear(o,r,i),e.setHours(0,0,0);const a=e.getTime();e.setFullYear(o,r,i+1),e.setHours(0,0,0);const s=e.getTime()-1;return void t.push({title:it(a),minDate:a,maxDate:s})}}else{const e=n[1],a=n[3],s=parseInt(e),i=parseInt(a);if(s>0&&s<=31){if(i>=Ke&&s<=12)return void tt(t,s-1,i);i<=12&&at(t,s-1,i-1)}else s>=Ke&&i<=12&&tt(t,i-1,s)}};var ft=a(2491),ct=a(7072),lt=a(8801),mt=a(6658);const gt={pdf:"application/pdf",tgv:"application/x-tgwallpattern",tgs:"application/x-tgsticker",json:"application/json",wav:"audio/wav",mp3:"audio/mpeg",ogg:"audio/ogg",jpeg:"image/jpeg",jpg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",mp4:"video/mp4",webm:"video/webm",mov:"video/quicktime",svg:"image/svg+xml"},ht={};for(const e in gt)ht[gt[e]]=e;let ut=0;class yt extends G{constructor(){super(...arguments),this.onServiceWorkerFail=()=>{for(const e in this.docs){const t=this.docs[e];t.supportsStreaming&&(delete t.supportsStreaming,this.thumbsStorage.deleteCacheContext(t))}}}after(){this.docs={},this.stickerCachedThumbs={},this.uploadingWallPapers={},f.Z.getInstance().addEventListener("serviceWorkerOnline",(e=>{e||this.onServiceWorkerFail()}))}saveDoc(e,t){if(!e||"documentEmpty"===e._)return;const a=this.docs[e.id];e.file_reference&&(dt("file_reference",a,e),this.referenceDatabase.saveContext(e.file_reference,t)),a||(this.docs[e.id]=e);for(let t=0,a=e.attributes.length;t"documentAttributeFilename"===e._)),a=t&&t.file_name.split(".").pop(),s=((e,t={})=>{const a=t.monthAsNumber?".":" ",s=("0"+e.getHours()).slice(-2)+":"+("0"+e.getMinutes()).slice(-2)+(t.noSeconds?"":":"+("0"+e.getSeconds()).slice(-2));return(t.leadingZero?("0"+e.getDate()).slice(-2):e.getDate())+a+(t.monthAsNumber?("0"+(e.getMonth()+1)).slice(-2):He[e.getMonth()])+a+e.getFullYear()+(t.noTime?"":", "+s)})(new Date(1e3*e.date),{monthAsNumber:!0,leadingZero:!0}).replace(/[:\.]/g,"-").replace(", ","_");e.file_name=`${e.type}_${s}${a?"."+a:""}`}return zs()&&("gif"===e.type&&e.size>8e6||"audio"===e.type||"video"===e.type)?(e.supportsStreaming=!0,this.thumbsStorage.getCacheContext(e).url||this.thumbsStorage.setCacheContextURL(e,void 0,function(e,t=!1,a){let s;return s=t?"download":a?"thumb":e.supportsStreaming?"stream":"document",(0,lt.q)(s,(0,mt.Z)(e,a))}(e),0)):e.supportsStreaming=!1,e.file_name||(e.file_name=""),a?Object.assign(a,e):e}getDoc(e){return(0,fe.Z)(e)?e:this.docs[e]}downloadDoc(e,t,a){return this.apiFileManager.downloadMedia({media:e,queueId:t,onlyCache:a})}getLottieCachedThumb(e,t){const a=this.stickerCachedThumbs[e];return a&&a[t]}saveLottiePreview(e,t,a,s,n){var i,r,o;const p=this.getDoc(e);if(!p)return;const d=null!==(i=(r=this.stickerCachedThumbs)[o=p.id])&&void 0!==i?i:r[o]={},f=d[n];f&&f.w>=a&&f.h>=s||(d[n]={url:URL.createObjectURL(t),w:a,h:s})}saveWebPConvertedStrippedThumb(e,t){const a=this.getDoc(e);if(!a)return;const s=a.thumbs&&a.thumbs.find((e=>"photoStrippedSize"===e._));s&&(a.pFlags.stickerThumbConverted=!0,s.bytes=t)}prepareWallPaperUpload(e){const t="wallpaper-upload-"+ ++ut,a={_:"photoSize",h:0,w:0,location:{},size:e.size,type:o.Pt};let s={_:"document",access_hash:"",attributes:[],dc_id:0,file_reference:[],id:t,mime_type:e.type,size:e.size,date:(0,te.Z)(!0),pFlags:{},thumbs:[a],file_name:e.name};s=this.saveDoc(s);const n=this.thumbsStorage.setCacheContextURL(s,void 0,URL.createObjectURL(e),e.size),i={_:"wallPaper",access_hash:"",document:s,id:t,slug:t,pFlags:{}};return this.uploadingWallPapers[t]={cacheContext:n,file:e},i}uploadWallPaper(e){const{cacheContext:t,file:a}=this.uploadingWallPapers[e];return delete this.uploadingWallPapers[e],this.apiFileManager.upload({file:a,fileName:a.name}).then((e=>this.apiManager.invokeApi("account.uploadWallPaper",{file:e,mime_type:a.type,settings:{_:"wallPaperSettings",pFlags:{}}}).then((e=>((0,ue.Z)(e),e.document=this.saveDoc(e.document),this.thumbsStorage.setCacheContextURL(e.document,void 0,t.url,t.downloaded),e)))))}getGifs(){return this.apiManager.invokeApiHashable({method:"messages.getSavedGifs",processResult:e=>((0,ue.Z)(e),e.gifs.map((e=>this.saveDoc(e))))})}requestDocPart(e,t,a,s){const n=this.getDoc(e);return n?this.apiFileManager.requestFilePart(t,(0,ct.Z)(n),a,s):Promise.reject((0,X.Z)("NO_DOC"))}}var _t=a(6034);class vt extends G{constructor(){super(...arguments),this.drafts={}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateDraftMessage:e=>{const t=this.appPeersManager.getPeerId(e.peer);this.saveDraft({peerId:t,threadId:e.threadId,draft:e.draft,notify:!0})}}),h.Z.get("drafts").then((e=>{this.drafts=e||{}}))}getKey(e,t){return e+(t?"_"+t:"")}getDraft(e,t){return this.drafts[this.getKey(e,t)]}addMissedDialogs(){return this.getAllDrafts().then((()=>{for(const e in this.drafts){if(-1!==e.indexOf("_"))continue;const t=e.toPeerId();this.appMessagesManager.getDialogOnly(t)||this.appMessagesManager.reloadConversation(t)}}))}getAllDrafts(){var e;return null!==(e=this.getAllDraftPromise)&&void 0!==e?e:this.getAllDraftPromise=this.apiManager.invokeApi("messages.getAllDrafts").then((e=>{(this.apiUpdatesManager.updatesState.syncLoading||Promise.resolve()).then((()=>{this.apiUpdatesManager.processUpdateMessage(e)}))}))}saveDraft({peerId:e,threadId:t,draft:a,notify:s,force:n}){const i=this.processApiDraft(a),r=this.getKey(e,t);return i?this.drafts[r]=i:delete this.drafts[r],h.Z.set({drafts:this.drafts}),s&&this.rootScope.dispatchEvent("draft_updated",{peerId:e,threadId:t,draft:i,force:n}),i}isEmptyDraft(e){return"draftMessage"!==(null==e?void 0:e._)||!(void 0!==e.reply_to_msg_id&&e.reply_to_msg_id>0)&&!e.message.length}processApiDraft(e){if(e&&"draftMessage"===e._)return e.reply_to_msg_id&&(e.reply_to_msg_id=(0,pe.Z)(e.reply_to_msg_id)),e}syncDraft(e,t,a,s=!0,n=!1){const i=this.getDraft(e,t);if((0,_t.Z)(i,a))return!0;const r={peer:this.appPeersManager.getInputPeerById(e),message:""};let o;if(this.isEmptyDraft(a))o={_:"draftMessageEmpty"};else{(0,ue.Z)(a);const e=a.message,t=a.entities;a.reply_to_msg_id&&(r.reply_to_msg_id=(0,oe.Z)(a.reply_to_msg_id)),(null==t?void 0:t.length)&&(r.entities=this.appMessagesManager.getInputEntities(t)),a.pFlags.no_webpage&&(r.no_webpage=a.pFlags.no_webpage),r.message=e}t&&(r.top_msg_id=(0,oe.Z)(t));const p=o||a;return p.date=(0,te.Z)(!0)+this.timeManager.getServerTimeOffset(),this.saveDraft({peerId:e,threadId:t,draft:p,notify:!0,force:n}),!s||this.apiManager.invokeApi("messages.saveDraft",r)}clearAllDrafts(){return this.apiManager.invokeApi("messages.clearAllDrafts").then((e=>{if(e)for(const e in this.drafts){const[t,a]=e.split("_");this.rootScope.dispatchEvent("draft_updated",{peerId:t.toPeerId(),threadId:a?+a:void 0,draft:void 0})}}))}clearDraft(e,t){const a={_:"draftMessageEmpty"};t?this.syncDraft(e,t,a,!1,!0):this.saveDraft({peerId:e,threadId:t,draft:a,notify:!0,force:!0})}setDraft(e,t,a,s){const n={_:"draftMessage",date:(0,te.Z)(!0),message:a,pFlags:{},entities:s};t?this.syncDraft(e,t,n,!1,!0):this.saveDraft({peerId:e,threadId:t,draft:n,notify:!0,force:!0})}}var Pt=a(946),bt=a(7746);const Mt={keywords:{},version:0,langCode:_.Z.langPackCode};class St extends G{constructor(){super(...arguments),this.keywordLangPacks={},this.indexedLangPacks={},this.getKeywordsPromises={},this.recent={},this.getRecentEmojisPromises={},this.getCustomEmojiDocumentPromises=new Map}getEmojiKeywords(e=_.Z.langPackCode){const t=this.getKeywordsPromises[e];if(t)return t;const a="emojiKeywords_"+e;return this.getKeywordsPromises[e]=h.Z.get(a).then((t=>((0,fe.Z)(t)||(t={}),(0,Pt.Z)(Mt,t),t.langCode=e,this.keywordLangPacks[e]=t,this.apiManager.invokeApi("messages.getEmojiKeywordsDifference",{lang_code:t.langCode,from_version:t.version}).then((e=>{t.version=e.version;const s=t.keywords,n=e.keywords;for(let e=0,t=n.length;et)))))}getBothEmojiKeywords(){const e=[this.getEmojiKeywords()];return this.networkerFactory.language!==_.Z.langPackCode&&e.push(this.getEmojiKeywords(this.networkerFactory.language)),this.recent.native||e.push(this.getRecentEmojis("native")),Promise.all(e)}indexEmojis(){this.index||(this.index=new ae.Z(void 0,2));for(const e in this.keywordLangPacks){if(this.indexedLangPacks[e])continue;const t=this.keywordLangPacks[e].keywords;for(const e in t){const a=t[e];this.index.indexObject(a,e)}this.indexedLangPacks[e]=!0}}searchEmojis(e){let t;if(this.indexEmojis(),(e=e.toLowerCase().replace(/_/g," ")).trim()){const a=this.index.search(e);t=Array.from(a).reduce(((e,t)=>e.concat(t)),[])}else t=this.recent.native.concat(St.POPULAR_EMOJI).slice(0,32);return t=Array.from(new Set(t)),t}getRecentEmojis(e){var t;const a=this.getRecentEmojisPromises;return null!==(t=a[e])&&void 0!==t?t:a[e]=this.appStateManager.getState().then((t=>{let a=[];if("native"===e){const{recentEmoji:e}=t;a=Array.isArray(e)&&e.length?e:St.POPULAR_EMOJI}else{const{recentCustomEmoji:e}=t;a=Array.isArray(e)&&e.length?e:[]}return this.recent[e]=a}))}pushRecentEmoji(e){const t=e.docId?"custom":"native";e.emoji=(0,bt.Z)(e.emoji),this.getRecentEmojis(t).then((a=>{const s=e.docId||e.emoji;(0,M.Z)(a,s),a.unshift(s),a.splice(32,a.length-32),this.appStateManager.pushToState("custom"===t?"recentCustomEmoji":"recentEmoji",a),this.rootScope.dispatchEvent("emoji_recent",e)}))}getCustomEmojiDocuments(e){return e.length?this.apiManager.invokeApi("messages.getCustomEmojiDocuments",{document_id:e}).then((e=>e.map((e=>this.appDocsManager.saveDoc(e,{type:"customEmoji",docId:e.id}))))):Promise.resolve([])}getCachedCustomEmojiDocuments(e){return e.map((e=>this.appDocsManager.getDoc(e)))}setDebouncedGetCustomEmojiDocuments(){!this.getCustomEmojiDocumentsPromise&&this.getCustomEmojiDocumentPromises.size&&(this.getCustomEmojiDocumentsPromise=(0,P.Z)(0).then((()=>{const e=[...this.getCustomEmojiDocumentPromises.keys()],t=[];do{const a=e.splice(0,100),s=this.getCustomEmojiDocuments(a).then((e=>{e.forEach(((e,t)=>{const s=a[t],n=this.getCustomEmojiDocumentPromises.get(s);this.getCustomEmojiDocumentPromises.delete(s),n.resolve(e)}))}));t.push(s)}while(e.length);return Promise.all(t)})).finally((()=>{this.getCustomEmojiDocumentsPromise=void 0,this.setDebouncedGetCustomEmojiDocuments()})))}getCustomEmojiDocument(e){let t=this.getCustomEmojiDocumentPromises.get(e);if(t)return t;return this.appDocsManager.getDoc(e)||(t=(0,v.Z)(),this.getCustomEmojiDocumentPromises.set(e,t),this.setDebouncedGetCustomEmojiDocuments(),t)}getCustomEmojis(){return this.appStickersManager.getEmojiStickers()}}St.POPULAR_EMOJI=["๐Ÿ˜‚","๐Ÿ˜˜","โค๏ธ","๐Ÿ˜","๐Ÿ˜Š","๐Ÿ˜","๐Ÿ‘","โ˜บ๏ธ","๐Ÿ˜”","๐Ÿ˜„","๐Ÿ˜ญ","๐Ÿ’‹","๐Ÿ˜’","๐Ÿ˜ณ","๐Ÿ˜œ","๐Ÿ™ˆ","๐Ÿ˜‰","๐Ÿ˜ƒ","๐Ÿ˜ข","๐Ÿ˜","๐Ÿ˜ฑ","๐Ÿ˜ก","๐Ÿ˜","๐Ÿ˜ž","๐Ÿ˜…","๐Ÿ˜š","๐Ÿ™Š","๐Ÿ˜Œ","๐Ÿ˜€","๐Ÿ˜‹","๐Ÿ˜†","๐Ÿ‘Œ","๐Ÿ˜","๐Ÿ˜•"];var It=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class Ct extends G{after(){this.log=(0,S.kg)("GROUP-CALLS"),this.groupCalls=new Map,this.participants=new Map,this.nextOffsets=new Map,this.apiUpdatesManager.addMultipleEventsListeners({updateGroupCall:e=>{this.saveGroupCall(e.call,e.chat_id)},updateGroupCallParticipants:e=>{this.saveGroupCall(e.call);const t=e.call.id;this.saveApiParticipants(t,e.participants)}}),this.rootScope.addEventListener("group_call_update",(e=>{"groupCallDiscarded"===e._&&this.participants.delete(e.id)}))}getCachedParticipants(e){let t=this.participants.get(e);return t||this.participants.set(e,t=new Map),t}prepareToSavingNextOffset(e){const t=this.nextOffsets,a=t.get(e);return{nextOffset:a,setNextOffset:s=>{t.get(e)===a&&t.set(e,s)}}}saveApiParticipant(e,t,a){const s=this.getCachedParticipants(e),n=(0,le.Z)(t.peer),i=s.get(n),r=t.pFlags.left;if(!i&&r)return;t.pFlags.muted||t.pFlags.can_self_unmute||(t.pFlags.can_self_unmute=!0),i?(re(i,t),t=i):s.set(n,t);const o=this.getGroupCall(e);if("groupCall"===(null==o?void 0:o._)){let e=!1;r?(--o.participants_count,e=!0):!t.pFlags.just_joined||i||t.pFlags.self||(++o.participants_count,e=!0),e&&this.rootScope.dispatchEvent("group_call_update",o)}r&&s.delete(n),this.rootScope.dispatchEvent("group_call_participant",{groupCallId:e,participant:t})}saveApiParticipants(e,t,a){t.saved||(t.saved=!0,t.forEach((t=>this.saveApiParticipant(e,t,a))))}editParticipant(e,t,a){return It(this,void 0,void 0,(function*(){this.saveApiParticipant(e,t);const s=t.pFlags.self?o.NM:(0,le.Z)(t.peer),n=yield this.apiManager.invokeApiSingle("phone.editGroupCallParticipant",{call:this.getGroupCallInput(e),participant:s===o.NM?this.appPeersManager.getInputPeerSelf():this.appPeersManager.getInputPeerById(s),muted:a.muted,volume:a.volume,raise_hand:a.raiseHand,video_paused:a.videoPaused,video_stopped:a.videoStopped,presentation_paused:a.presentationPaused});this.apiUpdatesManager.processUpdateMessage(n)}))}getGroupCall(e){return this.groupCalls.get(e)}getGroupCallFull(e,t){return It(this,void 0,void 0,(function*(){const a=this.getGroupCall(e);if(a&&"inputGroupCall"!==a._&&!t)return a;const s=this.getCachedParticipants(e).size?0:100;return this.apiManager.invokeApiSingleProcess({method:"phone.getGroupCall",params:{call:this.getGroupCallInput(e),limit:s},processResult:t=>{this.appUsersManager.saveApiUsers(t.users),this.appChatsManager.saveApiChats(t.chats),this.saveApiParticipants(e,t.participants,!0);const a=this.saveGroupCall(t.call);return s&&void 0===this.nextOffsets.get(e)&&this.nextOffsets.set(e,t.participants_next_offset),a}})}))}saveGroupCall(e,t){const a=this.groupCalls.get(e.id),s="inputGroupCall"!==e._&&(!a||"groupCallDiscarded"!==a._);return a?(s&&re(a,e),e=a):this.groupCalls.set(e.id,e),s&&this.rootScope.dispatchEvent("group_call_update",e),e}createGroupCall(e,t,a){return It(this,void 0,void 0,(function*(){const s=yield this.apiManager.invokeApi("phone.createGroupCall",{peer:this.appPeersManager.getInputPeerById(e.toPeerId(!0)),random_id:(0,Ee.d)(32),schedule_date:t,title:a});return this.apiUpdatesManager.processUpdateMessage(s),s.updates.find((e=>"updateGroupCall"===e._)).call}))}getGroupCallInput(e){const t=this.getGroupCall(e);return{_:"inputGroupCall",id:t.id,access_hash:t.access_hash}}getGroupCallParticipants(e){return It(this,void 0,void 0,(function*(){const{nextOffset:t,setNextOffset:a}=this.prepareToSavingNextOffset(e);return""!==t&&(yield this.apiManager.invokeApiSingleProcess({method:"phone.getGroupParticipants",params:{call:this.getGroupCallInput(e),ids:[],sources:[],offset:t||"",limit:100},processResult:t=>{const s=t.count===t.participants.length?"":t.next_offset;this.appChatsManager.saveApiChats(t.chats),this.appUsersManager.saveApiUsers(t.users),this.saveApiParticipants(e,t.participants),a(s)}})),{participants:this.getCachedParticipants(e),isEnd:""===this.nextOffsets.get(e)}}))}hangUp(e,t){const a=this.getGroupCallInput(e);let s;return s="boolean"==typeof t&&t?this.apiManager.invokeApi("phone.discardGroupCall",{call:a}):"number"==typeof t?this.apiManager.invokeApi("phone.leaveGroupCall",{call:a,source:t}):this.apiManager.invokeApi("phone.joinGroupCall",{call:a,join_as:this.appPeersManager.getInputPeerSelf(),muted:!0,video_stopped:!0,params:{_:"dataJSON",data:""}}),s.then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}joinGroupCall(e,t,a){return It(this,void 0,void 0,(function*(){const s=this.getGroupCallInput(e);let n;if("main"===a.type){const i={call:s,join_as:this.appPeersManager.getInputPeerSelf(),params:t,muted:a.isMuted,video_stopped:!a.joinVideo};n=this.apiManager.invokeApi("phone.joinGroupCall",i),this.log(`[api] joinGroupCall id=${e}`,i)}else{const a={call:s,params:t};n=this.apiManager.invokeApi("phone.joinGroupCallPresentation",a),this.log(`[api] joinGroupCallPresentation id=${e}`,a)}const i=yield n;return this.apiUpdatesManager.processUpdateMessage(i),i.updates.find((e=>"updateGroupCallConnection"===e._))}))}leaveGroupCallPresentation(e){return this.apiManager.invokeApi("phone.leaveGroupCallPresentation",{call:this.getGroupCallInput(e)}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}}function wt(e){return{_:"inputPhoto",id:e.id,access_hash:e.access_hash,file_reference:e.file_reference}}function kt(e){return{_:"inputMediaPhoto",id:wt(e),ttl_seconds:0,pFlags:{}}}var At=a(515);function Ut(e){return{_:"inputMediaDocument",id:{_:"inputDocument",id:e.id,access_hash:e.access_hash,file_reference:e.file_reference},ttl_seconds:0,pFlags:{}}}class Dt extends G{constructor(){super(...arguments),this.inlineResults={},this.setHash={}}getGeoInput(e){return"geoPoint"===e._?{_:"inputGeoPoint",lat:e.lat,long:e.long,accuracy_radius:e.accuracy_radius}:{_:"inputGeoPointEmpty"}}getInlineResults(e,t,a="",s="",n){return this.apiManager.invokeApi("messages.getInlineBotResults",{bot:this.appUsersManager.getUserInput(t),peer:this.appPeersManager.getInputPeerById(e),query:a,geo_point:n?this.getGeoInput(n):void 0,offset:s},{stopTime:-1,noErrorBox:!0}).then((e=>{const t=e.query_id;return e.results.forEach((e=>{"botInlineMediaResult"===e._&&(e.document&&(e.document=this.appDocsManager.saveDoc(e.document)),e.photo&&(e.photo=this.appPhotosManager.savePhoto(e.photo))),this.inlineResults[(0,At.Z)(t,e.id)]=e})),e}))}pushPopularBot(e){this.appUsersManager.getTopPeers("bots_inline").then((t=>{const a=e.toPeerId(),s=t.findIndex((e=>e.id===a));let n;n=-1!==s?t[s]:{id:a,rating:0},++n.rating,(0,ie.Z)(t,n,"rating"),this.appStateManager.setKeyValueToStorage("topPeersCache")}))}switchToPM(e,t,a){return this.setHash[t]={peerId:e,time:Date.now()},this.appMessagesManager.startBot(t,void 0,a)}checkSwitchReturn(e){return t=this,a=void 0,n=function*(){const t=this.appUsersManager.getUser(e);if(!t||!t.pFlags.bot||!t.bot_inline_placeholder)return;const a=this.setHash[e];return a&&(delete this.setHash[e],Date.now()-a.time<36e5)?a.peerId:void 0},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}switchInlineQuery(e,t,a,s){this.appDraftsManager.setDraft(e,t,"@"+this.appPeersManager.getPeerUsername(a.toPeerId())+" "+s)}callbackButtonClick(e,t,a){return this.apiManager.invokeApi("messages.getBotCallbackAnswer",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t),data:a.data},{stopTime:-1,noErrorBox:!0})}sendInlineResult(e,t,a,s={}){const n=this.inlineResults[a];if(!n)return;this.pushPopularBot(t);const i=a.split("_"),r=i.shift(),o=i.join("_");if(s.viaBotId=t,s.queryId=r,s.resultId=o,n.send_message.reply_markup&&(s.replyMarkup=n.send_message.reply_markup),"botInlineMessageText"===n.send_message._)s.entities=n.send_message.entities,this.appMessagesManager.sendText(e,n.send_message.message,s);else{let t,a,i="";const r=n.send_message;switch(r._){case"botInlineMessageMediaAuto":if(i=r.message,"botInlineMediaResult"===n._){const{document:e,photo:a}=n;t=e?Ut(e):kt(a)}break;case"botInlineMessageMediaGeo":t={_:"inputMediaGeoPoint",geo_point:this.getGeoInput(r.geo)},s.geoPoint=r.geo;break;case"botInlineMessageMediaVenue":t={_:"inputMediaVenue",geo_point:this.getGeoInput(r.geo),title:r.title,address:r.address,provider:r.provider,venue_id:r.venue_id,venue_type:r.venue_type},s.geoPoint=r.geo;break;case"botInlineMessageMediaContact":t={_:"inputMediaContact",phone_number:r.phone_number,first_name:r.first_name,last_name:r.last_name,vcard:r.vcard};break;case"botInlineMessageMediaInvoice":a={_:"messageMediaInvoice",title:r.title,description:r.description,photo:r.photo,currency:r.currency,total_amount:r.total_amount,pFlags:{shipping_address_requested:r.pFlags.shipping_address_requested,test:r.pFlags.test},start_param:void 0}}!t&&a&&(t={_:"messageMediaPending",messageMedia:a}),this.appMessagesManager.sendOther(e,t,s)}}}var Et=a(7082);class Tt{constructor(){this.tempNum=0}generateTempMessageId(e){const t=++this.tempNum;return(0,pe.Z)(e)+(t&Et.o-1)}}var Ft=a(4421),Rt=a(3624),xt=a(7401);function Bt(e,t){if(e.length{let o=e.slice(s,r);const p=n++;o.length>t&&(Bt(o.slice(t),t).forEach((e=>{i[n++]=e})),o=o.slice(0,t)),s=r,a=0,i[p]=(i[p]||"")+o};let o=0;for(;;){let s=e.indexOf(" ",o);if(-1===s){o!==e.length-1&&r();break}s+=" ".length;const n=s-o;a+n>t&&r(a),o=s,a+=n}return i}var Vt=a(5701),Ot=a(7667),Lt=a(6241),Nt=a(6535),Zt=a(6566),jt=a(2202),qt=a(319);const Gt=new class{constructor(){this.tabs=new Map}start(){f.Z.getInstance().addEventListener("tabState",((e,t)=>{this.tabs.get(t).state=e}))}getTabs(){return[...this.tabs.values()].filter((e=>!!e.state))}addTab(e){const t={source:e,state:void 0};this.tabs.set(e,t)}deleteTab(e){this.tabs.delete(e)}};d.GO&&(d.GO.appTabsManager=Gt);const Ht=Gt;var Wt=a(2381),zt=a(13);function Kt(e){return{_:"inputDocument",id:e.id,access_hash:e.access_hash,file_reference:e.file_reference}}var Jt=a(5285),$t=a(5102);function Qt(e,t,a){a?e[t]=!0:delete e[t]}var Yt=a(4993),Xt=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const ea=e=>{e()},ta=!0;class aa extends G{constructor(){super(...arguments),this.pendingByRandomId={},this.pendingByMessageId={},this.pendingAfterMsgs={},this.pendingTopMsgs={},this.tempFinalizeCallbacks={},this.sendSmthLazyLoadQueue=new Ft.Z(10),this.needSingleMessages=new Map,this.extendedMedia=new Map,this.maxSeenId=0,this.migratedFromTo={},this.migratedToFrom={},this.newDialogsToHandle=new Map,this.newUpdatesAfterReloadToHandle={},this.notificationsToHandle={},this.reloadConversationsPeers=new Map,this.log=(0,S.kg)("MESSAGES",S.v9.Error|S.v9.Debug|S.v9.Log|S.v9.Warn),this.groupedTempId=0,this.typings={},this.unreadMentions={},this.goToNextMentionPromises={},this.batchUpdates={},this.clear=e=>{this.middleware?this.middleware.clean():(this.middleware=(0,Rt.k)(),this.uploadFilePromises={}),this.messagesStorageByPeerId={},this.groupedMessagesStorage={},this.scheduledMessagesStorage={},this.historiesStorage={},this.threadsStorage={},this.searchesStorage={},this.pinnedMessages={},this.threadsServiceMessagesIdsStorage={},this.threadsToReplies={},this.dialogsStorage&&this.dialogsStorage.clear(e),this.filtersStorage&&this.filtersStorage.clear(e)},this.handleNewDialogs=()=>{let e=0;const t=new Map,a=a=>{var s;const{peerId:n}=a;this.dialogsStorage.pushDialog({dialog:a}),this.appPeersManager.isChannel(n)||(e=Math.max(e,a.top_message||0));let i=t.get(n);i||t.set(n,i={}),"forumTopic"===a._?(null!==(s=i.topics)&&void 0!==s?s:i.topics=new Map).set(a.id,a):i.dialog=a};for(const[e,t]of this.newDialogsToHandle){const s="dialog"in t,{dialog:n,topics:i}=t;s&&(n?this.dialogsStorage.getDialogOnly(e)&&a(n):this.reloadConversation(e.toPeerId())),i&&(null==i||i.forEach(((t,s)=>{t?this.dialogsStorage.getForumTopic(e,s)&&a(t):this.dialogsStorage.getForumTopicById(e,s)})))}0!==e&&this.incrementMaxSeenId(e),this.rootScope.dispatchEvent("dialogs_multiupdate",t),this.newDialogsToHandle.clear()},this.handleNotifications=()=>{T.Z.clearTimeout(this.notificationsHandlePromise),this.notificationsHandlePromise=void 0;for(const e in this.notificationsToHandle){const[t,a]=e.split("_"),s=this.notificationsToHandle[e];this.getNotifyPeerSettings(t.toPeerId(),a?+a:void 0).then((({muted:e,peerTypeNotifySettings:t})=>{const a=s.topMessage;e&&!a.pFlags.mentioned||!a.pFlags.unread||a.pFlags.unread&&this.notifyAboutMessage(a,{fwdCount:s.fwdCount,peerTypeNotifySettings:t})}))}this.notificationsToHandle={}},this.onUpdateMessageId=e=>{const t=e.random_id;if(!this.pendingByRandomId[t])return;const a=(0,pe.Z)(e.id);this.pendingByMessageId[a]=t},this.onUpdateNewMessage=e=>{var t,a,s,n;const i=e.message,r=this.getMessagePeer(i),p=this.getHistoryMessagesStorage(r),d="updateNewDiscussionMessage"===e._;this.saveMessages([i],{storage:this.createMessageStorage(r,"history")});const f=this.appPeersManager.isForum(r),c=this.getThreadKey(i),l=c?+c.split("_")[1]:void 0,m=this.dialogsStorage.getDialogOrTopic(r,d?l:void 0);if((!m||this.reloadConversationsPeers.has(r))&&!d){let t=!0;if(r.isAnyChat()&&(t=this.appChatsManager.isInChat(r.toChatId())),t)return void this.handleNewUpdateAfterReload(r,e)}if(l&&!d){const e=null===(t=this.threadsStorage[r])||void 0===t?void 0:t[l],a={_:"updateNewDiscussionMessage",message:i};this.appChatsManager.isForum(r.toChatId())&&!this.dialogsStorage.getForumTopic(r,l)?this.handleNewUpdateAfterReload(r,a,l):e&&this.onUpdateNewMessage(a)}if("messageService"===i._){const{action:e}=i;if("messageActionPaymentSent"===e._&&i.reply_to&&this.rootScope.dispatchEvent("payment_sent",{peerId:i.reply_to.reply_to_peer_id?this.appPeersManager.getPeerId(i.reply_to.reply_to_peer_id):i.peerId,mid:i.reply_to_mid,receiptMessage:i}),"messageActionTopicEdit"===e._&&!d){const t=this.dialogsStorage.getForumTopic(r,l);if(t){const a=(0,ve.Z)(t);void 0!==e.title&&(t.title=e.title),void 0!==e.closed&&Qt(t.pFlags,"closed",e.closed),void 0!==e.hidden&&Qt(t.pFlags,"hidden",e.hidden),void 0!==e.icon_emoji_id&&(t.icon_emoji_id=e.icon_emoji_id),this.scheduleHandleNewDialogs(r,t),this.dialogsStorage.processTopicUpdate(t,a)}else this.dialogsStorage.getForumTopicById(r,l)}}this.saveMessages([i],{storage:p}),this.checkPendingMessage(i);const g=this.getHistoryStorage(r,d?l:void 0);d||this.updateMessageRepliesIfNeeded(i);const h=e.ignoreExisting;if(g.history.findSlice(i.mid)){if(!h)return!1}else{const e=g.history.first;if(e.isEnd(se.D.Bottom)){let t=0;for(const a=e.length;te[t]);++t);e.splice(t,0,i.mid)}else g.history.unshift(i.mid);null!==g.count&&++g.count}(!g.maxId||i.mid>g.maxId)&&(g.maxId=i.mid),this.mergeReplyKeyboard(g,i)&&this.rootScope.dispatchEvent("history_reply_markup",{peerId:r});const u=i.fromId;if(u.isUser()&&!i.pFlags.out&&i.from_id){this.appUsersManager.forceUserOnline(u,i.date);const e={_:"sendMessageCancelAction"};let t;t=r.isUser()?{_:"updateUserTyping",action:e,user_id:u}:this.appPeersManager.isChannel(r)?{_:"updateChannelUserTyping",action:e,channel_id:r.toChatId(),from_id:this.appPeersManager.getOutputPeer(u),top_msg_id:l?(0,oe.Z)(l):void 0}:{_:"updateChatUserTyping",action:e,chat_id:r.toChatId(),from_id:this.appPeersManager.getOutputPeer(u)},this.apiUpdatesManager.processLocalUpdate(t)}this.handleNewMessage(i);const y="forumTopic"===(null==m?void 0:m._);if(d&&!y||!m)return;const _=!i.pFlags.out&&i.pFlags.unread;if(_&&i.mid>m.top_message){const e=this.dialogsStorage.prepareDialogUnreadCountModifying(m);++m.unread_count,i.pFlags.mentioned&&(++m.unread_mentions_count,this.modifyCachedMentions(r,i.mid,!0,y?l:void 0)),e()}if(i.mid>=m.top_message&&this.setDialogTopMessage(i,m),(!d&&!f||y)&&_){const e=c||r,t=null!==(a=(n=this.notificationsToHandle)[e])&&void 0!==a?a:n[e]={fwdCount:0,fromId:o.NM};t.fromId!==u&&(t.fromId=u,t.fwdCount=0),i.fwd_from&&++t.fwdCount,t.topMessage=i,null!==(s=this.notificationsHandlePromise)&&void 0!==s||(this.notificationsHandlePromise=T.Z.setTimeout(this.handleNotifications,0))}},this.onUpdateMessageReactions=e=>{const{peer:t,msg_id:a,reactions:s}=e,n=(0,pe.Z)(a),i=this.appPeersManager.getPeerId(t),r=this.getMessageByPeer(i,n);if("message"!==(null==r?void 0:r._))return;const o=null==s?void 0:s.recent_reactions;if((null==o?void 0:o.length)&&r.pFlags.out){const e=o[o.length-1],t=r.reactions,a=null==t?void 0:t.recent_reactions;this.appPeersManager.getPeerId(e.peer_id)===this.appPeersManager.peerId||a&&!(a.length<=o.length)||a&&(0,Y.Z)(e,a[a.length-1])||this.getNotifyPeerSettings(i).then((({muted:t,peerTypeNotifySettings:a})=>{a.show_previews&&this.notifyAboutMessage(r,{peerReaction:e,peerTypeNotifySettings:a})}))}const p=r.peerId+"_"+r.mid;this.pushBatchUpdate("messages_reactions",this.batchUpdateReactions,p,(()=>(0,ve.Z)(r.reactions))),r.reactions=s,e.local||this.setDialogToStateIfMessageIsTop(r)},this.onUpdateDialogUnreadMark=e=>{const t=this.appPeersManager.getPeerId(e.peer.peer),a=this.getDialogOnly(t);if(a){const s=this.dialogsStorage.prepareDialogUnreadCountModifying(a);e.pFlags.unread?a.pFlags.unread_mark=!0:delete a.pFlags.unread_mark,s(),this.dialogsStorage.setDialogToState(a),this.rootScope.dispatchEvent("dialogs_multiupdate",new Map([[t,{dialog:a}]]))}else this.scheduleHandleNewDialogs(t)},this.onUpdateEditMessage=e=>{var t,a;const s=e.message,n=this.getMessagePeer(s),i=(0,pe.Z)(s.id),r=this.getHistoryMessagesStorage(n);if(!r.has(i))return;const o=this.getMessageFromStorage(r,i);this.saveMessages([s],{storage:r});const p=this.getMessageFromStorage(r,i);this.handleEditedMessage(o,p,r);const d=this.getDialogOnly(n),f=(null==d?void 0:d.top_message)===i;if(s.clear_history)f&&this.rootScope.dispatchEvent("dialog_flush",{peerId:n,dialog:d});else{let e=!0;if("message"===(null==o?void 0:o._)&&!(0,Y.Z)(o.reactions,p.reactions)){const t=p.reactions;p.reactions=o.reactions,this.apiUpdatesManager.processLocalUpdate({_:"updateMessageReactions",peer:this.appPeersManager.getOutputPeer(n),msg_id:s.id,reactions:t}),e=!1}e&&this.rootScope.dispatchEvent("message_edit",{storageKey:r.key,peerId:n,mid:i,message:s}),f&&this.dialogsStorage.setDialogToState(d);const c=new Map,l=()=>{let e=c.get(n);return e||c.set(n,e={}),e};(f||s.grouped_id)&&d&&(l().dialog=d);const m=this.getThreadKey(s);if(m){const e=+m.split("_")[1],s=this.dialogsStorage.getForumTopic(n,e);s&&(null!==(t=(a=l()).topics)&&void 0!==t?t:a.topics=new Map).set(e,s)}c.size&&this.rootScope.dispatchEvent("dialogs_multiupdate",c)}},this.onUpdateReadHistory=e=>{const t=e.channel_id,a=(0,pe.Z)(e.max_id||e.read_max_id),s=(0,pe.Z)(e.top_msg_id),n=t?t.toPeerId(!0):this.appPeersManager.getPeerId(e.peer),i="updateReadHistoryOutbox"===e._||"updateReadChannelOutbox"===e._||"updateReadChannelDiscussionOutbox"===e._||void 0,r=!!t&&this.appChatsManager.isForum(t),o=this.getHistoryMessagesStorage(n),p=(0,xt.Z)(o,"desc"),d=s&&r?this.dialogsStorage.getForumTopic(n,s):this.getDialogOnly(n),f=e.still_unread_count;let c=0,l=0,m=!1;const g=this.getHistoryStorage(n,s);if(n.isUser()&&i&&this.appUsersManager.forceUserOnline(n.toUserId()),s){const e=this.threadsToReplies[n+"_"+s];if(e){const[t,a]=e.split("_");this.updateMessage(t.toPeerId(),+a,"replies_updated")}}const h=d&&this.dialogsStorage.prepareDialogUnreadCountModifying(d),u=this.getReadMaxIdIfUnread(n,s);for(let e=0,t=p.length;ea)continue;const g=o.get(t);if(g.pFlags.out!==i)continue;const h=(0,Yt.Z)(g,r);if(!s||h===s){if(!(g.pFlags.unread||u&&u=d.top_message||!u?e=0:c&&d.top_message>a&&(e=c),void 0!==e&&(d.unread_count=e),(l<0||!d.unread_count)&&(d.unread_mentions_count=0)}null==h||h(),this.dialogsStorage.processDialogForFilters(d),this.rootScope.dispatchEvent("dialog_unread",{peerId:n,dialog:d}),this.dialogsStorage.setDialogToState(d),m||void 0!==f||i||!d.unread_count||("forumTopic"===d._?this.dialogsStorage.getForumTopicById(n,s):this.reloadConversation(n))}if(m&&this.rootScope.dispatchEvent("messages_read"),!s&&t){const e=n+"_";for(const t in this.threadsToReplies)if(0===t.indexOf(e)){const[e,a]=this.threadsToReplies[t].split("_");this.rootScope.dispatchEvent("replies_updated",this.getMessageByPeer(e.toPeerId(),+a))}}},this.onUpdateReadMessagesContents=e=>{const t=e.channel_id,a=e.top_msg_id,s=a?(0,pe.Z)(a):void 0,n=e.messages.map((e=>(0,pe.Z)(e))),i=t?t.toPeerId(!0):this.findPeerIdByMids(n);for(let e=0,t=n.length;e{const t=e.channel_id.toPeerId(!0),a=this.getHistoryStorage(t).history.slice,s=(0,pe.Z)(e.available_min_id),n=a.filter((e=>e<=s));e.messages=n,this.onUpdateDeleteMessages(e)},this.onUpdateDeleteMessages=e=>{var t;const a=e.channel_id,s=e.messages.map((e=>(0,pe.Z)(e))),n=a?a.toPeerId(!0):this.findPeerIdByMids(s);if(!n)return;this.apiManager.clearCache("messages.getSearchCounters",(e=>this.appPeersManager.getPeerId(e.peer)===n));const i=new Set,r=new Map;for(const e of s){const a=this.getMessageByPeer(n,e),s=this.getThreadKey(a);if(!s)continue;const o=+s.split("_")[1];if((null===(t=this.threadsStorage[n])||void 0===t?void 0:t[o])&&(i.add(s),!r.has(o))){const e=this.dialogsStorage.getForumTopic(n,o);e&&r.set(o,e)}}const o=this.handleDeletedMessages(n,this.getHistoryMessagesStorage(n),s),p=Array.from(i).map((e=>{const[t,a]=e.split("_");return this.getHistoryStorage(t.toPeerId(),+a)}));[this.getHistoryStorage(n),...p].forEach((e=>{for(const t of o.msgs)e.history.delete(t);o.count&&e.count&&(e.count=Math.max(0,e.count-o.count))})),this.rootScope.dispatchEvent("history_delete",{peerId:n,msgs:o.msgs});const d=[...r.values()],f=this.getDialogOnly(n);f&&d.unshift(f),d.forEach((e=>{const t="forumTopic"===e._,a=o.unreadMentions||o.unread,s=a&&this.dialogsStorage.prepareDialogUnreadCountModifying(e);if(o.unread&&(e.unread_count=Math.max(0,e.unread_count-o.unread)),o.unreadMentions&&(e.unread_mentions_count=e.unread_count?Math.max(0,e.unread_mentions_count-o.unreadMentions):0),a&&(s(),t||this.rootScope.dispatchEvent("dialog_unread",{peerId:n,dialog:e})),o.msgs.has(e.top_message)){const a=this.getHistoryStorage(e.peerId,t?e.id:void 0).history.first;if(a.isEnd(se.D.Bottom)&&a.length){const t=a[0],s=this.getMessageByPeer(n,t);this.setDialogTopMessage(s,e)}else t?this.dialogsStorage.getForumTopicById(n,e.id):this.reloadConversation(n)}}))},this.onUpdateChannel=e=>{const t=e.channel_id,a=t.toPeerId(!0),s=this.appChatsManager.getChat(t),n=this.appChatsManager.isInChat(t);(!!(0,$t.Z)(s)[0]||!s.pFlags.left)!=(void 0!==this.historiesStorage[a])&&(delete this.historiesStorage[a],this.rootScope.dispatchEvent("history_forbidden",a)),!!this.getDialogOnly(a)!==n&&(n?this.reloadConversation(a):this.dialogsStorage.dropDialogOnDeletion(a)),this.rootScope.dispatchEvent("channel_update",t)},this.onUpdateChannelReload=e=>{const t=e.channel_id.toPeerId(!0);this.flushStoragesByPeerId(t),Promise.all([this.reloadConversation(t)]).then((()=>{this.rootScope.dispatchEvent("history_reload",t)}))},this.onUpdateChannelMessageViews=e=>{var t;const a=e.views,s=null!==(t=e.peerId)&&void 0!==t?t:e.channel_id.toPeerId(!0),n=(0,pe.Z)(e.id),i=this.getMessageByPeer(s,n);void 0!==(null==i?void 0:i.views)&&i.views{var t;if(null===(t=e.pFlags)||void 0===t?void 0:t.popup)return void this.rootScope.dispatchEvent("service_notification",e);const a=o.yF,s=a,n=this.generateTempMessageId(s),i={_:"message",id:n,from_id:this.appPeersManager.getOutputPeer(a),peer_id:this.appPeersManager.getOutputPeer(s),pFlags:{unread:!0},date:(e.inbox_date||(0,te.Z)(!0))+this.timeManager.getServerTimeOffset(),message:e.message,media:e.media,entities:e.entities};this.appUsersManager.hasUser(a)||this.appUsersManager.saveApiUsers([{_:"user",id:a,pFlags:{verified:!0},access_hash:"0",first_name:"Telegram",phone:"42777"}]),this.saveMessages([i],{isOutgoing:!0}),e.inbox_date&&(this.pendingTopMsgs[s]=n,this.onUpdateNewMessage({_:"updateNewMessage",message:i,pts:void 0,pts_count:void 0}))},this.onUpdatePinnedMessages=e=>{const t="updatePinnedChannelMessages"===e._?e.channel_id:void 0,a=t?t.toPeerId(!0):this.appPeersManager.getPeerId(e.peer),s=e.messages.map((e=>(0,pe.Z)(e))),n=this.getHistoryMessagesStorage(a),i=s.filter((e=>!n.has(e)));(i.length?Promise.all(i.map((e=>this.reloadMessages(a,e)))):Promise.resolve()).finally((()=>{var t;const i=null===(t=e.pFlags)||void 0===t?void 0:t.pinned;if(i)for(const e of s)n.get(e).pFlags.pinned=!0;else for(const e of s)delete n.get(e).pFlags.pinned;delete this.pinnedMessages[this.getPinnedMessagesKey(a)],this.appStateManager.getState().then((e=>{delete e.hiddenPinnedMessages[a],this.rootScope.dispatchEvent("peer_pinned_messages",{peerId:a,mids:s,pinned:i})}))}))},this.onUpdateNotifySettings=e=>{const{peer:t,notify_settings:a}=e,s="notifyForumTopic"===t._;if("notifyPeer"!==t._&&!s)return;const n=this.appPeersManager.getPeerId(t.peer),i=this.dialogsStorage.getDialogOrTopic(n,s?(0,pe.Z)(t.top_msg_id):void 0);i&&(i.notify_settings=a,this.rootScope.dispatchEvent("dialog_notify_settings",i),this.dialogsStorage.setDialogToState(i))},this.onUpdateNewScheduledMessage=e=>{const t=e.message,a=this.getMessagePeer(t),s=this.scheduledMessagesStorage[a];if(!s)return;const n=(0,pe.Z)(t.id),i=this.getMessageFromStorage(s,n);this.saveMessages([t],{storage:s,isScheduled:!0});const r=this.getMessageFromStorage(s,n);i?(this.handleEditedMessage(i,r,s),this.rootScope.dispatchEvent("message_edit",{storageKey:s.key,peerId:a,mid:t.mid,message:t})):this.checkPendingMessage(t)||this.rootScope.dispatchEvent("scheduled_new",t)},this.onUpdateDeleteScheduledMessages=e=>{const t=this.appPeersManager.getPeerId(e.peer),a=this.scheduledMessagesStorage[t];if(a){const s=e.messages.map((e=>(0,pe.Z)(e)));this.handleDeletedMessages(t,a,s),this.rootScope.dispatchEvent("scheduled_delete",{peerId:t,mids:s})}},this.onUpdateMessageExtendedMedia=e=>{var t;const a=this.appPeersManager.getPeerId(e.peer),s=(0,pe.Z)(e.msg_id),n=this.getHistoryMessagesStorage(a);if(!n.has(s))return;const i=this.getMessageFromStorage(n,s),r=i.media;"messageExtendedMedia"!==(null===(t=r.extended_media)||void 0===t?void 0:t._)&&(r.extended_media=e.extended_media,this.onUpdateEditMessage({_:"updateEditMessage",message:i,pts:0,pts_count:0}))},this.onUpdateTranscribedAudio=e=>{const t=this.appPeersManager.getPeerId(e.peer),a=e.text,s=(0,pe.Z)(e.msg_id);this.rootScope.dispatchEvent("message_transcribed",{peerId:t,mid:s,text:a,pending:e.pFlags.pending})},this.batchUpdateViews=e=>{const t=[],a=this.getMessagesFromMap(e);for(const[e]of a)t.push({peerId:e.peerId,mid:e.mid,views:e.views});return t},this.batchUpdateReactions=e=>{var t,a,s;const n=[],i=this.getMessagesFromMap(e);for(const[e,r]of i){const i=null!==(a=null===(t=e.reactions)||void 0===t?void 0:t.results)&&void 0!==a?a:[],o=null!==(s=null==r?void 0:r.results)&&void 0!==s?s:[],p=i.filter((t=>{const a=o.find((e=>(0,Jt.Z)(e.reaction,t.reaction)));return e.pFlags.out&&(!a||t.count>a.count)||void 0!==t.chosen_order&&(!a||void 0===a.chosen_order)}));n.push({message:e,changedResults:p})}return n}}after(){return this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateMessageID:this.onUpdateMessageId,updateNewDiscussionMessage:this.onUpdateNewMessage,updateNewMessage:this.onUpdateNewMessage,updateNewChannelMessage:this.onUpdateNewMessage,updateDialogUnreadMark:this.onUpdateDialogUnreadMark,updateEditMessage:this.onUpdateEditMessage,updateEditChannelMessage:this.onUpdateEditMessage,updateMessageReactions:this.onUpdateMessageReactions,updateReadChannelDiscussionInbox:this.onUpdateReadHistory,updateReadChannelDiscussionOutbox:this.onUpdateReadHistory,updateReadHistoryInbox:this.onUpdateReadHistory,updateReadHistoryOutbox:this.onUpdateReadHistory,updateReadChannelInbox:this.onUpdateReadHistory,updateReadChannelOutbox:this.onUpdateReadHistory,updateChannelReadMessagesContents:this.onUpdateReadMessagesContents,updateReadMessagesContents:this.onUpdateReadMessagesContents,updateChannelAvailableMessages:this.onUpdateChannelAvailableMessages,updateDeleteMessages:this.onUpdateDeleteMessages,updateDeleteChannelMessages:this.onUpdateDeleteMessages,updateChannel:this.onUpdateChannel,updateChannelReload:this.onUpdateChannelReload,updateChannelMessageViews:this.onUpdateChannelMessageViews,updateServiceNotification:this.onUpdateServiceNotification,updatePinnedMessages:this.onUpdatePinnedMessages,updatePinnedChannelMessages:this.onUpdatePinnedMessages,updateNotifySettings:this.onUpdateNotifySettings,updateNewScheduledMessage:this.onUpdateNewScheduledMessage,updateDeleteScheduledMessages:this.onUpdateDeleteScheduledMessages,updateMessageExtendedMedia:this.onUpdateMessageExtendedMedia,updateTranscribedAudio:this.onUpdateTranscribedAudio}),this.rootScope.addEventListener("notify_peer_type_settings",(({key:e,settings:t})=>{let a;a="notifyUsers"===e?e=>e.peerId.isUser():"notifyBroadcasts"===e?e=>this.appPeersManager.isBroadcast(e.peerId):e=>this.appPeersManager.isAnyGroup(e.peerId),this.dialogsStorage.getFolderDialogs(0).concat(this.dialogsStorage.getFolderDialogs(1)).filter(a).forEach((e=>{this.rootScope.dispatchEvent("dialog_notify_settings",e)}))})),this.rootScope.addEventListener("webpage_updated",(({id:e,msgs:t})=>{t.forEach((({peerId:t,mid:a,isScheduled:s})=>{const n=s?this.getScheduledMessagesStorage(t):this.getHistoryMessagesStorage(t),i=this.getMessageFromStorage(n,a);i&&(i.media={_:"messageMediaWebPage",webpage:this.appWebPagesManager.getCachedWebPage(e)},this.rootScope.dispatchEvent("message_edit",{storageKey:n.key,peerId:t,mid:a,message:i}))}))})),this.rootScope.addEventListener("draft_updated",(({peerId:e,threadId:t,draft:a})=>{const s=this.dialogsStorage.getDialogOrTopic(e,t);if(s){s.draft=a;let t=!1;a||(0,oe.Z)(s.top_message)?(this.dialogsStorage.generateIndexForDialog(s),this.dialogsStorage.pushDialog({dialog:s})):(this.dialogsStorage.dropDialog(e),t=!0),this.rootScope.dispatchEvent("dialog_draft",{peerId:e,dialog:s,drop:t,draft:a})}else if(t){const a=this.appChatsManager.getChat(e.toChatId());a?a.pFlags.forum&&this.dialogsStorage.getForumTopicById(e,t):this.reloadConversation(e)}else this.reloadConversation(e)})),this.rootScope.addEventListener("poll_update",(({poll:e})=>{const t=this.appPollsManager.pollToMessages[e.id];if(t)for(const e of t){const[t,a]=e.split("_"),s=this.getMessageByPeer(t.toPeerId(),+a);s&&this.setDialogToStateIfMessageIsTop(s)}})),this.rootScope.addEventListener("chat_toggle_forum",(({chatId:e,enabled:t})=>{const a=e.toPeerId(!0);if(!t){delete this.threadsStorage[a];for(const e in this.pinnedMessages)+e===a&&e.startsWith(a+"_")&&delete this.pinnedMessages[e]}})),this.batchUpdatesDebounced=(0,Vt.Z)((()=>{for(const e in this.batchUpdates){const t=this.batchUpdates[e];delete this.batchUpdates[e];const a=t.callback(t.batch);!a||a instanceof Array&&!a.length||rootScope.dispatchEvent(e,a)}}),33,!1,!0),this.appStateManager.getState().then((e=>{e.maxSeenMsgId&&(this.maxSeenId=e.maxSeenMsgId)}))}getInputEntities(e){const t=(0,ve.Z)(e);return t.forEach((e=>{"messageEntityMentionName"===e._&&(e._="inputMessageEntityMentionName",e.user_id=this.appUsersManager.getUserInput(e.user_id))})),t}invokeAfterMessageIsSent(e,t,a){var s,n,i;const r=null!==(s=(i=this.tempFinalizeCallbacks)[e])&&void 0!==s?s:i[e]={},o=null!==(n=r[t])&&void 0!==n?n:r[t]={deferred:(0,v.Z)()};return o.callback=a,o.deferred}editMessage(e,t,a={}){const{mid:s,peerId:n}=e;if(e.pFlags.is_outgoing)return this.invokeAfterMessageIsSent(s,"edit",(e=>this.editMessage(e,t,a)));const i=a.entities||[];t&&(t=(0,ke.Z)(t,i));const r=a.scheduleDate||(e.pFlags.is_scheduled?e.date:void 0);return this.apiManager.invokeApi("messages.editMessage",{peer:this.appPeersManager.getInputPeerById(n),id:e.id,message:t,media:a.newMedia,entities:i.length?this.getInputEntities(i):void 0,no_webpage:a.noWebPage,schedule_date:r}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{if(this.log.error("editMessage error:",e),!e||"MESSAGE_NOT_MODIFIED"!==e.type)return e&&"MESSAGE_EMPTY"===e.type&&(e.handled=!0),Promise.reject(e);e.handled=!0}))}transcribeAudio(e){return Xt(this,void 0,void 0,(function*(){const{id:t,peerId:a}=e,s=t=>{this.apiUpdatesManager.processLocalUpdate({_:"updateTranscribedAudio",msg_id:e.id,peer:this.appPeersManager.getOutputPeer(a),pFlags:t.pFlags,text:t.text,transcription_id:t.transcription_id})};return this.apiManager.invokeApiSingleProcess({method:"messages.transcribeAudio",params:{peer:this.appPeersManager.getInputPeerById(a),msg_id:t},processResult:e=>(s(e),e),processError:e=>{throw"TRANSCRIPTION_FAILED"===e.type&&s({_:"messages.transcribedAudio",transcription_id:0,text:"",pFlags:{}}),e}})}))}sendText(e,t,a={}){var s,n;return Xt(this,void 0,void 0,(function*(){if(!t.trim())return;null!==(s=a.entities)&&void 0!==s||(a.entities=[]),a.threadId&&!a.replyToMsgId&&(a.replyToMsgId=a.threadId);const i=(yield this.apiManager.getConfig()).message_length_max,r=Bt(t,i);t=r[0],r.length>1&&("webPage"!==(null===(n=a.webPage)||void 0===n?void 0:n._)||t.includes(a.webPage.url)||delete a.webPage),e=this.appPeersManager.getPeerMigratedTo(e)||e;const o=a.entities;a.viaBotId||(t=(0,ke.Z)(t,o));let p=this.getInputEntities(o);p.length||(p=void 0);const d=this.generateOutgoingMessage(e,a);d.entities=o,d.message=t;const f=a.replyToMsgId?(0,oe.Z)(a.replyToMsgId):void 0,c=this.appPeersManager.isChannel(e);a.webPage&&(d.media={_:"messageMediaWebPage",webpage:a.webPage});const l=e=>{this.onMessagesSendError([d],e),this.rootScope.dispatchEvent("messages_pending")};d.send=()=>{l();const s={};this.pendingAfterMsgs[e]&&(s.afterMessageId=this.pendingAfterMsgs[e].messageId);const n=a.sendAsPeerId?this.appPeersManager.getInputPeerById(a.sendAsPeerId):void 0;let i;return i=a.viaBotId?this.apiManager.invokeApiAfter("messages.sendInlineBotResult",{peer:this.appPeersManager.getInputPeerById(e),random_id:d.random_id,reply_to_msg_id:f||void 0,query_id:a.queryId,id:a.resultId,clear_draft:a.clearDraft,send_as:n},s):this.apiManager.invokeApiAfter("messages.sendMessage",{no_webpage:a.noWebPage,peer:this.appPeersManager.getInputPeerById(e),message:t,random_id:d.random_id,reply_to_msg_id:f||void 0,entities:p,clear_draft:a.clearDraft,schedule_date:a.scheduleDate||void 0,silent:a.silent,send_as:n,update_stickersets_order:ta},s),this.pendingAfterMsgs[e]=s,i.then((e=>{if("updateShortSentMessage"===e._){const t=d.promise;delete d.promise;const s=(0,ve.Z)(d);(0,ge.Z)(d,["promise"]),d.promise=t,s.date=e.date,s.id=e.id,s.media=e.media,s.entities=e.entities,this.wrapMessageEntities(s),e.pFlags.out&&(s.pFlags.out=!0),e={_:"updates",users:[],chats:[],seq:0,date:void 0,updates:[{_:"updateMessageID",random_id:d.random_id,id:s.id},{_:a.scheduleDate?"updateNewScheduledMessage":c?"updateNewChannelMessage":"updateNewMessage",message:s,pts:e.pts,pts_count:e.pts_count}]}}else e.updates&&e.updates.forEach((e=>{"updateDraftMessage"===e._&&(e.local=!0)}));this.apiUpdatesManager.processUpdateMessage(e),d.promise.resolve()}),(e=>{throw l(e),d.promise.reject(e),e})).finally((()=>{this.pendingAfterMsgs[e]===s&&delete this.pendingAfterMsgs[e]}))},this.beforeMessageSending(d,{isScheduled:!!a.scheduleDate||void 0,threadId:a.threadId,clearDraft:a.clearDraft,sequential:!0});const m=[d.promise];for(let t=1;t=0){r="audio",p="audio."+("ogg"===d.split("/")[1]?"ogg":"mp3"),P="sendMessageUploadAudioAction",t.isVoiceMessage&&(r="voice",s.pFlags.media_unread=!0);const e={_:"documentAttributeAudio",pFlags:{voice:t.isVoiceMessage||void 0},waveform:t.waveform,duration:t.duration||0};g.push(e)}else if(t.isMedia)if(h){r="photo",p="photo."+d.split("/")[1],P="sendMessageUploadPhotoAction";const e={_:"photoSize",w:t.width,h:t.height,type:o.Pt,location:null,size:a.size};y={_:"photo",id:""+s.id,sizes:[e],w:t.width,h:t.height},u&&y.sizes.unshift(u);const n=this.thumbsStorage.getCacheContext(y,e.type);n.downloaded=a.size,n.url=t.objectURL||"",y=this.appPhotosManager.savePhoto(y)}else if(i().VIDEO_MIME_TYPES_SUPPORTED.has(d)){r="video",p="video.mp4",P="sendMessageUploadVideoAction";const e={_:"documentAttributeVideo",pFlags:{round_message:t.isRoundMessage||void 0,supports_streaming:!0},duration:t.duration,w:t.width,h:t.height};g.push(e),t.noSound&&a.size>10240&&a.size<10485760&&g.push({_:"documentAttributeAnimated"})}else r="document",p="document."+d.split("/")[1],P="sendMessageUploadDocumentAction";else r="document",p="document."+d.split("/")[1],P="sendMessageUploadDocumentAction";if(g.push({_:"documentAttributeFilename",file_name:f||p}),-1!==["document","video","audio","voice"].indexOf(r)&&!c){const e=[];if(_={_:"document",id:""+s.id,duration:t.duration,attributes:g,w:t.width,h:t.height,thumbs:e,mime_type:d,size:a.size},t.objectURL){const e=this.thumbsStorage.getCacheContext(_);e.downloaded=a.size,e.url=t.objectURL}let n;if(h)g.push({_:"documentAttributeImageSize",w:t.width,h:t.height}),n={_:"photoSize",w:t.width,h:t.height,type:o.Pt,size:a.size};else if("video"===r&&t.thumb){n={_:"photoSize",w:t.thumb.size.width,h:t.thumb.size.height,type:"local-thumb",size:t.thumb.blob.size};const e=this.thumbsStorage.getCacheContext(_,n.type);e.downloaded=n.size,e.url=t.thumb.url}n&&e.push(n),u&&e.unshift(u),_=this.appDocsManager.saveDoc(_)}this.log("sendFile",r,p,a.type,t);const b=(0,v.Z)(),M=c?void 0:{_:y?"messageMediaPhoto":"messageMediaDocument",pFlags:{},photo:y,document:_};M&&((0,ge.Z)(M,["promise"]),M.promise=b,t.spoiler&&(M.pFlags.spoiler=!0)),s.entities=m,s.message=l,s.media=c?{_:"messageMediaDocument",pFlags:{},document:a}:M;const S=c?void 0:(0,jt.Z)(a);s.uploadingFileName=S,S&&(this.uploadFilePromises[S]=b);const I=e=>{this.onMessagesSendError([s],e),this.rootScope.dispatchEvent("messages_pending")};let C=!1,w=null;s.send=()=>{if(c){const e={_:"inputMediaDocument",id:Kt(a),pFlags:{}};b.resolve(e)}else if(a instanceof File||a instanceof Blob){const n=()=>{var n;let i;return C&&!s.error||(C=!1,w=this.apiFileManager.upload({file:a,fileName:S}),w.catch((a=>{C||(this.log("cancelling upload",M),this.cancelPendingMessage(s.random_id),this.setTyping(e,{_:"sendMessageCancelAction"},void 0,t.threadId),b.reject(a))})),w.addNotifyListener((a=>{const s=Math.max(1,Math.floor(100*a.done/a.total));P&&this.setTyping(e,{_:P,progress:0|s},void 0,t.threadId),b.notifyAll(a)})),b.notifyAll({done:0,total:a.size})),"video"===r&&t.objectURL&&(null===(n=t.thumb)||void 0===n?void 0:n.blob)&&(i=this.apiFileManager.upload({file:t.thumb.blob})),w&&w.then((e=>Xt(this,void 0,void 0,(function*(){let a;if(e.name=p,C=!0,a="photo"===r?{_:"inputMediaUploadedPhoto",file:e,pFlags:{spoiler:t.spoiler||void 0}}:{_:"inputMediaUploadedDocument",file:e,mime_type:d,pFlags:{force_file:"sendMessageUploadDocumentAction"===P||void 0,spoiler:t.spoiler||void 0},attributes:g},i)try{const e=yield i;a.thumb=e}catch(e){this.log.error("sendFile thumb upload error:",e)}b.resolve(a)}))),(e=>{throw I(e),e})),b};t.isGroupedItem?n():this.sendSmthLazyLoadQueue.push({load:n})}return b},this.beforeMessageSending(s,{isGroupedItem:t.isGroupedItem,isScheduled:!!t.scheduleDate||void 0,threadId:t.threadId,clearDraft:t.clearDraft,processAfter:t.processAfter}),t.isGroupedItem||(b.then((a=>(this.setTyping(e,{_:"sendMessageCancelAction"},void 0,t.threadId),this.apiManager.invokeApi("messages.sendMedia",{background:t.background,peer:this.appPeersManager.getInputPeerById(e),media:a,message:l,random_id:s.random_id,reply_to_msg_id:n,schedule_date:t.scheduleDate,silent:t.silent,entities:m,clear_draft:t.clearDraft,send_as:t.sendAsPeerId?this.appPeersManager.getInputPeerById(t.sendAsPeerId):void 0}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{if("photo"===r&&400===e.code&&("PHOTO_INVALID_DIMENSIONS"===e.type||"PHOTO_SAVE_FILE_INVALID"===e.type))return e.handled=!0,r="document",void s.send();throw I(e),e}))))),b.then(s.promise.resolve,s.promise.reject));const k={message:s};return(0,ge.Z)(k,["promise"]),k.promise=b,k}sendAlbum(e,t){return Xt(this,void 0,void 0,(function*(){if(t.threadId&&!t.replyToMsgId&&(t.replyToMsgId=t.threadId),1===t.sendFileDetails.length)return this.sendFile(e,Object.assign(Object.assign({},t),t.sendFileDetails[0]));e=this.appPeersManager.getPeerMigratedTo(e)||e;const a=t.replyToMsgId?(0,oe.Z)(t.replyToMsgId):void 0;let s=t.caption||"",n=t.entities||[];s&&(s=(0,ke.Z)(s,n)),this.log("sendAlbum",t);const i=""+ ++this.groupedTempId,r=[],o=e=>{r.push(e)},p=t.sendFileDetails.map(((r,p)=>{const d=Object.assign({isGroupedItem:!0,isMedia:t.isMedia,scheduleDate:t.scheduleDate,silent:t.silent,replyToMsgId:a,threadId:t.threadId,sendAsPeerId:t.sendAsPeerId,groupId:i,processAfter:o},r);return 0===p&&(d.caption=s,d.entities=n),this.sendFile(e,d).message}));t.clearDraft&&r.push((()=>{this.appDraftsManager.clearDraft(e,t.threadId)})),r.forEach((e=>{e()}));const d=(e,t)=>{this.onMessagesSendError([e],t),this.rootScope.dispatchEvent("messages_pending")},f=this.appPeersManager.getInputPeerById(e),c=s=>{this.setTyping(e,{_:"sendMessageCancelAction"},void 0,t.threadId);const n=(0,v.Z)();return this.sendSmthLazyLoadQueue.push({load:()=>this.apiManager.invokeApi("messages.sendMultiMedia",{peer:f,multi_media:s,reply_to_msg_id:a,schedule_date:t.scheduleDate,silent:t.silent,clear_draft:t.clearDraft,send_as:t.sendAsPeerId?this.appPeersManager.getInputPeerById(t.sendAsPeerId):void 0,update_stickersets_order:ta}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e),n.resolve()}),(e=>{p.forEach((t=>d(t,e))),n.reject(e)}))}),n},l=p.map((e=>e.send().then((e=>Promise.all([e,this.apiManager.invokeApi("messages.uploadMedia",{peer:f,media:e})]))).then((([t,a])=>{let i;if("messageMediaPhoto"===a._){const e=this.appPhotosManager.savePhoto(a.photo);i=kt(e)}else if("messageMediaDocument"===a._){const e=this.appDocsManager.saveDoc(a.document);i=Ut(e)}["pFlags","ttl_seconds"].forEach((e=>{var a;i[e]=null!==(a=t[e])&&void 0!==a?a:i[e]}));const r={_:"inputSingleMedia",media:i,random_id:e.random_id,message:s,entities:n};return s&&(s="",n=[]),r})).catch((t=>{throw this.log.error("sendAlbum upload item error:",t,e),d(e,t),t}))));return Promise.all(l).then((e=>c(e.filter(Boolean))))}))}sendContact(e,t){return this.sendOther(e,this.appUsersManager.getContactMediaInput(t))}sendOther(e,t,a={}){var s;e=this.appPeersManager.getPeerMigratedTo(e)||e;const n=this.generateOutgoingMessage(e,a),i=a.replyToMsgId?(0,oe.Z)(a.replyToMsgId):void 0;let r;switch(t._){case"inputMediaPoll":{const e=""+n.id;t.poll.id=e,this.appPollsManager.savePoll(t.poll,{_:"pollResults",flags:4,total_voters:0,pFlags:{},recent_voters:[]});const{poll:a,results:s}=this.appPollsManager.getPoll(e);r={_:"messageMediaPoll",poll:a,results:s};break}case"inputMediaPhoto":r={_:"messageMediaPhoto",photo:this.appPhotosManager.getPhoto(t.id.id),pFlags:{}};break;case"inputMediaDocument":r={_:"messageMediaDocument",document:this.appDocsManager.getDoc(t.id.id),pFlags:{}};break;case"inputMediaContact":r={_:"messageMediaContact",phone_number:t.phone_number,first_name:t.first_name,last_name:t.last_name,user_id:null!==(s=t.user_id)&&void 0!==s?s:"0",vcard:t.vcard};break;case"inputMediaGeoPoint":r={_:"messageMediaGeo",geo:a.geoPoint};break;case"inputMediaVenue":r={_:"messageMediaVenue",geo:a.geoPoint,title:t.title,address:t.address,provider:t.provider,venue_id:t.venue_id,venue_type:t.venue_type};break;case"messageMediaPending":r=t.messageMedia}n.media=r;const o=e=>{this.onMessagesSendError([n],e),this.rootScope.dispatchEvent("messages_pending")};return n.send=()=>{const s={};this.pendingAfterMsgs[e]&&(s.afterMessageId=this.pendingAfterMsgs[e].messageId);const r=a.sendAsPeerId?this.appPeersManager.getInputPeerById(a.sendAsPeerId):void 0;let p;return p=a.viaBotId?this.apiManager.invokeApiAfter("messages.sendInlineBotResult",{peer:this.appPeersManager.getInputPeerById(e),random_id:n.random_id,reply_to_msg_id:i||void 0,query_id:a.queryId,id:a.resultId,clear_draft:a.clearDraft,schedule_date:a.scheduleDate,silent:a.silent,send_as:r},s):this.apiManager.invokeApiAfter("messages.sendMedia",{peer:this.appPeersManager.getInputPeerById(e),media:t,random_id:n.random_id,reply_to_msg_id:i||void 0,message:"",clear_draft:a.clearDraft,schedule_date:a.scheduleDate,silent:a.silent,send_as:r,update_stickersets_order:ta},s),this.pendingAfterMsgs[e]=s,p.then((e=>{e.updates&&e.updates.forEach((e=>{"updateDraftMessage"===e._&&(e.local=!0)})),this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{throw o(e),e})).finally((()=>{this.pendingAfterMsgs[e]===s&&delete this.pendingAfterMsgs[e]}))},this.beforeMessageSending(n,{isScheduled:!!a.scheduleDate||void 0,threadId:a.threadId,clearDraft:a.clearDraft,sequential:!0}),n.promise}beforeMessageSending(e,t={}){const a=e.id,s=this.getMessagePeer(e),n=t.isScheduled?this.getScheduledMessagesStorage(s):this.getHistoryMessagesStorage(s);e.storageKey=n.key;const i=[];if(t.isScheduled)this.saveMessages([e],{storage:n,isScheduled:!0,isOutgoing:!0}),i.push((()=>{this.rootScope.dispatchEvent("scheduled_new",e)}));else{const r=[this.getHistoryStorage(s),t.threadId?this.getHistoryStorage(s,t.threadId):void 0];for(const e of r)e&&e.history.unshift(a);if(this.saveMessages([e],{storage:n,isOutgoing:!0}),this.setDialogTopMessage(e),t.threadId){const a=this.dialogsStorage.getForumTopic(s,t.threadId);a&&this.setDialogTopMessage(e,a)}i.push((()=>{this.rootScope.dispatchEvent("history_append",{storageKey:n.key,message:e})}))}const r=this.pendingByRandomId[e.random_id]={peerId:s,tempId:a,threadId:t.threadId,storage:n,sequential:t.sequential};return this.pendingTopMsgs[s]=a,!t.isGroupedItem&&e.send&&i.push((()=>{t.clearDraft&&this.appDraftsManager.clearDraft(s,t.threadId),e.send()})),i.length&&(t.processAfter||ea)((()=>{for(const e of i)e()})),r}generateOutgoingMessage(e,t){let a;t.threadId&&!t.replyToMsgId&&(t.replyToMsgId=t.threadId);const s=this.appPeersManager.isBroadcast(e);if(s&&this.appPeersManager.getPeer(e).pFlags.signatures){const e=this.appUsersManager.getSelf();a=e.first_name+(e.last_name?" "+e.last_name:"")}const n={_:"message",id:this.generateTempMessageId(e),from_id:t.sendAsPeerId?this.appPeersManager.getOutputPeer(t.sendAsPeerId):this.generateFromId(e),peer_id:this.appPeersManager.getOutputPeer(e),post_author:a,pFlags:this.generateFlags(e),date:t.scheduleDate||(0,te.Z)(!0)+this.timeManager.getServerTimeOffset(),message:"",grouped_id:t.groupId,random_id:(0,Ee.a)(),reply_to:this.generateReplyHeader(e,t.replyToMsgId,t.threadId),via_bot_id:t.viaBotId,reply_markup:t.replyMarkup,replies:this.generateReplies(e),views:s&&1,pending:!0};return(0,ge.Z)(n,["send","promise"]),void 0===t.groupId&&(n.promise=(0,v.Z)()),n}generateReplyHeader(e,t,a){const s=this.appPeersManager.isForum(e);if(s&&!a){const s=this.getMessageByPeer(e,t);s&&(a=(0,Yt.Z)(s,!0))}const n={_:"messageReplyHeader",reply_to_msg_id:t||a,pFlags:{}};return a&&s&&o.Ox!==a&&(n.pFlags.forum_topic=!0),a&&n.reply_to_msg_id!==a&&(n.reply_to_top_id=a),n}generateReplies(e){let t;if(this.appPeersManager.isBroadcast(e)){const a=this.appProfileManager.getCachedFullChat(e.toChatId());(null==a?void 0:a.linked_chat_id)&&(t={_:"messageReplies",flags:1,pFlags:{comments:!0},channel_id:a.linked_chat_id,replies:0,replies_pts:0})}return t}generateFromId(e){return this.appPeersManager.isAnyChat(e)&&(this.appPeersManager.isBroadcast(e)||this.isAnonymousSending(e))?void 0:this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId())}generateFlags(e){const t={};return e!==this.appUsersManager.getSelf().id&&(t.out=!0,this.appPeersManager.isChannel(e)||this.appUsersManager.isBot(e)||(t.unread=!0)),this.appPeersManager.isBroadcast(e)&&(t.post=!0),t}generateForwardHeader(e,t){const a=this.appUsersManager.getSelf().id.toPeerId(),s=t.fromId;if(s===a&&t.peerId===a&&!t.fwd_from)return;const n={_:"messageFwdHeader",flags:0,date:t.date,pFlags:{}};let i=!1;if(t.fwd_from)n.from_id=t.fwd_from.from_id,n.from_name=t.fwd_from.from_name,n.post_author=t.fwd_from.post_author;else{if(n.post_author=t.post_author,s.isUser()){const e=this.appProfileManager.getCachedFullUser(s.toUserId());(null==e?void 0:e.private_forward_name)&&(n.from_name=e.private_forward_name,i=!0)}i||(n.from_id=this.appPeersManager.getOutputPeer(s))}return this.appPeersManager.isBroadcast(t.peerId)&&(t.post_author&&(n.post_author=t.post_author),n.channel_post=t.id),e!==a||i||(n.saved_from_msg_id=t.id,n.saved_from_peer=this.appPeersManager.getOutputPeer(t.peerId)),n}generateFakeAvatarMessage(e,t){const a=Number.MAX_SAFE_INTEGER,s={_:"messageService",pFlags:{},action:{_:"messageActionChannelEditPhoto",photo:t},id:a,peer_id:this.appPeersManager.getOutputPeer(e),mid:a,peerId:e,date:t.date,fromId:e};return this.getHistoryMessagesStorage(e).set(a,s),s}getUploadPromise(e){return this.uploadFilePromises[e]}isAnonymousSending(e){var t,a;return!!e.isAnyChat()&&(null===(a=null===(t=this.appPeersManager.getPeer(e).admin_rights)||void 0===t?void 0:t.pFlags)||void 0===a?void 0:a.anonymous)}setDialogTopMessage(e,t=this.getDialogOnly(e.peerId)){t&&(t.top_message=e.mid,this.getHistoryStorage(e.peerId,"forumTopic"===t._?t.id:void 0).maxId=e.mid,this.dialogsStorage.generateIndexForDialog(t,!1,e),this.scheduleHandleNewDialogs(e.peerId,t))}cancelPendingMessage(e){const t=this.pendingByRandomId[e];if(t){const{peerId:a,tempId:s,storage:n}=t,i=this.getHistoryStorage(a);return this.apiUpdatesManager.processLocalUpdate({_:"updateDeleteMessages",messages:[s],pts:void 0,pts_count:void 0}),i.history.delete(s),delete this.pendingByRandomId[e],n.delete(s),!0}return!1}fillConversations(e){return Xt(this,void 0,void 0,(function*(){const t=this.middleware.get();for(;!this.dialogsStorage.isDialogsLoaded(e);){const a=yield this.getTopMessages({limit:100,folderId:e});if(!t()||a.isEnd)break}}))}getReadMaxIdIfUnread(e,t){var a,s,n;const i=this.getHistoryStorage(e,t);if(t&&!this.appChatsManager.isForum(e.toChatId())){const t=this.getHistoryStorage(e),n=Math.max(null!==(a=t.readMaxId)&&void 0!==a?a:0,i.readMaxId),r=this.getMessageByPeer(e,i.maxId);return!(null===(s=null==r?void 0:r.pFlags)||void 0===s?void 0:s.out)&&n{if(!n()||"messages.dialogsNotModified"===r._)return null;d.ZP&&this.log("messages.getDialogs result:",r),i||s||t===ye||this.dialogsStorage.resetPinnedOrder(t),i||s||this.appDraftsManager.addMissedDialogs(),this.appUsersManager.saveApiUsers(r.users),this.appChatsManager.saveApiChats(r.chats),this.saveMessages(r.messages);let p=!!s,c=!1;const l=new Map,m=t===ye?o.J$:t,g=!!i||t===ye,h=r.dialogs||r.topics;if((0,ne.Z)(h,(e=>{var t,s;if(e)if(i||null!==(t=(s=e).folder_id)&&void 0!==t||(s.folder_id=m),this.dialogsStorage.saveDialog({dialog:e,ignoreOffsetDate:!0,saveGlobalOffset:g}),void 0!==e.peerId)if(p||this.appPeersManager.isChannel(e.peerId||this.appPeersManager.getPeerId(e.peer))||(this.incrementMaxSeenId(e.top_message),p=!0),a&&(0,ce.Z)(e)>a&&(this.scheduleHandleNewDialogs(e.peerId,e),c=!0),i||(0,oe.Z)(e.read_inbox_max_id)||(0,oe.Z)(e.read_outbox_max_id)){if(e.top_message){const t=this.getMessageByPeer(e.peerId,e.top_message);t&&(this.setMessageUnreadByDialog(t,e),this.dialogsStorage.setDialogToState(e))}}else l.set(e.peerId,{dialog:e}),this.log.error("noIdsDialogs",e,f);else this.log.error("bugged dialog?",e)})),l.size){const e=[...l.keys()],t=e.map((e=>this.reloadConversation(e)));Promise.all(t).then((()=>{this.rootScope.dispatchEvent("dialogs_multiupdate",l);for(let t=0;t=u||!h.length;v&&this.dialogsStorage.setDialogsLoaded(t,!0),c?this.scheduleHandleNewDialogs():this.rootScope.dispatchEvent("dialogs_multiupdate",new Map);const P=h,b=100===e?P:P.slice(0,e);return{isEnd:v&&b[b.length-1]===P[P.length-1],count:u,dialogs:b}};let p,f;return p=i?this.apiManager.invokeApiSingleProcess({method:"channels.getForumTopics",params:f={channel:this.appChatsManager.getChannelInput(i.toChatId()),limit:100,offset_date:s,offset_id:0,offset_topic:0},options:{noErrorBox:!0},processResult:e=>(e=this.dialogsStorage.processTopics(i,e),r(e))}):this.apiManager.invokeApiSingleProcess({method:"messages.getDialogs",params:f={folder_id:t,offset_date:s,offset_id:0,offset_peer:this.appPeersManager.getInputPeerById(undefined),limit:100,hash:"0"},options:{noErrorBox:!0},processResult:r}),p}forwardMessages(e,t,a,s={}){return Xt(this,void 0,void 0,(function*(){delete s.replyToMsgId,delete s.threadId,e=this.appPeersManager.getPeerMigratedTo(e)||e;for(let n=0,i=(a=a.slice().sort(((e,t)=>e-t))).length;n{var i,p,d,f,c;const l=this.getMessageByPeer(t,n),m=this.generateOutgoingMessage(e,s);o.push(m.id);const g=["entities","media"];s.dropAuthor||(m.fwd_from=this.generateForwardHeader(e,l),g.push("views","forwards"),(null===(i=m.fwd_from)||void 0===i?void 0:i.from_name)&&e===this.appPeersManager.peerId&&delete m.from_id),s.dropCaptions&&l.media||g.push("message");const h=null===(p=l.reply_to)||void 0===p?void 0:p.reply_to_msg_id,u=a.indexOf(h);if(h&&-1!==u){const e=o[u];m.reply_to={_:"messageReplyHeader",reply_to_msg_id:e,pFlags:{}}}g.forEach((e=>{m[e]=(0,ve.Z)(l[e])}));const y=null===(d=m.media)||void 0===d?void 0:d.document;return y&&(["round","voice"].includes(y.type)&&(m.pFlags.media_unread=!0),y.sticker&&!this.rootScope.premium&&(0,zt.Z)(y)&&(m.media.pFlags.nopremium=!0)),l.grouped_id&&(null!==(f=r[c=l.grouped_id])&&void 0!==f?f:r[c]={tempId:""+ ++this.groupedTempId,messages:[]}).messages.push(m),m}));for(const e in r){const t=r[e];t.messages.length>1&&t.messages.forEach((e=>{e.grouped_id=t.tempId}))}p.forEach((e=>{this.beforeMessageSending(e,{isScheduled:!!s.scheduleDate||void 0,sequential:!0})}));const d={};this.pendingAfterMsgs[e]&&(d.afterMessageId=this.pendingAfterMsgs[e].messageId);const f=this.apiManager.invokeApiAfter("messages.forwardMessages",{from_peer:this.appPeersManager.getInputPeerById(t),id:a.map((e=>(0,oe.Z)(e))),random_id:p.map((e=>e.random_id)),to_peer:this.appPeersManager.getInputPeerById(e),with_my_score:s.withMyScore,silent:s.silent,schedule_date:s.scheduleDate,drop_author:s.dropAuthor,drop_media_captions:s.dropCaptions,send_as:s.sendAsPeerId?this.appPeersManager.getInputPeerById(s.sendAsPeerId):void 0},d).then((e=>{this.log("forwardMessages updates:",e),this.apiUpdatesManager.processUpdateMessage(e)}),(e=>{throw this.onMessagesSendError(p,e),e})).finally((()=>{this.pendingAfterMsgs[e]===d&&delete this.pendingAfterMsgs[e]}));this.pendingAfterMsgs[e]=d;const c=[f];return i.length&&c.push(this.forwardMessages(e,t,i,s)),Promise.all(c).then(qt.Z)}))}generateEmptyMessage(e){}onMessagesSendError(e,t){e.forEach((e=>{if(e.error!==t)if(t){e.error=t,this.rootScope.dispatchEvent("message_error",{storageKey:e.storageKey,tempId:e.mid,error:t});const a=this.getDialogOnly(e.peerId);a&&this.rootScope.dispatchEvent("dialog_unread",{peerId:e.peerId,dialog:a})}else delete e.error}))}getMessagesStorageByKey(e){const t=e.split("_"),a=+t[0];return"scheduled"===t[1]?this.getScheduledMessagesStorage(a):this.getHistoryMessagesStorage(a)}getMessageFromStorage(e,t){return"string"==typeof e&&(e=this.getMessagesStorageByKey(e)),e&&e.get(t)}createMessageStorage(e,t){const a=new Map;return a.peerId=e,a.type=t,a.key=`${e}_${t}`,a}getHistoryMessagesStorage(e){var t,a;return null!==(t=(a=this.messagesStorageByPeerId)[e])&&void 0!==t?t:a[e]=this.createMessageStorage(e,"history")}getMessagesStorage(e){return"object"==typeof e?e:this.getMessagesStorageByKey(e)}getMessageById(e){for(const t in this.messagesStorageByPeerId){if(this.appPeersManager.isChannel(t.toPeerId()))continue;const a=this.messagesStorageByPeerId[t].get(e);if(a)return a}return this.getMessageFromStorage(null,e)}getMessageByPeer(e,t){return e?this.getMessageFromStorage(this.getHistoryMessagesStorage(e),t):this.getMessageById(t)}getMessagePeer(e){return e.peer_id&&this.appPeersManager.getPeerId(e.peer_id)||o.NM}getDialogOnly(e){return this.dialogsStorage.getDialogOnly(e)}cantForwardDeleteMids(e,t){const a=this.getMessagesStorage(e);let s=!t.length,n=!t.length;for(const e of t){const t=this.getMessageFromStorage(a,e);if(s||(s=!this.canForward(t)),n||(n=!this.canDeleteMessage(t)),s&&n)break}return{cantForward:s,cantDelete:n}}reloadConversationOrTopic(e,t){t?this.dialogsStorage.getForumTopicById(e,t):this.reloadConversation(e)}reloadConversation(e){let t;if(void 0!==e){const a=this.appPeersManager.getPeerId(e);this.log.warn("reloadConversation",a);let s=this.reloadConversationsPeers.get(a);if(s&&(t=s.promise),t)return t;t=(0,v.Z)(),this.reloadConversationsPeers.set(a,s={inputDialogPeer:this.appPeersManager.getInputDialogPeerById(e),promise:t})}return this.reloadConversationsPromise||(this.reloadConversationsPromise=(0,P.Z)(0).then((()=>{const e=[],t={};for(const[a,{inputDialogPeer:s,promise:n}]of this.reloadConversationsPeers)e.push(s),t[a]=n;const a=()=>{for(const e in t)this.reloadConversationsPeers.delete(+e),t[e].resolve(void 0)};return(()=>Xt(this,void 0,void 0,(function*(){for(;;){const t=yield this.apiManager.invokeApi("messages.getPeerDialogs",{peers:e}),a=this.apiUpdatesManager.updatesState,{state:s}=t;if(!a.pts||a.pts===s.pts)return t;yield(0,P.Z)(500)}})))().then((e=>{for(const e in t)this.reloadConversationsPeers.delete(+e);this.dialogsStorage.applyDialogs(e),e.dialogs.forEach((e=>{const a=e.peerId;a&&(t[a].resolve(e),delete t[a])}))}),qt.Z).then((()=>{a(),this.reloadConversationsPromise=null,this.reloadConversationsPeers.size&&this.reloadConversation()}))}))),t||this.reloadConversationsPromise}doFlushHistory(e,t,a,s){let n;const i=n=>(this.apiUpdatesManager.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:n.pts,pts_count:n.pts_count}}),!n.offset||this.doFlushHistory(e,t,a,s));return n=s?this.apiManager.invokeApiSingleProcess({method:"channels.deleteTopicHistory",params:{channel:this.appChatsManager.getChannelInput(e.toChatId()),top_msg_id:(0,oe.Z)(s)},processResult:i}):this.apiManager.invokeApiSingleProcess({method:"messages.deleteHistory",params:{just_clear:t,revoke:a,peer:this.appPeersManager.getInputPeerById(e),max_id:0},processResult:i}),n}flushHistory(e,t,a,s){return Xt(this,void 0,void 0,(function*(){if(this.appPeersManager.isChannel(e)&&!s){const t=this.getHistory(e,0,1),a=yield t,s=e.toChatId(),n=a.history[0]||0;return this.apiManager.invokeApiSingle("channels.deleteHistory",{channel:this.appChatsManager.getChannelInput(s),max_id:(0,oe.Z)(n)}).then((e=>(e&&this.apiUpdatesManager.processLocalUpdate({_:"updateChannelAvailableMessages",channel_id:s,available_min_id:n}),e)))}return this.doFlushHistory(e,t,a,s).then((()=>{if(s||this.flushStoragesByPeerId(e),t)this.rootScope.dispatchEvent("dialog_flush",{peerId:e,dialog:this.getDialogOnly(e)});else{const t=this.getTypingKey(e,s);if(delete this.notificationsToHandle[t],delete this.typings[t],!s){const t=this.reloadConversationsPeers.get(e);t&&(this.reloadConversationsPeers.delete(e),t.promise.resolve(void 0))}this.dialogsStorage.dropDialogOnDeletion(e,s)}}))}))}flushStoragesByPeerId(e){[this.historiesStorage,this.threadsStorage,this.searchesStorage,this.pendingAfterMsgs,this.pendingTopMsgs].forEach((t=>{delete t[e]}));for(const t in this.pinnedMessages)(+t===e||t.startsWith(e+"_"))&&delete this.pinnedMessages[t];const t=this.needSingleMessages.get(e);if(t){for(const[e,a]of t)a.resolve(this.generateEmptyMessage(e));t.clear()}[this.messagesStorageByPeerId,this.scheduledMessagesStorage].forEach((t=>{const a=t[e];a&&a.clear()})),this.dialogsStorage.flushForumTopicsCache(e)}hidePinnedMessages(e){return Promise.all([this.appStateManager.getState(),this.getPinnedMessage(e)]).then((([t,a])=>{t.hiddenPinnedMessages[e]=a.maxId,this.rootScope.dispatchEvent("peer_pinned_hidden",{peerId:e,maxId:a.maxId})}))}getPinnedMessagesKey(e,t){return e+(t?"_"+t:"")}getPinnedMessage(e,t){var a,s,n;const i=null!==(a=(s=this.pinnedMessages)[n=this.getPinnedMessagesKey(e,t)])&&void 0!==a?a:s[n]={};return i.promise?i.promise:i.maxId?Promise.resolve(i):i.promise=this.getSearch({peerId:e,inputFilter:{_:"inputMessagesFilterPinned"},maxId:0,limit:1,threadId:t}).then((e=>{var t;return i.count=e.count,i.maxId=null===(t=e.history[0])||void 0===t?void 0:t.mid,i})).finally((()=>{delete i.promise}))}getPinnedMessagesCount(e,t){var a;return null===(a=this.pinnedMessages[this.getPinnedMessagesKey(e,t)])||void 0===a?void 0:a.count}getPinnedMessagesMaxId(e,t){var a;return null===(a=this.pinnedMessages[this.getPinnedMessagesKey(e,t)])||void 0===a?void 0:a.maxId}updatePinnedMessage(e,t,a,s,n){return this.apiManager.invokeApi("messages.updatePinnedMessage",{peer:this.appPeersManager.getInputPeerById(e),unpin:a,silent:s,pm_oneside:n,id:(0,oe.Z)(t)}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}unpinAllMessages(e){return this.apiManager.invokeApiSingle("messages.unpinAllMessages",{peer:this.appPeersManager.getInputPeerById(e)}).then((t=>(this.apiUpdatesManager.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:t.pts,pts_count:t.pts_count}}),t.offset?this.unpinAllMessages(e):(this.getHistoryMessagesStorage(e).forEach((e=>{e.pFlags.pinned&&delete e.pFlags.pinned})),this.rootScope.dispatchEvent("peer_pinned_messages",{peerId:e,unpinAll:!0}),delete this.pinnedMessages[this.getPinnedMessagesKey(e)],!0))))}getAlbumText(e){const t=this.groupedMessagesStorage[e];return(0,Wt.Z)(Array.from(t.values()))}getGroupsFirstMessage(e){if(!(null==e?void 0:e.grouped_id))return e;const t=this.groupedMessagesStorage[e.grouped_id];let a=Number.MAX_SAFE_INTEGER;for(const[e,s]of t)s.midthis.getMessageFromStorage(a,e)))}getMidsByMessage(e){return e?e.grouped_id?this.getMidsByAlbum(e.grouped_id):[e.mid]:[]}filterMessages(e,t){const a=[];if(e.grouped_id){const s=this.groupedMessagesStorage[e.grouped_id];for(const[e,n]of s)t(n)&&a.push(n)}else t(e)&&a.push(e);return a}generateTempMessageId(e){const t=this.getDialogOnly(e);return this.appMessagesIdsManager.generateTempMessageId((null==t?void 0:t.top_message)||0)}setMessageUnreadByDialog(e,t=this.getDialogOnly(e.peerId)){t&&e.mid&&e.mid>t[e.pFlags.out?"read_outbox_max_id":"read_inbox_max_id"]&&(e.pFlags.unread=!0)}saveMessage(e,t={}){var a,s,n,i,r;if(!e||"messageEmpty"===e._)return;null!==(a=e.pFlags)&&void 0!==a||(e.pFlags={});const p=this.getMessagePeer(e),d=t.storage||this.getHistoryMessagesStorage(p),f="peerChannel"===e.peer_id._,c=f&&this.appChatsManager.isBroadcast(p.toChatId()),l="message"===e._;t.isOutgoing&&(e.pFlags.is_outgoing=!0);const m=(0,pe.Z)(e.id);e.mid=m,l&&(t.isScheduled&&(e.pFlags.is_scheduled=!0),e.grouped_id&&(null!==(s=(i=this.groupedMessagesStorage)[r=e.grouped_id])&&void 0!==s?s:i[r]=this.createMessageStorage(p,"grouped")).set(m,e),e.via_bot_id&&(e.viaBotId=e.via_bot_id));const g=e.reply_to;g&&(g.reply_to_msg_id&&(g.reply_to_msg_id=e.reply_to_mid=(0,pe.Z)(g.reply_to_msg_id)),g.reply_to_top_id&&(g.reply_to_top_id=(0,pe.Z)(g.reply_to_top_id)));const h=l&&e.replies;h&&(h.max_id&&(h.max_id=(0,pe.Z)(h.max_id)),h.read_max_id&&(h.read_max_id=(0,pe.Z)(h.read_max_id)));const u=!!p;u||(e.date-=this.timeManager.getServerTimeOffset());const y=this.appPeersManager.peerId,_=l&&e.fwd_from;if(e.peerId=p,e.fromId=p===y?_?_.from_id?this.appPeersManager.getPeerId(_.from_id):o.NM:y:e.pFlags.post||!e.from_id?p:this.appPeersManager.getPeerId(e.from_id),this.setMessageUnreadByDialog(e),_){_.saved_from_msg_id&&(_.saved_from_msg_id=(0,pe.Z)(_.saved_from_msg_id)),_.channel_post&&(_.channel_post=(0,pe.Z)(_.channel_post));const t=_.saved_from_peer||_.from_id,a=_.saved_from_msg_id||_.channel_post;if(t&&a){const s=this.appPeersManager.getPeerId(t),n=(0,pe.Z)(a);e.savedFrom=s+"_"+n}e.fwdFromId=this.appPeersManager.getPeerId(_.from_id),u||(_.date-=this.timeManager.getServerTimeOffset())}const v={type:"message",peerId:p,messageId:m};let P=!1;const b=l&&e.media;if(b)switch(b._){case"messageMediaEmpty":delete e.media;break;case"messageMediaPhoto":b.ttl_seconds?P=!0:b.photo=this.appPhotosManager.savePhoto(b.photo,v),b.photo||delete e.media;break;case"messageMediaPoll":{const t=this.appPollsManager.savePoll(b.poll,b.results,e);b.poll=t.poll,b.results=t.results;break}case"messageMediaDocument":if(b.ttl_seconds)P=!0;else{const e=b.document;b.document=this.appDocsManager.saveDoc(e,v),b.document||"documentEmpty"===e._||(P=!0)}break;case"messageMediaWebPage":{const a=this.appWebPagesManager.getMessageKeyForPendingWebPage(p,m,t.isScheduled);b.webpage=this.appWebPagesManager.saveWebPage(b.webpage,a,v),b.webpage||delete e.media;break}case"messageMediaInvoice":{b.photo=this.appWebDocsManager.saveWebDocument(b.photo);const e=b.extended_media;if("messageExtendedMedia"===(null==e?void 0:e._)){const t=e.media;t.photo=this.appPhotosManager.savePhoto(t.photo,v),t.document=this.appDocsManager.saveDoc(t.document,v)}break}case"messageMediaUnsupported":P=!0}if(l&&P&&(e.media={_:"messageMediaUnsupported"},e.message="",delete e.entities,delete e.totalEntities),!l&&e.action){const t=e.action,a=e.fromId===this.appUsersManager.getSelf().id?"You":"";let s,i;switch(t.photo&&(t.photo=this.appPhotosManager.savePhoto(t.photo,v)),t.document&&(t.document=this.appDocsManager.saveDoc(t.photo,v)),t._){case"messageActionChatEditPhoto":(null===(n=t.photo)||void 0===n?void 0:n.video_sizes)?t._=c?"messageActionChannelEditVideo":"messageActionChatEditVideo":c&&(t._="messageActionChannelEditPhoto");break;case"messageActionGroupCall":{let e;this.appGroupCallsManager.saveGroupCall(t.call),e=void 0===t.duration?"started":"ended",c||(e+="_by"+a),t.type=e;break}case"messageActionChatEditTitle":c&&(t._="messageActionChannelEditTitle");break;case"messageActionChatDeletePhoto":c&&(t._="messageActionChannelDeletePhoto");break;case"messageActionChatAddUser":1===t.users.length?(t.user_id=t.users[0],e.fromId===t.user_id&&(t._=f?"messageActionChatJoined"+a:"messageActionChatReturn"+a)):t.users.length>1&&(t._="messageActionChatAddUsers");break;case"messageActionChatDeleteUser":e.fromId===t.user_id&&(t._="messageActionChatLeave"+a);break;case"messageActionChannelMigrateFrom":s=t.chat_id.toPeerId(!0),i=p;break;case"messageActionChatMigrateTo":s=p,i=t.channel_id.toPeerId(!0);break;case"messageActionHistoryClear":e.clear_history=!0,delete e.pFlags.out,delete e.pFlags.unread;break;case"messageActionPhoneCall":t.type=(t.pFlags.video?"video_":"")+(void 0!==t.duration?e.pFlags.out?"out_":"in_":"")+(void 0!==t.duration?"ok":"phoneCallDiscardReasonMissed"===t.reason._?"missed":"cancelled")}s&&i&&!this.migratedFromTo[s]&&!this.migratedToFrom[i]&&this.migrateChecks(s,i)}return l&&e.message.length&&!e.totalEntities&&this.wrapMessageEntities(e),d.set(m,e),e}saveMessages(e,t={}){return e.saved||(e.saved=!0,e.forEach(((e,a,s)=>{s[a]=this.saveMessage(e,t)}))),e}getFirstMessageToEdit(e,t){return Xt(this,void 0,void 0,(function*(){const a=this.getHistoryStorage(e,t).history.slice;if(a.isEnd(se.D.Bottom)&&a.length){let t;const s=this.appPeersManager.peerId;for(const n of a){const a=this.getMessageByPeer(e,n);if((s===e?a.fromId===s:a.pFlags.out)&&(yield this.canEditMessage(a,"text"))){t=a;break}}return t}}))}wrapMessageEntities(e){const t=e.entities?e.entities.slice():[];e.message=(0,bt.Z)(e.message,t);const a=(0,Nt.Z)(e.message);e.totalEntities=(0,Lt.Z)(t,a)}reportMessages(e,t,a,s){return this.apiManager.invokeApiSingle("messages.report",{peer:this.appPeersManager.getInputPeerById(e),id:t.map((e=>(0,oe.Z)(e))),reason:{_:a},message:s})}startBot(e,t,a){const s=t?t.toPeerId(!0):e.toPeerId();if(a){const t=(0,Ee.a)();return this.apiManager.invokeApi("messages.startBot",{bot:this.appUsersManager.getUserInput(e),peer:this.appPeersManager.getInputPeerById(s),random_id:t,start_param:a}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}const n="/start";if(t){let a;return a=this.appChatsManager.isChannel(t)?this.appChatsManager.inviteToChannel(t,[e]):this.appChatsManager.addChatUser(t,e,0),a.catch((e=>{if("USER_ALREADY_PARTICIPANT"!=(null==e?void 0:e.type))throw e;e.handled=!0})).then((()=>this.sendText(s,n+"@"+this.appPeersManager.getPeerUsername(e.toPeerId()))))}return this.sendText(s,n)}editPeerFolders(e,t){this.apiManager.invokeApi("folders.editPeerFolders",{folder_peers:e.map((e=>({_:"inputFolderPeer",peer:this.appPeersManager.getInputPeerById(e),folder_id:t})))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}getFilter(e){return this.filtersStorage.getFilter(e)}toggleDialogPin(e){var t;return Xt(this,void 0,void 0,(function*(){const{peerId:a,topicId:s,filterId:n=(s?a:void 0)}=e;if(void 0===n)throw new Error("No filterId");if(n>1)return this.filtersStorage.toggleDialogPin(a,n);const i=this.dialogsStorage.getDialogOrTopic(a,s);if(!i)throw void 0;const r=!(null===(t=i.pFlags)||void 0===t?void 0:t.pinned)||void 0;if(r){const e=yield this.apiManager.getLimit(s?"topicPin":1===n?"folderPin":"pin");if(this.dialogsStorage.getPinnedOrders(n).length>=e)throw(0,X.Z)(s?"PINNED_TOO_MUCH":"PINNED_DIALOGS_TOO_MUCH")}return s?this.appChatsManager.updatePinnedForumTopic(a.toChatId(),s,r):this.apiManager.invokeApi("messages.toggleDialogPin",{peer:this.appPeersManager.getInputDialogPeerById(a),pinned:r}).then((e=>{const t=r?{pinned:r}:{};this.apiUpdatesManager.saveUpdate({_:"updateDialogPinned",peer:this.appPeersManager.getDialogPeer(a),folder_id:n,pFlags:t})}))}))}markDialogUnread(e,t){var a;const s=this.getDialogOnly(e);if(!s)return Promise.reject();const n=!t&&!(null===(a=s.pFlags)||void 0===a?void 0:a.unread_mark)||void 0;return this.apiManager.invokeApi("messages.markDialogUnread",{peer:this.appPeersManager.getInputDialogPeerById(e),unread:n}).then((t=>{if(t){const t=n?{unread:n}:{};this.onUpdateDialogUnreadMark({_:"updateDialogUnreadMark",peer:this.appPeersManager.getDialogPeer(e),pFlags:t})}}))}migrateChecks(e,t){if(!this.migratedFromTo[e]&&!this.migratedToFrom[t]&&this.appChatsManager.hasChat(t.toChatId())){const a=this.appChatsManager.getChat(e.toChatId());(null==a?void 0:a.migrated_to)&&a.migrated_to.channel_id===t.toChatId()&&(this.migratedFromTo[e]=t,this.migratedToFrom[t]=e,this.rootScope.dispatchEvent("dialog_migrate",{migrateFrom:e,migrateTo:t}),this.dialogsStorage.dropDialogWithEvent(e))}}canMessageBeEdited(e,t){var a,s;if(null===(a=null==e?void 0:e.pFlags)||void 0===a?void 0:a.is_outgoing)return!1;const n=["messageMediaPhoto","messageMediaDocument","messageMediaWebPage"];return"poll"===t&&n.push("messageMediaPoll"),!(!e||"message"!==e._||e.deleted||e.fwd_from||e.via_bot_id||e.media&&-1===n.indexOf(e.media._)||e.fromId&&this.appUsersManager.isBot(e.fromId)||"messageMediaDocument"===(null===(s=e.media)||void 0===s?void 0:s._)&&(e.media.document.sticker||"round"===e.media.document.type))}canEditMessage(e,t="text"){var a;return Xt(this,void 0,void 0,(function*(){if(!e||!this.canMessageBeEdited(e,t))return!1;if(this.getMessagePeer(e)===this.appUsersManager.getSelf().id)return!0;const{peerId:s}=e;return!(!(this.appPeersManager.isBroadcast(s)?this.appChatsManager.hasRights(s.toChatId(),"edit_messages"):(!s.isAnyChat()||"text"!==t||this.appChatsManager.hasRights(s.toChatId(),"send_plain")||this.appChatsManager.hasRights(s.toChatId(),"send_media"))&&e.pFlags.out)||"peerChannel"!==e.peer_id._&&e.date<(0,te.Z)(!0)-(yield this.apiManager.getConfig()).edit_time_limit&&"messageMediaPoll"!==(null===(a=e.media)||void 0===a?void 0:a._))}))}canDeleteMessage(e){return e&&(e.peerId.isUser()||e.pFlags.out||"chat"===this.appChatsManager.getChat(e.peerId.toChatId())._||this.appChatsManager.hasRights(e.peerId.toChatId(),"delete_messages"))&&(!e.pFlags.is_outgoing||!!e.error)}getReplyKeyboard(e){return this.getHistoryStorage(e).replyMarkup}mergeReplyKeyboard(e,t){var a,s;if(!t)return!1;const n=t.reply_markup;if(!n&&!(null===(a=t.pFlags)||void 0===a?void 0:a.out)&&!t.action)return!1;if("replyInlineMarkup"===(null==n?void 0:n._))return!1;const i=e.replyMarkup;if(n)return!(i&&i.mid>=t.mid||n.pFlags.selective||(e.maxOutId&&t.midi.mid||t.pFlags.is_outgoing)&&t.message)return i.pFlags.hidden=!0,!0}else(!e.maxOutId||t.mid>e.maxOutId)&&(e.maxOutId=t.mid);return(0,ue.Z)(t),!("messageActionChatDeleteUser"!==(null===(s=t.action)||void 0===s?void 0:s._)||!(i?t.action.user_id===i.fromId:this.appUsersManager.isBot(t.action.user_id))||(e.replyMarkup={_:"replyKeyboardHide",mid:t.mid,pFlags:{}},0))}getSearchStorage(e,t){return this.searchesStorage[e]||(this.searchesStorage[e]={}),this.searchesStorage[e][t]||(this.searchesStorage[e][t]={history:[]}),this.searchesStorage[e][t]}getSearchCounters(e,t,a=!0,s){return this.appPeersManager.isPeerRestricted(e)?Promise.resolve(t.map((e=>({_:"messages.searchCounter",pFlags:{},filter:e,count:0})))):(a?this.apiManager.invokeApiCacheable:this.apiManager.invokeApi).bind(this.apiManager)("messages.getSearchCounters",{peer:this.appPeersManager.getInputPeerById(e),filters:t,top_msg_id:s?(0,oe.Z)(s):void 0})}filterMessagesByInputFilterFromStorage(e,t,a,s){const n=this.getMessagesStorage(a);return(0,Zt.Z)(e,t.map((e=>n.get(e))),s)}getSearch({peerId:e,query:t,inputFilter:a,maxId:s,limit:n,nextRate:i,backLimit:r,threadId:o,folderId:p,minDate:f,maxDate:c}){if(this.appPeersManager.isPeerRestricted(e))return Promise.resolve({count:0,offset_id_offset:0,next_rate:void 0,history:[]});t||(t=""),a||(a={_:"inputMessagesFilterEmpty"}),void 0===n&&(n=20),i||(i=0),r||(r=0),f=f?f/1e3|0:0,c=c?c/1e3|0:0;let l=[];r&&(n+=r);let m;if(!e||r||s||t||1===n||o||(m=this.getHistoryStorage(e),l=this.filterMessagesByInputFilterFromStorage(a._,m.history.slice,this.getHistoryMessagesStorage(e),n)),l.length){if(!(l.length{this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.saveMessages(e.messages),d.ZP&&this.log("getSearch result:",a,e);const t=e.count||l.length+e.messages.length;return e.messages.forEach((e=>{const t=this.getMessagePeer(e);if(t.isAnyChat()){const e=this.appChatsManager.getChat(t.toChatId());e.migrated_to&&this.migrateChecks(t,e.migrated_to.channel_id.toPeerId(!0))}l.push(e)})),{count:t,offset_id_offset:e.offset_id_offset||0,next_rate:e.next_rate,history:l}}))}subscribeRepliesThread(e,t){const a=e+"_"+t;for(const e in this.threadsToReplies)if(this.threadsToReplies[e]===a)return;this.getDiscussionMessage(e,t)}generateThreadServiceStartMessage(e){const t=e.peerId+"_"+e.mid;if(this.threadsServiceMessagesIdsStorage[t])return;const a=(0,oe.Z)(Math.max(...this.getMidsByMessage(e))),s={_:"messageService",pFlags:{is_single:!0},id:this.appMessagesIdsManager.generateTempMessageId(a),date:e.date,from_id:{_:"peerUser",user_id:o.NM},peer_id:e.peer_id,action:{_:"messageActionDiscussionStarted"},reply_to:this.generateReplyHeader(e.peerId,e.id)};this.saveMessages([s],{isOutgoing:!0}),this.threadsServiceMessagesIdsStorage[t]=s.mid}getThreadServiceMessageId(e,t){return this.threadsServiceMessagesIdsStorage[e+"_"+t]}getDiscussionMessage(e,t){return this.apiManager.invokeApiSingle("messages.getDiscussionMessage",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}).then((a=>{var s;this.appChatsManager.saveApiChats(a.chats),this.appUsersManager.saveApiUsers(a.users),this.saveMessages(a.messages);const n=this.getMessageWithReplies(a.messages[0]),i=n.peerId+"_"+n.mid;this.generateThreadServiceStartMessage(n);const r=this.getHistoryStorage(n.peerId,n.mid),o=a.max_id=(0,pe.Z)(a.max_id)||0;a.read_inbox_max_id=r.readMaxId=(0,pe.Z)(null!==(s=a.read_inbox_max_id)&&void 0!==s?s:n.mid),a.read_outbox_max_id=r.readOutboxMaxId=(0,pe.Z)(a.read_outbox_max_id)||0;const p=r.history.first;return r.maxId&&r.maxId{this.newDialogsHandlePromise=void 0,this.handleNewDialogs()}))}deleteMessages(e,t,a,s){var n,i;return Xt(this,void 0,void 0,(function*(){let r;const o=this.appPeersManager.isChannel(e),p=o&&e.toChatId();if(o&&!s){const a=this.appChatsManager.getChat(p);if(!a.pFlags.creator&&!(null===(i=null===(n=a.admin_rights)||void 0===n?void 0:n.pFlags)||void 0===i?void 0:i.delete_messages)&&!(t=t.filter((t=>!!this.getMessageByPeer(e,t).pFlags.out))).length)return}const d=yield this.apiManager.getConfig(),f=t.splice(d.forwarded_count_max,t.length-d.forwarded_count_max),c=t.map((e=>{const t=(0,oe.Z)(e);return(0,pe.Z)(t)===e&&t})).filter(Boolean);r=o?this.apiManager.invokeApi("channels.deleteMessages",{channel:this.appChatsManager.getChannelInput(p),id:c}).then((e=>{this.apiUpdatesManager.processLocalUpdate({_:"updateDeleteChannelMessages",channel_id:p,messages:t,pts:e.pts,pts_count:e.pts_count})})):this.apiManager.invokeApi("messages.deleteMessages",{revoke:a,id:c}).then((e=>{this.apiUpdatesManager.processLocalUpdate({_:"updateDeleteMessages",messages:t,pts:e.pts,pts_count:e.pts_count})}));const l=[r];return f.length&&l.push(this.deleteMessages(e,f,a,!0)),Promise.all(l).then(qt.Z)}))}readHistory(e,t=0,a,s=!1){if(this.log("readHistory:",e,t,a),!this.getReadMaxIdIfUnread(e,a)){if(a&&!s){const t=this.dialogsStorage.getForumTopic(e,a);(0,oe.Z)(t.read_inbox_max_id)||(s=!0)}if(!s){const t=this.appChatsManager.isForum(e.toChatId())&&a?this.dialogsStorage.getForumTopic(e,a):this.getDialogOnly(e);t&&this.isDialogUnread(t)&&(s=!0)}if(!s)return this.log("readHistory: isn't unread"),Promise.resolve()}const n=this.getHistoryStorage(e,a);if(n.triedToReadMaxId>=t)return Promise.resolve();let i;return a?(n.readPromise||(i=this.apiManager.invokeApi("messages.readDiscussion",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(a),read_max_id:(0,oe.Z)(t)})),this.apiUpdatesManager.processLocalUpdate({_:"updateReadChannelDiscussionInbox",channel_id:e.toChatId(),top_msg_id:a,read_max_id:t})):this.appPeersManager.isChannel(e)?(n.readPromise||(i=this.apiManager.invokeApi("channels.readHistory",{channel:this.appChatsManager.getChannelInput(e.toChatId()),max_id:(0,oe.Z)(t)})),this.apiUpdatesManager.processLocalUpdate({_:"updateReadChannelInbox",max_id:t,channel_id:e.toChatId(),still_unread_count:void 0,pts:void 0})):(n.readPromise||(i=this.apiManager.invokeApi("messages.readHistory",{peer:this.appPeersManager.getInputPeerById(e),max_id:(0,oe.Z)(t)}).then((e=>{this.apiUpdatesManager.processUpdateMessage({_:"updateShort",update:{_:"updatePts",pts:e.pts,pts_count:e.pts_count}})}))),this.apiUpdatesManager.processLocalUpdate({_:"updateReadHistoryInbox",max_id:t,peer:this.appPeersManager.getOutputPeer(e),still_unread_count:void 0,pts:void 0,pts_count:void 0})),this.rootScope.dispatchEvent("notification_reset",this.appPeersManager.getPeerString(e)),n.readPromise?n.readPromise:(n.triedToReadMaxId=t,i.finally((()=>{delete n.readPromise;const{readMaxId:s}=n;this.log("readHistory: promise finally",t,s),s>t&&this.readHistory(e,s,a,!0)})),n.readPromise=i)}readAllHistory(e,t,a=!1){const s=this.getHistoryStorage(e,t);s.maxId&&this.readHistory(e,s.maxId,t,a)}getUnreadMentionsKey(e,t){return e+(t?`_${t}`:"")}fixDialogUnreadMentionsIfNoMessage(e,t){const a=this.dialogsStorage.getDialogOrTopic(e,t);(null==a?void 0:a.unread_mentions_count)&&this.reloadConversationOrTopic(e)}modifyCachedMentions(e,t,a,s){const n=this.unreadMentions[this.getUnreadMentionsKey(e,s)];n&&(a?n.first.isEnd(se.D.Top)&&n.insertSlice([t]):n.delete(t))}fixUnreadMentionsCountIfNeeded(e,t,a){const s=this.dialogsStorage.getDialogOrTopic(e,a);!t.length&&(null==s?void 0:s.unread_mentions_count)&&this.reloadConversationOrTopic(e)}goToNextMention(e,t){var a,s;const n=this.getUnreadMentionsKey(e,t),i=this.goToNextMentionPromises[n];if(i)return i;const r=null!==(a=(s=this.unreadMentions)[e])&&void 0!==a?a:s[e]=new se.Z,o=r.length,p=r.first.isEnd(se.D.Top);if(!o&&p)return this.fixUnreadMentionsCountIfNeeded(e,r,t),Promise.resolve();let d=Promise.resolve();return!p&&o<25&&(d=this.loadNextMentions(e,t)),this.goToNextMentionPromises[n]=d.then((()=>{const a=r.last,s=a&&a[a.length-1];if(s)return r.delete(s),s;this.fixUnreadMentionsCountIfNeeded(e,r,t)})).finally((()=>{delete this.goToNextMentionPromises[n]}))}loadNextMentions(e,t){const a=this.unreadMentions[e],s=a.first[0]||1;return this.getUnreadMentions(e,s,-50,50,void 0,void 0,t).then((e=>{this.mergeHistoryResult(a,e,1===s?0:s,50,-50)}))}getUnreadMentions(e,t,a,s,n=0,i=0,r){return this.apiManager.invokeApiSingleProcess({method:"messages.getUnreadMentions",params:{peer:this.appPeersManager.getInputPeerById(e),offset_id:(0,oe.Z)(t),add_offset:a,limit:s,max_id:(0,oe.Z)(n),min_id:(0,oe.Z)(i),top_msg_id:r?(0,oe.Z)(r):void 0},processResult:e=>((0,ue.Z)(e),this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.saveMessages(e.messages),e)})}readMessages(e,t){if(!t.length)return Promise.resolve();let a,s;if(t=t.map((e=>(0,oe.Z)(e))),e.isAnyChat()&&this.appPeersManager.isChannel(e)){const n=e.toChatId();s={_:"updateChannelReadMessagesContents",channel_id:n,messages:t},a=this.apiManager.invokeApi("channels.readMessageContents",{channel:this.appChatsManager.getChannelInput(n),id:t})}else s={_:"updateReadMessagesContents",messages:t,pts:void 0,pts_count:void 0},a=this.apiManager.invokeApi("messages.readMessageContents",{id:t}).then((e=>{s.pts=e.pts,s.pts_count=e.pts_count,this.apiUpdatesManager.processLocalUpdate(s)}));return this.apiUpdatesManager.processLocalUpdate(s),a}getHistoryStorage(e,t){var a,s,n,i,r,o;return t?null!==(s=(r=null!==(a=(i=this.threadsStorage)[e])&&void 0!==a?a:i[e]={})[t])&&void 0!==s?s:r[t]={count:null,history:new se.Z}:null!==(n=(o=this.historiesStorage)[e])&&void 0!==n?n:o[e]={count:null,history:new se.Z}}getHistoryStorageTransferable(e,t){const a=this.getHistoryStorage(e,t),{count:s,history:n,maxId:i,readMaxId:r,readOutboxMaxId:o,maxOutId:p,replyMarkup:d}=a;return{count:s,history:void 0,historySerialized:n.toJSON(),maxId:i,readMaxId:r,readOutboxMaxId:o,maxOutId:p,replyMarkup:d}}getNotifyPeerSettings(e,t){const a=this.appPeersManager.getInputNotifyPeerById({peerId:e,ignorePeerId:!0,threadId:t});return Promise.all([this.appNotificationsManager.getNotifyPeerTypeSettings(),this.appNotificationsManager.getNotifySettings(a)]).then((([a,s])=>({muted:this.appNotificationsManager.isPeerLocalMuted({peerId:e,respectType:!0,threadId:t}),peerTypeNotifySettings:s})))}getUpdateAfterReloadKey(e,t){return e+(t?"_"+t:"")}handleNewUpdateAfterReload(e,t,a){var s,n,i;const r=null!==(s=(n=this.newUpdatesAfterReloadToHandle)[i=this.getUpdateAfterReloadKey(e,a)])&&void 0!==s?s:n[i]=new Set;r.has(t)?this.log.error("here we go again",e):(t.ignoreExisting=!0,r.add(t),this.scheduleHandleNewDialogs(e,a))}setDialogToStateIfMessageIsTop(e){this.isMessageIsTopMessage(e)&&this.dialogsStorage.setDialogToState(this.getDialogOnly(e.peerId))}isMessageIsTopMessage(e){const t=this.getDialogOnly(e.peerId);return t&&t.top_message===e.mid}updateMessageRepliesIfNeeded(e){try{const t=this.getThreadKey(e);if(t){const e=this.threadsToReplies[t];if(e){const[t,a]=e.split("_");this.updateMessage(t.toPeerId(),+a,"replies_updated")}}}catch(t){this.log.error("incrementMessageReplies err",t,e)}}getThreadKey(e){var t;let a="";if(null===(t=null==e?void 0:e.peerId)||void 0===t?void 0:t.isAnyChat()){const t=(0,Yt.Z)(e,this.appChatsManager.isForum(e.peerId.toChatId()));t&&(a=e.peerId+"_"+t)}return a}updateMessage(e,t,a){return this.reloadMessages(e,t,!0).then((()=>{const s=this.getMessageByPeer(e,t);if(s)return a&&this.rootScope.dispatchEvent(a,s),s}))}checkPendingMessage(e){const t=this.pendingByMessageId[e.mid];let a;if(t){const s=this.pendingByRandomId[t];(a=this.finalizePendingMessage(t,e))&&this.rootScope.dispatchEvent("history_update",{storageKey:s.storage.key,message:e,sequential:s.sequential}),delete this.pendingByMessageId[e.mid]}return a}mutePeer(e){if(!(e=this.appNotificationsManager.validatePeerSettings(e)))return;const{peerId:t,muteUntil:a,threadId:s}=e,n={_:"inputPeerNotifySettings"};n.mute_until=a;const i=this.appPeersManager.getInputPeerById(t);return this.appNotificationsManager.updateNotifySettings(s?{_:"inputNotifyForumTopic",peer:i,top_msg_id:(0,oe.Z)(s)}:{_:"inputNotifyPeer",peer:i},n)}togglePeerMute({peerId:e,mute:t,threadId:a}){return void 0===t&&(t=!this.appNotificationsManager.isPeerLocalMuted({peerId:e,respectType:!1,threadId:a})),this.mutePeer({peerId:e,muteUntil:t?o.rU:0,threadId:a})}findPeerIdByMids(e){for(let t=e.length-1;t>=0;--t){const a=e[t],s=this.getMessageById(a);if(s)return s.peerId}}canSendToPeer(e,t,a="send_messages"){var s;if(this.appPeersManager.isPeerRestricted(e))return!1;if(e.isAnyChat()){const n=e.toChatId();if(t){const a=this.dialogsStorage.getForumTopic(e,t);if((null===(s=null==a?void 0:a.pFlags)||void 0===s?void 0:s.closed)&&!this.appChatsManager.hasRights(n,"manage_topics"))return!1}const i=this.appChatsManager.getChat(n);return this.appChatsManager.hasRights(n,a,void 0,!!t)&&(!i.pFlags.left||!!t)}return this.appUsersManager.canSendToUser(e)}finalizePendingMessage(e,t){const a=this.pendingByRandomId[e];if(!a)return;const{peerId:s,tempId:n,threadId:i,storage:r}=a;[this.getHistoryStorage(s),i?this.getHistoryStorage(s,i):void 0].filter(Boolean).forEach((e=>{e.history.delete(n)}));const o=this.getMessageFromStorage(r,n);return o&&(delete t.pFlags.is_outgoing,delete t.pending,delete t.error,delete t.random_id,delete t.send),this.rootScope.dispatchEvent("messages_pending"),delete this.pendingByRandomId[e],this.finalizePendingMessageCallbacks(r,n,t),o}finalizePendingMessageCallbacks(e,t,a){const s=this.tempFinalizeCallbacks[t];if(void 0!==s){for(const e in s){const{deferred:t,callback:n}=s[e];n(a).then(t.resolve,t.reject)}delete this.tempFinalizeCallbacks[t]}if(a.media){(0,ue.Z)(a);const{photo:e,document:s}=a.media;if(e){const a=this.appPhotosManager.getPhoto(""+t);if(a){const t=e.sizes[e.sizes.length-1],s=this.thumbsStorage.getCacheContext(e,t.type),n=this.thumbsStorage.getCacheContext(a,o.Pt);Object.assign(s,n);const i=e.sizes[e.sizes.length-1],r=(0,Ot.Z)(e,i);(0,lt.P)(r.location)}}else if(s){const e=this.appDocsManager.getDoc(""+t);if(e){const t=this.thumbsStorage.getCacheContext(e);if(e.type&&"sticker"!==e.type&&"image/gif"!==e.mime_type&&t.url){const e=this.thumbsStorage.getCacheContext(s);Object.assign(e,t),n=s,(0,lt.P)((0,ct.Z)(n,undefined),{fileName:n.file_name})}}}else a.media.poll&&(delete this.appPollsManager.polls[t],delete this.appPollsManager.results[t])}var n;const i=this.getMessageFromStorage(e,t);e.delete(t),!i.reply_markup&&a.reply_markup&&setTimeout((()=>{this.getMessageFromStorage(e,a.mid)&&this.rootScope.dispatchEvent("message_edit",{storageKey:e.key,peerId:a.peerId,mid:a.mid,message:a})}),0),this.handleReleasingMessage(i,e),this.rootScope.dispatchEvent("message_sent",{storageKey:e.key,tempId:t,tempMessage:i,mid:a.mid,message:a})}incrementMaxSeenId(e){if(!e||this.maxSeenId&&!(e>this.maxSeenId))return!1;this.maxSeenId=e,this.appStateManager.pushToState("maxSeenMsgId",e),this.apiManager.invokeApi("messages.receivedMessages",{max_id:(0,oe.Z)(e)})}getMessageReactionsListAndReadParticipants(e,t,a,s,n,i){var r,o;return Xt(this,void 0,void 0,(function*(){const p={reactions:[],count:0,next_offset:void 0},d=yield this.canViewMessageReadParticipants(e);return d&&void 0===t?t=100:void 0===t&&(t=50),Promise.all([!d||a||n?[]:this.getMessageReadParticipants(e.peerId,e.mid).catch((()=>[])),(null===(o=null===(r=e.reactions)||void 0===r?void 0:r.recent_reactions)||void 0===o?void 0:o.length)&&!i?this.appReactionsManager.getMessageReactionsList(e.peerId,e.mid,t,a,s).catch((e=>p)):p]).then((([e,t])=>{const a=e.map((e=>e.toPeerId())),s=a.slice();(0,ne.Z)(s,((e,a,s)=>{t.reactions.some((t=>this.appPeersManager.getPeerId(t.peer_id)===e))&&s.splice(a,1)}));let n=t.reactions.map((e=>({peerId:this.appPeersManager.getPeerId(e.peer_id),reaction:e.reaction})));return n=n.concat(s.map((e=>({peerId:e})))),{reactions:t.reactions,reactionsCount:t.count,readParticipants:a,combined:n,nextOffset:t.next_offset}}))}))}getMessageReadParticipants(e,t){return this.apiManager.invokeApiSingle("messages.getMessageReadParticipants",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}).then((e=>e.map((e=>e.toUserId()))))}canViewMessageReadParticipants(e){return Xt(this,void 0,void 0,(function*(){if("message"!==(null==e?void 0:e._)||e.pFlags.is_outgoing||!e.pFlags.out||!this.appPeersManager.isAnyGroup(e.peerId))return!1;const t=this.appChatsManager.getChat(e.peerId.toChatId()),a=yield this.apiManager.getAppConfig();return t.participants_count<=a.chat_read_mark_size_threshold&&(0,te.Z)(!0)-e.date(0,oe.Z)(e))),increment:!0}).then((a=>{const s=new Array(t.length);for(let n=0,i=t.length;n{const{chatPeerIds:t}=e.state;return t[t.length-1]===a}));!n&&s.length&&(s.sort(((e,t)=>e.state.idleStartTime-t.state.idleStartTime)),n=s[0].state.idleStartTime?s[s.length-1]:s[0]),f.Z.getInstance().invokeVoid("notificationBuild",Object.assign({message:e},t),null==n?void 0:n.source)}getScheduledMessagesStorage(e){var t,a;return null!==(t=(a=this.scheduledMessagesStorage)[e])&&void 0!==t?t:a[e]=this.createMessageStorage(e,"scheduled")}getScheduledMessageByPeer(e,t){return this.getMessageFromStorage(this.getScheduledMessagesStorage(e),t)}getScheduledMessages(e){if(!this.canSendToPeer(e))return;const t=this.getScheduledMessagesStorage(e);return t.size?[...t.keys()]:this.apiManager.invokeApiSingle("messages.getScheduledHistory",{peer:this.appPeersManager.getInputPeerById(e),hash:""}).then((t=>{if("messages.messagesNotModified"!==t._){this.appUsersManager.saveApiUsers(t.users),this.appChatsManager.saveApiChats(t.chats);const a=this.getScheduledMessagesStorage(e);return this.saveMessages(t.messages,{storage:a,isScheduled:!0}),[...a.keys()]}return[]}))}sendScheduledMessages(e,t){return this.apiManager.invokeApi("messages.sendScheduledMessages",{peer:this.appPeersManager.getInputPeerById(e),id:t.map((e=>(0,oe.Z)(e)))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}deleteScheduledMessages(e,t){return this.apiManager.invokeApi("messages.deleteScheduledMessages",{peer:this.appPeersManager.getInputPeerById(e),id:t.map((e=>(0,oe.Z)(e)))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e)}))}getMessageWithReplies(e){return this.filterMessages(e,(e=>!!e.replies))[0]}getMessageWithCommentReplies(e){if(e.peerId!==o.hj){const t=null==(e=this.getMessageWithReplies(e))?void 0:e.replies;if(!t||!t.pFlags.comments||t.channel_id.toChatId()===o.IA)return}return e}isFetchIntervalNeeded(e){return e.isAnyChat()&&(!this.appChatsManager.isInChat(e.toChatId())||this.appChatsManager.isForum(e.toChatId()))}getNewHistory(e,t){var a;return Xt(this,void 0,void 0,(function*(){if(!this.isFetchIntervalNeeded(e))return;const s=this.getHistoryStorage(e,t),n=s.history.slice;if(!n.isEnd(se.D.Bottom))return;delete s.maxId,n.unsetEnd(se.D.Bottom);const i=yield this.getHistory(e,null!==(a=n[0])&&void 0!==a?a:1,0,50,t);for(let t=0,a=i.history.length;t{const e=i.history.sliceMe(t,r,a),s=(null==e?void 0:e.slice)||i.history.constructSlice();return{count:i.count,history:Array.from(s),isEnd:s.getEnds(),offsetIdOffset:(null==e?void 0:e.offsetIdOffset)||i.count}})):{count:i.count,history:Array.from(o.slice),isEnd:o.slice.getEnds(),offsetIdOffset:o.offsetIdOffset}}isHistoryResultEnd(e,t,a){const{offset_id_offset:s,messages:n}=e,i=e.count||n.length,r=s||0,o=a<0?t+a:t;return{count:i,offsetIdOffset:r,isTopEnd:r>=i-o||ie.mid));if(a&&(0,oe.Z)(a)&&!c.includes(a)&&pc[e]);++e);c.splice(e,0,a)}const l=e.insertSlice(c)||e.slice;return d&&l.setEnd(se.D.Top),f&&l.setEnd(se.D.Bottom),Object.assign({slice:l,mids:c,messages:i},r)}fillHistoryStorage(e,t,a,s,n,i){const r=n.maxId;return this.requestHistory(e,t,a,s,void 0,i).then((i=>{const{count:o,isBottomEnd:p,slice:d,messages:f}=this.mergeHistoryResult(n.history,i,t,a,s);n.count=o;for(let t=0,a=f.length;t{d.ZP&&this.log("requestHistory result:",e,r,t,a,s),this.appUsersManager.saveApiUsers(r.users),this.appChatsManager.saveApiChats(r.chats),this.saveMessages(r.messages),"pts"in r&&this.apiUpdatesManager.addChannelState(e.toChatId(),r.pts);let o=r.messages.length,p=r.count;o&&!r.messages[o-1]&&(r.messages.splice(o-1,1),o--,p--);const f=this.getHistoryStorage(e,i),c=r.messages[o-1];if(o&&c.grouped_id){const t=f.history.findSlice(c.mid);if(t&&t.slice.length+r.messages.lengthr))}return r}),(t=>{if("CHANNEL_PRIVATE"===t.type){let t=this.appChatsManager.getChat(e.toChatId());"channel"===t._&&(t={_:"channelForbidden",id:e.toChatId(),access_hash:t.access_hash,title:t.title,pFlags:t.pFlags}),this.apiUpdatesManager.processUpdateMessage({_:"updates",updates:[{_:"updateChannel",channel_id:e.toChatId()}],chats:[t],users:[]})}throw t}))}fetchSingleMessages(){return this.fetchSingleMessagesPromise?this.fetchSingleMessagesPromise:this.fetchSingleMessagesPromise=(0,P.Z)(0).then((()=>{const e=[];for(const[t,a]of this.needSingleMessages){const s=[...a.keys()],n=s.map((e=>({_:"inputMessageID",id:(0,oe.Z)(e)})));let i;i=t.isAnyChat()&&this.appPeersManager.isChannel(t)?this.apiManager.invokeApiSingle("channels.getMessages",{channel:this.appChatsManager.getChannelInput(t.toChatId()),id:n}):this.apiManager.invokeApiSingle("messages.getMessages",{id:n});const r=i.then((e=>{(0,ue.Z)(e),this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats);const t=this.saveMessages(e.messages);for(let e=0;e{this.rootScope.dispatchEvent("messages_downloaded",{peerId:t,mids:s})}));e.push(r)}return this.needSingleMessages.clear(),Promise.all(e).then(qt.Z,qt.Z).then((()=>{this.fetchSingleMessagesPromise=void 0,this.needSingleMessages.size&&this.fetchSingleMessages()}))}))}reloadMessages(e,t,a){if(Array.isArray(t))return Promise.all(t.map((t=>this.reloadMessages(e,t,a))));const s=this.getMessageByPeer(e,t);if(s&&!a)return this.rootScope.dispatchEvent("messages_downloaded",{peerId:e,mids:[t]}),Promise.resolve(s);{let a=this.needSingleMessages.get(e);a||this.needSingleMessages.set(e,a=new Map);let s=a.get(t);return s||(s=(0,v.Z)(),a.set(t,s),this.fetchSingleMessages(),s)}}getExtendedMedia(e,t){let a=this.extendedMedia.get(e);a||this.extendedMedia.set(e,a=new Map);const s=(0,v.Z)(),n=[],i=t.map((t=>{let i=a.get(t);return i||(a.set(t,i=s),n.push(t),i.then((()=>{a.delete(t),a.size||this.extendedMedia.get(e)!==a||this.extendedMedia.delete(e)}))),i}));return n.length?this.apiManager.invokeApi("messages.getExtendedMedia",{peer:this.appPeersManager.getInputPeerById(e),id:n.map((e=>(0,oe.Z)(e)))}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e),s.resolve()})):s.resolve(),Promise.all(i)}fetchMessageReplyTo(e){if(!e.reply_to_mid)return Promise.resolve(this.generateEmptyMessage(0));const t=e.reply_to.reply_to_peer_id?this.appPeersManager.getPeerId(e.reply_to.reply_to_peer_id):e.peerId;return this.reloadMessages(t,e.reply_to_mid).then((t=>{if(t||delete(e=this.getMessageByPeer(e.peerId,e.mid)).reply_to_mid,"messageService"===e._){const t=e.peerId;this.rootScope.dispatchEvent("message_edit",{storageKey:`${t}_history`,peerId:t,mid:e.mid,message:e}),this.isMessageIsTopMessage(e)&&this.rootScope.dispatchEvent("dialogs_multiupdate",new Map([[t,{dialog:this.getDialogOnly(t)}]]))}return t}))}getTypingKey(e,t){return t?`${e}_${t}`:e}setTyping(e,t,a,s){var n;s&&!this.appPeersManager.isForum(e)&&(s=void 0);const i=this.getTypingKey(e,s);let r=this.typings[i];return e&&this.canSendToPeer(e)&&e!==this.appPeersManager.peerId&&(a||(null===(n=null==r?void 0:r.action)||void 0===n?void 0:n._)!==t._)?((null==r?void 0:r.timeout)&&clearTimeout(r.timeout),r=this.typings[i]={action:t},this.apiManager.invokeApi("messages.setTyping",{peer:this.appPeersManager.getInputPeerById(e),action:t,top_msg_id:s?(0,oe.Z)(s):void 0}).finally((()=>{r===this.typings[i]&&(r.timeout=T.Z.setTimeout((()=>{delete this.typings[i]}),6e3))}))):Promise.resolve(!1)}handleReleasingMessage(e,t){const a=e.media;if(a){const s=a.webpage||a,n=s.photo||s.document;if((null==n?void 0:n.file_reference)&&this.referenceDatabase.deleteContext(n.file_reference,{type:"message",peerId:e.peerId,messageId:e.mid}),"webpage"in a&&a.webpage){const s=this.getScheduledMessagesStorage(e.peerId)===t,n=this.appWebPagesManager.getMessageKeyForPendingWebPage(e.peerId,e.mid,s);this.appWebPagesManager.deleteWebPageFromPending(a.webpage,n)}a.poll&&this.appPollsManager.updatePollToMessage(e,!1)}}handleDeletedMessages(e,t,a){const s={count:0,unread:0,unreadMentions:0,msgs:new Set};for(const n of a){const a=this.getMessageFromStorage(t,n);if(!a){this.fixDialogUnreadMentionsIfNoMessage(e);continue}this.handleReleasingMessage(a,t),this.updateMessageRepliesIfNeeded(a),a.pFlags.out||a.pFlags.is_outgoing||!a.pFlags.unread||(++s.unread,this.rootScope.dispatchEvent("notification_cancel","msg"+n),a.pFlags.mentioned&&(++s.unreadMentions,this.modifyCachedMentions(e,n,!1))),++s.count,s.msgs.add(n),a.deleted=!0;const i=a.grouped_id;if(i){const e=this.groupedMessagesStorage[i];e&&(e.delete(n),s.albums||(s.albums={}),(s.albums[i]||(s.albums[i]=new Set)).add(n),e.size||(delete s.albums,delete this.groupedMessagesStorage[i]))}t.delete(n)}if(s.albums)for(const e in s.albums)this.dispatchAlbumEdit(e,t,[...s.albums[e]]);return s}handleEditedMessage(e,t,a){var s;if("message"===e._){if(null===(s=e.media)||void 0===s?void 0:s.webpage){const t=this.appWebPagesManager.getMessageKeyForPendingWebPage(e.peerId,e.mid,!!e.pFlags.is_scheduled);this.appWebPagesManager.deleteWebPageFromPending(e.media.webpage,t)}const t=e.grouped_id;t&&this.dispatchAlbumEdit(t,a,[])}}dispatchAlbumEdit(e,t,a){const s=this.getMidsByAlbum(e).map((e=>this.getMessageFromStorage(t,e)));this.rootScope.dispatchEvent("album_edit",{peerId:s[0].peerId,groupId:e,deletedMids:a||[],messages:s})}getDialogUnreadCount(e){var t;let a=e.unread_count;if(!this.dialogsStorage.isTopic(e)&&this.appPeersManager.isForum(e.peerId)){const t=this.dialogsStorage.getForumUnreadCount(e.peerId);a=t instanceof Promise?0:t.count}return a||+!!(null===(t=e.pFlags)||void 0===t?void 0:t.unread_mark)}isDialogUnread(e){return!!this.getDialogUnreadCount(e)}canForward(e){return"message"===(null==e?void 0:e._)&&!e.pFlags.noforwards&&!this.appPeersManager.noForwards(e.peerId)}pushBatchUpdate(e,t,a,s){let n=this.batchUpdates[e];n||(n=this.batchUpdates[e]={callback:t,batch:new Map}),n.batch.has(a)||(n.batch.set(a,s?s():void 0),this.batchUpdatesDebounced())}getMessagesFromMap(e){const t=new Map;for(const[a,s]of e){const[e,n]=a.split("_"),i=this.getMessageByPeer(e.toPeerId(),+n);i&&t.set(i,s)}return t}saveDefaultSendAs(e,t){return this.appProfileManager.getCachedFullChat(e.toChatId()).default_send_as=this.appPeersManager.getOutputPeer(t),this.apiManager.invokeApi("messages.saveDefaultSendAs",{peer:this.appPeersManager.getInputPeerById(e),send_as:this.appPeersManager.getInputPeerById(t)})}}var sa=a(6724);function na(e){const t=e.replace("input","");return t[0].toLowerCase()+t.slice(1)}class ia extends G{constructor(){super(...arguments),this.peerSettings={notifyPeer:{},notifyUsers:null,notifyChats:null,notifyBroadcasts:null,notifyForumTopic:{}},this.checkMuteUntil=()=>{void 0!==this.checkMuteUntilTimeout&&(clearTimeout(this.checkMuteUntilTimeout),this.checkMuteUntilTimeout=void 0);const e=(0,te.Z)(!0);let t=o.rU;const a=a=>{if(a instanceof Promise)return!1;const s=a.mute_until;return!!s&&(s<=e?(a.mute_until=0,!0):(s{for(const t in this.peerSettings[e]){const s=this.peerSettings[e][t];if(a(s)){const[e,a]=t.split("_"),n=this.appPeersManager.getOutputPeer(e.toPeerId());this.apiUpdatesManager.saveUpdate({_:"updateNotifySettings",peer:a?{_:"notifyForumTopic",peer:n,top_msg_id:+a}:{_:"notifyPeer",peer:n},notify_settings:s})}}}));const s=Math.min(18e5,1e3*(t-e));this.checkMuteUntilTimeout=T.Z.setTimeout(this.checkMuteUntil,s)}}after(){return this.checkMuteUntilThrottled=(0,sa.Z)(this.checkMuteUntil,1e3,!1),this.apiUpdatesManager.addMultipleEventsListeners({updateNotifySettings:e=>{const{peer:t}=e,a="notifyForumTopic"===t._,s="notifyPeer"===t._||a,n=s&&this.appPeersManager.getPeerId(t.peer),i=s?void 0:t._;this.savePeerSettings({key:i,peerId:n,threadId:a?(0,pe.Z)(t.top_msg_id):void 0,settings:e.notify_settings}),this.rootScope.dispatchEvent("notify_settings",e)}}),this.appStateManager.getState().then((e=>{if(e.notifySettings)for(const t in e.notifySettings)(0,ue.Z)(t),this.savePeerSettings({key:t,settings:e.notifySettings[t]})}))}getNotifySettings(e){let t,a=na(e._),s=this.peerSettings[a];return"inputNotifyPeer"===e._&&(t=a=this.appPeersManager.getPeerId(e.peer),s=s[a]),s||((s||this.peerSettings)[a]=this.apiManager.invokeApi("account.getNotifySettings",{peer:e}).then((e=>(this.savePeerSettings({key:a,peerId:t,settings:e}),e))))}getNotifyPeerTypeSettings(){if(this.getNotifyPeerTypePromise)return this.getNotifyPeerTypePromise;const e=["inputNotifyBroadcasts","inputNotifyUsers","inputNotifyChats"].map((e=>this.getNotifySettings({_:e})));return this.getNotifyPeerTypePromise=Promise.all(e)}updateNotifySettings(e,t){return this.apiManager.invokeApi("account.updateNotifySettings",{peer:e,settings:t}).then((a=>{a&&this.apiUpdatesManager.processLocalUpdate({_:"updateNotifySettings",peer:Object.assign(Object.assign({},e),{_:na(e._)}),notify_settings:Object.assign(Object.assign({},t),{_:"peerNotifySettings"})})}))}getContactSignUpNotification(){return this.notifyContactsSignUp?this.notifyContactsSignUp:this.notifyContactsSignUp=this.apiManager.invokeApi("account.getContactSignUpNotification")}setContactSignUpNotification(e){this.apiManager.invokeApi("account.setContactSignUpNotification",{silent:e}).then((t=>{this.notifyContactsSignUp=Promise.resolve(!e)}))}getPeerKey(e,t){return e+(t?"_"+t:"")}savePeerSettings({key:e,peerId:t,threadId:a,settings:s}){let n;t&&(e=this.getPeerKey(t,a),n=this.peerSettings[a?"notifyForumTopic":"notifyPeer"]),(n||this.peerSettings)[e]=s,t?this.checkMuteUntilThrottled():(this.rootScope.dispatchEvent("notify_peer_type_settings",{key:e,settings:s}),this.appStateManager.getState().then((t=>{const a=t.notifySettings;a[e]=s,this.appStateManager.pushToState("notifySettings",a)})))}isMuted(e){return"peerNotifySettings"===e._&&(e.silent||void 0!==e.mute_until&&1e3*e.mute_until>(0,te.Z)())}getPeerMuted(e){const t=this.getNotifySettings({_:"inputNotifyPeer",peer:this.appPeersManager.getInputPeerById(e)});return(t instanceof Promise?t:Promise.resolve(t)).then((e=>this.isMuted(e)))}getPeerLocalSettings({peerId:e,respectType:t=!0,threadId:a}){const s={_:"peerNotifySettings"},n=this.getPeerKey(e,a),i=this.peerSettings[a?"notifyForumTopic":"notifyPeer"][n];if(!i||i instanceof Promise||Object.assign(s,i),t){const t=na(this.appPeersManager.getInputNotifyPeerById({peerId:e,ignorePeerId:!0,threadId:a})._),n=this.peerSettings[t];if(n&&!(n instanceof Promise))for(const e in n)void 0===s[e]&&(s[e]=n[e])}return s}validatePeerSettings(e){if(e.peerId!==this.appPeersManager.peerId)return e.threadId&&!this.appPeersManager.isForum(e.peerId)&&(e.threadId=void 0),e}isPeerLocalMuted(e){if(!(e=this.validatePeerSettings(e)))return!1;if(e.threadId){const t=this.getPeerLocalSettings(Object.assign(Object.assign({},e),{respectType:!1}));return void 0!==t.silent||void 0!==t.mute_until?this.isMuted(t):this.isPeerLocalMuted(Object.assign(Object.assign({},e),{threadId:void 0}))}const t=this.getPeerLocalSettings(e);return this.isMuted(t)}}var ra=a(677),oa=a(617),pa=a(7361),da=a(7419),fa=a(7256);class ca extends G{get peerId(){return this.appUsersManager.userId.toPeerId()}canPinMessage(e){return e.isUser()||this.appChatsManager.hasRights(e.toChatId(),"pin_messages")}getPeerPhoto(e){const t=this.getPeer(e);return(0,fa.Z)(t)}getPeerMigratedTo(e){if(e.isUser())return!1;const t=this.appChatsManager.getChat(e.toChatId()),a=null==t?void 0:t.migrated_to;return!(!a||!t.pFlags.deactivated)&&(0,le.Z)(a)}getOutputPeer(e){if(e.isUser())return{_:"peerUser",user_id:e.toUserId()};const t=e.toChatId();return this.appChatsManager.isChannel(t)?{_:"peerChannel",channel_id:t}:{_:"peerChat",chat_id:t}}getPeerString(e){return e.isUser()?this.appUsersManager.getUserString(e.toUserId()):this.appChatsManager.getChatString(e.toChatId())}getPeerUsername(e){return this.getPeerActiveUsernames(e)[0]||""}getPeerActiveUsernames(e){const t=this.getPeer(e);return(0,$t.Z)(t)}getPeer(e){return e.isUser()?this.appUsersManager.getUser(e.toUserId()):this.appChatsManager.getChat(e.toChatId())}getPeerId(e){return(0,le.Z)(e)||(0,fe.Z)(e)&&"inputPeerSelf"===e._&&this.peerId||o.NM}getDialogPeer(e){return{_:"dialogPeer",peer:this.getOutputPeer(e)}}isChannel(e){return!e.isUser()&&this.appChatsManager.isChannel(e.toChatId())}isMegagroup(e){return!e.isUser()&&this.appChatsManager.isMegagroup(e.toChatId())}isForum(e){return!e.isUser()&&this.appChatsManager.isForum(e.toChatId())}isAnyGroup(e){return!e.isUser()&&!this.appChatsManager.isBroadcast(e.toChatId())}isBroadcast(e){return this.isChannel(e)&&!this.isMegagroup(e)}isBot(e){return e.isUser()&&this.appUsersManager.isBot(e.toUserId())}isContact(e){return e.isUser()&&this.appUsersManager.isContact(e.toUserId())}isUser(e){return(0,oa.Z)(e)}isAnyChat(e){return(0,pa.Z)(e)}isPeerRestricted(e){return(0,da.Z)(this.getPeer(e))}getRestrictionReasonText(e){const t=this.getPeer(e),a=t.restriction_reason?(0,ra.RP)(t.restriction_reason):void 0;return a?a.text:e.isUser()?"This user is restricted":"This chat is restricted"}getInputNotifyPeerById({peerId:e,ignorePeerId:t,threadId:a}){return t?e.isUser()?{_:"inputNotifyUsers"}:this.isBroadcast(e)?{_:"inputNotifyBroadcasts"}:{_:"inputNotifyChats"}:a?{_:"inputNotifyForumTopic",peer:this.getInputPeerById(e),top_msg_id:(0,oe.Z)(a)}:{_:"inputNotifyPeer",peer:this.getInputPeerById(e)}}getInputPeerById(e){if(!e)return{_:"inputPeerEmpty"};if(!e.isUser()){const t=e.toChatId();return this.appChatsManager.getInputPeer(t)}const t=e.toUserId();return this.appUsersManager.getUserInputPeer(t)}getInputPeerSelf(){return{_:"inputPeerSelf"}}getInputDialogPeerById(e){return{_:"inputDialogPeer",peer:(0,fe.Z)(e)?e:this.getInputPeerById(e)}}getPeerSearchText(e){let t;return t=this.isUser(e)?"%pu "+this.appUsersManager.getUserSearchText(e.toUserId()):"%pg "+(this.appChatsManager.getChat(e.toChatId()).title||""),t}getDialogType(e){return this.isMegagroup(e)?"megagroup":this.isChannel(e)?"channel":this.isUser(e)?e===this.peerId?"saved":"chat":"group"}getDeleteButtonText(e){switch(this.getDialogType(e)){case"channel":return this.appChatsManager.hasRights(e.toChatId(),"delete_chat")?"ChannelDelete":"ChatList.Context.LeaveChannel";case"megagroup":case"group":return this.appChatsManager.hasRights(e.toChatId(),"delete_chat")?"DeleteMega":"ChatList.Context.LeaveGroup";default:return"ChatList.Context.DeleteChat"}}noForwards(e){var t;return!e.isUser()&&!!(null===(t=this.appChatsManager.getChat(e.toChatId()).pFlags)||void 0===t?void 0:t.noforwards)}}class la extends G{constructor(){super(...arguments),this.photos={}}savePhoto(e,t){var a;if(!e||"photoEmpty"===e._)return;const s=this.photos[e.id];if(e.file_reference&&(dt("file_reference",s,e),this.referenceDatabase.saveContext(e.file_reference,t)),null===(a=e.sizes)||void 0===a?void 0:a.length){e.sizes.sort(((e,t)=>(e.size||(e.sizes?1/0:0))-(t.size||(t.sizes?1/0:0))));const t=e.sizes[e.sizes.length-1];"photoSizeProgressive"===t._&&(t.size=t.sizes[t.sizes.length-1])}return s?Object.assign(s,e):this.photos[e.id]=e}getUserPhotos(e,t="0",a=20){const s=this.appUsersManager.getUserInput(e);return this.apiManager.invokeApiCacheable("photos.getUserPhotos",{user_id:s,offset:0,limit:a,max_id:t},{cacheSeconds:60}).then((a=>{this.appUsersManager.saveApiUsers(a.users);const s=a.photos.map(((t,s)=>(a.photos[s]=this.savePhoto(t,{type:"profilePhoto",peerId:e.toPeerId()}),t.id)));if("0"!==t&&t){const e=s.indexOf(t);-1!==e&&s.splice(e,1)}return{count:a.count||s.length,photos:s}}))}getPhoto(e){return(0,fe.Z)(e)?e:this.photos[e]}}class ma extends G{constructor(){super(...arguments),this.polls={},this.results={},this.pollToMessages={},this.log=(0,S.kg)("POLLS",S.v9.Error)}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateMessagePoll:e=>{this.log("updateMessagePoll:",e);let t=e.poll||this.polls[e.poll_id];if(!t)return;let a=e.results;const s=this.savePoll(t,a);t=s.poll,a=s.results,this.rootScope.dispatchEvent("poll_update",{poll:t,results:a})}})}savePoll(e,t,a){a&&this.updatePollToMessage(a,!0);const s=e.id;return this.polls[s]?(e=Object.assign(this.polls[s],e),t=this.saveResults(e,t)):(this.polls[s]=e,e.chosenIndexes=[],t=this.saveResults(e,t)),{poll:e,results:t}}saveResults(e,t){var a;return this.results[e.id]?t=Object.assign(this.results[e.id],t):this.results[e.id]=t,t.pFlags.min||(e.chosenIndexes.length=0,(null===(a=null==t?void 0:t.results)||void 0===a?void 0:a.length)&&t.results.forEach(((t,a)=>{var s;(null===(s=t.pFlags)||void 0===s?void 0:s.chosen)&&e.chosenIndexes.push(a)}))),t}getPoll(e){return{poll:this.polls[e],results:this.results[e]}}getInputMediaPoll(e,t,a,s){return a?(s||(s=[]),a=(0,ke.Z)(a,s)):a=void 0,{_:"inputMediaPoll",poll:e,correct_answers:t,solution:a,solution_entities:a?s:void 0}}updatePollToMessage(e,t){const{id:a}=e.media.poll;let s=this.pollToMessages[a];if(!t&&!s)return;s||(s=this.pollToMessages[a]=new Set);const n=e.peerId+"_"+e.mid;t?s.add(n):s.delete(n),t||s.size||(delete this.polls[a],delete this.results[a],delete this.pollToMessages[a])}sendVote(e,t){const a=e.media.poll,s=t.map((e=>a.answers[e].option)),n=e.mid,i=e.peerId,r=this.appPeersManager.getInputPeerById(i);return e.pFlags.is_outgoing?this.appMessagesManager.invokeAfterMessageIsSent(n,"sendVote",(e=>(this.log("invoke sendVote callback"),this.sendVote(e,t)))):this.apiManager.invokeApi("messages.sendVote",{peer:r,msg_id:(0,oe.Z)(e.mid),options:s}).then((e=>{this.log("sendVote updates:",e),this.apiUpdatesManager.processUpdateMessage(e)}))}getResults(e){const t=this.appPeersManager.getInputPeerById(e.peerId);return this.apiManager.invokeApi("messages.getPollResults",{peer:t,msg_id:(0,oe.Z)(e.mid)}).then((e=>{this.apiUpdatesManager.processUpdateMessage(e),this.log("getResults updates:",e)}))}getVotes(e,t,a,s=20){return this.apiManager.invokeApi("messages.getPollVotes",{peer:this.appPeersManager.getInputPeerById(e.peerId),id:(0,oe.Z)(e.mid),option:t,offset:a,limit:s}).then((e=>(this.log("getPollVotes messages:",e),this.appUsersManager.saveApiUsers(e.users),e)))}stopPoll(e){const t=e.media.poll;if(t.pFlags.closed)return Promise.resolve();const a=(0,ve.Z)(t);return a.pFlags.closed=!0,this.appMessagesManager.editMessage(e,void 0,{newMedia:this.getInputMediaPoll(a)}).then((()=>{}),(e=>{this.log.error("stopPoll error:",e)}))}}class ga extends G{constructor(){super(...arguments),this.privacy={}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updatePrivacy:e=>{const t=e.key._;this.privacy[t]=e.rules,this.rootScope.dispatchEvent("privacy_update",e)}})}setPrivacy(e,t){return this.apiManager.invokeApi("account.setPrivacy",{key:{_:e},rules:t}).then((a=>(this.appUsersManager.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),this.apiUpdatesManager.processLocalUpdate({_:"updatePrivacy",key:{_:na(e)},rules:t.map((e=>{const t={};return Object.assign(t,e),t._=na(t._),t}))}),a.rules)))}getPrivacy(e){const t=na(e),a=this.privacy[t];return a?Promise.resolve(a):this.privacy[t]=this.apiManager.invokeApi("account.getPrivacy",{key:{_:e}}).then((e=>(this.appUsersManager.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.privacy[t]=e.rules)))}getGlobalPrivacySettings(){return this.apiManager.invokeApi("account.getGlobalPrivacySettings")}setGlobalPrivacySettings(e){return this.apiManager.invokeApi("account.setGlobalPrivacySettings",{settings:e})}}var ha=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const ua=18e4;class ya extends G{constructor(){super(...arguments),this.usersFull={},this.chatsFull={},this.fullExpiration={},this.onUpdateChatParticipants=e=>{const t=e.participants;if("chatParticipants"!==t._)return;const a=t.chat_id,s=this.chatsFull[a];void 0!==s&&(s.participants=t,this.rootScope.dispatchEvent("chat_full_update",a))},this.onUpdateChatParticipantAdd=e=>{const t=this.chatsFull[e.chat_id];if(void 0===t)return;const a=t.participants,s=a.participants||[];for(let t=0,a=s.length;t{const t=this.chatsFull[e.chat_id];if(void 0===t)return;const a=t.participants,s=a.participants||[];for(let t=0,n=s.length;t{var t,a;const s=e.user_id?e.user_id.toPeerId():this.appPeersManager.getPeerId(e.from_id);if(this.appPeersManager.peerId===s||"speakingInGroupCallAction"===e.action._)return;const n=e.top_msg_id,i=n?(0,pe.Z)(n):void 0,r=this.appPeersManager.getPeerId(e),o=this.getTypingsKey(r,i),p=null!==(t=(a=this.typingsInPeer)[o])&&void 0!==t?t:a[o]=[];let d=p.find((e=>e.userId===s));const f=()=>{delete d.timeout;const e=p.indexOf(d);-1!==e&&p.splice(e,1),this.rootScope.dispatchEvent("peer_typings",{peerId:r,threadId:i,typings:p}),p.length||delete this.typingsInPeer[o]};if(void 0!==(null==d?void 0:d.timeout)&&clearTimeout(d.timeout),"sendMessageCancelAction"===e.action._){if(!d)return;return void f()}d||(d={userId:s},p.push(d)),d.action=e.action;const c=this.appUsersManager.hasUser(s);c?this.appUsersManager.forceUserOnline(s):"updateChatUserTyping"===e._&&e.chat_id&&this.appChatsManager.hasChat(e.chat_id)&&!this.appChatsManager.isChannel(e.chat_id)&&Promise.resolve(this.getChatFull(e.chat_id)).then((()=>{void 0!==d.timeout&&this.appUsersManager.hasUser(s)&&this.rootScope.dispatchEvent("peer_typings",{peerId:r,threadId:i,typings:p})})),d.timeout=T.Z.setTimeout(f,6e3),c&&this.rootScope.dispatchEvent("peer_typings",{peerId:r,threadId:i,typings:p})},this.onUpdatePeerBlocked=e=>{const t=this.appPeersManager.getPeerId(e.peer_id);if(this.appPeersManager.isUser(t)){const a=t.toUserId(),s=this.usersFull[a];s&&(e.blocked?s.pFlags.blocked=!0:delete s.pFlags.blocked),this.rootScope.dispatchEvent("user_full_update",a)}this.rootScope.dispatchEvent("peer_block",{peerId:t,blocked:e.blocked})}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateChatParticipants:this.onUpdateChatParticipants,updateChatParticipantAdd:this.onUpdateChatParticipantAdd,updateChatParticipantDelete:this.onUpdateChatParticipantDelete,updateUserTyping:this.onUpdateUserTyping,updateChatUserTyping:this.onUpdateUserTyping,updateChannelUserTyping:this.onUpdateUserTyping,updatePeerBlocked:this.onUpdatePeerBlocked}),this.rootScope.addEventListener("chat_update",(e=>{var t,a;const s=this.chatsFull[e],n=this.appChatsManager.getChat(e);if(!s||!n)return;let i=!1;!!s.call!=!!(null===(t=n.pFlags)||void 0===t?void 0:t.call_active)&&(i=!0);const{photo:r}=n;if(r){const e="chatPhotoEmpty"!==r._;(e!==!(!s.chat_photo||"photoEmpty"===s.chat_photo._)||e&&r.photo_id!==(null===(a=s.chat_photo)||void 0===a?void 0:a.id))&&(i=!0)}i&&this.refreshFullPeer(e.toPeerId(!0))})),this.rootScope.addEventListener("channel_update",(e=>{this.refreshFullPeer(e.toPeerId(!0))})),this.rootScope.addEventListener("chat_full_update",(e=>{this.rootScope.dispatchEvent("peer_full_update",e.toPeerId(!0))})),this.rootScope.addEventListener("user_full_update",(e=>{this.rootScope.dispatchEvent("peer_full_update",e.toPeerId(!1))})),this.rootScope.addEventListener("invalidate_participants",(e=>{this.invalidateChannelParticipants(e)})),this.typingsInPeer={}}getProfile(e,t){return this.usersFull[e]&&!t&&Date.now(){this.appChatsManager.saveApiChats(t.chats,!0),this.appUsersManager.saveApiUsers(t.users);const a=t.full_user,s=e.toPeerId(!1);a.profile_photo&&(a.profile_photo=this.appPhotosManager.savePhoto(a.profile_photo,{type:"profilePhoto",peerId:s}));const n=a.bot_info;if(n){const t={type:"userFull",userId:e};n.description_document=this.appDocsManager.saveDoc(n.description_document,t),n.description_photo=this.appPhotosManager.savePhoto(n.description_photo,t)}return this.appNotificationsManager.savePeerSettings({peerId:s,settings:a.notify_settings}),this.usersFull[e]=a,this.fullExpiration[s]=Date.now()+ua,this.rootScope.dispatchEvent("user_full_update",e),a}})}getProfileByPeerId(e,t){return this.appPeersManager.isAnyChat(e)?this.getChatFull(e.toChatId(),t):this.getProfile(e.toUserId(),t)}getCachedFullChat(e){return this.chatsFull[e]}getCachedFullUser(e){return this.usersFull[e]}getCachedProfileByPeerId(e){return e.isUser()?this.getCachedFullUser(e.toUserId()):this.getCachedFullChat(e.toChatId())}getFullPhoto(e){return ha(this,void 0,void 0,(function*(){const t=yield this.getProfileByPeerId(e);switch(t._){case"userFull":return t.profile_photo;case"channelFull":case"chatFull":return t.chat_photo}}))}getChatFull(e,t){if(this.appChatsManager.isChannel(e))return this.getChannelFull(e,t);const a=e.toPeerId(!0),s=this.chatsFull[e];if(s&&!t&&Date.now(){this.appChatsManager.saveApiChats(t.chats,!0),this.appUsersManager.saveApiUsers(t.users);const s=t.full_chat;return s&&s.chat_photo&&s.chat_photo.id&&(s.chat_photo=this.appPhotosManager.savePhoto(s.chat_photo,{type:"profilePhoto",peerId:a})),s.call&&this.appGroupCallsManager.saveGroupCall(s.call,e),this.appNotificationsManager.savePeerSettings({peerId:a,settings:s.notify_settings}),this.chatsFull[e]=s,this.fullExpiration[a]=Date.now()+ua,this.rootScope.dispatchEvent("chat_full_update",e),s}})}getChatInviteLink(e,t){return ha(this,void 0,void 0,(function*(){const a=yield this.getChatFull(e);return!t&&a.exported_invite&&"chatInviteExported"==a.exported_invite._?a.exported_invite.link:this.apiManager.invokeApi("messages.exportChatInvite",{peer:this.appPeersManager.getInputPeerById(e.toPeerId(!0))}).then((t=>(void 0!==this.chatsFull[e]&&(this.chatsFull[e].exported_invite=t),t.link)))}))}getParticipants(e,t={_:"channelParticipantsRecent"},a=200,s=0){return this.appChatsManager.isChannel(e)?this.getChannelParticipants(e,t,a,s):Promise.resolve(this.getChatFull(e)).then((e=>{const a=e.participants;if("chatParticipants"!==a._)throw(0,X.Z)("CHAT_PRIVATE");if("channelParticipantsSearch"===t._&&t.q.trim()){const e=this.appUsersManager.createSearchIndex();a.participants.forEach((t=>{const a=t.user_id;e.indexObject(a,this.appUsersManager.getUserSearchText(a))}));const s=e.search(t.q),n=a.participants.filter((e=>s.has(e.user_id)));return Object.assign(Object.assign({},a),{participants:n})}return a}))}getParticipant(e,t){return this.appChatsManager.isChannel(e)?this.getChannelParticipant(e,t):this.getParticipants(e).then((e=>{(0,ue.Z)(e);const a=e.participants.find((e=>{if((0,xe.Z)(e)===t)return e}));if(!a)throw(0,X.Z)("USER_NOT_PARTICIPANT");return a}))}getChannelParticipants(e,t={_:"channelParticipantsRecent"},a=200,s=0){if("channelParticipantsRecent"===t._){const t=this.appChatsManager.getChat(e);if((null==t?void 0:t.pFlags)&&t.pFlags.broadcast&&!t.pFlags.creator&&!t.admin_rights)return Promise.reject()}return this.apiManager.invokeApiCacheable("channels.getParticipants",{channel:this.appChatsManager.getChannelInput(e),filter:t,offset:s,limit:a,hash:"0"},{cacheSeconds:60}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e)))}getChannelParticipant(e,t){return this.apiManager.invokeApiSingle("channels.getParticipant",{channel:this.appChatsManager.getChannelInput(e),participant:this.appPeersManager.getInputPeerById(t)}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e.participant)))}getChannelFull(e,t){const a=e.toPeerId(!0);return void 0!==this.chatsFull[e]&&!t&&Date.now(){this.appChatsManager.saveApiChats(t.chats,!0),this.appUsersManager.saveApiUsers(t.users);const s=t.full_chat;return s&&s.chat_photo.id&&(s.chat_photo=this.appPhotosManager.savePhoto(s.chat_photo,{type:"profilePhoto",peerId:a})),s.call&&this.appGroupCallsManager.saveGroupCall(s.call,e),this.appNotificationsManager.savePeerSettings({peerId:a,settings:s.notify_settings}),this.chatsFull[e]=s,this.fullExpiration[a]=Date.now()+ua,this.rootScope.dispatchEvent("chat_full_update",e),s},processError:t=>{if("CHANNEL_PRIVATE"===t.type){const t=this.appChatsManager.getChat(e);this.apiUpdatesManager.processUpdateMessage({_:"updates",updates:[{_:"updateChannel",channel_id:e}],chats:["channelForbidden"===t._?t:{_:"channelForbidden",id:e,access_hash:t.access_hash,title:t.title,pFlags:t.pFlags}],users:[]})}throw t}})}getMentions(e,t,a){const s=e=>{"@"===t.charAt(0)&&(t=t.slice(1));const a=new ae.Z({ignoreCase:!0}),s=new Map;e.forEach((e=>{a.indexObject(e.id,this.appUsersManager.getUserSearchText(e.id)),s.set(e.id,e.rating)}));const n=Array.from(a.search(t));return n.sort(((e,t)=>s.get(t)-s.get(e))),n};let n;return n=this.appChatsManager.isChannel(e)?this.getChannelParticipants(e,{_:"channelParticipantsMentions",q:t,top_msg_id:(0,oe.Z)(a)},50,0).then((e=>e.participants.map((e=>(0,xe.Z)(e))))):e?Promise.resolve(this.getChatFull(e)).then((e=>e.participants.participants.map((e=>e.user_id.toPeerId())))):Promise.resolve([]),Promise.all([this.appUsersManager.getTopPeers("bots_inline").catch((()=>[])),n]).then((e=>{const t=e[0].concat(e[1].map((e=>({id:e,rating:0}))));return s(t)}))}invalidateChannelParticipants(e){this.apiManager.clearCache("channels.getParticipants",(t=>t.channel.channel_id===e)),this.refreshFullPeer(e.toPeerId(!0))}refreshFullPeer(e){if(e.isUser()){const t=e.toUserId();delete this.usersFull[t],this.rootScope.dispatchEvent("user_full_update",t)}else{const t=e.toChatId();delete this.chatsFull[t],this.rootScope.dispatchEvent("chat_full_update",t)}}updateProfile(e,t,a){return this.apiManager.invokeApi("account.updateProfile",{first_name:e,last_name:t,about:a}).then((e=>{if(this.appUsersManager.saveApiUser(e),void 0!==a){const t=e.id.toPeerId(),s=this.usersFull[e.id];s&&(s.about=a),this.rootScope.dispatchEvent("peer_bio_edit",t)}return this.getProfile(e.id,!0)}))}uploadProfilePhoto(e){return this.apiManager.invokeApi("photos.uploadProfilePhoto",{file:e}).then((e=>{const t=e.photo;if(!e.users.length){const a=t.sizes.find((e=>"photoStrippedSize"===e._));e.users.push(Object.assign(Object.assign({},this.appUsersManager.getSelf()),{photo:{_:"userProfilePhoto",dc_id:t.dc_id,photo_id:t.id,stripped_thumb:null==a?void 0:a.bytes,pFlags:{}}}))}this.appUsersManager.saveApiUsers(e.users);const a=this.appPeersManager.peerId;this.appPhotosManager.savePhoto(e.photo,{type:"profilePhoto",peerId:a});const s=a.toUserId();this.apiUpdatesManager.processLocalUpdate({_:"updateUser",user_id:s})}))}deletePhotos(e){return this.apiManager.invokeApiSingle("photos.deletePhotos",{id:e.map((e=>wt(this.appPhotosManager.getPhoto(e))))}).then((e=>{}))}verifyParticipantForOnlineCount(e){const t=this.appUsersManager.getUser(e.user_id);return!(!t||!t.status||"userStatusOnline"!==t.status._)}reduceParticipantsForOnlineCount(e){return e.reduce(((e,t)=>e+ +this.verifyParticipantForOnlineCount(t)),0)}getOnlines(e){var t;return ha(this,void 0,void 0,(function*(){if(this.appChatsManager.isBroadcast(e))return 1;const a=yield this.getChatFull(e);if(this.appChatsManager.isMegagroup(e)){if(a.participants_count<=100){const t=yield this.getChannelParticipants(e,{_:"channelParticipantsRecent"},100);return this.reduceParticipantsForOnlineCount(t.participants)}const s=yield this.apiManager.invokeApiCacheable("messages.getOnlines",{peer:this.appChatsManager.getChannelInputPeer(e)},{cacheSeconds:60});return null!==(t=s.onlines)&&void 0!==t?t:1}const s=a.participants;return(null==s?void 0:s.participants)?this.reduceParticipantsForOnlineCount(s.participants):1}))}getTypingsKey(e,t){return e+(t?`_${t}`:"")}getPeerTypings(e,t){return this.typingsInPeer[this.getTypingsKey(e,t)]}}function _a(e,t){return e.some((e=>e instanceof Promise))?Promise.all(e).then(t):t(e)}var va=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Pa=["static_icon","appear_animation","select_animation","activate_animation","effect_animation","around_animation","center_icon"],ba={type:"reactions"};class Ma extends G{after(){this.rootScope.addEventListener("language_change",(()=>{this.availableReactions=void 0,this.getAvailableReactions()})),this.sendReactionPromises=new Map,this.lastSendingTimes=new Map,this.rootScope.addEventListener("user_auth",(()=>{setTimeout((()=>{Promise.resolve(this.getAvailableReactions()).then((e=>va(this,void 0,void 0,(function*(){for(const t of e)yield Promise.all([t.around_animation&&this.apiFileManager.downloadMedia({media:t.around_animation}),t.static_icon&&this.apiFileManager.downloadMedia({media:t.static_icon}),t.appear_animation&&this.apiFileManager.downloadMedia({media:t.appear_animation}),t.center_icon&&this.apiFileManager.downloadMedia({media:t.center_icon})]),yield(0,P.Z)(1e3)}))))}),7500)}))}getAvailableReactions(){return this.availableReactions?this.availableReactions:this.apiManager.invokeApiSingleProcess({method:"messages.getAvailableReactions",processResult:e=>{(0,ue.Z)(e);const t=this.availableReactions=e.reactions;for(const e of t)for(const t of Pa)e[t]&&(e[t]=this.appDocsManager.saveDoc(e[t],ba));return t},params:{hash:0}})}getActiveAvailableReactions(){return(0,q.Z)(this.getAvailableReactions(),(e=>e.filter((e=>!e.pFlags.inactive))))}getAvailableReactionsForPeer(e){const t=this.getActiveAvailableReactions();return e.isUser()?this.unshiftQuickReaction(t):_a([t,this.appProfileManager.getChatFull(e.toChatId()),this.getQuickReaction()],(([e,t,a])=>{var s;const n=null!==(s=t.available_reactions)&&void 0!==s?s:{_:"chatReactionsNone"};let i=[];return"chatReactionsAll"===n._?i=e:"chatReactionsSome"===n._&&(i=n.reactions.map((t=>e.find((e=>e.reaction===t.emoticon)))).filter(Boolean)),this.unshiftQuickReactionInner(i,a)}))}unshiftQuickReactionInner(e,t){if(t&&"reactionEmoji"!==t._&&"availableReaction"!==t._)return e;const a=t.emoticon||t.reaction,s=(0,Pe.Z)(e,(e=>e.reaction===a));return s&&e.unshift(s),e}unshiftQuickReaction(e,t=this.getQuickReaction()){return _a([e,t],(([e,t])=>this.unshiftQuickReactionInner(e,t)))}getAvailableReactionsByMessage(e){var t;if(!e)return[];const a=(null===(t=e.fwd_from)||void 0===t?void 0:t.channel_post)&&this.appPeersManager.isMegagroup(e.peerId)&&e.fwdFromId||e.peerId;return this.getAvailableReactionsForPeer(a)}isReactionActive(e){return!!this.availableReactions&&!!this.availableReactions.find((t=>t.reaction===e))}getQuickReaction(){return _a([this.apiManager.getConfig(),this.getAvailableReactions()],(([e,t])=>{const a=e.reactions_default;return"reactionEmoji"===(null==a?void 0:a._)?t.find((e=>e.reaction===a.emoticon)):a}))}getReactionCached(e){return this.availableReactions.find((t=>t.reaction===e))}getReaction(e){return(0,q.Z)(this.getAvailableReactions(),(()=>this.getReactionCached(e)))}getMessagesReactions(e,t){return this.apiManager.invokeApiSingleProcess({method:"messages.getMessagesReactions",params:{id:t.map((e=>(0,oe.Z)(e))),peer:this.appPeersManager.getInputPeerById(e)},processResult:e=>{this.apiUpdatesManager.processUpdateMessage(e)}})}getMessageReactionsList(e,t,a,s,n){return this.apiManager.invokeApiSingleProcess({method:"messages.getMessageReactionsList",params:{peer:this.appPeersManager.getInputPeerById(e),id:(0,oe.Z)(t),limit:a,reaction:s,offset:n},processResult:e=>(this.appUsersManager.saveApiUsers(e.users),e)})}setDefaultReaction(e){return this.apiManager.invokeApi("messages.setDefaultReaction",{reaction:e}).then((t=>va(this,void 0,void 0,(function*(){if(t){const t=yield this.apiManager.getConfig();t&&(t.reactions_default=e),this.rootScope.dispatchEvent("quick_reaction",e)}return t}))))}sendReaction(e,t,a){var s,n;return va(this,void 0,void 0,(function*(){"availableReaction"===t._&&(t={_:"reactionEmoji",emoticon:t.reaction});const i=yield this.apiManager.getLimit("reactions"),r=e.peerId+"_"+e.mid;if(this.lastSendingTimes.get(r))return;this.lastSendingTimes.set(r,Date.now()),setTimeout((()=>{this.lastSendingTimes.delete(r)}),333);const{peerId:o,mid:p}=e,d=this.appPeersManager.peerId,f=e=>{--e.count,delete e.chosen_order,(0,Jt.Z)(t,e.reaction)&&(t=void 0),e.count||(0,M.Z)(l.results,e),l.recent_reactions&&(0,Pe.Z)(l.recent_reactions,(t=>(0,Jt.Z)(t.reaction,e.reaction)&&this.appPeersManager.getPeerId(t.peer_id)===d)),l.results.length||(l=void 0)},c=(null===(n=null===(s=e.reactions)||void 0===s?void 0:s.pFlags)||void 0===n?void 0:n.can_see_list)||!this.appPeersManager.isBroadcast(e.peerId)||e.peerId.isUser();e.reactions||(e.reactions={_:"messageReactions",results:[],recent_reactions:c?[]:void 0,pFlags:{can_see_list:c||void 0}});let l=a?e.reactions:(0,ve.Z)(e.reactions);const m=l.results.filter((e=>void 0!==e.chosen_order));m.sort(((e,t)=>t.chosen_order-e.chosen_order));const g=[],h=m.findIndex((e=>(0,Jt.Z)(e.reaction,t)));-1!==h&&g.push(...m.splice(h,1)),g.push(...m.splice(i-+(-1===h))),g.forEach((e=>{m.forEach((t=>{t.chosen_order>e.chosen_order&&--t.chosen_order})),f(e)}));const u=m.length;if(m.forEach(((e,t)=>{e.chosen_order=u-1-t})),t){l||(l={_:"messageReactions",results:[],pFlags:{}},c&&(l.pFlags.can_see_list=!0));let e=l.results.findIndex((e=>(0,Jt.Z)(e.reaction,t))),a=-1!==e&&l.results[e];if(a||(a={_:"reactionCount",count:0,reaction:t},e=l.results.push(a)-1),++a.count,a.chosen_order=m.length?m[0].chosen_order+1:0,m.unshift(a),!l.recent_reactions&&c&&(l.recent_reactions=[]),l.recent_reactions){const e={_:"messagePeerReaction",reaction:t,peer_id:this.appPeersManager.getOutputPeer(d),pFlags:{}};this.appPeersManager.isMegagroup(o),l.recent_reactions.unshift(e),l.recent_reactions=l.recent_reactions.slice(0,3)}}const y=this.availableReactions;if(l&&(null==y?void 0:y.length)){const e=new Map;y.forEach(((t,a)=>{e.set(t.reaction,a)})),l.results.sort(((t,a)=>{var s,n;const i=t.reaction.document_id||t.reaction.emoticon,r=a.reaction.document_id||a.reaction.emoticon;return a.count-t.count||(null!==(s=e.get(i))&&void 0!==s?s:0)-(null!==(n=e.get(r))&&void 0!==n?n:0)}))}if(a)return e.reactions=l,this.rootScope.dispatchEvent("messages_reactions",[{message:e,changedResults:[]}]),Promise.resolve();this.apiUpdatesManager.processLocalUpdate({_:"updateMessageReactions",peer:e.peer_id,msg_id:e.id,reactions:l,local:!0});const _=[o,p].join("-"),v=(0,oe.Z)(p),P=this.apiManager.invokeApi("messages.sendReaction",{peer:this.appPeersManager.getInputPeerById(o),msg_id:v,reaction:m.map((e=>e.reaction))}).then((e=>{(0,ue.Z)(e);const t=e.updates.findIndex((e=>"updateEditMessage"===e._||"updateEditChannelMessage"===e._));if(-1!==t){const a=e.updates[t];e.updates[t]={_:"updateMessageReactions",msg_id:v,peer:this.appPeersManager.getOutputPeer(o),reactions:a.message.reactions,pts:a.pts,pts_count:a.pts_count}}this.apiUpdatesManager.processUpdateMessage(e)})).catch((t=>{var a;"REACTION_INVALID"===t.type&&this.sendReactionPromises.get(_)===P&&this.sendReaction(e,null===(a=m[0])||void 0===a?void 0:a.reaction,!0)})).finally((()=>{this.sendReactionPromises.get(_)===P&&this.sendReactionPromises.delete(_)}));return this.sendReactionPromises.set(_,P),P}))}}var Sa=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Ia={EMOJI:"inputStickerSetAnimatedEmoji",EMOJI_ANIMATIONS:"inputStickerSetAnimatedEmojiAnimations",PREMIUM_GIFTS:"inputStickerSetPremiumGifts",GENERIC_ANIMATIONS:"inputStickerSetEmojiGenericAnimations",DEFAULT_STATUSES:"inputStickerSetEmojiDefaultStatuses",DEFAULT_TOPIC_ICONS:"inputStickerSetEmojiDefaultTopicIcons"},Ca=new Set(Object.values(Ia));class wa extends G{constructor(){super(...arguments),this.storage=new W.Z(H.Z,"stickerSets"),this.processAllStickersResult=e=>((0,ue.Z)(e),(0,ne.Z)(e.sets,((e,t,a)=>{e.pFlags.videos&&!i().IS_WEBM_SUPPORTED&&a.splice(t,1)})),e)}after(){this.getStickerSetPromises={},this.getStickersByEmoticonsPromises={},this.sounds={},this.names={},this.rootScope.addEventListener("user_auth",(()=>{setTimeout((()=>{this.getAnimatedEmojiStickerSet()}),1e3),this.getGreetingStickersPromise||void 0!==this.getGreetingStickersTimeout||(this.getGreetingStickersTimeout=T.Z.setTimeout((()=>{this.getGreetingStickersTimeout=void 0,this.getGreetingSticker(!0)}),5e3))})),this.rootScope.addEventListener("app_config",(()=>this.onStickersUpdated("faved",!0))),this.apiUpdatesManager.addMultipleEventsListeners({updateNewStickerSet:e=>{const t=e.stickerset;this.saveStickerSet(t,t.set.id),this.rootScope.dispatchEvent("stickers_installed",t.set)},updateRecentStickers:()=>this.onStickersUpdated("recent",!0),updateFavedStickers:()=>this.onStickersUpdated("faved",!0),updateMoveStickerSetToTop:e=>{this.rootScope.dispatchEvent("stickers_top",e.stickerset)}})}onStickersUpdated(e,t){return Sa(this,void 0,void 0,(function*(){const a=yield"faved"===e?this.getFavedStickersStickers(t):this.getRecentStickersStickers(t);this.rootScope.dispatchEvent("stickers_updated",{type:e,stickers:a})}))}getGreetingSticker(e=!1){return this.getGreetingStickersTimeout&&(clearTimeout(this.getGreetingStickersTimeout),this.getGreetingStickersTimeout=void 0),this.getGreetingStickersPromise||(this.getGreetingStickersPromise=this.getStickersByEmoticon("๐Ÿ‘‹โญ๏ธ",!1).then((e=>{if(!e.length)throw"NO_STICKERS";this.greetingStickers=e.slice(),this.greetingStickers.sort(((e,t)=>Math.random()-Math.random()))}))),this.getGreetingStickersPromise.then((()=>{let t;return e||(t=this.greetingStickers.shift(),this.greetingStickers.push(t)),this.apiFileManager.downloadMedia({media:this.greetingStickers[0]}),t}))}saveStickers(e){(0,ne.Z)(e,((t,a)=>{(t=this.appDocsManager.saveDoc(t))?e[a]=t:e.splice(a,1)}))}canUseStickerSetCache(e,t){var a;return e&&(null===(a=e.documents)||void 0===a?void 0:a.length)&&(Date.now()-e.refreshTime<36e5||t)}getStickerSet(e,t={}){let{id:a}=e;if(e.access_hash||(e=this.names[a]||e,a=e.id),this.getStickerSetPromises[a])return this.getStickerSetPromises[a];if(!t.overwrite){const e=this.storage.getFromCache(a);if(this.canUseStickerSetCache(e,t.useCache))return e}const s=this.getStickerSetPromises[a]=new Promise((n=>Sa(this,void 0,void 0,(function*(){if(!t.overwrite){const e=yield this.storage.get(a);if(this.canUseStickerSetCache(e,t.useCache))return this.saveStickers(e.documents),n(e),void(this.getStickerSetPromises[a]===s&&delete this.getStickerSetPromises[a])}try{const s=yield this.apiManager.invokeApi("messages.getStickerSet",{stickerset:this.getStickerSetInput(e),hash:0}),i=t.saveById?a:s.set.id;this.saveStickerSet(s,i),n(s)}catch(e){n(null)}this.getStickerSetPromises[a]===s&&delete this.getStickerSetPromises[a]}))));return s}getLocalStickerSet(e){return this.getStickerSet({id:e},{saveById:!0})}getAnimatedEmojiStickerSet(){return Promise.all([this.getLocalStickerSet(Ia.EMOJI),this.getLocalStickerSet(Ia.EMOJI_ANIMATIONS),this.getAnimatedEmojiSounds()]).then((([e,t])=>({emoji:e,animations:t})))}getAnimatedEmojiSounds(e){if(this.getAnimatedEmojiSoundsPromise&&!e)return this.getAnimatedEmojiSoundsPromise;const t=this.getAnimatedEmojiSoundsPromise=Promise.all([this.apiManager.getAppConfig(e),this.apiManager.getConfig()]).then((([e,a])=>{if(this.getAnimatedEmojiSoundsPromise===t)for(const t in e.emojies_sounds){const s=e.emojies_sounds[t],n=atob(s.file_reference_base64.replace(/-/g,"+").replace(/_/g,"/")),i=new Uint8Array(n.length);for(let e=0,t=i.length;e((0,ue.Z)(e),this.recentStickers=e.stickers,this.saveStickers(e.stickers),e),overwrite:e})}))}getRecentStickersStickers(e){if(e)this.recentStickers=void 0;else if(this.recentStickers)return this.recentStickers;return this.getRecentStickers(e).then((()=>this.recentStickers))}saveRecentSticker(e,t,a){const s=this.appDocsManager.getDoc(e);if((0,Pe.Z)(this.recentStickers,(t=>t.id===e)),!t){this.recentStickers.unshift(s);const e=(0,bt.Z)(s.stickerEmojiRaw);for(const t in this.getStickersByEmoticonsPromises)this.getStickersByEmoticonsPromises[t].then((a=>{const n=(0,Pe.Z)(a,(e=>e.id===s.id));n?a.unshift(n):t.includes(e)&&a.unshift(s)}))}return this.rootScope.dispatchEvent("sticker_updated",{type:"recent",faved:!t,document:s}),t&&this.onStickersUpdated("recent",!1),this.apiManager.invokeApi("messages.saveRecentSticker",{id:Kt(s),unsave:t,attached:a})}cleanEmoji(e){return e.replace(/\ufe0f/g,"").replace(/๐Ÿป|๐Ÿผ|๐Ÿฝ|๐Ÿพ|๐Ÿฟ/g,"")}getAnimatedEmojiSticker(e,t){const a=t?Ia.EMOJI_ANIMATIONS:Ia.EMOJI,s=this.storage.getFromCache(a);if(!(null==s?void 0:s.documents))return;t&&["๐Ÿงก","๐Ÿ’›","๐Ÿ’š","๐Ÿ’™","๐Ÿ’œ","๐Ÿ–ค","๐Ÿค","๐ŸคŽ"].includes(e)&&(e="โค๏ธ"),e=this.cleanEmoji(e);const n=s.packs.find((t=>t.emoticon===e));return n?this.appDocsManager.getDoc(n.documents[0]):void 0}getAnimatedEmojiSoundDocument(e){return this.sounds[this.cleanEmoji(e)]}preloadAnimatedEmojiSticker(e){const t=this.getAnimatedEmojiStickerSet().then((()=>this.getAnimatedEmojiSticker(e)));return Promise.all([t,this.preloadAnimatedEmojiStickerAnimation(e)]).then((([e,t])=>({doc:e,animation:null==t?void 0:t.doc,sound:null==t?void 0:t.sound})))}preloadAnimatedEmojiStickerAnimation(e){return this.getAnimatedEmojiStickerSet().then((()=>this.getAnimatedEmojiSticker(e,!0))).then((t=>{if(!t)return;const a=this.getAnimatedEmojiSoundDocument(e);return Promise.all([this.preloadSticker(t.id),a?this.preloadSticker(a.id):void 0]).then((()=>({doc:t,sound:a})))}))}preloadSticker(e,t){var a;const s=this.appDocsManager.getDoc(e);return this.apiFileManager.downloadMedia({media:s,thumb:t?null===(a=s.video_thumbs)||void 0===a?void 0:a[0]:void 0})}saveStickerSet(e,t){const a={_:"messages.stickerSet",set:e.set,packs:e.packs,documents:e.documents,keywords:e.keywords};let s=this.storage.getFromCache(t);s?Object.assign(s,a):s=this.storage.setToCache(t,a),s.set.short_name&&(this.names[s.set.short_name]=this.getStickerSetInput(a.set)),this.saveStickers(e.documents);const n=s.set.installed_date||Ca.has(t);s.refreshTime=Date.now(),this.storage.set({[t]:s},!n)}getStickerSetThumbDownloadOptions(e){var t;const a=e.thumbs.find((e=>"photoSize"===e._)),s=e.thumb_dc_id,n=null===(t=e.pFlags)||void 0===t?void 0:t.animated;return{dcId:s,location:{_:"inputStickerSetThumb",stickerset:this.getStickerSetInput(e),thumb_version:e.thumb_version},size:a.size,mimeType:n?"application/x-tgsticker":"image/webp"}}getStickerSetInput(e){return Ca.has(e.id)?{_:e.id}:e.access_hash?{_:"inputStickerSetID",id:e.id,access_hash:e.access_hash}:{_:"inputStickerSetShortName",short_name:""+e.id}}getFeaturedStickers(){return Sa(this,void 0,void 0,(function*(){return(yield this.apiManager.invokeApiHashable({method:"messages.getFeaturedStickers",processResult:e=>((0,ue.Z)(e),(0,ne.Z)(e.sets,((e,t,a)=>{e.set.pFlags.videos&&!i().IS_WEBM_SUPPORTED&&a.splice(t,1)})),e.sets.forEach((e=>{this.saveStickerSet({set:e.set,documents:[],packs:[],keywords:[]},e.set.id)})),e)})).sets}))}getPromoPremiumStickers(){return this.getStickersByEmoticon("โญ๏ธโญ๏ธ",!1)}getPremiumStickers(){return this.getStickersByEmoticon("๐Ÿ“‚โญ๏ธ",!1)}getFavedStickers(e){return this.apiManager.invokeApiHashable({method:"messages.getFavedStickers",processResult:e=>((0,ue.Z)(e),this.saveStickers(e.stickers),this.favedStickers=e.stickers,e),overwrite:e})}getFavedStickersStickers(e){if(e)this.favedStickers=void 0;else if(this.favedStickers)return this.favedStickers;return this.getFavedStickers(e).then((()=>this.favedStickers))}getFavedStickersLimit(){return this.apiManager.getLimit("favedStickers")}faveSticker(e,t){return Sa(this,void 0,void 0,(function*(){this.favedStickers||(yield this.getFavedStickersStickers());const a=yield this.getFavedStickersLimit(),s=this.appDocsManager.getDoc(e);return(0,Pe.Z)(this.favedStickers,(e=>e.id===s.id)),t||(this.favedStickers.unshift(s),this.favedStickers.splice(a,this.favedStickers.length-a)),this.rootScope.dispatchEvent("sticker_updated",{type:"faved",faved:!t,document:s}),this.apiManager.invokeApi("messages.faveSticker",{id:Kt(s),unfave:t}).then((()=>{t&&this.onStickersUpdated("faved",!0)}))}))}toggleStickerSet(e){return Sa(this,void 0,void 0,(function*(){if((e=this.storage.getFromCache(e.id).set).installed_date){if(yield this.apiManager.invokeApi("messages.uninstallStickerSet",{stickerset:this.getStickerSetInput(e)}))return delete e.installed_date,this.rootScope.dispatchEvent("stickers_deleted",e),this.storage.delete(e.id,!0),!0}else if(yield this.apiManager.invokeApi("messages.installStickerSet",{stickerset:this.getStickerSetInput(e),archived:!1}))return e.installed_date=(0,te.Z)(!0),this.rootScope.dispatchEvent("stickers_installed",e),!0;return!1}))}toggleStickerSets(e){return Promise.all(e.map((e=>this.toggleStickerSet(e))))}searchStickerSets(e,t=!0){return Sa(this,void 0,void 0,(function*(){const a=t?1:0,s=yield this.apiManager.invokeApiHashable({method:"messages.searchStickerSets",params:{flags:a,exclude_featured:t||void 0,q:e},processResult:e=>((0,ue.Z)(e),(0,ne.Z)(e.sets,((e,t,a)=>{e.set.pFlags.videos&&!i().IS_WEBM_SUPPORTED&&a.splice(t,1)})),e.sets.forEach((e=>{this.saveStickerSet({set:e.set,documents:[],packs:[],keywords:[]},e.set.id)})),e)}),n=[],r=this.storage.getCache();for(const t in r){const{set:a}=r[t];a.title.toLowerCase().includes(e.toLowerCase())&&!s.sets.find((e=>e.set.id===a.id))&&n.push({_:"stickerSetCovered",set:a,cover:null})}return s.sets.concat(n)}))}getAllStickers(){return this.apiManager.invokeApiHashable({method:"messages.getAllStickers",processResult:this.processAllStickersResult})}getEmojiStickers(){return this.apiManager.invokeApiHashable({method:"messages.getEmojiStickers",processResult:this.processAllStickersResult})}preloadStickerSets(){return this.getAllStickers().then((e=>Promise.all(e.sets.map((e=>this.getStickerSet(e,{useCache:!0}))))))}getStickersByEmoticon(e,t=!0){return e=(0,bt.Z)(e),this.getStickersByEmoticonsPromises[e]?this.getStickersByEmoticonsPromises[e]:this.getStickersByEmoticonsPromises[e]=Promise.all([this.apiManager.invokeApiHashable({method:"messages.getStickers",params:{emoticon:e},processResult:e=>e}),t?this.preloadStickerSets():[],t?this.getRecentStickers():void 0]).then((([t,a,s])=>{const n=t.stickers.map((e=>this.appDocsManager.saveDoc(e))),r=[],o=[],p=t=>{for(const a of t)if((0,bt.Z)(a.emoticon).includes(e))for(const e of a.documents){const t=this.appDocsManager.getDoc(e);(t.animated?r:o).push(t)}};if(s){p(s.packs);const e=s.stickers;[r,o].forEach((t=>{t.sort(((t,a)=>e.indexOf(t)-e.indexOf(a)))}))}for(const e of a)p(e.packs);const d=[...new Set(r.concat(o,n))];return(0,ne.Z)(d,((e,t,a)=>{(3===e.sticker&&!i().IS_WEBM_SUPPORTED||!this.rootScope.premium&&(0,zt.Z)(e))&&a.splice(t,1)})),d}))}clearRecentStickers(){return this.recentStickers&&(this.recentStickers.length=0,this.onStickersUpdated("recent",!1)),this.apiManager.invokeApi("messages.clearRecentStickers")}}var ka=a(467),Aa=a(8493);class Ua extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{if(e)this.users={},this.usernames={};else for(const e in this.users){if(!e)continue;const t=e.toPeerId();if(!this.peersStorage.isPeerNeeded(t)){const t=this.users[e];this.modifyUsernamesCache(t,!1),this.storage.delete(e),delete this.users[e]}}this.getTopPeersPromises={},this.contactsIndex=this.createSearchIndex(),this.contactsFillPromise=void 0,this.contactsList=new Set,this.updatedContactsList=!1},this.updateUsersStatuses=()=>{const e=(0,te.Z)(!0);for(const t in this.users){const a=this.users[t];this.updateUserStatus(a,e)}}}after(){return this.clear(!0),setInterval(this.updateUsersStatuses,6e4),this.rootScope.addEventListener("state_synchronized",this.updateUsersStatuses),this.apiUpdatesManager.addMultipleEventsListeners({updateUserStatus:e=>{const t=e.user_id,a=this.users[t];a&&(a.status=e.status,a.status&&("expires"in a.status&&(a.status.expires-=this.timeManager.getServerTimeOffset()),"was_online"in a.status&&(a.status.was_online-=this.timeManager.getServerTimeOffset())),this.rootScope.dispatchEvent("user_update",t),this.setUserToStateIfNeeded(a))},updateUserName:e=>{const t=e.user_id,a=this.users[t];a&&(this.forceUserOnline(t),this.saveApiUser(Object.assign(Object.assign({},a),{first_name:e.first_name,last_name:e.last_name,username:void 0,usernames:e.usernames}),!0))}}),this.rootScope.addEventListener("language_change",(e=>{const t=this.getSelf().id;this.contactsIndex.indexObject(t,this.getUserSearchText(t))})),Promise.all([this.appStateManager.getState(),this.appStoragesManager.loadStorage("users")]).then((([e,{results:t,storage:a}])=>{this.storage=a,this.saveApiUsers(t);for(let a=0,s=t.length;a{if(!this.appPeersManager.isUser(e))return;const t=e.toUserId();this.storage.getFromCache(t)||this.storage.set({[t]:this.getUser(t)})})),this.peersStorage.addEventListener("peerUnneeded",(e=>{if(!this.appPeersManager.isUser(e))return;const t=e.toUserId();this.storage.getFromCache(t)&&this.storage.delete(t)}))}))}get userId(){return this.rootScope.myId.toUserId()}onContactsModified(e){e&&this.appStateManager.pushToState("contactsListCachedTime",(0,te.Z)(!0))}pushRecentSearch(e){return this.appStateManager.getState().then((t=>{const a=t.recentSearch||[];if(a[0]!==e){(0,M.Z)(a,e),a.unshift(e),a.length>20&&(a.length=20),this.appStateManager.pushToState("recentSearch",a);for(const e of a)this.peersStorage.requestPeer(e,"recentSearch")}}))}clearRecentSearch(){return this.appStateManager.getState().then((e=>{const t=e.recentSearch||[];for(const e of t)this.peersStorage.releasePeer(e,"recentSearch");t.length=0,this.appStateManager.pushToState("recentSearch",t)}))}fillContacts(){var e;if(this.contactsFillPromise&&this.updatedContactsList)return{cached:this.contactsFillPromise.isFulfilled,promise:this.contactsFillPromise};this.updatedContactsList=!0;const t=(0,v.Z)();return this.apiManager.invokeApi("contacts.getContacts").then((e=>{"contacts.contacts"===e._&&(this.contactsList.clear(),this.saveApiUsers(e.users),e.contacts.forEach((e=>{this.pushContact(e.user_id)})),this.onContactsModified(!0),this.contactsFillPromise=t),t.resolve(this.contactsList)}),(()=>{this.updatedContactsList=!1})),{cached:null===(e=this.contactsFillPromise)||void 0===e?void 0:e.isFulfilled,promise:this.contactsFillPromise||(this.contactsFillPromise=t)}}resolveUsername(e){"@"===e[0]&&(e=e.slice(1)),e=e.toLowerCase();const t=this.usernames[e];return t?this.appPeersManager.getPeer(t):this.apiManager.invokeApiSingleProcess({method:"contacts.resolveUsername",params:{username:e},processResult:e=>this.processResolvedPeer(e)})}processResolvedPeer(e){return this.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),this.appPeersManager.getPeer((0,le.Z)(e.peer))}resolvePhone(e){return this.apiManager.invokeApi("contacts.resolvePhone",{phone:e}).then((e=>this.processResolvedPeer(e)))}pushContact(e){this.contactsList.add(e),this.contactsIndex.indexObject(e,this.getUserSearchText(e)),this.peersStorage.requestPeer(e.toPeerId(),"contact")}popContact(e){this.contactsList.delete(e),this.contactsIndex.indexObject(e,""),this.peersStorage.releasePeer(e.toPeerId(),"contact")}getUserSearchText(e){const t=this.users[e];return t?[t.first_name,t.last_name,t.phone,...(0,$t.Z)(t),t.pFlags.self?"Saved Messages":""].filter(Boolean).join(" "):""}getContacts(e,t=!1,a="name"){return this.fillContacts().promise.then((s=>{let n=[...s];if(e){const t=this.contactsIndex.search(e);n=[...n].filter((e=>t.has(e)))}"name"===a?n.sort(((e,t)=>{const a=(this.users[e]||{}).sortName||"",s=(this.users[t]||{}).sortName||"";return a.localeCompare(s)})):"online"===a&&n.sort(((e,t)=>{const a=this.getUserStatusForSort(this.getUser(e).status);return this.getUserStatusForSort(this.getUser(t).status)-a}));const i=this.userId;return(0,M.Z)(n,i),t&&this.testSelfSearch(e)&&n.unshift(i),n}))}getContactsPeerIds(e,t,a,s){return this.getContacts(e,t,a).then((e=>{const t=e.map((e=>e.toPeerId(!1)));return s?t.slice(0,s):t}))}toggleBlock(e,t){return this.apiManager.invokeApiSingle(t?"contacts.block":"contacts.unblock",{id:this.appPeersManager.getInputPeerById(e)}).then((a=>(a&&this.apiUpdatesManager.processLocalUpdate({_:"updatePeerBlocked",peer_id:this.appPeersManager.getOutputPeer(e),blocked:t}),a)))}testSelfSearch(e){const t=this.getSelf(),a=this.createSearchIndex();return a.indexObject(t.id,this.getUserSearchText(t.id)),a.search(e).has(t.id)}createSearchIndex(){return new ae.Z({clearBadChars:!0,ignoreCase:!0,latinize:!0,includeTag:!0})}saveApiUsers(e,t){e.saved||(e.saved=!0,e.forEach((e=>this.saveApiUser(e,t))))}modifyUsernamesCache(e,t){const a=(0,$t.Z)(e);if(!a.length)return;const s=a.map((e=>function(e){return e&&e.toLowerCase()||""}(e)));t?s.forEach((t=>{this.usernames[t]=e.id.toPeerId("user"!==e._)})):s.forEach((e=>{delete this.usernames[e]}))}setUsernameToCache(e,t){return!(t&&t.username===e.username&&(0,Y.Z)(t.usernames,e.usernames)||(this.modifyUsernamesCache(t,!1),this.modifyUsernamesCache(e,!0),0))}saveApiUser(e,t){var a,s,n,i;if(!e||"userEmpty"===e._)return;const r=e.id,o=this.users[r];if(null!==(a=e.pFlags)&&void 0!==a||(e.pFlags={}),e.pFlags.min&&void 0!==o)return;const p=this.setUsernameToCache(e,o);if(o&&void 0!==o.sortName&&o.first_name===e.first_name&&o.last_name===e.last_name)e.sortName=o.sortName;else{const t=e.first_name+(e.last_name?" "+e.last_name:"");e.sortName=e.pFlags.deleted?"":(0,ka.ZP)(t,!1)}if(e.status&&(e.status.expires&&(e.status.expires-=this.timeManager.getServerTimeOffset()),e.status.was_online&&(e.status.was_online-=this.timeManager.getServerTimeOffset())),"userProfilePhotoEmpty"===(null===(s=e.photo)||void 0===s?void 0:s._)&&delete e.photo,void 0===o)this.users[r]=e;else{const t=e.first_name!==o.first_name||e.last_name!==o.last_name||p,a=(null===(n=o.photo)||void 0===n?void 0:n.photo_id)!==(null===(i=e.photo)||void 0===i?void 0:i.photo_id),s=o.pFlags.premium!==e.pFlags.premium||o.pFlags.verified!==e.pFlags.verified||o.pFlags.scam!==e.pFlags.scam||o.pFlags.fake!==e.pFlags.fake,d=!!o.pFlags.contact,f=!!e.pFlags.contact;re(o,e),this.rootScope.dispatchEvent("user_update",r),d!==f&&this.onContactUpdated(r,f,d),a&&this.rootScope.dispatchEvent("avatar_update",{peerId:e.id.toPeerId()}),(t||s)&&this.rootScope.dispatchEvent("peer_title_edit",{peerId:e.id.toPeerId()})}this.checkPremium(e,o),this.setUserToStateIfNeeded(e)}checkPremium(e,t){if(e.pFlags.self){const a=!!e.pFlags.premium;this.rootScope.premium!==a&&this.rootScope.dispatchEvent("premium_toggle_private",{isNew:!t,isPremium:a})}}setUserToStateIfNeeded(e){this.peersStorage.isPeerNeeded(e.id.toPeerId())&&this.storage.set({[e.id]:e})}isUserOnlineVisible(e){return this.getUserStatusForSort(e)>3}getUserStatusForSort(e){if("object"!=typeof e){const t=this.getUser(e);e=null==t?void 0:t.status}if(e){const t="userStatusOnline"===e._?e.expires:"userStatusOffline"===e._?e.was_online:0;if(t)return t;switch(e._){case"userStatusRecently":return 3;case"userStatusLastWeek":return 2;case"userStatusLastMonth":return 1}}return 0}getUser(e){return(0,fe.Z)(e)?e:this.users[e]}getUserStatus(e){return this.isRegularUser(e)&&!this.users[e].pFlags.self&&this.users[e].status}getUserPhone(e){return t=this,a=void 0,n=function*(){const t=this.getUser(e);if(!(null==t?void 0:t.phone))return;const a=yield this.apiManager.getAppConfig();return{phone:t.phone,isAnonymous:a.fragment_prefixes.some((e=>t.phone.startsWith(e)))}},new((s=void 0)||(s=Promise))((function(e,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof s?a:new s((function(e){e(a)}))).then(r,o)}p((n=n.apply(t,a||[])).next())}));var t,a,s,n}getSelf(){return this.getUser(this.userId)}isBot(e){return this.users[e]&&!!this.users[e].pFlags.bot}isAttachMenuBot(e){return this.isBot(e)&&!!this.users[e].pFlags.bot_attach_menu}isContact(e){return this.contactsList.has(e)||!(!this.users[e]||!this.users[e].pFlags.contact)}isRegularUser(e){const t=this.users[e];return t&&!this.isBot(e)&&!t.pFlags.deleted&&!t.pFlags.support}isNonContactUser(e){return this.isRegularUser(e)&&!this.isContact(e)&&e!==this.userId}hasUser(e,t){const a=this.users[e];return(0,fe.Z)(a)&&(t||!a.pFlags.min)}getUserString(e){const t=this.getUser(e);return"u"+e+(t.access_hash?"_"+t.access_hash:"")}getUserInput(e){const t=this.getUser(e);return t.pFlags&&t.pFlags.self?{_:"inputUserSelf"}:{_:"inputUser",user_id:e,access_hash:t.access_hash}}getUserInputPeer(e){return{_:"inputPeerUser",user_id:e,access_hash:this.getUser(e).access_hash}}getContactMediaInput(e){const t=this.getUser(e);return{_:"inputMediaContact",first_name:t.first_name,last_name:t.last_name,phone_number:t.phone,vcard:"",user_id:e}}updateUserStatus(e,t=(0,te.Z)(!0)){e.status&&"userStatusOnline"===e.status._&&e.status.expires=60)return}else if(this.apiUpdatesManager.updatesState.syncLoading)return;const s=this.getUser(e);!(null==s?void 0:s.status)||"userStatusOnline"===s.status._||"userStatusEmpty"===s.status._||s.pFlags.support||s.pFlags.deleted||(s.status={_:"userStatusOnline",expires:a+60},this.rootScope.dispatchEvent("user_update",e),this.setUserToStateIfNeeded(s))}importContact(e,t,a){return this.importContacts([{first_name:e,last_name:t,phones:[a]}]).then((e=>{if(!e.length){const e=new Error;throw e.type="NO_USER",e}return e[0]}))}importContacts(e){const t=[];for(let a=0;a(this.saveApiUsers(e.users),e.imported.map((e=>(this.onContactUpdated(e.user_id,!0),e.user_id))))))}getTopPeers(e){return this.getTopPeersPromises[e]?this.getTopPeersPromises[e]:this.getTopPeersPromises[e]=this.appStateManager.getState().then((t=>{const a=t.topPeersCache[e];return a&&a.cachedTime+864e5>Date.now()&&a.peers?a.peers:this.apiManager.invokeApi("contacts.getTopPeers",{[e]:!0,offset:0,limit:15,hash:"0"}).then((a=>{let s=[];return"contacts.topPeers"===a._&&(this.saveApiUsers(a.users),this.appChatsManager.saveApiChats(a.chats),a.categories.length&&(s=a.categories[0].peers.map((e=>{const t=(0,le.Z)(e.peer);return this.peersStorage.requestPeer(t,"topPeer"),{id:t,rating:e.rating}})))),t.topPeersCache[e]={peers:s,cachedTime:Date.now()},this.appStateManager.pushToState("topPeersCache",t.topPeersCache),s}))}))}getBlocked(e=0,t=0){return this.apiManager.invokeApiSingle("contacts.getBlocked",{offset:e,limit:t}).then((e=>(this.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),{count:"contacts.blocked"===e._?e.users.length+e.chats.length:e.count,peerIds:e.users.map((e=>e.id.toPeerId())).concat(e.chats.map((e=>e.id.toPeerId(!0))))})))}getLocated(e,t,a,s=!1,n=0){const i={_:"inputGeoPoint",lat:e,long:t,accuracy_radius:a};return this.apiManager.invokeApi("contacts.getLocated",{geo_point:i,background:s}).then((e=>(this.apiUpdatesManager.processUpdateMessage(e),e)))}searchContacts(e,t=20){const a=(0,Nt.Z)(e);if(a.length&&a[0].length===e.trim().length&&"messageEntityUrl"===a[0]._)try{const t=new URL(qe(e).url).pathname.slice(1);t&&(e=t)}catch(e){}return this.apiManager.invokeApiCacheable("contacts.search",{q:e,limit:t},{cacheSeconds:60}).then((e=>(this.saveApiUsers(e.users),this.appChatsManager.saveApiChats(e.chats),{my_results:(0,we.Z)(e.my_results.map((e=>(0,le.Z)(e)))),results:e.results.map((e=>(0,le.Z)(e)))})))}onContactUpdated(e,t,a=this.isContact(e)){t!==a&&(t?this.pushContact(e):this.popContact(e),this.onContactsModified(),this.rootScope.dispatchEvent("contacts_update",e))}updateUsername(e){return this.apiManager.invokeApi("account.updateUsername",{username:e}).then((e=>{this.saveApiUser(e)}))}setUserStatus(e,t){if(this.isBot(e))return;const a=this.users[e];if(a){const s=t?{_:"userStatusOffline",was_online:(0,te.Z)(!0)}:{_:"userStatusOnline",expires:(0,te.Z)(!0)+50};a.status=s,this.rootScope.dispatchEvent("user_update",e),this.setUserToStateIfNeeded(a)}}updateMyOnlineStatus(e){return this.setUserStatus(this.getSelf().id,e),this.apiManager.invokeApiSingle("account.updateStatus",{offline:e})}addContact(e,t,a,s,n){return this.apiManager.invokeApi("contacts.addContact",{id:this.getUserInput(e),first_name:t,last_name:a,phone:s,add_phone_privacy_exception:n}).then((t=>{this.apiUpdatesManager.processUpdateMessage(t,{override:!0}),this.onContactUpdated(e,!0)}))}deleteContacts(e){return this.apiManager.invokeApi("contacts.deleteContacts",{id:e.map((e=>this.getUserInput(e)))}).then((t=>{this.apiUpdatesManager.processUpdateMessage(t,{override:!0}),e.forEach((e=>{this.onContactUpdated(e,!1)}))}))}checkUsername(e){return this.apiManager.invokeApi("account.checkUsername",{username:e})}toggleUsername(e,t){return this.apiManager.invokeApi("account.toggleUsername",{username:e,active:t})}reorderUsernames(e){return this.apiManager.invokeApi("account.reorderUsernames",{order:e})}canSendToUser(e){return(0,Aa.Z)(this.getUser(e))}}const Da=new Set(["photo","video","gif","document"]);class Ea extends G{constructor(){super(...arguments),this.webpages={},this.pendingWebPages={}}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateWebPage:e=>{this.saveWebPage(e.webpage)}})}saveWebPage(e,t,a){var s,n;if("webPageNotModified"===e._||"webPageEmpty"===e._)return;const{id:i}=e,r=this.webpages[i],o=r&&r._===e._&&r.hash==r.hash;if("webPage"===e._){"photo"===(null===(s=e.photo)||void 0===s?void 0:s._)?e.photo=this.appPhotosManager.savePhoto(e.photo,a):delete e.photo,"document"===(null===(n=e.document)||void 0===n?void 0:n._)?e.document=this.appDocsManager.saveDoc(e.document,a):("document"===e.type&&delete e.type,delete e.document);const t=e.site_name,i=e.title||e.author||t||"";t&&i===t&&delete e.site_name,Da.has(e.type)||e.description||!e.photo||(e.type="photo")}let p=this.pendingWebPages[i];if(t&&(p||(p=this.pendingWebPages[i]=new Set),p.add(t)),void 0===r?this.webpages[i]=e:re(r,e),!t&&void 0!==p&&o){const e=[];p.forEach((t=>{const[a,s,n]=t.split("_");e.push({peerId:a.toPeerId(),mid:+s,isScheduled:!!n})})),this.rootScope.dispatchEvent("webpage_updated",{id:i,msgs:e})}return e}getMessageKeyForPendingWebPage(e,t,a){return e+"_"+t+(a?"_s":"")}deleteWebPageFromPending(e,t){const a=e.id;if(!a)return;const s=this.pendingWebPages[a];s&&s.has(t)&&(s.delete(t),s.size||delete this.pendingWebPages[a])}getCachedWebPage(e){return this.webpages[e]}getWebPage(e){return this.apiManager.invokeApiHashable({method:"messages.getWebPage",processResult:e=>this.saveWebPage(e),params:{url:e}})}}var Ta=a(5936),Fa=a(3019);function Ra(e){return(0,Fa.Z)(e,"readAsArrayBuffer")}var xa=a(1243),Ba=a(7086);function Va(e){return encodeURIComponent(e).replace(/['()]/g,escape).replace(/\*/g,"%2A")}class Oa{constructor(e,t){this.serviceMessagePort=e,this.downloadId=t,this.serviceMessagePort=Ks()}write(e,t){return a=this,s=void 0,i=function*(){return this.serviceMessagePort.invoke("downloadChunk",{id:this.downloadId,chunk:e})},new((n=void 0)||(n=Promise))((function(e,t){function r(e){try{p(i.next(e))}catch(e){t(e)}}function o(e){try{p(i.throw(e))}catch(e){t(e)}}function p(t){var a;t.done?e(t.value):(a=t.value,a instanceof n?a:new n((function(e){e(a)}))).then(r,o)}p((i=i.apply(a,s||[])).next())}));var a,s,n,i}finalize(e){return this.serviceMessagePort.invoke("downloadFinalize",this.downloadId).then((()=>{}))}}class La{getFile(e){return Promise.reject((0,X.Z)("NO_ENTRY_FOUND"))}prepareWriting({fileName:e,downloadId:t,size:a}){const s=Object.assign({"Content-Type":"application/octet-stream; charset=utf-8","Content-Disposition":"attachment; filename*=UTF-8''"+Va(e)},a?{"Content-Length":a}:{}),n=Ks(),i=n.invoke("download",{headers:s,id:t}),r=(0,v.Z)();return r.cancel=()=>{r.reject((0,X.Z)("DOWNLOAD_CANCELED"))},r.catch((()=>{Ks().invoke("downloadCancel",t)})),i.then(r.resolve,r.reject),{deferred:r,getWriter:()=>new Oa(n,t)}}}var Na=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};const Za=131072,ja=new Set(["DOWNLOAD_CANCELED","UPLOAD_CANCELED","UNKNOWN","NO_NEW_CONTEXT"]);class qa extends G{constructor(){super(...arguments),this.cacheStorage=new Ta.Z("cachedFiles"),this.downloadStorage=new La,this.downloadPromises={},this.uploadPromises={},this.downloadPulls={},this.downloadActives={},this.refreshReferencePromises={},this.log=(0,S.kg)("AFM",S.v9.Error|S.v9.Log),this.tempId=0,this.queueId=0,this.debug=b.Z.debug,this.maxUploadParts=4e3,this.maxDownloadParts=8e3,this.uncompressTGS=(e,t)=>this.cryptoWorker.invokeCrypto("gzipUncompress",e.slice().buffer,!1),this.uncompressTGV=(e,t)=>{const a=e.slice().buffer;return i().IS_FIREFOX?this.cryptoWorker.invokeCrypto("gzipUncompress",a,!0).then((e=>function(e){const t=e.indexOf("/,` width="${n}" height="${i}">`).replace(/[^\x00-\x7F]/g,"")}(e))).then((e=>(new TextEncoder).encode(e))):this.cryptoWorker.invokeCrypto("gzipUncompress",a,!1)},this.convertWebp=(e,t)=>f.Z.getInstance().invoke("convertWebp",{fileName:t,bytes:e}),this.convertOpus=(e,t)=>f.Z.getInstance().invoke("convertOpus",{fileName:t,bytes:e})}after(){setInterval((()=>{for(const e in this.refreshReferencePromises){const{deferred:t}=this.refreshReferencePromises[e];(t.isFulfilled||t.isRejected)&&delete this.refreshReferencePromises[e]}}),18e5),this.rootScope.addEventListener("config",(e=>{this.webFileDcId=e.webfile_dc_id})),this.rootScope.addEventListener("app_config",(e=>{this.maxUploadParts=this.rootScope.premium?e.upload_max_fileparts_premium:e.upload_max_fileparts_default,this.maxDownloadParts=e.upload_max_fileparts_premium}))}downloadRequest(e,t,a,s,n=0){void 0===this.downloadPulls[e]&&(this.downloadPulls[e]=[],this.downloadActives[e]=0);const i=this.downloadPulls[e],r=new Promise(((e,r)=>{i.push({id:t,queueId:n,cb:a,deferred:{resolve:e,reject:r},activeDelta:s})}));return setTimeout((()=>{this.downloadCheck(e)}),0),r}downloadCheck(e){const t=this.downloadPulls[e],a=this.rootScope.premium?224:36;if(this.downloadActives[e]>=a||!(null==t?void 0:t.length))return!1;const s=(0,Pe.Z)(t,(e=>0===e.queueId))||(0,Pe.Z)(t,(e=>e.queueId===this.queueId))||t.shift(),n=s.activeDelta||1;this.downloadActives[e]+=n;const i=s.cb();i.then((()=>{this.downloadActives[e]-=n,this.downloadCheck(e)}),(t=>{(null==t?void 0:t.type)&&ja.has(t.type)||this.log.error("downloadCheck error:",t),this.downloadActives[e]-=n,this.downloadCheck(e)})).finally((()=>{i.then(s.deferred.resolve,s.deferred.reject)}))}setQueueId(e){this.queueId=e}getFileStorage(){return this.cacheStorage}cancelDownload(e){const t=[this.downloadPromises[e],this.uploadPromises[e]].filter(Boolean);let a=!1;for(let e=0,s=t.length;eNa(this,void 0,void 0,(function*(){if(null==r||r(),"url"in t){const e=t.url;if(this.isLocalWebFile(e))return fetch(e).then((e=>e.arrayBuffer())).then((t=>{const a=e.split(".").pop(),s=gt[a]||"application/octet-stream";return{_:"upload.webFile",size:t.byteLength,mime_type:s,file_type:{_:"storage.fileUnknown"},mtime:0,bytes:new Uint8Array(t)}}))}return this.apiManager.invokeApi("upload.getWebFile",{location:t,offset:a,limit:s},{dcId:e,fileDownload:!0})}))),this.getDelta(s),i)}requestFilePart(e,t,a,s,n=0,i=0,r){return this.downloadRequest(e,n,(()=>Na(this,void 0,void 0,(function*(){null==r||r();const n=()=>Na(this,void 0,void 0,(function*(){var i;null==r||r();const o=null===(i=t.file_reference)||void 0===i?void 0:i.slice();return this.apiManager.invokeApi("upload.getFile",{location:t,offset:a,limit:s},{dcId:e,fileDownload:!0}).catch((e=>{if(null==r||r(),"FILE_REFERENCE_EXPIRED"===e.type)return this.refreshReference(t,o).then(n);throw e}))}));(0,ue.Z)(t);const i=t.file_reference;if(i&&!t.checkedReference){t.checkedReference=!0;const e=E(i);if(this.refreshReferencePromises[e])return this.refreshReference(t,i).then(n)}return n()}))),this.getDelta(s),i)}getDelta(e){return e/Za}getLimitPart(e,t){if(!e)return 524288;let a=Za;const s=t?this.maxUploadParts:this.maxDownloadParts,n=t?524288:1048576;for(;e/a>s&&a{a===E(t)&&e.reject((0,X.Z)("REFERENCE_IS_NOT_REFRESHED")),e.resolve(t)}),e.reject)}return s.deferred.then((t=>{e.file_reference=t}))}isDownloading(e){return!!this.downloadPromises[e]}getDownload(e){return this.downloadPromises[e]}getUpload(e){return this.uploadPromises[e]}getConvertMethod(e){let t;return"application/x-tgwallpattern"===e?(t=this.uncompressTGV,e="image/svg+xml"):"image/webp"!==e||i().IS_WEBP_SUPPORTED?"application/x-tgsticker"===e?(t=this.uncompressTGS,e="application/json"):"audio/ogg"!==e||i().IS_OPUS_SUPPORTED||(t=this.convertOpus,e="audio/wav"):(t=this.convertWebp,e="image/png"),{mimeType:e,process:t}}allocateDeferredPromises(e,t,a){const s=[];let n,i=e,r=Promise.resolve();do{n=(0,v.Z)(),s.push({offset:i,writePromise:r,writeDeferred:n}),r=n,i+=a}while(i{if(!(null==e?void 0:e.error))for(const a of I)e&&e!==a||(a.error=t,a.deferred.reject(t))},y="inputWebFileLocation"===i._,_=y&&this.isLocalWebFile(i.url),v=this.tempId++,P=_?s:e.limitPart||this.getLimitPart(s,!1);let b,M,S=m.getFile.bind(m);const I=[],C=s||P,w=(e,t)=>{const{deferred:a}=e,s=u.bind(null,e);a.cancel=()=>a.reject((0,X.Z)("DOWNLOAD_CANCELED")),a.catch((t=>{var a,n;s(t),null===(n=null===(a=e.writer)||void 0===a?void 0:a.truncate)||void 0===n||n.call(a)})).finally((()=>{this.downloadPromises[t]===a&&delete this.downloadPromises[t],delete e.writer})),this.downloadPromises[t]=a,I.push(e)};if(m&&(!g||C<=o.Iw)&&(b=m.prepareWriting(l,C,e.mimeType),w(b,l)),g){let t=e.fileName;if(!t){t=l;const a=ht[e.mimeType];a&&(t+="."+a)}M=g.prepareWriting({fileName:t,downloadId:r,size:C}),w(M,c),b&&M.deferred.catch((e=>b.deferred.reject(e)))}h=null!==(a=null==M?void 0:M.deferred)&&void 0!==a?a:b.deferred,g&&f&&(S=g.getFile.bind(g)),S(l).then((e=>Na(this,void 0,void 0,(function*(){if(k(),M){const t=M.writer=M.getWriter();k();const a=yield function(e){return Ra(e).then((e=>new Uint8Array(e)))}(e);k(),yield t.write(a),k(),M.deferred.resolve(yield t.finalize())}b&&b.deferred.resolve(e)})))).catch((t=>Na(this,void 0,void 0,(function*(){if(e.onlyCache)return void u(null,t);I.forEach((e=>{e.writer=e.getWriter()}));const a=(y?this.requestWebFilePart:this.requestFilePart).bind(this);y&&void 0===this.webFileDcId&&!_&&(yield this.apiManager.getConfig(),k());const r=this.allocateDeferredPromises(0,s,P),p={done:0,offset:0,total:s,fileName:c},d=()=>{try{k(),p.done=g,this.rootScope.dispatchEvent("download_progress",p)}catch(e){}},m=(0,sa.Z)(d,50,!0);let g=0;const h=()=>Na(this,void 0,void 0,(function*(){const{offset:t,writePromise:p,writeDeferred:y}=r.shift();try{k();performance.now();const u=yield a(n,i,t,P,v,e.queueId,k),_=(performance.now(),u.bytes);r.length&&h();const b=_.byteLength;this.debug&&this.log("downloadFile requestFilePart result:",c,u);const M=t+P>=s||!b;if(b){g+=b,M?d():m();performance.now();yield p,k(),performance.now(),performance.now(),yield Promise.all(I.map((({writer:e})=>null==e?void 0:e.write(_,t)))),k()}if(M&&(!s||g{var t;return null===(t=null==e?void 0:e.trim)||void 0===t?void 0:t.call(e,g)})),M&&f){const e=I.filter((({writer:e})=>(null==e?void 0:e.getParts)&&e.replaceParts)).map((({writer:e})=>Na(this,void 0,void 0,(function*(){const t=e.getParts(),a=yield f(t,l);e.replaceParts(a)}))));yield Promise.all(e),k()}if(y.resolve(),M){const e=g<=o.Iw;I.forEach((t=>{const{deferred:a,writer:s}=t;if(a.isFulfilled||a.isRejected||!s)return;const n=s.finalize(e);a.resolve(n)}))}}catch(e){u(null,e)}}));for(let e=0,t=Math.min(1/0,r.length);e{if(I.reduce(((e,t)=>e+ +!!t.error),0)===I.length)throw I[0].error};return h}downloadMedia(e){let{media:t,thumb:a}=e;const s="photo"===t._;if(s&&!a)return Promise.reject("preloadPhoto photoEmpty!");const n="document"===t._;n?t=this.appDocsManager.getDoc(t.id):s&&(t=this.appPhotosManager.getPhoto(t.id));const{fileName:i,downloadOptions:r}=(0,xa.Z)(e);let o=this.getDownload(i);return o||(o=this.download(r),n&&!a&&(this.rootScope.dispatchEvent("document_downloading",t.id),o.then((()=>{this.rootScope.dispatchEvent("document_downloaded",t.id)})).catch(qt.Z))),o}downloadMediaURL(e){const{media:t,thumb:a}=e;let s=this.thumbsStorage.getCacheContext(t,null==a?void 0:a.type);return(!a||s.downloaded>=("size"in a?a.size:0))&&s.url?Promise.resolve(s.url):this.downloadMedia(e).then((e=>{if(!s.downloaded||s.downloaded=10485760,n=this.getLimitPart(a,!0),i=this.getDelta(n),r=Math.ceil(a/n),o=(0,Ee.a)(),p={_:s?"inputFileBig":"inputFile",id:o,parts:r,name:t,md5_checksum:""},d=(0,v.Z)();if(r>this.maxUploadParts)return d.reject((0,X.Z)("FILE_TOO_BIG")),d;let f=!1,c=!1,l=e=>{"UPLOAD_CANCELED"!==(null==e?void 0:e.type)&&this.log.error("Up Error",e),d.reject(e),f=!0,l=qt.Z};const m=s?"upload.saveBigFilePart":"upload.saveFilePart",g=this.tempId++,h=this,u=function*(){let u=0,y=0;for(let v=0;vNa(this,void 0,void 0,(function*(){_();const i=e.slice(v,v+n),g=yield Ra(i);return _(),h.debug&&h.log("Upload file part, isBig:",s,P,g.byteLength,new Uint8Array(g).length,new Uint8Array(g).slice().length),h.apiManager.invokeApi(m,{file_id:o,file_part:P,file_total_parts:r,bytes:g},{fileUpload:!0}).then((()=>{if(f)return;++y;const e={done:y*n,offset:v,total:a,fileName:t};d.notify(e),y>=r&&(d.resolve(p),c=!0)}),l)}))),i).catch(l)}}(),y=()=>{if(f)return;const e=u.next();e.done||f||e.value.then(y)};for(let e=0,t=Math.min(1/0,r);e{if(f)throw(0,X.Z)("UPLOAD_CANCELED")};return d.cancel=()=>{f||c||(f=!0,l((0,X.Z)("UPLOAD_CANCELED")))},d.notify=e=>{this.rootScope.dispatchEvent("download_progress",e)},d.finally((()=>{this.uploadPromises[t]===d&&delete this.uploadPromises[t]})),this.uploadPromises[t]=d}}var Ga=a(7487),Ha=a(6666),Wa=a(3306);class za extends G{constructor(){super(),this.hashes={},this.apiPromisesSingleProcess={},this.apiPromisesSingle={},this.apiPromisesCacheable={},this.afterMessageIdTemp=0}setUser(e){return this.setUserAuth(e.id)}invokeApiAfter(e,t={},a={}){let s=a;return s.prepareTempMessageId=""+ ++this.afterMessageIdTemp,s=Object.assign({},a),a.messageId=s.prepareTempMessageId,this.invokeApi(e,t,s)}invokeApiHashable(e){var t,a;null!==(t=e.params)&&void 0!==t||(e.params={}),null!==(a=e.options)&&void 0!==a||(e.options={});const{params:s,options:n,method:i,overwrite:r}=e,o=JSON.stringify(s);let p;return this.hashes[i]&&(p=this.hashes[i][o],p&&(r?(delete this.hashes[i][o],p=void 0):s.hash=p.hash)),this.invokeApiSingleProcess({method:i,processResult:t=>{if(t._.includes("NotModified"))return p.result;if(t.hash){const e=t.hash;this.hashes[i]||(this.hashes[i]={}),p=this.hashes[i][o]={hash:e,result:t}}if(e.processResult){const a=e.processResult(t);return p?p.result=a:a}return t},params:s,options:n})}invokeApiSingle(e,t={},a={}){const s=e+"-"+JSON.stringify(t),n=this.apiPromisesSingle;return n[s]?n[s]:n[s]=this.invokeApi(e,t,a).finally((()=>{delete n[s]}))}invokeApiSingleProcess(e){var t,a,s;null!==(t=e.params)&&void 0!==t||(e.params={}),null!==(a=e.options)&&void 0!==a||(e.options={});const{method:n,processResult:i,processError:r,params:o,options:p}=e,d=this.apiPromisesSingleProcess,f=p.cacheKey||JSON.stringify(o),c=null!==(s=d[n])&&void 0!==s?s:d[n]=new Map,l=c.get(f);if(l)return l;const m=()=>{const e=c.get(f);return e===h?void 0:e},g=this.invokeApi(n,o,p).then((e=>m()||i(e)),(e=>{const t=m();if(t)return t;if(!r)throw e;return r(e)})),h=g.finally((()=>{c.get(f)===h&&(c.delete(f),c.size||delete d[n])}));return c.set(f,h),h}invokeApiCacheable(e,t={},a={}){var s;const n=null!==(s=this.apiPromisesCacheable[e])&&void 0!==s?s:this.apiPromisesCacheable[e]={},i=JSON.stringify(t),r=n[i];if(r&&(!a.override||!r.fulfilled))return r.promise;let o;a.override&&(r&&r.timeout&&(clearTimeout(r.timeout),delete r.timeout),delete a.override),a.cacheSeconds&&(o=T.Z.setTimeout((()=>{delete n[i]}),1e3*a.cacheSeconds),delete a.cacheSeconds);const p=this.invokeApi(e,t,a);return n[i]={timestamp:Date.now(),fulfilled:!1,timeout:o,promise:p,params:t},p}clearCache(e,t){const a=this.apiPromisesCacheable[e];if(a)for(const e in a){const s=a[e];try{t(s.params)&&(s.timeout&&clearTimeout(s.timeout),delete a[e])}catch(e){}}}getConfig(e){return this.config&&!e?this.config:this.invokeApiSingleProcess({method:"help.getConfig",params:{},processResult:e=>(this.config=e,this.rootScope.dispatchEvent("config",e),e),options:{overwrite:e}})}getAppConfig(e){return this.appConfig&&!e?this.appConfig:this.invokeApiSingleProcess({method:"help.getAppConfig",params:{},processResult:e=>{var t;return this.appConfig=e,(0,ra.Ki)(null!==(t=e.ignore_restriction_reasons)&&void 0!==t?t:[]),this.rootScope.dispatchEvent("app_config",e),e},options:{overwrite:e}})}getLimit(e,t){return(0,q.Z)(this.getAppConfig(),(a=>{null!=t||(t=this.rootScope.premium);const s={pin:["dialogs_pinned_limit_default","dialogs_pinned_limit_premium"],folderPin:["dialogs_folder_pinned_limit_default","dialogs_folder_pinned_limit_premium"],folders:["dialog_filters_limit_default","dialog_filters_limit_premium"],favedStickers:["stickers_faved_limit_default","stickers_faved_limit_premium"],reactions:["reactions_user_max_default","reactions_user_max_premium"],bio:["about_length_limit_default","about_length_limit_premium"],topicPin:"topics_pinned_limit",caption:["caption_length_limit_default","caption_length_limit_premium"]}[e];return a[Array.isArray(s)?s[t?1:0]:s]}))}}var Ka=a(8453),Ja=function(e,t,a,s){return new(a||(a=Promise))((function(n,i){function r(e){try{p(s.next(e))}catch(e){i(e)}}function o(e){try{p(s.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?n(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((s=s.apply(e,t||[])).next())}))};class $a extends za{constructor(){super(),this.log=(0,S.kg)("API"),this.cachedNetworkers={},this.cachedExportPromise={},this.gettingNetworkers={},this.baseDcId=0,this.afterMessageTempIds={},this.transportType=b.Z.transport,Z.addEventListener("transport",(e=>{this.changeTransportType(e)})),setInterval((()=>{this.getAppConfig(!0)}),997e4)}after(){this.apiUpdatesManager.addMultipleEventsListeners({updateConfig:()=>{this.getConfig(!0),this.getAppConfig(!0)}}),this.rootScope.addEventListener("user_auth",(()=>{this.config&&this.apiUpdatesManager.processLocalUpdate({_:"updateConfig"})})),this.rootScope.addEventListener("premium_toggle",(e=>{this.iterateNetworkers((({networker:t,connectionType:a,dcId:s,transportType:n})=>{if("client"===a||"websocket"!==n)return;const i=t.transport;if(i){if(i.connection){const t=V(s,a,e);i.changeUrl(t)}}else this.log.error("wow what, no transport?",t)}))}))}getTransportType(e){return this.transportType}iterateNetworkers(e){for(const t in this.cachedNetworkers){const a=this.cachedNetworkers[t];for(const s in a){const n=a[s];for(const a in n)n[a].forEach(((n,i,r)=>{e({networker:n,dcId:+a,connectionType:s,transportType:t,index:i,array:r})}))}}}chooseServer(e,t,a){return this.dcConfigurator.chooseServer(e,t,a,"client"===t,this.rootScope.premium)}changeTransportType(e){const t=this.transportType;if(t===e)return;this.log("changing transport from",t,"to",e);const a=this.cachedNetworkers[t],s=this.cachedNetworkers[e];this.cachedNetworkers[e]=a,this.cachedNetworkers[t]=s,this.transportType=e;for(const a in this.gettingNetworkers){const s=this.gettingNetworkers[a];delete this.gettingNetworkers[a];const n=a.replace(t,e);this.gettingNetworkers[n]=s,this.log("changed networker getKey from",a,"to",n)}this.iterateNetworkers((e=>{const t=this.getTransportType(e.connectionType),a=this.chooseServer(e.dcId,e.connectionType,t);this.changeNetworkerTransport(e.networker,a)}))}getBaseDcId(){return Ja(this,void 0,void 0,(function*(){if(this.baseDcId)return this.baseDcId;const e=yield Ga.Z.get("dc");return this.baseDcId||(e?this.baseDcId=e:this.setBaseDcId(_.Z.baseDcId)),this.baseDcId}))}setUserAuth(e){return Ja(this,void 0,void 0,(function*(){if("string"!=typeof e&&"number"!=typeof e||(e={dcID:0,date:(0,te.Z)(!0),id:e.toPeerId(!1)}),this.rootScope.dispatchEvent("user_auth",e),!e.dcID){const t=yield this.getBaseDcId();e.dcID=t}Ga.Z.set({user_auth:e})}))}setBaseDcId(e){const t=this.baseDcId;t&&this.getNetworker(t).then((e=>{this.setOnDrainIfNeeded(e)})),this.baseDcId=e,Ga.Z.set({dc:this.baseDcId})}logOut(){return Ja(this,void 0,void 0,(function*(){if(this.loggingOut)return;this.loggingOut=!0;const e=[];for(let t=1;t<=5;t++)e.push("dc"+t+"_auth_key");const t=yield Promise.all(e.map((e=>Ga.Z.get(e)))),a=[];for(let e=0;eJa(this,void 0,void 0,(function*(){this.baseDcId=void 0,yield(0,Ka.Z)(!1,!0),Ha.C.closeDatabases(),this.rootScope.dispatchEvent("logging_out")}));return setTimeout(s,1e3),Promise.all(a).catch((e=>{e.handled=!0})).finally(s)}))}generateNetworkerGetKey(e,t,a){return[e,t,a].join("-")}getNetworker(e,t={}){const a=t.fileDownload?"download":t.fileUpload?"upload":"client",n=this.getTransportType(a);this.cachedNetworkers[n]||(this.cachedNetworkers[n]={client:{},download:{},upload:{}});const i=this.cachedNetworkers[n][a];e in i||(i[e]=[]);const r=i[e],o="client"===a||"https"===n?1:this.rootScope.premium?6:3;if(r.length>=o){let e=o-1,t=!1;for(;e>=0;--e)if(r[e].isOnline){t=!0;break}const a=r.splice(t?e:o-1,1)[0];return r.unshift(a),Promise.resolve(a)}let p=this.generateNetworkerGetKey(e,n,a);if(this.gettingNetworkers[p])return this.gettingNetworkers[p];const d=`dc${e}_auth_key`,f=`dc${e}_server_salt`;let c=this.chooseServer(e,a,n);return this.gettingNetworkers[p]=Promise.all([d,f].map((e=>Ga.Z.get(e)))).then((([i,o])=>Ja(this,void 0,void 0,(function*(){let l,m;if(i&&512===i.length){o&&16===o.length||(o="AAAAAAAAAAAAAAAA");const a=(0,Wa.Z)(i),n=(yield s.Z.invokeCrypto("sha1",a)).slice(-8),r=(0,Wa.Z)(o);l=this.networkerFactory.getNetworker(e,a,n,r,t)}else try{const a=yield this.authorizer.auth(e);Ga.Z.set({[d]:E(a.authKey),[f]:E(a.serverSalt)}),l=this.networkerFactory.getNetworker(e,a.authKey,a.authKeyId,a.serverSalt,t)}catch(e){m=e}const g=this.getTransportType(a);if(g!==n&&(p=this.generateNetworkerGetKey(e,g,a),c.destroy(),O.removeTransport(this.dcConfigurator.chosenServers,c),l&&(c=this.chooseServer(e,a,g)),this.log("transport has been changed during authorization from",n,"to",g)),delete this.gettingNetworkers[p],m)throw this.log("get networker error",m,m.stack),m;return this.changeNetworkerTransport(l,c),r.unshift(l),this.setOnDrainIfNeeded(l),l}))))}getNetworkerVoid(e){return this.getNetworker(e).then(qt.Z,qt.Z)}changeNetworkerTransport(e,t){const a=e.transport;a&&O.removeTransport(this.dcConfigurator.chosenServers,a),e.changeTransport(t)}onNetworkerDrain(e){this.log("networker drain",e.dcId),e.onDrain=void 0,this.changeNetworkerTransport(e),e.destroy(),this.networkerFactory.removeNetworker(e),O.removeTransport(this.cachedNetworkers,e)}setOnDrainIfNeeded(e){e.onDrain||(e.isFileNetworker?Promise.resolve(!0):this.getBaseDcId().then((t=>e.dcId!==t))).then((t=>{e.onDrain||t&&(e.onDrain=()=>this.onNetworkerDrain(e),e.setDrainTimeout())}))}setUpdatesProcessor(e){this.updatesProcessor=e,this.networkerFactory.setUpdatesProcessor(e)}invokeApi(e,t={},a={}){const s=(0,v.Z)();let n,i,{afterMessageId:r,prepareTempMessageId:o}=a;if(o&&s.then((()=>{delete this.afterMessageTempIds[o]})),d.GO){const n=Date.now(),r=T.Z.setInterval((()=>{i&&i.isStopped()||this.log.error("Request is still processing:",e,t,a,"time:",(Date.now()-n)/1e3)}),5e3);s.catch(qt.Z).finally((()=>{clearInterval(r)}))}const p=(new Error).stack||"empty stack",f=()=>{if(r){const e=this.afterMessageTempIds[r];e&&(a.afterMessageId=e.messageId)}const p=i.wrapApiCall(e,t,a);return o&&(this.afterMessageTempIds[o]={messageId:a.messageId,promise:s}),p.catch((s=>{var i;if("FILE_REFERENCE_EXPIRED"!==s.type&&this.log.error("Error",s.code,s.type,this.baseDcId,n,e,t),401===s.code&&this.baseDcId===n)throw"SESSION_PASSWORD_NEEDED"!==s.type&&(Ga.Z.delete("dc"),Ga.Z.delete("user_auth")),s;if(401===s.code&&this.baseDcId&&n!==this.baseDcId){if(void 0===this.cachedExportPromise[n]){const e=new Promise(((e,t)=>{this.invokeApi("auth.exportAuthorization",{dc_id:n},{noErrorBox:!0}).then((a=>{this.invokeApi("auth.importAuthorization",{id:a.id,bytes:a.bytes},{dcId:n,noErrorBox:!0}).then(e,t)}),t)}));this.cachedExportPromise[n]=e}return this.cachedExportPromise[n].then((()=>f()))}if(303!==s.code){if(400===s.code&&0===s.type.indexOf("FILE_MIGRATE")){const i=+s.type.match(/^(FILE_MIGRATE_)(\d+)/)[2];if(i!==n)return a.dcId=i,this.invokeApi(e,t,a);throw s}if(400===s.code&&"CONNECTION_NOT_INITED"===s.type)return this.networkerFactory.unsetConnectionInited(),f();if(a.rawError||420!==s.code){if(!a.rawError&&["MSG_WAIT_FAILED","MSG_WAIT_TIMEOUT"].includes(s.type)){const e=this.afterMessageTempIds[r];return r=void 0,delete a.afterMessageId,e?e.promise.then((()=>f())):f()}if(a.rawError||500!==s.code){if("UNKNOWN"===s.type||"MTPROTO_CLUSTER_INVALID"===s.type)return(0,P.Z)(1e3).then((()=>f()));throw s}{const e=Date.now();if(a.stopTime&&e>=a.stopTime)throw s;return a.waitTime=a.waitTime?Math.min(60,1.5*a.waitTime):1,(0,P.Z)(1e3*a.waitTime).then((()=>f()))}}{const e=+s.type.match(/^FLOOD_WAIT_(\d+)/)[1]||1;if(e>(null!==(i=a.floodMaxTimeout)&&void 0!==i?i:60)&&!a.prepareTempMessageId)throw s;return(0,P.Z)(1e3*e).then((()=>f()))}}{const i=+s.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\d+)/)[2];if(i!==n)return a.dcId?a.dcId=i:this.setBaseDcId(i),this.invokeApi(e,t,a)}}))};let c;return c=(n=a.dcId||this.baseDcId)?this.getNetworker(n,a):this.getBaseDcId().then((e=>this.getNetworker(n=e,a))),c.then((e=>{i=e;const t=f();return i.attachPromise(s,a),t})).then(s.resolve).catch((t=>Ja(this,void 0,void 0,(function*(){if(t?(0,fe.Z)(t)||(t={message:t}):t={type:"ERROR_EMPTY"},(401===t.code&&"SESSION_REVOKED"===t.type||406===t.code&&"AUTH_KEY_DUPLICATED"===t.type)&&this.logOut(),a.ignoreErrors)throw t;throw 406===t.code&&(t.handled=!0),a.noErrorBox||(t.input=e,t.stack=p||t.originalError&&t.originalError.stack||t.stack||(new Error).stack,setTimeout((()=>{t.handled||(401===t.code&&this.logOut(),t.handled=!0)}),100)),t})))).catch(s.reject),s}}class Qa{constructor(){this.neededPeers=new Map,this.singlePeerMap=new Map,this._constructor(!1)}after(){this.rootScope.addEventListener("user_auth",(()=>{this.requestPeer(this.appPeersManager.peerId,"self")}))}requestPeer(e,t){let a=this.neededPeers.get(e);a&&a.has(t)||(a||(a=new Set,this.neededPeers.set(e,a)),a.add(t),this.dispatchEvent("peerNeeded",e))}releasePeer(e,t){const a=this.neededPeers.get(e);a&&(a.delete(t),a.size||(this.neededPeers.delete(e),this.dispatchEvent("peerUnneeded",e)))}requestPeersForKey(e,t){Array.isArray(e)&&(e=new Set(e));let a=this.singlePeerMap.get(t);if(a){for(const s of a)e.has(s)||(this.releasePeer(s,t),a.delete(s));if(!a.size&&!e.size)return void this.singlePeerMap.delete(t)}if(e.size){a||(a=new Set,this.singlePeerMap.set(t,a));for(const s of e)a.has(s)||(this.requestPeer(s,t),a.add(s))}}isPeerNeeded(e){return this.neededPeers.has(e)}}Ae(Qa,[p.Z,G]);const Ya=Qa,Xa=o.Pt;class es{constructor(){this.thumbsCache={}}getKey(e){var t;return e._+(null!==(t=e.id)&&void 0!==t?t:e.url)}getCacheContext(e,t=Xa){var a,s,n,i;const r=null!==(a=(n=this.thumbsCache)[i=this.getKey(e)])&&void 0!==a?a:n[i]={};return null!==(s=r[t])&&void 0!==s?s:r[t]={downloaded:0,url:"",type:t}}setCacheContextURL(e,t=Xa,a,s=0){const n=this.getCacheContext(e,t);return n.url=a,n.downloaded=s,n}deleteCacheContext(e,t=Xa){const a=this.thumbsCache[this.getKey(e)];a&&delete a[t]}}const ts={MTProto:{constructors:[{id:481674261,predicate:"vector",params:[],type:"Vector t"},{id:85337187,predicate:"resPQ",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"pq",type:"bytes"},{name:"server_public_key_fingerprints",type:"Vector"}],type:"ResPQ"},{id:-1443537003,predicate:"p_q_inner_data_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"}],type:"P_Q_inner_data"},{id:1459478408,predicate:"p_q_inner_data_temp_dc",params:[{name:"pq",type:"bytes"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce",type:"int256"},{name:"dc",type:"int"},{name:"expires_in",type:"int"}],type:"P_Q_inner_data"},{id:-790100132,predicate:"server_DH_params_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_answer",type:"bytes"}],type:"Server_DH_Params"},{id:-1249309254,predicate:"server_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"g",type:"int"},{name:"dh_prime",type:"bytes"},{name:"g_a",type:"bytes"},{name:"server_time",type:"int"}],type:"Server_DH_inner_data"},{id:1715713620,predicate:"client_DH_inner_data",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"retry_id",type:"long"},{name:"g_b",type:"bytes"}],type:"Client_DH_Inner_Data"},{id:1003222836,predicate:"dh_gen_ok",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash1",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1188831161,predicate:"dh_gen_retry",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash2",type:"int128"}],type:"Set_client_DH_params_answer"},{id:-1499615742,predicate:"dh_gen_fail",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"new_nonce_hash3",type:"int128"}],type:"Set_client_DH_params_answer"},{id:1973679973,predicate:"bind_auth_key_inner",params:[{name:"nonce",type:"long"},{name:"temp_auth_key_id",type:"long"},{name:"perm_auth_key_id",type:"long"},{name:"temp_session_id",type:"long"},{name:"expires_at",type:"int"}],type:"BindAuthKeyInner"},{id:-212046591,predicate:"rpc_result",params:[{name:"req_msg_id",type:"long"},{name:"result",type:"Object"}],type:"RpcResult"},{id:558156313,predicate:"rpc_error",params:[{name:"error_code",type:"int"},{name:"error_message",type:"string"}],type:"RpcError"},{id:1579864942,predicate:"rpc_answer_unknown",params:[],type:"RpcDropAnswer"},{id:-847714938,predicate:"rpc_answer_dropped_running",params:[],type:"RpcDropAnswer"},{id:-1539647305,predicate:"rpc_answer_dropped",params:[{name:"msg_id",type:"long"},{name:"seq_no",type:"int"},{name:"bytes",type:"int"}],type:"RpcDropAnswer"},{id:155834844,predicate:"future_salt",params:[{name:"valid_since",type:"int"},{name:"valid_until",type:"int"},{name:"salt",type:"long"}],type:"FutureSalt"},{id:-1370486635,predicate:"future_salts",params:[{name:"req_msg_id",type:"long"},{name:"now",type:"int"},{name:"salts",type:"vector"}],type:"FutureSalts"},{id:880243653,predicate:"pong",params:[{name:"msg_id",type:"long"},{name:"ping_id",type:"long"}],type:"Pong"},{id:-501201412,predicate:"destroy_session_ok",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:1658015945,predicate:"destroy_session_none",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1631450872,predicate:"new_session_created",params:[{name:"first_msg_id",type:"long"},{name:"unique_id",type:"long"},{name:"server_salt",type:"long"}],type:"NewSession"},{id:1945237724,predicate:"msg_container",params:[{name:"messages",type:"vector<%Message>"}],type:"MessageContainer"},{id:1538843921,predicate:"message",params:[{name:"msg_id",type:"long"},{name:"seqno",type:"int"},{name:"bytes",type:"int"},{name:"body",type:"Object"}],type:"Message"},{id:-530561358,predicate:"msg_copy",params:[{name:"orig_message",type:"Message"}],type:"MessageCopy"},{id:812830625,predicate:"gzip_packed",params:[{name:"packed_data",type:"bytes"}],type:"Object"},{id:1658238041,predicate:"msgs_ack",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsAck"},{id:-1477445615,predicate:"bad_msg_notification",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"}],type:"BadMsgNotification"},{id:-307542917,predicate:"bad_server_salt",params:[{name:"bad_msg_id",type:"long"},{name:"bad_msg_seqno",type:"int"},{name:"error_code",type:"int"},{name:"new_server_salt",type:"long"}],type:"BadMsgNotification"},{id:2105940488,predicate:"msg_resend_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgResendReq"},{id:-630588590,predicate:"msgs_state_req",params:[{name:"msg_ids",type:"Vector"}],type:"MsgsStateReq"},{id:81704317,predicate:"msgs_state_info",params:[{name:"req_msg_id",type:"long"},{name:"info",type:"bytes"}],type:"MsgsStateInfo"},{id:-1933520591,predicate:"msgs_all_info",params:[{name:"msg_ids",type:"Vector"},{name:"info",type:"bytes"}],type:"MsgsAllInfo"},{id:661470918,predicate:"msg_detailed_info",params:[{name:"msg_id",type:"long"},{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-2137147681,predicate:"msg_new_detailed_info",params:[{name:"answer_msg_id",type:"long"},{name:"bytes",type:"int"},{name:"status",type:"int"}],type:"MsgDetailedInfo"},{id:-161422892,predicate:"destroy_auth_key_ok",params:[],type:"DestroyAuthKeyRes"},{id:178201177,predicate:"destroy_auth_key_none",params:[],type:"DestroyAuthKeyRes"},{id:-368010477,predicate:"destroy_auth_key_fail",params:[],type:"DestroyAuthKeyRes"}],methods:[{id:-1099002127,method:"req_pq_multi",params:[{name:"nonce",type:"int128"}],type:"ResPQ"},{id:-686627650,method:"req_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"p",type:"bytes"},{name:"q",type:"bytes"},{name:"public_key_fingerprint",type:"long"},{name:"encrypted_data",type:"bytes"}],type:"Server_DH_Params"},{id:-184262881,method:"set_client_DH_params",params:[{name:"nonce",type:"int128"},{name:"server_nonce",type:"int128"},{name:"encrypted_data",type:"bytes"}],type:"Set_client_DH_params_answer"},{id:1491380032,method:"rpc_drop_answer",params:[{name:"req_msg_id",type:"long"}],type:"RpcDropAnswer"},{id:-1188971260,method:"get_future_salts",params:[{name:"num",type:"int"}],type:"FutureSalts"},{id:2059302892,method:"ping",params:[{name:"ping_id",type:"long"}],type:"Pong"},{id:-213746804,method:"ping_delay_disconnect",params:[{name:"ping_id",type:"long"},{name:"disconnect_delay",type:"int"}],type:"Pong"},{id:-414113498,method:"destroy_session",params:[{name:"session_id",type:"long"}],type:"DestroySessionRes"},{id:-1835453025,method:"http_wait",params:[{name:"max_delay",type:"int"},{name:"wait_after",type:"int"},{name:"max_wait",type:"int"}],type:"HttpWait"},{id:-784117408,method:"destroy_auth_key",params:[],type:"DestroyAuthKeyRes"}]},API:{constructors:[{id:-1132882121,predicate:"boolFalse",params:[],type:"Bool"},{id:-1720552011,predicate:"boolTrue",params:[],type:"Bool"},{id:1072550713,predicate:"true",params:[],type:"True"},{id:481674261,predicate:"vector",params:[],type:"Vector t"},{id:-994444869,predicate:"error",params:[{name:"code",type:"int"},{name:"text",type:"string"}],type:"Error"},{id:1450380236,predicate:"null",params:[],type:"Null"},{id:2134579434,predicate:"inputPeerEmpty",params:[],type:"InputPeer"},{id:2107670217,predicate:"inputPeerSelf",params:[],type:"InputPeer"},{id:900291769,predicate:"inputPeerChat",params:[{name:"chat_id",type:"long"}],type:"InputPeer"},{id:-1182234929,predicate:"inputUserEmpty",params:[],type:"InputUser"},{id:-138301121,predicate:"inputUserSelf",params:[],type:"InputUser"},{id:-208488460,predicate:"inputPhoneContact",params:[{name:"client_id",type:"long"},{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"InputContact"},{id:-181407105,predicate:"inputFile",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"},{name:"md5_checksum",type:"string"}],type:"InputFile"},{id:-1771768449,predicate:"inputMediaEmpty",params:[],type:"InputMedia"},{id:505969924,predicate:"inputMediaUploadedPhoto",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.2?true"},{name:"file",type:"InputFile"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:-1279654347,predicate:"inputMediaPhoto",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.1?true"},{name:"id",type:"InputPhoto"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-104578748,predicate:"inputMediaGeoPoint",params:[{name:"geo_point",type:"InputGeoPoint"}],type:"InputMedia"},{id:-122978821,predicate:"inputMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"}],type:"InputMedia"},{id:480546647,predicate:"inputChatPhotoEmpty",params:[],type:"InputChatPhoto"},{id:-1110593856,predicate:"inputChatUploadedPhoto",params:[{name:"flags",type:"#"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"},{name:"video_emoji_markup",type:"flags.3?VideoSize"}],type:"InputChatPhoto"},{id:-1991004873,predicate:"inputChatPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputChatPhoto"},{id:-457104426,predicate:"inputGeoPointEmpty",params:[],type:"InputGeoPoint"},{id:1210199983,predicate:"inputGeoPoint",params:[{name:"flags",type:"#"},{name:"lat",type:"double"},{name:"long",type:"double"},{name:"accuracy_radius",type:"flags.0?int"}],type:"InputGeoPoint"},{id:483901197,predicate:"inputPhotoEmpty",params:[],type:"InputPhoto"},{id:1001634122,predicate:"inputPhoto",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputPhoto"},{id:-539317279,predicate:"inputFileLocation",params:[{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputFileLocation"},{id:1498486562,predicate:"peerUser",params:[{name:"user_id",type:"long"}],type:"Peer"},{id:918946202,predicate:"peerChat",params:[{name:"chat_id",type:"long"}],type:"Peer"},{id:-1432995067,predicate:"storage.fileUnknown",params:[],type:"storage.FileType"},{id:1086091090,predicate:"storage.filePartial",params:[],type:"storage.FileType"},{id:8322574,predicate:"storage.fileJpeg",params:[],type:"storage.FileType"},{id:-891180321,predicate:"storage.fileGif",params:[],type:"storage.FileType"},{id:172975040,predicate:"storage.filePng",params:[],type:"storage.FileType"},{id:-1373745011,predicate:"storage.filePdf",params:[],type:"storage.FileType"},{id:1384777335,predicate:"storage.fileMp3",params:[],type:"storage.FileType"},{id:1258941372,predicate:"storage.fileMov",params:[],type:"storage.FileType"},{id:-1278304028,predicate:"storage.fileMp4",params:[],type:"storage.FileType"},{id:276907596,predicate:"storage.fileWebp",params:[],type:"storage.FileType"},{id:-742634630,predicate:"userEmpty",params:[{name:"id",type:"long"}],type:"User"},{id:1326562017,predicate:"userProfilePhotoEmpty",params:[],type:"UserProfilePhoto"},{id:-2100168954,predicate:"userProfilePhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"personal",type:"flags.2?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"UserProfilePhoto"},{id:164646985,predicate:"userStatusEmpty",params:[],type:"UserStatus"},{id:-306628279,predicate:"userStatusOnline",params:[{name:"expires",type:"int"}],type:"UserStatus"},{id:9203775,predicate:"userStatusOffline",params:[{name:"was_online",type:"int"}],type:"UserStatus"},{id:693512293,predicate:"chatEmpty",params:[{name:"id",type:"long"}],type:"Chat"},{id:1103884886,predicate:"chat",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"left",type:"flags.2?true"},{name:"deactivated",type:"flags.5?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"noforwards",type:"flags.25?true"},{name:"id",type:"long"},{name:"title",type:"string"},{name:"photo",type:"ChatPhoto"},{name:"participants_count",type:"int"},{name:"date",type:"int"},{name:"version",type:"int"},{name:"migrated_to",type:"flags.6?InputChannel"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"}],type:"Chat"},{id:1704108455,predicate:"chatForbidden",params:[{name:"id",type:"long"},{name:"title",type:"string"}],type:"Chat"},{id:-908914376,predicate:"chatFull",params:[{name:"flags",type:"#"},{name:"can_set_username",type:"flags.7?true"},{name:"has_scheduled",type:"flags.8?true"},{name:"translations_disabled",type:"flags.19?true"},{name:"id",type:"long"},{name:"about",type:"string"},{name:"participants",type:"ChatParticipants"},{name:"chat_photo",type:"flags.2?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.13?ExportedChatInvite"},{name:"bot_info",type:"flags.3?Vector"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"folder_id",type:"flags.11?int"},{name:"call",type:"flags.12?InputGroupCall"},{name:"ttl_period",type:"flags.14?int"},{name:"groupcall_default_join_as",type:"flags.15?Peer"},{name:"theme_emoticon",type:"flags.16?string"},{name:"requests_pending",type:"flags.17?int"},{name:"recent_requesters",type:"flags.17?Vector"},{name:"available_reactions",type:"flags.18?ChatReactions"}],type:"ChatFull"},{id:-1070776313,predicate:"chatParticipant",params:[{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-2023500831,predicate:"chatParticipantsForbidden",params:[{name:"flags",type:"#"},{name:"chat_id",type:"long"},{name:"self_participant",type:"flags.0?ChatParticipant"}],type:"ChatParticipants"},{id:1018991608,predicate:"chatParticipants",params:[{name:"chat_id",type:"long"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"ChatParticipants"},{id:935395612,predicate:"chatPhotoEmpty",params:[],type:"ChatPhoto"},{id:476978193,predicate:"chatPhoto",params:[{name:"flags",type:"#"},{name:"has_video",type:"flags.0?true"},{name:"photo_id",type:"long"},{name:"stripped_thumb",type:"flags.1?bytes"},{name:"dc_id",type:"int"}],type:"ChatPhoto"},{id:-1868117372,predicate:"messageEmpty",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"peer_id",type:"flags.0?Peer"}],type:"Message"},{id:940666592,predicate:"message",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"from_scheduled",type:"flags.18?true"},{name:"legacy",type:"flags.19?true"},{name:"edit_hide",type:"flags.21?true"},{name:"pinned",type:"flags.24?true"},{name:"noforwards",type:"flags.26?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?long"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"message",type:"string"},{name:"media",type:"flags.9?MessageMedia"},{name:"reply_markup",type:"flags.6?ReplyMarkup"},{name:"entities",type:"flags.7?Vector"},{name:"views",type:"flags.10?int"},{name:"forwards",type:"flags.10?int"},{name:"replies",type:"flags.23?MessageReplies"},{name:"edit_date",type:"flags.15?int"},{name:"post_author",type:"flags.16?string"},{name:"grouped_id",type:"flags.17?long"},{name:"reactions",type:"flags.20?MessageReactions"},{name:"restriction_reason",type:"flags.22?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:721967202,predicate:"messageService",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"post",type:"flags.14?true"},{name:"legacy",type:"flags.19?true"},{name:"id",type:"int"},{name:"from_id",type:"flags.8?Peer"},{name:"peer_id",type:"Peer"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"date",type:"int"},{name:"action",type:"MessageAction"},{name:"ttl_period",type:"flags.25?int"}],type:"Message"},{id:1038967584,predicate:"messageMediaEmpty",params:[],type:"MessageMedia"},{id:1766936791,predicate:"messageMediaPhoto",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.3?true"},{name:"photo",type:"flags.0?Photo"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1457575028,predicate:"messageMediaGeo",params:[{name:"geo",type:"GeoPoint"}],type:"MessageMedia"},{id:1882335561,predicate:"messageMediaContact",params:[{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"user_id",type:"long"}],type:"MessageMedia"},{id:-1618676578,predicate:"messageMediaUnsupported",params:[],type:"MessageMedia"},{id:-1230047312,predicate:"messageActionEmpty",params:[],type:"MessageAction"},{id:-1119368275,predicate:"messageActionChatCreate",params:[{name:"title",type:"string"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1247687078,predicate:"messageActionChatEditTitle",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:2144015272,predicate:"messageActionChatEditPhoto",params:[{name:"photo",type:"Photo"}],type:"MessageAction"},{id:-1780220945,predicate:"messageActionChatDeletePhoto",params:[],type:"MessageAction"},{id:365886720,predicate:"messageActionChatAddUser",params:[{name:"users",type:"Vector"}],type:"MessageAction"},{id:-1539362612,predicate:"messageActionChatDeleteUser",params:[{name:"user_id",type:"long"}],type:"MessageAction"},{id:-712374074,predicate:"dialog",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"unread_mark",type:"flags.3?true"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"unread_mentions_count",type:"int"},{name:"unread_reactions_count",type:"int"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"pts",type:"flags.0?int"},{name:"draft",type:"flags.1?DraftMessage"},{name:"folder_id",type:"flags.4?int"},{name:"ttl_period",type:"flags.5?int"}],type:"Dialog"},{id:590459437,predicate:"photoEmpty",params:[{name:"id",type:"long"}],type:"Photo"},{id:-82216347,predicate:"photo",params:[{name:"flags",type:"#"},{name:"has_stickers",type:"flags.0?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"sizes",type:"Vector"},{name:"video_sizes",type:"flags.1?Vector"},{name:"dc_id",type:"int"}],type:"Photo"},{id:236446268,predicate:"photoSizeEmpty",params:[{name:"type",type:"string"}],type:"PhotoSize"},{id:1976012384,predicate:"photoSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"}],type:"PhotoSize"},{id:35527382,predicate:"photoCachedSize",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:286776671,predicate:"geoPointEmpty",params:[],type:"GeoPoint"},{id:-1297942941,predicate:"geoPoint",params:[{name:"flags",type:"#"},{name:"long",type:"double"},{name:"lat",type:"double"},{name:"access_hash",type:"long"},{name:"accuracy_radius",type:"flags.0?int"}],type:"GeoPoint"},{id:1577067778,predicate:"auth.sentCode",params:[{name:"flags",type:"#"},{name:"type",type:"auth.SentCodeType"},{name:"phone_code_hash",type:"string"},{name:"next_type",type:"flags.1?auth.CodeType"},{name:"timeout",type:"flags.2?int"}],type:"auth.SentCode"},{id:782418132,predicate:"auth.authorization",params:[{name:"flags",type:"#"},{name:"setup_password_required",type:"flags.1?true"},{name:"otherwise_relogin_days",type:"flags.1?int"},{name:"tmp_sessions",type:"flags.0?int"},{name:"future_auth_token",type:"flags.2?bytes"},{name:"user",type:"User"}],type:"auth.Authorization"},{id:-1271602504,predicate:"auth.exportedAuthorization",params:[{name:"id",type:"long"},{name:"bytes",type:"bytes"}],type:"auth.ExportedAuthorization"},{id:-1195615476,predicate:"inputNotifyPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputNotifyPeer"},{id:423314455,predicate:"inputNotifyUsers",params:[],type:"InputNotifyPeer"},{id:1251338318,predicate:"inputNotifyChats",params:[],type:"InputNotifyPeer"},{id:-551616469,predicate:"inputPeerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"sound",type:"flags.3?NotificationSound"}],type:"InputPeerNotifySettings"},{id:-1472527322,predicate:"peerNotifySettings",params:[{name:"flags",type:"#"},{name:"show_previews",type:"flags.0?Bool"},{name:"silent",type:"flags.1?Bool"},{name:"mute_until",type:"flags.2?int"},{name:"ios_sound",type:"flags.3?NotificationSound"},{name:"android_sound",type:"flags.4?NotificationSound"},{name:"other_sound",type:"flags.5?NotificationSound"}],type:"PeerNotifySettings"},{id:-1525149427,predicate:"peerSettings",params:[{name:"flags",type:"#"},{name:"report_spam",type:"flags.0?true"},{name:"add_contact",type:"flags.1?true"},{name:"block_contact",type:"flags.2?true"},{name:"share_contact",type:"flags.3?true"},{name:"need_contacts_exception",type:"flags.4?true"},{name:"report_geo",type:"flags.5?true"},{name:"autoarchived",type:"flags.7?true"},{name:"invite_members",type:"flags.8?true"},{name:"request_chat_broadcast",type:"flags.10?true"},{name:"geo_distance",type:"flags.6?int"},{name:"request_chat_title",type:"flags.9?string"},{name:"request_chat_date",type:"flags.9?int"}],type:"PeerSettings"},{id:-1539849235,predicate:"wallPaper",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"pattern",type:"flags.3?true"},{name:"dark",type:"flags.4?true"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"document",type:"Document"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:1490799288,predicate:"inputReportReasonSpam",params:[],type:"ReportReason"},{id:505595789,predicate:"inputReportReasonViolence",params:[],type:"ReportReason"},{id:777640226,predicate:"inputReportReasonPornography",params:[],type:"ReportReason"},{id:-1376497949,predicate:"inputReportReasonChildAbuse",params:[],type:"ReportReason"},{id:-1041980751,predicate:"inputReportReasonOther",params:[],type:"ReportReason"},{id:-120378643,predicate:"userFull",params:[{name:"flags",type:"#"},{name:"blocked",type:"flags.0?true"},{name:"phone_calls_available",type:"flags.4?true"},{name:"phone_calls_private",type:"flags.5?true"},{name:"can_pin_message",type:"flags.7?true"},{name:"has_scheduled",type:"flags.12?true"},{name:"video_calls_available",type:"flags.13?true"},{name:"voice_messages_forbidden",type:"flags.20?true"},{name:"translations_disabled",type:"flags.23?true"},{name:"id",type:"long"},{name:"about",type:"flags.1?string"},{name:"settings",type:"PeerSettings"},{name:"personal_photo",type:"flags.21?Photo"},{name:"profile_photo",type:"flags.2?Photo"},{name:"fallback_photo",type:"flags.22?Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"bot_info",type:"flags.3?BotInfo"},{name:"pinned_msg_id",type:"flags.6?int"},{name:"common_chats_count",type:"int"},{name:"folder_id",type:"flags.11?int"},{name:"ttl_period",type:"flags.14?int"},{name:"theme_emoticon",type:"flags.15?string"},{name:"private_forward_name",type:"flags.16?string"},{name:"bot_group_admin_rights",type:"flags.17?ChatAdminRights"},{name:"bot_broadcast_admin_rights",type:"flags.18?ChatAdminRights"},{name:"premium_gifts",type:"flags.19?Vector"}],type:"UserFull"},{id:341499403,predicate:"contact",params:[{name:"user_id",type:"long"},{name:"mutual",type:"Bool"}],type:"Contact"},{id:-1052885936,predicate:"importedContact",params:[{name:"user_id",type:"long"},{name:"client_id",type:"long"}],type:"ImportedContact"},{id:383348795,predicate:"contactStatus",params:[{name:"user_id",type:"long"},{name:"status",type:"UserStatus"}],type:"ContactStatus"},{id:-1219778094,predicate:"contacts.contactsNotModified",params:[],type:"contacts.Contacts"},{id:-353862078,predicate:"contacts.contacts",params:[{name:"contacts",type:"Vector"},{name:"saved_count",type:"int"},{name:"users",type:"Vector"}],type:"contacts.Contacts"},{id:2010127419,predicate:"contacts.importedContacts",params:[{name:"imported",type:"Vector"},{name:"popular_invites",type:"Vector"},{name:"retry_contacts",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ImportedContacts"},{id:182326673,predicate:"contacts.blocked",params:[{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:-513392236,predicate:"contacts.blockedSlice",params:[{name:"count",type:"int"},{name:"blocked",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Blocked"},{id:364538944,predicate:"messages.dialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:1910543603,predicate:"messages.dialogsSlice",params:[{name:"count",type:"int"},{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Dialogs"},{id:-1938715001,predicate:"messages.messages",params:[{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:978610270,predicate:"messages.messagesSlice",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"count",type:"int"},{name:"next_rate",type:"flags.0?int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:1694474197,predicate:"messages.chats",params:[{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-438840932,predicate:"messages.chatFull",params:[{name:"full_chat",type:"ChatFull"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatFull"},{id:-1269012015,predicate:"messages.affectedHistory",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"}],type:"messages.AffectedHistory"},{id:1474492012,predicate:"inputMessagesFilterEmpty",params:[],type:"MessagesFilter"},{id:-1777752804,predicate:"inputMessagesFilterPhotos",params:[],type:"MessagesFilter"},{id:-1614803355,predicate:"inputMessagesFilterVideo",params:[],type:"MessagesFilter"},{id:1458172132,predicate:"inputMessagesFilterPhotoVideo",params:[],type:"MessagesFilter"},{id:-1629621880,predicate:"inputMessagesFilterDocument",params:[],type:"MessagesFilter"},{id:2129714567,predicate:"inputMessagesFilterUrl",params:[],type:"MessagesFilter"},{id:-3644025,predicate:"inputMessagesFilterGif",params:[],type:"MessagesFilter"},{id:522914557,predicate:"updateNewMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1318109142,predicate:"updateMessageID",params:[{name:"id",type:"int"},{name:"random_id",type:"long"}],type:"Update"},{id:-1576161051,predicate:"updateDeleteMessages",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1071741569,predicate:"updateUserTyping",params:[{name:"user_id",type:"long"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-2092401936,predicate:"updateChatUserTyping",params:[{name:"chat_id",type:"long"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:125178264,predicate:"updateChatParticipants",params:[{name:"participants",type:"ChatParticipants"}],type:"Update"},{id:-440534818,predicate:"updateUserStatus",params:[{name:"user_id",type:"long"},{name:"status",type:"UserStatus"}],type:"Update"},{id:-1484486364,predicate:"updateUserName",params:[{name:"user_id",type:"long"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"usernames",type:"Vector"}],type:"Update"},{id:-1519637954,predicate:"updates.state",params:[{name:"pts",type:"int"},{name:"qts",type:"int"},{name:"date",type:"int"},{name:"seq",type:"int"},{name:"unread_count",type:"int"}],type:"updates.State"},{id:1567990072,predicate:"updates.differenceEmpty",params:[{name:"date",type:"int"},{name:"seq",type:"int"}],type:"updates.Difference"},{id:16030880,predicate:"updates.difference",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"updates.Difference"},{id:-1459938943,predicate:"updates.differenceSlice",params:[{name:"new_messages",type:"Vector"},{name:"new_encrypted_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"intermediate_state",type:"updates.State"}],type:"updates.Difference"},{id:-484987010,predicate:"updatesTooLong",params:[],type:"Updates"},{id:826001400,predicate:"updateShortMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"user_id",type:"long"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?long"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:1299050149,predicate:"updateShortChatMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"mentioned",type:"flags.4?true"},{name:"media_unread",type:"flags.5?true"},{name:"silent",type:"flags.13?true"},{name:"id",type:"int"},{name:"from_id",type:"long"},{name:"chat_id",type:"long"},{name:"message",type:"string"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"fwd_from",type:"flags.2?MessageFwdHeader"},{name:"via_bot_id",type:"flags.11?long"},{name:"reply_to",type:"flags.3?MessageReplyHeader"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:2027216577,predicate:"updateShort",params:[{name:"update",type:"Update"},{name:"date",type:"int"}],type:"Updates"},{id:1918567619,predicate:"updatesCombined",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq_start",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:1957577280,predicate:"updates",params:[{name:"updates",type:"Vector"},{name:"users",type:"Vector"},{name:"chats",type:"Vector"},{name:"date",type:"int"},{name:"seq",type:"int"}],type:"Updates"},{id:-1916114267,predicate:"photos.photos",params:[{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:352657236,predicate:"photos.photosSlice",params:[{name:"count",type:"int"},{name:"photos",type:"Vector"},{name:"users",type:"Vector"}],type:"photos.Photos"},{id:539045032,predicate:"photos.photo",params:[{name:"photo",type:"Photo"},{name:"users",type:"Vector"}],type:"photos.Photo"},{id:157948117,predicate:"upload.file",params:[{name:"type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.File"},{id:414687501,predicate:"dcOption",params:[{name:"flags",type:"#"},{name:"ipv6",type:"flags.0?true"},{name:"media_only",type:"flags.1?true"},{name:"tcpo_only",type:"flags.2?true"},{name:"cdn",type:"flags.3?true"},{name:"static",type:"flags.4?true"},{name:"this_port_only",type:"flags.5?true"},{name:"id",type:"int"},{name:"ip_address",type:"string"},{name:"port",type:"int"},{name:"secret",type:"flags.10?bytes"}],type:"DcOption"},{id:589653676,predicate:"config",params:[{name:"flags",type:"#"},{name:"phonecalls_enabled",type:"flags.1?true"},{name:"default_p2p_contacts",type:"flags.3?true"},{name:"preload_featured_stickers",type:"flags.4?true"},{name:"ignore_phone_entities",type:"flags.5?true"},{name:"revoke_pm_inbox",type:"flags.6?true"},{name:"blocked_mode",type:"flags.8?true"},{name:"pfs_enabled",type:"flags.13?true"},{name:"force_try_ipv6",type:"flags.14?true"},{name:"date",type:"int"},{name:"expires",type:"int"},{name:"test_mode",type:"Bool"},{name:"this_dc",type:"int"},{name:"dc_options",type:"Vector"},{name:"dc_txt_domain_name",type:"string"},{name:"chat_size_max",type:"int"},{name:"megagroup_size_max",type:"int"},{name:"forwarded_count_max",type:"int"},{name:"online_update_period_ms",type:"int"},{name:"offline_blur_timeout_ms",type:"int"},{name:"offline_idle_timeout_ms",type:"int"},{name:"online_cloud_timeout_ms",type:"int"},{name:"notify_cloud_delay_ms",type:"int"},{name:"notify_default_delay_ms",type:"int"},{name:"push_chat_period_ms",type:"int"},{name:"push_chat_limit",type:"int"},{name:"saved_gifs_limit",type:"int"},{name:"edit_time_limit",type:"int"},{name:"revoke_time_limit",type:"int"},{name:"revoke_pm_time_limit",type:"int"},{name:"rating_e_decay",type:"int"},{name:"stickers_recent_limit",type:"int"},{name:"stickers_faved_limit",type:"int"},{name:"channels_read_media_period",type:"int"},{name:"tmp_sessions",type:"flags.0?int"},{name:"pinned_dialogs_count_max",type:"int"},{name:"pinned_infolder_count_max",type:"int"},{name:"call_receive_timeout_ms",type:"int"},{name:"call_ring_timeout_ms",type:"int"},{name:"call_connect_timeout_ms",type:"int"},{name:"call_packet_timeout_ms",type:"int"},{name:"me_url_prefix",type:"string"},{name:"autoupdate_url_prefix",type:"flags.7?string"},{name:"gif_search_username",type:"flags.9?string"},{name:"venue_search_username",type:"flags.10?string"},{name:"img_search_username",type:"flags.11?string"},{name:"static_maps_provider",type:"flags.12?string"},{name:"caption_length_max",type:"int"},{name:"message_length_max",type:"int"},{name:"webfile_dc_id",type:"int"},{name:"suggested_lang_code",type:"flags.2?string"},{name:"lang_pack_version",type:"flags.2?int"},{name:"base_lang_pack_version",type:"flags.2?int"},{name:"reactions_default",type:"flags.15?Reaction"}],type:"Config"},{id:-1910892683,predicate:"nearestDc",params:[{name:"country",type:"string"},{name:"this_dc",type:"int"},{name:"nearest_dc",type:"int"}],type:"NearestDc"},{id:-860107216,predicate:"help.appUpdate",params:[{name:"flags",type:"#"},{name:"can_not_skip",type:"flags.0?true"},{name:"id",type:"int"},{name:"version",type:"string"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"document",type:"flags.1?Document"},{name:"url",type:"flags.2?string"},{name:"sticker",type:"flags.3?Document"}],type:"help.AppUpdate"},{id:-1000708810,predicate:"help.noAppUpdate",params:[],type:"help.AppUpdate"},{id:415997816,predicate:"help.inviteText",params:[{name:"message",type:"string"}],type:"help.InviteText"},{id:314359194,predicate:"updateNewEncryptedMessage",params:[{name:"message",type:"EncryptedMessage"},{name:"qts",type:"int"}],type:"Update"},{id:386986326,predicate:"updateEncryptedChatTyping",params:[{name:"chat_id",type:"int"}],type:"Update"},{id:-1264392051,predicate:"updateEncryption",params:[{name:"chat",type:"EncryptedChat"},{name:"date",type:"int"}],type:"Update"},{id:956179895,predicate:"updateEncryptedMessagesRead",params:[{name:"chat_id",type:"int"},{name:"max_date",type:"int"},{name:"date",type:"int"}],type:"Update"},{id:-1417756512,predicate:"encryptedChatEmpty",params:[{name:"id",type:"int"}],type:"EncryptedChat"},{id:1722964307,predicate:"encryptedChatWaiting",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"}],type:"EncryptedChat"},{id:1223809356,predicate:"encryptedChatRequested",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:1643173063,predicate:"encryptedChat",params:[{name:"id",type:"int"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:505183301,predicate:"encryptedChatDiscarded",params:[{name:"flags",type:"#"},{name:"history_deleted",type:"flags.0?true"},{name:"id",type:"int"}],type:"EncryptedChat"},{id:-247351839,predicate:"inputEncryptedChat",params:[{name:"chat_id",type:"int"},{name:"access_hash",type:"long"}],type:"InputEncryptedChat"},{id:-1038136962,predicate:"encryptedFileEmpty",params:[],type:"EncryptedFile"},{id:-1476358952,predicate:"encryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"long"},{name:"dc_id",type:"int"},{name:"key_fingerprint",type:"int"}],type:"EncryptedFile"},{id:406307684,predicate:"inputEncryptedFileEmpty",params:[],type:"InputEncryptedFile"},{id:1690108678,predicate:"inputEncryptedFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:1511503333,predicate:"inputEncryptedFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputEncryptedFile"},{id:-182231723,predicate:"inputEncryptedFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:-317144808,predicate:"encryptedMessage",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"},{name:"file",type:"EncryptedFile"}],type:"EncryptedMessage"},{id:594758406,predicate:"encryptedMessageService",params:[{name:"random_id",type:"long"},{name:"chat_id",type:"int"},{name:"date",type:"int"},{name:"bytes",type:"bytes"}],type:"EncryptedMessage"},{id:-1058912715,predicate:"messages.dhConfigNotModified",params:[{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:740433629,predicate:"messages.dhConfig",params:[{name:"g",type:"int"},{name:"p",type:"bytes"},{name:"version",type:"int"},{name:"random",type:"bytes"}],type:"messages.DhConfig"},{id:1443858741,predicate:"messages.sentEncryptedMessage",params:[{name:"date",type:"int"}],type:"messages.SentEncryptedMessage"},{id:-1802240206,predicate:"messages.sentEncryptedFile",params:[{name:"date",type:"int"},{name:"file",type:"EncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:-95482955,predicate:"inputFileBig",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"name",type:"string"}],type:"InputFile"},{id:767652808,predicate:"inputEncryptedFileBigUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"key_fingerprint",type:"int"}],type:"InputEncryptedFile"},{id:1037718609,predicate:"updateChatParticipantAdd",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"},{name:"version",type:"int"}],type:"Update"},{id:-483443337,predicate:"updateChatParticipantDelete",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"long"},{name:"version",type:"int"}],type:"Update"},{id:-1906403213,predicate:"updateDcOptions",params:[{name:"dc_options",type:"Vector"}],type:"Update"},{id:1530447553,predicate:"inputMediaUploadedDocument",params:[{name:"flags",type:"#"},{name:"nosound_video",type:"flags.3?true"},{name:"force_file",type:"flags.4?true"},{name:"spoiler",type:"flags.5?true"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.2?InputFile"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"},{name:"stickers",type:"flags.0?Vector"},{name:"ttl_seconds",type:"flags.1?int"}],type:"InputMedia"},{id:860303448,predicate:"inputMediaDocument",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.2?true"},{name:"id",type:"InputDocument"},{name:"ttl_seconds",type:"flags.0?int"},{name:"query",type:"flags.1?string"}],type:"InputMedia"},{id:-1666158377,predicate:"messageMediaDocument",params:[{name:"flags",type:"#"},{name:"nopremium",type:"flags.3?true"},{name:"spoiler",type:"flags.4?true"},{name:"document",type:"flags.0?Document"},{name:"ttl_seconds",type:"flags.2?int"}],type:"MessageMedia"},{id:1928391342,predicate:"inputDocumentEmpty",params:[],type:"InputDocument"},{id:448771445,predicate:"inputDocument",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"}],type:"InputDocument"},{id:-1160743548,predicate:"inputDocumentFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:922273905,predicate:"documentEmpty",params:[{name:"id",type:"long"}],type:"Document"},{id:-1881881384,predicate:"document",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"date",type:"int"},{name:"mime_type",type:"string"},{name:"size",type:"long"},{name:"thumbs",type:"flags.0?Vector"},{name:"video_thumbs",type:"flags.1?Vector"},{name:"dc_id",type:"int"},{name:"attributes",type:"Vector"}],type:"Document"},{id:398898678,predicate:"help.support",params:[{name:"phone_number",type:"string"},{name:"user",type:"User"}],type:"help.Support"},{id:-1613493288,predicate:"notifyPeer",params:[{name:"peer",type:"Peer"}],type:"NotifyPeer"},{id:-1261946036,predicate:"notifyUsers",params:[],type:"NotifyPeer"},{id:-1073230141,predicate:"notifyChats",params:[],type:"NotifyPeer"},{id:-1094555409,predicate:"updateNotifySettings",params:[{name:"peer",type:"NotifyPeer"},{name:"notify_settings",type:"PeerNotifySettings"}],type:"Update"},{id:381645902,predicate:"sendMessageTypingAction",params:[],type:"SendMessageAction"},{id:-44119819,predicate:"sendMessageCancelAction",params:[],type:"SendMessageAction"},{id:-1584933265,predicate:"sendMessageRecordVideoAction",params:[],type:"SendMessageAction"},{id:-378127636,predicate:"sendMessageUploadVideoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-718310409,predicate:"sendMessageRecordAudioAction",params:[],type:"SendMessageAction"},{id:-212740181,predicate:"sendMessageUploadAudioAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-774682074,predicate:"sendMessageUploadPhotoAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-1441998364,predicate:"sendMessageUploadDocumentAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:393186209,predicate:"sendMessageGeoLocationAction",params:[],type:"SendMessageAction"},{id:1653390447,predicate:"sendMessageChooseContactAction",params:[],type:"SendMessageAction"},{id:-1290580579,predicate:"contacts.found",params:[{name:"my_results",type:"Vector"},{name:"results",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.Found"},{id:-337352679,predicate:"updateServiceNotification",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"inbox_date",type:"flags.1?int"},{name:"type",type:"string"},{name:"message",type:"string"},{name:"media",type:"MessageMedia"},{name:"entities",type:"Vector"}],type:"Update"},{id:-496024847,predicate:"userStatusRecently",params:[],type:"UserStatus"},{id:129960444,predicate:"userStatusLastWeek",params:[],type:"UserStatus"},{id:2011940674,predicate:"userStatusLastMonth",params:[],type:"UserStatus"},{id:-298113238,predicate:"updatePrivacy",params:[{name:"key",type:"PrivacyKey"},{name:"rules",type:"Vector"}],type:"Update"},{id:1335282456,predicate:"inputPrivacyKeyStatusTimestamp",params:[],type:"InputPrivacyKey"},{id:-1137792208,predicate:"privacyKeyStatusTimestamp",params:[],type:"PrivacyKey"},{id:218751099,predicate:"inputPrivacyValueAllowContacts",params:[],type:"InputPrivacyRule"},{id:407582158,predicate:"inputPrivacyValueAllowAll",params:[],type:"InputPrivacyRule"},{id:320652927,predicate:"inputPrivacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:195371015,predicate:"inputPrivacyValueDisallowContacts",params:[],type:"InputPrivacyRule"},{id:-697604407,predicate:"inputPrivacyValueDisallowAll",params:[],type:"InputPrivacyRule"},{id:-1877932953,predicate:"inputPrivacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"InputPrivacyRule"},{id:-123988,predicate:"privacyValueAllowContacts",params:[],type:"PrivacyRule"},{id:1698855810,predicate:"privacyValueAllowAll",params:[],type:"PrivacyRule"},{id:-1198497870,predicate:"privacyValueAllowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:-125240806,predicate:"privacyValueDisallowContacts",params:[],type:"PrivacyRule"},{id:-1955338397,predicate:"privacyValueDisallowAll",params:[],type:"PrivacyRule"},{id:-463335103,predicate:"privacyValueDisallowUsers",params:[{name:"users",type:"Vector"}],type:"PrivacyRule"},{id:1352683077,predicate:"account.privacyRules",params:[{name:"rules",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"account.PrivacyRules"},{id:-1194283041,predicate:"accountDaysTTL",params:[{name:"days",type:"int"}],type:"AccountDaysTTL"},{id:88680979,predicate:"updateUserPhone",params:[{name:"user_id",type:"long"},{name:"phone",type:"string"}],type:"Update"},{id:1815593308,predicate:"documentAttributeImageSize",params:[{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:297109817,predicate:"documentAttributeAnimated",params:[],type:"DocumentAttribute"},{id:1662637586,predicate:"documentAttributeSticker",params:[{name:"flags",type:"#"},{name:"mask",type:"flags.1?true"},{name:"alt",type:"string"},{name:"stickerset",type:"InputStickerSet"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"DocumentAttribute"},{id:250621158,predicate:"documentAttributeVideo",params:[{name:"flags",type:"#"},{name:"round_message",type:"flags.0?true"},{name:"supports_streaming",type:"flags.1?true"},{name:"duration",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"DocumentAttribute"},{id:-1739392570,predicate:"documentAttributeAudio",params:[{name:"flags",type:"#"},{name:"voice",type:"flags.10?true"},{name:"duration",type:"int"},{name:"title",type:"flags.0?string"},{name:"performer",type:"flags.1?string"},{name:"waveform",type:"flags.2?bytes"}],type:"DocumentAttribute"},{id:358154344,predicate:"documentAttributeFilename",params:[{name:"file_name",type:"string"}],type:"DocumentAttribute"},{id:-244016606,predicate:"messages.stickersNotModified",params:[],type:"messages.Stickers"},{id:816245886,predicate:"messages.stickers",params:[{name:"hash",type:"long"},{name:"stickers",type:"Vector"}],type:"messages.Stickers"},{id:313694676,predicate:"stickerPack",params:[{name:"emoticon",type:"string"},{name:"documents",type:"Vector"}],type:"StickerPack"},{id:-395967805,predicate:"messages.allStickersNotModified",params:[],type:"messages.AllStickers"},{id:-843329861,predicate:"messages.allStickers",params:[{name:"hash",type:"long"},{name:"sets",type:"Vector"}],type:"messages.AllStickers"},{id:-1667805217,predicate:"updateReadHistoryInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:791617983,predicate:"updateReadHistoryOutbox",params:[{name:"peer",type:"Peer"},{name:"max_id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-2066640507,predicate:"messages.affectedMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"messages.AffectedMessages"},{id:2139689491,predicate:"updateWebPage",params:[{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-350980120,predicate:"webPageEmpty",params:[{name:"id",type:"long"}],type:"WebPage"},{id:-981018084,predicate:"webPagePending",params:[{name:"id",type:"long"},{name:"date",type:"int"}],type:"WebPage"},{id:-392411726,predicate:"webPage",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"url",type:"string"},{name:"display_url",type:"string"},{name:"hash",type:"int"},{name:"type",type:"flags.0?string"},{name:"site_name",type:"flags.1?string"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"photo",type:"flags.4?Photo"},{name:"embed_url",type:"flags.5?string"},{name:"embed_type",type:"flags.5?string"},{name:"embed_width",type:"flags.6?int"},{name:"embed_height",type:"flags.6?int"},{name:"duration",type:"flags.7?int"},{name:"author",type:"flags.8?string"},{name:"document",type:"flags.9?Document"},{name:"cached_page",type:"flags.10?Page"},{name:"attributes",type:"flags.12?Vector"}],type:"WebPage"},{id:-1557277184,predicate:"messageMediaWebPage",params:[{name:"webpage",type:"WebPage"}],type:"MessageMedia"},{id:-1392388579,predicate:"authorization",params:[{name:"flags",type:"#"},{name:"current",type:"flags.0?true"},{name:"official_app",type:"flags.1?true"},{name:"password_pending",type:"flags.2?true"},{name:"encrypted_requests_disabled",type:"flags.3?true"},{name:"call_requests_disabled",type:"flags.4?true"},{name:"hash",type:"long"},{name:"device_model",type:"string"},{name:"platform",type:"string"},{name:"system_version",type:"string"},{name:"api_id",type:"int"},{name:"app_name",type:"string"},{name:"app_version",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"country",type:"string"},{name:"region",type:"string"}],type:"Authorization"},{id:1275039392,predicate:"account.authorizations",params:[{name:"authorization_ttl_days",type:"int"},{name:"authorizations",type:"Vector"}],type:"account.Authorizations"},{id:-1787080453,predicate:"account.password",params:[{name:"flags",type:"#"},{name:"has_recovery",type:"flags.0?true"},{name:"has_secure_values",type:"flags.1?true"},{name:"has_password",type:"flags.2?true"},{name:"current_algo",type:"flags.2?PasswordKdfAlgo"},{name:"srp_B",type:"flags.2?bytes"},{name:"srp_id",type:"flags.2?long"},{name:"hint",type:"flags.3?string"},{name:"email_unconfirmed_pattern",type:"flags.4?string"},{name:"new_algo",type:"PasswordKdfAlgo"},{name:"new_secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_random",type:"bytes"},{name:"pending_reset_date",type:"flags.5?int"},{name:"login_email_pattern",type:"flags.6?string"}],type:"account.Password"},{id:-1705233435,predicate:"account.passwordSettings",params:[{name:"flags",type:"#"},{name:"email",type:"flags.0?string"},{name:"secure_settings",type:"flags.1?SecureSecretSettings"}],type:"account.PasswordSettings"},{id:-1036572727,predicate:"account.passwordInputSettings",params:[{name:"flags",type:"#"},{name:"new_algo",type:"flags.0?PasswordKdfAlgo"},{name:"new_password_hash",type:"flags.0?bytes"},{name:"hint",type:"flags.0?string"},{name:"email",type:"flags.1?string"},{name:"new_secure_settings",type:"flags.2?SecureSecretSettings"}],type:"account.PasswordInputSettings"},{id:326715557,predicate:"auth.passwordRecovery",params:[{name:"email_pattern",type:"string"}],type:"auth.PasswordRecovery"},{id:-1052959727,predicate:"inputMediaVenue",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"InputMedia"},{id:784356159,predicate:"messageMediaVenue",params:[{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"}],type:"MessageMedia"},{id:-1551583367,predicate:"receivedNotifyMessage",params:[{name:"id",type:"int"},{name:"flags",type:"int"}],type:"ReceivedNotifyMessage"},{id:179611673,predicate:"chatInviteExported",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.0?true"},{name:"permanent",type:"flags.5?true"},{name:"request_needed",type:"flags.6?true"},{name:"link",type:"string"},{name:"admin_id",type:"long"},{name:"date",type:"int"},{name:"start_date",type:"flags.4?int"},{name:"expire_date",type:"flags.1?int"},{name:"usage_limit",type:"flags.2?int"},{name:"usage",type:"flags.3?int"},{name:"requested",type:"flags.7?int"},{name:"title",type:"flags.8?string"}],type:"ExportedChatInvite"},{id:1516793212,predicate:"chatInviteAlready",params:[{name:"chat",type:"Chat"}],type:"ChatInvite"},{id:806110401,predicate:"chatInvite",params:[{name:"flags",type:"#"},{name:"channel",type:"flags.0?true"},{name:"broadcast",type:"flags.1?true"},{name:"public",type:"flags.2?true"},{name:"megagroup",type:"flags.3?true"},{name:"request_needed",type:"flags.6?true"},{name:"title",type:"string"},{name:"about",type:"flags.5?string"},{name:"photo",type:"Photo"},{name:"participants_count",type:"int"},{name:"participants",type:"flags.4?Vector"}],type:"ChatInvite"},{id:51520707,predicate:"messageActionChatJoinedByLink",params:[{name:"inviter_id",type:"long"}],type:"MessageAction"},{id:1757493555,predicate:"updateReadMessagesContents",params:[{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-4838507,predicate:"inputStickerSetEmpty",params:[],type:"InputStickerSet"},{id:-1645763991,predicate:"inputStickerSetID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputStickerSet"},{id:-2044933984,predicate:"inputStickerSetShortName",params:[{name:"short_name",type:"string"}],type:"InputStickerSet"},{id:768691932,predicate:"stickerSet",params:[{name:"flags",type:"#"},{name:"archived",type:"flags.1?true"},{name:"official",type:"flags.2?true"},{name:"masks",type:"flags.3?true"},{name:"animated",type:"flags.5?true"},{name:"videos",type:"flags.6?true"},{name:"emojis",type:"flags.7?true"},{name:"installed_date",type:"flags.0?int"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumbs",type:"flags.4?Vector"},{name:"thumb_dc_id",type:"flags.4?int"},{name:"thumb_version",type:"flags.4?int"},{name:"thumb_document_id",type:"flags.8?long"},{name:"count",type:"int"},{name:"hash",type:"int"}],type:"StickerSet"},{id:1846886166,predicate:"messages.stickerSet",params:[{name:"set",type:"StickerSet"},{name:"packs",type:"Vector"},{name:"keywords",type:"Vector"},{name:"documents",type:"Vector"}],type:"messages.StickerSet"},{id:-1885878744,predicate:"user",params:[{name:"flags",type:"#"},{name:"self",type:"flags.10?true"},{name:"contact",type:"flags.11?true"},{name:"mutual_contact",type:"flags.12?true"},{name:"deleted",type:"flags.13?true"},{name:"bot",type:"flags.14?true"},{name:"bot_chat_history",type:"flags.15?true"},{name:"bot_nochats",type:"flags.16?true"},{name:"verified",type:"flags.17?true"},{name:"restricted",type:"flags.18?true"},{name:"min",type:"flags.20?true"},{name:"bot_inline_geo",type:"flags.21?true"},{name:"support",type:"flags.23?true"},{name:"scam",type:"flags.24?true"},{name:"apply_min_photo",type:"flags.25?true"},{name:"fake",type:"flags.26?true"},{name:"bot_attach_menu",type:"flags.27?true"},{name:"premium",type:"flags.28?true"},{name:"attach_menu_enabled",type:"flags.29?true"},{name:"flags2",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"flags.0?long"},{name:"first_name",type:"flags.1?string"},{name:"last_name",type:"flags.2?string"},{name:"username",type:"flags.3?string"},{name:"phone",type:"flags.4?string"},{name:"photo",type:"flags.5?UserProfilePhoto"},{name:"status",type:"flags.6?UserStatus"},{name:"bot_info_version",type:"flags.14?int"},{name:"restriction_reason",type:"flags.18?Vector"},{name:"bot_inline_placeholder",type:"flags.19?string"},{name:"lang_code",type:"flags.22?string"},{name:"emoji_status",type:"flags.30?EmojiStatus"},{name:"usernames",type:"flags2.0?Vector"}],type:"User"},{id:-1032140601,predicate:"botCommand",params:[{name:"command",type:"string"},{name:"description",type:"string"}],type:"BotCommand"},{id:-1892676777,predicate:"botInfo",params:[{name:"flags",type:"#"},{name:"user_id",type:"flags.0?long"},{name:"description",type:"flags.1?string"},{name:"description_photo",type:"flags.4?Photo"},{name:"description_document",type:"flags.5?Document"},{name:"commands",type:"flags.2?Vector"},{name:"menu_button",type:"flags.3?BotMenuButton"}],type:"BotInfo"},{id:-1560655744,predicate:"keyboardButton",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:2002815875,predicate:"keyboardButtonRow",params:[{name:"buttons",type:"Vector"}],type:"KeyboardButtonRow"},{id:-1606526075,predicate:"replyKeyboardHide",params:[{name:"flags",type:"#"},{name:"selective",type:"flags.2?true"}],type:"ReplyMarkup"},{id:-2035021048,predicate:"replyKeyboardForceReply",params:[{name:"flags",type:"#"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:-2049074735,predicate:"replyKeyboardMarkup",params:[{name:"flags",type:"#"},{name:"resize",type:"flags.0?true"},{name:"single_use",type:"flags.1?true"},{name:"selective",type:"flags.2?true"},{name:"persistent",type:"flags.4?true"},{name:"rows",type:"Vector"},{name:"placeholder",type:"flags.3?string"}],type:"ReplyMarkup"},{id:-571955892,predicate:"inputPeerUser",params:[{name:"user_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-233744186,predicate:"inputUser",params:[{name:"user_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputUser"},{id:-1148011883,predicate:"messageEntityUnknown",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-100378723,predicate:"messageEntityMention",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1868782349,predicate:"messageEntityHashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1827637959,predicate:"messageEntityBotCommand",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1859134776,predicate:"messageEntityUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1692693954,predicate:"messageEntityEmail",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1117713463,predicate:"messageEntityBold",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-2106619040,predicate:"messageEntityItalic",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:681706865,predicate:"messageEntityCode",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1938967520,predicate:"messageEntityPre",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"language",type:"string"}],type:"MessageEntity"},{id:1990644519,predicate:"messageEntityTextUrl",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"url",type:"string"}],type:"MessageEntity"},{id:-1877614335,predicate:"updateShortSentMessage",params:[{name:"flags",type:"#"},{name:"out",type:"flags.1?true"},{name:"id",type:"int"},{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"date",type:"int"},{name:"media",type:"flags.9?MessageMedia"},{name:"entities",type:"flags.7?Vector"},{name:"ttl_period",type:"flags.25?int"}],type:"Updates"},{id:-292807034,predicate:"inputChannelEmpty",params:[],type:"InputChannel"},{id:-212145112,predicate:"inputChannel",params:[{name:"channel_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputChannel"},{id:-1566230754,predicate:"peerChannel",params:[{name:"channel_id",type:"long"}],type:"Peer"},{id:666680316,predicate:"inputPeerChannel",params:[{name:"channel_id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPeer"},{id:-2094689180,predicate:"channel",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"left",type:"flags.2?true"},{name:"broadcast",type:"flags.5?true"},{name:"verified",type:"flags.7?true"},{name:"megagroup",type:"flags.8?true"},{name:"restricted",type:"flags.9?true"},{name:"signatures",type:"flags.11?true"},{name:"min",type:"flags.12?true"},{name:"scam",type:"flags.19?true"},{name:"has_link",type:"flags.20?true"},{name:"has_geo",type:"flags.21?true"},{name:"slowmode_enabled",type:"flags.22?true"},{name:"call_active",type:"flags.23?true"},{name:"call_not_empty",type:"flags.24?true"},{name:"fake",type:"flags.25?true"},{name:"gigagroup",type:"flags.26?true"},{name:"noforwards",type:"flags.27?true"},{name:"join_to_send",type:"flags.28?true"},{name:"join_request",type:"flags.29?true"},{name:"forum",type:"flags.30?true"},{name:"flags2",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"flags.13?long"},{name:"title",type:"string"},{name:"username",type:"flags.6?string"},{name:"photo",type:"ChatPhoto"},{name:"date",type:"int"},{name:"restriction_reason",type:"flags.9?Vector"},{name:"admin_rights",type:"flags.14?ChatAdminRights"},{name:"banned_rights",type:"flags.15?ChatBannedRights"},{name:"default_banned_rights",type:"flags.18?ChatBannedRights"},{name:"participants_count",type:"flags.17?int"},{name:"usernames",type:"flags2.0?Vector"}],type:"Chat"},{id:399807445,predicate:"channelForbidden",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.5?true"},{name:"megagroup",type:"flags.8?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"title",type:"string"},{name:"until_date",type:"flags.16?int"}],type:"Chat"},{id:2131196633,predicate:"contacts.resolvedPeer",params:[{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.ResolvedPeer"},{id:-231385849,predicate:"channelFull",params:[{name:"flags",type:"#"},{name:"can_view_participants",type:"flags.3?true"},{name:"can_set_username",type:"flags.6?true"},{name:"can_set_stickers",type:"flags.7?true"},{name:"hidden_prehistory",type:"flags.10?true"},{name:"can_set_location",type:"flags.16?true"},{name:"has_scheduled",type:"flags.19?true"},{name:"can_view_stats",type:"flags.20?true"},{name:"blocked",type:"flags.22?true"},{name:"flags2",type:"#"},{name:"can_delete_channel",type:"flags2.0?true"},{name:"antispam",type:"flags2.1?true"},{name:"participants_hidden",type:"flags2.2?true"},{name:"translations_disabled",type:"flags2.3?true"},{name:"id",type:"long"},{name:"about",type:"string"},{name:"participants_count",type:"flags.0?int"},{name:"admins_count",type:"flags.1?int"},{name:"kicked_count",type:"flags.2?int"},{name:"banned_count",type:"flags.2?int"},{name:"online_count",type:"flags.13?int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"chat_photo",type:"Photo"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"exported_invite",type:"flags.23?ExportedChatInvite"},{name:"bot_info",type:"Vector"},{name:"migrated_from_chat_id",type:"flags.4?long"},{name:"migrated_from_max_id",type:"flags.4?int"},{name:"pinned_msg_id",type:"flags.5?int"},{name:"stickerset",type:"flags.8?StickerSet"},{name:"available_min_id",type:"flags.9?int"},{name:"folder_id",type:"flags.11?int"},{name:"linked_chat_id",type:"flags.14?long"},{name:"location",type:"flags.15?ChannelLocation"},{name:"slowmode_seconds",type:"flags.17?int"},{name:"slowmode_next_send_date",type:"flags.18?int"},{name:"stats_dc",type:"flags.12?int"},{name:"pts",type:"int"},{name:"call",type:"flags.21?InputGroupCall"},{name:"ttl_period",type:"flags.24?int"},{name:"pending_suggestions",type:"flags.25?Vector"},{name:"groupcall_default_join_as",type:"flags.26?Peer"},{name:"theme_emoticon",type:"flags.27?string"},{name:"requests_pending",type:"flags.28?int"},{name:"recent_requesters",type:"flags.28?Vector"},{name:"default_send_as",type:"flags.29?Peer"},{name:"available_reactions",type:"flags.30?ChatReactions"}],type:"ChatFull"},{id:182649427,predicate:"messageRange",params:[{name:"min_id",type:"int"},{name:"max_id",type:"int"}],type:"MessageRange"},{id:-948520370,predicate:"messages.channelMessages",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"pts",type:"int"},{name:"count",type:"int"},{name:"offset_id_offset",type:"flags.2?int"},{name:"messages",type:"Vector"},{name:"topics",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.Messages"},{id:-1781355374,predicate:"messageActionChannelCreate",params:[{name:"title",type:"string"}],type:"MessageAction"},{id:277713951,predicate:"updateChannelTooLong",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"pts",type:"flags.0?int"}],type:"Update"},{id:1666927625,predicate:"updateChannel",params:[{name:"channel_id",type:"long"}],type:"Update"},{id:1656358105,predicate:"updateNewChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1842450928,predicate:"updateReadChannelInbox",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"channel_id",type:"long"},{name:"max_id",type:"int"},{name:"still_unread_count",type:"int"},{name:"pts",type:"int"}],type:"Update"},{id:-1020437742,predicate:"updateDeleteChannelMessages",params:[{name:"channel_id",type:"long"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-232346616,predicate:"updateChannelMessageViews",params:[{name:"channel_id",type:"long"},{name:"id",type:"int"},{name:"views",type:"int"}],type:"Update"},{id:1041346555,predicate:"updates.channelDifferenceEmpty",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"}],type:"updates.ChannelDifference"},{id:-1531132162,predicate:"updates.channelDifferenceTooLong",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"timeout",type:"flags.1?int"},{name:"dialog",type:"Dialog"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:543450958,predicate:"updates.channelDifference",params:[{name:"flags",type:"#"},{name:"final",type:"flags.0?true"},{name:"pts",type:"int"},{name:"timeout",type:"flags.1?int"},{name:"new_messages",type:"Vector"},{name:"other_updates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"updates.ChannelDifference"},{id:-1798033689,predicate:"channelMessagesFilterEmpty",params:[],type:"ChannelMessagesFilter"},{id:-847783593,predicate:"channelMessagesFilter",params:[{name:"flags",type:"#"},{name:"exclude_new_messages",type:"flags.1?true"},{name:"ranges",type:"Vector"}],type:"ChannelMessagesFilter"},{id:-1072953408,predicate:"channelParticipant",params:[{name:"user_id",type:"long"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:900251559,predicate:"channelParticipantSelf",params:[{name:"flags",type:"#"},{name:"via_request",type:"flags.0?true"},{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"}],type:"ChannelParticipant"},{id:803602899,predicate:"channelParticipantCreator",params:[{name:"flags",type:"#"},{name:"user_id",type:"long"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.0?string"}],type:"ChannelParticipant"},{id:-566281095,predicate:"channelParticipantsRecent",params:[],type:"ChannelParticipantsFilter"},{id:-1268741783,predicate:"channelParticipantsAdmins",params:[],type:"ChannelParticipantsFilter"},{id:-1548400251,predicate:"channelParticipantsKicked",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-1699676497,predicate:"channels.channelParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipants"},{id:-541588713,predicate:"channels.channelParticipant",params:[{name:"participant",type:"ChannelParticipant"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.ChannelParticipant"},{id:-462696732,predicate:"chatParticipantCreator",params:[{name:"user_id",type:"long"}],type:"ChatParticipant"},{id:-1600962725,predicate:"chatParticipantAdmin",params:[{name:"user_id",type:"long"},{name:"inviter_id",type:"long"},{name:"date",type:"int"}],type:"ChatParticipant"},{id:-674602590,predicate:"updateChatParticipantAdmin",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"long"},{name:"is_admin",type:"Bool"},{name:"version",type:"int"}],type:"Update"},{id:-519864430,predicate:"messageActionChatMigrateTo",params:[{name:"channel_id",type:"long"}],type:"MessageAction"},{id:-365344535,predicate:"messageActionChannelMigrateFrom",params:[{name:"title",type:"string"},{name:"chat_id",type:"long"}],type:"MessageAction"},{id:-1328445861,predicate:"channelParticipantsBots",params:[],type:"ChannelParticipantsFilter"},{id:2013922064,predicate:"help.termsOfService",params:[{name:"flags",type:"#"},{name:"popup",type:"flags.0?true"},{name:"id",type:"DataJSON"},{name:"text",type:"string"},{name:"entities",type:"Vector"},{name:"min_age_confirm",type:"flags.1?int"}],type:"help.TermsOfService"},{id:1753886890,predicate:"updateNewStickerSet",params:[{name:"stickerset",type:"messages.StickerSet"}],type:"Update"},{id:196268545,predicate:"updateStickerSetsOrder",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"order",type:"Vector"}],type:"Update"},{id:834816008,predicate:"updateStickerSets",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"}],type:"Update"},{id:-402498398,predicate:"messages.savedGifsNotModified",params:[],type:"messages.SavedGifs"},{id:-2069878259,predicate:"messages.savedGifs",params:[{name:"hash",type:"long"},{name:"gifs",type:"Vector"}],type:"messages.SavedGifs"},{id:-1821035490,predicate:"updateSavedGifs",params:[],type:"Update"},{id:864077702,predicate:"inputBotInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1036876423,predicate:"inputBotInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-2000710887,predicate:"inputBotInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?InputWebDocument"},{name:"content",type:"flags.5?InputWebDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1984755728,predicate:"botInlineMessageMediaAuto",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1937807902,predicate:"botInlineMessageText",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:295067450,predicate:"botInlineResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"url",type:"flags.3?string"},{name:"thumb",type:"flags.4?WebDocument"},{name:"content",type:"flags.5?WebDocument"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1803769784,predicate:"messages.botResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"query_id",type:"long"},{name:"next_offset",type:"flags.1?string"},{name:"switch_pm",type:"flags.2?InlineBotSwitchPM"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"users",type:"Vector"}],type:"messages.BotResults"},{id:1232025500,predicate:"updateBotInlineQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"peer_type",type:"flags.1?InlineQueryPeerType"},{name:"offset",type:"string"}],type:"Update"},{id:317794823,predicate:"updateBotInlineSend",params:[{name:"flags",type:"#"},{name:"user_id",type:"long"},{name:"query",type:"string"},{name:"geo",type:"flags.0?GeoPoint"},{name:"id",type:"string"},{name:"msg_id",type:"flags.1?InputBotInlineMessageID"}],type:"Update"},{id:1358283666,predicate:"inputMessagesFilterVoice",params:[],type:"MessagesFilter"},{id:928101534,predicate:"inputMessagesFilterMusic",params:[],type:"MessagesFilter"},{id:-1107622874,predicate:"inputPrivacyKeyChatInvite",params:[],type:"InputPrivacyKey"},{id:1343122938,predicate:"privacyKeyChatInvite",params:[],type:"PrivacyKey"},{id:1571494644,predicate:"exportedMessageLink",params:[{name:"link",type:"string"},{name:"html",type:"string"}],type:"ExportedMessageLink"},{id:1601666510,predicate:"messageFwdHeader",params:[{name:"flags",type:"#"},{name:"imported",type:"flags.7?true"},{name:"from_id",type:"flags.0?Peer"},{name:"from_name",type:"flags.5?string"},{name:"date",type:"int"},{name:"channel_post",type:"flags.2?int"},{name:"post_author",type:"flags.3?string"},{name:"saved_from_peer",type:"flags.4?Peer"},{name:"saved_from_msg_id",type:"flags.4?int"},{name:"psa_type",type:"flags.6?string"}],type:"MessageFwdHeader"},{id:457133559,predicate:"updateEditChannelMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1799538451,predicate:"messageActionPinMessage",params:[],type:"MessageAction"},{id:1923290508,predicate:"auth.codeTypeSms",params:[],type:"auth.CodeType"},{id:1948046307,predicate:"auth.codeTypeCall",params:[],type:"auth.CodeType"},{id:577556219,predicate:"auth.codeTypeFlashCall",params:[],type:"auth.CodeType"},{id:1035688326,predicate:"auth.sentCodeTypeApp",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1073693790,predicate:"auth.sentCodeTypeSms",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:1398007207,predicate:"auth.sentCodeTypeCall",params:[{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1425815847,predicate:"auth.sentCodeTypeFlashCall",params:[{name:"pattern",type:"string"}],type:"auth.SentCodeType"},{id:629866245,predicate:"keyboardButtonUrl",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:901503851,predicate:"keyboardButtonCallback",params:[{name:"flags",type:"#"},{name:"requires_password",type:"flags.0?true"},{name:"text",type:"string"},{name:"data",type:"bytes"}],type:"KeyboardButton"},{id:-1318425559,predicate:"keyboardButtonRequestPhone",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-59151553,predicate:"keyboardButtonRequestGeoLocation",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:90744648,predicate:"keyboardButtonSwitchInline",params:[{name:"flags",type:"#"},{name:"same_peer",type:"flags.0?true"},{name:"text",type:"string"},{name:"query",type:"string"}],type:"KeyboardButton"},{id:1218642516,predicate:"replyInlineMarkup",params:[{name:"rows",type:"Vector"}],type:"ReplyMarkup"},{id:911761060,predicate:"messages.botCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"has_url",type:"flags.3?true"},{name:"native_ui",type:"flags.4?true"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"messages.BotCallbackAnswer"},{id:-1177566067,predicate:"updateBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:649453030,predicate:"messages.messageEditData",params:[{name:"flags",type:"#"},{name:"caption",type:"flags.0?true"}],type:"messages.MessageEditData"},{id:-469536605,predicate:"updateEditMessage",params:[{name:"message",type:"Message"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1768777083,predicate:"inputBotInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:1098628881,predicate:"inputBotInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo_point",type:"InputGeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-1494368259,predicate:"inputBotInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:85477117,predicate:"botInlineMessageMediaGeo",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1970903652,predicate:"botInlineMessageMediaVenue",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"title",type:"string"},{name:"address",type:"string"},{name:"provider",type:"string"},{name:"venue_id",type:"string"},{name:"venue_type",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:416402882,predicate:"botInlineMessageMediaContact",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"vcard",type:"string"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1462213465,predicate:"inputBotInlineResultPhoto",params:[{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"InputPhoto"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:-459324,predicate:"inputBotInlineResultDocument",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"title",type:"flags.1?string"},{name:"description",type:"flags.2?string"},{name:"document",type:"InputDocument"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:400266251,predicate:"botInlineMediaResult",params:[{name:"flags",type:"#"},{name:"id",type:"string"},{name:"type",type:"string"},{name:"photo",type:"flags.0?Photo"},{name:"document",type:"flags.1?Document"},{name:"title",type:"flags.2?string"},{name:"description",type:"flags.3?string"},{name:"send_message",type:"BotInlineMessage"}],type:"BotInlineResult"},{id:-1995686519,predicate:"inputBotInlineMessageID",params:[{name:"dc_id",type:"int"},{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputBotInlineMessageID"},{id:1763610706,predicate:"updateInlineBotCallbackQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"msg_id",type:"InputBotInlineMessageID"},{name:"chat_instance",type:"long"},{name:"data",type:"flags.0?bytes"},{name:"game_short_name",type:"flags.1?string"}],type:"Update"},{id:1008755359,predicate:"inlineBotSwitchPM",params:[{name:"text",type:"string"},{name:"start_param",type:"string"}],type:"InlineBotSwitchPM"},{id:863093588,predicate:"messages.peerDialogs",params:[{name:"dialogs",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"state",type:"updates.State"}],type:"messages.PeerDialogs"},{id:-305282981,predicate:"topPeer",params:[{name:"peer",type:"Peer"},{name:"rating",type:"double"}],type:"TopPeer"},{id:-1419371685,predicate:"topPeerCategoryBotsPM",params:[],type:"TopPeerCategory"},{id:344356834,predicate:"topPeerCategoryBotsInline",params:[],type:"TopPeerCategory"},{id:104314861,predicate:"topPeerCategoryCorrespondents",params:[],type:"TopPeerCategory"},{id:-1122524854,predicate:"topPeerCategoryGroups",params:[],type:"TopPeerCategory"},{id:371037736,predicate:"topPeerCategoryChannels",params:[],type:"TopPeerCategory"},{id:-75283823,predicate:"topPeerCategoryPeers",params:[{name:"category",type:"TopPeerCategory"},{name:"count",type:"int"},{name:"peers",type:"Vector"}],type:"TopPeerCategoryPeers"},{id:-567906571,predicate:"contacts.topPeersNotModified",params:[],type:"contacts.TopPeers"},{id:1891070632,predicate:"contacts.topPeers",params:[{name:"categories",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"contacts.TopPeers"},{id:-595914432,predicate:"messageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"long"}],type:"MessageEntity"},{id:546203849,predicate:"inputMessageEntityMentionName",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"user_id",type:"InputUser"}],type:"MessageEntity"},{id:975236280,predicate:"inputMessagesFilterChatPhotos",params:[],type:"MessagesFilter"},{id:-1218471511,predicate:"updateReadChannelOutbox",params:[{name:"channel_id",type:"long"},{name:"max_id",type:"int"}],type:"Update"},{id:457829485,predicate:"updateDraftMessage",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"top_msg_id",type:"flags.0?int"},{name:"draft",type:"DraftMessage"}],type:"Update"},{id:453805082,predicate:"draftMessageEmpty",params:[{name:"flags",type:"#"},{name:"date",type:"flags.0?int"}],type:"DraftMessage"},{id:-40996577,predicate:"draftMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"},{name:"date",type:"int"}],type:"DraftMessage"},{id:-1615153660,predicate:"messageActionHistoryClear",params:[],type:"MessageAction"},{id:-958657434,predicate:"messages.featuredStickersNotModified",params:[{name:"count",type:"int"}],type:"messages.FeaturedStickers"},{id:-1103615738,predicate:"messages.featuredStickers",params:[{name:"flags",type:"#"},{name:"premium",type:"flags.0?true"},{name:"hash",type:"long"},{name:"count",type:"int"},{name:"sets",type:"Vector"},{name:"unread",type:"Vector"}],type:"messages.FeaturedStickers"},{id:1461528386,predicate:"updateReadFeaturedStickers",params:[],type:"Update"},{id:186120336,predicate:"messages.recentStickersNotModified",params:[],type:"messages.RecentStickers"},{id:-1999405994,predicate:"messages.recentStickers",params:[{name:"hash",type:"long"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"},{name:"dates",type:"Vector"}],type:"messages.RecentStickers"},{id:-1706939360,predicate:"updateRecentStickers",params:[],type:"Update"},{id:1338747336,predicate:"messages.archivedStickers",params:[{name:"count",type:"int"},{name:"sets",type:"Vector"}],type:"messages.ArchivedStickers"},{id:946083368,predicate:"messages.stickerSetInstallResultSuccess",params:[],type:"messages.StickerSetInstallResult"},{id:904138920,predicate:"messages.stickerSetInstallResultArchive",params:[{name:"sets",type:"Vector"}],type:"messages.StickerSetInstallResult"},{id:1678812626,predicate:"stickerSetCovered",params:[{name:"set",type:"StickerSet"},{name:"cover",type:"Document"}],type:"StickerSetCovered"},{id:-1574314746,predicate:"updateConfig",params:[],type:"Update"},{id:861169551,predicate:"updatePtsChanged",params:[],type:"Update"},{id:-440664550,predicate:"inputMediaPhotoExternal",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.1?true"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:-78455655,predicate:"inputMediaDocumentExternal",params:[{name:"flags",type:"#"},{name:"spoiler",type:"flags.1?true"},{name:"url",type:"string"},{name:"ttl_seconds",type:"flags.0?int"}],type:"InputMedia"},{id:872932635,predicate:"stickerSetMultiCovered",params:[{name:"set",type:"StickerSet"},{name:"covers",type:"Vector"}],type:"StickerSetCovered"},{id:-1361650766,predicate:"maskCoords",params:[{name:"n",type:"int"},{name:"x",type:"double"},{name:"y",type:"double"},{name:"zoom",type:"double"}],type:"MaskCoords"},{id:-1744710921,predicate:"documentAttributeHasStickers",params:[],type:"DocumentAttribute"},{id:1251549527,predicate:"inputStickeredMediaPhoto",params:[{name:"id",type:"InputPhoto"}],type:"InputStickeredMedia"},{id:70813275,predicate:"inputStickeredMediaDocument",params:[{name:"id",type:"InputDocument"}],type:"InputStickeredMedia"},{id:-1107729093,predicate:"game",params:[{name:"flags",type:"#"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"short_name",type:"string"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"Photo"},{name:"document",type:"flags.0?Document"}],type:"Game"},{id:1336154098,predicate:"inputBotInlineResultGame",params:[{name:"id",type:"string"},{name:"short_name",type:"string"},{name:"send_message",type:"InputBotInlineMessage"}],type:"InputBotInlineResult"},{id:1262639204,predicate:"inputBotInlineMessageGame",params:[{name:"flags",type:"#"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:-38694904,predicate:"messageMediaGame",params:[{name:"game",type:"Game"}],type:"MessageMedia"},{id:-750828557,predicate:"inputMediaGame",params:[{name:"id",type:"InputGame"}],type:"InputMedia"},{id:53231223,predicate:"inputGameID",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGame"},{id:-1020139510,predicate:"inputGameShortName",params:[{name:"bot_id",type:"InputUser"},{name:"short_name",type:"string"}],type:"InputGame"},{id:1358175439,predicate:"keyboardButtonGame",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-1834538890,predicate:"messageActionGameScore",params:[{name:"game_id",type:"long"},{name:"score",type:"int"}],type:"MessageAction"},{id:1940093419,predicate:"highScore",params:[{name:"pos",type:"int"},{name:"user_id",type:"long"},{name:"score",type:"int"}],type:"HighScore"},{id:-1707344487,predicate:"messages.highScores",params:[{name:"scores",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.HighScores"},{id:1258196845,predicate:"updates.differenceTooLong",params:[{name:"pts",type:"int"}],type:"updates.Difference"},{id:791390623,predicate:"updateChannelWebPage",params:[{name:"channel_id",type:"long"},{name:"webpage",type:"WebPage"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:-1663561404,predicate:"messages.chatsSlice",params:[{name:"count",type:"int"},{name:"chats",type:"Vector"}],type:"messages.Chats"},{id:-599948721,predicate:"textEmpty",params:[],type:"RichText"},{id:1950782688,predicate:"textPlain",params:[{name:"text",type:"string"}],type:"RichText"},{id:1730456516,predicate:"textBold",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-653089380,predicate:"textItalic",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1054465340,predicate:"textUnderline",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-1678197867,predicate:"textStrike",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1816074681,predicate:"textFixed",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:1009288385,predicate:"textUrl",params:[{name:"text",type:"RichText"},{name:"url",type:"string"},{name:"webpage_id",type:"long"}],type:"RichText"},{id:-564523562,predicate:"textEmail",params:[{name:"text",type:"RichText"},{name:"email",type:"string"}],type:"RichText"},{id:2120376535,predicate:"textConcat",params:[{name:"texts",type:"Vector"}],type:"RichText"},{id:324435594,predicate:"pageBlockUnsupported",params:[],type:"PageBlock"},{id:1890305021,predicate:"pageBlockTitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1879401953,predicate:"pageBlockSubtitle",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1162877472,predicate:"pageBlockAuthorDate",params:[{name:"author",type:"RichText"},{name:"published_date",type:"int"}],type:"PageBlock"},{id:-1076861716,predicate:"pageBlockHeader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-248793375,predicate:"pageBlockSubheader",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:1182402406,predicate:"pageBlockParagraph",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-1066346178,predicate:"pageBlockPreformatted",params:[{name:"text",type:"RichText"},{name:"language",type:"string"}],type:"PageBlock"},{id:1216809369,predicate:"pageBlockFooter",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:-618614392,predicate:"pageBlockDivider",params:[],type:"PageBlock"},{id:-837994576,predicate:"pageBlockAnchor",params:[{name:"name",type:"string"}],type:"PageBlock"},{id:-454524911,predicate:"pageBlockList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:641563686,predicate:"pageBlockBlockquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:1329878739,predicate:"pageBlockPullquote",params:[{name:"text",type:"RichText"},{name:"caption",type:"RichText"}],type:"PageBlock"},{id:391759200,predicate:"pageBlockPhoto",params:[{name:"flags",type:"#"},{name:"photo_id",type:"long"},{name:"caption",type:"PageCaption"},{name:"url",type:"flags.0?string"},{name:"webpage_id",type:"flags.0?long"}],type:"PageBlock"},{id:2089805750,predicate:"pageBlockVideo",params:[{name:"flags",type:"#"},{name:"autoplay",type:"flags.0?true"},{name:"loop",type:"flags.1?true"},{name:"video_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:972174080,predicate:"pageBlockCover",params:[{name:"cover",type:"PageBlock"}],type:"PageBlock"},{id:-1468953147,predicate:"pageBlockEmbed",params:[{name:"flags",type:"#"},{name:"full_width",type:"flags.0?true"},{name:"allow_scrolling",type:"flags.3?true"},{name:"url",type:"flags.1?string"},{name:"html",type:"flags.2?string"},{name:"poster_photo_id",type:"flags.4?long"},{name:"w",type:"flags.5?int"},{name:"h",type:"flags.5?int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-229005301,predicate:"pageBlockEmbedPost",params:[{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"author_photo_id",type:"long"},{name:"author",type:"string"},{name:"date",type:"int"},{name:"blocks",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1705048653,predicate:"pageBlockCollage",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:52401552,predicate:"pageBlockSlideshow",params:[{name:"items",type:"Vector"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1930545681,predicate:"webPageNotModified",params:[{name:"flags",type:"#"},{name:"cached_page_views",type:"flags.0?int"}],type:"WebPage"},{id:-88417185,predicate:"inputPrivacyKeyPhoneCall",params:[],type:"InputPrivacyKey"},{id:1030105979,predicate:"privacyKeyPhoneCall",params:[],type:"PrivacyKey"},{id:-580219064,predicate:"sendMessageGamePlayAction",params:[],type:"SendMessageAction"},{id:-2048646399,predicate:"phoneCallDiscardReasonMissed",params:[],type:"PhoneCallDiscardReason"},{id:-527056480,predicate:"phoneCallDiscardReasonDisconnect",params:[],type:"PhoneCallDiscardReason"},{id:1471006352,predicate:"phoneCallDiscardReasonHangup",params:[],type:"PhoneCallDiscardReason"},{id:-84416311,predicate:"phoneCallDiscardReasonBusy",params:[],type:"PhoneCallDiscardReason"},{id:1852826908,predicate:"updateDialogPinned",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-99664734,predicate:"updatePinnedDialogs",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.1?int"},{name:"order",type:"flags.0?Vector"}],type:"Update"},{id:2104790276,predicate:"dataJSON",params:[{name:"data",type:"string"}],type:"DataJSON"},{id:-2095595325,predicate:"updateBotWebhookJSON",params:[{name:"data",type:"DataJSON"}],type:"Update"},{id:-1684914010,predicate:"updateBotWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"},{name:"timeout",type:"int"}],type:"Update"},{id:-886477832,predicate:"labeledPrice",params:[{name:"label",type:"string"},{name:"amount",type:"long"}],type:"LabeledPrice"},{id:1048946971,predicate:"invoice",params:[{name:"flags",type:"#"},{name:"test",type:"flags.0?true"},{name:"name_requested",type:"flags.1?true"},{name:"phone_requested",type:"flags.2?true"},{name:"email_requested",type:"flags.3?true"},{name:"shipping_address_requested",type:"flags.4?true"},{name:"flexible",type:"flags.5?true"},{name:"phone_to_provider",type:"flags.6?true"},{name:"email_to_provider",type:"flags.7?true"},{name:"recurring",type:"flags.9?true"},{name:"currency",type:"string"},{name:"prices",type:"Vector"},{name:"max_tip_amount",type:"flags.8?long"},{name:"suggested_tip_amounts",type:"flags.8?Vector"},{name:"recurring_terms_url",type:"flags.9?string"}],type:"Invoice"},{id:-1900697899,predicate:"inputMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"start_param",type:"flags.1?string"},{name:"extended_media",type:"flags.2?InputMedia"}],type:"InputMedia"},{id:-368917890,predicate:"paymentCharge",params:[{name:"id",type:"string"},{name:"provider_charge_id",type:"string"}],type:"PaymentCharge"},{id:-1892568281,predicate:"messageActionPaymentSentMe",params:[{name:"flags",type:"#"},{name:"recurring_init",type:"flags.2?true"},{name:"recurring_used",type:"flags.3?true"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"charge",type:"PaymentCharge"}],type:"MessageAction"},{id:-156940077,predicate:"messageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"receipt_msg_id",type:"flags.2?int"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"start_param",type:"string"},{name:"extended_media",type:"flags.4?MessageExtendedMedia"}],type:"MessageMedia"},{id:512535275,predicate:"postAddress",params:[{name:"street_line1",type:"string"},{name:"street_line2",type:"string"},{name:"city",type:"string"},{name:"state",type:"string"},{name:"country_iso2",type:"string"},{name:"post_code",type:"string"}],type:"PostAddress"},{id:-1868808300,predicate:"paymentRequestedInfo",params:[{name:"flags",type:"#"},{name:"name",type:"flags.0?string"},{name:"phone",type:"flags.1?string"},{name:"email",type:"flags.2?string"},{name:"shipping_address",type:"flags.3?PostAddress"}],type:"PaymentRequestedInfo"},{id:-1344716869,predicate:"keyboardButtonBuy",params:[{name:"text",type:"string"}],type:"KeyboardButton"},{id:-1776926890,predicate:"messageActionPaymentSent",params:[{name:"flags",type:"#"},{name:"recurring_init",type:"flags.2?true"},{name:"recurring_used",type:"flags.3?true"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"invoice_slug",type:"flags.0?string"}],type:"MessageAction"},{id:-842892769,predicate:"paymentSavedCredentialsCard",params:[{name:"id",type:"string"},{name:"title",type:"string"}],type:"PaymentSavedCredentials"},{id:475467473,predicate:"webDocument",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:-1678949555,predicate:"inputWebDocument",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"InputWebDocument"},{id:-1036396922,predicate:"inputWebFileLocation",params:[{name:"url",type:"string"},{name:"access_hash",type:"long"}],type:"InputWebFileLocation"},{id:568808380,predicate:"upload.webFile",params:[{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"file_type",type:"storage.FileType"},{name:"mtime",type:"int"},{name:"bytes",type:"bytes"}],type:"upload.WebFile"},{id:-1610250415,predicate:"payments.paymentForm",params:[{name:"flags",type:"#"},{name:"can_save_credentials",type:"flags.2?true"},{name:"password_missing",type:"flags.3?true"},{name:"form_id",type:"long"},{name:"bot_id",type:"long"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.5?WebDocument"},{name:"invoice",type:"Invoice"},{name:"provider_id",type:"long"},{name:"url",type:"string"},{name:"native_provider",type:"flags.4?string"},{name:"native_params",type:"flags.4?DataJSON"},{name:"additional_methods",type:"flags.6?Vector"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"},{name:"saved_credentials",type:"flags.1?Vector"},{name:"users",type:"Vector"}],type:"payments.PaymentForm"},{id:-784000893,predicate:"payments.validatedRequestedInfo",params:[{name:"flags",type:"#"},{name:"id",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"payments.ValidatedRequestedInfo"},{id:1314881805,predicate:"payments.paymentResult",params:[{name:"updates",type:"Updates"}],type:"payments.PaymentResult"},{id:1891958275,predicate:"payments.paymentReceipt",params:[{name:"flags",type:"#"},{name:"date",type:"int"},{name:"bot_id",type:"long"},{name:"provider_id",type:"long"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.2?WebDocument"},{name:"invoice",type:"Invoice"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping",type:"flags.1?ShippingOption"},{name:"tip_amount",type:"flags.3?long"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"credentials_title",type:"string"},{name:"users",type:"Vector"}],type:"payments.PaymentReceipt"},{id:-74456004,predicate:"payments.savedInfo",params:[{name:"flags",type:"#"},{name:"has_saved_credentials",type:"flags.1?true"},{name:"saved_info",type:"flags.0?PaymentRequestedInfo"}],type:"payments.SavedInfo"},{id:-1056001329,predicate:"inputPaymentCredentialsSaved",params:[{name:"id",type:"string"},{name:"tmp_password",type:"bytes"}],type:"InputPaymentCredentials"},{id:873977640,predicate:"inputPaymentCredentials",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-614138572,predicate:"account.tmpPassword",params:[{name:"tmp_password",type:"bytes"},{name:"valid_until",type:"int"}],type:"account.TmpPassword"},{id:-1239335713,predicate:"shippingOption",params:[{name:"id",type:"string"},{name:"title",type:"string"},{name:"prices",type:"Vector"}],type:"ShippingOption"},{id:-1246823043,predicate:"updateBotShippingQuery",params:[{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"payload",type:"bytes"},{name:"shipping_address",type:"PostAddress"}],type:"Update"},{id:-1934976362,predicate:"updateBotPrecheckoutQuery",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"user_id",type:"long"},{name:"payload",type:"bytes"},{name:"info",type:"flags.0?PaymentRequestedInfo"},{name:"shipping_option_id",type:"flags.1?string"},{name:"currency",type:"string"},{name:"total_amount",type:"long"}],type:"Update"},{id:-6249322,predicate:"inputStickerSetItem",params:[{name:"flags",type:"#"},{name:"document",type:"InputDocument"},{name:"emoji",type:"string"},{name:"mask_coords",type:"flags.0?MaskCoords"}],type:"InputStickerSetItem"},{id:-1425052898,predicate:"updatePhoneCall",params:[{name:"phone_call",type:"PhoneCall"}],type:"Update"},{id:506920429,predicate:"inputPhoneCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputPhoneCall"},{id:1399245077,predicate:"phoneCallEmpty",params:[{name:"id",type:"long"}],type:"PhoneCall"},{id:-987599081,predicate:"phoneCallWaiting",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"protocol",type:"PhoneCallProtocol"},{name:"receive_date",type:"flags.0?int"}],type:"PhoneCall"},{id:347139340,predicate:"phoneCallRequested",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:912311057,predicate:"phoneCallAccepted",params:[{name:"flags",type:"#"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"PhoneCall"},{id:-1770029977,predicate:"phoneCall",params:[{name:"flags",type:"#"},{name:"p2p_allowed",type:"flags.5?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"date",type:"int"},{name:"admin_id",type:"long"},{name:"participant_id",type:"long"},{name:"g_a_or_b",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"},{name:"connections",type:"Vector"},{name:"start_date",type:"int"}],type:"PhoneCall"},{id:1355435489,predicate:"phoneCallDiscarded",params:[{name:"flags",type:"#"},{name:"need_rating",type:"flags.2?true"},{name:"need_debug",type:"flags.3?true"},{name:"video",type:"flags.6?true"},{name:"id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"PhoneCall"},{id:-1665063993,predicate:"phoneConnection",params:[{name:"flags",type:"#"},{name:"tcp",type:"flags.0?true"},{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"peer_tag",type:"bytes"}],type:"PhoneConnection"},{id:-58224696,predicate:"phoneCallProtocol",params:[{name:"flags",type:"#"},{name:"udp_p2p",type:"flags.0?true"},{name:"udp_reflector",type:"flags.1?true"},{name:"min_layer",type:"int"},{name:"max_layer",type:"int"},{name:"library_versions",type:"Vector"}],type:"PhoneCallProtocol"},{id:-326966976,predicate:"phone.phoneCall",params:[{name:"phone_call",type:"PhoneCall"},{name:"users",type:"Vector"}],type:"phone.PhoneCall"},{id:-2134272152,predicate:"inputMessagesFilterPhoneCalls",params:[{name:"flags",type:"#"},{name:"missed",type:"flags.0?true"}],type:"MessagesFilter"},{id:-2132731265,predicate:"messageActionPhoneCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.2?true"},{name:"call_id",type:"long"},{name:"reason",type:"flags.0?PhoneCallDiscardReason"},{name:"duration",type:"flags.1?int"}],type:"MessageAction"},{id:2054952868,predicate:"inputMessagesFilterRoundVoice",params:[],type:"MessagesFilter"},{id:-1253451181,predicate:"inputMessagesFilterRoundVideo",params:[],type:"MessagesFilter"},{id:-1997373508,predicate:"sendMessageRecordRoundAction",params:[],type:"SendMessageAction"},{id:608050278,predicate:"sendMessageUploadRoundAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:-242427324,predicate:"upload.fileCdnRedirect",params:[{name:"dc_id",type:"int"},{name:"file_token",type:"bytes"},{name:"encryption_key",type:"bytes"},{name:"encryption_iv",type:"bytes"},{name:"file_hashes",type:"Vector"}],type:"upload.File"},{id:-290921362,predicate:"upload.cdnFileReuploadNeeded",params:[{name:"request_token",type:"bytes"}],type:"upload.CdnFile"},{id:-1449145777,predicate:"upload.cdnFile",params:[{name:"bytes",type:"bytes"}],type:"upload.CdnFile"},{id:-914167110,predicate:"cdnPublicKey",params:[{name:"dc_id",type:"int"},{name:"public_key",type:"string"}],type:"CdnPublicKey"},{id:1462101002,predicate:"cdnConfig",params:[{name:"public_keys",type:"Vector"}],type:"CdnConfig"},{id:-283684427,predicate:"pageBlockChannel",params:[{name:"channel",type:"Chat"}],type:"PageBlock"},{id:-892239370,predicate:"langPackString",params:[{name:"key",type:"string"},{name:"value",type:"string"}],type:"LangPackString"},{id:1816636575,predicate:"langPackStringPluralized",params:[{name:"flags",type:"#"},{name:"key",type:"string"},{name:"zero_value",type:"flags.0?string"},{name:"one_value",type:"flags.1?string"},{name:"two_value",type:"flags.2?string"},{name:"few_value",type:"flags.3?string"},{name:"many_value",type:"flags.4?string"},{name:"other_value",type:"string"}],type:"LangPackString"},{id:695856818,predicate:"langPackStringDeleted",params:[{name:"key",type:"string"}],type:"LangPackString"},{id:-209337866,predicate:"langPackDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"strings",type:"Vector"}],type:"LangPackDifference"},{id:-288727837,predicate:"langPackLanguage",params:[{name:"flags",type:"#"},{name:"official",type:"flags.0?true"},{name:"rtl",type:"flags.2?true"},{name:"beta",type:"flags.3?true"},{name:"name",type:"string"},{name:"native_name",type:"string"},{name:"lang_code",type:"string"},{name:"base_lang_code",type:"flags.1?string"},{name:"plural_code",type:"string"},{name:"strings_count",type:"int"},{name:"translated_count",type:"int"},{name:"translations_url",type:"string"}],type:"LangPackLanguage"},{id:1180041828,predicate:"updateLangPackTooLong",params:[{name:"lang_code",type:"string"}],type:"Update"},{id:1442983757,predicate:"updateLangPack",params:[{name:"difference",type:"LangPackDifference"}],type:"Update"},{id:885242707,predicate:"channelParticipantAdmin",params:[{name:"flags",type:"#"},{name:"can_edit",type:"flags.0?true"},{name:"self",type:"flags.1?true"},{name:"user_id",type:"long"},{name:"inviter_id",type:"flags.1?long"},{name:"promoted_by",type:"long"},{name:"date",type:"int"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"flags.2?string"}],type:"ChannelParticipant"},{id:1844969806,predicate:"channelParticipantBanned",params:[{name:"flags",type:"#"},{name:"left",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"kicked_by",type:"long"},{name:"date",type:"int"},{name:"banned_rights",type:"ChatBannedRights"}],type:"ChannelParticipant"},{id:338142689,predicate:"channelParticipantsBanned",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:106343499,predicate:"channelParticipantsSearch",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:-421545947,predicate:"channelAdminLogEventActionChangeTitle",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1427671598,predicate:"channelAdminLogEventActionChangeAbout",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1783299128,predicate:"channelAdminLogEventActionChangeUsername",params:[{name:"prev_value",type:"string"},{name:"new_value",type:"string"}],type:"ChannelAdminLogEventAction"},{id:1129042607,predicate:"channelAdminLogEventActionChangePhoto",params:[{name:"prev_photo",type:"Photo"},{name:"new_photo",type:"Photo"}],type:"ChannelAdminLogEventAction"},{id:460916654,predicate:"channelAdminLogEventActionToggleInvites",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:648939889,predicate:"channelAdminLogEventActionToggleSignatures",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-370660328,predicate:"channelAdminLogEventActionUpdatePinned",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1889215493,predicate:"channelAdminLogEventActionEditMessage",params:[{name:"prev_message",type:"Message"},{name:"new_message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:1121994683,predicate:"channelAdminLogEventActionDeleteMessage",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:405815507,predicate:"channelAdminLogEventActionParticipantJoin",params:[],type:"ChannelAdminLogEventAction"},{id:-124291086,predicate:"channelAdminLogEventActionParticipantLeave",params:[],type:"ChannelAdminLogEventAction"},{id:-484690728,predicate:"channelAdminLogEventActionParticipantInvite",params:[{name:"participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-422036098,predicate:"channelAdminLogEventActionParticipantToggleBan",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:-714643696,predicate:"channelAdminLogEventActionParticipantToggleAdmin",params:[{name:"prev_participant",type:"ChannelParticipant"},{name:"new_participant",type:"ChannelParticipant"}],type:"ChannelAdminLogEventAction"},{id:531458253,predicate:"channelAdminLogEvent",params:[{name:"id",type:"long"},{name:"date",type:"int"},{name:"user_id",type:"long"},{name:"action",type:"ChannelAdminLogEventAction"}],type:"ChannelAdminLogEvent"},{id:-309659827,predicate:"channels.adminLogResults",params:[{name:"events",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.AdminLogResults"},{id:-368018716,predicate:"channelAdminLogEventsFilter",params:[{name:"flags",type:"#"},{name:"join",type:"flags.0?true"},{name:"leave",type:"flags.1?true"},{name:"invite",type:"flags.2?true"},{name:"ban",type:"flags.3?true"},{name:"unban",type:"flags.4?true"},{name:"kick",type:"flags.5?true"},{name:"unkick",type:"flags.6?true"},{name:"promote",type:"flags.7?true"},{name:"demote",type:"flags.8?true"},{name:"info",type:"flags.9?true"},{name:"settings",type:"flags.10?true"},{name:"pinned",type:"flags.11?true"},{name:"edit",type:"flags.12?true"},{name:"delete",type:"flags.13?true"},{name:"group_call",type:"flags.14?true"},{name:"invites",type:"flags.15?true"},{name:"send",type:"flags.16?true"},{name:"forums",type:"flags.17?true"}],type:"ChannelAdminLogEventsFilter"},{id:511092620,predicate:"topPeerCategoryPhoneCalls",params:[],type:"TopPeerCategory"},{id:-2143067670,predicate:"pageBlockAudio",params:[{name:"audio_id",type:"long"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:1558266229,predicate:"popularContact",params:[{name:"client_id",type:"long"},{name:"importers",type:"int"}],type:"PopularContact"},{id:1200788123,predicate:"messageActionScreenshotTaken",params:[],type:"MessageAction"},{id:-1634752813,predicate:"messages.favedStickersNotModified",params:[],type:"messages.FavedStickers"},{id:750063767,predicate:"messages.favedStickers",params:[{name:"hash",type:"long"},{name:"packs",type:"Vector"},{name:"stickers",type:"Vector"}],type:"messages.FavedStickers"},{id:-451831443,predicate:"updateFavedStickers",params:[],type:"Update"},{id:-366410403,predicate:"updateChannelReadMessagesContents",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"top_msg_id",type:"flags.0?int"},{name:"messages",type:"Vector"}],type:"Update"},{id:-1040652646,predicate:"inputMessagesFilterMyMentions",params:[],type:"MessagesFilter"},{id:1887741886,predicate:"updateContactsReset",params:[],type:"Update"},{id:-1312568665,predicate:"channelAdminLogEventActionChangeStickerSet",params:[{name:"prev_stickerset",type:"InputStickerSet"},{name:"new_stickerset",type:"InputStickerSet"}],type:"ChannelAdminLogEventAction"},{id:-85549226,predicate:"messageActionCustomAction",params:[{name:"message",type:"string"}],type:"MessageAction"},{id:178373535,predicate:"inputPaymentCredentialsApplePay",params:[{name:"payment_data",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:-419271411,predicate:"inputMessagesFilterGeo",params:[],type:"MessagesFilter"},{id:-530392189,predicate:"inputMessagesFilterContacts",params:[],type:"MessagesFilter"},{id:-1304443240,predicate:"updateChannelAvailableMessages",params:[{name:"channel_id",type:"long"},{name:"available_min_id",type:"int"}],type:"Update"},{id:1599903217,predicate:"channelAdminLogEventActionTogglePreHistoryHidden",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1759532989,predicate:"inputMediaGeoLive",params:[{name:"flags",type:"#"},{name:"stopped",type:"flags.0?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"heading",type:"flags.2?int"},{name:"period",type:"flags.1?int"},{name:"proximity_notification_radius",type:"flags.3?int"}],type:"InputMedia"},{id:-1186937242,predicate:"messageMediaGeoLive",params:[{name:"flags",type:"#"},{name:"geo",type:"GeoPoint"},{name:"heading",type:"flags.0?int"},{name:"period",type:"int"},{name:"proximity_notification_radius",type:"flags.1?int"}],type:"MessageMedia"},{id:1189204285,predicate:"recentMeUrlUnknown",params:[{name:"url",type:"string"}],type:"RecentMeUrl"},{id:-1188296222,predicate:"recentMeUrlUser",params:[{name:"url",type:"string"},{name:"user_id",type:"long"}],type:"RecentMeUrl"},{id:-1294306862,predicate:"recentMeUrlChat",params:[{name:"url",type:"string"},{name:"chat_id",type:"long"}],type:"RecentMeUrl"},{id:-347535331,predicate:"recentMeUrlChatInvite",params:[{name:"url",type:"string"},{name:"chat_invite",type:"ChatInvite"}],type:"RecentMeUrl"},{id:-1140172836,predicate:"recentMeUrlStickerSet",params:[{name:"url",type:"string"},{name:"set",type:"StickerSetCovered"}],type:"RecentMeUrl"},{id:235081943,predicate:"help.recentMeUrls",params:[{name:"urls",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"help.RecentMeUrls"},{id:-266911767,predicate:"channels.channelParticipantsNotModified",params:[],type:"channels.ChannelParticipants"},{id:1951620897,predicate:"messages.messagesNotModified",params:[{name:"count",type:"int"}],type:"messages.Messages"},{id:482797855,predicate:"inputSingleMedia",params:[{name:"flags",type:"#"},{name:"media",type:"InputMedia"},{name:"random_id",type:"long"},{name:"message",type:"string"},{name:"entities",type:"flags.0?Vector"}],type:"InputSingleMedia"},{id:-1493633966,predicate:"webAuthorization",params:[{name:"hash",type:"long"},{name:"bot_id",type:"long"},{name:"domain",type:"string"},{name:"browser",type:"string"},{name:"platform",type:"string"},{name:"date_created",type:"int"},{name:"date_active",type:"int"},{name:"ip",type:"string"},{name:"region",type:"string"}],type:"WebAuthorization"},{id:-313079300,predicate:"account.webAuthorizations",params:[{name:"authorizations",type:"Vector"},{name:"users",type:"Vector"}],type:"account.WebAuthorizations"},{id:-1502174430,predicate:"inputMessageID",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-1160215659,predicate:"inputMessageReplyTo",params:[{name:"id",type:"int"}],type:"InputMessage"},{id:-2037963464,predicate:"inputMessagePinned",params:[],type:"InputMessage"},{id:-1687559349,predicate:"messageEntityPhone",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1280209983,predicate:"messageEntityCashtag",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1410748418,predicate:"messageActionBotAllowed",params:[{name:"domain",type:"string"}],type:"MessageAction"},{id:-55902537,predicate:"inputDialogPeer",params:[{name:"peer",type:"InputPeer"}],type:"InputDialogPeer"},{id:-445792507,predicate:"dialogPeer",params:[{name:"peer",type:"Peer"}],type:"DialogPeer"},{id:223655517,predicate:"messages.foundStickerSetsNotModified",params:[],type:"messages.FoundStickerSets"},{id:-1963942446,predicate:"messages.foundStickerSets",params:[{name:"hash",type:"long"},{name:"sets",type:"Vector"}],type:"messages.FoundStickerSets"},{id:-207944868,predicate:"fileHash",params:[{name:"offset",type:"long"},{name:"limit",type:"int"},{name:"hash",type:"bytes"}],type:"FileHash"},{id:-104284986,predicate:"webDocumentNoProxy",params:[{name:"url",type:"string"},{name:"size",type:"int"},{name:"mime_type",type:"string"},{name:"attributes",type:"Vector"}],type:"WebDocument"},{id:1968737087,predicate:"inputClientProxy",params:[{name:"address",type:"string"},{name:"port",type:"int"}],type:"InputClientProxy"},{id:-483352705,predicate:"help.termsOfServiceUpdateEmpty",params:[{name:"expires",type:"int"}],type:"help.TermsOfServiceUpdate"},{id:686618977,predicate:"help.termsOfServiceUpdate",params:[{name:"expires",type:"int"},{name:"terms_of_service",type:"help.TermsOfService"}],type:"help.TermsOfServiceUpdate"},{id:859091184,predicate:"inputSecureFileUploaded",params:[{name:"id",type:"long"},{name:"parts",type:"int"},{name:"md5_checksum",type:"string"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"InputSecureFile"},{id:1399317950,predicate:"inputSecureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputSecureFile"},{id:-876089816,predicate:"inputSecureFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputFileLocation"},{id:1679398724,predicate:"secureFileEmpty",params:[],type:"SecureFile"},{id:2097791614,predicate:"secureFile",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"size",type:"long"},{name:"dc_id",type:"int"},{name:"date",type:"int"},{name:"file_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureFile"},{id:-1964327229,predicate:"secureData",params:[{name:"data",type:"bytes"},{name:"data_hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureData"},{id:2103482845,predicate:"securePlainPhone",params:[{name:"phone",type:"string"}],type:"SecurePlainData"},{id:569137759,predicate:"securePlainEmail",params:[{name:"email",type:"string"}],type:"SecurePlainData"},{id:-1658158621,predicate:"secureValueTypePersonalDetails",params:[],type:"SecureValueType"},{id:1034709504,predicate:"secureValueTypePassport",params:[],type:"SecureValueType"},{id:115615172,predicate:"secureValueTypeDriverLicense",params:[],type:"SecureValueType"},{id:-1596951477,predicate:"secureValueTypeIdentityCard",params:[],type:"SecureValueType"},{id:-1717268701,predicate:"secureValueTypeInternalPassport",params:[],type:"SecureValueType"},{id:-874308058,predicate:"secureValueTypeAddress",params:[],type:"SecureValueType"},{id:-63531698,predicate:"secureValueTypeUtilityBill",params:[],type:"SecureValueType"},{id:-1995211763,predicate:"secureValueTypeBankStatement",params:[],type:"SecureValueType"},{id:-1954007928,predicate:"secureValueTypeRentalAgreement",params:[],type:"SecureValueType"},{id:-1713143702,predicate:"secureValueTypePassportRegistration",params:[],type:"SecureValueType"},{id:-368907213,predicate:"secureValueTypeTemporaryRegistration",params:[],type:"SecureValueType"},{id:-1289704741,predicate:"secureValueTypePhone",params:[],type:"SecureValueType"},{id:-1908627474,predicate:"secureValueTypeEmail",params:[],type:"SecureValueType"},{id:411017418,predicate:"secureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?SecureFile"},{name:"reverse_side",type:"flags.2?SecureFile"},{name:"selfie",type:"flags.3?SecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"},{name:"hash",type:"bytes"}],type:"SecureValue"},{id:-618540889,predicate:"inputSecureValue",params:[{name:"flags",type:"#"},{name:"type",type:"SecureValueType"},{name:"data",type:"flags.0?SecureData"},{name:"front_side",type:"flags.1?InputSecureFile"},{name:"reverse_side",type:"flags.2?InputSecureFile"},{name:"selfie",type:"flags.3?InputSecureFile"},{name:"translation",type:"flags.6?Vector"},{name:"files",type:"flags.4?Vector"},{name:"plain_data",type:"flags.5?SecurePlainData"}],type:"InputSecureValue"},{id:-316748368,predicate:"secureValueHash",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"}],type:"SecureValueHash"},{id:-391902247,predicate:"secureValueErrorData",params:[{name:"type",type:"SecureValueType"},{name:"data_hash",type:"bytes"},{name:"field",type:"string"},{name:"text",type:"string"}],type:"SecureValueError"},{id:12467706,predicate:"secureValueErrorFrontSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2037765467,predicate:"secureValueErrorReverseSide",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-449327402,predicate:"secureValueErrorSelfie",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:2054162547,predicate:"secureValueErrorFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:1717706985,predicate:"secureValueErrorFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:871426631,predicate:"secureCredentialsEncrypted",params:[{name:"data",type:"bytes"},{name:"hash",type:"bytes"},{name:"secret",type:"bytes"}],type:"SecureCredentialsEncrypted"},{id:-1389486888,predicate:"account.authorizationForm",params:[{name:"flags",type:"#"},{name:"required_types",type:"Vector"},{name:"values",type:"Vector"},{name:"errors",type:"Vector"},{name:"users",type:"Vector"},{name:"privacy_policy_url",type:"flags.0?string"}],type:"account.AuthorizationForm"},{id:-2128640689,predicate:"account.sentEmailCode",params:[{name:"email_pattern",type:"string"},{name:"length",type:"int"}],type:"account.SentEmailCode"},{id:455635795,predicate:"messageActionSecureValuesSentMe",params:[{name:"values",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"MessageAction"},{id:-648257196,predicate:"messageActionSecureValuesSent",params:[{name:"types",type:"Vector"}],type:"MessageAction"},{id:1722786150,predicate:"help.deepLinkInfoEmpty",params:[],type:"help.DeepLinkInfo"},{id:1783556146,predicate:"help.deepLinkInfo",params:[{name:"flags",type:"#"},{name:"update_app",type:"flags.0?true"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"}],type:"help.DeepLinkInfo"},{id:289586518,predicate:"savedPhoneContact",params:[{name:"phone",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"date",type:"int"}],type:"SavedContact"},{id:1304052993,predicate:"account.takeout",params:[{name:"id",type:"long"}],type:"account.Takeout"},{id:700340377,predicate:"inputTakeoutFileLocation",params:[],type:"InputFileLocation"},{id:-513517117,predicate:"updateDialogUnreadMark",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"DialogPeer"}],type:"Update"},{id:-253500010,predicate:"messages.dialogsNotModified",params:[{name:"count",type:"int"}],type:"messages.Dialogs"},{id:-1625153079,predicate:"inputWebFileGeoPointLocation",params:[{name:"geo_point",type:"InputGeoPoint"},{name:"access_hash",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"zoom",type:"int"},{name:"scale",type:"int"}],type:"InputWebFileLocation"},{id:-1255369827,predicate:"contacts.topPeersDisabled",params:[],type:"contacts.TopPeers"},{id:-1685456582,predicate:"inputReportReasonCopyright",params:[],type:"ReportReason"},{id:-732254058,predicate:"passwordKdfAlgoUnknown",params:[],type:"PasswordKdfAlgo"},{id:4883767,predicate:"securePasswordKdfAlgoUnknown",params:[],type:"SecurePasswordKdfAlgo"},{id:-1141711456,predicate:"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:-2042159726,predicate:"securePasswordKdfAlgoSHA512",params:[{name:"salt",type:"bytes"}],type:"SecurePasswordKdfAlgo"},{id:354925740,predicate:"secureSecretSettings",params:[{name:"secure_algo",type:"SecurePasswordKdfAlgo"},{name:"secure_secret",type:"bytes"},{name:"secure_secret_id",type:"long"}],type:"SecureSecretSettings"},{id:982592842,predicate:"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow",params:[{name:"salt1",type:"bytes"},{name:"salt2",type:"bytes"},{name:"g",type:"int"},{name:"p",type:"bytes"}],type:"PasswordKdfAlgo"},{id:-1736378792,predicate:"inputCheckPasswordEmpty",params:[],type:"InputCheckPasswordSRP"},{id:-763367294,predicate:"inputCheckPasswordSRP",params:[{name:"srp_id",type:"long"},{name:"A",type:"bytes"},{name:"M1",type:"bytes"}],type:"InputCheckPasswordSRP"},{id:-2036501105,predicate:"secureValueError",params:[{name:"type",type:"SecureValueType"},{name:"hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-1592506512,predicate:"secureValueErrorTranslationFile",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"bytes"},{name:"text",type:"string"}],type:"SecureValueError"},{id:878931416,predicate:"secureValueErrorTranslationFiles",params:[{name:"type",type:"SecureValueType"},{name:"file_hash",type:"Vector"},{name:"text",type:"string"}],type:"SecureValueError"},{id:-2103600678,predicate:"secureRequiredType",params:[{name:"flags",type:"#"},{name:"native_names",type:"flags.0?true"},{name:"selfie_required",type:"flags.1?true"},{name:"translation_required",type:"flags.2?true"},{name:"type",type:"SecureValueType"}],type:"SecureRequiredType"},{id:41187252,predicate:"secureRequiredTypeOneOf",params:[{name:"types",type:"Vector"}],type:"SecureRequiredType"},{id:-1078332329,predicate:"help.passportConfigNotModified",params:[],type:"help.PassportConfig"},{id:-1600596305,predicate:"help.passportConfig",params:[{name:"hash",type:"int"},{name:"countries_langs",type:"DataJSON"}],type:"help.PassportConfig"},{id:488313413,predicate:"inputAppEvent",params:[{name:"time",type:"double"},{name:"type",type:"string"},{name:"peer",type:"long"},{name:"data",type:"JSONValue"}],type:"InputAppEvent"},{id:-1059185703,predicate:"jsonObjectValue",params:[{name:"key",type:"string"},{name:"value",type:"JSONValue"}],type:"JSONObjectValue"},{id:1064139624,predicate:"jsonNull",params:[],type:"JSONValue"},{id:-952869270,predicate:"jsonBool",params:[{name:"value",type:"Bool"}],type:"JSONValue"},{id:736157604,predicate:"jsonNumber",params:[{name:"value",type:"double"}],type:"JSONValue"},{id:-1222740358,predicate:"jsonString",params:[{name:"value",type:"string"}],type:"JSONValue"},{id:-146520221,predicate:"jsonArray",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1715350371,predicate:"jsonObject",params:[{name:"value",type:"Vector"}],type:"JSONValue"},{id:-1311015810,predicate:"inputNotifyBroadcasts",params:[],type:"InputNotifyPeer"},{id:-703403793,predicate:"notifyBroadcasts",params:[],type:"NotifyPeer"},{id:-311786236,predicate:"textSubscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:-939827711,predicate:"textSuperscript",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:55281185,predicate:"textMarked",params:[{name:"text",type:"RichText"}],type:"RichText"},{id:483104362,predicate:"textPhone",params:[{name:"text",type:"RichText"},{name:"phone",type:"string"}],type:"RichText"},{id:136105807,predicate:"textImage",params:[{name:"document_id",type:"long"},{name:"w",type:"int"},{name:"h",type:"int"}],type:"RichText"},{id:504660880,predicate:"pageBlockKicker",params:[{name:"text",type:"RichText"}],type:"PageBlock"},{id:878078826,predicate:"pageTableCell",params:[{name:"flags",type:"#"},{name:"header",type:"flags.0?true"},{name:"align_center",type:"flags.3?true"},{name:"align_right",type:"flags.4?true"},{name:"valign_middle",type:"flags.5?true"},{name:"valign_bottom",type:"flags.6?true"},{name:"text",type:"flags.7?RichText"},{name:"colspan",type:"flags.1?int"},{name:"rowspan",type:"flags.2?int"}],type:"PageTableCell"},{id:-524237339,predicate:"pageTableRow",params:[{name:"cells",type:"Vector"}],type:"PageTableRow"},{id:-1085412734,predicate:"pageBlockTable",params:[{name:"flags",type:"#"},{name:"bordered",type:"flags.0?true"},{name:"striped",type:"flags.1?true"},{name:"title",type:"RichText"},{name:"rows",type:"Vector"}],type:"PageBlock"},{id:1869903447,predicate:"pageCaption",params:[{name:"text",type:"RichText"},{name:"credit",type:"RichText"}],type:"PageCaption"},{id:-1188055347,predicate:"pageListItemText",params:[{name:"text",type:"RichText"}],type:"PageListItem"},{id:635466748,predicate:"pageListItemBlocks",params:[{name:"blocks",type:"Vector"}],type:"PageListItem"},{id:1577484359,predicate:"pageListOrderedItemText",params:[{name:"num",type:"string"},{name:"text",type:"RichText"}],type:"PageListOrderedItem"},{id:-1730311882,predicate:"pageListOrderedItemBlocks",params:[{name:"num",type:"string"},{name:"blocks",type:"Vector"}],type:"PageListOrderedItem"},{id:-1702174239,predicate:"pageBlockOrderedList",params:[{name:"items",type:"Vector"}],type:"PageBlock"},{id:1987480557,predicate:"pageBlockDetails",params:[{name:"flags",type:"#"},{name:"open",type:"flags.0?true"},{name:"blocks",type:"Vector"},{name:"title",type:"RichText"}],type:"PageBlock"},{id:-1282352120,predicate:"pageRelatedArticle",params:[{name:"flags",type:"#"},{name:"url",type:"string"},{name:"webpage_id",type:"long"},{name:"title",type:"flags.0?string"},{name:"description",type:"flags.1?string"},{name:"photo_id",type:"flags.2?long"},{name:"author",type:"flags.3?string"},{name:"published_date",type:"flags.4?int"}],type:"PageRelatedArticle"},{id:370236054,predicate:"pageBlockRelatedArticles",params:[{name:"title",type:"RichText"},{name:"articles",type:"Vector"}],type:"PageBlock"},{id:-1538310410,predicate:"pageBlockMap",params:[{name:"geo",type:"GeoPoint"},{name:"zoom",type:"int"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"caption",type:"PageCaption"}],type:"PageBlock"},{id:-1738178803,predicate:"page",params:[{name:"flags",type:"#"},{name:"part",type:"flags.0?true"},{name:"rtl",type:"flags.1?true"},{name:"v2",type:"flags.2?true"},{name:"url",type:"string"},{name:"blocks",type:"Vector"},{name:"photos",type:"Vector"},{name:"documents",type:"Vector"},{name:"views",type:"flags.3?int"}],type:"Page"},{id:-610373422,predicate:"inputPrivacyKeyPhoneP2P",params:[],type:"InputPrivacyKey"},{id:961092808,predicate:"privacyKeyPhoneP2P",params:[],type:"PrivacyKey"},{id:894777186,predicate:"textAnchor",params:[{name:"text",type:"RichText"},{name:"name",type:"string"}],type:"RichText"},{id:-1945767479,predicate:"help.supportName",params:[{name:"name",type:"string"}],type:"help.SupportName"},{id:-206688531,predicate:"help.userInfoEmpty",params:[],type:"help.UserInfo"},{id:32192344,predicate:"help.userInfo",params:[{name:"message",type:"string"},{name:"entities",type:"Vector"},{name:"author",type:"string"},{name:"date",type:"int"}],type:"help.UserInfo"},{id:-202219658,predicate:"messageActionContactSignUp",params:[],type:"MessageAction"},{id:-1398708869,predicate:"updateMessagePoll",params:[{name:"flags",type:"#"},{name:"poll_id",type:"long"},{name:"poll",type:"flags.0?Poll"},{name:"results",type:"PollResults"}],type:"Update"},{id:1823064809,predicate:"pollAnswer",params:[{name:"text",type:"string"},{name:"option",type:"bytes"}],type:"PollAnswer"},{id:-2032041631,predicate:"poll",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"closed",type:"flags.0?true"},{name:"public_voters",type:"flags.1?true"},{name:"multiple_choice",type:"flags.2?true"},{name:"quiz",type:"flags.3?true"},{name:"question",type:"string"},{name:"answers",type:"Vector"},{name:"close_period",type:"flags.4?int"},{name:"close_date",type:"flags.5?int"}],type:"Poll"},{id:997055186,predicate:"pollAnswerVoters",params:[{name:"flags",type:"#"},{name:"chosen",type:"flags.0?true"},{name:"correct",type:"flags.1?true"},{name:"option",type:"bytes"},{name:"voters",type:"int"}],type:"PollAnswerVoters"},{id:-591909213,predicate:"pollResults",params:[{name:"flags",type:"#"},{name:"min",type:"flags.0?true"},{name:"results",type:"flags.1?Vector"},{name:"total_voters",type:"flags.2?int"},{name:"recent_voters",type:"flags.3?Vector"},{name:"solution",type:"flags.4?string"},{name:"solution_entities",type:"flags.4?Vector"}],type:"PollResults"},{id:261416433,predicate:"inputMediaPoll",params:[{name:"flags",type:"#"},{name:"poll",type:"Poll"},{name:"correct_answers",type:"flags.0?Vector"},{name:"solution",type:"flags.1?string"},{name:"solution_entities",type:"flags.1?Vector"}],type:"InputMedia"},{id:1272375192,predicate:"messageMediaPoll",params:[{name:"poll",type:"Poll"},{name:"results",type:"PollResults"}],type:"MessageMedia"},{id:-264117680,predicate:"chatOnlines",params:[{name:"onlines",type:"int"}],type:"ChatOnlines"},{id:1202287072,predicate:"statsURL",params:[{name:"url",type:"string"}],type:"StatsURL"},{id:-525288402,predicate:"photoStrippedSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:1605510357,predicate:"chatAdminRights",params:[{name:"flags",type:"#"},{name:"change_info",type:"flags.0?true"},{name:"post_messages",type:"flags.1?true"},{name:"edit_messages",type:"flags.2?true"},{name:"delete_messages",type:"flags.3?true"},{name:"ban_users",type:"flags.4?true"},{name:"invite_users",type:"flags.5?true"},{name:"pin_messages",type:"flags.7?true"},{name:"add_admins",type:"flags.9?true"},{name:"anonymous",type:"flags.10?true"},{name:"manage_call",type:"flags.11?true"},{name:"other",type:"flags.12?true"},{name:"manage_topics",type:"flags.13?true"}],type:"ChatAdminRights"},{id:-1626209256,predicate:"chatBannedRights",params:[{name:"flags",type:"#"},{name:"view_messages",type:"flags.0?true"},{name:"send_messages",type:"flags.1?true"},{name:"send_media",type:"flags.2?true"},{name:"send_stickers",type:"flags.3?true"},{name:"send_gifs",type:"flags.4?true"},{name:"send_games",type:"flags.5?true"},{name:"send_inline",type:"flags.6?true"},{name:"embed_links",type:"flags.7?true"},{name:"send_polls",type:"flags.8?true"},{name:"change_info",type:"flags.10?true"},{name:"invite_users",type:"flags.15?true"},{name:"pin_messages",type:"flags.17?true"},{name:"manage_topics",type:"flags.18?true"},{name:"send_photos",type:"flags.19?true"},{name:"send_videos",type:"flags.20?true"},{name:"send_roundvideos",type:"flags.21?true"},{name:"send_audios",type:"flags.22?true"},{name:"send_voices",type:"flags.23?true"},{name:"send_docs",type:"flags.24?true"},{name:"send_plain",type:"flags.25?true"},{name:"until_date",type:"int"}],type:"ChatBannedRights"},{id:1421875280,predicate:"updateChatDefaultBannedRights",params:[{name:"peer",type:"Peer"},{name:"default_banned_rights",type:"ChatBannedRights"},{name:"version",type:"int"}],type:"Update"},{id:-433014407,predicate:"inputWallPaper",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputWallPaper"},{id:1913199744,predicate:"inputWallPaperSlug",params:[{name:"slug",type:"string"}],type:"InputWallPaper"},{id:-1150621555,predicate:"channelParticipantsContacts",params:[{name:"q",type:"string"}],type:"ChannelParticipantsFilter"},{id:771095562,predicate:"channelAdminLogEventActionDefaultBannedRights",params:[{name:"prev_banned_rights",type:"ChatBannedRights"},{name:"new_banned_rights",type:"ChatBannedRights"}],type:"ChannelAdminLogEventAction"},{id:-1895328189,predicate:"channelAdminLogEventActionStopPoll",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:471437699,predicate:"account.wallPapersNotModified",params:[],type:"account.WallPapers"},{id:-842824308,predicate:"account.wallPapers",params:[{name:"hash",type:"long"},{name:"wallpapers",type:"Vector"}],type:"account.WallPapers"},{id:-1390068360,predicate:"codeSettings",params:[{name:"flags",type:"#"},{name:"allow_flashcall",type:"flags.0?true"},{name:"current_number",type:"flags.1?true"},{name:"allow_app_hash",type:"flags.4?true"},{name:"allow_missed_call",type:"flags.5?true"},{name:"allow_firebase",type:"flags.7?true"},{name:"logout_tokens",type:"flags.6?Vector"},{name:"token",type:"flags.8?string"},{name:"app_sandbox",type:"flags.8?Bool"}],type:"CodeSettings"},{id:499236004,predicate:"wallPaperSettings",params:[{name:"flags",type:"#"},{name:"blur",type:"flags.1?true"},{name:"motion",type:"flags.2?true"},{name:"background_color",type:"flags.0?int"},{name:"second_background_color",type:"flags.4?int"},{name:"third_background_color",type:"flags.5?int"},{name:"fourth_background_color",type:"flags.6?int"},{name:"intensity",type:"flags.3?int"},{name:"rotation",type:"flags.4?int"}],type:"WallPaperSettings"},{id:-1896171181,predicate:"autoDownloadSettings",params:[{name:"flags",type:"#"},{name:"disabled",type:"flags.0?true"},{name:"video_preload_large",type:"flags.1?true"},{name:"audio_preload_next",type:"flags.2?true"},{name:"phonecalls_less_data",type:"flags.3?true"},{name:"photo_size_max",type:"int"},{name:"video_size_max",type:"long"},{name:"file_size_max",type:"long"},{name:"video_upload_maxbitrate",type:"int"}],type:"AutoDownloadSettings"},{id:1674235686,predicate:"account.autoDownloadSettings",params:[{name:"low",type:"AutoDownloadSettings"},{name:"medium",type:"AutoDownloadSettings"},{name:"high",type:"AutoDownloadSettings"}],type:"account.AutoDownloadSettings"},{id:-709641735,predicate:"emojiKeyword",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:594408994,predicate:"emojiKeywordDeleted",params:[{name:"keyword",type:"string"},{name:"emoticons",type:"Vector"}],type:"EmojiKeyword"},{id:1556570557,predicate:"emojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"},{name:"version",type:"int"},{name:"keywords",type:"Vector"}],type:"EmojiKeywordsDifference"},{id:-1519029347,predicate:"emojiURL",params:[{name:"url",type:"string"}],type:"EmojiURL"},{id:-1275374751,predicate:"emojiLanguage",params:[{name:"lang_code",type:"string"}],type:"EmojiLanguage"},{id:-1529000952,predicate:"inputPrivacyKeyForwards",params:[],type:"InputPrivacyKey"},{id:1777096355,predicate:"privacyKeyForwards",params:[],type:"PrivacyKey"},{id:1461304012,predicate:"inputPrivacyKeyProfilePhoto",params:[],type:"InputPrivacyKey"},{id:-1777000467,predicate:"privacyKeyProfilePhoto",params:[],type:"PrivacyKey"},{id:1075322878,predicate:"inputPhotoFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"thumb_size",type:"string"}],type:"InputFileLocation"},{id:-667654413,predicate:"inputPhotoLegacyFileLocation",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"file_reference",type:"bytes"},{name:"volume_id",type:"long"},{name:"local_id",type:"int"},{name:"secret",type:"long"}],type:"InputFileLocation"},{id:925204121,predicate:"inputPeerPhotoFileLocation",params:[{name:"flags",type:"#"},{name:"big",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"photo_id",type:"long"}],type:"InputFileLocation"},{id:-1652231205,predicate:"inputStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb_version",type:"int"}],type:"InputFileLocation"},{id:-11252123,predicate:"folder",params:[{name:"flags",type:"#"},{name:"autofill_new_broadcasts",type:"flags.0?true"},{name:"autofill_public_groups",type:"flags.1?true"},{name:"autofill_new_correspondents",type:"flags.2?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"photo",type:"flags.3?ChatPhoto"}],type:"Folder"},{id:1908216652,predicate:"dialogFolder",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.2?true"},{name:"folder",type:"Folder"},{name:"peer",type:"Peer"},{name:"top_message",type:"int"},{name:"unread_muted_peers_count",type:"int"},{name:"unread_unmuted_peers_count",type:"int"},{name:"unread_muted_messages_count",type:"int"},{name:"unread_unmuted_messages_count",type:"int"}],type:"Dialog"},{id:1684014375,predicate:"inputDialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"InputDialogPeer"},{id:1363483106,predicate:"dialogPeerFolder",params:[{name:"folder_id",type:"int"}],type:"DialogPeer"},{id:-70073706,predicate:"inputFolderPeer",params:[{name:"peer",type:"InputPeer"},{name:"folder_id",type:"int"}],type:"InputFolderPeer"},{id:-373643672,predicate:"folderPeer",params:[{name:"peer",type:"Peer"},{name:"folder_id",type:"int"}],type:"FolderPeer"},{id:422972864,predicate:"updateFolderPeers",params:[{name:"folder_peers",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:497305826,predicate:"inputUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"long"}],type:"InputUser"},{id:1536380829,predicate:"inputChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"long"}],type:"InputChannel"},{id:-1468331492,predicate:"inputPeerUserFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"user_id",type:"long"}],type:"InputPeer"},{id:-1121318848,predicate:"inputPeerChannelFromMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"channel_id",type:"long"}],type:"InputPeer"},{id:55761658,predicate:"inputPrivacyKeyPhoneNumber",params:[],type:"InputPrivacyKey"},{id:-778378131,predicate:"privacyKeyPhoneNumber",params:[],type:"PrivacyKey"},{id:-1472172887,predicate:"topPeerCategoryForwardUsers",params:[],type:"TopPeerCategory"},{id:-68239120,predicate:"topPeerCategoryForwardChats",params:[],type:"TopPeerCategory"},{id:84703944,predicate:"channelAdminLogEventActionChangeLinkedChat",params:[{name:"prev_value",type:"long"},{name:"new_value",type:"long"}],type:"ChannelAdminLogEventAction"},{id:-398136321,predicate:"messages.searchCounter",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.1?true"},{name:"filter",type:"MessagesFilter"},{name:"count",type:"int"}],type:"messages.SearchCounter"},{id:280464681,predicate:"keyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.0?string"},{name:"url",type:"string"},{name:"button_id",type:"int"}],type:"KeyboardButton"},{id:-802258988,predicate:"inputKeyboardButtonUrlAuth",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"text",type:"string"},{name:"fwd_text",type:"flags.1?string"},{name:"url",type:"string"},{name:"bot",type:"InputUser"}],type:"KeyboardButton"},{id:-1831650802,predicate:"urlAuthResultRequest",params:[{name:"flags",type:"#"},{name:"request_write_access",type:"flags.0?true"},{name:"bot",type:"User"},{name:"domain",type:"string"}],type:"UrlAuthResult"},{id:-1886646706,predicate:"urlAuthResultAccepted",params:[{name:"url",type:"string"}],type:"UrlAuthResult"},{id:-1445536993,predicate:"urlAuthResultDefault",params:[],type:"UrlAuthResult"},{id:-2079962673,predicate:"inputPrivacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:-380694650,predicate:"inputPrivacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"InputPrivacyRule"},{id:1796427406,predicate:"privacyValueAllowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:1103656293,predicate:"privacyValueDisallowChatParticipants",params:[{name:"chats",type:"Vector"}],type:"PrivacyRule"},{id:-1672577397,predicate:"messageEntityUnderline",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1090087980,predicate:"messageEntityStrike",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:34469328,predicate:"messageEntityBlockquote",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:1786671974,predicate:"updatePeerSettings",params:[{name:"peer",type:"Peer"},{name:"settings",type:"PeerSettings"}],type:"Update"},{id:-1078612597,predicate:"channelLocationEmpty",params:[],type:"ChannelLocation"},{id:547062491,predicate:"channelLocation",params:[{name:"geo_point",type:"GeoPoint"},{name:"address",type:"string"}],type:"ChannelLocation"},{id:-901375139,predicate:"peerLocated",params:[{name:"peer",type:"Peer"},{name:"expires",type:"int"},{name:"distance",type:"int"}],type:"PeerLocated"},{id:-1263546448,predicate:"updatePeerLocated",params:[{name:"peers",type:"Vector"}],type:"Update"},{id:241923758,predicate:"channelAdminLogEventActionChangeLocation",params:[{name:"prev_value",type:"ChannelLocation"},{name:"new_value",type:"ChannelLocation"}],type:"ChannelAdminLogEventAction"},{id:-606798099,predicate:"inputReportReasonGeoIrrelevant",params:[],type:"ReportReason"},{id:1401984889,predicate:"channelAdminLogEventActionToggleSlowMode",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:1148485274,predicate:"auth.authorizationSignUpRequired",params:[{name:"flags",type:"#"},{name:"terms_of_service",type:"flags.0?help.TermsOfService"}],type:"auth.Authorization"},{id:-666824391,predicate:"payments.paymentVerificationNeeded",params:[{name:"url",type:"string"}],type:"payments.PaymentResult"},{id:42402760,predicate:"inputStickerSetAnimatedEmoji",params:[],type:"InputStickerSet"},{id:967122427,predicate:"updateNewScheduledMessage",params:[{name:"message",type:"Message"}],type:"Update"},{id:-1870238482,predicate:"updateDeleteScheduledMessages",params:[{name:"peer",type:"Peer"},{name:"messages",type:"Vector"}],type:"Update"},{id:-797791052,predicate:"restrictionReason",params:[{name:"platform",type:"string"},{name:"reason",type:"string"},{name:"text",type:"string"}],type:"RestrictionReason"},{id:1012306921,predicate:"inputTheme",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputTheme"},{id:-175567375,predicate:"inputThemeSlug",params:[{name:"slug",type:"string"}],type:"InputTheme"},{id:-1609668650,predicate:"theme",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"default",type:"flags.1?true"},{name:"for_chat",type:"flags.5?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?Document"},{name:"settings",type:"flags.3?Vector"},{name:"emoticon",type:"flags.6?string"},{name:"installs_count",type:"flags.4?int"}],type:"Theme"},{id:-199313886,predicate:"account.themesNotModified",params:[],type:"account.Themes"},{id:-1707242387,predicate:"account.themes",params:[{name:"hash",type:"long"},{name:"themes",type:"Vector"}],type:"account.Themes"},{id:-2112423005,predicate:"updateTheme",params:[{name:"theme",type:"Theme"}],type:"Update"},{id:-786326563,predicate:"inputPrivacyKeyAddedByPhone",params:[],type:"InputPrivacyKey"},{id:1124062251,predicate:"privacyKeyAddedByPhone",params:[],type:"PrivacyKey"},{id:-2027964103,predicate:"updateGeoLiveViewed",params:[{name:"peer",type:"Peer"},{name:"msg_id",type:"int"}],type:"Update"},{id:1448076945,predicate:"updateLoginToken",params:[],type:"Update"},{id:1654593920,predicate:"auth.loginToken",params:[{name:"expires",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:110008598,predicate:"auth.loginTokenMigrateTo",params:[{name:"dc_id",type:"int"},{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:957176926,predicate:"auth.loginTokenSuccess",params:[{name:"authorization",type:"auth.Authorization"}],type:"auth.LoginToken"},{id:1474462241,predicate:"account.contentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"},{name:"sensitive_can_change",type:"flags.1?true"}],type:"account.ContentSettings"},{id:-1456996667,predicate:"messages.inactiveChats",params:[{name:"dates",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.InactiveChats"},{id:-1012849566,predicate:"baseThemeClassic",params:[],type:"BaseTheme"},{id:-69724536,predicate:"baseThemeDay",params:[],type:"BaseTheme"},{id:-1212997976,predicate:"baseThemeNight",params:[],type:"BaseTheme"},{id:1834973166,predicate:"baseThemeTinted",params:[],type:"BaseTheme"},{id:1527845466,predicate:"baseThemeArctic",params:[],type:"BaseTheme"},{id:-1770371538,predicate:"inputWallPaperNoFile",params:[{name:"id",type:"long"}],type:"InputWallPaper"},{id:-528465642,predicate:"wallPaperNoFile",params:[{name:"id",type:"long"},{name:"flags",type:"#"},{name:"default",type:"flags.1?true"},{name:"dark",type:"flags.4?true"},{name:"settings",type:"flags.2?WallPaperSettings"}],type:"WallPaper"},{id:-1881255857,predicate:"inputThemeSettings",params:[{name:"flags",type:"#"},{name:"message_colors_animated",type:"flags.2?true"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"outbox_accent_color",type:"flags.3?int"},{name:"message_colors",type:"flags.0?Vector"},{name:"wallpaper",type:"flags.1?InputWallPaper"},{name:"wallpaper_settings",type:"flags.1?WallPaperSettings"}],type:"InputThemeSettings"},{id:-94849324,predicate:"themeSettings",params:[{name:"flags",type:"#"},{name:"message_colors_animated",type:"flags.2?true"},{name:"base_theme",type:"BaseTheme"},{name:"accent_color",type:"int"},{name:"outbox_accent_color",type:"flags.3?int"},{name:"message_colors",type:"flags.0?Vector"},{name:"wallpaper",type:"flags.1?WallPaper"}],type:"ThemeSettings"},{id:1421174295,predicate:"webPageAttributeTheme",params:[{name:"flags",type:"#"},{name:"documents",type:"flags.0?Vector"},{name:"settings",type:"flags.1?ThemeSettings"}],type:"WebPageAttribute"},{id:274961865,predicate:"updateMessagePollVote",params:[{name:"poll_id",type:"long"},{name:"user_id",type:"long"},{name:"options",type:"Vector"},{name:"qts",type:"int"}],type:"Update"},{id:886196148,predicate:"messageUserVote",params:[{name:"user_id",type:"long"},{name:"option",type:"bytes"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:1017491692,predicate:"messageUserVoteInputOption",params:[{name:"user_id",type:"long"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:-1973033641,predicate:"messageUserVoteMultiple",params:[{name:"user_id",type:"long"},{name:"options",type:"Vector"},{name:"date",type:"int"}],type:"MessageUserVote"},{id:136574537,predicate:"messages.votesList",params:[{name:"flags",type:"#"},{name:"count",type:"int"},{name:"votes",type:"Vector"},{name:"users",type:"Vector"},{name:"next_offset",type:"flags.0?string"}],type:"messages.VotesList"},{id:-1144565411,predicate:"keyboardButtonRequestPoll",params:[{name:"flags",type:"#"},{name:"quiz",type:"flags.0?Bool"},{name:"text",type:"string"}],type:"KeyboardButton"},{id:1981704948,predicate:"messageEntityBankCard",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-177732982,predicate:"bankCardOpenUrl",params:[{name:"url",type:"string"},{name:"name",type:"string"}],type:"BankCardOpenUrl"},{id:1042605427,predicate:"payments.bankCardData",params:[{name:"title",type:"string"},{name:"open_urls",type:"Vector"}],type:"payments.BankCardData"},{id:-118740917,predicate:"peerSelfLocated",params:[{name:"expires",type:"int"}],type:"PeerLocated"},{id:1949890536,predicate:"dialogFilter",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"non_contacts",type:"flags.1?true"},{name:"groups",type:"flags.2?true"},{name:"broadcasts",type:"flags.3?true"},{name:"bots",type:"flags.4?true"},{name:"exclude_muted",type:"flags.11?true"},{name:"exclude_read",type:"flags.12?true"},{name:"exclude_archived",type:"flags.13?true"},{name:"id",type:"int"},{name:"title",type:"string"},{name:"emoticon",type:"flags.25?string"},{name:"pinned_peers",type:"Vector"},{name:"include_peers",type:"Vector"},{name:"exclude_peers",type:"Vector"}],type:"DialogFilter"},{id:2004110666,predicate:"dialogFilterSuggested",params:[{name:"filter",type:"DialogFilter"},{name:"description",type:"string"}],type:"DialogFilterSuggested"},{id:654302845,predicate:"updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Update"},{id:-1512627963,predicate:"updateDialogFilterOrder",params:[{name:"order",type:"Vector"}],type:"Update"},{id:889491791,predicate:"updateDialogFilters",params:[],type:"Update"},{id:-1237848657,predicate:"statsDateRangeDays",params:[{name:"min_date",type:"int"},{name:"max_date",type:"int"}],type:"StatsDateRangeDays"},{id:-884757282,predicate:"statsAbsValueAndPrev",params:[{name:"current",type:"double"},{name:"previous",type:"double"}],type:"StatsAbsValueAndPrev"},{id:-875679776,predicate:"statsPercentValue",params:[{name:"part",type:"double"},{name:"total",type:"double"}],type:"StatsPercentValue"},{id:1244130093,predicate:"statsGraphAsync",params:[{name:"token",type:"string"}],type:"StatsGraph"},{id:-1092839390,predicate:"statsGraphError",params:[{name:"error",type:"string"}],type:"StatsGraph"},{id:-1901828938,predicate:"statsGraph",params:[{name:"flags",type:"#"},{name:"json",type:"DataJSON"},{name:"zoom_token",type:"flags.0?string"}],type:"StatsGraph"},{id:-1387279939,predicate:"messageInteractionCounters",params:[{name:"msg_id",type:"int"},{name:"views",type:"int"},{name:"forwards",type:"int"}],type:"MessageInteractionCounters"},{id:-1107852396,predicate:"stats.broadcastStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"followers",type:"StatsAbsValueAndPrev"},{name:"views_per_post",type:"StatsAbsValueAndPrev"},{name:"shares_per_post",type:"StatsAbsValueAndPrev"},{name:"enabled_notifications",type:"StatsPercentValue"},{name:"growth_graph",type:"StatsGraph"},{name:"followers_graph",type:"StatsGraph"},{name:"mute_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"interactions_graph",type:"StatsGraph"},{name:"iv_interactions_graph",type:"StatsGraph"},{name:"views_by_source_graph",type:"StatsGraph"},{name:"new_followers_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"recent_message_interactions",type:"Vector"}],type:"stats.BroadcastStats"},{id:-428884101,predicate:"inputMediaDice",params:[{name:"emoticon",type:"string"}],type:"InputMedia"},{id:1065280907,predicate:"messageMediaDice",params:[{name:"value",type:"int"},{name:"emoticon",type:"string"}],type:"MessageMedia"},{id:-427863538,predicate:"inputStickerSetDice",params:[{name:"emoticon",type:"string"}],type:"InputStickerSet"},{id:-1728664459,predicate:"help.promoDataEmpty",params:[{name:"expires",type:"int"}],type:"help.PromoData"},{id:-1942390465,predicate:"help.promoData",params:[{name:"flags",type:"#"},{name:"proxy",type:"flags.0?true"},{name:"expires",type:"int"},{name:"peer",type:"Peer"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"psa_type",type:"flags.1?string"},{name:"psa_message",type:"flags.2?string"}],type:"help.PromoData"},{id:-567037804,predicate:"videoSize",params:[{name:"flags",type:"#"},{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"size",type:"int"},{name:"video_start_ts",type:"flags.0?double"}],type:"VideoSize"},{id:643940105,predicate:"updatePhoneCallSignalingData",params:[{name:"phone_call_id",type:"long"},{name:"data",type:"bytes"}],type:"Update"},{id:1634294960,predicate:"chatInvitePeek",params:[{name:"chat",type:"Chat"},{name:"expires",type:"int"}],type:"ChatInvite"},{id:-1660637285,predicate:"statsGroupTopPoster",params:[{name:"user_id",type:"long"},{name:"messages",type:"int"},{name:"avg_chars",type:"int"}],type:"StatsGroupTopPoster"},{id:-682079097,predicate:"statsGroupTopAdmin",params:[{name:"user_id",type:"long"},{name:"deleted",type:"int"},{name:"kicked",type:"int"},{name:"banned",type:"int"}],type:"StatsGroupTopAdmin"},{id:1398765469,predicate:"statsGroupTopInviter",params:[{name:"user_id",type:"long"},{name:"invitations",type:"int"}],type:"StatsGroupTopInviter"},{id:-276825834,predicate:"stats.megagroupStats",params:[{name:"period",type:"StatsDateRangeDays"},{name:"members",type:"StatsAbsValueAndPrev"},{name:"messages",type:"StatsAbsValueAndPrev"},{name:"viewers",type:"StatsAbsValueAndPrev"},{name:"posters",type:"StatsAbsValueAndPrev"},{name:"growth_graph",type:"StatsGraph"},{name:"members_graph",type:"StatsGraph"},{name:"new_members_by_source_graph",type:"StatsGraph"},{name:"languages_graph",type:"StatsGraph"},{name:"messages_graph",type:"StatsGraph"},{name:"actions_graph",type:"StatsGraph"},{name:"top_hours_graph",type:"StatsGraph"},{name:"weekdays_graph",type:"StatsGraph"},{name:"top_posters",type:"Vector"},{name:"top_admins",type:"Vector"},{name:"top_inviters",type:"Vector"},{name:"users",type:"Vector"}],type:"stats.MegagroupStats"},{id:-1096616924,predicate:"globalPrivacySettings",params:[{name:"flags",type:"#"},{name:"archive_and_mute_new_noncontact_peers",type:"flags.0?Bool"}],type:"GlobalPrivacySettings"},{id:1667228533,predicate:"phoneConnectionWebrtc",params:[{name:"flags",type:"#"},{name:"turn",type:"flags.0?true"},{name:"stun",type:"flags.1?true"},{name:"id",type:"long"},{name:"ip",type:"string"},{name:"ipv6",type:"string"},{name:"port",type:"int"},{name:"username",type:"string"},{name:"password",type:"string"}],type:"PhoneConnection"},{id:1107543535,predicate:"help.countryCode",params:[{name:"flags",type:"#"},{name:"country_code",type:"string"},{name:"prefixes",type:"flags.0?Vector"},{name:"patterns",type:"flags.1?Vector"}],type:"help.CountryCode"},{id:-1014526429,predicate:"help.country",params:[{name:"flags",type:"#"},{name:"hidden",type:"flags.0?true"},{name:"iso2",type:"string"},{name:"default_name",type:"string"},{name:"name",type:"flags.1?string"},{name:"country_codes",type:"Vector"}],type:"help.Country"},{id:-1815339214,predicate:"help.countriesListNotModified",params:[],type:"help.CountriesList"},{id:-2016381538,predicate:"help.countriesList",params:[{name:"countries",type:"Vector"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:1163625789,predicate:"messageViews",params:[{name:"flags",type:"#"},{name:"views",type:"flags.0?int"},{name:"forwards",type:"flags.1?int"},{name:"replies",type:"flags.2?MessageReplies"}],type:"MessageViews"},{id:-761649164,predicate:"updateChannelMessageForwards",params:[{name:"channel_id",type:"long"},{name:"id",type:"int"},{name:"forwards",type:"int"}],type:"Update"},{id:-96535659,predicate:"photoSizeProgressive",params:[{name:"type",type:"string"},{name:"w",type:"int"},{name:"h",type:"int"},{name:"sizes",type:"Vector"}],type:"PhotoSize"},{id:-1228606141,predicate:"messages.messageViews",params:[{name:"views",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.MessageViews"},{id:-693004986,predicate:"updateReadChannelDiscussionInbox",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"},{name:"broadcast_id",type:"flags.0?long"},{name:"broadcast_post",type:"flags.0?int"}],type:"Update"},{id:1767677564,predicate:"updateReadChannelDiscussionOutbox",params:[{name:"channel_id",type:"long"},{name:"top_msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Update"},{id:-1506535550,predicate:"messages.discussionMessage",params:[{name:"flags",type:"#"},{name:"messages",type:"Vector"},{name:"max_id",type:"flags.0?int"},{name:"read_inbox_max_id",type:"flags.1?int"},{name:"read_outbox_max_id",type:"flags.2?int"},{name:"unread_count",type:"int"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.DiscussionMessage"},{id:-1495959709,predicate:"messageReplyHeader",params:[{name:"flags",type:"#"},{name:"reply_to_scheduled",type:"flags.2?true"},{name:"forum_topic",type:"flags.3?true"},{name:"reply_to_msg_id",type:"int"},{name:"reply_to_peer_id",type:"flags.0?Peer"},{name:"reply_to_top_id",type:"flags.1?int"}],type:"MessageReplyHeader"},{id:-2083123262,predicate:"messageReplies",params:[{name:"flags",type:"#"},{name:"comments",type:"flags.0?true"},{name:"replies",type:"int"},{name:"replies_pts",type:"int"},{name:"recent_repliers",type:"flags.1?Vector"},{name:"channel_id",type:"flags.0?long"},{name:"max_id",type:"flags.2?int"},{name:"read_max_id",type:"flags.3?int"}],type:"MessageReplies"},{id:610945826,predicate:"updatePeerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"blocked",type:"Bool"}],type:"Update"},{id:-386039788,predicate:"peerBlocked",params:[{name:"peer_id",type:"Peer"},{name:"date",type:"int"}],type:"PeerBlocked"},{id:-1937192669,predicate:"updateChannelUserTyping",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"top_msg_id",type:"flags.0?int"},{name:"from_id",type:"Peer"},{name:"action",type:"SendMessageAction"}],type:"Update"},{id:-1392895362,predicate:"inputMessageCallbackQuery",params:[{name:"id",type:"int"},{name:"query_id",type:"long"}],type:"InputMessage"},{id:453242886,predicate:"channelParticipantLeft",params:[{name:"peer",type:"Peer"}],type:"ChannelParticipant"},{id:-531931925,predicate:"channelParticipantsMentions",params:[{name:"flags",type:"#"},{name:"q",type:"flags.0?string"},{name:"top_msg_id",type:"flags.1?int"}],type:"ChannelParticipantsFilter"},{id:-309990731,predicate:"updatePinnedMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:1538885128,predicate:"updatePinnedChannelMessages",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"channel_id",type:"long"},{name:"messages",type:"Vector"},{name:"pts",type:"int"},{name:"pts_count",type:"int"}],type:"Update"},{id:464520273,predicate:"inputMessagesFilterPinned",params:[],type:"MessagesFilter"},{id:-1986399595,predicate:"stats.messageStats",params:[{name:"views_graph",type:"StatsGraph"}],type:"stats.MessageStats"},{id:-1730095465,predicate:"messageActionGeoProximityReached",params:[{name:"from_id",type:"Peer"},{name:"to_id",type:"Peer"},{name:"distance",type:"int"}],type:"MessageAction"},{id:-668906175,predicate:"photoPathSize",params:[{name:"type",type:"string"},{name:"bytes",type:"bytes"}],type:"PhotoSize"},{id:-651419003,predicate:"speakingInGroupCallAction",params:[],type:"SendMessageAction"},{id:2004925620,predicate:"groupCallDiscarded",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"duration",type:"int"}],type:"GroupCall"},{id:-711498484,predicate:"groupCall",params:[{name:"flags",type:"#"},{name:"join_muted",type:"flags.1?true"},{name:"can_change_join_muted",type:"flags.2?true"},{name:"join_date_asc",type:"flags.6?true"},{name:"schedule_start_subscribed",type:"flags.8?true"},{name:"can_start_video",type:"flags.9?true"},{name:"record_video_active",type:"flags.11?true"},{name:"rtmp_stream",type:"flags.12?true"},{name:"listeners_hidden",type:"flags.13?true"},{name:"id",type:"long"},{name:"access_hash",type:"long"},{name:"participants_count",type:"int"},{name:"title",type:"flags.3?string"},{name:"stream_dc_id",type:"flags.4?int"},{name:"record_start_date",type:"flags.5?int"},{name:"schedule_date",type:"flags.7?int"},{name:"unmuted_video_count",type:"flags.10?int"},{name:"unmuted_video_limit",type:"int"},{name:"version",type:"int"}],type:"GroupCall"},{id:-659913713,predicate:"inputGroupCall",params:[{name:"id",type:"long"},{name:"access_hash",type:"long"}],type:"InputGroupCall"},{id:2047704898,predicate:"messageActionGroupCall",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"duration",type:"flags.0?int"}],type:"MessageAction"},{id:1345295095,predicate:"messageActionInviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"MessageAction"},{id:-341428482,predicate:"groupCallParticipant",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"left",type:"flags.1?true"},{name:"can_self_unmute",type:"flags.2?true"},{name:"just_joined",type:"flags.4?true"},{name:"versioned",type:"flags.5?true"},{name:"min",type:"flags.8?true"},{name:"muted_by_you",type:"flags.9?true"},{name:"volume_by_admin",type:"flags.10?true"},{name:"self",type:"flags.12?true"},{name:"video_joined",type:"flags.15?true"},{name:"peer",type:"Peer"},{name:"date",type:"int"},{name:"active_date",type:"flags.3?int"},{name:"source",type:"int"},{name:"volume",type:"flags.7?int"},{name:"about",type:"flags.11?string"},{name:"raise_hand_rating",type:"flags.13?long"},{name:"video",type:"flags.6?GroupCallParticipantVideo"},{name:"presentation",type:"flags.14?GroupCallParticipantVideo"}],type:"GroupCallParticipant"},{id:-124097970,predicate:"updateChat",params:[{name:"chat_id",type:"long"}],type:"Update"},{id:-219423922,predicate:"updateGroupCallParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"participants",type:"Vector"},{name:"version",type:"int"}],type:"Update"},{id:347227392,predicate:"updateGroupCall",params:[{name:"chat_id",type:"long"},{name:"call",type:"GroupCall"}],type:"Update"},{id:-1636664659,predicate:"phone.groupCall",params:[{name:"call",type:"GroupCall"},{name:"participants",type:"Vector"},{name:"participants_next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.GroupCall"},{id:-193506890,predicate:"phone.groupParticipants",params:[{name:"count",type:"int"},{name:"participants",type:"Vector"},{name:"next_offset",type:"string"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"version",type:"int"}],type:"phone.GroupParticipants"},{id:813821341,predicate:"inlineQueryPeerTypeSameBotPM",params:[],type:"InlineQueryPeerType"},{id:-2093215828,predicate:"inlineQueryPeerTypePM",params:[],type:"InlineQueryPeerType"},{id:-681130742,predicate:"inlineQueryPeerTypeChat",params:[],type:"InlineQueryPeerType"},{id:1589952067,predicate:"inlineQueryPeerTypeMegagroup",params:[],type:"InlineQueryPeerType"},{id:1664413338,predicate:"inlineQueryPeerTypeBroadcast",params:[],type:"InlineQueryPeerType"},{id:589338437,predicate:"channelAdminLogEventActionStartGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-610299584,predicate:"channelAdminLogEventActionDiscardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"ChannelAdminLogEventAction"},{id:-115071790,predicate:"channelAdminLogEventActionParticipantMute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:-431740480,predicate:"channelAdminLogEventActionParticipantUnmute",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1456906823,predicate:"channelAdminLogEventActionToggleGroupCallSetting",params:[{name:"join_muted",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-1966921727,predicate:"inputPaymentCredentialsGooglePay",params:[{name:"payment_token",type:"DataJSON"}],type:"InputPaymentCredentials"},{id:375566091,predicate:"messages.historyImport",params:[{name:"id",type:"long"}],type:"messages.HistoryImport"},{id:-606432698,predicate:"sendMessageHistoryImportAction",params:[{name:"progress",type:"int"}],type:"SendMessageAction"},{id:1578088377,predicate:"messages.historyImportParsed",params:[{name:"flags",type:"#"},{name:"pm",type:"flags.0?true"},{name:"group",type:"flags.1?true"},{name:"title",type:"flags.2?string"}],type:"messages.HistoryImportParsed"},{id:-170010905,predicate:"inputReportReasonFake",params:[],type:"ReportReason"},{id:-275956116,predicate:"messages.affectedFoundMessages",params:[{name:"pts",type:"int"},{name:"pts_count",type:"int"},{name:"offset",type:"int"},{name:"messages",type:"Vector"}],type:"messages.AffectedFoundMessages"},{id:1007897979,predicate:"messageActionSetMessagesTTL",params:[{name:"flags",type:"#"},{name:"period",type:"int"},{name:"auto_setting_from",type:"flags.0?long"}],type:"MessageAction"},{id:-1147422299,predicate:"updatePeerHistoryTTL",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"ttl_period",type:"flags.0?int"}],type:"Update"},{id:-796432838,predicate:"updateChatParticipant",params:[{name:"flags",type:"#"},{name:"chat_id",type:"long"},{name:"date",type:"int"},{name:"actor_id",type:"long"},{name:"user_id",type:"long"},{name:"prev_participant",type:"flags.0?ChatParticipant"},{name:"new_participant",type:"flags.1?ChatParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:-1738720581,predicate:"updateChannelParticipant",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"date",type:"int"},{name:"actor_id",type:"long"},{name:"user_id",type:"long"},{name:"prev_participant",type:"flags.0?ChannelParticipant"},{name:"new_participant",type:"flags.1?ChannelParticipant"},{name:"invite",type:"flags.2?ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:-997782967,predicate:"updateBotStopped",params:[{name:"user_id",type:"long"},{name:"date",type:"int"},{name:"stopped",type:"Bool"},{name:"qts",type:"int"}],type:"Update"},{id:-1940201511,predicate:"chatInviteImporter",params:[{name:"flags",type:"#"},{name:"requested",type:"flags.0?true"},{name:"user_id",type:"long"},{name:"date",type:"int"},{name:"about",type:"flags.2?string"},{name:"approved_by",type:"flags.1?long"}],type:"ChatInviteImporter"},{id:-1111085620,predicate:"messages.exportedChatInvites",params:[{name:"count",type:"int"},{name:"invites",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvites"},{id:410107472,predicate:"messages.exportedChatInvite",params:[{name:"invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:572915951,predicate:"messages.exportedChatInviteReplaced",params:[{name:"invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"},{name:"users",type:"Vector"}],type:"messages.ExportedChatInvite"},{id:-2118733814,predicate:"messages.chatInviteImporters",params:[{name:"count",type:"int"},{name:"importers",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatInviteImporters"},{id:-219353309,predicate:"chatAdminWithInvites",params:[{name:"admin_id",type:"long"},{name:"invites_count",type:"int"},{name:"revoked_invites_count",type:"int"}],type:"ChatAdminWithInvites"},{id:-1231326505,predicate:"messages.chatAdminsWithInvites",params:[{name:"admins",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.ChatAdminsWithInvites"},{id:1557846647,predicate:"channelAdminLogEventActionParticipantJoinByInvite",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1515256996,predicate:"channelAdminLogEventActionExportedInviteDelete",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1091179342,predicate:"channelAdminLogEventActionExportedInviteRevoke",params:[{name:"invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:-384910503,predicate:"channelAdminLogEventActionExportedInviteEdit",params:[{name:"prev_invite",type:"ExportedChatInvite"},{name:"new_invite",type:"ExportedChatInvite"}],type:"ChannelAdminLogEventAction"},{id:1048537159,predicate:"channelAdminLogEventActionParticipantVolume",params:[{name:"participant",type:"GroupCallParticipant"}],type:"ChannelAdminLogEventAction"},{id:1855199800,predicate:"channelAdminLogEventActionChangeHistoryTTL",params:[{name:"prev_value",type:"int"},{name:"new_value",type:"int"}],type:"ChannelAdminLogEventAction"},{id:-1571952873,predicate:"messages.checkedHistoryImportPeer",params:[{name:"confirm_text",type:"string"}],type:"messages.CheckedHistoryImportPeer"},{id:93890858,predicate:"inputGroupCallStream",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"time_ms",type:"long"},{name:"scale",type:"int"},{name:"video_channel",type:"flags.0?int"},{name:"video_quality",type:"flags.0?int"}],type:"InputFileLocation"},{id:-1343921601,predicate:"phone.joinAsPeers",params:[{name:"peers",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"phone.JoinAsPeers"},{id:541839704,predicate:"phone.exportedGroupCallInvite",params:[{name:"link",type:"string"}],type:"phone.ExportedGroupCallInvite"},{id:-672693723,predicate:"inputBotInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?InputWebDocument"},{name:"invoice",type:"Invoice"},{name:"payload",type:"bytes"},{name:"provider",type:"string"},{name:"provider_data",type:"DataJSON"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"InputBotInlineMessage"},{id:894081801,predicate:"botInlineMessageMediaInvoice",params:[{name:"flags",type:"#"},{name:"shipping_address_requested",type:"flags.1?true"},{name:"test",type:"flags.3?true"},{name:"title",type:"string"},{name:"description",type:"string"},{name:"photo",type:"flags.0?WebDocument"},{name:"currency",type:"string"},{name:"total_amount",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"}],type:"BotInlineMessage"},{id:-1281329567,predicate:"messageActionGroupCallScheduled",params:[{name:"call",type:"InputGroupCall"},{name:"schedule_date",type:"int"}],type:"MessageAction"},{id:-592373577,predicate:"groupCallParticipantVideoSourceGroup",params:[{name:"semantics",type:"string"},{name:"sources",type:"Vector"}],type:"GroupCallParticipantVideoSourceGroup"},{id:1735736008,predicate:"groupCallParticipantVideo",params:[{name:"flags",type:"#"},{name:"paused",type:"flags.0?true"},{name:"endpoint",type:"string"},{name:"source_groups",type:"Vector"},{name:"audio_source",type:"flags.1?int"}],type:"GroupCallParticipantVideo"},{id:192428418,predicate:"updateGroupCallConnection",params:[{name:"flags",type:"#"},{name:"presentation",type:"flags.0?true"},{name:"params",type:"DataJSON"}],type:"Update"},{id:-2046910401,predicate:"stickers.suggestedShortName",params:[{name:"short_name",type:"string"}],type:"stickers.SuggestedShortName"},{id:795652779,predicate:"botCommandScopeDefault",params:[],type:"BotCommandScope"},{id:1011811544,predicate:"botCommandScopeUsers",params:[],type:"BotCommandScope"},{id:1877059713,predicate:"botCommandScopeChats",params:[],type:"BotCommandScope"},{id:-1180016534,predicate:"botCommandScopeChatAdmins",params:[],type:"BotCommandScope"},{id:-610432643,predicate:"botCommandScopePeer",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:1071145937,predicate:"botCommandScopePeerAdmins",params:[{name:"peer",type:"InputPeer"}],type:"BotCommandScope"},{id:169026035,predicate:"botCommandScopePeerUser",params:[{name:"peer",type:"InputPeer"},{name:"user_id",type:"InputUser"}],type:"BotCommandScope"},{id:-478701471,predicate:"account.resetPasswordFailedWait",params:[{name:"retry_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-370148227,predicate:"account.resetPasswordRequestedWait",params:[{name:"until_date",type:"int"}],type:"account.ResetPasswordResult"},{id:-383330754,predicate:"account.resetPasswordOk",params:[],type:"account.ResetPasswordResult"},{id:1299263278,predicate:"updateBotCommands",params:[{name:"peer",type:"Peer"},{name:"bot_id",type:"long"},{name:"commands",type:"Vector"}],type:"Update"},{id:-1434950843,predicate:"messageActionSetChatTheme",params:[{name:"emoticon",type:"string"}],type:"MessageAction"},{id:-1336228175,predicate:"sendMessageChooseStickerAction",params:[],type:"SendMessageAction"},{id:981691896,predicate:"sponsoredMessage",params:[{name:"flags",type:"#"},{name:"recommended",type:"flags.5?true"},{name:"show_peer_photo",type:"flags.6?true"},{name:"random_id",type:"bytes"},{name:"from_id",type:"flags.3?Peer"},{name:"chat_invite",type:"flags.4?ChatInvite"},{name:"chat_invite_hash",type:"flags.4?string"},{name:"channel_post",type:"flags.2?int"},{name:"start_param",type:"flags.0?string"},{name:"message",type:"string"},{name:"entities",type:"flags.1?Vector"}],type:"SponsoredMessage"},{id:-907141753,predicate:"messages.sponsoredMessages",params:[{name:"flags",type:"#"},{name:"posts_between",type:"flags.0?int"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.SponsoredMessages"},{id:215889721,predicate:"inputStickerSetAnimatedEmojiAnimations",params:[],type:"InputStickerSet"},{id:630664139,predicate:"sendMessageEmojiInteraction",params:[{name:"emoticon",type:"string"},{name:"msg_id",type:"int"},{name:"interaction",type:"DataJSON"}],type:"SendMessageAction"},{id:-1234857938,predicate:"sendMessageEmojiInteractionSeen",params:[{name:"emoticon",type:"string"}],type:"SendMessageAction"},{id:-1227287081,predicate:"inputBotInlineMessageID64",params:[{name:"dc_id",type:"int"},{name:"owner_id",type:"long"},{name:"id",type:"int"},{name:"access_hash",type:"long"}],type:"InputBotInlineMessageID"},{id:-911191137,predicate:"searchResultsCalendarPeriod",params:[{name:"date",type:"int"},{name:"min_msg_id",type:"int"},{name:"max_msg_id",type:"int"},{name:"count",type:"int"}],type:"SearchResultsCalendarPeriod"},{id:343859772,predicate:"messages.searchResultsCalendar",params:[{name:"flags",type:"#"},{name:"inexact",type:"flags.0?true"},{name:"count",type:"int"},{name:"min_date",type:"int"},{name:"min_msg_id",type:"int"},{name:"offset_id_offset",type:"flags.1?int"},{name:"periods",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.SearchResultsCalendar"},{id:2137295719,predicate:"searchResultPosition",params:[{name:"msg_id",type:"int"},{name:"date",type:"int"},{name:"offset",type:"int"}],type:"SearchResultsPosition"},{id:1404185519,predicate:"messages.searchResultsPositions",params:[{name:"count",type:"int"},{name:"positions",type:"Vector"}],type:"messages.SearchResultsPositions"},{id:-339958837,predicate:"messageActionChatJoinedByRequest",params:[],type:"MessageAction"},{id:1885586395,predicate:"updatePendingJoinRequests",params:[{name:"peer",type:"Peer"},{name:"requests_pending",type:"int"},{name:"recent_requesters",type:"Vector"}],type:"Update"},{id:299870598,predicate:"updateBotChatInviteRequester",params:[{name:"peer",type:"Peer"},{name:"date",type:"int"},{name:"user_id",type:"long"},{name:"about",type:"string"},{name:"invite",type:"ExportedChatInvite"},{name:"qts",type:"int"}],type:"Update"},{id:-1347021750,predicate:"channelAdminLogEventActionParticipantJoinByRequest",params:[{name:"invite",type:"ExportedChatInvite"},{name:"approved_by",type:"long"}],type:"ChannelAdminLogEventAction"},{id:-376962181,predicate:"inputKeyboardButtonUserProfile",params:[{name:"text",type:"string"},{name:"user_id",type:"InputUser"}],type:"KeyboardButton"},{id:814112961,predicate:"keyboardButtonUserProfile",params:[{name:"text",type:"string"},{name:"user_id",type:"long"}],type:"KeyboardButton"},{id:-191450938,predicate:"channels.sendAsPeers",params:[{name:"peers",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"channels.SendAsPeers"},{id:-886388890,predicate:"channelAdminLogEventActionToggleNoForwards",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:-738646805,predicate:"messages.stickerSetNotModified",params:[],type:"messages.StickerSet"},{id:997004590,predicate:"users.userFull",params:[{name:"full_user",type:"UserFull"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"users.UserFull"},{id:1753266509,predicate:"messages.peerSettings",params:[{name:"settings",type:"PeerSettings"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"messages.PeerSettings"},{id:663693416,predicate:"channelAdminLogEventActionSendMessage",params:[{name:"message",type:"Message"}],type:"ChannelAdminLogEventAction"},{id:-702884114,predicate:"auth.codeTypeMissedCall",params:[],type:"auth.CodeType"},{id:-2113903484,predicate:"auth.sentCodeTypeMissedCall",params:[{name:"prefix",type:"string"},{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:-1012759713,predicate:"auth.loggedOut",params:[{name:"flags",type:"#"},{name:"future_auth_token",type:"flags.0?bytes"}],type:"auth.LoggedOut"},{id:1578843320,predicate:"updateMessageReactions",params:[{name:"flags",type:"#"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"top_msg_id",type:"flags.0?int"},{name:"reactions",type:"MessageReactions"}],type:"Update"},{id:-1546531968,predicate:"reactionCount",params:[{name:"flags",type:"#"},{name:"chosen_order",type:"flags.0?int"},{name:"reaction",type:"Reaction"},{name:"count",type:"int"}],type:"ReactionCount"},{id:1328256121,predicate:"messageReactions",params:[{name:"flags",type:"#"},{name:"min",type:"flags.0?true"},{name:"can_see_list",type:"flags.2?true"},{name:"results",type:"Vector"},{name:"recent_reactions",type:"flags.1?Vector"}],type:"MessageReactions"},{id:834488621,predicate:"messages.messageReactionsList",params:[{name:"flags",type:"#"},{name:"count",type:"int"},{name:"reactions",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"next_offset",type:"flags.0?string"}],type:"messages.MessageReactionsList"},{id:-1065882623,predicate:"availableReaction",params:[{name:"flags",type:"#"},{name:"inactive",type:"flags.0?true"},{name:"premium",type:"flags.2?true"},{name:"reaction",type:"string"},{name:"title",type:"string"},{name:"static_icon",type:"Document"},{name:"appear_animation",type:"Document"},{name:"select_animation",type:"Document"},{name:"activate_animation",type:"Document"},{name:"effect_animation",type:"Document"},{name:"around_animation",type:"flags.1?Document"},{name:"center_icon",type:"flags.1?Document"}],type:"AvailableReaction"},{id:-1626924713,predicate:"messages.availableReactionsNotModified",params:[],type:"messages.AvailableReactions"},{id:1989032621,predicate:"messages.availableReactions",params:[{name:"hash",type:"int"},{name:"reactions",type:"Vector"}],type:"messages.AvailableReactions"},{id:852137487,predicate:"messageEntitySpoiler",params:[{name:"offset",type:"int"},{name:"length",type:"int"}],type:"MessageEntity"},{id:-1102180616,predicate:"channelAdminLogEventActionChangeAvailableReactions",params:[{name:"prev_value",type:"ChatReactions"},{name:"new_value",type:"ChatReactions"}],type:"ChannelAdminLogEventAction"},{id:-1319698788,predicate:"messagePeerReaction",params:[{name:"flags",type:"#"},{name:"big",type:"flags.0?true"},{name:"unread",type:"flags.1?true"},{name:"peer_id",type:"Peer"},{name:"reaction",type:"Reaction"}],type:"MessagePeerReaction"},{id:-2132064081,predicate:"groupCallStreamChannel",params:[{name:"channel",type:"int"},{name:"scale",type:"int"},{name:"last_timestamp_ms",type:"long"}],type:"GroupCallStreamChannel"},{id:-790330702,predicate:"phone.groupCallStreamChannels",params:[{name:"channels",type:"Vector"}],type:"phone.GroupCallStreamChannels"},{id:177124030,predicate:"inputReportReasonIllegalDrugs",params:[],type:"ReportReason"},{id:-1631091139,predicate:"inputReportReasonPersonalDetails",params:[],type:"ReportReason"},{id:767505458,predicate:"phone.groupCallStreamRtmpUrl",params:[{name:"url",type:"string"},{name:"key",type:"string"}],type:"phone.GroupCallStreamRtmpUrl"},{id:1165423600,predicate:"attachMenuBotIconColor",params:[{name:"name",type:"string"},{name:"color",type:"int"}],type:"AttachMenuBotIconColor"},{id:-1297663893,predicate:"attachMenuBotIcon",params:[{name:"flags",type:"#"},{name:"name",type:"string"},{name:"icon",type:"Document"},{name:"colors",type:"flags.0?Vector"}],type:"AttachMenuBotIcon"},{id:-928371502,predicate:"attachMenuBot",params:[{name:"flags",type:"#"},{name:"inactive",type:"flags.0?true"},{name:"has_settings",type:"flags.1?true"},{name:"request_write_access",type:"flags.2?true"},{name:"bot_id",type:"long"},{name:"short_name",type:"string"},{name:"peer_types",type:"Vector"},{name:"icons",type:"Vector"}],type:"AttachMenuBot"},{id:-237467044,predicate:"attachMenuBotsNotModified",params:[],type:"AttachMenuBots"},{id:1011024320,predicate:"attachMenuBots",params:[{name:"hash",type:"long"},{name:"bots",type:"Vector"},{name:"users",type:"Vector"}],type:"AttachMenuBots"},{id:-1816172929,predicate:"attachMenuBotsBot",params:[{name:"bot",type:"AttachMenuBot"},{name:"users",type:"Vector"}],type:"AttachMenuBotsBot"},{id:397910539,predicate:"updateAttachMenuBots",params:[],type:"Update"},{id:202659196,predicate:"webViewResultUrl",params:[{name:"query_id",type:"long"},{name:"url",type:"string"}],type:"WebViewResult"},{id:-2010155333,predicate:"simpleWebViewResultUrl",params:[{name:"url",type:"string"}],type:"SimpleWebViewResult"},{id:211046684,predicate:"webViewMessageSent",params:[{name:"flags",type:"#"},{name:"msg_id",type:"flags.0?InputBotInlineMessageID"}],type:"WebViewMessageSent"},{id:361936797,predicate:"updateWebViewResultSent",params:[{name:"query_id",type:"long"}],type:"Update"},{id:326529584,predicate:"keyboardButtonWebView",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:-1598009252,predicate:"keyboardButtonSimpleWebView",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"KeyboardButton"},{id:1205698681,predicate:"messageActionWebViewDataSentMe",params:[{name:"text",type:"string"},{name:"data",type:"string"}],type:"MessageAction"},{id:-1262252875,predicate:"messageActionWebViewDataSent",params:[{name:"text",type:"string"}],type:"MessageAction"},{id:347625491,predicate:"updateBotMenuButton",params:[{name:"bot_id",type:"long"},{name:"button",type:"BotMenuButton"}],type:"Update"},{id:1966318984,predicate:"botMenuButtonDefault",params:[],type:"BotMenuButton"},{id:1113113093,predicate:"botMenuButtonCommands",params:[],type:"BotMenuButton"},{id:-944407322,predicate:"botMenuButton",params:[{name:"text",type:"string"},{name:"url",type:"string"}],type:"BotMenuButton"},{id:-67704655,predicate:"account.savedRingtonesNotModified",params:[],type:"account.SavedRingtones"},{id:-1041683259,predicate:"account.savedRingtones",params:[{name:"hash",type:"long"},{name:"ringtones",type:"Vector"}],type:"account.SavedRingtones"},{id:1960361625,predicate:"updateSavedRingtones",params:[],type:"Update"},{id:-1746354498,predicate:"notificationSoundDefault",params:[],type:"NotificationSound"},{id:1863070943,predicate:"notificationSoundNone",params:[],type:"NotificationSound"},{id:-2096391452,predicate:"notificationSoundLocal",params:[{name:"title",type:"string"},{name:"data",type:"string"}],type:"NotificationSound"},{id:-9666487,predicate:"notificationSoundRingtone",params:[{name:"id",type:"long"}],type:"NotificationSound"},{id:-1222230163,predicate:"account.savedRingtone",params:[],type:"account.SavedRingtone"},{id:523271863,predicate:"account.savedRingtoneConverted",params:[{name:"document",type:"Document"}],type:"account.SavedRingtone"},{id:2104224014,predicate:"attachMenuPeerTypeSameBotPM",params:[],type:"AttachMenuPeerType"},{id:-1020528102,predicate:"attachMenuPeerTypeBotPM",params:[],type:"AttachMenuPeerType"},{id:-247016673,predicate:"attachMenuPeerTypePM",params:[],type:"AttachMenuPeerType"},{id:84480319,predicate:"attachMenuPeerTypeChat",params:[],type:"AttachMenuPeerType"},{id:2080104188,predicate:"attachMenuPeerTypeBroadcast",params:[],type:"AttachMenuPeerType"},{id:-317687113,predicate:"chatInvitePublicJoinRequests",params:[],type:"ExportedChatInvite"},{id:-977967015,predicate:"inputInvoiceMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"InputInvoice"},{id:-1020867857,predicate:"inputInvoiceSlug",params:[{name:"slug",type:"string"}],type:"InputInvoice"},{id:-1362048039,predicate:"payments.exportedInvoice",params:[{name:"url",type:"string"}],type:"payments.ExportedInvoice"},{id:8703322,predicate:"updateTranscribedAudio",params:[{name:"flags",type:"#"},{name:"pending",type:"flags.0?true"},{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"transcription_id",type:"long"},{name:"text",type:"string"}],type:"Update"},{id:-1821037486,predicate:"messages.transcribedAudio",params:[{name:"flags",type:"#"},{name:"pending",type:"flags.0?true"},{name:"transcription_id",type:"long"},{name:"text",type:"string"}],type:"messages.TranscribedAudio"},{id:909284270,predicate:"dialogFilterDefault",params:[],type:"DialogFilter"},{id:1395946908,predicate:"help.premiumPromo",params:[{name:"status_text",type:"string"},{name:"status_entities",type:"Vector"},{name:"video_sections",type:"Vector"},{name:"videos",type:"Vector"},{name:"period_options",type:"Vector"},{name:"users",type:"Vector"}],type:"help.PremiumPromo"},{id:-925956616,predicate:"messageEntityCustomEmoji",params:[{name:"offset",type:"int"},{name:"length",type:"int"},{name:"document_id",type:"long"}],type:"MessageEntity"},{id:-48981863,predicate:"documentAttributeCustomEmoji",params:[{name:"flags",type:"#"},{name:"free",type:"flags.0?true"},{name:"text_color",type:"flags.1?true"},{name:"alt",type:"string"},{name:"stickerset",type:"InputStickerSet"}],type:"DocumentAttribute"},{id:1087454222,predicate:"stickerSetFullCovered",params:[{name:"set",type:"StickerSet"},{name:"packs",type:"Vector"},{name:"keywords",type:"Vector"},{name:"documents",type:"Vector"}],type:"StickerSetCovered"},{id:-1502273946,predicate:"inputStorePaymentPremiumSubscription",params:[{name:"flags",type:"#"},{name:"restore",type:"flags.0?true"},{name:"upgrade",type:"flags.1?true"}],type:"InputStorePaymentPurpose"},{id:1634697192,predicate:"inputStorePaymentGiftPremium",params:[{name:"user_id",type:"InputUser"},{name:"currency",type:"string"},{name:"amount",type:"long"}],type:"InputStorePaymentPurpose"},{id:-1415514682,predicate:"messageActionGiftPremium",params:[{name:"currency",type:"string"},{name:"amount",type:"long"},{name:"months",type:"int"}],type:"MessageAction"},{id:1958953753,predicate:"premiumGiftOption",params:[{name:"flags",type:"#"},{name:"months",type:"int"},{name:"currency",type:"string"},{name:"amount",type:"long"},{name:"bot_url",type:"string"},{name:"store_product",type:"flags.0?string"}],type:"PremiumGiftOption"},{id:-930399486,predicate:"inputStickerSetPremiumGifts",params:[],type:"InputStickerSet"},{id:-78886548,predicate:"updateReadFeaturedEmojiStickers",params:[],type:"Update"},{id:-1360618136,predicate:"inputPrivacyKeyVoiceMessages",params:[],type:"InputPrivacyKey"},{id:110621716,predicate:"privacyKeyVoiceMessages",params:[],type:"PrivacyKey"},{id:-1996951013,predicate:"paymentFormMethod",params:[{name:"url",type:"string"},{name:"title",type:"string"}],type:"PaymentFormMethod"},{id:-193992412,predicate:"inputWebFileAudioAlbumThumbLocation",params:[{name:"flags",type:"#"},{name:"small",type:"flags.2?true"},{name:"document",type:"flags.0?InputDocument"},{name:"title",type:"flags.1?string"},{name:"performer",type:"flags.1?string"}],type:"InputWebFileLocation"},{id:183518013,predicate:"bots.premiumGiftsOptions",params:[{name:"name",type:"string"},{name:"gifts",type:"Vector"}],type:"bots.PremiumGiftsOptions"},{id:769727150,predicate:"emojiStatusEmpty",params:[],type:"EmojiStatus"},{id:-1835310691,predicate:"emojiStatus",params:[{name:"document_id",type:"long"}],type:"EmojiStatus"},{id:-97474361,predicate:"emojiStatusUntil",params:[{name:"document_id",type:"long"},{name:"until",type:"int"}],type:"EmojiStatus"},{id:674706841,predicate:"updateUserEmojiStatus",params:[{name:"user_id",type:"long"},{name:"emoji_status",type:"EmojiStatus"}],type:"Update"},{id:821314523,predicate:"updateRecentEmojiStatuses",params:[],type:"Update"},{id:-796072379,predicate:"account.emojiStatusesNotModified",params:[],type:"account.EmojiStatuses"},{id:-1866176559,predicate:"account.emojiStatuses",params:[{name:"hash",type:"long"},{name:"statuses",type:"Vector"}],type:"account.EmojiStatuses"},{id:2046153753,predicate:"reactionEmpty",params:[],type:"Reaction"},{id:455247544,predicate:"reactionEmoji",params:[{name:"emoticon",type:"string"}],type:"Reaction"},{id:-1992950669,predicate:"reactionCustomEmoji",params:[{name:"document_id",type:"long"}],type:"Reaction"},{id:-352570692,predicate:"chatReactionsNone",params:[],type:"ChatReactions"},{id:1385335754,predicate:"chatReactionsAll",params:[{name:"flags",type:"#"},{name:"allow_custom",type:"flags.0?true"}],type:"ChatReactions"},{id:1713193015,predicate:"chatReactionsSome",params:[{name:"reactions",type:"Vector"}],type:"ChatReactions"},{id:-1334846497,predicate:"messages.reactionsNotModified",params:[],type:"messages.Reactions"},{id:-352454890,predicate:"messages.reactions",params:[{name:"hash",type:"long"},{name:"reactions",type:"Vector"}],type:"messages.Reactions"},{id:1870160884,predicate:"updateRecentReactions",params:[],type:"Update"},{id:-2030252155,predicate:"updateMoveStickerSetToTop",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"stickerset",type:"long"}],type:"Update"},{id:1511364673,predicate:"auth.sentCodeTypeEmailCode",params:[{name:"flags",type:"#"},{name:"apple_signin_allowed",type:"flags.0?true"},{name:"google_signin_allowed",type:"flags.1?true"},{name:"email_pattern",type:"string"},{name:"length",type:"int"},{name:"next_phone_login_date",type:"flags.2?int"}],type:"auth.SentCodeType"},{id:-1521934870,predicate:"auth.sentCodeTypeSetUpEmailRequired",params:[{name:"flags",type:"#"},{name:"apple_signin_allowed",type:"flags.0?true"},{name:"google_signin_allowed",type:"flags.1?true"}],type:"auth.SentCodeType"},{id:1128644211,predicate:"emailVerifyPurposeLoginSetup",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"EmailVerifyPurpose"},{id:1383932651,predicate:"emailVerifyPurposeLoginChange",params:[],type:"EmailVerifyPurpose"},{id:-1141565819,predicate:"emailVerifyPurposePassport",params:[],type:"EmailVerifyPurpose"},{id:-1842457175,predicate:"emailVerificationCode",params:[{name:"code",type:"string"}],type:"EmailVerification"},{id:-611279166,predicate:"emailVerificationGoogle",params:[{name:"token",type:"string"}],type:"EmailVerification"},{id:-1764723459,predicate:"emailVerificationApple",params:[{name:"token",type:"string"}],type:"EmailVerification"},{id:731303195,predicate:"account.emailVerified",params:[{name:"email",type:"string"}],type:"account.EmailVerified"},{id:-507835039,predicate:"account.emailVerifiedLogin",params:[{name:"email",type:"string"},{name:"sent_code",type:"auth.SentCode"}],type:"account.EmailVerified"},{id:1596792306,predicate:"premiumSubscriptionOption",params:[{name:"flags",type:"#"},{name:"current",type:"flags.1?true"},{name:"can_purchase_upgrade",type:"flags.2?true"},{name:"transaction",type:"flags.3?string"},{name:"months",type:"int"},{name:"currency",type:"string"},{name:"amount",type:"long"},{name:"bot_url",type:"string"},{name:"store_product",type:"flags.0?string"}],type:"PremiumSubscriptionOption"},{id:80008398,predicate:"inputStickerSetEmojiGenericAnimations",params:[],type:"InputStickerSet"},{id:701560302,predicate:"inputStickerSetEmojiDefaultStatuses",params:[],type:"InputStickerSet"},{id:-1206095820,predicate:"sendAsPeer",params:[{name:"flags",type:"#"},{name:"premium_required",type:"flags.0?true"},{name:"peer",type:"Peer"}],type:"SendAsPeer"},{id:-1386050360,predicate:"messageExtendedMediaPreview",params:[{name:"flags",type:"#"},{name:"w",type:"flags.0?int"},{name:"h",type:"flags.0?int"},{name:"thumb",type:"flags.1?PhotoSize"},{name:"video_duration",type:"flags.2?int"}],type:"MessageExtendedMedia"},{id:-297296796,predicate:"messageExtendedMedia",params:[{name:"media",type:"MessageMedia"}],type:"MessageExtendedMedia"},{id:1517529484,predicate:"updateMessageExtendedMedia",params:[{name:"peer",type:"Peer"},{name:"msg_id",type:"int"},{name:"extended_media",type:"MessageExtendedMedia"}],type:"Update"},{id:-50416996,predicate:"stickerKeyword",params:[{name:"document_id",type:"long"},{name:"keyword",type:"Vector"}],type:"StickerKeyword"},{id:-1274595769,predicate:"username",params:[{name:"flags",type:"#"},{name:"editable",type:"flags.0?true"},{name:"active",type:"flags.1?true"},{name:"username",type:"string"}],type:"Username"},{id:-263212119,predicate:"channelAdminLogEventActionChangeUsernames",params:[{name:"prev_value",type:"Vector"},{name:"new_value",type:"Vector"}],type:"ChannelAdminLogEventAction"},{id:46949251,predicate:"channelAdminLogEventActionToggleForum",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:1483767080,predicate:"channelAdminLogEventActionCreateTopic",params:[{name:"topic",type:"ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:-261103096,predicate:"channelAdminLogEventActionEditTopic",params:[{name:"prev_topic",type:"ForumTopic"},{name:"new_topic",type:"ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:-1374254839,predicate:"channelAdminLogEventActionDeleteTopic",params:[{name:"topic",type:"ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:1569535291,predicate:"channelAdminLogEventActionPinTopic",params:[{name:"flags",type:"#"},{name:"prev_topic",type:"flags.0?ForumTopic"},{name:"new_topic",type:"flags.1?ForumTopic"}],type:"ChannelAdminLogEventAction"},{id:37687451,predicate:"forumTopicDeleted",params:[{name:"id",type:"int"}],type:"ForumTopic"},{id:1903173033,predicate:"forumTopic",params:[{name:"flags",type:"#"},{name:"my",type:"flags.1?true"},{name:"closed",type:"flags.2?true"},{name:"pinned",type:"flags.3?true"},{name:"short",type:"flags.5?true"},{name:"hidden",type:"flags.6?true"},{name:"id",type:"int"},{name:"date",type:"int"},{name:"title",type:"string"},{name:"icon_color",type:"int"},{name:"icon_emoji_id",type:"flags.0?long"},{name:"top_message",type:"int"},{name:"read_inbox_max_id",type:"int"},{name:"read_outbox_max_id",type:"int"},{name:"unread_count",type:"int"},{name:"unread_mentions_count",type:"int"},{name:"unread_reactions_count",type:"int"},{name:"from_id",type:"Peer"},{name:"notify_settings",type:"PeerNotifySettings"},{name:"draft",type:"flags.4?DraftMessage"}],type:"ForumTopic"},{id:913709011,predicate:"messages.forumTopics",params:[{name:"flags",type:"#"},{name:"order_by_create_date",type:"flags.0?true"},{name:"count",type:"int"},{name:"topics",type:"Vector"},{name:"messages",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"},{name:"pts",type:"int"}],type:"messages.ForumTopics"},{id:228168278,predicate:"messageActionTopicCreate",params:[{name:"flags",type:"#"},{name:"title",type:"string"},{name:"icon_color",type:"int"},{name:"icon_emoji_id",type:"flags.0?long"}],type:"MessageAction"},{id:-1064024032,predicate:"messageActionTopicEdit",params:[{name:"flags",type:"#"},{name:"title",type:"flags.0?string"},{name:"icon_emoji_id",type:"flags.1?long"},{name:"closed",type:"flags.2?Bool"},{name:"hidden",type:"flags.3?Bool"}],type:"MessageAction"},{id:422509539,predicate:"updateChannelPinnedTopic",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"channel_id",type:"long"},{name:"topic_id",type:"int"}],type:"Update"},{id:1548122514,predicate:"inputNotifyForumTopic",params:[{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"int"}],type:"InputNotifyPeer"},{id:577659656,predicate:"notifyForumTopic",params:[{name:"peer",type:"Peer"},{name:"top_msg_id",type:"int"}],type:"NotifyPeer"},{id:1153562857,predicate:"inputStickerSetEmojiDefaultTopicIcons",params:[],type:"InputStickerSet"},{id:406407439,predicate:"messages.sponsoredMessagesEmpty",params:[],type:"messages.SponsoredMessages"},{id:-31881726,predicate:"updateChannelPinnedTopics",params:[{name:"flags",type:"#"},{name:"channel_id",type:"long"},{name:"order",type:"flags.0?Vector"}],type:"Update"},{id:1135897376,predicate:"defaultHistoryTTL",params:[{name:"period",type:"int"}],type:"DefaultHistoryTTL"},{id:116234636,predicate:"auth.codeTypeFragmentSms",params:[],type:"auth.CodeType"},{id:-648651719,predicate:"auth.sentCodeTypeFragmentSms",params:[{name:"url",type:"string"},{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:1103040667,predicate:"exportedContactToken",params:[{name:"url",type:"string"},{name:"expires",type:"int"}],type:"ExportedContactToken"},{id:1693675004,predicate:"channelAdminLogEventActionToggleAntiSpam",params:[{name:"new_value",type:"Bool"}],type:"ChannelAdminLogEventAction"},{id:1474192222,predicate:"messageActionSuggestProfilePhoto",params:[{name:"photo",type:"Photo"}],type:"MessageAction"},{id:-404267113,predicate:"messageActionAttachMenuBotAllowed",params:[],type:"MessageAction"},{id:2008112412,predicate:"stickerSetNoCovered",params:[{name:"set",type:"StickerSet"}],type:"StickerSetCovered"},{id:542282808,predicate:"updateUser",params:[{name:"user_id",type:"long"}],type:"Update"},{id:596704836,predicate:"auth.sentCodeSuccess",params:[{name:"authorization",type:"auth.Authorization"}],type:"auth.SentCode"},{id:-25742243,predicate:"messageActionRequestedPeer",params:[{name:"button_id",type:"int"},{name:"peer",type:"Peer"}],type:"MessageAction"},{id:1597737472,predicate:"requestPeerTypeUser",params:[{name:"flags",type:"#"},{name:"bot",type:"flags.0?Bool"},{name:"premium",type:"flags.1?Bool"}],type:"RequestPeerType"},{id:-906990053,predicate:"requestPeerTypeChat",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"bot_participant",type:"flags.5?true"},{name:"has_username",type:"flags.3?Bool"},{name:"forum",type:"flags.4?Bool"},{name:"user_admin_rights",type:"flags.1?ChatAdminRights"},{name:"bot_admin_rights",type:"flags.2?ChatAdminRights"}],type:"RequestPeerType"},{id:865857388,predicate:"requestPeerTypeBroadcast",params:[{name:"flags",type:"#"},{name:"creator",type:"flags.0?true"},{name:"has_username",type:"flags.3?Bool"},{name:"user_admin_rights",type:"flags.1?ChatAdminRights"},{name:"bot_admin_rights",type:"flags.2?ChatAdminRights"}],type:"RequestPeerType"},{id:218842764,predicate:"keyboardButtonRequestPeer",params:[{name:"text",type:"string"},{name:"button_id",type:"int"},{name:"peer_type",type:"RequestPeerType"}],type:"KeyboardButton"},{id:1209970170,predicate:"emojiListNotModified",params:[],type:"EmojiList"},{id:2048790993,predicate:"emojiList",params:[{name:"hash",type:"long"},{name:"document_id",type:"Vector"}],type:"EmojiList"},{id:-444918734,predicate:"auth.sentCodeTypeFirebaseSms",params:[{name:"flags",type:"#"},{name:"nonce",type:"flags.0?bytes"},{name:"receipt",type:"flags.1?string"},{name:"push_timeout",type:"flags.1?int"},{name:"length",type:"int"}],type:"auth.SentCodeType"},{id:2056961449,predicate:"emojiGroup",params:[{name:"title",type:"string"},{name:"icon_emoji_id",type:"long"},{name:"emoticons",type:"Vector"}],type:"EmojiGroup"},{id:1874111879,predicate:"messages.emojiGroupsNotModified",params:[],type:"messages.EmojiGroups"},{id:-2011186869,predicate:"messages.emojiGroups",params:[{name:"hash",type:"int"},{name:"groups",type:"Vector"}],type:"messages.EmojiGroups"},{id:-128171716,predicate:"videoSizeEmojiMarkup",params:[{name:"emoji_id",type:"long"},{name:"background_colors",type:"Vector"}],type:"VideoSize"},{id:228623102,predicate:"videoSizeStickerMarkup",params:[{name:"stickerset",type:"InputStickerSet"},{name:"sticker_id",type:"long"},{name:"background_colors",type:"Vector"}],type:"VideoSize"},{id:1964978502,predicate:"textWithEntities",params:[{name:"text",type:"string"},{name:"entities",type:"Vector"}],type:"TextWithEntities"},{id:870003448,predicate:"messages.translateResult",params:[{name:"result",type:"Vector"}],type:"messages.TranslatedText"},{id:-934791986,predicate:"autoSaveSettings",params:[{name:"flags",type:"#"},{name:"photos",type:"flags.0?true"},{name:"videos",type:"flags.1?true"},{name:"video_max_size",type:"flags.2?long"}],type:"AutoSaveSettings"},{id:-2124403385,predicate:"autoSaveException",params:[{name:"peer",type:"Peer"},{name:"settings",type:"AutoSaveSettings"}],type:"AutoSaveException"},{id:1279133341,predicate:"account.autoSaveSettings",params:[{name:"users_settings",type:"AutoSaveSettings"},{name:"chats_settings",type:"AutoSaveSettings"},{name:"broadcasts_settings",type:"AutoSaveSettings"},{name:"exceptions",type:"Vector"},{name:"chats",type:"Vector"},{name:"users",type:"Vector"}],type:"account.AutoSaveSettings"},{id:-335171433,predicate:"updateAutoSaveSettings",params:[],type:"Update"}],methods:[{id:-878758099,method:"invokeAfterMsg",params:[{name:"msg_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:1036301552,method:"invokeAfterMsgs",params:[{name:"msg_ids",type:"Vector"},{name:"query",type:"!X"}],type:"X"},{id:-1502141361,method:"auth.sendCode",params:[{name:"phone_number",type:"string"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:-2131827673,method:"auth.signUp",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"first_name",type:"string"},{name:"last_name",type:"string"}],type:"auth.Authorization"},{id:-1923962543,method:"auth.signIn",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"flags.0?string"},{name:"email_verification",type:"flags.1?EmailVerification"}],type:"auth.Authorization"},{id:1047706137,method:"auth.logOut",params:[],type:"auth.LoggedOut"},{id:-1616179942,method:"auth.resetAuthorizations",params:[],type:"Bool"},{id:-440401971,method:"auth.exportAuthorization",params:[{name:"dc_id",type:"int"}],type:"auth.ExportedAuthorization"},{id:-1518699091,method:"auth.importAuthorization",params:[{name:"id",type:"long"},{name:"bytes",type:"bytes"}],type:"auth.Authorization"},{id:-841733627,method:"auth.bindTempAuthKey",params:[{name:"perm_auth_key_id",type:"long"},{name:"nonce",type:"long"},{name:"expires_at",type:"int"},{name:"encrypted_message",type:"bytes"}],type:"Bool"},{id:-326762118,method:"account.registerDevice",params:[{name:"flags",type:"#"},{name:"no_muted",type:"flags.0?true"},{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"app_sandbox",type:"Bool"},{name:"secret",type:"bytes"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:1779249670,method:"account.unregisterDevice",params:[{name:"token_type",type:"int"},{name:"token",type:"string"},{name:"other_uids",type:"Vector"}],type:"Bool"},{id:-2067899501,method:"account.updateNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"},{name:"settings",type:"InputPeerNotifySettings"}],type:"Bool"},{id:313765169,method:"account.getNotifySettings",params:[{name:"peer",type:"InputNotifyPeer"}],type:"PeerNotifySettings"},{id:-612493497,method:"account.resetNotifySettings",params:[],type:"Bool"},{id:2018596725,method:"account.updateProfile",params:[{name:"flags",type:"#"},{name:"first_name",type:"flags.0?string"},{name:"last_name",type:"flags.1?string"},{name:"about",type:"flags.2?string"}],type:"User"},{id:1713919532,method:"account.updateStatus",params:[{name:"offline",type:"Bool"}],type:"Bool"},{id:127302966,method:"account.getWallPapers",params:[{name:"hash",type:"long"}],type:"account.WallPapers"},{id:-977650298,method:"account.reportPeer",params:[{name:"peer",type:"InputPeer"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:227648840,method:"users.getUsers",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-1240508136,method:"users.getFullUser",params:[{name:"id",type:"InputUser"}],type:"users.UserFull"},{id:2061264541,method:"contacts.getContactIDs",params:[{name:"hash",type:"long"}],type:"Vector"},{id:-995929106,method:"contacts.getStatuses",params:[],type:"Vector"},{id:1574346258,method:"contacts.getContacts",params:[{name:"hash",type:"long"}],type:"contacts.Contacts"},{id:746589157,method:"contacts.importContacts",params:[{name:"contacts",type:"Vector"}],type:"contacts.ImportedContacts"},{id:157945344,method:"contacts.deleteContacts",params:[{name:"id",type:"Vector"}],type:"Updates"},{id:269745566,method:"contacts.deleteByPhones",params:[{name:"phones",type:"Vector"}],type:"Bool"},{id:1758204945,method:"contacts.block",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-1096393392,method:"contacts.unblock",params:[{name:"id",type:"InputPeer"}],type:"Bool"},{id:-176409329,method:"contacts.getBlocked",params:[{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"contacts.Blocked"},{id:1673946374,method:"messages.getMessages",params:[{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1594569905,method:"messages.getDialogs",params:[{name:"flags",type:"#"},{name:"exclude_pinned",type:"flags.0?true"},{name:"folder_id",type:"flags.1?int"},{name:"offset_date",type:"int"},{name:"offset_id",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Dialogs"},{id:1143203525,method:"messages.getHistory",params:[{name:"peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:-1593989278,method:"messages.search",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"q",type:"string"},{name:"from_id",type:"flags.0?InputPeer"},{name:"top_msg_id",type:"flags.1?int"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:238054714,method:"messages.readHistory",params:[{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"}],type:"messages.AffectedMessages"},{id:-1332768214,method:"messages.deleteHistory",params:[{name:"flags",type:"#"},{name:"just_clear",type:"flags.0?true"},{name:"revoke",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"max_id",type:"int"},{name:"min_date",type:"flags.2?int"},{name:"max_date",type:"flags.3?int"}],type:"messages.AffectedHistory"},{id:-443640366,method:"messages.deleteMessages",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:94983360,method:"messages.receivedMessages",params:[{name:"max_id",type:"int"}],type:"Vector"},{id:1486110434,method:"messages.setTyping",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"action",type:"SendMessageAction"}],type:"Bool"},{id:482476935,method:"messages.sendMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"noforwards",type:"flags.14?true"},{name:"update_stickersets_order",type:"flags.15?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:1967638886,method:"messages.sendMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"noforwards",type:"flags.14?true"},{name:"update_stickersets_order",type:"flags.15?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"media",type:"InputMedia"},{name:"message",type:"string"},{name:"random_id",type:"long"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:-966673468,method:"messages.forwardMessages",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"with_my_score",type:"flags.8?true"},{name:"drop_author",type:"flags.11?true"},{name:"drop_media_captions",type:"flags.12?true"},{name:"noforwards",type:"flags.14?true"},{name:"from_peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"random_id",type:"Vector"},{name:"to_peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.9?int"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:-820669733,method:"messages.reportSpam",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-270948702,method:"messages.getPeerSettings",params:[{name:"peer",type:"InputPeer"}],type:"messages.PeerSettings"},{id:-1991005362,method:"messages.report",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:1240027791,method:"messages.getChats",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:-1364194508,method:"messages.getFullChat",params:[{name:"chat_id",type:"long"}],type:"messages.ChatFull"},{id:1937260541,method:"messages.editChatTitle",params:[{name:"chat_id",type:"long"},{name:"title",type:"string"}],type:"Updates"},{id:903730804,method:"messages.editChatPhoto",params:[{name:"chat_id",type:"long"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:-230206493,method:"messages.addChatUser",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"InputUser"},{name:"fwd_limit",type:"int"}],type:"Updates"},{id:-1575461717,method:"messages.deleteChatUser",params:[{name:"flags",type:"#"},{name:"revoke_history",type:"flags.0?true"},{name:"chat_id",type:"long"},{name:"user_id",type:"InputUser"}],type:"Updates"},{id:3450904,method:"messages.createChat",params:[{name:"flags",type:"#"},{name:"users",type:"Vector"},{name:"title",type:"string"},{name:"ttl_period",type:"flags.0?int"}],type:"Updates"},{id:-304838614,method:"updates.getState",params:[],type:"updates.State"},{id:630429265,method:"updates.getDifference",params:[{name:"flags",type:"#"},{name:"pts",type:"int"},{name:"pts_total_limit",type:"flags.0?int"},{name:"date",type:"int"},{name:"qts",type:"int"}],type:"updates.Difference"},{id:473782614,method:"photos.updateProfilePhoto",params:[{name:"flags",type:"#"},{name:"fallback",type:"flags.0?true"},{name:"id",type:"InputPhoto"}],type:"photos.Photo"},{id:154966609,method:"photos.uploadProfilePhoto",params:[{name:"flags",type:"#"},{name:"fallback",type:"flags.3?true"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"},{name:"video_emoji_markup",type:"flags.4?VideoSize"}],type:"photos.Photo"},{id:-2016444625,method:"photos.deletePhotos",params:[{name:"id",type:"Vector"}],type:"Vector"},{id:-1291540959,method:"upload.saveFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1101843010,method:"upload.getFile",params:[{name:"flags",type:"#"},{name:"precise",type:"flags.0?true"},{name:"cdn_supported",type:"flags.1?true"},{name:"location",type:"InputFileLocation"},{name:"offset",type:"long"},{name:"limit",type:"int"}],type:"upload.File"},{id:-990308245,method:"help.getConfig",params:[],type:"Config"},{id:531836966,method:"help.getNearestDc",params:[],type:"NearestDc"},{id:1378703997,method:"help.getAppUpdate",params:[{name:"source",type:"string"}],type:"help.AppUpdate"},{id:1295590211,method:"help.getInviteText",params:[],type:"help.InviteText"},{id:-1848823128,method:"photos.getUserPhotos",params:[{name:"user_id",type:"InputUser"},{name:"offset",type:"int"},{name:"max_id",type:"long"},{name:"limit",type:"int"}],type:"photos.Photos"},{id:651135312,method:"messages.getDhConfig",params:[{name:"version",type:"int"},{name:"random_length",type:"int"}],type:"messages.DhConfig"},{id:-162681021,method:"messages.requestEncryption",params:[{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a",type:"bytes"}],type:"EncryptedChat"},{id:1035731989,method:"messages.acceptEncryption",params:[{name:"peer",type:"InputEncryptedChat"},{name:"g_b",type:"bytes"},{name:"key_fingerprint",type:"long"}],type:"EncryptedChat"},{id:-208425312,method:"messages.discardEncryption",params:[{name:"flags",type:"#"},{name:"delete_history",type:"flags.0?true"},{name:"chat_id",type:"int"}],type:"Bool"},{id:2031374829,method:"messages.setEncryptedTyping",params:[{name:"peer",type:"InputEncryptedChat"},{name:"typing",type:"Bool"}],type:"Bool"},{id:2135648522,method:"messages.readEncryptedHistory",params:[{name:"peer",type:"InputEncryptedChat"},{name:"max_date",type:"int"}],type:"Bool"},{id:1157265941,method:"messages.sendEncrypted",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1431914525,method:"messages.sendEncryptedFile",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"},{name:"file",type:"InputEncryptedFile"}],type:"messages.SentEncryptedMessage"},{id:852769188,method:"messages.sendEncryptedService",params:[{name:"peer",type:"InputEncryptedChat"},{name:"random_id",type:"long"},{name:"data",type:"bytes"}],type:"messages.SentEncryptedMessage"},{id:1436924774,method:"messages.receivedQueue",params:[{name:"max_qts",type:"int"}],type:"Vector"},{id:1259113487,method:"messages.reportEncryptedSpam",params:[{name:"peer",type:"InputEncryptedChat"}],type:"Bool"},{id:-562337987,method:"upload.saveBigFilePart",params:[{name:"file_id",type:"long"},{name:"file_part",type:"int"},{name:"file_total_parts",type:"int"},{name:"bytes",type:"bytes"}],type:"Bool"},{id:-1043505495,method:"initConnection",params:[{name:"flags",type:"#"},{name:"api_id",type:"int"},{name:"device_model",type:"string"},{name:"system_version",type:"string"},{name:"app_version",type:"string"},{name:"system_lang_code",type:"string"},{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"proxy",type:"flags.0?InputClientProxy"},{name:"params",type:"flags.1?JSONValue"},{name:"query",type:"!X"}],type:"X"},{id:-1663104819,method:"help.getSupport",params:[],type:"help.Support"},{id:916930423,method:"messages.readMessageContents",params:[{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:655677548,method:"account.checkUsername",params:[{name:"username",type:"string"}],type:"Bool"},{id:1040964988,method:"account.updateUsername",params:[{name:"username",type:"string"}],type:"User"},{id:301470424,method:"contacts.search",params:[{name:"q",type:"string"},{name:"limit",type:"int"}],type:"contacts.Found"},{id:-623130288,method:"account.getPrivacy",params:[{name:"key",type:"InputPrivacyKey"}],type:"account.PrivacyRules"},{id:-906486552,method:"account.setPrivacy",params:[{name:"key",type:"InputPrivacyKey"},{name:"rules",type:"Vector"}],type:"account.PrivacyRules"},{id:-1564422284,method:"account.deleteAccount",params:[{name:"flags",type:"#"},{name:"reason",type:"string"},{name:"password",type:"flags.0?InputCheckPasswordSRP"}],type:"Bool"},{id:150761757,method:"account.getAccountTTL",params:[],type:"AccountDaysTTL"},{id:608323678,method:"account.setAccountTTL",params:[{name:"ttl",type:"AccountDaysTTL"}],type:"Bool"},{id:-627372787,method:"invokeWithLayer",params:[{name:"layer",type:"int"},{name:"query",type:"!X"}],type:"X"},{id:-113456221,method:"contacts.resolveUsername",params:[{name:"username",type:"string"}],type:"contacts.ResolvedPeer"},{id:-2108208411,method:"account.sendChangePhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1891839707,method:"account.changePhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"User"},{id:-710552671,method:"messages.getStickers",params:[{name:"emoticon",type:"string"},{name:"hash",type:"long"}],type:"messages.Stickers"},{id:-1197432408,method:"messages.getAllStickers",params:[{name:"hash",type:"long"}],type:"messages.AllStickers"},{id:954152242,method:"account.updateDeviceLocked",params:[{name:"period",type:"int"}],type:"Bool"},{id:1738800940,method:"auth.importBotAuthorization",params:[{name:"flags",type:"int"},{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"bot_auth_token",type:"string"}],type:"auth.Authorization"},{id:-1956073268,method:"messages.getWebPagePreview",params:[{name:"flags",type:"#"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"MessageMedia"},{id:-484392616,method:"account.getAuthorizations",params:[],type:"account.Authorizations"},{id:-545786948,method:"account.resetAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1418342645,method:"account.getPassword",params:[],type:"account.Password"},{id:-1663767815,method:"account.getPasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"account.PasswordSettings"},{id:-1516564433,method:"account.updatePasswordSettings",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"new_settings",type:"account.PasswordInputSettings"}],type:"Bool"},{id:-779399914,method:"auth.checkPassword",params:[{name:"password",type:"InputCheckPasswordSRP"}],type:"auth.Authorization"},{id:-661144474,method:"auth.requestPasswordRecovery",params:[],type:"auth.PasswordRecovery"},{id:923364464,method:"auth.recoverPassword",params:[{name:"flags",type:"#"},{name:"code",type:"string"},{name:"new_settings",type:"flags.0?account.PasswordInputSettings"}],type:"auth.Authorization"},{id:-1080796745,method:"invokeWithoutUpdates",params:[{name:"query",type:"!X"}],type:"X"},{id:-1607670315,method:"messages.exportChatInvite",params:[{name:"flags",type:"#"},{name:"legacy_revoke_permanent",type:"flags.2?true"},{name:"request_needed",type:"flags.3?true"},{name:"peer",type:"InputPeer"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"},{name:"title",type:"flags.4?string"}],type:"ExportedChatInvite"},{id:1051570619,method:"messages.checkChatInvite",params:[{name:"hash",type:"string"}],type:"ChatInvite"},{id:1817183516,method:"messages.importChatInvite",params:[{name:"hash",type:"string"}],type:"Updates"},{id:-928977804,method:"messages.getStickerSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"hash",type:"int"}],type:"messages.StickerSet"},{id:-946871200,method:"messages.installStickerSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"archived",type:"Bool"}],type:"messages.StickerSetInstallResult"},{id:-110209570,method:"messages.uninstallStickerSet",params:[{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:-421563528,method:"messages.startBot",params:[{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"long"},{name:"start_param",type:"string"}],type:"Updates"},{id:-1877938321,method:"help.getAppChangelog",params:[{name:"prev_app_version",type:"string"}],type:"Updates"},{id:1468322785,method:"messages.getMessagesViews",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"},{name:"increment",type:"Bool"}],type:"messages.MessageViews"},{id:-871347913,method:"channels.readHistory",params:[{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Bool"},{id:-2067661490,method:"channels.deleteMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.AffectedMessages"},{id:-196443371,method:"channels.reportSpam",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Bool"},{id:-1383294429,method:"channels.getMessages",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:2010044880,method:"channels.getParticipants",params:[{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelParticipantsFilter"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"channels.ChannelParticipants"},{id:-1599378234,method:"channels.getParticipant",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"}],type:"channels.ChannelParticipant"},{id:176122811,method:"channels.getChannels",params:[{name:"id",type:"Vector"}],type:"messages.Chats"},{id:141781513,method:"channels.getFullChannel",params:[{name:"channel",type:"InputChannel"}],type:"messages.ChatFull"},{id:-1862244601,method:"channels.createChannel",params:[{name:"flags",type:"#"},{name:"broadcast",type:"flags.0?true"},{name:"megagroup",type:"flags.1?true"},{name:"for_import",type:"flags.3?true"},{name:"forum",type:"flags.5?true"},{name:"title",type:"string"},{name:"about",type:"string"},{name:"geo_point",type:"flags.2?InputGeoPoint"},{name:"address",type:"flags.2?string"},{name:"ttl_period",type:"flags.4?int"}],type:"Updates"},{id:-751007486,method:"channels.editAdmin",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"admin_rights",type:"ChatAdminRights"},{name:"rank",type:"string"}],type:"Updates"},{id:1450044624,method:"channels.editTitle",params:[{name:"channel",type:"InputChannel"},{name:"title",type:"string"}],type:"Updates"},{id:-248621111,method:"channels.editPhoto",params:[{name:"channel",type:"InputChannel"},{name:"photo",type:"InputChatPhoto"}],type:"Updates"},{id:283557164,method:"channels.checkUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:890549214,method:"channels.updateUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"}],type:"Bool"},{id:615851205,method:"channels.joinChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:-130635115,method:"channels.leaveChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:429865580,method:"channels.inviteToChannel",params:[{name:"channel",type:"InputChannel"},{name:"users",type:"Vector"}],type:"Updates"},{id:-1072619549,method:"channels.deleteChannel",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:51854712,method:"updates.getChannelDifference",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"filter",type:"ChannelMessagesFilter"},{name:"pts",type:"int"},{name:"limit",type:"int"}],type:"updates.ChannelDifference"},{id:-1470377534,method:"messages.editChatAdmin",params:[{name:"chat_id",type:"long"},{name:"user_id",type:"InputUser"},{name:"is_admin",type:"Bool"}],type:"Bool"},{id:-1568189671,method:"messages.migrateChat",params:[{name:"chat_id",type:"long"}],type:"Updates"},{id:1271290010,method:"messages.searchGlobal",params:[{name:"flags",type:"#"},{name:"folder_id",type:"flags.0?int"},{name:"q",type:"string"},{name:"filter",type:"MessagesFilter"},{name:"min_date",type:"int"},{name:"max_date",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:2016638777,method:"messages.reorderStickerSets",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"order",type:"Vector"}],type:"Bool"},{id:-1309538785,method:"messages.getDocumentByHash",params:[{name:"sha256",type:"bytes"},{name:"size",type:"long"},{name:"mime_type",type:"string"}],type:"Document"},{id:1559270965,method:"messages.getSavedGifs",params:[{name:"hash",type:"long"}],type:"messages.SavedGifs"},{id:846868683,method:"messages.saveGif",params:[{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:1364105629,method:"messages.getInlineBotResults",params:[{name:"flags",type:"#"},{name:"bot",type:"InputUser"},{name:"peer",type:"InputPeer"},{name:"geo_point",type:"flags.0?InputGeoPoint"},{name:"query",type:"string"},{name:"offset",type:"string"}],type:"messages.BotResults"},{id:-346119674,method:"messages.setInlineBotResults",params:[{name:"flags",type:"#"},{name:"gallery",type:"flags.0?true"},{name:"private",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"results",type:"Vector"},{name:"cache_time",type:"int"},{name:"next_offset",type:"flags.2?string"},{name:"switch_pm",type:"flags.3?InlineBotSwitchPM"}],type:"Bool"},{id:-738468661,method:"messages.sendInlineBotResult",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"hide_via",type:"flags.11?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"random_id",type:"long"},{name:"query_id",type:"long"},{name:"id",type:"string"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:-432034325,method:"channels.exportMessageLink",params:[{name:"flags",type:"#"},{name:"grouped",type:"flags.0?true"},{name:"thread",type:"flags.1?true"},{name:"channel",type:"InputChannel"},{name:"id",type:"int"}],type:"ExportedMessageLink"},{id:527021574,method:"channels.toggleSignatures",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:1056025023,method:"auth.resendCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"auth.SentCode"},{id:520357240,method:"auth.cancelCode",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"}],type:"Bool"},{id:-39416522,method:"messages.getMessageEditData",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"messages.MessageEditData"},{id:1224152952,method:"messages.editMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"},{name:"schedule_date",type:"flags.15?int"}],type:"Updates"},{id:-2091549254,method:"messages.editInlineBotMessage",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"message",type:"flags.11?string"},{name:"media",type:"flags.14?InputMedia"},{name:"reply_markup",type:"flags.2?ReplyMarkup"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:-1824339449,method:"messages.getBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"game",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"data",type:"flags.0?bytes"},{name:"password",type:"flags.2?InputCheckPasswordSRP"}],type:"messages.BotCallbackAnswer"},{id:-712043766,method:"messages.setBotCallbackAnswer",params:[{name:"flags",type:"#"},{name:"alert",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"message",type:"flags.0?string"},{name:"url",type:"flags.2?string"},{name:"cache_time",type:"int"}],type:"Bool"},{id:-1758168906,method:"contacts.getTopPeers",params:[{name:"flags",type:"#"},{name:"correspondents",type:"flags.0?true"},{name:"bots_pm",type:"flags.1?true"},{name:"bots_inline",type:"flags.2?true"},{name:"phone_calls",type:"flags.3?true"},{name:"forward_users",type:"flags.4?true"},{name:"forward_chats",type:"flags.5?true"},{name:"groups",type:"flags.10?true"},{name:"channels",type:"flags.15?true"},{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"contacts.TopPeers"},{id:451113900,method:"contacts.resetTopPeerRating",params:[{name:"category",type:"TopPeerCategory"},{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-462373635,method:"messages.getPeerDialogs",params:[{name:"peers",type:"Vector"}],type:"messages.PeerDialogs"},{id:-1271718337,method:"messages.saveDraft",params:[{name:"flags",type:"#"},{name:"no_webpage",type:"flags.1?true"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.2?int"},{name:"peer",type:"InputPeer"},{name:"message",type:"string"},{name:"entities",type:"flags.3?Vector"}],type:"Bool"},{id:1782549861,method:"messages.getAllDrafts",params:[],type:"Updates"},{id:1685588756,method:"messages.getFeaturedStickers",params:[{name:"hash",type:"long"}],type:"messages.FeaturedStickers"},{id:1527873830,method:"messages.readFeaturedStickers",params:[{name:"id",type:"Vector"}],type:"Bool"},{id:-1649852357,method:"messages.getRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"hash",type:"long"}],type:"messages.RecentStickers"},{id:958863608,method:"messages.saveRecentSticker",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"},{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:-1986437075,method:"messages.clearRecentStickers",params:[{name:"flags",type:"#"},{name:"attached",type:"flags.0?true"}],type:"Bool"},{id:1475442322,method:"messages.getArchivedStickers",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"emojis",type:"flags.1?true"},{name:"offset_id",type:"long"},{name:"limit",type:"int"}],type:"messages.ArchivedStickers"},{id:457157256,method:"account.sendConfirmPhoneCode",params:[{name:"hash",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1596029123,method:"account.confirmPhone",params:[{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:-122669393,method:"channels.getAdminedPublicChannels",params:[{name:"flags",type:"#"},{name:"by_location",type:"flags.0?true"},{name:"check_limit",type:"flags.1?true"}],type:"messages.Chats"},{id:1678738104,method:"messages.getMaskStickers",params:[{name:"hash",type:"long"}],type:"messages.AllStickers"},{id:-866424884,method:"messages.getAttachedStickers",params:[{name:"media",type:"InputStickeredMedia"}],type:"Vector"},{id:-1907842680,method:"auth.dropTempAuthKeys",params:[{name:"except_auth_keys",type:"Vector"}],type:"Bool"},{id:-1896289088,method:"messages.setGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Updates"},{id:363700068,method:"messages.setInlineGameScore",params:[{name:"flags",type:"#"},{name:"edit_message",type:"flags.0?true"},{name:"force",type:"flags.1?true"},{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"},{name:"score",type:"int"}],type:"Bool"},{id:-400399203,method:"messages.getGameHighScores",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:258170395,method:"messages.getInlineGameHighScores",params:[{name:"id",type:"InputBotInlineMessageID"},{name:"user_id",type:"InputUser"}],type:"messages.HighScores"},{id:-468934396,method:"messages.getCommonChats",params:[{name:"user_id",type:"InputUser"},{name:"max_id",type:"long"},{name:"limit",type:"int"}],type:"messages.Chats"},{id:-2023787330,method:"messages.getAllChats",params:[{name:"except_ids",type:"Vector"}],type:"messages.Chats"},{id:-333262899,method:"help.setBotUpdatesStatus",params:[{name:"pending_updates_count",type:"int"},{name:"message",type:"string"}],type:"Bool"},{id:852135825,method:"messages.getWebPage",params:[{name:"url",type:"string"},{name:"hash",type:"int"}],type:"WebPage"},{id:-1489903017,method:"messages.toggleDialogPin",params:[{name:"flags",type:"#"},{name:"pinned",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:991616823,method:"messages.reorderPinnedDialogs",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"folder_id",type:"int"},{name:"order",type:"Vector"}],type:"Bool"},{id:-692498958,method:"messages.getPinnedDialogs",params:[{name:"folder_id",type:"int"}],type:"messages.PeerDialogs"},{id:-1440257555,method:"bots.sendCustomRequest",params:[{name:"custom_method",type:"string"},{name:"params",type:"DataJSON"}],type:"DataJSON"},{id:-434028723,method:"bots.answerWebhookJSONQuery",params:[{name:"query_id",type:"long"},{name:"data",type:"DataJSON"}],type:"Bool"},{id:619086221,method:"upload.getWebFile",params:[{name:"location",type:"InputWebFileLocation"},{name:"offset",type:"int"},{name:"limit",type:"int"}],type:"upload.WebFile"},{id:924093883,method:"payments.getPaymentForm",params:[{name:"flags",type:"#"},{name:"invoice",type:"InputInvoice"},{name:"theme_params",type:"flags.0?DataJSON"}],type:"payments.PaymentForm"},{id:611897804,method:"payments.getPaymentReceipt",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"payments.PaymentReceipt"},{id:-1228345045,method:"payments.validateRequestedInfo",params:[{name:"flags",type:"#"},{name:"save",type:"flags.0?true"},{name:"invoice",type:"InputInvoice"},{name:"info",type:"PaymentRequestedInfo"}],type:"payments.ValidatedRequestedInfo"},{id:755192367,method:"payments.sendPaymentForm",params:[{name:"flags",type:"#"},{name:"form_id",type:"long"},{name:"invoice",type:"InputInvoice"},{name:"requested_info_id",type:"flags.0?string"},{name:"shipping_option_id",type:"flags.1?string"},{name:"credentials",type:"InputPaymentCredentials"},{name:"tip_amount",type:"flags.2?long"}],type:"payments.PaymentResult"},{id:1151208273,method:"account.getTmpPassword",params:[{name:"password",type:"InputCheckPasswordSRP"},{name:"period",type:"int"}],type:"account.TmpPassword"},{id:578650699,method:"payments.getSavedInfo",params:[],type:"payments.SavedInfo"},{id:-667062079,method:"payments.clearSavedInfo",params:[{name:"flags",type:"#"},{name:"credentials",type:"flags.0?true"},{name:"info",type:"flags.1?true"}],type:"Bool"},{id:-436833542,method:"messages.setBotShippingResults",params:[{name:"flags",type:"#"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"},{name:"shipping_options",type:"flags.1?Vector"}],type:"Bool"},{id:163765653,method:"messages.setBotPrecheckoutResults",params:[{name:"flags",type:"#"},{name:"success",type:"flags.1?true"},{name:"query_id",type:"long"},{name:"error",type:"flags.0?string"}],type:"Bool"},{id:-1876841625,method:"stickers.createStickerSet",params:[{name:"flags",type:"#"},{name:"masks",type:"flags.0?true"},{name:"animated",type:"flags.1?true"},{name:"videos",type:"flags.4?true"},{name:"emojis",type:"flags.5?true"},{name:"text_color",type:"flags.6?true"},{name:"user_id",type:"InputUser"},{name:"title",type:"string"},{name:"short_name",type:"string"},{name:"thumb",type:"flags.2?InputDocument"},{name:"stickers",type:"Vector"},{name:"software",type:"flags.3?string"}],type:"messages.StickerSet"},{id:-143257775,method:"stickers.removeStickerFromSet",params:[{name:"sticker",type:"InputDocument"}],type:"messages.StickerSet"},{id:-4795190,method:"stickers.changeStickerPosition",params:[{name:"sticker",type:"InputDocument"},{name:"position",type:"int"}],type:"messages.StickerSet"},{id:-2041315650,method:"stickers.addStickerToSet",params:[{name:"stickerset",type:"InputStickerSet"},{name:"sticker",type:"InputStickerSetItem"}],type:"messages.StickerSet"},{id:1369162417,method:"messages.uploadMedia",params:[{name:"peer",type:"InputPeer"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:1430593449,method:"phone.getCallConfig",params:[],type:"DataJSON"},{id:1124046573,method:"phone.requestCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"user_id",type:"InputUser"},{name:"random_id",type:"int"},{name:"g_a_hash",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:1003664544,method:"phone.acceptCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_b",type:"bytes"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:788404002,method:"phone.confirmCall",params:[{name:"peer",type:"InputPhoneCall"},{name:"g_a",type:"bytes"},{name:"key_fingerprint",type:"long"},{name:"protocol",type:"PhoneCallProtocol"}],type:"phone.PhoneCall"},{id:399855457,method:"phone.receivedCall",params:[{name:"peer",type:"InputPhoneCall"}],type:"Bool"},{id:-1295269440,method:"phone.discardCall",params:[{name:"flags",type:"#"},{name:"video",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"duration",type:"int"},{name:"reason",type:"PhoneCallDiscardReason"},{name:"connection_id",type:"long"}],type:"Updates"},{id:1508562471,method:"phone.setCallRating",params:[{name:"flags",type:"#"},{name:"user_initiative",type:"flags.0?true"},{name:"peer",type:"InputPhoneCall"},{name:"rating",type:"int"},{name:"comment",type:"string"}],type:"Updates"},{id:662363518,method:"phone.saveCallDebug",params:[{name:"peer",type:"InputPhoneCall"},{name:"debug",type:"DataJSON"}],type:"Bool"},{id:962554330,method:"upload.getCdnFile",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"long"},{name:"limit",type:"int"}],type:"upload.CdnFile"},{id:-1691921240,method:"upload.reuploadCdnFile",params:[{name:"file_token",type:"bytes"},{name:"request_token",type:"bytes"}],type:"Vector"},{id:1375900482,method:"help.getCdnConfig",params:[],type:"CdnConfig"},{id:-219008246,method:"langpack.getLangPack",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackDifference"},{id:-269862909,method:"langpack.getStrings",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"keys",type:"Vector"}],type:"Vector"},{id:-845657435,method:"langpack.getDifference",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"LangPackDifference"},{id:1120311183,method:"langpack.getLanguages",params:[{name:"lang_pack",type:"string"}],type:"Vector"},{id:-1763259007,method:"channels.editBanned",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:870184064,method:"channels.getAdminLog",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"q",type:"string"},{name:"events_filter",type:"flags.0?ChannelAdminLogEventsFilter"},{name:"admins",type:"flags.1?Vector"},{name:"max_id",type:"long"},{name:"min_id",type:"long"},{name:"limit",type:"int"}],type:"channels.AdminLogResults"},{id:-1847836879,method:"upload.getCdnFileHashes",params:[{name:"file_token",type:"bytes"},{name:"offset",type:"long"}],type:"Vector"},{id:-914493408,method:"messages.sendScreenshotNotification",params:[{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"int"},{name:"random_id",type:"long"}],type:"Updates"},{id:-359881479,method:"channels.setStickers",params:[{name:"channel",type:"InputChannel"},{name:"stickerset",type:"InputStickerSet"}],type:"Bool"},{id:82946729,method:"messages.getFavedStickers",params:[{name:"hash",type:"long"}],type:"messages.FavedStickers"},{id:-1174420133,method:"messages.faveSticker",params:[{name:"id",type:"InputDocument"},{name:"unfave",type:"Bool"}],type:"Bool"},{id:-357180360,method:"channels.readMessageContents",params:[{name:"channel",type:"InputChannel"},{name:"id",type:"Vector"}],type:"Bool"},{id:-2020263951,method:"contacts.resetSaved",params:[],type:"Bool"},{id:-251140208,method:"messages.getUnreadMentions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"}],type:"messages.Messages"},{id:-1683319225,method:"channels.deleteHistory",params:[{name:"flags",type:"#"},{name:"for_everyone",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"max_id",type:"int"}],type:"Updates"},{id:1036054804,method:"help.getRecentMeUrls",params:[{name:"referer",type:"string"}],type:"help.RecentMeUrls"},{id:-356796084,method:"channels.togglePreHistoryHidden",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:921026381,method:"messages.readMentions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"}],type:"messages.AffectedHistory"},{id:1881817312,method:"messages.getRecentLocations",params:[{name:"peer",type:"InputPeer"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:-1225713124,method:"messages.sendMultiMedia",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"background",type:"flags.6?true"},{name:"clear_draft",type:"flags.7?true"},{name:"noforwards",type:"flags.14?true"},{name:"update_stickersets_order",type:"flags.15?true"},{name:"peer",type:"InputPeer"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"multi_media",type:"Vector"},{name:"schedule_date",type:"flags.10?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Updates"},{id:1347929239,method:"messages.uploadEncryptedFile",params:[{name:"peer",type:"InputEncryptedChat"},{name:"file",type:"InputEncryptedFile"}],type:"EncryptedFile"},{id:405695855,method:"account.getWebAuthorizations",params:[],type:"account.WebAuthorizations"},{id:755087855,method:"account.resetWebAuthorization",params:[{name:"hash",type:"long"}],type:"Bool"},{id:1747789204,method:"account.resetWebAuthorizations",params:[],type:"Bool"},{id:896555914,method:"messages.searchStickerSets",params:[{name:"flags",type:"#"},{name:"exclude_featured",type:"flags.0?true"},{name:"q",type:"string"},{name:"hash",type:"long"}],type:"messages.FoundStickerSets"},{id:-1856595926,method:"upload.getFileHashes",params:[{name:"location",type:"InputFileLocation"},{name:"offset",type:"long"}],type:"Vector"},{id:749019089,method:"help.getTermsOfServiceUpdate",params:[],type:"help.TermsOfServiceUpdate"},{id:-294455398,method:"help.acceptTermsOfService",params:[{name:"id",type:"DataJSON"}],type:"Bool"},{id:-1299661699,method:"account.getAllSecureValues",params:[],type:"Vector"},{id:1936088002,method:"account.getSecureValue",params:[{name:"types",type:"Vector"}],type:"Vector"},{id:-1986010339,method:"account.saveSecureValue",params:[{name:"value",type:"InputSecureValue"},{name:"secure_secret_id",type:"long"}],type:"SecureValue"},{id:-1199522741,method:"account.deleteSecureValue",params:[{name:"types",type:"Vector"}],type:"Bool"},{id:-1865902923,method:"users.setSecureValueErrors",params:[{name:"id",type:"InputUser"},{name:"errors",type:"Vector"}],type:"Bool"},{id:-1456907910,method:"account.getAuthorizationForm",params:[{name:"bot_id",type:"long"},{name:"scope",type:"string"},{name:"public_key",type:"string"}],type:"account.AuthorizationForm"},{id:-202552205,method:"account.acceptAuthorization",params:[{name:"bot_id",type:"long"},{name:"scope",type:"string"},{name:"public_key",type:"string"},{name:"value_hashes",type:"Vector"},{name:"credentials",type:"SecureCredentialsEncrypted"}],type:"Bool"},{id:-1516022023,method:"account.sendVerifyPhoneCode",params:[{name:"phone_number",type:"string"},{name:"settings",type:"CodeSettings"}],type:"auth.SentCode"},{id:1305716726,method:"account.verifyPhone",params:[{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"phone_code",type:"string"}],type:"Bool"},{id:-1730136133,method:"account.sendVerifyEmailCode",params:[{name:"purpose",type:"EmailVerifyPurpose"},{name:"email",type:"string"}],type:"account.SentEmailCode"},{id:53322959,method:"account.verifyEmail",params:[{name:"purpose",type:"EmailVerifyPurpose"},{name:"verification",type:"EmailVerification"}],type:"account.EmailVerified"},{id:1072547679,method:"help.getDeepLinkInfo",params:[{name:"path",type:"string"}],type:"help.DeepLinkInfo"},{id:-2098076769,method:"contacts.getSaved",params:[],type:"Vector"},{id:-2092831552,method:"channels.getLeftChannels",params:[{name:"offset",type:"int"}],type:"messages.Chats"},{id:-1896617296,method:"account.initTakeoutSession",params:[{name:"flags",type:"#"},{name:"contacts",type:"flags.0?true"},{name:"message_users",type:"flags.1?true"},{name:"message_chats",type:"flags.2?true"},{name:"message_megagroups",type:"flags.3?true"},{name:"message_channels",type:"flags.4?true"},{name:"files",type:"flags.5?true"},{name:"file_max_size",type:"flags.5?long"}],type:"account.Takeout"},{id:489050862,method:"account.finishTakeoutSession",params:[{name:"flags",type:"#"},{name:"success",type:"flags.0?true"}],type:"Bool"},{id:486505992,method:"messages.getSplitRanges",params:[],type:"Vector"},{id:911373810,method:"invokeWithMessagesRange",params:[{name:"range",type:"MessageRange"},{name:"query",type:"!X"}],type:"X"},{id:-1398145746,method:"invokeWithTakeout",params:[{name:"takeout_id",type:"long"},{name:"query",type:"!X"}],type:"X"},{id:-1031349873,method:"messages.markDialogUnread",params:[{name:"flags",type:"#"},{name:"unread",type:"flags.0?true"},{name:"peer",type:"InputDialogPeer"}],type:"Bool"},{id:585256482,method:"messages.getDialogUnreadMarks",params:[],type:"Vector"},{id:-2062238246,method:"contacts.toggleTopPeers",params:[{name:"enabled",type:"Bool"}],type:"Bool"},{id:2119757468,method:"messages.clearAllDrafts",params:[],type:"Bool"},{id:-1735311088,method:"help.getAppConfig",params:[],type:"JSONValue"},{id:1862465352,method:"help.saveAppLog",params:[{name:"events",type:"Vector"}],type:"Bool"},{id:-966677240,method:"help.getPassportConfig",params:[{name:"hash",type:"int"}],type:"help.PassportConfig"},{id:1784243458,method:"langpack.getLanguage",params:[{name:"lang_pack",type:"string"},{name:"lang_code",type:"string"}],type:"LangPackLanguage"},{id:-760547348,method:"messages.updatePinnedMessage",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.0?true"},{name:"unpin",type:"flags.1?true"},{name:"pm_oneside",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"}],type:"Updates"},{id:-1881204448,method:"account.confirmPasswordEmail",params:[{name:"code",type:"string"}],type:"Bool"},{id:2055154197,method:"account.resendPasswordEmail",params:[],type:"Bool"},{id:-1043606090,method:"account.cancelPasswordEmail",params:[],type:"Bool"},{id:-748624084,method:"help.getSupportName",params:[],type:"help.SupportName"},{id:59377875,method:"help.getUserInfo",params:[{name:"user_id",type:"InputUser"}],type:"help.UserInfo"},{id:1723407216,method:"help.editUserInfo",params:[{name:"user_id",type:"InputUser"},{name:"message",type:"string"},{name:"entities",type:"Vector"}],type:"help.UserInfo"},{id:-1626880216,method:"account.getContactSignUpNotification",params:[],type:"Bool"},{id:-806076575,method:"account.setContactSignUpNotification",params:[{name:"silent",type:"Bool"}],type:"Bool"},{id:1398240377,method:"account.getNotifyExceptions",params:[{name:"flags",type:"#"},{name:"compare_sound",type:"flags.1?true"},{name:"peer",type:"flags.0?InputNotifyPeer"}],type:"Updates"},{id:283795844,method:"messages.sendVote",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"options",type:"Vector"}],type:"Updates"},{id:1941660731,method:"messages.getPollResults",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1848369232,method:"messages.getOnlines",params:[{name:"peer",type:"InputPeer"}],type:"ChatOnlines"},{id:-554301545,method:"messages.editChatAbout",params:[{name:"peer",type:"InputPeer"},{name:"about",type:"string"}],type:"Bool"},{id:-1517917375,method:"messages.editChatDefaultBannedRights",params:[{name:"peer",type:"InputPeer"},{name:"banned_rights",type:"ChatBannedRights"}],type:"Updates"},{id:-57811990,method:"account.getWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"}],type:"WallPaper"},{id:-578472351,method:"account.uploadWallPaper",params:[{name:"file",type:"InputFile"},{name:"mime_type",type:"string"},{name:"settings",type:"WallPaperSettings"}],type:"WallPaper"},{id:1817860919,method:"account.saveWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"unsave",type:"Bool"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-18000023,method:"account.installWallPaper",params:[{name:"wallpaper",type:"InputWallPaper"},{name:"settings",type:"WallPaperSettings"}],type:"Bool"},{id:-1153722364,method:"account.resetWallPapers",params:[],type:"Bool"},{id:1457130303,method:"account.getAutoDownloadSettings",params:[],type:"account.AutoDownloadSettings"},{id:1995661875,method:"account.saveAutoDownloadSettings",params:[{name:"flags",type:"#"},{name:"low",type:"flags.0?true"},{name:"high",type:"flags.1?true"},{name:"settings",type:"AutoDownloadSettings"}],type:"Bool"},{id:899735650,method:"messages.getEmojiKeywords",params:[{name:"lang_code",type:"string"}],type:"EmojiKeywordsDifference"},{id:352892591,method:"messages.getEmojiKeywordsDifference",params:[{name:"lang_code",type:"string"},{name:"from_version",type:"int"}],type:"EmojiKeywordsDifference"},{id:1318675378,method:"messages.getEmojiKeywordsLanguages",params:[{name:"lang_codes",type:"Vector"}],type:"Vector"},{id:-709817306,method:"messages.getEmojiURL",params:[{name:"lang_code",type:"string"}],type:"EmojiURL"},{id:1749536939,method:"folders.editPeerFolders",params:[{name:"folder_peers",type:"Vector"}],type:"Updates"},{id:472471681,method:"folders.deleteFolder",params:[{name:"folder_id",type:"int"}],type:"Updates"},{id:11435201,method:"messages.getSearchCounters",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"filters",type:"Vector"}],type:"Vector"},{id:-170208392,method:"channels.getGroupsForDiscussion",params:[],type:"messages.Chats"},{id:1079520178,method:"channels.setDiscussionGroup",params:[{name:"broadcast",type:"InputChannel"},{name:"group",type:"InputChannel"}],type:"Bool"},{id:428848198,method:"messages.requestUrlAuth",params:[{name:"flags",type:"#"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:-1322487515,method:"messages.acceptUrlAuth",params:[{name:"flags",type:"#"},{name:"write_allowed",type:"flags.0?true"},{name:"peer",type:"flags.1?InputPeer"},{name:"msg_id",type:"flags.1?int"},{name:"button_id",type:"flags.1?int"},{name:"url",type:"flags.2?string"}],type:"UrlAuthResult"},{id:1336717624,method:"messages.hidePeerSettingsBar",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-386636848,method:"contacts.addContact",params:[{name:"flags",type:"#"},{name:"add_phone_privacy_exception",type:"flags.0?true"},{name:"id",type:"InputUser"},{name:"first_name",type:"string"},{name:"last_name",type:"string"},{name:"phone",type:"string"}],type:"Updates"},{id:-130964977,method:"contacts.acceptContact",params:[{name:"id",type:"InputUser"}],type:"Updates"},{id:-1892102881,method:"channels.editCreator",params:[{name:"channel",type:"InputChannel"},{name:"user_id",type:"InputUser"},{name:"password",type:"InputCheckPasswordSRP"}],type:"Updates"},{id:-750207932,method:"contacts.getLocated",params:[{name:"flags",type:"#"},{name:"background",type:"flags.1?true"},{name:"geo_point",type:"InputGeoPoint"},{name:"self_expires",type:"flags.0?int"}],type:"Updates"},{id:1491484525,method:"channels.editLocation",params:[{name:"channel",type:"InputChannel"},{name:"geo_point",type:"InputGeoPoint"},{name:"address",type:"string"}],type:"Bool"},{id:-304832784,method:"channels.toggleSlowMode",params:[{name:"channel",type:"InputChannel"},{name:"seconds",type:"int"}],type:"Updates"},{id:-183077365,method:"messages.getScheduledHistory",params:[{name:"peer",type:"InputPeer"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:-1111817116,method:"messages.getScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"messages.Messages"},{id:-1120369398,method:"messages.sendScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:1504586518,method:"messages.deleteScheduledMessages",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:473805619,method:"account.uploadTheme",params:[{name:"flags",type:"#"},{name:"file",type:"InputFile"},{name:"thumb",type:"flags.0?InputFile"},{name:"file_name",type:"string"},{name:"mime_type",type:"string"}],type:"Document"},{id:1697530880,method:"account.createTheme",params:[{name:"flags",type:"#"},{name:"slug",type:"string"},{name:"title",type:"string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?Vector"}],type:"Theme"},{id:737414348,method:"account.updateTheme",params:[{name:"flags",type:"#"},{name:"format",type:"string"},{name:"theme",type:"InputTheme"},{name:"slug",type:"flags.0?string"},{name:"title",type:"flags.1?string"},{name:"document",type:"flags.2?InputDocument"},{name:"settings",type:"flags.3?Vector"}],type:"Theme"},{id:-229175188,method:"account.saveTheme",params:[{name:"theme",type:"InputTheme"},{name:"unsave",type:"Bool"}],type:"Bool"},{id:-953697477,method:"account.installTheme",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"theme",type:"flags.1?InputTheme"},{name:"format",type:"flags.2?string"},{name:"base_theme",type:"flags.3?BaseTheme"}],type:"Bool"},{id:978872812,method:"account.getTheme",params:[{name:"format",type:"string"},{name:"theme",type:"InputTheme"}],type:"Theme"},{id:1913054296,method:"account.getThemes",params:[{name:"format",type:"string"},{name:"hash",type:"long"}],type:"account.Themes"},{id:-1210022402,method:"auth.exportLoginToken",params:[{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"except_ids",type:"Vector"}],type:"auth.LoginToken"},{id:-1783866140,method:"auth.importLoginToken",params:[{name:"token",type:"bytes"}],type:"auth.LoginToken"},{id:-392909491,method:"auth.acceptLoginToken",params:[{name:"token",type:"bytes"}],type:"Authorization"},{id:-1250643605,method:"account.setContentSettings",params:[{name:"flags",type:"#"},{name:"sensitive_enabled",type:"flags.0?true"}],type:"Bool"},{id:-1952756306,method:"account.getContentSettings",params:[],type:"account.ContentSettings"},{id:300429806,method:"channels.getInactiveChannels",params:[],type:"messages.InactiveChats"},{id:1705865692,method:"account.getMultiWallPapers",params:[{name:"wallpapers",type:"Vector"}],type:"Vector"},{id:-1200736242,method:"messages.getPollVotes",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"option",type:"flags.0?bytes"},{name:"offset",type:"flags.1?string"},{name:"limit",type:"int"}],type:"messages.VotesList"},{id:-1257951254,method:"messages.toggleStickerSets",params:[{name:"flags",type:"#"},{name:"uninstall",type:"flags.0?true"},{name:"archive",type:"flags.1?true"},{name:"unarchive",type:"flags.2?true"},{name:"stickersets",type:"Vector"}],type:"Bool"},{id:779736953,method:"payments.getBankCardData",params:[{name:"number",type:"string"}],type:"payments.BankCardData"},{id:-241247891,method:"messages.getDialogFilters",params:[],type:"Vector"},{id:-1566780372,method:"messages.getSuggestedDialogFilters",params:[],type:"Vector"},{id:450142282,method:"messages.updateDialogFilter",params:[{name:"flags",type:"#"},{name:"id",type:"int"},{name:"filter",type:"flags.0?DialogFilter"}],type:"Bool"},{id:-983318044,method:"messages.updateDialogFiltersOrder",params:[{name:"order",type:"Vector"}],type:"Bool"},{id:-1421720550,method:"stats.getBroadcastStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.BroadcastStats"},{id:1646092192,method:"stats.loadAsyncGraph",params:[{name:"flags",type:"#"},{name:"token",type:"string"},{name:"x",type:"flags.0?long"}],type:"StatsGraph"},{id:-1707717072,method:"stickers.setStickerSetThumb",params:[{name:"stickerset",type:"InputStickerSet"},{name:"thumb",type:"InputDocument"}],type:"messages.StickerSet"},{id:85399130,method:"bots.setBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"},{name:"commands",type:"Vector"}],type:"Bool"},{id:2127598753,method:"messages.getOldFeaturedStickers",params:[{name:"offset",type:"int"},{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.FeaturedStickers"},{id:-1063816159,method:"help.getPromoData",params:[],type:"help.PromoData"},{id:505748629,method:"help.hidePromoData",params:[{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-8744061,method:"phone.sendSignalingData",params:[{name:"peer",type:"InputPhoneCall"},{name:"data",type:"bytes"}],type:"Bool"},{id:-589330937,method:"stats.getMegagroupStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"}],type:"stats.MegagroupStats"},{id:-349483786,method:"account.getGlobalPrivacySettings",params:[],type:"GlobalPrivacySettings"},{id:517647042,method:"account.setGlobalPrivacySettings",params:[{name:"settings",type:"GlobalPrivacySettings"}],type:"GlobalPrivacySettings"},{id:-183649631,method:"help.dismissSuggestion",params:[{name:"peer",type:"InputPeer"},{name:"suggestion",type:"string"}],type:"Bool"},{id:1935116200,method:"help.getCountriesList",params:[{name:"lang_code",type:"string"},{name:"hash",type:"int"}],type:"help.CountriesList"},{id:584962828,method:"messages.getReplies",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"},{name:"hash",type:"long"}],type:"messages.Messages"},{id:1147761405,method:"messages.getDiscussionMessage",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"messages.DiscussionMessage"},{id:-147740172,method:"messages.readDiscussion",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"read_max_id",type:"int"}],type:"Bool"},{id:698914348,method:"contacts.blockFromReplies",params:[{name:"flags",type:"#"},{name:"delete_message",type:"flags.0?true"},{name:"delete_history",type:"flags.1?true"},{name:"report_spam",type:"flags.2?true"},{name:"msg_id",type:"int"}],type:"Updates"},{id:1445996571,method:"stats.getMessagePublicForwards",params:[{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"},{name:"offset_rate",type:"int"},{name:"offset_peer",type:"InputPeer"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:-1226791947,method:"stats.getMessageStats",params:[{name:"flags",type:"#"},{name:"dark",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"}],type:"stats.MessageStats"},{id:-299714136,method:"messages.unpinAllMessages",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"}],type:"messages.AffectedHistory"},{id:1221445336,method:"phone.createGroupCall",params:[{name:"flags",type:"#"},{name:"rtmp_stream",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"random_id",type:"int"},{name:"title",type:"flags.0?string"},{name:"schedule_date",type:"flags.1?int"}],type:"Updates"},{id:-1322057861,method:"phone.joinGroupCall",params:[{name:"flags",type:"#"},{name:"muted",type:"flags.0?true"},{name:"video_stopped",type:"flags.2?true"},{name:"call",type:"InputGroupCall"},{name:"join_as",type:"InputPeer"},{name:"invite_hash",type:"flags.1?string"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:1342404601,method:"phone.leaveGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"source",type:"int"}],type:"Updates"},{id:2067345760,method:"phone.inviteToGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"users",type:"Vector"}],type:"Updates"},{id:2054648117,method:"phone.discardGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1958458429,method:"phone.toggleGroupCallSettings",params:[{name:"flags",type:"#"},{name:"reset_invite_hash",type:"flags.1?true"},{name:"call",type:"InputGroupCall"},{name:"join_muted",type:"flags.0?Bool"}],type:"Updates"},{id:68699611,method:"phone.getGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"limit",type:"int"}],type:"phone.GroupCall"},{id:-984033109,method:"phone.getGroupParticipants",params:[{name:"call",type:"InputGroupCall"},{name:"ids",type:"Vector"},{name:"sources",type:"Vector"},{name:"offset",type:"string"},{name:"limit",type:"int"}],type:"phone.GroupParticipants"},{id:-1248003721,method:"phone.checkGroupCall",params:[{name:"call",type:"InputGroupCall"},{name:"sources",type:"Vector"}],type:"Vector"},{id:1540419152,method:"messages.deleteChat",params:[{name:"chat_id",type:"long"}],type:"Bool"},{id:-104078327,method:"messages.deletePhoneCallHistory",params:[{name:"flags",type:"#"},{name:"revoke",type:"flags.0?true"}],type:"messages.AffectedFoundMessages"},{id:1140726259,method:"messages.checkHistoryImport",params:[{name:"import_head",type:"string"}],type:"messages.HistoryImportParsed"},{id:873008187,method:"messages.initHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"file",type:"InputFile"},{name:"media_count",type:"int"}],type:"messages.HistoryImport"},{id:713433234,method:"messages.uploadImportedMedia",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"},{name:"file_name",type:"string"},{name:"media",type:"InputMedia"}],type:"MessageMedia"},{id:-1271008444,method:"messages.startHistoryImport",params:[{name:"peer",type:"InputPeer"},{name:"import_id",type:"long"}],type:"Bool"},{id:-1565154314,method:"messages.getExportedChatInvites",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.3?true"},{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"},{name:"offset_date",type:"flags.2?int"},{name:"offset_link",type:"flags.2?string"},{name:"limit",type:"int"}],type:"messages.ExportedChatInvites"},{id:1937010524,method:"messages.getExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"messages.ExportedChatInvite"},{id:-1110823051,method:"messages.editExportedChatInvite",params:[{name:"flags",type:"#"},{name:"revoked",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"string"},{name:"expire_date",type:"flags.0?int"},{name:"usage_limit",type:"flags.1?int"},{name:"request_needed",type:"flags.3?Bool"},{name:"title",type:"flags.4?string"}],type:"messages.ExportedChatInvite"},{id:1452833749,method:"messages.deleteRevokedExportedChatInvites",params:[{name:"peer",type:"InputPeer"},{name:"admin_id",type:"InputUser"}],type:"Bool"},{id:-731601877,method:"messages.deleteExportedChatInvite",params:[{name:"peer",type:"InputPeer"},{name:"link",type:"string"}],type:"Bool"},{id:958457583,method:"messages.getAdminsWithInvites",params:[{name:"peer",type:"InputPeer"}],type:"messages.ChatAdminsWithInvites"},{id:-553329330,method:"messages.getChatInviteImporters",params:[{name:"flags",type:"#"},{name:"requested",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"flags.1?string"},{name:"q",type:"flags.2?string"},{name:"offset_date",type:"int"},{name:"offset_user",type:"InputUser"},{name:"limit",type:"int"}],type:"messages.ChatInviteImporters"},{id:-1207017500,method:"messages.setHistoryTTL",params:[{name:"peer",type:"InputPeer"},{name:"period",type:"int"}],type:"Updates"},{id:-91437323,method:"account.reportProfilePhoto",params:[{name:"peer",type:"InputPeer"},{name:"photo_id",type:"InputPhoto"},{name:"reason",type:"ReportReason"},{name:"message",type:"string"}],type:"Bool"},{id:187239529,method:"channels.convertToGigagroup",params:[{name:"channel",type:"InputChannel"}],type:"Updates"},{id:1573261059,method:"messages.checkHistoryImportPeer",params:[{name:"peer",type:"InputPeer"}],type:"messages.CheckedHistoryImportPeer"},{id:-248985848,method:"phone.toggleGroupCallRecord",params:[{name:"flags",type:"#"},{name:"start",type:"flags.0?true"},{name:"video",type:"flags.2?true"},{name:"call",type:"InputGroupCall"},{name:"title",type:"flags.1?string"},{name:"video_portrait",type:"flags.2?Bool"}],type:"Updates"},{id:-1524155713,method:"phone.editGroupCallParticipant",params:[{name:"flags",type:"#"},{name:"call",type:"InputGroupCall"},{name:"participant",type:"InputPeer"},{name:"muted",type:"flags.0?Bool"},{name:"volume",type:"flags.1?int"},{name:"raise_hand",type:"flags.2?Bool"},{name:"video_stopped",type:"flags.3?Bool"},{name:"video_paused",type:"flags.4?Bool"},{name:"presentation_paused",type:"flags.5?Bool"}],type:"Updates"},{id:480685066,method:"phone.editGroupCallTitle",params:[{name:"call",type:"InputGroupCall"},{name:"title",type:"string"}],type:"Updates"},{id:-277077702,method:"phone.getGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"}],type:"phone.JoinAsPeers"},{id:-425040769,method:"phone.exportGroupCallInvite",params:[{name:"flags",type:"#"},{name:"can_self_unmute",type:"flags.0?true"},{name:"call",type:"InputGroupCall"}],type:"phone.ExportedGroupCallInvite"},{id:563885286,method:"phone.toggleGroupCallStartSubscription",params:[{name:"call",type:"InputGroupCall"},{name:"subscribed",type:"Bool"}],type:"Updates"},{id:1451287362,method:"phone.startScheduledGroupCall",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:1465786252,method:"phone.saveDefaultGroupCallJoinAs",params:[{name:"peer",type:"InputPeer"},{name:"join_as",type:"InputPeer"}],type:"Bool"},{id:-873829436,method:"phone.joinGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"},{name:"params",type:"DataJSON"}],type:"Updates"},{id:475058500,method:"phone.leaveGroupCallPresentation",params:[{name:"call",type:"InputGroupCall"}],type:"Updates"},{id:676017721,method:"stickers.checkShortName",params:[{name:"short_name",type:"string"}],type:"Bool"},{id:1303364867,method:"stickers.suggestShortName",params:[{name:"title",type:"string"}],type:"stickers.SuggestedShortName"},{id:1032708345,method:"bots.resetBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Bool"},{id:-481554986,method:"bots.getBotCommands",params:[{name:"scope",type:"BotCommandScope"},{name:"lang_code",type:"string"}],type:"Vector"},{id:-1828139493,method:"account.resetPassword",params:[],type:"account.ResetPasswordResult"},{id:1284770294,method:"account.declinePasswordReset",params:[],type:"Bool"},{id:221691769,method:"auth.checkRecoveryPassword",params:[{name:"code",type:"string"}],type:"Bool"},{id:-700916087,method:"account.getChatThemes",params:[{name:"hash",type:"long"}],type:"account.Themes"},{id:-432283329,method:"messages.setChatTheme",params:[{name:"peer",type:"InputPeer"},{name:"emoticon",type:"string"}],type:"Updates"},{id:-1095836780,method:"channels.viewSponsoredMessage",params:[{name:"channel",type:"InputChannel"},{name:"random_id",type:"bytes"}],type:"Bool"},{id:-333377601,method:"channels.getSponsoredMessages",params:[{name:"channel",type:"InputChannel"}],type:"messages.SponsoredMessages"},{id:745510839,method:"messages.getMessageReadParticipants",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"Vector"},{id:1240514025,method:"messages.getSearchResultsCalendar",params:[{name:"peer",type:"InputPeer"},{name:"filter",type:"MessagesFilter"},{name:"offset_id",type:"int"},{name:"offset_date",type:"int"}],type:"messages.SearchResultsCalendar"},{id:1855292323,method:"messages.getSearchResultsPositions",params:[{name:"peer",type:"InputPeer"},{name:"filter",type:"MessagesFilter"},{name:"offset_id",type:"int"},{name:"limit",type:"int"}],type:"messages.SearchResultsPositions"},{id:2145904661,method:"messages.hideChatJoinRequest",params:[{name:"flags",type:"#"},{name:"approved",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"user_id",type:"InputUser"}],type:"Updates"},{id:-528091926,method:"messages.hideAllChatJoinRequests",params:[{name:"flags",type:"#"},{name:"approved",type:"flags.0?true"},{name:"peer",type:"InputPeer"},{name:"link",type:"flags.1?string"}],type:"Updates"},{id:-1323389022,method:"messages.toggleNoForwards",params:[{name:"peer",type:"InputPeer"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-855777386,method:"messages.saveDefaultSendAs",params:[{name:"peer",type:"InputPeer"},{name:"send_as",type:"InputPeer"}],type:"Bool"},{id:231174382,method:"channels.getSendAs",params:[{name:"peer",type:"InputPeer"}],type:"channels.SendAsPeers"},{id:-1081501024,method:"account.setAuthorizationTTL",params:[{name:"authorization_ttl_days",type:"int"}],type:"Bool"},{id:1089766498,method:"account.changeAuthorizationSettings",params:[{name:"flags",type:"#"},{name:"hash",type:"long"},{name:"encrypted_requests_disabled",type:"flags.0?Bool"},{name:"call_requests_disabled",type:"flags.1?Bool"}],type:"Bool"},{id:913655003,method:"channels.deleteParticipantHistory",params:[{name:"channel",type:"InputChannel"},{name:"participant",type:"InputPeer"}],type:"messages.AffectedHistory"},{id:-754091820,method:"messages.sendReaction",params:[{name:"flags",type:"#"},{name:"big",type:"flags.1?true"},{name:"add_to_recent",type:"flags.2?true"},{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"reaction",type:"flags.0?Vector"}],type:"Updates"},{id:-1950707482,method:"messages.getMessagesReactions",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:1176190792,method:"messages.getMessageReactionsList",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"reaction",type:"flags.0?Reaction"},{name:"offset",type:"flags.1?string"},{name:"limit",type:"int"}],type:"messages.MessageReactionsList"},{id:-21928079,method:"messages.setChatAvailableReactions",params:[{name:"peer",type:"InputPeer"},{name:"available_reactions",type:"ChatReactions"}],type:"Updates"},{id:417243308,method:"messages.getAvailableReactions",params:[{name:"hash",type:"int"}],type:"messages.AvailableReactions"},{id:1330094102,method:"messages.setDefaultReaction",params:[{name:"reaction",type:"Reaction"}],type:"Bool"},{id:1662529584,method:"messages.translateText",params:[{name:"flags",type:"#"},{name:"peer",type:"flags.0?InputPeer"},{name:"id",type:"flags.0?Vector"},{name:"text",type:"flags.1?Vector"},{name:"to_lang",type:"string"}],type:"messages.TranslatedText"},{id:841173339,method:"messages.getUnreadReactions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"},{name:"offset_id",type:"int"},{name:"add_offset",type:"int"},{name:"limit",type:"int"},{name:"max_id",type:"int"},{name:"min_id",type:"int"}],type:"messages.Messages"},{id:1420459918,method:"messages.readReactions",params:[{name:"flags",type:"#"},{name:"peer",type:"InputPeer"},{name:"top_msg_id",type:"flags.0?int"}],type:"messages.AffectedHistory"},{id:-1963375804,method:"contacts.resolvePhone",params:[{name:"phone",type:"string"}],type:"contacts.ResolvedPeer"},{id:447879488,method:"phone.getGroupCallStreamChannels",params:[{name:"call",type:"InputGroupCall"}],type:"phone.GroupCallStreamChannels"},{id:-558650433,method:"phone.getGroupCallStreamRtmpUrl",params:[{name:"peer",type:"InputPeer"},{name:"revoke",type:"Bool"}],type:"phone.GroupCallStreamRtmpUrl"},{id:276705696,method:"messages.searchSentMedia",params:[{name:"q",type:"string"},{name:"filter",type:"MessagesFilter"},{name:"limit",type:"int"}],type:"messages.Messages"},{id:385663691,method:"messages.getAttachMenuBots",params:[{name:"hash",type:"long"}],type:"AttachMenuBots"},{id:1998676370,method:"messages.getAttachMenuBot",params:[{name:"bot",type:"InputUser"}],type:"AttachMenuBotsBot"},{id:1777704297,method:"messages.toggleBotInAttachMenu",params:[{name:"flags",type:"#"},{name:"write_allowed",type:"flags.0?true"},{name:"bot",type:"InputUser"},{name:"enabled",type:"Bool"}],type:"Bool"},{id:395003915,method:"messages.requestWebView",params:[{name:"flags",type:"#"},{name:"from_bot_menu",type:"flags.4?true"},{name:"silent",type:"flags.5?true"},{name:"peer",type:"InputPeer"},{name:"bot",type:"InputUser"},{name:"url",type:"flags.1?string"},{name:"start_param",type:"flags.3?string"},{name:"theme_params",type:"flags.2?DataJSON"},{name:"platform",type:"string"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"WebViewResult"},{id:2146648841,method:"messages.prolongWebView",params:[{name:"flags",type:"#"},{name:"silent",type:"flags.5?true"},{name:"peer",type:"InputPeer"},{name:"bot",type:"InputUser"},{name:"query_id",type:"long"},{name:"reply_to_msg_id",type:"flags.0?int"},{name:"top_msg_id",type:"flags.9?int"},{name:"send_as",type:"flags.13?InputPeer"}],type:"Bool"},{id:698084494,method:"messages.requestSimpleWebView",params:[{name:"flags",type:"#"},{name:"bot",type:"InputUser"},{name:"url",type:"string"},{name:"theme_params",type:"flags.0?DataJSON"},{name:"platform",type:"string"}],type:"SimpleWebViewResult"},{id:172168437,method:"messages.sendWebViewResultMessage",params:[{name:"bot_query_id",type:"string"},{name:"result",type:"InputBotInlineResult"}],type:"WebViewMessageSent"},{id:-603831608,method:"messages.sendWebViewData",params:[{name:"bot",type:"InputUser"},{name:"random_id",type:"long"},{name:"button_text",type:"string"},{name:"data",type:"string"}],type:"Updates"},{id:1157944655,method:"bots.setBotMenuButton",params:[{name:"user_id",type:"InputUser"},{name:"button",type:"BotMenuButton"}],type:"Bool"},{id:-1671369944,method:"bots.getBotMenuButton",params:[{name:"user_id",type:"InputUser"}],type:"BotMenuButton"},{id:-510647672,method:"account.getSavedRingtones",params:[{name:"hash",type:"long"}],type:"account.SavedRingtones"},{id:1038768899,method:"account.saveRingtone",params:[{name:"id",type:"InputDocument"},{name:"unsave",type:"Bool"}],type:"account.SavedRingtone"},{id:-2095414366,method:"account.uploadRingtone",params:[{name:"file",type:"InputFile"},{name:"file_name",type:"string"},{name:"mime_type",type:"string"}],type:"Document"},{id:2021942497,method:"bots.setBotBroadcastDefaultAdminRights",params:[{name:"admin_rights",type:"ChatAdminRights"}],type:"Bool"},{id:-1839281686,method:"bots.setBotGroupDefaultAdminRights",params:[{name:"admin_rights",type:"ChatAdminRights"}],type:"Bool"},{id:1092913030,method:"phone.saveCallLog",params:[{name:"peer",type:"InputPhoneCall"},{name:"file",type:"InputFile"}],type:"Bool"},{id:-456419968,method:"channels.toggleJoinToSend",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:1277789622,method:"channels.toggleJoinRequest",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:261206117,method:"payments.exportInvoice",params:[{name:"invoice_media",type:"InputMedia"}],type:"payments.ExportedInvoice"},{id:647928393,method:"messages.transcribeAudio",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"}],type:"messages.TranscribedAudio"},{id:2132608815,method:"messages.rateTranscribedAudio",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"transcription_id",type:"long"},{name:"good",type:"Bool"}],type:"Bool"},{id:-2131921795,method:"payments.assignAppStoreTransaction",params:[{name:"receipt",type:"bytes"},{name:"purpose",type:"InputStorePaymentPurpose"}],type:"Updates"},{id:-537046829,method:"payments.assignPlayMarketTransaction",params:[{name:"receipt",type:"DataJSON"},{name:"purpose",type:"InputStorePaymentPurpose"}],type:"Updates"},{id:-1614700874,method:"payments.canPurchasePremium",params:[{name:"purpose",type:"InputStorePaymentPurpose"}],type:"Bool"},{id:-1206152236,method:"help.getPremiumPromo",params:[],type:"help.PremiumPromo"},{id:-643100844,method:"messages.getCustomEmojiDocuments",params:[{name:"document_id",type:"Vector"}],type:"Vector"},{id:-67329649,method:"messages.getEmojiStickers",params:[{name:"hash",type:"long"}],type:"messages.AllStickers"},{id:248473398,method:"messages.getFeaturedEmojiStickers",params:[{name:"hash",type:"long"}],type:"messages.FeaturedStickers"},{id:-70001045,method:"account.updateEmojiStatus",params:[{name:"emoji_status",type:"EmojiStatus"}],type:"Bool"},{id:-696962170,method:"account.getDefaultEmojiStatuses",params:[{name:"hash",type:"long"}],type:"account.EmojiStatuses"},{id:257392901,method:"account.getRecentEmojiStatuses",params:[{name:"hash",type:"long"}],type:"account.EmojiStatuses"},{id:404757166,method:"account.clearRecentEmojiStatuses",params:[],type:"Bool"},{id:1063567478,method:"messages.reportReaction",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"int"},{name:"reaction_peer",type:"InputPeer"}],type:"Bool"},{id:-1149164102,method:"messages.getTopReactions",params:[{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Reactions"},{id:960896434,method:"messages.getRecentReactions",params:[{name:"limit",type:"int"},{name:"hash",type:"long"}],type:"messages.Reactions"},{id:-1644236876,method:"messages.clearRecentReactions",params:[],type:"Bool"},{id:-2064119788,method:"messages.getExtendedMedia",params:[{name:"peer",type:"InputPeer"},{name:"id",type:"Vector"}],type:"Updates"},{id:767062953,method:"auth.importWebTokenAuthorization",params:[{name:"api_id",type:"int"},{name:"api_hash",type:"string"},{name:"web_auth_token",type:"string"}],type:"auth.Authorization"},{id:-279966037,method:"account.reorderUsernames",params:[{name:"order",type:"Vector"}],type:"Bool"},{id:1490465654,method:"account.toggleUsername",params:[{name:"username",type:"string"},{name:"active",type:"Bool"}],type:"Bool"},{id:-1268978403,method:"channels.reorderUsernames",params:[{name:"channel",type:"InputChannel"},{name:"order",type:"Vector"}],type:"Bool"},{id:1358053637,method:"channels.toggleUsername",params:[{name:"channel",type:"InputChannel"},{name:"username",type:"string"},{name:"active",type:"Bool"}],type:"Bool"},{id:170155475,method:"channels.deactivateAllUsernames",params:[{name:"channel",type:"InputChannel"}],type:"Bool"},{id:-1540781271,method:"channels.toggleForum",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-200539612,method:"channels.createForumTopic",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"title",type:"string"},{name:"icon_color",type:"flags.0?int"},{name:"icon_emoji_id",type:"flags.3?long"},{name:"random_id",type:"long"},{name:"send_as",type:"flags.2?InputPeer"}],type:"Updates"},{id:233136337,method:"channels.getForumTopics",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"q",type:"flags.0?string"},{name:"offset_date",type:"int"},{name:"offset_id",type:"int"},{name:"offset_topic",type:"int"},{name:"limit",type:"int"}],type:"messages.ForumTopics"},{id:-1333584199,method:"channels.getForumTopicsByID",params:[{name:"channel",type:"InputChannel"},{name:"topics",type:"Vector"}],type:"messages.ForumTopics"},{id:-186670715,method:"channels.editForumTopic",params:[{name:"flags",type:"#"},{name:"channel",type:"InputChannel"},{name:"topic_id",type:"int"},{name:"title",type:"flags.0?string"},{name:"icon_emoji_id",type:"flags.1?long"},{name:"closed",type:"flags.2?Bool"},{name:"hidden",type:"flags.3?Bool"}],type:"Updates"},{id:1814925350,method:"channels.updatePinnedForumTopic",params:[{name:"channel",type:"InputChannel"},{name:"topic_id",type:"int"},{name:"pinned",type:"Bool"}],type:"Updates"},{id:876830509,method:"channels.deleteTopicHistory",params:[{name:"channel",type:"InputChannel"},{name:"top_msg_id",type:"int"}],type:"messages.AffectedHistory"},{id:693150095,method:"channels.reorderPinnedForumTopics",params:[{name:"flags",type:"#"},{name:"force",type:"flags.0?true"},{name:"channel",type:"InputChannel"},{name:"order",type:"Vector"}],type:"Updates"},{id:1760814315,method:"channels.toggleAntiSpam",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-1471109485,method:"channels.reportAntiSpamFalsePositive",params:[{name:"channel",type:"InputChannel"},{name:"msg_id",type:"int"}],type:"Bool"},{id:-1632299963,method:"messages.setDefaultHistoryTTL",params:[{name:"period",type:"int"}],type:"Bool"},{id:1703637384,method:"messages.getDefaultHistoryTTL",params:[],type:"DefaultHistoryTTL"},{id:-127582169,method:"contacts.exportContactToken",params:[],type:"ExportedContactToken"},{id:318789512,method:"contacts.importContactToken",params:[{name:"token",type:"string"}],type:"User"},{id:-515093903,method:"photos.uploadContactProfilePhoto",params:[{name:"flags",type:"#"},{name:"suggest",type:"flags.3?true"},{name:"save",type:"flags.4?true"},{name:"user_id",type:"InputUser"},{name:"file",type:"flags.0?InputFile"},{name:"video",type:"flags.1?InputFile"},{name:"video_start_ts",type:"flags.2?double"},{name:"video_emoji_markup",type:"flags.5?VideoSize"}],type:"photos.Photo"},{id:1785624660,method:"channels.toggleParticipantsHidden",params:[{name:"channel",type:"InputChannel"},{name:"enabled",type:"Bool"}],type:"Updates"},{id:-29831141,method:"messages.sendBotRequestedPeer",params:[{name:"peer",type:"InputPeer"},{name:"msg_id",type:"int"},{name:"button_id",type:"int"},{name:"requested_peer",type:"InputPeer"}],type:"Updates"},{id:-495647960,method:"account.getDefaultProfilePhotoEmojis",params:[{name:"hash",type:"long"}],type:"EmojiList"},{id:-1856479058,method:"account.getDefaultGroupPhotoEmojis",params:[{name:"hash",type:"long"}],type:"EmojiList"},{id:-1991881904,method:"auth.requestFirebaseSms",params:[{name:"flags",type:"#"},{name:"phone_number",type:"string"},{name:"phone_code_hash",type:"string"},{name:"safety_net_token",type:"flags.0?string"},{name:"ios_push_secret",type:"flags.1?string"}],type:"Bool"},{id:1955122779,method:"messages.getEmojiGroups",params:[{name:"hash",type:"int"}],type:"messages.EmojiGroups"},{id:785209037,method:"messages.getEmojiStatusGroups",params:[{name:"hash",type:"int"}],type:"messages.EmojiGroups"},{id:564480243,method:"messages.getEmojiProfilePhotoGroups",params:[{name:"hash",type:"int"}],type:"messages.EmojiGroups"},{id:739360983,method:"messages.searchCustomEmoji",params:[{name:"emoticon",type:"string"},{name:"hash",type:"long"}],type:"EmojiList"},{id:-461589127,method:"messages.togglePeerTranslations",params:[{name:"flags",type:"#"},{name:"disabled",type:"flags.0?true"},{name:"peer",type:"InputPeer"}],type:"Bool"},{id:-1379156774,method:"account.getAutoSaveSettings",params:[],type:"account.AutoSaveSettings"},{id:-694451359,method:"account.saveAutoSaveSettings",params:[{name:"flags",type:"#"},{name:"users",type:"flags.0?true"},{name:"chats",type:"flags.1?true"},{name:"broadcasts",type:"flags.2?true"},{name:"peer",type:"flags.3?InputPeer"},{name:"settings",type:"AutoSaveSettings"}],type:"Bool"},{id:1404829728,method:"account.deleteAutoSaveExceptions",params:[],type:"Bool"}]},layer:152};var as=a(745),ss=a.n(as),ns=a(4736),is=a.n(ns);function rs(e){return e>>>0}function os(e,t){return e=rs(e),t=rs(t),is()(e).shiftLeft(32).add(is()(t))}const ps=is()(Number.MAX_SAFE_INTEGER),ds=is()(is()[2]).pow(64),fs=ds.divide(is()[2]);function cs(e,t=256){return is().fromArray(e instanceof Uint8Array?[...e]:e,t)}const ls=+ts.API.constructors.find((e=>"boolFalse"===e.predicate)).id,ms=+ts.API.constructors.find((e=>"boolTrue"===e.predicate)).id,gs=+ts.API.constructors.find((e=>"vector"===e.predicate)).id,hs=+ts.MTProto.constructors.find((e=>"gzip_packed"===e.predicate)).id,us="slice";class ys{constructor(e={}){this.maxLength=2048,this.offset=0,this.mtproto=!1,this.debug=!1,this.maxLength=e.startMaxLength||2048,this.mtproto=e.mtproto||!1,this.createBuffer()}createBuffer(){this.buffer=new ArrayBuffer(this.maxLength),this.intView=new Int32Array(this.buffer),this.byteView=new Uint8Array(this.buffer)}getArray(){const e=new ArrayBuffer(this.offset),t=new Int32Array(e);return t.set(this.intView.subarray(0,this.offset/4)),t}getBuffer(){return this.getArray().buffer}getBytes(e=!0){if(e){const e=new ArrayBuffer(this.offset),t=new Uint8Array(e);return t.set(this.byteView.subarray(0,this.offset)),t}const t=new Array(this.offset);for(let e=0;e>>",e.toString(16),e,t);const a=this.offset/4;return this.checkLength(4),this.intView[a]=e,this.offset+=4,a}storeInt(e,t){return this.writeInt(e,(t||"")+":int")}storeBool(e,t){e?this.writeInt(ms,(t||"")+":bool"):this.writeInt(ls,(t||"")+":bool")}storeLongP(e,t,a){this.writeInt(t,(a||"")+":long[low]"),this.writeInt(e,(a||"")+":long[high]")}storeLong(e,t){if(Array.isArray(e))return 2===e.length?this.storeLongP(e[0],e[1],t):this.storeIntBytes(e,64,t);const a=(s=is()(e)).isNegative()?ds.add(s):s;var s;const{quotient:n,remainder:i}=a.divmod(4294967296),r=n.toJSNumber(),o=i.toJSNumber();this.writeInt(o,(t||"")+":long[low]"),this.writeInt(r,(t||"")+":long[high]")}storeDouble(e,t){const a=new ArrayBuffer(8),s=new Int32Array(a);new Float64Array(a)[0]=e,this.writeInt(s[0],(t||"")+":double[low]"),this.writeInt(s[1],(t||"")+":double[high]")}storeString(e,t){this.debug&&console.log(">>>",e,(t||"")+":string"),void 0===e&&(e="");const a=unescape(encodeURIComponent(e));this.checkLength(a.length+8);const s=a.length;s<=253?this.byteView[this.offset++]=s:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&s,this.byteView[this.offset++]=(65280&s)>>8,this.byteView[this.offset++]=(16711680&s)>>16);for(let e=0;e>>",E(e),(t||"")+":bytes");const a=e.length;for(this.checkLength(a+8),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),this.byteView.set(e,this.offset),this.offset+=a;this.offset%4;)this.byteView[this.offset++]=0}storeIntBytes(e,t,a){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const s=e.length;if(t%32||8*s!==t){const n=new Error("Invalid bits: "+t+", "+s);throw console.error(n,e,a),n}this.debug&&console.log(">>>",E(e),(a||"")+":int"+t),this.checkLength(s),this.byteView.set(e,this.offset),this.offset+=s}storeRawBytes(e,t){e instanceof ArrayBuffer&&(e=new Uint8Array(e));const a=e.length;this.debug&&console.log(">>>",E(e),t||""),this.checkLength(a),this.byteView.set(e,this.offset),this.offset+=a}storeMethod(e,t){const a=(this.mtproto?ts.MTProto:ts.API).methods.find((t=>t.method===e));if(!a)throw new Error("No method "+e+" found");this.storeInt(a.id,e+"[id]");const s=t.pFlags||t,n={};for(const i of a.params){let a=i.type;if(-1!==a.indexOf("?")){const e=a.split("?"),n=e[0].split(".");if(!(t[n[0]]&1<<+n[1])){if(!("true"===e[1]?s[i.name]:void 0!==t[i.name]))continue;t[n[0]]|=1<<+n[1]}a=e[1]}const r=this.storeObject(t[i.name],a,e+"["+i.name+"]");"#"===a&&(t[i.name]=t[i.name]||0,n[i.name]=r)}for(const e in n)this.intView[n[e]]=t[e];return a.type}storeObject(e,t,a){switch(t){case"#":e=e||0;case"int":return this.storeInt(e,a);case"long":return this.storeLong(e,a);case"int128":return this.storeIntBytes(e,128,a);case"int256":return this.storeIntBytes(e,256,a);case"int512":return this.storeIntBytes(e,512,a);case"string":return this.storeString(e,a);case"bytes":return this.storeBytes(e,a);case"double":return this.storeDouble(e,a);case"Bool":return this.storeBool(e,a);case"true":return}if(Array.isArray(e)){if("Vector"===t.substr(0,6))this.writeInt(gs,a+"[id]");else if("vector"!==t.substr(0,6))throw new Error("Invalid vector type "+t);const s=t.substr(7,t.length-8);this.writeInt(e.length,a+"[count]");for(let t=0;te.predicate===n));if((i="%"===t.charAt(0))&&(t=t.substr(1)),!r)throw new Error("No predicate "+n+" found");n===t&&(i=!0),i||this.writeInt(r.id,a+"["+n+"][id]");const o=e.pFlags,p={};for(const t of r.params){let s=t.type;if(-1!==s.indexOf("?")){const a=s.split("?"),n=a[0].split(".");if(!(e[n[0]]&1<<+n[1])){if(!("true"===a[1]?o&&o[t.name]:void 0!==e[t.name]))continue;e[n[0]]|=1<<+n[1]}s=a[1]}const i=this.storeObject(e[t.name],s,a+"["+n+"]["+t.name+"]");"#"===s&&(e[t.name]=e[t.name]||0,p[t.name]=i)}for(const t in p)this.intView[p[t]]=e[t];return r.type}}class _s{constructor(e,t={}){this.offset=0,this.mtproto=!1,e instanceof ArrayBuffer?(this.buffer=e,this.intView=new Int32Array(e),this.byteView=new Uint8Array(this.buffer)):(this.buffer=e.buffer,this.intView=new Int32Array(e.buffer),this.byteView=e),this.override=t.override||{},this.mtproto=!!t.mtproto,this.debug=void 0!==t.debug&&t.debug}readInt(e){if(this.byteView.length-this.offset<4)throw console.error(this.byteView,this.offset),new Error("Nothing to fetch: "+e);const t=this.intView[this.offset/4];return this.debug&&console.log("<<<",t.toString(16),t,e,this.byteView.slice(this.offset-16,this.offset+16),E(this.byteView.slice(this.offset-16,this.offset+16))),this.offset+=4,t}fetchInt(e){return this.readInt((e||"")+":int")}fetchDouble(e){const t=new ArrayBuffer(8),a=new Int32Array(t),s=new Float64Array(t);return a[0]=this.readInt((e||"")+":double[low]"),a[1]=this.readInt((e||"")+":double[high]"),s[0]}fetchLong(e){const t=this.readInt((e||"")+":long[low]");let a=os(this.readInt((e||"")+":long[high]"),t);var s;return this.mtproto||(a=(s=a).greater(fs)?s.minus(ds):s),!this.mtproto&&ps.greaterOrEquals(a.abs())?a.toJSNumber():a.toString(10)}fetchBool(e){const t=this.readInt((e||"")+":bool");return t===ms||t!==ls&&(this.offset-=4,this.fetchObject("Object",e))}fetchString(e){let t=this.byteView[this.offset++];254===t&&(t=this.byteView[this.offset++]|this.byteView[this.offset++]<<8|this.byteView[this.offset++]<<16);let a,s="";for(let e=0;ethis.byteView.byteLength)throw new Error("Invalid raw bytes length: "+e+", buffer len: "+this.byteView.byteLength);if(t){const t=new Uint8Array(e);return t.set(this.byteView[us](this.offset,this.offset+e)),this.offset+=e,t}const s=new Array(e);for(let t=0;t0){const n=e.substr(7,e.length-8);for(let e=0;ee.type===t)),!s)throw new Error("Constructor not found for type: "+e)}else{const r=this.readInt(t+"[id]");if(r===hs){const a=(i=this.fetchBytes(t+"[packed_string]"),ss().inflate(i,void 0));return new _s(a).fetchObject(e,t)}if(r===gs)return this.fetchVector(e,t);let o=a.constructorsIndex;if(!o){a.constructorsIndex=o={};for(let e=0,t=a.constructors.length;e0&&r{var e;if(this.pingDelayDisconnectDeferred||!this.transport||!this.transport.connected)return;const t=this.pingDelayDisconnectDeferred=(0,v.Z)(),a=this.delays,s=this.delays.pingMaxTime,n=Math.min(null!==(e=this.lastPingTime)&&void 0!==e?e:0,s),i=Math.round(a.disconnectDelayMin+n/s*(a.disconnectDelayMax-a.disconnectDelayMin)),r=1e3*i,o=this.lastPingStartTime=Date.now(),p=this.lastPingDelayDisconnectId=(0,Ee.a)(),d={notContentRelated:!0};this.wrapMtpCall("ping_delay_disconnect",{ping_id:p,disconnect_delay:i},d);const f=this.log.bindPrefix("sendPingDelayDisconnect");this.debug&&f.debug(`ping, timeout=${r}, lastPingTime=${this.lastPingTime}, msgId=${d.messageId}, pingId=${p}`);const c=T.Z.setTimeout(t.reject,r);t.then((e=>{clearTimeout(c);const t=Date.now()-o;if(this.lastPingTime=t/1e3,this.debug&&f.debug(`pong, reason='${e}', time=${n}, msgId=${d.messageId}`),t>r)throw void 0;return(0,P.Z)(Math.max(0,this.delays.pingInterval-t))})).catch((()=>{clearTimeout(c);const e=this.transport;this.pingDelayDisconnectDeferred===t&&(null==e?void 0:e.connection)&&(f.error("catch, closing connection",this.lastPingTime,d.messageId),e.connection.close())})).finally((()=>{this.pingDelayDisconnectDeferred===t&&(this.pingDelayDisconnectDeferred=void 0,this.sendPingDelayDisconnect())}))},this.checkLongPoll=()=>{const e=this.cleanupSent();if(this.longPollPending&&Date.now(){e&&(t!==this.dcId||this.sleepAfter&&Date.now()>this.sleepAfter)||this.sendLongPoll()}))},this.checkConnection=e=>{if(this.debug&&this.log("Check connection",e),this.clearCheckConnectionTimeout(),!this.transport)return void this.log.warn("No transport for checkConnection");const t=new ys({mtproto:!0}),a=(0,Ee.a)();t.storeMethod("ping",{ping_id:a});const s={msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(!0),body:t.getBytes(!0)};this.offline&&this.setConnectionStatus(D.Q.Connecting),this.sendEncryptedRequest(s).then((()=>{this.toggleOffline(!1)}),(()=>{this.debug&&this.log("Delay",1e3*this.checkConnectionPeriod),this.checkConnectionTimeout=T.Z.setTimeout((()=>this.checkConnection("from failed checkConnection request")),1e3*this.checkConnectionPeriod|0),this.checkConnectionPeriod=Math.min(60,1.5*this.checkConnectionPeriod)}))},this.authKeyUint8=(0,Ms.Z)(this.authKey),this.serverSalt=(0,Ms.Z)(i),this.isFileUpload=!!r.fileUpload,this.isFileDownload=!!r.fileDownload,this.isFileNetworker=this.isFileUpload||this.isFileDownload,this.delays=this.isFileNetworker?Is.file:Is.client;const o=this.isFileUpload?"-U":this.isFileDownload?"-D":"";this.name="NET-"+a+o,this.log=(0,S.kg)(this.name+(o?"":"-C")+"-"+ks++,S.v9.Log|S.v9.Error|S.v9.Warn),this.log("constructor"),this.updateSession()}updateSession(){this.seqNo=0,this.prevSessionId=this.sessionId,this.sessionId=w(new Uint8Array(8))}updateSentMessage(e){const t=this.sentMessages[e];return!!t&&(t.container&&(0,ne.Z)(t.inner,((e,a)=>{const s=this.updateSentMessage(e);s?t.inner[a]=s.msg_id:t.inner.splice(a,1)})),t.msg_id=this.timeManager.generateId(),t.seq_no=this.generateSeqNo(t.notContentRelated||t.container),this.debug&&this.log(`updateSentMessage, old=${e}, new=${t.msg_id}`),this.sentMessages[t.msg_id]=t,delete this.sentMessages[e],t)}generateSeqNo(e){let t=2*this.seqNo;return e||(t++,this.seqNo++),t}wrapMtpCall(e,t,a){const s=new ys({mtproto:!0});s.storeMethod(e,t);const n=this.timeManager.generateId(),i=this.generateSeqNo(),r={msg_id:n,seq_no:i,body:s.getBytes(!0)};return b.Z.debug&&this.log("MT call",e,t,n,i),this.pushMessage(r,a)}wrapMtpMessage(e,t){const a=new ys({mtproto:!0});a.storeObject(e,"Object");const s=this.timeManager.generateId(),n=this.generateSeqNo(t.notContentRelated),i={msg_id:s,seq_no:n,body:a.getBytes(!0)};return b.Z.debug&&this.log("MT message",e,s,n),this.pushMessage(i,t)}wrapApiCall(e,t={},a={}){const s=new ys(a);if(!this.connectionInited){const e=ts.API.methods.find((e=>"invokeWithLayer"===e.method));if(!e)throw new Error("no invokeWithLayer!");s.storeInt(+e.id,"invokeWithLayer"),s.storeInt(ts.layer,"layer");const t=ts.API.methods.find((e=>"initConnection"===e.method));if(!t)throw new Error("no initConnection!");s.storeInt(+t.id,"initConnection"),s.storeInt(0,"flags"),s.storeInt(_.Z.id,"api_id"),s.storeString(i().USER_AGENT||"Unknown UserAgent","device_model"),s.storeString(navigator.platform||"Unknown Platform","system_version"),s.storeString(_.Z.version+(_.Z.isMainDomain?" "+_.Z.suffix:""),"app_version"),s.storeString(navigator.language||"en","system_lang_code"),s.storeString(_.Z.langPack,"lang_pack"),s.storeString(this.networkerFactory.language,"lang_code")}if(a.afterMessageId){if(void 0===ws){const e=ts.API.methods.find((e=>"invokeAfterMsg"===e.method));ws=e?+e.id:0}ws?(s.storeInt(ws,"invokeAfterMsg"),s.storeLong(a.afterMessageId,"msg_id")):this.log.error("no invokeAfterMsg!")}a.resultType=s.storeMethod(e,t);const n={msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(),body:s.getBytes(!0),isAPI:!0};return b.Z.debug?this.log("Api call",e,n,t,a):this.debug&&this.log("Api call",e,t,a),this.pushMessage(n,a)}changeTransport(e){const t=this.transport;t&&(t.destroy(),this.nextReqTimeout&&(clearTimeout(this.nextReqTimeout),this.nextReqTimeout=0,this.nextReq=0),this.connectionInited=!1,void 0!==this.longPollInterval&&(clearInterval(this.longPollInterval),this.longPollInterval=void 0),this.clearCheckConnectionTimeout()),this.log("change transport",e,t),this.clearPingDelayDisconnect(),this.transport=e,e&&(e.networker=this,e instanceof I&&(this.longPollInterval=T.Z.setInterval(this.checkLongPoll,1e4),this.checkLongPoll(),this.checkConnection("changed transport")),e.connection&&e.connected&&this.setConnectionStatus(D.Q.Connected),this.resend())}destroy(){this.log("destroy")}forceReconnectTimeout(){this.transport.reconnect?this.transport.reconnect():this.resend()}forceReconnect(){this.transport.forceReconnect?this.transport.forceReconnect():this.checkConnection("force reconnect")}clearPingDelayDisconnect(){const e=this.pingDelayDisconnectDeferred;this.pingDelayDisconnectDeferred=void 0,this.lastPingDelayDisconnectId=void 0,e&&e.reject()}sendLongPoll(){this.sendingLongPoll||(this.sendingLongPoll=!0,this.longPollPending=Date.now()+25e3,this.debug&&this.log.debug("sendLongPoll",this.longPollPending),this.wrapMtpCall("http_wait",{max_delay:500,wait_after:150,max_wait:25e3},{noResponse:!0,longPoll:!0}).then((()=>{this.longPollPending=void 0,setTimeout(this.checkLongPoll,0)}),(e=>{this.log("Long-poll failed",e)})).finally((()=>{this.sendingLongPoll=void 0})))}clearCheckConnectionTimeout(){void 0!==this.checkConnectionTimeout&&(clearTimeout(this.checkConnectionTimeout),this.checkConnectionTimeout=void 0)}toggleOffline(e){if(this.offline!==e)if(this.offline=e,this.clearCheckConnectionTimeout(),e){clearTimeout(this.nextReqTimeout),this.nextReqTimeout=0,this.nextReq=0,this.checkConnectionPeriod<1.5&&(this.checkConnectionPeriod=0);const e=1e3*this.checkConnectionPeriod|0;this.checkConnectionRetryAt=Date.now()+e,this.setConnectionStatus(D.Q.Closed,this.checkConnectionRetryAt),this.checkConnectionTimeout=T.Z.setTimeout((()=>this.checkConnection("from toggleOfline")),e),this.checkConnectionPeriod=Math.min(30,1.5*(1+this.checkConnectionPeriod))}else this.setConnectionStatus(D.Q.Connected),this.checkLongPoll(),this.scheduleRequest();this.setConnectionStatus(e?D.Q.Closed:D.Q.Connected,e?this.checkConnectionRetryAt:void 0)}handleSentEncryptedRequestHTTP(e,t,a){e.then((e=>(this.toggleOffline(!1),this.parseResponse(e).then((e=>(this.debug&&this.log.debug("Server response",e),this.processMessage(e.response,e.messageId,e.sessionId),this.checkLongPoll(),this.checkConnectionPeriod=Math.max(1.1,Math.sqrt(this.checkConnectionPeriod)),!0))))),(e=>(this.log.error("Encrypted request failed",e,t),this.pushResend(t.msg_id),this.toggleOffline(!0),!1))).then((e=>{const t=this.sentMessages;a.forEach((a=>{const s=t[a];if(s){const n=s.deferred;delete t[a],delete this.pendingMessages[a],e?n.resolve():n.reject()}}))}))}pushMessage(e,t){let a;return t.notContentRelated&&!t.noResponse||(a=(0,v.Z)()),this.sentMessages[e.msg_id]=Object.assign(e,t,a?{deferred:a}:void 0),this.pendingMessages[e.msg_id]=0,t.noSchedule||this.scheduleRequest(),(0,fe.Z)(t)&&(t.messageId=e.msg_id),a}attachPromise(e,t){const a=setTimeout((()=>{this.lastResponseTime&&Date.now()-this.lastResponseTime{clearTimeout(a),this.setConnectionStatus(D.Q.Connected),--this.activeRequests,this.setDrainTimeout()})),++this.activeRequests,void 0!==this.onDrainTimeout&&(clearTimeout(this.onDrainTimeout),this.onDrainTimeout=void 0)}setDrainTimeout(){!this.activeRequests&&this.onDrain&&void 0===this.onDrainTimeout&&(this.onDrainTimeout=T.Z.setTimeout((()=>{this.onDrainTimeout=void 0,this.log("drain"),this.onDrain()}),1e4))}setConnectionStatus(e,t){var a;const s=e===D.Q.Connected,n=this.status!==e;this.isOnline=s,this.status=e,n&&(this.networkerFactory.onConnectionStatusChange&&this.networkerFactory.onConnectionStatusChange({_:"networkerStatus",status:e,dcId:this.dcId,name:this.name,isFileNetworker:this.isFileNetworker,isFileDownload:this.isFileDownload,isFileUpload:this.isFileUpload,retryAt:t}),this.isOnline&&this.scheduleRequest(),(null===(a=this.transport)||void 0===a?void 0:a.connection)&&(this.clearPingDelayDisconnect(),this.sendPingDelayDisconnect()))}pushResend(e,t=100){const a=t?Date.now()+t:0,s=this.sentMessages[e];if(s.container)for(const e of s.inner)this.pendingMessages[e]=a;else this.pendingMessages[e]=a;s.acked&&this.log.error("pushResend: acked message?",s),this.debug&&this.log.debug("pushResend:",e,s,this.pendingMessages,t),this.scheduleRequest(t)}getMsgKey(e,t){return Ss(this,void 0,void 0,(function*(){const a=t?0:8,n=(0,vs.Z)(this.authKeyUint8.subarray(88+a,88+a+32),e),i=yield s.Z.invokeCrypto("sha256",n);return new Uint8Array(i).subarray(8,24)}))}getAesKeyIv(e,t){const a=t?0:8,n=new Uint8Array(52),i=new Uint8Array(52),r=[];return n.set(e,0),n.set(this.authKeyUint8.subarray(a,a+36),16),r.push(s.Z.invokeCrypto("sha256",n)),i.set(this.authKeyUint8.subarray(40+a,40+a+36),0),i.set(e,36),r.push(s.Z.invokeCrypto("sha256",i)),Promise.all(r).then((e=>{const t=new Uint8Array(32),a=new Uint8Array(32),s=new Uint8Array(e[0]),n=new Uint8Array(e[1]);return t.set(s.subarray(0,8)),t.set(n.subarray(8,24),8),t.set(s.subarray(24,32),24),a.set(n.subarray(0,8)),a.set(s.subarray(8,24),8),a.set(n.subarray(24,32),24),[t,a]}))}isStopped(){return this.networkerFactory.akStopped&&!this.isFileNetworker}performScheduledRequest(){if(this.isStopped())return!1;if(this.pendingAcks.length){const e=this.pendingAcks.slice();this.wrapMtpMessage({_:"msgs_ack",msg_ids:e},{notContentRelated:!0,noSchedule:!0})}const e=this.pendingResendReq.length;if(e){const t=Object.assign({},Cs),a=this.pendingResendReq.splice(0,e);this.wrapMtpMessage({_:"msg_resend_req",msg_ids:a},t),this.log("resend: resending requests",t.messageId,a)}let t;const a=[];let s=0,n=!1,i=!1,r=!1;const o=Object.keys(this.pendingMessages).map((e=>is()(e))).sort(((e,t)=>e.compare(t))).map((e=>e.toString(10)));for(const e of o){const o=this.sentMessages[e];if(o&&o.body){const e=o.body.length+32;if(s+e>655360&&(this.log.warn("lengthOverflow",o,a),r=!0,t))break;a.push(o),s+=e,o.isAPI?n=!0:o.longPoll&&(i=!0),t=o}delete this.pendingMessages[e]}if(this.transport instanceof I&&n&&!i){const e=new ys({mtproto:!0});e.storeMethod("http_wait",{max_delay:500,wait_after:150,max_wait:3e3}),a.push({msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(),body:e.getBytes(!0)})}if(!a.length)return;const p=a.filter((e=>e.noResponse)).map((e=>e.msg_id));if(a.length>1){const e=this.generateContainerMessage(s,a);t=e.messageWithBody,this.sentMessages[t.msg_id]=e.message}else this.sentMessages[t.msg_id]=t;this.pendingAcks=[];const d=this.sendEncryptedRequest(t);this.transport instanceof I&&this.handleSentEncryptedRequestHTTP(d,t,p),this.transport instanceof I||this.cleanupSent(),r&&this.scheduleRequest()}generateContainerMessage(e,t){const a=new ys({mtproto:!0,startMaxLength:e+64});a.storeInt(1945237724,"CONTAINER[id]"),a.storeInt(t.length,"CONTAINER[count]");const s=[];t.forEach(((e,t)=>{s.push(e.msg_id),a.storeLong(e.msg_id,"CONTAINER["+t+"][msg_id]"),a.storeInt(e.seq_no,"CONTAINER["+t+"][seq_no]"),a.storeInt(e.body.length,"CONTAINER["+t+"][bytes]"),a.storeRawBytes(e.body,"CONTAINER["+t+"][body]")}));const n={msg_id:this.timeManager.generateId(),seq_no:this.generateSeqNo(!0),container:!0,inner:s};return b.Z.debug&&this.log.warn("Container",s,n.msg_id,n.seq_no),{message:n,messageWithBody:Object.assign({body:a.getBytes(!0)},n)}}getEncryptedMessage(e){return Ss(this,void 0,void 0,(function*(){const t=yield this.getMsgKey(e,!0),a=yield this.getAesKeyIv(t,!0);return{bytes:yield s.Z.invokeCrypto("aes-encrypt",e,a[0],a[1]),msgKey:t}}))}getDecryptedMessage(e,t){return this.getAesKeyIv(e,!1).then((e=>s.Z.invokeCrypto("aes-decrypt",t,e[0],e[1])))}getEncryptedOutput(e){const t=new ys({startMaxLength:e.body.length+2048});t.storeIntBytes(this.serverSalt,64,"salt"),t.storeIntBytes(this.sessionId,64,"session_id"),t.storeLong(e.msg_id,"message_id"),t.storeInt(e.seq_no,"seq_no"),t.storeInt(e.body.length,"message_data_length"),t.storeRawBytes(e.body,"message_data");const a=t.getBuffer(),s=16-t.getOffset()%16+16*(1+(0,Ee.d)(8)%5),n=w(new Uint8Array(s)),i=(0,vs.Z)(a,n);return this.getEncryptedMessage(i).then((e=>{const t=new ys({startMaxLength:e.bytes.length+256});return t.storeIntBytes(this.authKeyId,64,"auth_key_id"),t.storeIntBytes(e.msgKey,128,"msg_key"),t.storeRawBytes(e.bytes,"encrypted_data"),t.getBytes(!0)}))}sendEncryptedRequest(e){return Ss(this,void 0,void 0,(function*(){const t=yield this.getEncryptedOutput(e);this.transport||this.log.error("trying to send something when offline",this.transport,this),this.debug&&this.log.debug("sending:",e,[e.msg_id].concat(e.inner||[]),t.length);const a=this.transport?this.transport.send(t):Promise.reject({});if(!(this.transport instanceof I))return a;const s={code:406,type:"NETWORK_BAD_RESPONSE",transport:this.transport};return a.then((e=>{if(!(null==e?void 0:e.byteLength))throw s;return e}),(e=>{throw e.message||e.type||(e=Object.assign(s,{type:"NETWORK_BAD_REQUEST",originalError:e})),e}))}))}parseResponse(e){this.lastResponseTime=Date.now();const t=new _s(e),a=t.fetchIntBytes(64,!0,"auth_key_id");if(!(0,bs.Z)(a,this.authKeyId))throw new Error("[MT] Invalid server auth_key_id: "+E(a));const s=t.fetchIntBytes(128,!0,"msg_key"),n=t.fetchRawBytes(e.byteLength-t.getOffset(),!0,"encrypted_data");return this.getDecryptedMessage(s,n).then((e=>this.getMsgKey(e,!1).then((t=>{if(!(0,bs.Z)(s,t))throw this.log.warn("[MT] msg_keys",s,t),this.updateSession(),new Error("[MT] server msgKey mismatch, updating session");let a=new _s(e,{mtproto:!0});a.fetchIntBytes(64,!0,"salt");const n=a.fetchIntBytes(64,!0,"session_id"),i=a.fetchLong("message_id");if(!((0,bs.Z)(n,this.sessionId)||this.prevSessionId&&(0,bs.Z)(n,this.prevSessionId)))throw this.log.warn("Sessions",n,this.sessionId,this.prevSessionId,e),new Error("[MT] Invalid server session_id: "+E(n));const r=a.fetchInt("seq_no"),o=e.byteLength,p=a.fetchInt("message_data[length]");let d=a.getOffset();if(p%4||p>o-d)throw new Error("[MT] Invalid body length: "+p);const f=a.fetchRawBytes(p,!0,"message_data");d=a.getOffset();const c=o-d;if(c<12||c>1024)throw new Error("[MT] Invalid padding length: "+c);return a=new _s(f,{mtproto:!0,override:{mt_message:(e,t)=>{e.msg_id=a.fetchLong(t+"[msg_id]"),e.seqno=a.fetchInt(t+"[seqno]"),e.bytes=a.fetchInt(t+"[bytes]");const s=a.getOffset();try{e.body=a.fetchObject("Object",t+"[body]")}catch(t){this.log.error("parse error",t.message,t.stack),e.body={_:"parse_error",error:t}}a.getOffset()!==s+e.bytes&&a.setOffset(s+e.bytes)},mt_rpc_result:(e,t)=>{e.req_msg_id=a.fetchLong(t+"[req_msg_id]");const s=this.sentMessages[e.req_msg_id],n=s&&s.resultType||"Object";e.req_msg_id&&!s||(e.result=a.fetchObject(n,t+"[result]"))}}}),{response:a.fetchObject("","INPUT"),messageId:i,sessionId:n,seqNo:r}}))))}applyServerSalt(e){const t=(a=e,Ps((s=is()(a),new Uint8Array(s.toArray(256).value)).reverse(),8,!0,!1,!1));var a,s;Ga.Z.set({["dc"+this.dcId+"_server_salt"]:E(t)}),this.serverSalt=new Uint8Array(t)}scheduleRequest(e){this.transport instanceof I&&(this.offline&&this.checkConnection("forced schedule"),e||(e=0));const t=Date.now()+(e||0);if(this.nextReq&&(void 0===e||this.nextReq<=t))return;this.nextReqTimeout&&clearTimeout(this.nextReqTimeout);const a=()=>{this.nextReqTimeout=0,this.nextReq=0,this.transport instanceof I&&this.offline||this.performScheduledRequest()};this.nextReq=t,void 0!==e?this.nextReqTimeout=T.Z.setTimeout(a,e):a()}ackMessage(e){let t;this.pendingAcks.push(e),this.transport instanceof I&&(t=3e4),this.scheduleRequest(t)}reqResend(e){this.debug&&this.log.debug("Req resend",e),this.pendingResendReq.push(e),this.scheduleRequest(100)}cleanupSent(){let e=!1;const t=this.sentMessages;return Object.keys(t).forEach((a=>{const s=t[a];if(s.notContentRelated&&void 0===this.pendingMessages[a])delete t[a];else if(s.container){for(const a of s.inner)if(void 0!==t[a])return void(e=!0);delete t[a]}else e=!0})),!e}processMessageAck(e){const t=this.sentMessages[e];t&&!t.acked&&(t.acked=!0)}processError(e){const t=(e.error_message||"").match(/^([A-Z_0-9]+\b)(: (.+))?/)||[];return e.error_code=e.error_code,{code:!e.error_code||e.error_code<=0?500:e.error_code,type:t[1]||"UNKNOWN",description:t[3]||"CODE#"+e.error_code+" "+e.error_message,originalError:e}}resend(){const e=this.sentMessages;for(const t in e){const a=e[t];(a.body||a.container)&&this.pushResend(t)}this.transport.connection&&(this.clearPingDelayDisconnect(),this.sendPingDelayDisconnect())}applyServerTime(e){const t=is()(e).shiftRight(32).toJSNumber();return this.log("applying server time",t),this.timeManager.applyServerTime(t)}processMessage(e,t,a){if("messageEmpty"!==e._)if(parseInt(t.substr(0,-10),10)%2)this.log.warn("Server even message id: ",t,e);else switch(this.debug&&this.log.debug("process message",e,t),this.pingDelayDisconnectDeferred&&this.pingDelayDisconnectDeferred.resolve("any message"),e._){case"msg_container":for(const t of e.messages)this.processMessage(t,t.msg_id,a);break;case"bad_server_salt":this.log("Bad server salt",e),this.applyServerSalt(e.new_server_salt),this.sentMessages[e.bad_msg_id]&&this.pushResend(e.bad_msg_id),this.ackMessage(t);break;case"bad_msg_notification":switch(this.log.error("Bad msg notification",e),e.error_code){case 16:case 17:case 32:case 33:case 64:{const a=this.applyServerTime(t);(17===e.error_code||a)&&(this.log("Update session"),this.updateSession());const s=this.updateSentMessage(e.bad_msg_id);s&&this.pushResend(s.msg_id)}}break;case"message":if(-1!==this.lastServerMessages.indexOf(t))return void this.ackMessage(t);this.lastServerMessages.push(t),this.lastServerMessages.length>100&&this.lastServerMessages.shift(),this.processMessage(e.body,e.msg_id,a);break;case"new_session_created":this.ackMessage(t),this.debug&&this.log.debug("new_session_created",e),this.processMessageAck(e.first_msg_id),this.applyServerSalt(e.server_salt),Ga.Z.get("dc").then((t=>{t===this.dcId&&!this.isFileNetworker&&this.networkerFactory.updatesProcessor&&this.networkerFactory.updatesProcessor(e)}));break;case"msgs_ack":this.debug&&this.log("got acks",e.msg_ids);for(const t of e.msg_ids)this.processMessageAck(t);break;case"msg_detailed_info":if(!this.sentMessages[e.msg_id]){this.ackMessage(e.answer_msg_id);break}case"msg_new_detailed_info":if(-1!==this.pendingAcks.indexOf(e.answer_msg_id))break;this.reqResend(e.answer_msg_id);break;case"msgs_state_info":{this.ackMessage(e.answer_msg_id);const t=[[this.lastResendReq,this.pendingResendReq]];for(const[a,s]of t)if((null==a?void 0:a.reqMsgId)===e.req_msg_id&&s.length)for(const e of a.msgIds){const t=s.indexOf(e);-1!==t&&s.splice(t,1)}break}case"rpc_result":{this.ackMessage(t);const a=e.req_msg_id,s=this.sentMessages[a];if(this.debug&&this.log("Rpc response",e.result,s),this.processMessageAck(a),s){const t=s.deferred;if("rpc_error"===e.result._){const a=this.processError(e.result);this.log("Rpc error",a),t&&t.reject(a)}else t&&t.resolve(e.result),s.isAPI&&!this.connectionInited&&(this.connectionInited=!0);delete this.sentMessages[a]}else this.debug&&this.log("Rpc result for unknown message:",a,e);break}case"pong":{const t=e.ping_id;if(this.lastPingDelayDisconnectId===t){const e=this.pingDelayDisconnectDeferred;e?e.resolve("pong"):this.log("ping deferred deleted",t)}break}default:this.ackMessage(t),null!==this.networkerFactory.updatesProcessor&&this.networkerFactory.updatesProcessor(e)}else this.log.warn("processMessage: messageEmpty",e,t)}}class Us extends G{constructor(){super(...arguments),this.networkers=[],this.language=navigator.language||_.Z.langPackCode,this.updatesProcessor=null,this.akStopped=!1}onConnectionStatusChange(e){this.rootScope.dispatchEvent("connection_status_change",e)}removeNetworker(e){(0,M.Z)(this.networkers,e)}setUpdatesProcessor(e){this.updatesProcessor=e}getNetworker(e,t,a,s,n){const i=new As(this,this.timeManager,e,t,a,s,n);return this.networkers.push(i),i}startAll(){if(this.akStopped){const e=this.networkers.filter((e=>e.isStopped()));this.akStopped=!1,this.updatesProcessor&&this.updatesProcessor({_:"new_session_created"});for(const t of e)t.scheduleRequest()}}stopAll(){this.akStopped=!0}setLanguage(e){this.language=e;for(const e of this.networkers)e.isFileNetworker||(e.connectionInited=!1)}unsetConnectionInited(){for(const e of this.networkers)e.connectionInited=!1}forceReconnectTimeout(){for(const e of this.networkers)e.forceReconnectTimeout()}forceReconnect(){for(const e of this.networkers)if(!e.isFileNetworker){e.forceReconnect();break}}}const Ds=new class{constructor(){this.testPublicKeysHex=[{modulus:"c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5",exponent:"010001"}],this.publisKeysHex=[{modulus:"e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3",exponent:"010001"}],this.publicKeysParsed={},this.prepared=!1,this.preparePromise=null,b.Z.test&&(this.publisKeysHex=this.testPublicKeysHex)}prepare(){return this.preparePromise?this.preparePromise:this.prepared?Promise.resolve():this.preparePromise=Promise.all(this.publisKeysHex.map((e=>{const t=new ys;t.storeBytes((0,Wa.Z)(e.modulus),"n"),t.storeBytes((0,Wa.Z)(e.exponent),"e");const a=t.getBuffer();return s.Z.invokeCrypto("sha1",a).then((t=>{const a=t.slice(-8);a.reverse(),this.publicKeysParsed[E(a).toLowerCase()]={modulus:e.modulus,exponent:e.exponent}}))}))).then((()=>{this.prepared=!0,this.preparePromise=null}))}select(e){return t=this,a=void 0,n=function*(){yield this.prepare();for(let t=0;t{if(d.ZP&&this.log("mtpSendPlainRequest: in good sector",e),!e||!e.byteLength)throw o;try{const t=new _s(e,{mtproto:!0});if(4===e.length){const e=t.fetchInt();throw this.log.error("mtpSendPlainRequest: wrong response, error code:",e),e}const a=t.fetchLong("auth_key_id");"0"!==a&&this.log.error("auth_key_id !== 0",a);const s=t.fetchLong("msg_id");"0"===s&&this.log.error("msg_id === 0",s);const n=t.fetchInt("msg_len");return n||this.log.error("no msg_len",n),t}catch(e){throw this.log.error("mtpSendPlainRequest: deserialization went bad",e),Object.assign(o,{originalError:e})}}),(e=>{throw e.message||e.type||(e=Object.assign(o,{originalError:e})),e}))}sendReqPQ(e){return Ts(this,void 0,void 0,(function*(){const t=new ys({mtproto:!0});let a;t.storeMethod("req_pq_multi",{nonce:e.nonce}),d.ZP&&this.log("Send req_pq",E(e.nonce));try{const s=this.sendPlainRequest(e.dcId,t.getBytes(!0));Ds.prepare(),a=yield s}catch(e){throw this.log.error("req_pq error",e.message),e}const n=a.fetchObject("ResPQ");if("resPQ"!==n._)throw new Error("[MT] resPQ response invalid: "+n._);if(!(0,bs.Z)(e.nonce,n.nonce))throw this.log.error(e.nonce,n.nonce),new Error("[MT] resPQ nonce mismatch");e.serverNonce=n.server_nonce,e.pq=n.pq,e.fingerprints=n.server_public_key_fingerprints,d.ZP&&this.log("Got ResPQ",E(e.serverNonce),E(e.pq),e.fingerprints);const i=yield Ds.select(e.fingerprints);if(!i)throw new Error("[MT] No public key found");e.publicKey=i,d.ZP&&this.log("PQ factorization start",e.pq);try{var r=yield s.Z.invokeCrypto("factorize",e.pq)}catch(e){throw this.log.error("worker error factorize",e),e}return e.p=r[0],e.q=r[1],d.ZP&&this.log("PQ factorization done",r),this.sendReqDhParams(e)}))}sendReqDhParams(e){return Ts(this,void 0,void 0,(function*(){e.newNonce=w(new Uint8Array(32));const t={_:"p_q_inner_data_dc",pq:e.pq,p:e.p,q:e.q,nonce:e.nonce,server_nonce:e.serverNonce,new_nonce:e.newNonce,dc:0},a=new ys({mtproto:!0});a.storeObject(t,"P_Q_inner_data","DECRYPTED_DATA");const n=a.getBytes(!0);if(n.length>144)throw"DH_params: data is more than 144 bytes!";const i=Ps(n,192,!1,!0,!1),r=i.slice().reverse(),o=yield(()=>Ts(this,void 0,void 0,(function*(){for(;;){const t=w(new Uint8Array(32)),a=r.concat(yield s.Z.invokeCrypto("sha256",t.concat(i)));if(224!==a.length)throw"DH_params: dataWithHash !== 224 bytes!";const n=yield s.Z.invokeCrypto("aes-encrypt",a,t,new Uint8Array([0])),o=Es(t,yield s.Z.invokeCrypto("sha256",n)).concat(n),p=cs(o),d=is()(e.publicKey.modulus,16);if(-1===p.compare(d))return o}})))(),p=Ps(yield s.Z.invokeCrypto("rsa-encrypt",o,e.publicKey),256,!0,!0,!0),f={nonce:e.nonce,server_nonce:e.serverNonce,p:e.p,q:e.q,public_key_fingerprint:e.publicKey.fingerprint,encrypted_data:p},c=new ys({mtproto:!0});c.storeMethod("req_DH_params",f);const l=c.getBytes(!0);let m;d.ZP&&this.log("Send req_DH_params",f);try{m=yield this.sendPlainRequest(e.dcId,l)}catch(e){throw this.log.error("Send req_DH_params FAIL!",e),e}const g=m.fetchObject("Server_DH_Params","RESPONSE");if(d.ZP&&this.log("Sent req_DH_params, response:",g),"server_DH_params_fail"!==g._&&"server_DH_params_ok"!==g._)throw new Error("[MT] Server_DH_Params response invalid: "+g._);if(!(0,bs.Z)(e.nonce,g.nonce))throw new Error("[MT] Server_DH_Params nonce mismatch");if(!(0,bs.Z)(e.serverNonce,g.server_nonce))throw new Error("[MT] Server_DH_Params server_nonce mismatch");if("server_DH_params_fail"===g._){const t=(yield s.Z.invokeCrypto("sha1",e.newNonce)).slice(-16);if(!(0,bs.Z)(t,g.new_nonce_hash))throw new Error("[MT] server_DH_params_fail new_nonce_hash mismatch");throw new Error("[MT] server_DH_params_fail")}try{yield this.decryptServerDhDataAnswer(e,g.encrypted_answer)}catch(e){throw this.log.error("mtpDecryptServerDhDataAnswer FAILED!",e),e}return this.sendSetClientDhParams(e)}))}decryptServerDhDataAnswer(e,t){return Ts(this,void 0,void 0,(function*(){e.localTime=Date.now(),e.tmpAesKey=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat(e.serverNonce))).concat((yield s.Z.invokeCrypto("sha1",e.serverNonce.concat(e.newNonce))).slice(0,12)),e.tmpAesIv=(yield s.Z.invokeCrypto("sha1",e.serverNonce.concat(e.newNonce))).slice(12).concat(yield s.Z.invokeCrypto("sha1",e.newNonce.concat(e.newNonce)),e.newNonce.slice(0,4));const a=new Uint8Array(yield s.Z.invokeCrypto("aes-decrypt",t,e.tmpAesKey,e.tmpAesIv)),n=a.slice(0,20),i=a.slice(20),r=new _s(i,{mtproto:!0}),o=r.fetchObject("Server_DH_inner_data");if("server_DH_inner_data"!==o._)throw new Error("[MT] server_DH_inner_data response invalid: "+o);if(!(0,bs.Z)(e.nonce,o.nonce))throw new Error("[MT] server_DH_inner_data nonce mismatch");if(!(0,bs.Z)(e.serverNonce,o.server_nonce))throw new Error("[MT] server_DH_inner_data serverNonce mismatch");d.ZP&&this.log("Done decrypting answer"),e.g=o.g,e.dhPrime=o.dh_prime,e.gA=o.g_a,e.serverTime=o.server_time,e.retry=0,this.verifyDhParams(e.g,e.dhPrime,e.gA);const p=r.getOffset();if(!(0,bs.Z)(n,yield s.Z.invokeCrypto("sha1",i.slice(0,p))))throw new Error("[MT] server_DH_inner_data SHA1 mismatch");this.timeManager.applyServerTime(e.serverTime,e.localTime)}))}verifyDhParams(e,t,a){d.ZP&&this.log("Verifying DH params",e,t,a);const s=E(t);if(3!==e||"c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b"!==s)throw new Error("[MT] DH params are not verified: unknown dhPrime");d.ZP&&this.log("dhPrime cmp OK");const n=cs(a),i=is()(s,16);if(n.compare(is().one)<=0)throw new Error("[MT] DH params are not verified: gA <= 1");if(n.compare(i.subtract(is().one))>=0)throw new Error("[MT] DH params are not verified: gA >= dhPrime - 1");d.ZP&&this.log("1 < gA < dhPrime-1 OK");const r=is()(2).pow(1984);if(n.compare(r)<0)throw new Error("[MT] DH params are not verified: gA < 2^{2048-64}");if(n.compare(i.subtract(r))>=0)throw new Error("[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}");return d.ZP&&this.log("2^{2048-64} < gA < dhPrime-2^{2048-64} OK"),!0}sendSetClientDhParams(e){return Ts(this,void 0,void 0,(function*(){const t=(0,Wa.Z)(e.g.toString(16));e.b=w(new Uint8Array(256));try{var a=yield s.Z.invokeCrypto("mod-pow",t,e.b,e.dhPrime)}catch(e){throw e}const n=new ys({mtproto:!0});n.storeObject({_:"client_DH_inner_data",nonce:e.nonce,server_nonce:e.serverNonce,retry_id:[0,e.retry++],g_b:a},"Client_DH_Inner_Data");const i=(yield s.Z.invokeCrypto("sha1",n.getBuffer())).concat(n.getBytes(!0)),r=yield s.Z.invokeCrypto("aes-encrypt",i,e.tmpAesKey,e.tmpAesIv),o=new ys({mtproto:!0});let p;o.storeMethod("set_client_DH_params",{nonce:e.nonce,server_nonce:e.serverNonce,encrypted_data:r}),d.ZP&&this.log("Send set_client_DH_params");try{p=yield this.sendPlainRequest(e.dcId,o.getBytes(!0))}catch(e){throw e}const f=p.fetchObject("Set_client_DH_params_answer");if("dh_gen_ok"!==f._&&"dh_gen_retry"!==f._&&"dh_gen_fail"!==f._)throw new Error("[MT] Set_client_DH_params_answer response invalid: "+f._);if(!(0,bs.Z)(e.nonce,f.nonce))throw new Error("[MT] Set_client_DH_params_answer nonce mismatch");if(!(0,bs.Z)(e.serverNonce,f.server_nonce))throw new Error("[MT] Set_client_DH_params_answer server_nonce mismatch");try{var c=yield s.Z.invokeCrypto("mod-pow",e.gA,e.b,e.dhPrime)}catch(e){throw c}const l=yield s.Z.invokeCrypto("sha1",c),m=l.slice(0,8),g=l.slice(-8);switch(d.ZP&&this.log("Got Set_client_DH_params_answer",f._,c),f._){case"dh_gen_ok":{const t=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat([1],m))).slice(-16);if(!(0,bs.Z)(t,f.new_nonce_hash1))throw this.log.error("Set_client_DH_params_answer new_nonce_hash1 mismatch",t,f),new Error("new_nonce_hash1 mismatch");const a=Es(e.newNonce.slice(0,8),e.serverNonce.slice(0,8));return d.ZP&&this.log("Auth successfull!",g,c,a),e.authKeyId=g,e.authKey=c,e.serverSalt=a,e}case"dh_gen_retry":{const t=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat([2],m))).slice(-16);if(!(0,bs.Z)(t,f.new_nonce_hash2))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch");return this.sendSetClientDhParams(e)}case"dh_gen_fail":{const t=(yield s.Z.invokeCrypto("sha1",e.newNonce.concat([3],m))).slice(-16);if(!(0,bs.Z)(t,f.new_nonce_hash3))throw new Error("[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch");throw new Error("[MT] Set_client_DH_params_answer fail")}}}))}getTransportType(){return this.getTransportTypePromise?this.getTransportTypePromise:this.getTransportTypePromise=Z.pingTransports().then((({websocket:e})=>{this.transportType=e?"websocket":"https",this.log("will use transport:",this.transportType)}))}auth(e){let t=this.cached[e];return t||(t=new Promise(((t,a)=>Ts(this,void 0,void 0,(function*(){let s;yield this.getTransportType();let n=1;for(;n++<=3;)try{const a={dcId:e,nonce:w(new Uint8Array(16))},s=this.sendReqPQ(a);return void t(yield s)}catch(e){s=e}a(s)})))),this.cached[e]=t)}}class Rs extends G{after(){this.lastMessageId=[0,0],this.timeOffset=0,Ga.Z.get("server_time_offset").then((e=>{e&&(this.timeOffset=e)}))}getServerTimeOffset(){return this.timeOffset}generateId(){const e=Date.now();let t=[Math.floor(e/1e3)+this.timeOffset,e%1e3<<21|(0,Ee.d)(16)<<3|4];return(this.lastMessageId[0]>t[0]||this.lastMessageId[0]===t[0]&&this.lastMessageId[1]>=t[1])&&(t=[this.lastMessageId[0],this.lastMessageId[1]+4]),this.lastMessageId=t,os(t[0],t[1]).toString(10)}applyServerTime(e,t){const a=e-(t=(t||Date.now())/1e3|0),s=Math.abs(this.timeOffset-a)>10;return this.lastMessageId=[0,0],this.timeOffset!==a&&(Ga.Z.set({server_time_offset:a}),this.timeOffset=a),s}}class xs{saveWebDocument(e){if(!e)return;const t=e.attributes.find((e=>"documentAttributeImageSize"===e._));return t&&(e.w=t.w,e.h=t.h),e}}class Bs extends G{getInputInvoiceBySlug(e){return{_:"inputInvoiceSlug",slug:e}}getInputInvoiceByPeerId(e,t){return{_:"inputInvoiceMessage",peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}}getPaymentForm(e){return this.apiManager.invokeApi("payments.getPaymentForm",{invoice:e}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e)))}getPaymentReceipt(e,t){return this.apiManager.invokeApi("payments.getPaymentReceipt",{peer:this.appPeersManager.getInputPeerById(e),msg_id:(0,oe.Z)(t)}).then((e=>(this.appUsersManager.saveApiUsers(e.users),e)))}validateRequestedInfo(e,t,a){return this.apiManager.invokeApi("payments.validateRequestedInfo",{save:a,invoice:e,info:t})}sendPaymentForm(e,t,a,s,n,i){return this.apiManager.invokeApi("payments.sendPaymentForm",{form_id:t,invoice:e,requested_info_id:a,shipping_option_id:s,credentials:n,tip_amount:i||void 0}).then((e=>("payments.paymentResult"===e._&&this.apiUpdatesManager.processUpdateMessage(e.updates),e)))}clearSavedInfo(e,t){return this.apiManager.invokeApi("payments.clearSavedInfo",{info:e,credentials:t})}}var Vs=a(8794);class Os extends G{constructor(){super(...arguments),this.clear=(e=!1)=>{e?this.attachMenuBots=new Map:(this.attachMenuBots.clear(),this.attachMenuBotsArr=void 0)},this.onUpdateAttachMenuBots=e=>{this.clear(),this.getAttachMenuBots()}}after(){this.clear(!0),this.apiUpdatesManager.addMultipleEventsListeners({updateAttachMenuBots:this.onUpdateAttachMenuBots})}saveAttachMenuBot(e){this.attachMenuBots.set(e.bot_id,e);const t=(0,Vs.Z)(e);return t.icon=this.appDocsManager.saveDoc(t.icon,{type:"attachMenuBotIcon",botId:e.bot_id}),e}saveAttachMenuBots(e){e.saved||(e.saved=!0,e.forEach((e=>this.saveAttachMenuBot(e))))}getAttachMenuBots(){var e;return null!==(e=this.attachMenuBotsArr)&&void 0!==e?e:this.apiManager.invokeApiSingleProcess({method:"messages.getAttachMenuBots",processResult:e=>((0,ue.Z)(e),this.appUsersManager.saveApiUsers(e.users),this.saveAttachMenuBots(e.bots),this.attachMenuBotsArr=e.bots.slice(0,0))})}getAttachMenuBotCached(e){return this.attachMenuBots.get(e)}getAttachMenuBot(e,t){throw this.appUsersManager.isAttachMenuBot(e),(0,X.Z)("BOT_INVALID")}requestWebView(e){const{botId:t,peerId:a,url:s,fromBotMenu:n,themeParams:i,replyToMsgId:r,silent:o,sendAsPeerId:p,startParam:d,threadId:f}=e;return this.apiManager.invokeApiSingleProcess({method:"messages.requestWebView",params:{peer:this.appPeersManager.getInputPeerById(a),bot:this.appUsersManager.getUserInput(t),silent:o,platform:"web",url:s,reply_to_msg_id:r?(0,oe.Z)(r):void 0,from_bot_menu:n,theme_params:i,send_as:p?this.appPeersManager.getInputPeerById(p):void 0,start_param:d,top_msg_id:f?(0,oe.Z)(f):void 0},processResult:e=>(console.log(e),e)})}prolongWebView(e){return this.apiManager.invokeApiSingleProcess({method:"messages.prolongWebView",params:{peer:this.appPeersManager.getInputPeerById(e.peerId),bot:this.appUsersManager.getUserInput(e.botId),query_id:e.queryId,silent:e.silent,reply_to_msg_id:e.replyToMsgId?(0,oe.Z)(e.replyToMsgId):void 0,send_as:e.sendAsPeerId?this.appPeersManager.getInputPeerById(e.sendAsPeerId):void 0,top_msg_id:e.threadId?(0,oe.Z)(e.threadId):void 0},processResult:e=>{console.log(e)}})}}class Ls extends G{requestUrlAuth(e,t,a,s){return this.apiManager.invokeApi("messages.requestUrlAuth",{button_id:s,msg_id:a?(0,oe.Z)(a):void 0,peer:t?this.appPeersManager.getInputPeerById(t):void 0,url:e}).then((e=>("urlAuthResultRequest"===e._&&this.appUsersManager.saveApiUser(e.bot),e)))}acceptUrlAuth(e,t,a,s,n){return this.apiManager.invokeApi("messages.acceptUrlAuth",{button_id:s,msg_id:a?(0,oe.Z)(a):void 0,peer:t?this.appPeersManager.getInputPeerById(t):void 0,url:e,write_allowed:n}).then((e=>e))}getWebAuthorizations(){return this.apiManager.invokeApi("account.getWebAuthorizations").then((e=>(this.appUsersManager.saveApiUsers(e.users),e.authorizations)))}resetWebAuthorization(e){return this.apiManager.invokeApi("account.resetWebAuthorization",{hash:e})}resetWebAuthorizations(){return this.apiManager.invokeApi("account.resetWebAuthorizations")}}class Ns extends G{after(){this.wallPapers={}}saveWallPaper(e){return e?("wallPaperNoFile"!==e._&&(e.document=this.appDocsManager.saveDoc(e.document,{type:"wallPaper",wallPaperId:e.id})),this.wallPapers[e.id]=e,e):e}getWallPaper(e){return this.apiManager.invokeApiSingleProcess({method:"account.getWallPaper",params:{wallpaper:e},processResult:e=>this.saveWallPaper(e)})}getInputWallPaper(e){return"string"==typeof e?{_:"inputWallPaperSlug",slug:e}:"wallPaperNoFile"===e._?{_:"inputWallPaperNoFile",id:e.id}:{_:"inputWallPaper",id:e.id,access_hash:e.access_hash}}getWallPaperById(e){const t=this.wallPapers[e];return this.getWallPaper(this.getInputWallPaper(t))}getThemes(){return this.apiManager.invokeApiSingleProcess({method:"account.getThemes",params:{format:"macos",hash:0},processResult:e=>((0,ue.Z)(e),e.themes.forEach((e=>{e.settings&&e.settings.forEach((e=>{e.wallpaper=this.saveWallPaper(e.wallpaper)}))})),e.themes)})}getWallPapers(){return this.apiManager.invokeApiHashable({method:"account.getWallPapers"}).then((e=>{const t=e.wallpapers;return t.forEach(((e,t,a)=>{a[t]=this.saveWallPaper(e)})),t}))}}const Zs=new class{constructor(){this.cryptoWorkersURLs=[],this.cryptoPortsAttached=0,this.cryptoPortPromise=(0,v.Z)(),this.cryptoPortPromise.then((()=>{this.cryptoPortPromise=void 0}))}start(){const e=f.Z.getInstance();e.addEventListener("manager",(({name:e,method:t,args:a})=>(0,q.Z)(this.getManagers(),(s=>{const n=s[e];return n[t].apply(n,a)})))),e.addEventListener("cryptoPort",((e,t,a)=>{var n;const i=a.ports[0];this.cryptoPortsAttached>=this.cryptoWorkersURLs.length?i.close():(++this.cryptoPortsAttached,s.Z.attachPort(i),null===(n=this.cryptoPortPromise)||void 0===n||n.resolve())})),e.addEventListener("createProxyWorkerURLs",(({originalUrl:e,blob:t})=>{let a=this.cryptoWorkersURLs.length;a||(this.cryptoWorkersURLs.push(e),++a);const s=_.Z.cryptoWorkers;if(a===s)return this.cryptoWorkersURLs;const n=new Array(s-a).fill(void 0).map((()=>URL.createObjectURL(t)));return this.cryptoWorkersURLs.push(...n),this.cryptoWorkersURLs}))}createManagers(){return e=this,t=void 0,n=function*(){const e=new $;yield Promise.all([e.loadStorages(),this.cryptoPortPromise]);const t=yield function(e,t){const a={appPeersManager:new ca,appChatsManager:new Ve,appDocsManager:new yt,appPhotosManager:new la,appPollsManager:new ma,appUsersManager:new Ua,appWebPagesManager:new Ea,appDraftsManager:new vt,appProfileManager:new ya,appNotificationsManager:new ia,apiUpdatesManager:new Ue,appAvatarsManager:new De,appGroupCallsManager:new Ct,appCallsManager:new Fe,appReactionsManager:new Ma,appMessagesManager:new aa,appMessagesIdsManager:new Tt,appPrivacyManager:new ga,appInlineBotsManager:new Dt,appStickersManager:new wa,referenceDatabase:new ee,appEmojiManager:new St,filtersStorage:new Ce,dialogsStorage:new _e,apiManager:new $a,cryptoWorker:s.Z,passwordManager:new Q,apiFileManager:new qa,peersStorage:new Ya,thumbsStorage:new es,networkerFactory:new Us,rootScope:new l,authorizer:new Fs,dcConfigurator:new O,timeManager:new Rs,appStoragesManager:e,appStateManager:y,appWebDocsManager:new xs,appPaymentsManager:new Bs,appAttachMenuBotsManager:new Os,appSeamlessLoginManager:new Ls,appThemesManager:new Ns};for(const e in a){const t=a[e];t&&(t.setManagers&&(t.setManagers(a),delete t.setManagers),T.Z[e]=t)}const n=[];let i=Object.keys(a);i.unshift("appUsersManager","appChatsManager","appNotificationsManager","appMessagesManager","dialogsStorage"),i=(0,we.Z)(i);for(const e of i){const t=a[e];if(null==t?void 0:t.after){const e=t.after();n.push(e)}}return t&&a.apiManager.setUserAuth(t),Promise.all(n).then((()=>a))}(e,y.userId);return this.managers=t},new((a=void 0)||(a=Promise))((function(s,i){function r(e){try{p(n.next(e))}catch(e){i(e)}}function o(e){try{p(n.throw(e))}catch(e){i(e)}}function p(e){var t;e.done?s(e.value):(t=e.value,t instanceof a?t:new a((function(e){e(t)}))).then(r,o)}p((n=n.apply(e,t||[])).next())}));var e,t,a,n}getManagers(){var e;return null!==(e=this.managers)&&void 0!==e?e:this.managers=this.createManagers()}};d.GO&&(d.GO.appManagersManager=Zs);const js=Zs;var qs=a(3655);let Gs,Hs,Ws=!0;function zs(){return Ws}function Ks(){return Ws?Gs:void 0}const Js=(0,S.kg)("MTPROTO"),$s=new f.Z;$s.addMultipleEventsListeners({environment:e=>{r(e),Z.waitForWebSocket()},crypto:({method:e,args:t})=>s.Z.invokeCrypto(e,...t),state:({state:e,resetStorages:t,pushedKeys:a,newVersion:s,oldVersion:n,userId:i})=>{Js("got state",e,a),y.userId=i,y.newVersion=s,y.oldVersion=n,Object.keys(e).forEach((t=>{y.pushToState(t,e[t],!0,!a.includes(t))})),j.resolve(t)},toggleStorages:({enabled:e,clearWrite:t})=>(0,Ka.Z)(e,t),event:(e,t)=>{Js("will redirect event",e,t),$s.invokeExceptSource("event",e,t)},serviceWorkerOnline:e=>{Ws=e},serviceWorkerPort:(e,t,a)=>{Gs?(Gs.detachPort(Hs),Hs=void 0):(Gs=new qs.Z,Gs.addMultipleEventsListeners({requestFilePart:e=>(0,q.Z)(js.getManagers(),(t=>{const{docId:a,dcId:s,offset:n,limit:i}=e;return t.appDocsManager.requestDocPart(a,s,n,i)}))})),(Hs=a.ports[0])&&Gs.attachPort(Hs)},createObjectURL:e=>URL.createObjectURL(e)}),Js("MTProto start"),js.start(),js.getManagers(),Ht.start(),function(e,t,a){const s=(a,s)=>{e.attachListenPort(a),s&&e.attachSendPort(s),null==t||t(a)};e.setOnPortDisconnect((e=>{Ht.deleteTab(e)})),"undefined"!=typeof SharedWorkerGlobalScope?T.Z.addEventListener("connect",(e=>s(e.source,e.source))):"undefined"!=typeof ServiceWorkerGlobalScope?s(T.Z,null):s(T.Z,T.Z)}($s,(e=>{Ht.addTab(e)}))},1507:(e,t,a)=>{a.d(t,{BP:()=>f,BX:()=>l,DZ:()=>h,Gu:()=>u,IA:()=>i,Iw:()=>p,J$:()=>m,NM:()=>s,Ox:()=>c,Pt:()=>d,Zi:()=>g,hj:()=>n,rU:()=>o,yF:()=>r});const s=0,n=1271266957,i=777,r=777e3,o=2147483647,p=20971520,d="",f="default_static",c=4295032831,l=new Set(["web","k","z"]),m=0,g=1,h=new Set([m,g]),u=Math.max(...Array.from(h))+1},2423:(e,t,a)=>{a.d(t,{$2:()=>l,E:()=>m,QB:()=>g,SC:()=>h,bu:()=>d,it:()=>p,kO:()=>y,tY:()=>u});var s=a(1229);const n="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",i="0-9_"+n,r="["+n+"0-9]",o="((?:https?|ftp)://|mailto:)?",p=o+"(?:"+r+"{1,64}(?::"+r+"{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}|"+r+"["+n+"ยท0-9-]{0,64}(?:\\."+r+"["+n+"ยท0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|["+n+"]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?",d=(new RegExp("^"+o.slice(0,-1),"i"),/^((?:[^\/]+?):\/\/|mailto:)/),f="[a-zA-Z\\d_]{5,32}",c="\\/([a-zA-Z\\d_]{1,32})(?:@("+f+"))?(\\b|$)",l=new RegExp("(^| )(@)("+f+")|("+p+")|(\\n)|("+s.Z+")|(^|[\\s\\(\\]])(#["+i+"]{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,}))$/,g=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s|\x01)(`|~~|\*\*|__|_-_|\|\|)([^\n]+?)\7([\x01\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)|(\[(.+?)\]\((.+?)\))/m,h={"`":"messageEntityCode","``":"messageEntityPre","**":"messageEntityBold",__:"messageEntityItalic","~~":"messageEntityStrike","_-_":"messageEntityUnderline","||":"messageEntitySpoiler"},u=new Set(["messageEntityEmoji","messageEntityLinebreak","messageEntityCaret"]);for(const e in h)u.add(h[e]);const y=/^\+\d+$/},671:(e,t,a)=>{function s(e){return function(e){const t=[];let a=0,s=0,n=0;for(;n55296&&a<=56319?s=a:t.push(a.toString(16));return t.length&&2===t[0].length&&(t[0]="00"+t[0]),t}(r(e)).join("-")}a.d(t,{N0:()=>s});const n=/\uFE0F/g,i=String.fromCharCode(8205),r=e=>e.indexOf(i)<0?e.replace(n,""):e;new Map([["FT","๐Ÿดโ€โ˜ "]])}},s={};function n(e){var t=s[e];if(void 0!==t)return t.exports;var i=s[e]={id:e,loaded:!1,exports:{}};return a[e].call(i.exports,i,i.exports,n),i.loaded=!0,i.exports}n.m=a,n.x=()=>{var e=n.O(void 0,[699,211,147,85,110],(()=>n(9092)));return n.O(e)},e=[],n.O=(t,a,s,i)=>{if(!a){var r=1/0;for(f=0;f=i)&&Object.keys(n.O).every((e=>n.O[e](a[p])))?a.splice(p--,1):(o=!1,i0&&e[f-1][2]>i;f--)e[f]=e[f-1];e[f]=[a,s,i]},n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var a in t)n.o(t,a)&&!n.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:t[a]})},n.f={},n.e=e=>Promise.all(Object.keys(n.f).reduce(((t,a)=>(n.f[a](e,t),t)),[])),n.u=e=>85===e?"85.887945ef5f43bc205112.bundle.js":110===e?"110.392baae5965bb16e7063.bundle.js":({211:"npm.big-integer",699:"npm.pako"}[e]||e)+"."+{8:"93d2f33af815eb0455aa",104:"f68acff124bec8da4bd6",147:"d3d1728d5fd59c12e18f",211:"363d763daad0ee4e2741",301:"95838a8203f23dd1ce8f",642:"be93122d1116ecdc9322",699:"89deb457201f16c93925"}[e]+".chunk.js",n.miniCssF=e=>{},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),(()=>{var e;n.g.importScripts&&(e=n.g.location+"");var t=n.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var a=t.getElementsByTagName("script");a.length&&(e=a[a.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),n.p=e})(),(()=>{if(void 0!==n){var e=n.u,t=n.e,a={},s={};n.u=function(t){return e(t)+(a.hasOwnProperty(t)?"?"+a[t]:"")},n.e=function(i){return t(i).catch((function(t){var r=s.hasOwnProperty(i)?s[i]:999999;if(r<1){var o=e(i);throw t.message="Loading chunk "+i+" failed after 999999 retries.\n("+o+")",t.request=o,t}return new Promise((function(e){setTimeout((function(){var t=Date.now();a[i]=t,s[i]=r-1,e(n.e(i))}),3e3)}))}))}}})(),(()=>{var e={678:1};n.f.i=(t,a)=>{e[t]||importScripts(n.p+n.u(t))};var t=this.webpackChunktweb=this.webpackChunktweb||[],a=t.push.bind(t);t.push=t=>{var[s,i,r]=t;for(var o in i)n.o(i,o)&&(n.m[o]=i[o]);for(r&&r(n);s.length;)e[s.pop()]=1;a(t)}})(),t=n.x,n.x=()=>Promise.all([699,211,147,85,110].map(n.e,n)).then(t),n.x()})(); +//# sourceMappingURL=mtproto.worker.8a2c8d1f5534b5f54052.chunk.js.map \ No newline at end of file diff --git a/public/mtproto.worker.50a758787fa4b84d353d.chunk.js.map b/public/mtproto.worker.8a2c8d1f5534b5f54052.chunk.js.map similarity index 99% rename from public/mtproto.worker.50a758787fa4b84d353d.chunk.js.map rename to public/mtproto.worker.8a2c8d1f5534b5f54052.chunk.js.map index 079acdf4..e0e1c4b5 100644 --- a/public/mtproto.worker.50a758787fa4b84d353d.chunk.js.map +++ b/public/mtproto.worker.8a2c8d1f5534b5f54052.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"mtproto.worker.50a758787fa4b84d353d.chunk.js","mappings":"uBAAIA,ECAAC,E,4CCQG,MACMC,E,QAAoB,QAEpBC,EADuB,oBAAb,OAA2BC,OAASC,KAE3D,G,kCCJO,MAAMC,EAAyE,CAAC,GAAK,CAAC,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,IAAK,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,+BAA+B,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,GAAI,GAAG,CAAC,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,KAAM,KAAO,KAAM,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,KAAM,KAAO,KAAM,KAAO,KAAM,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,IAAK,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,KAAM,KAAO,MAAO,KAAO,KAAM,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,KAAM,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,KAAM,KAAO,KAAM,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,KAAO,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,YAAY,MAAO,OAAO,MAAO,OAAO,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,MAAO,kBAAkB,MAAO,QAAQ,MAAO,kBAAkB,MAAO,4CAA4C,MAAO,4CAA4C,MAAO,4CAA4C,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,6BAA6B,KAAM,wCAAwC,KAAM,QAAQ,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,6BAA6B,KAAM,6BAA6B,KAAM,wCAAwC,KAAM,wCAAwC,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,GAAI,QAAQ,IAAK,QAAQ,IAAK,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,GAAI,QAAQ,IAAK,QAAQ,IAAK,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,IAAK,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,IAAK,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,iBAAiB,KAAM,iBAAiB,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/config/emoji.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/helpers/cleanSearchText.ts","webpack://tweb/./src/helpers/fileName.ts","webpack://tweb/./src/helpers/restrictions.ts","webpack://tweb/./src/lib/appManagers/utils/peers/getPeerId.ts","webpack://tweb/./src/lib/files/idb.ts","webpack://tweb/./src/environment/utils.ts","webpack://tweb/./src/lib/rootScope.ts","webpack://tweb/./src/lib/appManagers/appStateManager.ts","webpack://tweb/./src/helpers/object/setDeepProperty.ts","webpack://tweb/./src/lib/mtproto/transports/http.ts","webpack://tweb/./src/lib/mtproto/transports/websocket.ts","webpack://tweb/./src/helpers/array/randomize.ts","webpack://tweb/./src/lib/mtproto/transports/obfuscation.ts","webpack://tweb/./src/lib/mtproto/transports/abridged.ts","webpack://tweb/./src/helpers/bytes/bytesToHex.ts","webpack://tweb/./src/lib/mtproto/transports/tcpObfuscated.ts","webpack://tweb/./src/lib/mtproto/dcConfigurator.ts","webpack://tweb/./src/lib/mtproto/transports/controller.ts","webpack://tweb/./src/lib/appManagers/utils/storages/resetStoragesPromise.ts","webpack://tweb/./src/lib/appManagers/manager.ts","webpack://tweb/./src/lib/appManagers/utils/storages/loadStorages.ts","webpack://tweb/./src/lib/appManagers/appStoragesManager.ts","webpack://tweb/./src/lib/appManagers/utils/storages/createStorages.ts","webpack://tweb/./src/lib/mtproto/passwordManager.ts","webpack://tweb/./src/lib/mtproto/referenceDatabase.ts","webpack://tweb/./src/helpers/object/safeReplaceObject.ts","webpack://tweb/./src/lib/appManagers/utils/messages/getPeerIdsFromMessage.ts","webpack://tweb/./src/lib/appManagers/utils/dialogs/setDialogIndex.ts","webpack://tweb/./src/lib/storages/dialogs.ts","webpack://tweb/./src/lib/storages/filters.ts","webpack://tweb/./src/helpers/applyMixins.ts","webpack://tweb/./src/lib/appManagers/apiUpdatesManager.ts","webpack://tweb/./src/lib/appManagers/appAvatarsManager.ts","webpack://tweb/./src/lib/appManagers/appCallsManager.ts","webpack://tweb/./src/lib/appManagers/appChatsManager.ts","webpack://tweb/./src/lib/langPack.ts","webpack://tweb/./src/lib/richTextProcessor/wrapUrl.ts","webpack://tweb/./src/helpers/dom/setInnerHTML.ts","webpack://tweb/./src/helpers/date.ts","webpack://tweb/./src/helpers/object/safeReplaceArrayInObject.ts","webpack://tweb/./src/environment/mimeTypeMap.ts","webpack://tweb/./src/lib/appManagers/appDocsManager.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentURL.ts","webpack://tweb/./src/lib/appManagers/appDraftsManager.ts","webpack://tweb/./src/lib/appManagers/appEmojiManager.ts","webpack://tweb/./src/lib/appManagers/appGroupCallsManager.ts","webpack://tweb/./src/lib/appManagers/utils/photos/getPhotoInput.ts","webpack://tweb/./src/lib/appManagers/utils/photos/getPhotoMediaInput.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentMediaInput.ts","webpack://tweb/./src/lib/appManagers/appInlineBotsManager.ts","webpack://tweb/./src/lib/appManagers/appMessagesIdsManager.ts","webpack://tweb/./src/helpers/string/splitStringByLength.ts","webpack://tweb/./src/lib/appManagers/appTabsManager.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentInput.ts","webpack://tweb/./src/helpers/object/setBooleanFlag.ts","webpack://tweb/./src/lib/appManagers/appMessagesManager.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentInputFileName.ts","webpack://tweb/./src/helpers/string/convertInputKeyToKey.ts","webpack://tweb/./src/lib/appManagers/appNotificationsManager.ts","webpack://tweb/./src/lib/appManagers/appPeersManager.ts","webpack://tweb/./src/lib/appManagers/appPhotosManager.ts","webpack://tweb/./src/lib/appManagers/appPollsManager.ts","webpack://tweb/./src/lib/appManagers/appPrivacyManager.ts","webpack://tweb/./src/lib/appManagers/appProfileManager.ts","webpack://tweb/./src/helpers/callbackifyAll.ts","webpack://tweb/./src/lib/appManagers/appReactionsManager.ts","webpack://tweb/./src/lib/appManagers/appStickersManager.ts","webpack://tweb/./src/helpers/fixBase64String.ts","webpack://tweb/./src/lib/appManagers/appUsersManager.ts","webpack://tweb/./src/helpers/cleanUsername.ts","webpack://tweb/./src/lib/appManagers/appWebPagesManager.ts","webpack://tweb/./src/helpers/blob/readBlobAsArrayBuffer.ts","webpack://tweb/./src/helpers/string/fileNameRFC.ts","webpack://tweb/./src/lib/files/downloadWriter.ts","webpack://tweb/./src/lib/files/downloadStorage.ts","webpack://tweb/./src/lib/mtproto/apiFileManager.ts","webpack://tweb/./src/helpers/fixFirefoxSvg.ts","webpack://tweb/./src/helpers/blob/readBlobAsUint8Array.ts","webpack://tweb/./src/lib/mtproto/api_methods.ts","webpack://tweb/./src/lib/mtproto/apiManager.ts","webpack://tweb/./src/lib/storages/peers.ts","webpack://tweb/./src/lib/storages/thumbs.ts","webpack://tweb/./src/lib/mtproto/schema.ts","webpack://tweb/./src/helpers/number/intToUint.ts","webpack://tweb/./src/helpers/long/ulongFromInts.ts","webpack://tweb/./src/helpers/bigInt/bigIntConstants.ts","webpack://tweb/./src/helpers/bigInt/bigIntConversion.ts","webpack://tweb/./src/lib/mtproto/tl_utils.ts","webpack://tweb/./src/helpers/gzipUncompress.ts","webpack://tweb/./src/helpers/bytes/addPadding.ts","webpack://tweb/./src/lib/mtproto/networker.ts","webpack://tweb/./src/helpers/long/sortLongsArray.ts","webpack://tweb/./src/helpers/long/longToBytes.ts","webpack://tweb/./src/lib/mtproto/networkerFactory.ts","webpack://tweb/./src/lib/mtproto/rsaKeysManager.ts","webpack://tweb/./src/helpers/bytes/bytesXor.ts","webpack://tweb/./src/lib/mtproto/authorizer.ts","webpack://tweb/./src/lib/mtproto/timeManager.ts","webpack://tweb/./src/lib/appManagers/appWebDocsManager.ts","webpack://tweb/./src/lib/appManagers/appPaymentsManager.ts","webpack://tweb/./src/lib/appManagers/appAttachMenuBotsManager.ts","webpack://tweb/./src/lib/appManagers/appSeamlessLoginManager.ts","webpack://tweb/./src/lib/appManagers/appThemesManager.ts","webpack://tweb/./src/lib/appManagers/appManagersManager.ts","webpack://tweb/./src/lib/appManagers/createManagers.ts","webpack://tweb/./src/lib/mtproto/mtproto.worker.ts","webpack://tweb/./src/helpers/listenMessagePort.ts","webpack://tweb/./src/lib/mtproto/mtproto_config.ts","webpack://tweb/./src/lib/richTextProcessor/index.ts","webpack://tweb/./src/vendor/emoji/index.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/compat get default export","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/make namespace object","webpack://tweb/webpack/runtime/node module decorator","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([699,211,147,85,110].map(__webpack_require__.e, __webpack_require__)).then(next);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {EMOJI_VERSION} from '../environment/emojiVersionsSupport';\n\nexport const EmojiVersions: {[version in EMOJI_VERSION]: {[emoji: string]: number}} = {'14':{'1f6dd':4867, '1f6de':4916, '1f6df':4923, '1f7f0':62832, '1f979':183, '1f9cc':1557, '1fa7b':61332, '1fa7c':61330, '1faa9':51093, '1faaa':61364, '1faab':61189, '1faac':51085, '1fab7':2651, '1fab8':2631, '1fab9':2672, '1faba':2673, '1fac3':1520, '1fac4':1521, '1fac5':1505, '1fad7':3793, '1fad8':3707, '1fad9':3804, '1fae0':111, '1fae1':136, '1fae2':132, '1fae3':133, '1fae4':174, '1fae5':142, '1fae6':1385, '1fae7':61353, '1faf0':1341, '1faf1':1332, '1faf2':1333, '1faf3':1334, '1faf4':1335, '1faf5':1351, '1faf6':1360, '1faf1-1f3fb-200d-1faf2-1f3fc':0, '1faf1-1f3fb-200d-1faf2-1f3fd':0, '1faf1-1f3fb-200d-1faf2-1f3fe':0, '1faf1-1f3fb-200d-1faf2-1f3ff':0, '1faf1-1f3fc-200d-1faf2-1f3fb':0, '1faf1-1f3fc-200d-1faf2-1f3fd':0, '1faf1-1f3fc-200d-1faf2-1f3fe':0, '1faf1-1f3fc-200d-1faf2-1f3ff':0, '1faf1-1f3fd-200d-1faf2-1f3fb':0, '1faf1-1f3fd-200d-1faf2-1f3fc':0, '1faf1-1f3fd-200d-1faf2-1f3fe':0, '1faf1-1f3fd-200d-1faf2-1f3ff':0, '1faf1-1f3fe-200d-1faf2-1f3fb':0, '1faf1-1f3fe-200d-1faf2-1f3fc':0, '1faf1-1f3fe-200d-1faf2-1f3fd':0, '1faf1-1f3fe-200d-1faf2-1f3ff':0, '1faf1-1f3ff-200d-1faf2-1f3fb':0, '1faf1-1f3ff-200d-1faf2-1f3fc':0, '1faf1-1f3ff-200d-1faf2-1f3fd':0, '1faf1-1f3ff-200d-1faf2-1f3fe':0, '1fac3-1f3fb':0, '1fac3-1f3fc':0, '1fac3-1f3fd':0, '1fac3-1f3fe':0, '1fac3-1f3ff':0, '1fac4-1f3fb':0, '1fac4-1f3fc':0, '1fac4-1f3fd':0, '1fac4-1f3fe':0, '1fac4-1f3ff':0, '1fac5-1f3fb':0, '1fac5-1f3fc':0, '1fac5-1f3fd':0, '1fac5-1f3fe':0, '1fac5-1f3ff':0, '1faf0-1f3fb':0, '1faf0-1f3fc':0, '1faf0-1f3fd':0, '1faf0-1f3fe':0, '1faf0-1f3ff':0, '1faf1-1f3fb':0, '1faf1-1f3fc':0, '1faf1-1f3fd':0, '1faf1-1f3fe':0, '1faf1-1f3ff':0, '1faf2-1f3fb':0, '1faf2-1f3fc':0, '1faf2-1f3fd':0, '1faf2-1f3fe':0, '1faf2-1f3ff':0, '1faf3-1f3fb':0, '1faf3-1f3fc':0, '1faf3-1f3fd':0, '1faf3-1f3fe':0, '1faf3-1f3ff':0, '1faf4-1f3fb':0, '1faf4-1f3fc':0, '1faf4-1f3fd':0, '1faf4-1f3fe':0, '1faf4-1f3ff':0, '1faf5-1f3fb':0, '1faf5-1f3fc':0, '1faf5-1f3fd':0, '1faf5-1f3fe':0, '1faf5-1f3ff':0, '1faf6-1f3fb':0, '1faf6-1f3fc':0, '1faf6-1f3fd':0, '1faf6-1f3fe':0, '1faf6-1f3ff':0}, '':{'2049':62835, '2122':62863, '2139':62888, '2194':62764, '2195':62763, '2196':62762, '2197':62756, '2198':62758, '2199':62760, '2328':61194, '2600':4990, '2601':4998, '2602':41013, '2603':41018, '2604':41020, '2611':62851, '2614':41014, '2615':3781, '2618':2667, '2620':1106, '2622':62753, '2623':62754, '2626':62783, '2638':62780, '2639':177, '2648':62788, '2649':62789, '2650':62796, '2651':62797, '2652':62798, '2653':62799, '2660':51095, '2663':51098, '2665':51096, '2666':51097, '2668':4865, '2692':61297, '2693':4922, '2694':61300, '2696':61311, '2697':61319, '2699':61309, '2702':61284, '2705':62850, '2708':4931, '2709':61245, '2712':61259, '2714':62852, '2716':62828, '2721':62779, '2728':51029, '2733':62858, '2734':62859, '2744':41017, '2747':62860, '2753':62836, '2754':62837, '2755':62838, '2757':62839, '2763':1137, '2764':1141, '2795':62829, '2796':62830, '2797':62831, '2934':62767, '2935':62768, '3030':62840, '3297':62912, '3299':62913, '0023-20e3':62864, '002a-20e3':62865, '0030-20e3':62866, '0031-20e3':62867, '0032-20e3':62868, '0033-20e3':62869, '0034-20e3':62870, '0035-20e3':62871, '0036-20e3':62872, '0037-20e3':62873, '0038-20e3':62874, '0039-20e3':62875, '00a9':62861, '00ae':62862, '1f004':51101, '1f0cf':51100, '1f170':62882, '1f171':62884, '1f17e':62893, '1f17f':62895, '1f18e':62883, '1f191':62885, '1f192':62886, '1f193':62887, '1f194':62889, '1f195':62891, '1f196':62892, '1f197':62894, '1f198':62896, '1f199':62897, '1f19a':62898, '1f1e6-1f1e8':71594, '1f1e6-1f1e9':71595, '1f1e6-1f1ea':71596, '1f1e6-1f1eb':71597, '1f1e6-1f1ec':71598, '1f1e6-1f1ee':71599, '1f1e6-1f1f1':71600, '1f1e6-1f1f2':71601, '1f1e6-1f1f4':71602, '1f1e6-1f1f6':71603, '1f1e6-1f1f7':71604, '1f1e6-1f1f8':71605, '1f1e6-1f1f9':71606, '1f1e6-1f1fa':71607, '1f1e6-1f1fc':71608, '1f1e6-1f1fd':71609, '1f1e6-1f1ff':71610, '1f1e7-1f1e6':71611, '1f1e7-1f1e7':71612, '1f1e7-1f1e9':71613, '1f1e7-1f1ea':71614, '1f1e7-1f1eb':71615, '1f1e7-1f1ec':71616, '1f1e7-1f1ed':71617, '1f1e7-1f1ee':71618, '1f1e7-1f1ef':71619, '1f1e7-1f1f1':71620, '1f1e7-1f1f2':71621, '1f1e7-1f1f3':71622, '1f1e7-1f1f4':71623, '1f1e7-1f1f6':71624, '1f1e7-1f1f7':71625, '1f1e7-1f1f8':71626, '1f1e7-1f1f9':71627, '1f1e7-1f1fb':71628, '1f1e7-1f1fc':71629, '1f1e7-1f1fe':71630, '1f1e7-1f1ff':71631, '1f1e8-1f1e6':71632, '1f1e8-1f1e8':71633, '1f1e8-1f1e9':71634, '1f1e8-1f1eb':71635, '1f1e8-1f1ec':71636, '1f1e8-1f1ed':71637, '1f1e8-1f1ee':71638, '1f1e8-1f1f0':71639, '1f1e8-1f1f1':71640, '1f1e8-1f1f2':71641, '1f1e8-1f1f3':71642, '1f1e8-1f1f4':71643, '1f1e8-1f1f5':71644, '1f1e8-1f1f7':71645, '1f1e8-1f1fa':71646, '1f1e8-1f1fb':71647, '1f1e8-1f1fc':71648, '1f1e8-1f1fd':71649, '1f1e8-1f1fe':71650, '1f1e8-1f1ff':71651, '1f1e9-1f1ea':71652, '1f1e9-1f1ec':71653, '1f1e9-1f1ef':71654, '1f1e9-1f1f0':71655, '1f1e9-1f1f2':71656, '1f1e9-1f1f4':71657, '1f1e9-1f1ff':71658, '1f1ea-1f1e6':71659, '1f1ea-1f1e8':71660, '1f1ea-1f1ea':71661, '1f1ea-1f1ec':71662, '1f1ea-1f1ed':71663, '1f1ea-1f1f7':71664, '1f1ea-1f1f8':71665, '1f1ea-1f1f9':71666, '1f1ea-1f1fa':71667, '1f1eb-1f1ee':71668, '1f1eb-1f1ef':71669, '1f1eb-1f1f0':71670, '1f1eb-1f1f2':71671, '1f1eb-1f1f4':71672, '1f1eb-1f1f7':71673, '1f1ec-1f1e6':71674, '1f1ec-1f1e7':71675, '1f1ec-1f1e9':71676, '1f1ec-1f1ea':71677, '1f1ec-1f1eb':71678, '1f1ec-1f1ec':71679, '1f1ec-1f1ed':71680, '1f1ec-1f1ee':71681, '1f1ec-1f1f1':71682, '1f1ec-1f1f2':71683, '1f1ec-1f1f3':71684, '1f1ec-1f1f5':71685, '1f1ec-1f1f6':71686, '1f1ec-1f1f7':71687, '1f1ec-1f1f8':71688, '1f1ec-1f1f9':71689, '1f1ec-1f1fa':71690, '1f1ec-1f1fc':71691, '1f1ec-1f1fe':71692, '1f1ed-1f1f0':71693, '1f1ed-1f1f2':71694, '1f1ed-1f1f3':71695, '1f1ed-1f1f7':71696, '1f1ed-1f1f9':71697, '1f1ed-1f1fa':71698, '1f1ee-1f1e8':71699, '1f1ee-1f1e9':71700, '1f1ee-1f1ea':71701, '1f1ee-1f1f1':71702, '1f1ee-1f1f2':71703, '1f1ee-1f1f3':71704, '1f1ee-1f1f4':71705, '1f1ee-1f1f6':71706, '1f1ee-1f1f7':71707, '1f1ee-1f1f8':71708, '1f1ee-1f1f9':71709, '1f1ef-1f1ea':71710, '1f1ef-1f1f2':71711, '1f1ef-1f1f4':71712, '1f1ef-1f1f5':71713, '1f1f0-1f1ea':71714, '1f1f0-1f1ec':71715, '1f1f0-1f1ed':71716, '1f1f0-1f1ee':71717, '1f1f0-1f1f2':71718, '1f1f0-1f1f3':71719, '1f1f0-1f1f5':71720, '1f1f0-1f1f7':71721, '1f1f0-1f1fc':71722, '1f1f0-1f1fe':71723, '1f1f0-1f1ff':71724, '1f1f1-1f1e6':71725, '1f1f1-1f1e7':71726, '1f1f1-1f1e8':71727, '1f1f1-1f1ee':71728, '1f1f1-1f1f0':71729, '1f1f1-1f1f7':71730, '1f1f1-1f1f8':71731, '1f1f1-1f1f9':71732, '1f1f1-1f1fa':71733, '1f1f1-1f1fb':71734, '1f1f1-1f1fe':71735, '1f1f2-1f1e6':71736, '1f1f2-1f1e8':71737, '1f1f2-1f1e9':71738, '1f1f2-1f1ea':71739, '1f1f2-1f1eb':71740, '1f1f2-1f1ec':71741, '1f1f2-1f1ed':71742, '1f1f2-1f1f0':71743, '1f1f2-1f1f1':71744, '1f1f2-1f1f2':71745, '1f1f2-1f1f3':71746, '1f1f2-1f1f4':71747, '1f1f2-1f1f5':71748, '1f1f2-1f1f6':71749, '1f1f2-1f1f7':71750, '1f1f2-1f1f8':71751, '1f1f2-1f1f9':71752, '1f1f2-1f1fa':71753, '1f1f2-1f1fb':71754, '1f1f2-1f1fc':71755, '1f1f2-1f1fd':71756, '1f1f2-1f1fe':71757, '1f1f2-1f1ff':71758, '1f1f3-1f1e6':71759, '1f1f3-1f1e8':71760, '1f1f3-1f1ea':71761, '1f1f3-1f1eb':71762, '1f1f3-1f1ec':71763, '1f1f3-1f1ee':71764, '1f1f3-1f1f1':71765, '1f1f3-1f1f4':71766, '1f1f3-1f1f5':71767, '1f1f3-1f1f7':71768, '1f1f3-1f1fa':71769, '1f1f3-1f1ff':71770, '1f1f4-1f1f2':71771, '1f1f5-1f1e6':71772, '1f1f5-1f1ea':71773, '1f1f5-1f1eb':71774, '1f1f5-1f1ec':71775, '1f1f5-1f1ed':71776, '1f1f5-1f1f0':71777, '1f1f5-1f1f1':71778, '1f1f5-1f1f2':71779, '1f1f5-1f1f3':71780, '1f1f5-1f1f7':71781, '1f1f5-1f1f8':71782, '1f1f5-1f1f9':71783, '1f1f5-1f1fc':71784, '1f1f5-1f1fe':71785, '1f1f6-1f1e6':71786, '1f1f7-1f1ea':71787, '1f1f7-1f1f4':71788, '1f1f7-1f1f8':71789, '1f1f7-1f1fa':71790, '1f1f7-1f1fc':71791, '1f1f8-1f1e6':71792, '1f1f8-1f1e7':71793, '1f1f8-1f1e8':71794, '1f1f8-1f1e9':71795, '1f1f8-1f1ea':71796, '1f1f8-1f1ec':71797, '1f1f8-1f1ed':71798, '1f1f8-1f1ee':71799, '1f1f8-1f1ef':71800, '1f1f8-1f1f0':71801, '1f1f8-1f1f1':71802, '1f1f8-1f1f2':71803, '1f1f8-1f1f3':71804, '1f1f8-1f1f4':71805, '1f1f8-1f1f7':71806, '1f1f8-1f1f8':71807, '1f1f8-1f1f9':71808, '1f1f8-1f1fb':71809, '1f1f8-1f1fd':71810, '1f1f8-1f1fe':71811, '1f1f8-1f1ff':71812, '1f1f9-1f1e6':71813, '1f1f9-1f1e8':71814, '1f1f9-1f1e9':71815, '1f1f9-1f1eb':71816, '1f1f9-1f1ec':71817, '1f1f9-1f1ed':71818, '1f1f9-1f1ef':71819, '1f1f9-1f1f0':71820, '1f1f9-1f1f1':71821, '1f1f9-1f1f2':71822, '1f1f9-1f1f3':71823, '1f1f9-1f1f4':71824, '1f1f9-1f1f7':71825, '1f1f9-1f1f9':71826, '1f1f9-1f1fb':71827, '1f1f9-1f1fc':71828, '1f1f9-1f1ff':71829, '1f1fa-1f1e6':71830, '1f1fa-1f1ec':71831, '1f1fa-1f1f2':71832, '1f1fa-1f1f3':71833, '1f1fa-1f1f8':71834, '1f1fa-1f1fe':71835, '1f1fa-1f1ff':71836, '1f1fb-1f1e6':71837, '1f1fb-1f1e8':71838, '1f1fb-1f1ea':71839, '1f1fb-1f1ec':71840, '1f1fb-1f1ee':71841, '1f1fb-1f1f3':71842, '1f1fb-1f1fa':71843, '1f1fc-1f1eb':71844, '1f1fc-1f1f8':71845, '1f1fd-1f1f0':71846, '1f1fe-1f1ea':71847, '1f1fe-1f1f9':71848, '1f1ff-1f1e6':71849, '1f1ff-1f1f2':71850, '1f1ff-1f1fc':71851, '1f201':62899, '1f202':62900, '1f21a':62906, '1f22f':62903, '1f232':62907, '1f233':62911, '1f234':62910, '1f235':62915, '1f236':62902, '1f237':62901, '1f238':62909, '1f239':62905, '1f23a':62914, '1f250':62904, '1f251':62908, '1f300':41010, '1f301':4857, '1f302':41012, '1f303':4858, '1f304':4860, '1f305':4861, '1f306':4862, '1f307':4863, '1f308':41011, '1f309':4864, '1f30a':41023, '1f30b':4815, '1f30c':4997, '1f30d':4806, '1f30e':4807, '1f30f':4808, '1f310':4809, '1f311':4977, '1f312':4978, '1f313':4979, '1f314':4980, '1f315':4981, '1f316':4982, '1f317':4983, '1f318':4984, '1f319':4985, '1f31a':4986, '1f31b':4987, '1f31c':4988, '1f31d':4991, '1f31e':4992, '1f31f':4995, '1f320':4996, '1f321':4989, '1f324':41001, '1f325':41002, '1f326':41003, '1f327':41004, '1f328':41005, '1f329':41006, '1f32a':41007, '1f32b':41008, '1f32c':41009, '1f32d':3725, '1f32e':3727, '1f32f':3728, '1f330':3708, '1f331':2659, '1f332':2661, '1f333':2662, '1f334':2663, '1f335':2664, '1f336':3698, '1f337':2658, '1f338':2649, '1f339':2653, '1f33a':2655, '1f33b':2656, '1f33c':2657, '1f33d':3697, '1f33e':2665, '1f33f':2666, '1f340':2668, '1f341':2669, '1f342':2670, '1f343':2671, '1f344':3705, '1f345':3690, '1f346':3694, '1f347':3674, '1f348':3675, '1f349':3676, '1f34a':3677, '1f34b':3678, '1f34c':3679, '1f34d':3680, '1f34e':3682, '1f34f':3683, '1f350':3684, '1f351':3685, '1f352':3686, '1f353':3687, '1f354':3722, '1f355':3724, '1f356':3718, '1f357':3719, '1f358':3744, '1f359':3745, '1f35a':3746, '1f35b':3747, '1f35c':3748, '1f35d':3749, '1f35e':3709, '1f35f':3723, '1f360':3750, '1f361':3756, '1f362':3751, '1f363':3752, '1f364':3753, '1f365':3754, '1f366':3765, '1f367':3766, '1f368':3767, '1f369':3768, '1f36a':3769, '1f36b':3774, '1f36c':3775, '1f36d':3776, '1f36e':3777, '1f36f':3778, '1f370':3771, '1f371':3743, '1f372':3735, '1f373':3733, '1f374':3801, '1f375':3783, '1f376':3784, '1f377':3786, '1f378':3787, '1f379':3788, '1f37a':3789, '1f37b':3790, '1f37c':3779, '1f37d':3800, '1f37e':3785, '1f37f':3739, '1f380':51040, '1f381':51041, '1f382':3770, '1f383':51024, '1f384':51025, '1f385':1527, '1f386':51026, '1f387':51027, '1f388':51030, '1f389':51031, '1f38a':51032, '1f38b':51033, '1f38c':71588, '1f38d':51034, '1f38e':51035, '1f38f':51036, '1f390':51037, '1f391':51038, '1f392':61134, '1f393':61147, '1f396':51045, '1f397':51042, '1f399':61167, '1f39a':61168, '1f39b':61169, '1f39e':61203, '1f39f':51043, '1f3a0':4866, '1f3a1':4868, '1f3a2':4869, '1f3a3':51072, '1f3a4':61170, '1f3a5':61202, '1f3a6':62819, '1f3a7':61171, '1f3a8':51105, '1f3a9':61146, '1f3aa':4871, '1f3ab':51044, '1f3ac':61205, '1f3ad':51103, '1f3ae':51086, '1f3af':51078, '1f3b0':51088, '1f3b1':51081, '1f3b2':51089, '1f3b3':51060, '1f3b4':51102, '1f3b5':61165, '1f3b6':61166, '1f3b7':61173, '1f3b8':61175, '1f3b9':61176, '1f3ba':61177, '1f3bb':61178, '1f3bc':61164, '1f3bd':51074, '1f3be':51058, '1f3bf':51075, '1f3c0':51054, '1f3c1':71586, '1f3c2':1600, '1f3c3-200d-2640':1584, '1f3c3-200d-2642':1583, '1f3c3':1582, '1f3c4-200d-2640':1606, '1f3c4-200d-2642':1605, '1f3c4':1604, '1f3c5':51047, '1f3c6':51046, '1f3c7':1598, '1f3c8':51056, '1f3c9':51057, '1f3ca-200d-2640':1612, '1f3ca-200d-2642':1611, '1f3ca':1610, '1f3cb-200d-2640':1618, '1f3cb-200d-2642':1617, '1f3cb':1616, '1f3cc-200d-2640':1603, '1f3cc-200d-2642':1602, '1f3cc':1601, '1f3cd':4902, '1f3ce':4901, '1f3cf':51061, '1f3d0':51055, '1f3d1':51062, '1f3d2':51063, '1f3d3':51065, '1f3d4':4813, '1f3d5':4817, '1f3d6':4818, '1f3d7':4824, '1f3d8':4829, '1f3d9':4859, '1f3da':4830, '1f3db':4823, '1f3dc':4819, '1f3dd':4820, '1f3de':4821, '1f3df':4822, '1f3e0':4831, '1f3e1':4832, '1f3e2':4833, '1f3e3':4834, '1f3e4':4835, '1f3e5':4836, '1f3e6':4837, '1f3e7':62729, '1f3e8':4838, '1f3e9':4839, '1f3ea':4840, '1f3eb':4841, '1f3ec':4842, '1f3ed':4843, '1f3ee':61216, '1f3ef':4844, '1f3f0':4845, '1f3f3-200d-1f308':71591, '1f3f3-200d-26a7':71592, '1f3f3':71590, '1f3f4-200d-2620':71593, '1f3f4-e0067-e0062-e0065-e006e-e0067-e007f':71852, '1f3f4-e0067-e0062-e0073-e0063-e0074-e007f':71853, '1f3f4-e0067-e0062-e0077-e006c-e0073-e007f':71854, '1f3f4':71589, '1f3f5':2652, '1f3f7':61234, '1f3f8':51066, '1f3f9':61303, '1f3fa':3805, '1f3fb':9525, '1f3fc':9526, '1f3fd':9527, '1f3fe':9528, '1f3ff':9529, '1f400':2576, '1f401':2575, '1f402':2556, '1f403':2557, '1f404':2558, '1f405':2547, '1f406':2548, '1f407':2579, '1f408-200d-2b1b':2544, '1f408':2543, '1f409':2618, '1f40a':2613, '1f40b':2622, '1f40c':2632, '1f40d':2616, '1f40e':2550, '1f40f':2563, '1f410':2565, '1f411':2564, '1f412':2531, '1f413':2596, '1f414':2595, '1f415-200d-1f9ba':2537, '1f415':2535, '1f416':2560, '1f417':2561, '1f418':2570, '1f419':2629, '1f41a':2630, '1f41b':2634, '1f41c':2635, '1f41d':2636, '1f41e':2638, '1f41f':2625, '1f420':2626, '1f421':2627, '1f422':2614, '1f423':2597, '1f424':2598, '1f425':2599, '1f426':2600, '1f427':2601, '1f428':2586, '1f429':2538, '1f42a':2566, '1f42b':2567, '1f42c':2623, '1f42d':2574, '1f42e':2555, '1f42f':2546, '1f430':2578, '1f431':2542, '1f432':2617, '1f433':2621, '1f434':2549, '1f435':2530, '1f436':2534, '1f437':2559, '1f438':2612, '1f439':2577, '1f43a':2539, '1f43b-200d-2744':2585, '1f43b':2584, '1f43c':2587, '1f43d':2562, '1f43e':2593, '1f43f':2580, '1f440':1381, '1f441-200d-1f5e8':1159, '1f441':1382, '1f442':1373, '1f443':1375, '1f444':1384, '1f445':1383, '1f446':1347, '1f447':1349, '1f448':1345, '1f449':1346, '1f44a':1355, '1f44b':1327, '1f44c':1336, '1f44d':1352, '1f44e':1353, '1f44f':1358, '1f450':1361, '1f451':61144, '1f452':61145, '1f453':61110, '1f454':61115, '1f455':61116, '1f456':61117, '1f457':61122, '1f458':61123, '1f459':61128, '1f45a':61129, '1f45b':61130, '1f45c':61131, '1f45d':61132, '1f45e':61136, '1f45f':61137, '1f460':61140, '1f461':61141, '1f462':61143, '1f463':1687, '1f464':1684, '1f465':1685, '1f466':1388, '1f467':1389, '1f468-200d-1f33e':1457, '1f468-200d-1f373':1460, '1f468-200d-1f37c':1524, '1f468-200d-1f393':1448, '1f468-200d-1f3a4':1478, '1f468-200d-1f3a8':1481, '1f468-200d-1f3eb':1451, '1f468-200d-1f3ed':1466, '1f468-200d-1f466-200d-1f466':1674, '1f468-200d-1f466':1673, '1f468-200d-1f467-200d-1f466':1676, '1f468-200d-1f467-200d-1f467':1677, '1f468-200d-1f467':1675, '1f468-200d-1f468-200d-1f466':1663, '1f468-200d-1f468-200d-1f466-200d-1f466':1666, '1f468-200d-1f468-200d-1f467':1664, '1f468-200d-1f468-200d-1f467-200d-1f466':1665, '1f468-200d-1f468-200d-1f467-200d-1f467':1667, '1f468-200d-1f469-200d-1f466':1658, '1f468-200d-1f469-200d-1f466-200d-1f466':1661, '1f468-200d-1f469-200d-1f467':1659, '1f468-200d-1f469-200d-1f467-200d-1f466':1660, '1f468-200d-1f469-200d-1f467-200d-1f467':1662, '1f468-200d-1f4bb':1475, '1f468-200d-1f4bc':1469, '1f468-200d-1f527':1463, '1f468-200d-1f52c':1472, '1f468-200d-1f680':1487, '1f468-200d-1f692':1490, '1f468-200d-1f9af':1574, '1f468-200d-1f9b0':1396, '1f468-200d-1f9b1':1397, '1f468-200d-1f9b2':1399, '1f468-200d-1f9b3':1398, '1f468-200d-1f9bc':1577, '1f468-200d-1f9bd':1580, '1f468-200d-2695':1445, '1f468-200d-2696':1454, '1f468-200d-2708':1484, '1f468-200d-2764-200d-1f468':1655, '1f468-200d-2764-200d-1f48b-200d-1f468':1651, '1f468':1392, '1f469-200d-1f33e':1458, '1f469-200d-1f373':1461, '1f469-200d-1f37c':1523, '1f469-200d-1f393':1449, '1f469-200d-1f3a4':1479, '1f469-200d-1f3a8':1482, '1f469-200d-1f3eb':1452, '1f469-200d-1f3ed':1467, '1f469-200d-1f466-200d-1f466':1679, '1f469-200d-1f466':1678, '1f469-200d-1f467-200d-1f466':1681, '1f469-200d-1f467-200d-1f467':1682, '1f469-200d-1f467':1680, '1f469-200d-1f469-200d-1f466':1668, '1f469-200d-1f469-200d-1f466-200d-1f466':1671, '1f469-200d-1f469-200d-1f467':1669, '1f469-200d-1f469-200d-1f467-200d-1f466':1670, '1f469-200d-1f469-200d-1f467-200d-1f467':1672, '1f469-200d-1f4bb':1476, '1f469-200d-1f4bc':1470, '1f469-200d-1f527':1464, '1f469-200d-1f52c':1473, '1f469-200d-1f680':1488, '1f469-200d-1f692':1491, '1f469-200d-1f9af':1575, '1f469-200d-1f9b0':1401, '1f469-200d-1f9b1':1403, '1f469-200d-1f9b2':1407, '1f469-200d-1f9b3':1405, '1f469-200d-1f9bc':1578, '1f469-200d-1f9bd':1581, '1f469-200d-2695':1446, '1f469-200d-2696':1455, '1f469-200d-2708':1485, '1f469-200d-2764-200d-1f468':1654, '1f469-200d-2764-200d-1f469':1656, '1f469-200d-2764-200d-1f48b-200d-1f468':1650, '1f469-200d-2764-200d-1f48b-200d-1f469':1652, '1f469':1400, '1f46a':1657, '1f46b':1647, '1f46c':1648, '1f46d':1646, '1f46e-200d-2640':1494, '1f46e-200d-2642':1493, '1f46e':1492, '1f46f-200d-2640':1590, '1f46f-200d-2642':1589, '1f46f':1588, '1f470-200d-2640':1518, '1f470-200d-2642':1517, '1f470':1516, '1f471-200d-2640':1409, '1f471-200d-2642':1410, '1f471':1391, '1f472':1511, '1f473-200d-2640':1510, '1f473-200d-2642':1509, '1f473':1508, '1f474':1412, '1f475':1413, '1f476':1386, '1f477-200d-2640':1504, '1f477-200d-2642':1503, '1f477':1502, '1f478':1507, '1f479':1109, '1f47a':1110, '1f47b':1111, '1f47c':1526, '1f47d':1112, '1f47e':1113, '1f47f':1104, '1f480':1105, '1f481-200d-2640':1428, '1f481-200d-2642':1427, '1f481':1426, '1f482-200d-2640':1500, '1f482-200d-2642':1499, '1f482':1498, '1f483':1585, '1f484':61152, '1f485':1366, '1f486-200d-2640':1560, '1f486-200d-2642':1559, '1f486':1558, '1f487-200d-2640':1563, '1f487-200d-2642':1562, '1f487':1561, '1f488':4870, '1f489':61326, '1f48a':61328, '1f48b':1127, '1f48c':1128, '1f48d':61153, '1f48e':61154, '1f48f':1649, '1f490':2648, '1f491':1653, '1f492':4846, '1f493':1133, '1f494':1138, '1f495':1135, '1f496':1131, '1f497':1132, '1f498':1129, '1f499':1145, '1f49a':1144, '1f49b':1143, '1f49c':1146, '1f49d':1130, '1f49e':1134, '1f49f':1136, '1f4a0':62946, '1f4a1':61214, '1f4a2':1151, '1f4a3':1157, '1f4a4':1163, '1f4a5':1152, '1f4a6':1154, '1f4a7':41022, '1f4a8':1155, '1f4a9':1107, '1f4aa':1368, '1f4ab':1153, '1f4ac':1158, '1f4ad':1162, '1f4ae':2650, '1f4af':1150, '1f4b0':61235, '1f4b1':62841, '1f4b2':62842, '1f4b3':61242, '1f4b4':61237, '1f4b5':61238, '1f4b6':61239, '1f4b7':61240, '1f4b8':61241, '1f4b9':61244, '1f4ba':4936, '1f4bb':61191, '1f4bc':61265, '1f4bd':61197, '1f4be':61198, '1f4bf':61199, '1f4c0':61200, '1f4c1':61266, '1f4c2':61267, '1f4c3':61227, '1f4c4':61229, '1f4c5':61269, '1f4c6':61270, '1f4c7':61273, '1f4c8':61274, '1f4c9':61275, '1f4ca':61276, '1f4cb':61277, '1f4cc':61278, '1f4cd':61279, '1f4ce':61280, '1f4cf':61282, '1f4d0':61283, '1f4d1':61232, '1f4d2':61226, '1f4d3':61225, '1f4d4':61218, '1f4d5':61219, '1f4d6':61220, '1f4d7':61221, '1f4d8':61222, '1f4d9':61223, '1f4da':61224, '1f4db':62847, '1f4dc':61228, '1f4dd':61264, '1f4de':61185, '1f4df':61186, '1f4e0':61187, '1f4e1':61325, '1f4e2':61159, '1f4e3':61160, '1f4e4':61249, '1f4e5':61250, '1f4e6':61251, '1f4e7':61246, '1f4e8':61247, '1f4e9':61248, '1f4ea':61253, '1f4eb':61252, '1f4ec':61254, '1f4ed':61255, '1f4ee':61256, '1f4ef':61161, '1f4f0':61230, '1f4f1':61182, '1f4f2':61183, '1f4f3':62823, '1f4f4':62824, '1f4f5':62751, '1f4f6':62822, '1f4f7':61207, '1f4f8':61208, '1f4f9':61209, '1f4fa':61206, '1f4fb':61172, '1f4fc':61210, '1f4fd':61204, '1f4ff':61151, '1f500':62801, '1f501':62802, '1f502':62803, '1f503':62769, '1f504':62770, '1f505':62820, '1f506':62821, '1f507':61155, '1f508':61156, '1f509':61157, '1f50a':61158, '1f50b':61188, '1f50c':61190, '1f50d':61211, '1f50e':61212, '1f50f':61290, '1f510':61291, '1f511':61292, '1f512':61288, '1f513':61289, '1f514':61162, '1f515':61163, '1f516':61233, '1f517':61313, '1f518':62947, '1f519':62771, '1f51a':62772, '1f51b':62773, '1f51c':62774, '1f51d':62775, '1f51e':62752, '1f51f':62876, '1f520':62877, '1f521':62878, '1f522':62879, '1f523':62880, '1f524':62881, '1f525':41021, '1f526':61215, '1f527':61306, '1f528':61294, '1f529':61308, '1f52a':3803, '1f52b':61301, '1f52c':61323, '1f52d':61324, '1f52e':51082, '1f52f':62787, '1f530':62848, '1f531':62846, '1f532':62949, '1f533':62948, '1f534':62916, '1f535':62920, '1f536':62940, '1f537':62941, '1f538':62942, '1f539':62943, '1f53a':62944, '1f53b':62945, '1f53c':62811, '1f53d':62813, '1f549':62778, '1f54a':2602, '1f54b':4854, '1f54c':4850, '1f54d':4852, '1f54e':62786, '1f550':4955, '1f551':4957, '1f552':4959, '1f553':4961, '1f554':4963, '1f555':4965, '1f556':4967, '1f557':4969, '1f558':4971, '1f559':4973, '1f55a':4975, '1f55b':4953, '1f55c':4956, '1f55d':4958, '1f55e':4960, '1f55f':4962, '1f560':4964, '1f561':4966, '1f562':4968, '1f563':4970, '1f564':4972, '1f565':4974, '1f566':4976, '1f567':4954, '1f56f':61213, '1f570':4952, '1f573':1156, '1f574':1587, '1f575-200d-2640':1497, '1f575-200d-2642':1496, '1f575':1495, '1f576':61111, '1f577':2641, '1f578':2642, '1f579':51087, '1f57a':1586, '1f587':61281, '1f58a':61261, '1f58b':61260, '1f58c':61262, '1f58d':61263, '1f590':1329, '1f595':1348, '1f596':1331, '1f5a4':1148, '1f5a5':61192, '1f5a8':61193, '1f5b1':61195, '1f5b2':61196, '1f5bc':51104, '1f5c2':61268, '1f5c3':61285, '1f5c4':61286, '1f5d1':61287, '1f5d2':61271, '1f5d3':61272, '1f5dc':61310, '1f5dd':61293, '1f5de':61231, '1f5e1':61299, '1f5e3':1683, '1f5e8':1160, '1f5ef':1161, '1f5f3':61257, '1f5fa':4810, '1f5fb':4816, '1f5fc':4847, '1f5fd':4848, '1f5fe':4811, '1f5ff':61362, '1f600':11, '1f601':14, '1f602':18, '1f603':12, '1f604':13, '1f605':16, '1f606':15, '1f607':114, '1f608':1103, '1f609':112, '1f60a':113, '1f60b':124, '1f60c':150, '1f60d':116, '1f60e':170, '1f60f':144, '1f610':139, '1f611':140, '1f612':145, '1f613':195, '1f614':151, '1f615':173, '1f616':192, '1f617':119, '1f618':118, '1f619':122, '1f61a':121, '1f61b':125, '1f61c':126, '1f61d':128, '1f61e':194, '1f61f':175, '1f620':1101, '1f621':1100, '1f622':189, '1f623':193, '1f624':199, '1f625':188, '1f626':184, '1f627':185, '1f628':186, '1f629':196, '1f62a':152, '1f62b':197, '1f62c':147, '1f62d':190, '1f62e-200d-1f4a8':148, '1f62e':178, '1f62f':179, '1f630':187, '1f631':191, '1f632':180, '1f633':181, '1f634':154, '1f635-200d-1f4ab':165, '1f635':164, '1f636-200d-1f32b':143, '1f636':141, '1f637':155, '1f638':1116, '1f639':1117, '1f63a':1115, '1f63b':1118, '1f63c':1119, '1f63d':1120, '1f63e':1123, '1f63f':1122, '1f640':1121, '1f641':176, '1f642':19, '1f643':110, '1f644':146, '1f645-200d-2640':1422, '1f645-200d-2642':1421, '1f645':1420, '1f646-200d-2640':1425, '1f646-200d-2642':1424, '1f646':1423, '1f647-200d-2640':1437, '1f647-200d-2642':1436, '1f647':1435, '1f648':1124, '1f649':1125, '1f64a':1126, '1f64b-200d-2640':1431, '1f64b-200d-2642':1430, '1f64b':1429, '1f64c':1359, '1f64d-200d-2640':1416, '1f64d-200d-2642':1415, '1f64d':1414, '1f64e-200d-2640':1419, '1f64e-200d-2642':1418, '1f64e':1417, '1f64f':1364, '1f680':4942, '1f681':4937, '1f682':4872, '1f683':4873, '1f684':4874, '1f685':4875, '1f686':4876, '1f687':4877, '1f688':4878, '1f689':4879, '1f68a':4880, '1f68b':4883, '1f68c':4884, '1f68d':4885, '1f68e':4886, '1f68f':4911, '1f690':4887, '1f691':4888, '1f692':4889, '1f693':4890, '1f694':4891, '1f695':4892, '1f696':4893, '1f697':4894, '1f698':4895, '1f699':4896, '1f69a':4898, '1f69b':4899, '1f69c':4900, '1f69d':4881, '1f69e':4882, '1f69f':4938, '1f6a0':4939, '1f6a1':4940, '1f6a2':4930, '1f6a3-200d-2640':1609, '1f6a3-200d-2642':1608, '1f6a3':1607, '1f6a4':4926, '1f6a5':4918, '1f6a6':4919, '1f6a7':4921, '1f6a8':4917, '1f6a9':71587, '1f6aa':61333, '1f6ab':62745, '1f6ac':61358, '1f6ad':62747, '1f6ae':62730, '1f6af':62748, '1f6b0':62731, '1f6b1':62749, '1f6b2':4907, '1f6b3':62746, '1f6b4-200d-2640':1621, '1f6b4-200d-2642':1620, '1f6b4':1619, '1f6b5-200d-2640':1624, '1f6b5-200d-2642':1623, '1f6b5':1622, '1f6b6-200d-2640':1566, '1f6b6-200d-2642':1565, '1f6b6':1564, '1f6b7':62750, '1f6b8':62743, '1f6b9':62733, '1f6ba':62734, '1f6bb':62735, '1f6bc':62736, '1f6bd':61340, '1f6be':62737, '1f6bf':61342, '1f6c0':1643, '1f6c1':61343, '1f6c2':62738, '1f6c3':62739, '1f6c4':62740, '1f6c5':62741, '1f6cb':61338, '1f6cc':1644, '1f6cd':61133, '1f6ce':4944, '1f6cf':61337, '1f6d0':62776, '1f6d1':4920, '1f6d2':61357, '1f6d5':4851, '1f6d6':4828, '1f6d7':61334, '1f6e0':61298, '1f6e1':61304, '1f6e2':4914, '1f6e3':4912, '1f6e4':4913, '1f6e5':4929, '1f6e9':4932, '1f6eb':4933, '1f6ec':4934, '1f6f0':4941, '1f6f3':4927, '1f6f4':4908, '1f6f5':4903, '1f6f6':4925, '1f6f7':51076, '1f6f8':4943, '1f6f9':4909, '1f6fa':4906, '1f6fb':4897, '1f6fc':4910, '1f7e0':62917, '1f7e1':62918, '1f7e2':62919, '1f7e3':62921, '1f7e4':62922, '1f7e5':62925, '1f7e6':62929, '1f7e7':62926, '1f7e8':62927, '1f7e9':62928, '1f7ea':62930, '1f7eb':62931, '1f90c':1337, '1f90d':1149, '1f90e':1147, '1f90f':1338, '1f910':137, '1f911':129, '1f912':156, '1f913':171, '1f914':135, '1f915':157, '1f916':1114, '1f917':130, '1f918':1343, '1f919':1344, '1f91a':1328, '1f91b':1356, '1f91c':1357, '1f91d':1363, '1f91e':1340, '1f91f':1342, '1f920':167, '1f921':1108, '1f922':158, '1f923':17, '1f924':153, '1f925':149, '1f926-200d-2640':1440, '1f926-200d-2642':1439, '1f926':1438, '1f927':160, '1f928':138, '1f929':117, '1f92a':127, '1f92b':134, '1f92c':1102, '1f92d':131, '1f92e':159, '1f92f':166, '1f930':1519, '1f931':1522, '1f932':1362, '1f933':1367, '1f934':1506, '1f935-200d-2640':1515, '1f935-200d-2642':1514, '1f935':1513, '1f936':1528, '1f937-200d-2640':1443, '1f937-200d-2642':1442, '1f937':1441, '1f938-200d-2640':1627, '1f938-200d-2642':1626, '1f938':1625, '1f939-200d-2640':1639, '1f939-200d-2642':1638, '1f939':1637, '1f93a':1597, '1f93c-200d-2640':1630, '1f93c-200d-2642':1629, '1f93c':1628, '1f93d-200d-2640':1633, '1f93d-200d-2642':1632, '1f93d':1631, '1f93e-200d-2640':1636, '1f93e-200d-2642':1635, '1f93e':1634, '1f93f':51073, '1f940':2654, '1f941':61180, '1f942':3791, '1f943':3792, '1f944':3802, '1f945':51069, '1f947':51048, '1f948':51049, '1f949':51050, '1f94a':51067, '1f94b':51068, '1f94c':51077, '1f94d':51064, '1f94e':51053, '1f94f':51059, '1f950':3710, '1f951':3693, '1f952':3700, '1f953':3721, '1f954':3695, '1f955':3696, '1f956':3711, '1f957':3738, '1f958':3734, '1f959':3730, '1f95a':3732, '1f95b':3780, '1f95c':3706, '1f95d':3689, '1f95e':3715, '1f95f':3757, '1f960':3758, '1f961':3759, '1f962':3799, '1f963':3737, '1f964':3794, '1f965':3692, '1f966':3702, '1f967':3773, '1f968':3713, '1f969':3720, '1f96a':3726, '1f96b':3742, '1f96c':3701, '1f96d':3681, '1f96e':3755, '1f96f':3714, '1f970':115, '1f971':198, '1f972':123, '1f973':168, '1f974':163, '1f975':161, '1f976':162, '1f977':1501, '1f978':169, '1f97a':182, '1f97b':61124, '1f97c':61113, '1f97d':61112, '1f97e':61138, '1f97f':61139, '1f980':3760, '1f981':2545, '1f982':2643, '1f983':2594, '1f984':2551, '1f985':2603, '1f986':2604, '1f987':2583, '1f988':2628, '1f989':2606, '1f98a':2540, '1f98b':2633, '1f98c':2553, '1f98d':2532, '1f98e':2615, '1f98f':2572, '1f990':3762, '1f991':3763, '1f992':2569, '1f993':2552, '1f994':2582, '1f995':2619, '1f996':2620, '1f997':2639, '1f998':2591, '1f999':2568, '1f99a':2610, '1f99b':2573, '1f99c':2611, '1f99d':2541, '1f99e':3761, '1f99f':2644, '1f9a0':2647, '1f9a1':2592, '1f9a2':2605, '1f9a3':2571, '1f9a4':2607, '1f9a5':2588, '1f9a6':2589, '1f9a7':2533, '1f9a8':2590, '1f9a9':2609, '1f9aa':3764, '1f9ab':2581, '1f9ac':2554, '1f9ad':2624, '1f9ae':2536, '1f9af':61312, '1f9b4':1380, '1f9b5':1371, '1f9b6':1372, '1f9b7':1379, '1f9b8-200d-2640':1532, '1f9b8-200d-2642':1531, '1f9b8':1530, '1f9b9-200d-2640':1535, '1f9b9-200d-2642':1534, '1f9b9':1533, '1f9ba':61114, '1f9bb':1374, '1f9bc':4905, '1f9bd':4904, '1f9be':1369, '1f9bf':1370, '1f9c0':3717, '1f9c1':3772, '1f9c2':3741, '1f9c3':3796, '1f9c4':3703, '1f9c5':3704, '1f9c6':3731, '1f9c7':3716, '1f9c8':3740, '1f9c9':3797, '1f9ca':3798, '1f9cb':3795, '1f9cd-200d-2640':1569, '1f9cd-200d-2642':1568, '1f9cd':1567, '1f9ce-200d-2640':1572, '1f9ce-200d-2642':1571, '1f9ce':1570, '1f9cf-200d-2640':1434, '1f9cf-200d-2642':1433, '1f9cf':1432, '1f9d0':172, '1f9d1-200d-1f33e':1456, '1f9d1-200d-1f373':1459, '1f9d1-200d-1f37c':1525, '1f9d1-200d-1f384':1529, '1f9d1-200d-1f393':1447, '1f9d1-200d-1f3a4':1477, '1f9d1-200d-1f3a8':1480, '1f9d1-200d-1f3eb':1450, '1f9d1-200d-1f3ed':1465, '1f9d1-200d-1f4bb':1474, '1f9d1-200d-1f4bc':1468, '1f9d1-200d-1f527':1462, '1f9d1-200d-1f52c':1471, '1f9d1-200d-1f680':1486, '1f9d1-200d-1f692':1489, '1f9d1-200d-1f91d-200d-1f9d1':1645, '1f9d1-200d-1f9af':1573, '1f9d1-200d-1f9b0':1402, '1f9d1-200d-1f9b1':1404, '1f9d1-200d-1f9b2':1408, '1f9d1-200d-1f9b3':1406, '1f9d1-200d-1f9bc':1576, '1f9d1-200d-1f9bd':1579, '1f9d1-200d-2695':1444, '1f9d1-200d-2696':1453, '1f9d1-200d-2708':1483, '1f9d1':1390, '1f9d2':1387, '1f9d3':1411, '1f9d4-200d-2640':1395, '1f9d4-200d-2642':1394, '1f9d4':1393, '1f9d5':1512, '1f9d6-200d-2640':1593, '1f9d6-200d-2642':1592, '1f9d6':1591, '1f9d7-200d-2640':1596, '1f9d7-200d-2642':1595, '1f9d7':1594, '1f9d8-200d-2640':1642, '1f9d8-200d-2642':1641, '1f9d8':1640, '1f9d9-200d-2640':1538, '1f9d9-200d-2642':1537, '1f9d9':1536, '1f9da-200d-2640':1541, '1f9da-200d-2642':1540, '1f9da':1539, '1f9db-200d-2640':1544, '1f9db-200d-2642':1543, '1f9db':1542, '1f9dc-200d-2640':1547, '1f9dc-200d-2642':1546, '1f9dc':1545, '1f9dd-200d-2640':1550, '1f9dd-200d-2642':1549, '1f9dd':1548, '1f9de-200d-2640':1553, '1f9de-200d-2642':1552, '1f9de':1551, '1f9df-200d-2640':1556, '1f9df-200d-2642':1555, '1f9df':1554, '1f9e0':1376, '1f9e1':1142, '1f9e2':61148, '1f9e3':61118, '1f9e4':61119, '1f9e5':61120, '1f9e6':61121, '1f9e7':51039, '1f9e8':51028, '1f9e9':51090, '1f9ea':61320, '1f9eb':61321, '1f9ec':61322, '1f9ed':4812, '1f9ee':61201, '1f9ef':61356, '1f9f0':61316, '1f9f1':4825, '1f9f2':61317, '1f9f3':4945, '1f9f4':61346, '1f9f5':51106, '1f9f6':51108, '1f9f7':61347, '1f9f8':51091, '1f9f9':61348, '1f9fa':61349, '1f9fb':61350, '1f9fc':61352, '1f9fd':61355, '1f9fe':61243, '1f9ff':51084, '1fa70':61142, '1fa71':61125, '1fa72':61126, '1fa73':61127, '1fa74':61135, '1fa78':61327, '1fa79':61329, '1fa7a':61331, '1fa80':51079, '1fa81':51080, '1fa82':4935, '1fa83':61302, '1fa84':51083, '1fa85':51092, '1fa86':51094, '1fa90':4993, '1fa91':61339, '1fa92':61345, '1fa93':61295, '1fa94':61217, '1fa95':61179, '1fa96':61149, '1fa97':61174, '1fa98':61181, '1fa99':61236, '1fa9a':61305, '1fa9b':61307, '1fa9c':61318, '1fa9d':61315, '1fa9e':61335, '1fa9f':61336, '1faa0':61341, '1faa1':51107, '1faa2':51109, '1faa3':61351, '1faa4':61344, '1faa5':61354, '1faa6':61360, '1faa7':61363, '1faa8':4826, '1fab0':2645, '1fab1':2646, '1fab2':2637, '1fab3':2640, '1fab4':2660, '1fab5':4827, '1fab6':2608, '1fac0':1377, '1fac1':1378, '1fac2':1686, '1fad0':3688, '1fad1':3699, '1fad2':3691, '1fad3':3712, '1fad4':3729, '1fad5':3736, '1fad6':3782, '203c':62834, '21a9':62765, '21aa':62766, '231a':4948, '231b':4946, '23cf':62818, '23e9':62805, '23ea':62809, '23eb':62812, '23ec':62814, '23ed':62806, '23ee':62810, '23ef':62807, '23f0':4949, '23f1':4950, '23f2':4951, '23f3':4947, '23f8':62815, '23f9':62816, '23fa':62817, '24c2':62890, '25aa':62938, '25ab':62939, '25b6':62804, '25c0':62808, '25fb':62935, '25fc':62934, '25fd':62937, '25fe':62936, '260e':61184, '261d':1350, '262a':62784, '262e':62785, '262f':62781, '263a':120, '264a':62790, '264b':62791, '264c':62792, '264d':62793, '264e':62794, '264f':62795, '265f':51099, '267b':62844, '267e':62833, '267f':62732, '269b':62777, '269c':62845, '26a0':62742, '26a1':41016, '26a7':62827, '26aa':62924, '26ab':62923, '26b0':61359, '26b1':61361, '26bd':51051, '26be':51052, '26c4':41019, '26c5':4999, '26c8':41000, '26ce':62800, '26cf':61296, '26d1':61150, '26d3':61314, '26d4':62744, '26e9':4853, '26ea':4849, '26f0':4814, '26f1':41015, '26f2':4855, '26f3':51070, '26f4':4928, '26f5':4924, '26f7':1599, '26f8':51071, '26f9-200d-2640':1615, '26f9-200d-2642':1614, '26f9':1613, '26fa':4856, '26fd':4915, '270a':1354, '270b':1330, '270c':1339, '270d':1365, '270f':61258, '271d':62782, '274c':62853, '274e':62854, '2764-200d-1f525':1139, '2764-200d-1fa79':1140, '27a1':62757, '27b0':62855, '27bf':62856, '2b05':62761, '2b06':62755, '2b07':62759, '2b1b':62932, '2b1c':62933, '2b50':4994, '2b55':62849, '303d':62857, '1f385-1f3fb':0, '1f385-1f3fc':0, '1f385-1f3fd':0, '1f385-1f3fe':0, '1f385-1f3ff':0, '1f3c2-1f3fb':0, '1f3c2-1f3fc':0, '1f3c2-1f3fd':0, '1f3c2-1f3fe':0, '1f3c2-1f3ff':0, '1f3c3-1f3fb-200d-2640':0, '1f3c3-1f3fc-200d-2640':0, '1f3c3-1f3fd-200d-2640':0, '1f3c3-1f3fe-200d-2640':0, '1f3c3-1f3ff-200d-2640':0, '1f3c3-1f3fb-200d-2642':0, '1f3c3-1f3fc-200d-2642':0, '1f3c3-1f3fd-200d-2642':0, '1f3c3-1f3fe-200d-2642':0, '1f3c3-1f3ff-200d-2642':0, '1f3c3-1f3fb':0, '1f3c3-1f3fc':0, '1f3c3-1f3fd':0, '1f3c3-1f3fe':0, '1f3c3-1f3ff':0, '1f3c4-1f3fb-200d-2640':0, '1f3c4-1f3fc-200d-2640':0, '1f3c4-1f3fd-200d-2640':0, '1f3c4-1f3fe-200d-2640':0, '1f3c4-1f3ff-200d-2640':0, '1f3c4-1f3fb-200d-2642':0, '1f3c4-1f3fc-200d-2642':0, '1f3c4-1f3fd-200d-2642':0, '1f3c4-1f3fe-200d-2642':0, '1f3c4-1f3ff-200d-2642':0, '1f3c4-1f3fb':0, '1f3c4-1f3fc':0, '1f3c4-1f3fd':0, '1f3c4-1f3fe':0, '1f3c4-1f3ff':0, '1f3c7-1f3fb':0, '1f3c7-1f3fc':0, '1f3c7-1f3fd':0, '1f3c7-1f3fe':0, '1f3c7-1f3ff':0, '1f3ca-1f3fb-200d-2640':0, '1f3ca-1f3fc-200d-2640':0, '1f3ca-1f3fd-200d-2640':0, '1f3ca-1f3fe-200d-2640':0, '1f3ca-1f3ff-200d-2640':0, '1f3ca-1f3fb-200d-2642':0, '1f3ca-1f3fc-200d-2642':0, '1f3ca-1f3fd-200d-2642':0, '1f3ca-1f3fe-200d-2642':0, '1f3ca-1f3ff-200d-2642':0, '1f3ca-1f3fb':0, '1f3ca-1f3fc':0, '1f3ca-1f3fd':0, '1f3ca-1f3fe':0, '1f3ca-1f3ff':0, '1f3cb-1f3fb-200d-2640':0, '1f3cb-1f3fc-200d-2640':0, '1f3cb-1f3fd-200d-2640':0, '1f3cb-1f3fe-200d-2640':0, '1f3cb-1f3ff-200d-2640':0, '1f3cb-1f3fb-200d-2642':0, '1f3cb-1f3fc-200d-2642':0, '1f3cb-1f3fd-200d-2642':0, '1f3cb-1f3fe-200d-2642':0, '1f3cb-1f3ff-200d-2642':0, '1f3cb-1f3fb':0, '1f3cb-1f3fc':0, '1f3cb-1f3fd':0, '1f3cb-1f3fe':0, '1f3cb-1f3ff':0, '1f3cc-1f3fb-200d-2640':0, '1f3cc-1f3fc-200d-2640':0, '1f3cc-1f3fd-200d-2640':0, '1f3cc-1f3fe-200d-2640':0, '1f3cc-1f3ff-200d-2640':0, '1f3cc-1f3fb-200d-2642':0, '1f3cc-1f3fc-200d-2642':0, '1f3cc-1f3fd-200d-2642':0, '1f3cc-1f3fe-200d-2642':0, '1f3cc-1f3ff-200d-2642':0, '1f3cc-1f3fb':0, '1f3cc-1f3fc':0, '1f3cc-1f3fd':0, '1f3cc-1f3fe':0, '1f3cc-1f3ff':0, '1f442-1f3fb':0, '1f442-1f3fc':0, '1f442-1f3fd':0, '1f442-1f3fe':0, '1f442-1f3ff':0, '1f443-1f3fb':0, '1f443-1f3fc':0, '1f443-1f3fd':0, '1f443-1f3fe':0, '1f443-1f3ff':0, '1f446-1f3fb':0, '1f446-1f3fc':0, '1f446-1f3fd':0, '1f446-1f3fe':0, '1f446-1f3ff':0, '1f447-1f3fb':0, '1f447-1f3fc':0, '1f447-1f3fd':0, '1f447-1f3fe':0, '1f447-1f3ff':0, '1f448-1f3fb':0, '1f448-1f3fc':0, '1f448-1f3fd':0, '1f448-1f3fe':0, '1f448-1f3ff':0, '1f449-1f3fb':0, '1f449-1f3fc':0, '1f449-1f3fd':0, '1f449-1f3fe':0, '1f449-1f3ff':0, '1f44a-1f3fb':0, '1f44a-1f3fc':0, '1f44a-1f3fd':0, '1f44a-1f3fe':0, '1f44a-1f3ff':0, '1f44b-1f3fb':0, '1f44b-1f3fc':0, '1f44b-1f3fd':0, '1f44b-1f3fe':0, '1f44b-1f3ff':0, '1f44c-1f3fb':0, '1f44c-1f3fc':0, '1f44c-1f3fd':0, '1f44c-1f3fe':0, '1f44c-1f3ff':0, '1f44d-1f3fb':0, '1f44d-1f3fc':0, '1f44d-1f3fd':0, '1f44d-1f3fe':0, '1f44d-1f3ff':0, '1f44e-1f3fb':0, '1f44e-1f3fc':0, '1f44e-1f3fd':0, '1f44e-1f3fe':0, '1f44e-1f3ff':0, '1f44f-1f3fb':0, '1f44f-1f3fc':0, '1f44f-1f3fd':0, '1f44f-1f3fe':0, '1f44f-1f3ff':0, '1f450-1f3fb':0, '1f450-1f3fc':0, '1f450-1f3fd':0, '1f450-1f3fe':0, '1f450-1f3ff':0, '1f466-1f3fb':0, '1f466-1f3fc':0, '1f466-1f3fd':0, '1f466-1f3fe':0, '1f466-1f3ff':0, '1f467-1f3fb':0, '1f467-1f3fc':0, '1f467-1f3fd':0, '1f467-1f3fe':0, '1f467-1f3ff':0, '1f468-1f3fb-200d-1f33e':0, '1f468-1f3fc-200d-1f33e':0, '1f468-1f3fd-200d-1f33e':0, '1f468-1f3fe-200d-1f33e':0, '1f468-1f3ff-200d-1f33e':0, '1f468-1f3fb-200d-1f373':0, '1f468-1f3fc-200d-1f373':0, '1f468-1f3fd-200d-1f373':0, '1f468-1f3fe-200d-1f373':0, '1f468-1f3ff-200d-1f373':0, '1f468-1f3fb-200d-1f37c':0, '1f468-1f3fc-200d-1f37c':0, '1f468-1f3fd-200d-1f37c':0, '1f468-1f3fe-200d-1f37c':0, '1f468-1f3ff-200d-1f37c':0, '1f468-1f3fb-200d-1f393':0, '1f468-1f3fc-200d-1f393':0, '1f468-1f3fd-200d-1f393':0, '1f468-1f3fe-200d-1f393':0, '1f468-1f3ff-200d-1f393':0, '1f468-1f3fb-200d-1f3a4':0, '1f468-1f3fc-200d-1f3a4':0, '1f468-1f3fd-200d-1f3a4':0, '1f468-1f3fe-200d-1f3a4':0, '1f468-1f3ff-200d-1f3a4':0, '1f468-1f3fb-200d-1f3a8':0, '1f468-1f3fc-200d-1f3a8':0, '1f468-1f3fd-200d-1f3a8':0, '1f468-1f3fe-200d-1f3a8':0, '1f468-1f3ff-200d-1f3a8':0, '1f468-1f3fb-200d-1f3eb':0, '1f468-1f3fc-200d-1f3eb':0, '1f468-1f3fd-200d-1f3eb':0, '1f468-1f3fe-200d-1f3eb':0, '1f468-1f3ff-200d-1f3eb':0, '1f468-1f3fb-200d-1f3ed':0, '1f468-1f3fc-200d-1f3ed':0, '1f468-1f3fd-200d-1f3ed':0, '1f468-1f3fe-200d-1f3ed':0, '1f468-1f3ff-200d-1f3ed':0, '1f468-1f3fb-200d-1f4bb':0, '1f468-1f3fc-200d-1f4bb':0, '1f468-1f3fd-200d-1f4bb':0, '1f468-1f3fe-200d-1f4bb':0, '1f468-1f3ff-200d-1f4bb':0, '1f468-1f3fb-200d-1f4bc':0, '1f468-1f3fc-200d-1f4bc':0, '1f468-1f3fd-200d-1f4bc':0, '1f468-1f3fe-200d-1f4bc':0, '1f468-1f3ff-200d-1f4bc':0, '1f468-1f3fb-200d-1f527':0, '1f468-1f3fc-200d-1f527':0, '1f468-1f3fd-200d-1f527':0, '1f468-1f3fe-200d-1f527':0, '1f468-1f3ff-200d-1f527':0, '1f468-1f3fb-200d-1f52c':0, '1f468-1f3fc-200d-1f52c':0, '1f468-1f3fd-200d-1f52c':0, '1f468-1f3fe-200d-1f52c':0, '1f468-1f3ff-200d-1f52c':0, '1f468-1f3fb-200d-1f680':0, '1f468-1f3fc-200d-1f680':0, '1f468-1f3fd-200d-1f680':0, '1f468-1f3fe-200d-1f680':0, '1f468-1f3ff-200d-1f680':0, '1f468-1f3fb-200d-1f692':0, '1f468-1f3fc-200d-1f692':0, '1f468-1f3fd-200d-1f692':0, '1f468-1f3fe-200d-1f692':0, '1f468-1f3ff-200d-1f692':0, '1f468-1f3fb-200d-1f9af':0, '1f468-1f3fc-200d-1f9af':0, '1f468-1f3fd-200d-1f9af':0, '1f468-1f3fe-200d-1f9af':0, '1f468-1f3ff-200d-1f9af':0, '1f468-1f3fb-200d-1f9b0':0, '1f468-1f3fc-200d-1f9b0':0, '1f468-1f3fd-200d-1f9b0':0, '1f468-1f3fe-200d-1f9b0':0, '1f468-1f3ff-200d-1f9b0':0, '1f468-1f3fb-200d-1f9b1':0, '1f468-1f3fc-200d-1f9b1':0, '1f468-1f3fd-200d-1f9b1':0, '1f468-1f3fe-200d-1f9b1':0, '1f468-1f3ff-200d-1f9b1':0, '1f468-1f3fb-200d-1f9b2':0, '1f468-1f3fc-200d-1f9b2':0, '1f468-1f3fd-200d-1f9b2':0, '1f468-1f3fe-200d-1f9b2':0, '1f468-1f3ff-200d-1f9b2':0, '1f468-1f3fb-200d-1f9b3':0, '1f468-1f3fc-200d-1f9b3':0, '1f468-1f3fd-200d-1f9b3':0, '1f468-1f3fe-200d-1f9b3':0, '1f468-1f3ff-200d-1f9b3':0, '1f468-1f3fb-200d-1f9bc':0, '1f468-1f3fc-200d-1f9bc':0, '1f468-1f3fd-200d-1f9bc':0, '1f468-1f3fe-200d-1f9bc':0, '1f468-1f3ff-200d-1f9bc':0, '1f468-1f3fb-200d-1f9bd':0, '1f468-1f3fc-200d-1f9bd':0, '1f468-1f3fd-200d-1f9bd':0, '1f468-1f3fe-200d-1f9bd':0, '1f468-1f3ff-200d-1f9bd':0, '1f468-1f3fb-200d-2695':0, '1f468-1f3fc-200d-2695':0, '1f468-1f3fd-200d-2695':0, '1f468-1f3fe-200d-2695':0, '1f468-1f3ff-200d-2695':0, '1f468-1f3fb-200d-2696':0, '1f468-1f3fc-200d-2696':0, '1f468-1f3fd-200d-2696':0, '1f468-1f3fe-200d-2696':0, '1f468-1f3ff-200d-2696':0, '1f468-1f3fb-200d-2708':0, '1f468-1f3fc-200d-2708':0, '1f468-1f3fd-200d-2708':0, '1f468-1f3fe-200d-2708':0, '1f468-1f3ff-200d-2708':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fb':0, '1f468-1f3fc':0, '1f468-1f3fd':0, '1f468-1f3fe':0, '1f468-1f3ff':0, '1f469-1f3fb-200d-1f33e':0, '1f469-1f3fc-200d-1f33e':0, '1f469-1f3fd-200d-1f33e':0, '1f469-1f3fe-200d-1f33e':0, '1f469-1f3ff-200d-1f33e':0, '1f469-1f3fb-200d-1f373':0, '1f469-1f3fc-200d-1f373':0, '1f469-1f3fd-200d-1f373':0, '1f469-1f3fe-200d-1f373':0, '1f469-1f3ff-200d-1f373':0, '1f469-1f3fb-200d-1f37c':0, '1f469-1f3fc-200d-1f37c':0, '1f469-1f3fd-200d-1f37c':0, '1f469-1f3fe-200d-1f37c':0, '1f469-1f3ff-200d-1f37c':0, '1f469-1f3fb-200d-1f393':0, '1f469-1f3fc-200d-1f393':0, '1f469-1f3fd-200d-1f393':0, '1f469-1f3fe-200d-1f393':0, '1f469-1f3ff-200d-1f393':0, '1f469-1f3fb-200d-1f3a4':0, '1f469-1f3fc-200d-1f3a4':0, '1f469-1f3fd-200d-1f3a4':0, '1f469-1f3fe-200d-1f3a4':0, '1f469-1f3ff-200d-1f3a4':0, '1f469-1f3fb-200d-1f3a8':0, '1f469-1f3fc-200d-1f3a8':0, '1f469-1f3fd-200d-1f3a8':0, '1f469-1f3fe-200d-1f3a8':0, '1f469-1f3ff-200d-1f3a8':0, '1f469-1f3fb-200d-1f3eb':0, '1f469-1f3fc-200d-1f3eb':0, '1f469-1f3fd-200d-1f3eb':0, '1f469-1f3fe-200d-1f3eb':0, '1f469-1f3ff-200d-1f3eb':0, '1f469-1f3fb-200d-1f3ed':0, '1f469-1f3fc-200d-1f3ed':0, '1f469-1f3fd-200d-1f3ed':0, '1f469-1f3fe-200d-1f3ed':0, '1f469-1f3ff-200d-1f3ed':0, '1f469-1f3fb-200d-1f4bb':0, '1f469-1f3fc-200d-1f4bb':0, '1f469-1f3fd-200d-1f4bb':0, '1f469-1f3fe-200d-1f4bb':0, '1f469-1f3ff-200d-1f4bb':0, '1f469-1f3fb-200d-1f4bc':0, '1f469-1f3fc-200d-1f4bc':0, '1f469-1f3fd-200d-1f4bc':0, '1f469-1f3fe-200d-1f4bc':0, '1f469-1f3ff-200d-1f4bc':0, '1f469-1f3fb-200d-1f527':0, '1f469-1f3fc-200d-1f527':0, '1f469-1f3fd-200d-1f527':0, '1f469-1f3fe-200d-1f527':0, '1f469-1f3ff-200d-1f527':0, '1f469-1f3fb-200d-1f52c':0, '1f469-1f3fc-200d-1f52c':0, '1f469-1f3fd-200d-1f52c':0, '1f469-1f3fe-200d-1f52c':0, '1f469-1f3ff-200d-1f52c':0, '1f469-1f3fb-200d-1f680':0, '1f469-1f3fc-200d-1f680':0, '1f469-1f3fd-200d-1f680':0, '1f469-1f3fe-200d-1f680':0, '1f469-1f3ff-200d-1f680':0, '1f469-1f3fb-200d-1f692':0, '1f469-1f3fc-200d-1f692':0, '1f469-1f3fd-200d-1f692':0, '1f469-1f3fe-200d-1f692':0, '1f469-1f3ff-200d-1f692':0, '1f469-1f3fb-200d-1f9af':0, '1f469-1f3fc-200d-1f9af':0, '1f469-1f3fd-200d-1f9af':0, '1f469-1f3fe-200d-1f9af':0, '1f469-1f3ff-200d-1f9af':0, '1f469-1f3fb-200d-1f9b0':0, '1f469-1f3fc-200d-1f9b0':0, '1f469-1f3fd-200d-1f9b0':0, '1f469-1f3fe-200d-1f9b0':0, '1f469-1f3ff-200d-1f9b0':0, '1f469-1f3fb-200d-1f9b1':0, '1f469-1f3fc-200d-1f9b1':0, '1f469-1f3fd-200d-1f9b1':0, '1f469-1f3fe-200d-1f9b1':0, '1f469-1f3ff-200d-1f9b1':0, '1f469-1f3fb-200d-1f9b2':0, '1f469-1f3fc-200d-1f9b2':0, '1f469-1f3fd-200d-1f9b2':0, '1f469-1f3fe-200d-1f9b2':0, '1f469-1f3ff-200d-1f9b2':0, '1f469-1f3fb-200d-1f9b3':0, '1f469-1f3fc-200d-1f9b3':0, '1f469-1f3fd-200d-1f9b3':0, '1f469-1f3fe-200d-1f9b3':0, '1f469-1f3ff-200d-1f9b3':0, '1f469-1f3fb-200d-1f9bc':0, '1f469-1f3fc-200d-1f9bc':0, '1f469-1f3fd-200d-1f9bc':0, '1f469-1f3fe-200d-1f9bc':0, '1f469-1f3ff-200d-1f9bc':0, '1f469-1f3fb-200d-1f9bd':0, '1f469-1f3fc-200d-1f9bd':0, '1f469-1f3fd-200d-1f9bd':0, '1f469-1f3fe-200d-1f9bd':0, '1f469-1f3ff-200d-1f9bd':0, '1f469-1f3fb-200d-2695':0, '1f469-1f3fc-200d-2695':0, '1f469-1f3fd-200d-2695':0, '1f469-1f3fe-200d-2695':0, '1f469-1f3ff-200d-2695':0, '1f469-1f3fb-200d-2696':0, '1f469-1f3fc-200d-2696':0, '1f469-1f3fd-200d-2696':0, '1f469-1f3fe-200d-2696':0, '1f469-1f3ff-200d-2696':0, '1f469-1f3fb-200d-2708':0, '1f469-1f3fc-200d-2708':0, '1f469-1f3fd-200d-2708':0, '1f469-1f3fe-200d-2708':0, '1f469-1f3ff-200d-2708':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fb':0, '1f469-1f3fc':0, '1f469-1f3fd':0, '1f469-1f3fe':0, '1f469-1f3ff':0, '1f46b-1f3fb':0, '1f46b-1f3fc':0, '1f46b-1f3fd':0, '1f46b-1f3fe':0, '1f46b-1f3ff':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe':0, '1f46c-1f3fb':0, '1f46c-1f3fc':0, '1f46c-1f3fd':0, '1f46c-1f3fe':0, '1f46c-1f3ff':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe':0, '1f46d-1f3fb':0, '1f46d-1f3fc':0, '1f46d-1f3fd':0, '1f46d-1f3fe':0, '1f46d-1f3ff':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe':0, '1f46e-1f3fb-200d-2640':0, '1f46e-1f3fc-200d-2640':0, '1f46e-1f3fd-200d-2640':0, '1f46e-1f3fe-200d-2640':0, '1f46e-1f3ff-200d-2640':0, '1f46e-1f3fb-200d-2642':0, '1f46e-1f3fc-200d-2642':0, '1f46e-1f3fd-200d-2642':0, '1f46e-1f3fe-200d-2642':0, '1f46e-1f3ff-200d-2642':0, '1f46e-1f3fb':0, '1f46e-1f3fc':0, '1f46e-1f3fd':0, '1f46e-1f3fe':0, '1f46e-1f3ff':0, '1f470-1f3fb-200d-2640':0, '1f470-1f3fc-200d-2640':0, '1f470-1f3fd-200d-2640':0, '1f470-1f3fe-200d-2640':0, '1f470-1f3ff-200d-2640':0, '1f470-1f3fb-200d-2642':0, '1f470-1f3fc-200d-2642':0, '1f470-1f3fd-200d-2642':0, '1f470-1f3fe-200d-2642':0, '1f470-1f3ff-200d-2642':0, '1f470-1f3fb':0, '1f470-1f3fc':0, '1f470-1f3fd':0, '1f470-1f3fe':0, '1f470-1f3ff':0, '1f471-1f3fb-200d-2640':0, '1f471-1f3fc-200d-2640':0, '1f471-1f3fd-200d-2640':0, '1f471-1f3fe-200d-2640':0, '1f471-1f3ff-200d-2640':0, '1f471-1f3fb-200d-2642':0, '1f471-1f3fc-200d-2642':0, '1f471-1f3fd-200d-2642':0, '1f471-1f3fe-200d-2642':0, '1f471-1f3ff-200d-2642':0, '1f471-1f3fb':0, '1f471-1f3fc':0, '1f471-1f3fd':0, '1f471-1f3fe':0, '1f471-1f3ff':0, '1f472-1f3fb':0, '1f472-1f3fc':0, '1f472-1f3fd':0, '1f472-1f3fe':0, '1f472-1f3ff':0, '1f473-1f3fb-200d-2640':0, '1f473-1f3fc-200d-2640':0, '1f473-1f3fd-200d-2640':0, '1f473-1f3fe-200d-2640':0, '1f473-1f3ff-200d-2640':0, '1f473-1f3fb-200d-2642':0, '1f473-1f3fc-200d-2642':0, '1f473-1f3fd-200d-2642':0, '1f473-1f3fe-200d-2642':0, '1f473-1f3ff-200d-2642':0, '1f473-1f3fb':0, '1f473-1f3fc':0, '1f473-1f3fd':0, '1f473-1f3fe':0, '1f473-1f3ff':0, '1f474-1f3fb':0, '1f474-1f3fc':0, '1f474-1f3fd':0, '1f474-1f3fe':0, '1f474-1f3ff':0, '1f475-1f3fb':0, '1f475-1f3fc':0, '1f475-1f3fd':0, '1f475-1f3fe':0, '1f475-1f3ff':0, '1f476-1f3fb':0, '1f476-1f3fc':0, '1f476-1f3fd':0, '1f476-1f3fe':0, '1f476-1f3ff':0, '1f477-1f3fb-200d-2640':0, '1f477-1f3fc-200d-2640':0, '1f477-1f3fd-200d-2640':0, '1f477-1f3fe-200d-2640':0, '1f477-1f3ff-200d-2640':0, '1f477-1f3fb-200d-2642':0, '1f477-1f3fc-200d-2642':0, '1f477-1f3fd-200d-2642':0, '1f477-1f3fe-200d-2642':0, '1f477-1f3ff-200d-2642':0, '1f477-1f3fb':0, '1f477-1f3fc':0, '1f477-1f3fd':0, '1f477-1f3fe':0, '1f477-1f3ff':0, '1f478-1f3fb':0, '1f478-1f3fc':0, '1f478-1f3fd':0, '1f478-1f3fe':0, '1f478-1f3ff':0, '1f47c-1f3fb':0, '1f47c-1f3fc':0, '1f47c-1f3fd':0, '1f47c-1f3fe':0, '1f47c-1f3ff':0, '1f481-1f3fb-200d-2640':0, '1f481-1f3fc-200d-2640':0, '1f481-1f3fd-200d-2640':0, '1f481-1f3fe-200d-2640':0, '1f481-1f3ff-200d-2640':0, '1f481-1f3fb-200d-2642':0, '1f481-1f3fc-200d-2642':0, '1f481-1f3fd-200d-2642':0, '1f481-1f3fe-200d-2642':0, '1f481-1f3ff-200d-2642':0, '1f481-1f3fb':0, '1f481-1f3fc':0, '1f481-1f3fd':0, '1f481-1f3fe':0, '1f481-1f3ff':0, '1f482-1f3fb-200d-2640':0, '1f482-1f3fc-200d-2640':0, '1f482-1f3fd-200d-2640':0, '1f482-1f3fe-200d-2640':0, '1f482-1f3ff-200d-2640':0, '1f482-1f3fb-200d-2642':0, '1f482-1f3fc-200d-2642':0, '1f482-1f3fd-200d-2642':0, '1f482-1f3fe-200d-2642':0, '1f482-1f3ff-200d-2642':0, '1f482-1f3fb':0, '1f482-1f3fc':0, '1f482-1f3fd':0, '1f482-1f3fe':0, '1f482-1f3ff':0, '1f483-1f3fb':0, '1f483-1f3fc':0, '1f483-1f3fd':0, '1f483-1f3fe':0, '1f483-1f3ff':0, '1f485-1f3fb':0, '1f485-1f3fc':0, '1f485-1f3fd':0, '1f485-1f3fe':0, '1f485-1f3ff':0, '1f486-1f3fb-200d-2640':0, '1f486-1f3fc-200d-2640':0, '1f486-1f3fd-200d-2640':0, '1f486-1f3fe-200d-2640':0, '1f486-1f3ff-200d-2640':0, '1f486-1f3fb-200d-2642':0, '1f486-1f3fc-200d-2642':0, '1f486-1f3fd-200d-2642':0, '1f486-1f3fe-200d-2642':0, '1f486-1f3ff-200d-2642':0, '1f486-1f3fb':0, '1f486-1f3fc':0, '1f486-1f3fd':0, '1f486-1f3fe':0, '1f486-1f3ff':0, '1f487-1f3fb-200d-2640':0, '1f487-1f3fc-200d-2640':0, '1f487-1f3fd-200d-2640':0, '1f487-1f3fe-200d-2640':0, '1f487-1f3ff-200d-2640':0, '1f487-1f3fb-200d-2642':0, '1f487-1f3fc-200d-2642':0, '1f487-1f3fd-200d-2642':0, '1f487-1f3fe-200d-2642':0, '1f487-1f3ff-200d-2642':0, '1f487-1f3fb':0, '1f487-1f3fc':0, '1f487-1f3fd':0, '1f487-1f3fe':0, '1f487-1f3ff':0, '1f48f-1f3fb':0, '1f48f-1f3fc':0, '1f48f-1f3fd':0, '1f48f-1f3fe':0, '1f48f-1f3ff':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f491-1f3fb':0, '1f491-1f3fc':0, '1f491-1f3fd':0, '1f491-1f3fe':0, '1f491-1f3ff':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fe':0, '1f4aa-1f3fb':0, '1f4aa-1f3fc':0, '1f4aa-1f3fd':0, '1f4aa-1f3fe':0, '1f4aa-1f3ff':0, '1f574-1f3fb':0, '1f574-1f3fc':0, '1f574-1f3fd':0, '1f574-1f3fe':0, '1f574-1f3ff':0, '1f575-1f3fb-200d-2640':0, '1f575-1f3fc-200d-2640':0, '1f575-1f3fd-200d-2640':0, '1f575-1f3fe-200d-2640':0, '1f575-1f3ff-200d-2640':0, '1f575-1f3fb-200d-2642':0, '1f575-1f3fc-200d-2642':0, '1f575-1f3fd-200d-2642':0, '1f575-1f3fe-200d-2642':0, '1f575-1f3ff-200d-2642':0, '1f575-1f3fb':0, '1f575-1f3fc':0, '1f575-1f3fd':0, '1f575-1f3fe':0, '1f575-1f3ff':0, '1f57a-1f3fb':0, '1f57a-1f3fc':0, '1f57a-1f3fd':0, '1f57a-1f3fe':0, '1f57a-1f3ff':0, '1f590-1f3fb':0, '1f590-1f3fc':0, '1f590-1f3fd':0, '1f590-1f3fe':0, '1f590-1f3ff':0, '1f595-1f3fb':0, '1f595-1f3fc':0, '1f595-1f3fd':0, '1f595-1f3fe':0, '1f595-1f3ff':0, '1f596-1f3fb':0, '1f596-1f3fc':0, '1f596-1f3fd':0, '1f596-1f3fe':0, '1f596-1f3ff':0, '1f645-1f3fb-200d-2640':0, '1f645-1f3fc-200d-2640':0, '1f645-1f3fd-200d-2640':0, '1f645-1f3fe-200d-2640':0, '1f645-1f3ff-200d-2640':0, '1f645-1f3fb-200d-2642':0, '1f645-1f3fc-200d-2642':0, '1f645-1f3fd-200d-2642':0, '1f645-1f3fe-200d-2642':0, '1f645-1f3ff-200d-2642':0, '1f645-1f3fb':0, '1f645-1f3fc':0, '1f645-1f3fd':0, '1f645-1f3fe':0, '1f645-1f3ff':0, '1f646-1f3fb-200d-2640':0, '1f646-1f3fc-200d-2640':0, '1f646-1f3fd-200d-2640':0, '1f646-1f3fe-200d-2640':0, '1f646-1f3ff-200d-2640':0, '1f646-1f3fb-200d-2642':0, '1f646-1f3fc-200d-2642':0, '1f646-1f3fd-200d-2642':0, '1f646-1f3fe-200d-2642':0, '1f646-1f3ff-200d-2642':0, '1f646-1f3fb':0, '1f646-1f3fc':0, '1f646-1f3fd':0, '1f646-1f3fe':0, '1f646-1f3ff':0, '1f647-1f3fb-200d-2640':0, '1f647-1f3fc-200d-2640':0, '1f647-1f3fd-200d-2640':0, '1f647-1f3fe-200d-2640':0, '1f647-1f3ff-200d-2640':0, '1f647-1f3fb-200d-2642':0, '1f647-1f3fc-200d-2642':0, '1f647-1f3fd-200d-2642':0, '1f647-1f3fe-200d-2642':0, '1f647-1f3ff-200d-2642':0, '1f647-1f3fb':0, '1f647-1f3fc':0, '1f647-1f3fd':0, '1f647-1f3fe':0, '1f647-1f3ff':0, '1f64b-1f3fb-200d-2640':0, '1f64b-1f3fc-200d-2640':0, '1f64b-1f3fd-200d-2640':0, '1f64b-1f3fe-200d-2640':0, '1f64b-1f3ff-200d-2640':0, '1f64b-1f3fb-200d-2642':0, '1f64b-1f3fc-200d-2642':0, '1f64b-1f3fd-200d-2642':0, '1f64b-1f3fe-200d-2642':0, '1f64b-1f3ff-200d-2642':0, '1f64b-1f3fb':0, '1f64b-1f3fc':0, '1f64b-1f3fd':0, '1f64b-1f3fe':0, '1f64b-1f3ff':0, '1f64c-1f3fb':0, '1f64c-1f3fc':0, '1f64c-1f3fd':0, '1f64c-1f3fe':0, '1f64c-1f3ff':0, '1f64d-1f3fb-200d-2640':0, '1f64d-1f3fc-200d-2640':0, '1f64d-1f3fd-200d-2640':0, '1f64d-1f3fe-200d-2640':0, '1f64d-1f3ff-200d-2640':0, '1f64d-1f3fb-200d-2642':0, '1f64d-1f3fc-200d-2642':0, '1f64d-1f3fd-200d-2642':0, '1f64d-1f3fe-200d-2642':0, '1f64d-1f3ff-200d-2642':0, '1f64d-1f3fb':0, '1f64d-1f3fc':0, '1f64d-1f3fd':0, '1f64d-1f3fe':0, '1f64d-1f3ff':0, '1f64e-1f3fb-200d-2640':0, '1f64e-1f3fc-200d-2640':0, '1f64e-1f3fd-200d-2640':0, '1f64e-1f3fe-200d-2640':0, '1f64e-1f3ff-200d-2640':0, '1f64e-1f3fb-200d-2642':0, '1f64e-1f3fc-200d-2642':0, '1f64e-1f3fd-200d-2642':0, '1f64e-1f3fe-200d-2642':0, '1f64e-1f3ff-200d-2642':0, '1f64e-1f3fb':0, '1f64e-1f3fc':0, '1f64e-1f3fd':0, '1f64e-1f3fe':0, '1f64e-1f3ff':0, '1f64f-1f3fb':0, '1f64f-1f3fc':0, '1f64f-1f3fd':0, '1f64f-1f3fe':0, '1f64f-1f3ff':0, '1f6a3-1f3fb-200d-2640':0, '1f6a3-1f3fc-200d-2640':0, '1f6a3-1f3fd-200d-2640':0, '1f6a3-1f3fe-200d-2640':0, '1f6a3-1f3ff-200d-2640':0, '1f6a3-1f3fb-200d-2642':0, '1f6a3-1f3fc-200d-2642':0, '1f6a3-1f3fd-200d-2642':0, '1f6a3-1f3fe-200d-2642':0, '1f6a3-1f3ff-200d-2642':0, '1f6a3-1f3fb':0, '1f6a3-1f3fc':0, '1f6a3-1f3fd':0, '1f6a3-1f3fe':0, '1f6a3-1f3ff':0, '1f6b4-1f3fb-200d-2640':0, '1f6b4-1f3fc-200d-2640':0, '1f6b4-1f3fd-200d-2640':0, '1f6b4-1f3fe-200d-2640':0, '1f6b4-1f3ff-200d-2640':0, '1f6b4-1f3fb-200d-2642':0, '1f6b4-1f3fc-200d-2642':0, '1f6b4-1f3fd-200d-2642':0, '1f6b4-1f3fe-200d-2642':0, '1f6b4-1f3ff-200d-2642':0, '1f6b4-1f3fb':0, '1f6b4-1f3fc':0, '1f6b4-1f3fd':0, '1f6b4-1f3fe':0, '1f6b4-1f3ff':0, '1f6b5-1f3fb-200d-2640':0, '1f6b5-1f3fc-200d-2640':0, '1f6b5-1f3fd-200d-2640':0, '1f6b5-1f3fe-200d-2640':0, '1f6b5-1f3ff-200d-2640':0, '1f6b5-1f3fb-200d-2642':0, '1f6b5-1f3fc-200d-2642':0, '1f6b5-1f3fd-200d-2642':0, '1f6b5-1f3fe-200d-2642':0, '1f6b5-1f3ff-200d-2642':0, '1f6b5-1f3fb':0, '1f6b5-1f3fc':0, '1f6b5-1f3fd':0, '1f6b5-1f3fe':0, '1f6b5-1f3ff':0, '1f6b6-1f3fb-200d-2640':0, '1f6b6-1f3fc-200d-2640':0, '1f6b6-1f3fd-200d-2640':0, '1f6b6-1f3fe-200d-2640':0, '1f6b6-1f3ff-200d-2640':0, '1f6b6-1f3fb-200d-2642':0, '1f6b6-1f3fc-200d-2642':0, '1f6b6-1f3fd-200d-2642':0, '1f6b6-1f3fe-200d-2642':0, '1f6b6-1f3ff-200d-2642':0, '1f6b6-1f3fb':0, '1f6b6-1f3fc':0, '1f6b6-1f3fd':0, '1f6b6-1f3fe':0, '1f6b6-1f3ff':0, '1f6c0-1f3fb':0, '1f6c0-1f3fc':0, '1f6c0-1f3fd':0, '1f6c0-1f3fe':0, '1f6c0-1f3ff':0, '1f6cc-1f3fb':0, '1f6cc-1f3fc':0, '1f6cc-1f3fd':0, '1f6cc-1f3fe':0, '1f6cc-1f3ff':0, '1f90c-1f3fb':0, '1f90c-1f3fc':0, '1f90c-1f3fd':0, '1f90c-1f3fe':0, '1f90c-1f3ff':0, '1f90f-1f3fb':0, '1f90f-1f3fc':0, '1f90f-1f3fd':0, '1f90f-1f3fe':0, '1f90f-1f3ff':0, '1f918-1f3fb':0, '1f918-1f3fc':0, '1f918-1f3fd':0, '1f918-1f3fe':0, '1f918-1f3ff':0, '1f919-1f3fb':0, '1f919-1f3fc':0, '1f919-1f3fd':0, '1f919-1f3fe':0, '1f919-1f3ff':0, '1f91a-1f3fb':0, '1f91a-1f3fc':0, '1f91a-1f3fd':0, '1f91a-1f3fe':0, '1f91a-1f3ff':0, '1f91b-1f3fb':0, '1f91b-1f3fc':0, '1f91b-1f3fd':0, '1f91b-1f3fe':0, '1f91b-1f3ff':0, '1f91c-1f3fb':0, '1f91c-1f3fc':0, '1f91c-1f3fd':0, '1f91c-1f3fe':0, '1f91c-1f3ff':0, '1f91d-1f3fb':0, '1f91d-1f3fc':0, '1f91d-1f3fd':0, '1f91d-1f3fe':0, '1f91d-1f3ff':0, '1f91e-1f3fb':0, '1f91e-1f3fc':0, '1f91e-1f3fd':0, '1f91e-1f3fe':0, '1f91e-1f3ff':0, '1f91f-1f3fb':0, '1f91f-1f3fc':0, '1f91f-1f3fd':0, '1f91f-1f3fe':0, '1f91f-1f3ff':0, '1f926-1f3fb-200d-2640':0, '1f926-1f3fc-200d-2640':0, '1f926-1f3fd-200d-2640':0, '1f926-1f3fe-200d-2640':0, '1f926-1f3ff-200d-2640':0, '1f926-1f3fb-200d-2642':0, '1f926-1f3fc-200d-2642':0, '1f926-1f3fd-200d-2642':0, '1f926-1f3fe-200d-2642':0, '1f926-1f3ff-200d-2642':0, '1f926-1f3fb':0, '1f926-1f3fc':0, '1f926-1f3fd':0, '1f926-1f3fe':0, '1f926-1f3ff':0, '1f930-1f3fb':0, '1f930-1f3fc':0, '1f930-1f3fd':0, '1f930-1f3fe':0, '1f930-1f3ff':0, '1f931-1f3fb':0, '1f931-1f3fc':0, '1f931-1f3fd':0, '1f931-1f3fe':0, '1f931-1f3ff':0, '1f932-1f3fb':0, '1f932-1f3fc':0, '1f932-1f3fd':0, '1f932-1f3fe':0, '1f932-1f3ff':0, '1f933-1f3fb':0, '1f933-1f3fc':0, '1f933-1f3fd':0, '1f933-1f3fe':0, '1f933-1f3ff':0, '1f934-1f3fb':0, '1f934-1f3fc':0, '1f934-1f3fd':0, '1f934-1f3fe':0, '1f934-1f3ff':0, '1f935-1f3fb-200d-2640':0, '1f935-1f3fc-200d-2640':0, '1f935-1f3fd-200d-2640':0, '1f935-1f3fe-200d-2640':0, '1f935-1f3ff-200d-2640':0, '1f935-1f3fb-200d-2642':0, '1f935-1f3fc-200d-2642':0, '1f935-1f3fd-200d-2642':0, '1f935-1f3fe-200d-2642':0, '1f935-1f3ff-200d-2642':0, '1f935-1f3fb':0, '1f935-1f3fc':0, '1f935-1f3fd':0, '1f935-1f3fe':0, '1f935-1f3ff':0, '1f936-1f3fb':0, '1f936-1f3fc':0, '1f936-1f3fd':0, '1f936-1f3fe':0, '1f936-1f3ff':0, '1f937-1f3fb-200d-2640':0, '1f937-1f3fc-200d-2640':0, '1f937-1f3fd-200d-2640':0, '1f937-1f3fe-200d-2640':0, '1f937-1f3ff-200d-2640':0, '1f937-1f3fb-200d-2642':0, '1f937-1f3fc-200d-2642':0, '1f937-1f3fd-200d-2642':0, '1f937-1f3fe-200d-2642':0, '1f937-1f3ff-200d-2642':0, '1f937-1f3fb':0, '1f937-1f3fc':0, '1f937-1f3fd':0, '1f937-1f3fe':0, '1f937-1f3ff':0, '1f938-1f3fb-200d-2640':0, '1f938-1f3fc-200d-2640':0, '1f938-1f3fd-200d-2640':0, '1f938-1f3fe-200d-2640':0, '1f938-1f3ff-200d-2640':0, '1f938-1f3fb-200d-2642':0, '1f938-1f3fc-200d-2642':0, '1f938-1f3fd-200d-2642':0, '1f938-1f3fe-200d-2642':0, '1f938-1f3ff-200d-2642':0, '1f938-1f3fb':0, '1f938-1f3fc':0, '1f938-1f3fd':0, '1f938-1f3fe':0, '1f938-1f3ff':0, '1f939-1f3fb-200d-2640':0, '1f939-1f3fc-200d-2640':0, '1f939-1f3fd-200d-2640':0, '1f939-1f3fe-200d-2640':0, '1f939-1f3ff-200d-2640':0, '1f939-1f3fb-200d-2642':0, '1f939-1f3fc-200d-2642':0, '1f939-1f3fd-200d-2642':0, '1f939-1f3fe-200d-2642':0, '1f939-1f3ff-200d-2642':0, '1f939-1f3fb':0, '1f939-1f3fc':0, '1f939-1f3fd':0, '1f939-1f3fe':0, '1f939-1f3ff':0, '1f93d-1f3fb-200d-2640':0, '1f93d-1f3fc-200d-2640':0, '1f93d-1f3fd-200d-2640':0, '1f93d-1f3fe-200d-2640':0, '1f93d-1f3ff-200d-2640':0, '1f93d-1f3fb-200d-2642':0, '1f93d-1f3fc-200d-2642':0, '1f93d-1f3fd-200d-2642':0, '1f93d-1f3fe-200d-2642':0, '1f93d-1f3ff-200d-2642':0, '1f93d-1f3fb':0, '1f93d-1f3fc':0, '1f93d-1f3fd':0, '1f93d-1f3fe':0, '1f93d-1f3ff':0, '1f93e-1f3fb-200d-2640':0, '1f93e-1f3fc-200d-2640':0, '1f93e-1f3fd-200d-2640':0, '1f93e-1f3fe-200d-2640':0, '1f93e-1f3ff-200d-2640':0, '1f93e-1f3fb-200d-2642':0, '1f93e-1f3fc-200d-2642':0, '1f93e-1f3fd-200d-2642':0, '1f93e-1f3fe-200d-2642':0, '1f93e-1f3ff-200d-2642':0, '1f93e-1f3fb':0, '1f93e-1f3fc':0, '1f93e-1f3fd':0, '1f93e-1f3fe':0, '1f93e-1f3ff':0, '1f977-1f3fb':0, '1f977-1f3fc':0, '1f977-1f3fd':0, '1f977-1f3fe':0, '1f977-1f3ff':0, '1f9b5-1f3fb':0, '1f9b5-1f3fc':0, '1f9b5-1f3fd':0, '1f9b5-1f3fe':0, '1f9b5-1f3ff':0, '1f9b6-1f3fb':0, '1f9b6-1f3fc':0, '1f9b6-1f3fd':0, '1f9b6-1f3fe':0, '1f9b6-1f3ff':0, '1f9b8-1f3fb-200d-2640':0, '1f9b8-1f3fc-200d-2640':0, '1f9b8-1f3fd-200d-2640':0, '1f9b8-1f3fe-200d-2640':0, '1f9b8-1f3ff-200d-2640':0, '1f9b8-1f3fb-200d-2642':0, '1f9b8-1f3fc-200d-2642':0, '1f9b8-1f3fd-200d-2642':0, '1f9b8-1f3fe-200d-2642':0, '1f9b8-1f3ff-200d-2642':0, '1f9b8-1f3fb':0, '1f9b8-1f3fc':0, '1f9b8-1f3fd':0, '1f9b8-1f3fe':0, '1f9b8-1f3ff':0, '1f9b9-1f3fb-200d-2640':0, '1f9b9-1f3fc-200d-2640':0, '1f9b9-1f3fd-200d-2640':0, '1f9b9-1f3fe-200d-2640':0, '1f9b9-1f3ff-200d-2640':0, '1f9b9-1f3fb-200d-2642':0, '1f9b9-1f3fc-200d-2642':0, '1f9b9-1f3fd-200d-2642':0, '1f9b9-1f3fe-200d-2642':0, '1f9b9-1f3ff-200d-2642':0, '1f9b9-1f3fb':0, '1f9b9-1f3fc':0, '1f9b9-1f3fd':0, '1f9b9-1f3fe':0, '1f9b9-1f3ff':0, '1f9bb-1f3fb':0, '1f9bb-1f3fc':0, '1f9bb-1f3fd':0, '1f9bb-1f3fe':0, '1f9bb-1f3ff':0, '1f9cd-1f3fb-200d-2640':0, '1f9cd-1f3fc-200d-2640':0, '1f9cd-1f3fd-200d-2640':0, '1f9cd-1f3fe-200d-2640':0, '1f9cd-1f3ff-200d-2640':0, '1f9cd-1f3fb-200d-2642':0, '1f9cd-1f3fc-200d-2642':0, '1f9cd-1f3fd-200d-2642':0, '1f9cd-1f3fe-200d-2642':0, '1f9cd-1f3ff-200d-2642':0, '1f9cd-1f3fb':0, '1f9cd-1f3fc':0, '1f9cd-1f3fd':0, '1f9cd-1f3fe':0, '1f9cd-1f3ff':0, '1f9ce-1f3fb-200d-2640':0, '1f9ce-1f3fc-200d-2640':0, '1f9ce-1f3fd-200d-2640':0, '1f9ce-1f3fe-200d-2640':0, '1f9ce-1f3ff-200d-2640':0, '1f9ce-1f3fb-200d-2642':0, '1f9ce-1f3fc-200d-2642':0, '1f9ce-1f3fd-200d-2642':0, '1f9ce-1f3fe-200d-2642':0, '1f9ce-1f3ff-200d-2642':0, '1f9ce-1f3fb':0, '1f9ce-1f3fc':0, '1f9ce-1f3fd':0, '1f9ce-1f3fe':0, '1f9ce-1f3ff':0, '1f9cf-1f3fb-200d-2640':0, '1f9cf-1f3fc-200d-2640':0, '1f9cf-1f3fd-200d-2640':0, '1f9cf-1f3fe-200d-2640':0, '1f9cf-1f3ff-200d-2640':0, '1f9cf-1f3fb-200d-2642':0, '1f9cf-1f3fc-200d-2642':0, '1f9cf-1f3fd-200d-2642':0, '1f9cf-1f3fe-200d-2642':0, '1f9cf-1f3ff-200d-2642':0, '1f9cf-1f3fb':0, '1f9cf-1f3fc':0, '1f9cf-1f3fd':0, '1f9cf-1f3fe':0, '1f9cf-1f3ff':0, '1f9d1-1f3fb-200d-1f33e':0, '1f9d1-1f3fc-200d-1f33e':0, '1f9d1-1f3fd-200d-1f33e':0, '1f9d1-1f3fe-200d-1f33e':0, '1f9d1-1f3ff-200d-1f33e':0, '1f9d1-1f3fb-200d-1f373':0, '1f9d1-1f3fc-200d-1f373':0, '1f9d1-1f3fd-200d-1f373':0, '1f9d1-1f3fe-200d-1f373':0, '1f9d1-1f3ff-200d-1f373':0, '1f9d1-1f3fb-200d-1f37c':0, '1f9d1-1f3fc-200d-1f37c':0, '1f9d1-1f3fd-200d-1f37c':0, '1f9d1-1f3fe-200d-1f37c':0, '1f9d1-1f3ff-200d-1f37c':0, '1f9d1-1f3fb-200d-1f384':0, '1f9d1-1f3fc-200d-1f384':0, '1f9d1-1f3fd-200d-1f384':0, '1f9d1-1f3fe-200d-1f384':0, '1f9d1-1f3ff-200d-1f384':0, '1f9d1-1f3fb-200d-1f393':0, '1f9d1-1f3fc-200d-1f393':0, '1f9d1-1f3fd-200d-1f393':0, '1f9d1-1f3fe-200d-1f393':0, '1f9d1-1f3ff-200d-1f393':0, '1f9d1-1f3fb-200d-1f3a4':0, '1f9d1-1f3fc-200d-1f3a4':0, '1f9d1-1f3fd-200d-1f3a4':0, '1f9d1-1f3fe-200d-1f3a4':0, '1f9d1-1f3ff-200d-1f3a4':0, '1f9d1-1f3fb-200d-1f3a8':0, '1f9d1-1f3fc-200d-1f3a8':0, '1f9d1-1f3fd-200d-1f3a8':0, '1f9d1-1f3fe-200d-1f3a8':0, '1f9d1-1f3ff-200d-1f3a8':0, '1f9d1-1f3fb-200d-1f3eb':0, '1f9d1-1f3fc-200d-1f3eb':0, '1f9d1-1f3fd-200d-1f3eb':0, '1f9d1-1f3fe-200d-1f3eb':0, '1f9d1-1f3ff-200d-1f3eb':0, '1f9d1-1f3fb-200d-1f3ed':0, '1f9d1-1f3fc-200d-1f3ed':0, '1f9d1-1f3fd-200d-1f3ed':0, '1f9d1-1f3fe-200d-1f3ed':0, '1f9d1-1f3ff-200d-1f3ed':0, '1f9d1-1f3fb-200d-1f4bb':0, '1f9d1-1f3fc-200d-1f4bb':0, '1f9d1-1f3fd-200d-1f4bb':0, '1f9d1-1f3fe-200d-1f4bb':0, '1f9d1-1f3ff-200d-1f4bb':0, '1f9d1-1f3fb-200d-1f4bc':0, '1f9d1-1f3fc-200d-1f4bc':0, '1f9d1-1f3fd-200d-1f4bc':0, '1f9d1-1f3fe-200d-1f4bc':0, '1f9d1-1f3ff-200d-1f4bc':0, '1f9d1-1f3fb-200d-1f527':0, '1f9d1-1f3fc-200d-1f527':0, '1f9d1-1f3fd-200d-1f527':0, '1f9d1-1f3fe-200d-1f527':0, '1f9d1-1f3ff-200d-1f527':0, '1f9d1-1f3fb-200d-1f52c':0, '1f9d1-1f3fc-200d-1f52c':0, '1f9d1-1f3fd-200d-1f52c':0, '1f9d1-1f3fe-200d-1f52c':0, '1f9d1-1f3ff-200d-1f52c':0, '1f9d1-1f3fb-200d-1f680':0, '1f9d1-1f3fc-200d-1f680':0, '1f9d1-1f3fd-200d-1f680':0, '1f9d1-1f3fe-200d-1f680':0, '1f9d1-1f3ff-200d-1f680':0, '1f9d1-1f3fb-200d-1f692':0, '1f9d1-1f3fc-200d-1f692':0, '1f9d1-1f3fd-200d-1f692':0, '1f9d1-1f3fe-200d-1f692':0, '1f9d1-1f3ff-200d-1f692':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fb-200d-1f9af':0, '1f9d1-1f3fc-200d-1f9af':0, '1f9d1-1f3fd-200d-1f9af':0, '1f9d1-1f3fe-200d-1f9af':0, '1f9d1-1f3ff-200d-1f9af':0, '1f9d1-1f3fb-200d-1f9b0':0, '1f9d1-1f3fc-200d-1f9b0':0, '1f9d1-1f3fd-200d-1f9b0':0, '1f9d1-1f3fe-200d-1f9b0':0, '1f9d1-1f3ff-200d-1f9b0':0, '1f9d1-1f3fb-200d-1f9b1':0, '1f9d1-1f3fc-200d-1f9b1':0, '1f9d1-1f3fd-200d-1f9b1':0, '1f9d1-1f3fe-200d-1f9b1':0, '1f9d1-1f3ff-200d-1f9b1':0, '1f9d1-1f3fb-200d-1f9b2':0, '1f9d1-1f3fc-200d-1f9b2':0, '1f9d1-1f3fd-200d-1f9b2':0, '1f9d1-1f3fe-200d-1f9b2':0, '1f9d1-1f3ff-200d-1f9b2':0, '1f9d1-1f3fb-200d-1f9b3':0, '1f9d1-1f3fc-200d-1f9b3':0, '1f9d1-1f3fd-200d-1f9b3':0, '1f9d1-1f3fe-200d-1f9b3':0, '1f9d1-1f3ff-200d-1f9b3':0, '1f9d1-1f3fb-200d-1f9bc':0, '1f9d1-1f3fc-200d-1f9bc':0, '1f9d1-1f3fd-200d-1f9bc':0, '1f9d1-1f3fe-200d-1f9bc':0, '1f9d1-1f3ff-200d-1f9bc':0, '1f9d1-1f3fb-200d-1f9bd':0, '1f9d1-1f3fc-200d-1f9bd':0, '1f9d1-1f3fd-200d-1f9bd':0, '1f9d1-1f3fe-200d-1f9bd':0, '1f9d1-1f3ff-200d-1f9bd':0, '1f9d1-1f3fb-200d-2695':0, '1f9d1-1f3fc-200d-2695':0, '1f9d1-1f3fd-200d-2695':0, '1f9d1-1f3fe-200d-2695':0, '1f9d1-1f3ff-200d-2695':0, '1f9d1-1f3fb-200d-2696':0, '1f9d1-1f3fc-200d-2696':0, '1f9d1-1f3fd-200d-2696':0, '1f9d1-1f3fe-200d-2696':0, '1f9d1-1f3ff-200d-2696':0, '1f9d1-1f3fb-200d-2708':0, '1f9d1-1f3fc-200d-2708':0, '1f9d1-1f3fd-200d-2708':0, '1f9d1-1f3fe-200d-2708':0, '1f9d1-1f3ff-200d-2708':0, '1f9d1-1f3fb':0, '1f9d1-1f3fc':0, '1f9d1-1f3fd':0, '1f9d1-1f3fe':0, '1f9d1-1f3ff':0, '1f9d2-1f3fb':0, '1f9d2-1f3fc':0, '1f9d2-1f3fd':0, '1f9d2-1f3fe':0, '1f9d2-1f3ff':0, '1f9d3-1f3fb':0, '1f9d3-1f3fc':0, '1f9d3-1f3fd':0, '1f9d3-1f3fe':0, '1f9d3-1f3ff':0, '1f9d4-1f3fb-200d-2640':0, '1f9d4-1f3fc-200d-2640':0, '1f9d4-1f3fd-200d-2640':0, '1f9d4-1f3fe-200d-2640':0, '1f9d4-1f3ff-200d-2640':0, '1f9d4-1f3fb-200d-2642':0, '1f9d4-1f3fc-200d-2642':0, '1f9d4-1f3fd-200d-2642':0, '1f9d4-1f3fe-200d-2642':0, '1f9d4-1f3ff-200d-2642':0, '1f9d4-1f3fb':0, '1f9d4-1f3fc':0, '1f9d4-1f3fd':0, '1f9d4-1f3fe':0, '1f9d4-1f3ff':0, '1f9d5-1f3fb':0, '1f9d5-1f3fc':0, '1f9d5-1f3fd':0, '1f9d5-1f3fe':0, '1f9d5-1f3ff':0, '1f9d6-1f3fb-200d-2640':0, '1f9d6-1f3fc-200d-2640':0, '1f9d6-1f3fd-200d-2640':0, '1f9d6-1f3fe-200d-2640':0, '1f9d6-1f3ff-200d-2640':0, '1f9d6-1f3fb-200d-2642':0, '1f9d6-1f3fc-200d-2642':0, '1f9d6-1f3fd-200d-2642':0, '1f9d6-1f3fe-200d-2642':0, '1f9d6-1f3ff-200d-2642':0, '1f9d6-1f3fb':0, '1f9d6-1f3fc':0, '1f9d6-1f3fd':0, '1f9d6-1f3fe':0, '1f9d6-1f3ff':0, '1f9d7-1f3fb-200d-2640':0, '1f9d7-1f3fc-200d-2640':0, '1f9d7-1f3fd-200d-2640':0, '1f9d7-1f3fe-200d-2640':0, '1f9d7-1f3ff-200d-2640':0, '1f9d7-1f3fb-200d-2642':0, '1f9d7-1f3fc-200d-2642':0, '1f9d7-1f3fd-200d-2642':0, '1f9d7-1f3fe-200d-2642':0, '1f9d7-1f3ff-200d-2642':0, '1f9d7-1f3fb':0, '1f9d7-1f3fc':0, '1f9d7-1f3fd':0, '1f9d7-1f3fe':0, '1f9d7-1f3ff':0, '1f9d8-1f3fb-200d-2640':0, '1f9d8-1f3fc-200d-2640':0, '1f9d8-1f3fd-200d-2640':0, '1f9d8-1f3fe-200d-2640':0, '1f9d8-1f3ff-200d-2640':0, '1f9d8-1f3fb-200d-2642':0, '1f9d8-1f3fc-200d-2642':0, '1f9d8-1f3fd-200d-2642':0, '1f9d8-1f3fe-200d-2642':0, '1f9d8-1f3ff-200d-2642':0, '1f9d8-1f3fb':0, '1f9d8-1f3fc':0, '1f9d8-1f3fd':0, '1f9d8-1f3fe':0, '1f9d8-1f3ff':0, '1f9d9-1f3fb-200d-2640':0, '1f9d9-1f3fc-200d-2640':0, '1f9d9-1f3fd-200d-2640':0, '1f9d9-1f3fe-200d-2640':0, '1f9d9-1f3ff-200d-2640':0, '1f9d9-1f3fb-200d-2642':0, '1f9d9-1f3fc-200d-2642':0, '1f9d9-1f3fd-200d-2642':0, '1f9d9-1f3fe-200d-2642':0, '1f9d9-1f3ff-200d-2642':0, '1f9d9-1f3fb':0, '1f9d9-1f3fc':0, '1f9d9-1f3fd':0, '1f9d9-1f3fe':0, '1f9d9-1f3ff':0, '1f9da-1f3fb-200d-2640':0, '1f9da-1f3fc-200d-2640':0, '1f9da-1f3fd-200d-2640':0, '1f9da-1f3fe-200d-2640':0, '1f9da-1f3ff-200d-2640':0, '1f9da-1f3fb-200d-2642':0, '1f9da-1f3fc-200d-2642':0, '1f9da-1f3fd-200d-2642':0, '1f9da-1f3fe-200d-2642':0, '1f9da-1f3ff-200d-2642':0, '1f9da-1f3fb':0, '1f9da-1f3fc':0, '1f9da-1f3fd':0, '1f9da-1f3fe':0, '1f9da-1f3ff':0, '1f9db-1f3fb-200d-2640':0, '1f9db-1f3fc-200d-2640':0, '1f9db-1f3fd-200d-2640':0, '1f9db-1f3fe-200d-2640':0, '1f9db-1f3ff-200d-2640':0, '1f9db-1f3fb-200d-2642':0, '1f9db-1f3fc-200d-2642':0, '1f9db-1f3fd-200d-2642':0, '1f9db-1f3fe-200d-2642':0, '1f9db-1f3ff-200d-2642':0, '1f9db-1f3fb':0, '1f9db-1f3fc':0, '1f9db-1f3fd':0, '1f9db-1f3fe':0, '1f9db-1f3ff':0, '1f9dc-1f3fb-200d-2640':0, '1f9dc-1f3fc-200d-2640':0, '1f9dc-1f3fd-200d-2640':0, '1f9dc-1f3fe-200d-2640':0, '1f9dc-1f3ff-200d-2640':0, '1f9dc-1f3fb-200d-2642':0, '1f9dc-1f3fc-200d-2642':0, '1f9dc-1f3fd-200d-2642':0, '1f9dc-1f3fe-200d-2642':0, '1f9dc-1f3ff-200d-2642':0, '1f9dc-1f3fb':0, '1f9dc-1f3fc':0, '1f9dc-1f3fd':0, '1f9dc-1f3fe':0, '1f9dc-1f3ff':0, '1f9dd-1f3fb-200d-2640':0, '1f9dd-1f3fc-200d-2640':0, '1f9dd-1f3fd-200d-2640':0, '1f9dd-1f3fe-200d-2640':0, '1f9dd-1f3ff-200d-2640':0, '1f9dd-1f3fb-200d-2642':0, '1f9dd-1f3fc-200d-2642':0, '1f9dd-1f3fd-200d-2642':0, '1f9dd-1f3fe-200d-2642':0, '1f9dd-1f3ff-200d-2642':0, '1f9dd-1f3fb':0, '1f9dd-1f3fc':0, '1f9dd-1f3fd':0, '1f9dd-1f3fe':0, '1f9dd-1f3ff':0, '261d-1f3fb':0, '261d-1f3fc':0, '261d-1f3fd':0, '261d-1f3fe':0, '261d-1f3ff':0, '26f9-1f3fb-200d-2640':0, '26f9-1f3fc-200d-2640':0, '26f9-1f3fd-200d-2640':0, '26f9-1f3fe-200d-2640':0, '26f9-1f3ff-200d-2640':0, '26f9-1f3fb-200d-2642':0, '26f9-1f3fc-200d-2642':0, '26f9-1f3fd-200d-2642':0, '26f9-1f3fe-200d-2642':0, '26f9-1f3ff-200d-2642':0, '26f9-1f3fb':0, '26f9-1f3fc':0, '26f9-1f3fd':0, '26f9-1f3fe':0, '26f9-1f3ff':0, '270a-1f3fb':0, '270a-1f3fc':0, '270a-1f3fd':0, '270a-1f3fe':0, '270a-1f3ff':0, '270b-1f3fb':0, '270b-1f3fc':0, '270b-1f3fd':0, '270b-1f3fe':0, '270b-1f3ff':0, '270c-1f3fb':0, '270c-1f3fc':0, '270c-1f3fd':0, '270c-1f3fe':0, '270c-1f3ff':0, '270d-1f3fb':0, '270d-1f3fc':0, '270d-1f3fd':0, '270d-1f3fe':0, '270d-1f3ff':0}};\n\nconst Emoji: {[emoji: string]: number} = EmojiVersions[''];\nfor(const version in EmojiVersions) {\n if(version) {\n Object.assign(Emoji, EmojiVersions[version as EMOJI_VERSION]);\n }\n}\n\nexport default Emoji;\n\n/* Emoji[\"00a9-fe0f\"] = 6362;\nEmoji[\"00ae-fe0f\"] = 6363;\nEmoji[\"2122-fe0f\"] = 6364; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport LatinizeMap from '../config/latinizeMap';\n\nexport const badCharsRe = /[`~!@#$%^&*()\\-_=+\\[\\]\\\\|{}'\";:\\/?.>,<]+/g;\nconst trimRe = /^\\s+|\\s$/g;\n\nconst C2L: {[k: string]: string} = {\n 'ะน': 'q',\n 'ั†': 'w',\n 'ัƒ': 'e',\n 'ะบ': 'r',\n 'ะต': 't',\n 'ะฝ': 'y',\n 'ะณ': 'u',\n 'ัˆ': 'i',\n 'ั‰': 'o',\n 'ะท': 'p',\n 'ั…': '[',\n 'ัŠ': ']',\n 'ั„': 'a',\n 'ั‹': 's',\n 'ะฒ': 'd',\n 'ะฐ': 'f',\n 'ะฟ': 'g',\n 'ั€': 'h',\n 'ะพ': 'j',\n 'ะป': 'k',\n 'ะด': 'l',\n 'ะถ': ';',\n 'ั': '\\'',\n 'ั': 'z',\n 'ั‡': 'x',\n 'ั': 'c',\n 'ะผ': 'v',\n 'ะธ': 'b',\n 'ั‚': 'n',\n 'ัŒ': 'm',\n 'ะฑ': ',',\n 'ัŽ': '.',\n '.': '/'\n};\n\nexport function clearBadCharsAndTrim(text: string) {\n return text.replace(badCharsRe, '').replace(trimRe, '');\n}\n\nexport function fixCyrillic(text: string) {\n return text.toLowerCase().replace(/[\\wะฐ-ั]/g, (ch) => {\n const latinizeCh = C2L[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport function latinizeString(text: string) {\n return text.replace(/[^A-Za-z0-9]/g, (ch) => {\n const latinizeCh = LatinizeMap[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport default function cleanSearchText(text: string, latinize = true) {\n return processSearchText(text, {\n clearBadChars: true,\n latinize,\n ignoreCase: true\n });\n}\n\nexport type ProcessSearchTextOptions = Partial<{\n clearBadChars: boolean,\n latinize: boolean,\n ignoreCase: boolean,\n includeTag: boolean\n}>;\n\nexport function processSearchText(text: string, options: ProcessSearchTextOptions = {}) {\n const hasTag = options.includeTag && text.charAt(0) === '%';\n const originalText = text;\n if(options.clearBadChars) text = clearBadCharsAndTrim(text);\n if(options.latinize) text = latinizeString(text);\n if(options.ignoreCase) text = text.toLowerCase();\n if(hasTag) text = '%' + text;\n if(options.latinize) text += '\\x01' + fixCyrillic(originalText);\n return text;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {InputFileLocation, InputStickerSet, InputWebFileLocation} from '../layer';\nimport type {DownloadOptions} from '../lib/mtproto/apiFileManager';\n\nconst FILENAME_JOINER = '_';\n\nexport function getFileNameByLocation(location: InputFileLocation | InputWebFileLocation, options?: Partial<{\n fileName: string,\n downloadId: string\n}>) {\n const fileName = '';// (options?.fileName || '').split('.');\n const ext = fileName[fileName.length - 1] || '';\n\n let str: string;\n switch(location._) {\n case 'inputPhotoFileLocation': {\n str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\n break;\n }\n\n case 'inputDocumentFileLocation': {\n str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\n break;\n }\n\n case 'inputPeerPhotoFileLocation':\n str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER);\n break;\n\n case 'inputStickerSetThumb': {\n const id = (location.stickerset as InputStickerSet.inputStickerSetID).id ||\n (location.stickerset as InputStickerSet.inputStickerSetShortName).short_name ||\n (location.stickerset as InputStickerSet.inputStickerSetDice).emoticon ||\n location.stickerset._;\n str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER);\n break;\n }\n\n case 'inputFileLocation': {\n str = [location.volume_id, location.local_id].join(FILENAME_JOINER);\n break;\n }\n\n case 'inputWebFileLocation': {\n str = ['webFile', location.url].join(FILENAME_JOINER);\n break;\n }\n\n default: {\n console.error('Unrecognized location:', location);\n str = '';\n break;\n }\n }\n\n return str + (options?.downloadId ? '_download' : '') + (ext ? '.' + ext : ext);\n}\n\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\n // console.log('getFileURL', location);\n // const perf = performance.now();\n const encoded = encodeURIComponent(JSON.stringify(options));\n // console.log('getFileURL encode:', performance.now() - perf, encoded);\n\n return /* '/' + */type + '/' + encoded;\n}\n","import {RestrictionReason} from '../layer';\n\nconst platforms = new Set([\n 'all',\n 'web',\n 'webk'\n]);\n\nconst ignore = new Set();\n\nexport function getRestrictionReason(reasons: RestrictionReason[]) {\n // return reasons[0];\n return reasons.find((reason) => platforms.has(reason.platform) && !ignore.has(reason.reason));\n}\n\nexport function isRestricted(reasons: RestrictionReason[]) {\n return !!getRestrictionReason(reasons);\n}\n\nexport function ignoreRestrictionReasons(reasons: string[]) {\n ignore.clear();\n reasons.forEach((reason) => {\n ignore.add(reason);\n });\n}\n","import isObject from '../../../../helpers/object/isObject';\nimport {InputChannel, InputPeer, Peer} from '../../../../layer';\nimport {NULL_PEER_ID} from '../../../mtproto/mtproto_config';\n\nexport default function getPeerId(peerId: {user_id: UserId} | {channel_id: ChatId} | {chat_id: ChatId} | InputPeer | InputChannel | PeerId | string): PeerId {\n if(peerId !== undefined && ((peerId as string).isPeerId ? (peerId as string).isPeerId() : false)) return peerId as PeerId;\n // if(typeof(peerId) === 'string' && /^[uc]/.test(peerId)) return peerId as PeerId;\n // if(typeof(peerId) === 'number') return peerId;\n else if(isObject(peerId)) {\n const userId = (peerId as Peer.peerUser).user_id;\n if(userId !== undefined) {\n return userId.toPeerId(false);\n }\n\n const chatId = (peerId as Peer.peerChannel).channel_id || (peerId as Peer.peerChat).chat_id;\n if(chatId !== undefined) {\n return chatId.toPeerId(true);\n }\n\n return NULL_PEER_ID; // maybe it is an inputPeerSelf\n // } else if(!peerId) return 'u0';\n } else if(!peerId) return NULL_PEER_ID;\n\n const isUser = (peerId as string).charAt(0) === 'u';\n const peerParams = (peerId as string).substr(1).split('_');\n\n return isUser ? peerParams[0].toPeerId() : (peerParams[0] || '').toPeerId(true);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport Modes from '../../config/modes';\nimport makeError from '../../helpers/makeError';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {logger} from '../logger';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\n */\nexport type IDBIndex = {\n indexName: string,\n keyPath: string,\n objectParameters: IDBIndexParameters\n};\n\nexport type IDBStore = {\n name: string,\n indexes?: IDBIndex[]\n};\n\nexport type IDBOptions = {\n name?: string,\n storeName: string,\n stores?: IDBStore[],\n version?: number\n};\n\nconst DEBUG = false;\n\nexport class IDB {\n private static INSTANCES: IDB[] = [];\n private openDbPromise: Promise;\n private db: IDBDatabase;\n private storageIsAvailable: boolean;\n private log: ReturnType;\n private name: string;\n private version: number;\n private stores: IDBStore[];\n\n constructor(db: Database) {\n safeAssign(this, db);\n\n if(Modes.test) {\n this.name += '_test';\n }\n\n this.storageIsAvailable = true;\n this.log = logger(['IDB', db.name].join('-'));\n this.log('constructor');\n\n this.openDatabase(true);\n\n IDB.INSTANCES.push(this);\n }\n\n public isAvailable() {\n return this.storageIsAvailable;\n }\n\n public openDatabase(createNew = false): Promise {\n if(this.openDbPromise && !createNew) {\n return this.openDbPromise;\n }\n\n const createIndexes = (os: IDBObjectStore, store: IDBStore) => {\n const indexNames = Array.from(os.indexNames);\n for(const indexName of indexNames) {\n os.deleteIndex(indexName);\n }\n\n if(!store.indexes?.length) {\n return;\n }\n\n for(const index of store.indexes) {\n if(os.indexNames.contains(index.indexName)) {\n continue;\n }\n\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\n }\n };\n\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\n const os = db.createObjectStore(store.name);\n createIndexes(os, store);\n };\n\n try {\n var request = indexedDB.open(this.name, this.version);\n\n if(!request) {\n return Promise.reject();\n }\n } catch(error) {\n this.log.error('error opening db', (error as Error).message);\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n let finished = false;\n setTimeout(() => {\n if(!finished) {\n request.onerror(makeError('IDB_CREATE_TIMEOUT') as Event);\n }\n }, 3000);\n\n return this.openDbPromise = new Promise((resolve, reject) => {\n request.onsuccess = (event) => {\n finished = true;\n const db = request.result;\n let calledNew = false;\n\n this.log('Opened');\n\n db.onerror = (error) => {\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', error);\n reject(error);\n };\n\n db.onclose = (e) => {\n this.log.error('closed:', e);\n !calledNew && this.openDatabase();\n };\n\n db.onabort = (e) => {\n this.log.error('abort:', e);\n const transaction = e.target as IDBTransaction;\n\n this.openDatabase(calledNew = true);\n\n if(transaction.onerror) {\n transaction.onerror(e);\n }\n\n db.close();\n };\n\n db.onversionchange = (e) => {\n this.log.error('onversionchange, lol?');\n };\n\n resolve(this.db = db);\n };\n\n request.onerror = (event) => {\n finished = true;\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', event);\n reject(event);\n };\n\n request.onupgradeneeded = (event) => {\n finished = true;\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\n\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n this.stores.forEach((store) => {\n /* if(db.objectStoreNames.contains(store.name)) {\n //if(event.oldVersion === 1) {\n db.deleteObjectStore(store.name);\n //}\n } */\n\n if(!db.objectStoreNames.contains(store.name)) {\n createObjectStore(db, store);\n } else {\n const txn = target.transaction;\n const os = txn.objectStore(store.name);\n createIndexes(os, store);\n }\n });\n };\n });\n }\n\n public static create>(db: T) {\n return this.INSTANCES.find((instance) => instance.name === db.name) ?? new IDB(db);\n }\n\n public static closeDatabases(preserve?: IDB) {\n this.INSTANCES.forEach((storage) => {\n if(preserve && preserve === storage) {\n return;\n }\n\n const db = storage.db;\n if(db) {\n db.onclose = () => {};\n db.close();\n }\n });\n }\n}\n\nexport default class IDBStorage, StoreName extends string = T['stores'][0]['name']> {\n private log: ReturnType;\n private storeName: T['stores'][0]['name'];\n private idb: IDB;\n\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\n this.storeName = storeName;\n this.log = logger(['IDB', db.name, storeName].join('-'));\n this.idb = IDB.create(db);\n }\n\n /**\n * ! WARNING ! function requires at least one opened connection\n */\n /* public static clearObjectStores() {\n const storage = this.STORAGES[0];\n this.closeDatabases(storage);\n\n const names = Array.from(storage.db.objectStoreNames);\n const promises = names.map((name) => storage.clear(name));\n return Promise.all(promises);\n } */\n\n /* public static deleteDatabase() {\n this.closeDatabases();\n\n const storages = this.STORAGES;\n const dbNames = Array.from(new Set(storages.map((storage) => storage.name)));\n const promises = dbNames.map((dbName) => {\n return new Promise((resolve, reject) => {\n const deleteRequest = indexedDB.deleteDatabase(dbName);\n\n deleteRequest.onerror = () => {\n reject();\n };\n\n deleteRequest.onsuccess = () => {\n resolve();\n };\n });\n });\n\n return Promise.all(promises);\n } */\n\n public delete(entryName: string | string[], storeName?: StoreName): Promise {\n // return Promise.resolve();\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.delete(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'delete: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n public clear(storeName?: StoreName): Promise {\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\n }\n\n public save(entryName: string | string[], value: any | any[], storeName?: StoreName) {\n // const handleError = (error: Error) => {\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\n // setTimeout(() => {\n // this.save(entryName, value);\n // }, 2e3);\n // } else {\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\n // }\n // };\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n value = [].concat(value);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'save: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n // public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // //return Promise.resolve(blobConstruct([blob]));\n // if(!(blob instanceof Blob)) {\n // blob = blobConstruct(blob);\n // }\n\n // return this.save(fileName, blob);\n // }\n\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\n return Promise.reject();\n }\n\n if(!(blob instanceof Blob)) {\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\n return this.storagePutB64String(db, fileName, address).then(() => {\n return blob;\n });\n }\n\n try {\n var reader = new FileReader();\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n let promise = new Promise((resolve, reject) => {\n reader.onloadend = () => {\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\n resolve(blob);\n }, reject);\n }\n\n reader.onerror = reject;\n });\n\n\n try {\n reader.readAsDataURL(blob);\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n return promise;\n }\n\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\n try {\n var objectStore = db.transaction([this.storeName], 'readwrite')\n .objectStore(this.storeName);\n var request = objectStore.put(b64string, fileName);\n } catch(error) {\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n resolve();\n };\n\n request.onerror = reject;\n });\n }\n\n public getBlobSize(blob: any) {\n return blob.size || blob.byteLength || blob.length;\n } */\n\n public get(entryName: string[], storeName?: StoreName): Promise;\n public get(entryName: string, storeName?: StoreName): Promise;\n public get(entryName: string | string[], storeName?: StoreName): Promise | Promise {\n // return Promise.reject();\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n if(!entryName) {\n return undefined;\n }\n\n entryName = [].concat(entryName);\n } else if(!entryName.length) {\n return Promise.resolve([]) as any;\n }\n\n return this.getObjectStore('readonly', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.get(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'get: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n private getObjectStore(\n mode: IDBTransactionMode,\n callback: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[],\n log?: string,\n storeName = this.storeName\n ) {\n let perf: number;\n\n if(log) {\n perf = performance.now();\n this.log(log + ': start');\n }\n\n return this.idb.openDatabase().then((db) => {\n return new Promise((resolve, reject) => {\n /* if(mode === 'readwrite') {\n return;\n } */\n\n const transaction = db.transaction([storeName], mode);\n\n const onError = () => {\n clearTimeout(timeout);\n reject(transaction.error);\n };\n\n // let resolved = false;\n const onComplete = (/* what: string */) => {\n clearTimeout(timeout);\n\n if(log) {\n this.log(log + ': end', performance.now() - perf/* , what */);\n }\n\n // if(resolved) {\n // return;\n // }\n\n // resolved = true;\n const results = requests.map((r) => r.result);\n resolve(isArray ? results : results[0]);\n };\n\n transaction.onerror = onError;\n\n // * have to wait while clearing or setting something\n const waitForTransactionComplete = mode === 'readwrite';\n if(waitForTransactionComplete) {\n transaction.oncomplete = () => onComplete(/* 'transaction' */);\n }\n\n const timeout = setTimeout(() => {\n this.log.error('transaction not finished', transaction, log);\n }, 10000);\n\n /* transaction.addEventListener('abort', (e) => {\n //handleError();\n this.log.error('IndexedDB: transaction abort!', transaction.error);\n }); */\n\n const callbackResult = callback(transaction.objectStore(storeName));\n\n const isArray = Array.isArray(callbackResult);\n const requests: IDBRequest[] = isArray ? callbackResult : [].concat(callbackResult) as any;\n\n if(waitForTransactionComplete) {\n return;\n }\n\n const length = requests.length;\n let left = length;\n\n const onRequestFinished = () => {\n if(transaction.error) {\n return;\n }\n\n if(!--left) {\n onComplete(/* 'requests' */);\n }\n };\n\n for(let i = 0; i < length; ++i) {\n const request = requests[i];\n request.onerror = onError;\n request.onsuccess = onRequestFinished;\n }\n });\n });\n }\n\n public getAll(storeName?: StoreName): Promise {\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '', storeName);\n }\n\n /* public getAllKeys(): Promise> {\n console.time('getAllEntries');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.getAllKeys();\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var result = event.target.result;\n resolve(result);\n console.timeEnd('getAllEntries');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public isFileExists(fileName: string): Promise {\n console.time('isFileExists');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.openCursor(fileName);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var cursor = event.target.result;\n resolve(!!cursor);\n console.timeEnd('isFileExists');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public getFileWriter(fileName: string, mimeType: string) {\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\n return this.saveFile(fileName, blob);\n });\n\n return Promise.resolve(fakeWriter);\n } */\n}\n","import type ENVIRONMENT from '.';\n\nlet environment: typeof ENVIRONMENT;\nexport function getEnvironment() {\n return environment;\n}\n\nexport function setEnvironment(env: typeof environment) {\n return environment = env;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, PollResults, Poll, WebPage, GroupCall, GroupCallParticipant, ReactionCount, MessagePeerReaction, PhoneCall, Config, Reaction} from '../layer';\nimport type {Dialog, ForumTopic, MessagesStorageKey, MyMessage} from './appManagers/appMessagesManager';\nimport type {MyDialogFilter} from './storages/filters';\nimport type {Folder} from './storages/dialogs';\nimport type {UserTyping} from './appManagers/appProfileManager';\nimport type {MyDraftMessage} from './appManagers/appDraftsManager';\nimport type {ConnectionStatusChange} from './mtproto/connectionStatus';\nimport type {GroupCallId} from './appManagers/appGroupCallsManager';\nimport type {AppManagers} from './appManagers/managers';\nimport type {State} from '../config/state';\nimport type {Progress} from './appManagers/appDownloadManager';\nimport type {CallId} from './appManagers/appCallsManager';\nimport type {MyDocument} from './appManagers/appDocsManager';\nimport type {MTAppConfig} from './mtproto/appConfig';\nimport {NULL_PEER_ID, UserAuth} from './mtproto/mtproto_config';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\nimport {IS_WORKER} from '../helpers/context';\n\nexport type BroadcastEvents = {\n 'chat_full_update': ChatId,\n 'chat_update': ChatId,\n 'chat_toggle_forum': {chatId: ChatId, enabled: boolean},\n 'chat_participant': Update.updateChannelParticipant,\n\n 'channel_update': ChatId,\n\n 'user_update': UserId,\n 'user_auth': UserAuth,\n 'user_full_update': UserId,\n\n 'peer_pinned_messages': {peerId: PeerId, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: PeerId, maxId: number},\n 'peer_typings': {peerId: PeerId, threadId?: number, typings: UserTyping[]},\n 'peer_block': {peerId: PeerId, blocked: boolean},\n 'peer_title_edit': {peerId: PeerId, threadId?: number},\n 'peer_bio_edit': PeerId,\n 'peer_deleted': PeerId, // left chat, deleted user dialog, left channel\n 'peer_full_update': PeerId,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_new': MyDialogFilter,\n 'filter_order': number[],\n\n 'folder_unread': Omit,\n\n 'dialog_draft': {peerId: PeerId, dialog: Dialog | ForumTopic, drop: boolean, draft: MyDraftMessage | undefined},\n 'dialog_unread': {peerId: PeerId, dialog: Dialog | ForumTopic},\n 'dialog_flush': {peerId: PeerId, dialog: Dialog},\n 'dialog_drop': Dialog | ForumTopic,\n 'dialog_migrate': {migrateFrom: PeerId, migrateTo: PeerId},\n // 'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog | ForumTopic,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': Map}>,\n\n 'history_append': {storageKey: MessagesStorageKey, message: Message.message},\n 'history_update': {storageKey: MessagesStorageKey, message: MyMessage, sequential?: boolean},\n 'history_reply_markup': {peerId: PeerId},\n 'history_multiappend': MyMessage,\n 'history_delete': {peerId: PeerId, msgs: Set},\n 'history_forbidden': PeerId,\n 'history_reload': PeerId,\n // 'history_request': void,\n\n 'message_edit': {storageKey: MessagesStorageKey, peerId: PeerId, mid: number, message: MyMessage},\n 'message_sent': {storageKey: MessagesStorageKey, tempId: number, tempMessage: any, mid: number, message: MyMessage},\n 'message_error': {storageKey: MessagesStorageKey, tempId: number, error: ApiError},\n 'message_transcribed': {peerId: PeerId, mid: number, text: string, pending?: boolean},\n 'messages_views': {peerId: PeerId, mid: number, views: number}[],\n 'messages_reactions': {message: Message.message, changedResults: ReactionCount[]}[],\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: PeerId, mids: number[]},\n 'messages_media_read': {peerId: PeerId, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': Message.message,\n 'scheduled_delete': {peerId: PeerId, mids: number[]},\n\n 'album_edit': {peerId: PeerId, groupId: string, deletedMids: number[], messages: Message.message[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n 'stickers_updated': {type: 'recent' | 'faved', stickers: MyDocument[]},\n 'stickers_top': Long,\n 'sticker_updated': {type: 'recent' | 'faved', document: MyDocument, faved: boolean},\n\n 'state_cleared': void,\n 'state_synchronized': ChatId | void,\n 'state_synchronizing': ChatId | void,\n\n 'contacts_update': UserId,\n 'avatar_update': {peerId: PeerId, threadId?: number},\n 'poll_update': {poll: Poll, results: PollResults},\n 'invalidate_participants': ChatId,\n // 'channel_settings': {channelId: number},\n 'webpage_updated': {id: WebPage.webPage['id'], msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any, settings: State['settings']},\n 'draft_updated': {peerId: PeerId, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n\n 'background_change': void,\n\n 'privacy_update': Update.updatePrivacy,\n\n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n\n 'notification_reset': string,\n 'notification_cancel': string,\n\n 'language_change': string,\n\n 'theme_change': void,\n\n 'media_play': void,\n\n 'emoji_recent': AppEmoji,\n\n 'download_progress': Progress,\n 'document_downloading': DocId,\n 'document_downloaded': DocId,\n\n 'choosing_sticker': boolean\n\n 'group_call_update': GroupCall,\n 'group_call_participant': {groupCallId: GroupCallId, participant: GroupCallParticipant},\n // 'group_call_video_track_added': {instance: GroupCallInstance}\n\n 'call_update': PhoneCall,\n 'call_signaling': {callId: CallId, data: Uint8Array},\n\n 'quick_reaction': Reaction,\n\n 'service_notification': Update.updateServiceNotification,\n\n 'logging_out': void,\n\n 'payment_sent': {peerId: PeerId, mid: number, receiptMessage: Message.messageService}\n\n 'premium_toggle': boolean,\n 'premium_toggle_private': {isNew: boolean, isPremium: boolean},\n\n 'config': Config,\n 'app_config': MTAppConfig\n};\n\nexport type BroadcastEventsListeners = {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n};\n\nexport class RootScope extends EventListenerBase {\n public myId: PeerId;\n private connectionStatus: {[name: string]: ConnectionStatusChange};\n public settings: State['settings'];\n public managers: AppManagers;\n public premium: boolean;\n\n constructor() {\n super();\n\n this.myId = NULL_PEER_ID;\n this.connectionStatus = {};\n this.premium = false;\n\n this.addEventListener('user_auth', ({id}) => {\n this.myId = id.toPeerId();\n });\n\n this.addEventListener('premium_toggle_private', ({isNew, isPremium}) => {\n this.premium = isPremium;\n this.dispatchEventSingle('premium_toggle', isPremium);\n });\n\n this.addEventListener('connection_status_change', (status) => {\n this.connectionStatus[status.name] = status;\n });\n\n this.dispatchEvent = (e, ...args) => {\n super.dispatchEvent(e, ...args);\n MTProtoMessagePort.getInstance().invokeVoid('event', {name: e as string, args});\n };\n\n if(!IS_WORKER) {\n this.addEventListener('settings_updated', ({settings}) => {\n this.settings = settings;\n });\n }\n }\n\n public getConnectionStatus() {\n return this.connectionStatus;\n }\n\n public getPremium() {\n return this.premium;\n }\n\n public dispatchEventSingle(...args: any[]) {\n // @ts-ignore\n super.dispatchEvent(...args);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {State} from '../../config/state';\nimport rootScope from '../rootScope';\nimport stateStorage from '../stateStorage';\nimport setDeepProperty from '../../helpers/object/setDeepProperty';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\n\nexport class AppStateManager {\n private state: State = {} as any;\n private storage = stateStorage;\n\n // ! for mtproto worker use only\n public newVersion: string;\n public oldVersion: string;\n public userId: UserId;\n\n public getState() {\n return Promise.resolve(this.state);\n }\n\n public setByKey(key: string, value: any) {\n setDeepProperty(this.state, key, value);\n\n const first = key.split('.')[0] as keyof State;\n if(first === 'settings') {\n rootScope.dispatchEvent('settings_updated', {key, value, settings: this.state.settings});\n }\n\n this.pushToState(first, this.state[first]);\n }\n\n public pushToState(key: T, value: State[T], direct = true, onlyLocal?: boolean) {\n if(direct) {\n this.state[key] = value;\n }\n\n this.setKeyValueToStorage(key, value, onlyLocal);\n }\n\n public setKeyValueToStorage(key: T, value: State[T] = this.state[key], onlyLocal?: boolean) {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {name: 'state', key, value});\n\n this.storage.set({\n [key]: value\n }, onlyLocal);\n }\n\n /* public resetState() {\n for(let i in this.state) {\n // @ts-ignore\n this.state[i] = false;\n }\n sessionStorage.set(this.state).then(() => {\n location.reload();\n });\n } */\n}\n\nconst appStateManager = new AppStateManager();\nexport default appStateManager;\n","import getDeepProperty from './getDeepProperty';\n\nexport default function setDeepProperty(object: any, key: string, value: any) {\n const splitted = key.split('.');\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport pause from '../../../helpers/schedulers/pause';\nimport {DcId} from '../../../types';\nimport {logger, LogTypes} from '../../logger';\nimport type MTPNetworker from '../networker';\nimport MTTransport from './transport';\nimport Modes from '../../../config/modes';\n\n \nimport transportController from './controller';\n// import networkStats from '../networkStats';\n \n\nexport default class HTTP implements MTTransport {\n public networker: MTPNetworker;\n private log: ReturnType;\n\n private pending: Array<{\n resolve: (body: Uint8Array) => void,\n reject: any,\n body: Uint8Array\n }> = [];\n private releasing: boolean;\n\n public connected: boolean;\n private destroyed: boolean;\n private debug: boolean;\n\n constructor(protected dcId: DcId, protected url: string, logSuffix: string) {\n this.debug = Modes.debug && false;\n\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n\n this.log = logger(`HTTP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n\n this.connected = false;\n }\n\n public _send(body: Uint8Array, mode?: RequestMode) {\n const length = body.length;\n this.debug && this.log.debug('-> body length to send:', length);\n\n // networkStats.addSent(this.dcId, length);\n return fetch(this.url, {method: 'POST', body, mode}).then((response) => {\n if(response.status !== 200 && !mode) {\n response.arrayBuffer().then((buffer) => {\n this.log.error('not 200',\n new TextDecoder('utf-8').decode(new Uint8Array(buffer)));\n });\n\n throw response;\n }\n\n this.setConnected(true);\n\n // * test resending by dropping random request\n // if(Math.random() > .5) {\n // throw 'asd';\n // }\n\n return response.arrayBuffer().then((buffer) => {\n // networkStats.addReceived(this.dcId, buffer.byteLength);\n return new Uint8Array(buffer);\n });\n }, (err) => {\n this.setConnected(false);\n throw err;\n });\n }\n\n private setConnected(connected: boolean) {\n if(this.connected === connected || this.destroyed) {\n return;\n }\n\n this.connected = connected;\n\n \n transportController.setTransportValue('https', connected);\n \n }\n\n public destroy() {\n this.setConnected(false);\n this.destroyed = true;\n this.pending.forEach((pending) => pending.reject());\n this.pending.length = 0;\n }\n\n public send(body: Uint8Array) {\n if(this.networker) {\n return this._send(body);\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private async releasePending() {\n if(this.releasing) return;\n\n this.releasing = true;\n // this.log('-> messages to send:', this.pending.length);\n for(let i = 0; i < this.pending.length; ++i) {\n const pending = this.pending[i];\n const {body, resolve} = pending;\n\n try {\n const result = await this._send(body);\n resolve(result);\n this.pending.splice(i, 1);\n } catch(err) {\n this.log.error('Send plain request error:', err);\n await pause(5000);\n }\n\n --i;\n }\n\n this.releasing = false;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {logger, LogTypes} from '../../logger';\nimport Modes from '../../../config/modes';\nimport EventListenerBase from '../../../helpers/eventListenerBase';\nimport {MTConnection} from './transport';\n\n// let closeSocketBefore = Date.now() + 30e3;\n// let closeSocketAfter = Date.now() + 10e3;\n\nexport default class Socket extends EventListenerBase<{\n open: () => void,\n message: (buffer: ArrayBuffer) => any,\n close: () => void,\n}> implements MTConnection {\n private ws: WebSocket;\n private log: ReturnType;\n private debug = Modes.debug && false;\n\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\n super();\n\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n this.connect();\n\n return this;\n }\n\n private removeListeners() {\n if(!this.ws) {\n return;\n }\n\n this.ws.removeEventListener('open', this.handleOpen);\n this.ws.removeEventListener('close', this.handleClose);\n this.ws.removeEventListener('error', this.handleError);\n this.ws.removeEventListener('message', this.handleMessage);\n this.ws = undefined;\n }\n\n private connect() {\n this.ws = new WebSocket(this.url, 'binary');\n this.ws.binaryType = 'arraybuffer';\n this.ws.addEventListener('open', this.handleOpen);\n this.ws.addEventListener('close', this.handleClose);\n this.ws.addEventListener('error', this.handleError);\n this.ws.addEventListener('message', this.handleMessage);\n\n // if(Date.now() < closeSocketBefore) {\n // if(Date.now() >= closeSocketAfter) {\n // this.ws.close();\n // }\n }\n\n public close() {\n if(!this.ws) {\n return;\n }\n\n this.log('close execution');\n\n try {\n this.ws.close();\n } catch(err) {\n\n }\n this.handleClose();\n }\n\n private handleOpen = () => {\n this.log('opened');\n\n this.debug && this.log.debug('sending init packet');\n this.dispatchEvent('open');\n };\n\n private handleError = (e: Event) => {\n this.log.error('handleError', e);\n this.close();\n };\n\n private handleClose = (e?: CloseEvent) => {\n this.log('closed', e/* , this.pending, this.ws.bufferedAmount */);\n\n this.removeListeners();\n this.dispatchEvent('close');\n };\n\n private handleMessage = (event: MessageEvent) => {\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\n\n this.dispatchEvent('message', event.data as ArrayBuffer);\n };\n\n public send = (body: Uint8Array) => {\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n this.ws.send(body);\n };\n}\n","export default function randomize(arr: T) {\n if(crypto && 'getRandomValues' in crypto) {\n crypto.getRandomValues(arr);\n } else {\n throw new Error('NO_SECURE_RANDOM');\n }\n\n return arr;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import aesjs from 'aes-js';\nimport randomize from '../../../helpers/array/randomize';\nimport cryptoMessagePort from '../../crypto/cryptoMessagePort';\nimport {Codec} from './codec';\n\n/*\n@cryptography/aes ะฝะต ั€ะฐะฑะพั‚ะฐะตั‚ ั ะผะฐััะธะฒะฐะผะธ ะบะพั‚ะพั€ั‹ะต ะฝะต ะบั€ะฐั‚ะฝั‹ 4, ะฟะพัั‚ะพะผัƒ ะธัะฟะพะปัŒะทัƒัŽ intermediate ะฐ ะฝะต abridged\n*/\nexport default class Obfuscation {\n /* private enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\n private dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\n\n private id: number;\n private idPromise: Promise;\n private process: (data: Uint8Array, operation: 'encrypt' | 'decrypt') => ReturnType;\n\n // private cryptoEncKey: CryptoKey;\n // private cryptoDecKey: CryptoKey;\n // private cryptoKey: CryptoKey;\n\n // private encIv: Uint8Array;\n // private decIv: Uint8Array;\n\n // private decIvCounter: Counter;\n\n public async init(codec: Codec) {\n if(this.idPromise !== undefined) {\n this.release();\n }\n\n const initPayload = new Uint8Array(64);\n randomize(initPayload);\n\n while(true) {\n const val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | initPayload[0];\n const val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | initPayload[4];\n if(initPayload[0] !== 0xef &&\n val !== 0x44414548 &&\n val !== 0x54534f50 &&\n val !== 0x20544547 &&\n val !== 0x4954504f &&\n val !== 0xeeeeeeee &&\n val !== 0xdddddddd &&\n val2 !== 0x00000000) {\n // initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\n break;\n }\n randomize(initPayload);\n }\n\n // //////////////////////initPayload.subarray(60, 62).hex = dcId;\n /* initPayload.set(new Uint8Array([161, 208, 67, 71, 118, 109, 20, 111, 113, 255, 134, 10, 159, 241, 7, 44, 217, 82, 187, 76, 108, 131, 200, 186, 33, 57, 177, 251, 52, 34, 18, 54, 65, 105, 37, 89, 38, 20, 47, 168, 126, 181, 24, 138, 212, 68, 60, 150, 225, 37, 181, 4, 201, 50, 72, 151, 168, 143, 204, 169, 81, 187, 241, 23]));\n console.log('initPayload', initPayload); */\n\n const reversedPayload = initPayload.slice().reverse();\n\n const encKey = initPayload.slice(8, 40);\n const encIv = /* this.encIv = */initPayload.slice(40, 56);\n const decKey = reversedPayload.slice(8, 40);\n const decIv = /* this.decIv = */reversedPayload.slice(40, 56);\n\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\n\n // console.log('encKey', encKey.hex, encIv.hex);\n // console.log('decKey', decKey.hex, decIv.hex);\n\n const idPromise = this.idPromise = cryptoMessagePort.invokeCrypto('aes-ctr-prepare', {\n encKey,\n encIv,\n decKey,\n decIv\n });\n\n this.process = async(data, operation) => {\n await idPromise;\n return this._process(data, operation);\n };\n\n this.id = await idPromise;\n\n this.process = this._process;\n\n // this.decIvCounter = new Counter(this.decIv);\n /* const key = this.cryptoEncKey = await subtle.importKey(\n 'raw',\n encKey,\n {name: 'AES-CTR'},\n false,\n ['encrypt']\n ); */\n\n // this.cryptoDecKey = await subtle.importKey(\n // 'raw',\n // decKey,\n // {name: 'AES-CTR'},\n // false,\n // ['encrypt']\n // );\n\n // this.cryptoKey = await subtle.importKey(\n // 'raw',\n // encKey,\n // {name: 'AES-CTR'},\n // false,\n // ['encrypt', 'decrypt']\n // );\n\n initPayload.set(codec.obfuscateTag, 56);\n const encrypted = await this.encode(initPayload.slice());\n\n // console.log('encrypted', encrypted);\n\n initPayload.set(encrypted.slice(56, 64), 56);\n\n return initPayload;\n }\n\n /* public encode(payload: Uint8Array) {\n let startTime = performance.now();\n let res = this.enc.encrypt(payload);\n let time = performance.now() - startTime;\n\n try {\n startTime = performance.now();\n let arr = this.encNew.encrypt(payload);\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\n let resNew = new Uint8Array(bytesFromWordss(arr));\n let time2 = performance.now() - startTime;\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\n } catch(err) {\n console.error('Obfuscation: error:', err);\n }\n\n return res;\n }\n\n public decode(payload: Uint8Array) {\n let res = this.dec.encrypt(payload);\n\n try {\n let arr = this.decNew.decrypt(payload);\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\n let resNew = new Uint8Array(bytesFromWordss(arr));\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\n } catch(err) {\n console.error('Obfuscation: error:', err);\n }\n\n return res;\n } */\n\n private _process = (data: Uint8Array, operation: 'encrypt' | 'decrypt') => {\n return cryptoMessagePort.invokeCryptoNew({\n method: 'aes-ctr-process',\n args: [{id: this.id, data, operation}],\n transfer: [data.buffer]\n }) as Promise;\n };\n\n public encode(payload: Uint8Array) {\n /* return subtle.encrypt({\n name: 'AES-CTR',\n counter: this.encIv,\n length: 64\n },\n this.cryptoEncKey,\n payload\n ); */\n return this.process(payload, 'encrypt');\n }\n\n public decode(payload: Uint8Array) {\n return this.process(payload, 'decrypt');\n }\n\n public async release() {\n const idPromise = this.idPromise;\n if(idPromise === undefined) {\n return;\n }\n\n this.id = undefined;\n this.idPromise = undefined;\n\n const id = await idPromise;\n cryptoMessagePort.invokeCrypto('aes-ctr-destroy', id);\n }\n\n public destroy() {\n this.release();\n }\n\n // public encode(payload: Uint8Array) {\n // let res = this.encNew.encrypt(payload);\n // let bytes = new Uint8Array(bytesFromWordss(res));\n\n // return bytes;\n // }\n\n // public async decode(payload: Uint8Array) {\n // const counter = this.decIvCounter.counter.slice();\n // this.decIvCounter.increment();\n\n // const n: ArrayBuffer = await subtle.encrypt({\n // name: 'AES-CTR',\n // counter: counter,\n // length: 64\n // },\n // this.cryptoDecKey,\n // payload\n // );\n\n // const decoded = this.decNew.update(payload);\n\n // console.log('decode', bytesToHex(decoded), 'new', n, bytesToHex(new Uint8Array(n)));\n\n // return decoded;\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { bytesFromHex, addPadding } from \"../../bin_utils\";\nimport {Codec} from './codec';\n\nclass AbridgedPacketCodec implements Codec {\n public tag = 0xef;\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\n\n public encodePacket(data: Uint8Array) {\n const len = data.byteLength >> 2;\n let header: Uint8Array;\n if(len < 127) {\n header = new Uint8Array([len]);\n } else { // Length: payload length, divided by four, and encoded as 3 length bytes (little endian)\n // header = new Uint8Array([0x7f, ...addPadding(bytesFromHex(len.toString(16)).reverse(), 3, true)/* .reverse() */]);\n header = new Uint8Array([0x7f, len & 0xFF, (len >> 8) & 0xFF, (len >> 16) & 0xFF]);\n // console.log('got nobody cause im braindead', header, len);\n }\n\n return header.concat(data);\n // return new Uint8Array([...header, ...data]);\n }\n\n public readPacket(data: Uint8Array) {\n let length = data[0];\n if(length >= 127) { // 0x7f\n length = data[1] | (data[2] << 8) | (data[3] << 16);\n\n return data.slice(4, length << 2 + 1); // need +1\n }\n\n return data.slice(1, length << 2 + 1); // need +1\n }\n}\n\nexport default new AbridgedPacketCodec();\n","export default function bytesToHex(bytes: ArrayLike) {\n const length = bytes.length;\n const arr: string[] = new Array(length);\n for(let i = 0; i < length; ++i) {\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\n }\n return arr.join('');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../../config/modes';\nimport {logger, LogTypes} from '../../logger';\nimport MTPNetworker from '../networker';\nimport Obfuscation from './obfuscation';\nimport MTTransport, {MTConnection, MTConnectionConstructable} from './transport';\n// import intermediatePacketCodec from './intermediate';\nimport abridgedPacketCodec from './abridged';\n// import paddedIntermediatePacketCodec from './padded';\nimport {ConnectionStatus} from '../connectionStatus';\n\n \nimport transportController from './controller';\nimport bytesToHex from '../../../helpers/bytes/bytesToHex';\n// import networkStats from '../networkStats';\nimport ctx from '../../../environment/ctx';\n \n\nexport default class TcpObfuscated implements MTTransport {\n private codec = abridgedPacketCodec;\n private obfuscation = new Obfuscation();\n public networker: MTPNetworker;\n\n private pending: Array> = [];\n\n private debug = Modes.debug && false/* true */;\n private log: ReturnType;\n public connected = false;\n private lastCloseTime: number;\n public connection: MTConnection;\n\n private autoReconnect = true;\n private reconnectTimeout: number;\n private releasingPending: boolean;\n\n // private debugPayloads: MTPNetworker['debugRequests'] = [];\n\n constructor(\n private Connection: MTConnectionConstructable,\n private dcId: number,\n private url: string,\n private logSuffix: string,\n private retryTimeout: number\n ) {\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`TCP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n\n this.connect();\n }\n\n private onOpen = async() => {\n this.connected = true;\n\n \n transportController.setTransportOpened('websocket');\n \n\n const initPayload = await this.obfuscation.init(this.codec);\n if(!this.connected) {\n return;\n }\n\n this.connection.send(initPayload);\n\n if(this.networker) {\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\n this.networker.setConnectionStatus(ConnectionStatus.Connected);\n this.networker.cleanupSent();\n this.networker.resend();\n }/* else {\n for(const pending of this.pending) {\n if(pending.encoded && pending.body) {\n pending.encoded = this.encodeBody(pending.body);\n }\n }\n } */\n\n setTimeout(() => {\n this.releasePending();\n }, 0);\n };\n\n private onMessage = async(buffer: ArrayBuffer) => {\n // networkStats.addReceived(this.dcId, buffer.byteLength);\n\n let data = await this.obfuscation.decode(new Uint8Array(buffer));\n data = this.codec.readPacket(data);\n\n if(this.networker) { // authenticated!\n // this.pending = this.pending.filter((p) => p.body); // clear pending\n\n this.debug && this.log.debug('redirecting to networker', data.length);\n this.networker.parseResponse(data).then((response) => {\n this.debug && this.log.debug('redirecting to networker response:', response);\n\n try {\n this.networker.processMessage(response.response, response.messageId, response.sessionId);\n } catch(err) {\n this.log.error('handleMessage networker processMessage error', err);\n }\n\n // this.releasePending();\n }).catch((err) => {\n this.log.error('handleMessage networker parseResponse error', err);\n });\n\n // this.dd();\n return;\n }\n\n // console.log('got hex:', data.hex);\n const pending = this.pending.shift();\n if(!pending) {\n this.debug && this.log.debug('no pending for res:', bytesToHex(data));\n return;\n }\n\n pending.resolve(data);\n };\n\n private onClose = () => {\n this.clear();\n\n let needTimeout: number, retryAt: number;\n if(this.autoReconnect) {\n const time = Date.now();\n const diff = time - this.lastCloseTime;\n needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\n retryAt = time + needTimeout;\n }\n\n if(this.networker) {\n this.networker.setConnectionStatus(ConnectionStatus.Closed, retryAt);\n this.pending.length = 0;\n }\n\n if(this.autoReconnect) {\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\n this.reconnectTimeout = ctx.setTimeout(this.reconnect, needTimeout);\n } else {\n this.log('reconnect isn\\'t needed');\n }\n };\n\n public clear() {\n \n if(this.connected) {\n transportController.setTransportClosed('websocket');\n }\n \n\n this.connected = false;\n\n if(this.connection) {\n this.connection.removeEventListener('open', this.onOpen);\n this.connection.removeEventListener('close', this.onClose);\n this.connection.removeEventListener('message', this.onMessage);\n this.connection = undefined;\n }\n }\n\n /**\n * invoke only when closed\n */\n public reconnect = () => {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if(this.connection) {\n return;\n }\n\n this.log('trying to reconnect...');\n this.lastCloseTime = Date.now();\n\n if(!this.networker) {\n for(const pending of this.pending) {\n if(pending.bodySent) {\n pending.bodySent = false;\n }\n }\n } else {\n this.networker.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.connect();\n }\n\n public forceReconnect() {\n this.close();\n this.reconnect();\n }\n\n public destroy() {\n this.setAutoReconnect(false);\n this.close();\n\n if(this.obfuscation) {\n this.obfuscation.destroy();\n }\n\n this.pending.forEach((pending) => {\n if(pending.reject) {\n pending.reject();\n }\n });\n this.pending.length = 0;\n }\n\n public close() {\n const connection = this.connection;\n if(connection) {\n const connected = this.connected;\n this.clear();\n if(connected) { // wait for buffered messages if they are there\n connection.addEventListener('message', this.onMessage);\n connection.addEventListener('close', () => {\n connection.removeEventListener('message', this.onMessage);\n }, {once: true});\n connection.close();\n }\n }\n }\n\n /**\n * Will connect if enable and disconnected \\\n * Will reset reconnection timeout if disable\n */\n public setAutoReconnect(enable: boolean) {\n this.autoReconnect = enable;\n\n if(!enable) {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n } else if(!this.connection && this.reconnectTimeout === undefined) {\n this.reconnect();\n }\n }\n\n private connect() {\n if(this.connection) {\n this.close();\n }\n\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\n this.connection.addEventListener('open', this.onOpen);\n this.connection.addEventListener('close', this.onClose);\n this.connection.addEventListener('message', this.onMessage);\n }\n\n public changeUrl(url: string) {\n if(this.url === url) {\n return;\n }\n\n this.url = url;\n this.forceReconnect();\n }\n\n private encodeBody(body: Uint8Array) {\n const toEncode = this.codec.encodePacket(body);\n\n // this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\n const encoded = this.obfuscation.encode(toEncode);\n // this.log('send after obf:', enc.hex);\n\n return encoded;\n }\n\n public send(body: Uint8Array) {\n this.debug && this.log.debug('-> body length to pending:', body.length);\n\n const encoded: typeof body = /* this.connected ? this.encodeBody(body) : */undefined;\n\n // return;\n\n if(this.networker) {\n this.pending.push({body, encoded});\n this.releasePending();\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body, encoded});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private async releasePending(/* tt = false */) {\n if(!this.connected || this.releasingPending) {\n // this.connect();\n return;\n }\n\n this.releasingPending = true;\n\n /* if(!tt) {\n this.releasePendingDebounced();\n return;\n } */\n\n // this.log('-> messages to send:', this.pending.length);\n let length = this.pending.length;\n let sent = false;\n // for(let i = length - 1; i >= 0; --i) {\n for(let i = 0; i < length; ++i) {\n const pending = this.pending[i];\n if(!pending) {\n break;\n }\n\n const {body, bodySent} = pending;\n if(body && !bodySent) {\n // this.debugPayloads.push({before: body.slice(), after: enc});\n\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n // if(!encoded) {\n // encoded = pending.encoded = this.encodeBody(body);\n // }\n\n const encoded = pending.encoded ??= await this.encodeBody(body);\n if(!this.connected) {\n break;\n }\n\n // networkStats.addSent(this.dcId, encoded.byteLength);\n this.connection.send(encoded);\n\n if(!pending.resolve) { // remove if no response needed\n this.pending.splice(i--, 1);\n length--;\n } else {\n pending.bodySent = true;\n }\n\n sent = true;\n // delete pending.body;\n }\n }\n\n this.releasingPending = undefined;\n\n if(this.pending.length && sent) {\n this.releasePending();\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport MTTransport, {MTConnectionConstructable} from './transports/transport';\nimport Modes from '../../config/modes';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\n\n \nimport HTTP from './transports/http';\n \n\n \nimport Socket from './transports/websocket';\nimport TcpObfuscated from './transports/tcpObfuscated';\nimport {IS_WEB_WORKER} from '../../helpers/context';\nimport {DcId} from '../../types';\nimport {getEnvironment} from '../../environment/utils';\n\n \n \n \n\n \n\nexport type TransportType = 'websocket' | 'https' | 'http';\nexport type ConnectionType = 'client' | 'download' | 'upload';\ntype Servers = {\n [transportType in TransportType]: {\n [connectionType in ConnectionType]: {\n [dcId: DcId]: MTTransport[]\n }\n }\n};\n\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\nconst PREMIUM_SUFFIX = '_premium';\n\nexport function getTelegramConnectionSuffix(connectionType: ConnectionType) {\n return connectionType === 'client' ? '' : '-1';\n}\n\n \nexport function constructTelegramWebSocketUrl(dcId: DcId, connectionType: ConnectionType, premium?: boolean) {\n const suffix = getTelegramConnectionSuffix(connectionType);\n const path = connectionType !== 'client' ? 'apiws' + TEST_SUFFIX + (premium ? PREMIUM_SUFFIX : '') : ('apiws' + TEST_SUFFIX);\n const chosenServer = `wss://${App.suffix.toLowerCase()}ws${dcId}${suffix}.web.telegram.org/${path}`;\n\n return chosenServer;\n}\n \n\nexport class DcConfigurator {\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\n\n private dcOptions = Modes.test ?\n [\n {id: 1, host: '149.154.175.10', port: 80},\n {id: 2, host: '149.154.167.40', port: 80},\n {id: 3, host: '149.154.175.117', port: 80}\n ] :\n [\n {id: 1, host: '149.154.175.50', port: 80},\n {id: 2, host: '149.154.167.50', port: 80},\n {id: 3, host: '149.154.175.100', port: 80},\n {id: 4, host: '149.154.167.91', port: 80},\n {id: 5, host: '149.154.171.5', port: 80}\n ];\n\n public chosenServers: Servers = {} as any;\n\n \n private transportSocket = (dcId: DcId, connectionType: ConnectionType, premium?: boolean) => {\n const chosenServer = constructTelegramWebSocketUrl(dcId, connectionType, premium);\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\n\n const retryTimeout = connectionType === 'client' ? 10000 : 10000;\n\n let oooohLetMeLive: MTConnectionConstructable;\n \n oooohLetMeLive = Socket;\n \n \n \n\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\n };\n \n\n \n private transportHTTP = (dcId: DcId, connectionType: ConnectionType, premium?: boolean) => {\n let chosenServer: string;\n if(Modes.ssl || !Modes.http) {\n const suffix = getTelegramConnectionSuffix(connectionType);\n const subdomain = this.sslSubdomains[dcId - 1] + suffix;\n const path = Modes.test ? 'apiw_test1' : 'apiw1';\n chosenServer = 'https://' + subdomain + '.web.telegram.org/' + path;\n } else {\n for(const dcOption of this.dcOptions) {\n if(dcOption.id === dcId) {\n chosenServer = 'http://' + dcOption.host + (dcOption.port !== 80 ? ':' + dcOption.port : '') + '/apiw1';\n break;\n }\n }\n }\n\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\n return new HTTP(dcId, chosenServer, logSuffix);\n };\n \n\n public chooseServer(\n dcId: DcId,\n connectionType: ConnectionType = 'client',\n transportType: TransportType = Modes.transport,\n reuse = true,\n premium?: boolean\n ) {\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\n connectionType = 'client';\n } */\n\n if(!this.chosenServers.hasOwnProperty(transportType)) {\n this.chosenServers[transportType] = {\n client: {},\n download: {},\n upload: {}\n };\n }\n\n const servers = this.chosenServers[transportType][connectionType];\n\n if(!(dcId in servers)) {\n servers[dcId] = [];\n }\n\n const transports = servers[dcId];\n\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\n let transport: MTTransport;\n\n \n transport = (transportType === 'websocket' ? this.transportSocket : this.transportHTTP)(dcId, connectionType, premium);\n \n \n \n \n \n\n if(!transport) {\n console.error('No chosenServer!', dcId);\n return null;\n }\n\n if(reuse) {\n transports.push(transport);\n }\n\n return transport;\n }\n\n return transports[0];\n }\n\n public static removeTransport(obj: any, transport: T) {\n for(const transportType in obj) {\n // @ts-ignore\n for(const connectionType in obj[transportType]) {\n // @ts-ignore\n for(const dcId in obj[transportType][connectionType]) {\n // @ts-ignore\n const transports: T[] = obj[transportType][connectionType][dcId];\n indexOfAndSplice(transports, transport);\n }\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../../../config/app';\nimport deferredPromise from '../../../helpers/cancellablePromise';\nimport EventListenerBase from '../../../helpers/eventListenerBase';\nimport pause from '../../../helpers/schedulers/pause';\nimport {TransportType, DcConfigurator} from '../dcConfigurator';\nimport type HTTP from './http';\nimport type TcpObfuscated from './tcpObfuscated';\nimport MTTransport from './transport';\n\nexport class MTTransportController extends EventListenerBase<{\n change: (opened: MTTransportController['opened']) => void,\n transport: (type: TransportType) => void\n}> {\n private opened: Map;\n private transports: {[k in TransportType]?: MTTransport};\n private pinging: boolean;\n private dcConfigurator: DcConfigurator;\n\n constructor() {\n super(true);\n\n this.opened = new Map();\n /* this.addEventListener('change', (opened) => {\n this.dispatchEvent('transport', opened.get('websocket') || !opened.get('https') ? 'websocket' : 'https');\n }); */\n\n this.addEventListener('change', (opened) => {\n if(!opened.get('websocket')) {\n this.waitForWebSocket();\n }\n });\n\n // setTimeout(() => {\n // this.waitForWebSocket();\n // }, 200); // wait for first transport so won't have delay for first WS\n }\n\n public async pingTransports() {\n const dcConfigurator = this.dcConfigurator ??= new DcConfigurator();\n const timeout = 2000;\n const transports: {[k in TransportType]?: MTTransport} = this.transports = {\n https: dcConfigurator.chooseServer(App.baseDcId, 'client', 'https', false),\n websocket: dcConfigurator.chooseServer(App.baseDcId, 'client', 'websocket', false)\n };\n\n const httpPromise = deferredPromise();\n ((this.transports.https as HTTP)._send(new Uint8Array(), 'no-cors') as any as Promise)\n .then(() => httpPromise.resolve(true), () => httpPromise.resolve(false));\n setTimeout(() => httpPromise.resolve(false), timeout);\n\n const websocketPromise = deferredPromise();\n const socket = transports.websocket as TcpObfuscated;\n socket.setAutoReconnect(false);\n socket.connection.addEventListener('close', () => websocketPromise.resolve(false), {once: true});\n socket.connection.addEventListener('open', () => websocketPromise.resolve(true), {once: true});\n setTimeout(() => {\n if(websocketPromise.isFulfilled || websocketPromise.isRejected) {\n return;\n }\n\n if(socket.connection) {\n socket.connection.close();\n }\n\n websocketPromise.resolve(false);\n }, timeout);\n\n const [isHttpAvailable, isWebSocketAvailable] = await Promise.all([httpPromise, websocketPromise]);\n\n for(const transportType in transports) {\n const transport = transports[transportType as TransportType];\n transport.destroy();\n }\n\n const result = {\n https: isHttpAvailable || this.opened.get('https') > 0,\n websocket: isWebSocketAvailable || this.opened.get('websocket') > 0\n };\n\n // result.websocket = false;\n return result;\n }\n\n public async waitForWebSocket() {\n if(this.pinging) return;\n this.pinging = true;\n\n while(true) {\n const {https, websocket} = await this.pingTransports();\n if(https || websocket) {\n this.dispatchEvent('transport', websocket || !https ? 'websocket' : 'https');\n }\n\n if(websocket) {\n break;\n }\n\n await pause(10000);\n }\n\n this.pinging = false;\n }\n\n public setTransportValue(type: TransportType, value: boolean) {\n let length = this.opened.get(type) || 0;\n length += value ? 1 : -1;\n\n this.opened.set(type, length);\n this.dispatchEvent('change', this.opened);\n }\n\n public setTransportOpened(type: TransportType) {\n return this.setTransportValue(type, true);\n }\n\n public setTransportClosed(type: TransportType) {\n return this.setTransportValue(type, false);\n }\n}\n\nconst transportController = new MTTransportController();\nexport default transportController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise, {CancellablePromise} from '../../../../helpers/cancellablePromise';\nimport type {StoragesResults} from './loadStorages';\n\nconst RESET_STORAGES_PROMISE: CancellablePromise> = deferredPromise();\nexport default RESET_STORAGES_PROMISE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {CryptoMessagePort} from '../crypto/cryptoMessagePort';\nimport type {ApiFileManager} from '../mtproto/apiFileManager';\nimport type {ApiManager} from '../mtproto/apiManager';\nimport type {Authorizer} from '../mtproto/authorizer';\nimport type {DcConfigurator} from '../mtproto/dcConfigurator';\nimport type {NetworkerFactory} from '../mtproto/networkerFactory';\nimport type {PasswordManager} from '../mtproto/passwordManager';\nimport type {ReferenceDatabase} from '../mtproto/referenceDatabase';\nimport type {TimeManager} from '../mtproto/timeManager';\nimport type {RootScope} from '../rootScope';\nimport type DialogsStorage from '../storages/dialogs';\nimport type FiltersStorage from '../storages/filters';\nimport type PeersStorage from '../storages/peers';\nimport type ThumbsStorage from '../storages/thumbs';\nimport type {ApiUpdatesManager} from './apiUpdatesManager';\nimport type {AppAvatarsManager} from './appAvatarsManager';\nimport type {AppCallsManager} from './appCallsManager';\nimport type {AppChatsManager} from './appChatsManager';\nimport type {AppDocsManager} from './appDocsManager';\nimport type {AppDraftsManager} from './appDraftsManager';\nimport type {AppEmojiManager} from './appEmojiManager';\nimport type {AppGroupCallsManager} from './appGroupCallsManager';\nimport type {AppInlineBotsManager} from './appInlineBotsManager';\nimport type {AppMessagesIdsManager} from './appMessagesIdsManager';\nimport type {AppMessagesManager} from './appMessagesManager';\nimport type {AppNotificationsManager} from './appNotificationsManager';\nimport type AppPaymentsManager from './appPaymentsManager';\nimport type {AppPeersManager} from './appPeersManager';\nimport type {AppPhotosManager} from './appPhotosManager';\nimport type {AppPollsManager} from './appPollsManager';\nimport type {AppPrivacyManager} from './appPrivacyManager';\nimport type {AppProfileManager} from './appProfileManager';\nimport type {AppReactionsManager} from './appReactionsManager';\nimport type {AppStateManager} from './appStateManager';\nimport type {AppStickersManager} from './appStickersManager';\nimport type {AppStoragesManager} from './appStoragesManager';\nimport type {AppUsersManager} from './appUsersManager';\nimport type AppWebDocsManager from './appWebDocsManager';\nimport type {AppWebPagesManager} from './appWebPagesManager';\nimport type AppAttachMenuBotsManager from './appAttachMenuBotsManager';\nimport type AppSeamlessLoginManager from './appSeamlessLoginManager';\nimport type AppThemesManager from './appThemesManager';\nimport type {AppManagers} from './managers';\n\nexport class AppManager {\n protected appPeersManager: AppPeersManager;\n protected appChatsManager: AppChatsManager;\n protected appDocsManager: AppDocsManager;\n protected appPhotosManager: AppPhotosManager;\n protected appPollsManager: AppPollsManager;\n protected appUsersManager: AppUsersManager;\n protected appWebPagesManager: AppWebPagesManager;\n protected appDraftsManager: AppDraftsManager;\n protected appProfileManager: AppProfileManager;\n protected appNotificationsManager: AppNotificationsManager;\n protected apiUpdatesManager: ApiUpdatesManager;\n protected appAvatarsManager: AppAvatarsManager;\n protected appGroupCallsManager: AppGroupCallsManager;\n protected appCallsManager: AppCallsManager;\n protected appReactionsManager: AppReactionsManager;\n protected appMessagesManager: AppMessagesManager;\n protected appMessagesIdsManager: AppMessagesIdsManager;\n protected appPrivacyManager: AppPrivacyManager;\n protected appInlineBotsManager: AppInlineBotsManager;\n protected appStickersManager: AppStickersManager;\n protected referenceDatabase: ReferenceDatabase;\n protected appEmojiManager: AppEmojiManager;\n protected dialogsStorage: DialogsStorage;\n protected filtersStorage: FiltersStorage;\n protected apiManager: ApiManager;\n // protected apiManager: ApiManagerProxy;\n protected passwordManager: PasswordManager;\n protected cryptoWorker: CryptoMessagePort;\n protected apiFileManager: ApiFileManager;\n protected peersStorage: PeersStorage;\n protected thumbsStorage: ThumbsStorage;\n protected networkerFactory: NetworkerFactory;\n protected rootScope: RootScope;\n protected authorizer: Authorizer;\n protected dcConfigurator: DcConfigurator;\n protected timeManager: TimeManager;\n protected appStoragesManager: AppStoragesManager;\n protected appStateManager: AppStateManager;\n protected appWebDocsManager: AppWebDocsManager;\n protected appPaymentsManager: AppPaymentsManager;\n protected appAttachMenuBotsManager: AppAttachMenuBotsManager;\n protected appSeamlessLoginManager: AppSeamlessLoginManager;\n protected appThemesManager: AppThemesManager;\n\n public clear: (init?: boolean) => void;\n\n public setManagers(managers: AppManagers) {\n Object.assign(this, managers);\n // this.after();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type{Chat} from '../../../../layer';\nimport type{Dialog} from '../../appMessagesManager';\nimport type{User} from '../../appUsersManager';\nimport type {StoragesStorages} from './createStorages';\nimport {recordPromiseBound} from '../../../../helpers/recordPromise';\nimport {Awaited} from '../../../../types';\nimport {logger} from '../../../logger';\nimport RESET_STORAGES_PROMISE from './resetStoragesPromise';\n\nexport type StoragesResults = Awaited>;\n\nasync function loadStoragesInner(storages: StoragesStorages) {\n const recordPromise = recordPromiseBound(logger('STORAGES-LOADER'));\n const storagesKeys = Object.keys(storages) as Array;\n const storagesPromises: Promise[] = storagesKeys.map((key) => {\n const promise = storages[key].getAll();\n return recordPromise(promise, 'storage ' + (key as any as string));\n });\n\n const storagesResults: {\n users: User[],\n chats: Chat[],\n dialogs: Dialog[]\n } = {} as any;\n const arr = await Promise.all(storagesPromises);\n for(let i = 0, length = storagesKeys.length; i < length; ++i) {\n storagesResults[storagesKeys[i]] = arr[i] as any;\n }\n\n arr.splice(0, storagesKeys.length);\n\n const resetStorages = await RESET_STORAGES_PROMISE;\n if(resetStorages.size) {\n for(const key of resetStorages) {\n storagesResults[key].length = 0;\n }\n\n resetStorages.clear();\n }\n\n return storagesResults;\n}\n\nlet promise: ReturnType;\nexport default function loadStorages(storages: StoragesStorages) {\n return promise ??= loadStoragesInner(storages);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {logger} from '../logger';\nimport {AppManager} from './manager';\nimport createStorages from './utils/storages/createStorages';\nimport loadStorages from './utils/storages/loadStorages';\n\nexport class AppStoragesManager extends AppManager {\n private storages: ReturnType;\n\n // private loadPromise: CancellablePromise;\n\n private log: ReturnType;\n\n constructor() {\n super();\n\n this.log = logger('STORAGES');\n this.storages = createStorages();\n // this.loadPromise = deferredPromise();\n }\n\n public loadStorages() {\n return loadStorages(this.storages);\n // loadStorages(this.storages).then((storagesResults) => {\n // this.loadPromise.resolve(storagesResults);\n // });\n\n // return this.loadPromise;\n }\n\n // public setStoragesResults(storagesResults: StoragesResults) {\n // this.loadPromise.resolve(storagesResults);\n // }\n\n public async loadStorage(name: T) {\n return this.loadStorages().then((storagesResults) => {\n return {\n storage: this.storages[name],\n results: storagesResults[name]\n };\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Chat} from '../../../../layer';\nimport type {Dialog} from '../../appMessagesManager';\nimport type {User} from '../../appUsersManager';\nimport DATABASE_STATE from '../../../../config/databases/state';\nimport AppStorage from '../../../storage';\n\nexport type StoragesStorages = {\n users: AppStorage, typeof DATABASE_STATE>,\n chats: AppStorage, typeof DATABASE_STATE>,\n dialogs: AppStorage, typeof DATABASE_STATE>\n};\n\nexport default function createStorages() {\n const names: (keyof StoragesStorages)[] = ['users', 'chats', 'dialogs'];\n const storages: StoragesStorages = {} as any;\n for(const name of names) {\n // @ts-ignore\n storages[name] = new AppStorage(DATABASE_STATE, name);\n }\n\n return storages;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {AccountPassword, AccountUpdatePasswordSettings, InputCheckPasswordSRP, PasswordKdfAlgo} from '../../layer';\nimport randomize from '../../helpers/array/randomize';\nimport {AppManager} from '../appManagers/manager';\n\nexport class PasswordManager extends AppManager {\n public getState(): Promise {\n return this.apiManager.invokeApi('account.getPassword').then((result) => {\n return result;\n });\n }\n\n public updateSettings(settings: {\n hint?: string,\n email?: string,\n newPassword?: string,\n currentPassword?: string\n } = {}) {\n // state = Object.assign({}, state);\n // state.new_algo = Object.assign({}, state.new_algo);\n\n return this.getState().then((state) => {\n let currentHashPromise: Promise;\n let newHashPromise: Promise;\n const params: AccountUpdatePasswordSettings = {\n password: null,\n new_settings: {\n _: 'account.passwordInputSettings',\n hint: settings.hint,\n email: settings.email\n }\n };\n\n if(settings.currentPassword) {\n currentHashPromise = this.cryptoWorker.invokeCrypto('computeSRP', settings.currentPassword, state, false) as any;\n } else {\n currentHashPromise = Promise.resolve({\n _: 'inputCheckPasswordEmpty'\n });\n }\n\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password, but still there is a mistake, TDesktop passes 'new_algo' everytime\n const newAlgo = state.new_algo as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\n const salt1 = new Uint8Array(newAlgo.salt1.length + 32);\n randomize(salt1);\n salt1.set(newAlgo.salt1, 0);\n newAlgo.salt1 = salt1;\n\n if(settings.newPassword) {\n newHashPromise = this.cryptoWorker.invokeCrypto('computeSRP', settings.newPassword, state, true) as any;\n } else {\n newHashPromise = Promise.resolve(new Uint8Array());\n }\n\n return Promise.all([currentHashPromise, newHashPromise]).then((hashes) => {\n params.password = hashes[0];\n params.new_settings.new_algo = newAlgo;\n params.new_settings.new_password_hash = hashes[1];\n\n return this.apiManager.invokeApi('account.updatePasswordSettings', params);\n });\n });\n }\n\n public getInputCheckPassword(password: string, state: AccountPassword) {\n return this.cryptoWorker.invokeCrypto('computeSRP', password, state, false) as Promise;\n }\n\n public check(password: string, state: AccountPassword, options: any = {}) {\n return this.getInputCheckPassword(password, state).then((inputCheckPassword) => {\n // console.log('SRP', inputCheckPassword);\n return this.apiManager.invokeApi('auth.checkPassword', {\n password: inputCheckPassword as InputCheckPasswordSRP.inputCheckPasswordSRP\n }, options).then((auth) => {\n if(auth._ === 'auth.authorization') {\n this.apiManager.setUser(auth.user);\n }\n\n return auth;\n });\n });\n }\n\n public confirmPasswordEmail(code: string) {\n return this.apiManager.invokeApi('account.confirmPasswordEmail', {code});\n }\n\n public resendPasswordEmail() {\n return this.apiManager.invokeApi('account.resendPasswordEmail');\n }\n\n public cancelPasswordEmail() {\n return this.apiManager.invokeApi('account.cancelPasswordEmail');\n }\n\n /* public requestRecovery(options: any = {}) {\n return apiManager.invokeApi('auth.requestPasswordRecovery', {}, options);\n }\n\n public recover(code: any, options: any = {}) {\n return apiManager.invokeApi('auth.recoverPassword', {\n code\n }, options);\n } */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Photo, WallPaper} from '../../layer';\nimport {logger} from '../logger';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport {AppManager} from '../appManagers/manager';\nimport makeError from '../../helpers/makeError';\n\nexport type ReferenceContext = ReferenceContext.referenceContextProfilePhoto | ReferenceContext.referenceContextMessage | ReferenceContext.referenceContextEmojiesSounds | ReferenceContext.referenceContextReactions | ReferenceContext.referenceContextUserFull | ReferenceContext.referenceContextCustomEmoji | ReferenceContext.referenceContextAttachMenuBotIcon | ReferenceContext.referenceContextWallPaper;\nexport namespace ReferenceContext {\n export type referenceContextProfilePhoto = {\n type: 'profilePhoto',\n peerId: PeerId\n };\n\n export type referenceContextMessage = {\n type: 'message',\n peerId: PeerId,\n messageId: number\n };\n\n export type referenceContextEmojiesSounds = {\n type: 'emojiesSounds'\n };\n\n export type referenceContextReactions = {\n type: 'reactions'\n };\n\n export type referenceContextUserFull = {\n type: 'userFull',\n userId: UserId\n };\n\n export type referenceContextCustomEmoji = {\n type: 'customEmoji',\n docId: DocId\n };\n\n export type referenceContextAttachMenuBotIcon = {\n type: 'attachMenuBotIcon',\n botId: BotId\n };\n\n export type referenceContextWallPaper = {\n type: 'wallPaper',\n wallPaperId: WallPaper['id']\n };\n}\n\nexport type ReferenceBytes = Photo.photo['file_reference'];\nexport type ReferenceContexts = Set;\n\n// type ReferenceBytes = Uint8Array;\n\nexport class ReferenceDatabase extends AppManager {\n private contexts: Map = new Map();\n // private references: Map = new Map();\n private links: {[hex: string]: ReferenceBytes} = {};\n private log = logger('RD', undefined, true);\n private refreshEmojiesSoundsPromise: Promise;\n\n // constructor() {\n // super();\n\n // apiManager.addTaskListener('refreshReference', (task: RefreshReferenceTask) => {\n // const originalPayload = task.payload;\n\n // assumeType(task);\n // task.originalPayload = originalPayload;\n\n // this.refreshReference(originalPayload).then((bytes) => {\n // task.payload = bytes;\n // }, (err) => {\n // task.error = err;\n // }).then(() => apiManager.postMessage(task));\n // });\n // }\n\n public saveContext(reference: ReferenceBytes, context: ReferenceContext, contexts?: ReferenceContexts) {\n [contexts, reference] = this.getContexts(reference);\n if(!contexts) {\n contexts = new Set();\n this.contexts.set(reference, contexts);\n }\n\n this.links[bytesToHex(reference)] = reference;\n for(const _context of contexts) {\n if(deepEqual(_context, context)) {\n return;\n }\n }\n\n contexts.add(context);\n }\n\n public getReferenceByLink(reference: ReferenceBytes) {\n return this.links[bytesToHex(reference)];\n }\n\n public getContexts(reference: ReferenceBytes): [ReferenceContexts, ReferenceBytes] {\n const contexts = this.contexts.get(reference) || (reference = this.getReferenceByLink(reference) || reference, this.contexts.get(reference));\n return [contexts, reference];\n }\n\n public getContext(reference: ReferenceBytes): [ReferenceContext, ReferenceBytes] {\n const contexts = this.getContexts(reference);\n return contexts[0] ? [contexts[0].values().next().value, contexts[1]] : undefined;\n }\n\n public deleteContext(reference: ReferenceBytes, context: ReferenceContext, contexts?: ReferenceContexts) {\n [contexts, reference] = this.getContexts(reference);\n if(contexts) {\n for(const _context of contexts) {\n if(deepEqual(_context, context)) {\n contexts.delete(_context);\n if(!contexts.size) {\n this.contexts.delete(reference);\n delete this.links[bytesToHex(reference)];\n }\n return true;\n }\n }\n }\n\n return false;\n }\n\n public refreshReference(reference: ReferenceBytes, context?: ReferenceContext): Promise {\n this.log('refreshReference: start', reference.slice(), context);\n if(!context) {\n const c = this.getContext(reference);\n if(!c) {\n this.log('refreshReference: got no context for reference:', reference.slice());\n return Promise.reject('NO_CONTEXT');\n }\n\n [context, reference] = c;\n }\n\n let promise: Promise;\n switch(context?.type) {\n case 'message': {\n promise = this.appMessagesManager.reloadMessages(context.peerId, context.messageId, true);\n break;\n // .then(() => {\n // console.log('FILE_REFERENCE_EXPIRED: got message', context, appMessagesManager.getMessage((context as ReferenceContext.referenceContextMessage).messageId).media, reference);\n // });\n }\n\n case 'emojiesSounds': {\n promise = this.refreshEmojiesSoundsPromise || this.appStickersManager.getAnimatedEmojiSounds(true).then(() => {\n this.refreshEmojiesSoundsPromise = undefined;\n });\n break;\n }\n\n case 'userFull': {\n promise = Promise.resolve(this.appProfileManager.getProfile(context.userId, true));\n break;\n }\n\n case 'customEmoji': {\n promise = this.appEmojiManager.getCustomEmojiDocuments([context.docId]);\n break;\n }\n\n case 'attachMenuBotIcon': {\n promise = this.appAttachMenuBotsManager.getAttachMenuBot(context.botId, true) as any;\n break;\n }\n\n case 'wallPaper': {\n promise = this.appThemesManager.getWallPaperById(context.wallPaperId);\n break;\n }\n\n default: {\n this.log.warn('refreshReference: not implemented context', context);\n return Promise.reject();\n }\n }\n\n const hex = bytesToHex(reference);\n this.log('refreshReference: refreshing reference:', hex);\n return promise.then(() => {\n const newHex = bytesToHex(reference);\n this.log('refreshReference: refreshed, reference before:', hex, 'after:', newHex);\n if(hex !== newHex) {\n return reference;\n }\n\n this.deleteContext(reference, context);\n\n const newContext = this.getContext(reference);\n if(newContext) {\n return this.refreshReference(reference, newContext[0]);\n }\n\n this.log.error('refreshReference: no new context, reference before:', hex, 'after:', newHex, context);\n\n throw makeError('NO_NEW_CONTEXT');\n });\n }\n\n /* public replaceReference(oldReference: ReferenceBytes, newReference: ReferenceBytes) {\n const contexts = this.contexts.get(oldReference);\n if(contexts) {\n this.contexts.delete(oldReference);\n this.contexts.set(newReference, contexts);\n }\n } */\n}\n","export default function safeReplaceObject(wasObject: any, newObject: any) {\n if(!wasObject) {\n return newObject;\n }\n\n for(var key in wasObject) {\n if(!newObject.hasOwnProperty(key)) {\n delete wasObject[key];\n }\n }\n\n for(var key in newObject) {\n // if (newObject.hasOwnProperty(key)) { // useless\n wasObject[key] = newObject[key];\n // }\n }\n\n return wasObject;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Message, MessageAction, MessageMedia} from '../../../../layer';\nimport getPeerId from '../peers/getPeerId';\n\nexport default function getPeerIdsFromMessage(message: Message.message | Message.messageService) {\n const peerIds: number[] = [\n message.fromId,\n message.viaBotId,\n (message as Message.message).fwdFromId\n ];\n\n const media = (message as Message.message).media;\n if(media) {\n const contactUserId = (media as MessageMedia.messageMediaContact).user_id;\n if(contactUserId !== undefined) {\n peerIds.push(contactUserId.toPeerId());\n }\n\n const results = (media as MessageMedia.messageMediaPoll).results;\n const recentVoters = results?.recent_voters;\n if(recentVoters?.length) {\n peerIds.push(...recentVoters.map((userId) => userId.toPeerId()));\n }\n }\n\n const recentReactions = ((message as Message.message).reactions)?.recent_reactions;\n if(recentReactions?.length) {\n peerIds.push(...recentReactions.map((reaction) => getPeerId(reaction.peer_id)));\n }\n\n const action = (message as Message.messageService).action;\n if(action) {\n const userIds: UserId[] = [\n ...((action as MessageAction.messageActionChatAddUser).users || []),\n (action as MessageAction.messageActionChatDeleteUser).user_id,\n (action as MessageAction.messageActionChatJoinedByLink).inviter_id\n ];\n peerIds.push(...userIds.filter(Boolean).map((userId) => userId.toPeerId()));\n\n const chatIds: ChatId[] = [\n (action as MessageAction.messageActionChatMigrateTo).channel_id,\n (action as MessageAction.messageActionChannelMigrateFrom).chat_id\n ];\n peerIds.push(...chatIds.filter(Boolean).map((chatId) => chatId.toPeerId(true)));\n }\n\n const recentRepliers = ((message as Message.message).replies)?.recent_repliers;\n if(recentRepliers?.length) {\n peerIds.push(...recentRepliers.map((reply) => getPeerId(reply)));\n }\n\n return new Set(peerIds.filter(Boolean));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ForumTopic} from '../../../../layer';\nimport type {Dialog} from '../../appMessagesManager';\nimport type getDialogIndexKey from './getDialogIndexKey';\n\nexport default function setDialogIndex(\n dialog: Dialog | ForumTopic.forumTopic,\n indexKey: ReturnType,\n index: number\n) {\n return (dialog as Dialog)[indexKey] = index;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {Chat, ForumTopic as MTForumTopic, DialogPeer, Message, MessageAction, MessageMedia, MessagesForumTopics, MessagesPeerDialogs, Update} from '../../layer';\nimport type {Dialog, ForumTopic, MyMessage} from '../appManagers/appMessagesManager';\nimport tsNow from '../../helpers/tsNow';\nimport SearchIndex from '../searchIndex';\nimport {SliceEnd} from '../../helpers/slicedArray';\nimport {MyDialogFilter} from './filters';\nimport {FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, NULL_PEER_ID, REAL_FOLDERS, REAL_FOLDER_ID} from '../mtproto/mtproto_config';\nimport {MaybePromise, NoneToVoidFunction} from '../../types';\nimport ctx from '../../environment/ctx';\nimport AppStorage from '../storage';\nimport type DATABASE_STATE from '../../config/databases/state';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport getServerMessageId from '../appManagers/utils/messageId/getServerMessageId';\nimport generateMessageId from '../appManagers/utils/messageId/generateMessageId';\nimport {AppManager} from '../appManagers/manager';\nimport getDialogIndexKey from '../appManagers/utils/dialogs/getDialogIndexKey';\nimport isObject from '../../helpers/object/isObject';\nimport getDialogIndex from '../appManagers/utils/dialogs/getDialogIndex';\nimport getPeerIdsFromMessage from '../appManagers/utils/messages/getPeerIdsFromMessage';\nimport {AppStoragesManager} from '../appManagers/appStoragesManager';\nimport defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';\nimport setDialogIndex from '../appManagers/utils/dialogs/setDialogIndex';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport {BroadcastEvents} from '../rootScope';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\nimport callbackify from '../../helpers/callbackify';\n\nexport type FolderDialog = {\n dialog: Dialog,\n index: number\n};\n\nexport type Folder = {\n dialogs: (Dialog | ForumTopic)[],\n id: number,\n unreadMessagesCount: number,\n unreadPeerIds: Set,\n unreadUnmutedPeerIds: Set,\n dispatchUnreadTimeout?: number\n};\n\nexport const GLOBAL_FOLDER_ID: REAL_FOLDER_ID = undefined;\n\n// let spentTime = 0;\nexport default class DialogsStorage extends AppManager {\n private storage: AppStoragesManager['storages']['dialogs'];\n\n private dialogs: {[peerId: PeerId]: Dialog};\n\n private folders: {[folderId: number]: Folder};\n\n private allDialogsLoaded: {[folder_id: number]: boolean};\n private dialogsOffsetDate: {[folder_id: number]: number};\n private pinnedOrders: {[folder_id: number]: PeerId[]};\n private dialogsNum: number;\n\n private dialogsIndex: SearchIndex;\n\n private cachedResults: {\n query: string,\n count: number,\n dialogs: Dialog[],\n folderId: number\n };\n\n private forumTopics: Map,\n deletedTopics: Set,\n getTopicPromises: Map>,\n getTopicsPromise?: Promise\n }>;\n\n protected after() {\n this.clear(true);\n\n this.rootScope.addEventListener('language_change', () => {\n const peerId = this.appUsersManager.getSelf().id.toPeerId(false);\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n const peerText = this.appPeersManager.getPeerSearchText(peerId);\n this.dialogsIndex.indexObject(peerId, peerText);\n }\n });\n\n const onFilterUpdate = (filter: MyDialogFilter) => {\n const dialogs = this.getCachedDialogs(false);\n for(let i = 0; i < dialogs.length; ++i) {\n this.processDialogForFilter(dialogs[i], filter);\n }\n };\n\n this.rootScope.addEventListener('filter_order', () => {\n const dialogs = this.getCachedDialogs(false);\n // const indexKeys: ReturnType[] = [];\n for(const filterId in this.folders) {\n if(+filterId > 1) {\n delete this.folders[filterId];\n }\n\n // indexKeys.push(this.getDialogIndexKey(+filterId));\n }\n\n for(let i = 0; i < dialogs.length; ++i) {\n const dialog = dialogs[i];\n // for(const indexKey of indexKeys) {\n // delete dialog[indexKey];\n // }\n\n this.processDialogForFilters(dialog);\n }\n });\n\n this.rootScope.addEventListener('filter_update', onFilterUpdate);\n this.rootScope.addEventListener('filter_new', onFilterUpdate);\n\n this.rootScope.addEventListener('filter_delete', (filter) => {\n const dialogs = this.getCachedDialogs(false);\n\n const indexKey = this.getDialogIndexKeyByFilterId(filter.id);\n for(let i = 0; i < dialogs.length; ++i) {\n const dialog = dialogs[i];\n delete dialog[indexKey];\n }\n\n delete this.folders[filter.id];\n });\n\n this.rootScope.addEventListener('dialog_notify_settings', (dialog) => {\n this.processChangedUnreadOrUnmuted(dialog.peerId);\n });\n\n this.rootScope.addEventListener('chat_update', (chatId) => {\n const chat = this.appChatsManager.getChat(chatId);\n\n const peerId = chatId.toPeerId(true);\n if((chat as Chat.chat).pFlags.left && this.getDialogOnly(peerId)) {\n this.dropDialogOnDeletion(peerId);\n }\n });\n\n this.rootScope.addEventListener('chat_toggle_forum', ({chatId, enabled}) => {\n const peerId = chatId.toPeerId(true);\n if(!enabled) {\n this.flushForumTopicsCache(peerId);\n }\n\n this.processChangedUnreadOrUnmuted(peerId);\n });\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateFolderPeers: this.onUpdateFolderPeers,\n\n updateDialogPinned: this.onUpdateDialogPinned,\n\n updateChannelPinnedTopic: this.onUpdateChannelPinnedTopic,\n\n updatePinnedDialogs: this.onUpdatePinnedDialogs,\n\n updateChannelPinnedTopics: this.onUpdateChannelPinnedTopics\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('dialogs')\n ]).then(([state, {results: dialogs, storage}]) => {\n this.storage = storage;\n this.dialogs = this.storage.getCache();\n\n for(const folderId of REAL_FOLDERS) {\n const order = state.pinnedOrders[folderId];\n if(!order) {\n continue;\n }\n\n const _order = this.getPinnedOrders(folderId);\n _order.splice(0, _order.length, ...order);\n }\n\n if(dialogs.length) {\n AppStorage.freezeSaving(this.setDialogsFromState.bind(this, dialogs), ['chats', 'dialogs', 'messages', 'users']);\n }\n\n this.allDialogsLoaded = state.allDialogsLoaded || {};\n\n if(dialogs.length) {\n this.appDraftsManager.addMissedDialogs();\n }\n });\n }\n\n private setDialogsFromState(dialogs: Dialog[]) {\n for(let i = 0, length = dialogs.length; i < length; ++i) {\n const dialog = dialogs[i];\n if(!dialog) {\n continue;\n }\n\n // if(dialog.peerId !== SERVICE_PEER_ID) {\n dialog.top_message = getServerMessageId(dialog.top_message); // * fix outgoing message to avoid copying dialog\n // }\n\n if(dialog.topMessage) {\n this.appMessagesManager.saveMessages([dialog.topMessage]);\n }\n\n for(let i = 0; i <= 21; ++i) {\n const indexKey: ReturnType = `index_${i}` as any;\n delete dialog[indexKey];\n }\n // delete dialog.indexes;\n\n this.saveDialog({\n dialog,\n ignoreOffsetDate: true\n });\n\n // ! WARNING, ัƒะฑั€ะฐั‚ัŒ ัั‚ะพ ะบะพะณะดะฐ ะฝัƒะถะฝะพ ะฑัƒะดะตั‚ ะดะตะปะฐั‚ัŒ ั‡ั‚ะพะฑั‹ pending ัะพะพะฑั‰ะตะฝะธั ัะพั…ั€ะฐะฝัะปะธััŒ\n const message = this.appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n if(!message) {\n this.appMessagesManager.reloadConversation(dialog.peerId);\n }\n }\n }\n\n public isDialogsLoaded(folderId: number) {\n return !!this.allDialogsLoaded[folderId];\n }\n\n public setDialogsLoaded(folderId: number, loaded: boolean) {\n const isForum = this.isFilterIdForForum(folderId);\n\n if(folderId === GLOBAL_FOLDER_ID && loaded) {\n this.allDialogsLoaded[FOLDER_ID_ALL] = loaded;\n this.allDialogsLoaded[FOLDER_ID_ARCHIVE] = loaded;\n } else {\n if(isForum) {\n defineNotNumerableProperties(this.allDialogsLoaded, [folderId]);\n }\n\n this.allDialogsLoaded[folderId] = loaded;\n }\n\n if(isForum) {\n return;\n }\n\n if(Array.from(REAL_FOLDERS).every((folderId) => this.allDialogsLoaded[folderId])) {\n this.allDialogsLoaded[GLOBAL_FOLDER_ID] = true;\n }\n\n this.saveAllDialogsLoaded();\n }\n\n private saveAllDialogsLoaded() {\n this.appStateManager.pushToState('allDialogsLoaded', this.allDialogsLoaded);\n }\n\n public clear = (init = false) => {\n if(!init) {\n this.storage.clear();\n\n this.allDialogsLoaded = {};\n this.saveAllDialogsLoaded();\n\n // * clear not numerable properties\n this.pinnedOrders = Object.assign({}, this.pinnedOrders);\n for(const folderId of REAL_FOLDERS) {\n this.resetPinnedOrder(folderId);\n }\n this.savePinnedOrders();\n } else {\n this.allDialogsLoaded = {};\n this.pinnedOrders = {};\n for(const folderId of REAL_FOLDERS) {\n this.pinnedOrders[folderId] = [];\n }\n }\n\n this.forumTopics = new Map();\n this.folders = {};\n this.dialogsOffsetDate = {};\n this.dialogsNum = 0;\n this.dialogsIndex = new SearchIndex({\n clearBadChars: true,\n ignoreCase: true,\n latinize: true,\n includeTag: true\n });\n this.cachedResults = {\n query: '',\n count: 0,\n dialogs: [],\n folderId: 0\n };\n };\n\n public handleDialogUnpinning(dialog: Dialog | ForumTopic, folderId: number) {\n delete dialog.pFlags.pinned;\n indexOfAndSplice(this.getPinnedOrders(folderId), this.isFilterIdForForum(folderId) ? (dialog as ForumTopic).id : dialog.peerId);\n this.savePinnedOrders();\n }\n\n public savePinnedOrders() {\n this.appStateManager.pushToState('pinnedOrders', this.pinnedOrders);\n }\n\n public resetPinnedOrder(folderId: number) {\n this.getPinnedOrders(folderId).length = 0;\n }\n\n public getPinnedOrders(folderId: number) {\n let orders = this.pinnedOrders[folderId];\n if(!orders && this.isFilterIdForForum(folderId)) {\n defineNotNumerableProperties(this.pinnedOrders, [folderId]);\n orders = this.pinnedOrders[folderId] = [];\n }\n\n return orders;\n }\n\n public isDialogPinned(peerId: PeerId, folderId: number) {\n const filter = this.filtersStorage.getFilter(folderId);\n let isPinned: boolean;\n if(filter) {\n isPinned = filter.pinnedPeerIds.indexOf(peerId) !== -1;\n } else {\n isPinned = !!this.getDialogOnly(peerId).pFlags.pinned;\n }\n\n return isPinned;\n }\n\n public getOffsetDate(folderId: number): number {\n const offsetDate = this.dialogsOffsetDate[folderId] || 0;\n if(folderId === GLOBAL_FOLDER_ID && !offsetDate) { // make request not from beginning if we have loaded some dialogs\n return Math.min(...Array.from(REAL_FOLDERS).sort((a, b) => a - b));\n }\n\n return offsetDate;\n }\n\n private generateFolder(id: number) {\n const folder: Folder = {\n dialogs: [],\n id,\n unreadMessagesCount: 0,\n unreadPeerIds: new Set(),\n unreadUnmutedPeerIds: new Set()\n };\n\n defineNotNumerableProperties(folder, ['dispatchUnreadTimeout']);\n\n return folder;\n }\n\n public getFolder(id: number) {\n return this.folders[id] ??= this.generateFolder(id);\n }\n\n public isFilterIdForForum(filterId: number) {\n return filterId && filterId < 0;\n }\n\n public getFilterIdForForum(forumTopic: ForumTopic) {\n return forumTopic.peerId;\n }\n\n public getDialogKey(dialog: Dialog | ForumTopic) {\n return this.isTopic(dialog) ? dialog.id : dialog.peerId;\n }\n\n public getFolderDialogs(id: number, skipMigrated = true): Folder['dialogs'] {\n if(id === GLOBAL_FOLDER_ID) { // * it won't be sorted\n return this.getCachedDialogs(skipMigrated);\n }\n\n const folder = this.getFolder(id);\n if(this.isFilterIdForForum(id)) {\n return skipMigrated ? folder.dialogs.filter((forumTopic) => !(forumTopic as ForumTopic).pFlags.hidden) : folder.dialogs;\n }\n\n return skipMigrated ? folder.dialogs.filter((dialog) => (dialog as Dialog).migratedTo === undefined) : folder.dialogs;\n }\n\n public getNextDialog(currentPeerId: PeerId, next: boolean, filterId: number) {\n const folder = this.getFolderDialogs(filterId, true);\n let dialog: Folder['dialogs'][0];\n if(!currentPeerId) {\n if(next) {\n dialog = folder[0];\n }\n } else {\n const idx = folder.findIndex((dialog) => dialog.peerId === currentPeerId);\n if(idx !== -1) {\n const nextIndex = next ? idx + 1 : idx - 1;\n dialog = folder[nextIndex];\n }\n }\n\n return dialog;\n }\n\n public getDialogIndexKeyByFilterId(filterId: number) {\n if(this.isFilterIdForForum(filterId)) return getDialogIndexKey();\n if(REAL_FOLDERS.has(filterId)) return getDialogIndexKey(filterId as REAL_FOLDER_ID);\n const filter = this.filtersStorage.getFilter(filterId);\n return getDialogIndexKey(filter.localId);\n }\n\n private isDialogUnmuted(dialog: Dialog | ForumTopic) {\n return !this.appNotificationsManager.isPeerLocalMuted({\n peerId: dialog.peerId,\n respectType: true,\n threadId: this.isTopic(dialog) ? (dialog as ForumTopic).id : undefined\n });\n }\n\n public getFolderUnreadCount(filterId: number) {\n const folder = this.getFolder(filterId);\n return {unreadUnmutedCount: folder.unreadUnmutedPeerIds.size, unreadCount: folder.unreadPeerIds.size};\n }\n\n public getCachedDialogs(skipMigrated?: boolean) {\n const arrays = Array.from(REAL_FOLDERS).map((folderId) => this.getFolderDialogs(folderId, skipMigrated));\n return [].concat(...arrays) as Dialog[];\n }\n\n private setDialogIndexInFilter(\n dialog: Dialog | ForumTopic,\n indexKey: ReturnType,\n filter?: MyDialogFilter\n ) {\n // if(this.isTopic(dialog)) {\n // return dialog['index_0'];\n // }\n\n let index: number;\n\n const isTopic = this.isTopic(dialog);\n const isRealFolder = isTopic || REAL_FOLDERS.has(filter.id);\n /* if(isRealFolder) {\n // index = getDialogIndex(dialog, indexKey);\n index = this.generateIndexForDialog(dialog, true);\n } else */if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n const pinnedIds = isTopic ?\n this.getPinnedOrders(this.getFilterIdForForum(dialog)) :\n filter.pinnedPeerIds;\n\n const pinnedKey = this.getDialogKey(dialog);\n const pinnedIndex = pinnedIds.indexOf(pinnedKey);\n\n if(pinnedIndex !== -1) {\n index = this.generateDialogIndex(this.generateDialogPinnedDateByIndex(pinnedIds.length - 1 - pinnedIndex), true);\n } else if(dialog.pFlags?.pinned || isRealFolder) {\n index = this.generateIndexForDialog(dialog, true, undefined, !isRealFolder);\n } else {\n index = getDialogIndex(dialog) ?? this.generateIndexForDialog(dialog, true);\n }\n }\n\n // if(!dialog.hasOwnProperty(indexKey)) {\n // defineNotNumerableProperties(dialog, [indexKey]);\n // }\n\n return setDialogIndex(dialog, indexKey, index);\n }\n\n public getDialog(peerId: PeerId, folderId?: number, topicId?: number, skipMigrated = true): [Folder['dialogs'][0], number] | [] {\n const folders: Folder['dialogs'][] = [];\n\n if(topicId) {\n folderId = peerId;\n // skipMigrated = false;\n }\n\n if(folderId === undefined) {\n folders.push(...Array.from(REAL_FOLDERS).map((folderId) => this.getFolder(folderId).dialogs as Dialog[]));\n } else {\n folders.push(this.getFolderDialogs(folderId, false) as Dialog[]);\n }\n\n const verify: (d: Folder['dialogs'][0]) => boolean = topicId ?\n (d) => (d as ForumTopic).id === topicId :\n (d) => (d as Dialog).peerId === peerId;\n for(const folder of folders) {\n let i = 0, skipped = 0;\n for(let length = folder.length; i < length; ++i) {\n const dialog = folder[i];\n if(verify(dialog)) {\n return [dialog, i - skipped];\n } else if(skipMigrated && ((dialog as ForumTopic).pFlags.hidden || (dialog as Dialog).migratedTo !== undefined)) {\n ++skipped;\n }\n }\n }\n\n return [];\n }\n\n public getDialogOnly(peerId: PeerId) {\n return this.dialogs[peerId];\n }\n\n public getDialogOrTopic(peerId: PeerId, topicId?: number) {\n return topicId ? this.getForumTopic(peerId, topicId) : this.dialogs[peerId];\n }\n\n public getDialogIndex(\n peerId: PeerId | Parameters[0],\n indexKey: ReturnType,\n topicId?: number\n ) {\n const dialog = isObject(peerId) ? peerId : this.getDialogOrTopic(peerId, topicId);\n return getDialogIndex(dialog, indexKey);\n }\n\n /*\n var date = Date.now() / 1000 | 0;\n var m = date * 0x10000;\n\n var k = (date + 1) * 0x10000;\n k - m;\n 65536\n */\n public generateDialogIndex(date?: number, isPinned?: boolean) {\n date ??= tsNow(true) + this.timeManager.getServerTimeOffset();\n return (date * 0x10000) + (isPinned ? 0 : (++this.dialogsNum & 0xFFFF));\n }\n\n // public makeFilterForTopics(id: number): MyDialogFilter {\n // return {\n // _: 'dialogFilter',\n // id,\n\n // };\n // }\n\n public isTopic(dialog: Dialog | ForumTopic): dialog is ForumTopic {\n return 'id' in dialog;\n }\n\n public processDialogForFilters(dialog: Dialog | ForumTopic, noIndex?: boolean) {\n // let perf = performance.now();\n if(this.isTopic(dialog)) {\n this.processDialogForFilter(dialog, undefined, noIndex);\n return;\n }\n\n const filters = this.filtersStorage.getFilters();\n for(const id in filters) {\n const filter = filters[id];\n this.processDialogForFilter(dialog, filter, noIndex);\n }\n // spentTime += (performance.now() - perf);\n // console.log('generate index time:', spentTime);\n }\n\n public processDialogForFilter(\n dialog: Dialog | ForumTopic,\n filter?: MyDialogFilter,\n noIndex?: boolean\n ) {\n const isTopic = this.isTopic(dialog);\n const folderId = isTopic ? this.getFilterIdForForum(dialog) : filter.id;\n\n const indexKey = isTopic ? 'index_0' : this.getDialogIndexKeyByFilterId(folderId);\n const folder = this.getFolder(folderId);\n const dialogs = folder.dialogs;\n\n const cmp: (d: typeof dialog) => boolean = isTopic ?\n ((d: ForumTopic) => d.id === dialog.id) as any :\n ((d: Dialog) => d.peerId === dialog.peerId) as any;\n const wasIndex = dialogs.findIndex(cmp);\n const wasDialog = dialogs[wasIndex];\n const wasDialogIndex = this.getDialogIndex(wasDialog, indexKey);\n\n if(noIndex && folderId > FOLDER_ID_ARCHIVE) {\n noIndex = undefined;\n }\n\n const newDialogIndex = noIndex ? undefined : this.setDialogIndexInFilter(dialog, indexKey, filter);\n\n if(wasDialogIndex === newDialogIndex) {\n return false;\n }\n\n if(!!wasDialogIndex !== !!newDialogIndex) {\n this.prepareFolderUnreadCountModifyingByDialog(folderId, dialog, !!newDialogIndex);\n }\n\n if(wasIndex !== -1) {\n dialogs.splice(wasIndex, 1);\n }\n\n if(newDialogIndex) {\n insertInDescendSortedArray(dialogs, dialog, (dialog) => this.getDialogIndex(dialog, indexKey), -1);\n }\n\n return true;\n }\n\n public prepareDialogUnreadCountModifying(dialog: Dialog | ForumTopic, toggle?: boolean) {\n const isTopic = this.isTopic(dialog);\n const callbacks: NoneToVoidFunction[] = [];\n\n const folderId = isTopic ? this.getFilterIdForForum(dialog) : dialog.folder_id;\n callbacks.push(this.prepareFolderUnreadCountModifyingByDialog(folderId, dialog, toggle));\n\n if(!isTopic) {\n const filters = this.filtersStorage.getFilters();\n for(const id in filters) {\n const filter = filters[id];\n if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n callbacks.push(this.prepareFolderUnreadCountModifyingByDialog(filter.id, dialog, toggle));\n }\n }\n }\n\n return () => !toggle && callbacks.forEach((callback) => callback());\n }\n\n public prepareFolderUnreadCountModifyingByDialog(folderId: number, dialog: Dialog | ForumTopic, toggle?: boolean) {\n const wasUnreadCount = this.appMessagesManager.getDialogUnreadCount(dialog);\n const wasUnmuted = this.isDialogUnmuted(dialog);\n\n if(toggle !== undefined) {\n const addMessagesCount = toggle ? wasUnreadCount : -wasUnreadCount;\n this.modifyFolderUnreadCount(folderId, addMessagesCount, !!wasUnreadCount, wasUnreadCount && wasUnmuted, dialog);\n return;\n }\n\n return () => {\n const newUnreadCount = this.appMessagesManager.getDialogUnreadCount(dialog);\n const newUnmuted = this.isDialogUnmuted(dialog);\n\n const addMessagesCount = newUnreadCount - wasUnreadCount;\n this.modifyFolderUnreadCount(folderId, addMessagesCount, !!newUnreadCount, newUnreadCount && newUnmuted, dialog);\n };\n }\n\n public modifyFolderUnreadCount(\n folderId: number,\n addMessagesCount: number,\n toggleDialog: boolean,\n toggleUnmuted: boolean,\n dialog: Dialog | ForumTopic\n ) {\n const {peerId} = dialog;\n const isForum = this.appPeersManager.isForum(peerId);\n const isTopic = this.isTopic(dialog);\n if(isForum && !isTopic) {\n const forumUnreadCount = this.getForumUnreadCount(peerId);\n if(forumUnreadCount instanceof Promise) {\n forumUnreadCount.then(({count, hasUnmuted}) => {\n dialog = this.getDialogOnly(peerId);\n const folder = this.getFolder(folderId);\n if(\n !dialog ||\n !this.appPeersManager.isForum(peerId) ||\n !folder ||\n !folder.dialogs.some((dialog) => dialog.peerId === peerId)\n ) {\n return;\n }\n\n this.modifyFolderUnreadCount(folderId, 0, false, false, dialog);\n });\n\n return;\n } else {\n addMessagesCount = 0;\n toggleDialog = forumUnreadCount.count > 0;\n toggleUnmuted = forumUnreadCount.hasUnmuted;\n }\n }\n\n const folder = this.getFolder(folderId);\n if(addMessagesCount) {\n folder.unreadMessagesCount = Math.max(0, folder.unreadMessagesCount + addMessagesCount);\n }\n\n const key = this.getDialogKey(dialog);\n if(toggleDialog) {\n folder.unreadPeerIds.add(key);\n } else {\n folder.unreadPeerIds.delete(key);\n }\n\n if(toggleUnmuted) {\n folder.unreadUnmutedPeerIds.add(key);\n } else {\n folder.unreadUnmutedPeerIds.delete(key);\n }\n\n folder.dispatchUnreadTimeout ??= ctx.setTimeout(() => {\n folder.dispatchUnreadTimeout = undefined;\n const _folder = {...folder};\n delete _folder.dialogs;\n this.rootScope.dispatchEvent('folder_unread', _folder);\n\n if(isTopic) { // * refresh forum dialog unread count\n this.processChangedUnreadOrUnmuted(peerId);\n }\n }, 0);\n }\n\n public processChangedUnreadOrUnmuted(peerId: PeerId) {\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n this.processDialogForFilters(dialog);\n this.prepareDialogUnreadCountModifying(dialog)();\n this.rootScope.dispatchEvent('dialog_unread', {\n peerId,\n dialog\n });\n }\n }\n\n public generateIndexForDialog(\n dialog: Dialog | ForumTopic,\n justReturn?: boolean,\n message?: MyMessage,\n noPinnedOrderUpdate?: boolean\n ) {\n if(!justReturn/* && !isTopic */) {\n return;\n }\n\n const isTopic = this.isTopic(dialog);\n let topDate = 0, isPinned: boolean;\n if((dialog as ForumTopic).pFlags.hidden) { // general topic must be first\n topDate = this.generateDialogPinnedDateByIndex(0xFFF);\n isPinned = true;\n } else if(dialog.pFlags.pinned && !noPinnedOrderUpdate) {\n topDate = this.generateDialogPinnedDate(dialog);\n isPinned = true;\n } else {\n message ||= this.appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n\n topDate = (message as Message.message)?.date || topDate;\n\n if(!isTopic) {\n const channelId = this.appPeersManager.isChannel(dialog.peerId) && dialog.peerId.toChatId();\n if(channelId) {\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n if(!topDate || (channel.date && channel.date > topDate)) {\n topDate = channel.date;\n }\n }\n }\n\n if(dialog.draft?._ === 'draftMessage' && dialog.draft.date > topDate) {\n topDate = dialog.draft.date;\n }\n }\n\n topDate ||= tsNow(true);\n\n const index = this.generateDialogIndex(topDate, isPinned);\n if(justReturn) {\n return index;\n }\n\n const indexKey = getDialogIndexKey((dialog as Dialog).folder_id);\n setDialogIndex(dialog, indexKey, index);\n }\n\n public generateDialogPinnedDateByIndex(pinnedIndex: number) {\n return 0x7fff0000 + (pinnedIndex & 0xFFFF); // 0xFFFF - ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ ะฒ ะฟะฐะฟะบะฐั… ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ะฑะตัะบะพะฝะตั‡ะฝะพะต ั‡ะธัะปะพ ะฟะธะฝะฝะตะดะพะฒ\n }\n\n public generateDialogPinnedDate(dialog: Dialog | ForumTopic) {\n const isTopic = this.isTopic(dialog);\n const order = this.getPinnedOrders(isTopic ? this.getFilterIdForForum(dialog) : dialog.folder_id);\n\n const dialogKey = this.getDialogKey(dialog);\n let pinnedIndex = order.indexOf(dialogKey);\n if(pinnedIndex === -1) {\n order.unshift(dialogKey);\n pinnedIndex = 0;\n\n if(!isTopic) {\n this.savePinnedOrders();\n }\n }\n\n return this.generateDialogPinnedDateByIndex(order.length - 1 - pinnedIndex);\n }\n\n /* public generateDialog(peerId: PeerId) {\n const dialog: Dialog = {\n _: 'dialog',\n pFlags: {},\n peer: this.appPeersManager.getOutputPeer(peerId),\n top_message: 0,\n read_inbox_max_id: 0,\n read_outbox_max_id: 0,\n unread_count: 0,\n unread_mentions_count: 0,\n notify_settings: {\n _: 'peerNotifySettings',\n },\n };\n\n return dialog;\n } */\n\n public setDialogToState(dialog: Dialog | ForumTopic) {\n if(this.isTopic(dialog)) {\n return;\n }\n\n const {peerId, pts} = dialog;\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId);\n const messagesStorage = this.appMessagesManager.getHistoryMessagesStorage(peerId);\n const history = historyStorage.history.slice;\n let incomingMessage: MyMessage;\n for(let i = 0, length = history.length; i < length; ++i) {\n const mid = history[i];\n const message: MyMessage = this.appMessagesManager.getMessageFromStorage(messagesStorage, mid);\n if(message && !message.pFlags.is_outgoing/* || peerId === SERVICE_PEER_ID */) {\n incomingMessage = message;\n\n const peerIds = getPeerIdsFromMessage(message);\n this.peersStorage.requestPeersForKey(peerIds, `topMessage_${peerId}`);\n\n break;\n }\n }\n\n dialog.topMessage = incomingMessage;\n\n // DO NOT TOUCH THESE LINES, SOME REAL MAGIC HERE.\n // * Read service chat when refreshing page with outgoing & getting new service outgoing message\n /* if(incomingMessage && dialog.read_inbox_max_id >= dialog.top_message) {\n dialog.unread_count = 0;\n }\n\n dialog.read_inbox_max_id = this.appMessagesIdsManager.clearMessageId(dialog.read_inbox_max_id);\n dialog.read_outbox_max_id = this.appMessagesIdsManager.clearMessageId(dialog.read_outbox_max_id); */\n // CAN TOUCH NOW\n\n if(peerId.isAnyChat() && pts) {\n const newPts = this.apiUpdatesManager.getChannelState(peerId.toChatId(), pts).pts;\n dialog.pts = newPts;\n }\n\n this.storage.set({\n [peerId]: dialog\n });\n\n this.peersStorage.requestPeer(peerId, 'dialog');\n\n /* for(let id in this.filtersStorage.filters) {\n const filter = this.filtersStorage.filters[id];\n\n if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n\n }\n } */\n }\n\n public pushDialog({dialog, offsetDate, ignoreOffsetDate, saveGlobalOffset}: {\n dialog: Dialog | ForumTopic,\n offsetDate?: number,\n ignoreOffsetDate?: boolean,\n saveGlobalOffset?: boolean\n }) {\n const isTopic = this.isTopic(dialog);\n const {folder_id, peerId} = dialog as Dialog;\n\n if(isTopic) {\n const forumTopics = this.getForumTopicsCache(peerId);\n forumTopics.topics.set(dialog.id, dialog);\n } else {\n this.dialogs[peerId] = dialog;\n }\n\n offsetDate ??= this.getDialogOffsetDate(dialog);\n\n // if(!isTopic) {\n this.processDialogForFilters(dialog);\n // }\n\n if(offsetDate && !dialog.pFlags.pinned) {\n if(!isTopic && saveGlobalOffset) {\n const savedGlobalOffsetDate = this.dialogsOffsetDate[GLOBAL_FOLDER_ID];\n if(!savedGlobalOffsetDate || offsetDate < savedGlobalOffsetDate) {\n this.dialogsOffsetDate[GLOBAL_FOLDER_ID] = offsetDate;\n }\n }\n\n const folderId = isTopic ? this.getFilterIdForForum(dialog) : folder_id;\n const savedOffsetDate = this.dialogsOffsetDate[folderId];\n if(!savedOffsetDate || offsetDate < savedOffsetDate) {\n // if(pos !== -1) {\n if(!ignoreOffsetDate && !this.isDialogsLoaded(folderId)) {\n this.dropDialog(peerId, isTopic ? this.getDialogKey(dialog) : undefined, true);\n return;\n }\n\n this.dialogsOffsetDate[folderId] = offsetDate;\n }\n }\n\n this.setDialogToState(dialog);\n\n // if(pos === -1) {\n // this.prepareFolderUnreadCountModifyingByDialog(folder_id, dialog, true);\n // }\n\n // const indexKey = getDialogIndexKey(folder_id);\n // /* const newPos = */insertInDescendSortedArray(dialogs, dialog, (dialog) => getDialogIndex(dialog, indexKey), -1);\n /* if(pos !== -1 && pos !== newPos) {\n rootScope.dispatchEvent('dialog_order', {dialog, pos: newPos});\n } */\n }\n\n public dropDialogFromFolders(peerId: PeerId, topicId?: number) {\n const foundDialog = this.getDialog(peerId, undefined, topicId, false);\n const [dialog, index] = foundDialog;\n if(dialog) {\n const filterId = topicId ?\n this.getFilterIdForForum(dialog as ForumTopic) :\n (dialog as Dialog).folder_id;\n\n // const folder = this.getFolder(filterId);\n // folder.dialogs.splice(index, 1);\n const wasPinned = indexOfAndSplice(this.getPinnedOrders(filterId), this.getDialogKey(dialog)) !== undefined;\n\n this.processDialogForFilters(dialog, true);\n\n this.dialogsIndex.indexObject(peerId, '');\n\n if(wasPinned) {\n this.savePinnedOrders();\n }\n }\n\n return foundDialog;\n }\n\n public dropDialog(peerId: PeerId, topicId?: number, keepLocal?: boolean) {\n const dialog = this.getDialogOrTopic(peerId, topicId);\n const foundDialog = this.dropDialogFromFolders(peerId, topicId);\n if(dialog) {\n if(!keepLocal) {\n if(topicId) {\n this.getForumTopicsCache(peerId).topics.delete(topicId);\n } else {\n delete this.dialogs[peerId];\n }\n }\n\n this.clearDialogFromState(dialog, keepLocal);\n }\n\n return foundDialog;\n }\n\n public clearDialogFromState(dialog: Dialog | ForumTopic, keepLocal: boolean) {\n if(dialog._ === 'forumTopic') {\n return;\n }\n\n const {peerId} = dialog;\n this.peersStorage.requestPeersForKey([], `topMessage_${peerId}`);\n this.peersStorage.releasePeer(peerId, 'dialog');\n this.storage.delete(peerId, keepLocal);\n }\n\n public dropDialogWithEvent(peerId: PeerId, topicId?: number) {\n const dropped = this.dropDialog(peerId, topicId);\n if(dropped.length) {\n this.rootScope.dispatchEvent('dialog_drop', dropped[0]);\n }\n\n return dropped;\n }\n\n /**\n * leaving chat, leaving channel, deleting private dialog\n */\n public dropDialogOnDeletion(peerId: PeerId, topicId?: number) {\n this.dropDialogWithEvent(peerId, topicId);\n this.rootScope.dispatchEvent('peer_deleted', peerId);\n }\n\n public applyDialogs(result: MessagesPeerDialogs | MessagesForumTopics, peerId?: PeerId) {\n // * ะ’ ัั‚ัƒ ั„ัƒะฝะบั†ะธัŽ ะฟะพะฟะฐะดัƒั‚ ั‚ะพะปัŒะบะพ ั‚ะต ะดะธะฐะปะพะณะธ, ะฒ ะบะพั‚ะพั€ั‹ั… ะตัั‚ัŒ read_inbox_max_id ะธ read_outbox_max_id, ะฒ ะพั‚ะปะธั‡ะธะต ะพั‚ ั‚ะตั…, ั‡ั‚ะพ ะฑัƒะดัƒั‚ ะฒ getTopMessages\n\n const isForum = result._ === 'messages.forumTopics';\n const items = (result as MessagesPeerDialogs).dialogs || (result as MessagesForumTopics).topics;\n if(!isForum) {\n // ! fix 'dialogFolder', maybe there is better way to do it, this only can happen by 'messages.getPinnedDialogs' by folder_id: 0\n forEachReverse(result.dialogs, (dialog, idx) => {\n if(dialog._ === 'dialogFolder') {\n result.dialogs.splice(idx, 1);\n }\n });\n } else {\n this.processTopics(peerId, result);\n }\n\n assumeType(items);\n\n this.appUsersManager.saveApiUsers(result.users);\n this.appChatsManager.saveApiChats(result.chats);\n this.appMessagesManager.saveMessages(result.messages);\n\n // this.appMessagesManager.log('applyConversation', dialogsResult);\n\n const updatedDialogs: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const getUpdateCache = (peerId: PeerId) => {\n let cache = updatedDialogs.get(peerId);\n if(!cache) {\n updatedDialogs.set(peerId, cache = {});\n }\n\n return cache;\n };\n\n items.forEach((dialog) => {\n const peerId = this.appPeersManager.getPeerId(dialog.peer);\n let topMid = dialog.top_message;\n\n const topPendingMid = this.appMessagesManager.pendingTopMsgs[peerId];\n if(topPendingMid) {\n const topPendingMessage = this.appMessagesManager.getMessageByPeer(peerId, topPendingMid) as MyMessage;\n const topMessage = this.appMessagesManager.getMessageByPeer(peerId, topMid) as MyMessage;\n if(!topMid || (topPendingMessage && (!topMessage || topPendingMessage?.date > topMessage?.date))) {\n dialog.top_message = topMid = topPendingMid;\n this.appMessagesManager.getHistoryStorage(peerId).maxId = topPendingMid;\n }\n }\n\n /* const d = Object.assign({}, dialog);\n if(peerId === 239602833) {\n this.log.error('applyConversation lun', dialog, d);\n } */\n\n if(topMid || dialog.draft?._ === 'draftMessage') {\n if(this.saveDialog({dialog})) {\n const cache = getUpdateCache(peerId);\n\n if(isForum) {\n (cache.topics ??= new Map()).set(\n (dialog as ForumTopic).id,\n dialog as ForumTopic\n );\n } else {\n cache.dialog = dialog as Dialog;\n }\n }\n } else {\n this.dropDialogWithEvent(peerId, isForum ? this.getDialogKey(dialog) : undefined);\n }\n\n const key = this.appMessagesManager.getUpdateAfterReloadKey(peerId, isForum ? this.getDialogKey(dialog) : undefined);\n const updates = this.appMessagesManager.newUpdatesAfterReloadToHandle[key];\n if(updates !== undefined) {\n for(const update of updates) {\n updates.delete(update);\n this.apiUpdatesManager.saveUpdate(update);\n }\n\n if(!updates.size) {\n delete this.appMessagesManager.newUpdatesAfterReloadToHandle[key];\n }\n }\n });\n\n if(updatedDialogs.size) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', updatedDialogs);\n }\n }\n\n private getDialogOffsetDate(dialog: Dialog | ForumTopic) {\n const message = this.appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n return message?.date || 0;\n }\n\n public canSaveDialogByPeerId(peerId: PeerId) {\n if(peerId.isAnyChat()) {\n const chat: Chat = this.appChatsManager.getChat(peerId.toChatId());\n // ! chatForbidden stays for chat where you're kicked\n if(\n chat._ === 'channelForbidden' ||\n // || chat._ === 'chatForbidden'\n (chat as Chat.chat).pFlags.left\n // || (chat as any).pFlags.kicked\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Won't save migrated from peer, forbidden peers, left and kicked\n */\n public saveDialog({\n dialog,\n folderId,\n ignoreOffsetDate,\n saveGlobalOffset\n }: {\n dialog: Dialog | ForumTopic,\n folderId?: REAL_FOLDER_ID,\n ignoreOffsetDate?: boolean,\n saveGlobalOffset?: boolean\n }) {\n const isTopic = this.isTopic(dialog);\n const isDialog = !isTopic;\n\n const topicId = isTopic ? dialog.id = generateMessageId(dialog.id) : undefined;\n if(!isTopic) {\n folderId ??= dialog.folder_id ?? FOLDER_ID_ALL;\n }\n\n const peerId = this.appPeersManager.getPeerId(dialog.peer);\n if(!peerId) {\n console.error('saveConversation no peerId???', dialog, folderId);\n return false;\n }\n\n if(!isTopic && dialog._ !== 'dialog'/* || peerId === 239602833 */) {\n console.error('saveConversation not regular dialog', dialog, Object.assign({}, dialog));\n }\n\n if(isDialog && !this.canSaveDialogByPeerId(peerId)) {\n return false;\n }\n\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : NULL_PEER_ID;\n\n if(isDialog) {\n const peerText = this.appPeersManager.getPeerSearchText(peerId);\n this.dialogsIndex.indexObject(peerId, peerText);\n }\n\n const wasDialogBefore = this.getDialogOrTopic(peerId, topicId);\n\n let mid: number, message: MyMessage;\n if(dialog.top_message) {\n mid = generateMessageId(dialog.top_message);// dialog.top_message;\n\n // preserve outgoing message\n const wasTopMessage = wasDialogBefore?.top_message && this.appMessagesManager.getMessageByPeer(peerId, wasDialogBefore.top_message) as MyMessage;\n if(wasTopMessage?.pFlags?.is_outgoing && wasDialogBefore.top_message >= mid) {\n mid = wasDialogBefore.top_message;\n }\n\n message = this.appMessagesManager.getMessageByPeer(peerId, mid);\n } else {\n mid = this.appMessagesManager.generateTempMessageId(peerId);\n message = {\n _: 'message',\n id: mid,\n mid,\n from_id: this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId(false)),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n deleted: true,\n pFlags: {out: true},\n date: 0,\n message: ''\n };\n this.appMessagesManager.saveMessages([message], {isOutgoing: true});\n }\n\n if(!message?.pFlags) {\n this.appMessagesManager.log.error('saveConversation no message:', dialog, message);\n }\n\n if(isDialog && !channelId && peerId.isAnyChat()) {\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n if(chat && chat.migrated_to && chat.pFlags.deactivated) {\n const migratedToPeer = this.appPeersManager.getPeerId(chat.migrated_to);\n this.appMessagesManager.migratedFromTo[peerId] = migratedToPeer;\n this.appMessagesManager.migratedToFrom[migratedToPeer] = peerId;\n dialog.migratedTo = migratedToPeer;\n // return;\n }\n }\n\n dialog.top_message = mid;\n // dialog.unread_count = wasDialogBefore && dialog.read_inbox_max_id === getServerMessageId(wasDialogBefore.read_inbox_max_id) ? wasDialogBefore.unread_count : dialog.unread_count;\n dialog.read_inbox_max_id = generateMessageId(wasDialogBefore && !dialog.read_inbox_max_id ? wasDialogBefore.read_inbox_max_id : dialog.read_inbox_max_id);\n dialog.read_outbox_max_id = generateMessageId(wasDialogBefore && !dialog.read_outbox_max_id ? wasDialogBefore.read_outbox_max_id : dialog.read_outbox_max_id);\n\n if(isDialog && dialog.folder_id === undefined) {\n if(dialog._ === 'dialog') {\n // ! ะกะ›ะžะ–ะะž ! ะกะœะžะขะ ะ˜ ะ’ getTopMessages\n dialog.folder_id = wasDialogBefore ? (wasDialogBefore as typeof dialog).folder_id : folderId;\n }/* else if(dialog._ === 'dialogFolder') {\n dialog.folder_id = dialog.folder.id;\n } */\n }\n\n dialog.draft = this.appDraftsManager.saveDraft({peerId, threadId: topicId, draft: dialog.draft});\n dialog.peerId = peerId;\n // dialog.indexes ??= {} as any;\n\n // Because we saved message without dialog present\n if(message && message.pFlags.is_outgoing) {\n const isOut = message.pFlags.out;\n if(mid > dialog[isOut ? 'read_outbox_max_id' : 'read_inbox_max_id']) {\n message.pFlags.unread = true;\n\n if(!dialog.unread_count && !isOut) {\n ++dialog.unread_count;\n }\n } else {\n delete message.pFlags.unread;\n }\n }\n\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId, topicId);\n const slice = historyStorage.history.slice;\n /* if(historyStorage === undefined) { // warning\n historyStorage.history.push(mid);\n } else */if(!slice.length) {\n historyStorage.history.unshift(mid);\n historyStorage.count ||= 1;\n if(this.appMessagesManager.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n } else if(!slice.isEnd(SliceEnd.Bottom)) { // * this will probably never happen, however, if it does, then it will fix slice with top_message\n const slice = historyStorage.history.insertSlice([mid]);\n slice.setEnd(SliceEnd.Bottom);\n historyStorage.count ||= 1;\n if(this.appMessagesManager.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n }\n\n historyStorage.maxId = mid;\n historyStorage.readMaxId = dialog.read_inbox_max_id;\n historyStorage.readOutboxMaxId = dialog.read_outbox_max_id;\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n threadId: isTopic ? dialog.id : undefined,\n settings: dialog.notify_settings\n });\n\n if(isDialog && channelId && dialog.pts) {\n this.apiUpdatesManager.addChannelState(channelId, dialog.pts);\n }\n\n this.generateIndexForDialog(dialog);\n\n if(wasDialogBefore) {\n // fix unread count\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(wasDialogBefore);\n safeReplaceObject(wasDialogBefore, dialog);\n releaseUnreadCount();\n }\n\n this.pushDialog({\n dialog,\n offsetDate: message?.date,\n ignoreOffsetDate,\n saveGlobalOffset\n });\n\n if(isTopic) {\n this.processTopicUpdate(dialog, wasDialogBefore as ForumTopic);\n }\n\n return true;\n }\n\n public processTopicUpdate(topic: ForumTopic, oldTopic?: ForumTopic) {\n if(!oldTopic) {\n return;\n }\n\n const {peerId, id: threadId} = topic;\n const isIconChanged = topic.icon_emoji_id !== (oldTopic as ForumTopic).icon_emoji_id;\n const isTitleChanged = topic.title !== (oldTopic as ForumTopic).title;\n const isChanged = isIconChanged || isTitleChanged;\n\n if(isIconChanged) {\n this.rootScope.dispatchEvent('avatar_update', {peerId, threadId});\n }\n\n if(isChanged) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId, threadId});\n }\n }\n\n public getDialogs(options: {\n query?: string,\n offsetIndex?: number,\n limit?: number,\n filterId?: number,\n skipMigrated?: boolean\n }): MaybePromise<{\n dialogs: Folder['dialogs'],\n count: number,\n isTopEnd: boolean,\n isEnd: boolean\n }> {\n const {\n query = '',\n offsetIndex,\n limit = 20,\n filterId = FOLDER_ID_ALL,\n skipMigrated = false\n } = options;\n\n const isForum = this.isFilterIdForForum(filterId);\n if(!isForum && !REAL_FOLDERS.has(filterId)) {\n const promises: Promise[] = [];\n\n const fillContactsResult = this.appUsersManager.fillContacts();\n if(!fillContactsResult.cached) {\n promises.push(fillContactsResult.promise);\n }\n\n const reloadMissingDialogsPromise = this.filtersStorage.reloadMissingPeerIds(filterId);\n if(reloadMissingDialogsPromise) {\n promises.push(reloadMissingDialogsPromise);\n }\n\n if(promises.length) {\n return Promise.all(promises).then(() => {\n return this.getDialogs(options);\n });\n }\n }\n\n // let's load only first pages by certain folderId. next pages will load without folder filtering\n const realFolderId/* : REAL_FOLDER_ID */ =\n (!REAL_FOLDERS.has(filterId) || this.getOffsetDate(filterId)) && !isForum ?\n GLOBAL_FOLDER_ID :\n filterId/* as REAL_FOLDER_ID */;\n let curDialogStorage = this.getFolderDialogs(filterId, skipMigrated);\n\n const indexKey = this.getDialogIndexKeyByFilterId(filterId);\n\n if(query && !isForum) {\n if(!limit || this.cachedResults.query !== query || this.cachedResults.folderId !== filterId) {\n this.cachedResults.query = query;\n this.cachedResults.folderId = filterId;\n\n const results = this.dialogsIndex.search(query);\n\n const dialogs: Dialog[] = [];\n for(const peerId in this.dialogs) {\n const dialog = this.dialogs[peerId];\n if(results.has(dialog.peerId) && dialog.folder_id === filterId) {\n dialogs.push(dialog);\n }\n }\n\n dialogs.sort((d1, d2) => this.getDialogIndex(d2, indexKey) - this.getDialogIndex(d1, indexKey));\n this.cachedResults.dialogs = dialogs;\n this.cachedResults.count = dialogs.length;\n }\n\n curDialogStorage = this.cachedResults.dialogs;\n } else {\n this.cachedResults.query = '';\n }\n\n let offset = 0;\n if(offsetIndex > 0) {\n for(let length = curDialogStorage.length; offset < length; ++offset) {\n if(offsetIndex > this.getDialogIndex(curDialogStorage[offset], indexKey)) {\n break;\n }\n }\n }\n\n const loadedAll = this.isDialogsLoaded(realFolderId);\n const isEnoughDialogs = curDialogStorage.length >= (offset + limit);\n if(query || loadedAll || isEnoughDialogs) {\n const dialogs = curDialogStorage.slice(offset, offset + limit);\n return {\n dialogs,\n count: loadedAll ? curDialogStorage.length : null,\n isTopEnd: curDialogStorage.length && ((dialogs[0] && dialogs[0] === curDialogStorage[0]) || this.getDialogIndex(curDialogStorage[0], indexKey) < offsetIndex),\n isEnd: (query || loadedAll) && (offset + limit) >= curDialogStorage.length\n };\n }\n\n return this.appMessagesManager.getTopMessages({limit, folderId: realFolderId}).then((result) => {\n // const curDialogStorage = this[folderId];\n if(skipMigrated) {\n curDialogStorage = this.getFolderDialogs(filterId, skipMigrated);\n }\n\n offset = 0;\n if(offsetIndex > 0) {\n for(let length = curDialogStorage.length; offset < length; ++offset) {\n if(offsetIndex > this.getDialogIndex(curDialogStorage[offset], indexKey)) {\n break;\n }\n }\n }\n\n // this.log.warn(offset, offset + limit, curDialogStorage.dialogs.length, this.dialogs.length);\n\n const dialogs = curDialogStorage.slice(offset, offset + limit);\n return {\n dialogs,\n count: result.count === undefined ? curDialogStorage.length : result.count,\n isTopEnd: curDialogStorage.length && ((dialogs[0] && dialogs[0] === curDialogStorage[0]) || this.getDialogIndex(curDialogStorage[0], indexKey) < offsetIndex),\n // isEnd: this.isDialogsLoaded(realFolderId) && (offset + limit) >= curDialogStorage.length\n isEnd: result.isEnd\n };\n });\n }\n\n // * FORUMS SECTION\n\n public flushForumTopicsCache(peerId: PeerId) {\n const cache = this.forumTopics.get(peerId);\n if(!cache) {\n return;\n }\n\n const folder = this.folders[peerId];\n if(folder) {\n if(folder.dispatchUnreadTimeout) {\n clearTimeout(folder.dispatchUnreadTimeout);\n }\n\n delete this.allDialogsLoaded[peerId];\n delete this.pinnedOrders[peerId];\n delete this.dialogsOffsetDate[peerId];\n delete this.folders[peerId];\n }\n\n cache.topics.clear();\n\n // for permanent delete\n // this.forumTopics.delete(peerId);\n }\n\n public getForumTopicsCache(peerId: PeerId) {\n let forumTopics = this.forumTopics.get(peerId);\n if(!forumTopics) {\n forumTopics = {\n topics: new Map(),\n deletedTopics: new Set(),\n getTopicPromises: new Map()\n };\n\n this.forumTopics.set(peerId, forumTopics);\n }\n\n return forumTopics;\n }\n\n public getForumTopicById(peerId: PeerId, topicId?: number): Promise {\n if(!this.appPeersManager.isForum(peerId)) {\n return Promise.reject(makeError('CHANNEL_FORUM_MISSING'));\n }\n\n const cache = this.getForumTopicsCache(peerId);\n let promise: CancellablePromise;\n if(topicId) {\n promise = cache.getTopicPromises.get(topicId);\n if(promise) {\n return promise;\n }\n\n if(cache.deletedTopics.has(topicId)) {\n return Promise.resolve(undefined);\n }\n\n cache.getTopicPromises.set(topicId, promise = deferredPromise());\n }\n\n cache.getTopicsPromise ??= pause(0).then(() => {\n const promises: {[topicId: number]: typeof promise} = {};\n const ids: number[] = [];\n for(const [topicId, promise] of cache.getTopicPromises) {\n promises[topicId] = promise;\n ids.push(getServerMessageId(topicId));\n }\n\n cache.getTopicPromises.clear();\n\n const fullfillLeft = () => {\n for(const topicId in promises) {\n promises[topicId].resolve(undefined);\n cache.deletedTopics.add(+topicId);\n }\n };\n\n if(this.getForumTopicsCache(peerId) !== cache) {\n fullfillLeft();\n return;\n }\n\n return this.apiManager.invokeApi('channels.getForumTopicsByID', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n topics: ids\n }).then((messagesForumTopics) => {\n if(this.getForumTopicsCache(peerId) !== cache) {\n return;\n }\n\n this.applyDialogs(messagesForumTopics, peerId);\n\n messagesForumTopics.topics.forEach((forumTopic) => {\n if(forumTopic._ === 'forumTopic') {\n promises[forumTopic.id].resolve(forumTopic);\n delete promises[peerId];\n }\n });\n\n return messagesForumTopics;\n }, () => {}).then(() => {\n fullfillLeft();\n\n cache.getTopicsPromise = undefined;\n if(cache.getTopicPromises.size) {\n this.getForumTopicById(peerId);\n }\n });\n });\n\n return promise || cache.getTopicsPromise;\n }\n\n // public getForumTopicById(peerId: PeerId, topicId: number) {\n // return this.getForumTopicsByID(peerId, topicId).then((result) => result.topics[0]);\n // }\n\n public getForumTopic(peerId: PeerId, topicId: number) {\n const forumTopics = this.forumTopics.get(peerId);\n return forumTopics?.topics?.get(topicId);\n }\n\n public getForumTopicOrReload(peerId: PeerId, topicId: number) {\n const forumTopic = this.getForumTopic(peerId, topicId);\n if(forumTopic) {\n return forumTopic;\n }\n\n const cache = this.getForumTopicsCache(peerId);\n return cache?.deletedTopics?.has(topicId) ? undefined : this.getForumTopicById(peerId, topicId);\n }\n\n public processTopics>(peerId: PeerId, result: T) {\n return callbackify(result, (result) => {\n if('pts' in result) {\n this.apiUpdatesManager.addChannelState(peerId.toChatId(), result.pts);\n }\n\n const peer = this.appPeersManager.getOutputPeer(peerId);\n result.topics = result.topics.map((topic) => {\n if(topic._ === 'forumTopicDeleted') {\n return;\n }\n\n (topic as ForumTopic).peer = peer;\n topic.id = generateMessageId(topic.id);\n return topic;\n }).filter(Boolean);\n\n return result;\n });\n }\n\n public processTopicsPromise[1]>>(peerId: PeerId, promise: T): T {\n return promise.then((result) => {\n this.processTopics(peerId, result);\n return result;\n }) as any;\n }\n\n public getForumUnreadCount(peerId: PeerId) {\n if(!this.appPeersManager.isForum(peerId)) {\n return;\n }\n\n const folder = this.getFolder(peerId);\n\n const f = folder.dialogs.length >= 20 || this.isDialogsLoaded(peerId) ?\n folder.dialogs.slice(0, 20) :\n callbackify(this.getDialogs({filterId: peerId, limit: 20}), (result) => {\n return result.dialogs;\n });\n\n return callbackify(f, (dialogs) => {\n return {\n count: dialogs.reduce((acc, v) => acc + +!!v.unread_count, 0),\n hasUnmuted: dialogs.some((dialog) => dialog.unread_count && this.isDialogUnmuted(dialog))\n };\n });\n }\n\n // * FORUMS SECTION END\n\n private handleDialogTogglePinned(dialog: Dialog | ForumTopic, pinned: boolean, folderId: number) {\n if(dialog) {\n if(!pinned) {\n this.handleDialogUnpinning(dialog, folderId);\n } else { // means set\n dialog.pFlags.pinned = true;\n }\n\n this.generateIndexForDialog(dialog);\n }\n\n this.appMessagesManager.scheduleHandleNewDialogs(dialog.peerId, dialog);\n }\n\n private handleDialogsPinned(folderId: number, order: (Dialog['peerId'] | ForumTopic['id'])[]) {\n const isForum = this.isFilterIdForForum(folderId);\n this.resetPinnedOrder(folderId);\n this.getPinnedOrders(folderId).push(...order);\n this.savePinnedOrders();\n order.reverse(); // index must be higher\n const newPinned: {[id: typeof order[0]]: true} = {};\n order.forEach((id) => {\n newPinned[id] = true;\n\n const peerId = isForum ? folderId : id;\n const topicId = isForum ? id : undefined;\n\n const dialog = this.getDialogOrTopic(peerId, topicId);\n this.appMessagesManager.scheduleHandleNewDialogs(peerId, dialog);\n if(!dialog) {\n return;\n }\n\n dialog.pFlags.pinned = true;\n this.generateIndexForDialog(dialog);\n });\n\n const dialogs = this.getFolderDialogs(folderId, false);\n for(const dialog of dialogs) {\n if(!dialog.pFlags.pinned) {\n break;\n }\n\n if(!newPinned[this.getDialogKey(dialog)]) {\n delete dialog.pFlags.pinned;\n this.generateIndexForDialog(dialog);\n this.appMessagesManager.scheduleHandleNewDialogs(dialog.peerId, dialog);\n }\n }\n }\n\n // only 0 and 1 folders\n private onUpdateFolderPeers = (update: Update.updateFolderPeers) => {\n // this.log('updateFolderPeers', update);\n const peers = update.folder_peers;\n\n peers.forEach((folderPeer) => {\n const {folder_id, peer} = folderPeer;\n\n const peerId = this.appPeersManager.getPeerId(peer);\n const dialog = this.dropDialog(peerId)[0];\n if(dialog) {\n if(dialog.pFlags?.pinned) {\n this.handleDialogUnpinning(dialog, folder_id);\n }\n\n (dialog as Dialog).folder_id = folder_id as REAL_FOLDER_ID;\n this.generateIndexForDialog(dialog);\n this.pushDialog({dialog}); // need for simultaneously updatePinnedDialogs\n }\n\n this.appMessagesManager.scheduleHandleNewDialogs(peerId, dialog);\n });\n };\n\n private onUpdateDialogPinned = (update: Update.updateDialogPinned) => {\n const folderId = update.folder_id ?? FOLDER_ID_ALL;\n // this.log('updateDialogPinned', update);\n const peerId = this.appPeersManager.getPeerId((update.peer as DialogPeer.dialogPeer).peer);\n const dialog = this.getDialogOnly(peerId);\n\n // ัั‚ะพั‚ ะบะพะด ะฒะฝะธะทัƒ ะฝะธะบะพะณะดะฐ ะฝะต ัั€ะฐะฑะพั‚ะฐะตั‚, ะฒ ะฟะฐะฟะบะฐั… ะทะฐ ะฟะธะฝะฝะตะด ะพั‚ะฒะตั‡ะฐะตั‚ updateDialogFilter\n /* if(update.folder_id > 1) {\n const filter = this.filtersStorage.filters[update.folder_id];\n if(update.pFlags.pinned) {\n filter.pinned_peers.unshift(peerId);\n } else {\n filter.pinned_peers.findAndSplice((p) => p === peerId);\n }\n } */\n\n this.handleDialogTogglePinned(dialog, update.pFlags.pinned, folderId);\n };\n\n private onUpdateChannelPinnedTopic = (update: Update.updateChannelPinnedTopic) => {\n const peerId = update.channel_id.toPeerId(true);\n const topicId = generateMessageId(update.topic_id);\n const topic = this.getForumTopic(peerId, topicId);\n if(!topic) {\n return;\n }\n\n this.handleDialogTogglePinned(topic, update.pFlags.pinned, this.getFilterIdForForum(topic));\n };\n\n private onUpdatePinnedDialogs = (update: Update.updatePinnedDialogs) => {\n const folderId = update.folder_id ?? FOLDER_ID_ALL;\n\n if(update.order) {\n this.handleDialogsPinned(folderId, update.order.map((peer) => this.appPeersManager.getPeerId((peer as DialogPeer.dialogPeer).peer)));\n } else {\n this.apiManager.invokeApi('messages.getPinnedDialogs', {\n folder_id: folderId\n }).then((dialogsResult) => {\n // * for test reordering and rendering\n // dialogsResult.dialogs.reverse();\n\n this.applyDialogs(dialogsResult);\n\n this.handleDialogsPinned(folderId, dialogsResult.dialogs.map((d) => d.peerId));\n });\n }\n };\n\n private onUpdateChannelPinnedTopics = async(update: Update.updateChannelPinnedTopics) => {\n const peerId = update.channel_id.toPeerId(true);\n const forumTopics = this.forumTopics.get(peerId);\n if(!forumTopics) {\n return;\n }\n\n const filterId = peerId;\n if(update.order) {\n const order = update.order.map((topicId) => generateMessageId(topicId));\n this.handleDialogsPinned(filterId, order);\n } else {\n const limit = await this.apiManager.getLimit('topicPin', true);\n\n const promise = this.apiManager.invokeApi('channels.getForumTopics', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n limit,\n offset_date: 0,\n offset_id: 0,\n offset_topic: 0\n });\n\n const result = await this.processTopics(peerId, promise);\n\n const topics = result.topics as ForumTopic[];\n const pinned = topics.filter((topic) => topic.pFlags.pinned);\n this.handleDialogsPinned(filterId, pinned.map((topic) => topic.id));\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {DialogFilter, ForumTopic, Update} from '../../layer';\nimport type {Dialog} from '../appManagers/appMessagesManager';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport copy from '../../helpers/object/copy';\nimport {AppManager} from '../appManagers/manager';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport assumeType from '../../helpers/assumeType';\nimport {FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, REAL_FOLDERS, REAL_FOLDER_ID, START_LOCAL_ID} from '../mtproto/mtproto_config';\nimport makeError from '../../helpers/makeError';\n\nexport type MyDialogFilter = DialogFilter.dialogFilter;\n\nconst convertment = [\n ['pinned_peers', 'pinnedPeerIds'],\n ['exclude_peers', 'excludePeerIds'],\n ['include_peers', 'includePeerIds']\n] as ['pinned_peers' | 'exclude_peers' | 'include_peers', 'pinnedPeerIds' | 'excludePeerIds' | 'includePeerIds'][];\n\nconst PREPENDED_FILTERS = REAL_FOLDERS.size;\n\nconst LOCAL_FILTER: MyDialogFilter = {\n _: 'dialogFilter',\n pFlags: {},\n flags: 0,\n id: 0,\n title: '',\n exclude_peers: [],\n include_peers: [],\n pinned_peers: [],\n excludePeerIds: [],\n includePeerIds: [],\n pinnedPeerIds: []\n};\n\nexport default class FiltersStorage extends AppManager {\n private filters: {[filterId: string]: MyDialogFilter};\n private filtersArr: Array;\n private localFilters: {[filterId: string]: MyDialogFilter};\n private localId: number;\n private reloadedPeerIds: Set;\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateDialogFilter: this.onUpdateDialogFilter,\n\n updateDialogFilters: this.onUpdateDialogFilters,\n\n updateDialogFilterOrder: this.onUpdateDialogFilterOrder\n });\n\n // delete peers when dialog is being dropped\n /* rootScope.addEventListener('peer_deleted', (peerId) => {\n for(const filterId in this.filters) {\n const filter = this.filters[filterId];\n let modified = false;\n [filter.pinned_peers, filter.include_peers, filter.exclude_peers].forEach((arr) => {\n forEachReverse(arr, (inputPeer, idx) => {\n if(getPeerId(inputPeer) === peerId) {\n arr.splice(idx, 1);\n modified = true;\n }\n });\n });\n\n if(modified) {\n this.saveDialogFilter(filter, true);\n }\n }\n }); */\n\n this.rootScope.addEventListener('premium_toggle', () => {\n this.onUpdateDialogFilters({_: 'updateDialogFilters'});\n });\n\n return this.appStateManager.getState().then((state) => {\n const filtersArr = this.prependFilters(state.filtersArr);\n filtersArr.map((filter) => {\n this.saveDialogFilter(filter, false, true);\n });\n });\n }\n\n /**\n * ! use it only with saving\n */\n private prependFilters(filters: DialogFilter[]) {\n filters = filters.slice();\n\n const allChatsFilter = this.localFilters[FOLDER_ID_ALL];\n const archiveFilter = this.localFilters[FOLDER_ID_ARCHIVE];\n\n const allChatsFilterIndex = filters.findIndex((filter) => filter._ === 'dialogFilterDefault' || filter.id === FOLDER_ID_ALL);\n if(allChatsFilterIndex !== -1) filters[allChatsFilterIndex] = allChatsFilter;\n else filters.unshift(allChatsFilter);\n\n findAndSplice(filters, (filter) => (filter as MyDialogFilter).id === FOLDER_ID_ARCHIVE);\n filters.splice(/* 1 */filters[0] === allChatsFilter ? 1 : 0, 0, archiveFilter);\n\n this.localId = START_LOCAL_ID;\n filters.forEach((filter) => {\n delete filter.localId;\n });\n\n return filters;\n }\n\n private generateLocalFilter(id: REAL_FOLDER_ID) {\n const filter: MyDialogFilter = {...copy(LOCAL_FILTER), id};\n if(id === FOLDER_ID_ALL) {\n filter.pFlags.exclude_archived = true;\n } else if(id === FOLDER_ID_ARCHIVE) {\n filter.pFlags.exclude_unarchived = true;\n }\n\n if(REAL_FOLDERS.has(id)) {\n filter.pinnedPeerIds = this.dialogsStorage.getPinnedOrders(id);\n }\n\n return filter;\n }\n\n // private getLocalFilter(id: number) {\n // return this.filters[id] ??= this.generateLocalFilter(id);\n // }\n\n public clear = (init?: boolean) => {\n if(!init) {\n // safeReplaceObject(this.filters, {});\n this.reloadedPeerIds.clear();\n this.clearFilters();\n } else {\n this.filters = {};\n this.filtersArr = [];\n this.reloadedPeerIds = new Set();\n\n this.localFilters = {};\n for(const filterId of REAL_FOLDERS) {\n this.localFilters[filterId] = this.generateLocalFilter(filterId as REAL_FOLDER_ID);\n }\n }\n\n this.localId = START_LOCAL_ID;\n };\n\n private onUpdateDialogFilter = (update: Update.updateDialogFilter) => {\n if(update.filter) {\n this.saveDialogFilter(update.filter as any);\n } else if(this.filters[update.id]) { // ะŸะฐะฟะบะฐ ัƒะดะฐะปะตะฝะฐ\n // this.getDialogFilters(true);\n this.rootScope.dispatchEvent('filter_delete', this.filters[update.id]);\n delete this.filters[update.id];\n findAndSplice(this.filtersArr, (filter) => (filter as DialogFilter.dialogFilter).id === update.id);\n }\n\n this.pushToState();\n };\n\n private onUpdateDialogFilters = (update: Update.updateDialogFilters) => {\n // console.warn('updateDialogFilters', update);\n\n const oldFilters = copy(this.filters);\n\n this.getDialogFilters(true).then((filters) => {\n for(const _filterId in oldFilters) {\n const filterId = +_filterId;\n if(!filters.find((filter) => filter.id === filterId)) { // * deleted\n this.onUpdateDialogFilter({_: 'updateDialogFilter', id: filterId});\n }\n }\n\n this.onUpdateDialogFilterOrder({_: 'updateDialogFilterOrder', order: filters.map((filter) => filter.id)});\n });\n };\n\n private onUpdateDialogFilterOrder = (update: Update.updateDialogFilterOrder) => {\n // console.log('updateDialogFilterOrder', update);\n\n const order = update.order.slice();\n if(!order.includes(FOLDER_ID_ARCHIVE)) {\n order.splice(order[0] === FOLDER_ID_ALL ? 1 : 0, 0, FOLDER_ID_ARCHIVE);\n }\n\n this.localId = START_LOCAL_ID;\n order.forEach((filterId) => {\n const filter = this.filters[filterId];\n delete filter.localId;\n this.setLocalId(filter);\n });\n\n this.rootScope.dispatchEvent('filter_order', order);\n\n this.pushToState();\n };\n\n private pushToState() {\n this.appStateManager.pushToState('filtersArr', this.filtersArr);\n }\n\n public testDialogForFilter(dialog: Dialog | ForumTopic.forumTopic, filter?: MyDialogFilter) {\n if(!filter) {\n return true;\n }\n\n if(REAL_FOLDERS.has(filter.id)) {\n return (dialog as Dialog).folder_id === filter.id && this.dialogsStorage.canSaveDialogByPeerId(dialog.peerId);\n }\n\n const peerId = dialog.peerId;\n\n // * check whether dialog exists\n if(!this.appMessagesManager.getDialogOnly(peerId)) {\n return false;\n }\n\n // exclude_peers\n if(filter.excludePeerIds.includes(peerId)) {\n return false;\n }\n\n // include_peers\n if(filter.includePeerIds.includes(peerId)) {\n return true;\n }\n\n const pFlags = filter.pFlags;\n\n // exclude_archived\n if(pFlags.exclude_archived && (dialog as Dialog).folder_id === FOLDER_ID_ARCHIVE) {\n return false;\n }\n\n // exclude_read\n if(pFlags.exclude_read && !this.appMessagesManager.isDialogUnread(dialog)) {\n return false;\n }\n\n // exclude_muted\n if(pFlags.exclude_muted && this.appNotificationsManager.isPeerLocalMuted({peerId}) && !(dialog.unread_mentions_count && dialog.unread_count)) {\n return false;\n }\n\n if(this.appPeersManager.isAnyChat(peerId)) {\n // broadcasts\n if(pFlags.broadcasts && this.appPeersManager.isBroadcast(peerId)) {\n return true;\n }\n\n // groups\n if(pFlags.groups && this.appPeersManager.isAnyGroup(peerId)) {\n return true;\n }\n } else {\n const userId = peerId.toUserId();\n\n // bots\n if(this.appUsersManager.isBot(userId)) {\n return !!pFlags.bots;\n }\n\n // non_contacts\n if(pFlags.non_contacts && !this.appUsersManager.isContact(userId)) {\n return true;\n }\n\n // contacts\n if(pFlags.contacts && this.appUsersManager.isContact(userId)) {\n return true;\n }\n }\n\n return false;\n }\n\n public testDialogForFilterId(dialog: Dialog, filterId: number) {\n return this.testDialogForFilter(dialog, this.filters[filterId]);\n }\n\n public getFilter(filterId: number) {\n return this.filters[filterId];\n }\n\n public getFilters() {\n return this.filters;\n }\n\n public clearFilters() {\n const filters = this.getFilters();\n for(const filterId in filters) { // delete filters\n if(REAL_FOLDERS.has(+filterId)) {\n continue;\n }\n\n this.onUpdateDialogFilter({\n _: 'updateDialogFilter',\n id: +filterId\n });\n }\n }\n\n public async toggleDialogPin(peerId: PeerId, filterId: number) {\n const filter = this.filters[filterId];\n\n const index = filter.pinnedPeerIds.indexOf(peerId);\n const wasPinned = index !== -1;\n\n if(wasPinned) {\n filter.pinned_peers.splice(index, 1);\n filter.pinnedPeerIds.splice(index, 1);\n }\n\n if(!wasPinned) {\n if(filter.pinned_peers.length >= (await this.apiManager.getConfig()).pinned_infolder_count_max) {\n return Promise.reject(makeError('PINNED_DIALOGS_TOO_MUCH'));\n }\n\n filter.pinned_peers.unshift(this.appPeersManager.getInputPeerById(peerId));\n filter.pinnedPeerIds.unshift(peerId);\n }\n\n return this.updateDialogFilter(filter);\n }\n\n public createDialogFilter(filter: MyDialogFilter, prepend?: boolean) {\n const maxId = Math.max(1, ...Object.keys(this.filters).map((i) => +i));\n filter = copy(filter);\n filter.id = maxId + 1;\n return this.updateDialogFilter(filter, undefined, prepend);\n }\n\n public updateDialogFilter(filter: MyDialogFilter, remove = false, prepend = false) {\n const flags = remove ? 0 : 1;\n\n return this.apiManager.invokeApi('messages.updateDialogFilter', {\n flags,\n id: filter.id,\n filter: remove ? undefined : this.getOutputDialogFilter(filter)\n }).then((bool) => { // ะฒะพะทะผะพะถะฝะพ ะฝัƒะถะฝะฐ ะฟั€ะพะฒะตั€ะบะฐ ะธ ะพั‚ะบะฐั‚, ะตัะปะธ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฝะต ะขะ ะฃ\n // console.log('updateDialogFilter bool:', bool);\n\n /* if(!this.filters[filter.id]) {\n this.saveDialogFilter(filter);\n }\n\n rootScope.$broadcast('filter_update', filter); */\n\n this.onUpdateDialogFilter({\n _: 'updateDialogFilter',\n id: filter.id,\n filter: remove ? undefined : filter as any\n });\n\n if(prepend) {\n const f: MyDialogFilter[] = [];\n for(const filterId in this.filters) {\n const filter = this.filters[filterId];\n ++filter.localId;\n f.push(filter);\n }\n\n filter.localId = START_LOCAL_ID;\n\n const order = f.sort((a, b) => a.localId - b.localId).map((filter) => filter.id);\n this.onUpdateDialogFilterOrder({\n _: 'updateDialogFilterOrder',\n order\n });\n }\n });\n }\n\n public updateDialogFiltersOrder(order: number[]) {\n return this.apiManager.invokeApi('messages.updateDialogFiltersOrder', {\n order\n }).then(() => {\n this.onUpdateDialogFilterOrder({\n _: 'updateDialogFilterOrder',\n order\n });\n });\n }\n\n public getOutputDialogFilter(filter: MyDialogFilter) {\n const c = copy(filter);\n /* convertment.forEach(([from, to]) => {\n c[from] = c[to].map((peerId) => this.appPeersManager.getInputPeerById(peerId));\n }); */\n\n this.filterIncludedPinnedPeers(filter);\n\n return c;\n }\n\n private filterIncludedPinnedPeers(filter: MyDialogFilter) {\n forEachReverse(filter.includePeerIds, (peerId, idx) => {\n if(filter.pinnedPeerIds.includes(peerId)) {\n filter.include_peers.splice(idx, 1);\n filter.includePeerIds.splice(idx, 1);\n }\n });\n }\n\n // private spliceMissingPeerIds(filterId: number, type: ArgumentTypes[1], missingPeerIds: PeerId[]) {\n // const filter = this.getFilter(filterId);\n // const peers = filter && filter[type];\n // if(!peers?.length) {\n // return;\n // }\n\n // let spliced = false;\n // missingPeerIds.forEach((peerId) => {\n // const inputPeer = findAndSplice(peers, (inputPeer) => getPeerId(inputPeer) === peerId);\n // if(inputPeer) {\n // spliced = true;\n // }\n // });\n\n // if(spliced) {\n // this.onUpdateDialogFilter({\n // _: 'updateDialogFilter',\n // id: filterId,\n // filter\n // });\n // }\n // }\n\n public reloadMissingPeerIds(\n filterId: number,\n type: 'pinned_peers' | 'include_peers' | 'exclude_peers' = 'pinned_peers'\n ) {\n const filter = this.getFilter(filterId);\n const peers = filter?.[type];\n if(!peers?.length) {\n return;\n }\n\n // const missingPeerIds: PeerId[] = [];\n const reloadDialogs = peers.filter((inputPeer) => {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n const isAlreadyReloaded = this.reloadedPeerIds.has(peerId);\n const dialog = this.appMessagesManager.getDialogOnly(peerId);\n // if(isAlreadyReloaded && !dialog) {\n // missingPeerIds.push(peerId);\n // }\n\n const reload = !isAlreadyReloaded && !dialog;\n return reload;\n });\n\n if(!reloadDialogs.length) {\n // if(missingPeerIds.length) {\n // this.spliceMissingPeerIds(filterId, type, missingPeerIds);\n // }\n\n return;\n }\n\n const reloadPromises = reloadDialogs.map((inputPeer) => {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n const promise = this.appMessagesManager.reloadConversation(inputPeer)\n .then((dialog) => {\n this.reloadedPeerIds.add(peerId);\n\n return dialog ? undefined : peerId;\n });\n\n return promise;\n });\n\n const reloadPromise = Promise.all(reloadPromises).then((missingPeerIds) => {\n missingPeerIds = missingPeerIds.filter(Boolean);\n if(!missingPeerIds.length) {\n return;\n }\n\n // this.spliceMissingPeerIds(filterId, type, missingPeerIds);\n });\n\n return reloadPromise;\n }\n\n public async getDialogFilters(overwrite = false): Promise {\n const keys = Object.keys(this.filters);\n if(keys.length > PREPENDED_FILTERS && !overwrite) {\n return keys.map((filterId) => this.filters[filterId]).sort((a, b) => a.localId - b.localId);\n }\n\n const filters = await this.apiManager.invokeApiSingle('messages.getDialogFilters');\n const prepended = this.prependFilters(filters);\n return prepended.map((filter) => this.saveDialogFilter(filter, overwrite)).filter(Boolean);\n }\n\n public getSuggestedDialogsFilters() {\n return this.apiManager.invokeApi('messages.getSuggestedDialogFilters');\n }\n\n public saveDialogFilter(filter: DialogFilter, update = true, silent?: boolean) {\n // defineNotNumerableProperties(filter, ['includePeerIds', 'excludePeerIds', 'pinnedPeerIds']);\n\n if(filter._ === 'dialogFilterDefault') {\n filter = this.localFilters[FOLDER_ID_ALL];\n }\n\n assumeType(filter);\n if(!REAL_FOLDERS.has(filter.id)) {\n convertment.forEach(([from, to]) => {\n assumeType(filter);\n filter[to] = filter[from].map((peer) => this.appPeersManager.getPeerId(peer));\n });\n\n this.filterIncludedPinnedPeers(filter);\n\n filter.include_peers = filter.pinned_peers.concat(filter.include_peers);\n filter.includePeerIds = filter.pinnedPeerIds.concat(filter.includePeerIds);\n }\n\n const oldFilter = this.filters[filter.id];\n if(oldFilter) {\n Object.assign(oldFilter, filter);\n } else {\n this.filters[filter.id] = filter;\n }\n\n this.setLocalId(filter);\n\n if(!silent) {\n if(update) {\n this.rootScope.dispatchEvent('filter_update', filter);\n } else if(!oldFilter) {\n this.rootScope.dispatchEvent('filter_new', filter);\n }\n }\n\n return filter;\n }\n\n private setLocalId(filter: MyDialogFilter) {\n if(filter.localId !== undefined) {\n if(filter.localId >= this.localId) {\n this.localId = filter.localId + 1;\n }\n } else {\n filter.localId = this.localId++ as MyDialogFilter['localId'];\n findAndSplice(this.filtersArr, (_filter) => _filter.id === filter.id);\n this.filtersArr.push(filter);\n this.pushToState();\n }\n }\n\n public async isFilterIdAvailable(filterId: number) {\n if(REAL_FOLDERS.has(filterId)) {\n return true;\n }\n\n const limit = await this.apiManager.getLimit('folders');\n const isFolderAvailable = this.filtersArr.filter((filter) => !REAL_FOLDERS.has(filter.id)).slice(0, limit).some((filter) => filter.id === filterId);\n\n return isFolderAvailable;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function applyMixins(derivedCtor: any, constructors: any[]) {\n // const callbacks: Array<(...args: any[]) => any> = [];\n\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n const value: PropertyDescriptor = Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null);\n /* if(name === '_constructor') {\n callbacks.push(value.value);\n return;\n } else */if(name === 'constructor') {\n return;\n }\n\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n value\n );\n });\n });\n\n // if(callbacks.length) {\n // function c(...args: any[]): any {\n // callbacks.forEach((cb, idx) => {\n // // @ts-ignore\n // cb.apply(this, args[idx] || []);\n // });\n // };\n\n // Object.defineProperty(derivedCtor.prototype, 'superConstructor', {\n // configurable: true,\n // enumerable: true,\n // value: c,\n // writable: true\n // });\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport DEBUG from '../../config/debug';\nimport {ConstructorDeclMap, Message, MessageEntity, MessageFwdHeader, Peer, Update, Updates} from '../../layer';\nimport {logger, LogTypes} from '../logger';\nimport assumeType from '../../helpers/assumeType';\nimport App from '../../config/app';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport {AppManager} from './manager';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport ctx from '../../environment/ctx';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport applyMixins from '../../helpers/applyMixins';\nimport tsNow from '../../helpers/tsNow';\n\ntype UpdatesState = {\n pendingPtsUpdates: (Update & {pts: number, pts_count: number})[],\n pendingSeqUpdates?: {[seq: number]: {seq: number, date: number, updates: any[]}},\n syncPending: {\n seqAwaiting?: number,\n ptsAwaiting?: boolean,\n timeout: number\n },\n syncLoading: Promise,\n\n seq?: number,\n pts?: number,\n date?: number,\n lastPtsUpdateTime?: number,\n lastDifferenceTime?: number\n};\n\nconst SYNC_DELAY = 6;\n\nclass ApiUpdatesManager {\n public updatesState: UpdatesState = {\n pendingPtsUpdates: [],\n pendingSeqUpdates: {},\n syncPending: null,\n syncLoading: null\n };\n\n private channelStates: {[channelId: ChatId]: UpdatesState} = {};\n private attached = false;\n\n private log = logger('UPDATES', LogTypes.Error | LogTypes.Warn | LogTypes.Log/* | LogTypes.Debug */);\n private debug = DEBUG;\n\n private subscriptions: {[channelId: ChatId]: {count: number, interval?: number}} = {};\n\n constructor() {\n this._constructor(false);\n }\n\n private setProxy() {\n const self = this;\n this.updatesState = new Proxy(this.updatesState, {\n set: function(target: ApiUpdatesManager['updatesState'], key: keyof ApiUpdatesManager['updatesState'], value: ApiUpdatesManager['updatesState'][typeof key]) {\n // @ts-ignore\n target[key] = value;\n self.saveUpdatesState();\n return true;\n }\n });\n }\n\n public saveUpdatesState() {\n const us = this.updatesState;\n this.appStateManager.pushToState('updates', {\n seq: us.seq,\n pts: us.pts,\n date: us.date\n });\n }\n\n private popPendingSeqUpdate() {\n const state = this.updatesState;\n const nextSeq = state.seq + 1;\n const pendingUpdatesData = state.pendingSeqUpdates[nextSeq];\n if(!pendingUpdatesData) {\n return false;\n }\n\n const updates = pendingUpdatesData.updates;\n for(let i = 0, length = updates.length; i < length; ++i) {\n this.saveUpdate(updates[i]);\n }\n\n state.seq = pendingUpdatesData.seq;\n if(pendingUpdatesData.date && state.date < pendingUpdatesData.date) {\n state.date = pendingUpdatesData.date;\n }\n delete state.pendingSeqUpdates[nextSeq];\n\n if(!this.popPendingSeqUpdate() &&\n state.syncPending?.seqAwaiting &&\n state.seq >= state.syncPending.seqAwaiting) {\n if(!state.syncPending.ptsAwaiting) {\n this.clearStatePendingSync(state);\n } else {\n delete state.syncPending.seqAwaiting;\n }\n }\n\n return true;\n }\n\n private popPendingPtsUpdate(channelId: ChatId) {\n const curState = channelId ? this.getChannelState(channelId) : this.updatesState;\n if(!curState.pendingPtsUpdates.length) {\n return false;\n }\n\n curState.pendingPtsUpdates.sort((a, b) => {\n return a.pts - b.pts;\n });\n // this.log('pop update', channelId, curState.pendingPtsUpdates)\n\n let curPts = curState.pts;\n let goodPts = 0;\n let goodIndex = 0;\n for(let i = 0, length = curState.pendingPtsUpdates.length; i < length; ++i) {\n const update = curState.pendingPtsUpdates[i];\n curPts += update.pts_count;\n if(curPts >= update.pts) {\n goodPts = update.pts;\n goodIndex = i;\n }\n }\n\n if(!goodPts) {\n return false;\n }\n\n this.debug && this.log.debug('pop pending pts updates', goodPts, curState.pendingPtsUpdates.slice(0, goodIndex + 1));\n\n curState.pts = goodPts;\n for(let i = 0; i <= goodIndex; ++i) {\n const update = curState.pendingPtsUpdates[i];\n\n // @ts-ignore\n this.saveUpdate(update);\n }\n curState.pendingPtsUpdates.splice(0, goodIndex + 1);\n\n if(!curState.pendingPtsUpdates.length && curState.syncPending) {\n if(!curState.syncPending.seqAwaiting) {\n this.clearStatePendingSync(curState);\n } else {\n delete curState.syncPending.ptsAwaiting;\n }\n }\n\n return true;\n }\n\n public forceGetDifference() {\n if(!this.updatesState.syncLoading) {\n this.getDifference();\n }\n }\n\n public processLocalUpdate(update: Update) {\n this.processUpdateMessage({\n _: 'updateShort',\n update\n } as Updates);\n }\n\n public processUpdateMessage = (updateMessage: any, options: Partial<{\n override: boolean\n }> = {}) => {\n // return forceGetDifference()\n const processOpts = {\n date: updateMessage.date,\n seq: updateMessage.seq,\n seqStart: updateMessage.seq_start\n // ignoreSyncLoading: options.ignoreSyncLoading\n };\n\n this.debug && this.log.debug('processUpdateMessage', updateMessage);\n\n switch(updateMessage._) {\n case 'updatesTooLong':\n case 'new_session_created':\n this.forceGetDifference();\n break;\n\n case 'updateShort':\n this.processUpdate(updateMessage.update, processOpts);\n break;\n\n case 'updateShortMessage':\n case 'updateShortChatMessage': {\n assumeType(updateMessage);\n this.debug && this.log.debug('updateShortMessage | updateShortChatMessage', {...updateMessage});\n const isOut = updateMessage.pFlags.out;\n const fromId = (updateMessage as Updates.updateShortChatMessage).from_id || (isOut ? this.appPeersManager.peerId : (updateMessage as Updates.updateShortMessage).user_id);\n const toId = (updateMessage as Updates.updateShortChatMessage).chat_id ?\n (updateMessage as Updates.updateShortChatMessage).chat_id.toPeerId(true) :\n ((updateMessage as Updates.updateShortMessage).user_id.toPeerId(false) || this.appPeersManager.peerId);\n\n this.processUpdate({\n _: 'updateNewMessage',\n message: {\n _: 'message',\n pFlags: updateMessage.pFlags,\n id: updateMessage.id,\n from_id: this.appPeersManager.getOutputPeer(fromId.toPeerId()),\n peer_id: this.appPeersManager.getOutputPeer(toId),\n date: updateMessage.date,\n message: updateMessage.message,\n fwd_from: updateMessage.fwd_from,\n reply_to: updateMessage.reply_to,\n entities: updateMessage.entities\n },\n pts: updateMessage.pts,\n pts_count: updateMessage.pts_count\n }, processOpts);\n break;\n }\n\n case 'updatesCombined':\n case 'updates':\n this.appUsersManager.saveApiUsers(updateMessage.users, options.override);\n this.appChatsManager.saveApiChats(updateMessage.chats, options.override);\n\n updateMessage.updates.forEach((update: Update) => {\n this.processUpdate(update, processOpts);\n });\n break;\n\n default:\n this.log.warn('Unknown update message', updateMessage);\n }\n };\n\n private getDifference(first = false): Promise {\n // this.trace('Get full diff')\n const updatesState = this.updatesState;\n const wasSyncing = updatesState.syncLoading;\n if(!wasSyncing) {\n updatesState.pendingSeqUpdates = {};\n updatesState.pendingPtsUpdates = [];\n }\n\n this.clearStatePendingSync(updatesState);\n\n const promise = this.apiManager.invokeApi('updates.getDifference', {\n pts: updatesState.pts,\n pts_total_limit: first /* && false */? /* 50 */1200 : undefined,\n date: updatesState.date,\n qts: -1\n }, {\n timeout: 0x7fffffff\n }).then((differenceResult) => {\n this.debug && this.log.debug('Get diff result', differenceResult);\n\n if(differenceResult._ === 'updates.differenceEmpty') {\n this.debug && this.log.debug('apply empty diff', differenceResult.seq);\n updatesState.date = differenceResult.date;\n updatesState.seq = differenceResult.seq;\n return;\n }\n\n // ! SORRY I'M SORRY I'M SORRY\n if(first) {\n this.rootScope.dispatchEvent('state_synchronizing');\n }\n\n if(differenceResult._ !== 'updates.differenceTooLong') {\n this.appUsersManager.saveApiUsers(differenceResult.users);\n this.appChatsManager.saveApiChats(differenceResult.chats);\n\n // Should be first because of updateMessageID\n // this.log('applying', differenceResult.other_updates.length, 'other updates')\n\n differenceResult.other_updates.forEach((update) => {\n switch(update._) {\n case 'updateChannelTooLong':\n case 'updateNewChannelMessage':\n case 'updateEditChannelMessage':\n this.processUpdate(update);\n return;\n }\n\n this.saveUpdate(update);\n });\n\n // this.log('applying', differenceResult.new_messages.length, 'new messages')\n differenceResult.new_messages.forEach((apiMessage) => {\n this.saveUpdate({\n _: 'updateNewMessage',\n message: apiMessage,\n pts: updatesState.pts,\n pts_count: 0\n });\n });\n\n const nextState = differenceResult._ === 'updates.difference' ? differenceResult.state : differenceResult.intermediate_state;\n updatesState.seq = nextState.seq;\n updatesState.pts = nextState.pts;\n updatesState.date = nextState.date;\n } else {\n updatesState.pts = differenceResult.pts;\n updatesState.date = tsNow(true) + this.timeManager.getServerTimeOffset();\n delete updatesState.seq;\n\n this.channelStates = {};\n\n this.log.warn('getDifference:', differenceResult._);\n this.onDifferenceTooLong();\n }\n\n // this.log('apply diff', updatesState.seq, updatesState.pts)\n\n if(differenceResult._ === 'updates.differenceSlice') {\n return this.getDifference();\n } else {\n this.debug && this.log.debug('finished get diff');\n }\n });\n\n if(!wasSyncing) {\n this.justAName(updatesState, promise);\n }\n\n return promise;\n }\n\n private clearStatePendingSync(state: UpdatesState) {\n if(state.syncPending) {\n clearTimeout(state.syncPending.timeout);\n state.syncPending = null;\n }\n }\n\n private getChannelDifference(channelId: ChatId): Promise {\n const channelState = this.getChannelState(channelId);\n const wasSyncing = channelState.syncLoading;\n if(!wasSyncing) {\n channelState.pendingPtsUpdates = [];\n }\n\n this.clearStatePendingSync(channelState);\n\n const log = this.debug ? this.log.bindPrefix('getChannelDifference-' + channelId) : undefined;\n // this.log.trace('Get channel diff', appChatsManager.getChat(channelId), channelState.pts);\n const promise = this.apiManager.invokeApi('updates.getChannelDifference', {\n channel: this.appChatsManager.getChannelInput(channelId),\n filter: {_: 'channelMessagesFilterEmpty'},\n pts: channelState.pts,\n limit: 1000\n }, {timeout: 0x7fffffff}).then((differenceResult) => {\n log?.debug('diff result', differenceResult)\n channelState.pts = 'pts' in differenceResult ? differenceResult.pts : undefined;\n channelState.lastDifferenceTime = Date.now();\n\n if(differenceResult._ === 'updates.channelDifferenceEmpty') {\n // log?.debug('apply channel empty diff', differenceResult);\n return;\n }\n\n if(differenceResult._ === 'updates.channelDifferenceTooLong') {\n // log?.debug('channel diff too long', differenceResult);\n delete this.channelStates[channelId];\n\n this.saveUpdate({_: 'updateChannelReload', channel_id: channelId});\n return;\n }\n\n this.appUsersManager.saveApiUsers(differenceResult.users);\n this.appChatsManager.saveApiChats(differenceResult.chats);\n\n // Should be first because of updateMessageID\n log?.debug('applying', differenceResult.other_updates.length, 'channel other updates');\n differenceResult.other_updates.forEach((update) => {\n this.saveUpdate(update);\n });\n\n log?.debug('applying', differenceResult.new_messages.length, 'channel new messages');\n differenceResult.new_messages.forEach((apiMessage) => {\n this.saveUpdate({\n _: 'updateNewChannelMessage',\n message: apiMessage,\n pts: channelState.pts,\n pts_count: 0\n });\n });\n\n log?.debug('apply channel diff', channelState.pts);\n\n if(differenceResult._ === 'updates.channelDifference' &&\n !differenceResult.pFlags.final) {\n return this.getChannelDifference(channelId);\n } else {\n log?.debug('finished channel get diff');\n }\n });\n\n if(!wasSyncing) {\n this.justAName(channelState, promise, channelId);\n }\n\n return promise;\n }\n\n private onDifferenceTooLong() {\n this.appUsersManager.clear();\n this.appChatsManager.clear();\n this.appMessagesManager.clear();\n\n this.rootScope.dispatchEvent('state_cleared');\n }\n\n private justAName(state: UpdatesState, promise: UpdatesState['syncLoading'], channelId?: ChatId) {\n state.syncLoading = promise;\n this.rootScope.dispatchEvent('state_synchronizing', channelId);\n\n promise.then(() => {\n state.syncLoading = null;\n this.rootScope.dispatchEvent('state_synchronized', channelId);\n }, () => {\n state.syncLoading = null;\n });\n }\n\n public addChannelState(channelId: ChatId, pts: number) {\n if(!pts) {\n throw new Error('Add channel state without pts ' + channelId);\n }\n\n return this.channelStates[channelId] ??= {\n pts,\n pendingPtsUpdates: [],\n syncPending: null,\n syncLoading: null\n };\n }\n\n public getChannelState(channelId: ChatId, pts?: number) {\n if(this.channelStates[channelId] === undefined) {\n this.addChannelState(channelId, pts);\n }\n\n return this.channelStates[channelId];\n }\n\n private processUpdate(update: Update, options: Partial<{\n date: number,\n seq: number,\n seqStart: number/* ,\n ignoreSyncLoading: boolean */\n }> = {}) {\n let channelId: ChatId;\n switch(update._) {\n case 'updateNewChannelMessage':\n case 'updateEditChannelMessage':\n channelId = this.appPeersManager.getPeerId(update.message.peer_id).toChatId();\n break;\n /* case 'updateDeleteChannelMessages':\n channelId = update.channel_id;\n break; */\n case 'updateChannelTooLong':\n channelId = update.channel_id;\n if(!(channelId in this.channelStates)) {\n return false;\n }\n break;\n default:\n if('channel_id' in update && 'pts' in update) {\n channelId = update.channel_id;\n }\n break;\n }\n\n const {pts, pts_count} = update as Update.updateNewMessage;\n const curState = channelId ? this.getChannelState(channelId, pts) : this.updatesState;\n\n // this.log.log('process', channelId, curState.pts, update)\n\n if(curState.syncLoading/* && !options.ignoreSyncLoading */) {\n return false;\n }\n\n if(update._ === 'updateChannelTooLong') {\n if(!curState.lastPtsUpdateTime ||\n curState.lastPtsUpdateTime < (Date.now() - SYNC_DELAY)) {\n // this.log.trace('channel too long, get diff', channelId, update)\n this.getChannelDifference(channelId);\n }\n return false;\n }\n\n if(update._ === 'updateNewMessage' ||\n update._ === 'updateEditMessage' ||\n update._ === 'updateNewChannelMessage' ||\n update._ === 'updateEditChannelMessage') {\n const message = update.message as Message.message;\n const toPeerId = this.appPeersManager.getPeerId(message.peer_id);\n const fwdHeader: MessageFwdHeader.messageFwdHeader = message.fwd_from || {} as any;\n let reason: string;\n if(message.from_id && !this.appUsersManager.hasUser(this.appPeersManager.getPeerId(message.from_id), message.pFlags.post/* || channelId*/) && (reason = 'author') ||\n fwdHeader.from_id && !this.appUsersManager.hasUser(this.appPeersManager.getPeerId(fwdHeader.from_id), !!(fwdHeader.from_id as Peer.peerChannel).channel_id) && (reason = 'fwdAuthor') ||\n (fwdHeader.from_id as Peer.peerChannel)?.channel_id && !this.appChatsManager.hasChat((fwdHeader.from_id as Peer.peerChannel).channel_id, true) && (reason = 'fwdChannel') ||\n toPeerId.isUser() && !this.appUsersManager.hasUser(toPeerId) && (reason = 'toPeer User') ||\n toPeerId.isAnyChat() && !this.appChatsManager.hasChat(toPeerId.toChatId()) && (reason = 'toPeer Chat')) {\n this.log.warn('Not enough data for message update', toPeerId, reason, message);\n if(channelId && this.appChatsManager.hasChat(channelId)) {\n this.getChannelDifference(channelId);\n } else {\n this.forceGetDifference();\n }\n return false;\n }\n } else if(channelId && !this.appChatsManager.hasChat(channelId)) {\n // this.log.log('skip update, missing channel', channelId, update)\n return false;\n }\n\n let popPts: boolean;\n let popSeq: boolean;\n\n if(pts) {\n const newPts = curState.pts + (pts_count || 0);\n if(newPts < pts) {\n this.debug && this.log.warn('Pts hole', curState, update, channelId && this.appChatsManager.getChat(channelId));\n curState.pendingPtsUpdates.push(update as Update.updateNewMessage);\n if(!curState.syncPending && !curState.syncLoading) {\n curState.syncPending = {\n timeout: ctx.setTimeout(() => {\n curState.syncPending = null;\n\n if(curState.syncLoading) {\n return;\n }\n\n if(channelId) {\n this.getChannelDifference(channelId);\n } else {\n this.getDifference();\n }\n }, SYNC_DELAY)\n };\n }\n\n curState.syncPending.ptsAwaiting = true;\n return false;\n }\n\n if(pts > curState.pts) {\n curState.pts = pts;\n popPts = true;\n\n curState.lastPtsUpdateTime = Date.now();\n } else if(pts_count) {\n // this.log.warn('Duplicate update', update)\n return false;\n }\n\n if(channelId && options.date && this.updatesState.date < options.date) {\n this.updatesState.date = options.date;\n }\n } else if(!channelId && options.seq > 0) {\n const seq = options.seq;\n const seqStart = options.seqStart || seq;\n\n if(seqStart !== curState.seq + 1) {\n if(seqStart > curState.seq) {\n this.debug && this.log.warn('Seq hole', curState, curState.syncPending?.seqAwaiting);\n\n curState.pendingSeqUpdates[seqStart] ??= {seq, date: options.date, updates: []};\n curState.pendingSeqUpdates[seqStart].updates.push(update);\n\n if(!curState.syncPending) {\n curState.syncPending = {\n timeout: ctx.setTimeout(() => {\n curState.syncPending = null;\n\n if(curState.syncLoading) {\n return;\n }\n\n this.getDifference();\n }, SYNC_DELAY)\n };\n }\n\n if(!curState.syncPending.seqAwaiting ||\n curState.syncPending.seqAwaiting < seqStart) {\n curState.syncPending.seqAwaiting = seqStart;\n }\n return false;\n }\n }\n\n if(curState.seq !== seq) {\n curState.seq = seq;\n if(options.date && curState.date < options.date) {\n curState.date = options.date;\n }\n\n popSeq = true;\n }\n }\n\n this.saveUpdate(update);\n\n if(popPts) {\n this.popPendingPtsUpdate(channelId);\n } else if(popSeq) {\n this.popPendingSeqUpdate();\n }\n }\n\n public saveUpdate(update: Update) {\n // this.debug && this.log('saveUpdate', update);\n this.dispatchEvent(update._, update as any);\n }\n\n public subscribeToChannelUpdates(channelId: ChatId) {\n const subscription = this.subscriptions[channelId] ??= {count: 0};\n ++subscription.count;\n\n const cb = () => {\n const state = this.getChannelState(channelId);\n if(!state.syncLoading && (!state.lastDifferenceTime || (Date.now() - state.lastDifferenceTime) > 2500)) {\n this.getChannelDifference(channelId);\n }\n };\n\n subscription.interval ??= ctx.setInterval(cb, 3000);\n cb();\n }\n\n public unsubscribeFromChannelUpdates(channelId: ChatId, force?: boolean) {\n const subscription = this.subscriptions[channelId];\n if(!subscription?.interval || (--subscription.count && !force)) {\n return;\n }\n\n clearInterval(subscription.interval);\n subscription.interval = undefined;\n delete this.subscriptions[channelId];\n }\n\n public attach(langCode?: string) {\n if(this.attached) return;\n\n // return;\n\n this.log('attach');\n\n this.attached = true;\n\n this.appStateManager.getState().then(({updates: state}) => {\n const newVersion = this.appStateManager.newVersion/* || '1.6.0' */;\n\n // rootScope.broadcast('state_synchronizing');\n if(!state || !state.pts || !state.date/* || !state.seq */) { // seq can be undefined because of updates.differenceTooLong\n this.log('will get new state');\n\n this.updatesState.syncLoading = new Promise((resolve) => {\n this.apiManager.invokeApi('updates.getState', {}, {noErrorBox: true}).then((stateResult) => {\n this.updatesState.seq = stateResult.seq;\n this.updatesState.pts = stateResult.pts;\n this.updatesState.date = stateResult.date;\n this.saveUpdatesState();\n // setTimeout(() => {\n this.updatesState.syncLoading = null;\n resolve();\n // rootScope.broadcast('state_synchronized');\n // }, 1000);\n\n // ! for testing\n // updatesState.seq = 1\n // updatesState.pts = stateResult.pts - 5000\n // updatesState.date = 1\n // getDifference()\n });\n });\n } else {\n // ! for testing\n /* state.seq = 1;\n state.pts = state.pts - 15;\n state.date = 1; */\n // state.pts -= 100;\n\n // state.date = 1628623682;\n // state.pts = 2007500;\n // state.seq = 503;\n\n Object.assign(this.updatesState, state);\n\n this.log('will get difference', Object.assign({}, state));\n\n this.getDifference(true)/* .finally(() => {\n if(this.updatesState.syncLoading) {\n rootScope.broadcast('state_synchronizing');\n }\n }) */;\n }\n\n this.apiManager.setUpdatesProcessor(this.processUpdateMessage);\n\n // this.updatesState.syncLoading.then(() => {\n this.setProxy();\n // });\n\n if(newVersion) {\n this.updatesState.syncLoading.then(async() => {\n const strs: Record = {\n en: 'was updated to version',\n ru: 'ะพะฑะฝะพะฒะปั‘ะฝ ะดะพ ะฒะตั€ัะธะธ'\n };\n\n const getChangelog = (lang: string) => {\n fetch(`changelogs/${lang}_${newVersion.split(' ')[0]}.md`)\n .then((res) => (res.status === 200 && res.ok && res.text()) || Promise.reject())\n .then((text) => {\n const langStr = strs[lang] || strs.en;\n const pre = `**Telegram Web${App.suffix} ${langStr} ${newVersion}**\\n\\n`;\n\n text = pre + text;\n\n const entities: MessageEntity[] = [];\n const message = parseMarkdown(text, entities);\n\n const update: Update.updateServiceNotification = {\n _: 'updateServiceNotification',\n entities,\n message,\n type: 'local',\n pFlags: {},\n inbox_date: tsNow(true),\n media: undefined\n };\n\n this.processLocalUpdate(update);\n });\n };\n\n const languages = filterUnique([langCode, 'en']);\n for(const language of languages) {\n try {\n await getChangelog(language);\n break;\n } catch(err) {\n\n }\n }\n });\n }\n });\n }\n}\n\ninterface ApiUpdatesManager extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n}>, AppManager {}\napplyMixins(ApiUpdatesManager, [EventListenerBase, AppManager]);\n\nexport {ApiUpdatesManager};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {UserProfilePhoto, ChatPhoto, InputFileLocation} from '../../layer';\nimport {DownloadOptions} from '../mtproto/apiFileManager';\nimport {AppManager} from './manager';\n\nexport type PeerPhotoSize = 'photo_small' | 'photo_big';\n\nexport class AppAvatarsManager extends AppManager {\n private savedAvatarURLs: {\n [peerId: PeerId]: {\n [size in PeerPhotoSize]?: string | Promise\n }\n } = {};\n\n protected after() {\n this.rootScope.addEventListener('avatar_update', ({peerId, threadId}) => {\n if(threadId) {\n return;\n }\n\n this.removeFromAvatarsCache(peerId);\n });\n }\n\n public isAvatarCached(peerId: PeerId, size?: PeerPhotoSize) {\n const saved = this.savedAvatarURLs[peerId];\n if(size === undefined) {\n return !!saved;\n }\n\n return !!(saved && saved[size] && !(saved[size] instanceof Promise));\n }\n\n public removeFromAvatarsCache(peerId: PeerId) {\n if(this.savedAvatarURLs[peerId]) {\n delete this.savedAvatarURLs[peerId];\n }\n }\n\n public loadAvatar(peerId: PeerId, photo: UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto, size: PeerPhotoSize) {\n const saved = this.savedAvatarURLs[peerId] ??= {};\n if(!saved[size]) {\n // console.warn('will invoke downloadSmallFile:', peerId);\n const peerPhotoFileLocation: InputFileLocation.inputPeerPhotoFileLocation = {\n _: 'inputPeerPhotoFileLocation',\n pFlags: {},\n peer: this.appPeersManager.getInputPeerById(peerId),\n photo_id: photo.photo_id\n };\n\n const downloadOptions: DownloadOptions = {dcId: photo.dc_id, location: peerPhotoFileLocation};\n if(size === 'photo_big') {\n peerPhotoFileLocation.pFlags.big = true;\n downloadOptions.limitPart = 512 * 1024;\n }\n\n /* let str: string;\n const time = Date.now();\n if(peerId === 0) {\n str = `download avatar ${peerId}`;\n } */\n\n const promise = this.apiFileManager.download(downloadOptions);\n return saved[size] = promise.then((blob) => {\n return saved[size] = URL.createObjectURL(blob);\n\n /* if(str) {\n console.log(str, Date.now() / 1000, Date.now() - time);\n } */\n });\n } else {\n return saved[size];\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getEnvironment} from '../../environment/utils';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {nextRandomUint} from '../../helpers/random';\nimport {InputPhoneCall, MessagesDhConfig, PhoneCall, PhoneCallDiscardReason, PhoneCallProtocol, PhonePhoneCall} from '../../layer';\nimport {AppManager} from './manager';\n\nexport type CallId = PhoneCall['id'];\n\nexport type MyPhoneCall = Exclude;\n\nexport class AppCallsManager extends AppManager {\n private calls: Map;\n\n protected after() {\n this.calls = new Map();\n\n if(!getEnvironment().IS_CALL_SUPPORTED) {\n return;\n }\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updatePhoneCall: (update) => {\n this.saveCall(update.phone_call);\n },\n\n updatePhoneCallSignalingData: (update) => {\n this.rootScope.dispatchEvent('call_signaling', {callId: update.phone_call_id, data: update.data});\n }\n });\n }\n\n public computeKey(g_b: Uint8Array, a: Uint8Array, p: Uint8Array) {\n return this.cryptoWorker.invokeCrypto('compute-dh-key', g_b, a, p);\n }\n\n public saveCall(call: PhoneCall) {\n const isDiscarded = call._ === 'phoneCallDiscarded';\n const oldCall = this.calls.get(call.id);\n if(oldCall) {\n // if(shouldUpdate) {\n safeReplaceObject(oldCall, call);\n // }\n\n if(isDiscarded) {\n this.calls.delete(call.id);\n }\n\n call = oldCall;\n } else if(!isDiscarded) {\n this.calls.set(call.id, call as any);\n }\n\n this.rootScope.dispatchEvent('call_update', call);\n\n return call;\n }\n\n public getCall(callId: CallId) {\n return this.calls.get(callId);\n }\n\n public getCallInput(id: CallId): InputPhoneCall {\n const call = this.getCall(id);\n return {\n _: 'inputPhoneCall',\n id: call.id,\n access_hash: call.access_hash\n };\n }\n\n public savePhonePhoneCall(phonePhoneCall: PhonePhoneCall) {\n this.appUsersManager.saveApiUsers(phonePhoneCall.users);\n return this.saveCall(phonePhoneCall.phone_call);\n }\n\n public generateDh() {\n return this.apiManager.invokeApi('messages.getDhConfig', {\n version: 0,\n random_length: 256\n }).then((dhConfig) => {\n return this.cryptoWorker.invokeCrypto('generate-dh', dhConfig as MessagesDhConfig.messagesDhConfig);\n });\n }\n\n // private verifyProtocolCompatibility(protocol: PhoneCallProtocol) {\n // const my = getCallProtocol();\n // const myVersion = my.library_versions[0];\n // return !protocol.library_versions.find((version) => {\n // return compareVersion(myVersion, version) > 0;\n // });\n // }\n\n public async requestCall(userId: UserId, protocol: PhoneCallProtocol, g_a_hash: Uint8Array, video?: boolean) {\n const phonePhoneCall = await this.apiManager.invokeApi('phone.requestCall', {\n user_id: this.appUsersManager.getUserInput(userId),\n protocol: protocol,\n video: video,\n random_id: nextRandomUint(32),\n g_a_hash: g_a_hash\n });\n\n return this.savePhonePhoneCall(phonePhoneCall);\n }\n\n public async discardCall(callId: CallId, duration: number, reason: PhoneCallDiscardReason['_'], video?: boolean) {\n if(!this.getCall(callId)) {\n return;\n }\n\n const updates = await this.apiManager.invokeApi('phone.discardCall', {\n video,\n peer: this.getCallInput(callId),\n duration,\n reason: {\n _: reason\n },\n connection_id: '0'\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport deepEqual from '../../helpers/object/deepEqual';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {ChannelParticipant, ChannelsCreateChannel, Chat, ChatAdminRights, ChatBannedRights, ChatInvite, ChatParticipant, ChatPhoto, ChatReactions, InputChannel, InputChatPhoto, InputFile, InputPeer, MessagesSponsoredMessages, SponsoredMessage, Update, Updates} from '../../layer';\nimport {isRestricted} from '../../helpers/restrictions';\nimport {AppManager} from './manager';\nimport hasRights from './utils/chats/hasRights';\nimport getParticipantPeerId from './utils/chats/getParticipantPeerId';\nimport {AppStoragesManager} from './appStoragesManager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport {randomLong} from '../../helpers/random';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport tsNow from '../../helpers/tsNow';\n\nexport type Channel = Chat.channel;\nexport type ChatRights = keyof ChatBannedRights['pFlags'] | keyof ChatAdminRights['pFlags'] | 'change_type' | 'change_permissions' | 'delete_chat' | 'view_participants';\n\nexport class AppChatsManager extends AppManager {\n private storage: AppStoragesManager['storages']['chats'];\n\n private chats: {[id: ChatId]: Exclude};\n // private usernames: any;\n // private channelAccess: any;\n // private megagroups: {[id: number]: true};\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateChannelParticipant: this.onUpdateChannelParticipant,\n\n updateChatDefaultBannedRights: this.onUpdateChatDefaultBannedRights\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('chats')\n ]).then(([state, {results: chats, storage}]) => {\n this.storage = storage;\n\n this.saveApiChats(chats);\n\n this.peersStorage.addEventListener('peerNeeded', (peerId) => {\n if(peerId.isUser() || this.storage.getFromCache(peerId.toChatId())) {\n return;\n }\n\n this.storage.set({\n [peerId.toChatId()]: this.getChat(peerId.toChatId())\n });\n });\n\n this.peersStorage.addEventListener('peerUnneeded', (peerId) => {\n if(peerId.isUser() || !this.storage.getFromCache(peerId.toChatId())) {\n return;\n }\n\n this.storage.delete(peerId.toChatId());\n });\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n for(const chatId in this.chats) {\n if(!chatId) continue;\n if(!this.peersStorage.isPeerNeeded(chatId.toPeerId(true))) {\n const chat = this.chats[chatId];\n this.appUsersManager.modifyUsernamesCache(chat, false);\n\n this.storage.delete(chatId);\n delete this.chats[chatId];\n }\n }\n } else {\n this.chats = {};\n }\n };\n\n public saveApiChats(apiChats: any[], override?: boolean) {\n if((apiChats as any).saved) return;\n (apiChats as any).saved = true;\n apiChats.forEach((chat) => this.saveApiChat(chat, override));\n }\n\n public saveApiChat(chat: Chat, override?: boolean) {\n if(!chat || chat._ === 'chatEmpty') return;\n /* if(chat._ !== 'chat' && chat._ !== 'channel') {\n return;\n } */\n\n // * exclude from state\n // defineNotNumerableProperties(chat, ['rTitle', 'initials']);\n\n const oldChat = this.chats[chat.id];\n\n /* if(oldChat && !override) {\n return;\n } */\n\n (chat as Chat.chat).pFlags ??= {};\n\n if((chat as Chat.channel).pFlags.min && oldChat !== undefined) {\n return;\n }\n\n if(chat._ === 'channel' &&\n chat.participants_count === undefined &&\n oldChat !== undefined &&\n (oldChat as Chat.channel).participants_count) {\n chat.participants_count = (oldChat as Chat.channel).participants_count;\n }\n\n if((chat as Chat.channel).photo?._ === 'chatPhotoEmpty') {\n delete (chat as Chat.channel).photo;\n }\n\n const changedUsername = this.appUsersManager.setUsernameToCache(chat, oldChat);\n\n /* if(chat.username) {\n let searchUsername = searchIndexManager.cleanUsername(chat.username);\n this.usernames[searchUsername] = chat.id;\n } */\n\n const peerId = chat.id.toPeerId(true);\n if(oldChat === undefined) {\n this.chats[chat.id] = chat;\n } else {\n const oldPhotoId = ((oldChat as Chat.chat).photo as ChatPhoto.chatPhoto)?.photo_id;\n const newPhotoId = ((chat as Chat.chat).photo as ChatPhoto.chatPhoto)?.photo_id;\n const toggledForum = (oldChat as Chat.channel).pFlags.forum !== (chat as Chat.channel).pFlags.forum;\n const changedPhoto = oldPhotoId !== newPhotoId || toggledForum;\n\n const changedTitle = oldChat.title !== chat.title || changedUsername;\n\n const changedAnyBadge = (oldChat as Chat.channel).pFlags.verified !== (chat as Chat.channel).pFlags.verified ||\n (oldChat as Chat.channel).pFlags.scam !== (chat as Chat.channel).pFlags.scam ||\n (oldChat as Chat.channel).pFlags.fake !== (chat as Chat.channel).pFlags.fake;\n\n safeReplaceObject(oldChat, chat);\n this.rootScope.dispatchEvent('chat_update', chat.id);\n\n if(changedPhoto) {\n this.rootScope.dispatchEvent('avatar_update', {peerId});\n }\n\n if(changedTitle || changedAnyBadge) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId});\n }\n\n if(toggledForum) {\n this.rootScope.dispatchEvent('chat_toggle_forum', {chatId: chat.id, enabled: !!(chat as Chat.channel).pFlags.forum});\n }\n }\n\n if(this.peersStorage.isPeerNeeded(peerId)) {\n this.storage.set({\n [chat.id]: chat\n });\n }\n }\n\n public getChat(id: ChatId) {\n return this.chats[id];\n }\n\n /**\n * Check the user's ability to do an action in chat\n * @param id\n * @param action creator can still send messages to left channel. so this function shows server rights. see canSendToPeer for local rights in messages manager.\n * @param rights do not provide this parameter when checking rights for self\n * @param isThread\n * @returns\n */\n public hasRights(id: ChatId, action: ChatRights, rights?: ChatAdminRights | ChatBannedRights, isThread?: boolean) {\n return hasRights(this.getChat(id), action, rights, isThread);\n }\n\n public editChatDefaultBannedRights(id: ChatId, banned_rights: ChatBannedRights) {\n const chat = this.getChat(id) as Chat.chat;\n if(chat.default_banned_rights) {\n if(chat.default_banned_rights.until_date === banned_rights.until_date && deepEqual(chat.default_banned_rights.pFlags, banned_rights.pFlags)) {\n return Promise.resolve();\n }\n }\n\n return this.apiManager.invokeApi('messages.editChatDefaultBannedRights', {\n peer: this.appPeersManager.getInputPeerById(id.toPeerId(true)),\n banned_rights\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n /* public resolveUsername(username: string) {\n return this.usernames[username] || 0;\n } */\n\n /* public saveChannelAccess(id: ChatId, accessHash: string) {\n this.channelAccess[id] = accessHash;\n } */\n\n /* public saveIsMegagroup(id: ChatId) {\n this.megagroups[id] = true;\n } */\n\n public isChannel(id: ChatId) {\n const chat = this.chats[id];\n return !!(chat && (chat._ === 'channel' || chat._ === 'channelForbidden')/* || this.channelAccess[id] */);\n }\n\n public isMegagroup(id: ChatId) {\n /* if(this.megagroups[id]) {\n return true;\n } */\n\n const chat: Chat = this.chats[id];\n return !!(chat as Chat.channel)?.pFlags?.megagroup;\n }\n\n public isForum(id: ChatId) {\n const chat = this.chats[id];\n return !!(chat as Chat.channel)?.pFlags?.forum;\n }\n\n public isBroadcast(id: ChatId) {\n return this.isChannel(id) && !this.isMegagroup(id);\n }\n\n public isInChat(id: ChatId) {\n let good = true;\n const chat: Chat = this.getChat(id);\n if(!chat ||\n chat._ === 'channelForbidden' ||\n chat._ === 'chatForbidden' ||\n (chat as any as Chat.chatEmpty)._ === 'chatEmpty' ||\n (chat as Chat.chat).pFlags.left ||\n // || (chat as any).pFlags.kicked\n (chat as Chat.chat).pFlags.deactivated) {\n good = false;\n }\n\n return good;\n }\n\n public getChannelInput(id: ChatId): InputChannel {\n const chat: Chat = this.getChat(id);\n if(!chat || !(chat as Chat.channel).access_hash) {\n return {\n _: 'inputChannelEmpty'\n };\n } else {\n return {\n _: 'inputChannel',\n channel_id: id,\n access_hash: (chat as Chat.channel).access_hash/* || this.channelAccess[id] */ || '0'\n };\n }\n }\n\n public getInputPeer(id: ChatId) {\n return this.isChannel(id) ? this.getChannelInputPeer(id) : this.getChatInputPeer(id);\n }\n\n public getChatInputPeer(id: ChatId): InputPeer.inputPeerChat {\n return {\n _: 'inputPeerChat',\n chat_id: id\n };\n }\n\n public getChannelInputPeer(id: ChatId): InputPeer.inputPeerChannel {\n return {\n _: 'inputPeerChannel',\n channel_id: id,\n access_hash: (this.getChat(id) as Chat.channel).access_hash/* || this.channelAccess[id] */ || 0\n };\n }\n\n public hasChat(id: ChatId, allowMin?: true) {\n const chat = this.chats[id];\n return isObject(chat) && (allowMin || !(chat as Chat.channel).pFlags.min);\n }\n\n public getChatString(id: ChatId) {\n const chat = this.getChat(id);\n if(this.isChannel(id)) {\n return (this.isMegagroup(id) ? 's' : 'c') + id + '_' + (chat as Chat.channel).access_hash;\n }\n return 'g' + id;\n }\n\n /* public wrapForFull(id: number, fullChat: any) {\n const chatFull = copy(fullChat);\n const chat = this.getChat(id);\n\n if(!chatFull.participants_count) {\n chatFull.participants_count = chat.participants_count;\n }\n\n if(chatFull.participants &&\n chatFull.participants._ === 'chatParticipants') {\n chatFull.participants.participants = this.wrapParticipants(id, chatFull.participants.participants);\n }\n\n if(chatFull.about) {\n chatFull.rAbout = wrapRichText(chatFull.about, {noLinebreaks: true});\n }\n\n //chatFull.peerString = this.getChatString(id);\n chatFull.chat = chat;\n\n return chatFull;\n }\n\n public wrapParticipants(id: number, participants: any[]) {\n const chat = this.getChat(id);\n const myId = appUsersManager.getSelf().id;\n if(this.isChannel(id)) {\n const isAdmin = chat.pFlags.creator;\n participants.forEach((participant) => {\n participant.canLeave = myId === participant.user_id;\n participant.canKick = isAdmin && participant._ === 'channelParticipant';\n\n // just for order by last seen\n participant.user = appUsersManager.getUser(participant.user_id);\n });\n } else {\n const isAdmin = chat.pFlags.creator || chat.pFlags.admins_enabled && chat.pFlags.admin;\n participants.forEach((participant) => {\n participant.canLeave = myId === participant.user_id;\n participant.canKick = !participant.canLeave && (\n chat.pFlags.creator ||\n participant._ === 'chatParticipant' && (isAdmin || myId === participant.inviter_id)\n );\n\n // just for order by last seen\n participant.user = appUsersManager.getUser(participant.user_id);\n });\n }\n\n return participants;\n } */\n\n public createChannel(options: ChannelsCreateChannel): Promise {\n return this.apiManager.invokeApi('channels.createChannel', options).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const channelId = (updates as any).chats[0].id;\n return channelId;\n });\n }\n\n public inviteToChannel(id: ChatId, userIds: UserId[]) {\n const input = this.getChannelInput(id);\n const usersInputs = userIds.map((u) => this.appUsersManager.getUserInput(u));\n\n return this.apiManager.invokeApi('channels.inviteToChannel', {\n channel: input,\n users: usersInputs\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public createChat(title: string, userIds: UserId[]): Promise {\n return this.apiManager.invokeApi('messages.createChat', {\n users: userIds.map((u) => this.appUsersManager.getUserInput(u)),\n title\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const chatId = (updates as any as Updates.updates).chats[0].id;\n return chatId;\n });\n }\n\n private onChatUpdated = (chatId: ChatId, updates?: Updates) => {\n // console.log('onChatUpdated', chatId, updates);\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n if((updates as Updates.updates)?.updates?.length && this.isChannel(chatId)) {\n this.rootScope.dispatchEvent('invalidate_participants', chatId);\n }\n };\n\n public leaveChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.leaveChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public joinChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.joinChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public addChatUser(id: ChatId, userId: UserId, fwdLimit = 100) {\n return this.apiManager.invokeApi('messages.addChatUser', {\n chat_id: id,\n user_id: this.appUsersManager.getUserInput(userId),\n fwd_limit: fwdLimit\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public deleteChatUser(id: ChatId, userId: UserId) {\n return this.apiManager.invokeApi('messages.deleteChatUser', {\n chat_id: id,\n user_id: this.appUsersManager.getUserInput(userId)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public leaveChat(id: ChatId) {\n return this.deleteChatUser(id, this.appUsersManager.getSelf().id);\n }\n\n public leave(id: ChatId) {\n return this.isChannel(id) ? this.leaveChannel(id) : this.leaveChat(id);\n }\n\n public delete(id: ChatId) {\n return this.isChannel(id) ? this.deleteChannel(id) : this.deleteChat(id);\n }\n\n public deleteChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.deleteChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public deleteChat(id: ChatId) {\n // return this.leaveChat(id).then(() => {\n return this.apiManager.invokeApi('messages.deleteChat', {\n chat_id: id\n });\n // });\n }\n\n public migrateChat(id: ChatId): Promise {\n const chat: Chat = this.getChat(id);\n if(chat._ === 'channel') return Promise.resolve(chat.id);\n return this.apiManager.invokeApi('messages.migrateChat', {\n chat_id: id\n }).then((updates) => {\n this.onChatUpdated(id, updates);\n const update: Update.updateChannel = (updates as Updates.updates).updates.find((u) => u._ === 'updateChannel') as any;\n return update.channel_id;\n });\n }\n\n public updateUsername(id: ChatId, username: string, doNotRefresh?: boolean) {\n const promise = this.apiManager.invokeApi('channels.updateUsername', {\n channel: this.getChannelInput(id),\n username\n });\n\n return this.refreshChatAfterRequest(id, promise, doNotRefresh);\n }\n\n public editPhoto(id: ChatId, inputFile: InputFile) {\n const inputChatPhoto: InputChatPhoto = {\n _: 'inputChatUploadedPhoto',\n file: inputFile\n };\n\n let promise: any;\n if(this.isChannel(id)) {\n promise = this.apiManager.invokeApi('channels.editPhoto', {\n channel: this.getChannelInput(id),\n photo: inputChatPhoto\n });\n } else {\n promise = this.apiManager.invokeApi('messages.editChatPhoto', {\n chat_id: id,\n photo: inputChatPhoto\n });\n }\n\n return promise.then(this.onChatUpdated.bind(this, id));\n }\n\n public editTitle(id: ChatId, title: string) {\n let promise: any;\n\n if(this.isChannel(id)) {\n promise = this.apiManager.invokeApi('channels.editTitle', {\n channel: this.getChannelInput(id),\n title\n });\n } else {\n promise = this.apiManager.invokeApi('messages.editChatTitle', {\n chat_id: id,\n title\n });\n }\n\n return promise.then(this.onChatUpdated.bind(this, id));\n }\n\n public editAbout(id: ChatId, about: string) {\n const peerId = id.toPeerId(true);\n return this.apiManager.invokeApi('messages.editChatAbout', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n about\n }).then((bool) => {\n if(bool) {\n this.rootScope.dispatchEvent('peer_bio_edit', peerId);\n }\n\n return bool;\n });\n }\n\n public async editBanned(id: ChatId, participant: PeerId | ChannelParticipant | ChatParticipant, banned_rights: ChatBannedRights) {\n const peerId = typeof(participant) !== 'object' ? participant : getParticipantPeerId(participant);\n const wasChannel = this.isChannel(id);\n if(!wasChannel) {\n const channelId = await this.migrateChat(id);\n id = channelId;\n }\n\n return this.apiManager.invokeApi('channels.editBanned', {\n channel: this.getChannelInput(id),\n participant: this.appPeersManager.getInputPeerById(peerId),\n banned_rights\n }).then((updates) => {\n this.onChatUpdated(id, updates);\n\n if(typeof(participant) === 'object') {\n const timestamp = tsNow(true);\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannelParticipant',\n channel_id: id,\n date: timestamp,\n actor_id: undefined,\n qts: undefined,\n user_id: peerId,\n prev_participant: wasChannel ? participant as ChannelParticipant : undefined,\n new_participant: Object.keys(banned_rights.pFlags).length ? {\n _: 'channelParticipantBanned',\n date: timestamp,\n banned_rights,\n kicked_by: this.appUsersManager.getSelf().id,\n peer: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {}\n } : undefined\n });\n }\n });\n }\n\n public clearChannelParticipantBannedRights(id: ChatId, participant: PeerId | ChannelParticipant) {\n return this.editBanned(id, participant, {\n _: 'chatBannedRights',\n until_date: 0,\n pFlags: {}\n });\n }\n\n public kickFromChannel(id: ChatId, participant: PeerId | ChannelParticipant) {\n return this.editBanned(id, participant, {\n _: 'chatBannedRights',\n until_date: 0,\n pFlags: {\n view_messages: true\n }\n });\n }\n\n public kickFromChat(id: ChatId, participant: PeerId | ChannelParticipant | ChatParticipant) {\n if(this.isChannel(id)) return this.kickFromChannel(id, participant as ChannelParticipant);\n else return this.deleteChatUser(id, isObject(participant) ? getParticipantPeerId(participant) : (participant as PeerId).toUserId());\n }\n\n public resolveChannel(id: ChatId) {\n return this.apiManager.invokeApiSingle('channels.getChannels', {\n id: [{\n _: 'inputChannel',\n channel_id: id,\n access_hash: '0'\n }]\n }).then((messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n });\n }\n\n public togglePreHistoryHidden(id: ChatId, enabled: boolean) {\n return this.migrateChat(id).then((channelId) => {\n return this.apiManager.invokeApi('channels.togglePreHistoryHidden', {\n channel: this.getChannelInput(channelId),\n enabled\n }).then(this.onChatUpdated.bind(this, channelId));\n });\n }\n\n public toggleSignatures(id: ChatId, enabled: boolean) {\n return this.apiManager.invokeApi('channels.toggleSignatures', {\n channel: this.getChannelInput(id),\n enabled\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public toggleNoForwards(id: ChatId, enabled: boolean) {\n return this.apiManager.invokeApi('messages.toggleNoForwards', {\n peer: this.getInputPeer(id),\n enabled\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public setChatAvailableReactions(id: ChatId, reactions: ChatReactions) {\n const chatFull = this.appProfileManager.getCachedFullChat(id);\n if(chatFull) {\n chatFull.available_reactions = reactions;\n this.rootScope.dispatchEvent('chat_full_update', id);\n }\n\n return this.apiManager.invokeApi('messages.setChatAvailableReactions', {\n peer: this.getInputPeer(id),\n available_reactions: reactions\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public getSendAs(channelId: ChatId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'channels.getSendAs',\n params: {\n peer: this.getChannelInputPeer(channelId)\n },\n processResult: (sendAsPeers) => {\n this.appUsersManager.saveApiUsers(sendAsPeers.users);\n this.saveApiChats(sendAsPeers.chats);\n\n return sendAsPeers.peers;\n }\n });\n }\n\n public importChatInvite(hash: string) {\n return this.apiManager.invokeApi('messages.importChatInvite', {hash})\n .then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n const chat = (updates as Updates.updates).chats[0];\n return chat.id;\n });\n }\n\n public checkUsername(chatId: ChatId, username: string) {\n return this.apiManager.invokeApi('channels.checkUsername', {\n channel: this.getChannelInput(chatId),\n username\n });\n }\n\n public getSponsoredMessage(chatId: ChatId) {\n // const s: MessagesSponsoredMessages.messagesSponsoredMessages = {\n // '_': 'messages.sponsoredMessages',\n // 'messages': [\n // {\n // '_': 'sponsoredMessage',\n // 'pFlags': {},\n // 'flags': 9,\n // 'random_id': new Uint8Array([\n // 80,\n // 5,\n // 249,\n // 174,\n // 44,\n // 73,\n // 173,\n // 14,\n // 246,\n // 81,\n // 187,\n // 182,\n // 223,\n // 5,\n // 4,\n // 128\n // ]),\n // 'from_id': {\n // '_': 'peerUser',\n // 'user_id': 983000232\n // },\n // 'start_param': 'GreatMinds',\n // 'message': 'This is a long sponsored message. In fact, it has the maximum length allowed on the platform โ€“ย 160 characters ๐Ÿ˜ฌ๐Ÿ˜ฌ. It\\'s promoting a bot with a start parameter.' + chatId\n // }\n // ],\n // 'chats': [],\n // 'users': [\n // {\n // '_': 'user',\n // 'pFlags': {\n // 'bot': true,\n // 'verified': true,\n // 'apply_min_photo': true\n // },\n // 'flags': 34226219,\n // 'id': 983000232,\n // 'access_hash': '-294959558742535650',\n // 'first_name': 'Quiz Bot',\n // 'username': 'QuizBot',\n // 'photo': {\n // '_': 'userProfilePhoto',\n // 'pFlags': {},\n // 'flags': 2,\n // 'photo_id': '4221953848856651689',\n // 'stripped_thumb': new Uint8Array([\n // 1,\n // 8,\n // 8,\n // 155,\n // 247,\n // 95,\n // 103,\n // 255,\n // 0,\n // 110,\n // 138,\n // 40,\n // 174,\n // 132,\n // 142,\n // 6,\n // 238,\n // 127\n // ]),\n // 'dc_id': 2\n // },\n // 'bot_info_version': 11,\n // 'bot_inline_placeholder': 'Search a quiz...',\n // 'sortName': 'quiz bot'\n // }\n // ]\n // };\n\n // const promise = Promise.resolve(s);\n const promise = this.apiManager.invokeApiCacheable('channels.getSponsoredMessages', {\n channel: this.getChannelInput(chatId)\n }, {cacheSeconds: 300});\n\n return promise.then((sponsoredMessages) => {\n if(sponsoredMessages._ === 'messages.sponsoredMessages') {\n this.appUsersManager.saveApiUsers(sponsoredMessages.users);\n this.appChatsManager.saveApiChats(sponsoredMessages.chats);\n\n const sponsoredMessage = sponsoredMessages.messages.shift();\n sponsoredMessages.messages.push(sponsoredMessage);\n }\n\n return sponsoredMessages;\n });\n }\n\n public viewSponsoredMessage(chatId: ChatId, randomId: SponsoredMessage['random_id']) {\n return this.apiManager.invokeApiSingle('channels.viewSponsoredMessage', {\n channel: this.getChannelInput(chatId),\n random_id: randomId\n });\n }\n\n public checkChatInvite(hash: string) {\n return this.apiManager.invokeApi('messages.checkChatInvite', {\n hash: hash\n }).then((chatInvite) => {\n if((chatInvite as ChatInvite.chatInvitePeek).chat) {\n this.saveApiChat((chatInvite as ChatInvite.chatInvitePeek).chat, true);\n }\n\n return chatInvite;\n });\n }\n\n public toggleUsername(chatId: ChatId, username: string, active: boolean) {\n const promise = this.apiManager.invokeApi('channels.toggleUsername', {\n channel: this.getChannelInput(chatId),\n username,\n active\n });\n\n return this.refreshChatAfterRequest(chatId, promise);\n }\n\n public reorderUsernames(chatId: ChatId, order: string[]) {\n const promise = this.apiManager.invokeApi('channels.reorderUsernames', {\n channel: this.getChannelInput(chatId),\n order\n });\n\n return this.refreshChatAfterRequest(chatId, promise);\n }\n\n public deactivateAllUsernames(chatId: ChatId, doNotRefresh?: boolean) {\n const promise = this.apiManager.invokeApi('channels.deactivateAllUsernames', {\n channel: this.getChannelInput(chatId)\n });\n\n return this.refreshChatAfterRequest(chatId, promise, doNotRefresh);\n }\n\n public makeChannelPrivate(chatId: ChatId) {\n const promises: Promise[] = [\n this.updateUsername(chatId, '', true),\n this.deactivateAllUsernames(chatId, true)\n ];\n\n const promise = Promise.all(promises).then(() => true);\n return this.refreshChatAfterRequest(chatId, promise);\n }\n\n public refreshChatAfterRequest>(chatId: ChatId, promise: T, doNotRefresh?: boolean): T {\n if(doNotRefresh) {\n return promise;\n }\n\n return promise.then((value) => {\n return this.getChannels([chatId]).then(() => value);\n }) as T;\n }\n\n public getChannels(chatIds: ChatId[]) {\n return this.apiManager.invokeApi('channels.getChannels', {\n id: chatIds.map((chatId) => this.getChannelInput(chatId))\n }).then((messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n });\n }\n\n public toggleForum(chatId: ChatId, enabled: boolean) {\n return this.migrateChat(chatId).then((channelId) => {\n return this.apiManager.invokeApi('channels.toggleForum', {\n channel: this.getChannelInput(channelId),\n enabled\n }).then(this.onChatUpdated.bind(this, channelId));\n });\n }\n\n public editForumTopic(options: {\n chatId: ChatId,\n topicId: number,\n title?: string,\n iconEmojiId?: DocId,\n closed?: boolean,\n hidden?: boolean\n }) {\n const {chatId, topicId, title, iconEmojiId, closed, hidden} = options;\n return this.apiManager.invokeApi('channels.editForumTopic', {\n channel: this.getChannelInput(chatId),\n topic_id: getServerMessageId(topicId),\n title,\n icon_emoji_id: iconEmojiId,\n closed,\n hidden\n }).then(this.onChatUpdated.bind(this, chatId));\n }\n\n public async createForumTopic(options: {\n chatId: ChatId,\n title: string,\n iconColor: number,\n iconEmojiId: DocId\n }) {\n const {chatId, title, iconColor, iconEmojiId} = options;\n\n const channelFull = await this.appProfileManager.getChannelFull(chatId);\n const sendAsInputPeer = channelFull.default_send_as && this.appPeersManager.getInputPeerById(this.appPeersManager.getPeerId(channelFull.default_send_as));\n\n return this.apiManager.invokeApi('channels.createForumTopic', {\n channel: this.getChannelInput(chatId),\n title,\n icon_color: iconColor,\n icon_emoji_id: iconEmojiId,\n random_id: randomLong(),\n send_as: sendAsInputPeer\n }).then((updates) => {\n this.onChatUpdated(chatId, updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateNewChannelMessage') as Update.updateNewChannelMessage;\n return generateMessageId(update.message.id);\n });\n }\n\n public updatePinnedForumTopic(chatId: ChatId, topicId: number, pinned: boolean) {\n return this.apiManager.invokeApi('channels.updatePinnedForumTopic', {\n channel: this.getChannelInput(chatId),\n topic_id: getServerMessageId(topicId),\n pinned\n }).then(this.onChatUpdated.bind(this, chatId));\n }\n\n private onUpdateChannelParticipant = (update: Update.updateChannelParticipant) => {\n this.apiManager.clearCache('channels.getParticipants', (params) => {\n return (params.channel as InputChannel.inputChannel).channel_id === update.channel_id;\n });\n\n this.rootScope.dispatchEvent('chat_participant', update);\n };\n\n private onUpdateChatDefaultBannedRights = (update: Update.updateChatDefaultBannedRights) => {\n const chatId = this.appPeersManager.getPeerId(update.peer).toChatId();\n const chat = this.chats[chatId] as Chat.chat;\n if(chat) {\n chat.default_banned_rights = update.default_banned_rights;\n this.rootScope.dispatchEvent('chat_update', chatId);\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type lang from '../lang';\nimport type langSign from '../langSign';\nimport type {State} from '../config/state';\nimport DEBUG, {MOUNT_CLASS_TO} from '../config/debug';\nimport {HelpCountriesList, HelpCountry, LangPackDifference, LangPackString} from '../layer';\nimport stateStorage from './stateStorage';\nimport App from '../config/app';\nimport rootScope from './rootScope';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport deepEqual from '../helpers/object/deepEqual';\nimport safeAssign from '../helpers/object/safeAssign';\nimport capitalizeFirstLetter from '../helpers/string/capitalizeFirstLetter';\nimport matchUrlProtocol from './richTextProcessor/matchUrlProtocol';\nimport wrapUrl from './richTextProcessor/wrapUrl';\nimport {setDirection} from '../helpers/dom/setInnerHTML';\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n 'messageActionChatCreate': 'ActionCreateGroup',\n 'messageActionChatCreateYou': 'ActionYouCreateGroup',\n 'messageActionChatEditTitle': 'ActionChangedTitle',\n 'messageActionChatEditPhoto': 'ActionChangedPhoto',\n 'messageActionChatEditVideo': 'ActionChangedVideo',\n 'messageActionChatDeletePhoto': 'ActionRemovedPhoto',\n 'messageActionChatReturn': 'ActionAddUserSelf',\n 'messageActionChatReturnYou': 'ActionAddUserSelfYou',\n 'messageActionChatJoined': 'ActionAddUserSelfMega',\n 'messageActionChatJoinedYou': 'ChannelMegaJoined',\n 'messageActionChatAddUser': 'ActionAddUser',\n 'messageActionChatAddUsers': 'ActionAddUser',\n 'messageActionChatLeave': 'ActionLeftUser',\n 'messageActionChatLeaveYou': 'YouLeft',\n 'messageActionChatDeleteUser': 'ActionKickUser',\n 'messageActionChatJoinedByLink': 'ActionInviteUser',\n 'messageActionPinMessage': 'Chat.Service.Group.UpdatedPinnedMessage',\n 'messageActionContactSignUp': 'Chat.Service.PeerJoinedTelegram',\n 'messageActionChannelCreate': 'ActionCreateChannel',\n 'messageActionChannelEditTitle': 'Chat.Service.Channel.UpdatedTitle',\n 'messageActionChannelEditPhoto': 'Chat.Service.Channel.UpdatedPhoto',\n 'messageActionChannelEditVideo': 'Chat.Service.Channel.UpdatedVideo',\n 'messageActionChannelDeletePhoto': 'Chat.Service.Channel.RemovedPhoto',\n 'messageActionHistoryClear': 'HistoryCleared',\n 'messageActionDiscussionStarted': 'DiscussionStarted',\n\n 'messageActionChannelMigrateFrom': 'ActionMigrateFromGroup',\n\n 'messageActionPhoneCall.video_in_ok': 'ChatList.Service.VideoCall.incoming',\n 'messageActionPhoneCall.video_out_ok': 'ChatList.Service.VideoCall.outgoing',\n 'messageActionPhoneCall.video_missed': 'ChatList.Service.VideoCall.Missed',\n 'messageActionPhoneCall.video_cancelled': 'ChatList.Service.VideoCall.Cancelled',\n 'messageActionPhoneCall.in_ok': 'ChatList.Service.Call.incoming',\n 'messageActionPhoneCall.out_ok': 'ChatList.Service.Call.outgoing',\n 'messageActionPhoneCall.missed': 'ChatList.Service.Call.Missed',\n 'messageActionPhoneCall.cancelled': 'ChatList.Service.Call.Cancelled',\n\n 'messageActionGroupCall.started': 'Chat.Service.VoiceChatStarted.Channel',\n 'messageActionGroupCall.started_by': 'Chat.Service.VoiceChatStarted',\n 'messageActionGroupCall.started_byYou': 'Chat.Service.VoiceChatStartedYou',\n 'messageActionGroupCall.ended': 'Chat.Service.VoiceChatFinished.Channel',\n 'messageActionGroupCall.ended_by': 'Chat.Service.VoiceChatFinished',\n 'messageActionGroupCall.ended_byYou': 'Chat.Service.VoiceChatFinishedYou',\n\n 'messageActionBotAllowed': 'Chat.Service.BotPermissionAllowed'\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nexport type FormatterArgument = string | number | Node | FormatterArgument[];\nexport type FormatterArguments = FormatterArgument[];\n\nexport const UNSUPPORTED_LANG_PACK_KEY: LangPackKey = IS_MOBILE ? 'Message.Unsupported.Mobile' : 'Message.Unsupported.Desktop';\n\nnamespace I18n {\n export const strings: Map = new Map();\n export const countriesList: HelpCountry[] = [];\n let pluralRules: Intl.PluralRules;\n\n let cacheLangPackPromise: Promise;\n export let lastRequestedLangCode: string;\n export let lastRequestedNormalizedLangCode: string;\n export let lastAppliedLangCode: string;\n export let requestedServerLanguage = false;\n export let timeFormat: State['settings']['timeFormat'];\n export let isRTL = false;\n\n export function setRTL(rtl: boolean) {\n isRTL = rtl;\n }\n\n function setLangCode(langCode: string) {\n lastRequestedLangCode = langCode;\n lastRequestedNormalizedLangCode = langCode.split('-')[0];\n }\n\n export function getCacheLangPack(): Promise {\n if(cacheLangPackPromise) return cacheLangPackPromise;\n return cacheLangPackPromise = Promise.all([\n stateStorage.get('langPack') as Promise,\n polyfillPromise\n ]).then(([langPack]) => {\n if(!langPack/* || true */) {\n return loadLocalLangPack();\n } else if(DEBUG && false) {\n return getLangPack(langPack.lang_code);\n }/* else if(langPack.appVersion !== App.langPackVersion) {\n return getLangPack(langPack.lang_code);\n } */\n\n if(!lastRequestedLangCode) {\n setLangCode(langPack.lang_code);\n }\n\n applyLangPack(langPack);\n return langPack;\n }).finally(() => {\n cacheLangPackPromise = undefined;\n });\n }\n\n function updateAmPm() {\n if(timeFormat === 'h12') {\n try {\n const dateTimeFormat = getDateTimeFormat({hour: 'numeric', minute: 'numeric', hour12: true});\n const date = new Date();\n date.setHours(0);\n const amText = dateTimeFormat.format(date);\n amPmCache.am = amText.split(/\\s/)[1];\n date.setHours(12);\n const pmText = dateTimeFormat.format(date);\n amPmCache.pm = pmText.split(/\\s/)[1];\n } catch(err) {\n console.error('cannot get am/pm', err);\n amPmCache = {am: 'AM', pm: 'PM'};\n }\n }\n }\n\n export function setTimeFormat(\n format: State['settings']['timeFormat'],\n haveToUpdate = !!timeFormat && timeFormat !== format\n ) {\n timeFormat = format;\n\n updateAmPm();\n\n if(haveToUpdate) {\n cachedDateTimeFormats.clear();\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance instanceof IntlDateElement) {\n instance.update();\n }\n });\n }\n }\n\n export function loadLocalLangPack() {\n const defaultCode = App.langPackCode;\n setLangCode(defaultCode);\n return Promise.all([\n import('../lang'),\n import('../langSign'),\n import('../countries')\n ]).then(([lang, langSign, countries]) => {\n const strings: LangPackString[] = [];\n formatLocalStrings(lang.default, strings);\n formatLocalStrings(langSign.default, strings);\n\n const langPack: LangPackDifference = {\n _: 'langPackDifference',\n from_version: 0,\n lang_code: defaultCode,\n strings,\n version: 0,\n local: true,\n countries: countries.default\n };\n return saveLangPack(langPack);\n });\n }\n\n export function loadLangPack(langCode: string, web?: boolean) {\n web = true;\n requestedServerLanguage = true;\n const managers = rootScope.managers;\n return Promise.all([\n managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: web ? 'web' : App.langPack\n }),\n !web && managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: 'android'\n }),\n import('../lang'),\n import('../langSign'),\n managers.apiManager.invokeApiCacheable('help.getCountriesList', {\n lang_code: langCode,\n hash: 0\n }) as Promise,\n polyfillPromise\n ]);\n }\n\n export function getStrings(langCode: string, strings: string[]) {\n return rootScope.managers.apiManager.invokeApi('langpack.getStrings', {\n lang_pack: App.langPack,\n lang_code: langCode,\n keys: strings\n });\n }\n\n export function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n for(const i in strings) {\n // @ts-ignore\n const v = strings[i];\n if(typeof(v) === 'string') {\n pushTo.push({\n _: 'langPackString',\n key: i,\n value: v\n });\n } else {\n pushTo.push({\n _: 'langPackStringPluralized',\n key: i,\n ...v\n });\n }\n }\n\n return pushTo;\n }\n\n export function getLangPack(langCode: string, web?: boolean) {\n setLangCode(langCode);\n return loadLangPack(langCode, web).then(([langPack1, langPack2, localLangPack1, localLangPack2, countries, _]) => {\n let strings: LangPackString[] = [];\n\n [localLangPack1, localLangPack2].forEach((l) => {\n formatLocalStrings(l.default as any, strings);\n });\n\n strings = strings.concat(...[langPack1.strings, langPack2.strings].filter(Boolean));\n\n langPack1.strings = strings;\n langPack1.countries = countries;\n return saveLangPack(langPack1);\n });\n }\n\n export function saveLangPack(langPack: LangPackDifference) {\n langPack.appVersion = App.langPackVersion;\n\n return stateStorage.set({langPack}).then(() => {\n applyLangPack(langPack);\n return langPack;\n });\n }\n\n export const polyfillPromise = (function checkIfPolyfillNeeded() {\n if(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n return Promise.resolve();\n } else {\n return import('./pluralPolyfill').then((_Intl) => {\n (window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n });\n }\n })();\n\n export function applyLangPack(langPack: LangPackDifference) {\n const currentLangCode = lastRequestedLangCode;\n if(langPack.lang_code !== currentLangCode) {\n return;\n }\n\n try {\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode.split('-', 1)[0]);\n }\n\n try {\n pluralRules = new Intl.PluralRules(langPack.lang_code);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(langPack.lang_code.split('-', 1)[0]);\n }\n\n strings.clear();\n\n for(const string of langPack.strings) {\n strings.set(string.key as LangPackKey, string);\n }\n\n if(langPack.countries) {\n countriesList.length = 0;\n countriesList.push(...langPack.countries.countries);\n\n langPack.countries.countries.forEach((country) => {\n if(country.name) {\n const langPackKey: any = country.default_name;\n strings.set(langPackKey, {\n _: 'langPackString',\n key: langPackKey,\n value: country.name\n });\n }\n });\n }\n\n if(lastAppliedLangCode !== currentLangCode) {\n rootScope.dispatchEvent('language_change', currentLangCode);\n lastAppliedLangCode = currentLangCode;\n cachedDateTimeFormats.clear();\n updateAmPm();\n }\n\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance) {\n instance.update();\n }\n });\n }\n\n function pushNextArgument(out: ReturnType, args: FormatterArguments, indexHolder: {i: number}) {\n const arg = args[indexHolder.i++];\n if(Array.isArray(arg)) {\n out.push(...arg as any);\n } else {\n out.push(arg);\n }\n }\n\n export function superFormatter(input: string, args?: FormatterArguments, indexHolder = {i: 0}): Exclude[] {\n const out: ReturnType = [];\n const regExp = /(\\*\\*|__)(.+?)\\1|(\\n)|(\\[.+?\\]\\(.*?\\))|un\\d|%\\d\\$.|%./g;\n\n let lastIndex = 0;\n input.replace(regExp, (match, p1: any, p2: any, p3: any, p4: string, offset: number, string: string) => {\n // console.table({match, p1, p2, offset, string});\n\n out.push(string.slice(lastIndex, offset));\n\n if(p1) {\n // offset += p1.length;\n let element: HTMLElement;\n switch(p1) {\n case '**': {\n element = document.createElement('b');\n break;\n }\n\n case '__': {\n element = document.createElement('i');\n break;\n }\n }\n\n element.append(...superFormatter(p2, args, indexHolder) as any);\n out.push(element);\n } else if(p3) {\n out.push(document.createElement('br'));\n } else if(p4) {\n const idx = p4.lastIndexOf(']');\n const text = p4.slice(1, idx);\n\n const url = p4.slice(idx + 2, p4.length - 1);\n let a: HTMLAnchorElement;\n if(url && matchUrlProtocol(url)) {\n a = document.createElement('a');\n const wrappedUrl = wrapUrl(url);\n a.href = wrappedUrl.url;\n if(wrappedUrl.onclick) a.setAttribute('onclick', wrappedUrl.onclick);\n a.target = '_blank';\n } else {\n a = args[indexHolder.i++] as HTMLAnchorElement;\n\n if(a instanceof DocumentFragment) { // right after wrapRichText\n a = a.firstChild as any;\n }\n\n a.textContent = ''; // reset content\n }\n\n a.append(...superFormatter(text, args, indexHolder) as any);\n\n out.push(a);\n } else if(args) {\n pushNextArgument(out, args, indexHolder);\n }\n\n lastIndex = offset + match.length;\n return '';\n });\n\n if(lastIndex !== input.length) {\n out.push(input.slice(lastIndex));\n }\n\n return out;\n }\n\n export function format(key: LangPackKey, plain: true, args?: FormatterArguments): string;\n export function format(key: LangPackKey, plain?: false, args?: FormatterArguments): ReturnType;\n export function format(key: LangPackKey, plain = false, args?: FormatterArguments): ReturnType | string {\n const str = strings.get(key);\n let input: string;\n if(str) {\n if(str._ === 'langPackStringPluralized' && args?.length) {\n let v = args[0] as number | string;\n if(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n const s = pluralRules.select(v);\n // @ts-ignore\n input = str[s + '_value'] || str['other_value'];\n } else if(str._ === 'langPackString') {\n input = str.value;\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n\n const result = superFormatter(input, args);\n if(plain) { // * let's try a hack now... (don't want to replace []() entity)\n return result.map((item) => item instanceof Node ? item.textContent : item).join('');\n } else {\n return result;\n }\n\n /* if(plain) {\n if(args?.length) {\n const regExp = /un\\d|%\\d\\$.|%./g;\n let i = 0;\n input = input.replace(regExp, (match, offset, string) => {\n return '' + args[i++];\n });\n }\n\n return input;\n } else {\n return superFormatter(input, args);\n } */\n }\n\n export const weakMap: WeakMap> = new WeakMap();\n\n export type IntlElementBaseOptions = {\n element?: HTMLElement,\n property?: 'innerText' | 'innerHTML' | 'placeholder' | 'textContent',\n };\n\n abstract class IntlElementBase {\n public element: IntlElementBaseOptions['element'];\n public property: IntlElementBaseOptions['property'];\n\n constructor(options?: Options) {\n this.element = options?.element || document.createElement('span');\n this.element.classList.add('i18n');\n\n this.property = options?.property;\n if(options && ((options as any as IntlElementOptions).key || (options as any as IntlDateElementOptions).date)) {\n this.update(options);\n }\n\n weakMap.set(this.element, this);\n }\n\n abstract update(options?: Options): void;\n }\n\n export type IntlElementOptions = IntlElementBaseOptions & {\n key?: LangPackKey,\n args?: FormatterArguments\n };\n export class IntlElement extends IntlElementBase {\n public key: IntlElementOptions['key'];\n public args: IntlElementOptions['args'];\n\n constructor(options: IntlElementOptions = {}) {\n super({...options, property: options.property ?? 'innerHTML'});\n }\n\n public update(options?: IntlElementOptions) {\n safeAssign(this, options);\n\n if(this.property === 'innerHTML') {\n this.element.textContent = '';\n this.element.append(...format(this.key, false, this.args) as any);\n } else {\n // @ts-ignore\n const v = this.element[this.property];\n const formatted = format(this.key, true, this.args);\n\n // * hasOwnProperty won't work here\n if(v === undefined) this.element.dataset[this.property] = formatted;\n else (this.element as HTMLInputElement)[this.property] = formatted;\n }\n }\n\n public compareAndUpdate(options?: IntlElementOptions) {\n if(this.key === options.key && deepEqual(this.args, options.args)) {\n return;\n }\n\n return this.update(options);\n }\n }\n\n const cachedDateTimeFormats: Map = new Map();\n function getDateTimeFormat(options: Intl.DateTimeFormatOptions = {}) {\n const json = JSON.stringify(options);\n let dateTimeFormat = cachedDateTimeFormats.get(json);\n if(!dateTimeFormat) {\n dateTimeFormat = new Intl.DateTimeFormat(lastRequestedNormalizedLangCode + '-u-hc-' + timeFormat, options);\n cachedDateTimeFormats.set(json, dateTimeFormat);\n }\n\n return dateTimeFormat;\n }\n\n export let amPmCache = {am: 'AM', pm: 'PM'};\n export type IntlDateElementOptions = IntlElementBaseOptions & {\n date?: Date,\n options: Intl.DateTimeFormatOptions\n };\n export class IntlDateElement extends IntlElementBase {\n public date: IntlDateElementOptions['date'];\n public options: IntlDateElementOptions['options'];\n\n constructor(options: IntlDateElementOptions) {\n super({...options, property: options.property ?? 'textContent'});\n setDirection(this.element);\n }\n\n public update(options?: IntlDateElementOptions) {\n safeAssign(this, options);\n\n let text: string;\n if(this.options.hour && this.options.minute && Object.keys(this.options).length === 2/* && false */) {\n const hours = this.date.getHours();\n text = ('0' + (timeFormat === 'h12' ? (hours % 12) || 12 : hours)).slice(-2) + ':' + ('0' + this.date.getMinutes()).slice(-2);\n // if(this.options.second) {\n // text += ':' + ('0' + this.date.getSeconds()).slice(-2);\n // }\n\n if(timeFormat === 'h12') {\n text += ' ' + (hours < 12 ? amPmCache.am : amPmCache.pm);\n }\n } else {\n // * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n const dateTimeFormat = getDateTimeFormat(this.options);\n text = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n }\n\n (this.element as any)[this.property] = text;\n }\n }\n\n export function i18n(key: LangPackKey, args?: FormatterArguments) {\n return new IntlElement({key, args}).element;\n }\n\n export function i18n_(options: IntlElementOptions) {\n return new IntlElement(options).element;\n }\n\n export function _i18n(element: HTMLElement, key: LangPackKey, args?: FormatterArguments, property?: IntlElementOptions['property']) {\n return new IntlElement({element, key, args, property}).element;\n }\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function joinElementsWith(elements: (Node | string)[], joiner: typeof elements[0] | ((isLast: boolean) => typeof elements[0])) {\n const arr = elements.slice(0, 1);\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n arr.push(typeof(joiner) === 'function' ? joiner(isLast) : joiner);\n arr.push(elements[i]);\n }\n\n return arr;\n}\n\n\nexport function join(elements: (Node | string)[], useLast: boolean, plain: true): string;\nexport function join(elements: (Node | string)[], useLast?: boolean, plain?: false): (string | Node)[];\nexport function join(elements: (Node | string)[], useLast: boolean, plain: boolean): string | (string | Node)[];\nexport function join(elements: (Node | string)[], useLast = true, plain?: boolean): string | (string | Node)[] {\n const joined = joinElementsWith(elements, (isLast) => {\n const langPackKey: LangPackKey = isLast && useLast ? 'AutoDownloadSettings.LastDelimeter' : 'AutoDownloadSettings.Delimeter';\n return plain ? I18n.format(langPackKey, true) : i18n(langPackKey);\n });\n\n return plain ? joined.join('') : joined;\n}\n\nMOUNT_CLASS_TO.I18n = I18n;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type addAnchorListener from '../../helpers/addAnchorListener';\nimport {PHONE_NUMBER_REG_EXP} from '.';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport matchUrlProtocol from './matchUrlProtocol';\nimport {T_ME_PREFIXES} from '../mtproto/mtproto_config';\n\nexport default function wrapUrl(url: string, unsafe?: number | boolean) {\n if(!matchUrlProtocol(url)) {\n url = 'https://' + url;\n }\n\n const out: {url: string, onclick?: Parameters[0]['name']} = {url};\n let tgMeMatch, telescoPeMatch, tgMatch;\n let onclick: typeof out['onclick'];\n /* if(unsafe === 2) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } else */if((tgMeMatch = url.match(/^(?:https?:\\/\\/)?(?:(.+?)\\.)?(?:(?:web|k|z)\\.)?t(?:elegram)?\\.me(?:\\/(.+))?/))) {\n const u = new URL(url);\n let prefix = tgMeMatch[1];\n if(prefix && T_ME_PREFIXES.has(tgMeMatch[1])) {\n prefix = undefined;\n }\n\n if(prefix) {\n u.pathname = prefix + (u.pathname === '/' ? '' : u.pathname);\n }\n\n const fullPath = u.pathname.slice(1);\n const path = fullPath.split('/');\n\n if(path[0] && path[0][0] === '$' && path[0].length > 1) {\n onclick = 'invoice';\n } else if(/^\\W/.test(fullPath) && !PHONE_NUMBER_REG_EXP.test(fullPath)) { // second regexp is for phone numbers (t.me/+38050...)\n onclick = 'joinchat';\n } else switch(path[0]) {\n case 'joinchat':\n case 'addstickers':\n case 'addemoji':\n case 'voicechat':\n case 'invoice':\n if(path.length !== 1 && !prefix) {\n onclick = path[0];\n break;\n }\n\n default:\n if((path[1] && path[1].match(/^\\d+(?:\\?(?:comment|thread)=\\d+)?$/)) || path.length === 1) {\n onclick = 'im';\n break;\n }\n\n break;\n }\n } else if((telescoPeMatch = url.match(/^(?:https?:\\/\\/)?telesco\\.pe\\/([^/?]+)\\/(\\d+)/))) {\n onclick = 'im';\n } else if((tgMatch = url.match(/tg:(?:\\/\\/)?(.+?)(?:\\?|$)/))) {\n onclick = 'tg_' + tgMatch[1] as any;\n }/* else if(unsafe) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } */\n\n if(!(window as any)[onclick]) {\n onclick = undefined;\n }\n\n out.onclick = onclick;\n return out;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.wrapUrl = wrapUrl);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import I18n from '../../lib/langPack';\n\nexport default function setInnerHTML(elem: Element, html: string | DocumentFragment | Element) {\n setDirection(elem);\n if(typeof(html) === 'string') {\n if(!html) elem.replaceChildren();\n else elem.innerHTML = html;\n } else {\n elem.replaceChildren(html);\n }\n}\n\nexport function setDirection(elem: Element) {\n // if(!I18n.isRTL) {\n elem.setAttribute('dir', 'auto');\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport I18n, {i18n} from '../lib/langPack';\n\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nexport const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\nexport const ONE_DAY = 86400;\n\n// https://stackoverflow.com/a/6117889\nexport const getWeekNumber = (date: Date) => {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil((((d.getTime() - yearStart.getTime()) / ONE_DAY) + 1) / 7);\n};\n\nexport function formatDateAccordingToTodayNew(time: Date) {\n const today = new Date();\n const now = today.getTime() / 1000 | 0;\n const timestamp = time.getTime() / 1000 | 0;\n\n const options: Intl.DateTimeFormatOptions = {};\n if((now - timestamp) < ONE_DAY && today.getDate() === time.getDate()) { // if the same day\n options.hour = options.minute = '2-digit';\n } else if(today.getFullYear() !== time.getFullYear()) { // different year\n options.year = options.day = 'numeric';\n options.month = '2-digit';\n } else if((now - timestamp) < (ONE_DAY * 7) && getWeekNumber(today) === getWeekNumber(time)) { // current week\n options.weekday = 'short';\n } else { // same year\n options.month = 'short';\n options.day = 'numeric';\n }\n\n return new I18n.IntlDateElement({\n date: time,\n options\n }).element;\n}\n\nexport function formatFullSentTimeRaw(timestamp: number, options: {\n capitalize?: boolean\n} = {}) {\n const date = new Date();\n const time = new Date(timestamp * 1000);\n const now = date.getTime() / 1000;\n\n const timeEl = formatTime(time);\n\n let dateEl: Node | string;\n if((now - timestamp) < ONE_DAY && date.getDate() === time.getDate()) { // if the same day\n dateEl = i18n(options.capitalize ? 'Date.Today' : 'Peer.Status.Today');\n } else if((now - timestamp) < (ONE_DAY * 2) && (date.getDate() - 1) === time.getDate()) { // yesterday\n dateEl = i18n(options.capitalize ? 'Yesterday' : 'Peer.Status.Yesterday');\n\n if(options.capitalize) {\n (dateEl as HTMLElement).style.textTransform = 'capitalize';\n }\n } else if(date.getFullYear() !== time.getFullYear()) { // different year\n dateEl = new I18n.IntlDateElement({\n date: time,\n options: {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n }\n }).element;\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate() + ', ' + time.getFullYear();\n } else {\n dateEl = new I18n.IntlDateElement({\n date: time,\n options: {\n month: 'short',\n day: 'numeric'\n }\n }).element;\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate();\n }\n\n return {dateEl, timeEl};\n}\n\nexport function formatFullSentTime(timestamp: number) {\n const {dateEl, timeEl} = formatFullSentTimeRaw(timestamp, {\n capitalize: true\n });\n\n const fragment = document.createDocumentFragment();\n fragment.append(dateEl, ' ', i18n('ScheduleController.at'), ' ', timeEl);\n return fragment;\n}\n\nexport function formatTime(date: Date) {\n return new I18n.IntlDateElement({\n date,\n options: {\n hour: '2-digit',\n minute: '2-digit'\n }\n }).element;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.formatDateAccordingToTodayNew = formatDateAccordingToTodayNew);\n\nexport const getFullDate = (date: Date, options: Partial<{\n noTime: true,\n noSeconds: true,\n monthAsNumber: true,\n leadingZero: true\n}> = {}) => {\n const joiner = options.monthAsNumber ? '.' : ' ';\n const time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + (options.noSeconds ? '' : ':' + ('0' + date.getSeconds()).slice(-2));\n\n return (options.leadingZero ? ('0' + date.getDate()).slice(-2) : date.getDate()) +\n joiner + (options.monthAsNumber ? ('0' + (date.getMonth() + 1)).slice(-2) : months[date.getMonth()]) +\n joiner + date.getFullYear() +\n (options.noTime ? '' : ', ' + time);\n};\n\n// https://github.com/DrKLO/Telegram/blob/d52b2c921abd3c1e8d6368858313ad0cb0468c07/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java\nconst minYear = 2013;\nconst yearPattern = new RegExp('20[0-9]{1,2}');\nconst monthYearOrDayPattern = new RegExp('(\\\\w{3,}) ([0-9]{0,4})', 'i');\nconst yearOrDayAndMonthPattern = new RegExp('([0-9]{0,4}) (\\\\w{2,})', 'i');\nconst shortDate = new RegExp('^([0-9]{1,4})(\\\\.| |/|\\\\-)([0-9]{1,4})$', 'i');\nconst longDate = new RegExp('^([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,4})$', 'i');\nconst numberOfDaysEachMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nexport type DateData = {\n title: string,\n minDate: number,\n maxDate: number,\n};\nexport function fillTipDates(query: string, dates: DateData[]) {\n const q = query.trim().toLowerCase();\n\n if(q.length < 3) {\n return;\n }\n\n if('today'.indexOf(q) === 0) {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: 'Today',\n minDate,\n maxDate\n });\n return;\n }\n\n if('yesterday'.indexOf(q) === 0) {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime() - 86400000;\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 86400001;\n dates.push({\n title: 'Yesterday',\n minDate,\n maxDate\n });\n return;\n }\n\n const dayOfWeek = getDayOfWeek(q);\n if(dayOfWeek >= 0) {\n const date = new Date();\n const now = date.getTime();\n const currentDay = date.getDay();\n const distance = dayOfWeek - currentDay;\n date.setDate(date.getDate() + distance);\n if(date.getTime() > now) {\n date.setTime(date.getTime() - 604800000);\n }\n const year = date.getFullYear()\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: formatWeekLong(minDate),\n minDate,\n maxDate\n });\n return;\n }\n\n let matches: any[];\n if((matches = shortDate.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[3];\n const k = parseInt(g1);\n const k1 = parseInt(g2);\n if(k > 0 && k <= 31) {\n if(k1 >= minYear && k <= 12) {\n const selectedYear = k1;\n const month = k - 1;\n createForMonthYear(dates, month, selectedYear);\n return;\n } else if(k1 <= 12) {\n const day = k - 1;\n const month = k1 - 1;\n createForDayMonth(dates, day, month);\n }\n } else if(k >= minYear && k1 <= 12) {\n const selectedYear = k;\n const month = k1 - 1;\n createForMonthYear(dates, month, selectedYear);\n }\n\n return;\n }\n\n if((matches = longDate.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[3];\n const g3 = matches[5];\n if(!matches[2] === matches[4]) {\n return;\n }\n\n const day = parseInt(g1);\n const month = parseInt(g2) - 1;\n let year = parseInt(g3);\n if(year >= 10 && year <= 99) {\n year += 2000;\n }\n\n const currentYear = new Date().getFullYear();\n if(validDateForMonth(day - 1, month) && year >= minYear && year <= currentYear) {\n const date = new Date();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: formatterYearMax(minDate),\n minDate,\n maxDate\n });\n return;\n }\n\n return;\n }\n\n if((matches = yearPattern.exec(q)) !== null) {\n let selectedYear = +q;\n const currentYear = new Date().getFullYear();\n if(selectedYear < minYear) {\n selectedYear = minYear;\n for(let i = currentYear; i >= selectedYear; i--) {\n const date = new Date();\n date.setFullYear(i, 0, 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(i + 1, 0, 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: '' + i,\n minDate,\n maxDate\n });\n }\n } else if(selectedYear <= currentYear) {\n const date = new Date();\n date.setFullYear(selectedYear, 0, 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(selectedYear + 1, 0, 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: '' + selectedYear,\n minDate,\n maxDate\n });\n }\n\n return;\n }\n\n if((matches = monthYearOrDayPattern.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[2];\n const month = getMonth(g1);\n if(month >= 0) {\n const k = +g2;\n if(k > 0 && k <= 31) {\n const day = k - 1;\n createForDayMonth(dates, day, month);\n return;\n } else if(k >= minYear) {\n const selectedYear = k;\n createForMonthYear(dates, month, selectedYear);\n return;\n }\n }\n }\n\n if((matches = yearOrDayAndMonthPattern.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[2];\n const month = getMonth(g2);\n if(month >= 0) {\n const k = +g1;\n if(k > 0 && k <= 31) {\n const day = k - 1;\n createForDayMonth(dates, day, month);\n return;\n } else if(k >= minYear) {\n const selectedYear = k;\n createForMonthYear(dates, month, selectedYear);\n }\n }\n }\n}\n\nfunction createForMonthYear(dates: DateData[], month: number, selectedYear: number) {\n const currentYear = new Date().getFullYear();\n const today = Date.now();\n if(selectedYear >= minYear && selectedYear <= currentYear) {\n const date = new Date();\n date.setFullYear(selectedYear, month, 1);\n date.setHours(0, 0, 0);\n const minDate = date.getTime();\n if(minDate > today) {\n return;\n }\n date.setMonth(date.getMonth() + 1);\n const maxDate = date.getTime() - 1;\n\n dates.push({\n title: formatterMonthYear(minDate),\n minDate,\n maxDate\n });\n }\n}\n\nfunction createForDayMonth(dates: DateData[], day: number, month: number) {\n if(validDateForMonth(day, month)) {\n const currentYear = new Date().getFullYear();\n const today = Date.now();\n\n for(let i = currentYear; i >= minYear; i--) {\n if(month === 1 && day === 28 && !isLeapYear(i)) {\n continue;\n }\n\n const date = new Date();\n date.setFullYear(i, month, day + 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n if(minDate > today) {\n continue;\n }\n\n date.setFullYear(i, month, day + 2);\n date.setHours(0, 0, 0);\n const maxDate = date.getTime() - 1;\n if(i === currentYear) {\n dates.push({\n title: formatterDayMonth(minDate),\n minDate,\n maxDate\n });\n } else {\n dates.push({\n title: formatterYearMax(minDate),\n minDate,\n maxDate\n });\n }\n }\n }\n}\n\nfunction formatterMonthYear(timestamp: number) {\n const date = new Date(timestamp);\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getFullYear();\n}\n\nfunction formatterDayMonth(timestamp: number) {\n const date = new Date(timestamp);\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getDate();\n}\n\nfunction formatterYearMax(timestamp: number) {\n const date = new Date(timestamp);\n return ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();\n}\n\nfunction formatWeekLong(timestamp: number) {\n const date = new Date(timestamp);\n return days[date.getDay()];\n}\n\nfunction validDateForMonth(day: number, month: number) {\n if(month >= 0 && month < 12) {\n if(day >= 0 && day < numberOfDaysEachMonth[month]) {\n return true;\n }\n }\n return false;\n}\n\nfunction isLeapYear(year: number) {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n}\n\nfunction getMonth(q: string) {\n /* String[] months = new String[]{\n LocaleController.getString(\"January\", R.string.January).toLowerCase(),\n LocaleController.getString(\"February\", R.string.February).toLowerCase(),\n LocaleController.getString(\"March\", R.string.March).toLowerCase(),\n LocaleController.getString(\"April\", R.string.April).toLowerCase(),\n LocaleController.getString(\"May\", R.string.May).toLowerCase(),\n LocaleController.getString(\"June\", R.string.June).toLowerCase(),\n LocaleController.getString(\"July\", R.string.July).toLowerCase(),\n LocaleController.getString(\"August\", R.string.August).toLowerCase(),\n LocaleController.getString(\"September\", R.string.September).toLowerCase(),\n LocaleController.getString(\"October\", R.string.October).toLowerCase(),\n LocaleController.getString(\"November\", R.string.November).toLowerCase(),\n LocaleController.getString(\"December\", R.string.December).toLowerCase()\n }; */\n\n /* String[] monthsEng = new String[12];\n Calendar c = Calendar.getInstance();\n for (int i = 1; i <= 12; i++) {\n c.set(0, 0, 0, 0, 0, 0);\n c.set(Calendar.MONTH, i);\n monthsEng[i - 1] = c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH).toLowerCase();\n } */\n\n q = q.toLowerCase();\n for(let i = 0; i < 12; i++) {\n const month = months[i].toLowerCase();\n if(month.indexOf(q) === 0) {\n return i;\n }\n }\n return -1;\n}\n\nfunction getDayOfWeek(q: string) {\n const c = new Date();\n if(q.length <= 3) {\n return -1;\n }\n\n for(let i = 0; i < 7; i++) {\n c.setDate(c.getDate() + 1);\n\n if(formatWeekLong(c.getTime()).toLowerCase().indexOf(q) === 0) {\n return c.getDay();\n }\n }\n return -1;\n}\n\nMOUNT_CLASS_TO.fillTipDates = fillTipDates;\n","/**\n * Will be used for FILE_REFERENCE_EXPIRED\n * @param key\n * @param wasObject\n * @param newObject\n */\nexport default function safeReplaceArrayInObject(key: K, wasObject: any, newObject: any) {\n if('byteLength' in newObject[key]) { // Uint8Array\n newObject[key] = [...newObject[key]];\n }\n\n if(wasObject && wasObject[key] !== newObject[key]) {\n wasObject[key].length = newObject[key].length;\n (newObject[key] as any[]).forEach((v, i) => {\n wasObject[key][i] = v;\n });\n\n /* wasObject[key].set(newObject[key]); */\n newObject[key] = wasObject[key];\n }\n}\n","export const EXTENSION_MIME_TYPE_MAP: {[ext in MTFileExtension]: MTMimeType} = {\n pdf: 'application/pdf',\n tgv: 'application/x-tgwallpattern',\n tgs: 'application/x-tgsticker',\n json: 'application/json',\n wav: 'audio/wav',\n mp3: 'audio/mpeg',\n ogg: 'audio/ogg',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n mp4: 'video/mp4',\n webm: 'video/webm',\n mov: 'video/quicktime',\n svg: 'image/svg+xml'\n};\n\nexport const MIME_TYPE_EXTENSION_MAP: {[mimeType in MTMimeType]?: MTFileExtension} = {};\n\nfor(const ext in EXTENSION_MIME_TYPE_MAP) {\n MIME_TYPE_EXTENSION_MAP[EXTENSION_MIME_TYPE_MAP[ext as MTFileExtension]] = ext as MTFileExtension;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ThumbCache} from '../storages/thumbs';\nimport {AccountWallPapers, Document, DocumentAttribute, MessagesSavedGifs, PhotoSize, WallPaper} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {getFullDate} from '../../helpers/date';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceArrayInObject from '../../helpers/object/safeReplaceArrayInObject';\nimport {AppManager} from './manager';\nimport wrapPlainText from '../richTextProcessor/wrapPlainText';\nimport assumeType from '../../helpers/assumeType';\nimport {getEnvironment} from '../../environment/utils';\nimport {isServiceWorkerOnline} from '../mtproto/mtproto.worker';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport getDocumentInputFileLocation from './utils/docs/getDocumentInputFileLocation';\nimport getDocumentURL from './utils/docs/getDocumentURL';\nimport makeError from '../../helpers/makeError';\nimport {EXTENSION_MIME_TYPE_MAP} from '../../environment/mimeTypeMap';\nimport {THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\nimport tsNow from '../../helpers/tsNow';\n\nexport type MyDocument = Document.document;\n\n// TODO: ะตัะปะธ ะทะฐะปะธั‚ัŒ ะบะฐั€ั‚ะธะฝะบัƒ ั„ะฐะนะปะพะผ, ะฐ ะฟะพั‚ะพะผ ะฟะตั€ะตะทะฐะนั‚ะธ ะฒ ะดะธะฐะปะพะณ - ะฟั€ะตะฒัŒัŽัˆะบะฐ ะทะฐะฝะพะฒะพ ัะบะฐั‡ะฐะตั‚ัั\n\ntype WallPaperId = WallPaper.wallPaper['id'];\n\nlet uploadWallPaperTempId = 0;\n\nexport class AppDocsManager extends AppManager {\n private docs: {[docId: DocId]: MyDocument};\n\n private stickerCachedThumbs: {[docId: DocId]: {[toneIndex: number]: {url: string, w: number, h: number}}};\n\n private uploadingWallPapers: {[id: WallPaperId]: {cacheContext: ThumbCache, file: File}};\n\n protected after() {\n this.docs = {};\n this.stickerCachedThumbs = {};\n this.uploadingWallPapers = {};\n\n MTProtoMessagePort.getInstance().addEventListener('serviceWorkerOnline', (online) => {\n if(!online) {\n this.onServiceWorkerFail();\n }\n });\n }\n\n private onServiceWorkerFail = () => {\n for(const id in this.docs) {\n const doc = this.docs[id];\n\n if(doc.supportsStreaming) {\n delete doc.supportsStreaming;\n this.thumbsStorage.deleteCacheContext(doc);\n }\n }\n };\n\n public saveDoc(doc: Document, context?: ReferenceContext): MyDocument {\n if(!doc || doc._ === 'documentEmpty') {\n return;\n }\n\n const oldDoc = this.docs[doc.id];\n\n if(doc.file_reference) { // * because we can have a new object w/o the file_reference while sending\n safeReplaceArrayInObject('file_reference', oldDoc, doc);\n this.referenceDatabase.saveContext(doc.file_reference, context);\n }\n\n // console.log('saveDoc', apiDoc, this.docs[apiDoc.id]);\n // if(oldDoc) {\n // //if(doc._ !== 'documentEmpty' && doc._ === d._) {\n // if(doc.thumbs) {\n // if(!oldDoc.thumbs) oldDoc.thumbs = doc.thumbs;\n // /* else if(apiDoc.thumbs[0].bytes && !d.thumbs[0].bytes) {\n // d.thumbs.unshift(apiDoc.thumbs[0]);\n // } else if(d.thumbs[0].url) { // fix for converted thumb in safari\n // apiDoc.thumbs[0] = d.thumbs[0];\n // } */\n // }\n\n // //}\n\n // return oldDoc;\n\n // //return Object.assign(d, apiDoc, context);\n // //return context ? Object.assign(d, context) : d;\n // }\n\n if(!oldDoc) {\n this.docs[doc.id] = doc;\n }\n\n // * exclude from state\n // defineNotNumerableProperties(doc, [/* 'thumbs', */'type', 'h', 'w', 'file_name',\n // 'file', 'duration', 'downloaded', 'url', 'audioTitle',\n // 'audioPerformer', 'sticker', 'stickerEmoji', 'stickerEmojiRaw',\n // 'stickerSetInput', 'stickerThumbConverted', 'animated', 'supportsStreaming']);\n\n for(let i = 0, length = doc.attributes.length; i < length; ++i) {\n const attribute = doc.attributes[i];\n switch(attribute._) {\n case 'documentAttributeFilename': {\n doc.file_name = wrapPlainText(attribute.file_name);\n break;\n }\n\n case 'documentAttributeAudio': {\n if(doc.type === 'round') {\n break;\n }\n\n doc.duration = attribute.duration;\n doc.type = attribute.pFlags.voice && doc.mime_type === 'audio/ogg' ? 'voice' : 'audio';\n break;\n }\n\n case 'documentAttributeVideo': {\n doc.duration = attribute.duration;\n doc.w = attribute.w;\n doc.h = attribute.h;\n // apiDoc.supportsStreaming = attribute.pFlags?.supports_streaming/* && apiDoc.size > 524288 */;\n if(/* apiDoc.thumbs && */attribute.pFlags.round_message) {\n doc.type = 'round';\n } else /* if(apiDoc.thumbs) */ {\n doc.type = 'video';\n }\n break;\n }\n\n case 'documentAttributeCustomEmoji':\n case 'documentAttributeSticker': {\n if(attribute.alt !== undefined) {\n doc.stickerEmojiRaw = attribute.alt;\n }\n\n if(attribute.stickerset) {\n if(attribute.stickerset._ === 'inputStickerSetEmpty') {\n delete attribute.stickerset;\n } else if(attribute.stickerset._ === 'inputStickerSetID') {\n doc.stickerSetInput = attribute.stickerset;\n }\n }\n\n // * there can be no thumbs, then it is a document\n if(/* apiDoc.thumbs && */doc.mime_type === 'image/webp' && (doc.thumbs || getEnvironment().IS_WEBP_SUPPORTED)) {\n doc.type = 'sticker';\n doc.sticker = 1;\n } else if(doc.mime_type === 'video/webm') {\n if(!getEnvironment().IS_WEBM_SUPPORTED) {\n break;\n }\n\n doc.type = 'sticker';\n doc.sticker = 3;\n doc.animated = true;\n }\n break;\n }\n\n case 'documentAttributeImageSize': {\n doc.type = 'photo';\n doc.w = attribute.w;\n doc.h = attribute.h;\n break;\n }\n\n case 'documentAttributeAnimated': {\n if((doc.mime_type === 'image/gif' || doc.mime_type === 'video/mp4')/* && apiDoc.thumbs */) {\n doc.type = 'gif';\n }\n\n doc.animated = true;\n break;\n }\n }\n }\n\n if(!doc.mime_type) {\n const ext = (doc.file_name || '').split('.').pop();\n // @ts-ignore\n const mappedMimeType = ext && EXTENSION_MIME_TYPE_MAP[ext.toLowerCase()];\n if(mappedMimeType) {\n doc.mime_type = mappedMimeType;\n } else {\n switch(doc.type) {\n case 'gif':\n case 'video':\n case 'round':\n doc.mime_type = 'video/mp4';\n break;\n case 'sticker':\n doc.mime_type = 'image/webp';\n break;\n case 'audio':\n doc.mime_type = 'audio/mpeg';\n break;\n case 'voice':\n doc.mime_type = 'audio/ogg';\n break;\n default:\n doc.mime_type = 'application/octet-stream';\n break;\n }\n }\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.pdf) {\n doc.type = 'pdf';\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.gif) {\n doc.type = 'gif';\n } else if(doc.mime_type === 'application/x-tgsticker' && doc.file_name === 'AnimatedSticker.tgs') {\n doc.type = 'sticker';\n doc.animated = true;\n doc.sticker = 2;\n }\n\n if(doc.type === 'voice' || doc.type === 'round') {\n // browser will identify extension\n const attribute = doc.attributes.find((attribute) => attribute._ === 'documentAttributeFilename') as DocumentAttribute.documentAttributeFilename;\n const ext = attribute && attribute.file_name.split('.').pop();\n const date = getFullDate(new Date(doc.date * 1000), {monthAsNumber: true, leadingZero: true}).replace(/[:\\.]/g, '-').replace(', ', '_');\n doc.file_name = `${doc.type}_${date}${ext ? '.' + ext : ''}`;\n }\n\n if(isServiceWorkerOnline() && ((doc.type === 'gif' && doc.size > 8e6) || doc.type === 'audio' || doc.type === 'video')/* || doc.mime_type.indexOf('video/') === 0 */) {\n doc.supportsStreaming = true;\n\n const cacheContext = this.thumbsStorage.getCacheContext(doc);\n if(!cacheContext.url) {\n this.thumbsStorage.setCacheContextURL(doc, undefined, getDocumentURL(doc), 0);\n }\n } else {\n doc.supportsStreaming = false;\n }\n\n // for testing purposes\n // doc.supportsStreaming = false;\n // doc.url = ''; // * this will break upload urls\n\n doc.file_name ||= '';\n\n /* if(!doc.url) {\n doc.url = this.getFileURL(doc);\n } */\n\n if(oldDoc) {\n return Object.assign(oldDoc, doc);\n }\n\n return doc;\n }\n\n public getDoc(docId: DocId | MyDocument): MyDocument {\n return isObject(docId) ? docId : this.docs[docId];\n }\n\n public downloadDoc(doc: MyDocument, queueId?: number, onlyCache?: boolean) {\n return this.apiFileManager.downloadMedia({\n media: doc,\n queueId,\n onlyCache\n });\n }\n\n public getLottieCachedThumb(docId: DocId, toneIndex: number) {\n const cached = this.stickerCachedThumbs[docId];\n return cached && cached[toneIndex];\n }\n\n public saveLottiePreview(docId: DocId, blob: Blob, width: number, height: number, toneIndex: number) {\n const doc = this.getDoc(docId);\n if(!doc) {\n return;\n }\n\n const cached = this.stickerCachedThumbs[doc.id] ??= {};\n\n const thumb = cached[toneIndex];\n if(thumb && thumb.w >= width && thumb.h >= height) {\n return;\n }\n\n cached[toneIndex] = {\n url: URL.createObjectURL(blob),\n w: width,\n h: height\n };\n }\n\n public saveWebPConvertedStrippedThumb(docId: DocId, bytes: Uint8Array) {\n const doc = this.getDoc(docId);\n if(!doc) {\n return;\n }\n\n const thumb = doc.thumbs && doc.thumbs.find((thumb) => thumb._ === 'photoStrippedSize') as PhotoSize.photoStrippedSize;\n if(!thumb) {\n return;\n }\n\n doc.pFlags.stickerThumbConverted = true;\n thumb.bytes = bytes;\n }\n\n public prepareWallPaperUpload(file: File) {\n const id = 'wallpaper-upload-' + ++uploadWallPaperTempId;\n\n const thumb = {\n _: 'photoSize',\n h: 0,\n w: 0,\n location: {} as any,\n size: file.size,\n type: THUMB_TYPE_FULL\n } as PhotoSize.photoSize;\n let document: MyDocument = {\n _: 'document',\n access_hash: '',\n attributes: [],\n dc_id: 0,\n file_reference: [],\n id,\n mime_type: file.type as MTMimeType,\n size: file.size,\n date: tsNow(true),\n pFlags: {},\n thumbs: [thumb],\n file_name: file.name\n };\n\n document = this.saveDoc(document);\n\n const cacheContext = this.thumbsStorage.setCacheContextURL(document, undefined, URL.createObjectURL(file), file.size);\n\n const wallpaper: WallPaper.wallPaper = {\n _: 'wallPaper',\n access_hash: '',\n document: document,\n id,\n slug: id,\n pFlags: {}\n };\n\n this.uploadingWallPapers[id] = {\n cacheContext,\n file\n };\n\n return wallpaper;\n }\n\n public uploadWallPaper(id: WallPaperId) {\n const {cacheContext, file} = this.uploadingWallPapers[id];\n delete this.uploadingWallPapers[id];\n\n const upload = this.apiFileManager.upload({file, fileName: file.name});\n return upload.then((inputFile) => {\n return this.apiManager.invokeApi('account.uploadWallPaper', {\n file: inputFile,\n mime_type: file.type,\n settings: {\n _: 'wallPaperSettings',\n pFlags: {}\n }\n }).then((wallPaper) => {\n assumeType(wallPaper);\n wallPaper.document = this.saveDoc(wallPaper.document);\n this.thumbsStorage.setCacheContextURL(wallPaper.document, undefined, cacheContext.url, cacheContext.downloaded);\n\n return wallPaper;\n });\n });\n }\n\n public getGifs() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getSavedGifs',\n processResult: (res) => {\n assumeType(res);\n return res.gifs.map((doc) => this.saveDoc(doc));\n }\n });\n }\n\n public requestDocPart(docId: DocId, dcId: number, offset: number, limit: number) {\n const doc = this.getDoc(docId);\n if(!doc) return Promise.reject(makeError('NO_DOC'));\n return this.apiFileManager.requestFilePart(dcId, getDocumentInputFileLocation(doc), offset, limit);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {FileURLType, getFileURL} from '../../../../helpers/fileName';\nimport {Document, PhotoSize} from '../../../../layer';\nimport getDocumentDownloadOptions from './getDocumentDownloadOptions';\n\nexport default function getDocumentURL(doc: Document.document, download = false, thumb?: PhotoSize.photoSize) {\n let type: FileURLType;\n if(download) {\n type = 'download';\n } else if(thumb) {\n type = 'thumb';\n } else if(doc.supportsStreaming) {\n type = 'stream';\n } else {\n type = 'document';\n }\n\n return getFileURL(type, getDocumentDownloadOptions(doc, thumb));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {MessageEntity, DraftMessage, MessagesSaveDraft} from '../../layer';\nimport tsNow from '../../helpers/tsNow';\nimport stateStorage from '../stateStorage';\nimport assumeType from '../../helpers/assumeType';\nimport {AppManager} from './manager';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport draftsAreEqual from './utils/drafts/draftsAreEqual';\n\nexport type MyDraftMessage = DraftMessage.draftMessage;\n\nexport class AppDraftsManager extends AppManager {\n private drafts: {[peerIdAndThreadId: string]: MyDraftMessage} = {};\n private getAllDraftPromise: Promise;\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateDraftMessage: (update) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n this.saveDraft({\n peerId,\n threadId: update.threadId,\n draft: update.draft,\n notify: true\n });\n }\n });\n\n /* return */stateStorage.get('drafts').then((drafts) => {\n this.drafts = drafts || {};\n });\n }\n\n private getKey(peerId: PeerId, threadId?: number) {\n return '' + peerId + (threadId ? '_' + threadId : '');\n }\n\n public getDraft(peerId: PeerId, threadId?: number) {\n return this.drafts[this.getKey(peerId, threadId)];\n }\n\n public addMissedDialogs() {\n return this.getAllDrafts().then(() => {\n for(const key in this.drafts) {\n if(key.indexOf('_') !== -1) { // exclude threads\n continue;\n }\n\n const peerId = key.toPeerId();\n const dialog = this.appMessagesManager.getDialogOnly(peerId);\n if(!dialog) {\n this.appMessagesManager.reloadConversation(peerId);\n /* const dialog = appMessagesManager.generateDialog(peerId);\n dialog.draft = this.drafts[key];\n appMessagesManager.saveConversation(dialog);\n appMessagesManager.newDialogsToHandle[peerId] = dialog;\n appMessagesManager.scheduleHandleNewDialogs(); */\n }\n }\n });\n }\n\n private getAllDrafts() {\n return this.getAllDraftPromise ??= this.apiManager.invokeApi('messages.getAllDrafts')\n .then((updates) => {\n const p = this.apiUpdatesManager.updatesState.syncLoading || Promise.resolve();\n p.then(() => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n });\n }\n\n public saveDraft({peerId, threadId, draft: apiDraft, notify, force}: {\n peerId: PeerId,\n threadId?: number,\n draft: DraftMessage,\n notify?: boolean,\n force?: boolean\n }) {\n const draft = this.processApiDraft(apiDraft);\n\n const key = this.getKey(peerId, threadId);\n if(draft) {\n this.drafts[key] = draft;\n } else {\n delete this.drafts[key];\n }\n\n stateStorage.set({\n drafts: this.drafts\n });\n\n if(notify) {\n // console.warn(dT(), 'save draft', peerId, apiDraft, options)\n this.rootScope.dispatchEvent('draft_updated', {\n peerId,\n threadId,\n draft,\n force\n });\n }\n\n return draft;\n }\n\n private isEmptyDraft(draft: DraftMessage) {\n if(draft?._ !== 'draftMessage') {\n return true;\n }\n\n if(draft.reply_to_msg_id !== undefined && draft.reply_to_msg_id > 0) {\n return false;\n }\n\n if(!draft.message.length) {\n return true;\n }\n\n return false;\n }\n\n private processApiDraft(draft: DraftMessage): MyDraftMessage {\n if(!draft || draft._ !== 'draftMessage') {\n return undefined;\n }\n\n if(draft.reply_to_msg_id) {\n draft.reply_to_msg_id = generateMessageId(draft.reply_to_msg_id);\n }\n\n return draft;\n }\n\n public syncDraft(peerId: PeerId, threadId: number, localDraft?: DraftMessage, saveOnServer = true, force = false) {\n // console.warn(dT(), 'sync draft', peerID)\n const serverDraft = this.getDraft(peerId, threadId);\n if(draftsAreEqual(serverDraft, localDraft)) {\n // console.warn(dT(), 'equal drafts', localDraft, serverDraft)\n return true;\n }\n\n // console.warn(dT(), 'changed draft', localDraft, serverDraft)\n const params: MessagesSaveDraft = {\n peer: this.appPeersManager.getInputPeerById(peerId),\n message: ''\n };\n\n let draftObj: DraftMessage;\n if(this.isEmptyDraft(localDraft)) {\n draftObj = {_: 'draftMessageEmpty'};\n } else {\n assumeType(localDraft);\n const message = localDraft.message;\n const entities: MessageEntity[] = localDraft.entities;\n\n if(localDraft.reply_to_msg_id) {\n params.reply_to_msg_id = getServerMessageId(localDraft.reply_to_msg_id);\n }\n\n if(entities?.length) {\n params.entities = this.appMessagesManager.getInputEntities(entities);\n }\n\n if(localDraft.pFlags.no_webpage) {\n params.no_webpage = localDraft.pFlags.no_webpage;\n }\n\n params.message = message;\n }\n\n if(threadId) {\n params.top_msg_id = getServerMessageId(threadId);\n }\n\n const saveLocalDraft = draftObj || localDraft;\n saveLocalDraft.date = tsNow(true) + this.timeManager.getServerTimeOffset();\n\n this.saveDraft({\n peerId,\n threadId,\n draft: saveLocalDraft,\n notify: true,\n force\n });\n\n if(saveOnServer) {\n return this.apiManager.invokeApi('messages.saveDraft', params);\n }\n\n return true;\n }\n\n public clearAllDrafts() {\n return this.apiManager.invokeApi('messages.clearAllDrafts').then((bool) => {\n if(!bool) {\n return;\n }\n\n for(const combined in this.drafts) {\n const [peerId, threadId] = combined.split('_');\n this.rootScope.dispatchEvent('draft_updated', {\n peerId: peerId.toPeerId(),\n threadId: threadId ? +threadId : undefined,\n draft: undefined\n });\n }\n });\n }\n\n public clearDraft(peerId: PeerId, threadId: number) {\n const emptyDraft: DraftMessage.draftMessageEmpty = {\n _: 'draftMessageEmpty'\n };\n\n if(threadId) {\n this.syncDraft(peerId, threadId, emptyDraft as any, false, true);\n } else {\n this.saveDraft({\n peerId,\n threadId,\n draft: emptyDraft,\n notify: true,\n force: true\n });\n }\n }\n\n public setDraft(peerId: PeerId, threadId: number, message: string, entities?: MessageEntity[]) {\n const draft: DraftMessage.draftMessage = {\n _: 'draftMessage',\n date: tsNow(true),\n message,\n pFlags: {},\n entities\n };\n\n if(threadId) {\n this.syncDraft(peerId, threadId, draft, false, true);\n } else {\n this.saveDraft({\n peerId,\n threadId,\n draft,\n notify: true,\n force: true\n });\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport isObject from '../../helpers/object/isObject';\nimport validateInitObject from '../../helpers/object/validateInitObject';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport SearchIndex from '../searchIndex';\nimport stateStorage from '../stateStorage';\nimport {AppManager} from './manager';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\n\ntype EmojiLangPack = {\n keywords: {\n [keyword: string]: string[],\n },\n version: number,\n langCode: string\n};\n\nconst EMOJI_LANG_PACK: EmojiLangPack = {\n keywords: {},\n version: 0,\n langCode: App.langPackCode\n};\n\nconst RECENT_MAX_LENGTH = 32;\n\ntype EmojiType = 'native' | 'custom';\n\nexport class AppEmojiManager extends AppManager {\n private static POPULAR_EMOJI = ['๐Ÿ˜‚', '๐Ÿ˜˜', 'โค๏ธ', '๐Ÿ˜', '๐Ÿ˜Š', '๐Ÿ˜', '๐Ÿ‘', 'โ˜บ๏ธ', '๐Ÿ˜”', '๐Ÿ˜„', '๐Ÿ˜ญ', '๐Ÿ’‹', '๐Ÿ˜’', '๐Ÿ˜ณ', '๐Ÿ˜œ', '๐Ÿ™ˆ', '๐Ÿ˜‰', '๐Ÿ˜ƒ', '๐Ÿ˜ข', '๐Ÿ˜', '๐Ÿ˜ฑ', '๐Ÿ˜ก', '๐Ÿ˜', '๐Ÿ˜ž', '๐Ÿ˜…', '๐Ÿ˜š', '๐Ÿ™Š', '๐Ÿ˜Œ', '๐Ÿ˜€', '๐Ÿ˜‹', '๐Ÿ˜†', '๐Ÿ‘Œ', '๐Ÿ˜', '๐Ÿ˜•'];\n private keywordLangPacks: {\n [langCode: string]: EmojiLangPack\n } = {};\n\n private index: SearchIndex;\n private indexedLangPacks: {[langCode: string]: boolean} = {};\n\n private getKeywordsPromises: {[langCode: string]: Promise} = {};\n\n private recent: {native?: string[], custom?: DocId[]} = {};\n private getRecentEmojisPromises: {native?: Promise, custom?: Promise} = {};\n\n private getCustomEmojiDocumentsPromise: Promise;\n private getCustomEmojiDocumentPromises: Map> = new Map();\n\n /* public getPopularEmoji() {\n return stateStorage.get('emojis_popular').then((popEmojis) => {\n var result = []\n if (popEmojis && popEmojis.length) {\n for (var i = 0, len = popEmojis.length; i < len; i++) {\n result.push({code: popEmojis[i][0], rate: popEmojis[i][1]})\n }\n callback(result)\n return\n }\n\n return stateStorage.get('emojis_recent').then((recentEmojis) => {\n recentEmojis = recentEmojis || popular || []\n var shortcut\n var code\n for (var i = 0, len = recentEmojis.length; i < len; i++) {\n shortcut = recentEmojis[i]\n if (Array.isArray(shortcut)) {\n shortcut = shortcut[0]\n }\n if (shortcut && typeof shortcut === 'string') {\n if (shortcut.charAt(0) == ':') {\n shortcut = shortcut.substr(1, shortcut.length - 2)\n }\n if (code = shortcuts[shortcut]) {\n result.push({code: code, rate: 1})\n }\n }\n }\n callback(result)\n });\n });\n }\n\n function pushPopularEmoji (code) {\n getPopularEmoji(function (popularEmoji) {\n var exists = false\n var count = popularEmoji.length\n var result = []\n for (var i = 0; i < count; i++) {\n if (popularEmoji[i].code == code) {\n exists = true\n popularEmoji[i].rate++\n }\n result.push([popularEmoji[i].code, popularEmoji[i].rate])\n }\n if (exists) {\n result.sort(function (a, b) {\n return b[1] - a[1]\n })\n } else {\n if (result.length > 41) {\n result = result.slice(0, 41)\n }\n result.push([code, 1])\n }\n ConfigStorage.set({emojis_popular: result})\n })\n } */\n\n public getEmojiKeywords(langCode: string = App.langPackCode) {\n const promise = this.getKeywordsPromises[langCode];\n if(promise) {\n return promise;\n }\n\n const storageKey: any = 'emojiKeywords_' + langCode;\n return this.getKeywordsPromises[langCode] = stateStorage.get(storageKey).then((pack: EmojiLangPack) => {\n if(!isObject(pack)) {\n pack = {} as any;\n }\n\n validateInitObject(EMOJI_LANG_PACK, pack);\n\n // important\n pack.langCode = langCode;\n this.keywordLangPacks[langCode] = pack;\n\n return this.apiManager.invokeApi('messages.getEmojiKeywordsDifference', {\n lang_code: pack.langCode,\n from_version: pack.version\n }).then((keywordsDifference) => {\n pack.version = keywordsDifference.version;\n\n const packKeywords = pack.keywords;\n const keywords = keywordsDifference.keywords;\n for(let i = 0, length = keywords.length; i < length; ++i) {\n const {keyword, emoticons} = keywords[i];\n packKeywords[keyword] = emoticons;\n }\n\n stateStorage.set({\n [storageKey]: pack\n });\n\n return pack;\n }, () => {\n return pack;\n });\n });\n }\n\n public getBothEmojiKeywords() {\n const promises: Promise[] = [\n this.getEmojiKeywords()\n ];\n\n if(this.networkerFactory.language !== App.langPackCode) {\n promises.push(this.getEmojiKeywords(this.networkerFactory.language));\n }\n\n if(!this.recent.native) {\n promises.push(this.getRecentEmojis('native'));\n }\n\n return Promise.all(promises);\n }\n\n private indexEmojis() {\n if(!this.index) {\n this.index = new SearchIndex(undefined, 2);\n }\n\n for(const langCode in this.keywordLangPacks) {\n if(this.indexedLangPacks[langCode]) {\n continue;\n }\n\n const pack = this.keywordLangPacks[langCode];\n const keywords = pack.keywords;\n\n for(const keyword in keywords) {\n const emoticons = keywords[keyword];\n this.index.indexObject(emoticons, keyword);\n }\n\n this.indexedLangPacks[langCode] = true;\n }\n }\n\n public searchEmojis(q: string) {\n this.indexEmojis();\n\n q = q.toLowerCase().replace(/_/g, ' ');\n\n // const perf = performance.now();\n let emojis: Array;\n if(q.trim()) {\n const set = this.index.search(q);\n emojis = Array.from(set).reduce((acc, v) => acc.concat(v), []);\n } else {\n emojis = this.recent.native.concat(AppEmojiManager.POPULAR_EMOJI).slice(0, RECENT_MAX_LENGTH);\n }\n\n emojis = Array.from(new Set(emojis));\n // console.log('searchEmojis', q, 'time', performance.now() - perf);\n\n /* for(let i = 0, length = emojis.length; i < length; ++i) {\n if(emojis[i].includes(zeroWidthJoiner) && !emojis[i].includes('\\ufe0f')) {\n emojis[i] += '\\ufe0f';\n }\n } */\n\n return emojis;\n }\n\n public getRecentEmojis(type: 'custom'): Promise;\n public getRecentEmojis(type: 'native'): Promise;\n public getRecentEmojis(type: T): Promise {\n const promises = this.getRecentEmojisPromises;\n return promises[type] ??= this.appStateManager.getState().then((state) => {\n let recent: string[] | DocId[] = [];\n if(type === 'native') {\n const {recentEmoji} = state;\n recent = Array.isArray(recentEmoji) && recentEmoji.length ? recentEmoji : AppEmojiManager.POPULAR_EMOJI;\n } else {\n const {recentCustomEmoji} = state;\n recent = Array.isArray(recentCustomEmoji) && recentCustomEmoji.length ? recentCustomEmoji : [];\n }\n\n return this.recent[type] = recent as any;\n }) as any;\n }\n\n public pushRecentEmoji(emoji: AppEmoji) {\n const type: EmojiType = emoji.docId ? 'custom' : 'native';\n emoji.emoji = fixEmoji(emoji.emoji);\n // @ts-ignore\n this.getRecentEmojis(type).then((recent) => {\n const i = emoji.docId || emoji.emoji;\n indexOfAndSplice(recent, i);\n recent.unshift(i);\n recent.splice(RECENT_MAX_LENGTH, recent.length - RECENT_MAX_LENGTH);\n\n this.appStateManager.pushToState(type === 'custom' ? 'recentCustomEmoji' : 'recentEmoji', recent);\n this.rootScope.dispatchEvent('emoji_recent', emoji);\n });\n }\n\n public getCustomEmojiDocuments(docIds: DocId[]) {\n if(!docIds.length) return Promise.resolve([] as MyDocument[]);\n return this.apiManager.invokeApi('messages.getCustomEmojiDocuments', {document_id: docIds}).then((documents) => {\n return documents.map((doc) => {\n return this.appDocsManager.saveDoc(doc, {\n type: 'customEmoji',\n docId: doc.id\n });\n });\n });\n }\n\n public getCachedCustomEmojiDocuments(docIds: DocId[]) {\n return docIds.map((docId) => this.appDocsManager.getDoc(docId));\n }\n\n private setDebouncedGetCustomEmojiDocuments() {\n if(this.getCustomEmojiDocumentsPromise || !this.getCustomEmojiDocumentPromises.size) {\n return;\n }\n\n this.getCustomEmojiDocumentsPromise = pause(0).then(() => {\n const allIds = [...this.getCustomEmojiDocumentPromises.keys()];\n const promises: Promise[] = [];\n do {\n const ids = allIds.splice(0, 100);\n const promise = this.getCustomEmojiDocuments(ids).then((docs) => {\n docs.forEach((doc, idx) => {\n const docId = ids[idx];\n const deferred = this.getCustomEmojiDocumentPromises.get(docId);\n this.getCustomEmojiDocumentPromises.delete(docId);\n deferred.resolve(doc);\n });\n });\n\n promises.push(promise);\n } while(allIds.length);\n\n return Promise.all(promises);\n }).finally(() => {\n this.getCustomEmojiDocumentsPromise = undefined;\n this.setDebouncedGetCustomEmojiDocuments();\n });\n }\n\n public getCustomEmojiDocument(id: DocId) {\n let promise = this.getCustomEmojiDocumentPromises.get(id);\n if(promise) {\n return promise;\n }\n\n const doc = this.appDocsManager.getDoc(id);\n if(doc) {\n return doc;\n }\n\n promise = deferredPromise();\n this.getCustomEmojiDocumentPromises.set(id, promise);\n\n this.setDebouncedGetCustomEmojiDocuments();\n\n return promise;\n }\n\n public getCustomEmojis() {\n return this.appStickersManager.getEmojiStickers();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport type GroupCallConnectionInstance from '../calls/groupCallConnectionInstance';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {nextRandomUint} from '../../helpers/random';\nimport {DataJSON, GroupCall, GroupCallParticipant, GroupCallParticipantVideoSourceGroup, InputGroupCall, PhoneJoinGroupCall, PhoneJoinGroupCallPresentation, Update, Updates} from '../../layer';\nimport {logger} from '../logger';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\n\nexport type GroupCallId = GroupCall['id'];\nexport type MyGroupCall = GroupCall | InputGroupCall;\n\nexport type GroupCallConnectionType = 'main' | 'presentation';\n\nexport type JoinGroupCallJsonPayload = {\n fingerprints: {\n fingerprint: string;\n setup: string;\n hash: string;\n }[];\n pwd: string;\n ssrc: number;\n 'ssrc-groups': GroupCallParticipantVideoSourceGroup.groupCallParticipantVideoSourceGroup[];\n ufrag: string;\n};\n\nconst GET_PARTICIPANTS_LIMIT = 100;\n\nexport type GroupCallOutputSource = 'main' | 'presentation' | number;\n\nexport class AppGroupCallsManager extends AppManager {\n private log: ReturnType;\n\n private groupCalls: Map;\n private participants: Map>;\n private nextOffsets: Map;\n\n // private doNotDispatchParticipantUpdate: PeerId;\n\n protected after() {\n this.log = logger('GROUP-CALLS');\n\n this.groupCalls = new Map();\n this.participants = new Map();\n this.nextOffsets = new Map();\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateGroupCall: (update) => {\n this.saveGroupCall(update.call, update.chat_id);\n },\n\n updateGroupCallParticipants: (update) => {\n this.saveGroupCall(update.call);\n\n // this.getGroupCallFull(update.call.id, true); // ! WARNING TEMP\n\n const groupCallId = update.call.id;\n this.saveApiParticipants(groupCallId, update.participants);\n }\n });\n\n this.rootScope.addEventListener('group_call_update', (groupCall) => {\n if(groupCall._ === 'groupCallDiscarded') {\n this.participants.delete(groupCall.id);\n }\n });\n }\n\n public getCachedParticipants(groupCallId: GroupCallId) {\n let participants = this.participants.get(groupCallId);\n if(!participants) {\n this.participants.set(groupCallId, participants = new Map());\n }\n\n return participants;\n }\n\n private prepareToSavingNextOffset(groupCallId: GroupCallId) {\n const nextOffsetsMap = this.nextOffsets;\n\n const setNextOffset = (newNextOffset: string) => {\n if(nextOffsetsMap.get(groupCallId) === nextOffset) {\n nextOffsetsMap.set(groupCallId, newNextOffset);\n }\n };\n\n const nextOffset = nextOffsetsMap.get(groupCallId);\n return {\n nextOffset,\n setNextOffset\n };\n }\n\n public saveApiParticipant(groupCallId: GroupCallId, participant: GroupCallParticipant, skipCounterUpdating?: boolean) {\n const participants = this.getCachedParticipants(groupCallId);\n\n const peerId = getPeerId(participant.peer);\n\n const oldParticipant = participants.get(peerId);\n const hasLeft = participant.pFlags.left;\n if(!oldParticipant && hasLeft) {\n return;\n }\n\n // * fix missing flag\n if(!participant.pFlags.muted && !participant.pFlags.can_self_unmute) {\n participant.pFlags.can_self_unmute = true;\n }\n\n if(oldParticipant) {\n safeReplaceObject(oldParticipant, participant);\n participant = oldParticipant;\n } else {\n participants.set(peerId, participant);\n }\n\n // if(!skipCounterUpdating) {\n const groupCall = this.getGroupCall(groupCallId);\n if(groupCall?._ === 'groupCall') {\n let modified = false;\n if(hasLeft) {\n --groupCall.participants_count;\n modified = true;\n } else if(participant.pFlags.just_joined && !oldParticipant && !participant.pFlags.self) {\n ++groupCall.participants_count;\n modified = true;\n }\n\n if(modified) {\n this.rootScope.dispatchEvent('group_call_update', groupCall);\n }\n }\n // }\n\n if(hasLeft) {\n participants.delete(peerId);\n }\n\n if(oldParticipant || true/* && this.doNotDispatchParticipantUpdate !== peerId */) {\n this.rootScope.dispatchEvent('group_call_participant', {\n groupCallId,\n participant\n });\n }\n }\n\n public saveApiParticipants(groupCallId: GroupCallId, apiParticipants: GroupCallParticipant[], skipCounterUpdating?: boolean) {\n if((apiParticipants as any).saved) return;\n (apiParticipants as any).saved = true;\n apiParticipants.forEach((p) => this.saveApiParticipant(groupCallId, p, skipCounterUpdating));\n }\n\n public async editParticipant(groupCallId: GroupCallId, participant: GroupCallParticipant, options: Partial<{\n muted: boolean,\n volume: number,\n raiseHand: boolean,\n videoStopped: boolean,\n videoPaused: boolean,\n presentationPaused: boolean\n }>) {\n this.saveApiParticipant(groupCallId, participant);\n\n const peerId = participant.pFlags.self ? NULL_PEER_ID : getPeerId(participant.peer);\n const updates = await this.apiManager.invokeApiSingle('phone.editGroupCallParticipant', {\n call: this.getGroupCallInput(groupCallId),\n participant: peerId === NULL_PEER_ID ? this.appPeersManager.getInputPeerSelf() : this.appPeersManager.getInputPeerById(peerId),\n muted: options.muted,\n volume: options.volume,\n raise_hand: options.raiseHand,\n video_paused: options.videoPaused,\n video_stopped: options.videoStopped,\n presentation_paused: options.presentationPaused\n });\n\n // do not replace with peerId because it can be null\n // if(!processUpdate) this.doNotDispatchParticipantUpdate = getPeerId(participant.peer);\n this.apiUpdatesManager.processUpdateMessage(updates);\n // if(!processUpdate) this.doNotDispatchParticipantUpdate = undefined;\n }\n\n public getGroupCall(id: GroupCallId) {\n return this.groupCalls.get(id);\n }\n\n public async getGroupCallFull(id: GroupCallId, override?: boolean): Promise {\n const call = this.getGroupCall(id);\n if(call && call._ !== 'inputGroupCall' && !override) {\n return call;\n }\n\n const limit = this.getCachedParticipants(id).size ? 0 : GET_PARTICIPANTS_LIMIT;\n return this.apiManager.invokeApiSingleProcess({\n method: 'phone.getGroupCall',\n params: {\n call: this.getGroupCallInput(id),\n limit\n },\n processResult: (groupCall) => {\n // ? maybe I should save group call after participants so I can avoid passing the 'skipCounterUpdating' flag ?\n this.appUsersManager.saveApiUsers(groupCall.users);\n this.appChatsManager.saveApiChats(groupCall.chats);\n this.saveApiParticipants(id, groupCall.participants, true);\n const call = this.saveGroupCall(groupCall.call) as GroupCall;\n\n if(limit && this.nextOffsets.get(id) === undefined) {\n this.nextOffsets.set(id, groupCall.participants_next_offset);\n }\n\n return call;\n }\n });\n }\n\n public saveGroupCall(call: MyGroupCall, chatId?: ChatId) {\n const oldCall = this.groupCalls.get(call.id);\n const shouldUpdate = call._ !== 'inputGroupCall' && (!oldCall || oldCall._ !== 'groupCallDiscarded');\n if(oldCall) {\n if(shouldUpdate) {\n safeReplaceObject(oldCall, call);\n }\n\n call = oldCall;\n } else {\n this.groupCalls.set(call.id, call);\n }\n\n if(shouldUpdate) {\n this.rootScope.dispatchEvent('group_call_update', call as any);\n }\n\n return call;\n }\n\n public async createGroupCall(chatId: ChatId, scheduleDate?: number, title?: string) {\n const updates = await this.apiManager.invokeApi('phone.createGroupCall', {\n peer: this.appPeersManager.getInputPeerById(chatId.toPeerId(true)),\n random_id: nextRandomUint(32),\n schedule_date: scheduleDate,\n title\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateGroupCall') as Update.updateGroupCall;\n return update.call;\n }\n\n public getGroupCallInput(id: GroupCallId): InputGroupCall {\n const groupCall = this.getGroupCall(id);\n return {\n _: 'inputGroupCall',\n id: groupCall.id,\n access_hash: groupCall.access_hash\n };\n }\n\n // public generateSelfParticipant(): GroupCallParticipant {\n // const mainSources = this.currentGroupCall.connections.main.sources;\n // const presentationSources = this.currentGroupCall.connections.presentation?.sources;\n // return {\n // _: 'groupCallParticipant',\n // pFlags: {\n // can_self_unmute: true,\n // self: true\n // },\n // source: mainSources.audio.source,\n // video: this.generateSelfVideo(mainSources.video),\n // presentation: presentationSources && this.generateSelfVideo(presentationSources.video, presentationSources.audio?.source),\n // date: tsNow(true),\n // peer: this.appPeersManager.getOutputPeer(rootScope.myId)\n // };\n // }\n\n public async getGroupCallParticipants(id: GroupCallId) {\n const {nextOffset, setNextOffset} = this.prepareToSavingNextOffset(id);\n\n if(nextOffset !== '') {\n await this.apiManager.invokeApiSingleProcess({\n method: 'phone.getGroupParticipants',\n params: {\n call: this.getGroupCallInput(id),\n ids: [],\n sources: [],\n offset: nextOffset || '',\n limit: GET_PARTICIPANTS_LIMIT\n },\n processResult: (groupCallParticipants) => {\n const newNextOffset = groupCallParticipants.count === groupCallParticipants.participants.length ? '' : groupCallParticipants.next_offset;\n\n this.appChatsManager.saveApiChats(groupCallParticipants.chats);\n this.appUsersManager.saveApiUsers(groupCallParticipants.users);\n this.saveApiParticipants(id, groupCallParticipants.participants);\n\n setNextOffset(newNextOffset);\n }\n });\n }\n\n return {\n participants: this.getCachedParticipants(id),\n isEnd: this.nextOffsets.get(id) === ''\n };\n }\n\n public hangUp(id: GroupCallId, discard?: boolean | number) {\n const groupCallInput = this.getGroupCallInput(id);\n let promise: Promise;\n if(typeof(discard) === 'boolean' && discard) {\n promise = this.apiManager.invokeApi('phone.discardGroupCall', {\n call: groupCallInput\n });\n } else if(typeof(discard) === 'number') {\n promise = this.apiManager.invokeApi('phone.leaveGroupCall', {\n call: groupCallInput,\n source: discard\n });\n } else {\n promise = this.apiManager.invokeApi('phone.joinGroupCall', {\n call: groupCallInput,\n join_as: this.appPeersManager.getInputPeerSelf(),\n muted: true,\n video_stopped: true,\n params: {\n _: 'dataJSON',\n data: ''\n }\n });\n }\n\n return promise.then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public async joinGroupCall(groupCallId: GroupCallId, params: DataJSON, options: GroupCallConnectionInstance['options']) {\n const groupCallInput = this.getGroupCallInput(groupCallId);\n let promise: Promise;\n if(options.type === 'main') {\n const request: PhoneJoinGroupCall = {\n call: groupCallInput,\n join_as: this.appPeersManager.getInputPeerSelf(),\n params,\n muted: options.isMuted,\n video_stopped: !options.joinVideo\n };\n\n promise = this.apiManager.invokeApi('phone.joinGroupCall', request);\n this.log(`[api] joinGroupCall id=${groupCallId}`, request);\n } else {\n const request: PhoneJoinGroupCallPresentation = {\n call: groupCallInput,\n params\n };\n\n promise = this.apiManager.invokeApi('phone.joinGroupCallPresentation', request);\n this.log(`[api] joinGroupCallPresentation id=${groupCallId}`, request);\n }\n\n const updates = await promise;\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateGroupCallConnection') as Update.updateGroupCallConnection;\n return update;\n }\n\n public leaveGroupCallPresentation(groupCallId: GroupCallId) {\n return this.apiManager.invokeApi('phone.leaveGroupCallPresentation', {\n call: this.getGroupCallInput(groupCallId)\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputPhoto} from '../../../../layer';\nimport {MyPhoto} from '../../appPhotosManager';\n\nexport default function getPhotoInput(photo: MyPhoto): InputPhoto.inputPhoto {\n return {\n _: 'inputPhoto',\n id: photo.id,\n access_hash: photo.access_hash,\n file_reference: photo.file_reference\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputMedia} from '../../../../layer';\nimport {MyPhoto} from '../../appPhotosManager';\nimport getPhotoInput from './getPhotoInput';\n\nexport default function getPhotoMediaInput(photo: MyPhoto): InputMedia.inputMediaPhoto {\n return {\n _: 'inputMediaPhoto',\n id: getPhotoInput(photo),\n ttl_seconds: 0,\n pFlags: {}\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Document, InputMedia} from '../../../../layer';\n\nexport default function getMediaInput(doc: Document.document): InputMedia.inputMediaDocument {\n return {\n _: 'inputMediaDocument',\n id: {\n _: 'inputDocument',\n id: doc.id,\n access_hash: doc.access_hash,\n file_reference: doc.file_reference\n },\n ttl_seconds: 0,\n pFlags: {}\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport type {MyPhoto} from './appPhotosManager';\nimport type {MyTopPeer} from './appUsersManager';\nimport type {AppMessagesManager, MessageSendingParams} from './appMessagesManager';\nimport {BotInlineResult, GeoPoint, InputGeoPoint, InputMedia, MessageEntity, MessageMedia, MessagesBotResults, ReplyMarkup} from '../../layer';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport {AppManager} from './manager';\nimport getPhotoMediaInput from './utils/photos/getPhotoMediaInput';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport generateQId from './utils/inlineBots/generateQId';\nimport getDocumentMediaInput from './utils/docs/getDocumentMediaInput';\n\nexport class AppInlineBotsManager extends AppManager {\n private inlineResults: {[queryAndResultIds: string]: BotInlineResult} = {};\n private setHash: {\n [botId: UserId]: {\n peerId: PeerId,\n time: number\n }\n } = {};\n\n public getGeoInput(geo: GeoPoint): InputGeoPoint {\n return geo._ === 'geoPoint' ? {\n _: 'inputGeoPoint',\n lat: geo.lat,\n long: geo.long,\n accuracy_radius: geo.accuracy_radius\n } : {\n _: 'inputGeoPointEmpty'\n };\n }\n\n public getInlineResults(peerId: PeerId, botId: BotId, query = '', offset = '', geo?: GeoPoint) {\n return this.apiManager.invokeApi('messages.getInlineBotResults', {\n bot: this.appUsersManager.getUserInput(botId),\n peer: this.appPeersManager.getInputPeerById(peerId),\n query,\n geo_point: geo ? this.getGeoInput(geo) : undefined,\n offset\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true}).then((botResults) => {\n const queryId = botResults.query_id;\n\n /* if(botResults.switch_pm) {\n botResults.switch_pm.rText = wrapRichText(botResults.switch_pm.text, {noLinebreaks: true, noLinks: true});\n } */\n\n botResults.results.forEach((result) => {\n if(result._ === 'botInlineMediaResult') {\n if(result.document) {\n result.document = this.appDocsManager.saveDoc(result.document);\n }\n\n if(result.photo) {\n result.photo = this.appPhotosManager.savePhoto(result.photo);\n }\n }\n\n this.inlineResults[generateQId(queryId, result.id)] = result;\n });\n\n return botResults;\n });\n }\n\n private pushPopularBot(botId: BotId) {\n this.appUsersManager.getTopPeers('bots_inline').then((topPeers) => {\n const botPeerId = botId.toPeerId();\n const index = topPeers.findIndex((topPeer) => topPeer.id === botPeerId);\n let topPeer: MyTopPeer;\n if(index !== -1) {\n topPeer = topPeers[index];\n } else {\n topPeer = {\n id: botPeerId,\n rating: 0\n };\n }\n\n ++topPeer.rating;\n insertInDescendSortedArray(topPeers, topPeer, 'rating');\n\n this.appStateManager.setKeyValueToStorage('topPeersCache');\n\n // rootScope.$broadcast('inline_bots_popular')\n });\n }\n\n public switchToPM(fromPeerId: PeerId, botId: BotId, startParam: string) {\n this.setHash[botId] = {peerId: fromPeerId, time: Date.now()};\n return this.appMessagesManager.startBot(botId, undefined, startParam);\n }\n\n /*\n function resolveInlineMention (username) {\n return AppPeersManager.resolveUsername(username).then(function (peerId) {\n if (peerId.isUser()) {\n var bot = AppUsersManager.getUser(peerId)\n if (bot.pFlags.bot && bot.bot_inline_placeholder !== undefined) {\n var resolvedBot = {\n username: username,\n id: peerId,\n placeholder: bot.bot_inline_placeholder\n }\n if (bot.pFlags.bot_inline_geo &&\n GeoLocationManager.isAvailable()) {\n return checkGeoLocationAccess(peerId).then(function () {\n return GeoLocationManager.getPosition().then(function (coords) {\n resolvedBot.geo = coords\n return qSync.when(resolvedBot)\n })\n })['catch'](function () {\n return qSync.when(resolvedBot)\n })\n }\n return qSync.when(resolvedBot)\n }\n }\n return $q.reject()\n }, function (error) {\n error.handled = true\n return $q.reject(error)\n })\n }\n\n function regroupWrappedResults (results, rowW, rowH) {\n if (!results ||\n !results[0] ||\n ['photo', 'gif', 'sticker'].indexOf(results[0].type) === -1) {\n return\n }\n var ratios = []\n angular.forEach(results, function (result) {\n var w\n var h, doc\n var photo\n if (result._ === 'botInlineMediaResult') {\n if (doc = result.document) {\n w = result.document.w\n h = result.document.h\n }\n else if (photo = result.photo) {\n var photoSize = (photo.sizes || [])[0]\n w = photoSize && photoSize.w\n h = photoSize && photoSize.h\n }\n }else {\n w = result.w\n h = result.h\n }\n if (!w || !h) {\n w = h = 1\n }\n ratios.push(w / h)\n })\n\n var rows = []\n var curCnt = 0\n var curW = 0\n angular.forEach(ratios, function (ratio) {\n var w = ratio * rowH\n curW += w\n if (!curCnt || curCnt < 4 && curW < (rowW * 1.1)) {\n curCnt++\n } else {\n rows.push(curCnt)\n curCnt = 1\n curW = w\n }\n })\n if (curCnt) {\n rows.push(curCnt)\n }\n\n var i = 0\n var thumbs = []\n var lastRowI = rows.length - 1\n angular.forEach(rows, function (rowCnt, rowI) {\n var lastRow = rowI === lastRowI\n var curRatios = ratios.slice(i, i + rowCnt)\n var sumRatios = 0\n angular.forEach(curRatios, function (ratio) {\n sumRatios += ratio\n })\n angular.forEach(curRatios, function (ratio, j) {\n var thumbH = rowH\n var thumbW = rowW * ratio / sumRatios\n var realW = thumbH * ratio\n if (lastRow && thumbW > realW) {\n thumbW = realW\n }\n var result = results[i + j]\n result.thumbW = Math.floor(thumbW) - 2\n result.thumbH = Math.floor(thumbH) - 2\n })\n\n i += rowCnt\n })\n } */\n\n public async checkSwitchReturn(botId: BotId) {\n const bot = this.appUsersManager.getUser(botId);\n if(!bot || !bot.pFlags.bot || !bot.bot_inline_placeholder) {\n return;\n }\n\n const peerData = this.setHash[botId];\n if(peerData) {\n delete this.setHash[botId];\n if((Date.now() - peerData.time) < 3600e3) {\n return peerData.peerId;\n }\n }\n }\n\n public switchInlineQuery(peerId: PeerId, threadId: number, botId: BotId, query: string) {\n this.appDraftsManager.setDraft(peerId, threadId, '@' + this.appPeersManager.getPeerUsername(botId.toPeerId()) + ' ' + query);\n }\n\n public callbackButtonClick(peerId: PeerId, mid: number, button: any) {\n return this.apiManager.invokeApi('messages.getBotCallbackAnswer', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid),\n data: button.data\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true});\n }\n\n /* function gameButtonClick (id) {\n var message = AppMessagesManager.getMessage(id)\n var peerId = AppMessagesManager.getMessagePeer(message)\n\n return MtpApiManager.invokeApi('messages.getBotCallbackAnswer', {\n peer: AppPeersManager.getInputPeerByID(peerId),\n msg_id: AppMessagesIDsManager.getMessageLocalID(id)\n }, {timeout: 1, stopTime: -1, noErrorBox: true}).then(function (callbackAnswer) {\n if (typeof callbackAnswer.message === 'string' &&\n callbackAnswer.message.length) {\n showCallbackMessage(callbackAnswer.message, callbackAnswer.pFlags.alert)\n }\n else if (typeof callbackAnswer.url === 'string') {\n AppGamesManager.openGame(message.media.game.id, id, callbackAnswer.url)\n }\n })\n } */\n\n public sendInlineResult(peerId: PeerId, botId: BotId, queryAndResultIds: string, options: MessageSendingParams & Partial<{\n viaBotId: BotId,\n queryId: string,\n resultId: string,\n replyMarkup: ReplyMarkup,\n entities: MessageEntity[],\n clearDraft: true,\n geoPoint: GeoPoint\n }> = {}) {\n const inlineResult = this.inlineResults[queryAndResultIds];\n if(!inlineResult) {\n return;\n }\n\n this.pushPopularBot(botId);\n const splitted = queryAndResultIds.split('_');\n const queryID = splitted.shift();\n const resultID = splitted.join('_');\n options.viaBotId = botId;\n options.queryId = queryID;\n options.resultId = resultID;\n if(inlineResult.send_message.reply_markup) {\n options.replyMarkup = inlineResult.send_message.reply_markup;\n }\n\n if(inlineResult.send_message._ === 'botInlineMessageText') {\n options.entities = inlineResult.send_message.entities;\n this.appMessagesManager.sendText(peerId, inlineResult.send_message.message, options);\n } else {\n let caption = '';\n let inputMedia: Parameters[1], messageMedia: MessageMedia;\n const sendMessage = inlineResult.send_message;\n switch(sendMessage._) {\n case 'botInlineMessageMediaAuto': {\n caption = sendMessage.message;\n\n if(inlineResult._ === 'botInlineMediaResult') {\n const {document, photo} = inlineResult;\n if(document) {\n inputMedia = getDocumentMediaInput(document as MyDocument);\n } else {\n inputMedia = getPhotoMediaInput(photo as MyPhoto);\n }\n }\n\n break;\n }\n\n case 'botInlineMessageMediaGeo': {\n inputMedia = {\n _: 'inputMediaGeoPoint',\n geo_point: this.getGeoInput(sendMessage.geo)\n };\n\n options.geoPoint = sendMessage.geo;\n\n break;\n }\n\n case 'botInlineMessageMediaVenue': {\n inputMedia = {\n _: 'inputMediaVenue',\n geo_point: this.getGeoInput(sendMessage.geo),\n title: sendMessage.title,\n address: sendMessage.address,\n provider: sendMessage.provider,\n venue_id: sendMessage.venue_id,\n venue_type: sendMessage.venue_type\n };\n\n options.geoPoint = sendMessage.geo;\n\n break;\n }\n\n case 'botInlineMessageMediaContact': {\n inputMedia = {\n _: 'inputMediaContact',\n phone_number: sendMessage.phone_number,\n first_name: sendMessage.first_name,\n last_name: sendMessage.last_name,\n vcard: sendMessage.vcard\n };\n\n break;\n }\n\n case 'botInlineMessageMediaInvoice': {\n // const photo = sendMessage.photo;\n // inputMedia = {\n // _: 'inputMediaInvoice',\n // description: sendMessage.description,\n // title: sendMessage.title,\n // photo: photo && {\n // _: 'inputWebDocument',\n // attributes: photo.attributes,\n // mime_type: photo.mime_type,\n // size: photo.size,\n // url: photo.url\n // },\n // invoice: undefined,\n // payload: undefined,\n // provider: undefined,\n // provider_data: undefined,\n // start_param: undefined\n // };\n\n messageMedia = {\n _: 'messageMediaInvoice',\n title: sendMessage.title,\n description: sendMessage.description,\n photo: sendMessage.photo,\n currency: sendMessage.currency,\n total_amount: sendMessage.total_amount,\n pFlags: {\n shipping_address_requested: sendMessage.pFlags.shipping_address_requested,\n test: sendMessage.pFlags.test\n },\n start_param: undefined\n };\n\n break;\n }\n }\n\n if(!inputMedia && messageMedia) {\n inputMedia = {\n _: 'messageMediaPending',\n messageMedia\n };\n }\n\n this.appMessagesManager.sendOther(peerId, inputMedia, options);\n }\n }\n\n /* function checkGeoLocationAccess (botID) {\n var key = 'bot_access_geo' + botID\n return Storage.get(key).then(function (geoAccess) {\n if (geoAccess && geoAccess.granted) {\n return true\n }\n return ErrorService.confirm({\n type: 'BOT_ACCESS_GEO_INLINE'\n }).then(function () {\n var setHash = {}\n setHash[key] = {granted: true, time: tsNow()}\n Storage.set(setHash)\n return true\n }, function () {\n var setHash = {}\n setHash[key] = {denied: true, time: tsNow()}\n Storage.set(setHash)\n return $q.reject()\n })\n })\n } */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MESSAGE_ID_INCREMENT} from './utils/messageId';\nimport generateMessageId from './utils/messageId/generateMessageId';\n\nexport class AppMessagesIdsManager {\n private tempNum = 0;\n\n public generateTempMessageId(messageId: number) {\n const num = ++this.tempNum;\n return generateMessageId(messageId) + (num & (MESSAGE_ID_INCREMENT - 1));\n }\n}\n","export default function splitStringByLength(str: string, maxLength: number) {\n if(str.length < maxLength) return [str];\n let length = 0, lastSliceStartIndex = 0, arrayIndex = 0;\n const delimiter = ' ';// '\\n';\n const out: string[] = [];\n\n const cut = (end?: number) => {\n let part = str.slice(lastSliceStartIndex, end);\n const _arrayIndex = arrayIndex++;\n if(part.length > maxLength) {\n const overflowPart = part.slice(maxLength);\n const splitted = splitStringByLength(overflowPart, maxLength);\n splitted.forEach((part) => {\n out[arrayIndex++] = part;\n });\n\n part = part.slice(0, maxLength);\n }\n\n lastSliceStartIndex = end;\n length = 0;\n out[_arrayIndex] = (out[_arrayIndex] || '') + part;\n };\n\n let lastIndex = 0;\n do {\n let index = str.indexOf(delimiter, lastIndex);\n if(index === -1) {\n if(lastIndex !== (str.length - 1)) {\n cut();\n }\n\n break;\n }\n\n index += delimiter.length;\n\n const partLength = index - lastIndex;\n if((length + partLength) > maxLength) {\n cut(length);\n }\n\n lastIndex = index;\n length += partLength;\n } while(true);\n\n return out;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {TabState} from '../mtproto/mtprotoworker';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\n\ntype Tab = {\n source: MessageEventSource,\n state: TabState\n};\n\nexport class AppTabsManager {\n private tabs: Map;\n\n constructor() {\n this.tabs = new Map();\n }\n\n public start() {\n const port = MTProtoMessagePort.getInstance();\n\n port.addEventListener('tabState', (state, source) => {\n const tab = this.tabs.get(source);\n tab.state = state;\n });\n }\n\n public getTabs() {\n return [...this.tabs.values()].filter((tab) => !!tab.state);\n }\n\n public addTab(source: MessageEventSource) {\n const tab: Tab = {\n source,\n state: undefined\n };\n\n this.tabs.set(source, tab);\n }\n\n public deleteTab(source: MessageEventSource) {\n this.tabs.delete(source);\n }\n}\n\nconst appTabsManager = new AppTabsManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appTabsManager = appTabsManager);\nexport default appTabsManager;\n","import {InputDocument} from '../../../../layer';\nimport type {MyDocument} from '../../appDocsManager';\n\nexport default function getDocumentInput(doc: MyDocument): InputDocument {\n return {\n _: 'inputDocument',\n id: doc.id,\n access_hash: doc.access_hash,\n file_reference: doc.file_reference\n };\n}\n","export default function setBooleanFlag(obj: T, key: keyof T, value: boolean) {\n // @ts-ignore\n if(value) obj[key] = true;\n else delete obj[key];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ApiFileManager} from '../mtproto/apiFileManager';\nimport type {MediaSize} from '../../helpers/mediaSize';\nimport type {Progress} from './appDownloadManager';\nimport type {VIDEO_MIME_TYPE} from '../../environment/videoMimeTypesSupport';\nimport LazyLoadQueueBase from '../../components/lazyLoadQueueBase';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport tsNow from '../../helpers/tsNow';\nimport {randomLong} from '../../helpers/random';\nimport {Chat, ChatFull, Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageFwdHeader, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MethodDeclMap, NotifyPeer, PeerNotifySettings, PhotoSize, SendMessageAction, Update, Photo, Updates, ReplyMarkup, InputPeer, InputPhoto, InputDocument, InputGeoPoint, WebPage, GeoPoint, ReportReason, MessagesGetDialogs, InputChannel, InputDialogPeer, ReactionCount, MessagePeerReaction, MessagesSearchCounter, Peer, MessageReactions, Document, InputFile, Reaction, ForumTopic as MTForumTopic, MessagesForumTopics, MessagesGetReplies, MessagesGetHistory, MessagesAffectedHistory, UrlAuthResult, MessagesTranscribedAudio} from '../../layer';\nimport {ArgumentTypes, InvokeApiOptions} from '../../types';\nimport {logger, LogTypes} from '../logger';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport DialogsStorage, {GLOBAL_FOLDER_ID} from '../storages/dialogs';\nimport {ChatRights} from './appChatsManager';\nimport {MyDocument} from './appDocsManager';\nimport {MyPhoto} from './appPhotosManager';\nimport {getFileNameByLocation} from '../../helpers/fileName';\nimport DEBUG from '../../config/debug';\nimport SlicedArray, {Slice, SliceEnd} from '../../helpers/slicedArray';\nimport {FOLDER_ID_ALL, GENERAL_TOPIC_ID, MUTE_UNTIL, NULL_PEER_ID, REAL_FOLDER_ID, REPLIES_HIDDEN_CHANNEL_ID, REPLIES_PEER_ID, SERVICE_PEER_ID, THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\n// import telegramMeWebManager from '../mtproto/telegramMeWebManager';\nimport {getMiddleware} from '../../helpers/middleware';\nimport assumeType from '../../helpers/assumeType';\nimport copy from '../../helpers/object/copy';\nimport getObjectKeysAndSort from '../../helpers/object/getObjectKeysAndSort';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport splitStringByLength from '../../helpers/string/splitStringByLength';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {AppManager} from './manager';\nimport getPhotoMediaInput from './utils/photos/getPhotoMediaInput';\nimport getPhotoDownloadOptions from './utils/photos/getPhotoDownloadOptions';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport mergeEntities from '../richTextProcessor/mergeEntities';\nimport parseEntities from '../richTextProcessor/parseEntities';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport filterMessagesByInputFilter from './utils/messages/filterMessagesByInputFilter';\nimport ctx from '../../environment/ctx';\nimport {getEnvironment} from '../../environment/utils';\nimport getDialogIndex from './utils/dialogs/getDialogIndex';\nimport defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';\nimport getDocumentMediaInput from './utils/docs/getDocumentMediaInput';\nimport getDocumentInputFileName from './utils/docs/getDocumentInputFileName';\nimport getFileNameForUpload from '../../helpers/getFileNameForUpload';\nimport noop from '../../helpers/noop';\nimport appTabsManager from './appTabsManager';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport getAlbumText from './utils/messages/getAlbumText';\nimport pause from '../../helpers/schedulers/pause';\nimport makeError from '../../helpers/makeError';\nimport getStickerEffectThumb from './utils/stickers/getStickerEffectThumb';\nimport getDocumentInput from './utils/docs/getDocumentInput';\nimport reactionsEqual from './utils/reactions/reactionsEqual';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport {BroadcastEvents} from '../rootScope';\nimport setBooleanFlag from '../../helpers/object/setBooleanFlag';\nimport getMessageThreadId from './utils/messages/getMessageThreadId';\n\n// console.trace('include');\n// TODO: ะตัะปะธ ัƒะดะฐะปะธั‚ัŒ ะดะธะฐะปะพะณ ะฝะฐั…ะพะดัััŒ ะฒ ะฟะฐะฟะบะต, ั‚ะพ ะพะฝ ะฝะต ัƒะดะฐะปะธั‚ัั ะธะท ะฟะฐะฟะบะธ ะธ ะฑัƒะดะตั‚ ะฒะธะดะตะฝ ะฒ ะฝะฐัั‚ั€ะพะนะบะฐั…\n\nconst APITIMEOUT = 0;\nconst DO_NOT_READ_HISTORY = false;\n\nexport type SendFileDetails = {\n file: File | Blob | MyDocument,\n} & Partial<{\n duration: number,\n width: number,\n height: number,\n objectURL: string,\n thumb: {\n blob: Blob,\n url: string,\n size: MediaSize\n },\n strippedBytes: PhotoSize.photoStrippedSize['bytes'],\n spoiler: boolean\n}>;\n\nexport type HistoryStorage = {\n count: number | null,\n history: SlicedArray,\n\n maxId?: number,\n readPromise?: Promise,\n readMaxId?: number,\n readOutboxMaxId?: number,\n triedToReadMaxId?: number,\n\n maxOutId?: number,\n replyMarkup?: Exclude\n};\n\nexport type HistoryResult = {\n count: number,\n history: number[],\n isEnd: ReturnType['getEnds']>,\n offsetIdOffset?: number,\n};\n\nexport type Dialog = MTDialog.dialog;\nexport type ForumTopic = MTForumTopic.forumTopic;\n\nexport type MyMessage = Message.message | Message.messageService;\nexport type MyInputMessagesFilter = 'inputMessagesFilterEmpty'\n | 'inputMessagesFilterPhotos'\n | 'inputMessagesFilterPhotoVideo'\n | 'inputMessagesFilterVideo'\n | 'inputMessagesFilterDocument'\n | 'inputMessagesFilterVoice'\n | 'inputMessagesFilterRoundVoice'\n | 'inputMessagesFilterRoundVideo'\n | 'inputMessagesFilterMusic'\n | 'inputMessagesFilterUrl'\n | 'inputMessagesFilterMyMentions'\n | 'inputMessagesFilterChatPhotos'\n | 'inputMessagesFilterPinned';\n\nexport type PinnedStorage = Partial<{\n promise: Promise,\n count: number,\n maxId: number\n}>;\nexport type MessagesStorage = Map & {peerId: PeerId, type: MessagesStorageType, key: MessagesStorageKey};\nexport type MessagesStorageType = 'scheduled' | 'history' | 'grouped';\nexport type MessagesStorageKey = `${PeerId}_${MessagesStorageType}`;\n\nexport type MyMessageActionType = Message.messageService['action']['_'];\n\ntype PendingAfterMsg = Partial;\n\ntype MapValueType = A extends Map ? V : never;\n\nexport type BatchUpdates = {\n 'messages_reactions': AppMessagesManager['batchUpdateReactions'],\n 'messages_views': AppMessagesManager['batchUpdateViews']\n};\n\ntype PendingMessageDetails = {\n peerId: PeerId,\n tempId: number,\n threadId: number,\n storage: MessagesStorage,\n sequential?: boolean\n};\n\nconst processAfter = (cb: () => void) => {\n // setTimeout(cb, 0);\n cb();\n};\n\nconst UPDATE_STICKERSET_ORDER = true;\n\nexport type MessageSendingParams = Partial<{\n threadId: number,\n replyToMsgId: number,\n scheduleDate: number,\n silent: boolean,\n sendAsPeerId: number,\n}>;\n\nexport class AppMessagesManager extends AppManager {\n private messagesStorageByPeerId: {[peerId: string]: MessagesStorage};\n private groupedMessagesStorage: {[groupId: string]: MessagesStorage}; // will be used for albums\n private scheduledMessagesStorage: {[peerId: PeerId]: MessagesStorage};\n private historiesStorage: {\n [peerId: PeerId]: HistoryStorage\n };\n private threadsStorage: {\n [peerId: PeerId]: {\n [threadId: string]: HistoryStorage\n }\n };\n private searchesStorage: {\n [peerId: PeerId]: Partial<{\n [inputFilter in MyInputMessagesFilter]: {\n count?: number,\n history: number[]\n }\n }>\n };\n private pinnedMessages: {[key: string]: PinnedStorage};\n\n private threadsServiceMessagesIdsStorage: {[peerId_threadId: string]: number};\n private threadsToReplies: {\n [peerId_threadId: string]: string;\n };\n\n private pendingByRandomId: {\n [randomId: string]: PendingMessageDetails\n } = {};\n private pendingByMessageId: {[mid: string]: Long} = {};\n private pendingAfterMsgs: {[peerId: PeerId]: PendingAfterMsg} = {};\n public pendingTopMsgs: {[peerId: PeerId]: number} = {};\n private tempFinalizeCallbacks: {\n [tempId: string]: {\n [callbackName: string]: Partial<{\n deferred: CancellablePromise,\n callback: (message: MyMessage) => Promise\n }>\n }\n } = {};\n\n private sendSmthLazyLoadQueue = new LazyLoadQueueBase(10);\n\n private needSingleMessages: Map>> = new Map();\n private fetchSingleMessagesPromise: Promise;\n private extendedMedia: Map>> = new Map();\n\n private maxSeenId = 0;\n\n public migratedFromTo: {[peerId: PeerId]: PeerId} = {};\n public migratedToFrom: {[peerId: PeerId]: PeerId} = {};\n\n private newDialogsHandlePromise: Promise;\n private newDialogsToHandle: Map}> = new Map();\n public newUpdatesAfterReloadToHandle: {[key: string]: Set} = {};\n\n private notificationsHandlePromise: number;\n private notificationsToHandle: {[key: string]: {\n fwdCount: number,\n fromId: PeerId,\n topMessage?: MyMessage\n }} = {};\n\n private reloadConversationsPromise: Promise;\n private reloadConversationsPeers: Map}> = new Map();\n\n public log = logger('MESSAGES', LogTypes.Error | LogTypes.Debug | LogTypes.Log | LogTypes.Warn);\n\n private groupedTempId = 0;\n\n private typings: {[key: string]: {action: SendMessageAction, timeout?: number}} = {};\n\n private middleware: ReturnType;\n\n private unreadMentions: {[key: string]: SlicedArray} = {};\n private goToNextMentionPromises: {[key: string]: Promise} = {};\n\n private batchUpdates: {\n [k in keyof BatchUpdates]?: {\n callback: BatchUpdates[k],\n batch: ArgumentTypes[0]\n }\n } = {};\n private batchUpdatesDebounced: () => Promise;\n\n private uploadFilePromises: {[fileName: string]: CancellablePromise};\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateMessageID: this.onUpdateMessageId,\n\n updateNewDiscussionMessage: this.onUpdateNewMessage,\n updateNewMessage: this.onUpdateNewMessage,\n updateNewChannelMessage: this.onUpdateNewMessage,\n\n updateDialogUnreadMark: this.onUpdateDialogUnreadMark,\n\n updateEditMessage: this.onUpdateEditMessage,\n updateEditChannelMessage: this.onUpdateEditMessage,\n\n updateMessageReactions: this.onUpdateMessageReactions,\n\n updateReadChannelDiscussionInbox: this.onUpdateReadHistory,\n updateReadChannelDiscussionOutbox: this.onUpdateReadHistory,\n updateReadHistoryInbox: this.onUpdateReadHistory,\n updateReadHistoryOutbox: this.onUpdateReadHistory,\n updateReadChannelInbox: this.onUpdateReadHistory,\n updateReadChannelOutbox: this.onUpdateReadHistory,\n\n updateChannelReadMessagesContents: this.onUpdateReadMessagesContents,\n updateReadMessagesContents: this.onUpdateReadMessagesContents,\n\n updateChannelAvailableMessages: this.onUpdateChannelAvailableMessages,\n\n updateDeleteMessages: this.onUpdateDeleteMessages,\n updateDeleteChannelMessages: this.onUpdateDeleteMessages,\n\n updateChannel: this.onUpdateChannel,\n\n updateChannelReload: this.onUpdateChannelReload,\n\n updateChannelMessageViews: this.onUpdateChannelMessageViews,\n\n updateServiceNotification: this.onUpdateServiceNotification,\n\n updatePinnedMessages: this.onUpdatePinnedMessages,\n updatePinnedChannelMessages: this.onUpdatePinnedMessages,\n\n updateNotifySettings: this.onUpdateNotifySettings,\n\n updateNewScheduledMessage: this.onUpdateNewScheduledMessage,\n\n updateDeleteScheduledMessages: this.onUpdateDeleteScheduledMessages,\n\n updateMessageExtendedMedia: this.onUpdateMessageExtendedMedia,\n\n updateTranscribedAudio: this.onUpdateTranscribedAudio\n });\n\n // ! Invalidate notify settings, can optimize though\n this.rootScope.addEventListener('notify_peer_type_settings', ({key, settings}) => {\n const dialogs = this.dialogsStorage.getFolderDialogs(0).concat(this.dialogsStorage.getFolderDialogs(1));\n let filterFunc: (dialog: typeof dialogs[0]) => boolean;\n if(key === 'notifyUsers') filterFunc = (dialog) => dialog.peerId.isUser();\n else if(key === 'notifyBroadcasts') filterFunc = (dialog) => this.appPeersManager.isBroadcast(dialog.peerId);\n else filterFunc = (dialog) => this.appPeersManager.isAnyGroup(dialog.peerId);\n\n dialogs\n .filter(filterFunc)\n .forEach((dialog) => {\n this.rootScope.dispatchEvent('dialog_notify_settings', dialog);\n });\n });\n\n this.rootScope.addEventListener('webpage_updated', ({id, msgs}) => {\n msgs.forEach(({peerId, mid, isScheduled}) => {\n const storage = isScheduled ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n const message = this.getMessageFromStorage(storage, mid) as Message.message;\n if(!message) return;\n message.media = {\n _: 'messageMediaWebPage',\n webpage: this.appWebPagesManager.getCachedWebPage(id)\n };\n\n this.rootScope.dispatchEvent('message_edit', {\n storageKey: storage.key,\n peerId,\n mid,\n message\n });\n });\n });\n\n this.rootScope.addEventListener('draft_updated', ({peerId, threadId, draft}) => {\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, threadId);\n if(dialog) {\n dialog.draft = draft;\n\n let drop = false;\n if(!draft && !getServerMessageId(dialog.top_message)) {\n this.dialogsStorage.dropDialog(peerId);\n drop = true;\n } else {\n this.dialogsStorage.generateIndexForDialog(dialog);\n this.dialogsStorage.pushDialog({dialog});\n }\n\n this.rootScope.dispatchEvent('dialog_draft', {\n peerId,\n dialog,\n drop,\n draft\n });\n } else if(threadId) {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n if(!chat) {\n this.reloadConversation(peerId);\n } else if((chat as Chat.channel).pFlags.forum) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n }\n } else {\n this.reloadConversation(peerId);\n }\n });\n\n this.rootScope.addEventListener('poll_update', ({poll}) => {\n const set = this.appPollsManager.pollToMessages[poll.id];\n if(set) {\n for(const key of set) {\n const [peerId, mid] = key.split('_');\n\n const message = this.getMessageByPeer(peerId.toPeerId(), +mid);\n if(message) {\n this.setDialogToStateIfMessageIsTop(message);\n }\n }\n }\n });\n\n // * clear forum cache\n this.rootScope.addEventListener('chat_toggle_forum', ({chatId, enabled}) => {\n const peerId = chatId.toPeerId(true);\n if(!enabled) {\n delete this.threadsStorage[peerId];\n\n for(const key in this.pinnedMessages) {\n if(+key === peerId && key.startsWith(peerId + '_')) {\n delete this.pinnedMessages[key];\n }\n }\n }\n });\n\n this.batchUpdatesDebounced = debounce(() => {\n for(const event in this.batchUpdates) {\n const details = this.batchUpdates[event as keyof BatchUpdates];\n delete this.batchUpdates[event as keyof BatchUpdates];\n\n // @ts-ignore\n const result = details.callback(details.batch);\n if(result && (!(result instanceof Array) || result.length)) {\n // @ts-ignore\n rootScope.dispatchEvent(event as keyof BatchUpdates, result);\n }\n }\n }, 33, false, true);\n\n return this.appStateManager.getState().then((state) => {\n if(state.maxSeenMsgId) {\n this.maxSeenId = state.maxSeenMsgId;\n }\n });\n }\n\n public clear = (init?: boolean) => {\n if(this.middleware) {\n this.middleware.clean();\n } else {\n this.middleware = getMiddleware();\n this.uploadFilePromises = {};\n }\n\n this.messagesStorageByPeerId = {};\n this.groupedMessagesStorage = {};\n this.scheduledMessagesStorage = {};\n this.historiesStorage = {};\n this.threadsStorage = {};\n this.searchesStorage = {};\n this.pinnedMessages = {};\n this.threadsServiceMessagesIdsStorage = {};\n this.threadsToReplies = {};\n\n this.dialogsStorage && this.dialogsStorage.clear(init);\n this.filtersStorage && this.filtersStorage.clear(init);\n };\n\n public getInputEntities(entities: MessageEntity[]) {\n const sendEntites = copy(entities);\n sendEntites.forEach((entity) => {\n if(entity._ === 'messageEntityMentionName') {\n (entity as any as MessageEntity.inputMessageEntityMentionName)._ = 'inputMessageEntityMentionName';\n (entity as any as MessageEntity.inputMessageEntityMentionName).user_id = this.appUsersManager.getUserInput(entity.user_id);\n }\n });\n return sendEntites;\n }\n\n public invokeAfterMessageIsSent(tempId: number, callbackName: string, callback: (message: MyMessage) => Promise) {\n const finalize = this.tempFinalizeCallbacks[tempId] ??= {};\n const obj = finalize[callbackName] ??= {deferred: deferredPromise()};\n\n obj.callback = callback;\n\n return obj.deferred;\n }\n\n public editMessage(message: any, text: string, options: Partial<{\n noWebPage: true,\n newMedia: any,\n scheduleDate: number,\n entities: MessageEntity[]\n }> = {}): Promise {\n /* if(!this.canEditMessage(messageId)) {\n return Promise.reject({type: 'MESSAGE_EDIT_FORBIDDEN'});\n } */\n\n const {mid, peerId} = message;\n\n if(message.pFlags.is_outgoing) {\n return this.invokeAfterMessageIsSent(mid, 'edit', (message) => {\n // this.log('invoke editMessage callback', message);\n return this.editMessage(message, text, options);\n });\n }\n\n const entities = options.entities || [];\n if(text) {\n text = parseMarkdown(text, entities);\n }\n\n const schedule_date = options.scheduleDate || (message.pFlags.is_scheduled ? message.date : undefined);\n return this.apiManager.invokeApi('messages.editMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: message.id,\n message: text,\n media: options.newMedia,\n entities: entities.length ? this.getInputEntities(entities) : undefined,\n no_webpage: options.noWebPage,\n schedule_date\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error) => {\n this.log.error('editMessage error:', error);\n\n if(error && error.type === 'MESSAGE_NOT_MODIFIED') {\n error.handled = true;\n return;\n }\n if(error && error.type === 'MESSAGE_EMPTY') {\n error.handled = true;\n }\n return Promise.reject(error);\n });\n }\n\n public async transcribeAudio(message: Message.message): Promise {\n const {id, peerId} = message;\n\n const process = (result: MessagesTranscribedAudio) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateTranscribedAudio',\n msg_id: message.id,\n peer: this.appPeersManager.getOutputPeer(peerId),\n pFlags: result.pFlags,\n text: result.text,\n transcription_id: result.transcription_id\n });\n };\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.transcribeAudio',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: id\n },\n processResult: (result) => {\n process(result);\n return result;\n },\n processError: (error) => {\n if(error.type === 'TRANSCRIPTION_FAILED') {\n process({\n _: 'messages.transcribedAudio',\n transcription_id: 0,\n text: '',\n pFlags: {}\n });\n }\n\n throw error;\n }\n });\n }\n\n public async sendText(peerId: PeerId, text: string, options: MessageSendingParams & Partial<{\n entities: MessageEntity[],\n viaBotId: BotId,\n queryId: string,\n resultId: string,\n noWebPage: true,\n replyMarkup: ReplyMarkup,\n clearDraft: true,\n webPage: WebPage,\n }> = {}): Promise {\n if(!text.trim()) {\n return;\n }\n\n options.entities ??= [];\n\n // this.checkSendOptions(options);\n if(options.threadId && !options.replyToMsgId) {\n options.replyToMsgId = options.threadId;\n }\n\n const config = await this.apiManager.getConfig();\n const MAX_LENGTH = config.message_length_max;\n const splitted = splitStringByLength(text, MAX_LENGTH);\n text = splitted[0];\n if(splitted.length > 1) {\n if(options.webPage?._ === 'webPage' && !text.includes(options.webPage.url)) {\n delete options.webPage;\n }\n }\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n const entities = options.entities;\n if(!options.viaBotId) {\n text = parseMarkdown(text, entities);\n // entities = mergeEntities(entities, parseEntities(text));\n }\n\n let sendEntites = this.getInputEntities(entities);\n if(!sendEntites.length) {\n sendEntites = undefined;\n }\n\n const message = this.generateOutgoingMessage(peerId, options);\n message.entities = entities;\n message.message = text;\n\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n const isChannel = this.appPeersManager.isChannel(peerId);\n\n if(options.webPage) {\n message.media = {\n _: 'messageMediaWebPage',\n webpage: options.webPage\n };\n }\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n message.send = () => {\n toggleError();\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const sendAs = options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n let apiPromise: any;\n if(options.viaBotId) {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendInlineBotResult', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n query_id: options.queryId,\n id: options.resultId,\n clear_draft: options.clearDraft,\n send_as: sendAs\n }, sentRequestOptions);\n } else {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendMessage', {\n no_webpage: options.noWebPage,\n peer: this.appPeersManager.getInputPeerById(peerId),\n message: text,\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n entities: sendEntites,\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate || undefined,\n silent: options.silent,\n send_as: sendAs,\n update_stickersets_order: UPDATE_STICKERSET_ORDER\n }, sentRequestOptions);\n }\n\n /* function is(value: any, condition: boolean): value is T {\n return condition;\n } */\n\n // this.log('sendText', message.mid);\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n return apiPromise.then((updates: Updates) => {\n // this.log('sendText sent', message.mid);\n // if(is(updates, updates._ === 'updateShortSentMessage')) {\n if(updates._ === 'updateShortSentMessage') {\n // assumeType(updates);\n\n // * fix copying object with promise\n const promise = message.promise;\n delete message.promise;\n const newMessage = copy(message);\n defineNotNumerableProperties(message, ['promise']);\n message.promise = promise;\n\n newMessage.date = updates.date;\n newMessage.id = updates.id;\n newMessage.media = updates.media;\n newMessage.entities = updates.entities;\n this.wrapMessageEntities(newMessage);\n if(updates.pFlags.out) {\n newMessage.pFlags.out = true;\n }\n\n // * override with new updates\n updates = {\n _: 'updates',\n users: [],\n chats: [],\n seq: 0,\n date: undefined,\n updates: [{\n _: 'updateMessageID',\n random_id: message.random_id,\n id: newMessage.id\n }, {\n _: options.scheduleDate ? 'updateNewScheduledMessage' : (isChannel ? 'updateNewChannelMessage' : 'updateNewMessage'),\n message: newMessage,\n pts: updates.pts,\n pts_count: updates.pts_count\n }]\n };\n } else if((updates as Updates.updates).updates) {\n (updates as Updates.updates).updates.forEach((update) => {\n if(update._ === 'updateDraftMessage') {\n update.local = true;\n }\n });\n }\n\n // this.reloadConversation(peerId);\n\n // setTimeout(() => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n // }, 5000);\n message.promise.resolve();\n }, (error: ApiError) => {\n toggleError(error);\n message.promise.reject(error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n };\n\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n sequential: true\n });\n\n const promises: ReturnType[] = [message.promise];\n for(let i = 1; i < splitted.length; ++i) {\n promises.push(this.sendText(peerId, splitted[i], options));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public sendFile(peerId: PeerId, options: MessageSendingParams & SendFileDetails & Partial<{\n isRoundMessage: boolean,\n isVoiceMessage: boolean,\n isGroupedItem: boolean,\n isMedia: boolean,\n\n groupId: string,\n caption: string,\n entities: MessageEntity[],\n background: boolean,\n clearDraft: boolean,\n noSound: boolean,\n\n waveform: Uint8Array,\n\n // ! only for internal use\n processAfter?: typeof processAfter\n }>) {\n const file = options.file;\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n // this.checkSendOptions(options);\n\n const message = this.generateOutgoingMessage(peerId, options);\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n\n let attachType: 'document' | 'audio' | 'video' | 'voice' | 'photo', apiFileName: string;\n\n const fileType = 'mime_type' in file ? file.mime_type : file.type;\n const fileName = file instanceof File ? file.name : '';\n const isDocument = !(file instanceof File) && !(file instanceof Blob);\n let caption = options.caption || '';\n\n this.log('sendFile', file, fileType);\n\n const entities = options.entities || [];\n if(caption) {\n caption = parseMarkdown(caption, entities);\n }\n\n const attributes: DocumentAttribute[] = [];\n\n const isPhoto = getEnvironment().IMAGE_MIME_TYPES_SUPPORTED.has(fileType);\n\n const strippedPhotoSize: PhotoSize.photoStrippedSize = options.strippedBytes && {\n _: 'photoStrippedSize',\n bytes: options.strippedBytes,\n type: 'i'\n };\n\n let photo: MyPhoto, document: MyDocument;\n\n let actionName: Extract;\n if(isDocument) { // maybe it's a sticker or gif\n attachType = 'document';\n apiFileName = '';\n } else if(fileType.indexOf('audio/') === 0 || ['video/ogg'].indexOf(fileType) >= 0) {\n attachType = 'audio';\n apiFileName = 'audio.' + (fileType.split('/')[1] === 'ogg' ? 'ogg' : 'mp3');\n actionName = 'sendMessageUploadAudioAction';\n\n if(options.isVoiceMessage) {\n attachType = 'voice';\n message.pFlags.media_unread = true;\n }\n\n const attribute: DocumentAttribute.documentAttributeAudio = {\n _: 'documentAttributeAudio',\n pFlags: {\n voice: options.isVoiceMessage || undefined\n },\n waveform: options.waveform,\n duration: options.duration || 0\n };\n\n attributes.push(attribute);\n } else if(!options.isMedia) {\n attachType = 'document';\n apiFileName = 'document.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadDocumentAction';\n } else if(isPhoto) {\n attachType = 'photo';\n apiFileName = 'photo.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadPhotoAction';\n\n const photoSize = {\n _: 'photoSize',\n w: options.width,\n h: options.height,\n type: THUMB_TYPE_FULL,\n location: null,\n size: file.size\n } as PhotoSize.photoSize;\n\n photo = {\n _: 'photo',\n id: '' + message.id,\n sizes: [photoSize],\n w: options.width,\n h: options.height\n } as any;\n\n if(strippedPhotoSize) {\n photo.sizes.unshift(strippedPhotoSize);\n }\n\n const cacheContext = this.thumbsStorage.getCacheContext(photo, photoSize.type);\n cacheContext.downloaded = file.size;\n cacheContext.url = options.objectURL || '';\n\n photo = this.appPhotosManager.savePhoto(photo);\n } else if(getEnvironment().VIDEO_MIME_TYPES_SUPPORTED.has(fileType as VIDEO_MIME_TYPE)) {\n attachType = 'video';\n apiFileName = 'video.mp4';\n actionName = 'sendMessageUploadVideoAction';\n\n const videoAttribute: DocumentAttribute.documentAttributeVideo = {\n _: 'documentAttributeVideo',\n pFlags: {\n round_message: options.isRoundMessage || undefined,\n supports_streaming: true\n },\n duration: options.duration,\n w: options.width,\n h: options.height\n };\n\n attributes.push(videoAttribute);\n\n // * must follow after video attribute\n if(options.noSound &&\n file.size > (10 * 1024) &&\n file.size < (10 * 1024 * 1024)) {\n attributes.push({\n _: 'documentAttributeAnimated'\n });\n }\n } else {\n attachType = 'document';\n apiFileName = 'document.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadDocumentAction';\n }\n\n attributes.push({_: 'documentAttributeFilename', file_name: fileName || apiFileName});\n\n if((['document', 'video', 'audio', 'voice'] as (typeof attachType)[]).indexOf(attachType) !== -1 && !isDocument) {\n const thumbs: PhotoSize[] = [];\n document = {\n _: 'document',\n id: '' + message.id,\n duration: options.duration,\n attributes,\n w: options.width,\n h: options.height,\n thumbs,\n mime_type: fileType,\n size: file.size\n } as any;\n\n if(options.objectURL) {\n const cacheContext = this.thumbsStorage.getCacheContext(document);\n cacheContext.downloaded = file.size;\n cacheContext.url = options.objectURL;\n }\n\n let thumb: PhotoSize.photoSize;\n if(isPhoto) {\n attributes.push({\n _: 'documentAttributeImageSize',\n w: options.width,\n h: options.height\n });\n\n thumb = {\n _: 'photoSize',\n w: options.width,\n h: options.height,\n type: THUMB_TYPE_FULL,\n size: file.size\n };\n } else if(attachType === 'video') {\n if(options.thumb) {\n thumb = {\n _: 'photoSize',\n w: options.thumb.size.width,\n h: options.thumb.size.height,\n type: 'local-thumb',\n size: options.thumb.blob.size\n };\n\n const thumbCacheContext = this.thumbsStorage.getCacheContext(document, thumb.type);\n thumbCacheContext.downloaded = thumb.size;\n thumbCacheContext.url = options.thumb.url;\n }\n }\n\n if(thumb) {\n thumbs.push(thumb);\n }\n\n if(strippedPhotoSize) {\n thumbs.unshift(strippedPhotoSize);\n }\n\n /* if(thumbs.length) {\n const thumb = thumbs[0] as PhotoSize.photoSize;\n const docThumb = appPhotosManager.getDocumentCachedThumb(document.id);\n docThumb.downloaded = thumb.size;\n docThumb.url = thumb.url;\n } */\n\n document = this.appDocsManager.saveDoc(document);\n }\n\n this.log('sendFile', attachType, apiFileName, file.type, options);\n\n const sentDeferred = deferredPromise();\n // sentDeferred.cancel = () => {\n // const error = new Error('Download canceled');\n // error.name = 'AbortError';\n // sentDeferred.reject(error);\n\n // if(uploadPromise?.cancel) {\n // uploadPromise.cancel();\n // }\n // };\n\n const media: MessageMedia = isDocument ? undefined : {\n _: photo ? 'messageMediaPhoto' : 'messageMediaDocument',\n pFlags: {},\n // preloader,\n photo,\n document\n };\n\n if(media) {\n defineNotNumerableProperties(media as any, ['promise']);\n (media as any).promise = sentDeferred;\n\n if(options.spoiler) {\n (media as MessageMedia.messageMediaPhoto).pFlags.spoiler = true;\n }\n }\n\n message.entities = entities;\n message.message = caption;\n message.media = isDocument ? {\n _: 'messageMediaDocument',\n pFlags: {},\n document: file\n } as MessageMedia.messageMediaDocument : media;\n\n const uploadingFileName = !isDocument ? getFileNameForUpload(file) : undefined;\n message.uploadingFileName = uploadingFileName;\n\n if(uploadingFileName) {\n this.uploadFilePromises[uploadingFileName] = sentDeferred;\n }\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n let uploaded = false,\n uploadPromise: ReturnType = null;\n\n message.send = () => {\n if(isDocument) {\n const inputMedia: InputMedia = {\n _: 'inputMediaDocument',\n id: getDocumentInput(file),\n pFlags: {}\n };\n\n sentDeferred.resolve(inputMedia);\n } else if(file instanceof File || file instanceof Blob) {\n const load = () => {\n if(!uploaded || message.error) {\n uploaded = false;\n\n uploadPromise = this.apiFileManager.upload({file, fileName: uploadingFileName});\n uploadPromise.catch((err) => {\n if(!uploaded) {\n this.log('cancelling upload', media);\n\n this.cancelPendingMessage(message.random_id);\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n sentDeferred.reject(err);\n }\n });\n\n uploadPromise.addNotifyListener((progress: Progress) => {\n /* if(DEBUG) {\n this.log('upload progress', progress);\n } */\n\n const percents = Math.max(1, Math.floor(100 * progress.done / progress.total));\n if(actionName) {\n this.setTyping(peerId, {_: actionName, progress: percents | 0}, undefined, options.threadId);\n }\n sentDeferred.notifyAll(progress);\n });\n\n sentDeferred.notifyAll({done: 0, total: file.size});\n }\n\n let thumbUploadPromise: typeof uploadPromise;\n if(attachType === 'video' && options.objectURL && options.thumb?.blob) {\n thumbUploadPromise = this.apiFileManager.upload({file: options.thumb.blob});\n }\n\n uploadPromise && uploadPromise.then(async(inputFile) => {\n /* if(DEBUG) {\n this.log('appMessagesManager: sendFile uploaded:', inputFile);\n } */\n\n inputFile.name = apiFileName;\n uploaded = true;\n let inputMedia: InputMedia;\n switch(attachType) {\n case 'photo':\n inputMedia = {\n _: 'inputMediaUploadedPhoto',\n file: inputFile,\n pFlags: {\n spoiler: options.spoiler || undefined\n }\n };\n break;\n\n default:\n inputMedia = {\n _: 'inputMediaUploadedDocument',\n file: inputFile,\n mime_type: fileType,\n pFlags: {\n force_file: actionName === 'sendMessageUploadDocumentAction' || undefined,\n spoiler: options.spoiler || undefined\n // nosound_video: options.noSound ? true : undefined\n },\n attributes\n };\n }\n\n if(thumbUploadPromise) {\n try {\n const inputFile = await thumbUploadPromise;\n (inputMedia as InputMedia.inputMediaUploadedDocument).thumb = inputFile;\n } catch(err) {\n this.log.error('sendFile thumb upload error:', err);\n }\n }\n\n sentDeferred.resolve(inputMedia);\n }, (error: ApiError) => {\n toggleError(error);\n throw error;\n });\n\n return sentDeferred;\n };\n\n if(options.isGroupedItem) {\n load();\n } else {\n this.sendSmthLazyLoadQueue.push({\n load\n });\n }\n }\n\n return sentDeferred;\n };\n\n this.beforeMessageSending(message, {\n isGroupedItem: options.isGroupedItem,\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n processAfter: options.processAfter\n });\n\n if(!options.isGroupedItem) {\n sentDeferred.then((inputMedia) => {\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n\n return this.apiManager.invokeApi('messages.sendMedia', {\n background: options.background,\n peer: this.appPeersManager.getInputPeerById(peerId),\n media: inputMedia,\n message: caption,\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n entities,\n clear_draft: options.clearDraft,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n if(attachType === 'photo' &&\n error.code === 400 &&\n (error.type === 'PHOTO_INVALID_DIMENSIONS' ||\n error.type === 'PHOTO_SAVE_FILE_INVALID')) {\n error.handled = true;\n attachType = 'document';\n message.send();\n return;\n }\n\n toggleError(error);\n throw error;\n });\n });\n\n sentDeferred.then(message.promise.resolve, message.promise.reject);\n }\n\n const ret: {\n message: typeof message,\n promise: typeof sentDeferred\n } = {\n message\n } as any;\n\n defineNotNumerableProperties(ret, ['promise']);\n ret.promise = sentDeferred;\n\n return ret;\n }\n\n public async sendAlbum(peerId: PeerId, options: MessageSendingParams & {\n isMedia?: boolean,\n entities?: MessageEntity[],\n caption?: string,\n sendFileDetails: SendFileDetails[],\n clearDraft?: boolean\n }) {\n // this.checkSendOptions(options);\n\n if(options.threadId && !options.replyToMsgId) {\n options.replyToMsgId = options.threadId;\n }\n\n if(options.sendFileDetails.length === 1) {\n return this.sendFile(peerId, {...options, ...options.sendFileDetails[0]});\n }\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n\n let caption = options.caption || '';\n let entities = options.entities || [];\n if(caption) {\n caption = parseMarkdown(caption, entities);\n }\n\n this.log('sendAlbum', options);\n\n const groupId = '' + ++this.groupedTempId;\n\n const callbacks: Array<() => void> = [];\n const processAfter = (cb: () => void) => {\n callbacks.push(cb);\n };\n\n const messages = options.sendFileDetails.map((details, idx) => {\n const o: Parameters[1] = {\n isGroupedItem: true,\n isMedia: options.isMedia,\n scheduleDate: options.scheduleDate,\n silent: options.silent,\n replyToMsgId,\n threadId: options.threadId,\n sendAsPeerId: options.sendAsPeerId,\n groupId,\n processAfter,\n ...details\n };\n\n if(idx === 0) {\n o.caption = caption;\n o.entities = entities;\n // o.replyToMsgId = replyToMsgId;\n }\n\n return this.sendFile(peerId, o).message;\n });\n\n if(options.clearDraft) {\n callbacks.push(() => {\n this.appDraftsManager.clearDraft(peerId, options.threadId);\n });\n }\n\n callbacks.forEach((callback) => {\n callback();\n });\n\n // * test pending\n // return;\n\n const toggleError = (message: Message.message, error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n const inputPeer = this.appPeersManager.getInputPeerById(peerId);\n const invoke = (multiMedia: InputSingleMedia[]) => {\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n\n const deferred = deferredPromise();\n this.sendSmthLazyLoadQueue.push({\n load: () => {\n return this.apiManager.invokeApi('messages.sendMultiMedia', {\n peer: inputPeer,\n multi_media: multiMedia,\n reply_to_msg_id: replyToMsgId,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n clear_draft: options.clearDraft,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined,\n update_stickersets_order: UPDATE_STICKERSET_ORDER\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n deferred.resolve();\n }, (error: ApiError) => {\n messages.forEach((message) => toggleError(message, error));\n deferred.reject(error);\n });\n }\n });\n\n return deferred;\n };\n\n const promises: Promise[] = messages.map((message) => {\n return (message.send() as Promise).then((inputMedia) => {\n return Promise.all([\n inputMedia,\n this.apiManager.invokeApi('messages.uploadMedia', {\n peer: inputPeer,\n media: inputMedia\n })\n ]);\n })\n .then(([originalInputMedia, messageMedia]) => {\n let inputMedia: InputMedia;\n if(messageMedia._ === 'messageMediaPhoto') {\n const photo = this.appPhotosManager.savePhoto(messageMedia.photo);\n inputMedia = getPhotoMediaInput(photo);\n } else if(messageMedia._ === 'messageMediaDocument') {\n const doc = this.appDocsManager.saveDoc(messageMedia.document);\n inputMedia = getDocumentMediaInput(doc);\n }\n\n // copy original flags\n const copyProperties: (keyof InputMedia.inputMediaPhoto)[] = [\n 'pFlags',\n 'ttl_seconds'\n ];\n\n copyProperties.forEach((property) => {\n // @ts-ignore\n inputMedia[property] = originalInputMedia[property] ?? inputMedia[property];\n });\n\n const inputSingleMedia: InputSingleMedia = {\n _: 'inputSingleMedia',\n media: inputMedia,\n random_id: message.random_id,\n message: caption,\n entities\n };\n\n // * only 1 caption for all inputs\n if(caption) {\n caption = '';\n entities = [];\n }\n\n return inputSingleMedia;\n }).catch((err: ApiError) => {\n this.log.error('sendAlbum upload item error:', err, message);\n toggleError(message, err);\n throw err;\n });\n });\n\n return Promise.all(promises).then((inputs) => {\n return invoke(inputs.filter(Boolean));\n });\n }\n\n public sendContact(peerId: PeerId, contactPeerId: PeerId) {\n return this.sendOther(peerId, this.appUsersManager.getContactMediaInput(contactPeerId));\n }\n\n public sendOther(\n peerId: PeerId,\n inputMedia: InputMedia | {_: 'messageMediaPending', messageMedia: MessageMedia},\n options: MessageSendingParams & Partial<{\n viaBotId: BotId,\n replyMarkup: ReplyMarkup,\n clearDraft: true,\n queryId: string\n resultId: string,\n geoPoint: GeoPoint\n }> = {}\n ) {\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n // this.checkSendOptions(options);\n const message = this.generateOutgoingMessage(peerId, options);\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n\n let media: MessageMedia;\n switch(inputMedia._) {\n case 'inputMediaPoll': {\n const pollId = '' + message.id;\n inputMedia.poll.id = pollId;\n this.appPollsManager.savePoll(inputMedia.poll, {\n _: 'pollResults',\n flags: 4,\n total_voters: 0,\n pFlags: {},\n recent_voters: []\n });\n\n const {poll, results} = this.appPollsManager.getPoll(pollId);\n media = {\n _: 'messageMediaPoll',\n poll,\n results\n };\n\n break;\n }\n\n case 'inputMediaPhoto': {\n media = {\n _: 'messageMediaPhoto',\n photo: this.appPhotosManager.getPhoto((inputMedia.id as InputPhoto.inputPhoto).id),\n pFlags: {}\n };\n break;\n }\n\n case 'inputMediaDocument': {\n const doc = this.appDocsManager.getDoc((inputMedia.id as InputDocument.inputDocument).id);\n /* if(doc.sticker && doc.stickerSetInput) {\n appStickersManager.pushPopularSticker(doc.id);\n } */\n media = {\n _: 'messageMediaDocument',\n document: doc,\n pFlags: {}\n };\n break;\n }\n\n case 'inputMediaContact': {\n media = {\n _: 'messageMediaContact',\n phone_number: inputMedia.phone_number,\n first_name: inputMedia.first_name,\n last_name: inputMedia.last_name,\n user_id: inputMedia.user_id ?? '0',\n vcard: inputMedia.vcard\n };\n break;\n }\n\n case 'inputMediaGeoPoint': {\n media = {\n _: 'messageMediaGeo',\n geo: options.geoPoint\n };\n break;\n }\n\n case 'inputMediaVenue': {\n media = {\n _: 'messageMediaVenue',\n geo: options.geoPoint,\n title: inputMedia.title,\n address: inputMedia.address,\n provider: inputMedia.provider,\n venue_id: inputMedia.venue_id,\n venue_type: inputMedia.venue_type\n };\n break;\n }\n\n case 'messageMediaPending': {\n media = (inputMedia as any).messageMedia;\n break;\n }\n }\n\n message.media = media;\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n message.send = () => {\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const sendAs = options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined;\n let apiPromise: Promise;\n if(options.viaBotId) {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendInlineBotResult', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n query_id: options.queryId,\n id: options.resultId,\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n send_as: sendAs\n }, sentRequestOptions);\n } else {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendMedia', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n media: inputMedia as InputMedia,\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n message: '',\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n send_as: sendAs,\n update_stickersets_order: UPDATE_STICKERSET_ORDER\n }, sentRequestOptions);\n }\n\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n return apiPromise.then((updates) => {\n if(updates.updates) {\n updates.updates.forEach((update: Update) => {\n if(update._ === 'updateDraftMessage') {\n update.local = true;\n }\n });\n }\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n toggleError(error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n };\n\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n sequential: true\n });\n\n return message.promise;\n }\n\n /* private checkSendOptions(options: Partial<{\n scheduleDate: number\n }>) {\n if(options.scheduleDate) {\n const minTimestamp = (Date.now() / 1000 | 0) + 10;\n if(options.scheduleDate <= minTimestamp) {\n delete options.scheduleDate;\n }\n }\n } */\n\n private beforeMessageSending(message: Message.message, options: Pick & Partial<{\n isGroupedItem: boolean,\n isScheduled: boolean,\n clearDraft: boolean,\n sequential: boolean,\n processAfter?: (cb: () => void) => void\n }> = {}) {\n const messageId = message.id;\n const peerId = this.getMessagePeer(message);\n const storage = options.isScheduled ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n message.storageKey = storage.key;\n const callbacks: Array<() => void> = [];\n if(options.isScheduled) {\n // if(!options.isGroupedItem) {\n this.saveMessages([message], {storage, isScheduled: true, isOutgoing: true});\n callbacks.push(() => {\n this.rootScope.dispatchEvent('scheduled_new', message);\n });\n } else {\n /* if(options.threadId && this.threadsStorage[peerId]) {\n delete this.threadsStorage[peerId][options.threadId];\n } */\n const storages: HistoryStorage[] = [\n this.getHistoryStorage(peerId),\n options.threadId ? this.getHistoryStorage(peerId, options.threadId) : undefined\n ];\n\n for(const storage of storages) {\n if(storage) {\n storage.history.unshift(messageId);\n }\n }\n\n this.saveMessages([message], {storage, isOutgoing: true});\n this.setDialogTopMessage(message);\n\n if(options.threadId) {\n const forumTopic = this.dialogsStorage.getForumTopic(peerId, options.threadId);\n if(forumTopic) {\n this.setDialogTopMessage(message, forumTopic);\n }\n }\n\n callbacks.push(() => {\n this.rootScope.dispatchEvent('history_append', {storageKey: storage.key, message});\n });\n }\n\n const pending: PendingMessageDetails = this.pendingByRandomId[message.random_id] = {\n peerId,\n tempId: messageId,\n threadId: options.threadId,\n storage,\n sequential: options.sequential\n };\n\n this.pendingTopMsgs[peerId] = messageId;\n\n if(!options.isGroupedItem && message.send) {\n callbacks.push(() => {\n if(options.clearDraft) {\n this.appDraftsManager.clearDraft(peerId, options.threadId);\n }\n\n message.send();\n });\n }\n\n if(callbacks.length) {\n (options.processAfter || processAfter)(() => {\n for(const callback of callbacks) {\n callback();\n }\n });\n }\n\n return pending;\n }\n\n private generateOutgoingMessage(peerId: PeerId, options: MessageSendingParams & Partial<{\n viaBotId: BotId,\n groupId: string,\n replyMarkup: ReplyMarkup,\n }>) {\n if(options.threadId && !options.replyToMsgId) {\n options.replyToMsgId = options.threadId;\n }\n\n let postAuthor: string;\n const isBroadcast = this.appPeersManager.isBroadcast(peerId);\n if(isBroadcast) {\n const chat = this.appPeersManager.getPeer(peerId) as Chat.channel;\n if(chat.pFlags.signatures) {\n const user = this.appUsersManager.getSelf();\n const fullName = user.first_name + (user.last_name ? ' ' + user.last_name : '');\n postAuthor = fullName;\n }\n }\n\n const message: Message.message = {\n _: 'message',\n id: this.generateTempMessageId(peerId),\n from_id: options.sendAsPeerId ? this.appPeersManager.getOutputPeer(options.sendAsPeerId) : this.generateFromId(peerId),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n post_author: postAuthor,\n pFlags: this.generateFlags(peerId),\n date: options.scheduleDate || (tsNow(true) + this.timeManager.getServerTimeOffset()),\n message: '',\n grouped_id: options.groupId,\n random_id: randomLong(),\n reply_to: this.generateReplyHeader(peerId, options.replyToMsgId, options.threadId),\n via_bot_id: options.viaBotId,\n reply_markup: options.replyMarkup,\n replies: this.generateReplies(peerId),\n views: isBroadcast && 1,\n pending: true\n };\n\n defineNotNumerableProperties(message, ['send', 'promise']);\n if(options.groupId === undefined) {\n message.promise = deferredPromise();\n }\n\n return message;\n }\n\n private generateReplyHeader(peerId: PeerId, replyToMsgId: number, replyToTopId?: number) {\n const isForum = this.appPeersManager.isForum(peerId);\n if(isForum && !replyToTopId) {\n const originalMessage = this.getMessageByPeer(peerId, replyToMsgId);\n if(originalMessage) {\n replyToTopId = getMessageThreadId(originalMessage, true);\n }\n }\n\n const header: MessageReplyHeader = {\n _: 'messageReplyHeader',\n reply_to_msg_id: replyToMsgId || replyToTopId,\n pFlags: {}\n };\n\n if(replyToTopId && isForum && GENERAL_TOPIC_ID !== replyToTopId) {\n header.pFlags.forum_topic = true;\n }\n\n if(replyToTopId && header.reply_to_msg_id !== replyToTopId) {\n header.reply_to_top_id = replyToTopId;\n }\n\n return header;\n }\n\n private generateReplies(peerId: PeerId) {\n let replies: MessageReplies.messageReplies;\n if(this.appPeersManager.isBroadcast(peerId)) {\n const channelFull = this.appProfileManager.getCachedFullChat(peerId.toChatId()) as ChatFull.channelFull;\n if(channelFull?.linked_chat_id) {\n replies = {\n _: 'messageReplies',\n flags: 1,\n pFlags: {\n comments: true\n },\n channel_id: channelFull.linked_chat_id,\n replies: 0,\n replies_pts: 0\n };\n }\n }\n\n return replies;\n }\n\n /**\n * Generate correct from_id according to anonymous or broadcast\n */\n private generateFromId(peerId: PeerId) {\n if(this.appPeersManager.isAnyChat(peerId) && (this.appPeersManager.isBroadcast(peerId) || this.isAnonymousSending(peerId))) {\n return undefined;\n } else {\n return this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId());\n }\n }\n\n private generateFlags(peerId: PeerId) {\n const pFlags: Message.message['pFlags'] = {};\n const fromId = this.appUsersManager.getSelf().id;\n if(peerId !== fromId) {\n pFlags.out = true;\n\n if(!this.appPeersManager.isChannel(peerId) && !this.appUsersManager.isBot(peerId)) {\n pFlags.unread = true;\n }\n }\n\n if(this.appPeersManager.isBroadcast(peerId)) {\n pFlags.post = true;\n }\n\n return pFlags;\n }\n\n private generateForwardHeader(peerId: PeerId, originalMessage: Message.message) {\n const myId = this.appUsersManager.getSelf().id.toPeerId();\n const fromId = originalMessage.fromId;\n if(fromId === myId && originalMessage.peerId === myId && !originalMessage.fwd_from) {\n return;\n }\n\n const fwdHeader: MessageFwdHeader.messageFwdHeader = {\n _: 'messageFwdHeader',\n flags: 0,\n date: originalMessage.date,\n pFlags: {}\n };\n\n let isUserHidden = false;\n if(originalMessage.fwd_from) {\n fwdHeader.from_id = originalMessage.fwd_from.from_id;\n fwdHeader.from_name = originalMessage.fwd_from.from_name;\n fwdHeader.post_author = originalMessage.fwd_from.post_author;\n } else {\n fwdHeader.post_author = originalMessage.post_author;\n\n if(fromId.isUser()) {\n const userFull = this.appProfileManager.getCachedFullUser(fromId.toUserId());\n if(userFull?.private_forward_name) {\n fwdHeader.from_name = userFull.private_forward_name;\n isUserHidden = true;\n }\n }\n\n if(!isUserHidden) {\n fwdHeader.from_id = this.appPeersManager.getOutputPeer(fromId);\n }\n }\n\n if(this.appPeersManager.isBroadcast(originalMessage.peerId)) {\n if(originalMessage.post_author) {\n fwdHeader.post_author = originalMessage.post_author;\n }\n\n fwdHeader.channel_post = originalMessage.id;\n }\n\n if(peerId === myId && !isUserHidden) {\n fwdHeader.saved_from_msg_id = originalMessage.id;\n fwdHeader.saved_from_peer = this.appPeersManager.getOutputPeer(originalMessage.peerId);\n }\n\n return fwdHeader;\n }\n\n public generateFakeAvatarMessage(peerId: PeerId, photo: Photo) {\n const maxId = Number.MAX_SAFE_INTEGER;\n const message: Message.messageService = {\n _: 'messageService',\n pFlags: {},\n action: {\n _: 'messageActionChannelEditPhoto',\n photo\n },\n id: maxId,\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n mid: maxId,\n peerId,\n date: (photo as Photo.photo).date,\n fromId: peerId\n };\n\n this.getHistoryMessagesStorage(peerId).set(maxId, message);\n return message;\n }\n\n public getUploadPromise(uploadFileName: string) {\n return this.uploadFilePromises[uploadFileName];\n }\n\n public isAnonymousSending(peerId: PeerId): boolean {\n if(!peerId.isAnyChat()) {\n return false;\n }\n\n const chat = this.appPeersManager.getPeer(peerId);\n return (chat as Chat.channel).admin_rights?.pFlags?.anonymous;\n }\n\n public setDialogTopMessage(\n message: MyMessage,\n dialog: MTDialog.dialog | ForumTopic = this.getDialogOnly(message.peerId)\n ) {\n if(!dialog) {\n return;\n }\n\n dialog.top_message = message.mid;\n\n const historyStorage = this.getHistoryStorage(message.peerId, dialog._ === 'forumTopic' ? dialog.id : undefined);\n historyStorage.maxId = message.mid;\n\n this.dialogsStorage.generateIndexForDialog(dialog, false, message);\n\n this.scheduleHandleNewDialogs(message.peerId, dialog);\n }\n\n public cancelPendingMessage(randomId: string) {\n const pendingData = this.pendingByRandomId[randomId];\n\n /* if(DEBUG) {\n this.log('cancelPendingMessage', randomId, pendingData);\n } */\n\n if(pendingData) {\n const {peerId, tempId, storage} = pendingData;\n const historyStorage = this.getHistoryStorage(peerId);\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteMessages',\n messages: [tempId],\n pts: undefined,\n pts_count: undefined\n });\n\n historyStorage.history.delete(tempId);\n\n delete this.pendingByRandomId[randomId];\n storage.delete(tempId);\n\n return true;\n }\n\n return false;\n }\n\n /* public async refreshConversations() {\n const limit = 200, outDialogs: Dialog[] = [];\n for(let folderId = 0; folderId < 2; ++folderId) {\n let offsetDate = 0;\n for(;;) {\n const {dialogs, isEnd} = await this.getTopMessages(limit, folderId, offsetDate);\n\n if(dialogs.length) {\n outDialogs.push(...dialogs as Dialog[]);\n const dialog = dialogs[dialogs.length - 1];\n\n // * get peerId and mid manually, because dialog can be migrated peer and it won't be saved\n const peerId = getPeerId(dialog.peer);\n const mid = generateMessageId(dialog.top_message);\n offsetDate = this.getMessageByPeer(peerId, mid).date;\n\n if(!offsetDate) {\n console.error('refreshConversations: got no offsetDate', dialog);\n break;\n }\n }\n\n if(isEnd) {\n break;\n }\n }\n }\n\n let obj: {[peerId: string]: Dialog} = {};\n outDialogs.forEach((dialog) => {\n obj[dialog.peerId] = dialog;\n });\n rootScope.dispatchEvent('dialogs_multiupdate', obj);\n\n return outDialogs;\n } */\n\n public async fillConversations(folderId = GLOBAL_FOLDER_ID): Promise {\n const middleware = this.middleware.get();\n while(!this.dialogsStorage.isDialogsLoaded(folderId)) {\n const result = await this.getTopMessages({limit: 100, folderId});\n if(!middleware() || result.isEnd) {\n break;\n }\n }\n }\n\n /* public async getConversationsAll(query = '', folderId = 0) {\n const limit = 200, outDialogs: Dialog[] = [];\n for(; folderId < 2; ++folderId) {\n let offsetIndex = 0;\n for(;;) {\n const {dialogs} = await appMessagesManager.getConversations(query, offsetIndex, limit, folderId).promise;\n\n if(dialogs.length) {\n outDialogs.push(...dialogs);\n offsetIndex = dialogs[dialogs.length - 1].index || 0;\n } else {\n break;\n }\n }\n }\n\n return outDialogs;\n } */\n\n public getReadMaxIdIfUnread(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n if(threadId && !this.appChatsManager.isForum(peerId.toChatId())) {\n const chatHistoryStorage = this.getHistoryStorage(peerId);\n const readMaxId = Math.max(chatHistoryStorage.readMaxId ?? 0, historyStorage.readMaxId);\n const message = this.getMessageByPeer(peerId, historyStorage.maxId); // usually message is missing, so pFlags.out won't be there anyway\n return !message?.pFlags?.out && readMaxId < historyStorage.maxId ? readMaxId : 0;\n } else {\n const message = this.getMessageByPeer(peerId, historyStorage.maxId);\n const readMaxId = peerId.isUser() ? Math.max(historyStorage.readMaxId, historyStorage.readOutboxMaxId) : historyStorage.readMaxId;\n // readMaxId can be 4294967295 (0)\n return !message?.pFlags?.out && readMaxId < historyStorage.maxId && getServerMessageId(readMaxId) ? readMaxId : 0;\n }\n }\n\n // public lolSet = new Set();\n public getTopMessages({limit, folderId}: {\n limit: number,\n folderId: number\n }) {\n // const dialogs = this.dialogsStorage.getFolder(folderId);\n const offsetId = 0;\n let offsetPeerId: PeerId;\n let offsetIndex = 0;\n\n let offsetDate = this.dialogsStorage.getOffsetDate(folderId);\n if(offsetDate) {\n offsetIndex = offsetDate * 0x10000;\n offsetDate += this.timeManager.getServerTimeOffset();\n }\n\n const useLimit = 100;\n const middleware = this.middleware.get();\n const peerId = this.dialogsStorage.isFilterIdForForum(folderId) ? folderId : undefined;\n\n const processResult = (result: MessagesDialogs | MessagesForumTopics) => {\n if(!middleware() || result._ === 'messages.dialogsNotModified') return null;\n\n if(DEBUG) {\n this.log('messages.getDialogs result:', result);\n }\n\n // can reset pinned order here\n if(!peerId && !offsetId && !offsetDate && !offsetPeerId && folderId !== GLOBAL_FOLDER_ID) {\n this.dialogsStorage.resetPinnedOrder(folderId);\n }\n\n if(!peerId && !offsetDate) {\n // telegramMeWebManager.setAuthorized(true);\n this.appDraftsManager.addMissedDialogs();\n }\n\n this.appUsersManager.saveApiUsers(result.users);\n this.appChatsManager.saveApiChats(result.chats);\n this.saveMessages(result.messages);\n\n let maxSeenIdIncremented = offsetDate ? true : false;\n let hasPrepend = false;\n const noIdsDialogs: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const setFolderId: REAL_FOLDER_ID = folderId === GLOBAL_FOLDER_ID ? FOLDER_ID_ALL : folderId as REAL_FOLDER_ID;\n const saveGlobalOffset = !!peerId || folderId === GLOBAL_FOLDER_ID;\n const items: Array =\n (result as MessagesDialogs.messagesDialogsSlice).dialogs as Dialog[] ||\n (result as MessagesForumTopics).topics as ForumTopic[];\n forEachReverse(items, (dialog) => {\n if(!dialog) {\n return;\n }\n\n // const d = Object.assign({}, dialog);\n // ! ะฝัƒะถะฝะพ ะฟะตั€ะตะดะฐะฒะฐั‚ัŒ folderId, ั‚ะฐะบ ะบะฐะบ ะฟะพ ะฟะฐะฟะบะต !== 0 ะฝะตั‚ ัะฒะพะนัั‚ะฒะฐ folder_id\n if(!peerId) {\n (dialog as Dialog).folder_id ??= setFolderId;\n }\n\n this.dialogsStorage.saveDialog({\n dialog,\n ignoreOffsetDate: true,\n saveGlobalOffset\n });\n\n if(dialog.peerId === undefined) {\n this.log.error('bugged dialog?', dialog);\n debugger;\n return;\n }\n\n if(!maxSeenIdIncremented &&\n !this.appPeersManager.isChannel(dialog.peerId || this.appPeersManager.getPeerId(dialog.peer))) {\n this.incrementMaxSeenId(dialog.top_message);\n maxSeenIdIncremented = true;\n }\n\n // if(!folderId && !dialog.folder_id) {\n // this.lolSet.add(dialog.peerId);\n // }\n\n if(offsetIndex && getDialogIndex(dialog) > offsetIndex) {\n this.scheduleHandleNewDialogs(dialog.peerId, dialog);\n hasPrepend = true;\n }\n\n // ! ัั‚ะพ ะผะพะถะตั‚ ัะปัƒั‡ะธั‚ัŒัั, ะตัะปะธ ะทะฐะฟั€ะพั ะธะดั‘ั‚ ะฝะต ะฟะพ ะฟะฐะฟะบะต 0, ะฐ ะฟะพ 1. ะฟะพั‡ะตะผัƒ-ั‚ะพ read'ะพะฒ ะฝะตั‚\n // ! ะฒ ะธั‚ะพะณะต, ั‡ั‚ะพะฑั‹ ะฟะพะปัƒั‡ะธั‚ัŒ 1 ะดะธะฐะปะพะณ, ะดะตะปะฐะตั‚ัั ะฟะตั€ะฒั‹ะน ะทะฐะฟั€ะพั ะฟะพ ะฟะฐะฟะบะต 0, ะฟะพั‚ะพะผ ะทะฐะฟั€ะพั ะดะปั ะฐั€ั…ะธะฒะฝั‹ั… ะฟะพ ะฟะฐะฟะบะต 1, ะธ ะฟะพั‚ะพะผ ะตั‰ั‘ ะฟะตั€ะตะทะฐะณั€ัƒะทะบะฐ ะฐั€ั…ะธะฒะฝะพะณะพ ะดะธะฐะปะพะณะฐ\n if(!peerId && !getServerMessageId(dialog.read_inbox_max_id) && !getServerMessageId(dialog.read_outbox_max_id)) {\n noIdsDialogs.set(dialog.peerId, {dialog: dialog as Dialog});\n\n this.log.error('noIdsDialogs', dialog, params);\n } else if(dialog.top_message) { // * fix sending status\n const topMessage = this.getMessageByPeer(dialog.peerId, dialog.top_message);\n if(topMessage) {\n this.setMessageUnreadByDialog(topMessage, dialog);\n this.dialogsStorage.setDialogToState(dialog);\n }\n }\n });\n\n if(noIdsDialogs.size) {\n // setTimeout(() => { // test bad situation\n const peerIds = [...noIdsDialogs.keys()];\n const promises = peerIds.map((peerId) => this.reloadConversation(peerId));\n Promise.all(promises).then(() => {\n this.rootScope.dispatchEvent('dialogs_multiupdate', noIdsDialogs);\n\n for(let i = 0; i < peerIds.length; ++i) {\n const peerId = peerIds[i];\n this.rootScope.dispatchEvent('dialog_unread', {\n peerId,\n dialog: this.getDialogOnly(peerId)\n });\n }\n });\n // }, 10e3);\n }\n\n const count = (result as MessagesDialogs.messagesDialogsSlice).count;\n\n // exclude empty draft dialogs\n const folderDialogs = this.dialogsStorage.getFolderDialogs(folderId, false);\n let dialogsLength = 0;\n for(let i = 0, length = folderDialogs.length; i < length; ++i) {\n const dialog = folderDialogs[i];\n if(getServerMessageId(dialog.top_message)) {\n ++dialogsLength;\n } else {\n this.log.error('something strange with dialog', dialog);\n }\n }\n\n const isEnd = /* limit > dialogsResult.dialogs.length || */\n !count ||\n dialogsLength >= count ||\n !items.length;\n if(isEnd) {\n this.dialogsStorage.setDialogsLoaded(folderId, true);\n }\n\n if(hasPrepend) {\n this.scheduleHandleNewDialogs();\n } else {\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map());\n }\n\n const dialogs = items;\n const slicedDialogs = limit === useLimit ? dialogs : dialogs.slice(0, limit);\n return {\n isEnd: isEnd && slicedDialogs[slicedDialogs.length - 1] === dialogs[dialogs.length - 1],\n count,\n dialogs: slicedDialogs\n };\n };\n\n let promise: Promise>, params: any;\n if(peerId) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'channels.getForumTopics',\n params: params = {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n limit: useLimit,\n offset_date: offsetDate,\n offset_id: offsetId,\n offset_topic: 0\n },\n options: {\n // timeout: APITIMEOUT,\n noErrorBox: true\n },\n processResult: (result) => {\n result = this.dialogsStorage.processTopics(peerId, result);\n return processResult(result);\n }\n });\n } else {\n // ! ะ’ะะ˜ะœะะะ˜ะ•: ะžะงะ•ะะฌ ะกะ›ะžะ–ะะะฏ ะ›ะžะ“ะ˜ะšะ:\n // ! ะตัะปะธ ะดะตะปะฐั‚ัŒ ะทะฐะฟั€ะพั ัะฝะฐั‡ะฐะปะฐ ะฟะพ ะฟะฐะฟะบะต 0, ะฟะพั‚ะพะผ ะฟะพ ะฟะฐะฟะบะต 1, ะฟะพ ะธะฝะดะตะบััƒ 0 ะฒ ะผะฐััะธะฒะต ะฑัƒะดะตั‚ ะพะดะธะฝ ะธ ั‚ะพั‚ ะถะต ะดะธะฐะปะพะณ, ั dialog.pFlags.pinned, ะ›ะžะ›???\n // ! ั‚.ะต., ั ะทะฐะฟั€ะพัะพะผ folder_id: 1, ะธ exclude_pinned: 0, ะฒ ั€ะตะทัƒะปัŒั‚ะฐั‚ะต ะฑัƒะดัƒั‚ ะตั‰ั‘ ะธ ะทะฐะบั€ะตะฟะปั‘ะฝะฝั‹ะต ั ะฟะฐะฟะบะธ 0\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'messages.getDialogs',\n params: params = {\n folder_id: folderId,\n offset_date: offsetDate,\n offset_id: offsetId,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId),\n limit: useLimit,\n hash: '0'\n },\n options: {\n // timeout: APITIMEOUT,\n noErrorBox: true\n },\n processResult\n });\n }\n\n return promise;\n }\n\n public async forwardMessages(peerId: PeerId, fromPeerId: PeerId, mids: number[], options: MessageSendingParams & Partial<{\n withMyScore: true,\n dropAuthor: boolean,\n dropCaptions: boolean\n }> = {}) {\n delete options.replyToMsgId;\n delete options.threadId;\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n mids = mids.slice().sort((a, b) => a - b);\n\n for(let i = 0, length = mids.length; i < length; ++i) {\n const mid = mids[i];\n const originalMessage = this.getMessageByPeer(fromPeerId, mid) as Message.message;\n if(originalMessage.pFlags.is_outgoing) { // this can happen when forwarding a changelog\n this.sendText(peerId, originalMessage.message, {\n entities: originalMessage.entities,\n scheduleDate: options.scheduleDate,\n silent: options.silent\n });\n\n mids.splice(i--, 1);\n --length;\n }\n }\n\n if(!mids.length) {\n return Promise.resolve();\n }\n\n const config = await this.apiManager.getConfig();\n const overflowMids = mids.splice(config.forwarded_count_max, mids.length - config.forwarded_count_max);\n\n if(options.dropCaptions) {\n options.dropAuthor = true;\n }\n\n const groups: {\n [groupId: string]: {\n tempId: string,\n messages: Message.message[]\n }\n } = {};\n\n const newMids: number[] = [];\n const newMessages = mids.map((mid) => {\n const originalMessage = this.getMessageByPeer(fromPeerId, mid) as Message.message;\n const message: Message.message = this.generateOutgoingMessage(peerId, options);\n newMids.push(message.id);\n\n const keys: Array = [\n 'entities',\n 'media'\n // 'reply_markup'\n ];\n\n if(!options.dropAuthor) {\n message.fwd_from = this.generateForwardHeader(peerId, originalMessage);\n keys.push('views', 'forwards');\n\n if(message.fwd_from?.from_name && peerId === this.appPeersManager.peerId) {\n delete message.from_id;\n }\n }\n\n if(!options.dropCaptions || !originalMessage.media) {\n keys.push('message');\n }\n\n const replyToMid = originalMessage.reply_to?.reply_to_msg_id;\n const replyToMessageIdx = mids.indexOf(replyToMid);\n if(replyToMid && replyToMessageIdx !== -1) {\n const newReplyToMid = newMids[replyToMessageIdx];\n message.reply_to = {\n _: 'messageReplyHeader',\n reply_to_msg_id: newReplyToMid,\n pFlags: {}\n };\n\n /* this.invokeAfterMessageIsSent(newReplyToMid, 'reply', async(originalMessage) => {\n message.reply_to.reply_to_msg_id = originalMessage.mid;\n }); */\n }\n\n keys.forEach((key) => {\n // @ts-ignore\n message[key] = copy(originalMessage[key]);\n });\n\n const document = (message.media as MessageMedia.messageMediaDocument)?.document as MyDocument;\n if(document) {\n const types: MyDocument['type'][] = ['round', 'voice'];\n if(types.includes(document.type)) {\n (message as MyMessage).pFlags.media_unread = true;\n }\n\n if(document.sticker && !this.rootScope.premium) {\n const effectThumb = getStickerEffectThumb(document);\n if(effectThumb) {\n (message.media as MessageMedia.messageMediaDocument).pFlags.nopremium = true;\n }\n }\n }\n\n if(originalMessage.grouped_id) {\n const group = groups[originalMessage.grouped_id] ??= {tempId: '' + ++this.groupedTempId, messages: []};\n group.messages.push(message);\n }\n\n return message;\n });\n\n for(const groupId in groups) {\n const group = groups[groupId];\n if(group.messages.length > 1) {\n group.messages.forEach((message) => {\n message.grouped_id = group.tempId;\n });\n }\n }\n\n newMessages.forEach((message) => {\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n sequential: true\n });\n });\n\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const promise = /* true ? Promise.resolve() : */this.apiManager.invokeApiAfter('messages.forwardMessages', {\n from_peer: this.appPeersManager.getInputPeerById(fromPeerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n random_id: newMessages.map((message) => message.random_id),\n to_peer: this.appPeersManager.getInputPeerById(peerId),\n with_my_score: options.withMyScore,\n silent: options.silent,\n schedule_date: options.scheduleDate,\n drop_author: options.dropAuthor,\n drop_media_captions: options.dropCaptions,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n }, sentRequestOptions).then((updates) => {\n this.log('forwardMessages updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n this.onMessagesSendError(newMessages, error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n const promises: (typeof promise)[] = [promise];\n if(overflowMids.length) {\n promises.push(this.forwardMessages(peerId, fromPeerId, overflowMids, options));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public generateEmptyMessage(mid: number): Message.message | Message.messageService {\n return undefined;\n // return {\n // _: 'messageEmpty',\n // id: getServerMessageId(mid),\n // mid,\n // deleted: true,\n // pFlags: {}\n // };\n }\n\n private onMessagesSendError(messages: Message.message[], error?: ApiError) {\n messages.forEach((message) => {\n if(message.error === error) {\n return;\n }\n\n if(error) {\n message.error = error;\n this.rootScope.dispatchEvent('message_error', {storageKey: message.storageKey, tempId: message.mid, error});\n\n const dialog = this.getDialogOnly(message.peerId);\n if(dialog) {\n this.rootScope.dispatchEvent('dialog_unread', {peerId: message.peerId, dialog});\n }\n } else {\n delete message.error;\n }\n });\n }\n\n public getMessagesStorageByKey(key: MessagesStorageKey) {\n const s = key.split('_');\n const peerId: PeerId = +s[0];\n const type: MessagesStorageType = s[1] as any;\n return type === 'scheduled' ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n }\n\n public getMessageFromStorage(storage: MessagesStorage | MessagesStorageKey, mid: number) {\n if(typeof(storage) === 'string') {\n storage = this.getMessagesStorageByKey(storage);\n }\n\n return storage && storage.get(mid)/* || this.generateEmptyMessage(mid) */;\n }\n\n private createMessageStorage(peerId: PeerId, type: MessagesStorageType) {\n const storage: MessagesStorage = new Map() as any;\n storage.peerId = peerId;\n storage.type = type;\n storage.key = `${peerId}_${type}`;\n\n /* let num = 0;\n Object.defineProperty(storage, 'num', {\n get: () => ++num,\n set: (_num: number) => num = _num,\n enumerable: false\n });\n\n Object.defineProperty(storage, 'generateIndex', {\n value: (message: any) => {\n if(message.index === undefined) {\n message.index = (message.date * 0x10000) + (storage.num & 0xFFFF);\n }\n },\n enumerable: false\n }); */\n\n return storage;\n }\n\n public getHistoryMessagesStorage(peerId: PeerId) {\n return this.messagesStorageByPeerId[peerId] ??= this.createMessageStorage(peerId, 'history');\n }\n\n public getMessagesStorage(key: MessagesStorageKey | MessagesStorage): MessagesStorage {\n if(typeof(key) === 'object') {\n return key;\n } else {\n return this.getMessagesStorageByKey(key);\n }\n }\n\n public getMessageById(messageId: number) {\n for(const peerId in this.messagesStorageByPeerId) {\n if(this.appPeersManager.isChannel(peerId.toPeerId())) {\n continue;\n }\n\n const message = this.messagesStorageByPeerId[peerId].get(messageId);\n if(message) {\n return message;\n }\n }\n\n return this.getMessageFromStorage(null, messageId);\n }\n\n public getMessageByPeer(peerId: PeerId, messageId: number) {\n if(!peerId) {\n return this.getMessageById(messageId);\n }\n\n return this.getMessageFromStorage(this.getHistoryMessagesStorage(peerId), messageId);\n }\n\n public getMessagePeer(message: any): PeerId {\n const toId = message.peer_id && this.appPeersManager.getPeerId(message.peer_id) || NULL_PEER_ID;\n\n return toId;\n }\n\n public getDialogOnly(peerId: PeerId) {\n return this.dialogsStorage.getDialogOnly(peerId);\n }\n\n public cantForwardDeleteMids(storageKey: MessagesStorageKey, mids: number[]) {\n const storage = this.getMessagesStorage(storageKey);\n let cantForward = !mids.length, cantDelete = !mids.length;\n for(const mid of mids) {\n const message = this.getMessageFromStorage(storage, mid);\n if(!cantForward) {\n cantForward = !this.canForward(message);\n }\n\n if(!cantDelete) {\n cantDelete = !this.canDeleteMessage(message);\n }\n\n if(cantForward && cantDelete) break;\n }\n\n return {cantForward, cantDelete};\n }\n\n public reloadConversationOrTopic(peerId: PeerId, threadId?: number) {\n if(threadId) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n this.reloadConversation(peerId);\n }\n }\n\n public reloadConversation(inputPeer?: PeerId | InputPeer): CancellablePromise;\n public reloadConversation(inputPeer: PeerId | InputPeer) {\n let promise: CancellablePromise;\n if(inputPeer !== undefined) {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n this.log.warn('reloadConversation', peerId);\n\n let obj = this.reloadConversationsPeers.get(peerId);\n if(obj) {\n promise = obj.promise;\n }\n\n if(promise) {\n return promise;\n }\n\n promise = deferredPromise();\n this.reloadConversationsPeers.set(peerId, obj = {\n inputDialogPeer: this.appPeersManager.getInputDialogPeerById(inputPeer),\n promise\n });\n }\n\n if(this.reloadConversationsPromise) {\n return promise || this.reloadConversationsPromise;\n }\n\n this.reloadConversationsPromise = pause(0).then(() => {\n const inputDialogPeers: InputDialogPeer[] = [];\n const promises: {[peerId: string]: typeof promise} = {};\n for(const [peerId, {inputDialogPeer, promise}] of this.reloadConversationsPeers) {\n inputDialogPeers.push(inputDialogPeer);\n promises[peerId] = promise;\n }\n\n const fullfillLeft = () => {\n for(const peerId in promises) {\n this.reloadConversationsPeers.delete(+peerId);\n promises[peerId].resolve(undefined);\n }\n };\n\n const invoke = async() => {\n for(;;) {\n const result = await this.apiManager.invokeApi('messages.getPeerDialogs', {peers: inputDialogPeers});\n const currentState = this.apiUpdatesManager.updatesState;\n const {state} = result;\n if(currentState.pts && currentState.pts !== state.pts) {\n await pause(500);\n continue;\n }\n\n return result;\n }\n };\n\n return invoke().then((result) => {\n for(const peerId in promises) {\n this.reloadConversationsPeers.delete(+peerId);\n }\n\n this.dialogsStorage.applyDialogs(result);\n\n result.dialogs.forEach((dialog) => {\n const peerId = dialog.peerId;\n if(peerId) {\n promises[peerId].resolve(dialog as Dialog);\n delete promises[peerId];\n }\n });\n }, noop).then(() => {\n fullfillLeft();\n\n this.reloadConversationsPromise = null;\n if(this.reloadConversationsPeers.size) {\n this.reloadConversation();\n }\n });\n });\n\n return promise || this.reloadConversationsPromise;\n }\n\n private doFlushHistory(peerId: PeerId, just_clear?: boolean, revoke?: boolean, threadId?: number): Promise {\n let promise: Promise;\n const processResult = (affectedHistory: MessagesAffectedHistory) => {\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updateShort',\n update: {\n _: 'updatePts',\n pts: affectedHistory.pts,\n pts_count: affectedHistory.pts_count\n }\n });\n\n if(!affectedHistory.offset) {\n return true;\n }\n\n return this.doFlushHistory(peerId, just_clear, revoke, threadId);\n };\n\n if(!threadId) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'messages.deleteHistory',\n params: {\n just_clear,\n revoke,\n peer: this.appPeersManager.getInputPeerById(peerId),\n max_id: 0\n },\n processResult\n });\n } else {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'channels.deleteTopicHistory',\n params: {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n top_msg_id: getServerMessageId(threadId)\n },\n processResult\n });\n }\n\n return promise;\n }\n\n public async flushHistory(peerId: PeerId, justClear?: boolean, revoke?: boolean, threadId?: number) {\n if(this.appPeersManager.isChannel(peerId) && !threadId) {\n const promise = this.getHistory(peerId, 0, 1);\n\n const historyResult = await promise;\n\n const channelId = peerId.toChatId();\n const maxId = historyResult.history[0] || 0;\n return this.apiManager.invokeApiSingle('channels.deleteHistory', {\n channel: this.appChatsManager.getChannelInput(channelId),\n max_id: getServerMessageId(maxId)\n }).then((bool) => {\n if(bool) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannelAvailableMessages',\n channel_id: channelId,\n available_min_id: maxId\n });\n }\n\n return bool;\n });\n }\n\n return this.doFlushHistory(peerId, justClear, revoke, threadId).then(() => {\n if(!threadId) {\n this.flushStoragesByPeerId(peerId);\n }\n\n if(justClear) {\n this.rootScope.dispatchEvent('dialog_flush', {peerId, dialog: this.getDialogOnly(peerId)});\n } else {\n const key = this.getTypingKey(peerId, threadId);\n delete this.notificationsToHandle[key];\n delete this.typings[key];\n\n if(!threadId) {\n const c = this.reloadConversationsPeers.get(peerId);\n if(c) {\n this.reloadConversationsPeers.delete(peerId);\n c.promise.resolve(undefined);\n }\n }\n\n this.dialogsStorage.dropDialogOnDeletion(peerId, threadId);\n }\n });\n }\n\n private flushStoragesByPeerId(peerId: PeerId) {\n [\n this.historiesStorage,\n this.threadsStorage,\n this.searchesStorage,\n this.pendingAfterMsgs,\n this.pendingTopMsgs\n ].forEach((s) => {\n delete s[peerId];\n });\n\n for(const key in this.pinnedMessages) {\n if(+key === peerId || key.startsWith(peerId + '_')) {\n delete this.pinnedMessages[key];\n }\n }\n\n const needSingleMessages = this.needSingleMessages.get(peerId);\n if(needSingleMessages) {\n for(const [mid, promise] of needSingleMessages) {\n promise.resolve(this.generateEmptyMessage(mid));\n }\n\n needSingleMessages.clear();\n }\n\n [\n this.messagesStorageByPeerId,\n this.scheduledMessagesStorage\n ].forEach((s) => {\n const ss = s[peerId];\n if(ss) {\n ss.clear();\n }\n });\n\n this.dialogsStorage.flushForumTopicsCache(peerId);\n }\n\n public hidePinnedMessages(peerId: PeerId) {\n return Promise.all([\n this.appStateManager.getState(),\n this.getPinnedMessage(peerId)\n ])\n .then(([state, pinned]) => {\n state.hiddenPinnedMessages[peerId] = pinned.maxId;\n this.rootScope.dispatchEvent('peer_pinned_hidden', {peerId, maxId: pinned.maxId});\n });\n }\n\n public getPinnedMessagesKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n public getPinnedMessage(peerId: PeerId, threadId?: number) {\n const p = this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)] ??= {};\n if(p.promise) return p.promise;\n else if(p.maxId) return Promise.resolve(p);\n\n return p.promise = this.getSearch({\n peerId,\n inputFilter: {_: 'inputMessagesFilterPinned'},\n maxId: 0,\n limit: 1,\n threadId\n }).then((result) => {\n p.count = result.count;\n p.maxId = result.history[0]?.mid;\n return p;\n }).finally(() => {\n delete p.promise;\n });\n }\n\n public getPinnedMessagesCount(peerId: PeerId, threadId?: number) {\n return this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)]?.count;\n }\n\n public getPinnedMessagesMaxId(peerId: PeerId, threadId?: number) {\n return this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)]?.maxId;\n }\n\n public updatePinnedMessage(peerId: PeerId, mid: number, unpin?: boolean, silent?: boolean, pm_oneside?: boolean) {\n return this.apiManager.invokeApi('messages.updatePinnedMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n unpin,\n silent,\n pm_oneside,\n id: getServerMessageId(mid)\n }).then((updates) => {\n // this.log('pinned updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public unpinAllMessages(peerId: PeerId): Promise {\n return this.apiManager.invokeApiSingle('messages.unpinAllMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId)\n }).then((affectedHistory) => {\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updateShort',\n update: {\n _: 'updatePts',\n pts: affectedHistory.pts,\n pts_count: affectedHistory.pts_count\n }\n });\n\n if(!affectedHistory.offset) {\n const storage = this.getHistoryMessagesStorage(peerId);\n storage.forEach((message) => {\n if((message as Message.message).pFlags.pinned) {\n delete (message as Message.message).pFlags.pinned;\n }\n });\n\n this.rootScope.dispatchEvent('peer_pinned_messages', {peerId, unpinAll: true});\n delete this.pinnedMessages[this.getPinnedMessagesKey(peerId)];\n\n return true;\n }\n\n return this.unpinAllMessages(peerId);\n });\n }\n\n public getAlbumText(grouped_id: string) {\n const group = this.groupedMessagesStorage[grouped_id];\n return getAlbumText(Array.from(group.values()) as Message.message[]);\n }\n\n public getGroupsFirstMessage(message: Message.message) {\n if(!message?.grouped_id) return message;\n\n const storage = this.groupedMessagesStorage[message.grouped_id];\n let minMid = Number.MAX_SAFE_INTEGER;\n for(const [mid, message] of storage) {\n if(message.mid < minMid) {\n minMid = message.mid;\n }\n }\n\n return this.getMessageFromStorage(storage, minMid) as Message.message;\n }\n\n public getMidsByAlbum(groupedId: string, sort: 'asc' | 'desc' = 'asc') {\n return getObjectKeysAndSort(this.groupedMessagesStorage[groupedId], sort);\n }\n\n public getMessagesByAlbum(groupedId: string) {\n const mids = this.getMidsByAlbum(groupedId, 'asc');\n const storage = this.groupedMessagesStorage[groupedId];\n return mids.map((mid) => this.getMessageFromStorage(storage, mid) as Message.message);\n }\n\n public getMidsByMessage(message: Message) {\n if(!message) return [];\n else if((message as Message.message).grouped_id) return this.getMidsByAlbum((message as Message.message).grouped_id);\n else return [message.mid];\n }\n\n public filterMessages(message: MyMessage, verify: (message: MyMessage) => boolean) {\n const out: MyMessage[] = [];\n if((message as Message.message).grouped_id) {\n const storage = this.groupedMessagesStorage[(message as Message.message).grouped_id];\n for(const [mid, message] of storage) {\n if(verify(message)) {\n out.push(message);\n }\n }\n } else {\n if(verify(message)) {\n out.push(message);\n }\n }\n\n return out;\n }\n\n public generateTempMessageId(peerId: PeerId) {\n const dialog = this.getDialogOnly(peerId);\n return this.appMessagesIdsManager.generateTempMessageId(dialog?.top_message || 0);\n }\n\n public setMessageUnreadByDialog(message: MyMessage, dialog: Dialog | ForumTopic = this.getDialogOnly(message.peerId)) {\n if(dialog && message.mid) {\n if(message.mid > dialog[message.pFlags.out ?\n 'read_outbox_max_id' :\n 'read_inbox_max_id']) {\n message.pFlags.unread = true;\n }\n }\n }\n\n public saveMessage(message: Message, options: Partial<{\n storage: MessagesStorage,\n isScheduled: true,\n isOutgoing: true,\n // isNew: boolean, // * new - from update\n }> = {}) {\n if(!message || message._ === 'messageEmpty') {\n return;\n }\n\n message.pFlags ??= {};\n\n // * exclude from state\n // defineNotNumerableProperties(message, ['rReply', 'mid', 'savedFrom', 'fwdFromId', 'fromId', 'peerId', 'reply_to_mid', 'viaBotId']);\n\n const peerId = this.getMessagePeer(message);\n const storage = options.storage || this.getHistoryMessagesStorage(peerId);\n const isChannel = message.peer_id._ === 'peerChannel';\n const isBroadcast = isChannel && this.appChatsManager.isBroadcast(peerId.toChatId());\n const isMessage = message._ === 'message';\n\n if(options.isOutgoing) {\n message.pFlags.is_outgoing = true;\n }\n\n const mid = generateMessageId(message.id);\n message.mid = mid;\n\n if(isMessage) {\n if(options.isScheduled) {\n message.pFlags.is_scheduled = true;\n }\n\n if(message.grouped_id) {\n const storage = this.groupedMessagesStorage[message.grouped_id] ??= this.createMessageStorage(peerId, 'grouped');\n storage.set(mid, message);\n }\n\n if(message.via_bot_id) {\n // ! WARNING\n message.viaBotId = message.via_bot_id as any;\n }\n }\n\n // this.log(dT(), 'msg unread', mid, apiMessage.pFlags.out, dialog && dialog[apiMessage.pFlags.out ? 'read_outbox_max_id' : 'read_inbox_max_id'])\n\n const replyTo = message.reply_to;\n if(replyTo) {\n if(replyTo.reply_to_msg_id) {\n replyTo.reply_to_msg_id = message.reply_to_mid = generateMessageId(replyTo.reply_to_msg_id);\n }\n\n if(replyTo.reply_to_top_id) {\n replyTo.reply_to_top_id = generateMessageId(replyTo.reply_to_top_id);\n }\n }\n\n const replies = isMessage && message.replies;\n if(replies) {\n if(replies.max_id) replies.max_id = generateMessageId(replies.max_id);\n if(replies.read_max_id) replies.read_max_id = generateMessageId(replies.read_max_id);\n }\n\n const overwriting = !!peerId;\n if(!overwriting) {\n message.date -= this.timeManager.getServerTimeOffset();\n }\n\n // storage.generateIndex(message);\n const myId = this.appPeersManager.peerId;\n\n const fwdHeader = isMessage && (message as Message.message).fwd_from;\n\n message.peerId = peerId;\n if(peerId === myId/* && !message.from_id && !message.fwd_from */) {\n message.fromId = fwdHeader ? (fwdHeader.from_id ? this.appPeersManager.getPeerId(fwdHeader.from_id) : NULL_PEER_ID) : myId;\n } else {\n // message.fromId = message.pFlags.post || (!message.pFlags.out && !message.from_id) ? peerId : appPeersManager.getPeerId(message.from_id);\n message.fromId = message.pFlags.post || !message.from_id ? peerId : this.appPeersManager.getPeerId(message.from_id);\n }\n\n this.setMessageUnreadByDialog(message);\n\n if(fwdHeader) {\n // if(peerId === myID) {\n if(fwdHeader.saved_from_msg_id) fwdHeader.saved_from_msg_id = generateMessageId(fwdHeader.saved_from_msg_id);\n if(fwdHeader.channel_post) fwdHeader.channel_post = generateMessageId(fwdHeader.channel_post);\n\n const peer = fwdHeader.saved_from_peer || fwdHeader.from_id;\n const msgId = fwdHeader.saved_from_msg_id || fwdHeader.channel_post;\n if(peer && msgId) {\n const savedFromPeerId = this.appPeersManager.getPeerId(peer);\n const savedFromMid = generateMessageId(msgId);\n message.savedFrom = savedFromPeerId + '_' + savedFromMid;\n }\n\n /* if(peerId.isAnyChat() || peerId === myID) {\n message.fromId = appPeersManager.getPeerID(!message.from_id || deepEqual(message.from_id, fwdHeader.from_id) ? fwdHeader.from_id : message.from_id);\n } */\n /* } else {\n apiMessage.fwdPostID = fwdHeader.channel_post;\n } */\n\n message.fwdFromId = this.appPeersManager.getPeerId(fwdHeader.from_id);\n\n if(!overwriting) {\n fwdHeader.date -= this.timeManager.getServerTimeOffset();\n }\n }\n\n const mediaContext: ReferenceContext = {\n type: 'message',\n peerId,\n messageId: mid\n };\n\n /* if(isMessage) {\n const entities = message.entities;\n if(entities && entities.find((entity) => entity._ === 'messageEntitySpoiler')) {\n message.media = {_: 'messageMediaUnsupported'};\n }\n } */\n\n let unsupported = false;\n const media = isMessage && message.media;\n if(media) {\n switch(media._) {\n case 'messageMediaEmpty': {\n delete message.media;\n break;\n }\n\n case 'messageMediaPhoto': {\n if(media.ttl_seconds) {\n unsupported = true;\n } else {\n media.photo = this.appPhotosManager.savePhoto(media.photo, mediaContext);\n }\n\n if(!(media as MessageMedia.messageMediaPhoto).photo) { // * found this bug on test DC\n delete message.media;\n }\n\n break;\n }\n\n case 'messageMediaPoll': {\n const result = this.appPollsManager.savePoll(media.poll, media.results, message);\n media.poll = result.poll;\n media.results = result.results;\n break;\n }\n\n case 'messageMediaDocument': {\n if(media.ttl_seconds) {\n unsupported = true;\n } else {\n const originalDoc = media.document;\n media.document = this.appDocsManager.saveDoc(originalDoc, mediaContext); // 11.04.2020 warning\n\n if(!media.document && originalDoc._ !== 'documentEmpty') {\n unsupported = true;\n }\n }\n\n break;\n }\n\n case 'messageMediaWebPage': {\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(peerId, mid, options.isScheduled);\n media.webpage = this.appWebPagesManager.saveWebPage(media.webpage, messageKey, mediaContext);\n\n if(!media.webpage) {\n delete message.media;\n }\n\n break;\n }\n\n /* case 'messageMediaGame':\n AppGamesManager.saveGame(apiMessage.media.game, apiMessage.mid, mediaContext);\n apiMessage.media.handleMessage = true;\n break; */\n\n case 'messageMediaInvoice': {\n media.photo = this.appWebDocsManager.saveWebDocument(media.photo);\n const extendedMedia = media.extended_media;\n if(extendedMedia?._ === 'messageExtendedMedia') {\n const extendedMediaMedia = extendedMedia.media;\n (extendedMediaMedia as MessageMedia.messageMediaPhoto).photo = this.appPhotosManager.savePhoto((extendedMediaMedia as MessageMedia.messageMediaPhoto).photo, mediaContext);\n (extendedMediaMedia as MessageMedia.messageMediaDocument).document = this.appDocsManager.saveDoc((extendedMediaMedia as MessageMedia.messageMediaDocument).document, mediaContext);\n }\n break;\n }\n\n case 'messageMediaUnsupported': {\n unsupported = true;\n break;\n }\n }\n }\n\n // if(isMessage && !unsupported && message.entities) {\n // unsupported = message.entities.some((entity) => entity._ === 'messageEntityCustomEmoji');\n // }\n\n if(isMessage && unsupported) {\n message.media = {_: 'messageMediaUnsupported'};\n message.message = '';\n delete message.entities;\n delete message.totalEntities;\n }\n\n if(!isMessage && message.action) {\n const action = message.action as MessageAction;\n const suffix = message.fromId === this.appUsersManager.getSelf().id ? 'You' : '';\n let migrateFrom: PeerId, migrateTo: PeerId;\n\n if((action as MessageAction.messageActionChatEditPhoto).photo) {\n (action as MessageAction.messageActionChatEditPhoto).photo = this.appPhotosManager.savePhoto((action as MessageAction.messageActionChatEditPhoto).photo, mediaContext);\n }\n\n if((action as any).document) {\n (action as any).document = this.appDocsManager.saveDoc((action as any).photo, mediaContext);\n }\n\n switch(action._) {\n // case 'messageActionChannelEditPhoto':\n case 'messageActionChatEditPhoto':\n // action.photo = appPhotosManager.savePhoto(action.photo, mediaContext);\n if((action.photo as Photo.photo)?.video_sizes) {\n // @ts-ignore\n action._ = isBroadcast ? 'messageActionChannelEditVideo' : 'messageActionChatEditVideo';\n } else {\n if(isBroadcast) { // ! messageActionChannelEditPhoto ะฝะต ััƒั‰ะตัั‚ะฒัƒะตั‚ ะฒ ะฟั€ะธะฝั†ะธะฟะต, ัั‚ะพ ะธัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ะฟะตั€ะตะฒะพะดะฐ.\n // @ts-ignore\n action._ = 'messageActionChannelEditPhoto';\n }\n }\n break;\n\n case 'messageActionGroupCall': {\n // assumeType(action);\n\n this.appGroupCallsManager.saveGroupCall(action.call);\n\n let type: string;\n if(action.duration === undefined) {\n type = 'started';\n } else {\n type = 'ended'\n }\n\n if(!isBroadcast) {\n type += '_by' + suffix;\n }\n\n // @ts-ignore\n action.type = type;\n\n break;\n }\n\n case 'messageActionChatEditTitle':\n /* if(options.isNew) {\n const chat = appChatsManager.getChat(peerId.toChatId());\n chat.title = action.title;\n appChatsManager.saveApiChat(chat, true);\n } */\n\n if(isBroadcast) {\n // @ts-ignore\n action._ = 'messageActionChannelEditTitle';\n }\n break;\n\n case 'messageActionChatDeletePhoto':\n if(isBroadcast) {\n // @ts-ignore\n action._ = 'messageActionChannelDeletePhoto';\n }\n break;\n\n case 'messageActionChatAddUser':\n if(action.users.length === 1) {\n // @ts-ignore\n action.user_id = action.users[0];\n // @ts-ignore\n if(message.fromId === action.user_id) {\n if(isChannel) {\n // @ts-ignore\n action._ = 'messageActionChatJoined' + suffix;\n } else {\n // @ts-ignore\n action._ = 'messageActionChatReturn' + suffix;\n }\n }\n } else if(action.users.length > 1) {\n // @ts-ignore\n action._ = 'messageActionChatAddUsers';\n }\n break;\n\n case 'messageActionChatDeleteUser':\n if(message.fromId === action.user_id) {\n // @ts-ignore\n action._ = 'messageActionChatLeave' + suffix;\n }\n break;\n\n case 'messageActionChannelMigrateFrom':\n migrateFrom = action.chat_id.toPeerId(true);\n migrateTo = peerId;\n break\n\n case 'messageActionChatMigrateTo':\n migrateFrom = peerId;\n migrateTo = action.channel_id.toPeerId(true);\n break;\n\n case 'messageActionHistoryClear':\n // apiMessage.deleted = true;\n message.clear_history = true;\n delete message.pFlags.out;\n delete message.pFlags.unread;\n break;\n\n case 'messageActionPhoneCall':\n // @ts-ignore\n action.type =\n (action.pFlags.video ? 'video_' : '') +\n (action.duration !== undefined ? (message.pFlags.out ? 'out_' : 'in_') : '') +\n (\n action.duration !== undefined ? 'ok' : (\n action.reason._ === 'phoneCallDiscardReasonMissed' ?\n 'missed' :\n 'cancelled'\n )\n );\n break;\n }\n\n if(migrateFrom &&\n migrateTo &&\n !this.migratedFromTo[migrateFrom] &&\n !this.migratedToFrom[migrateTo]) {\n this.migrateChecks(migrateFrom, migrateTo);\n }\n }\n\n /* if(message.grouped_id) {\n if(!groups) {\n groups = new Set();\n }\n\n groups.add(message.grouped_id);\n } else {\n message.rReply = this.getRichReplyText(message);\n } */\n\n if(isMessage && message.message.length && !message.totalEntities) {\n this.wrapMessageEntities(message);\n }\n\n storage.set(mid, message);\n\n return message;\n }\n\n public saveMessages(messages: any[], options: Partial<{\n storage: MessagesStorage,\n isScheduled: true,\n isOutgoing: true,\n // isNew: boolean, // * new - from update\n }> = {}): (Message.message | Message.messageService)[] {\n if((messages as any).saved) return messages;\n (messages as any).saved = true;\n messages.forEach((message, idx, arr) => {\n arr[idx] = this.saveMessage(message, options);\n });\n\n return messages;\n }\n\n public async getFirstMessageToEdit(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const slice = historyStorage.history.slice;\n if(slice.isEnd(SliceEnd.Bottom) && slice.length) {\n let goodMessage: Message.message | Message.messageService;\n const myPeerId = this.appPeersManager.peerId;\n for(const mid of slice) {\n const message = this.getMessageByPeer(peerId, mid);\n const good = myPeerId === peerId ? message.fromId === myPeerId : message.pFlags.out;\n\n if(good) {\n if(await this.canEditMessage(message, 'text')) {\n goodMessage = message;\n break;\n }\n\n // * this check will allow editing only last message\n // break;\n }\n }\n\n return goodMessage;\n }\n }\n\n private wrapMessageEntities(message: Message.message) {\n const apiEntities = message.entities ? message.entities.slice() : [];\n message.message = fixEmoji(message.message, apiEntities);\n\n const myEntities = parseEntities(message.message);\n message.totalEntities = mergeEntities(apiEntities, myEntities); // ! only in this order, otherwise bold and emoji formatting won't work\n }\n\n public reportMessages(peerId: PeerId, mids: number[], reason: ReportReason['_'], message?: string) {\n return this.apiManager.invokeApiSingle('messages.report', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n reason: {\n _: reason\n },\n message\n });\n }\n\n public startBot(botId: BotId, chatId?: ChatId, startParam?: string) {\n const peerId = chatId ? chatId.toPeerId(true) : botId.toPeerId();\n if(startParam) {\n const randomId = randomLong();\n\n return this.apiManager.invokeApi('messages.startBot', {\n bot: this.appUsersManager.getUserInput(botId),\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: randomId,\n start_param: startParam\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n const str = '/start';\n if(chatId) {\n let promise: Promise;\n if(this.appChatsManager.isChannel(chatId)) {\n promise = this.appChatsManager.inviteToChannel(chatId, [botId]);\n } else {\n promise = this.appChatsManager.addChatUser(chatId, botId, 0);\n }\n\n return promise.catch((error: ApiError) => {\n if(error?.type == 'USER_ALREADY_PARTICIPANT') {\n error.handled = true;\n return;\n }\n\n throw error;\n }).then(() => {\n return this.sendText(peerId, str + '@' + this.appPeersManager.getPeerUsername(botId.toPeerId()));\n });\n }\n\n return this.sendText(peerId, str);\n }\n\n public editPeerFolders(peerIds: PeerId[], folderId: number) {\n this.apiManager.invokeApi('folders.editPeerFolders', {\n folder_peers: peerIds.map((peerId) => {\n return {\n _: 'inputFolderPeer',\n peer: this.appPeersManager.getInputPeerById(peerId),\n folder_id: folderId\n };\n })\n }).then((updates) => {\n // this.log('editPeerFolders updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates); // WARNING! ะฒะพะทะผะพะถะฝะพ ั‚ัƒั‚ ะฝัƒะถะฝะพ ะดะพะฑะฐะฒะปัั‚ัŒ channelId, ะธ ะฒั‹ะทั‹ะฒะฐั‚ัŒ ะฐะฟะดะตะนั‚ ะดะปั ะบะฐะถะดะพะณะพ ะบะฐะฝะฐะปะฐ ะพั‚ะดะตะปัŒะฝะพ\n });\n }\n\n public getFilter(filterId: number) {\n return this.filtersStorage.getFilter(filterId);\n }\n\n public async toggleDialogPin(options: {\n peerId: PeerId,\n filterId?: number,\n topicId?: number\n }) {\n const {peerId, topicId, filterId = topicId ? peerId : undefined} = options;\n if(filterId === undefined) {\n throw new Error('No filterId');\n }\n\n if(filterId > 1) {\n return this.filtersStorage.toggleDialogPin(peerId, filterId);\n }\n\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, topicId);\n if(!dialog) throw undefined;\n\n const pinned = dialog.pFlags?.pinned ? undefined : true;\n\n if(pinned) {\n const max = await this.apiManager.getLimit(topicId ? 'topicPin' : (filterId === 1 ? 'folderPin' : 'pin'));\n if(this.dialogsStorage.getPinnedOrders(filterId).length >= max) {\n throw makeError(topicId ? 'PINNED_TOO_MUCH' : 'PINNED_DIALOGS_TOO_MUCH');\n }\n }\n\n if(topicId) {\n return this.appChatsManager.updatePinnedForumTopic(peerId.toChatId(), topicId, pinned);\n }\n\n return this.apiManager.invokeApi('messages.toggleDialogPin', {\n peer: this.appPeersManager.getInputDialogPeerById(peerId),\n pinned\n }).then((bool) => {\n const pFlags: Update.updateDialogPinned['pFlags'] = pinned ? {pinned} : {};\n this.apiUpdatesManager.saveUpdate({\n _: 'updateDialogPinned',\n peer: this.appPeersManager.getDialogPeer(peerId),\n folder_id: filterId,\n pFlags\n });\n });\n }\n\n public markDialogUnread(peerId: PeerId, read?: true) {\n const dialog = this.getDialogOnly(peerId);\n if(!dialog) return Promise.reject();\n\n const unread = read || dialog.pFlags?.unread_mark ? undefined : true;\n return this.apiManager.invokeApi('messages.markDialogUnread', {\n peer: this.appPeersManager.getInputDialogPeerById(peerId),\n unread\n }).then((bool) => {\n if(bool) {\n const pFlags: Update.updateDialogUnreadMark['pFlags'] = unread ? {unread} : {};\n this.onUpdateDialogUnreadMark({\n _: 'updateDialogUnreadMark',\n peer: this.appPeersManager.getDialogPeer(peerId),\n pFlags\n });\n }\n });\n }\n\n public migrateChecks(migrateFrom: PeerId, migrateTo: PeerId) {\n if(!this.migratedFromTo[migrateFrom] &&\n !this.migratedToFrom[migrateTo] &&\n this.appChatsManager.hasChat(migrateTo.toChatId())) {\n const fromChat = this.appChatsManager.getChat(migrateFrom.toChatId()) as Chat.chat;\n if(fromChat?.migrated_to && (fromChat.migrated_to as InputChannel.inputChannel).channel_id === migrateTo.toChatId()) {\n this.migratedFromTo[migrateFrom] = migrateTo;\n this.migratedToFrom[migrateTo] = migrateFrom;\n\n this.rootScope.dispatchEvent('dialog_migrate', {migrateFrom, migrateTo});\n\n this.dialogsStorage.dropDialogWithEvent(migrateFrom);\n }\n }\n }\n\n private canMessageBeEdited(message: Message, kind: 'text' | 'poll') {\n if((message as Message.message)?.pFlags?.is_outgoing) {\n return false;\n }\n\n const goodMedias = [\n 'messageMediaPhoto',\n 'messageMediaDocument',\n 'messageMediaWebPage'\n ];\n\n if(kind === 'poll') {\n goodMedias.push('messageMediaPoll');\n }\n\n if(!message ||\n message._ !== 'message' ||\n message.deleted ||\n message.fwd_from ||\n message.via_bot_id ||\n message.media && goodMedias.indexOf(message.media._) === -1 ||\n message.fromId && this.appUsersManager.isBot(message.fromId)) {\n return false;\n }\n\n if(message.media?._ === 'messageMediaDocument' &&\n ((message.media.document as Document.document).sticker || (message.media.document as Document.document).type === 'round')) {\n return false;\n }\n\n return true;\n }\n\n public async canEditMessage(message: Message.message | Message.messageService, kind: 'text' | 'poll' = 'text') {\n if(!message || !this.canMessageBeEdited(message, kind)) {\n return false;\n }\n\n // * second rule for saved messages, because there is no 'out' flag\n if(/* message.pFlags.out || */this.getMessagePeer(message) === this.appUsersManager.getSelf().id) {\n return true;\n }\n\n const {peerId} = message;\n\n const canEditMessageInPeer = this.appPeersManager.isBroadcast(peerId) ?\n this.appChatsManager.hasRights(peerId.toChatId(), 'edit_messages') :\n (\n peerId.isAnyChat() && kind === 'text' ?\n this.appChatsManager.hasRights(peerId.toChatId(), 'send_plain') || this.appChatsManager.hasRights(peerId.toChatId(), 'send_media') :\n true\n ) && message.pFlags.out;\n\n if(\n !canEditMessageInPeer || (\n message.peer_id._ !== 'peerChannel' &&\n message.date < (tsNow(true) - (await this.apiManager.getConfig()).edit_time_limit) &&\n (message as Message.message).media?._ !== 'messageMediaPoll'\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n public canDeleteMessage(message: MyMessage) {\n return message && (\n message.peerId.isUser() ||\n message.pFlags.out ||\n this.appChatsManager.getChat(message.peerId.toChatId())._ === 'chat' ||\n this.appChatsManager.hasRights(message.peerId.toChatId(), 'delete_messages')\n ) && (!message.pFlags.is_outgoing || !!message.error);\n }\n\n public getReplyKeyboard(peerId: PeerId) {\n return this.getHistoryStorage(peerId).replyMarkup;\n }\n\n public mergeReplyKeyboard(historyStorage: HistoryStorage, message: Message.messageService | Message.message) {\n // this.log('merge', message.mid, message.reply_markup, historyStorage.reply_markup)\n if(!message) {\n return false;\n }\n\n const messageReplyMarkup = (message as Message.message).reply_markup;\n if(!messageReplyMarkup &&\n !message.pFlags?.out &&\n !(message as Message.messageService).action) {\n return false;\n }\n\n if(messageReplyMarkup?._ === 'replyInlineMarkup') {\n return false;\n }\n\n const lastReplyMarkup = historyStorage.replyMarkup;\n if(messageReplyMarkup) {\n if(lastReplyMarkup && lastReplyMarkup.mid >= message.mid) {\n return false;\n }\n\n if(messageReplyMarkup.pFlags.selective) {\n return false;\n }\n\n if(historyStorage.maxOutId &&\n message.mid < historyStorage.maxOutId &&\n (messageReplyMarkup as ReplyMarkup.replyKeyboardMarkup | ReplyMarkup.replyKeyboardForceReply).pFlags.single_use) {\n (messageReplyMarkup as ReplyMarkup.replyKeyboardMarkup | ReplyMarkup.replyKeyboardForceReply).pFlags.hidden = true;\n }\n\n messageReplyMarkup.mid = message.mid;\n /* messageReplyMarkup = Object.assign({\n mid: message.mid\n }, messageReplyMarkup); */\n\n if(messageReplyMarkup._ !== 'replyKeyboardHide') {\n messageReplyMarkup.fromId = this.appPeersManager.getPeerId(message.from_id);\n }\n\n historyStorage.replyMarkup = messageReplyMarkup;\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n\n if(message.pFlags.out) {\n if(lastReplyMarkup) {\n assumeType(lastReplyMarkup);\n if(lastReplyMarkup.pFlags.single_use &&\n !lastReplyMarkup.pFlags.hidden &&\n (message.mid > lastReplyMarkup.mid || message.pFlags.is_outgoing) &&\n (message as Message.message).message) {\n lastReplyMarkup.pFlags.hidden = true;\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n } else if(!historyStorage.maxOutId ||\n message.mid > historyStorage.maxOutId) {\n historyStorage.maxOutId = message.mid;\n }\n }\n\n assumeType(message);\n if(message.action?._ === 'messageActionChatDeleteUser' &&\n (lastReplyMarkup ?\n message.action.user_id === (lastReplyMarkup as ReplyMarkup.replyKeyboardMarkup).fromId :\n this.appUsersManager.isBot(message.action.user_id)\n )\n ) {\n historyStorage.replyMarkup = {\n _: 'replyKeyboardHide',\n mid: message.mid,\n pFlags: {}\n };\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n\n return false;\n }\n\n public getSearchStorage(peerId: PeerId, inputFilter: MyInputMessagesFilter) {\n if(!this.searchesStorage[peerId]) this.searchesStorage[peerId] = {};\n if(!this.searchesStorage[peerId][inputFilter]) this.searchesStorage[peerId][inputFilter] = {history: []};\n return this.searchesStorage[peerId][inputFilter];\n }\n\n public getSearchCounters(\n peerId: PeerId,\n filters: MessagesFilter[],\n canCache = true,\n threadId?: number\n ): Promise {\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return Promise.resolve(filters.map((filter) => {\n return {\n _: 'messages.searchCounter',\n pFlags: {},\n filter: filter,\n count: 0\n };\n }));\n }\n\n const func = (canCache ? this.apiManager.invokeApiCacheable : this.apiManager.invokeApi).bind(this.apiManager);\n return func('messages.getSearchCounters', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n filters,\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n });\n }\n\n public filterMessagesByInputFilterFromStorage(inputFilter: MyInputMessagesFilter, history: number[], storage: MessagesStorage | MessagesStorageKey, limit: number) {\n const _storage = this.getMessagesStorage(storage);\n return filterMessagesByInputFilter(inputFilter, history.map((mid) => _storage.get(mid)), limit);\n }\n\n public getSearch({peerId, query, inputFilter, maxId, limit, nextRate, backLimit, threadId, folderId, minDate, maxDate}: {\n peerId?: PeerId,\n maxId?: number,\n limit?: number,\n nextRate?: number,\n backLimit?: number,\n threadId?: number,\n folderId?: number,\n query?: string,\n inputFilter?: {\n _: MyInputMessagesFilter\n },\n minDate?: number,\n maxDate?: number\n }): Promise<{\n count: number,\n next_rate: number,\n offset_id_offset: number,\n history: MyMessage[]\n }> {\n if(this.appPeersManager.isPeerRestricted(peerId)/* || true */) {\n return Promise.resolve({\n count: 0,\n offset_id_offset: 0,\n next_rate: undefined,\n history: []\n });\n }\n\n if(!query) query = '';\n if(!inputFilter) inputFilter = {_: 'inputMessagesFilterEmpty'};\n if(limit === undefined) limit = 20;\n if(!nextRate) nextRate = 0;\n if(!backLimit) backLimit = 0;\n\n minDate = minDate ? minDate / 1000 | 0 : 0;\n maxDate = maxDate ? maxDate / 1000 | 0 : 0;\n\n let foundMsgs: MyMessage[] = [];\n\n // this.log('search', maxId);\n\n if(backLimit) {\n limit += backLimit;\n }\n\n // const beta = inputFilter._ === 'inputMessagesFilterPinned' && !backLimit;\n const beta = false;\n\n let storage: {\n count?: number;\n history: SlicedArray;\n };\n\n // * ะบะพัั‚ั‹ะปัŒ ะดะปั limit 1, ะตัะปะธ ะฝัƒะถะฝะพ ะธ ะฟะพะปัƒั‡ะธั‚ัŒ ัะพะพะฑั‰ะตะฝะธะต, ะธ ัƒะทะฝะฐั‚ัŒ ะบะพะปะธั‡ะตัั‚ะฒะพ ัะพะพะฑั‰ะตะฝะธะน\n if(peerId && !backLimit && !maxId && !query && limit !== 1 && !threadId/* && inputFilter._ !== 'inputMessagesFilterPinned' */) {\n storage = beta ?\n this.getSearchStorage(peerId, inputFilter._) as any :\n this.getHistoryStorage(peerId);\n foundMsgs = this.filterMessagesByInputFilterFromStorage(inputFilter._, storage.history.slice, this.getHistoryMessagesStorage(peerId), limit);\n }\n\n if(foundMsgs.length) {\n if(foundMsgs.length < limit && (beta ? storage.count !== storage.history.length : true)) {\n maxId = foundMsgs[foundMsgs.length - 1].mid;\n limit = limit - foundMsgs.length;\n } else {\n return Promise.resolve({\n count: beta ? storage.count : 0,\n next_rate: 0,\n offset_id_offset: 0,\n history: foundMsgs\n });\n }\n } else if(beta && storage?.count) {\n return Promise.resolve({\n count: storage.count,\n next_rate: 0,\n offset_id_offset: 0,\n history: []\n });\n }\n\n const canCache = false && (['inputMessagesFilterChatPhotos', 'inputMessagesFilterPinned'] as MyInputMessagesFilter[]).includes(inputFilter._);\n const method = (canCache ? this.apiManager.invokeApiCacheable : this.apiManager.invokeApi).bind(this.apiManager);\n\n let apiPromise: Promise;\n if(peerId && !nextRate && folderId === undefined/* || !query */) {\n apiPromise = method('messages.search', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n q: query || '',\n filter: inputFilter as any as MessagesFilter,\n min_date: minDate,\n max_date: maxDate,\n limit,\n offset_id: getServerMessageId(maxId) || 0,\n add_offset: backLimit ? -backLimit : 0,\n max_id: 0,\n min_id: 0,\n hash: '',\n top_msg_id: getServerMessageId(threadId) || 0\n }, {\n // timeout: APITIMEOUT,\n noErrorBox: true\n });\n } else {\n // var offsetDate = 0;\n let offsetPeerId: PeerId;\n let offsetId = 0;\n const offsetMessage = maxId && this.getMessageByPeer(peerId, maxId);\n\n if(offsetMessage && offsetMessage.date) {\n // offsetDate = offsetMessage.date + timeManager.getServerTimeOffset();\n offsetId = offsetMessage.id;\n offsetPeerId = this.getMessagePeer(offsetMessage);\n }\n\n apiPromise = method('messages.searchGlobal', {\n q: query,\n filter: inputFilter as any as MessagesFilter,\n min_date: minDate,\n max_date: maxDate,\n offset_rate: nextRate,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId),\n offset_id: offsetId,\n limit,\n folder_id: folderId\n }, {\n // timeout: APITIMEOUT,\n noErrorBox: true\n });\n }\n\n return apiPromise.then((searchResult: any) => {\n this.appUsersManager.saveApiUsers(searchResult.users);\n this.appChatsManager.saveApiChats(searchResult.chats);\n this.saveMessages(searchResult.messages);\n\n /* if(beta && storage && (!maxId || storage.history[storage.history.length - 1] === maxId)) {\n const storage = this.getSearchStorage(peerId, inputFilter._);\n const add = (searchResult.messages.map((m: any) => m.mid) as number[]).filter((mid) => storage.history.indexOf(mid) === -1);\n storage.history.push(...add);\n storage.history.sort((a, b) => b - a);\n storage.count = searchResult.count;\n } */\n\n if(DEBUG) {\n this.log('getSearch result:', inputFilter, searchResult);\n }\n\n const foundCount: number = searchResult.count || (foundMsgs.length + searchResult.messages.length);\n\n searchResult.messages.forEach((message: MyMessage) => {\n const peerId = this.getMessagePeer(message);\n if(peerId.isAnyChat()) {\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n if(chat.migrated_to) {\n this.migrateChecks(peerId, (chat.migrated_to as InputChannel.inputChannel).channel_id.toPeerId(true));\n }\n }\n\n foundMsgs.push(message);\n });\n\n return {\n count: foundCount,\n offset_id_offset: searchResult.offset_id_offset || 0,\n next_rate: searchResult.next_rate,\n history: foundMsgs\n };\n });\n }\n\n public subscribeRepliesThread(peerId: PeerId, mid: number) {\n const repliesKey = peerId + '_' + mid;\n for(const threadKey in this.threadsToReplies) {\n if(this.threadsToReplies[threadKey] === repliesKey) return;\n }\n\n this.getDiscussionMessage(peerId, mid);\n }\n\n public generateThreadServiceStartMessage(message: Message.message | Message.messageService) {\n const threadKey = message.peerId + '_' + message.mid;\n if(this.threadsServiceMessagesIdsStorage[threadKey]) return;\n\n const maxMessageId = getServerMessageId(Math.max(...this.getMidsByMessage(message)));\n const serviceStartMessage: Message.messageService = {\n _: 'messageService',\n pFlags: {\n is_single: true\n },\n id: this.appMessagesIdsManager.generateTempMessageId(maxMessageId),\n date: message.date,\n from_id: {_: 'peerUser', user_id: NULL_PEER_ID}/* message.from_id */,\n peer_id: message.peer_id,\n action: {\n _: 'messageActionDiscussionStarted'\n },\n reply_to: this.generateReplyHeader(message.peerId, message.id)\n };\n\n this.saveMessages([serviceStartMessage], {isOutgoing: true});\n this.threadsServiceMessagesIdsStorage[threadKey] = serviceStartMessage.mid;\n }\n\n public getThreadServiceMessageId(peerId: PeerId, threadId: number) {\n return this.threadsServiceMessagesIdsStorage[peerId + '_' + threadId];\n }\n\n public getDiscussionMessage(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApiSingle('messages.getDiscussionMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((result) => {\n this.appChatsManager.saveApiChats(result.chats);\n this.appUsersManager.saveApiUsers(result.users);\n this.saveMessages(result.messages);\n\n const message = this.getMessageWithReplies(result.messages[0] as Message.message);\n const threadKey = message.peerId + '_' + message.mid;\n\n this.generateThreadServiceStartMessage(message);\n\n const historyStorage = this.getHistoryStorage(message.peerId, message.mid);\n const newMaxId = result.max_id = generateMessageId(result.max_id) || 0;\n result.read_inbox_max_id = historyStorage.readMaxId = generateMessageId(result.read_inbox_max_id ?? message.mid);\n result.read_outbox_max_id = historyStorage.readOutboxMaxId = generateMessageId(result.read_outbox_max_id) || 0;\n\n const first = historyStorage.history.first;\n if(historyStorage.maxId && historyStorage.maxId < newMaxId && first.isEnd(SliceEnd.Bottom)) {\n first.unsetEnd(SliceEnd.Bottom);\n }\n historyStorage.maxId = newMaxId;\n\n this.threadsToReplies[threadKey] = peerId + '_' + mid;\n\n return message;\n });\n }\n\n private handleNewMessage(message: MyMessage) {\n this.rootScope.dispatchEvent('history_multiappend', message);\n }\n\n private handleNewDialogs = () => {\n let newMaxSeenId = 0;\n const updateMap: BroadcastEvents['dialogs_multiupdate']= new Map();\n\n const processDialog = (dialog: MTDialog.dialog | ForumTopic) => {\n const {peerId} = dialog;\n this.dialogsStorage.pushDialog({dialog});\n if(!this.appPeersManager.isChannel(peerId)) {\n newMaxSeenId = Math.max(newMaxSeenId, dialog.top_message || 0);\n }\n\n let cache = updateMap.get(peerId);\n if(!cache) {\n updateMap.set(peerId, cache = {});\n }\n\n if(dialog._ === 'forumTopic') {\n (cache.topics ??= new Map()).set(dialog.id, dialog);\n } else {\n cache.dialog = dialog;\n }\n };\n\n for(const [peerId, obj] of this.newDialogsToHandle) {\n const isDialogDefined = 'dialog' in obj;\n const {dialog, topics} = obj;\n\n if(isDialogDefined) {\n if(!dialog) {\n this.reloadConversation(peerId.toPeerId());\n } else if(this.dialogsStorage.getDialogOnly(peerId)) { // * can be already dropped\n processDialog(dialog);\n }\n }\n\n if(topics) {\n topics?.forEach((topic, id) => {\n if(!topic) {\n this.dialogsStorage.getForumTopicById(peerId, id);\n } else if(this.dialogsStorage.getForumTopic(peerId, id)) { // * can be already dropped\n processDialog(topic);\n }\n });\n }\n }\n\n // this.log('after order:', this.dialogsStorage[0].map((d) => d.peerId));\n\n if(newMaxSeenId !== 0) {\n this.incrementMaxSeenId(newMaxSeenId);\n }\n\n this.rootScope.dispatchEvent('dialogs_multiupdate', updateMap);\n this.newDialogsToHandle.clear();\n };\n\n public scheduleHandleNewDialogs(peerId?: PeerId, dialog?: Dialog | ForumTopic | ForumTopic['id']) {\n if(peerId !== undefined) {\n let obj = this.newDialogsToHandle.get(peerId);\n if(!obj) {\n this.newDialogsToHandle.set(peerId, obj = {});\n }\n\n const isObject = typeof(dialog) === 'object';\n if(!dialog || (isObject && dialog._ === 'dialog')) {\n obj.dialog = dialog as Dialog;\n } else {\n obj.topics ??= new Map();\n if(isObject) {\n obj.topics.set((dialog as ForumTopic).id, dialog as ForumTopic);\n } else {\n obj.topics.set(dialog as number, undefined);\n }\n }\n }\n\n return this.newDialogsHandlePromise ??= pause(0).then(() => {\n this.newDialogsHandlePromise = undefined;\n this.handleNewDialogs();\n });\n }\n\n public async deleteMessages(peerId: PeerId, mids: number[], revoke?: boolean, isRecursion?: boolean) {\n let promise: Promise;\n\n const isChannel = this.appPeersManager.isChannel(peerId);\n const channelId = isChannel && peerId.toChatId();\n if(isChannel && !isRecursion) {\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n if(!channel.pFlags.creator && !channel.admin_rights?.pFlags?.delete_messages) {\n mids = mids.filter((mid) => {\n const message = this.getMessageByPeer(peerId, mid);\n return !!message.pFlags.out;\n });\n\n if(!mids.length) {\n return;\n }\n }\n }\n\n const config = await this.apiManager.getConfig();\n const overflowMids = mids.splice(config.forwarded_count_max, mids.length - config.forwarded_count_max);\n\n const serverMessageIds = mids.map((mid) => {\n const messageId = getServerMessageId(mid);\n // filter outgoing messages\n return generateMessageId(messageId) === mid && messageId;\n }).filter(Boolean);\n\n if(isChannel) {\n promise = this.apiManager.invokeApi('channels.deleteMessages', {\n channel: this.appChatsManager.getChannelInput(channelId),\n id: serverMessageIds\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteChannelMessages',\n channel_id: channelId,\n messages: mids,\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n });\n });\n } else {\n promise = this.apiManager.invokeApi('messages.deleteMessages', {\n revoke,\n id: serverMessageIds\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteMessages',\n messages: mids,\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n });\n });\n }\n\n const promises: (typeof promise)[] = [promise];\n if(overflowMids.length) {\n promises.push(this.deleteMessages(peerId, overflowMids, revoke, true));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public readHistory(peerId: PeerId, maxId = 0, threadId?: number, force = false) {\n if(DO_NOT_READ_HISTORY) {\n return Promise.resolve();\n }\n\n // console.trace('start read')\n this.log('readHistory:', peerId, maxId, threadId);\n const readMaxId = this.getReadMaxIdIfUnread(peerId, threadId);\n if(!readMaxId) {\n if(threadId && !force) {\n const forumTopic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(!getServerMessageId(forumTopic.read_inbox_max_id)) {\n force = true;\n }\n }\n\n if(!force) {\n const dialog = this.appChatsManager.isForum(peerId.toChatId()) && threadId ?\n this.dialogsStorage.getForumTopic(peerId, threadId) :\n this.getDialogOnly(peerId);\n if(dialog && this.isDialogUnread(dialog)) {\n force = true;\n }\n }\n\n if(!force) {\n this.log('readHistory: isn\\'t unread');\n return Promise.resolve();\n }\n }\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(historyStorage.triedToReadMaxId >= maxId) {\n return Promise.resolve();\n }\n\n let apiPromise: Promise;\n if(threadId) {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('messages.readDiscussion', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(threadId),\n read_max_id: getServerMessageId(maxId)\n });\n // apiPromise = new Promise((resolve) => resolve());\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadChannelDiscussionInbox',\n channel_id: peerId.toChatId(),\n top_msg_id: threadId,\n read_max_id: maxId\n });\n } else if(this.appPeersManager.isChannel(peerId)) {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('channels.readHistory', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n max_id: getServerMessageId(maxId)\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadChannelInbox',\n max_id: maxId,\n channel_id: peerId.toChatId(),\n still_unread_count: undefined,\n pts: undefined\n });\n } else {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('messages.readHistory', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n max_id: getServerMessageId(maxId)\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updateShort',\n update: {\n _: 'updatePts',\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n }\n });\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadHistoryInbox',\n max_id: maxId,\n peer: this.appPeersManager.getOutputPeer(peerId),\n still_unread_count: undefined,\n pts: undefined,\n pts_count: undefined\n });\n }\n\n this.rootScope.dispatchEvent('notification_reset', this.appPeersManager.getPeerString(peerId));\n\n if(historyStorage.readPromise) {\n return historyStorage.readPromise;\n }\n\n historyStorage.triedToReadMaxId = maxId;\n\n apiPromise.finally(() => {\n delete historyStorage.readPromise;\n\n const {readMaxId} = historyStorage;\n this.log('readHistory: promise finally', maxId, readMaxId);\n\n if(readMaxId > maxId) {\n this.readHistory(peerId, readMaxId, threadId, true);\n }\n });\n\n return historyStorage.readPromise = apiPromise;\n }\n\n public readAllHistory(peerId: PeerId, threadId?: number, force = false) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n if(historyStorage.maxId) {\n this.readHistory(peerId, historyStorage.maxId, threadId, force); // lol\n }\n }\n\n private getUnreadMentionsKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? `_${threadId}` : '');\n }\n\n private fixDialogUnreadMentionsIfNoMessage(peerId: PeerId, threadId?: number) {\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, threadId);\n if(dialog?.unread_mentions_count) {\n this.reloadConversationOrTopic(peerId);\n }\n }\n\n private modifyCachedMentions(peerId: PeerId, mid: number, add: boolean, threadId?: number) {\n const slicedArray = this.unreadMentions[this.getUnreadMentionsKey(peerId, threadId)];\n if(!slicedArray) return;\n\n if(add) {\n if(slicedArray.first.isEnd(SliceEnd.Top)) {\n slicedArray.insertSlice([mid]);\n }\n } else {\n slicedArray.delete(mid);\n }\n }\n\n private fixUnreadMentionsCountIfNeeded(peerId: PeerId, slicedArray: SlicedArray, threadId?: number) {\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, threadId);\n if(!slicedArray.length && dialog?.unread_mentions_count) {\n this.reloadConversationOrTopic(peerId);\n }\n }\n\n public goToNextMention(peerId: PeerId, threadId?: number) {\n /* this.getUnreadMentions(peerId, 1, 2, 0).then((messages) => {\n console.log(messages);\n }); */\n\n const key = this.getUnreadMentionsKey(peerId, threadId);\n const promise = this.goToNextMentionPromises[key];\n if(promise) {\n return promise;\n }\n\n const slicedArray = this.unreadMentions[peerId] ??= new SlicedArray();\n const length = slicedArray.length;\n const isTopEnd = slicedArray.first.isEnd(SliceEnd.Top);\n if(!length && isTopEnd) {\n this.fixUnreadMentionsCountIfNeeded(peerId, slicedArray, threadId);\n return Promise.resolve();\n }\n\n let loadNextPromise = Promise.resolve();\n if(!isTopEnd && length < 25) {\n loadNextPromise = this.loadNextMentions(peerId, threadId);\n }\n\n return this.goToNextMentionPromises[key] = loadNextPromise.then(() => {\n const last = slicedArray.last;\n const mid = last && last[last.length - 1];\n if(mid) {\n slicedArray.delete(mid);\n return mid;\n } else {\n this.fixUnreadMentionsCountIfNeeded(peerId, slicedArray, threadId);\n }\n }).finally(() => {\n delete this.goToNextMentionPromises[key];\n });\n }\n\n private loadNextMentions(peerId: PeerId, threadId?: number) {\n const slicedArray = this.unreadMentions[peerId];\n const maxId = slicedArray.first[0] || 1;\n\n const backLimit = 50;\n const add_offset = -backLimit;\n const limit = backLimit;\n return this.getUnreadMentions(peerId, maxId, add_offset, limit, undefined, undefined, threadId)\n .then((messages) => {\n this.mergeHistoryResult(slicedArray, messages, maxId === 1 ? 0 : maxId, limit, add_offset);\n });\n }\n\n private getUnreadMentions(\n peerId: PeerId,\n offsetId: number,\n add_offset: number,\n limit: number,\n maxId = 0,\n minId = 0,\n threadId?: number\n ) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getUnreadMentions',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n offset_id: getServerMessageId(offsetId),\n add_offset,\n limit,\n max_id: getServerMessageId(maxId),\n min_id: getServerMessageId(minId),\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n },\n processResult: (messagesMessages) => {\n assumeType>(messagesMessages);\n this.appUsersManager.saveApiUsers(messagesMessages.users);\n this.appChatsManager.saveApiChats(messagesMessages.chats);\n this.saveMessages(messagesMessages.messages);\n\n return messagesMessages;\n }\n });\n }\n\n public readMessages(peerId: PeerId, msgIds: number[]) {\n if(DO_NOT_READ_HISTORY) {\n return Promise.resolve();\n }\n\n if(!msgIds.length) {\n return Promise.resolve();\n }\n\n msgIds = msgIds.map((mid) => getServerMessageId(mid));\n let promise: Promise, update: Update.updateChannelReadMessagesContents | Update.updateReadMessagesContents;\n if(peerId.isAnyChat() && this.appPeersManager.isChannel(peerId)) {\n const channelId = peerId.toChatId();\n\n update = {\n _: 'updateChannelReadMessagesContents',\n channel_id: channelId,\n messages: msgIds\n };\n\n promise = this.apiManager.invokeApi('channels.readMessageContents', {\n channel: this.appChatsManager.getChannelInput(channelId),\n id: msgIds\n });\n } else {\n update = {\n _: 'updateReadMessagesContents',\n messages: msgIds,\n pts: undefined,\n pts_count: undefined\n };\n\n promise = this.apiManager.invokeApi('messages.readMessageContents', {\n id: msgIds\n }).then((affectedMessages) => {\n (update as Update.updateReadMessagesContents).pts = affectedMessages.pts;\n (update as Update.updateReadMessagesContents).pts_count = affectedMessages.pts_count;\n this.apiUpdatesManager.processLocalUpdate(update);\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate(update);\n\n return promise;\n }\n\n public getHistoryStorage(peerId: PeerId, threadId?: number) {\n if(threadId) {\n // threadId = this.getLocalMessageId(threadId);\n return (this.threadsStorage[peerId] ??= {})[threadId] ??= {count: null, history: new SlicedArray()};\n }\n\n return this.historiesStorage[peerId] ??= {count: null, history: new SlicedArray()};\n }\n\n public getHistoryStorageTransferable(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const {\n count,\n history,\n maxId,\n readMaxId,\n readOutboxMaxId,\n maxOutId,\n replyMarkup\n } = historyStorage;\n\n return {\n count,\n history: undefined as HistoryStorage,\n historySerialized: history.toJSON(),\n maxId,\n readMaxId,\n readOutboxMaxId,\n maxOutId,\n replyMarkup\n };\n }\n\n private getNotifyPeerSettings(peerId: PeerId, threadId?: number) {\n const inputNotifyPeer = this.appPeersManager.getInputNotifyPeerById({peerId, ignorePeerId: true, threadId});\n return Promise.all([\n this.appNotificationsManager.getNotifyPeerTypeSettings(),\n this.appNotificationsManager.getNotifySettings(inputNotifyPeer)\n ]).then(([_, peerTypeNotifySettings]) => {\n return {\n muted: this.appNotificationsManager.isPeerLocalMuted({peerId, respectType: true, threadId}),\n peerTypeNotifySettings\n };\n });\n }\n\n private handleNotifications = () => {\n ctx.clearTimeout(this.notificationsHandlePromise);\n this.notificationsHandlePromise = undefined;\n\n // var timeout = $rootScope.idle.isIDLE && StatusManager.isOtherDeviceActive() ? 30000 : 1000;\n // const timeout = 1000;\n\n for(const key in this.notificationsToHandle) {\n const [peerId, threadId] = key.split('_');\n // if(rootScope.peerId === peerId && !rootScope.idle.isIDLE) {\n // continue;\n // }\n\n const notifyPeerToHandle = this.notificationsToHandle[key];\n this.getNotifyPeerSettings(peerId.toPeerId(), threadId ? +threadId : undefined)\n .then(({muted, peerTypeNotifySettings}) => {\n const topMessage = notifyPeerToHandle.topMessage;\n if((muted && !topMessage.pFlags.mentioned) || !topMessage.pFlags.unread) {\n return;\n }\n\n // setTimeout(() => {\n if(topMessage.pFlags.unread) {\n this.notifyAboutMessage(topMessage, {\n fwdCount: notifyPeerToHandle.fwdCount,\n peerTypeNotifySettings\n });\n }\n // }, timeout);\n });\n }\n\n this.notificationsToHandle = {};\n };\n\n public getUpdateAfterReloadKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n private handleNewUpdateAfterReload(peerId: PeerId, update: Update, threadId?: number) {\n const set = this.newUpdatesAfterReloadToHandle[this.getUpdateAfterReloadKey(peerId, threadId)] ??= new Set();\n if(set.has(update)) {\n this.log.error('here we go again', peerId);\n return;\n }\n\n (update as any).ignoreExisting = true;\n set.add(update);\n this.scheduleHandleNewDialogs(peerId, threadId);\n }\n\n private onUpdateMessageId = (update: Update.updateMessageID) => {\n const randomId = update.random_id;\n const pendingData = this.pendingByRandomId[randomId];\n if(!pendingData) {\n return;\n }\n\n const mid = generateMessageId(update.id);\n this.pendingByMessageId[mid] = randomId;\n // const {storage} = pendingData;\n // const message = this.getMessageFromStorage(storage, mid);\n // if(message) { // if message somehow already exists\n // this.checkPendingMessage(message);\n // }\n };\n\n private onUpdateNewMessage = (update: Update.updateNewDiscussionMessage | Update.updateNewMessage | Update.updateNewChannelMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n const storage = this.getHistoryMessagesStorage(peerId);\n\n // * local update\n const isLocalThreadUpdate = update._ === 'updateNewDiscussionMessage';\n\n // * temporary save the message for info (peerId, reply mids...)\n this.saveMessages([message], {storage: this.createMessageStorage(peerId, 'history')});\n\n // * check if sent message is already in storage\n // const oldMessage = this.getMessageFromStorage(storage, message.mid);\n // if(\n // (message as Message.message).pFlags.is_outgoing &&\n // oldMessage &&\n // !(oldMessage as Message.message).pFlags.is_outgoing\n // ) {\n // this.checkPendingMessage(message);\n // return;\n // }\n\n const isForum = this.appPeersManager.isForum(peerId);\n const threadKey = this.getThreadKey(message);\n const threadId = threadKey ? +threadKey.split('_')[1] : undefined;\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, isLocalThreadUpdate ? threadId : undefined);\n\n if((!dialog || this.reloadConversationsPeers.has(peerId)) && !isLocalThreadUpdate) {\n let good = true;\n if(peerId.isAnyChat()) {\n good = this.appChatsManager.isInChat(peerId.toChatId());\n }\n\n if(good) {\n this.handleNewUpdateAfterReload(peerId, update);\n return;\n }\n\n // return;\n }\n\n if(threadId && !isLocalThreadUpdate) {\n const threadStorage = this.threadsStorage[peerId]?.[threadId];\n const update = {\n _: 'updateNewDiscussionMessage',\n message\n } as Update.updateNewDiscussionMessage;\n\n if(this.appChatsManager.isForum(peerId.toChatId()) && !this.dialogsStorage.getForumTopic(peerId, threadId)) {\n // this.dialogsStorage.getForumTopicById(peerId, threadId);\n this.handleNewUpdateAfterReload(peerId, update, threadId);\n } else if(threadStorage) {\n this.onUpdateNewMessage(update);\n }\n }\n\n if(message._ === 'messageService') {\n const {action} = message;\n if(action._ === 'messageActionPaymentSent' && message.reply_to) {\n this.rootScope.dispatchEvent('payment_sent', {\n peerId: message.reply_to.reply_to_peer_id ?\n this.appPeersManager.getPeerId(message.reply_to.reply_to_peer_id) :\n message.peerId,\n mid: message.reply_to_mid,\n receiptMessage: message\n });\n }\n\n if(action._ === 'messageActionTopicEdit' && !isLocalThreadUpdate) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(!topic) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n const oldTopic = copy(topic);\n\n if(action.title !== undefined) {\n topic.title = action.title;\n }\n\n if(action.closed !== undefined) {\n setBooleanFlag(topic.pFlags, 'closed', action.closed);\n }\n\n if(action.hidden !== undefined) {\n setBooleanFlag(topic.pFlags, 'hidden', action.hidden);\n }\n\n if(action.icon_emoji_id !== undefined) {\n topic.icon_emoji_id = action.icon_emoji_id;\n }\n\n this.scheduleHandleNewDialogs(peerId, topic);\n\n this.dialogsStorage.processTopicUpdate(topic, oldTopic);\n }\n }\n }\n\n /* if(update._ === 'updateNewChannelMessage') {\n const chat = appChatsManager.getChat(peerId.toChatId());\n if(chat.pFlags && (chat.pFlags.left || chat.pFlags.kicked)) {\n return;\n }\n } */\n\n this.saveMessages([message], {storage});\n // this.log.warn(dT(), 'message unread', message.mid, message.pFlags.unread)\n\n /* if((message as Message.message).grouped_id) {\n this.log('updateNewMessage', message);\n } */\n\n this.checkPendingMessage(message);\n const historyStorage = this.getHistoryStorage(peerId, isLocalThreadUpdate ? threadId : undefined);\n\n if(!isLocalThreadUpdate) {\n this.updateMessageRepliesIfNeeded(message);\n }\n\n // * so message can exist if reloadConversation came back earlier with mid\n const ignoreExisting: boolean = (update as any).ignoreExisting;\n const isExisting = !!historyStorage.history.findSlice(message.mid);\n if(isExisting) {\n if(!ignoreExisting) {\n return false;\n }\n } else {\n // * catch situation with disconnect. if message's id is lower than we already have (in bottom end slice), will sort it\n const firstSlice = historyStorage.history.first;\n if(firstSlice.isEnd(SliceEnd.Bottom)) {\n let i = 0;\n for(const length = firstSlice.length; i < length; ++i) {\n if(message.mid > firstSlice[i]) {\n break;\n }\n }\n\n firstSlice.splice(i, 0, message.mid);\n } else {\n historyStorage.history.unshift(message.mid);\n }\n\n if(historyStorage.count !== null) {\n ++historyStorage.count;\n }\n }\n\n if(!historyStorage.maxId || message.mid > historyStorage.maxId) {\n historyStorage.maxId = message.mid;\n }\n\n if(this.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n\n const fromId = message.fromId;\n if(fromId.isUser() && !message.pFlags.out && message.from_id) {\n this.appUsersManager.forceUserOnline(fromId, message.date);\n\n const action: SendMessageAction = {\n _: 'sendMessageCancelAction'\n };\n\n let update: Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChannelUserTyping;\n if(peerId.isUser()) {\n update = {\n _: 'updateUserTyping',\n action,\n user_id: fromId\n };\n } else if(this.appPeersManager.isChannel(peerId)) {\n update = {\n _: 'updateChannelUserTyping',\n action,\n channel_id: peerId.toChatId(),\n from_id: this.appPeersManager.getOutputPeer(fromId),\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n };\n } else {\n update = {\n _: 'updateChatUserTyping',\n action,\n chat_id: peerId.toChatId(),\n from_id: this.appPeersManager.getOutputPeer(fromId)\n };\n }\n\n this.apiUpdatesManager.processLocalUpdate(update);\n }\n\n // commented to render the message if it's been sent faster than history_append came to main thread\n // if(!pendingMessage) {\n this.handleNewMessage(message);\n // }\n\n const isTopic = dialog?._ === 'forumTopic';\n if((isLocalThreadUpdate && !isTopic) || !dialog) {\n return;\n }\n\n const inboxUnread = !message.pFlags.out && message.pFlags.unread;\n\n {\n if(inboxUnread && message.mid > dialog.top_message) {\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n ++dialog.unread_count;\n if(message.pFlags.mentioned) {\n ++dialog.unread_mentions_count;\n this.modifyCachedMentions(peerId, message.mid, true, isTopic ? threadId : undefined);\n }\n\n releaseUnreadCount();\n }\n\n if(message.mid >= dialog.top_message) {\n this.setDialogTopMessage(message, dialog);\n }\n }\n\n if(((!isLocalThreadUpdate && !isForum) || isTopic) && inboxUnread) {\n const notifyPeer = threadKey || peerId;\n const notifyPeerToHandle = this.notificationsToHandle[notifyPeer] ??= {\n fwdCount: 0,\n fromId: NULL_PEER_ID\n };\n\n if(notifyPeerToHandle.fromId !== fromId) {\n notifyPeerToHandle.fromId = fromId;\n notifyPeerToHandle.fwdCount = 0;\n }\n\n if((message as Message.message).fwd_from) {\n ++notifyPeerToHandle.fwdCount;\n }\n\n notifyPeerToHandle.topMessage = message;\n\n this.notificationsHandlePromise ??= ctx.setTimeout(this.handleNotifications, 0);\n }\n };\n\n private onUpdateMessageReactions = (update: Update.updateMessageReactions) => {\n const {peer, msg_id, reactions} = update;\n const mid = generateMessageId(msg_id);\n const peerId = this.appPeersManager.getPeerId(peer);\n const message: MyMessage = this.getMessageByPeer(peerId, mid);\n\n if(message?._ !== 'message') {\n return;\n }\n\n const recentReactions = reactions?.recent_reactions;\n if(recentReactions?.length && message.pFlags.out) {\n const recentReaction = recentReactions[recentReactions.length - 1];\n const previousReactions = message.reactions;\n const previousRecentReactions = previousReactions?.recent_reactions;\n if(\n this.appPeersManager.getPeerId(recentReaction.peer_id) !== this.appPeersManager.peerId && (\n !previousRecentReactions ||\n previousRecentReactions.length <= recentReactions.length\n ) && (\n !previousRecentReactions ||\n !deepEqual(recentReaction, previousRecentReactions[previousRecentReactions.length - 1])\n )\n ) {\n this.getNotifyPeerSettings(peerId).then(({muted, peerTypeNotifySettings}) => {\n if(/* muted || */!peerTypeNotifySettings.show_previews) return;\n this.notifyAboutMessage(message, {\n peerReaction: recentReaction,\n peerTypeNotifySettings\n });\n });\n }\n }\n\n const key = message.peerId + '_' + message.mid;\n this.pushBatchUpdate('messages_reactions', this.batchUpdateReactions, key, () => copy(message.reactions));\n\n message.reactions = reactions;\n\n if(!update.local) {\n this.setDialogToStateIfMessageIsTop(message);\n }\n };\n\n private onUpdateDialogUnreadMark = (update: Update.updateDialogUnreadMark) => {\n // this.log('updateDialogUnreadMark', update);\n const peerId = this.appPeersManager.getPeerId((update.peer as DialogPeer.dialogPeer).peer);\n const dialog = this.getDialogOnly(peerId);\n\n if(!dialog) {\n this.scheduleHandleNewDialogs(peerId);\n } else {\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n if(!update.pFlags.unread) {\n delete dialog.pFlags.unread_mark;\n } else {\n dialog.pFlags.unread_mark = true;\n }\n\n releaseUnreadCount();\n this.dialogsStorage.setDialogToState(dialog);\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map([[peerId, {dialog}]]));\n }\n };\n\n private onUpdateEditMessage = (update: Update.updateEditMessage | Update.updateEditChannelMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n const mid = generateMessageId(message.id);\n const storage = this.getHistoryMessagesStorage(peerId);\n if(!storage.has(mid)) {\n // this.fixDialogUnreadMentionsIfNoMessage(peerId);\n return;\n }\n\n // console.trace(dT(), 'edit message', message)\n\n const oldMessage: Message = this.getMessageFromStorage(storage, mid);\n this.saveMessages([message], {storage});\n const newMessage: Message = this.getMessageFromStorage(storage, mid);\n\n this.handleEditedMessage(oldMessage, newMessage, storage);\n\n const dialog = this.getDialogOnly(peerId);\n\n // if sender erased mention\n /* if(dialog.unread_mentions_count && (oldMessage as Message.message)?.pFlags?.mentioned && !message.pFlags.mentioned) {\n --dialog.unread_mentions_count;\n this.modifyCachedMentions(peerId, mid, false);\n } */\n\n const isTopMessage = dialog?.top_message === mid;\n if((message as Message.messageService).clear_history) {\n if(isTopMessage) {\n this.rootScope.dispatchEvent('dialog_flush', {peerId, dialog});\n }\n } else {\n let dispatchEditEvent = true;\n // no sense in dispatching message_edit since only reactions have changed\n if(oldMessage?._ === 'message' && !deepEqual(oldMessage.reactions, (newMessage as Message.message).reactions)) {\n const newReactions = (newMessage as Message.message).reactions;\n (newMessage as Message.message).reactions = oldMessage.reactions;\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageReactions',\n peer: this.appPeersManager.getOutputPeer(peerId),\n msg_id: message.id,\n reactions: newReactions\n });\n\n dispatchEditEvent = false;\n }\n\n dispatchEditEvent && this.rootScope.dispatchEvent('message_edit', {\n storageKey: storage.key,\n peerId,\n mid,\n message\n });\n\n if(isTopMessage) {\n this.dialogsStorage.setDialogToState(dialog);\n }\n\n const map: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const getUpdateCache = () => {\n let cache = map.get(peerId);\n if(!cache) {\n map.set(peerId, cache = {});\n }\n\n return cache;\n };\n\n if((isTopMessage || (message as Message.message).grouped_id) && dialog) {\n getUpdateCache().dialog = dialog;\n }\n\n const threadKey = this.getThreadKey(message);\n if(threadKey) {\n const topicId = +threadKey.split('_')[1];\n const topic = this.dialogsStorage.getForumTopic(peerId, topicId);\n if(topic) {\n (getUpdateCache().topics ??= new Map()).set(topicId, topic);\n }\n }\n\n if(map.size) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', map);\n }\n }\n };\n\n private onUpdateReadHistory = (update: Update.updateReadChannelDiscussionInbox | Update.updateReadChannelDiscussionOutbox\n | Update.updateReadHistoryInbox | Update.updateReadHistoryOutbox\n | Update.updateReadChannelInbox | Update.updateReadChannelOutbox) => {\n const channelId = (update as Update.updateReadChannelInbox).channel_id;\n const maxId = generateMessageId((update as Update.updateReadChannelInbox).max_id || (update as Update.updateReadChannelDiscussionInbox).read_max_id);\n const threadId = generateMessageId((update as Update.updateReadChannelDiscussionInbox).top_msg_id);\n const peerId = channelId ? channelId.toPeerId(true) : this.appPeersManager.getPeerId((update as Update.updateReadHistoryInbox).peer);\n\n const isOut = update._ === 'updateReadHistoryOutbox' ||\n update._ === 'updateReadChannelOutbox' ||\n update._ === 'updateReadChannelDiscussionOutbox' ? true : undefined;\n\n const isForum = channelId ? this.appChatsManager.isForum(channelId) : false;\n const storage = this.getHistoryMessagesStorage(peerId);\n const history = getObjectKeysAndSort(storage, 'desc');\n const foundDialog = threadId && isForum ?\n this.dialogsStorage.getForumTopic(peerId, threadId) :\n this.getDialogOnly(peerId);\n const stillUnreadCount = (update as Update.updateReadChannelInbox).still_unread_count;\n let newUnreadCount = 0;\n let newUnreadMentionsCount = 0;\n let foundAffected = false;\n\n // this.log.warn(dT(), 'read', peerId, isOut ? 'out' : 'in', maxId)\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(peerId.isUser() && isOut) {\n this.appUsersManager.forceUserOnline(peerId.toUserId());\n }\n\n if(threadId) {\n const repliesKey = this.threadsToReplies[peerId + '_' + threadId];\n if(repliesKey) {\n const [peerId, mid] = repliesKey.split('_');\n this.updateMessage(peerId.toPeerId(), +mid, 'replies_updated');\n }\n }\n\n const releaseUnreadCount = foundDialog && this.dialogsStorage.prepareDialogUnreadCountModifying(foundDialog);\n const readMaxId = this.getReadMaxIdIfUnread(peerId, threadId);\n\n for(let i = 0, length = history.length; i < length; i++) {\n const mid = history[i];\n if(mid > maxId) {\n continue;\n }\n\n const message: MyMessage = storage.get(mid);\n\n if(message.pFlags.out !== isOut) {\n continue;\n }\n\n const messageThreadId = getMessageThreadId(message, isForum);\n if(threadId && messageThreadId !== threadId) {\n continue;\n }\n\n const isUnread = message.pFlags.unread || (readMaxId && readMaxId < mid);\n\n if(!isUnread) {\n break;\n }\n\n // this.log.warn('read', messageId, isUnread, message)\n delete message.pFlags.unread;\n foundAffected ||= true;\n\n if(!message.pFlags.out && foundDialog) {\n if(stillUnreadCount === undefined) {\n newUnreadCount = --foundDialog.unread_count;\n }\n\n if(message.pFlags.mentioned) {\n newUnreadMentionsCount = --foundDialog.unread_mentions_count;\n this.modifyCachedMentions(peerId, message.mid, false);\n }\n }\n\n this.rootScope.dispatchEvent('notification_cancel', 'msg' + mid);\n }\n\n if(isOut) historyStorage.readOutboxMaxId = maxId;\n else historyStorage.readMaxId = maxId;\n\n if(foundDialog) {\n if(isOut) foundDialog.read_outbox_max_id = maxId;\n else foundDialog.read_inbox_max_id = maxId;\n\n if(!isOut) {\n let setCount: number;\n if(stillUnreadCount !== undefined) {\n setCount = stillUnreadCount;\n } else if(\n newUnreadCount < 0 ||\n maxId >= foundDialog.top_message ||\n !readMaxId\n ) {\n setCount = 0;\n } else if(newUnreadCount && foundDialog.top_message > maxId) {\n setCount = newUnreadCount;\n }\n\n if(setCount !== undefined) {\n foundDialog.unread_count = setCount;\n }\n\n if(newUnreadMentionsCount < 0 || !foundDialog.unread_count) {\n foundDialog.unread_mentions_count = 0;\n }\n }\n\n releaseUnreadCount?.();\n\n this.dialogsStorage.processDialogForFilters(foundDialog);\n\n this.rootScope.dispatchEvent('dialog_unread', {peerId, dialog: foundDialog});\n this.dialogsStorage.setDialogToState(foundDialog);\n\n if(!foundAffected && stillUnreadCount === undefined && !isOut && foundDialog.unread_count) {\n if(foundDialog._ === 'forumTopic') {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n this.reloadConversation(peerId);\n }\n }\n }\n\n if(foundAffected) {\n this.rootScope.dispatchEvent('messages_read');\n }\n\n if(!threadId && channelId) {\n const threadKeyPart = peerId + '_';\n for(const threadKey in this.threadsToReplies) {\n if(threadKey.indexOf(threadKeyPart) === 0) {\n const [peerId, mid] = this.threadsToReplies[threadKey].split('_');\n this.rootScope.dispatchEvent('replies_updated', this.getMessageByPeer(peerId.toPeerId(), +mid) as Message.message);\n }\n }\n }\n };\n\n private onUpdateReadMessagesContents = (update: Update.updateChannelReadMessagesContents | Update.updateReadMessagesContents) => {\n const channelId = (update as Update.updateChannelReadMessagesContents).channel_id;\n const topMsgId = (update as Update.updateChannelReadMessagesContents).top_msg_id;\n const threadId = topMsgId ? generateMessageId(topMsgId) : undefined;\n const mids = (update as Update.updateReadMessagesContents).messages.map((id) => generateMessageId(id));\n const peerId = channelId ? channelId.toPeerId(true) : this.findPeerIdByMids(mids);\n for(let i = 0, length = mids.length; i < length; ++i) {\n const mid = mids[i];\n const message: MyMessage = this.getMessageByPeer(peerId, mid);\n if(message) {\n if(message.pFlags.media_unread) {\n delete message.pFlags.media_unread;\n this.setDialogToStateIfMessageIsTop(message);\n\n if(!message.pFlags.out && message.pFlags.mentioned) {\n this.modifyCachedMentions(peerId, mid, false, threadId);\n }\n }\n } else {\n this.fixDialogUnreadMentionsIfNoMessage(peerId, threadId);\n }\n }\n\n this.rootScope.dispatchEvent('messages_media_read', {peerId, mids});\n };\n\n private onUpdateChannelAvailableMessages = (update: Update.updateChannelAvailableMessages) => {\n const peerId = update.channel_id.toPeerId(true);\n const history = this.getHistoryStorage(peerId).history.slice;\n const availableMinId = generateMessageId(update.available_min_id);\n const messages = history.filter((mid) => mid <= availableMinId);\n\n (update as any as Update.updateDeleteChannelMessages).messages = messages;\n this.onUpdateDeleteMessages(update as any as Update.updateDeleteChannelMessages);\n };\n\n private onUpdateDeleteMessages = (update: Update.updateDeleteMessages | Update.updateDeleteChannelMessages) => {\n const channelId = (update as Update.updateDeleteChannelMessages).channel_id;\n // const messages = (update as any as Update.updateDeleteChannelMessages).messages;\n const messages = (update as any as Update.updateDeleteChannelMessages).messages.map((id) => generateMessageId(id));\n const peerId: PeerId = channelId ? channelId.toPeerId(true) : this.findPeerIdByMids(messages);\n\n if(!peerId) {\n return;\n }\n\n this.apiManager.clearCache('messages.getSearchCounters', (params) => {\n return this.appPeersManager.getPeerId(params.peer) === peerId;\n });\n\n const threadKeys: Set = new Set(), topics: Map = new Map();\n for(const mid of messages) {\n const message = this.getMessageByPeer(peerId, mid);\n const threadKey = this.getThreadKey(message);\n if(!threadKey) {\n continue;\n }\n\n const threadId = +threadKey.split('_')[1];\n if(this.threadsStorage[peerId]?.[threadId]) {\n threadKeys.add(threadKey);\n\n if(!topics.has(threadId)) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(topic) {\n topics.set(threadId, topic);\n }\n }\n }\n }\n\n const historyUpdated = this.handleDeletedMessages(\n peerId,\n this.getHistoryMessagesStorage(peerId),\n messages\n );\n\n const threadsStorages = Array.from(threadKeys).map((threadKey) => {\n const [peerId, mid] = threadKey.split('_');\n return this.getHistoryStorage(peerId.toPeerId(), +mid);\n });\n\n const historyStorages = [\n this.getHistoryStorage(peerId),\n ...threadsStorages\n ];\n historyStorages.forEach((historyStorage) => {\n for(const mid of historyUpdated.msgs) {\n historyStorage.history.delete(mid);\n }\n\n if(historyUpdated.count && historyStorage.count) {\n historyStorage.count = Math.max(0, historyStorage.count - historyUpdated.count);\n }\n });\n\n this.rootScope.dispatchEvent('history_delete', {peerId, msgs: historyUpdated.msgs});\n\n const dialogs: (MTDialog.dialog | ForumTopic)[] = [\n ...topics.values()\n ];\n\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n dialogs.unshift(dialog);\n }\n\n dialogs.forEach((dialog) => {\n const isTopic = dialog._ === 'forumTopic';\n const affected = historyUpdated.unreadMentions || historyUpdated.unread;\n const releaseUnreadCount = affected && this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n if(historyUpdated.unread) {\n dialog.unread_count = Math.max(0, dialog.unread_count - historyUpdated.unread);\n }\n\n if(historyUpdated.unreadMentions) {\n dialog.unread_mentions_count = !dialog.unread_count ? 0 : Math.max(0, dialog.unread_mentions_count - historyUpdated.unreadMentions);\n }\n\n if(affected) {\n releaseUnreadCount();\n\n if(!isTopic) {\n this.rootScope.dispatchEvent('dialog_unread', {peerId, dialog});\n }\n }\n\n if(historyUpdated.msgs.has(dialog.top_message)) {\n const historyStorage = this.getHistoryStorage(dialog.peerId, isTopic ? dialog.id : undefined);\n const slice = historyStorage.history.first;\n if(slice.isEnd(SliceEnd.Bottom) && slice.length) {\n const mid = slice[0];\n const message = this.getMessageByPeer(peerId, mid);\n this.setDialogTopMessage(message, dialog);\n } else if(isTopic) {\n this.dialogsStorage.getForumTopicById(peerId, dialog.id);\n } else {\n this.reloadConversation(peerId);\n }\n }\n });\n };\n\n private onUpdateChannel = (update: Update.updateChannel) => {\n const channelId = update.channel_id;\n const peerId = channelId.toPeerId(true);\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n\n const needDialog = this.appChatsManager.isInChat(channelId);\n\n const canViewHistory = !!getPeerActiveUsernames(channel)[0] || !channel.pFlags.left;\n const hasHistory = this.historiesStorage[peerId] !== undefined;\n\n if(canViewHistory !== hasHistory) {\n delete this.historiesStorage[peerId];\n this.rootScope.dispatchEvent('history_forbidden', peerId);\n }\n\n const dialog = this.getDialogOnly(peerId);\n if(!!dialog !== needDialog) {\n if(needDialog) {\n this.reloadConversation(peerId);\n } else {\n this.dialogsStorage.dropDialogOnDeletion(peerId);\n }\n }\n\n this.rootScope.dispatchEvent('channel_update', channelId);\n };\n\n private onUpdateChannelReload = (update: Update.updateChannelReload) => {\n const peerId = update.channel_id.toPeerId(true);\n\n // if(this.appPeersManager.isForum(peerId)) {\n // const cache = this.dialogsStorage.getForumTopicsCache(peerId);\n // if(cache.topics.size) {\n\n // }\n // }\n\n this.flushStoragesByPeerId(peerId);\n Promise.all([\n this.reloadConversation(peerId)\n ]).then(() => {\n this.rootScope.dispatchEvent('history_reload', peerId);\n });\n };\n\n private onUpdateChannelMessageViews = (update: Update.updateChannelMessageViews) => {\n const views = update.views;\n const peerId = update.peerId ?? update.channel_id.toPeerId(true);\n const mid = generateMessageId(update.id);\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(message?.views !== undefined && message.views < views) {\n message.views = views;\n this.pushBatchUpdate('messages_views', this.batchUpdateViews, message.peerId + '_' + message.mid);\n this.setDialogToStateIfMessageIsTop(message);\n }\n };\n\n private onUpdateServiceNotification = (update: Update.updateServiceNotification) => {\n // this.log('updateServiceNotification', update);\n if(update.pFlags?.popup) {\n this.rootScope.dispatchEvent('service_notification', update);\n return;\n }\n\n const fromId = SERVICE_PEER_ID;\n const peerId = fromId;\n const messageId = this.generateTempMessageId(peerId);\n const message: Message.message = {\n _: 'message',\n id: messageId,\n from_id: this.appPeersManager.getOutputPeer(fromId),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {unread: true},\n date: (update.inbox_date || tsNow(true)) + this.timeManager.getServerTimeOffset(),\n message: update.message,\n media: update.media,\n entities: update.entities\n };\n if(!this.appUsersManager.hasUser(fromId)) {\n this.appUsersManager.saveApiUsers([{\n _: 'user',\n id: fromId,\n pFlags: {verified: true},\n access_hash: '0',\n first_name: 'Telegram',\n phone: '42777'\n }]);\n }\n this.saveMessages([message], {isOutgoing: true});\n\n if(update.inbox_date) {\n this.pendingTopMsgs[peerId] = messageId;\n this.onUpdateNewMessage({\n _: 'updateNewMessage',\n message,\n pts: undefined,\n pts_count: undefined\n });\n }\n };\n\n private onUpdatePinnedMessages = (update: Update.updatePinnedMessages | Update.updatePinnedChannelMessages) => {\n const channelId = update._ === 'updatePinnedChannelMessages' ? update.channel_id : undefined;\n const peerId = channelId ? channelId.toPeerId(true) : this.appPeersManager.getPeerId((update as Update.updatePinnedMessages).peer);\n\n /* const storage = this.getSearchStorage(peerId, 'inputMessagesFilterPinned');\n if(storage.count !== storage.history.length) {\n if(storage.count !== undefined) {\n delete this.searchesStorage[peerId]['inputMessagesFilterPinned'];\n }\n\n rootScope.broadcast('peer_pinned_messages', peerId);\n break;\n } */\n\n const messages = update.messages.map((id) => generateMessageId(id));\n\n const storage = this.getHistoryMessagesStorage(peerId);\n const missingMessages = messages.filter((mid) => !storage.has(mid));\n const getMissingPromise = missingMessages.length ? Promise.all(missingMessages.map((mid) => this.reloadMessages(peerId, mid))) : Promise.resolve();\n getMissingPromise.finally(() => {\n const werePinned = update.pFlags?.pinned;\n if(werePinned) {\n for(const mid of messages) {\n // storage.history.push(mid);\n const message = storage.get(mid) as Message.message;\n message.pFlags.pinned = true;\n }\n\n /* if(this.pinnedMessages[peerId]?.maxId) {\n const maxMid = Math.max(...messages);\n this.pinnedMessages\n } */\n\n // storage.history.sort((a, b) => b - a);\n } else {\n for(const mid of messages) {\n // storage.history.findAndSplice((_mid) => _mid === mid);\n const message = storage.get(mid) as Message.message;\n delete message.pFlags.pinned;\n }\n }\n\n /* const info = this.pinnedMessages[peerId];\n if(info) {\n info.count += messages.length * (werePinned ? 1 : -1);\n } */\n\n delete this.pinnedMessages[this.getPinnedMessagesKey(peerId)];\n this.appStateManager.getState().then((state) => {\n delete state.hiddenPinnedMessages[peerId];\n this.rootScope.dispatchEvent('peer_pinned_messages', {peerId, mids: messages, pinned: werePinned});\n });\n });\n };\n\n private onUpdateNotifySettings = (update: Update.updateNotifySettings) => {\n const {peer, notify_settings} = update;\n const isTopic = peer._ === 'notifyForumTopic';\n const isPeerType = peer._ === 'notifyPeer' || isTopic;\n if(!isPeerType) {\n return;\n }\n\n const peerId = this.appPeersManager.getPeerId(peer.peer);\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, isTopic ? generateMessageId(peer.top_msg_id) : undefined);\n if(!dialog) {\n return;\n }\n\n dialog.notify_settings = notify_settings;\n this.rootScope.dispatchEvent('dialog_notify_settings', dialog);\n this.dialogsStorage.setDialogToState(dialog);\n };\n\n private onUpdateNewScheduledMessage = (update: Update.updateNewScheduledMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n\n const storage = this.scheduledMessagesStorage[peerId];\n if(!storage) {\n return;\n }\n\n const mid = generateMessageId(message.id);\n\n const oldMessage = this.getMessageFromStorage(storage, mid);\n this.saveMessages([message], {storage, isScheduled: true});\n const newMessage = this.getMessageFromStorage(storage, mid);\n\n if(oldMessage) {\n this.handleEditedMessage(oldMessage, newMessage, storage);\n this.rootScope.dispatchEvent('message_edit', {storageKey: storage.key, peerId, mid: message.mid, message});\n } else {\n const pendingMessage = this.checkPendingMessage(message);\n if(!pendingMessage) {\n this.rootScope.dispatchEvent('scheduled_new', message as Message.message);\n }\n }\n };\n\n private onUpdateDeleteScheduledMessages = (update: Update.updateDeleteScheduledMessages) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n\n const storage = this.scheduledMessagesStorage[peerId];\n if(storage) {\n const mids = update.messages.map((id) => generateMessageId(id));\n this.handleDeletedMessages(peerId, storage, mids);\n\n this.rootScope.dispatchEvent('scheduled_delete', {peerId, mids});\n }\n };\n\n private onUpdateMessageExtendedMedia = (update: Update.updateMessageExtendedMedia) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const mid = generateMessageId(update.msg_id);\n const storage = this.getHistoryMessagesStorage(peerId);\n if(!storage.has(mid)) {\n // this.fixDialogUnreadMentionsIfNoMessage(peerId);\n return;\n }\n\n const message = this.getMessageFromStorage(storage, mid) as Message.message;\n const messageMedia = message.media as MessageMedia.messageMediaInvoice;\n if(messageMedia.extended_media?._ === 'messageExtendedMedia') {\n return;\n }\n\n messageMedia.extended_media = update.extended_media;\n this.onUpdateEditMessage({\n _: 'updateEditMessage',\n message,\n pts: 0,\n pts_count: 0\n });\n };\n\n private onUpdateTranscribedAudio = (update: Update.updateTranscribedAudio) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const text = update.text;\n const mid = generateMessageId(update.msg_id);\n\n this.rootScope.dispatchEvent('message_transcribed', {peerId, mid, text, pending: update.pFlags.pending});\n };\n\n public setDialogToStateIfMessageIsTop(message: MyMessage) {\n if(this.isMessageIsTopMessage(message)) {\n this.dialogsStorage.setDialogToState(this.getDialogOnly(message.peerId));\n }\n }\n\n public isMessageIsTopMessage(message: MyMessage) {\n const dialog = this.getDialogOnly(message.peerId);\n return dialog && dialog.top_message === message.mid;\n }\n\n private updateMessageRepliesIfNeeded(threadMessage: MyMessage) {\n try { // * ะฝะฐ ะฒััะบะธะน ัะปัƒั‡ะฐะน, ัะบะพั€ะตะต ะฒัะตะณะพ ัั‚ะพ ะฝะต ะฟะพะฝะฐะดะพะฑะธั‚ัั\n const threadKey = this.getThreadKey(threadMessage);\n if(threadKey) {\n const repliesKey = this.threadsToReplies[threadKey];\n if(repliesKey) {\n const [peerId, mid] = repliesKey.split('_');\n\n this.updateMessage(peerId.toPeerId(), +mid, 'replies_updated');\n }\n }\n } catch(err) {\n this.log.error('incrementMessageReplies err', err, threadMessage);\n }\n }\n\n private getThreadKey(threadMessage: MyMessage) {\n let threadKey = '';\n if(threadMessage?.peerId?.isAnyChat()) {\n const threadId = getMessageThreadId(threadMessage, this.appChatsManager.isForum(threadMessage.peerId.toChatId()));\n if(threadId) {\n threadKey = threadMessage.peerId + '_' + threadId;\n }\n }\n\n return threadKey;\n }\n\n public updateMessage(peerId: PeerId, mid: number, broadcastEventName?: 'replies_updated'): Promise {\n const promise: Promise = this.reloadMessages(peerId, mid, true).then(() => {\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(!message) {\n return;\n }\n\n if(broadcastEventName) {\n this.rootScope.dispatchEvent(broadcastEventName, message);\n }\n\n return message;\n });\n\n return promise;\n }\n\n private checkPendingMessage(message: MyMessage) {\n const randomId = this.pendingByMessageId[message.mid];\n let pendingMessage: ReturnType;\n if(randomId) {\n const pendingData = this.pendingByRandomId[randomId];\n if(pendingMessage = this.finalizePendingMessage(randomId, message)) {\n this.rootScope.dispatchEvent('history_update', {\n storageKey: pendingData.storage.key,\n message,\n sequential: pendingData.sequential\n });\n }\n\n delete this.pendingByMessageId[message.mid];\n }\n\n return pendingMessage;\n }\n\n public mutePeer(options: {peerId: PeerId, muteUntil: number, threadId?: number}) {\n if(!(options = this.appNotificationsManager.validatePeerSettings(options))) {\n return;\n }\n\n const {peerId, muteUntil, threadId} = options;\n const settings: InputPeerNotifySettings = {\n _: 'inputPeerNotifySettings'\n };\n\n settings.mute_until = muteUntil;\n\n const peer = this.appPeersManager.getInputPeerById(peerId);\n return this.appNotificationsManager.updateNotifySettings(threadId ? {\n _: 'inputNotifyForumTopic',\n peer,\n top_msg_id: getServerMessageId(threadId)\n } : {\n _: 'inputNotifyPeer',\n peer\n }, settings);\n }\n\n public togglePeerMute({peerId, mute, threadId}: {peerId: PeerId, mute?: boolean, threadId?: number}) {\n if(mute === undefined) {\n mute = !this.appNotificationsManager.isPeerLocalMuted({peerId, respectType: false, threadId});\n }\n\n return this.mutePeer({peerId, muteUntil: mute ? MUTE_UNTIL : 0, threadId});\n }\n\n private findPeerIdByMids(mids: number[]) {\n for(let length = mids.length, i = length - 1; i >= 0; --i) {\n const mid = mids[i];\n const message = this.getMessageById(mid);\n if(message) {\n return message.peerId;\n }\n }\n }\n\n public canSendToPeer(peerId: PeerId, threadId?: number, action: ChatRights = 'send_messages') {\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return false;\n }\n\n if(peerId.isAnyChat()) {\n const chatId = peerId.toChatId();\n if(threadId) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(topic?.pFlags?.closed && !this.appChatsManager.hasRights(chatId, 'manage_topics')) {\n return false;\n }\n }\n\n // const isChannel = appPeersManager.isChannel(peerId);\n const chat = this.appChatsManager.getChat(chatId) as Chat.chat;\n const hasRights = /* isChannel && */this.appChatsManager.hasRights(chatId, action, undefined, !!threadId);\n return /* !isChannel || */hasRights && (!chat.pFlags.left || !!threadId);\n } else {\n return this.appUsersManager.canSendToUser(peerId);\n }\n }\n\n public finalizePendingMessage(randomId: Long, finalMessage: MyMessage) {\n const pendingData = this.pendingByRandomId[randomId];\n if(!pendingData) {\n return;\n }\n\n const {peerId, tempId, threadId, storage} = pendingData;\n\n [\n this.getHistoryStorage(peerId),\n threadId ? this.getHistoryStorage(peerId, threadId) : undefined\n ]\n .filter(Boolean)\n .forEach((storage) => {\n storage.history.delete(tempId);\n });\n\n // this.log('pending', randomID, historyStorage.pending)\n\n const tempMessage: MyMessage = this.getMessageFromStorage(storage, tempId);\n if(tempMessage) {\n delete finalMessage.pFlags.is_outgoing;\n delete finalMessage.pending;\n delete finalMessage.error;\n delete finalMessage.random_id;\n delete finalMessage.send;\n }\n\n this.rootScope.dispatchEvent('messages_pending');\n\n delete this.pendingByRandomId[randomId];\n\n this.finalizePendingMessageCallbacks(storage, tempId, finalMessage);\n\n return tempMessage;\n }\n\n public finalizePendingMessageCallbacks(storage: MessagesStorage, tempId: number, message: MyMessage) {\n const callbacks = this.tempFinalizeCallbacks[tempId];\n // this.log.warn(callbacks, tempId);\n if(callbacks !== undefined) {\n for(const name in callbacks) {\n const {deferred, callback} = callbacks[name];\n // this.log(`finalizePendingMessageCallbacks: will invoke ${name} callback`);\n callback(message).then(deferred.resolve, deferred.reject);\n }\n\n delete this.tempFinalizeCallbacks[tempId];\n }\n\n // set cached url to media\n if((message as Message.message).media) {\n assumeType(message);\n const {photo: newPhoto, document: newDoc} = message.media as any;\n if(newPhoto) {\n const photo = this.appPhotosManager.getPhoto('' + tempId);\n if(/* photo._ !== 'photoEmpty' */photo) {\n const newPhotoSize = newPhoto.sizes[newPhoto.sizes.length - 1];\n const cacheContext = this.thumbsStorage.getCacheContext(newPhoto, newPhotoSize.type);\n const oldCacheContext = this.thumbsStorage.getCacheContext(photo, THUMB_TYPE_FULL);\n Object.assign(cacheContext, oldCacheContext);\n\n const photoSize = newPhoto.sizes[newPhoto.sizes.length - 1] as PhotoSize.photoSize;\n\n const downloadOptions = getPhotoDownloadOptions(newPhoto, photoSize);\n const fileName = getFileNameByLocation(downloadOptions.location);\n // this.appDownloadManager.fakeDownload(fileName, oldCacheContext.url);\n }\n } else if(newDoc) {\n const oldDoc = this.appDocsManager.getDoc('' + tempId);\n if(oldDoc) {\n const oldCacheContext = this.thumbsStorage.getCacheContext(oldDoc);\n if(\n /* doc._ !== 'documentEmpty' && */\n oldDoc.type &&\n oldDoc.type !== 'sticker' &&\n oldDoc.mime_type !== 'image/gif' &&\n oldCacheContext.url\n ) {\n const cacheContext = this.thumbsStorage.getCacheContext(newDoc);\n Object.assign(cacheContext, oldCacheContext);\n\n const fileName = getDocumentInputFileName(newDoc);\n // this.appDownloadManager.fakeDownload(fileName, oldCacheContext.url);\n }\n }\n } else if((message.media as MessageMedia.messageMediaPoll).poll) {\n delete this.appPollsManager.polls[tempId];\n delete this.appPollsManager.results[tempId];\n }\n }\n\n const tempMessage = this.getMessageFromStorage(storage, tempId);\n storage.delete(tempId);\n\n if(!(tempMessage as Message.message).reply_markup && (message as Message.message).reply_markup) {\n setTimeout(() => { // TODO: refactor it to normal buttons adding\n if(!this.getMessageFromStorage(storage, message.mid)) {\n return;\n }\n\n this.rootScope.dispatchEvent('message_edit', {storageKey: storage.key, peerId: message.peerId, mid: message.mid, message});\n }, 0);\n }\n\n this.handleReleasingMessage(tempMessage, storage);\n\n this.rootScope.dispatchEvent('message_sent', {storageKey: storage.key, tempId, tempMessage, mid: message.mid, message});\n }\n\n public incrementMaxSeenId(maxId: number) {\n if(!maxId || !(!this.maxSeenId || maxId > this.maxSeenId)) {\n return false;\n }\n\n this.maxSeenId = maxId;\n this.appStateManager.pushToState('maxSeenMsgId', maxId);\n\n this.apiManager.invokeApi('messages.receivedMessages', {\n max_id: getServerMessageId(maxId)\n });\n }\n\n public async getMessageReactionsListAndReadParticipants(\n message: Message.message,\n limit?: number,\n reaction?: Reaction,\n offset?: string,\n skipReadParticipants?: boolean,\n skipReactionsList?: boolean\n ) {\n const emptyMessageReactionsList = {\n reactions: [] as MessagePeerReaction[],\n count: 0,\n next_offset: undefined as string\n };\n\n const canViewMessageReadParticipants = await this.canViewMessageReadParticipants(message);\n if(canViewMessageReadParticipants && limit === undefined) {\n limit = 100;\n } else if(limit === undefined) {\n limit = 50;\n }\n\n return Promise.all([\n canViewMessageReadParticipants && !reaction && !skipReadParticipants ? this.getMessageReadParticipants(message.peerId, message.mid).catch(() => [] as UserId[]) : [] as UserId[],\n\n message.reactions?.recent_reactions?.length && !skipReactionsList ? this.appReactionsManager.getMessageReactionsList(message.peerId, message.mid, limit, reaction, offset).catch((err) => emptyMessageReactionsList) : emptyMessageReactionsList\n ]).then(([userIds, messageReactionsList]) => {\n const readParticipantsPeerIds = userIds.map((userId) => userId.toPeerId());\n\n const filteredReadParticipants = readParticipantsPeerIds.slice();\n forEachReverse(filteredReadParticipants, (peerId, idx, arr) => {\n if(messageReactionsList.reactions.some((reaction) => this.appPeersManager.getPeerId(reaction.peer_id) === peerId)) {\n arr.splice(idx, 1);\n }\n });\n\n let combined: {peerId: PeerId, reaction?: Reaction}[] = messageReactionsList.reactions.map((reaction) => ({peerId: this.appPeersManager.getPeerId(reaction.peer_id), reaction: reaction.reaction}));\n combined = combined.concat(filteredReadParticipants.map((readPeerId) => ({peerId: readPeerId})));\n\n return {\n reactions: messageReactionsList.reactions,\n reactionsCount: messageReactionsList.count,\n readParticipants: readParticipantsPeerIds,\n combined: combined,\n nextOffset: messageReactionsList.next_offset\n };\n });\n }\n\n public getMessageReadParticipants(peerId: PeerId, mid: number): Promise {\n return this.apiManager.invokeApiSingle('messages.getMessageReadParticipants', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((userIds) => { // ! convert long to number\n return userIds.map((userId) => userId.toUserId());\n });\n }\n\n public async canViewMessageReadParticipants(message: Message) {\n if(\n message?._ !== 'message' ||\n message.pFlags.is_outgoing ||\n !message.pFlags.out ||\n !this.appPeersManager.isAnyGroup(message.peerId)\n ) {\n return false;\n }\n\n const chat = this.appChatsManager.getChat(message.peerId.toChatId()) as Chat.chat | Chat.channel;\n const appConfig = await this.apiManager.getAppConfig();\n return chat.participants_count <= appConfig.chat_read_mark_size_threshold &&\n (tsNow(true) - message.date) < appConfig.chat_read_mark_expire_period;\n }\n\n public incrementMessageViews(peerId: PeerId, mids: number[]) {\n if(!mids.length) {\n return;\n }\n\n return this.apiManager.invokeApiSingle('messages.getMessagesViews', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n increment: true\n }).then((views) => {\n const updates: Update[] = new Array(mids.length);\n for(let i = 0, length = mids.length; i < length; ++i) {\n updates[i] = {\n _: 'updateChannelMessageViews',\n channel_id: NULL_PEER_ID,\n peerId,\n id: mids[i],\n views: views.views[i].views\n };\n }\n\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updates',\n updates,\n chats: views.chats,\n users: views.users\n });\n });\n }\n\n private notifyAboutMessage(message: MyMessage, options: Partial<{\n fwdCount: number,\n peerReaction: MessagePeerReaction,\n peerTypeNotifySettings: PeerNotifySettings\n }> = {}) {\n const peerId = this.getMessagePeer(message);\n\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return;\n }\n\n const tabs = appTabsManager.getTabs();\n let tab = tabs.find((tab) => {\n const {chatPeerIds} = tab.state;\n return chatPeerIds[chatPeerIds.length - 1] === peerId;\n });\n\n if(!tab && tabs.length) {\n tabs.sort((a, b) => a.state.idleStartTime - b.state.idleStartTime);\n tab = !tabs[0].state.idleStartTime ? tabs[0] : tabs[tabs.length - 1];\n }\n\n const port = MTProtoMessagePort.getInstance();\n port.invokeVoid('notificationBuild', {\n message,\n ...options\n }, tab?.source);\n }\n\n public getScheduledMessagesStorage(peerId: PeerId) {\n return this.scheduledMessagesStorage[peerId] ??= this.createMessageStorage(peerId, 'scheduled');\n }\n\n public getScheduledMessageByPeer(peerId: PeerId, mid: number) {\n return this.getMessageFromStorage(this.getScheduledMessagesStorage(peerId), mid);\n }\n\n public getScheduledMessages(peerId: PeerId) {\n if(!this.canSendToPeer(peerId)) return;\n\n const storage = this.getScheduledMessagesStorage(peerId);\n if(storage.size) {\n return [...storage.keys()];\n }\n\n return this.apiManager.invokeApiSingle('messages.getScheduledHistory', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n hash: ''\n }).then((historyResult) => {\n if(historyResult._ !== 'messages.messagesNotModified') {\n this.appUsersManager.saveApiUsers(historyResult.users);\n this.appChatsManager.saveApiChats(historyResult.chats);\n\n const storage = this.getScheduledMessagesStorage(peerId);\n this.saveMessages(historyResult.messages, {storage, isScheduled: true});\n return [...storage.keys()];\n }\n\n return [];\n });\n }\n\n public sendScheduledMessages(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApi('messages.sendScheduledMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public deleteScheduledMessages(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApi('messages.deleteScheduledMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getMessageWithReplies(message: Message.message) {\n return this.filterMessages(message, (message) => !!(message as Message.message).replies)[0] as any;\n }\n\n public getMessageWithCommentReplies(message: Message.message) {\n if(message.peerId !== REPLIES_PEER_ID) {\n message = this.getMessageWithReplies(message);\n const replies = message?.replies;\n if(!(replies && replies.pFlags.comments && replies.channel_id.toChatId() !== REPLIES_HIDDEN_CHANNEL_ID)) {\n return;\n }\n }\n\n return message;\n }\n\n public isFetchIntervalNeeded(peerId: PeerId) {\n return peerId.isAnyChat() && (\n !this.appChatsManager.isInChat(peerId.toChatId()) ||\n this.appChatsManager.isForum(peerId.toChatId())\n );\n }\n\n public async getNewHistory(peerId: PeerId, threadId?: number) {\n if(!this.isFetchIntervalNeeded(peerId)) {\n return;\n }\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const slice = historyStorage.history.slice;\n if(!slice.isEnd(SliceEnd.Bottom)) {\n return;\n }\n\n delete historyStorage.maxId;\n slice.unsetEnd(SliceEnd.Bottom);\n\n // if there is no id - then request by first id because cannot request by id 0 with backLimit\n const historyResult = await this.getHistory(peerId, slice[0] ?? 1, 0, 50, threadId);\n for(let i = 0, length = historyResult.history.length; i < length; ++i) {\n this.handleNewMessage(this.getMessageByPeer(peerId, historyResult.history[i]));\n }\n\n return {isBottomEnd: historyStorage.history.slice.isEnd(SliceEnd.Bottom)};\n }\n\n /**\n * * https://core.telegram.org/api/offsets, offset_id is inclusive\n */\n // public getHistory(peerId: PeerId, maxId?: number, limit?: number, backLimit?: number, threadId?: number, onlyCache?: false): Promise | HistoryResult;\n // public getHistory(peerId: PeerId, maxId?: number, limit?: number, backLimit?: number, threadId?: number, onlyCache?: true): HistoryResult;\n public getHistory(peerId: PeerId, maxId: number = 0, limit?: number, backLimit?: number, threadId?: number/* , onlyCache?: boolean */): Promise | HistoryResult {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n const first = historyStorage.history.first;\n first.setEnd(SliceEnd.Both);\n\n const slice = first.slice(0, 0);\n slice.setEnd(SliceEnd.Both);\n\n return {\n count: 0,\n history: Array.from(slice),\n isEnd: slice.getEnds(),\n offsetIdOffset: 0\n };\n }\n\n let offset = 0;\n /*\n let offsetFound = true;\n\n if(maxId) {\n offsetFound = false;\n for(; offset < historyStorage.history.length; offset++) {\n if(maxId > historyStorage.history.slice[offset]) {\n offsetFound = true;\n break;\n }\n }\n }\n\n if(offsetFound && (\n historyStorage.count !== null && historyStorage.history.length === historyStorage.count ||\n historyStorage.history.length >= offset + limit\n )) {\n if(backLimit) {\n backLimit = Math.min(offset, backLimit);\n offset = Math.max(0, offset - backLimit);\n limit += backLimit;\n } else {\n limit = limit;\n }\n\n const history = historyStorage.history.slice.slice(offset, offset + limit);\n return {\n count: historyStorage.count,\n history: history,\n offsetIdOffset: offset\n };\n }\n\n if(offsetFound) {\n offset = 0;\n } */\n\n if(backLimit) {\n offset = -backLimit;\n limit += backLimit;\n\n /* return this.requestHistory(reqPeerId, maxId, limit, offset, undefined, threadId).then((historyResult) => {\n historyStorage.count = (historyResult as MessagesMessages.messagesMessagesSlice).count || historyResult.messages.length;\n\n const history = (historyResult.messages as MyMessage[]).map((message) => message.mid);\n return {\n count: historyStorage.count,\n history,\n offsetIdOffset: (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset || 0\n };\n }); */\n }\n\n const haveSlice = historyStorage.history.sliceMe(maxId, offset, limit);\n if(haveSlice && (haveSlice.slice.length === limit || (haveSlice.fulfilled & SliceEnd.Both) === SliceEnd.Both)) {\n return {\n count: historyStorage.count,\n history: Array.from(haveSlice.slice),\n isEnd: haveSlice.slice.getEnds(),\n offsetIdOffset: haveSlice.offsetIdOffset\n };\n }\n\n // if(onlyCache) {\n // return;\n // }\n\n return this.fillHistoryStorage(peerId, maxId, limit, offset, historyStorage, threadId).then(() => {\n const slice = historyStorage.history.sliceMe(maxId, offset, limit);\n const f = slice?.slice || historyStorage.history.constructSlice();\n return {\n count: historyStorage.count,\n history: Array.from(f),\n isEnd: f.getEnds(),\n offsetIdOffset: slice?.offsetIdOffset || historyStorage.count\n };\n });\n }\n\n public isHistoryResultEnd(historyResult: Exclude, limit: number, add_offset: number) {\n const {offset_id_offset, messages} = historyResult as MessagesMessages.messagesMessagesSlice;\n\n const count = (historyResult as MessagesMessages.messagesMessagesSlice).count || messages.length;\n const offsetIdOffset = offset_id_offset || 0;\n\n const topWasMeantToLoad = add_offset < 0 ? limit + add_offset : limit;\n\n const isTopEnd = offsetIdOffset >= (count - topWasMeantToLoad) || count < topWasMeantToLoad;\n const isBottomEnd = !offsetIdOffset || (add_offset < 0 && (offsetIdOffset + add_offset) <= 0);\n\n return {count, offsetIdOffset, isTopEnd, isBottomEnd};\n }\n\n public mergeHistoryResult(\n slicedArray: SlicedArray,\n historyResult: Parameters[0],\n offset_id: number,\n limit: number,\n add_offset: number\n ) {\n const {messages} = historyResult as MessagesMessages.messagesMessagesSlice;\n const isEnd = this.isHistoryResultEnd(historyResult, limit, add_offset);\n const {count, offsetIdOffset, isTopEnd, isBottomEnd} = isEnd;\n const mids = messages.map((message) => {\n return (message as MyMessage).mid;\n });\n\n // * add bound manually.\n // * offset_id will be inclusive only if there is 'add_offset' <= -1 (-1 - will only include the 'offset_id')\n // * check that offset_id is not 0\n if(offset_id && getServerMessageId(offset_id) && !mids.includes(offset_id) && offsetIdOffset < count) {\n let i = 0;\n for(const length = mids.length; i < length; ++i) {\n if(offset_id > mids[i]) {\n break;\n }\n }\n\n mids.splice(i, 0, offset_id);\n }\n\n const slice = slicedArray.insertSlice(mids) || slicedArray.slice;\n if(isTopEnd) {\n slice.setEnd(SliceEnd.Top);\n }\n\n if(isBottomEnd) {\n slice.setEnd(SliceEnd.Bottom);\n }\n\n return {slice, mids, messages, ...isEnd};\n }\n\n public fillHistoryStorage(peerId: PeerId, offset_id: number, limit: number, add_offset: number, historyStorage: HistoryStorage, threadId?: number): Promise {\n const wasMaxId = historyStorage.maxId;\n return this.requestHistory(peerId, offset_id, limit, add_offset, undefined, threadId).then((historyResult) => {\n const {count, isBottomEnd, slice, messages} = this.mergeHistoryResult(historyStorage.history, historyResult, offset_id, limit, add_offset);\n\n historyStorage.count = count;\n\n /* if(!maxId && historyResult.messages.length) {\n maxId = this.incrementMessageId((historyResult.messages[0] as MyMessage).mid, 1);\n }\n\n const wasTotalCount = historyStorage.history.length; */\n\n for(let i = 0, length = messages.length; i < length; ++i) {\n const message = messages[i] as MyMessage;\n if(this.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n }\n\n if(isBottomEnd) {\n const newMaxId = slice[0];\n\n if(historyStorage.maxId === wasMaxId) {\n const first = historyStorage.history.first;\n if(first !== slice) {\n historyStorage.history.deleteSlice(first);\n }\n\n if(historyStorage.maxId !== newMaxId) {\n historyStorage.maxId = slice[0]; // ! WARNING\n\n this.reloadConversation(peerId); // when top_message is deleted but cached\n }\n }\n }\n\n /* const isBackLimit = offset < 0 && -offset !== fullLimit;\n if(isBackLimit) {\n return;\n }\n\n const totalCount = historyStorage.history.length;\n fullLimit -= (totalCount - wasTotalCount);\n\n const migratedNextPeer = this.migratedFromTo[peerId];\n const migratedPrevPeer = this.migratedToFrom[peerId]\n const isMigrated = migratedNextPeer !== undefined || migratedPrevPeer !== undefined;\n\n if(isMigrated) {\n historyStorage.count = Math.max(historyStorage.count, totalCount) + 1;\n }\n\n if(fullLimit > 0) {\n maxId = historyStorage.history.slice[totalCount - 1];\n if(isMigrated) {\n if(!historyResult.messages.length) {\n if(migratedPrevPeer) {\n maxId = 0;\n peerId = migratedPrevPeer;\n } else {\n historyStorage.count = totalCount;\n return true;\n }\n }\n\n return this.fillHistoryStorage(peerId, maxId, fullLimit, historyStorage, threadId);\n } else if(totalCount < historyStorage.count) {\n return this.fillHistoryStorage(peerId, maxId, fullLimit, offset, historyStorage, threadId);\n }\n } */\n });\n }\n\n public requestHistory(peerId: PeerId, maxId: number, limit = 0, offset = 0, offsetDate = 0, threadId = 0): Promise> {\n // console.trace('requestHistory', peerId, maxId, limit, offset);\n\n // rootScope.broadcast('history_request');\n\n const options: MessagesGetReplies | MessagesGetHistory = {\n peer: this.appPeersManager.getInputPeerById(peerId),\n offset_id: getServerMessageId(maxId) || 0,\n offset_date: offsetDate,\n add_offset: offset,\n limit,\n max_id: 0,\n min_id: 0,\n hash: 0\n };\n\n if(threadId) {\n (options as MessagesGetReplies).msg_id = getServerMessageId(threadId) || 0;\n }\n\n const promise: ReturnType = this.apiManager.invokeApiSingle(threadId ? 'messages.getReplies' : 'messages.getHistory', options, {\n // timeout: APITIMEOUT,\n noErrorBox: true\n }) as any;\n\n return promise.then((historyResult) => {\n if(DEBUG) {\n this.log('requestHistory result:', peerId, historyResult, maxId, limit, offset);\n }\n\n this.appUsersManager.saveApiUsers(historyResult.users);\n this.appChatsManager.saveApiChats(historyResult.chats);\n this.saveMessages(historyResult.messages);\n\n if('pts' in historyResult) {\n this.apiUpdatesManager.addChannelState(peerId.toChatId(), historyResult.pts);\n }\n\n let length = historyResult.messages.length, count = (historyResult as MessagesMessages.messagesMessagesSlice).count;\n if(length && !historyResult.messages[length - 1]) {\n historyResult.messages.splice(length - 1, 1);\n length--;\n count--;\n }\n\n // will load more history if last message is album grouped (because it can be not last item)\n // historyResult.messages: desc sorted\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const oldestMessage: Message.message = historyResult.messages[length - 1] as any;\n if(length && oldestMessage.grouped_id) {\n const foundSlice = historyStorage.history.findSlice(oldestMessage.mid);\n if(foundSlice && (foundSlice.slice.length + historyResult.messages.length) < count) {\n return this.requestHistory(peerId, oldestMessage.mid, 10, 0, offsetDate, threadId).then((_historyResult) => {\n return historyResult;\n });\n }\n }\n\n return historyResult;\n }, (error) => {\n switch(error.type) {\n case 'CHANNEL_PRIVATE':\n let channel = this.appChatsManager.getChat(peerId.toChatId());\n if(channel._ === 'channel') {\n channel = {\n _: 'channelForbidden',\n id: peerId.toChatId(),\n access_hash: channel.access_hash,\n title: channel.title,\n pFlags: channel.pFlags\n };\n }\n\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updates',\n updates: [{\n _: 'updateChannel',\n channel_id: peerId.toChatId()\n }],\n chats: [channel],\n users: []\n });\n break;\n }\n\n throw error;\n });\n }\n\n public fetchSingleMessages() {\n if(this.fetchSingleMessagesPromise) {\n return this.fetchSingleMessagesPromise;\n }\n\n return this.fetchSingleMessagesPromise = pause(0).then(() => {\n const requestPromises: Promise[] = [];\n\n for(const [peerId, map] of this.needSingleMessages) {\n const mids = [...map.keys()];\n const msgIds: InputMessage[] = mids.map((mid) => {\n return {\n _: 'inputMessageID',\n id: getServerMessageId(mid)\n };\n });\n\n let promise: Promise;\n if(peerId.isAnyChat() && this.appPeersManager.isChannel(peerId)) {\n promise = this.apiManager.invokeApiSingle('channels.getMessages', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n id: msgIds\n });\n } else {\n promise = this.apiManager.invokeApiSingle('messages.getMessages', {\n id: msgIds\n });\n }\n\n const after = promise.then((getMessagesResult) => {\n assumeType>(getMessagesResult);\n\n this.appUsersManager.saveApiUsers(getMessagesResult.users);\n this.appChatsManager.saveApiChats(getMessagesResult.chats);\n const messages = this.saveMessages(getMessagesResult.messages);\n\n for(let i = 0; i < messages.length; ++i) {\n const message = messages[i];\n if(!message) {\n continue;\n }\n\n const mid = generateMessageId(message.id);\n const promise = map.get(mid);\n promise.resolve(message);\n map.delete(mid);\n }\n\n if(map.size) {\n for(const [mid, promise] of map) {\n promise.resolve(this.generateEmptyMessage(mid));\n }\n }\n }).finally(() => {\n this.rootScope.dispatchEvent('messages_downloaded', {peerId, mids});\n });\n\n requestPromises.push(after);\n }\n\n this.needSingleMessages.clear();\n\n return Promise.all(requestPromises).then(noop, noop).then(() => {\n this.fetchSingleMessagesPromise = undefined;\n if(this.needSingleMessages.size) this.fetchSingleMessages();\n });\n });\n }\n\n public reloadMessages(peerId: PeerId, mid: number, overwrite?: boolean): Promise;\n public reloadMessages(peerId: PeerId, mid: number[], overwrite?: boolean): Promise;\n public reloadMessages(peerId: PeerId, mid: number | number[], overwrite?: boolean): Promise {\n if(Array.isArray(mid)) {\n return Promise.all(mid.map((mid) => {\n return this.reloadMessages(peerId, mid, overwrite);\n }));\n }\n\n const message = this.getMessageByPeer(peerId, mid);\n if(message && !overwrite) {\n this.rootScope.dispatchEvent('messages_downloaded', {peerId, mids: [mid]});\n return Promise.resolve(message);\n } else {\n let map = this.needSingleMessages.get(peerId);\n if(!map) {\n this.needSingleMessages.set(peerId, map = new Map());\n }\n\n let promise = map.get(mid);\n if(promise) {\n return promise;\n }\n\n promise = deferredPromise();\n map.set(mid, promise);\n this.fetchSingleMessages();\n return promise;\n }\n }\n\n public getExtendedMedia(peerId: PeerId, mids: number[]) {\n let map = this.extendedMedia.get(peerId);\n if(!map) {\n this.extendedMedia.set(peerId, map = new Map());\n }\n\n const deferred = deferredPromise();\n const toRequest: number[] = [];\n const promises = mids.map((mid) => {\n let promise = map.get(mid);\n if(!promise) {\n map.set(mid, promise = deferred);\n toRequest.push(mid);\n\n promise.then(() => {\n map.delete(mid);\n if(!map.size && this.extendedMedia.get(peerId) === map) {\n this.extendedMedia.delete(peerId);\n }\n });\n }\n\n return promise;\n });\n\n if(!toRequest.length) {\n deferred.resolve();\n } else {\n this.apiManager.invokeApi('messages.getExtendedMedia', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: toRequest.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n deferred.resolve();\n });\n }\n\n return Promise.all(promises);\n }\n\n public fetchMessageReplyTo(message: MyMessage) {\n if(!message.reply_to_mid) return Promise.resolve(this.generateEmptyMessage(0));\n const replyToPeerId = message.reply_to.reply_to_peer_id ? this.appPeersManager.getPeerId(message.reply_to.reply_to_peer_id) : message.peerId;\n return this.reloadMessages(replyToPeerId, message.reply_to_mid).then((originalMessage) => {\n if(!originalMessage) { // ! break the infinite loop\n message = this.getMessageByPeer(message.peerId, message.mid); // message can come from other thread\n delete message.reply_to_mid; // ! WARNING!\n }\n\n if(message._ === 'messageService') {\n const peerId = message.peerId;\n this.rootScope.dispatchEvent('message_edit', {\n storageKey: `${peerId}_history`,\n peerId: peerId,\n mid: message.mid,\n message\n });\n\n if(this.isMessageIsTopMessage(message)) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map([[peerId, {dialog: this.getDialogOnly(peerId)}]]));\n }\n }\n\n return originalMessage;\n });\n }\n\n private getTypingKey(peerId: PeerId, threadId?: number) {\n return threadId ? `${peerId}_${threadId}` : peerId;\n }\n\n public setTyping(\n peerId: PeerId,\n action: SendMessageAction,\n force?: boolean,\n threadId?: number\n ): Promise {\n if(threadId && !this.appPeersManager.isForum(peerId)) {\n threadId = undefined;\n }\n\n const key = this.getTypingKey(peerId, threadId);\n let typing = this.typings[key];\n if(\n !peerId ||\n !this.canSendToPeer(peerId) ||\n peerId === this.appPeersManager.peerId ||\n // (!force && deepEqual(typing?.action, action))\n (!force && typing?.action?._ === action._)\n ) {\n return Promise.resolve(false);\n }\n\n if(typing?.timeout) {\n clearTimeout(typing.timeout);\n }\n\n typing = this.typings[key] = {\n action\n };\n\n return this.apiManager.invokeApi('messages.setTyping', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n action,\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n }).finally(() => {\n if(typing === this.typings[key]) {\n typing.timeout = ctx.setTimeout(() => {\n delete this.typings[key];\n }, 6000);\n }\n });\n }\n\n private handleReleasingMessage(message: MyMessage, storage: MessagesStorage) {\n const media = (message as Message.message).media;\n if(media) {\n const c = (media as MessageMedia.messageMediaWebPage).webpage as WebPage.webPage || media as MessageMedia.messageMediaPhoto | MessageMedia.messageMediaDocument;\n const smth: Photo.photo | MyDocument = (c as MessageMedia.messageMediaPhoto).photo as any || (c as MessageMedia.messageMediaDocument).document as any;\n\n if(smth?.file_reference) {\n this.referenceDatabase.deleteContext(smth.file_reference, {type: 'message', peerId: message.peerId, messageId: message.mid});\n }\n\n if('webpage' in media && media.webpage) {\n const isScheduled = this.getScheduledMessagesStorage(message.peerId) === storage;\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(message.peerId, message.mid, isScheduled);\n this.appWebPagesManager.deleteWebPageFromPending(media.webpage, messageKey);\n }\n\n if((media as MessageMedia.messageMediaPoll).poll) {\n this.appPollsManager.updatePollToMessage(message as Message.message, false);\n }\n }\n }\n\n private handleDeletedMessages(peerId: PeerId, storage: MessagesStorage, messages: number[]) {\n const history: {\n count: number,\n unread: number,\n unreadMentions: number,\n msgs: Set,\n albums?: {[groupId: string]: Set},\n } = {\n count: 0,\n unread: 0,\n unreadMentions: 0,\n msgs: new Set()\n };\n\n for(const mid of messages) {\n const message: MyMessage = this.getMessageFromStorage(storage, mid);\n if(!message) {\n this.fixDialogUnreadMentionsIfNoMessage(peerId);\n continue;\n }\n\n this.handleReleasingMessage(message, storage);\n\n this.updateMessageRepliesIfNeeded(message);\n\n if(!message.pFlags.out && !message.pFlags.is_outgoing && message.pFlags.unread) {\n ++history.unread;\n this.rootScope.dispatchEvent('notification_cancel', 'msg' + mid);\n\n if(message.pFlags.mentioned) {\n ++history.unreadMentions;\n this.modifyCachedMentions(peerId, mid, false);\n }\n }\n\n ++history.count;\n history.msgs.add(mid);\n\n message.deleted = true;\n\n const groupedId = (message as Message.message).grouped_id;\n if(groupedId) {\n const groupedStorage = this.groupedMessagesStorage[groupedId];\n if(groupedStorage) {\n groupedStorage.delete(mid);\n\n if(!history.albums) history.albums = {};\n (history.albums[groupedId] || (history.albums[groupedId] = new Set())).add(mid);\n\n if(!groupedStorage.size) {\n delete history.albums;\n delete this.groupedMessagesStorage[groupedId];\n }\n }\n }\n\n storage.delete(mid);\n }\n\n if(history.albums) {\n for(const groupedId in history.albums) {\n this.dispatchAlbumEdit(groupedId, storage, [...history.albums[groupedId]]);\n /* const mids = this.getMidsByAlbum(groupId);\n if(mids.length) {\n const mid = Math.max(...mids);\n rootScope.$broadcast('message_edit', {peerId, mid, justMedia: false});\n } */\n }\n }\n\n return history;\n }\n\n private handleEditedMessage(oldMessage: Message, newMessage: Message, storage: MessagesStorage) {\n if(oldMessage._ === 'message') {\n if((oldMessage.media as MessageMedia.messageMediaWebPage)?.webpage) {\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(oldMessage.peerId, oldMessage.mid, !!oldMessage.pFlags.is_scheduled);\n this.appWebPagesManager.deleteWebPageFromPending((oldMessage.media as MessageMedia.messageMediaWebPage).webpage, messageKey);\n }\n\n const groupedId = oldMessage.grouped_id;\n if(groupedId) {\n this.dispatchAlbumEdit(groupedId, storage, []);\n }\n }\n }\n\n private dispatchAlbumEdit(groupedId: string, storage: MessagesStorage, deletedMids?: number[]) {\n const mids = this.getMidsByAlbum(groupedId);\n const messages = mids.map((mid) => this.getMessageFromStorage(storage, mid)) as Message.message[];\n this.rootScope.dispatchEvent('album_edit', {peerId: messages[0].peerId, groupId: groupedId, deletedMids: deletedMids || [], messages});\n }\n\n public getDialogUnreadCount(dialog: Dialog | ForumTopic) {\n let unreadCount = dialog.unread_count;\n if(!this.dialogsStorage.isTopic(dialog) && this.appPeersManager.isForum(dialog.peerId)) {\n const forumUnreadCount = this.dialogsStorage.getForumUnreadCount(dialog.peerId);\n if(forumUnreadCount instanceof Promise) {\n unreadCount = 0;\n } else {\n unreadCount = forumUnreadCount.count;\n }\n }\n\n return unreadCount || +!!(dialog as Dialog).pFlags?.unread_mark;\n }\n\n public isDialogUnread(dialog: Dialog | ForumTopic) {\n return !!this.getDialogUnreadCount(dialog);\n }\n\n public canForward(message: Message.message | Message.messageService) {\n return message?._ === 'message' && !(message as Message.message).pFlags.noforwards && !this.appPeersManager.noForwards(message.peerId);\n }\n\n private pushBatchUpdate(\n event: E,\n callback: C,\n key: string,\n getElementCallback?: () => MapValueType[0]>\n ) {\n let details = this.batchUpdates[event];\n if(!details) {\n // @ts-ignore\n details = this.batchUpdates[event] = {\n callback,\n batch: new Map()\n };\n }\n\n if(!details.batch.has(key)) {\n // @ts-ignore\n details.batch.set(key, getElementCallback ? getElementCallback() : undefined);\n this.batchUpdatesDebounced();\n }\n }\n\n private getMessagesFromMap>(map: T) {\n const newMap: Map> = new Map();\n for(const [key, value] of map) {\n const [peerIdStr, mid] = key.split('_');\n const message = this.getMessageByPeer(peerIdStr.toPeerId(), +mid) as Message.message;\n if(!message) {\n continue;\n }\n\n newMap.set(message, value);\n }\n\n return newMap;\n }\n\n private batchUpdateViews = (batch: Map) => {\n const toDispatch: {peerId: PeerId, mid: number, views: number}[] = [];\n\n const map = this.getMessagesFromMap(batch);\n for(const [message] of map) {\n toDispatch.push({\n peerId: message.peerId,\n mid: message.mid,\n views: message.views\n })\n }\n\n return toDispatch;\n };\n\n private batchUpdateReactions = (batch: Map) => {\n const toDispatch: {message: Message.message, changedResults: ReactionCount.reactionCount[]}[] = [];\n\n const map = this.getMessagesFromMap(batch);\n for(const [message, previousReactions] of map) {\n const results = message.reactions?.results ?? [];\n const previousResults = previousReactions?.results ?? [];\n const changedResults = results.filter((reactionCount) => {\n const previousReactionCount = previousResults.find((_reactionCount) => reactionsEqual(_reactionCount.reaction, reactionCount.reaction));\n return (\n message.pFlags.out && (\n !previousReactionCount ||\n reactionCount.count > previousReactionCount.count\n )\n ) || (\n reactionCount.chosen_order !== undefined && (\n !previousReactionCount ||\n previousReactionCount.chosen_order === undefined\n )\n );\n });\n\n toDispatch.push({message, changedResults});\n }\n\n return toDispatch;\n };\n\n public saveDefaultSendAs(peerId: PeerId, sendAsPeerId: PeerId) {\n const channelFull = this.appProfileManager.getCachedFullChat(peerId.toChatId()) as ChatFull.channelFull;\n channelFull.default_send_as = this.appPeersManager.getOutputPeer(sendAsPeerId);\n return this.apiManager.invokeApi('messages.saveDefaultSendAs', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n send_as: this.appPeersManager.getInputPeerById(sendAsPeerId)\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getFileNameByLocation} from '../../../../helpers/fileName';\nimport {Document} from '../../../../layer';\nimport getDocumentInputFileLocation from './getDocumentInputFileLocation';\n\nexport default function getDocumentInputFileName(doc: Document.document, thumbSize?: string) {\n return getFileNameByLocation(getDocumentInputFileLocation(doc, thumbSize), {fileName: doc.file_name});\n}\n","export default function convertInputKeyToKey(inputKey: string) {\n const str = inputKey.replace('input', '');\n return (str[0].toLowerCase() + str.slice(1)) as T;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport tsNow from '../../helpers/tsNow';\nimport {InputNotifyPeer, InputPeerNotifySettings, NotifyPeer, PeerNotifySettings, Update} from '../../layer';\nimport {MUTE_UNTIL} from '../mtproto/mtproto_config';\nimport throttle from '../../helpers/schedulers/throttle';\nimport convertInputKeyToKey from '../../helpers/string/convertInputKeyToKey';\nimport {AppManager} from './manager';\nimport ctx from '../../environment/ctx';\nimport assumeType from '../../helpers/assumeType';\nimport generateMessageId from './utils/messageId/generateMessageId';\n\ntype ImSadAboutIt = Promise | PeerNotifySettings;\ntype MyNotifyPeer = Exclude;\ntype MyInputNotifyPeer = Exclude;\nexport class AppNotificationsManager extends AppManager {\n private peerSettings = {\n notifyPeer: {} as {[peerId: string]: ImSadAboutIt},\n notifyUsers: null as ImSadAboutIt,\n notifyChats: null as ImSadAboutIt,\n notifyBroadcasts: null as ImSadAboutIt,\n notifyForumTopic: {} as {[peerId_threadId: string]: ImSadAboutIt}\n };\n // private exceptions: {[peerId: string]: PeerNotifySettings} = {};\n\n private getNotifyPeerTypePromise: Promise;\n\n private checkMuteUntilTimeout: number;\n private checkMuteUntilThrottled: () => void;\n\n private notifyContactsSignUp: Promise;\n\n protected after() {\n this.checkMuteUntilThrottled = throttle(this.checkMuteUntil, 1000, false);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateNotifySettings: (update) => {\n const {peer} = update;\n const isTopic = peer._ === 'notifyForumTopic';\n const isPeerType = peer._ === 'notifyPeer' || isTopic;\n const peerId = isPeerType && this.appPeersManager.getPeerId(peer.peer);\n const key = !isPeerType ? peer._ : undefined;\n this.savePeerSettings({\n key,\n peerId,\n threadId: isTopic ? generateMessageId(peer.top_msg_id) : undefined,\n settings: update.notify_settings\n });\n this.rootScope.dispatchEvent('notify_settings', update);\n }\n });\n\n return this.appStateManager.getState().then((state) => {\n if(state.notifySettings) {\n for(const key in state.notifySettings) {\n assumeType(key);\n this.savePeerSettings({\n key,\n settings: state.notifySettings[key]\n });\n }\n }\n });\n }\n\n public getNotifySettings(peer: InputNotifyPeer): ImSadAboutIt {\n let key: any = convertInputKeyToKey(peer._);\n let obj: any = this.peerSettings[key as MyNotifyPeer];\n\n let peerId: PeerId;\n if(peer._ === 'inputNotifyPeer') {\n peerId = key = this.appPeersManager.getPeerId(peer.peer);\n obj = obj[key];\n }\n\n if(obj) {\n return obj;\n }\n\n return (obj || this.peerSettings)[key] = this.apiManager.invokeApi('account.getNotifySettings', {peer})\n .then((settings) => {\n this.savePeerSettings({\n key,\n peerId,\n settings\n });\n\n return settings;\n });\n }\n\n public getNotifyPeerTypeSettings() {\n if(this.getNotifyPeerTypePromise) return this.getNotifyPeerTypePromise;\n\n const promises = (['inputNotifyBroadcasts', 'inputNotifyUsers', 'inputNotifyChats'] as MyInputNotifyPeer[])\n .map((inputKey) => {\n return this.getNotifySettings({_: inputKey});\n });\n\n return this.getNotifyPeerTypePromise = Promise.all(promises);\n }\n\n public updateNotifySettings(peer: InputNotifyPeer, settings: InputPeerNotifySettings) {\n // this.savePeerSettings(peerId, settings);\n\n /* const inputSettings: InputPeerNotifySettings = copy(settings) as any;\n inputSettings._ = 'inputPeerNotifySettings'; */\n\n return this.apiManager.invokeApi('account.updateNotifySettings', {\n peer,\n settings\n }).then((value) => {\n if(value) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateNotifySettings',\n peer: {\n ...peer as any,\n _: convertInputKeyToKey(peer._)\n },\n notify_settings: { // ! WOW, IT WORKS !\n ...settings,\n _: 'peerNotifySettings'\n }\n });\n }\n });\n }\n\n // public getNotifyExceptions() {\n // apiManager.invokeApi('account.getNotifyExceptions', {compare_sound: true})\n // .then((updates) => {\n // apiUpdatesManager.processUpdateMessage(updates);\n // });\n // }\n\n public getContactSignUpNotification() {\n if(this.notifyContactsSignUp) return this.notifyContactsSignUp;\n return this.notifyContactsSignUp = this.apiManager.invokeApi('account.getContactSignUpNotification');\n }\n\n public setContactSignUpNotification(silent: boolean) {\n this.apiManager.invokeApi('account.setContactSignUpNotification', {silent})\n .then((value) => {\n this.notifyContactsSignUp = Promise.resolve(!silent);\n });\n }\n\n private checkMuteUntil = () => {\n if(this.checkMuteUntilTimeout !== undefined) {\n clearTimeout(this.checkMuteUntilTimeout);\n this.checkMuteUntilTimeout = undefined;\n }\n\n const timestamp = tsNow(true);\n let closestMuteUntil = MUTE_UNTIL;\n\n const p = (peerNotifySettings: ImSadAboutIt): peerNotifySettings is PeerNotifySettings => {\n if(peerNotifySettings instanceof Promise) {\n return false;\n }\n\n const muteUntil = peerNotifySettings.mute_until;\n if(!muteUntil) {\n return false;\n }\n\n if(muteUntil <= timestamp) {\n // ! do not delete it because peer's unique settings will be overwritten in getPeerLocalSettings with type's settings\n peerNotifySettings.mute_until = 0;\n return true;\n } else if(muteUntil < closestMuteUntil) {\n closestMuteUntil = muteUntil;\n }\n\n return false;\n };\n\n [\n 'notifyPeer' as const,\n 'notifyForumTopic' as const\n ].forEach((typeKey) => {\n for(const key in this.peerSettings[typeKey]) {\n const peerNotifySettings = this.peerSettings[typeKey][key];\n if(p(peerNotifySettings)) {\n const [peerId, topicId] = key.split('_');\n const peer = this.appPeersManager.getOutputPeer(peerId.toPeerId());\n this.apiUpdatesManager.saveUpdate({\n _: 'updateNotifySettings',\n peer: topicId ? {\n _: 'notifyForumTopic',\n peer,\n top_msg_id: +topicId\n } : {\n _: 'notifyPeer',\n peer\n },\n notify_settings: peerNotifySettings\n });\n }\n }\n });\n\n const timeout = Math.min(1800e3, (closestMuteUntil - timestamp) * 1000);\n this.checkMuteUntilTimeout = ctx.setTimeout(this.checkMuteUntil, timeout);\n };\n\n public getPeerKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n public savePeerSettings({key, peerId, threadId, settings}: {\n key?: Exclude,\n peerId?: PeerId,\n threadId?: number,\n settings: PeerNotifySettings\n }) {\n let obj: any;\n if(peerId) {\n key = this.getPeerKey(peerId, threadId) as any;\n obj = this.peerSettings[threadId ? 'notifyForumTopic' : 'notifyPeer'];\n }\n\n (obj || this.peerSettings)[key] = settings;\n\n if(!peerId) {\n this.rootScope.dispatchEvent('notify_peer_type_settings', {key, settings});\n this.appStateManager.getState().then((state) => {\n const notifySettings = state.notifySettings;\n notifySettings[key] = settings;\n this.appStateManager.pushToState('notifySettings', notifySettings);\n });\n } else {\n this.checkMuteUntilThrottled();\n }\n\n // rootScope.broadcast('notify_settings', {peerId: peerId});\n }\n\n public isMuted(peerNotifySettings: PeerNotifySettings) {\n return peerNotifySettings._ === 'peerNotifySettings' &&\n (peerNotifySettings.silent || (peerNotifySettings.mute_until !== undefined && (peerNotifySettings.mute_until * 1000) > tsNow()));\n }\n\n private getPeerMuted(peerId: PeerId) {\n const ret = this.getNotifySettings({_: 'inputNotifyPeer', peer: this.appPeersManager.getInputPeerById(peerId)});\n return (ret instanceof Promise ? ret : Promise.resolve(ret))\n .then((peerNotifySettings) => this.isMuted(peerNotifySettings));\n }\n\n private getPeerLocalSettings({\n peerId,\n respectType = true,\n threadId\n }: {\n peerId: PeerId,\n respectType?: boolean,\n threadId?: number\n }): PeerNotifySettings {\n const n: PeerNotifySettings = {\n _: 'peerNotifySettings'\n };\n\n const peerKey = this.getPeerKey(peerId, threadId);\n const notifySettings = this.peerSettings[threadId ? 'notifyForumTopic' : 'notifyPeer'][peerKey];\n // if(!notifySettings || (notifySettings instanceof Promise)) return false;\n if(notifySettings && !(notifySettings instanceof Promise)) {\n Object.assign(n, notifySettings);\n }\n\n if(respectType) {\n const inputNotify = this.appPeersManager.getInputNotifyPeerById({peerId, ignorePeerId: true, threadId});\n const key = convertInputKeyToKey(inputNotify._);\n const typeNotifySettings = this.peerSettings[key as MyNotifyPeer];\n if(typeNotifySettings && !(typeNotifySettings instanceof Promise)) {\n for(const i in typeNotifySettings) {\n // @ts-ignore\n if(n[i] === undefined) {\n // @ts-ignore\n n[i] = typeNotifySettings[i];\n }\n }\n }\n }\n\n return n;\n }\n\n public validatePeerSettings[0]>(options: T): T {\n if(options.peerId === this.appPeersManager.peerId) return;\n if(options.threadId && !this.appPeersManager.isForum(options.peerId)) options.threadId = undefined;\n return options;\n }\n\n public isPeerLocalMuted(options: Parameters[0]): boolean {\n if(!(options = this.validatePeerSettings(options))) return false;\n\n if(options.threadId) {\n const notifySettings = this.getPeerLocalSettings({...options, respectType: false});\n if(notifySettings.silent !== undefined || notifySettings.mute_until !== undefined) {\n return this.isMuted(notifySettings);\n } else {\n return this.isPeerLocalMuted({...options, threadId: undefined});\n }\n }\n\n const notifySettings = this.getPeerLocalSettings(options);\n const isMuted = this.isMuted(notifySettings);\n return isMuted;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {Chat, ChatPhoto, DialogPeer, InputChannel, InputDialogPeer, InputNotifyPeer, InputPeer, Peer, Update, User, UserProfilePhoto} from '../../layer';\nimport type {LangPackKey} from '../langPack';\nimport {getRestrictionReason} from '../../helpers/restrictions';\nimport isObject from '../../helpers/object/isObject';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\nimport isUser from './utils/peers/isUser';\nimport isAnyChat from './utils/peers/isAnyChat';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport isPeerRestricted from './utils/peers/isPeerRestricted';\nimport getPeerPhoto from './utils/peers/getPeerPhoto';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport type PeerType = 'channel' | 'chat' | 'megagroup' | 'group' | 'saved';\nexport class AppPeersManager extends AppManager {\n public get peerId() {\n return this.appUsersManager.userId.toPeerId();\n }\n /* public savePeerInstance(peerId: PeerId, instance: any) {\n if(peerId < 0) appChatsManager.saveApiChat(instance);\n else appUsersManager.saveApiUser(instance);\n } */\n\n public canPinMessage(peerId: PeerId) {\n return peerId.isUser() || this.appChatsManager.hasRights(peerId.toChatId(), 'pin_messages');\n }\n\n public getPeerPhoto(peerId: PeerId) {\n const peer = this.getPeer(peerId) as User.user | Chat.channel;\n return getPeerPhoto(peer);\n }\n\n public getPeerMigratedTo(peerId: PeerId) {\n if(peerId.isUser()) {\n return false;\n }\n\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n const migratedTo = chat?.migrated_to;\n if(migratedTo && chat.pFlags.deactivated) {\n return getPeerId(migratedTo);\n }\n\n return false;\n }\n\n public getOutputPeer(peerId: PeerId): Peer {\n if(peerId.isUser()) {\n return {_: 'peerUser', user_id: peerId.toUserId()};\n }\n\n const chatId = peerId.toChatId();\n if(this.appChatsManager.isChannel(chatId)) {\n return {_: 'peerChannel', channel_id: chatId};\n }\n\n return {_: 'peerChat', chat_id: chatId};\n }\n\n public getPeerString(peerId: PeerId) {\n if(peerId.isUser()) {\n return this.appUsersManager.getUserString(peerId.toUserId());\n }\n return this.appChatsManager.getChatString(peerId.toChatId());\n }\n\n public getPeerUsername(peerId: PeerId) {\n return this.getPeerActiveUsernames(peerId)[0] || '';\n }\n\n public getPeerActiveUsernames(peerId: PeerId) {\n const peer = this.getPeer(peerId);\n return getPeerActiveUsernames(peer);\n }\n\n public getPeer(peerId: PeerId) {\n return peerId.isUser() ?\n this.appUsersManager.getUser(peerId.toUserId()) :\n this.appChatsManager.getChat(peerId.toChatId());\n }\n\n public getPeerId(peerId: Parameters[0]) {\n return getPeerId(peerId) || (isObject(peerId) && peerId._ === 'inputPeerSelf' && this.peerId) || NULL_PEER_ID;\n }\n\n public getDialogPeer(peerId: PeerId): DialogPeer {\n return {\n _: 'dialogPeer',\n peer: this.getOutputPeer(peerId)\n };\n }\n\n public isChannel(peerId: PeerId): boolean {\n return !peerId.isUser() && this.appChatsManager.isChannel(peerId.toChatId());\n }\n\n public isMegagroup(peerId: PeerId) {\n return !peerId.isUser() && this.appChatsManager.isMegagroup(peerId.toChatId());\n }\n\n public isForum(peerId: PeerId) {\n return !peerId.isUser() && this.appChatsManager.isForum(peerId.toChatId());\n }\n\n public isAnyGroup(peerId: PeerId): boolean {\n return !peerId.isUser() && !this.appChatsManager.isBroadcast(peerId.toChatId());\n }\n\n public isBroadcast(peerId: PeerId): boolean {\n return this.isChannel(peerId) && !this.isMegagroup(peerId);\n }\n\n public isBot(peerId: PeerId): boolean {\n return peerId.isUser() && this.appUsersManager.isBot(peerId.toUserId());\n }\n\n public isContact(peerId: PeerId): boolean {\n return peerId.isUser() && this.appUsersManager.isContact(peerId.toUserId());\n }\n\n public isUser(peerId: PeerId)/* : peerId is UserId */ {\n return isUser(peerId);\n }\n\n public isAnyChat(peerId: PeerId) {\n return isAnyChat(peerId);\n }\n\n public isPeerRestricted(peerId: PeerId) {\n return isPeerRestricted(this.getPeer(peerId));\n }\n\n public getRestrictionReasonText(peerId: PeerId) {\n const peer = this.getPeer(peerId) as Chat.channel | User.user;\n const reason = peer.restriction_reason ? getRestrictionReason(peer.restriction_reason) : undefined;\n if(reason) {\n return reason.text;\n } else {\n return peerId.isUser() ? 'This user is restricted' : 'This chat is restricted';\n }\n }\n\n /* public getInputPeer(peerString: string): InputPeer {\n var firstChar = peerString.charAt(0);\n var peerParams = peerString.substr(1).split('_');\n let id = +peerParams[0];\n\n if(firstChar === 'u') {\n //appUsersManager.saveUserAccess(id, peerParams[1]);\n\n return {\n _: 'inputPeerUser',\n user_id: id,\n access_hash: peerParams[1]\n };\n } else if(firstChar === 'c' || firstChar === 's') {\n //appChatsManager.saveChannelAccess(id, peerParams[1]);\n if(firstChar === 's') {\n appChatsManager.saveIsMegagroup(id);\n }\n\n return {\n _: 'inputPeerChannel',\n channel_id: id,\n access_hash: peerParams[1] || '0'\n };\n } else {\n return {\n _: 'inputPeerChat',\n chat_id: id\n };\n }\n } */\n\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId: true): Exclude;\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId?: false): InputNotifyPeer.inputNotifyPeer;\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId?: boolean): InputNotifyPeer {\n public getInputNotifyPeerById({\n peerId,\n ignorePeerId,\n threadId\n }: T): T['ignorePeerId'] extends true ? Exclude : (T['threadId'] extends number ? InputNotifyPeer.inputNotifyForumTopic : InputNotifyPeer.inputNotifyPeer) {\n if(ignorePeerId) {\n if(peerId.isUser()) {\n return {_: 'inputNotifyUsers'} as any;\n } else {\n if(this.isBroadcast(peerId)) {\n return {_: 'inputNotifyBroadcasts'} as any;\n } else {\n return {_: 'inputNotifyChats'} as any;\n }\n }\n } else if(threadId) {\n return {\n _: 'inputNotifyForumTopic',\n peer: this.getInputPeerById(peerId),\n top_msg_id: getServerMessageId(threadId)\n } as any;\n } else {\n return {\n _: 'inputNotifyPeer',\n peer: this.getInputPeerById(peerId)\n } as any;\n }\n }\n\n public getInputPeerById(peerId: PeerId): InputPeer {\n if(!peerId) {\n return {_: 'inputPeerEmpty'};\n }\n\n if(!peerId.isUser()) {\n const chatId = peerId.toChatId();\n return this.appChatsManager.getInputPeer(chatId);\n }\n\n const userId = peerId.toUserId();\n return this.appUsersManager.getUserInputPeer(userId);\n }\n\n /**\n * ! use it only in safe places like requests\n */\n public getInputPeerSelf(): InputPeer.inputPeerSelf {\n return {_: 'inputPeerSelf'};\n }\n\n public getInputDialogPeerById(peerId: PeerId | InputPeer): InputDialogPeer {\n return {\n _: 'inputDialogPeer',\n peer: isObject(peerId) ? peerId : this.getInputPeerById(peerId)\n };\n }\n\n public getPeerSearchText(peerId: PeerId) {\n let text: string;\n if(this.isUser(peerId)) {\n text = '%pu ' + this.appUsersManager.getUserSearchText(peerId.toUserId());\n } else {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n text = '%pg ' + (chat.title || '');\n }\n\n return text;\n }\n\n public getDialogType(peerId: PeerId): PeerType {\n if(this.isMegagroup(peerId)) {\n return 'megagroup';\n } else if(this.isChannel(peerId)) {\n return 'channel';\n } else if(!this.isUser(peerId)) {\n return 'group';\n } else {\n return peerId === this.peerId ? 'saved' : 'chat';\n }\n }\n\n public getDeleteButtonText(peerId: PeerId): Extract {\n switch(this.getDialogType(peerId)) {\n case 'channel':\n return this.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat') ? 'ChannelDelete' : 'ChatList.Context.LeaveChannel';\n\n case 'megagroup':\n case 'group':\n return this.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat') ? 'DeleteMega' : 'ChatList.Context.LeaveGroup';\n\n default:\n return 'ChatList.Context.DeleteChat';\n }\n }\n\n public noForwards(peerId: PeerId) {\n if(peerId.isUser()) return false;\n else {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n return !!(chat as Chat.chat).pFlags?.noforwards;\n }\n }\n}\n\nexport type IsPeerType = 'isChannel' | 'isMegagroup' | 'isAnyGroup' | 'isBroadcast' | 'isBot' | 'isContact' | 'isUser' | 'isAnyChat';\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Photo, PhotoSize, PhotosPhotos} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceArrayInObject from '../../helpers/object/safeReplaceArrayInObject';\nimport {AppManager} from './manager';\n\nexport type MyPhoto = Photo.photo;\n\n// TIMES = 2 DUE TO SIDEBAR AND CHAT\n// let TEST_FILE_REFERENCE = \"5440692274120994569\", TEST_FILE_REFERENCE_TIMES = 2;\n\nexport class AppPhotosManager extends AppManager {\n private photos: {\n [id: string]: MyPhoto\n } = {};\n\n public savePhoto(photo: Photo, context?: ReferenceContext) {\n if(!photo || photo._ === 'photoEmpty') return;\n\n /* if(photo.id === TEST_FILE_REFERENCE) {\n console.warn('Testing FILE_REFERENCE_EXPIRED');\n const bytes = [2, 67, 175, 43, 190, 0, 0, 20, 62, 95, 111, 33, 45, 99, 220, 116, 218, 11, 167, 127, 213, 18, 127, 32, 243, 202, 117, 80, 30];\n //photo.file_reference = new Uint8Array(bytes);\n photo.file_reference = bytes;\n if(!--TEST_FILE_REFERENCE_TIMES) {\n TEST_FILE_REFERENCE = '';\n }\n } */\n\n const oldPhoto = this.photos[photo.id];\n if(photo.file_reference) { // * because we can have a new object w/o the file_reference while sending\n safeReplaceArrayInObject('file_reference', oldPhoto, photo);\n this.referenceDatabase.saveContext(photo.file_reference, context);\n }\n\n if(photo.sizes?.length) {\n // * sometimes photoStrippedSize can be the last item\n photo.sizes.sort((a, b) => {\n return ((a as PhotoSize.photoSize).size || ((a as PhotoSize.photoSizeProgressive).sizes ? Infinity : 0)) - ((b as PhotoSize.photoSize).size || ((b as PhotoSize.photoSizeProgressive).sizes ? Infinity : 0));\n });\n\n const size = photo.sizes[photo.sizes.length - 1];\n if(size._ === 'photoSizeProgressive') {\n size.size = size.sizes[size.sizes.length - 1];\n }\n }\n\n if(oldPhoto) {\n return Object.assign(oldPhoto, photo);\n }\n\n return this.photos[photo.id] = photo;\n }\n\n public getUserPhotos(userId: UserId, maxId: Photo.photo['id'] = '0', limit: number = 20) {\n const inputUser = this.appUsersManager.getUserInput(userId);\n return this.apiManager.invokeApiCacheable('photos.getUserPhotos', {\n user_id: inputUser,\n offset: 0,\n limit,\n max_id: maxId\n }, {cacheSeconds: 60}).then((photosResult) => {\n this.appUsersManager.saveApiUsers(photosResult.users);\n const photoIds = photosResult.photos.map((photo, idx) => {\n photosResult.photos[idx] = this.savePhoto(photo, {type: 'profilePhoto', peerId: userId.toPeerId()});\n return photo.id;\n });\n\n // ! WARNING !\n if(maxId !== '0' && maxId) {\n const idx = photoIds.indexOf(maxId);\n if(idx !== -1) {\n photoIds.splice(idx, 1);\n }\n }\n\n return {\n count: (photosResult as PhotosPhotos.photosPhotosSlice).count || photoIds.length,\n photos: photoIds\n };\n });\n }\n\n /* public getPhotoURL(photo: MTPhoto | MTMyDocument, photoSize: MTPhotoSize) {\n const downloadOptions = this.getPhotoDownloadOptions(photo, photoSize);\n\n return {url: getFileURL('photo', downloadOptions), location: downloadOptions.location};\n } */\n\n /* public isDownloaded(media: any) {\n const isPhoto = media._ === 'photo';\n const photo = isPhoto ? this.getPhoto(media.id) : null;\n let isDownloaded: boolean;\n if(photo) {\n isDownloaded = photo.downloaded > 0;\n } else {\n const cachedThumb = this.getDocumentCachedThumb(media.id);\n isDownloaded = cachedThumb?.downloaded > 0;\n }\n\n return isDownloaded;\n } */\n\n public getPhoto(photoId: any/* MyPhoto | string */): MyPhoto {\n return isObject(photoId) ? photoId as MyPhoto : this.photos[photoId as any as string];\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport copy from '../../helpers/object/copy';\nimport {InputMedia, Message, MessageEntity, MessageMedia, Poll, PollResults} from '../../layer';\nimport {logger, LogTypes} from '../logger';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\ntype PollId = Poll['id'];\n\nexport class AppPollsManager extends AppManager {\n public polls: {[id: PollId]: Poll} = {};\n public results: {[id: PollId]: PollResults} = {};\n public pollToMessages: {[id: PollId]: Set} = {};\n\n private log = logger('POLLS', LogTypes.Error);\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateMessagePoll: (update) => {\n this.log('updateMessagePoll:', update);\n\n let poll: Poll = update.poll || this.polls[update.poll_id];\n if(!poll) {\n return;\n }\n\n let results = update.results;\n const ret = this.savePoll(poll, results as any);\n poll = ret.poll;\n results = ret.results;\n\n this.rootScope.dispatchEvent('poll_update', {poll, results: results as any});\n }\n });\n }\n\n public savePoll(poll: Poll, results: PollResults, message?: Message.message) {\n if(message) {\n this.updatePollToMessage(message, true);\n }\n\n const id = poll.id;\n if(this.polls[id]) {\n poll = Object.assign(this.polls[id], poll);\n results = this.saveResults(poll, results);\n } else {\n this.polls[id] = poll;\n\n poll.chosenIndexes = [];\n results = this.saveResults(poll, results);\n }\n\n return {poll, results};\n }\n\n public saveResults(poll: Poll, results: PollResults) {\n if(this.results[poll.id]) {\n results = Object.assign(this.results[poll.id], results);\n } else {\n this.results[poll.id] = results;\n }\n\n if(!results.pFlags.min) { // ! https://core.telegram.org/constructor/pollResults - min\n poll.chosenIndexes.length = 0;\n if(results?.results?.length) {\n results.results.forEach((answer, idx) => {\n if(answer.pFlags?.chosen) {\n poll.chosenIndexes.push(idx);\n }\n });\n }\n }\n\n return results;\n }\n\n public getPoll(pollId: PollId): {poll: Poll, results: PollResults} {\n return {\n poll: this.polls[pollId],\n results: this.results[pollId]\n };\n }\n\n public getInputMediaPoll(poll: Poll, correctAnswers?: Uint8Array[], solution?: string, solutionEntities?: MessageEntity[]): InputMedia.inputMediaPoll {\n if(solution) {\n if(!solutionEntities) {\n solutionEntities = [];\n }\n\n solution = parseMarkdown(solution, solutionEntities);\n } else {\n solution = undefined; // can be string here\n }\n\n return {\n _: 'inputMediaPoll',\n poll,\n correct_answers: correctAnswers,\n solution,\n solution_entities: solution ? solutionEntities : undefined\n };\n }\n\n public updatePollToMessage(message: Message.message, add: boolean) {\n const {id} = (message.media as MessageMedia.messageMediaPoll).poll;\n let set = this.pollToMessages[id];\n\n if(!add && !set) {\n return;\n }\n\n if(!set) {\n set = this.pollToMessages[id] = new Set();\n }\n\n const key = message.peerId + '_' + message.mid;\n if(add) set.add(key);\n else set.delete(key);\n\n if(!add && !set.size) {\n delete this.polls[id];\n delete this.results[id];\n delete this.pollToMessages[id];\n }\n }\n\n public sendVote(message: Message.message, optionIds: number[]): Promise {\n const poll: Poll = (message.media as MessageMedia.messageMediaPoll).poll;\n\n const options: Uint8Array[] = optionIds.map((index) => {\n return poll.answers[index].option;\n });\n\n const messageId = message.mid;\n const peerId = message.peerId;\n const inputPeer = this.appPeersManager.getInputPeerById(peerId);\n\n if(message.pFlags.is_outgoing) {\n return this.appMessagesManager.invokeAfterMessageIsSent(messageId, 'sendVote', (message) => {\n this.log('invoke sendVote callback');\n return this.sendVote(message as Message.message, optionIds);\n });\n }\n\n return this.apiManager.invokeApi('messages.sendVote', {\n peer: inputPeer,\n msg_id: getServerMessageId(message.mid),\n options\n }).then((updates) => {\n this.log('sendVote updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getResults(message: Message.message) {\n const inputPeer = this.appPeersManager.getInputPeerById(message.peerId);\n\n return this.apiManager.invokeApi('messages.getPollResults', {\n peer: inputPeer,\n msg_id: getServerMessageId(message.mid)\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n this.log('getResults updates:', updates);\n });\n }\n\n public getVotes(message: Message.message, option?: Uint8Array, offset?: string, limit = 20) {\n return this.apiManager.invokeApi('messages.getPollVotes', {\n peer: this.appPeersManager.getInputPeerById(message.peerId),\n id: getServerMessageId(message.mid),\n option,\n offset,\n limit\n }).then((votesList) => {\n this.log('getPollVotes messages:', votesList);\n\n this.appUsersManager.saveApiUsers(votesList.users);\n\n return votesList;\n });\n }\n\n public stopPoll(message: Message.message) {\n const poll: Poll = (message.media as MessageMedia.messageMediaPoll).poll;\n\n if(poll.pFlags.closed) return Promise.resolve();\n\n const newPoll = copy(poll);\n newPoll.pFlags.closed = true;\n return this.appMessagesManager.editMessage(message, undefined, {\n newMedia: this.getInputMediaPoll(newPoll)\n }).then(() => {\n // console.log('stopped poll');\n }, err => {\n this.log.error('stopPoll error:', err);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputPrivacyKey, InputPrivacyRule, PrivacyRule, PrivacyKey, GlobalPrivacySettings} from '../../layer';\nimport convertInputKeyToKey from '../../helpers/string/convertInputKeyToKey';\nimport {AppManager} from './manager';\n\nexport class AppPrivacyManager extends AppManager {\n private privacy: Partial<{\n [key in PrivacyKey['_']]: PrivacyRule[] | Promise\n }> = {};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updatePrivacy: (update) => {\n const key = update.key._;\n this.privacy[key] = update.rules;\n this.rootScope.dispatchEvent('privacy_update', update);\n }\n });\n }\n\n public setPrivacy(inputKey: InputPrivacyKey['_'], rules: InputPrivacyRule[]) {\n return this.apiManager.invokeApi('account.setPrivacy', {\n key: {\n _: inputKey\n },\n rules\n }).then((privacyRules) => {\n this.appUsersManager.saveApiUsers(privacyRules.users);\n this.appChatsManager.saveApiChats(privacyRules.chats);\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePrivacy',\n key: {\n _: convertInputKeyToKey(inputKey)\n },\n rules: rules.map((inputRule) => {\n const rule: PrivacyRule = {} as any;\n Object.assign(rule, inputRule);\n rule._ = convertInputKeyToKey(rule._) as any;\n return rule;\n })\n });\n\n // console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\n\n return privacyRules.rules;\n });\n }\n\n public getPrivacy(inputKey: InputPrivacyKey['_']) {\n const privacyKey: PrivacyKey['_'] = convertInputKeyToKey(inputKey) as any;\n const rules = this.privacy[privacyKey];\n if(rules) {\n return Promise.resolve(rules);\n }\n\n return this.privacy[privacyKey] = this.apiManager.invokeApi('account.getPrivacy', {\n key: {\n _: inputKey\n }\n }).then((privacyRules) => {\n this.appUsersManager.saveApiUsers(privacyRules.users);\n this.appChatsManager.saveApiChats(privacyRules.chats);\n\n // console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\n\n return this.privacy[privacyKey] = privacyRules.rules;\n });\n }\n\n public getGlobalPrivacySettings() {\n return this.apiManager.invokeApi('account.getGlobalPrivacySettings');\n }\n\n public setGlobalPrivacySettings(settings: GlobalPrivacySettings) {\n return this.apiManager.invokeApi('account.setGlobalPrivacySettings', {settings});\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {MyTopPeer} from './appUsersManager';\nimport tsNow from '../../helpers/tsNow';\nimport {ChannelParticipantsFilter, ChannelsChannelParticipants, ChannelParticipant, Chat, ChatFull, ChatParticipants, ChatPhoto, ExportedChatInvite, InputChannel, InputFile, SendMessageAction, Update, UserFull, Photo, PhotoSize, Updates} from '../../layer';\nimport SearchIndex from '../searchIndex';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport getPhotoInput from './utils/photos/getPhotoInput';\nimport getParticipantPeerId from './utils/chats/getParticipantPeerId';\nimport ctx from '../../environment/ctx';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\n\nexport type UserTyping = Partial<{userId: UserId, action: SendMessageAction, timeout: number}>;\n\nconst PEER_FULL_TTL = 3 * 60e3;\n\nexport class AppProfileManager extends AppManager {\n // private botInfos: any = {};\n private usersFull: {[id: UserId]: UserFull.userFull} = {};\n private chatsFull: {[id: ChatId]: ChatFull} = {};\n private fullExpiration: {[peerId: PeerId]: number} = {};\n private typingsInPeer: {[key: string]: UserTyping[]};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateChatParticipants: this.onUpdateChatParticipants,\n\n updateChatParticipantAdd: this.onUpdateChatParticipantAdd,\n\n updateChatParticipantDelete: this.onUpdateChatParticipantDelete,\n\n updateUserTyping: this.onUpdateUserTyping,\n updateChatUserTyping: this.onUpdateUserTyping,\n updateChannelUserTyping: this.onUpdateUserTyping,\n\n updatePeerBlocked: this.onUpdatePeerBlocked\n });\n\n this.rootScope.addEventListener('chat_update', (chatId) => {\n const fullChat = this.chatsFull[chatId];\n const chat: Chat.chat | Chat.channel | Chat.chatForbidden | Chat.channelForbidden = this.appChatsManager.getChat(chatId);\n if(!fullChat || !chat) {\n return;\n }\n\n let updated = false;\n if(!!fullChat.call !== !!(chat as Chat.chat).pFlags?.call_active) {\n updated = true;\n }\n\n const {photo} = chat as Chat.chat;\n if(photo) {\n const hasChatPhoto = photo._ !== 'chatPhotoEmpty';\n const hasFullChatPhoto = !!(fullChat.chat_photo && fullChat.chat_photo._ !== 'photoEmpty'); // chat_photo can be missing\n if(\n hasChatPhoto !== hasFullChatPhoto || (\n hasChatPhoto &&\n photo.photo_id !== fullChat.chat_photo?.id\n )\n ) {\n updated = true;\n }\n }\n\n if(updated) {\n this.refreshFullPeer(chatId.toPeerId(true));\n }\n });\n\n this.rootScope.addEventListener('channel_update', (chatId) => {\n this.refreshFullPeer(chatId.toPeerId(true));\n });\n\n // * genius\n this.rootScope.addEventListener('chat_full_update', (chatId) => {\n this.rootScope.dispatchEvent('peer_full_update', chatId.toPeerId(true));\n });\n\n // * genius\n this.rootScope.addEventListener('user_full_update', (userId) => {\n this.rootScope.dispatchEvent('peer_full_update', userId.toPeerId(false));\n });\n\n this.rootScope.addEventListener('invalidate_participants', (chatId) => {\n this.invalidateChannelParticipants(chatId);\n });\n\n this.typingsInPeer = {};\n }\n\n /* public saveBotInfo(botInfo: any) {\n const botId = botInfo && botInfo.user_id;\n if(!botId) {\n return null;\n }\n\n const commands: any = {};\n botInfo.commands.forEach((botCommand: any) => {\n commands[botCommand.command] = botCommand.description;\n });\n\n return this.botInfos[botId] = {\n id: botId,\n version: botInfo.version,\n shareText: botInfo.share_text,\n description: botInfo.description,\n commands: commands\n };\n } */\n\n public getProfile(id: UserId, override?: true) {\n if(this.usersFull[id] && !override && Date.now() < this.fullExpiration[id.toPeerId()]) {\n return this.usersFull[id];\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'users.getFullUser',\n params: {\n id: this.appUsersManager.getUserInput(id)\n },\n processResult: (usersUserFull) => {\n this.appChatsManager.saveApiChats(usersUserFull.chats, true);\n this.appUsersManager.saveApiUsers(usersUserFull.users);\n\n const userFull = usersUserFull.full_user;\n const peerId = id.toPeerId(false);\n if(userFull.profile_photo) {\n userFull.profile_photo = this.appPhotosManager.savePhoto(userFull.profile_photo, {type: 'profilePhoto', peerId});\n }\n\n const botInfo = userFull.bot_info;\n if(botInfo) {\n const referenceContext: ReferenceContext = {type: 'userFull', userId: id};\n botInfo.description_document = this.appDocsManager.saveDoc(botInfo.description_document, referenceContext);\n botInfo.description_photo = this.appPhotosManager.savePhoto(botInfo.description_photo, referenceContext);\n }\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: userFull.notify_settings\n });\n\n this.usersFull[id] = userFull;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n\n /* if(userFull.bot_info) {\n userFull.bot_info = this.saveBotInfo(userFull.bot_info) as any;\n } */\n\n // appMessagesManager.savePinnedMessage(id, userFull.pinned_msg_id);\n\n this.rootScope.dispatchEvent('user_full_update', id);\n return userFull;\n }\n });\n }\n\n public getProfileByPeerId(peerId: PeerId, override?: true) {\n if(this.appPeersManager.isAnyChat(peerId)) return this.getChatFull(peerId.toChatId(), override);\n else return this.getProfile(peerId.toUserId(), override);\n }\n\n public getCachedFullChat(chatId: ChatId) {\n return this.chatsFull[chatId];\n }\n\n public getCachedFullUser(userId: UserId) {\n return this.usersFull[userId];\n }\n\n public getCachedProfileByPeerId(peerId: PeerId) {\n return peerId.isUser() ? this.getCachedFullUser(peerId.toUserId()) : this.getCachedFullChat(peerId.toChatId());\n }\n\n public async getFullPhoto(peerId: PeerId) {\n const profile = await this.getProfileByPeerId(peerId);\n switch(profile._) {\n case 'userFull':\n return profile.profile_photo;\n case 'channelFull':\n case 'chatFull':\n return profile.chat_photo;\n }\n }\n\n /* public getPeerBots(peerId: PeerId) {\n var peerBots: any[] = [];\n if(peerId >= 0 && !appUsersManager.isBot(peerId) ||\n (appPeersManager.isChannel(peerId) && !appPeersManager.isMegagroup(peerId))) {\n return Promise.resolve(peerBots);\n }\n if(peerId >= 0) {\n return this.getProfile(peerId).then((userFull: any) => {\n var botInfo = userFull.bot_info;\n if(botInfo && botInfo._ !== 'botInfoEmpty') {\n peerBots.push(botInfo);\n }\n return peerBots;\n });\n }\n\n return this.getChatFull(peerId.toChatId()).then((chatFull: any) => {\n chatFull.bot_info.forEach((botInfo: any) => {\n peerBots.push(this.saveBotInfo(botInfo))\n });\n return peerBots;\n });\n } */\n\n public getChatFull(id: ChatId, override?: true) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelFull(id, override);\n }\n\n const peerId = id.toPeerId(true);\n const fullChat = this.chatsFull[id] as ChatFull.chatFull;\n if(fullChat && !override && Date.now() < this.fullExpiration[peerId]) {\n const chat = this.appChatsManager.getChat(id) as Chat.chat;\n if(\n chat.pFlags.left ||\n chat.pFlags.deactivated ||\n chat.version === (fullChat.participants as ChatParticipants.chatParticipants).version\n ) {\n return fullChat as ChatFull;\n }\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getFullChat',\n params: {\n chat_id: id\n },\n processResult: (result) => {\n this.appChatsManager.saveApiChats(result.chats, true);\n this.appUsersManager.saveApiUsers(result.users);\n const chatFull = result.full_chat as ChatFull.chatFull;\n if(chatFull && chatFull.chat_photo && chatFull.chat_photo.id) {\n chatFull.chat_photo = this.appPhotosManager.savePhoto(chatFull.chat_photo, {type: 'profilePhoto', peerId});\n }\n\n if(chatFull.call) {\n this.appGroupCallsManager.saveGroupCall(chatFull.call, id);\n }\n\n // appMessagesManager.savePinnedMessage(peerId, fullChat.pinned_msg_id);\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: chatFull.notify_settings\n });\n\n this.chatsFull[id] = chatFull;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n this.rootScope.dispatchEvent('chat_full_update', id);\n\n return chatFull;\n }\n });\n }\n\n public async getChatInviteLink(id: ChatId, force?: boolean) {\n const chatFull = await this.getChatFull(id);\n if(!force &&\n chatFull.exported_invite &&\n chatFull.exported_invite._ == 'chatInviteExported') {\n return chatFull.exported_invite.link;\n }\n\n return this.apiManager.invokeApi('messages.exportChatInvite', {\n peer: this.appPeersManager.getInputPeerById(id.toPeerId(true))\n }).then((exportedInvite) => {\n if(this.chatsFull[id] !== undefined) {\n this.chatsFull[id].exported_invite = exportedInvite;\n }\n\n return (exportedInvite as ExportedChatInvite.chatInviteExported).link;\n });\n }\n\n public getParticipants(\n id: ChatId,\n filter: ChannelParticipantsFilter = {_: 'channelParticipantsRecent'},\n limit = 200,\n offset = 0\n ) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelParticipants(id, filter, limit, offset);\n }\n\n return Promise.resolve(this.getChatFull(id)).then((chatFull) => {\n const chatParticipants = (chatFull as ChatFull.chatFull).participants;\n if(chatParticipants._ !== 'chatParticipants') {\n throw makeError('CHAT_PRIVATE');\n }\n\n if(filter._ === 'channelParticipantsSearch' && filter.q.trim()) {\n const index = this.appUsersManager.createSearchIndex();\n chatParticipants.participants.forEach((chatParticipant) => {\n const userId = chatParticipant.user_id;\n index.indexObject(userId, this.appUsersManager.getUserSearchText(userId));\n });\n\n const found = index.search(filter.q);\n const filteredParticipants = chatParticipants.participants.filter((chatParticipant) => {\n return found.has(chatParticipant.user_id);\n });\n\n return {...chatParticipants, participants: filteredParticipants};\n }\n\n return chatParticipants;\n });\n }\n\n public getParticipant(id: ChatId, peerId: PeerId) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelParticipant(id, peerId);\n }\n\n return this.getParticipants(id).then((chatParticipants) => {\n assumeType(chatParticipants);\n const found = chatParticipants.participants.find((chatParticipant) => {\n if(getParticipantPeerId(chatParticipant) === peerId) {\n return chatParticipant;\n }\n });\n\n if(!found) {\n throw makeError('USER_NOT_PARTICIPANT');\n }\n\n return found;\n });\n }\n\n public getChannelParticipants(\n id: ChatId,\n filter: ChannelParticipantsFilter = {_: 'channelParticipantsRecent'},\n limit = 200,\n offset = 0\n ) {\n if(filter._ === 'channelParticipantsRecent') {\n const chat = this.appChatsManager.getChat(id);\n if(chat?.pFlags && (\n // chat.pFlags.kicked ||\n (chat as Chat.channel).pFlags.broadcast &&\n !(chat as Chat.channel).pFlags.creator &&\n !(chat as Chat.channel).admin_rights\n )) {\n return Promise.reject();\n }\n }\n\n return this.apiManager.invokeApiCacheable('channels.getParticipants', {\n channel: this.appChatsManager.getChannelInput(id),\n filter,\n offset,\n limit,\n hash: '0'\n }, {cacheSeconds: 60}).then((result) => {\n this.appUsersManager.saveApiUsers((result as ChannelsChannelParticipants.channelsChannelParticipants).users);\n return result as ChannelsChannelParticipants.channelsChannelParticipants;\n });\n /* let maybeAddSelf = (participants: any[]) => {\n let chat = appChatsManager.getChat(id);\n let selfMustBeFirst = filter._ === 'channelParticipantsRecent' &&\n !offset &&\n !chat.pFlags.kicked &&\n !chat.pFlags.left;\n\n if(selfMustBeFirst) {\n participants = copy(participants);\n let myID = appUsersManager.getSelf().id;\n let myIndex = participants.findIndex((p) => p.user_id === myID);\n let myParticipant;\n\n if(myIndex !== -1) {\n myParticipant = participants[myIndex];\n participants.splice(myIndex, 1);\n } else {\n myParticipant = {_: 'channelParticipantSelf', user_id: myID};\n }\n\n participants.unshift(myParticipant);\n }\n\n return participants;\n } */\n }\n\n public getChannelParticipant(id: ChatId, peerId: PeerId) {\n return this.apiManager.invokeApiSingle('channels.getParticipant', {\n channel: this.appChatsManager.getChannelInput(id),\n participant: this.appPeersManager.getInputPeerById(peerId)\n }).then((channelParticipant) => {\n this.appUsersManager.saveApiUsers(channelParticipant.users);\n return channelParticipant.participant;\n });\n }\n\n public getChannelFull(id: ChatId, override?: true) {\n const peerId = id.toPeerId(true);\n if(this.chatsFull[id] !== undefined && !override && Date.now() < this.fullExpiration[peerId]) {\n return this.chatsFull[id] as ChatFull.channelFull;\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'channels.getFullChannel',\n params: {\n channel: this.appChatsManager.getChannelInput(id)\n },\n processResult: (result) => {\n this.appChatsManager.saveApiChats(result.chats, true);\n this.appUsersManager.saveApiUsers(result.users);\n const fullChannel = result.full_chat as ChatFull.channelFull;\n if(fullChannel && fullChannel.chat_photo.id) {\n fullChannel.chat_photo = this.appPhotosManager.savePhoto(fullChannel.chat_photo, {type: 'profilePhoto', peerId});\n // appPhotosManager.savePhoto(fullChannel.chat_photo);\n }\n\n if(fullChannel.call) {\n this.appGroupCallsManager.saveGroupCall(fullChannel.call, id);\n }\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: fullChannel.notify_settings\n });\n\n this.chatsFull[id] = fullChannel;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n this.rootScope.dispatchEvent('chat_full_update', id);\n\n return fullChannel;\n },\n processError: (error) => {\n switch(error.type) {\n case 'CHANNEL_PRIVATE':\n const channel = this.appChatsManager.getChat(id) as Chat.channel | Chat.channelForbidden;\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updates',\n updates: [{\n _: 'updateChannel',\n channel_id: id\n }],\n chats: [channel._ === 'channelForbidden' ? channel : {\n _: 'channelForbidden',\n id,\n access_hash: channel.access_hash,\n title: channel.title,\n pFlags: channel.pFlags\n }],\n users: []\n } as Updates.updates);\n break;\n }\n\n throw error;\n }\n });\n }\n\n public getMentions(chatId: ChatId, query: string, threadId?: number): Promise {\n const processUserIds = (topPeers: MyTopPeer[]) => {\n const startsWithAt = query.charAt(0) === '@';\n if(startsWithAt) query = query.slice(1);\n /* const startsWithAt = query.charAt(0) === '@';\n if(startsWithAt) query = query.slice(1);\n\n const index = new SearchIndex(!startsWithAt, !startsWithAt); */\n const index = new SearchIndex({\n ignoreCase: true\n });\n\n const ratingMap: Map = new Map();\n topPeers.forEach((peer) => {\n index.indexObject(peer.id, this.appUsersManager.getUserSearchText(peer.id));\n ratingMap.set(peer.id, peer.rating);\n });\n\n const peerIds = Array.from(index.search(query));\n peerIds.sort((a, b) => ratingMap.get(b) - ratingMap.get(a));\n return peerIds;\n };\n\n let promise: Promise;\n if(this.appChatsManager.isChannel(chatId)) {\n promise = this.getChannelParticipants(chatId, {\n _: 'channelParticipantsMentions',\n q: query,\n top_msg_id: getServerMessageId(threadId)\n }, 50, 0).then((cP) => {\n return cP.participants.map((p) => getParticipantPeerId(p));\n });\n } else if(chatId) {\n promise = Promise.resolve(this.getChatFull(chatId)).then((chatFull) => {\n return ((chatFull as ChatFull.chatFull).participants as ChatParticipants.chatParticipants).participants.map((p) => p.user_id.toPeerId());\n });\n } else {\n promise = Promise.resolve([]);\n }\n\n return Promise.all([\n // [],\n this.appUsersManager.getTopPeers('bots_inline').catch(() => [] as MyTopPeer[]),\n promise\n ]).then((results) => {\n const peers = results[0].concat(results[1].map((peerId) => ({id: peerId, rating: 0})));\n\n return processUserIds(peers);\n });\n }\n\n private invalidateChannelParticipants(id: ChatId) {\n this.apiManager.clearCache('channels.getParticipants', (params) => (params.channel as InputChannel.inputChannel).channel_id === id);\n this.refreshFullPeer(id.toPeerId(true));\n }\n\n private refreshFullPeer(peerId: PeerId) {\n if(peerId.isUser()) {\n const userId = peerId.toUserId();\n delete this.usersFull[userId];\n this.rootScope.dispatchEvent('user_full_update', userId);\n } else {\n const chatId = peerId.toChatId();\n delete this.chatsFull[chatId];\n this.rootScope.dispatchEvent('chat_full_update', chatId);\n }\n\n // ! ัั‚ะฐ ัั‚ั€ะพั‡ะบะฐ ะฑัƒะดะตั‚ ัะพะทะดะฐะฒะฐั‚ัŒ race condition:\n // ! ะทะฐะฟั€ะพั ะฒะตั€ะฝั‘ั‚ chat ั ัƒัั‚ะฐะฝะพะฒะปะตะฝะฝั‹ะผ ั„ะปะฐะณะพะผ call_not_empty, ั…ะพั‚ั ัะฐะผ ะฐะฟะดะตะนั‚ ัƒะถะต ะฑัƒะดะตั‚ ะฟั€ะธะผะตะฝั‘ะฝ\n // this.getProfileByPeerId(peerId, true);\n }\n\n public updateProfile(first_name?: string, last_name?: string, about?: string) {\n return this.apiManager.invokeApi('account.updateProfile', {\n first_name,\n last_name,\n about\n }).then((user) => {\n this.appUsersManager.saveApiUser(user);\n\n if(about !== undefined) {\n const peerId = user.id.toPeerId();\n const userFull = this.usersFull[user.id];\n if(userFull) {\n userFull.about = about;\n }\n\n this.rootScope.dispatchEvent('peer_bio_edit', peerId);\n }\n\n return this.getProfile(user.id, true);\n });\n }\n\n public uploadProfilePhoto(inputFile: InputFile) {\n return this.apiManager.invokeApi('photos.uploadProfilePhoto', {\n file: inputFile\n }).then((updateResult) => {\n // ! sometimes can have no user in users\n const photo = updateResult.photo as Photo.photo;\n if(!updateResult.users.length) {\n const strippedThumb = photo.sizes.find((size) => size._ === 'photoStrippedSize') as PhotoSize.photoStrippedSize;\n updateResult.users.push({\n ...this.appUsersManager.getSelf(),\n photo: {\n _: 'userProfilePhoto',\n dc_id: photo.dc_id,\n photo_id: photo.id,\n stripped_thumb: strippedThumb?.bytes,\n pFlags: {\n\n }\n }\n });\n }\n this.appUsersManager.saveApiUsers(updateResult.users);\n\n const myId = this.appPeersManager.peerId;\n this.appPhotosManager.savePhoto(updateResult.photo, {\n type: 'profilePhoto',\n peerId: myId\n });\n\n const userId = myId.toUserId();\n // this.apiUpdatesManager.processLocalUpdate({\n // _: 'updateUserPhoto',\n // user_id: userId,\n // date: tsNow(true),\n // photo: this.appUsersManager.getUser(userId).photo,\n // previous: true\n // });\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateUser',\n user_id: userId\n });\n });\n }\n\n public deletePhotos(photoIds: string[]) {\n return this.apiManager.invokeApiSingle('photos.deletePhotos', {\n id: photoIds.map((photoId) => {\n const photo = this.appPhotosManager.getPhoto(photoId);\n return getPhotoInput(photo);\n })\n }).then((deletedList) => {\n\n });\n }\n\n private verifyParticipantForOnlineCount(participant: {user_id: UserId}) {\n const user = this.appUsersManager.getUser(participant.user_id);\n return !!(user && user.status && user.status._ === 'userStatusOnline');\n }\n\n private reduceParticipantsForOnlineCount(participants: {user_id: UserId}[]) {\n return participants.reduce((acc, participant) => {\n return acc + +this.verifyParticipantForOnlineCount(participant);\n }, 0);\n }\n\n public async getOnlines(id: ChatId): Promise {\n const minOnline = 1;\n if(this.appChatsManager.isBroadcast(id)) {\n return minOnline;\n }\n\n const chatInfo = await this.getChatFull(id);\n if(this.appChatsManager.isMegagroup(id)) {\n if((chatInfo as ChatFull.channelFull).participants_count <= 100) {\n const channelParticipants = await this.getChannelParticipants(id, {_: 'channelParticipantsRecent'}, 100);\n return this.reduceParticipantsForOnlineCount(channelParticipants.participants as ChannelParticipant.channelParticipant[]);\n }\n\n const res = await this.apiManager.invokeApiCacheable('messages.getOnlines', {\n peer: this.appChatsManager.getChannelInputPeer(id)\n }, {cacheSeconds: 60});\n\n const onlines = res.onlines ?? minOnline;\n return onlines;\n }\n\n const _participants = (chatInfo as ChatFull.chatFull).participants as ChatParticipants.chatParticipants;\n if(_participants?.participants) {\n return this.reduceParticipantsForOnlineCount(_participants.participants);\n } else {\n return minOnline;\n }\n }\n\n private getTypingsKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? `_${threadId}` : '');\n }\n\n public getPeerTypings(peerId: PeerId, threadId?: number) {\n return this.typingsInPeer[this.getTypingsKey(peerId, threadId)];\n }\n\n private onUpdateChatParticipants = (update: Update.updateChatParticipants) => {\n const participants = update.participants;\n if(participants._ !== 'chatParticipants') {\n return;\n }\n\n const chatId = participants.chat_id;\n const chatFull = this.chatsFull[chatId] as ChatFull.chatFull;\n if(chatFull !== undefined) {\n chatFull.participants = participants;\n this.rootScope.dispatchEvent('chat_full_update', chatId);\n }\n };\n\n private onUpdateChatParticipantAdd = (update: Update.updateChatParticipantAdd) => {\n const chatFull = this.chatsFull[update.chat_id] as ChatFull.chatFull;\n if(chatFull === undefined) {\n return;\n }\n\n const _participants = chatFull.participants as ChatParticipants.chatParticipants;\n const participants = _participants.participants || [];\n for(let i = 0, length = participants.length; i < length; i++) {\n if(participants[i].user_id === update.user_id) {\n return;\n }\n }\n\n participants.push({\n _: 'chatParticipant',\n user_id: update.user_id,\n inviter_id: update.inviter_id,\n date: tsNow(true)\n });\n\n _participants.version = update.version;\n this.rootScope.dispatchEvent('chat_full_update', update.chat_id);\n };\n\n private onUpdateChatParticipantDelete = (update: Update.updateChatParticipantDelete) => {\n const chatFull = this.chatsFull[update.chat_id] as ChatFull.chatFull;\n if(chatFull === undefined) {\n return;\n }\n\n const _participants = chatFull.participants as ChatParticipants.chatParticipants;\n const participants = _participants.participants || [];\n for(let i = 0, length = participants.length; i < length; i++) {\n if(participants[i].user_id === update.user_id) {\n participants.splice(i, 1);\n _participants.version = update.version;\n this.rootScope.dispatchEvent('chat_full_update', update.chat_id);\n return;\n }\n }\n };\n\n private onUpdateUserTyping = (update: Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChannelUserTyping) => {\n const fromId = (update as Update.updateUserTyping).user_id ?\n (update as Update.updateUserTyping).user_id.toPeerId() :\n this.appPeersManager.getPeerId((update as Update.updateChatUserTyping).from_id);\n if(this.appPeersManager.peerId === fromId || update.action._ === 'speakingInGroupCallAction') {\n return;\n }\n\n const topMsgId = (update as Update.updateChannelUserTyping).top_msg_id;\n const threadId = topMsgId ? generateMessageId(topMsgId) : undefined;\n const peerId = this.appPeersManager.getPeerId(update);\n const key = this.getTypingsKey(peerId, threadId);\n const typings = this.typingsInPeer[key] ??= [];\n let typing = typings.find((t) => t.userId === fromId);\n\n const cancelAction = () => {\n delete typing.timeout;\n // typings.findAndSplice((t) => t === typing);\n const idx = typings.indexOf(typing);\n if(idx !== -1) {\n typings.splice(idx, 1);\n }\n\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n\n if(!typings.length) {\n delete this.typingsInPeer[key];\n }\n };\n\n if(typing?.timeout !== undefined) {\n clearTimeout(typing.timeout);\n }\n\n if(update.action._ === 'sendMessageCancelAction') {\n if(!typing) {\n return;\n }\n\n cancelAction();\n return;\n }\n\n if(!typing) {\n typing = {\n userId: fromId\n };\n\n typings.push(typing);\n }\n\n // console.log('updateChatUserTyping', update, typings);\n\n typing.action = update.action;\n\n const hasUser = this.appUsersManager.hasUser(fromId);\n if(!hasUser) {\n // let's load user here\n if(update._ === 'updateChatUserTyping') {\n if(update.chat_id && this.appChatsManager.hasChat(update.chat_id) && !this.appChatsManager.isChannel(update.chat_id)) {\n Promise.resolve(this.getChatFull(update.chat_id)).then(() => {\n if(typing.timeout !== undefined && this.appUsersManager.hasUser(fromId)) {\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n }\n });\n }\n }\n\n // return;\n } else {\n this.appUsersManager.forceUserOnline(fromId);\n }\n\n typing.timeout = ctx.setTimeout(cancelAction, 6000);\n if(hasUser) {\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n }\n };\n\n private onUpdatePeerBlocked = (update: Update.updatePeerBlocked) => {\n const peerId = this.appPeersManager.getPeerId(update.peer_id);\n if(this.appPeersManager.isUser(peerId)) {\n const userId = peerId.toUserId();\n const userFull = this.usersFull[userId];\n if(userFull) {\n if(update.blocked) userFull.pFlags.blocked = true;\n else delete userFull.pFlags.blocked;\n }\n\n this.rootScope.dispatchEvent('user_full_update', userId);\n }\n\n this.rootScope.dispatchEvent('peer_block', {peerId, blocked: update.blocked});\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Awaited} from '../types';\n\nexport default function callbackifyAll(\n values: T,\n callback: (result: { -readonly [P in keyof T]: Awaited }) => R\n): Promise> | R {\n if(values.some((value) => value instanceof Promise)) {\n return Promise.all(values).then(callback as any);\n } else {\n return callback(values as any);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport assumeType from '../../helpers/assumeType';\nimport callbackify from '../../helpers/callbackify';\nimport callbackifyAll from '../../helpers/callbackifyAll';\nimport copy from '../../helpers/object/copy';\nimport pause from '../../helpers/schedulers/pause';\nimport {AvailableReaction, Message, MessagePeerReaction, MessagesAvailableReactions, Reaction, ReactionCount, Update, Updates} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport reactionsEqual from './utils/reactions/reactionsEqual';\n\nconst SAVE_DOC_KEYS = [\n 'static_icon' as const,\n 'appear_animation' as const,\n 'select_animation' as const,\n 'activate_animation' as const,\n 'effect_animation' as const,\n 'around_animation' as const,\n 'center_icon' as const\n];\n\nconst REFERENCE_CONTEXT: ReferenceContext = {\n type: 'reactions'\n};\n\nexport class AppReactionsManager extends AppManager {\n private availableReactions: AvailableReaction[];\n private sendReactionPromises: Map>;\n private lastSendingTimes: Map;\n\n protected after() {\n this.rootScope.addEventListener('language_change', () => {\n this.availableReactions = undefined;\n this.getAvailableReactions();\n });\n\n this.sendReactionPromises = new Map();\n this.lastSendingTimes = new Map();\n\n this.rootScope.addEventListener('user_auth', () => {\n setTimeout(() => {\n Promise.resolve(this.getAvailableReactions()).then(async(availableReactions) => {\n for(const availableReaction of availableReactions) {\n await Promise.all([\n availableReaction.around_animation && this.apiFileManager.downloadMedia({media: availableReaction.around_animation}),\n availableReaction.static_icon && this.apiFileManager.downloadMedia({media: availableReaction.static_icon}),\n availableReaction.appear_animation && this.apiFileManager.downloadMedia({media: availableReaction.appear_animation}),\n availableReaction.center_icon && this.apiFileManager.downloadMedia({media: availableReaction.center_icon})\n ]);\n\n await pause(1000);\n }\n });\n }, 7.5e3);\n });\n }\n\n public getAvailableReactions() {\n if(this.availableReactions) return this.availableReactions;\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAvailableReactions',\n processResult: (messagesAvailableReactions) => {\n assumeType(messagesAvailableReactions);\n\n const availableReactions = this.availableReactions = messagesAvailableReactions.reactions;\n for(const reaction of availableReactions) {\n for(const key of SAVE_DOC_KEYS) {\n if(!reaction[key]) {\n continue;\n }\n\n reaction[key] = this.appDocsManager.saveDoc(reaction[key], REFERENCE_CONTEXT);\n }\n }\n\n return availableReactions;\n },\n params: {\n hash: 0\n }\n });\n }\n\n public getActiveAvailableReactions() {\n return callbackify(this.getAvailableReactions(), (availableReactions) => {\n return availableReactions.filter((availableReaction) => !availableReaction.pFlags.inactive);\n });\n }\n\n public getAvailableReactionsForPeer(peerId: PeerId) {\n const activeAvailableReactions = this.getActiveAvailableReactions();\n if(peerId.isUser()) {\n return this.unshiftQuickReaction(activeAvailableReactions);\n }\n\n const chatFull = this.appProfileManager.getChatFull(peerId.toChatId());\n return callbackifyAll([activeAvailableReactions, chatFull, this.getQuickReaction()], ([activeAvailableReactions, chatFull, quickReaction]) => {\n const chatAvailableReactions = chatFull.available_reactions ?? {_: 'chatReactionsNone'};\n\n let filteredChatAvailableReactions: AvailableReaction[] = [];\n if(chatAvailableReactions._ === 'chatReactionsAll') {\n filteredChatAvailableReactions = activeAvailableReactions;\n } else if(chatAvailableReactions._ === 'chatReactionsSome') {\n filteredChatAvailableReactions = chatAvailableReactions.reactions.map((reaction) => {\n return activeAvailableReactions.find((availableReaction) => availableReaction.reaction === (reaction as Reaction.reactionEmoji).emoticon);\n }).filter(Boolean);\n }\n\n return this.unshiftQuickReactionInner(filteredChatAvailableReactions, quickReaction);\n });\n }\n\n private unshiftQuickReactionInner(availableReactions: AvailableReaction[], quickReaction: Reaction | AvailableReaction) {\n if(quickReaction && quickReaction._ !== 'reactionEmoji' && quickReaction._ !== 'availableReaction') return availableReactions;\n const emoticon = (quickReaction as Reaction.reactionEmoji).emoticon || (quickReaction as AvailableReaction).reaction;\n const availableReaction = findAndSplice(availableReactions, (availableReaction) => availableReaction.reaction === emoticon);\n if(availableReaction) {\n availableReactions.unshift(availableReaction);\n }\n\n return availableReactions;\n }\n\n private unshiftQuickReaction(\n availableReactions: AvailableReaction[] | PromiseLike,\n quickReaction: ReturnType = this.getQuickReaction()\n ) {\n return callbackifyAll([\n availableReactions,\n quickReaction\n ], ([availableReactions, quickReaction]) => {\n return this.unshiftQuickReactionInner(availableReactions, quickReaction);\n });\n }\n\n public getAvailableReactionsByMessage(message: Message.message) {\n if(!message) return [];\n const peerId = (message.fwd_from?.channel_post && this.appPeersManager.isMegagroup(message.peerId) && message.fwdFromId) || message.peerId;\n return this.getAvailableReactionsForPeer(peerId);\n }\n\n public isReactionActive(reaction: string) {\n if(!this.availableReactions) return false;\n return !!this.availableReactions.find((availableReaction) => availableReaction.reaction === reaction);\n }\n\n public getQuickReaction() {\n return callbackifyAll([\n this.apiManager.getConfig(),\n this.getAvailableReactions()\n ], ([config, availableReactions]) => {\n const reaction = config.reactions_default;\n if(reaction?._ === 'reactionEmoji') {\n return availableReactions.find((availableReaction) => availableReaction.reaction === reaction.emoticon);\n }\n\n return reaction as Reaction.reactionCustomEmoji;\n });\n }\n\n public getReactionCached(reaction: string) {\n return this.availableReactions.find((availableReaction) => availableReaction.reaction === reaction);\n }\n\n public getReaction(reaction: string) {\n return callbackify(this.getAvailableReactions(), () => {\n return this.getReactionCached(reaction);\n });\n }\n\n public getMessagesReactions(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getMessagesReactions',\n params: {\n id: mids.map((mid) => getServerMessageId(mid)),\n peer: this.appPeersManager.getInputPeerById(peerId)\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n // const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateMessageReactions') as Update.updateMessageReactions;\n // return update.reactions;\n }\n });\n }\n\n public getMessageReactionsList(peerId: PeerId, mid: number, limit: number, reaction?: Reaction, offset?: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getMessageReactionsList',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: getServerMessageId(mid),\n limit,\n reaction,\n offset\n },\n processResult: (messageReactionsList) => {\n this.appUsersManager.saveApiUsers(messageReactionsList.users);\n return messageReactionsList;\n }\n });\n }\n\n public setDefaultReaction(reaction: Reaction) {\n return this.apiManager.invokeApi('messages.setDefaultReaction', {reaction}).then(async(value) => {\n if(value) {\n const appConfig = await this.apiManager.getConfig();\n if(appConfig) {\n appConfig.reactions_default = reaction;\n }/* else { // if no config or loading it - overwrite\n this.apiManager.getAppConfig(true);\n } */\n\n this.rootScope.dispatchEvent('quick_reaction', reaction);\n }\n\n return value;\n });\n }\n\n public async sendReaction(message: Message.message, reaction?: Reaction | AvailableReaction, onlyLocal?: boolean) {\n if(reaction._ === 'availableReaction') {\n reaction = {\n _: 'reactionEmoji',\n emoticon: reaction.reaction\n };\n }\n\n const limit = await this.apiManager.getLimit('reactions');\n\n const lastSendingTimeKey = message.peerId + '_' + message.mid;\n const lastSendingTime = this.lastSendingTimes.get(lastSendingTimeKey);\n if(lastSendingTime) {\n return;\n } else {\n this.lastSendingTimes.set(lastSendingTimeKey, Date.now());\n setTimeout(() => {\n this.lastSendingTimes.delete(lastSendingTimeKey);\n }, 333);\n }\n\n const {peerId, mid} = message;\n const myPeerId = this.appPeersManager.peerId;\n\n const unsetReactionCount = (reactionCount: ReactionCount) => {\n --reactionCount.count;\n delete reactionCount.chosen_order;\n\n if(reactionsEqual(reaction as Reaction, reactionCount.reaction)) {\n reaction = undefined as Reaction;\n }\n\n if(!reactionCount.count) {\n indexOfAndSplice(reactions.results, reactionCount);\n }/* else {\n insertInDescendSortedArray(reactions.results, chosenReaction, 'count', chosenReactionIdx);\n } */\n\n if(reactions.recent_reactions) {\n findAndSplice(reactions.recent_reactions, (recentReaction) => reactionsEqual(recentReaction.reaction, reactionCount.reaction) && this.appPeersManager.getPeerId(recentReaction.peer_id) === myPeerId);\n }\n\n if(!reactions.results.length) {\n reactions = undefined;\n }\n };\n\n const canSeeList = message.reactions?.pFlags?.can_see_list || !this.appPeersManager.isBroadcast(message.peerId) || message.peerId.isUser();\n if(!message.reactions) {\n message.reactions = {\n _: 'messageReactions',\n results: [],\n recent_reactions: canSeeList ? [] : undefined,\n pFlags: {\n can_see_list: canSeeList || undefined\n }\n };\n }\n\n let reactions = onlyLocal ? message.reactions : copy(message.reactions);\n const chosenReactions = reactions.results.filter((reactionCount) => reactionCount.chosen_order !== undefined);\n chosenReactions.sort((a, b) => b.chosen_order - a.chosen_order);\n const unsetReactions: ReactionCount[] = [];\n const chosenReactionIdx = chosenReactions.findIndex((reactionCount) => reactionsEqual(reactionCount.reaction, reaction as Reaction));\n if(chosenReactionIdx !== -1) unsetReactions.push(...chosenReactions.splice(chosenReactionIdx, 1));\n unsetReactions.push(...chosenReactions.splice(limit - +(chosenReactionIdx === -1)));\n unsetReactions.forEach((reactionCount) => {\n chosenReactions.forEach((chosenReactionCount) => {\n if(chosenReactionCount.chosen_order > reactionCount.chosen_order) {\n --chosenReactionCount.chosen_order;\n }\n });\n\n unsetReactionCount(reactionCount);\n });\n\n const chosenReactionsLength = chosenReactions.length;\n chosenReactions.forEach((reactionCount, idx) => {\n reactionCount.chosen_order = chosenReactionsLength - 1 - idx;\n });\n\n if(reaction) {\n if(!reactions) {\n reactions/* = message.reactions */ = {\n _: 'messageReactions',\n results: [],\n pFlags: {}\n };\n\n if(canSeeList) {\n reactions.pFlags.can_see_list = true;\n }\n }\n\n let reactionCountIdx = reactions.results.findIndex((reactionCount) => reactionsEqual(reactionCount.reaction, reaction as Reaction));\n let reactionCount = reactionCountIdx !== -1 && reactions.results[reactionCountIdx];\n if(!reactionCount) {\n reactionCount = {\n _: 'reactionCount',\n count: 0,\n reaction\n };\n\n reactionCountIdx = reactions.results.push(reactionCount) - 1;\n }\n\n ++reactionCount.count;\n reactionCount.chosen_order = chosenReactions.length ? chosenReactions[0].chosen_order + 1 : 0;\n chosenReactions.unshift(reactionCount);\n\n if(!reactions.recent_reactions && canSeeList) {\n reactions.recent_reactions = [];\n }\n\n if(reactions.recent_reactions) {\n const peerReaction: MessagePeerReaction = {\n _: 'messagePeerReaction',\n reaction,\n peer_id: this.appPeersManager.getOutputPeer(myPeerId),\n pFlags: {}\n };\n\n if(!this.appPeersManager.isMegagroup(peerId) && false) {\n reactions.recent_reactions.push(peerReaction);\n reactions.recent_reactions = reactions.recent_reactions.slice(-3);\n } else {\n reactions.recent_reactions.unshift(peerReaction);\n reactions.recent_reactions = reactions.recent_reactions.slice(0, 3);\n }\n }\n\n // insertInDescendSortedArray(reactions.results, reactionCount, 'count', reactionCountIdx);\n }\n\n const availableReactions = this.availableReactions;\n if(reactions && availableReactions?.length) {\n const indexes: Map = new Map();\n availableReactions.forEach((availableReaction, idx) => {\n indexes.set(availableReaction.reaction, idx);\n });\n\n reactions.results.sort((a, b) => {\n const id1 = (a.reaction as Reaction.reactionCustomEmoji).document_id || (a.reaction as Reaction.reactionEmoji).emoticon;\n const id2 = (b.reaction as Reaction.reactionCustomEmoji).document_id || (b.reaction as Reaction.reactionEmoji).emoticon;\n return (b.count - a.count) || ((indexes.get(id1) ?? 0) - (indexes.get(id2) ?? 0));\n });\n }\n\n if(onlyLocal) {\n message.reactions = reactions;\n this.rootScope.dispatchEvent('messages_reactions', [{message, changedResults: []}]);\n return Promise.resolve();\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageReactions',\n peer: message.peer_id,\n msg_id: message.id,\n reactions: reactions,\n local: true\n });\n\n const promiseKey = [peerId, mid].join('-');\n const msgId = getServerMessageId(mid);\n const promise = this.apiManager.invokeApi('messages.sendReaction', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: msgId,\n reaction: chosenReactions.map((reactionCount) => reactionCount.reaction)\n }).then((updates) => {\n assumeType(updates);\n\n const editMessageUpdateIdx = updates.updates.findIndex((update) => update._ === 'updateEditMessage' || update._ === 'updateEditChannelMessage');\n if(editMessageUpdateIdx !== -1) {\n const editMessageUpdate = updates.updates[editMessageUpdateIdx] as Update.updateEditMessage | Update.updateEditChannelMessage;\n updates.updates[editMessageUpdateIdx] = {\n _: 'updateMessageReactions',\n msg_id: msgId,\n peer: this.appPeersManager.getOutputPeer(peerId),\n reactions: (editMessageUpdate.message as Message.message).reactions,\n pts: editMessageUpdate.pts,\n pts_count: editMessageUpdate.pts_count\n };\n }\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }).catch((err) => {\n if(err.type === 'REACTION_INVALID' && this.sendReactionPromises.get(promiseKey) === promise) {\n this.sendReaction(message, chosenReactions[0]?.reaction, true);\n }\n }).finally(() => {\n if(this.sendReactionPromises.get(promiseKey) === promise) {\n this.sendReactionPromises.delete(promiseKey);\n }\n });\n\n this.sendReactionPromises.set(promiseKey, promise);\n return promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport type {DownloadOptions} from '../mtproto/apiFileManager';\nimport {Document, InputFileLocation, InputStickerSet, MessagesAllStickers, MessagesFavedStickers, MessagesFeaturedStickers, MessagesFoundStickerSets, MessagesRecentStickers, MessagesStickers, MessagesStickerSet, PhotoSize, StickerPack, StickerSet, StickerSetCovered, Update, VideoSize} from '../../layer';\nimport {Modify} from '../../types';\nimport AppStorage from '../storage';\nimport DATABASE_STATE from '../../config/databases/state';\nimport assumeType from '../../helpers/assumeType';\nimport fixBase64String from '../../helpers/fixBase64String';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport {AppManager} from './manager';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport ctx from '../../environment/ctx';\nimport {getEnvironment} from '../../environment/utils';\nimport getDocumentInput from './utils/docs/getDocumentInput';\nimport getStickerEffectThumb from './utils/stickers/getStickerEffectThumb';\nimport tsNow from '../../helpers/tsNow';\n\nconst CACHE_TIME = 3600e3;\n\ntype LOCAL_STICKER_SET_ID = Extract<\n InputStickerSet['_'],\n 'inputStickerSetAnimatedEmoji' | 'inputStickerSetAnimatedEmojiAnimations' |\n 'inputStickerSetPremiumGifts' | 'inputStickerSetEmojiGenericAnimations' |\n 'inputStickerSetEmojiDefaultStatuses' | 'inputStickerSetEmojiDefaultTopicIcons'\n>;\n\ntype LOCAL_ID = 'EMOJI' | 'EMOJI_ANIMATIONS' | 'PREMIUM_GIFTS' | 'GENERIC_ANIMATIONS' | 'DEFAULT_STATUSES' | 'DEFAULT_TOPIC_ICONS';\n\nconst LOCAL_IDS: {[key in LOCAL_ID]: LOCAL_STICKER_SET_ID} = {\n EMOJI: 'inputStickerSetAnimatedEmoji',\n EMOJI_ANIMATIONS: 'inputStickerSetAnimatedEmojiAnimations',\n PREMIUM_GIFTS: 'inputStickerSetPremiumGifts',\n GENERIC_ANIMATIONS: 'inputStickerSetEmojiGenericAnimations',\n DEFAULT_STATUSES: 'inputStickerSetEmojiDefaultStatuses',\n DEFAULT_TOPIC_ICONS: 'inputStickerSetEmojiDefaultTopicIcons'\n}\n\nconst LOCAL_IDS_SET: Set = new Set(Object.values(LOCAL_IDS) as any);\n\n// let TEST_FILE_REFERENCE_REFRESH = true;\n\nexport type MyStickerSetInput = {\n id: StickerSet.stickerSet['id'],\n access_hash?: StickerSet.stickerSet['access_hash']\n};\n\nexport type MyMessagesStickerSet = MessagesStickerSet.messagesStickerSet;\n\nexport class AppStickersManager extends AppManager {\n private storage = new AppStorage, typeof DATABASE_STATE>(DATABASE_STATE, 'stickerSets');\n\n private getStickerSetPromises: {[setId: Long]: Promise};\n private getStickersByEmoticonsPromises: {[emoticon: string]: Promise};\n\n private greetingStickers: MyDocument[];\n private getGreetingStickersTimeout: number;\n private getGreetingStickersPromise: Promise;\n\n private sounds: Record;\n private getAnimatedEmojiSoundsPromise: Promise;\n\n private favedStickers: MyDocument[];\n private recentStickers: MyDocument[];\n\n private names: Record;\n\n protected after() {\n this.getStickerSetPromises = {};\n this.getStickersByEmoticonsPromises = {};\n this.sounds = {};\n this.names = {};\n\n this.rootScope.addEventListener('user_auth', () => {\n setTimeout(() => {\n this.getAnimatedEmojiStickerSet();\n // this.getFavedStickersStickers();\n }, 1000);\n\n if(!this.getGreetingStickersPromise && this.getGreetingStickersTimeout === undefined) {\n this.getGreetingStickersTimeout = ctx.setTimeout(() => {\n this.getGreetingStickersTimeout = undefined;\n this.getGreetingSticker(true);\n }, 5000);\n }\n });\n\n this.rootScope.addEventListener('app_config', () => this.onStickersUpdated('faved', true));\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateNewStickerSet: (update) => {\n const stickerSet = update.stickerset as MyMessagesStickerSet;\n this.saveStickerSet(stickerSet, stickerSet.set.id);\n this.rootScope.dispatchEvent('stickers_installed', stickerSet.set);\n },\n\n updateRecentStickers: () => this.onStickersUpdated('recent', true),\n\n updateFavedStickers: () => this.onStickersUpdated('faved', true),\n\n updateMoveStickerSetToTop: (update) => {\n this.rootScope.dispatchEvent('stickers_top', update.stickerset);\n }\n });\n }\n\n private async onStickersUpdated(type: 'faved' | 'recent', overwrite: boolean) {\n const stickers = await (type === 'faved' ? this.getFavedStickersStickers(overwrite) : this.getRecentStickersStickers(overwrite));\n this.rootScope.dispatchEvent('stickers_updated', {\n type,\n stickers\n });\n }\n\n public getGreetingSticker(justPreload = false) {\n if(this.getGreetingStickersTimeout) {\n clearTimeout(this.getGreetingStickersTimeout);\n this.getGreetingStickersTimeout = undefined;\n }\n\n if(!this.getGreetingStickersPromise) {\n this.getGreetingStickersPromise = this.getStickersByEmoticon('๐Ÿ‘‹โญ๏ธ', false).then((docs) => {\n if(!docs.length) throw 'NO_STICKERS';\n this.greetingStickers = docs.slice() as Document.document[];\n this.greetingStickers.sort((a, b) => Math.random() - Math.random());\n });\n }\n\n return this.getGreetingStickersPromise.then(() => {\n let doc: Document.document;\n if(!justPreload) {\n doc = this.greetingStickers.shift();\n this.greetingStickers.push(doc);\n }\n\n this.apiFileManager.downloadMedia({media: this.greetingStickers[0]}); // preload next sticker\n\n return doc;\n });\n }\n\n private saveStickers(docs: Document[]) {\n forEachReverse(docs, (doc, idx) => {\n doc = this.appDocsManager.saveDoc(doc);\n\n if(!doc) docs.splice(idx, 1);\n else docs[idx] = doc;\n });\n }\n\n private canUseStickerSetCache(set: MyMessagesStickerSet, useCache?: boolean) {\n return set && set.documents?.length && ((Date.now() - set.refreshTime) < CACHE_TIME || useCache);\n }\n\n public getStickerSet(set: MyStickerSetInput, params: Partial<{\n overwrite: boolean,\n useCache: boolean,\n saveById: boolean\n }> = {}): Promise | MyMessagesStickerSet {\n let {id} = set;\n if(!set.access_hash) {\n set = this.names[id] || set;\n id = set.id;\n }\n\n if(this.getStickerSetPromises[id]) {\n return this.getStickerSetPromises[id];\n }\n\n if(!params.overwrite) {\n const cachedSet = this.storage.getFromCache(id);\n if(this.canUseStickerSetCache(cachedSet, params.useCache)) {\n return cachedSet;\n }\n }\n\n const promise = this.getStickerSetPromises[id] = new Promise(async(resolve) => {\n if(!params.overwrite) {\n const cachedSet = await this.storage.get(id);\n if(this.canUseStickerSetCache(cachedSet, params.useCache)) {\n this.saveStickers(cachedSet.documents);\n resolve(cachedSet);\n\n if(this.getStickerSetPromises[id] === promise) {\n delete this.getStickerSetPromises[id];\n }\n\n return;\n }\n }\n\n try {\n const stickerSet = await this.apiManager.invokeApi('messages.getStickerSet', {\n stickerset: this.getStickerSetInput(set),\n hash: 0\n }) as MyMessagesStickerSet;\n\n const saveById = params.saveById ? id : stickerSet.set.id;\n this.saveStickerSet(stickerSet, saveById);\n\n resolve(stickerSet);\n } catch(err) {\n resolve(null);\n }\n\n if(this.getStickerSetPromises[id] === promise) {\n delete this.getStickerSetPromises[id];\n }\n });\n\n return promise;\n }\n\n public getLocalStickerSet(id: LOCAL_STICKER_SET_ID) {\n return this.getStickerSet({id}, {saveById: true});\n }\n\n public getAnimatedEmojiStickerSet() {\n return Promise.all([\n this.getLocalStickerSet(LOCAL_IDS.EMOJI),\n this.getLocalStickerSet(LOCAL_IDS.EMOJI_ANIMATIONS),\n this.getAnimatedEmojiSounds()\n ]).then(([emoji, animations]) => {\n return {emoji, animations};\n });\n }\n\n public getAnimatedEmojiSounds(overwrite?: boolean) {\n if(this.getAnimatedEmojiSoundsPromise && !overwrite) return this.getAnimatedEmojiSoundsPromise;\n const promise = this.getAnimatedEmojiSoundsPromise = Promise.all([\n this.apiManager.getAppConfig(overwrite),\n this.apiManager.getConfig()\n ]).then(([appConfig, config]) => {\n if(this.getAnimatedEmojiSoundsPromise !== promise) {\n return;\n }\n\n for(const emoji in appConfig.emojies_sounds) {\n const sound = appConfig.emojies_sounds[emoji];\n const bytesStr = atob(fixBase64String(sound.file_reference_base64, false));\n const bytes = new Uint8Array(bytesStr.length);\n for(let i = 0, length = bytes.length; i < length; ++i) {\n bytes[i] = bytesStr[i].charCodeAt(0);\n }\n\n // if(TEST_FILE_REFERENCE_REFRESH) {\n // bytes[0] = bytes[1] = bytes[2] = bytes[3] = bytes[4] = 0;\n // sound.access_hash += '999';\n // }\n\n const doc = this.appDocsManager.saveDoc({\n _: 'document',\n pFlags: {},\n flags: 0,\n id: sound.id,\n access_hash: sound.access_hash,\n attributes: [{\n _: 'documentAttributeAudio',\n duration: 1,\n pFlags: {\n voice: true\n }\n }],\n date: 0,\n dc_id: config.this_dc,\n file_reference: bytes,\n mime_type: 'audio/ogg'\n // size: 101010 // test loading everytime\n }, {\n type: 'emojiesSounds'\n });\n\n this.sounds[emoji] = doc;\n }\n\n // if(TEST_FILE_REFERENCE_REFRESH) {\n // TEST_FILE_REFERENCE_REFRESH = false;\n // }\n });\n\n return promise;\n }\n\n public async getRecentStickers(overwrite?: boolean): Promise> {\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.getRecentStickers',\n processResult: (res) => {\n assumeType(res);\n\n this.recentStickers = res.stickers as MyDocument[];\n this.saveStickers(res.stickers);\n return res;\n },\n overwrite\n });\n\n return res;\n }\n\n public getRecentStickersStickers(overwrite?: boolean) {\n if(overwrite) this.recentStickers = undefined;\n else if(this.recentStickers) return this.recentStickers;\n return this.getRecentStickers(overwrite).then(() => this.recentStickers);\n }\n\n public saveRecentSticker(docId: DocId, unsave?: boolean, attached?: boolean) {\n const doc = this.appDocsManager.getDoc(docId);\n\n findAndSplice(this.recentStickers, (_doc) => _doc.id === docId);\n if(!unsave) {\n this.recentStickers.unshift(doc);\n\n const docEmoticon = fixEmoji(doc.stickerEmojiRaw);\n for(const emoticon in this.getStickersByEmoticonsPromises) {\n const promise = this.getStickersByEmoticonsPromises[emoticon];\n promise.then((stickers) => {\n const _doc = findAndSplice(stickers, (_doc) => _doc.id === doc.id);\n if(_doc) {\n stickers.unshift(_doc);\n } else if(emoticon.includes(docEmoticon)) {\n stickers.unshift(doc);\n }\n });\n }\n }\n\n this.rootScope.dispatchEvent('sticker_updated', {type: 'recent', faved: !unsave, document: doc});\n\n if(unsave) {\n this.onStickersUpdated('recent', false);\n }\n\n return this.apiManager.invokeApi('messages.saveRecentSticker', {\n id: getDocumentInput(doc),\n unsave,\n attached\n });\n }\n\n private cleanEmoji(emoji: string) {\n return emoji.replace(/\\ufe0f/g, '').replace(/๐Ÿป|๐Ÿผ|๐Ÿฝ|๐Ÿพ|๐Ÿฟ/g, '');\n }\n\n public getAnimatedEmojiSticker(emoji: string, isAnimation?: boolean) {\n const id = isAnimation ? LOCAL_IDS.EMOJI_ANIMATIONS : LOCAL_IDS.EMOJI;\n const stickerSet = this.storage.getFromCache(id);\n // const stickerSet = await this.getStickerSet({id});\n if(!stickerSet?.documents) return;\n\n if(isAnimation) {\n if(['๐Ÿงก', '๐Ÿ’›', '๐Ÿ’š', '๐Ÿ’™', '๐Ÿ’œ', '๐Ÿ–ค', '๐Ÿค', '๐ŸคŽ'].includes(emoji)) {\n emoji = 'โค๏ธ';\n }\n }\n\n emoji = this.cleanEmoji(emoji);\n const pack = stickerSet.packs.find((p) => p.emoticon === emoji);\n return pack ? this.appDocsManager.getDoc(pack.documents[0]) : undefined;\n }\n\n public getAnimatedEmojiSoundDocument(emoji: string) {\n return this.sounds[this.cleanEmoji(emoji)];\n }\n\n public preloadAnimatedEmojiSticker(emoji: string) {\n const preloadEmojiPromise = this.getAnimatedEmojiStickerSet().then(() => {\n return this.getAnimatedEmojiSticker(emoji);\n });\n\n return Promise.all([\n preloadEmojiPromise,\n this.preloadAnimatedEmojiStickerAnimation(emoji)\n ]).then(([doc, a]) => {\n return {\n doc: doc,\n animation: a?.doc,\n sound: a?.sound\n };\n });\n }\n\n public preloadAnimatedEmojiStickerAnimation(emoji: string) {\n return this.getAnimatedEmojiStickerSet().then(() => {\n return this.getAnimatedEmojiSticker(emoji, true);\n }).then((doc) => {\n if(!doc) {\n return;\n }\n\n const sound = this.getAnimatedEmojiSoundDocument(emoji);\n return Promise.all([\n this.preloadSticker(doc.id),\n sound ? this.preloadSticker(sound.id) : undefined\n ]).then(() => {\n return {doc, sound};\n });\n });\n }\n\n public preloadSticker(docId: DocId, isPremiumEffect?: boolean) {\n const doc = this.appDocsManager.getDoc(docId);\n return this.apiFileManager.downloadMedia({media: doc, thumb: isPremiumEffect ? doc.video_thumbs?.[0] as Extract : undefined});\n }\n\n private saveStickerSet(res: Omit, id: DocId) {\n const newSet: MessagesStickerSet = {\n _: 'messages.stickerSet',\n set: res.set,\n packs: res.packs,\n documents: res.documents as Document[],\n keywords: res.keywords\n };\n\n let stickerSet = this.storage.getFromCache(id);\n if(stickerSet) {\n Object.assign(stickerSet, newSet);\n } else {\n stickerSet = this.storage.setToCache(id, newSet);\n }\n\n if(stickerSet.set.short_name) {\n this.names[stickerSet.set.short_name] = this.getStickerSetInput(newSet.set) as any;\n }\n\n this.saveStickers(res.documents);\n\n // console.log('stickers wrote', this.stickerSets);\n const needSave = stickerSet.set.installed_date || LOCAL_IDS_SET.has(id as any);\n stickerSet.refreshTime = Date.now();\n this.storage.set({[id]: stickerSet}, !needSave);\n }\n\n public getStickerSetThumbDownloadOptions(stickerSet: StickerSet.stickerSet): DownloadOptions {\n const thumb = stickerSet.thumbs.find((thumb) => thumb._ === 'photoSize') as PhotoSize.photoSize;\n const dcId = stickerSet.thumb_dc_id;\n\n const isAnimated = stickerSet.pFlags?.animated;\n\n const input: InputFileLocation.inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n thumb_version: stickerSet.thumb_version\n };\n\n return {dcId, location: input, size: thumb.size, mimeType: isAnimated ? 'application/x-tgsticker' : 'image/webp'};\n }\n\n /* public getStickerSetThumbURL(stickerSet: MTStickerSet) {\n const thumb = stickerSet.thumb;\n const dcId = stickerSet.thumb_dc_id;\n\n const isAnimated = stickerSet.pFlags?.animated;\n\n const input: inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n volume_id: thumb.location.volume_id,\n local_id: thumb.location.local_id\n };\n\n const url = getFileURL('document', this.getStickerSetThumbDownloadOptions(stickerSet));\n return url;\n\n //return promise;\n } */\n\n public getStickerSetInput(set: MyStickerSetInput): InputStickerSet {\n if(LOCAL_IDS_SET.has(set.id as any)) {\n return {\n _: set.id as any\n };\n } else if(!set.access_hash) {\n return {\n _: 'inputStickerSetShortName',\n short_name: '' + set.id\n };\n } else {\n return {\n _: 'inputStickerSetID',\n id: set.id,\n access_hash: set.access_hash\n };\n }\n }\n\n public async getFeaturedStickers() {\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.getFeaturedStickers',\n processResult: (res) => {\n assumeType(res);\n\n forEachReverse(res.sets, (covered, idx, arr) => {\n if(covered.set.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n arr.splice(idx, 1);\n }\n });\n\n res.sets.forEach((covered) => {\n this.saveStickerSet({set: covered.set, documents: [], packs: [], keywords: []}, covered.set.id);\n });\n\n return res;\n }\n });\n\n return res.sets;\n }\n\n public getPromoPremiumStickers() {\n return this.getStickersByEmoticon('โญ๏ธโญ๏ธ', false);\n }\n\n public getPremiumStickers() {\n return this.getStickersByEmoticon('๐Ÿ“‚โญ๏ธ', false);\n }\n\n public getFavedStickers(overwrite?: boolean) {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getFavedStickers',\n processResult: (favedStickers) => {\n assumeType(favedStickers);\n this.saveStickers(favedStickers.stickers);\n this.favedStickers = favedStickers.stickers as MyDocument[];\n return favedStickers;\n },\n overwrite\n });\n }\n\n public getFavedStickersStickers(overwrite?: boolean) {\n if(overwrite) this.favedStickers = undefined;\n else if(this.favedStickers) return this.favedStickers;\n return this.getFavedStickers(overwrite).then(() => this.favedStickers);\n }\n\n public getFavedStickersLimit() {\n return this.apiManager.getLimit('favedStickers');\n }\n\n public async faveSticker(docId: DocId, unfave?: boolean) {\n if(!this.favedStickers) {\n await this.getFavedStickersStickers();\n }\n\n const limit = await this.getFavedStickersLimit();\n\n const doc = this.appDocsManager.getDoc(docId);\n findAndSplice(this.favedStickers, (_doc) => _doc.id === doc.id);\n\n if(!unfave) {\n this.favedStickers.unshift(doc);\n const spliced = this.favedStickers.splice(limit, this.favedStickers.length - limit);\n }\n\n this.rootScope.dispatchEvent('sticker_updated', {type: 'faved', faved: !unfave, document: doc});\n\n return this.apiManager.invokeApi('messages.faveSticker', {\n id: getDocumentInput(doc),\n unfave\n }).then(() => {\n if(unfave) {\n this.onStickersUpdated('faved', true);\n }\n });\n }\n\n public async toggleStickerSet(set: StickerSet.stickerSet) {\n set = this.storage.getFromCache(set.id).set;\n\n if(set.installed_date) {\n const res = await this.apiManager.invokeApi('messages.uninstallStickerSet', {\n stickerset: this.getStickerSetInput(set)\n });\n\n if(res) {\n delete set.installed_date;\n this.rootScope.dispatchEvent('stickers_deleted', set);\n this.storage.delete(set.id, true);\n return true;\n }\n } else {\n const res = await this.apiManager.invokeApi('messages.installStickerSet', {\n stickerset: this.getStickerSetInput(set),\n archived: false\n });\n\n if(res) {\n set.installed_date = tsNow(true);\n this.rootScope.dispatchEvent('stickers_installed', set);\n return true;\n }\n }\n\n return false;\n }\n\n public toggleStickerSets(sets: StickerSet.stickerSet[]) {\n return Promise.all(sets.map((set) => this.toggleStickerSet(set)));\n }\n\n public async searchStickerSets(query: string, excludeFeatured = true) {\n const flags = excludeFeatured ? 1 : 0;\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.searchStickerSets',\n params: {\n flags,\n exclude_featured: excludeFeatured || undefined,\n q: query\n },\n processResult: (res) => {\n assumeType(res);\n\n forEachReverse(res.sets, (covered, idx, arr) => {\n if(covered.set.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n arr.splice(idx, 1);\n }\n });\n\n res.sets.forEach((covered) => {\n this.saveStickerSet({set: covered.set, documents: [], packs: [], keywords: []}, covered.set.id);\n });\n\n return res;\n }\n });\n\n const foundSaved: StickerSetCovered[] = [];\n const cache = this.storage.getCache();\n for(const id in cache) {\n const {set} = cache[id];\n\n if(set.title.toLowerCase().includes(query.toLowerCase()) && !res.sets.find((c) => c.set.id === set.id)) {\n foundSaved.push({_: 'stickerSetCovered', set, cover: null});\n }\n }\n\n return res.sets.concat(foundSaved);\n }\n\n private processAllStickersResult = (allStickers: MessagesAllStickers) => {\n assumeType(allStickers);\n\n forEachReverse(allStickers.sets, (stickerSet, idx, arr) => {\n if(stickerSet.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n arr.splice(idx, 1);\n }\n });\n\n return allStickers;\n };\n\n public getAllStickers() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getAllStickers',\n processResult: this.processAllStickersResult\n });\n }\n\n public getEmojiStickers() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getEmojiStickers',\n processResult: this.processAllStickersResult\n });\n }\n\n public preloadStickerSets() {\n return this.getAllStickers().then((allStickers) => {\n return Promise.all((allStickers as MessagesAllStickers.messagesAllStickers).sets.map((set) => this.getStickerSet(set, {useCache: true})));\n });\n }\n\n // TODO: detect \"๐Ÿคท\" by \"๐Ÿคทโ€โ™‚๏ธ\"\n public getStickersByEmoticon(emoticon: string, includeOurStickers = true) {\n emoticon = fixEmoji(emoticon);\n if(this.getStickersByEmoticonsPromises[emoticon]) return this.getStickersByEmoticonsPromises[emoticon];\n\n return this.getStickersByEmoticonsPromises[emoticon] = Promise.all([\n this.apiManager.invokeApiHashable({\n method: 'messages.getStickers',\n params: {\n emoticon\n },\n processResult: (stickers) => stickers\n }),\n includeOurStickers ? this.preloadStickerSets() : [],\n includeOurStickers ? this.getRecentStickers() : undefined\n ]).then(([messagesStickers, installedSets, recentStickers]) => {\n const foundStickers = (messagesStickers as MessagesStickers.messagesStickers).stickers.map((sticker) => this.appDocsManager.saveDoc(sticker));\n const cachedStickersAnimated: Document.document[] = [], cachedStickersStatic: Document.document[] = [];\n\n // console.log('getStickersByEmoticon', messagesStickers, installedSets, recentStickers);\n\n const iteratePacks = (packs: StickerPack.stickerPack[]) => {\n for(const pack of packs) {\n const packEmoticon = fixEmoji(pack.emoticon);\n if(packEmoticon.includes(emoticon)) {\n for(const docId of pack.documents) {\n const doc = this.appDocsManager.getDoc(docId);\n (doc.animated ? cachedStickersAnimated : cachedStickersStatic).push(doc);\n }\n }\n }\n };\n\n if(recentStickers) {\n iteratePacks(recentStickers.packs);\n const stickers = recentStickers.stickers;\n [cachedStickersAnimated, cachedStickersStatic].forEach((s) => {\n s.sort((a, b) => stickers.indexOf(a) - stickers.indexOf(b));\n });\n }\n\n for(const set of installedSets) {\n iteratePacks(set.packs);\n }\n\n /* const entities = parseEntities(emoticon);\n if(entities.length === 1) {\n [cachedStickersAnimated, cachedStickersStatic].forEach((s) => {\n forEachReverse(s, (doc, idx) => {\n const docEmoticon = fixEmoji(doc.stickerEmojiRaw);\n if(docEmoticon !== emoticon) {\n s.splice(idx, 1);\n }\n });\n });\n } */\n\n const stickers = [...new Set(cachedStickersAnimated.concat(cachedStickersStatic, foundStickers))]/* .filter((doc) => !doc.animated) */;\n\n forEachReverse(stickers, (sticker, idx, arr) => {\n if((sticker.sticker === 3 && !getEnvironment().IS_WEBM_SUPPORTED) ||\n (!this.rootScope.premium && getStickerEffectThumb(sticker))) {\n arr.splice(idx, 1);\n }\n });\n\n return stickers;\n });\n }\n\n public clearRecentStickers() {\n if(this.recentStickers) {\n this.recentStickers.length = 0;\n this.onStickersUpdated('recent', false);\n }\n\n return this.apiManager.invokeApi('messages.clearRecentStickers');\n }\n}\n","export default function fixBase64String(str: string, toUrl: boolean) {\n if(toUrl) {\n return str.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=+$/, '');\n } else {\n return str.replace(/-/g, '+').replace(/_/g, '/');\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport filterUnique from '../../helpers/array/filterUnique';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport cleanSearchText from '../../helpers/cleanSearchText';\nimport cleanUsername from '../../helpers/cleanUsername';\nimport tsNow from '../../helpers/tsNow';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {isRestricted} from '../../helpers/restrictions';\nimport {Chat, ContactsResolvedPeer, InputContact, InputGeoPoint, InputMedia, InputPeer, InputUser, User as MTUser, UserProfilePhoto, UserStatus} from '../../layer';\nimport parseEntities from '../richTextProcessor/parseEntities';\nimport wrapUrl from '../richTextProcessor/wrapUrl';\nimport SearchIndex from '../searchIndex';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\nimport canSendToUser from './utils/users/canSendToUser';\nimport {AppStoragesManager} from './appStoragesManager';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\n\nexport type User = MTUser.user;\nexport type TopPeerType = 'correspondents' | 'bots_inline';\nexport type MyTopPeer = {id: PeerId, rating: number};\n\nexport class AppUsersManager extends AppManager {\n private storage: AppStoragesManager['storages']['users'];\n\n private users: {[userId: UserId]: User};\n private usernames: {[username: string]: PeerId};\n private contactsIndex: SearchIndex;\n private contactsFillPromise: CancellablePromise;\n private contactsList: Set;\n private updatedContactsList: boolean;\n\n private getTopPeersPromises: {[type in TopPeerType]?: Promise};\n\n protected after() {\n this.clear(true);\n\n setInterval(this.updateUsersStatuses, 60000);\n\n this.rootScope.addEventListener('state_synchronized', this.updateUsersStatuses);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateUserStatus: (update) => {\n const userId = update.user_id;\n const user = this.users[userId];\n if(user) {\n user.status = update.status;\n if(user.status) {\n if('expires' in user.status) {\n user.status.expires -= this.timeManager.getServerTimeOffset();\n }\n\n if('was_online' in user.status) {\n user.status.was_online -= this.timeManager.getServerTimeOffset();\n }\n }\n\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', userId);\n this.setUserToStateIfNeeded(user);\n } // ////else console.warn('No user by id:', userId);\n },\n\n // updateUserPhoto: (update) => {\n // const userId = update.user_id;\n // const user = this.users[userId];\n // if(user) {\n // if((user.photo as UserProfilePhoto.userProfilePhoto)?.photo_id === (update.photo as UserProfilePhoto.userProfilePhoto)?.photo_id) {\n // return;\n // }\n\n // this.forceUserOnline(userId, update.date);\n\n // if(update.photo._ === 'userProfilePhotoEmpty') {\n // delete user.photo;\n // } else {\n // user.photo = safeReplaceObject(user.photo, update.photo);\n // }\n\n // this.setUserToStateIfNeeded(user);\n\n // this.rootScope.dispatchEvent('user_update', userId);\n // this.rootScope.dispatchEvent('avatar_update', userId.toPeerId());\n // } else console.warn('No user by id:', userId);\n // },\n\n updateUserName: (update) => {\n const userId = update.user_id;\n const user = this.users[userId];\n if(user) {\n this.forceUserOnline(userId);\n\n this.saveApiUser({\n ...user,\n first_name: update.first_name,\n last_name: update.last_name,\n username: undefined,\n usernames: update.usernames\n }, true);\n }\n }\n });\n\n /* case 'updateContactLink':\n this.onContactUpdated(update.user_id, update.my_link._ === 'contactLinkContact');\n break; */\n\n this.rootScope.addEventListener('language_change', (e) => {\n const userId = this.getSelf().id;\n this.contactsIndex.indexObject(userId, this.getUserSearchText(userId));\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('users')\n ]).then(([state, {results: users, storage}]) => {\n this.storage = storage;\n\n this.saveApiUsers(users);\n for(let i = 0, length = users.length; i < length; ++i) {\n const user = users[i];\n if(!user) {\n continue;\n }\n\n if(state.contactsListCachedTime && (user.pFlags.contact || user.pFlags.mutual_contact)) {\n this.pushContact(user.id);\n\n if(!this.contactsFillPromise) {\n this.contactsFillPromise = deferredPromise();\n this.contactsFillPromise.resolve(this.contactsList);\n }\n }\n }\n\n // const contactsList = state.contactsList;\n // if(Array.isArray(contactsList)) {\n // contactsList.forEach((userId) => {\n // this.pushContact(userId);\n // });\n\n // if(contactsList.length) {\n // this.contactsFillPromise = deferredPromise();\n // this.contactsFillPromise.resolve(this.contactsList);\n // }\n // }\n\n const recentSearch = state.recentSearch || [];\n for(let i = 0, length = recentSearch.length; i < length; ++i) {\n this.peersStorage.requestPeer(recentSearch[i], 'recentSearch');\n }\n\n this.peersStorage.addEventListener('peerNeeded', (peerId) => {\n if(!this.appPeersManager.isUser(peerId)) {\n return;\n }\n\n const userId = peerId.toUserId();\n if(!this.storage.getFromCache(userId)) {\n this.storage.set({\n [userId]: this.getUser(userId)\n });\n }\n });\n\n this.peersStorage.addEventListener('peerUnneeded', (peerId) => {\n if(!this.appPeersManager.isUser(peerId)) {\n return;\n }\n\n const userId = peerId.toUserId();\n if(this.storage.getFromCache(userId)) {\n this.storage.delete(userId);\n }\n });\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n for(const userId in this.users) {\n // const userId = +userId;\n if(!userId) continue;\n const peerId = userId.toPeerId();\n if(!this.peersStorage.isPeerNeeded(peerId)) {\n const user = this.users[userId];\n this.modifyUsernamesCache(user, false);\n\n this.storage.delete(userId);\n delete this.users[userId];\n }\n }\n } else {\n this.users = {};\n this.usernames = {};\n }\n\n this.getTopPeersPromises = {};\n this.contactsIndex = this.createSearchIndex();\n this.contactsFillPromise = undefined;\n this.contactsList = new Set();\n this.updatedContactsList = false;\n };\n\n public get userId() {\n return this.rootScope.myId.toUserId();\n }\n\n private onContactsModified(fromServer?: boolean) {\n // const contactsList = [...this.contactsList];\n // this.appStateManager.pushToState('contactsList', contactsList);\n\n if(fromServer) {\n this.appStateManager.pushToState('contactsListCachedTime', tsNow(true));\n }\n }\n\n public pushRecentSearch(peerId: PeerId) {\n return this.appStateManager.getState().then((state) => {\n const recentSearch = state.recentSearch || [];\n if(recentSearch[0] !== peerId) {\n indexOfAndSplice(recentSearch, peerId);\n recentSearch.unshift(peerId);\n if(recentSearch.length > 20) {\n recentSearch.length = 20;\n }\n\n this.appStateManager.pushToState('recentSearch', recentSearch);\n for(const peerId of recentSearch) {\n this.peersStorage.requestPeer(peerId, 'recentSearch');\n }\n }\n });\n }\n\n public clearRecentSearch() {\n return this.appStateManager.getState().then((state) => {\n const recentSearch = state.recentSearch || [];\n for(const peerId of recentSearch) {\n this.peersStorage.releasePeer(peerId, 'recentSearch');\n }\n\n recentSearch.length = 0;\n this.appStateManager.pushToState('recentSearch', recentSearch);\n });\n }\n\n public fillContacts() {\n if(this.contactsFillPromise && this.updatedContactsList) {\n return {\n cached: this.contactsFillPromise.isFulfilled,\n promise: this.contactsFillPromise\n };\n }\n\n this.updatedContactsList = true;\n\n const promise = deferredPromise>();\n this.apiManager.invokeApi('contacts.getContacts').then((result) => {\n if(result._ === 'contacts.contacts') {\n this.contactsList.clear();\n\n this.saveApiUsers(result.users);\n\n result.contacts.forEach((contact) => {\n this.pushContact(contact.user_id);\n });\n\n this.onContactsModified(true);\n\n this.contactsFillPromise = promise;\n }\n\n promise.resolve(this.contactsList);\n }, () => {\n this.updatedContactsList = false;\n });\n\n return {\n cached: this.contactsFillPromise?.isFulfilled,\n promise: this.contactsFillPromise ||= promise\n };\n }\n\n public resolveUsername(username: string): Promise | Chat | User {\n if(username[0] === '@') {\n username = username.slice(1);\n }\n\n username = username.toLowerCase();\n const peerId = this.usernames[username];\n if(peerId) {\n return this.appPeersManager.getPeer(peerId);\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'contacts.resolveUsername',\n params: {username},\n processResult: (resolvedPeer) => this.processResolvedPeer(resolvedPeer)\n });\n }\n\n private processResolvedPeer(resolvedPeer: ContactsResolvedPeer.contactsResolvedPeer) {\n this.saveApiUsers(resolvedPeer.users);\n this.appChatsManager.saveApiChats(resolvedPeer.chats);\n\n return this.appPeersManager.getPeer(getPeerId(resolvedPeer.peer)) as Chat | User;\n }\n\n public resolvePhone(phone: string) {\n return this.apiManager.invokeApi('contacts.resolvePhone', {phone}).then((resolvedPeer) => {\n return this.processResolvedPeer(resolvedPeer) as User;\n });\n }\n\n private pushContact(id: UserId) {\n this.contactsList.add(id);\n this.contactsIndex.indexObject(id, this.getUserSearchText(id));\n this.peersStorage.requestPeer(id.toPeerId(), 'contact');\n }\n\n private popContact(id: UserId) {\n this.contactsList.delete(id);\n this.contactsIndex.indexObject(id, ''); // delete search index\n this.peersStorage.releasePeer(id.toPeerId(), 'contact');\n }\n\n public getUserSearchText(id: UserId) {\n const user = this.users[id];\n if(!user) {\n return '';\n }\n\n const arr: string[] = [\n user.first_name,\n user.last_name,\n user.phone,\n ...getPeerActiveUsernames(user),\n // user.pFlags.self ? I18n.format('SavedMessages', true) : '',\n user.pFlags.self ? 'Saved Messages' : ''\n ];\n\n return arr.filter(Boolean).join(' ');\n }\n\n public getContacts(query?: string, includeSaved = false, sortBy: 'name' | 'online' | 'none' = 'name') {\n return this.fillContacts().promise.then((_contactsList) => {\n let contactsList = [..._contactsList];\n if(query) {\n const results = this.contactsIndex.search(query);\n const filteredContactsList = [...contactsList].filter((id) => results.has(id));\n\n contactsList = filteredContactsList;\n }\n\n if(sortBy === 'name') {\n contactsList.sort((userId1, userId2) => {\n const sortName1 = (this.users[userId1] || {}).sortName || '';\n const sortName2 = (this.users[userId2] || {}).sortName || '';\n return sortName1.localeCompare(sortName2);\n });\n } else if(sortBy === 'online') {\n contactsList.sort((userId1, userId2) => {\n const status1 = this.getUserStatusForSort(this.getUser(userId1).status);\n const status2 = this.getUserStatusForSort(this.getUser(userId2).status);\n return status2 - status1;\n });\n }\n\n const myUserId = this.userId;\n indexOfAndSplice(contactsList, myUserId);\n if(includeSaved) {\n if(this.testSelfSearch(query)) {\n contactsList.unshift(myUserId);\n }\n }\n\n return contactsList;\n });\n }\n\n public getContactsPeerIds(\n query?: Parameters[0],\n includeSaved?: Parameters[1],\n sortBy?: Parameters[2],\n limit?: number\n ) {\n return this.getContacts(query, includeSaved, sortBy).then((userIds) => {\n const peerIds = userIds.map((userId) => userId.toPeerId(false));\n if(limit) {\n return peerIds.slice(0, limit);\n }\n\n return peerIds;\n });\n }\n\n public toggleBlock(peerId: PeerId, block: boolean) {\n return this.apiManager.invokeApiSingle(block ? 'contacts.block' : 'contacts.unblock', {\n id: this.appPeersManager.getInputPeerById(peerId)\n }).then((value) => {\n if(value) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePeerBlocked',\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n blocked: block\n });\n }\n\n return value;\n });\n }\n\n public testSelfSearch(query: string) {\n const user = this.getSelf();\n const index = this.createSearchIndex();\n index.indexObject(user.id, this.getUserSearchText(user.id));\n return index.search(query).has(user.id);\n }\n\n public createSearchIndex() {\n return new SearchIndex({\n clearBadChars: true,\n ignoreCase: true,\n latinize: true,\n includeTag: true\n });\n }\n\n public saveApiUsers(apiUsers: MTUser[], override?: boolean) {\n if((apiUsers as any).saved) return;\n (apiUsers as any).saved = true;\n apiUsers.forEach((user) => this.saveApiUser(user, override));\n }\n\n public modifyUsernamesCache(peer: Parameters[0], save: boolean) {\n const usernames = getPeerActiveUsernames(peer);\n if(!usernames.length) {\n return;\n }\n\n const cleanedUsernames = usernames.map((username) => cleanUsername(username));\n if(save) {\n cleanedUsernames.forEach((searchUsername) => {\n this.usernames[searchUsername] = peer.id.toPeerId(peer._ !== 'user');\n });\n } else {\n cleanedUsernames.forEach((searchUsername) => {\n delete this.usernames[searchUsername];\n });\n }\n }\n\n public setUsernameToCache(peer: Parameters[0], oldPeer?: typeof peer) {\n if(\n !oldPeer ||\n (oldPeer as MTUser.user).username !== (peer as MTUser.user).username ||\n !deepEqual((oldPeer as MTUser.user).usernames, (peer as MTUser.user).usernames)\n ) {\n this.modifyUsernamesCache(oldPeer, false);\n this.modifyUsernamesCache(peer, true);\n\n return true;\n }\n\n return false;\n }\n\n public saveApiUser(user: MTUser, override?: boolean) {\n if(!user || user._ === 'userEmpty') return;\n\n const userId = user.id;\n const oldUser = this.users[userId];\n\n // ! commented block can affect performance !\n // if(oldUser && !override) {\n // console.log('saveApiUser same');\n // return;\n // }\n\n user.pFlags ??= {};\n\n if(user.pFlags.min && oldUser !== undefined) {\n return;\n }\n\n // * exclude from state\n // defineNotNumerableProperties(user, ['initials', 'num', 'rFirstName', 'rFullName', 'rPhone', 'sortName', 'sortStatus']);\n\n const changedUsername = this.setUsernameToCache(user, oldUser);\n\n if(!oldUser ||\n oldUser.sortName === undefined ||\n oldUser.first_name !== user.first_name ||\n oldUser.last_name !== user.last_name) {\n const fullName = user.first_name + (user.last_name ? ' ' + user.last_name : '');\n\n user.sortName = user.pFlags.deleted ? '' : cleanSearchText(fullName, false);\n } else {\n user.sortName = oldUser.sortName;\n }\n\n if(user.status) {\n if((user.status as UserStatus.userStatusOnline).expires) {\n (user.status as UserStatus.userStatusOnline).expires -= this.timeManager.getServerTimeOffset();\n }\n\n if((user.status as UserStatus.userStatusOffline).was_online) {\n (user.status as UserStatus.userStatusOffline).was_online -= this.timeManager.getServerTimeOffset();\n }\n }\n\n if((user as User).photo?._ === 'userProfilePhotoEmpty') {\n delete (user as User).photo;\n }\n\n // user.sortStatus = user.pFlags.bot ? -1 : this.getUserStatusForSort(user.status);\n\n // if(!user.username && user.usernames) {\n // user.username = user.usernames.find((username) => username.pFlags.active).username;\n // }\n\n if(oldUser === undefined) {\n this.users[userId] = user;\n } else {\n const changedTitle = user.first_name !== oldUser.first_name ||\n user.last_name !== oldUser.last_name ||\n changedUsername;\n\n const oldPhotoId = (oldUser.photo as UserProfilePhoto.userProfilePhoto)?.photo_id;\n const newPhotoId = (user.photo as UserProfilePhoto.userProfilePhoto)?.photo_id;\n const changedPhoto = oldPhotoId !== newPhotoId;\n\n const changedAnyBadge = oldUser.pFlags.premium !== user.pFlags.premium ||\n oldUser.pFlags.verified !== user.pFlags.verified ||\n oldUser.pFlags.scam !== user.pFlags.scam ||\n oldUser.pFlags.fake !== user.pFlags.fake;\n\n /* if(user.pFlags.bot && user.bot_info_version !== oldUser.bot_info_version) {\n\n } */\n\n const wasContact = !!oldUser.pFlags.contact;\n const newContact = !!user.pFlags.contact;\n\n safeReplaceObject(oldUser, user);\n this.rootScope.dispatchEvent('user_update', userId);\n\n if(wasContact !== newContact) {\n this.onContactUpdated(userId, newContact, wasContact);\n }\n\n if(changedPhoto) {\n this.rootScope.dispatchEvent('avatar_update', {peerId: user.id.toPeerId()});\n }\n\n if(changedTitle || changedAnyBadge) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId: user.id.toPeerId()});\n }\n }\n\n this.checkPremium(user, oldUser);\n this.setUserToStateIfNeeded(user);\n }\n\n private checkPremium(user: User, oldUser: User) {\n if(user.pFlags.self) {\n const isPremium = !!user.pFlags.premium;\n if(this.rootScope.premium !== isPremium) {\n this.rootScope.dispatchEvent('premium_toggle_private', {isNew: !oldUser, isPremium});\n }\n }\n }\n\n private setUserToStateIfNeeded(user: User) {\n if(this.peersStorage.isPeerNeeded(user.id.toPeerId())) {\n this.storage.set({\n [user.id]: user\n });\n }\n }\n\n public isUserOnlineVisible(id: UserId) {\n return this.getUserStatusForSort(id) > 3;\n }\n\n public getUserStatusForSort(status: User['status'] | UserId) {\n if(typeof(status) !== 'object') {\n const user = this.getUser(status);\n status = user?.status;\n }\n\n if(status) {\n const expires = status._ === 'userStatusOnline' ? status.expires : (status._ === 'userStatusOffline' ? status.was_online : 0);\n if(expires) {\n return expires;\n }\n\n /* const timeNow = tsNow(true);\n switch(status._) {\n case 'userStatusRecently':\n return timeNow - 86400 * 3;\n case 'userStatusLastWeek':\n return timeNow - 86400 * 7;\n case 'userStatusLastMonth':\n return timeNow - 86400 * 30;\n } */\n switch(status._) {\n case 'userStatusRecently':\n return 3;\n case 'userStatusLastWeek':\n return 2;\n case 'userStatusLastMonth':\n return 1;\n }\n }\n\n return 0;\n }\n\n public getUser(id: User | UserId) {\n if(isObject(id)) {\n return id;\n }\n\n return this.users[id];\n }\n\n public getUserStatus(id: UserId) {\n return this.isRegularUser(id) && !this.users[id].pFlags.self && this.users[id].status;\n }\n\n public async getUserPhone(id: UserId) {\n const user = this.getUser(id);\n if(!user?.phone) {\n return;\n }\n\n const appConfig = await this.apiManager.getAppConfig();\n return {\n phone: user.phone,\n isAnonymous: appConfig.fragment_prefixes.some((prefix) => user.phone.startsWith(prefix))\n };\n }\n\n public getSelf() {\n return this.getUser(this.userId);\n }\n\n public isBot(id: UserId) {\n return this.users[id] && !!this.users[id].pFlags.bot;\n }\n\n public isAttachMenuBot(id: UserId) {\n return this.isBot(id) && !!this.users[id].pFlags.bot_attach_menu;\n }\n\n public isContact(id: UserId) {\n return this.contactsList.has(id) || !!(this.users[id] && this.users[id].pFlags.contact);\n }\n\n public isRegularUser(id: UserId) {\n const user = this.users[id];\n return user && !this.isBot(id) && !user.pFlags.deleted && !user.pFlags.support;\n }\n\n public isNonContactUser(id: UserId) {\n return this.isRegularUser(id) && !this.isContact(id) && id !== this.userId;\n }\n\n public hasUser(id: UserId, allowMin?: boolean) {\n const user = this.users[id];\n return isObject(user) && (allowMin || !user.pFlags.min);\n }\n\n public getUserString(id: UserId) {\n const user = this.getUser(id);\n return 'u' + id + (user.access_hash ? '_' + user.access_hash : '');\n }\n\n public getUserInput(id: UserId): InputUser {\n const user = this.getUser(id);\n if(user.pFlags && user.pFlags.self) {\n return {_: 'inputUserSelf'};\n }\n\n return {\n _: 'inputUser',\n user_id: id,\n access_hash: user.access_hash\n };\n }\n\n public getUserInputPeer(id: UserId): InputPeer.inputPeerSelf | InputPeer.inputPeerUser {\n const user = this.getUser(id);\n // ! do not use it, there are places that don't support it. need explicit peer id\n // if(user.pFlags?.self) {\n // return {_: 'inputPeerSelf'};\n // }\n\n return {\n _: 'inputPeerUser',\n user_id: id,\n access_hash: user.access_hash\n };\n }\n\n public getContactMediaInput(id: UserId): InputMedia.inputMediaContact {\n const user = this.getUser(id);\n\n return {\n _: 'inputMediaContact',\n first_name: user.first_name,\n last_name: user.last_name,\n phone_number: user.phone,\n vcard: '',\n user_id: id\n };\n }\n\n private updateUsersStatuses = () => {\n const timestampNow = tsNow(true);\n for(const i in this.users) {\n const user = this.users[i];\n this.updateUserStatus(user, timestampNow);\n }\n };\n\n private updateUserStatus(user: MTUser.user, timestampNow = tsNow(true)) {\n if(user.status &&\n user.status._ === 'userStatusOnline' &&\n user.status.expires < timestampNow) {\n user.status = {_: 'userStatusOffline', was_online: user.status.expires};\n this.rootScope.dispatchEvent('user_update', user.id);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public forceUserOnline(id: UserId, eventTimestamp?: number) {\n if(this.isBot(id)) {\n return;\n }\n\n const timestamp = tsNow(true);\n const onlineTimeFor = 60;\n if(eventTimestamp) {\n if((timestamp - eventTimestamp) >= onlineTimeFor) {\n return;\n }\n } else if(this.apiUpdatesManager.updatesState.syncLoading) {\n return;\n }\n\n const user = this.getUser(id);\n if(user?.status &&\n user.status._ !== 'userStatusOnline' &&\n user.status._ !== 'userStatusEmpty' &&\n !user.pFlags.support &&\n !user.pFlags.deleted) {\n user.status = {\n _: 'userStatusOnline',\n expires: timestamp + onlineTimeFor\n };\n\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', id);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public importContact(first_name: string, last_name: string, phone: string) {\n return this.importContacts([{\n first_name,\n last_name,\n phones: [phone]\n }]).then((userIds) => {\n if(!userIds.length) {\n const error = new Error();\n (error as any).type = 'NO_USER';\n throw error;\n }\n\n return userIds[0];\n });\n }\n\n public importContacts(contacts: {phones: string[], first_name: string, last_name: string}[]) {\n const inputContacts: InputContact[] = [];\n\n for(let i = 0; i < contacts.length; ++i) {\n for(let j = 0; j < contacts[i].phones.length; ++j) {\n inputContacts.push({\n _: 'inputPhoneContact',\n client_id: (i << 16 | j).toString(10),\n phone: contacts[i].phones[j],\n first_name: contacts[i].first_name,\n last_name: contacts[i].last_name\n });\n }\n }\n\n return this.apiManager.invokeApi('contacts.importContacts', {\n contacts: inputContacts\n }).then((importedContactsResult) => {\n this.saveApiUsers(importedContactsResult.users);\n\n const userIds = importedContactsResult.imported.map((importedContact) => {\n this.onContactUpdated(importedContact.user_id, true);\n return importedContact.user_id;\n });\n\n return userIds;\n });\n }\n\n public getTopPeers(type: TopPeerType) {\n if(this.getTopPeersPromises[type]) return this.getTopPeersPromises[type];\n\n return this.getTopPeersPromises[type] = this.appStateManager.getState().then((state) => {\n const cached = state.topPeersCache[type];\n if(cached && (cached.cachedTime + 86400e3) > Date.now() && cached.peers) {\n return cached.peers;\n }\n\n return this.apiManager.invokeApi('contacts.getTopPeers', {\n [type]: true,\n offset: 0,\n limit: 15,\n hash: '0'\n }).then((result) => {\n let topPeers: MyTopPeer[] = [];\n if(result._ === 'contacts.topPeers') {\n // console.log(result);\n this.saveApiUsers(result.users);\n this.appChatsManager.saveApiChats(result.chats);\n\n if(result.categories.length) {\n topPeers = result.categories[0].peers.map((topPeer) => {\n const peerId = getPeerId(topPeer.peer);\n this.peersStorage.requestPeer(peerId, 'topPeer');\n return {id: peerId, rating: topPeer.rating};\n });\n }\n }\n\n state.topPeersCache[type] = {\n peers: topPeers,\n cachedTime: Date.now()\n };\n this.appStateManager.pushToState('topPeersCache', state.topPeersCache);\n\n return topPeers;\n });\n });\n }\n\n public getBlocked(offset = 0, limit = 0) {\n return this.apiManager.invokeApiSingle('contacts.getBlocked', {offset, limit}).then((contactsBlocked) => {\n this.saveApiUsers(contactsBlocked.users);\n this.appChatsManager.saveApiChats(contactsBlocked.chats);\n const count = contactsBlocked._ === 'contacts.blocked' ? contactsBlocked.users.length + contactsBlocked.chats.length : contactsBlocked.count;\n\n const peerIds: PeerId[] = contactsBlocked.users.map((u) => u.id.toPeerId()).concat(contactsBlocked.chats.map((c) => c.id.toPeerId(true)));\n\n return {count, peerIds};\n });\n }\n\n public getLocated(\n lat: number,\n long: number,\n accuracy_radius: number,\n background: boolean = false,\n self_expires: number = 0\n ) {\n const geo_point: InputGeoPoint = {\n _: 'inputGeoPoint',\n lat,\n long,\n accuracy_radius\n };\n\n return this.apiManager.invokeApi('contacts.getLocated', {\n geo_point,\n background\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n return updates;\n });\n }\n\n /* public searchContacts(query: string, limit = 20) {\n return Promise.all([\n this.getContacts(query),\n apiManager.invokeApi('contacts.search', {\n q: query,\n limit\n })\n ]).then((results) => {\n const [myContacts, peers] = results;\n\n this.saveApiUsers(peers.users);\n appChatsManager.saveApiChats(peers.chats);\n\n // * contacts.search returns duplicates in my_results\n const myResults = new Set(myContacts.concat(peers.my_results.map((p) => appPeersManager.getPeerID(p))));\n\n const out = {\n my_results: [...myResults].slice(0, limit),\n results: peers.results.map((p) => appPeersManager.getPeerID(p))\n };\n\n return out;\n });\n } */\n public searchContacts(query: string, limit = 20) {\n // handle 't.me/username' as 'username'\n const entities = parseEntities(query);\n if(entities.length && entities[0].length === query.trim().length && entities[0]._ === 'messageEntityUrl') {\n try {\n const url = new URL(wrapUrl(query).url);\n const path = url.pathname.slice(1);\n if(path) {\n query = path;\n }\n } catch(err) {}\n }\n\n return this.apiManager.invokeApiCacheable('contacts.search', {\n q: query,\n limit\n }, {cacheSeconds: 60}).then((peers) => {\n this.saveApiUsers(peers.users);\n this.appChatsManager.saveApiChats(peers.chats);\n\n const out = {\n my_results: filterUnique(peers.my_results.map((p) => getPeerId(p))), // ! contacts.search returns duplicates in my_results\n results: peers.results.map((p) => getPeerId(p))\n };\n\n return out;\n });\n }\n\n private onContactUpdated(userId: UserId, isContact: boolean, curIsContact = this.isContact(userId)) {\n if(isContact !== curIsContact) {\n if(isContact) {\n this.pushContact(userId);\n } else {\n this.popContact(userId);\n }\n\n this.onContactsModified();\n\n this.rootScope.dispatchEvent('contacts_update', userId);\n }\n }\n\n public updateUsername(username: string) {\n return this.apiManager.invokeApi('account.updateUsername', {\n username\n }).then((user) => {\n this.saveApiUser(user);\n });\n }\n\n public setUserStatus(userId: UserId, offline: boolean) {\n if(this.isBot(userId)) {\n return;\n }\n\n const user = this.users[userId];\n if(user) {\n const status: UserStatus = offline ? {\n _: 'userStatusOffline',\n was_online: tsNow(true)\n } : {\n _: 'userStatusOnline',\n expires: tsNow(true) + 50\n };\n\n user.status = status;\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', userId);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public updateMyOnlineStatus(offline: boolean) {\n this.setUserStatus(this.getSelf().id, offline);\n return this.apiManager.invokeApiSingle('account.updateStatus', {offline});\n }\n\n public addContact(userId: UserId, first_name: string, last_name: string, phone: string, addPhonePrivacyException?: boolean) {\n /* if(!userId) {\n return this.importContacts([{\n first_name,\n last_name,\n phones: [phone]\n }]);\n } */\n\n return this.apiManager.invokeApi('contacts.addContact', {\n id: this.getUserInput(userId),\n first_name,\n last_name,\n phone,\n add_phone_privacy_exception: addPhonePrivacyException\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates, {override: true});\n\n this.onContactUpdated(userId, true);\n });\n }\n\n public deleteContacts(userIds: UserId[]) {\n return this.apiManager.invokeApi('contacts.deleteContacts', {\n id: userIds.map((userId) => this.getUserInput(userId))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates, {override: true});\n\n userIds.forEach((userId) => {\n this.onContactUpdated(userId, false);\n });\n });\n }\n\n public checkUsername(username: string) {\n return this.apiManager.invokeApi('account.checkUsername', {username});\n }\n\n public toggleUsername(username: string, active: boolean) {\n return this.apiManager.invokeApi('account.toggleUsername', {username, active});\n }\n\n public reorderUsernames(usernames: string[]) {\n return this.apiManager.invokeApi('account.reorderUsernames', {order: usernames});\n }\n\n public canSendToUser(userId: UserId) {\n return canSendToUser(this.getUser(userId));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport default function cleanUsername(username: string) {\n return username && username.toLowerCase() || '';\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {WebPage} from '../../layer';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {AppManager} from './manager';\n\nconst photoTypeSet = new Set(['photo', 'video', 'gif', 'document']);\n\ntype WebPageMessageKey = `${PeerId}_${number}`;\n\nexport class AppWebPagesManager extends AppManager {\n private webpages: {\n [webPageId: string]: WebPage\n } = {};\n private pendingWebPages: {\n [webPageId: string]: Set\n } = {};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateWebPage: (update) => {\n this.saveWebPage(update.webpage);\n }\n });\n }\n\n public saveWebPage(apiWebPage: WebPage, messageKey?: WebPageMessageKey, mediaContext?: ReferenceContext) {\n if(apiWebPage._ === 'webPageNotModified' || apiWebPage._ === 'webPageEmpty') return;\n const {id} = apiWebPage;\n\n const oldWebPage = this.webpages[id];\n const isUpdated = oldWebPage &&\n oldWebPage._ === apiWebPage._ &&\n (oldWebPage as WebPage.webPage).hash === (oldWebPage as WebPage.webPage).hash;\n\n if(apiWebPage._ === 'webPage') {\n if(apiWebPage.photo?._ === 'photo') {\n apiWebPage.photo = this.appPhotosManager.savePhoto(apiWebPage.photo, mediaContext);\n } else {\n delete apiWebPage.photo;\n }\n\n if(apiWebPage.document?._ === 'document') {\n apiWebPage.document = this.appDocsManager.saveDoc(apiWebPage.document, mediaContext);\n } else {\n if(apiWebPage.type === 'document') {\n delete apiWebPage.type;\n }\n\n delete apiWebPage.document;\n }\n\n const siteName = apiWebPage.site_name;\n const shortTitle = apiWebPage.title || apiWebPage.author || siteName || '';\n if(siteName && shortTitle === siteName) {\n delete apiWebPage.site_name;\n }\n\n // delete apiWebPage.description\n\n if(!photoTypeSet.has(apiWebPage.type) &&\n !apiWebPage.description &&\n apiWebPage.photo) {\n apiWebPage.type = 'photo';\n }\n }\n\n let pendingSet = this.pendingWebPages[id];\n if(messageKey) {\n if(!pendingSet) pendingSet = this.pendingWebPages[id] = new Set();\n pendingSet.add(messageKey);\n }\n\n if(oldWebPage === undefined) {\n this.webpages[id] = apiWebPage;\n } else {\n safeReplaceObject(oldWebPage, apiWebPage);\n }\n\n if(!messageKey && pendingSet !== undefined && isUpdated) {\n const msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[] = [];\n pendingSet.forEach((value) => {\n const [peerId, mid, isScheduled] = value.split('_');\n msgs.push({\n peerId: peerId.toPeerId(),\n mid: +mid,\n isScheduled: !!isScheduled\n });\n });\n\n this.rootScope.dispatchEvent('webpage_updated', {\n id,\n msgs\n });\n }\n\n return apiWebPage;\n }\n\n public getMessageKeyForPendingWebPage(peerId: PeerId, mid: number, isScheduled?: boolean): WebPageMessageKey {\n return peerId + '_' + mid + (isScheduled ? '_s' : '') as any;\n }\n\n public deleteWebPageFromPending(webPage: WebPage, messageKey: WebPageMessageKey) {\n const id = (webPage as WebPage.webPage).id;\n if(!id) return;\n\n const set = this.pendingWebPages[id];\n if(set && set.has(messageKey)) {\n set.delete(messageKey);\n\n if(!set.size) {\n delete this.pendingWebPages[id];\n }\n }\n }\n\n public getCachedWebPage(id: WebPage.webPage['id']) {\n return this.webpages[id];\n }\n\n public getWebPage(url: string) {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getWebPage',\n processResult: (webPage) => {\n return this.saveWebPage(webPage);\n },\n params: {\n url\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from './readBlobAs';\n\nexport default function readBlobAsArrayBuffer(blob: Blob) {\n return readBlobAs(blob, 'readAsArrayBuffer');\n}\n","export default function fileNameRFC(fileName: string) {\n // Make filename RFC5987 compatible\n return encodeURIComponent(fileName).replace(/['()]/g, escape).replace(/\\*/g, '%2A');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getServiceMessagePort} from '../mtproto/mtproto.worker';\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport StreamWriter from './streamWriter';\n\nexport default class DownloadWriter implements StreamWriter {\n constructor(\n private serviceMessagePort: ServiceMessagePort,\n private downloadId: string\n ) {\n this.serviceMessagePort = getServiceMessagePort();\n }\n\n public async write(part: Uint8Array, offset?: number) {\n return this.serviceMessagePort.invoke('downloadChunk', {\n id: this.downloadId,\n chunk: part\n });\n }\n\n public finalize(saveToStorage?: boolean): Promise {\n return this.serviceMessagePort.invoke('downloadFinalize', this.downloadId).then(() => undefined);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise from '../../helpers/cancellablePromise';\nimport makeError from '../../helpers/makeError';\nimport fileNameRFC from '../../helpers/string/fileNameRFC';\nimport {getServiceMessagePort} from '../mtproto/mtproto.worker';\nimport DownloadWriter from './downloadWriter';\nimport FileStorage from './fileStorage';\n\nexport default class DownloadStorage implements FileStorage {\n public getFile(fileName: string): Promise {\n return Promise.reject(makeError('NO_ENTRY_FOUND'));\n }\n\n public prepareWriting({fileName, downloadId, size}: {\n fileName: string,\n downloadId: string,\n size: number\n }) {\n const headers = {\n 'Content-Type': 'application/octet-stream; charset=utf-8',\n 'Content-Disposition': 'attachment; filename*=UTF-8\\'\\'' + fileNameRFC(fileName),\n ...(size ? {'Content-Length': size} : {})\n };\n\n const serviceMessagePort = getServiceMessagePort();\n const promise = serviceMessagePort.invoke('download', {\n headers,\n id: downloadId\n });\n\n const deferred = deferredPromise();\n deferred.cancel = () => {\n deferred.reject(makeError('DOWNLOAD_CANCELED'));\n };\n\n deferred.catch(() => {\n getServiceMessagePort().invoke('downloadCancel', downloadId);\n });\n\n promise.then(deferred.resolve, deferred.reject);\n\n return {\n deferred,\n getWriter: () => {\n return new DownloadWriter(serviceMessagePort, downloadId);\n }\n };\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ReferenceBytes} from './referenceDatabase';\nimport Modes from '../../config/modes';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport {randomLong} from '../../helpers/random';\nimport {Document, InputFile, InputFileLocation, InputWebFileLocation, Photo, PhotoSize, UploadFile, UploadWebFile, VideoSize, WebDocument} from '../../layer';\nimport {DcId} from '../../types';\nimport CacheStorageController from '../files/cacheStorage';\nimport {logger, LogTypes} from '../logger';\nimport assumeType from '../../helpers/assumeType';\nimport noop from '../../helpers/noop';\nimport readBlobAsArrayBuffer from '../../helpers/blob/readBlobAsArrayBuffer';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport fixFirefoxSvg from '../../helpers/fixFirefoxSvg';\nimport {AppManager} from '../appManagers/manager';\nimport {getEnvironment} from '../../environment/utils';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport getFileNameForUpload from '../../helpers/getFileNameForUpload';\nimport type {Progress} from '../appManagers/appDownloadManager';\nimport getDownloadMediaDetails from '../appManagers/utils/download/getDownloadMediaDetails';\n// import networkStats from './networkStats';\nimport getDownloadFileNameFromOptions from '../appManagers/utils/download/getDownloadFileNameFromOptions';\nimport StreamWriter from '../files/streamWriter';\nimport FileStorage from '../files/fileStorage';\nimport {MAX_FILE_SAVE_SIZE} from './mtproto_config';\nimport throttle from '../../helpers/schedulers/throttle';\nimport makeError from '../../helpers/makeError';\nimport readBlobAsUint8Array from '../../helpers/blob/readBlobAsUint8Array';\nimport DownloadStorage from '../files/downloadStorage';\nimport copy from '../../helpers/object/copy';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {EXTENSION_MIME_TYPE_MAP, MIME_TYPE_EXTENSION_MAP} from '../../environment/mimeTypeMap';\nimport {getServiceMessagePort} from './mtproto.worker';\n\ntype Delayed = {\n offset: number,\n writePromise: CancellablePromise,\n writeDeferred: CancellablePromise\n};\n\nexport type DownloadOptions = {\n dcId: DcId,\n location: InputFileLocation | InputWebFileLocation,\n size?: number,\n fileName?: string,\n mimeType?: MTMimeType,\n limitPart?: number,\n queueId?: number,\n onlyCache?: boolean,\n downloadId?: string\n // getFileMethod: Parameters[1]\n};\n\nexport type DownloadMediaOptions = {\n media: Photo.photo | Document.document | WebDocument,\n thumb?: PhotoSize | Extract,\n queueId?: number,\n onlyCache?: boolean,\n downloadId?: string\n};\n\ntype DownloadPromise = CancellablePromise;\n\nexport type MyUploadFile = UploadFile.uploadFile | UploadWebFile.uploadWebFile;\n\n// export interface RefreshReferenceTask extends WorkerTaskVoidTemplate {\n// type: 'refreshReference',\n// payload: ReferenceBytes,\n// };\n\n// export interface RefreshReferenceTaskResponse extends WorkerTaskVoidTemplate {\n// type: 'refreshReference',\n// payload: ReferenceBytes,\n// originalPayload: ReferenceBytes\n// };\n\nconst MAX_DOWNLOAD_FILE_PART_SIZE = 1 * 1024 * 1024;\nconst MAX_UPLOAD_FILE_PART_SIZE = 512 * 1024;\nconst MIN_PART_SIZE = 128 * 1024;\nconst AVG_PART_SIZE = 512 * 1024;\n\nconst REGULAR_DOWNLOAD_DELTA = (9 * 512 * 1024) / MIN_PART_SIZE;\n// const PREMIUM_DOWNLOAD_DELTA = REGULAR_DOWNLOAD_DELTA * 2;\nconst PREMIUM_DOWNLOAD_DELTA = (56 * 512 * 1024) / MIN_PART_SIZE;\n\nconst IGNORE_ERRORS: Set = new Set([\n 'DOWNLOAD_CANCELED',\n 'UPLOAD_CANCELED',\n 'UNKNOWN',\n 'NO_NEW_CONTEXT'\n]);\n\nexport class ApiFileManager extends AppManager {\n private cacheStorage = new CacheStorageController('cachedFiles');\n private downloadStorage = new DownloadStorage();\n\n private downloadPromises: {\n [fileName: string]: DownloadPromise\n } = {};\n\n // private downloadToDiscPromises: {\n // [fileName: string]: DownloadPromise\n // } = {};\n\n private uploadPromises: {\n [fileName: string]: CancellablePromise\n } = {};\n\n private downloadPulls: {\n [dcId: string]: Array<{\n id: number,\n queueId: number,\n cb: () => Promise,\n deferred: {\n resolve: (...args: any[]) => void,\n reject: (...args: any[]) => void\n },\n activeDelta: number\n }>\n } = {};\n private downloadActives: {[dcId: string]: number} = {};\n\n public refreshReferencePromises: {\n [referenceHex: string]: {\n deferred: CancellablePromise,\n timeout?: number\n }\n } = {};\n\n private log: ReturnType = logger('AFM', LogTypes.Error | LogTypes.Log);\n private tempId = 0;\n private queueId = 0;\n private debug = Modes.debug;\n\n private maxUploadParts = 4000;\n private maxDownloadParts = 8000;\n private webFileDcId: DcId;\n\n protected after() {\n setInterval(() => { // clear old promises\n for(const hex in this.refreshReferencePromises) {\n const {deferred} = this.refreshReferencePromises[hex];\n if(deferred.isFulfilled || deferred.isRejected) {\n delete this.refreshReferencePromises[hex];\n }\n }\n }, 1800e3);\n\n this.rootScope.addEventListener('config', (config) => {\n this.webFileDcId = config.webfile_dc_id;\n });\n\n this.rootScope.addEventListener('app_config', (appConfig) => {\n this.maxUploadParts = this.rootScope.premium ? appConfig.upload_max_fileparts_premium : appConfig.upload_max_fileparts_default;\n this.maxDownloadParts = appConfig.upload_max_fileparts_premium;\n });\n }\n\n private downloadRequest(dcId: 'upload', id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\n private downloadRequest(dcId: number, id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\n private downloadRequest(dcId: number | string, id: number, cb: () => Promise, activeDelta: number, queueId: number = 0) {\n if(this.downloadPulls[dcId] === undefined) {\n this.downloadPulls[dcId] = [];\n this.downloadActives[dcId] = 0;\n }\n\n const downloadPull = this.downloadPulls[dcId];\n\n const promise = new Promise((resolve, reject) => {\n downloadPull.push({id, queueId, cb, deferred: {resolve, reject}, activeDelta});\n });\n\n setTimeout(() => {\n this.downloadCheck(dcId);\n }, 0);\n\n return promise;\n }\n\n private downloadCheck(dcId: string | number) {\n const downloadPull = this.downloadPulls[dcId];\n const downloadLimit = /* dcId === 'upload' ? 24 : */(this.rootScope.premium ? PREMIUM_DOWNLOAD_DELTA : REGULAR_DOWNLOAD_DELTA);\n // const downloadLimit = Infinity;\n\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull?.length) {\n return false;\n }\n\n // const data = downloadPull.shift();\n const data = findAndSplice(downloadPull, (d) => d.queueId === 0) || findAndSplice(downloadPull, (d) => d.queueId === this.queueId) || downloadPull.shift();\n const activeDelta = data.activeDelta || 1;\n\n this.downloadActives[dcId] += activeDelta;\n\n const promise = data.cb();\n // const networkPromise = networkStats.waitForChunk(dcId as DcId, activeDelta * MIN_PART_SIZE);\n /* Promise.race([\n promise\n // networkPromise\n ]) */promise.then(() => {\n this.downloadActives[dcId] -= activeDelta;\n this.downloadCheck(dcId);\n\n // networkPromise.resolve();\n }, (error: ApiError) => {\n if(!error?.type || !IGNORE_ERRORS.has(error.type)) {\n this.log.error('downloadCheck error:', error);\n }\n\n this.downloadActives[dcId] -= activeDelta;\n this.downloadCheck(dcId);\n\n // networkPromise.reject(error);\n }).finally(() => {\n promise.then(data.deferred.resolve, data.deferred.reject);\n });\n }\n\n public setQueueId(queueId: number) {\n // this.log.error('setQueueId', queueId);\n this.queueId = queueId;\n }\n\n private getFileStorage() {\n return this.cacheStorage;\n }\n\n public cancelDownload(fileName: string) {\n const promises = [this.downloadPromises[fileName], this.uploadPromises[fileName]].filter(Boolean);\n let canceled = false;\n for(let i = 0, length = promises.length; i < length; ++i) {\n const promise = promises[i];\n if(promise && !promise.isRejected && !promise.isFulfilled) {\n promise.cancel();\n canceled = true;\n }\n }\n\n return canceled;\n }\n\n public requestWebFilePart(\n dcId: DcId,\n location: InputWebFileLocation,\n offset: number,\n limit: number,\n id = 0,\n queueId = 0,\n checkCancel?: () => void\n ) {\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\n checkCancel?.();\n\n if('url' in location) {\n const url = location.url;\n if(this.isLocalWebFile(url)) {\n return fetch(url)\n .then((response) => response.arrayBuffer())\n .then((arrayBuffer) => {\n const extension = url.split('.').pop() as MTFileExtension;\n const mimeType = EXTENSION_MIME_TYPE_MAP[extension] || 'application/octet-stream';\n return {\n _: 'upload.webFile',\n size: arrayBuffer.byteLength,\n mime_type: mimeType,\n file_type: {_: 'storage.fileUnknown'},\n mtime: 0,\n bytes: new Uint8Array(arrayBuffer)\n };\n });\n }\n }\n\n return this.apiManager.invokeApi('upload.getWebFile', {\n location,\n offset,\n limit\n }, {\n dcId,\n fileDownload: true\n });\n }, this.getDelta(limit), queueId);\n }\n\n public requestFilePart(\n dcId: DcId,\n location: InputFileLocation,\n offset: number,\n limit: number,\n id = 0,\n queueId = 0,\n checkCancel?: () => void\n ) {\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\n checkCancel?.();\n\n const invoke = async(): Promise => {\n checkCancel?.(); // do not remove async, because checkCancel will throw an error\n\n // * IMPORTANT: reference can be changed in previous request\n const reference = (location as InputFileLocation.inputDocumentFileLocation).file_reference?.slice();\n\n const promise = // pause(offset > (100 * 1024 * 1024) ? 10000000 : 0).then(() =>\n this.apiManager.invokeApi('upload.getFile', {\n location,\n offset,\n limit\n }, {\n dcId,\n fileDownload: true\n }) as Promise/* ) */;\n\n return promise.catch((err: ApiError) => {\n checkCancel?.();\n\n if(err.type === 'FILE_REFERENCE_EXPIRED') {\n return this.refreshReference(location as InputFileLocation.inputDocumentFileLocation, reference).then(invoke);\n }\n\n throw err;\n });\n };\n\n assumeType(location);\n const reference = location.file_reference;\n if(reference && !location.checkedReference) { // check stream's location because it's new every call\n location.checkedReference = true;\n const hex = bytesToHex(reference);\n if(this.refreshReferencePromises[hex]) {\n return this.refreshReference(location, reference).then(invoke);\n }\n }\n\n return invoke();\n }, this.getDelta(limit), queueId);\n }\n\n /* private convertBlobToBytes(blob: Blob) {\n return blob.arrayBuffer().then((buffer) => new Uint8Array(buffer));\n } */\n\n private getDelta(bytes: number) {\n return bytes / MIN_PART_SIZE;\n }\n\n private getLimitPart(size: number, isUpload: boolean): number {\n if(!size) { // * sometimes size can be 0 (e.g. avatars, webDocuments)\n return AVG_PART_SIZE;\n }\n\n // return 1 * 1024 * 1024;\n\n let bytes = MIN_PART_SIZE;\n\n const maxParts = isUpload ? this.maxUploadParts : this.maxDownloadParts;\n const maxPartSize = isUpload ? MAX_UPLOAD_FILE_PART_SIZE : MAX_DOWNLOAD_FILE_PART_SIZE;\n // usually it will stick to 512Kb size if the file is too big\n while((size / bytes) > maxParts && bytes < maxPartSize) {\n bytes *= 2;\n }\n /* if(size < 1e6 || !size) bytes = 512;\n else if(size < 3e6) bytes = 256;\n else bytes = 128; */\n\n return bytes;\n }\n\n private uncompressTGS = (bytes: Uint8Array, fileName: string) => {\n // this.log('uncompressTGS', bytes, bytes.slice().buffer);\n // slice ะฝัƒะถะตะฝ ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ ะฒ uint8array - 5053 length, ะฒ arraybuffer - 5084\n return this.cryptoWorker.invokeCrypto('gzipUncompress', bytes.slice().buffer, false) as Promise;\n };\n\n private uncompressTGV = (bytes: Uint8Array, fileName: string) => {\n // this.log('uncompressTGS', bytes, bytes.slice().buffer);\n // slice ะฝัƒะถะตะฝ ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ ะฒ uint8array - 5053 length, ะฒ arraybuffer - 5084\n const buffer = bytes.slice().buffer;\n if(getEnvironment().IS_FIREFOX) {\n return this.cryptoWorker.invokeCrypto('gzipUncompress', buffer, true).then((text) => {\n return fixFirefoxSvg(text as string);\n }).then((text) => {\n const textEncoder = new TextEncoder();\n return textEncoder.encode(text);\n });\n }\n\n return this.cryptoWorker.invokeCrypto('gzipUncompress', buffer, false) as Promise;\n };\n\n private convertWebp = (bytes: Uint8Array, fileName: string) => {\n const instance = MTProtoMessagePort.getInstance();\n return instance.invoke('convertWebp', {fileName, bytes});\n };\n\n private convertOpus = (bytes: Uint8Array, fileName: string) => {\n const instance = MTProtoMessagePort.getInstance();\n return instance.invoke('convertOpus', {fileName, bytes});\n };\n\n private refreshReference(\n inputFileLocation: InputFileLocation.inputDocumentFileLocation,\n reference: typeof inputFileLocation['file_reference'],\n hex = bytesToHex(reference)\n ) {\n let r = this.refreshReferencePromises[hex];\n if(!r) {\n const deferred = deferredPromise();\n\n r = this.refreshReferencePromises[hex] = {\n deferred\n\n // ! I don't remember what it was for...\n // timeout: ctx.setTimeout(() => {\n // this.log.error('Didn\\'t refresh the reference:', inputFileLocation);\n // deferred.reject(makeError('REFERENCE_IS_NOT_REFRESHED'));\n // }, 60000)\n };\n\n // deferred.catch(noop).finally(() => {\n // clearTimeout(r.timeout);\n // });\n\n this.referenceDatabase.refreshReference(reference).then((reference) => {\n if(hex === bytesToHex(reference)) {\n deferred.reject(makeError('REFERENCE_IS_NOT_REFRESHED'));\n }\n\n deferred.resolve(reference);\n }, deferred.reject);\n }\n\n // have to replace file_reference in any way, because location can be different everytime if it's stream\n return r.deferred.then((reference) => {\n inputFileLocation.file_reference = reference;\n });\n }\n\n public isDownloading(fileName: string) {\n return !!this.downloadPromises[fileName];\n }\n\n public getDownload(fileName: string) {\n return this.downloadPromises[fileName];\n }\n\n public getUpload(fileName: string) {\n return this.uploadPromises[fileName];\n }\n\n private getConvertMethod(mimeType: MTMimeType) {\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\n if(mimeType === 'application/x-tgwallpattern') {\n process = this.uncompressTGV;\n mimeType = 'image/svg+xml';\n } else if(mimeType === 'image/webp' && !getEnvironment().IS_WEBP_SUPPORTED) {\n process = this.convertWebp;\n mimeType = 'image/png';\n } else if(mimeType === 'application/x-tgsticker') {\n process = this.uncompressTGS;\n mimeType = 'application/json';\n } else if(mimeType === 'audio/ogg' && !getEnvironment().IS_OPUS_SUPPORTED) {\n process = this.convertOpus;\n mimeType = 'audio/wav';\n }\n\n return {mimeType, process};\n }\n\n private allocateDeferredPromises(startOffset: number, size: number, limitPart: number) {\n const delayed: Delayed[] = [];\n let offset = startOffset;\n let writePromise: CancellablePromise = Promise.resolve(),\n writeDeferred: CancellablePromise;\n do {\n writeDeferred = deferredPromise();\n delayed.push({offset, writePromise, writeDeferred});\n writePromise = writeDeferred;\n offset += limitPart;\n } while(offset < size);\n\n return delayed;\n }\n\n private isLocalWebFile(url: string) {\n return url.startsWith('assets/');\n }\n\n public download(options: DownloadOptions): DownloadPromise {\n const size = options.size ?? 0;\n const {dcId, location} = options;\n let {downloadId} = options;\n if(downloadId && !getServiceMessagePort()) {\n this.log.error('download fallback to blob', options);\n downloadId = undefined;\n }\n\n const originalMimeType = options.mimeType;\n const convertMethod = this.getConvertMethod(originalMimeType);\n const {process} = convertMethod;\n options.mimeType = convertMethod.mimeType || 'image/jpeg';\n\n const fileName = getDownloadFileNameFromOptions(options);\n const cacheFileName = downloadId ? getDownloadFileNameFromOptions({...copy(options), downloadId: undefined}) : fileName;\n const cacheStorage: FileStorage = this.getFileStorage();\n const downloadStorage: FileStorage = downloadId ? this.downloadStorage : undefined;\n let deferred: DownloadPromise = downloadId ? undefined : this.downloadPromises[fileName];\n\n this.debug && this.log('downloadFile', fileName, options);\n\n if(deferred) {\n return deferred;\n }\n\n // if(deferred) {\n // if(size) {\n // return deferred.then(async(blob) => {\n // if(blob instanceof Blob && blob.size < size) {\n // this.debug && this.log('downloadFile need to deleteFile, wrong size:', blob.size, size);\n\n // try {\n // await this.delete(fileName);\n // } finally {\n // return this.download(options);\n // }\n // } else {\n // return blob;\n // }\n // });\n // } else {\n // return deferred;\n // }\n // }\n\n const errorHandler = (item: typeof cachePrepared, error: ApiError) => {\n if(item?.error) {\n return;\n }\n\n for(const p of prepared) {\n if(item && item !== p) {\n continue;\n }\n\n p.error = error;\n p.deferred.reject(error);\n }\n };\n\n const isWebFile = location._ === 'inputWebFileLocation';\n const isLocalWebFile = isWebFile && this.isLocalWebFile(location.url);\n const id = this.tempId++;\n const limitPart = isLocalWebFile ?\n size :\n options.limitPart || this.getLimitPart(size, false);\n\n let getFile: FileStorage['getFile'] = cacheStorage.getFile.bind(cacheStorage);\n\n let cachePrepared: ReturnType & {writer?: StreamWriter, error?: ApiError},\n downloadPrepared: typeof cachePrepared;\n const prepared: (typeof cachePrepared)[] = [];\n const possibleSize = size || limitPart;\n\n const getErrorsCount = () => prepared.reduce((acc, item) => acc + +!!item.error, 0);\n\n const attach = (item: typeof cachePrepared, fileName: string) => {\n const {deferred} = item;\n const _errorHandler = errorHandler.bind(null, item);\n\n deferred.cancel = () => deferred.reject(makeError('DOWNLOAD_CANCELED'));\n deferred.catch((error) => {\n _errorHandler(error);\n item.writer?.truncate?.();\n }).finally(() => {\n if(this.downloadPromises[fileName] === deferred) {\n delete this.downloadPromises[fileName];\n }\n\n delete item.writer;\n // indexOfAndSplice(prepared, item);\n });\n\n this.downloadPromises[fileName] = deferred;\n\n prepared.push(item);\n };\n\n if(cacheStorage && (!downloadStorage || possibleSize <= MAX_FILE_SAVE_SIZE)) {\n cachePrepared = cacheStorage.prepareWriting(cacheFileName, possibleSize, options.mimeType)\n attach(cachePrepared, cacheFileName);\n }\n\n if(downloadStorage) {\n let downloadFileName = options.fileName; // it's doc file_name\n if(!downloadFileName) {\n downloadFileName = cacheFileName;\n const ext = MIME_TYPE_EXTENSION_MAP[options.mimeType];\n if(ext) {\n downloadFileName += '.' + ext;\n }\n }\n\n downloadPrepared = downloadStorage.prepareWriting({\n fileName: downloadFileName,\n downloadId,\n size: possibleSize\n });\n attach(downloadPrepared, fileName);\n\n if(cachePrepared) { // cancel cache too\n downloadPrepared.deferred.catch((err) => cachePrepared.deferred.reject(err));\n }\n\n // this.downloadToDiscPromises[cacheFileName] = deferred;\n // deferred.catch(noop).finally(() => {\n // if(this.downloadToDiscPromises[cacheFileName] === deferred) {\n // delete this.downloadToDiscPromises[cacheFileName];\n // }\n // });\n }\n\n deferred = downloadPrepared?.deferred ?? cachePrepared.deferred;\n\n if(downloadStorage && process) { // then have to load file again\n getFile = downloadStorage.getFile.bind(downloadStorage);\n }\n\n getFile(cacheFileName).then(async(blob: Blob) => {\n checkCancel();\n\n // if(blob.size < size) {\n // if(!options.onlyCache) {\n // await this.delete(cacheFileName);\n // checkCancel();\n // }\n\n // throw makeError('NO_ENTRY_FOUND');\n // }\n\n if(downloadPrepared) {\n const writer = downloadPrepared.writer = downloadPrepared.getWriter();\n checkCancel();\n\n const arr = await readBlobAsUint8Array(blob);\n checkCancel();\n await writer.write(arr);\n checkCancel();\n\n downloadPrepared.deferred.resolve(await writer.finalize());\n }\n\n if(cachePrepared) {\n cachePrepared.deferred.resolve(blob);\n }\n }).catch(async(err: ApiError) => {\n if(options.onlyCache) {\n errorHandler(null, err);\n return;\n }\n\n prepared.forEach((p) => {\n p.writer = p.getWriter();\n });\n\n const maxRequests = Infinity;\n\n const requestPart = (isWebFile ? this.requestWebFilePart : this.requestFilePart).bind(this);\n\n if(isWebFile && this.webFileDcId === undefined && !isLocalWebFile) {\n await this.apiManager.getConfig();\n checkCancel();\n }\n\n const delayed = this.allocateDeferredPromises(0, size, limitPart);\n\n const progress: Progress = {done: 0, offset: 0, total: size, fileName};\n const dispatchProgress = () => {\n try {\n checkCancel();\n progress.done = done;\n this.rootScope.dispatchEvent('download_progress', progress);\n } catch(err) {}\n };\n\n const throttledDispatchProgress = throttle(dispatchProgress, 50, true);\n\n let done = 0;\n const superpuper = async() => {\n const {offset, writePromise, writeDeferred} = delayed.shift();\n try {\n checkCancel();\n\n const requestPerf = performance.now();\n const result = await requestPart(dcId, location as any, offset, limitPart, id, options.queueId, checkCancel);\n const requestTime = performance.now() - requestPerf;\n\n const bytes = result.bytes;\n\n if(delayed.length) {\n superpuper();\n }\n\n const byteLength = bytes.byteLength;\n this.debug && this.log('downloadFile requestFilePart result:', fileName, result);\n const isFinal = (offset + limitPart) >= size || !byteLength;\n if(byteLength) {\n done += byteLength;\n\n if(isFinal) {\n dispatchProgress();\n } else {\n throttledDispatchProgress();\n }\n\n const writeQueuePerf = performance.now();\n await writePromise;\n checkCancel();\n const writeQueueTime = performance.now() - writeQueuePerf;\n\n const perf = performance.now();\n await Promise.all(prepared.map(({writer}) => writer?.write(bytes, offset)));\n checkCancel();\n // downloadId && this.log('write time', performance.now() - perf, 'request time', requestTime, 'queue time', writeQueueTime);\n }\n\n if(isFinal) {\n if(!size || done < size) {\n prepared.forEach(({writer}) => writer?.trim?.(done));\n }\n }\n\n if(isFinal && process) {\n const promises = prepared\n .filter(({writer}) => writer?.getParts && writer.replaceParts)\n .map(async({writer}) => {\n const bytes = writer.getParts();\n const processedResult = await process(bytes, cacheFileName);\n writer.replaceParts(processedResult);\n });\n\n await Promise.all(promises);\n checkCancel();\n }\n\n writeDeferred.resolve();\n\n if(isFinal) {\n const saveToStorage = done <= MAX_FILE_SAVE_SIZE;\n prepared.forEach((item) => {\n const {deferred, writer} = item;\n if(deferred.isFulfilled || deferred.isRejected || !writer) {\n return;\n }\n\n const result = writer.finalize(saveToStorage);\n deferred.resolve(result);\n });\n }\n } catch(err) {\n errorHandler(null, err as ApiError);\n }\n };\n\n for(let i = 0, length = Math.min(maxRequests, delayed.length); i < length; ++i) {\n superpuper();\n }\n }).catch(noop);\n\n const checkCancel = () => {\n if(getErrorsCount() === prepared.length) {\n throw prepared[0].error;\n }\n };\n\n return deferred;\n }\n\n public downloadMedia(options: DownloadMediaOptions): DownloadPromise {\n let {media, thumb} = options;\n const isPhoto = media._ === 'photo';\n if(isPhoto && !thumb) {\n return Promise.reject('preloadPhoto photoEmpty!');\n }\n\n // get original instance with correct file_reference instead of using copies\n const isDocument = media._ === 'document';\n // const isWebDocument = media._ === 'webDocument';\n if(isDocument) media = this.appDocsManager.getDoc((media as Document.document).id);\n else if(isPhoto) media = this.appPhotosManager.getPhoto((media as Photo.photo).id);\n\n const {fileName, downloadOptions} = getDownloadMediaDetails(options);\n\n let promise = this.getDownload(fileName);\n if(!promise) {\n promise = this.download(downloadOptions);\n\n if(isDocument && !thumb) {\n this.rootScope.dispatchEvent('document_downloading', (media as Document.document).id);\n promise.then(() => {\n this.rootScope.dispatchEvent('document_downloaded', (media as Document.document).id);\n }).catch(noop);\n }\n }\n\n return promise;\n }\n\n public downloadMediaURL(options: DownloadMediaOptions): Promise {\n const {media, thumb} = options;\n\n let cacheContext = this.thumbsStorage.getCacheContext(media as any, thumb?.type);\n if((thumb ? (cacheContext.downloaded >= ('size' in thumb ? thumb.size : 0)) : true) && cacheContext.url) {\n return Promise.resolve(cacheContext.url);\n }\n\n return this.downloadMedia(options).then((blob) => {\n if(!cacheContext.downloaded || cacheContext.downloaded < blob.size) {\n const url = URL.createObjectURL(blob);\n cacheContext = this.thumbsStorage.setCacheContextURL(media as any, cacheContext.type, url, blob.size);\n }\n\n return cacheContext.url;\n });\n }\n\n public downloadMediaVoid(options: DownloadMediaOptions) {\n return this.downloadMedia(options).then(noop);\n }\n\n private delete(fileName: string) {\n delete this.downloadPromises[fileName];\n return this.getFileStorage().delete(fileName);\n }\n\n public upload({file, fileName}: {file: Blob | File, fileName?: string}) {\n fileName ||= getFileNameForUpload(file);\n\n const fileSize = file.size;\n const isBigFile = fileSize >= 10485760;\n const partSize = this.getLimitPart(fileSize, true);\n const activeDelta = this.getDelta(partSize);\n const totalParts = Math.ceil(fileSize / partSize);\n const fileId = randomLong();\n const resultInputFile: InputFile = {\n _: isBigFile ? 'inputFileBig' : 'inputFile',\n id: fileId as any,\n parts: totalParts,\n name: fileName,\n md5_checksum: ''\n };\n\n const deferred = deferredPromise();\n if(totalParts > this.maxUploadParts) {\n deferred.reject(makeError('FILE_TOO_BIG'));\n return deferred;\n }\n\n let canceled = false, resolved = false;\n let errorHandler = (error: ApiError) => {\n if(error?.type !== 'UPLOAD_CANCELED') {\n this.log.error('Up Error', error);\n }\n\n deferred.reject(error);\n canceled = true;\n errorHandler = noop;\n };\n\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\n const id = this.tempId++;\n\n const self = this;\n function* generator() {\n let _part = 0, doneParts = 0;\n for(let offset = 0; offset < fileSize; offset += partSize) {\n const part = _part++; // 0, 1\n yield self.downloadRequest('upload', id, async() => {\n checkCancel();\n\n const blob = file.slice(offset, offset + partSize);\n const buffer = await readBlobAsArrayBuffer(blob);\n checkCancel();\n\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\n\n return self.apiManager.invokeApi(method, {\n file_id: fileId,\n file_part: part,\n file_total_parts: totalParts,\n bytes: buffer\n } as any, {\n fileUpload: true\n }).then(() => {\n if(canceled) {\n return;\n }\n\n ++doneParts;\n const progress: Progress = {done: doneParts * partSize, offset, total: fileSize, fileName};\n deferred.notify(progress);\n\n if(doneParts >= totalParts) {\n deferred.resolve(resultInputFile);\n resolved = true;\n }\n }, errorHandler);\n }, activeDelta).catch(errorHandler);\n }\n }\n\n const it = generator();\n const process = () => {\n if(canceled) return;\n const r = it.next();\n if(r.done || canceled) return;\n (r.value as Promise).then(process);\n };\n\n const maxRequests = Infinity;\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\n process();\n }\n\n const checkCancel = () => {\n if(canceled) {\n throw makeError('UPLOAD_CANCELED');\n }\n };\n\n deferred.cancel = () => {\n if(!canceled && !resolved) {\n canceled = true;\n errorHandler(makeError('UPLOAD_CANCELED'));\n }\n };\n\n deferred.notify = (progress: Progress) => {\n this.rootScope.dispatchEvent('download_progress', progress);\n };\n\n deferred.finally(() => {\n if(this.uploadPromises[fileName] === deferred) {\n delete this.uploadPromises[fileName];\n }\n });\n\n return this.uploadPromises[fileName] = deferred;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function fixFirefoxSvg(text: string) {\n const svgIndex = text.indexOf('/, ` width=\"${width}\" height=\"${height}\">`).replace(/[^\\x00-\\x7F]/g, '');\n return text;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAsArrayBuffer from './readBlobAsArrayBuffer';\n\nexport default function readBlobAsUint8Array(blob: Blob) {\n return readBlobAsArrayBuffer(blob).then((buffer) => new Uint8Array(buffer));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from '../../environment/ctx';\nimport callbackify from '../../helpers/callbackify';\nimport {ignoreRestrictionReasons} from '../../helpers/restrictions';\nimport {Config, MethodDeclMap, User} from '../../layer';\nimport {InvokeApiOptions} from '../../types';\nimport {AppManager} from '../appManagers/manager';\nimport {MTAppConfig} from './appConfig';\nimport {UserAuth} from './mtproto_config';\nimport {MTMessage} from './networker';\n\ntype HashResult = {\n hash: number,\n result: any\n};\n\ntype HashOptions = {\n [queryJSON: string]: HashResult\n};\n\nexport type ApiLimitType = 'pin' | 'folderPin' | 'folders' |\n 'favedStickers' | 'reactions' | 'bio' | 'topicPin' | 'caption';\n\nexport default abstract class ApiManagerMethods extends AppManager {\n private afterMessageIdTemp: number;\n private hashes: {[method: string]: HashOptions} = {};\n private apiPromisesSingleProcess: {\n [q: string]: Map>\n } = {};\n private apiPromisesSingle: {\n [q: string]: Promise\n } = {};\n private apiPromisesCacheable: {\n [method: string]: {\n [queryJSON: string]: {\n timestamp: number,\n promise: Promise,\n fulfilled: boolean,\n timeout?: number,\n params: any\n }\n }\n } = {};\n\n protected config: Config;\n protected appConfig: MTAppConfig;\n\n constructor() {\n super();\n this.afterMessageIdTemp = 0;\n }\n\n abstract setUserAuth(userAuth: UserAuth | UserId): Promise;\n\n public setUser(user: User) {\n // appUsersManager.saveApiUser(user);\n return this.setUserAuth(user.id);\n }\n\n abstract invokeApi(method: T, params?: MethodDeclMap[T]['req'], options?: InvokeApiOptions): Promise;\n\n public invokeApiAfter(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise {\n let o = options;\n o.prepareTempMessageId = '' + ++this.afterMessageIdTemp;\n\n o = {...options};\n (options as MTMessage).messageId = o.prepareTempMessageId;\n\n // console.log('will invokeApi:', method, params, options);\n return this.invokeApi(method, params, o);\n }\n\n public invokeApiHashable(o: {\n method: T,\n processResult?: (response: MethodDeclMap[T]['res']) => R,\n processError?: (error: ApiError) => any,\n params?: Omit,\n options?: InvokeApiOptions & {cacheKey?: string},\n overwrite?: boolean\n }) {\n // @ts-ignore\n o.params ??= {};\n o.options ??= {};\n // console.log('will invokeApi:', method, params, options);\n\n const {params, options, method, overwrite} = o;\n\n const queryJSON = JSON.stringify(params);\n let cached: HashResult;\n if(this.hashes[method]) {\n cached = this.hashes[method][queryJSON];\n if(cached) {\n if(overwrite) {\n delete this.hashes[method][queryJSON];\n cached = undefined;\n } else {\n (params as any).hash = cached.hash;\n }\n }\n }\n\n return this.invokeApiSingleProcess({\n method,\n processResult: (result) => {\n if(result._.includes('NotModified')) {\n // this.debug && this.log.warn('NotModified saved!', method, queryJSON);\n return cached.result;\n }\n\n if(result.hash/* || result.messages */) {\n const hash = result.hash/* || this.computeHash(result.messages) */;\n\n if(!this.hashes[method]) this.hashes[method] = {};\n cached = this.hashes[method][queryJSON] = {\n hash,\n result\n };\n }\n\n if(o.processResult) {\n const newResult = o.processResult(result);\n return cached ? cached.result = newResult : newResult;\n }\n\n return result;\n },\n params,\n options\n });\n }\n\n public invokeApiSingle(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions = {}): Promise {\n const q = method + '-' + JSON.stringify(params);\n const cache = this.apiPromisesSingle;\n if(cache[q]) {\n return cache[q];\n }\n\n return cache[q] = this.invokeApi(method, params, options).finally(() => {\n delete cache[q];\n });\n }\n\n public invokeApiSingleProcess(o: {\n method: T,\n processResult: (response: MethodDeclMap[T]['res']) => R,\n processError?: (error: ApiError) => any,\n params?: MethodDeclMap[T]['req'],\n options?: InvokeApiOptions & {cacheKey?: string, overwrite?: boolean}\n }): Promise> {\n o.params ??= {};\n o.options ??= {};\n\n const {method, processResult, processError, params, options} = o;\n const cache = this.apiPromisesSingleProcess;\n const cacheKey = options.cacheKey || JSON.stringify(params);\n const map = cache[method] ?? (cache[method] = new Map());\n const oldPromise = map.get(cacheKey);\n if(oldPromise) {\n return oldPromise;\n }\n\n const getNewPromise = () => {\n const promise = map.get(cacheKey);\n return promise === p ? undefined : promise;\n }\n\n const originalPromise = this.invokeApi(method, params, options);\n const newPromise: Promise> = originalPromise.then((result) => {\n return getNewPromise() || processResult(result);\n }, (error) => {\n const promise = getNewPromise();\n if(promise) {\n return promise;\n }\n\n if(!processError) {\n throw error;\n }\n\n return processError(error);\n });\n\n const p = newPromise.finally(() => {\n if(map.get(cacheKey) !== p) {\n return;\n }\n\n map.delete(cacheKey);\n if(!map.size) {\n delete cache[method];\n }\n });\n\n map.set(cacheKey, p);\n return p;\n }\n\n public invokeApiCacheable(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions & Partial<{cacheSeconds: number, override: boolean}> = {}): Promise {\n const cache = this.apiPromisesCacheable[method] ?? (this.apiPromisesCacheable[method] = {});\n const queryJSON = JSON.stringify(params);\n const item = cache[queryJSON];\n if(item && (!options.override || !item.fulfilled)) {\n return item.promise;\n }\n\n if(options.override) {\n if(item && item.timeout) {\n clearTimeout(item.timeout);\n delete item.timeout;\n }\n\n delete options.override;\n }\n\n let timeout: number;\n if(options.cacheSeconds) {\n timeout = ctx.setTimeout(() => {\n delete cache[queryJSON];\n }, options.cacheSeconds * 1000);\n delete options.cacheSeconds;\n }\n\n const promise = this.invokeApi(method, params, options);\n\n cache[queryJSON] = {\n timestamp: Date.now(),\n fulfilled: false,\n timeout,\n promise,\n params\n };\n\n return promise;\n }\n\n public clearCache(method: T, verify: (params: MethodDeclMap[T]['req']) => boolean) {\n const cache = this.apiPromisesCacheable[method];\n if(cache) {\n for(const queryJSON in cache) {\n const item = cache[queryJSON];\n try {\n if(verify(item.params)) {\n if(item.timeout) {\n clearTimeout(item.timeout);\n }\n\n delete cache[queryJSON];\n }\n } catch(err) {\n // this.log.error('clearCache error:', err, queryJSON, item);\n }\n }\n }\n }\n\n public getConfig(overwrite?: boolean) {\n if(this.config && !overwrite) {\n return this.config;\n }\n\n return this.invokeApiSingleProcess({\n method: 'help.getConfig',\n params: {},\n processResult: (config) => {\n this.config = config;\n this.rootScope.dispatchEvent('config', config);\n return config;\n },\n options: {overwrite}\n });\n }\n\n public getAppConfig(overwrite?: boolean) {\n if(this.appConfig && !overwrite) {\n return this.appConfig;\n }\n\n return this.invokeApiSingleProcess({\n method: 'help.getAppConfig',\n params: {},\n processResult: (config: MTAppConfig) => {\n this.appConfig = config;\n ignoreRestrictionReasons(config.ignore_restriction_reasons ?? []);\n this.rootScope.dispatchEvent('app_config', config);\n return config;\n },\n options: {overwrite}\n });\n }\n\n public getLimit(type: ApiLimitType, isPremium?: boolean) {\n return callbackify(this.getAppConfig(), (appConfig) => {\n const map: {[type in ApiLimitType]: [keyof MTAppConfig, keyof MTAppConfig] | keyof MTAppConfig} = {\n pin: ['dialogs_pinned_limit_default', 'dialogs_pinned_limit_premium'],\n folderPin: ['dialogs_folder_pinned_limit_default', 'dialogs_folder_pinned_limit_premium'],\n folders: ['dialog_filters_limit_default', 'dialog_filters_limit_premium'],\n favedStickers: ['stickers_faved_limit_default', 'stickers_faved_limit_premium'],\n reactions: ['reactions_user_max_default', 'reactions_user_max_premium'],\n bio: ['about_length_limit_default', 'about_length_limit_premium'],\n topicPin: 'topics_pinned_limit',\n caption: ['caption_length_limit_default', 'caption_length_limit_premium']\n };\n\n isPremium ??= this.rootScope.premium;\n\n const a = map[type];\n const key = Array.isArray(a) ? a[isPremium ? 1 : 0] : a;\n return appConfig[key] as number;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n \nimport transportController from './transports/controller';\nimport MTTransport from './transports/transport';\n \n\nimport type {UserAuth} from './mtproto_config';\nimport type {DcAuthKey, DcId, DcServerSalt, InvokeApiOptions} from '../../types';\nimport type {MethodDeclMap} from '../../layer';\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport sessionStorage from '../sessionStorage';\nimport MTPNetworker, {MTMessage} from './networker';\nimport {ConnectionType, constructTelegramWebSocketUrl, DcConfigurator, TransportType} from './dcConfigurator';\nimport {logger} from '../logger';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IDB} from '../files/idb';\nimport CryptoWorker from '../crypto/cryptoMessagePort';\nimport ctx from '../../environment/ctx';\nimport noop from '../../helpers/noop';\nimport Modes from '../../config/modes';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport isObject from '../../helpers/object/isObject';\nimport pause from '../../helpers/schedulers/pause';\nimport ApiManagerMethods from './api_methods';\nimport {getEnvironment} from '../../environment/utils';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport tsNow from '../../helpers/tsNow';\n\n/* class RotatableArray {\n public array: Array = [];\n private lastIndex = -1;\n\n public get() {\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\n return this.array[this.lastIndex];\n }\n} */\n\nconst PREMIUM_FILE_NETWORKERS_COUNT = 6;\nconst REGULAR_FILE_NETWORKERS_COUNT = 3;\n\nexport class ApiManager extends ApiManagerMethods {\n private cachedNetworkers: {\n [transportType in TransportType]: {\n [connectionType in ConnectionType]: {\n [dcId: DcId]: MTPNetworker[]\n }\n }\n };\n\n private cachedExportPromise: {[x: number]: Promise};\n private gettingNetworkers: {[dcIdAndType: string]: Promise};\n private baseDcId: DcId;\n\n // public telegramMeNotified = false;\n\n private log: ReturnType;\n\n private afterMessageTempIds: {\n [tempId: string]: {\n messageId: string,\n promise: Promise\n }\n };\n\n private transportType: TransportType;\n\n private updatesProcessor: (obj: any) => void;\n\n private loggingOut: boolean;\n\n constructor() {\n super();\n this.log = logger('API');\n\n this.cachedNetworkers = {} as any;\n this.cachedExportPromise = {};\n this.gettingNetworkers = {};\n this.baseDcId = 0;\n this.afterMessageTempIds = {};\n\n this.transportType = Modes.transport;\n\n \n transportController.addEventListener('transport', (transportType) => {\n this.changeTransportType(transportType);\n });\n \n\n // * Make sure that the used autologin_token is no more than 10000 seconds old\n // * https://core.telegram.org/api/url-authorization\n const REFRESH_APP_CONFIG_INTERVAL = (10000 - 30) * 1000;\n setInterval(() => {\n this.getAppConfig(true);\n }, REFRESH_APP_CONFIG_INTERVAL);\n }\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateConfig: () => {\n this.getConfig(true);\n this.getAppConfig(true);\n }\n });\n\n this.rootScope.addEventListener('user_auth', () => {\n if(this.config) { // refresh configs if had a config during authorization\n this.apiUpdatesManager.processLocalUpdate({_: 'updateConfig'});\n }\n });\n\n this.rootScope.addEventListener('premium_toggle', (isPremium) => {\n this.iterateNetworkers(({networker, connectionType, dcId, transportType}) => {\n if(connectionType === 'client' || transportType !== 'websocket') {\n return;\n }\n\n const transport = networker.transport;\n if(!transport) {\n this.log.error('wow what, no transport?', networker);\n return;\n }\n\n if((transport as TcpObfuscated).connection) {\n const url = constructTelegramWebSocketUrl(dcId, connectionType, isPremium);\n (transport as TcpObfuscated).changeUrl(url);\n }\n });\n });\n }\n\n // private lol = false;\n\n // constructor() {\n // MtpSingleInstanceService.start();\n\n /* AppStorage.get('dc').then((dcId) => {\n if(dcId) {\n this.baseDcId = dcId;\n }\n }); */\n // }\n\n /* public telegramMeNotify(newValue: boolean) {\n if(this.telegramMeNotified !== newValue) {\n this.telegramMeNotified = newValue;\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\n }\n } */\n\n private getTransportType(connectionType: ConnectionType) {\n \n \n \n \n \n // @ts-ignore\n const transportType: TransportType = this.transportType;\n \n\n return transportType;\n }\n\n private iterateNetworkers(callback: (o: {networker: MTPNetworker, dcId: DcId, connectionType: ConnectionType, transportType: TransportType, index: number, array: MTPNetworker[]}) => void) {\n for(const transportType in this.cachedNetworkers) {\n const connections = this.cachedNetworkers[transportType as TransportType];\n for(const connectionType in connections) {\n const dcs = connections[connectionType as ConnectionType];\n for(const dcId in dcs) {\n const networkers = dcs[dcId as any as DcId];\n networkers.forEach((networker, idx, arr) => {\n callback({\n networker,\n dcId: +dcId as DcId,\n connectionType: connectionType as ConnectionType,\n transportType: transportType as TransportType,\n index: idx,\n array: arr\n });\n });\n }\n }\n }\n }\n\n private chooseServer(dcId: DcId, connectionType: ConnectionType, transportType: TransportType) {\n return this.dcConfigurator.chooseServer(dcId, connectionType, transportType, connectionType === 'client', this.rootScope.premium);\n }\n\n public changeTransportType(transportType: TransportType) {\n const oldTransportType = this.transportType;\n if(oldTransportType === transportType) {\n return;\n }\n\n this.log('changing transport from', oldTransportType, 'to', transportType);\n\n const oldObject = this.cachedNetworkers[oldTransportType];\n const newObject = this.cachedNetworkers[transportType];\n this.cachedNetworkers[transportType] = oldObject;\n this.cachedNetworkers[oldTransportType] = newObject;\n\n this.transportType = transportType;\n\n for(const oldGetKey in this.gettingNetworkers) {\n const promise = this.gettingNetworkers[oldGetKey];\n delete this.gettingNetworkers[oldGetKey];\n\n const newGetKey = oldGetKey.replace(oldTransportType, transportType);\n this.gettingNetworkers[newGetKey] = promise;\n\n this.log('changed networker getKey from', oldGetKey, 'to', newGetKey)\n }\n\n this.iterateNetworkers((info) => {\n const transportType = this.getTransportType(info.connectionType);\n const transport = this.chooseServer(info.dcId, info.connectionType, transportType);\n this.changeNetworkerTransport(info.networker, transport);\n });\n }\n\n public async getBaseDcId() {\n if(this.baseDcId) {\n return this.baseDcId;\n }\n\n const baseDcId = await sessionStorage.get('dc');\n if(!this.baseDcId) {\n if(!baseDcId) {\n this.setBaseDcId(App.baseDcId);\n } else {\n this.baseDcId = baseDcId;\n }\n }\n\n return this.baseDcId;\n }\n\n public async setUserAuth(userAuth: UserAuth | UserId) {\n if(typeof(userAuth) === 'string' || typeof(userAuth) === 'number') {\n userAuth = {dcID: 0, date: tsNow(true), id: userAuth.toPeerId(false)};\n }\n\n this.rootScope.dispatchEvent('user_auth', userAuth);\n\n if(!userAuth.dcID) {\n const baseDcId = await this.getBaseDcId();\n userAuth.dcID = baseDcId;\n }\n\n sessionStorage.set({\n user_auth: userAuth\n });\n\n // this.telegramMeNotify(true);\n }\n\n public setBaseDcId(dcId: DcId) {\n const wasDcId = this.baseDcId;\n if(wasDcId) { // if migrated set ondrain\n this.getNetworker(wasDcId).then((networker) => {\n this.setOnDrainIfNeeded(networker);\n });\n }\n\n this.baseDcId = dcId;\n\n sessionStorage.set({\n dc: this.baseDcId\n });\n }\n\n public async logOut() {\n if(this.loggingOut) {\n return;\n }\n\n this.loggingOut = true;\n const storageKeys: Array = [];\n\n const prefix = 'dc';\n for(let dcId = 1; dcId <= 5; dcId++) {\n storageKeys.push(prefix + dcId + '_auth_key' as any);\n }\n\n // WebPushApiManager.forceUnsubscribe(); // WARNING // moved to worker's master\n const storageResult = await Promise.all(storageKeys.map((key) => sessionStorage.get(key)));\n\n const logoutPromises: Promise[] = [];\n for(let i = 0; i < storageResult.length; i++) {\n if(storageResult[i]) {\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: (i + 1) as DcId, ignoreErrors: true}));\n }\n }\n\n const clear = async() => {\n this.baseDcId = undefined;\n // this.telegramMeNotify(false);\n await toggleStorages(false, true);\n IDB.closeDatabases();\n this.rootScope.dispatchEvent('logging_out');\n };\n\n setTimeout(clear, 1e3);\n\n // return;\n\n return Promise.all(logoutPromises).catch((error) => {\n error.handled = true;\n }).finally(clear)/* .then(() => {\n location.pathname = '/';\n }) */;\n }\n\n private generateNetworkerGetKey(dcId: DcId, transportType: TransportType, connectionType: ConnectionType) {\n return [dcId, transportType, connectionType].join('-');\n }\n\n public getNetworker(dcId: DcId, options: InvokeApiOptions = {}): Promise {\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\n // const connectionType: ConnectionType = 'client';\n\n const transportType = this.getTransportType(connectionType);\n if(!this.cachedNetworkers[transportType]) {\n this.cachedNetworkers[transportType] = {\n client: {},\n download: {},\n upload: {}\n };\n }\n\n const cache = this.cachedNetworkers[transportType][connectionType];\n if(!(dcId in cache)) {\n cache[dcId] = [];\n }\n\n const networkers = cache[dcId];\n // @ts-ignore\n const maxNetworkers = connectionType === 'client' || transportType === 'https' ? 1 : (this.rootScope.premium ? PREMIUM_FILE_NETWORKERS_COUNT : REGULAR_FILE_NETWORKERS_COUNT);\n if(networkers.length >= maxNetworkers) {\n let i = maxNetworkers - 1, found = false;\n for(; i >= 0; --i) {\n if(networkers[i].isOnline) {\n found = true;\n break;\n }\n }\n\n const networker = networkers.splice(found ? i : maxNetworkers - 1, 1)[0];\n networkers.unshift(networker);\n return Promise.resolve(networker);\n }\n\n let getKey = this.generateNetworkerGetKey(dcId, transportType, connectionType);\n if(this.gettingNetworkers[getKey]) {\n return this.gettingNetworkers[getKey];\n }\n\n const ak: DcAuthKey = `dc${dcId}_auth_key` as any;\n const ss: DcServerSalt = `dc${dcId}_server_salt` as any;\n\n let transport = this.chooseServer(dcId, connectionType, transportType);\n return this.gettingNetworkers[getKey] = Promise.all([ak, ss].map((key) => sessionStorage.get(key)))\n .then(async([authKeyHex, serverSaltHex]) => {\n let networker: MTPNetworker, error: any;\n if(authKeyHex && authKeyHex.length === 512) {\n if(!serverSaltHex || serverSaltHex.length !== 16) {\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\n }\n\n const authKey = bytesFromHex(authKeyHex);\n const authKeyId = (await CryptoWorker.invokeCrypto('sha1', authKey)).slice(-8);\n const serverSalt = bytesFromHex(serverSaltHex);\n\n networker = this.networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, options);\n } else {\n try { // if no saved state\n const auth = await this.authorizer.auth(dcId);\n\n sessionStorage.set({\n [ak]: bytesToHex(auth.authKey),\n [ss]: bytesToHex(auth.serverSalt)\n });\n\n networker = this.networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, options);\n } catch(_error) {\n error = _error;\n }\n }\n\n // ! cannot get it before this promise because simultaneous changeTransport will change nothing\n const newTransportType = this.getTransportType(connectionType);\n if(newTransportType !== transportType) {\n getKey = this.generateNetworkerGetKey(dcId, newTransportType, connectionType);\n transport.destroy();\n DcConfigurator.removeTransport(this.dcConfigurator.chosenServers, transport);\n\n if(networker) {\n transport = this.chooseServer(dcId, connectionType, newTransportType);\n }\n\n this.log('transport has been changed during authorization from', transportType, 'to', newTransportType);\n }\n\n /* networker.onConnectionStatusChange = (online) => {\n console.log('status:', online);\n }; */\n\n delete this.gettingNetworkers[getKey];\n\n if(error) {\n this.log('get networker error', error, (error as Error).stack);\n throw error;\n }\n\n this.changeNetworkerTransport(networker, transport);\n networkers.unshift(networker);\n this.setOnDrainIfNeeded(networker);\n return networker;\n });\n }\n\n public getNetworkerVoid(dcId: DcId) {\n return this.getNetworker(dcId).then(noop, noop);\n }\n\n private changeNetworkerTransport(networker: MTPNetworker, transport?: MTTransport) {\n const oldTransport = networker.transport;\n if(oldTransport) {\n DcConfigurator.removeTransport(this.dcConfigurator.chosenServers, oldTransport);\n }\n\n networker.changeTransport(transport);\n }\n\n private onNetworkerDrain(networker: MTPNetworker) {\n this.log('networker drain', networker.dcId);\n networker.onDrain = undefined;\n this.changeNetworkerTransport(networker);\n networker.destroy();\n this.networkerFactory.removeNetworker(networker);\n DcConfigurator.removeTransport(this.cachedNetworkers, networker);\n }\n\n public setOnDrainIfNeeded(networker: MTPNetworker) {\n if(networker.onDrain) {\n return;\n }\n\n const checkPromise: Promise = networker.isFileNetworker ?\n Promise.resolve(true) :\n this.getBaseDcId().then((baseDcId) => networker.dcId !== baseDcId);\n checkPromise.then((canRelease) => {\n if(networker.onDrain) {\n return;\n }\n\n if(canRelease) {\n networker.onDrain = () => this.onNetworkerDrain(networker);\n networker.setDrainTimeout();\n }\n });\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n this.networkerFactory.setUpdatesProcessor(callback);\n }\n\n public invokeApi(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise {\n // /////this.log('Invoke api', method, params, options);\n\n /* if(!this.lol) {\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\n this.lol = true;\n } */\n\n const deferred = deferredPromise();\n\n let {afterMessageId, prepareTempMessageId} = options;\n if(prepareTempMessageId) {\n deferred.then(() => {\n delete this.afterMessageTempIds[prepareTempMessageId];\n });\n }\n\n if(MOUNT_CLASS_TO) {\n const startTime = Date.now();\n const interval = ctx.setInterval(() => {\n if(!cachedNetworker || !cachedNetworker.isStopped()) {\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\n }\n // this.cachedUploadNetworkers[2].requestMessageStatus();\n }, 5e3);\n\n deferred.catch(noop).finally(() => {\n clearInterval(interval);\n });\n }\n\n const rejectPromise = async(error: ApiError) => {\n if(!error) {\n error = {type: 'ERROR_EMPTY'};\n } else if(!isObject(error)) {\n error = {message: error};\n }\n\n if((error.code === 401 && error.type === 'SESSION_REVOKED') ||\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\n this.logOut();\n }\n\n if(options.ignoreErrors) {\n throw error;\n }\n\n if(error.code === 406) {\n error.handled = true;\n }\n\n if(!options.noErrorBox) {\n error.input = method;\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\n setTimeout(() => {\n if(!error.handled) {\n if(error.code === 401) {\n this.logOut();\n } else {\n // ErrorService.show({error: error}); // WARNING\n }\n\n error.handled = true;\n }\n }, 100);\n }\n\n throw error;\n };\n\n let dcId: DcId;\n\n let cachedNetworker: MTPNetworker;\n const stack = (new Error()).stack || 'empty stack';\n const performRequest = (): Promise => {\n if(afterMessageId) {\n const after = this.afterMessageTempIds[afterMessageId];\n if(after) {\n options.afterMessageId = after.messageId;\n }\n }\n\n const promise = cachedNetworker.wrapApiCall(method, params, options);\n\n if(prepareTempMessageId) {\n this.afterMessageTempIds[prepareTempMessageId] = {\n messageId: (options as MTMessage).messageId,\n promise: deferred\n };\n }\n\n return promise.catch((error: ApiError) => {\n // if(!options.ignoreErrors) {\n if(error.type !== 'FILE_REFERENCE_EXPIRED'/* && error.type !== 'MSG_WAIT_FAILED' */) {\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\n }\n\n if(error.code === 401 && this.baseDcId === dcId) {\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\n sessionStorage.delete('dc')\n sessionStorage.delete('user_auth'); // ! ะฒะพะทะผะพะถะฝะพ ั‚ัƒั‚ ะฒะพะพะฑั‰ะต ะฝะต ะฝัƒะถะฝะพ ัั‚ะพ ะดะตะปะฐั‚ัŒ, ะฝะพ ะฝัƒะถะฝะพ ะฟั€ะพะฒะตั€ะธั‚ัŒ ัะปัƒั‡ะฐะน ั USER_DEACTIVATED (https://core.telegram.org/api/errors)\n // this.telegramMeNotify(false);\n }\n\n throw error;\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\n if(this.cachedExportPromise[dcId] === undefined) {\n const promise = new Promise((exportResolve, exportReject) => {\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\n this.invokeApi('auth.importAuthorization', {\n id: exportedAuth.id,\n bytes: exportedAuth.bytes\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\n }, exportReject);\n });\n\n this.cachedExportPromise[dcId] = promise;\n }\n\n return this.cachedExportPromise[dcId].then(() => performRequest());\n } else if(error.code === 303) {\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\\d+)/)[2] as DcId;\n if(newDcId !== dcId) {\n if(options.dcId) {\n options.dcId = newDcId;\n } else {\n this.setBaseDcId(newDcId);\n }\n\n return this.invokeApi(method, params, options);\n }\n } else if(error.code === 400 && error.type.indexOf('FILE_MIGRATE') === 0) {\n const newDcId = +error.type.match(/^(FILE_MIGRATE_)(\\d+)/)[2] as DcId;\n if(newDcId !== dcId) {\n options.dcId = newDcId;\n return this.invokeApi(method, params, options);\n } else {\n throw error;\n }\n } else if(error.code === 400 && error.type === 'CONNECTION_NOT_INITED') {\n this.networkerFactory.unsetConnectionInited();\n return performRequest();\n } else if(!options.rawError && error.code === 420) {\n const waitTime = +error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 1;\n\n if(waitTime > (options.floodMaxTimeout ?? 60) && !options.prepareTempMessageId) {\n throw error;\n }\n\n return pause(waitTime/* (waitTime + 5) */ * 1000).then(() => performRequest());\n } else if(!options.rawError && ['MSG_WAIT_FAILED', 'MSG_WAIT_TIMEOUT'].includes(error.type)) {\n const after = this.afterMessageTempIds[afterMessageId];\n\n afterMessageId = undefined;\n delete options.afterMessageId;\n\n if(after) return after.promise.then(() => performRequest());\n else return performRequest();\n } else if(!options.rawError && error.code === 500) {\n const now = Date.now();\n if(options.stopTime) {\n if(now >= options.stopTime) {\n throw error;\n }\n }\n\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\n return pause(options.waitTime * 1000).then(() => performRequest());\n } else if(error.type === 'UNKNOWN' || error.type === 'MTPROTO_CLUSTER_INVALID') { // cluster invalid - request from regular user to premium endpoint\n return pause(1000).then(() => performRequest());\n } else {\n throw error;\n }\n });\n }\n\n let p: Promise;\n if(dcId = (options.dcId || this.baseDcId)) {\n p = this.getNetworker(dcId, options);\n } else {\n p = this.getBaseDcId().then((baseDcId) => this.getNetworker(dcId = baseDcId, options));\n }\n\n p.then((networker) => {\n cachedNetworker = networker;\n const promise = performRequest();\n cachedNetworker.attachPromise(deferred, options as MTMessage);\n return promise;\n })\n .then(deferred.resolve)\n .catch(rejectPromise)\n .catch(deferred.reject);\n\n return deferred;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport applyMixins from '../../helpers/applyMixins';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport {AppManager} from '../appManagers/manager';\n\nexport type StatePeerType = 'recentSearch' | 'topPeer' | 'dialog' | 'contact' | 'topMessage' | 'self';\n\ntype PeersStorageKey = `${StatePeerType}_${string | PeerId}` | StatePeerType;\n\nclass PeersStorage {\n private neededPeers: Map> = new Map();\n private singlePeerMap: Map> = new Map();\n\n constructor() {\n this._constructor(false);\n }\n\n protected after() {\n this.rootScope.addEventListener('user_auth', () => {\n this.requestPeer(this.appPeersManager.peerId, 'self');\n });\n }\n\n public requestPeer(peerId: PeerId, key: PeersStorageKey) {\n let set = this.neededPeers.get(peerId);\n if(set && set.has(key)) {\n return;\n }\n\n if(!set) {\n set = new Set();\n this.neededPeers.set(peerId, set);\n }\n\n set.add(key);\n\n this.dispatchEvent('peerNeeded', peerId);\n }\n\n public releasePeer(peerId: PeerId, key: PeersStorageKey) {\n const set = this.neededPeers.get(peerId);\n if(!set) {\n return;\n }\n\n set.delete(key);\n\n if(!set.size) {\n this.neededPeers.delete(peerId);\n this.dispatchEvent('peerUnneeded', peerId);\n }\n }\n\n public requestPeersForKey(peerIds: Set | number[], key: PeersStorageKey) {\n if(Array.isArray(peerIds)) {\n peerIds = new Set(peerIds);\n }\n\n let set = this.singlePeerMap.get(key);\n if(set) {\n for(const peerId of set) {\n if(peerIds.has(peerId)) {\n continue;\n }\n\n this.releasePeer(peerId, key);\n set.delete(peerId);\n }\n\n if(!set.size && !peerIds.size) {\n this.singlePeerMap.delete(key);\n return;\n }\n }\n\n if(peerIds.size) {\n if(!set) {\n set = new Set();\n this.singlePeerMap.set(key, set);\n }\n\n for(const peerId of peerIds) {\n if(set.has(peerId)) {\n continue;\n }\n\n this.requestPeer(peerId, key);\n set.add(peerId);\n }\n }\n }\n\n public isPeerNeeded(peerId: PeerId) {\n return this.neededPeers.has(peerId);\n }\n}\n\ninterface PeersStorage extends EventListenerBase<{\n peerNeeded: (peerId: PeerId) => void,\n peerUnneeded: (peerId: PeerId) => void,\n}>, AppManager {}\napplyMixins(PeersStorage, [EventListenerBase, AppManager]);\n\nexport default PeersStorage;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WebDocument} from '../../layer';\nimport type {MyDocument} from '../appManagers/appDocsManager';\nimport type {MyPhoto} from '../appManagers/appPhotosManager';\nimport {THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\n\nexport type ThumbCache = {\n downloaded: number,\n url: string,\n type: string\n};\n\nexport type ThumbsCache = {\n [key: string]: {\n [size: string]: ThumbCache\n }\n};\n\nconst thumbFullSize = THUMB_TYPE_FULL;\n\nexport type ThumbStorageMedia = MyPhoto | MyDocument | WebDocument;\n\nexport default class ThumbsStorage {\n private thumbsCache: ThumbsCache = {};\n\n private getKey(media: ThumbStorageMedia) {\n return media._ + ((media as MyPhoto).id ?? (media as WebDocument).url);\n }\n\n public getCacheContext(media: ThumbStorageMedia, thumbSize: string = thumbFullSize): ThumbCache {\n /* if(media._ === 'photo' && thumbSize !== 'i') {\n thumbSize = thumbFullSize;\n } */\n\n const cache = this.thumbsCache[this.getKey(media)] ??= {};\n return cache[thumbSize] ??= {downloaded: 0, url: '', type: thumbSize};\n }\n\n public setCacheContextURL(media: ThumbStorageMedia, thumbSize: string = thumbFullSize, url: string, downloaded: number = 0) {\n const cacheContext = this.getCacheContext(media, thumbSize);\n cacheContext.url = url;\n cacheContext.downloaded = downloaded;\n return cacheContext;\n }\n\n public deleteCacheContext(media: ThumbStorageMedia, thumbSize: string = thumbFullSize) {\n const cache = this.thumbsCache[this.getKey(media)];\n if(cache) {\n delete cache[thumbSize];\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport type MTProtoConstructor = {\n id: number,\n predicate: string,\n params: Array<{\n name: string,\n type: string\n }>,\n type: string\n};\n\nexport type MTProtoMethod = {\n id: number,\n method: string,\n params: Array<{\n name: string,\n type: string\n }>,\n type: string\n};\n\n// eslint-disable-next-line quotes, comma-spacing\nexport default {\"MTProto\":{\"constructors\":[{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":85337187,\"predicate\":\"resPQ\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"server_public_key_fingerprints\",\"type\":\"Vector\"}],\"type\":\"ResPQ\"},{\"id\":-1443537003,\"predicate\":\"p_q_inner_data_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":1459478408,\"predicate\":\"p_q_inner_data_temp_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":-790100132,\"predicate\":\"server_DH_params_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_answer\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-1249309254,\"predicate\":\"server_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"dh_prime\",\"type\":\"bytes\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"server_time\",\"type\":\"int\"}],\"type\":\"Server_DH_inner_data\"},{\"id\":1715713620,\"predicate\":\"client_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"retry_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"}],\"type\":\"Client_DH_Inner_Data\"},{\"id\":1003222836,\"predicate\":\"dh_gen_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash1\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1188831161,\"predicate\":\"dh_gen_retry\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash2\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":-1499615742,\"predicate\":\"dh_gen_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash3\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1973679973,\"predicate\":\"bind_auth_key_inner\",\"params\":[{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"temp_auth_key_id\",\"type\":\"long\"},{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"temp_session_id\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"}],\"type\":\"BindAuthKeyInner\"},{\"id\":-212046591,\"predicate\":\"rpc_result\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"result\",\"type\":\"Object\"}],\"type\":\"RpcResult\"},{\"id\":558156313,\"predicate\":\"rpc_error\",\"params\":[{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"error_message\",\"type\":\"string\"}],\"type\":\"RpcError\"},{\"id\":1579864942,\"predicate\":\"rpc_answer_unknown\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-847714938,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-1539647305,\"predicate\":\"rpc_answer_dropped\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seq_no\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"}],\"type\":\"RpcDropAnswer\"},{\"id\":155834844,\"predicate\":\"future_salt\",\"params\":[{\"name\":\"valid_since\",\"type\":\"int\"},{\"name\":\"valid_until\",\"type\":\"int\"},{\"name\":\"salt\",\"type\":\"long\"}],\"type\":\"FutureSalt\"},{\"id\":-1370486635,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector\"}],\"type\":\"FutureSalts\"},{\"id\":880243653,\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-501201412,\"predicate\":\"destroy_session_ok\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":1658015945,\"predicate\":\"destroy_session_none\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1631450872,\"predicate\":\"new_session_created\",\"params\":[{\"name\":\"first_msg_id\",\"type\":\"long\"},{\"name\":\"unique_id\",\"type\":\"long\"},{\"name\":\"server_salt\",\"type\":\"long\"}],\"type\":\"NewSession\"},{\"id\":1945237724,\"predicate\":\"msg_container\",\"params\":[{\"name\":\"messages\",\"type\":\"vector<%Message>\"}],\"type\":\"MessageContainer\"},{\"id\":1538843921,\"predicate\":\"message\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seqno\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"body\",\"type\":\"Object\"}],\"type\":\"Message\"},{\"id\":-530561358,\"predicate\":\"msg_copy\",\"params\":[{\"name\":\"orig_message\",\"type\":\"Message\"}],\"type\":\"MessageCopy\"},{\"id\":812830625,\"predicate\":\"gzip_packed\",\"params\":[{\"name\":\"packed_data\",\"type\":\"bytes\"}],\"type\":\"Object\"},{\"id\":1658238041,\"predicate\":\"msgs_ack\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsAck\"},{\"id\":-1477445615,\"predicate\":\"bad_msg_notification\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"}],\"type\":\"BadMsgNotification\"},{\"id\":-307542917,\"predicate\":\"bad_server_salt\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"new_server_salt\",\"type\":\"long\"}],\"type\":\"BadMsgNotification\"},{\"id\":2105940488,\"predicate\":\"msg_resend_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgResendReq\"},{\"id\":-630588590,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsStateReq\"},{\"id\":81704317,\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":-1933520591,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsAllInfo\"},{\"id\":661470918,\"predicate\":\"msg_detailed_info\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-2137147681,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-161422892,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":178201177,\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":-368010477,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}],\"methods\":[{\"id\":-1099002127,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":-686627650,\"method\":\"req_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"public_key_fingerprint\",\"type\":\"long\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-184262881,\"method\":\"set_client_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1491380032,\"method\":\"rpc_drop_answer\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"}],\"type\":\"RpcDropAnswer\"},{\"id\":-1188971260,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":2059302892,\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-213746804,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":-414113498,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1835453025,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":-784117408,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}]},\"API\":{\"constructors\":[{\"id\":-1132882121,\"predicate\":\"boolFalse\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1720552011,\"predicate\":\"boolTrue\",\"params\":[],\"type\":\"Bool\"},{\"id\":1072550713,\"predicate\":\"true\",\"params\":[],\"type\":\"True\"},{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":-994444869,\"predicate\":\"error\",\"params\":[{\"name\":\"code\",\"type\":\"int\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Error\"},{\"id\":1450380236,\"predicate\":\"null\",\"params\":[],\"type\":\"Null\"},{\"id\":2134579434,\"predicate\":\"inputPeerEmpty\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":2107670217,\"predicate\":\"inputPeerSelf\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":900291769,\"predicate\":\"inputPeerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-1182234929,\"predicate\":\"inputUserEmpty\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-138301121,\"predicate\":\"inputUserSelf\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-208488460,\"predicate\":\"inputPhoneContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"InputContact\"},{\"id\":-181407105,\"predicate\":\"inputFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"md5_checksum\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":-1771768449,\"predicate\":\"inputMediaEmpty\",\"params\":[],\"type\":\"InputMedia\"},{\"id\":505969924,\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.2?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":-1279654347,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-104578748,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":-122978821,\"predicate\":\"inputMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":480546647,\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":-1110593856,\"predicate\":\"inputChatUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.3?VideoSize\"}],\"type\":\"InputChatPhoto\"},{\"id\":-1991004873,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":-457104426,\"predicate\":\"inputGeoPointEmpty\",\"params\":[],\"type\":\"InputGeoPoint\"},{\"id\":1210199983,\"predicate\":\"inputGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"InputGeoPoint\"},{\"id\":483901197,\"predicate\":\"inputPhotoEmpty\",\"params\":[],\"type\":\"InputPhoto\"},{\"id\":1001634122,\"predicate\":\"inputPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputPhoto\"},{\"id\":-539317279,\"predicate\":\"inputFileLocation\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputFileLocation\"},{\"id\":1498486562,\"predicate\":\"peerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":918946202,\"predicate\":\"peerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":-1432995067,\"predicate\":\"storage.fileUnknown\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1086091090,\"predicate\":\"storage.filePartial\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":8322574,\"predicate\":\"storage.fileJpeg\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-891180321,\"predicate\":\"storage.fileGif\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":172975040,\"predicate\":\"storage.filePng\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1373745011,\"predicate\":\"storage.filePdf\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1384777335,\"predicate\":\"storage.fileMp3\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1258941372,\"predicate\":\"storage.fileMov\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1278304028,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":276907596,\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-742634630,\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"User\"},{\"id\":1326562017,\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":-2100168954,\"predicate\":\"userProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"personal\",\"type\":\"flags.2?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"UserProfilePhoto\"},{\"id\":164646985,\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-306628279,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":9203775,\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":693512293,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Chat\"},{\"id\":1103884886,\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"deactivated\",\"type\":\"flags.5?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"noforwards\",\"type\":\"flags.25?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"migrated_to\",\"type\":\"flags.6?InputChannel\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"}],\"type\":\"Chat\"},{\"id\":1704108455,\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":-908914376,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants\",\"type\":\"ChatParticipants\"},{\"name\":\"chat_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.13?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"flags.3?Vector\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"call\",\"type\":\"flags.12?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.15?Peer\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.16?string\"},{\"name\":\"requests_pending\",\"type\":\"flags.17?int\"},{\"name\":\"recent_requesters\",\"type\":\"flags.17?Vector\"},{\"name\":\"available_reactions\",\"type\":\"flags.18?ChatReactions\"}],\"type\":\"ChatFull\"},{\"id\":-1070776313,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-2023500831,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":1018991608,\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"ChatParticipants\"},{\"id\":935395612,\"predicate\":\"chatPhotoEmpty\",\"params\":[],\"type\":\"ChatPhoto\"},{\"id\":476978193,\"predicate\":\"chatPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"ChatPhoto\"},{\"id\":-1868117372,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":940666592,\"predicate\":\"message\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"from_scheduled\",\"type\":\"flags.18?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"edit_hide\",\"type\":\"flags.21?true\"},{\"name\":\"pinned\",\"type\":\"flags.24?true\"},{\"name\":\"noforwards\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.6?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"views\",\"type\":\"flags.10?int\"},{\"name\":\"forwards\",\"type\":\"flags.10?int\"},{\"name\":\"replies\",\"type\":\"flags.23?MessageReplies\"},{\"name\":\"edit_date\",\"type\":\"flags.15?int\"},{\"name\":\"post_author\",\"type\":\"flags.16?string\"},{\"name\":\"grouped_id\",\"type\":\"flags.17?long\"},{\"name\":\"reactions\",\"type\":\"flags.20?MessageReactions\"},{\"name\":\"restriction_reason\",\"type\":\"flags.22?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":721967202,\"predicate\":\"messageService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"MessageAction\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":1038967584,\"predicate\":\"messageMediaEmpty\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":1766936791,\"predicate\":\"messageMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.3?true\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1457575028,\"predicate\":\"messageMediaGeo\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"}],\"type\":\"MessageMedia\"},{\"id\":1882335561,\"predicate\":\"messageMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageMedia\"},{\"id\":-1618676578,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":-1230047312,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1119368275,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1247687078,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2144015272,\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-1780220945,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":365886720,\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1539362612,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-712374074,\"predicate\":\"dialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"unread_mark\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"unread_reactions_count\",\"type\":\"int\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.5?int\"}],\"type\":\"Dialog\"},{\"id\":590459437,\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":-82216347,\"predicate\":\"photo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_stickers\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"Photo\"},{\"id\":236446268,\"predicate\":\"photoSizeEmpty\",\"params\":[{\"name\":\"type\",\"type\":\"string\"}],\"type\":\"PhotoSize\"},{\"id\":1976012384,\"predicate\":\"photoSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"}],\"type\":\"PhotoSize\"},{\"id\":35527382,\"predicate\":\"photoCachedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":286776671,\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":-1297942941,\"predicate\":\"geoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"GeoPoint\"},{\"id\":1577067778,\"predicate\":\"auth.sentCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"auth.SentCodeType\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"next_type\",\"type\":\"flags.1?auth.CodeType\"},{\"name\":\"timeout\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCode\"},{\"id\":782418132,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"setup_password_required\",\"type\":\"flags.1?true\"},{\"name\":\"otherwise_relogin_days\",\"type\":\"flags.1?int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"future_auth_token\",\"type\":\"flags.2?bytes\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":-1271602504,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1195615476,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":423314455,\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":1251338318,\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-551616469,\"predicate\":\"inputPeerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?NotificationSound\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":-1472527322,\"predicate\":\"peerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"ios_sound\",\"type\":\"flags.3?NotificationSound\"},{\"name\":\"android_sound\",\"type\":\"flags.4?NotificationSound\"},{\"name\":\"other_sound\",\"type\":\"flags.5?NotificationSound\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-1525149427,\"predicate\":\"peerSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"report_spam\",\"type\":\"flags.0?true\"},{\"name\":\"add_contact\",\"type\":\"flags.1?true\"},{\"name\":\"block_contact\",\"type\":\"flags.2?true\"},{\"name\":\"share_contact\",\"type\":\"flags.3?true\"},{\"name\":\"need_contacts_exception\",\"type\":\"flags.4?true\"},{\"name\":\"report_geo\",\"type\":\"flags.5?true\"},{\"name\":\"autoarchived\",\"type\":\"flags.7?true\"},{\"name\":\"invite_members\",\"type\":\"flags.8?true\"},{\"name\":\"request_chat_broadcast\",\"type\":\"flags.10?true\"},{\"name\":\"geo_distance\",\"type\":\"flags.6?int\"},{\"name\":\"request_chat_title\",\"type\":\"flags.9?string\"},{\"name\":\"request_chat_date\",\"type\":\"flags.9?int\"}],\"type\":\"PeerSettings\"},{\"id\":-1539849235,\"predicate\":\"wallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"pattern\",\"type\":\"flags.3?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"Document\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1490799288,\"predicate\":\"inputReportReasonSpam\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":505595789,\"predicate\":\"inputReportReasonViolence\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":777640226,\"predicate\":\"inputReportReasonPornography\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1376497949,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1041980751,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-120378643,\"predicate\":\"userFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"phone_calls_available\",\"type\":\"flags.4?true\"},{\"name\":\"phone_calls_private\",\"type\":\"flags.5?true\"},{\"name\":\"can_pin_message\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.12?true\"},{\"name\":\"video_calls_available\",\"type\":\"flags.13?true\"},{\"name\":\"voice_messages_forbidden\",\"type\":\"flags.20?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags.23?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"personal_photo\",\"type\":\"flags.21?Photo\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"fallback_photo\",\"type\":\"flags.22?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"bot_info\",\"type\":\"flags.3?BotInfo\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"common_chats_count\",\"type\":\"int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.15?string\"},{\"name\":\"private_forward_name\",\"type\":\"flags.16?string\"},{\"name\":\"bot_group_admin_rights\",\"type\":\"flags.17?ChatAdminRights\"},{\"name\":\"bot_broadcast_admin_rights\",\"type\":\"flags.18?ChatAdminRights\"},{\"name\":\"premium_gifts\",\"type\":\"flags.19?Vector\"}],\"type\":\"UserFull\"},{\"id\":341499403,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":-1052885936,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":383348795,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":-1219778094,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":-353862078,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Contacts\"},{\"id\":2010127419,\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector\"},{\"name\":\"popular_invites\",\"type\":\"Vector\"},{\"name\":\"retry_contacts\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":182326673,\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":-513392236,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":364538944,\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":1910543603,\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1938715001,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":978610270,\"predicate\":\"messages.messagesSlice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"next_rate\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":1694474197,\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-438840932,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1269012015,\"predicate\":\"messages.affectedHistory\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1474492012,\"predicate\":\"inputMessagesFilterEmpty\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1777752804,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1614803355,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1458172132,\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1629621880,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2129714567,\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-3644025,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":522914557,\"predicate\":\"updateNewMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1318109142,\"predicate\":\"updateMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-1576161051,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1071741569,\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-2092401936,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":125178264,\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":-440534818,\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":-1484486364,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"usernames\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1519637954,\"predicate\":\"updates.state\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"}],\"type\":\"updates.State\"},{\"id\":1567990072,\"predicate\":\"updates.differenceEmpty\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":16030880,\"predicate\":\"updates.difference\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-1459938943,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-484987010,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":826001400,\"predicate\":\"updateShortMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":1299050149,\"predicate\":\"updateShortChatMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":2027216577,\"predicate\":\"updateShort\",\"params\":[{\"name\":\"update\",\"type\":\"Update\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1918567619,\"predicate\":\"updatesCombined\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1957577280,\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1916114267,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":352657236,\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":539045032,\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photo\"},{\"id\":157948117,\"predicate\":\"upload.file\",\"params\":[{\"name\":\"type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.File\"},{\"id\":414687501,\"predicate\":\"dcOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"ipv6\",\"type\":\"flags.0?true\"},{\"name\":\"media_only\",\"type\":\"flags.1?true\"},{\"name\":\"tcpo_only\",\"type\":\"flags.2?true\"},{\"name\":\"cdn\",\"type\":\"flags.3?true\"},{\"name\":\"static\",\"type\":\"flags.4?true\"},{\"name\":\"this_port_only\",\"type\":\"flags.5?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":589653676,\"predicate\":\"config\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phonecalls_enabled\",\"type\":\"flags.1?true\"},{\"name\":\"default_p2p_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"preload_featured_stickers\",\"type\":\"flags.4?true\"},{\"name\":\"ignore_phone_entities\",\"type\":\"flags.5?true\"},{\"name\":\"revoke_pm_inbox\",\"type\":\"flags.6?true\"},{\"name\":\"blocked_mode\",\"type\":\"flags.8?true\"},{\"name\":\"pfs_enabled\",\"type\":\"flags.13?true\"},{\"name\":\"force_try_ipv6\",\"type\":\"flags.14?true\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector\"},{\"name\":\"dc_txt_domain_name\",\"type\":\"string\"},{\"name\":\"chat_size_max\",\"type\":\"int\"},{\"name\":\"megagroup_size_max\",\"type\":\"int\"},{\"name\":\"forwarded_count_max\",\"type\":\"int\"},{\"name\":\"online_update_period_ms\",\"type\":\"int\"},{\"name\":\"offline_blur_timeout_ms\",\"type\":\"int\"},{\"name\":\"offline_idle_timeout_ms\",\"type\":\"int\"},{\"name\":\"online_cloud_timeout_ms\",\"type\":\"int\"},{\"name\":\"notify_cloud_delay_ms\",\"type\":\"int\"},{\"name\":\"notify_default_delay_ms\",\"type\":\"int\"},{\"name\":\"push_chat_period_ms\",\"type\":\"int\"},{\"name\":\"push_chat_limit\",\"type\":\"int\"},{\"name\":\"saved_gifs_limit\",\"type\":\"int\"},{\"name\":\"edit_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_pm_time_limit\",\"type\":\"int\"},{\"name\":\"rating_e_decay\",\"type\":\"int\"},{\"name\":\"stickers_recent_limit\",\"type\":\"int\"},{\"name\":\"stickers_faved_limit\",\"type\":\"int\"},{\"name\":\"channels_read_media_period\",\"type\":\"int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"pinned_dialogs_count_max\",\"type\":\"int\"},{\"name\":\"pinned_infolder_count_max\",\"type\":\"int\"},{\"name\":\"call_receive_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_ring_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_connect_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_packet_timeout_ms\",\"type\":\"int\"},{\"name\":\"me_url_prefix\",\"type\":\"string\"},{\"name\":\"autoupdate_url_prefix\",\"type\":\"flags.7?string\"},{\"name\":\"gif_search_username\",\"type\":\"flags.9?string\"},{\"name\":\"venue_search_username\",\"type\":\"flags.10?string\"},{\"name\":\"img_search_username\",\"type\":\"flags.11?string\"},{\"name\":\"static_maps_provider\",\"type\":\"flags.12?string\"},{\"name\":\"caption_length_max\",\"type\":\"int\"},{\"name\":\"message_length_max\",\"type\":\"int\"},{\"name\":\"webfile_dc_id\",\"type\":\"int\"},{\"name\":\"suggested_lang_code\",\"type\":\"flags.2?string\"},{\"name\":\"lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"base_lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"reactions_default\",\"type\":\"flags.15?Reaction\"}],\"type\":\"Config\"},{\"id\":-1910892683,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":-860107216,\"predicate\":\"help.appUpdate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_not_skip\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"sticker\",\"type\":\"flags.3?Document\"}],\"type\":\"help.AppUpdate\"},{\"id\":-1000708810,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":415997816,\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":314359194,\"predicate\":\"updateNewEncryptedMessage\",\"params\":[{\"name\":\"message\",\"type\":\"EncryptedMessage\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":386986326,\"predicate\":\"updateEncryptedChatTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1264392051,\"predicate\":\"updateEncryption\",\"params\":[{\"name\":\"chat\",\"type\":\"EncryptedChat\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":956179895,\"predicate\":\"updateEncryptedMessagesRead\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1417756512,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1722964307,\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":1223809356,\"predicate\":\"encryptedChatRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1643173063,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":505183301,\"predicate\":\"encryptedChatDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"history_deleted\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":-247351839,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":-1038136962,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":-1476358952,\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"EncryptedFile\"},{\"id\":406307684,\"predicate\":\"inputEncryptedFileEmpty\",\"params\":[],\"type\":\"InputEncryptedFile\"},{\"id\":1690108678,\"predicate\":\"inputEncryptedFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1511503333,\"predicate\":\"inputEncryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-182231723,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-317144808,\"predicate\":\"encryptedMessage\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"EncryptedMessage\"},{\"id\":594758406,\"predicate\":\"encryptedMessageService\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"EncryptedMessage\"},{\"id\":-1058912715,\"predicate\":\"messages.dhConfigNotModified\",\"params\":[{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":740433629,\"predicate\":\"messages.dhConfig\",\"params\":[{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":1443858741,\"predicate\":\"messages.sentEncryptedMessage\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-1802240206,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-95482955,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":767652808,\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1037718609,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-483443337,\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1906403213,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1530447553,\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"spoiler\",\"type\":\"flags.5?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":860303448,\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-1666158377,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nopremium\",\"type\":\"flags.3?true\"},{\"name\":\"spoiler\",\"type\":\"flags.4?true\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1928391342,\"predicate\":\"inputDocumentEmpty\",\"params\":[],\"type\":\"InputDocument\"},{\"id\":448771445,\"predicate\":\"inputDocument\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputDocument\"},{\"id\":-1160743548,\"predicate\":\"inputDocumentFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":922273905,\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":-1881881384,\"predicate\":\"document\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"Document\"},{\"id\":398898678,\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":-1613493288,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":-1261946036,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1073230141,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1094555409,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":381645902,\"predicate\":\"sendMessageTypingAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-44119819,\"predicate\":\"sendMessageCancelAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1584933265,\"predicate\":\"sendMessageRecordVideoAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-378127636,\"predicate\":\"sendMessageUploadVideoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-718310409,\"predicate\":\"sendMessageRecordAudioAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-212740181,\"predicate\":\"sendMessageUploadAudioAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-774682074,\"predicate\":\"sendMessageUploadPhotoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-1441998364,\"predicate\":\"sendMessageUploadDocumentAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":393186209,\"predicate\":\"sendMessageGeoLocationAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":1653390447,\"predicate\":\"sendMessageChooseContactAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1290580579,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Found\"},{\"id\":-337352679,\"predicate\":\"updateServiceNotification\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"inbox_date\",\"type\":\"flags.1?int\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-496024847,\"predicate\":\"userStatusRecently\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":129960444,\"predicate\":\"userStatusLastWeek\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":2011940674,\"predicate\":\"userStatusLastMonth\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-298113238,\"predicate\":\"updatePrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"PrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1335282456,\"predicate\":\"inputPrivacyKeyStatusTimestamp\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1137792208,\"predicate\":\"privacyKeyStatusTimestamp\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":218751099,\"predicate\":\"inputPrivacyValueAllowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":407582158,\"predicate\":\"inputPrivacyValueAllowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":320652927,\"predicate\":\"inputPrivacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":195371015,\"predicate\":\"inputPrivacyValueDisallowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-697604407,\"predicate\":\"inputPrivacyValueDisallowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-1877932953,\"predicate\":\"inputPrivacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-123988,\"predicate\":\"privacyValueAllowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1698855810,\"predicate\":\"privacyValueAllowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1198497870,\"predicate\":\"privacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-125240806,\"predicate\":\"privacyValueDisallowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1955338397,\"predicate\":\"privacyValueDisallowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-463335103,\"predicate\":\"privacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1352683077,\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1194283041,\"predicate\":\"accountDaysTTL\",\"params\":[{\"name\":\"days\",\"type\":\"int\"}],\"type\":\"AccountDaysTTL\"},{\"id\":88680979,\"predicate\":\"updateUserPhone\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1815593308,\"predicate\":\"documentAttributeImageSize\",\"params\":[{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":297109817,\"predicate\":\"documentAttributeAnimated\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1662637586,\"predicate\":\"documentAttributeSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"mask\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"DocumentAttribute\"},{\"id\":250621158,\"predicate\":\"documentAttributeVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"round_message\",\"type\":\"flags.0?true\"},{\"name\":\"supports_streaming\",\"type\":\"flags.1?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":-1739392570,\"predicate\":\"documentAttributeAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"voice\",\"type\":\"flags.10?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"},{\"name\":\"waveform\",\"type\":\"flags.2?bytes\"}],\"type\":\"DocumentAttribute\"},{\"id\":358154344,\"predicate\":\"documentAttributeFilename\",\"params\":[{\"name\":\"file_name\",\"type\":\"string\"}],\"type\":\"DocumentAttribute\"},{\"id\":-244016606,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":816245886,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.Stickers\"},{\"id\":313694676,\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerPack\"},{\"id\":-395967805,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":-843329861,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.AllStickers\"},{\"id\":-1667805217,\"predicate\":\"updateReadHistoryInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":791617983,\"predicate\":\"updateReadHistoryOutbox\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2066640507,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":2139689491,\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-350980120,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"WebPage\"},{\"id\":-981018084,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-392411726,\"predicate\":\"webPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"display_url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"flags.0?string\"},{\"name\":\"site_name\",\"type\":\"flags.1?string\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"embed_url\",\"type\":\"flags.5?string\"},{\"name\":\"embed_type\",\"type\":\"flags.5?string\"},{\"name\":\"embed_width\",\"type\":\"flags.6?int\"},{\"name\":\"embed_height\",\"type\":\"flags.6?int\"},{\"name\":\"duration\",\"type\":\"flags.7?int\"},{\"name\":\"author\",\"type\":\"flags.8?string\"},{\"name\":\"document\",\"type\":\"flags.9?Document\"},{\"name\":\"cached_page\",\"type\":\"flags.10?Page\"},{\"name\":\"attributes\",\"type\":\"flags.12?Vector\"}],\"type\":\"WebPage\"},{\"id\":-1557277184,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"id\":-1392388579,\"predicate\":\"authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.0?true\"},{\"name\":\"official_app\",\"type\":\"flags.1?true\"},{\"name\":\"password_pending\",\"type\":\"flags.2?true\"},{\"name\":\"encrypted_requests_disabled\",\"type\":\"flags.3?true\"},{\"name\":\"call_requests_disabled\",\"type\":\"flags.4?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"app_name\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"Authorization\"},{\"id\":1275039392,\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorization_ttl_days\",\"type\":\"int\"},{\"name\":\"authorizations\",\"type\":\"Vector\"}],\"type\":\"account.Authorizations\"},{\"id\":-1787080453,\"predicate\":\"account.password\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_recovery\",\"type\":\"flags.0?true\"},{\"name\":\"has_secure_values\",\"type\":\"flags.1?true\"},{\"name\":\"has_password\",\"type\":\"flags.2?true\"},{\"name\":\"current_algo\",\"type\":\"flags.2?PasswordKdfAlgo\"},{\"name\":\"srp_B\",\"type\":\"flags.2?bytes\"},{\"name\":\"srp_id\",\"type\":\"flags.2?long\"},{\"name\":\"hint\",\"type\":\"flags.3?string\"},{\"name\":\"email_unconfirmed_pattern\",\"type\":\"flags.4?string\"},{\"name\":\"new_algo\",\"type\":\"PasswordKdfAlgo\"},{\"name\":\"new_secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_random\",\"type\":\"bytes\"},{\"name\":\"pending_reset_date\",\"type\":\"flags.5?int\"},{\"name\":\"login_email_pattern\",\"type\":\"flags.6?string\"}],\"type\":\"account.Password\"},{\"id\":-1705233435,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1036572727,\"predicate\":\"account.passwordInputSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"new_algo\",\"type\":\"flags.0?PasswordKdfAlgo\"},{\"name\":\"new_password_hash\",\"type\":\"flags.0?bytes\"},{\"name\":\"hint\",\"type\":\"flags.0?string\"},{\"name\":\"email\",\"type\":\"flags.1?string\"},{\"name\":\"new_secure_settings\",\"type\":\"flags.2?SecureSecretSettings\"}],\"type\":\"account.PasswordInputSettings\"},{\"id\":326715557,\"predicate\":\"auth.passwordRecovery\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"}],\"type\":\"auth.PasswordRecovery\"},{\"id\":-1052959727,\"predicate\":\"inputMediaVenue\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":784356159,\"predicate\":\"messageMediaVenue\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-1551583367,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":179611673,\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"request_needed\",\"type\":\"flags.6?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"start_date\",\"type\":\"flags.4?int\"},{\"name\":\"expire_date\",\"type\":\"flags.1?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.2?int\"},{\"name\":\"usage\",\"type\":\"flags.3?int\"},{\"name\":\"requested\",\"type\":\"flags.7?int\"},{\"name\":\"title\",\"type\":\"flags.8?string\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1516793212,\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":806110401,\"predicate\":\"chatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?true\"},{\"name\":\"broadcast\",\"type\":\"flags.1?true\"},{\"name\":\"public\",\"type\":\"flags.2?true\"},{\"name\":\"megagroup\",\"type\":\"flags.3?true\"},{\"name\":\"request_needed\",\"type\":\"flags.6?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"flags.5?string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector\"}],\"type\":\"ChatInvite\"},{\"id\":51520707,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":1757493555,\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-4838507,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1645763991,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":-2044933984,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":768691932,\"predicate\":\"stickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archived\",\"type\":\"flags.1?true\"},{\"name\":\"official\",\"type\":\"flags.2?true\"},{\"name\":\"masks\",\"type\":\"flags.3?true\"},{\"name\":\"animated\",\"type\":\"flags.5?true\"},{\"name\":\"videos\",\"type\":\"flags.6?true\"},{\"name\":\"emojis\",\"type\":\"flags.7?true\"},{\"name\":\"installed_date\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumbs\",\"type\":\"flags.4?Vector\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_version\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_document_id\",\"type\":\"flags.8?long\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":1846886166,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"keywords\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSet\"},{\"id\":-1885878744,\"predicate\":\"user\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"self\",\"type\":\"flags.10?true\"},{\"name\":\"contact\",\"type\":\"flags.11?true\"},{\"name\":\"mutual_contact\",\"type\":\"flags.12?true\"},{\"name\":\"deleted\",\"type\":\"flags.13?true\"},{\"name\":\"bot\",\"type\":\"flags.14?true\"},{\"name\":\"bot_chat_history\",\"type\":\"flags.15?true\"},{\"name\":\"bot_nochats\",\"type\":\"flags.16?true\"},{\"name\":\"verified\",\"type\":\"flags.17?true\"},{\"name\":\"restricted\",\"type\":\"flags.18?true\"},{\"name\":\"min\",\"type\":\"flags.20?true\"},{\"name\":\"bot_inline_geo\",\"type\":\"flags.21?true\"},{\"name\":\"support\",\"type\":\"flags.23?true\"},{\"name\":\"scam\",\"type\":\"flags.24?true\"},{\"name\":\"apply_min_photo\",\"type\":\"flags.25?true\"},{\"name\":\"fake\",\"type\":\"flags.26?true\"},{\"name\":\"bot_attach_menu\",\"type\":\"flags.27?true\"},{\"name\":\"premium\",\"type\":\"flags.28?true\"},{\"name\":\"attach_menu_enabled\",\"type\":\"flags.29?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"flags.0?long\"},{\"name\":\"first_name\",\"type\":\"flags.1?string\"},{\"name\":\"last_name\",\"type\":\"flags.2?string\"},{\"name\":\"username\",\"type\":\"flags.3?string\"},{\"name\":\"phone\",\"type\":\"flags.4?string\"},{\"name\":\"photo\",\"type\":\"flags.5?UserProfilePhoto\"},{\"name\":\"status\",\"type\":\"flags.6?UserStatus\"},{\"name\":\"bot_info_version\",\"type\":\"flags.14?int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.18?Vector\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"},{\"name\":\"emoji_status\",\"type\":\"flags.30?EmojiStatus\"},{\"name\":\"usernames\",\"type\":\"flags2.0?Vector\"}],\"type\":\"User\"},{\"id\":-1032140601,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":-1892676777,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"flags.0?long\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"description_photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"description_document\",\"type\":\"flags.5?Document\"},{\"name\":\"commands\",\"type\":\"flags.2?Vector\"},{\"name\":\"menu_button\",\"type\":\"flags.3?BotMenuButton\"}],\"type\":\"BotInfo\"},{\"id\":-1560655744,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2002815875,\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":-1606526075,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2035021048,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2049074735,\"predicate\":\"replyKeyboardMarkup\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"resize\",\"type\":\"flags.0?true\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"persistent\",\"type\":\"flags.4?true\"},{\"name\":\"rows\",\"type\":\"Vector\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-571955892,\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-233744186,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":-1148011883,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-100378723,\"predicate\":\"messageEntityMention\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1868782349,\"predicate\":\"messageEntityHashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1827637959,\"predicate\":\"messageEntityBotCommand\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1859134776,\"predicate\":\"messageEntityUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1692693954,\"predicate\":\"messageEntityEmail\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1117713463,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-2106619040,\"predicate\":\"messageEntityItalic\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":681706865,\"predicate\":\"messageEntityCode\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1938967520,\"predicate\":\"messageEntityPre\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":1990644519,\"predicate\":\"messageEntityTextUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":-1877614335,\"predicate\":\"updateShortSentMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":-292807034,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":-212145112,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1566230754,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":666680316,\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-2094689180,\"predicate\":\"channel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"restricted\",\"type\":\"flags.9?true\"},{\"name\":\"signatures\",\"type\":\"flags.11?true\"},{\"name\":\"min\",\"type\":\"flags.12?true\"},{\"name\":\"scam\",\"type\":\"flags.19?true\"},{\"name\":\"has_link\",\"type\":\"flags.20?true\"},{\"name\":\"has_geo\",\"type\":\"flags.21?true\"},{\"name\":\"slowmode_enabled\",\"type\":\"flags.22?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"fake\",\"type\":\"flags.25?true\"},{\"name\":\"gigagroup\",\"type\":\"flags.26?true\"},{\"name\":\"noforwards\",\"type\":\"flags.27?true\"},{\"name\":\"join_to_send\",\"type\":\"flags.28?true\"},{\"name\":\"join_request\",\"type\":\"flags.29?true\"},{\"name\":\"forum\",\"type\":\"flags.30?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"flags.13?long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"flags.6?string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"banned_rights\",\"type\":\"flags.15?ChatBannedRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"},{\"name\":\"participants_count\",\"type\":\"flags.17?int\"},{\"name\":\"usernames\",\"type\":\"flags2.0?Vector\"}],\"type\":\"Chat\"},{\"id\":399807445,\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":2131196633,\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-231385849,\"predicate\":\"channelFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_view_participants\",\"type\":\"flags.3?true\"},{\"name\":\"can_set_username\",\"type\":\"flags.6?true\"},{\"name\":\"can_set_stickers\",\"type\":\"flags.7?true\"},{\"name\":\"hidden_prehistory\",\"type\":\"flags.10?true\"},{\"name\":\"can_set_location\",\"type\":\"flags.16?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.19?true\"},{\"name\":\"can_view_stats\",\"type\":\"flags.20?true\"},{\"name\":\"blocked\",\"type\":\"flags.22?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"can_delete_channel\",\"type\":\"flags2.0?true\"},{\"name\":\"antispam\",\"type\":\"flags2.1?true\"},{\"name\":\"participants_hidden\",\"type\":\"flags2.2?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags2.3?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants_count\",\"type\":\"flags.0?int\"},{\"name\":\"admins_count\",\"type\":\"flags.1?int\"},{\"name\":\"kicked_count\",\"type\":\"flags.2?int\"},{\"name\":\"banned_count\",\"type\":\"flags.2?int\"},{\"name\":\"online_count\",\"type\":\"flags.13?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chat_photo\",\"type\":\"Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.23?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"Vector\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?long\"},{\"name\":\"migrated_from_max_id\",\"type\":\"flags.4?int\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.5?int\"},{\"name\":\"stickerset\",\"type\":\"flags.8?StickerSet\"},{\"name\":\"available_min_id\",\"type\":\"flags.9?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"linked_chat_id\",\"type\":\"flags.14?long\"},{\"name\":\"location\",\"type\":\"flags.15?ChannelLocation\"},{\"name\":\"slowmode_seconds\",\"type\":\"flags.17?int\"},{\"name\":\"slowmode_next_send_date\",\"type\":\"flags.18?int\"},{\"name\":\"stats_dc\",\"type\":\"flags.12?int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"flags.21?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.24?int\"},{\"name\":\"pending_suggestions\",\"type\":\"flags.25?Vector\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.27?string\"},{\"name\":\"requests_pending\",\"type\":\"flags.28?int\"},{\"name\":\"recent_requesters\",\"type\":\"flags.28?Vector\"},{\"name\":\"default_send_as\",\"type\":\"flags.29?Peer\"},{\"name\":\"available_reactions\",\"type\":\"flags.30?ChatReactions\"}],\"type\":\"ChatFull\"},{\"id\":182649427,\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"id\":-948520370,\"predicate\":\"messages.channelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"topics\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1781355374,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":277713951,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1666927625,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":1656358105,\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1842450928,\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1020437742,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-232346616,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1041346555,\"predicate\":\"updates.channelDifferenceEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1531132162,\"predicate\":\"updates.channelDifferenceTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"dialog\",\"type\":\"Dialog\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":543450958,\"predicate\":\"updates.channelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1798033689,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":-847783593,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":-1072953408,\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":900251559,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_request\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":803602899,\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":-566281095,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1268741783,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1548400251,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1699676497,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-541588713,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":-462696732,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"ChatParticipant\"},{\"id\":-1600962725,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-674602590,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-519864430,\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-365344535,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-1328445861,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2013922064,\"predicate\":\"help.termsOfService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"DataJSON\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":1753886890,\"predicate\":\"updateNewStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"messages.StickerSet\"}],\"type\":\"Update\"},{\"id\":196268545,\"predicate\":\"updateStickerSetsOrder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":834816008,\"predicate\":\"updateStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"}],\"type\":\"Update\"},{\"id\":-402498398,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":-2069878259,\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"gifs\",\"type\":\"Vector\"}],\"type\":\"messages.SavedGifs\"},{\"id\":-1821035490,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":864077702,\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1036876423,\"predicate\":\"inputBotInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-2000710887,\"predicate\":\"inputBotInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?InputWebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?InputWebDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1984755728,\"predicate\":\"botInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1937807902,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":295067450,\"predicate\":\"botInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?WebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1803769784,\"predicate\":\"messages.botResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"next_offset\",\"type\":\"flags.1?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.2?InlineBotSwitchPM\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.BotResults\"},{\"id\":1232025500,\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":317794823,\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":1358283666,\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":928101534,\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1107622874,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1343122938,\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1571494644,\"predicate\":\"exportedMessageLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"html\",\"type\":\"string\"}],\"type\":\"ExportedMessageLink\"},{\"id\":1601666510,\"predicate\":\"messageFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"imported\",\"type\":\"flags.7?true\"},{\"name\":\"from_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.5?string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"post_author\",\"type\":\"flags.3?string\"},{\"name\":\"saved_from_peer\",\"type\":\"flags.4?Peer\"},{\"name\":\"saved_from_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"psa_type\",\"type\":\"flags.6?string\"}],\"type\":\"MessageFwdHeader\"},{\"id\":457133559,\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1799538451,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1923290508,\"predicate\":\"auth.codeTypeSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1948046307,\"predicate\":\"auth.codeTypeCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":577556219,\"predicate\":\"auth.codeTypeFlashCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1035688326,\"predicate\":\"auth.sentCodeTypeApp\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1073693790,\"predicate\":\"auth.sentCodeTypeSms\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1398007207,\"predicate\":\"auth.sentCodeTypeCall\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1425815847,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":629866245,\"predicate\":\"keyboardButtonUrl\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":901503851,\"predicate\":\"keyboardButtonCallback\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requires_password\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"KeyboardButton\"},{\"id\":-1318425559,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-59151553,\"predicate\":\"keyboardButtonRequestGeoLocation\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":90744648,\"predicate\":\"keyboardButtonSwitchInline\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same_peer\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1218642516,\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"ReplyMarkup\"},{\"id\":911761060,\"predicate\":\"messages.botCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"has_url\",\"type\":\"flags.3?true\"},{\"name\":\"native_ui\",\"type\":\"flags.4?true\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-1177566067,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":649453030,\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":-469536605,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1768777083,\"predicate\":\"inputBotInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1098628881,\"predicate\":\"inputBotInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-1494368259,\"predicate\":\"inputBotInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":85477117,\"predicate\":\"botInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1970903652,\"predicate\":\"botInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":416402882,\"predicate\":\"botInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1462213465,\"predicate\":\"inputBotInlineResultPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"InputPhoto\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":-459324,\"predicate\":\"inputBotInlineResultDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":400266251,\"predicate\":\"botInlineMediaResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1995686519,\"predicate\":\"inputBotInlineMessageID\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":1763610706,\"predicate\":\"updateInlineBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"msg_id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":1008755359,\"predicate\":\"inlineBotSwitchPM\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"InlineBotSwitchPM\"},{\"id\":863093588,\"predicate\":\"messages.peerDialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-305282981,\"predicate\":\"topPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"rating\",\"type\":\"double\"}],\"type\":\"TopPeer\"},{\"id\":-1419371685,\"predicate\":\"topPeerCategoryBotsPM\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":344356834,\"predicate\":\"topPeerCategoryBotsInline\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":104314861,\"predicate\":\"topPeerCategoryCorrespondents\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1122524854,\"predicate\":\"topPeerCategoryGroups\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":371037736,\"predicate\":\"topPeerCategoryChannels\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-75283823,\"predicate\":\"topPeerCategoryPeers\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":-567906571,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":1891070632,\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.TopPeers\"},{\"id\":-595914432,\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageEntity\"},{\"id\":546203849,\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":975236280,\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1218471511,\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":457829485,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":453805082,\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":-40996577,\"predicate\":\"draftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"DraftMessage\"},{\"id\":-1615153660,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-958657434,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1103615738,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"},{\"name\":\"unread\",\"type\":\"Vector\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1461528386,\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":186120336,\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":-1999405994,\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"dates\",\"type\":\"Vector\"}],\"type\":\"messages.RecentStickers\"},{\"id\":-1706939360,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":1338747336,\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":946083368,\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":904138920,\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":1678812626,\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1574314746,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":861169551,\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":-440664550,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-78455655,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":872932635,\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1361650766,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":-1744710921,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1251549527,\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":70813275,\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":-1107729093,\"predicate\":\"game\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"}],\"type\":\"Game\"},{\"id\":1336154098,\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1262639204,\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-38694904,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":-750828557,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":53231223,\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":-1020139510,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":1358175439,\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1834538890,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1940093419,\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":-1707344487,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.HighScores\"},{\"id\":1258196845,\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":791390623,\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1663561404,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-599948721,\"predicate\":\"textEmpty\",\"params\":[],\"type\":\"RichText\"},{\"id\":1950782688,\"predicate\":\"textPlain\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":1730456516,\"predicate\":\"textBold\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-653089380,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1054465340,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1678197867,\"predicate\":\"textStrike\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1816074681,\"predicate\":\"textFixed\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1009288385,\"predicate\":\"textUrl\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"}],\"type\":\"RichText\"},{\"id\":-564523562,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2120376535,\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector\"}],\"type\":\"RichText\"},{\"id\":324435594,\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":1890305021,\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1879401953,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1162877472,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":-1076861716,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-248793375,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1182402406,\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1066346178,\"predicate\":\"pageBlockPreformatted\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":1216809369,\"predicate\":\"pageBlockFooter\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-618614392,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":-837994576,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":-454524911,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":641563686,\"predicate\":\"pageBlockBlockquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1329878739,\"predicate\":\"pageBlockPullquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":391759200,\"predicate\":\"pageBlockPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"webpage_id\",\"type\":\"flags.0?long\"}],\"type\":\"PageBlock\"},{\"id\":2089805750,\"predicate\":\"pageBlockVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autoplay\",\"type\":\"flags.0?true\"},{\"name\":\"loop\",\"type\":\"flags.1?true\"},{\"name\":\"video_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":972174080,\"predicate\":\"pageBlockCover\",\"params\":[{\"name\":\"cover\",\"type\":\"PageBlock\"}],\"type\":\"PageBlock\"},{\"id\":-1468953147,\"predicate\":\"pageBlockEmbed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"full_width\",\"type\":\"flags.0?true\"},{\"name\":\"allow_scrolling\",\"type\":\"flags.3?true\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"html\",\"type\":\"flags.2?string\"},{\"name\":\"poster_photo_id\",\"type\":\"flags.4?long\"},{\"name\":\"w\",\"type\":\"flags.5?int\"},{\"name\":\"h\",\"type\":\"flags.5?int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-229005301,\"predicate\":\"pageBlockEmbedPost\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"author_photo_id\",\"type\":\"long\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1705048653,\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":52401552,\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1930545681,\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":-88417185,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1030105979,\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-580219064,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-2048646399,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-527056480,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1471006352,\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-84416311,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1852826908,\"predicate\":\"updateDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-99664734,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":2104790276,\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":-2095595325,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-1684914010,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-886477832,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":1048946971,\"predicate\":\"invoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"test\",\"type\":\"flags.0?true\"},{\"name\":\"name_requested\",\"type\":\"flags.1?true\"},{\"name\":\"phone_requested\",\"type\":\"flags.2?true\"},{\"name\":\"email_requested\",\"type\":\"flags.3?true\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.4?true\"},{\"name\":\"flexible\",\"type\":\"flags.5?true\"},{\"name\":\"phone_to_provider\",\"type\":\"flags.6?true\"},{\"name\":\"email_to_provider\",\"type\":\"flags.7?true\"},{\"name\":\"recurring\",\"type\":\"flags.9?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"},{\"name\":\"max_tip_amount\",\"type\":\"flags.8?long\"},{\"name\":\"suggested_tip_amounts\",\"type\":\"flags.8?Vector\"},{\"name\":\"recurring_terms_url\",\"type\":\"flags.9?string\"}],\"type\":\"Invoice\"},{\"id\":-1900697899,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"start_param\",\"type\":\"flags.1?string\"},{\"name\":\"extended_media\",\"type\":\"flags.2?InputMedia\"}],\"type\":\"InputMedia\"},{\"id\":-368917890,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"id\":-1892568281,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recurring_init\",\"type\":\"flags.2?true\"},{\"name\":\"recurring_used\",\"type\":\"flags.3?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"charge\",\"type\":\"PaymentCharge\"}],\"type\":\"MessageAction\"},{\"id\":-156940077,\"predicate\":\"messageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"receipt_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"},{\"name\":\"extended_media\",\"type\":\"flags.4?MessageExtendedMedia\"}],\"type\":\"MessageMedia\"},{\"id\":512535275,\"predicate\":\"postAddress\",\"params\":[{\"name\":\"street_line1\",\"type\":\"string\"},{\"name\":\"street_line2\",\"type\":\"string\"},{\"name\":\"city\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"post_code\",\"type\":\"string\"}],\"type\":\"PostAddress\"},{\"id\":-1868808300,\"predicate\":\"paymentRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"flags.0?string\"},{\"name\":\"phone\",\"type\":\"flags.1?string\"},{\"name\":\"email\",\"type\":\"flags.2?string\"},{\"name\":\"shipping_address\",\"type\":\"flags.3?PostAddress\"}],\"type\":\"PaymentRequestedInfo\"},{\"id\":-1344716869,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1776926890,\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recurring_init\",\"type\":\"flags.2?true\"},{\"name\":\"recurring_used\",\"type\":\"flags.3?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"invoice_slug\",\"type\":\"flags.0?string\"}],\"type\":\"MessageAction\"},{\"id\":-842892769,\"predicate\":\"paymentSavedCredentialsCard\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentSavedCredentials\"},{\"id\":475467473,\"predicate\":\"webDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":-1678949555,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"InputWebDocument\"},{\"id\":-1036396922,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":568808380,\"predicate\":\"upload.webFile\",\"params\":[{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"file_type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.WebFile\"},{\"id\":-1610250415,\"predicate\":\"payments.paymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_save_credentials\",\"type\":\"flags.2?true\"},{\"name\":\"password_missing\",\"type\":\"flags.3?true\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"additional_methods\",\"type\":\"flags.6?Vector\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentForm\"},{\"id\":-784000893,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":1314881805,\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1891958275,\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"provider_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping\",\"type\":\"flags.1?ShippingOption\"},{\"name\":\"tip_amount\",\"type\":\"flags.3?long\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"credentials_title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-74456004,\"predicate\":\"payments.savedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_saved_credentials\",\"type\":\"flags.1?true\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"}],\"type\":\"payments.SavedInfo\"},{\"id\":-1056001329,\"predicate\":\"inputPaymentCredentialsSaved\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tmp_password\",\"type\":\"bytes\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":873977640,\"predicate\":\"inputPaymentCredentials\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-614138572,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":-1239335713,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"}],\"type\":\"ShippingOption\"},{\"id\":-1246823043,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":-1934976362,\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-6249322,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"InputStickerSetItem\"},{\"id\":-1425052898,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":506920429,\"predicate\":\"inputPhoneCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPhoneCall\"},{\"id\":1399245077,\"predicate\":\"phoneCallEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"PhoneCall\"},{\"id\":-987599081,\"predicate\":\"phoneCallWaiting\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":347139340,\"predicate\":\"phoneCallRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":912311057,\"predicate\":\"phoneCallAccepted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-1770029977,\"predicate\":\"phoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"p2p_allowed\",\"type\":\"flags.5?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector\"},{\"name\":\"start_date\",\"type\":\"int\"}],\"type\":\"PhoneCall\"},{\"id\":1355435489,\"predicate\":\"phoneCallDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_rating\",\"type\":\"flags.2?true\"},{\"name\":\"need_debug\",\"type\":\"flags.3?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"PhoneCall\"},{\"id\":-1665063993,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tcp\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"id\":-58224696,\"predicate\":\"phoneCallProtocol\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"udp_p2p\",\"type\":\"flags.0?true\"},{\"name\":\"udp_reflector\",\"type\":\"flags.1?true\"},{\"name\":\"min_layer\",\"type\":\"int\"},{\"name\":\"max_layer\",\"type\":\"int\"},{\"name\":\"library_versions\",\"type\":\"Vector\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":-326966976,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.PhoneCall\"},{\"id\":-2134272152,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":-2132731265,\"predicate\":\"messageActionPhoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call_id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"MessageAction\"},{\"id\":2054952868,\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1253451181,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1997373508,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":608050278,\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-242427324,\"predicate\":\"upload.fileCdnRedirect\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"encryption_key\",\"type\":\"bytes\"},{\"name\":\"encryption_iv\",\"type\":\"bytes\"},{\"name\":\"file_hashes\",\"type\":\"Vector\"}],\"type\":\"upload.File\"},{\"id\":-290921362,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1449145777,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-914167110,\"predicate\":\"cdnPublicKey\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"CdnPublicKey\"},{\"id\":1462101002,\"predicate\":\"cdnConfig\",\"params\":[{\"name\":\"public_keys\",\"type\":\"Vector\"}],\"type\":\"CdnConfig\"},{\"id\":-283684427,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":-892239370,\"predicate\":\"langPackString\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":1816636575,\"predicate\":\"langPackStringPluralized\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"zero_value\",\"type\":\"flags.0?string\"},{\"name\":\"one_value\",\"type\":\"flags.1?string\"},{\"name\":\"two_value\",\"type\":\"flags.2?string\"},{\"name\":\"few_value\",\"type\":\"flags.3?string\"},{\"name\":\"many_value\",\"type\":\"flags.4?string\"},{\"name\":\"other_value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":695856818,\"predicate\":\"langPackStringDeleted\",\"params\":[{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":-209337866,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector\"}],\"type\":\"LangPackDifference\"},{\"id\":-288727837,\"predicate\":\"langPackLanguage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"official\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.2?true\"},{\"name\":\"beta\",\"type\":\"flags.3?true\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"native_name\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"base_lang_code\",\"type\":\"flags.1?string\"},{\"name\":\"plural_code\",\"type\":\"string\"},{\"name\":\"strings_count\",\"type\":\"int\"},{\"name\":\"translated_count\",\"type\":\"int\"},{\"name\":\"translations_url\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":1180041828,\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1442983757,\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":885242707,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?long\"},{\"name\":\"promoted_by\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":1844969806,\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"kicked_by\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":338142689,\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":106343499,\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-421545947,\"predicate\":\"channelAdminLogEventActionChangeTitle\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1427671598,\"predicate\":\"channelAdminLogEventActionChangeAbout\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1783299128,\"predicate\":\"channelAdminLogEventActionChangeUsername\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1129042607,\"predicate\":\"channelAdminLogEventActionChangePhoto\",\"params\":[{\"name\":\"prev_photo\",\"type\":\"Photo\"},{\"name\":\"new_photo\",\"type\":\"Photo\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":460916654,\"predicate\":\"channelAdminLogEventActionToggleInvites\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":648939889,\"predicate\":\"channelAdminLogEventActionToggleSignatures\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-370660328,\"predicate\":\"channelAdminLogEventActionUpdatePinned\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1889215493,\"predicate\":\"channelAdminLogEventActionEditMessage\",\"params\":[{\"name\":\"prev_message\",\"type\":\"Message\"},{\"name\":\"new_message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1121994683,\"predicate\":\"channelAdminLogEventActionDeleteMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":405815507,\"predicate\":\"channelAdminLogEventActionParticipantJoin\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-124291086,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-484690728,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-422036098,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-714643696,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":531458253,\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":-309659827,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-368018716,\"predicate\":\"channelAdminLogEventsFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join\",\"type\":\"flags.0?true\"},{\"name\":\"leave\",\"type\":\"flags.1?true\"},{\"name\":\"invite\",\"type\":\"flags.2?true\"},{\"name\":\"ban\",\"type\":\"flags.3?true\"},{\"name\":\"unban\",\"type\":\"flags.4?true\"},{\"name\":\"kick\",\"type\":\"flags.5?true\"},{\"name\":\"unkick\",\"type\":\"flags.6?true\"},{\"name\":\"promote\",\"type\":\"flags.7?true\"},{\"name\":\"demote\",\"type\":\"flags.8?true\"},{\"name\":\"info\",\"type\":\"flags.9?true\"},{\"name\":\"settings\",\"type\":\"flags.10?true\"},{\"name\":\"pinned\",\"type\":\"flags.11?true\"},{\"name\":\"edit\",\"type\":\"flags.12?true\"},{\"name\":\"delete\",\"type\":\"flags.13?true\"},{\"name\":\"group_call\",\"type\":\"flags.14?true\"},{\"name\":\"invites\",\"type\":\"flags.15?true\"},{\"name\":\"send\",\"type\":\"flags.16?true\"},{\"name\":\"forums\",\"type\":\"flags.17?true\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":511092620,\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-2143067670,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1558266229,\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":1200788123,\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1634752813,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":750063767,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-451831443,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-366410403,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1040652646,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1887741886,\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":-1312568665,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-85549226,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":178373535,\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-419271411,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-530392189,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1304443240,\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1599903217,\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1759532989,\"predicate\":\"inputMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stopped\",\"type\":\"flags.0?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.2?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"}],\"type\":\"InputMedia\"},{\"id\":-1186937242,\"predicate\":\"messageMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.1?int\"}],\"type\":\"MessageMedia\"},{\"id\":1189204285,\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1188296222,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1294306862,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"RecentMeUrl\"},{\"id\":-347535331,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1140172836,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":235081943,\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-266911767,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":1951620897,\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":482797855,\"predicate\":\"inputSingleMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"}],\"type\":\"InputSingleMedia\"},{\"id\":-1493633966,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"domain\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"WebAuthorization\"},{\"id\":-313079300,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":-1502174430,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-1160215659,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-2037963464,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":-1687559349,\"predicate\":\"messageEntityPhone\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1280209983,\"predicate\":\"messageEntityCashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1410748418,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-55902537,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":-445792507,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":223655517,\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":-1963942446,\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-207944868,\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":-104284986,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":1968737087,\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":-483352705,\"predicate\":\"help.termsOfServiceUpdateEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":686618977,\"predicate\":\"help.termsOfServiceUpdate\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"terms_of_service\",\"type\":\"help.TermsOfService\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":859091184,\"predicate\":\"inputSecureFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"InputSecureFile\"},{\"id\":1399317950,\"predicate\":\"inputSecureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputSecureFile\"},{\"id\":-876089816,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":1679398724,\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":2097791614,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":-1964327229,\"predicate\":\"secureData\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureData\"},{\"id\":2103482845,\"predicate\":\"securePlainPhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":569137759,\"predicate\":\"securePlainEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":-1658158621,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":1034709504,\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":115615172,\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1596951477,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1717268701,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-874308058,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-63531698,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1995211763,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1954007928,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1713143702,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-368907213,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1289704741,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1908627474,\"predicate\":\"secureValueTypeEmail\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":411017418,\"predicate\":\"secureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?SecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?SecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?SecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":-618540889,\"predicate\":\"inputSecureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?InputSecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?InputSecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?InputSecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":-316748368,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":-391902247,\"predicate\":\"secureValueErrorData\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"field\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":12467706,\"predicate\":\"secureValueErrorFrontSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2037765467,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-449327402,\"predicate\":\"secureValueErrorSelfie\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2054162547,\"predicate\":\"secureValueErrorFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":1717706985,\"predicate\":\"secureValueErrorFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":871426631,\"predicate\":\"secureCredentialsEncrypted\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureCredentialsEncrypted\"},{\"id\":-1389486888,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector\"},{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"errors\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-2128640689,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"id\":455635795,\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":-648257196,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":1722786150,\"predicate\":\"help.deepLinkInfoEmpty\",\"params\":[],\"type\":\"help.DeepLinkInfo\"},{\"id\":1783556146,\"predicate\":\"help.deepLinkInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"update_app\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":289586518,\"predicate\":\"savedPhoneContact\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"SavedContact\"},{\"id\":1304052993,\"predicate\":\"account.takeout\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"account.Takeout\"},{\"id\":700340377,\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"id\":-513517117,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-253500010,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1625153079,\"predicate\":\"inputWebFileGeoPointLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputWebFileLocation\"},{\"id\":-1255369827,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":-1685456582,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-732254058,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":4883767,\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-1141711456,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-2042159726,\"predicate\":\"securePasswordKdfAlgoSHA512\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":354925740,\"predicate\":\"secureSecretSettings\",\"params\":[{\"name\":\"secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_secret\",\"type\":\"bytes\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureSecretSettings\"},{\"id\":982592842,\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":-1736378792,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-763367294,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-2036501105,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-1592506512,\"predicate\":\"secureValueErrorTranslationFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":878931416,\"predicate\":\"secureValueErrorTranslationFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2103600678,\"predicate\":\"secureRequiredType\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"native_names\",\"type\":\"flags.0?true\"},{\"name\":\"selfie_required\",\"type\":\"flags.1?true\"},{\"name\":\"translation_required\",\"type\":\"flags.2?true\"},{\"name\":\"type\",\"type\":\"SecureValueType\"}],\"type\":\"SecureRequiredType\"},{\"id\":41187252,\"predicate\":\"secureRequiredTypeOneOf\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"SecureRequiredType\"},{\"id\":-1078332329,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":-1600596305,\"predicate\":\"help.passportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"countries_langs\",\"type\":\"DataJSON\"}],\"type\":\"help.PassportConfig\"},{\"id\":488313413,\"predicate\":\"inputAppEvent\",\"params\":[{\"name\":\"time\",\"type\":\"double\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"JSONValue\"}],\"type\":\"InputAppEvent\"},{\"id\":-1059185703,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":1064139624,\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":-952869270,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":736157604,\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":-1222740358,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":-146520221,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1715350371,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1311015810,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-703403793,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-311786236,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-939827711,\"predicate\":\"textSuperscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":55281185,\"predicate\":\"textMarked\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":483104362,\"predicate\":\"textPhone\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":136105807,\"predicate\":\"textImage\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"RichText\"},{\"id\":504660880,\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":878078826,\"predicate\":\"pageTableCell\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"header\",\"type\":\"flags.0?true\"},{\"name\":\"align_center\",\"type\":\"flags.3?true\"},{\"name\":\"align_right\",\"type\":\"flags.4?true\"},{\"name\":\"valign_middle\",\"type\":\"flags.5?true\"},{\"name\":\"valign_bottom\",\"type\":\"flags.6?true\"},{\"name\":\"text\",\"type\":\"flags.7?RichText\"},{\"name\":\"colspan\",\"type\":\"flags.1?int\"},{\"name\":\"rowspan\",\"type\":\"flags.2?int\"}],\"type\":\"PageTableCell\"},{\"id\":-524237339,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector\"}],\"type\":\"PageTableRow\"},{\"id\":-1085412734,\"predicate\":\"pageBlockTable\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bordered\",\"type\":\"flags.0?true\"},{\"name\":\"striped\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1869903447,\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":-1188055347,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":635466748,\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListItem\"},{\"id\":1577484359,\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1730311882,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1702174239,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1987480557,\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1282352120,\"predicate\":\"pageRelatedArticle\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo_id\",\"type\":\"flags.2?long\"},{\"name\":\"author\",\"type\":\"flags.3?string\"},{\"name\":\"published_date\",\"type\":\"flags.4?int\"}],\"type\":\"PageRelatedArticle\"},{\"id\":370236054,\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":-1538310410,\"predicate\":\"pageBlockMap\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-1738178803,\"predicate\":\"page\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"part\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.1?true\"},{\"name\":\"v2\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":-610373422,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":961092808,\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":894777186,\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":-1945767479,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":-206688531,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":32192344,\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":-202219658,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1398708869,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":1823064809,\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":-2032041631,\"predicate\":\"poll\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"closed\",\"type\":\"flags.0?true\"},{\"name\":\"public_voters\",\"type\":\"flags.1?true\"},{\"name\":\"multiple_choice\",\"type\":\"flags.2?true\"},{\"name\":\"quiz\",\"type\":\"flags.3?true\"},{\"name\":\"question\",\"type\":\"string\"},{\"name\":\"answers\",\"type\":\"Vector\"},{\"name\":\"close_period\",\"type\":\"flags.4?int\"},{\"name\":\"close_date\",\"type\":\"flags.5?int\"}],\"type\":\"Poll\"},{\"id\":997055186,\"predicate\":\"pollAnswerVoters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen\",\"type\":\"flags.0?true\"},{\"name\":\"correct\",\"type\":\"flags.1?true\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"voters\",\"type\":\"int\"}],\"type\":\"PollAnswerVoters\"},{\"id\":-591909213,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector\"}],\"type\":\"PollResults\"},{\"id\":261416433,\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"InputMedia\"},{\"id\":1272375192,\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":-264117680,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":1202287072,\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-525288402,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":1605510357,\"predicate\":\"chatAdminRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"change_info\",\"type\":\"flags.0?true\"},{\"name\":\"post_messages\",\"type\":\"flags.1?true\"},{\"name\":\"edit_messages\",\"type\":\"flags.2?true\"},{\"name\":\"delete_messages\",\"type\":\"flags.3?true\"},{\"name\":\"ban_users\",\"type\":\"flags.4?true\"},{\"name\":\"invite_users\",\"type\":\"flags.5?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.7?true\"},{\"name\":\"add_admins\",\"type\":\"flags.9?true\"},{\"name\":\"anonymous\",\"type\":\"flags.10?true\"},{\"name\":\"manage_call\",\"type\":\"flags.11?true\"},{\"name\":\"other\",\"type\":\"flags.12?true\"},{\"name\":\"manage_topics\",\"type\":\"flags.13?true\"}],\"type\":\"ChatAdminRights\"},{\"id\":-1626209256,\"predicate\":\"chatBannedRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"view_messages\",\"type\":\"flags.0?true\"},{\"name\":\"send_messages\",\"type\":\"flags.1?true\"},{\"name\":\"send_media\",\"type\":\"flags.2?true\"},{\"name\":\"send_stickers\",\"type\":\"flags.3?true\"},{\"name\":\"send_gifs\",\"type\":\"flags.4?true\"},{\"name\":\"send_games\",\"type\":\"flags.5?true\"},{\"name\":\"send_inline\",\"type\":\"flags.6?true\"},{\"name\":\"embed_links\",\"type\":\"flags.7?true\"},{\"name\":\"send_polls\",\"type\":\"flags.8?true\"},{\"name\":\"change_info\",\"type\":\"flags.10?true\"},{\"name\":\"invite_users\",\"type\":\"flags.15?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.17?true\"},{\"name\":\"manage_topics\",\"type\":\"flags.18?true\"},{\"name\":\"send_photos\",\"type\":\"flags.19?true\"},{\"name\":\"send_videos\",\"type\":\"flags.20?true\"},{\"name\":\"send_roundvideos\",\"type\":\"flags.21?true\"},{\"name\":\"send_audios\",\"type\":\"flags.22?true\"},{\"name\":\"send_voices\",\"type\":\"flags.23?true\"},{\"name\":\"send_docs\",\"type\":\"flags.24?true\"},{\"name\":\"send_plain\",\"type\":\"flags.25?true\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":1421875280,\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-433014407,\"predicate\":\"inputWallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":1913199744,\"predicate\":\"inputWallPaperSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputWallPaper\"},{\"id\":-1150621555,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":771095562,\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1895328189,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":471437699,\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":-842824308,\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"account.WallPapers\"},{\"id\":-1390068360,\"predicate\":\"codeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_flashcall\",\"type\":\"flags.0?true\"},{\"name\":\"current_number\",\"type\":\"flags.1?true\"},{\"name\":\"allow_app_hash\",\"type\":\"flags.4?true\"},{\"name\":\"allow_missed_call\",\"type\":\"flags.5?true\"},{\"name\":\"allow_firebase\",\"type\":\"flags.7?true\"},{\"name\":\"logout_tokens\",\"type\":\"flags.6?Vector\"},{\"name\":\"token\",\"type\":\"flags.8?string\"},{\"name\":\"app_sandbox\",\"type\":\"flags.8?Bool\"}],\"type\":\"CodeSettings\"},{\"id\":499236004,\"predicate\":\"wallPaperSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blur\",\"type\":\"flags.1?true\"},{\"name\":\"motion\",\"type\":\"flags.2?true\"},{\"name\":\"background_color\",\"type\":\"flags.0?int\"},{\"name\":\"second_background_color\",\"type\":\"flags.4?int\"},{\"name\":\"third_background_color\",\"type\":\"flags.5?int\"},{\"name\":\"fourth_background_color\",\"type\":\"flags.6?int\"},{\"name\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"}],\"type\":\"WallPaperSettings\"},{\"id\":-1896171181,\"predicate\":\"autoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"video_preload_large\",\"type\":\"flags.1?true\"},{\"name\":\"audio_preload_next\",\"type\":\"flags.2?true\"},{\"name\":\"phonecalls_less_data\",\"type\":\"flags.3?true\"},{\"name\":\"photo_size_max\",\"type\":\"int\"},{\"name\":\"video_size_max\",\"type\":\"long\"},{\"name\":\"file_size_max\",\"type\":\"long\"},{\"name\":\"video_upload_maxbitrate\",\"type\":\"int\"}],\"type\":\"AutoDownloadSettings\"},{\"id\":1674235686,\"predicate\":\"account.autoDownloadSettings\",\"params\":[{\"name\":\"low\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"medium\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"high\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"account.AutoDownloadSettings\"},{\"id\":-709641735,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":594408994,\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":1556570557,\"predicate\":\"emojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"keywords\",\"type\":\"Vector\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":-1519029347,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":-1275374751,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":-1529000952,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1777096355,\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1461304012,\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1777000467,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1075322878,\"predicate\":\"inputPhotoFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":-667654413,\"predicate\":\"inputPhotoLegacyFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":925204121,\"predicate\":\"inputPeerPhotoFileLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-1652231205,\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb_version\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-11252123,\"predicate\":\"folder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autofill_new_broadcasts\",\"type\":\"flags.0?true\"},{\"name\":\"autofill_public_groups\",\"type\":\"flags.1?true\"},{\"name\":\"autofill_new_correspondents\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.3?ChatPhoto\"}],\"type\":\"Folder\"},{\"id\":1908216652,\"predicate\":\"dialogFolder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"folder\",\"type\":\"Folder\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"unread_muted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_muted_messages_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_messages_count\",\"type\":\"int\"}],\"type\":\"Dialog\"},{\"id\":1684014375,\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":1363483106,\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":-70073706,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":-373643672,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":422972864,\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":497305826,\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":1536380829,\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1468331492,\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-1121318848,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":55761658,\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-778378131,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1472172887,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-68239120,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":84703944,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"long\"},{\"name\":\"new_value\",\"type\":\"long\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-398136321,\"predicate\":\"messages.searchCounter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SearchCounter\"},{\"id\":280464681,\"predicate\":\"keyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":-802258988,\"predicate\":\"inputKeyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.1?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":-1831650802,\"predicate\":\"urlAuthResultRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"User\"},{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1886646706,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1445536993,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":-2079962673,\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-380694650,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":1796427406,\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1103656293,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-1672577397,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1090087980,\"predicate\":\"messageEntityStrike\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":34469328,\"predicate\":\"messageEntityBlockquote\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1786671974,\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":-1078612597,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":547062491,\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":-901375139,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":-1263546448,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":241923758,\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-606798099,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":1401984889,\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1148485274,\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":-666824391,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":42402760,\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":967122427,\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":-1870238482,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-797791052,\"predicate\":\"restrictionReason\",\"params\":[{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RestrictionReason\"},{\"id\":1012306921,\"predicate\":\"inputTheme\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputTheme\"},{\"id\":-175567375,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":-1609668650,\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"for_chat\",\"type\":\"flags.5?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?Document\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"},{\"name\":\"emoticon\",\"type\":\"flags.6?string\"},{\"name\":\"installs_count\",\"type\":\"flags.4?int\"}],\"type\":\"Theme\"},{\"id\":-199313886,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":-1707242387,\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"themes\",\"type\":\"Vector\"}],\"type\":\"account.Themes\"},{\"id\":-2112423005,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":-786326563,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1124062251,\"predicate\":\"privacyKeyAddedByPhone\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-2027964103,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1448076945,\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":1654593920,\"predicate\":\"auth.loginToken\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":110008598,\"predicate\":\"auth.loginTokenMigrateTo\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":957176926,\"predicate\":\"auth.loginTokenSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.LoginToken\"},{\"id\":1474462241,\"predicate\":\"account.contentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"sensitive_can_change\",\"type\":\"flags.1?true\"}],\"type\":\"account.ContentSettings\"},{\"id\":-1456996667,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.InactiveChats\"},{\"id\":-1012849566,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-69724536,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1212997976,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1834973166,\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1527845466,\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1770371538,\"predicate\":\"inputWallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":-528465642,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":-1881255857,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message_colors_animated\",\"type\":\"flags.2?true\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"outbox_accent_color\",\"type\":\"flags.3?int\"},{\"name\":\"message_colors\",\"type\":\"flags.0?Vector\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":-94849324,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message_colors_animated\",\"type\":\"flags.2?true\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"outbox_accent_color\",\"type\":\"flags.3?int\"},{\"name\":\"message_colors\",\"type\":\"flags.0?Vector\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":1421174295,\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":274961865,\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":886196148,\"predicate\":\"messageUserVote\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":1017491692,\"predicate\":\"messageUserVoteInputOption\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":-1973033641,\"predicate\":\"messageUserVoteMultiple\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":136574537,\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":-1144565411,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1981704948,\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-177732982,\"predicate\":\"bankCardOpenUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"BankCardOpenUrl\"},{\"id\":1042605427,\"predicate\":\"payments.bankCardData\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"open_urls\",\"type\":\"Vector\"}],\"type\":\"payments.BankCardData\"},{\"id\":-118740917,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":1949890536,\"predicate\":\"dialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.1?true\"},{\"name\":\"groups\",\"type\":\"flags.2?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.3?true\"},{\"name\":\"bots\",\"type\":\"flags.4?true\"},{\"name\":\"exclude_muted\",\"type\":\"flags.11?true\"},{\"name\":\"exclude_read\",\"type\":\"flags.12?true\"},{\"name\":\"exclude_archived\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"pinned_peers\",\"type\":\"Vector\"},{\"name\":\"include_peers\",\"type\":\"Vector\"},{\"name\":\"exclude_peers\",\"type\":\"Vector\"}],\"type\":\"DialogFilter\"},{\"id\":2004110666,\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":654302845,\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":-1512627963,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":889491791,\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":-1237848657,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":-884757282,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":-875679776,\"predicate\":\"statsPercentValue\",\"params\":[{\"name\":\"part\",\"type\":\"double\"},{\"name\":\"total\",\"type\":\"double\"}],\"type\":\"StatsPercentValue\"},{\"id\":1244130093,\"predicate\":\"statsGraphAsync\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1092839390,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1901828938,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":-1387279939,\"predicate\":\"messageInteractionCounters\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"MessageInteractionCounters\"},{\"id\":-1107852396,\"predicate\":\"stats.broadcastStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"followers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"enabled_notifications\",\"type\":\"StatsPercentValue\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"followers_graph\",\"type\":\"StatsGraph\"},{\"name\":\"mute_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"iv_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"views_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_followers_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"recent_message_interactions\",\"type\":\"Vector\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":-428884101,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":1065280907,\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-427863538,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-1728664459,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":-1942390465,\"predicate\":\"help.promoData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"proxy\",\"type\":\"flags.0?true\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":-567037804,\"predicate\":\"videoSize\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"video_start_ts\",\"type\":\"flags.0?double\"}],\"type\":\"VideoSize\"},{\"id\":643940105,\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":1634294960,\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":-1660637285,\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":-682079097,\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":1398765469,\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":-276825834,\"predicate\":\"stats.megagroupStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"members\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"messages\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"viewers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"posters\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"members_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_members_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"messages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"actions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"weekdays_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_posters\",\"type\":\"Vector\"},{\"name\":\"top_admins\",\"type\":\"Vector\"},{\"name\":\"top_inviters\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-1096616924,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?Bool\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":1667228533,\"predicate\":\"phoneConnectionWebrtc\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"turn\",\"type\":\"flags.0?true\"},{\"name\":\"stun\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"type\":\"PhoneConnection\"},{\"id\":1107543535,\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.CountryCode\"},{\"id\":-1014526429,\"predicate\":\"help.country\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"iso2\",\"type\":\"string\"},{\"name\":\"default_name\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.1?string\"},{\"name\":\"country_codes\",\"type\":\"Vector\"}],\"type\":\"help.Country\"},{\"id\":-1815339214,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":-2016381538,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":1163625789,\"predicate\":\"messageViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"views\",\"type\":\"flags.0?int\"},{\"name\":\"forwards\",\"type\":\"flags.1?int\"},{\"name\":\"replies\",\"type\":\"flags.2?MessageReplies\"}],\"type\":\"MessageViews\"},{\"id\":-761649164,\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-96535659,\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"}],\"type\":\"PhotoSize\"},{\"id\":-1228606141,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.MessageViews\"},{\"id\":-693004986,\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?long\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1767677564,\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1506535550,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"max_id\",\"type\":\"flags.0?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"flags.1?int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"flags.2?int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-1495959709,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_scheduled\",\"type\":\"flags.2?true\"},{\"name\":\"forum_topic\",\"type\":\"flags.3?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"reply_to_top_id\",\"type\":\"flags.1?int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":-2083123262,\"predicate\":\"messageReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"comments\",\"type\":\"flags.0?true\"},{\"name\":\"replies\",\"type\":\"int\"},{\"name\":\"replies_pts\",\"type\":\"int\"},{\"name\":\"recent_repliers\",\"type\":\"flags.1?Vector\"},{\"name\":\"channel_id\",\"type\":\"flags.0?long\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":610945826,\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"blocked\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-386039788,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":-1937192669,\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-1392895362,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":453242886,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"ChannelParticipant\"},{\"id\":-531931925,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-309990731,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1538885128,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":464520273,\"predicate\":\"inputMessagesFilterPinned\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1986399595,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":-1730095465,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-668906175,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":-651419003,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2004925620,\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-711498484,\"predicate\":\"groupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join_muted\",\"type\":\"flags.1?true\"},{\"name\":\"can_change_join_muted\",\"type\":\"flags.2?true\"},{\"name\":\"join_date_asc\",\"type\":\"flags.6?true\"},{\"name\":\"schedule_start_subscribed\",\"type\":\"flags.8?true\"},{\"name\":\"can_start_video\",\"type\":\"flags.9?true\"},{\"name\":\"record_video_active\",\"type\":\"flags.11?true\"},{\"name\":\"rtmp_stream\",\"type\":\"flags.12?true\"},{\"name\":\"listeners_hidden\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.3?string\"},{\"name\":\"stream_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"record_start_date\",\"type\":\"flags.5?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.7?int\"},{\"name\":\"unmuted_video_count\",\"type\":\"flags.10?int\"},{\"name\":\"unmuted_video_limit\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-659913713,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":2047704898,\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":1345295095,\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-341428482,\"predicate\":\"groupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.1?true\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.2?true\"},{\"name\":\"just_joined\",\"type\":\"flags.4?true\"},{\"name\":\"versioned\",\"type\":\"flags.5?true\"},{\"name\":\"min\",\"type\":\"flags.8?true\"},{\"name\":\"muted_by_you\",\"type\":\"flags.9?true\"},{\"name\":\"volume_by_admin\",\"type\":\"flags.10?true\"},{\"name\":\"self\",\"type\":\"flags.12?true\"},{\"name\":\"video_joined\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"active_date\",\"type\":\"flags.3?int\"},{\"name\":\"source\",\"type\":\"int\"},{\"name\":\"volume\",\"type\":\"flags.7?int\"},{\"name\":\"about\",\"type\":\"flags.11?string\"},{\"name\":\"raise_hand_rating\",\"type\":\"flags.13?long\"},{\"name\":\"video\",\"type\":\"flags.6?GroupCallParticipantVideo\"},{\"name\":\"presentation\",\"type\":\"flags.14?GroupCallParticipantVideo\"}],\"type\":\"GroupCallParticipant\"},{\"id\":-124097970,\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-219423922,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":347227392,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":-1636664659,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCall\"},{\"id\":-193506890,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":813821341,\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-2093215828,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-681130742,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1589952067,\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1664413338,\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":589338437,\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-610299584,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-115071790,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-431740480,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1456906823,\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1966921727,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":375566091,\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"id\":-606432698,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":1578088377,\"predicate\":\"messages.historyImportParsed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pm\",\"type\":\"flags.0?true\"},{\"name\":\"group\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"flags.2?string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":-170010905,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-275956116,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1007897979,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"auto_setting_from\",\"type\":\"flags.0?long\"}],\"type\":\"MessageAction\"},{\"id\":-1147422299,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-796432838,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChatParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChatParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1738720581,\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChannelParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-997782967,\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1940201511,\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requested\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"flags.2?string\"},{\"name\":\"approved_by\",\"type\":\"flags.1?long\"}],\"type\":\"ChatInviteImporter\"},{\"id\":-1111085620,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":410107472,\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":572915951,\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-2118733814,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-219353309,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":-1231326505,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":1557846647,\"predicate\":\"channelAdminLogEventActionParticipantJoinByInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1515256996,\"predicate\":\"channelAdminLogEventActionExportedInviteDelete\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1091179342,\"predicate\":\"channelAdminLogEventActionExportedInviteRevoke\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-384910503,\"predicate\":\"channelAdminLogEventActionExportedInviteEdit\",\"params\":[{\"name\":\"prev_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1048537159,\"predicate\":\"channelAdminLogEventActionParticipantVolume\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1855199800,\"predicate\":\"channelAdminLogEventActionChangeHistoryTTL\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1571952873,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":93890858,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"},{\"name\":\"video_channel\",\"type\":\"flags.0?int\"},{\"name\":\"video_quality\",\"type\":\"flags.0?int\"}],\"type\":\"InputFileLocation\"},{\"id\":-1343921601,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":541839704,\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":-672693723,\"predicate\":\"inputBotInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":894081801,\"predicate\":\"botInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1281329567,\"predicate\":\"messageActionGroupCallScheduled\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"schedule_date\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-592373577,\"predicate\":\"groupCallParticipantVideoSourceGroup\",\"params\":[{\"name\":\"semantics\",\"type\":\"string\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"GroupCallParticipantVideoSourceGroup\"},{\"id\":1735736008,\"predicate\":\"groupCallParticipantVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"paused\",\"type\":\"flags.0?true\"},{\"name\":\"endpoint\",\"type\":\"string\"},{\"name\":\"source_groups\",\"type\":\"Vector\"},{\"name\":\"audio_source\",\"type\":\"flags.1?int\"}],\"type\":\"GroupCallParticipantVideo\"},{\"id\":192428418,\"predicate\":\"updateGroupCallConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"presentation\",\"type\":\"flags.0?true\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-2046910401,\"predicate\":\"stickers.suggestedShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":795652779,\"predicate\":\"botCommandScopeDefault\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1011811544,\"predicate\":\"botCommandScopeUsers\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1877059713,\"predicate\":\"botCommandScopeChats\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-1180016534,\"predicate\":\"botCommandScopeChatAdmins\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-610432643,\"predicate\":\"botCommandScopePeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":1071145937,\"predicate\":\"botCommandScopePeerAdmins\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":169026035,\"predicate\":\"botCommandScopePeerUser\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotCommandScope\"},{\"id\":-478701471,\"predicate\":\"account.resetPasswordFailedWait\",\"params\":[{\"name\":\"retry_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-370148227,\"predicate\":\"account.resetPasswordRequestedWait\",\"params\":[{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-383330754,\"predicate\":\"account.resetPasswordOk\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1299263278,\"predicate\":\"updateBotCommands\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1434950843,\"predicate\":\"messageActionSetChatTheme\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-1336228175,\"predicate\":\"sendMessageChooseStickerAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":981691896,\"predicate\":\"sponsoredMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recommended\",\"type\":\"flags.5?true\"},{\"name\":\"show_peer_photo\",\"type\":\"flags.6?true\"},{\"name\":\"random_id\",\"type\":\"bytes\"},{\"name\":\"from_id\",\"type\":\"flags.3?Peer\"},{\"name\":\"chat_invite\",\"type\":\"flags.4?ChatInvite\"},{\"name\":\"chat_invite_hash\",\"type\":\"flags.4?string\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"start_param\",\"type\":\"flags.0?string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"SponsoredMessage\"},{\"id\":-907141753,\"predicate\":\"messages.sponsoredMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"posts_between\",\"type\":\"flags.0?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SponsoredMessages\"},{\"id\":215889721,\"predicate\":\"inputStickerSetAnimatedEmojiAnimations\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":630664139,\"predicate\":\"sendMessageEmojiInteraction\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"interaction\",\"type\":\"DataJSON\"}],\"type\":\"SendMessageAction\"},{\"id\":-1234857938,\"predicate\":\"sendMessageEmojiInteractionSeen\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"SendMessageAction\"},{\"id\":-1227287081,\"predicate\":\"inputBotInlineMessageID64\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"owner_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":-911191137,\"predicate\":\"searchResultsCalendarPeriod\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"min_msg_id\",\"type\":\"int\"},{\"name\":\"max_msg_id\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"SearchResultsCalendarPeriod\"},{\"id\":343859772,\"predicate\":\"messages.searchResultsCalendar\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.0?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"min_msg_id\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.1?int\"},{\"name\":\"periods\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SearchResultsCalendar\"},{\"id\":2137295719,\"predicate\":\"searchResultPosition\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"SearchResultsPosition\"},{\"id\":1404185519,\"predicate\":\"messages.searchResultsPositions\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"positions\",\"type\":\"Vector\"}],\"type\":\"messages.SearchResultsPositions\"},{\"id\":-339958837,\"predicate\":\"messageActionChatJoinedByRequest\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1885586395,\"predicate\":\"updatePendingJoinRequests\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"requests_pending\",\"type\":\"int\"},{\"name\":\"recent_requesters\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":299870598,\"predicate\":\"updateBotChatInviteRequester\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1347021750,\"predicate\":\"channelAdminLogEventActionParticipantJoinByRequest\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"approved_by\",\"type\":\"long\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-376962181,\"predicate\":\"inputKeyboardButtonUserProfile\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":814112961,\"predicate\":\"keyboardButtonUserProfile\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"KeyboardButton\"},{\"id\":-191450938,\"predicate\":\"channels.sendAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.SendAsPeers\"},{\"id\":-886388890,\"predicate\":\"channelAdminLogEventActionToggleNoForwards\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-738646805,\"predicate\":\"messages.stickerSetNotModified\",\"params\":[],\"type\":\"messages.StickerSet\"},{\"id\":997004590,\"predicate\":\"users.userFull\",\"params\":[{\"name\":\"full_user\",\"type\":\"UserFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"users.UserFull\"},{\"id\":1753266509,\"predicate\":\"messages.peerSettings\",\"params\":[{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.PeerSettings\"},{\"id\":663693416,\"predicate\":\"channelAdminLogEventActionSendMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-702884114,\"predicate\":\"auth.codeTypeMissedCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":-2113903484,\"predicate\":\"auth.sentCodeTypeMissedCall\",\"params\":[{\"name\":\"prefix\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1012759713,\"predicate\":\"auth.loggedOut\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"future_auth_token\",\"type\":\"flags.0?bytes\"}],\"type\":\"auth.LoggedOut\"},{\"id\":1578843320,\"predicate\":\"updateMessageReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"reactions\",\"type\":\"MessageReactions\"}],\"type\":\"Update\"},{\"id\":-1546531968,\"predicate\":\"reactionCount\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen_order\",\"type\":\"flags.0?int\"},{\"name\":\"reaction\",\"type\":\"Reaction\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"ReactionCount\"},{\"id\":1328256121,\"predicate\":\"messageReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"can_see_list\",\"type\":\"flags.2?true\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"recent_reactions\",\"type\":\"flags.1?Vector\"}],\"type\":\"MessageReactions\"},{\"id\":834488621,\"predicate\":\"messages.messageReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.MessageReactionsList\"},{\"id\":-1065882623,\"predicate\":\"availableReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inactive\",\"type\":\"flags.0?true\"},{\"name\":\"premium\",\"type\":\"flags.2?true\"},{\"name\":\"reaction\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"static_icon\",\"type\":\"Document\"},{\"name\":\"appear_animation\",\"type\":\"Document\"},{\"name\":\"select_animation\",\"type\":\"Document\"},{\"name\":\"activate_animation\",\"type\":\"Document\"},{\"name\":\"effect_animation\",\"type\":\"Document\"},{\"name\":\"around_animation\",\"type\":\"flags.1?Document\"},{\"name\":\"center_icon\",\"type\":\"flags.1?Document\"}],\"type\":\"AvailableReaction\"},{\"id\":-1626924713,\"predicate\":\"messages.availableReactionsNotModified\",\"params\":[],\"type\":\"messages.AvailableReactions\"},{\"id\":1989032621,\"predicate\":\"messages.availableReactions\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"messages.AvailableReactions\"},{\"id\":852137487,\"predicate\":\"messageEntitySpoiler\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1102180616,\"predicate\":\"channelAdminLogEventActionChangeAvailableReactions\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChatReactions\"},{\"name\":\"new_value\",\"type\":\"ChatReactions\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1319698788,\"predicate\":\"messagePeerReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"unread\",\"type\":\"flags.1?true\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"MessagePeerReaction\"},{\"id\":-2132064081,\"predicate\":\"groupCallStreamChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"},{\"name\":\"last_timestamp_ms\",\"type\":\"long\"}],\"type\":\"GroupCallStreamChannel\"},{\"id\":-790330702,\"predicate\":\"phone.groupCallStreamChannels\",\"params\":[{\"name\":\"channels\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCallStreamChannels\"},{\"id\":177124030,\"predicate\":\"inputReportReasonIllegalDrugs\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1631091139,\"predicate\":\"inputReportReasonPersonalDetails\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":767505458,\"predicate\":\"phone.groupCallStreamRtmpUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"phone.GroupCallStreamRtmpUrl\"},{\"id\":1165423600,\"predicate\":\"attachMenuBotIconColor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"color\",\"type\":\"int\"}],\"type\":\"AttachMenuBotIconColor\"},{\"id\":-1297663893,\"predicate\":\"attachMenuBotIcon\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"icon\",\"type\":\"Document\"},{\"name\":\"colors\",\"type\":\"flags.0?Vector\"}],\"type\":\"AttachMenuBotIcon\"},{\"id\":-928371502,\"predicate\":\"attachMenuBot\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inactive\",\"type\":\"flags.0?true\"},{\"name\":\"has_settings\",\"type\":\"flags.1?true\"},{\"name\":\"request_write_access\",\"type\":\"flags.2?true\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"peer_types\",\"type\":\"Vector\"},{\"name\":\"icons\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBot\"},{\"id\":-237467044,\"predicate\":\"attachMenuBotsNotModified\",\"params\":[],\"type\":\"AttachMenuBots\"},{\"id\":1011024320,\"predicate\":\"attachMenuBots\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bots\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBots\"},{\"id\":-1816172929,\"predicate\":\"attachMenuBotsBot\",\"params\":[{\"name\":\"bot\",\"type\":\"AttachMenuBot\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBotsBot\"},{\"id\":397910539,\"predicate\":\"updateAttachMenuBots\",\"params\":[],\"type\":\"Update\"},{\"id\":202659196,\"predicate\":\"webViewResultUrl\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"WebViewResult\"},{\"id\":-2010155333,\"predicate\":\"simpleWebViewResultUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"SimpleWebViewResult\"},{\"id\":211046684,\"predicate\":\"webViewMessageSent\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"msg_id\",\"type\":\"flags.0?InputBotInlineMessageID\"}],\"type\":\"WebViewMessageSent\"},{\"id\":361936797,\"predicate\":\"updateWebViewResultSent\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":326529584,\"predicate\":\"keyboardButtonWebView\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1598009252,\"predicate\":\"keyboardButtonSimpleWebView\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1205698681,\"predicate\":\"messageActionWebViewDataSentMe\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-1262252875,\"predicate\":\"messageActionWebViewDataSent\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":347625491,\"predicate\":\"updateBotMenuButton\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"button\",\"type\":\"BotMenuButton\"}],\"type\":\"Update\"},{\"id\":1966318984,\"predicate\":\"botMenuButtonDefault\",\"params\":[],\"type\":\"BotMenuButton\"},{\"id\":1113113093,\"predicate\":\"botMenuButtonCommands\",\"params\":[],\"type\":\"BotMenuButton\"},{\"id\":-944407322,\"predicate\":\"botMenuButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"BotMenuButton\"},{\"id\":-67704655,\"predicate\":\"account.savedRingtonesNotModified\",\"params\":[],\"type\":\"account.SavedRingtones\"},{\"id\":-1041683259,\"predicate\":\"account.savedRingtones\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"ringtones\",\"type\":\"Vector\"}],\"type\":\"account.SavedRingtones\"},{\"id\":1960361625,\"predicate\":\"updateSavedRingtones\",\"params\":[],\"type\":\"Update\"},{\"id\":-1746354498,\"predicate\":\"notificationSoundDefault\",\"params\":[],\"type\":\"NotificationSound\"},{\"id\":1863070943,\"predicate\":\"notificationSoundNone\",\"params\":[],\"type\":\"NotificationSound\"},{\"id\":-2096391452,\"predicate\":\"notificationSoundLocal\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"NotificationSound\"},{\"id\":-9666487,\"predicate\":\"notificationSoundRingtone\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"NotificationSound\"},{\"id\":-1222230163,\"predicate\":\"account.savedRingtone\",\"params\":[],\"type\":\"account.SavedRingtone\"},{\"id\":523271863,\"predicate\":\"account.savedRingtoneConverted\",\"params\":[{\"name\":\"document\",\"type\":\"Document\"}],\"type\":\"account.SavedRingtone\"},{\"id\":2104224014,\"predicate\":\"attachMenuPeerTypeSameBotPM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-1020528102,\"predicate\":\"attachMenuPeerTypeBotPM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-247016673,\"predicate\":\"attachMenuPeerTypePM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":84480319,\"predicate\":\"attachMenuPeerTypeChat\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":2080104188,\"predicate\":\"attachMenuPeerTypeBroadcast\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-317687113,\"predicate\":\"chatInvitePublicJoinRequests\",\"params\":[],\"type\":\"ExportedChatInvite\"},{\"id\":-977967015,\"predicate\":\"inputInvoiceMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"InputInvoice\"},{\"id\":-1020867857,\"predicate\":\"inputInvoiceSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputInvoice\"},{\"id\":-1362048039,\"predicate\":\"payments.exportedInvoice\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.ExportedInvoice\"},{\"id\":8703322,\"predicate\":\"updateTranscribedAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pending\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":-1821037486,\"predicate\":\"messages.transcribedAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pending\",\"type\":\"flags.0?true\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"messages.TranscribedAudio\"},{\"id\":909284270,\"predicate\":\"dialogFilterDefault\",\"params\":[],\"type\":\"DialogFilter\"},{\"id\":1395946908,\"predicate\":\"help.premiumPromo\",\"params\":[{\"name\":\"status_text\",\"type\":\"string\"},{\"name\":\"status_entities\",\"type\":\"Vector\"},{\"name\":\"video_sections\",\"type\":\"Vector\"},{\"name\":\"videos\",\"type\":\"Vector\"},{\"name\":\"period_options\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.PremiumPromo\"},{\"id\":-925956616,\"predicate\":\"messageEntityCustomEmoji\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"MessageEntity\"},{\"id\":-48981863,\"predicate\":\"documentAttributeCustomEmoji\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"free\",\"type\":\"flags.0?true\"},{\"name\":\"text_color\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"DocumentAttribute\"},{\"id\":1087454222,\"predicate\":\"stickerSetFullCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"keywords\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1502273946,\"predicate\":\"inputStorePaymentPremiumSubscription\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"restore\",\"type\":\"flags.0?true\"},{\"name\":\"upgrade\",\"type\":\"flags.1?true\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":1634697192,\"predicate\":\"inputStorePaymentGiftPremium\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":-1415514682,\"predicate\":\"messageActionGiftPremium\",\"params\":[{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"months\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1958953753,\"predicate\":\"premiumGiftOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"bot_url\",\"type\":\"string\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"}],\"type\":\"PremiumGiftOption\"},{\"id\":-930399486,\"predicate\":\"inputStickerSetPremiumGifts\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-78886548,\"predicate\":\"updateReadFeaturedEmojiStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-1360618136,\"predicate\":\"inputPrivacyKeyVoiceMessages\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":110621716,\"predicate\":\"privacyKeyVoiceMessages\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1996951013,\"predicate\":\"paymentFormMethod\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentFormMethod\"},{\"id\":-193992412,\"predicate\":\"inputWebFileAudioAlbumThumbLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"small\",\"type\":\"flags.2?true\"},{\"name\":\"document\",\"type\":\"flags.0?InputDocument\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"}],\"type\":\"InputWebFileLocation\"},{\"id\":183518013,\"predicate\":\"bots.premiumGiftsOptions\",\"params\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"gifts\",\"type\":\"Vector\"}],\"type\":\"bots.PremiumGiftsOptions\"},{\"id\":769727150,\"predicate\":\"emojiStatusEmpty\",\"params\":[],\"type\":\"EmojiStatus\"},{\"id\":-1835310691,\"predicate\":\"emojiStatus\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"EmojiStatus\"},{\"id\":-97474361,\"predicate\":\"emojiStatusUntil\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"until\",\"type\":\"int\"}],\"type\":\"EmojiStatus\"},{\"id\":674706841,\"predicate\":\"updateUserEmojiStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"emoji_status\",\"type\":\"EmojiStatus\"}],\"type\":\"Update\"},{\"id\":821314523,\"predicate\":\"updateRecentEmojiStatuses\",\"params\":[],\"type\":\"Update\"},{\"id\":-796072379,\"predicate\":\"account.emojiStatusesNotModified\",\"params\":[],\"type\":\"account.EmojiStatuses\"},{\"id\":-1866176559,\"predicate\":\"account.emojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"statuses\",\"type\":\"Vector\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":2046153753,\"predicate\":\"reactionEmpty\",\"params\":[],\"type\":\"Reaction\"},{\"id\":455247544,\"predicate\":\"reactionEmoji\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"Reaction\"},{\"id\":-1992950669,\"predicate\":\"reactionCustomEmoji\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Reaction\"},{\"id\":-352570692,\"predicate\":\"chatReactionsNone\",\"params\":[],\"type\":\"ChatReactions\"},{\"id\":1385335754,\"predicate\":\"chatReactionsAll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_custom\",\"type\":\"flags.0?true\"}],\"type\":\"ChatReactions\"},{\"id\":1713193015,\"predicate\":\"chatReactionsSome\",\"params\":[{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"ChatReactions\"},{\"id\":-1334846497,\"predicate\":\"messages.reactionsNotModified\",\"params\":[],\"type\":\"messages.Reactions\"},{\"id\":-352454890,\"predicate\":\"messages.reactions\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"messages.Reactions\"},{\"id\":1870160884,\"predicate\":\"updateRecentReactions\",\"params\":[],\"type\":\"Update\"},{\"id\":-2030252155,\"predicate\":\"updateMoveStickerSetToTop\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"stickerset\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":1511364673,\"predicate\":\"auth.sentCodeTypeEmailCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"apple_signin_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"google_signin_allowed\",\"type\":\"flags.1?true\"},{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"next_phone_login_date\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1521934870,\"predicate\":\"auth.sentCodeTypeSetUpEmailRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"apple_signin_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"google_signin_allowed\",\"type\":\"flags.1?true\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1128644211,\"predicate\":\"emailVerifyPurposeLoginSetup\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"EmailVerifyPurpose\"},{\"id\":1383932651,\"predicate\":\"emailVerifyPurposeLoginChange\",\"params\":[],\"type\":\"EmailVerifyPurpose\"},{\"id\":-1141565819,\"predicate\":\"emailVerifyPurposePassport\",\"params\":[],\"type\":\"EmailVerifyPurpose\"},{\"id\":-1842457175,\"predicate\":\"emailVerificationCode\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":-611279166,\"predicate\":\"emailVerificationGoogle\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":-1764723459,\"predicate\":\"emailVerificationApple\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":731303195,\"predicate\":\"account.emailVerified\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.EmailVerified\"},{\"id\":-507835039,\"predicate\":\"account.emailVerifiedLogin\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"sent_code\",\"type\":\"auth.SentCode\"}],\"type\":\"account.EmailVerified\"},{\"id\":1596792306,\"predicate\":\"premiumSubscriptionOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.1?true\"},{\"name\":\"can_purchase_upgrade\",\"type\":\"flags.2?true\"},{\"name\":\"transaction\",\"type\":\"flags.3?string\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"bot_url\",\"type\":\"string\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"}],\"type\":\"PremiumSubscriptionOption\"},{\"id\":80008398,\"predicate\":\"inputStickerSetEmojiGenericAnimations\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":701560302,\"predicate\":\"inputStickerSetEmojiDefaultStatuses\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1206095820,\"predicate\":\"sendAsPeer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium_required\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"SendAsPeer\"},{\"id\":-1386050360,\"predicate\":\"messageExtendedMediaPreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"w\",\"type\":\"flags.0?int\"},{\"name\":\"h\",\"type\":\"flags.0?int\"},{\"name\":\"thumb\",\"type\":\"flags.1?PhotoSize\"},{\"name\":\"video_duration\",\"type\":\"flags.2?int\"}],\"type\":\"MessageExtendedMedia\"},{\"id\":-297296796,\"predicate\":\"messageExtendedMedia\",\"params\":[{\"name\":\"media\",\"type\":\"MessageMedia\"}],\"type\":\"MessageExtendedMedia\"},{\"id\":1517529484,\"predicate\":\"updateMessageExtendedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"extended_media\",\"type\":\"MessageExtendedMedia\"}],\"type\":\"Update\"},{\"id\":-50416996,\"predicate\":\"stickerKeyword\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"keyword\",\"type\":\"Vector\"}],\"type\":\"StickerKeyword\"},{\"id\":-1274595769,\"predicate\":\"username\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"editable\",\"type\":\"flags.0?true\"},{\"name\":\"active\",\"type\":\"flags.1?true\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Username\"},{\"id\":-263212119,\"predicate\":\"channelAdminLogEventActionChangeUsernames\",\"params\":[{\"name\":\"prev_value\",\"type\":\"Vector\"},{\"name\":\"new_value\",\"type\":\"Vector\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":46949251,\"predicate\":\"channelAdminLogEventActionToggleForum\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1483767080,\"predicate\":\"channelAdminLogEventActionCreateTopic\",\"params\":[{\"name\":\"topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-261103096,\"predicate\":\"channelAdminLogEventActionEditTopic\",\"params\":[{\"name\":\"prev_topic\",\"type\":\"ForumTopic\"},{\"name\":\"new_topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1374254839,\"predicate\":\"channelAdminLogEventActionDeleteTopic\",\"params\":[{\"name\":\"topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1569535291,\"predicate\":\"channelAdminLogEventActionPinTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"prev_topic\",\"type\":\"flags.0?ForumTopic\"},{\"name\":\"new_topic\",\"type\":\"flags.1?ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":37687451,\"predicate\":\"forumTopicDeleted\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ForumTopic\"},{\"id\":1903173033,\"predicate\":\"forumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my\",\"type\":\"flags.1?true\"},{\"name\":\"closed\",\"type\":\"flags.2?true\"},{\"name\":\"pinned\",\"type\":\"flags.3?true\"},{\"name\":\"short\",\"type\":\"flags.5?true\"},{\"name\":\"hidden\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.0?long\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"unread_reactions_count\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"draft\",\"type\":\"flags.4?DraftMessage\"}],\"type\":\"ForumTopic\"},{\"id\":913709011,\"predicate\":\"messages.forumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"order_by_create_date\",\"type\":\"flags.0?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"topics\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"messages.ForumTopics\"},{\"id\":228168278,\"predicate\":\"messageActionTopicCreate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.0?long\"}],\"type\":\"MessageAction\"},{\"id\":-1064024032,\"predicate\":\"messageActionTopicEdit\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.1?long\"},{\"name\":\"closed\",\"type\":\"flags.2?Bool\"},{\"name\":\"hidden\",\"type\":\"flags.3?Bool\"}],\"type\":\"MessageAction\"},{\"id\":422509539,\"predicate\":\"updateChannelPinnedTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"topic_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1548122514,\"predicate\":\"inputNotifyForumTopic\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"InputNotifyPeer\"},{\"id\":577659656,\"predicate\":\"notifyForumTopic\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"NotifyPeer\"},{\"id\":1153562857,\"predicate\":\"inputStickerSetEmojiDefaultTopicIcons\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":406407439,\"predicate\":\"messages.sponsoredMessagesEmpty\",\"params\":[],\"type\":\"messages.SponsoredMessages\"},{\"id\":-31881726,\"predicate\":\"updateChannelPinnedTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":1135897376,\"predicate\":\"defaultHistoryTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"DefaultHistoryTTL\"},{\"id\":116234636,\"predicate\":\"auth.codeTypeFragmentSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":-648651719,\"predicate\":\"auth.sentCodeTypeFragmentSms\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1103040667,\"predicate\":\"exportedContactToken\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ExportedContactToken\"},{\"id\":1693675004,\"predicate\":\"channelAdminLogEventActionToggleAntiSpam\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1474192222,\"predicate\":\"messageActionSuggestProfilePhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-404267113,\"predicate\":\"messageActionAttachMenuBotAllowed\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2008112412,\"predicate\":\"stickerSetNoCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"}],\"type\":\"StickerSetCovered\"},{\"id\":542282808,\"predicate\":\"updateUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":596704836,\"predicate\":\"auth.sentCodeSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.SentCode\"},{\"id\":-25742243,\"predicate\":\"messageActionRequestedPeer\",\"params\":[{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"MessageAction\"},{\"id\":1597737472,\"predicate\":\"requestPeerTypeUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"flags.0?Bool\"},{\"name\":\"premium\",\"type\":\"flags.1?Bool\"}],\"type\":\"RequestPeerType\"},{\"id\":-906990053,\"predicate\":\"requestPeerTypeChat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"bot_participant\",\"type\":\"flags.5?true\"},{\"name\":\"has_username\",\"type\":\"flags.3?Bool\"},{\"name\":\"forum\",\"type\":\"flags.4?Bool\"},{\"name\":\"user_admin_rights\",\"type\":\"flags.1?ChatAdminRights\"},{\"name\":\"bot_admin_rights\",\"type\":\"flags.2?ChatAdminRights\"}],\"type\":\"RequestPeerType\"},{\"id\":865857388,\"predicate\":\"requestPeerTypeBroadcast\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"has_username\",\"type\":\"flags.3?Bool\"},{\"name\":\"user_admin_rights\",\"type\":\"flags.1?ChatAdminRights\"},{\"name\":\"bot_admin_rights\",\"type\":\"flags.2?ChatAdminRights\"}],\"type\":\"RequestPeerType\"},{\"id\":218842764,\"predicate\":\"keyboardButtonRequestPeer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peer_type\",\"type\":\"RequestPeerType\"}],\"type\":\"KeyboardButton\"},{\"id\":1209970170,\"predicate\":\"emojiListNotModified\",\"params\":[],\"type\":\"EmojiList\"},{\"id\":2048790993,\"predicate\":\"emojiList\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"document_id\",\"type\":\"Vector\"}],\"type\":\"EmojiList\"},{\"id\":-444918734,\"predicate\":\"auth.sentCodeTypeFirebaseSms\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nonce\",\"type\":\"flags.0?bytes\"},{\"name\":\"receipt\",\"type\":\"flags.1?string\"},{\"name\":\"push_timeout\",\"type\":\"flags.1?int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":2056961449,\"predicate\":\"emojiGroup\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_emoji_id\",\"type\":\"long\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiGroup\"},{\"id\":1874111879,\"predicate\":\"messages.emojiGroupsNotModified\",\"params\":[],\"type\":\"messages.EmojiGroups\"},{\"id\":-2011186869,\"predicate\":\"messages.emojiGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"groups\",\"type\":\"Vector\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":-128171716,\"predicate\":\"videoSizeEmojiMarkup\",\"params\":[{\"name\":\"emoji_id\",\"type\":\"long\"},{\"name\":\"background_colors\",\"type\":\"Vector\"}],\"type\":\"VideoSize\"},{\"id\":228623102,\"predicate\":\"videoSizeStickerMarkup\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker_id\",\"type\":\"long\"},{\"name\":\"background_colors\",\"type\":\"Vector\"}],\"type\":\"VideoSize\"},{\"id\":1964978502,\"predicate\":\"textWithEntities\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"TextWithEntities\"},{\"id\":870003448,\"predicate\":\"messages.translateResult\",\"params\":[{\"name\":\"result\",\"type\":\"Vector\"}],\"type\":\"messages.TranslatedText\"},{\"id\":-934791986,\"predicate\":\"autoSaveSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photos\",\"type\":\"flags.0?true\"},{\"name\":\"videos\",\"type\":\"flags.1?true\"},{\"name\":\"video_max_size\",\"type\":\"flags.2?long\"}],\"type\":\"AutoSaveSettings\"},{\"id\":-2124403385,\"predicate\":\"autoSaveException\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"AutoSaveSettings\"}],\"type\":\"AutoSaveException\"},{\"id\":1279133341,\"predicate\":\"account.autoSaveSettings\",\"params\":[{\"name\":\"users_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"chats_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"broadcasts_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"exceptions\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.AutoSaveSettings\"},{\"id\":-335171433,\"predicate\":\"updateAutoSaveSettings\",\"params\":[],\"type\":\"Update\"}],\"methods\":[{\"id\":-878758099,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1036301552,\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1502141361,\"method\":\"auth.sendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":-2131827673,\"method\":\"auth.signUp\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1923962543,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"flags.0?string\"},{\"name\":\"email_verification\",\"type\":\"flags.1?EmailVerification\"}],\"type\":\"auth.Authorization\"},{\"id\":1047706137,\"method\":\"auth.logOut\",\"params\":[],\"type\":\"auth.LoggedOut\"},{\"id\":-1616179942,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-440401971,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1518699091,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":-841733627,\"method\":\"auth.bindTempAuthKey\",\"params\":[{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"},{\"name\":\"encrypted_message\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-326762118,\"method\":\"account.registerDevice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_muted\",\"type\":\"flags.0?true\"},{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"app_sandbox\",\"type\":\"Bool\"},{\"name\":\"secret\",\"type\":\"bytes\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1779249670,\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2067899501,\"method\":\"account.updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"},{\"name\":\"settings\",\"type\":\"InputPeerNotifySettings\"}],\"type\":\"Bool\"},{\"id\":313765169,\"method\":\"account.getNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-612493497,\"method\":\"account.resetNotifySettings\",\"params\":[],\"type\":\"Bool\"},{\"id\":2018596725,\"method\":\"account.updateProfile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.1?string\"},{\"name\":\"about\",\"type\":\"flags.2?string\"}],\"type\":\"User\"},{\"id\":1713919532,\"method\":\"account.updateStatus\",\"params\":[{\"name\":\"offline\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":127302966,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.WallPapers\"},{\"id\":-977650298,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":227648840,\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1240508136,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"users.UserFull\"},{\"id\":2061264541,\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":-995929106,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector\"},{\"id\":1574346258,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"contacts.Contacts\"},{\"id\":746589157,\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":157945344,\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":269745566,\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1758204945,\"method\":\"contacts.block\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1096393392,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-176409329,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":1673946374,\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1594569905,\"method\":\"messages.getDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Dialogs\"},{\"id\":1143203525,\"method\":\"messages.getHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":-1593989278,\"method\":\"messages.search\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"from_id\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":238054714,\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-1332768214,\"method\":\"messages.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_clear\",\"type\":\"flags.0?true\"},{\"name\":\"revoke\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_date\",\"type\":\"flags.2?int\"},{\"name\":\"max_date\",\"type\":\"flags.3?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-443640366,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":94983360,\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1486110434,\"method\":\"messages.setTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Bool\"},{\"id\":482476935,\"method\":\"messages.sendMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":1967638886,\"method\":\"messages.sendMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":-966673468,\"method\":\"messages.forwardMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"with_my_score\",\"type\":\"flags.8?true\"},{\"name\":\"drop_author\",\"type\":\"flags.11?true\"},{\"name\":\"drop_media_captions\",\"type\":\"flags.12?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"random_id\",\"type\":\"Vector\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":-820669733,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-270948702,\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.PeerSettings\"},{\"id\":-1991005362,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1240027791,\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-1364194508,\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"messages.ChatFull\"},{\"id\":1937260541,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":903730804,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":-230206493,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1575461717,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":3450904,\"method\":\"messages.createChat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":-304838614,\"method\":\"updates.getState\",\"params\":[],\"type\":\"updates.State\"},{\"id\":630429265,\"method\":\"updates.getDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_total_limit\",\"type\":\"flags.0?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":473782614,\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"fallback\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":154966609,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"fallback\",\"type\":\"flags.3?true\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.4?VideoSize\"}],\"type\":\"photos.Photo\"},{\"id\":-2016444625,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1291540959,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1101843010,\"method\":\"upload.getFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"precise\",\"type\":\"flags.0?true\"},{\"name\":\"cdn_supported\",\"type\":\"flags.1?true\"},{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":-990308245,\"method\":\"help.getConfig\",\"params\":[],\"type\":\"Config\"},{\"id\":531836966,\"method\":\"help.getNearestDc\",\"params\":[],\"type\":\"NearestDc\"},{\"id\":1378703997,\"method\":\"help.getAppUpdate\",\"params\":[{\"name\":\"source\",\"type\":\"string\"}],\"type\":\"help.AppUpdate\"},{\"id\":1295590211,\"method\":\"help.getInviteText\",\"params\":[],\"type\":\"help.InviteText\"},{\"id\":-1848823128,\"method\":\"photos.getUserPhotos\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"photos.Photos\"},{\"id\":651135312,\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":-162681021,\"method\":\"messages.requestEncryption\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1035731989,\"method\":\"messages.acceptEncryption\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":-208425312,\"method\":\"messages.discardEncryption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2031374829,\"method\":\"messages.setEncryptedTyping\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"typing\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2135648522,\"method\":\"messages.readEncryptedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1157265941,\"method\":\"messages.sendEncrypted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1431914525,\"method\":\"messages.sendEncryptedFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":852769188,\"method\":\"messages.sendEncryptedService\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1436924774,\"method\":\"messages.receivedQueue\",\"params\":[{\"name\":\"max_qts\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1259113487,\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":-562337987,\"method\":\"upload.saveBigFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"file_total_parts\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1043505495,\"method\":\"initConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"system_lang_code\",\"type\":\"string\"},{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"proxy\",\"type\":\"flags.0?InputClientProxy\"},{\"name\":\"params\",\"type\":\"flags.1?JSONValue\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1663104819,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":916930423,\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":655677548,\"method\":\"account.checkUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1040964988,\"method\":\"account.updateUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":301470424,\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":-623130288,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-906486552,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1564422284,\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"flags.0?InputCheckPasswordSRP\"}],\"type\":\"Bool\"},{\"id\":150761757,\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":608323678,\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":-627372787,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-113456221,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-2108208411,\"method\":\"account.sendChangePhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1891839707,\"method\":\"account.changePhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":-710552671,\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Stickers\"},{\"id\":-1197432408,\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":954152242,\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1738800940,\"method\":\"auth.importBotAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"int\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"bot_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1956073268,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"MessageMedia\"},{\"id\":-484392616,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":-545786948,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1418342645,\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":-1663767815,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1516564433,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"id\":-779399914,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":-661144474,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":923364464,\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"code\",\"type\":\"string\"},{\"name\":\"new_settings\",\"type\":\"flags.0?account.PasswordInputSettings\"}],\"type\":\"auth.Authorization\"},{\"id\":-1080796745,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1607670315,\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"request_needed\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"},{\"name\":\"title\",\"type\":\"flags.4?string\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1051570619,\"method\":\"messages.checkChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"ChatInvite\"},{\"id\":1817183516,\"method\":\"messages.importChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-928977804,\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-946871200,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":-110209570,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":-421563528,\"method\":\"messages.startBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1877938321,\"method\":\"help.getAppChangelog\",\"params\":[{\"name\":\"prev_app_version\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1468322785,\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":-871347913,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-2067661490,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-196443371,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1383294429,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":2010044880,\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-1599378234,\"method\":\"channels.getParticipant\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":176122811,\"method\":\"channels.getChannels\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":141781513,\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1862244601,\"method\":\"channels.createChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.0?true\"},{\"name\":\"megagroup\",\"type\":\"flags.1?true\"},{\"name\":\"for_import\",\"type\":\"flags.3?true\"},{\"name\":\"forum\",\"type\":\"flags.5?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"},{\"name\":\"ttl_period\",\"type\":\"flags.4?int\"}],\"type\":\"Updates\"},{\"id\":-751007486,\"method\":\"channels.editAdmin\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1450044624,\"method\":\"channels.editTitle\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-248621111,\"method\":\"channels.editPhoto\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":283557164,\"method\":\"channels.checkUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":890549214,\"method\":\"channels.updateUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":615851205,\"method\":\"channels.joinChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":-130635115,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":429865580,\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-1072619549,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":51854712,\"method\":\"updates.getChannelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelMessagesFilter\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1470377534,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1568189671,\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1271290010,\"method\":\"messages.searchGlobal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":2016638777,\"method\":\"messages.reorderStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1309538785,\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":1559270965,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.SavedGifs\"},{\"id\":846868683,\"method\":\"messages.saveGif\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1364105629,\"method\":\"messages.getInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"geo_point\",\"type\":\"flags.0?InputGeoPoint\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"messages.BotResults\"},{\"id\":-346119674,\"method\":\"messages.setInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"private\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"next_offset\",\"type\":\"flags.2?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.3?InlineBotSwitchPM\"}],\"type\":\"Bool\"},{\"id\":-738468661,\"method\":\"messages.sendInlineBotResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"hide_via\",\"type\":\"flags.11?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":-432034325,\"method\":\"channels.exportMessageLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"grouped\",\"type\":\"flags.0?true\"},{\"name\":\"thread\",\"type\":\"flags.1?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ExportedMessageLink\"},{\"id\":527021574,\"method\":\"channels.toggleSignatures\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1056025023,\"method\":\"auth.resendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"auth.SentCode\"},{\"id\":520357240,\"method\":\"auth.cancelCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-39416522,\"method\":\"messages.getMessageEditData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"messages.MessageEditData\"},{\"id\":1224152952,\"method\":\"messages.editMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"}],\"type\":\"Updates\"},{\"id\":-2091549254,\"method\":\"messages.editInlineBotMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":-1824339449,\"method\":\"messages.getBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"game\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"password\",\"type\":\"flags.2?InputCheckPasswordSRP\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-712043766,\"method\":\"messages.setBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-1758168906,\"method\":\"contacts.getTopPeers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"correspondents\",\"type\":\"flags.0?true\"},{\"name\":\"bots_pm\",\"type\":\"flags.1?true\"},{\"name\":\"bots_inline\",\"type\":\"flags.2?true\"},{\"name\":\"phone_calls\",\"type\":\"flags.3?true\"},{\"name\":\"forward_users\",\"type\":\"flags.4?true\"},{\"name\":\"forward_chats\",\"type\":\"flags.5?true\"},{\"name\":\"groups\",\"type\":\"flags.10?true\"},{\"name\":\"channels\",\"type\":\"flags.15?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"contacts.TopPeers\"},{\"id\":451113900,\"method\":\"contacts.resetTopPeerRating\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-462373635,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1271718337,\"method\":\"messages.saveDraft\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":1782549861,\"method\":\"messages.getAllDrafts\",\"params\":[],\"type\":\"Updates\"},{\"id\":1685588756,\"method\":\"messages.getFeaturedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1527873830,\"method\":\"messages.readFeaturedStickers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1649852357,\"method\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.RecentStickers\"},{\"id\":958863608,\"method\":\"messages.saveRecentSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1986437075,\"method\":\"messages.clearRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":1475442322,\"method\":\"messages.getArchivedStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":457157256,\"method\":\"account.sendConfirmPhoneCode\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1596029123,\"method\":\"account.confirmPhone\",\"params\":[{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-122669393,\"method\":\"channels.getAdminedPublicChannels\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_location\",\"type\":\"flags.0?true\"},{\"name\":\"check_limit\",\"type\":\"flags.1?true\"}],\"type\":\"messages.Chats\"},{\"id\":1678738104,\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":-866424884,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector\"},{\"id\":-1907842680,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1896289088,\"method\":\"messages.setGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":363700068,\"method\":\"messages.setInlineGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-400399203,\"method\":\"messages.getGameHighScores\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":258170395,\"method\":\"messages.getInlineGameHighScores\",\"params\":[{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":-468934396,\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-2023787330,\"method\":\"messages.getAllChats\",\"params\":[{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-333262899,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":852135825,\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-1489903017,\"method\":\"messages.toggleDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":991616823,\"method\":\"messages.reorderPinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"int\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-692498958,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1440257555,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":-434028723,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":619086221,\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":924093883,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"}],\"type\":\"payments.PaymentForm\"},{\"id\":611897804,\"method\":\"payments.getPaymentReceipt\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-1228345045,\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":755192367,\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"requested_info_id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"credentials\",\"type\":\"InputPaymentCredentials\"},{\"name\":\"tip_amount\",\"type\":\"flags.2?long\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1151208273,\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":578650699,\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":-667062079,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":-436833542,\"method\":\"messages.setBotShippingResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"Bool\"},{\"id\":163765653,\"method\":\"messages.setBotPrecheckoutResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":-1876841625,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"animated\",\"type\":\"flags.1?true\"},{\"name\":\"videos\",\"type\":\"flags.4?true\"},{\"name\":\"emojis\",\"type\":\"flags.5?true\"},{\"name\":\"text_color\",\"type\":\"flags.6?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"software\",\"type\":\"flags.3?string\"}],\"type\":\"messages.StickerSet\"},{\"id\":-143257775,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":-4795190,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-2041315650,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":1369162417,\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":1430593449,\"method\":\"phone.getCallConfig\",\"params\":[],\"type\":\"DataJSON\"},{\"id\":1124046573,\"method\":\"phone.requestCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":1003664544,\"method\":\"phone.acceptCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":788404002,\"method\":\"phone.confirmCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":399855457,\"method\":\"phone.receivedCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"}],\"type\":\"Bool\"},{\"id\":-1295269440,\"method\":\"phone.discardCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"reason\",\"type\":\"PhoneCallDiscardReason\"},{\"name\":\"connection_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1508562471,\"method\":\"phone.setCallRating\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_initiative\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"rating\",\"type\":\"int\"},{\"name\":\"comment\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":662363518,\"method\":\"phone.saveCallDebug\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"debug\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":962554330,\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1691921240,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector\"},{\"id\":1375900482,\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":-219008246,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":-269862909,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-845657435,\"method\":\"langpack.getDifference\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"LangPackDifference\"},{\"id\":1120311183,\"method\":\"langpack.getLanguages\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1763259007,\"method\":\"channels.editBanned\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":870184064,\"method\":\"channels.getAdminLog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"events_filter\",\"type\":\"flags.0?ChannelAdminLogEventsFilter\"},{\"name\":\"admins\",\"type\":\"flags.1?Vector\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-1847836879,\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":-914493408,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":-359881479,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":82946729,\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-1174420133,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-357180360,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2020263951,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":-251140208,\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1683319225,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"for_everyone\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1036054804,\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-356796084,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":921026381,\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1881817312,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":-1225713124,\"method\":\"messages.sendMultiMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"multi_media\",\"type\":\"Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":1347929239,\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":405695855,\"method\":\"account.getWebAuthorizations\",\"params\":[],\"type\":\"account.WebAuthorizations\"},{\"id\":755087855,\"method\":\"account.resetWebAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1747789204,\"method\":\"account.resetWebAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":896555914,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-1856595926,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":749019089,\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":-294455398,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":-1299661699,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector\"},{\"id\":1936088002,\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1986010339,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":-1199522741,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1865902923,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1456907910,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-202552205,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":-1516022023,\"method\":\"account.sendVerifyPhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1305716726,\"method\":\"account.verifyPhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1730136133,\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"purpose\",\"type\":\"EmailVerifyPurpose\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":53322959,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"purpose\",\"type\":\"EmailVerifyPurpose\"},{\"name\":\"verification\",\"type\":\"EmailVerification\"}],\"type\":\"account.EmailVerified\"},{\"id\":1072547679,\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":-2098076769,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2092831552,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-1896617296,\"method\":\"account.initTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"message_users\",\"type\":\"flags.1?true\"},{\"name\":\"message_chats\",\"type\":\"flags.2?true\"},{\"name\":\"message_megagroups\",\"type\":\"flags.3?true\"},{\"name\":\"message_channels\",\"type\":\"flags.4?true\"},{\"name\":\"files\",\"type\":\"flags.5?true\"},{\"name\":\"file_max_size\",\"type\":\"flags.5?long\"}],\"type\":\"account.Takeout\"},{\"id\":489050862,\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":486505992,\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector\"},{\"id\":911373810,\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1398145746,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1031349873,\"method\":\"messages.markDialogUnread\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":585256482,\"method\":\"messages.getDialogUnreadMarks\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2062238246,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2119757468,\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1735311088,\"method\":\"help.getAppConfig\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":1862465352,\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-966677240,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":1784243458,\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":-760547348,\"method\":\"messages.updatePinnedMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"unpin\",\"type\":\"flags.1?true\"},{\"name\":\"pm_oneside\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1881204448,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2055154197,\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1043606090,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-748624084,\"method\":\"help.getSupportName\",\"params\":[],\"type\":\"help.SupportName\"},{\"id\":59377875,\"method\":\"help.getUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"help.UserInfo\"},{\"id\":1723407216,\"method\":\"help.editUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"help.UserInfo\"},{\"id\":-1626880216,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":-806076575,\"method\":\"account.setContactSignUpNotification\",\"params\":[{\"name\":\"silent\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1398240377,\"method\":\"account.getNotifyExceptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"compare_sound\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"flags.0?InputNotifyPeer\"}],\"type\":\"Updates\"},{\"id\":283795844,\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1941660731,\"method\":\"messages.getPollResults\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1848369232,\"method\":\"messages.getOnlines\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"ChatOnlines\"},{\"id\":-554301545,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1517917375,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":-57811990,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":-578472351,\"method\":\"account.uploadWallPaper\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1817860919,\"method\":\"account.saveWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"unsave\",\"type\":\"Bool\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-18000023,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-1153722364,\"method\":\"account.resetWallPapers\",\"params\":[],\"type\":\"Bool\"},{\"id\":1457130303,\"method\":\"account.getAutoDownloadSettings\",\"params\":[],\"type\":\"account.AutoDownloadSettings\"},{\"id\":1995661875,\"method\":\"account.saveAutoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"low\",\"type\":\"flags.0?true\"},{\"name\":\"high\",\"type\":\"flags.1?true\"},{\"name\":\"settings\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"Bool\"},{\"id\":899735650,\"method\":\"messages.getEmojiKeywords\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":352892591,\"method\":\"messages.getEmojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":1318675378,\"method\":\"messages.getEmojiKeywordsLanguages\",\"params\":[{\"name\":\"lang_codes\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-709817306,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":1749536939,\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":472471681,\"method\":\"folders.deleteFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":11435201,\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"filters\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-170208392,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":1079520178,\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":428848198,\"method\":\"messages.requestUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1322487515,\"method\":\"messages.acceptUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":1336717624,\"method\":\"messages.hidePeerSettingsBar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-386636848,\"method\":\"contacts.addContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_phone_privacy_exception\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-130964977,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-1892102881,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":-750207932,\"method\":\"contacts.getLocated\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"background\",\"type\":\"flags.1?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"self_expires\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":1491484525,\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-304832784,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-183077365,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":-1111817116,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1120369398,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1504586518,\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":473805619,\"method\":\"account.uploadTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":1697530880,\"method\":\"account.createTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"}],\"type\":\"Theme\"},{\"id\":737414348,\"method\":\"account.updateTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"slug\",\"type\":\"flags.0?string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"}],\"type\":\"Theme\"},{\"id\":-229175188,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-953697477,\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"},{\"name\":\"format\",\"type\":\"flags.2?string\"},{\"name\":\"base_theme\",\"type\":\"flags.3?BaseTheme\"}],\"type\":\"Bool\"},{\"id\":978872812,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"}],\"type\":\"Theme\"},{\"id\":1913054296,\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.Themes\"},{\"id\":-1210022402,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"auth.LoginToken\"},{\"id\":-1783866140,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":-392909491,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":-1250643605,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":-1952756306,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":300429806,\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":1705865692,\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1200736242,\"method\":\"messages.getPollVotes\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"flags.0?bytes\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.VotesList\"},{\"id\":-1257951254,\"method\":\"messages.toggleStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"uninstall\",\"type\":\"flags.0?true\"},{\"name\":\"archive\",\"type\":\"flags.1?true\"},{\"name\":\"unarchive\",\"type\":\"flags.2?true\"},{\"name\":\"stickersets\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":779736953,\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":-241247891,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":-1566780372,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":450142282,\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":-983318044,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1421720550,\"method\":\"stats.getBroadcastStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":1646092192,\"method\":\"stats.loadAsyncGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"x\",\"type\":\"flags.0?long\"}],\"type\":\"StatsGraph\"},{\"id\":-1707717072,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":85399130,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":2127598753,\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1063816159,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":505748629,\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-8744061,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-589330937,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-349483786,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":517647042,\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":-183649631,\"method\":\"help.dismissSuggestion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"suggestion\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1935116200,\"method\":\"help.getCountriesList\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":584962828,\"method\":\"messages.getReplies\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":1147761405,\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-147740172,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":698914348,\"method\":\"contacts.blockFromReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_message\",\"type\":\"flags.0?true\"},{\"name\":\"delete_history\",\"type\":\"flags.1?true\"},{\"name\":\"report_spam\",\"type\":\"flags.2?true\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1445996571,\"method\":\"stats.getMessagePublicForwards\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1226791947,\"method\":\"stats.getMessageStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"stats.MessageStats\"},{\"id\":-299714136,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1221445336,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"rtmp_stream\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"schedule_date\",\"type\":\"flags.1?int\"}],\"type\":\"Updates\"},{\"id\":-1322057861,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"video_stopped\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"},{\"name\":\"invite_hash\",\"type\":\"flags.1?string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":1342404601,\"method\":\"phone.leaveGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2067345760,\"method\":\"phone.inviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":2054648117,\"method\":\"phone.discardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1958458429,\"method\":\"phone.toggleGroupCallSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reset_invite_hash\",\"type\":\"flags.1?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_muted\",\"type\":\"flags.0?Bool\"}],\"type\":\"Updates\"},{\"id\":68699611,\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupCall\"},{\"id\":-984033109,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector\"},{\"name\":\"sources\",\"type\":\"Vector\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":-1248003721,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":1540419152,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-104078327,\"method\":\"messages.deletePhoneCallHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1140726259,\"method\":\"messages.checkHistoryImport\",\"params\":[{\"name\":\"import_head\",\"type\":\"string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":873008187,\"method\":\"messages.initHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"media_count\",\"type\":\"int\"}],\"type\":\"messages.HistoryImport\"},{\"id\":713433234,\"method\":\"messages.uploadImportedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":-1271008444,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-1565154314,\"method\":\"messages.getExportedChatInvites\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"},{\"name\":\"offset_date\",\"type\":\"flags.2?int\"},{\"name\":\"offset_link\",\"type\":\"flags.2?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":1937010524,\"method\":\"messages.getExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-1110823051,\"method\":\"messages.editExportedChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"},{\"name\":\"request_needed\",\"type\":\"flags.3?Bool\"},{\"name\":\"title\",\"type\":\"flags.4?string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":1452833749,\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":-731601877,\"method\":\"messages.deleteExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":958457583,\"method\":\"messages.getAdminsWithInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":-553329330,\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requested\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"flags.1?string\"},{\"name\":\"q\",\"type\":\"flags.2?string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-1207017500,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-91437323,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":187239529,\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":1573261059,\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-248985848,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"video_portrait\",\"type\":\"flags.2?Bool\"}],\"type\":\"Updates\"},{\"id\":-1524155713,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"muted\",\"type\":\"flags.0?Bool\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"},{\"name\":\"video_stopped\",\"type\":\"flags.3?Bool\"},{\"name\":\"video_paused\",\"type\":\"flags.4?Bool\"},{\"name\":\"presentation_paused\",\"type\":\"flags.5?Bool\"}],\"type\":\"Updates\"},{\"id\":480685066,\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-277077702,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":-425040769,\"method\":\"phone.exportGroupCallInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":563885286,\"method\":\"phone.toggleGroupCallStartSubscription\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"subscribed\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1451287362,\"method\":\"phone.startScheduledGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1465786252,\"method\":\"phone.saveDefaultGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-873829436,\"method\":\"phone.joinGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":475058500,\"method\":\"phone.leaveGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":676017721,\"method\":\"stickers.checkShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1303364867,\"method\":\"stickers.suggestShortName\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":1032708345,\"method\":\"bots.resetBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-481554986,\"method\":\"bots.getBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1828139493,\"method\":\"account.resetPassword\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1284770294,\"method\":\"account.declinePasswordReset\",\"params\":[],\"type\":\"Bool\"},{\"id\":221691769,\"method\":\"auth.checkRecoveryPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-700916087,\"method\":\"account.getChatThemes\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.Themes\"},{\"id\":-432283329,\"method\":\"messages.setChatTheme\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1095836780,\"method\":\"channels.viewSponsoredMessage\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"random_id\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-333377601,\"method\":\"channels.getSponsoredMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.SponsoredMessages\"},{\"id\":745510839,\"method\":\"messages.getMessageReadParticipants\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1240514025,\"method\":\"messages.getSearchResultsCalendar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"}],\"type\":\"messages.SearchResultsCalendar\"},{\"id\":1855292323,\"method\":\"messages.getSearchResultsPositions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.SearchResultsPositions\"},{\"id\":2145904661,\"method\":\"messages.hideChatJoinRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"approved\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-528091926,\"method\":\"messages.hideAllChatJoinRequests\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"approved\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":-1323389022,\"method\":\"messages.toggleNoForwards\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-855777386,\"method\":\"messages.saveDefaultSendAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"send_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":231174382,\"method\":\"channels.getSendAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"channels.SendAsPeers\"},{\"id\":-1081501024,\"method\":\"account.setAuthorizationTTL\",\"params\":[{\"name\":\"authorization_ttl_days\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1089766498,\"method\":\"account.changeAuthorizationSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"encrypted_requests_disabled\",\"type\":\"flags.0?Bool\"},{\"name\":\"call_requests_disabled\",\"type\":\"flags.1?Bool\"}],\"type\":\"Bool\"},{\"id\":913655003,\"method\":\"channels.deleteParticipantHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-754091820,\"method\":\"messages.sendReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.1?true\"},{\"name\":\"add_to_recent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.0?Vector\"}],\"type\":\"Updates\"},{\"id\":-1950707482,\"method\":\"messages.getMessagesReactions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1176190792,\"method\":\"messages.getMessageReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.0?Reaction\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.MessageReactionsList\"},{\"id\":-21928079,\"method\":\"messages.setChatAvailableReactions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"available_reactions\",\"type\":\"ChatReactions\"}],\"type\":\"Updates\"},{\"id\":417243308,\"method\":\"messages.getAvailableReactions\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AvailableReactions\"},{\"id\":1330094102,\"method\":\"messages.setDefaultReaction\",\"params\":[{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"Bool\"},{\"id\":1662529584,\"method\":\"messages.translateText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"id\",\"type\":\"flags.0?Vector\"},{\"name\":\"text\",\"type\":\"flags.1?Vector\"},{\"name\":\"to_lang\",\"type\":\"string\"}],\"type\":\"messages.TranslatedText\"},{\"id\":841173339,\"method\":\"messages.getUnreadReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1420459918,\"method\":\"messages.readReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-1963375804,\"method\":\"contacts.resolvePhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":447879488,\"method\":\"phone.getGroupCallStreamChannels\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.GroupCallStreamChannels\"},{\"id\":-558650433,\"method\":\"phone.getGroupCallStreamRtmpUrl\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"revoke\",\"type\":\"Bool\"}],\"type\":\"phone.GroupCallStreamRtmpUrl\"},{\"id\":276705696,\"method\":\"messages.searchSentMedia\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":385663691,\"method\":\"messages.getAttachMenuBots\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"AttachMenuBots\"},{\"id\":1998676370,\"method\":\"messages.getAttachMenuBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"AttachMenuBotsBot\"},{\"id\":1777704297,\"method\":\"messages.toggleBotInAttachMenu\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":395003915,\"method\":\"messages.requestWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"from_bot_menu\",\"type\":\"flags.4?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"start_param\",\"type\":\"flags.3?string\"},{\"name\":\"theme_params\",\"type\":\"flags.2?DataJSON\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"WebViewResult\"},{\"id\":2146648841,\"method\":\"messages.prolongWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Bool\"},{\"id\":698084494,\"method\":\"messages.requestSimpleWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"},{\"name\":\"platform\",\"type\":\"string\"}],\"type\":\"SimpleWebViewResult\"},{\"id\":172168437,\"method\":\"messages.sendWebViewResultMessage\",\"params\":[{\"name\":\"bot_query_id\",\"type\":\"string\"},{\"name\":\"result\",\"type\":\"InputBotInlineResult\"}],\"type\":\"WebViewMessageSent\"},{\"id\":-603831608,\"method\":\"messages.sendWebViewData\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"button_text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1157944655,\"method\":\"bots.setBotMenuButton\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"button\",\"type\":\"BotMenuButton\"}],\"type\":\"Bool\"},{\"id\":-1671369944,\"method\":\"bots.getBotMenuButton\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotMenuButton\"},{\"id\":-510647672,\"method\":\"account.getSavedRingtones\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.SavedRingtones\"},{\"id\":1038768899,\"method\":\"account.saveRingtone\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"account.SavedRingtone\"},{\"id\":-2095414366,\"method\":\"account.uploadRingtone\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":2021942497,\"method\":\"bots.setBotBroadcastDefaultAdminRights\",\"params\":[{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"}],\"type\":\"Bool\"},{\"id\":-1839281686,\"method\":\"bots.setBotGroupDefaultAdminRights\",\"params\":[{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"}],\"type\":\"Bool\"},{\"id\":1092913030,\"method\":\"phone.saveCallLog\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"file\",\"type\":\"InputFile\"}],\"type\":\"Bool\"},{\"id\":-456419968,\"method\":\"channels.toggleJoinToSend\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1277789622,\"method\":\"channels.toggleJoinRequest\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":261206117,\"method\":\"payments.exportInvoice\",\"params\":[{\"name\":\"invoice_media\",\"type\":\"InputMedia\"}],\"type\":\"payments.ExportedInvoice\"},{\"id\":647928393,\"method\":\"messages.transcribeAudio\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.TranscribedAudio\"},{\"id\":2132608815,\"method\":\"messages.rateTranscribedAudio\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"good\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-2131921795,\"method\":\"payments.assignAppStoreTransaction\",\"params\":[{\"name\":\"receipt\",\"type\":\"bytes\"},{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Updates\"},{\"id\":-537046829,\"method\":\"payments.assignPlayMarketTransaction\",\"params\":[{\"name\":\"receipt\",\"type\":\"DataJSON\"},{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Updates\"},{\"id\":-1614700874,\"method\":\"payments.canPurchasePremium\",\"params\":[{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Bool\"},{\"id\":-1206152236,\"method\":\"help.getPremiumPromo\",\"params\":[],\"type\":\"help.PremiumPromo\"},{\"id\":-643100844,\"method\":\"messages.getCustomEmojiDocuments\",\"params\":[{\"name\":\"document_id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-67329649,\"method\":\"messages.getEmojiStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":248473398,\"method\":\"messages.getFeaturedEmojiStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-70001045,\"method\":\"account.updateEmojiStatus\",\"params\":[{\"name\":\"emoji_status\",\"type\":\"EmojiStatus\"}],\"type\":\"Bool\"},{\"id\":-696962170,\"method\":\"account.getDefaultEmojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":257392901,\"method\":\"account.getRecentEmojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":404757166,\"method\":\"account.clearRecentEmojiStatuses\",\"params\":[],\"type\":\"Bool\"},{\"id\":1063567478,\"method\":\"messages.reportReaction\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"reaction_peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1149164102,\"method\":\"messages.getTopReactions\",\"params\":[{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Reactions\"},{\"id\":960896434,\"method\":\"messages.getRecentReactions\",\"params\":[{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Reactions\"},{\"id\":-1644236876,\"method\":\"messages.clearRecentReactions\",\"params\":[],\"type\":\"Bool\"},{\"id\":-2064119788,\"method\":\"messages.getExtendedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":767062953,\"method\":\"auth.importWebTokenAuthorization\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"web_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-279966037,\"method\":\"account.reorderUsernames\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1490465654,\"method\":\"account.toggleUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"active\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1268978403,\"method\":\"channels.reorderUsernames\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1358053637,\"method\":\"channels.toggleUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"active\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":170155475,\"method\":\"channels.deactivateAllUsernames\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":-1540781271,\"method\":\"channels.toggleForum\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-200539612,\"method\":\"channels.createForumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"flags.0?int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.3?long\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"send_as\",\"type\":\"flags.2?InputPeer\"}],\"type\":\"Updates\"},{\"id\":233136337,\"method\":\"channels.getForumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_topic\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ForumTopics\"},{\"id\":-1333584199,\"method\":\"channels.getForumTopicsByID\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topics\",\"type\":\"Vector\"}],\"type\":\"messages.ForumTopics\"},{\"id\":-186670715,\"method\":\"channels.editForumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topic_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.1?long\"},{\"name\":\"closed\",\"type\":\"flags.2?Bool\"},{\"name\":\"hidden\",\"type\":\"flags.3?Bool\"}],\"type\":\"Updates\"},{\"id\":1814925350,\"method\":\"channels.updatePinnedForumTopic\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topic_id\",\"type\":\"int\"},{\"name\":\"pinned\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":876830509,\"method\":\"channels.deleteTopicHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":693150095,\"method\":\"channels.reorderPinnedForumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1760814315,\"method\":\"channels.toggleAntiSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-1471109485,\"method\":\"channels.reportAntiSpamFalsePositive\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-1632299963,\"method\":\"messages.setDefaultHistoryTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1703637384,\"method\":\"messages.getDefaultHistoryTTL\",\"params\":[],\"type\":\"DefaultHistoryTTL\"},{\"id\":-127582169,\"method\":\"contacts.exportContactToken\",\"params\":[],\"type\":\"ExportedContactToken\"},{\"id\":318789512,\"method\":\"contacts.importContactToken\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":-515093903,\"method\":\"photos.uploadContactProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"suggest\",\"type\":\"flags.3?true\"},{\"name\":\"save\",\"type\":\"flags.4?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.5?VideoSize\"}],\"type\":\"photos.Photo\"},{\"id\":1785624660,\"method\":\"channels.toggleParticipantsHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-29831141,\"method\":\"messages.sendBotRequestedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"requested_peer\",\"type\":\"InputPeer\"}],\"type\":\"Updates\"},{\"id\":-495647960,\"method\":\"account.getDefaultProfilePhotoEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-1856479058,\"method\":\"account.getDefaultGroupPhotoEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-1991881904,\"method\":\"auth.requestFirebaseSms\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"safety_net_token\",\"type\":\"flags.0?string\"},{\"name\":\"ios_push_secret\",\"type\":\"flags.1?string\"}],\"type\":\"Bool\"},{\"id\":1955122779,\"method\":\"messages.getEmojiGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":785209037,\"method\":\"messages.getEmojiStatusGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":564480243,\"method\":\"messages.getEmojiProfilePhotoGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":739360983,\"method\":\"messages.searchCustomEmoji\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-461589127,\"method\":\"messages.togglePeerTranslations\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1379156774,\"method\":\"account.getAutoSaveSettings\",\"params\":[],\"type\":\"account.AutoSaveSettings\"},{\"id\":-694451359,\"method\":\"account.saveAutoSaveSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"flags.0?true\"},{\"name\":\"chats\",\"type\":\"flags.1?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"flags.3?InputPeer\"},{\"name\":\"settings\",\"type\":\"AutoSaveSettings\"}],\"type\":\"Bool\"},{\"id\":1404829728,\"method\":\"account.deleteAutoSaveExceptions\",\"params\":[],\"type\":\"Bool\"}]},\"layer\":152} as {\n MTProto: {\n constructors: MTProtoConstructor[],\n methods: MTProtoMethod[],\n constructorsIndex?: {[id: number]: number}\n },\n API: {\n constructors: MTProtoConstructor[],\n methods: MTProtoMethod[],\n constructorsIndex?: {[id: number]: number}\n },\n layer: number,\n};\n","export default function intToUint(val: number) {\n // return val < 0 ? val + 4294967296 : val; // 0 <= val <= Infinity\n return val >>> 0; // (4294967296 >>> 0) === 0; 0 <= val <= 4294967295\n}\n","import bigInt from 'big-integer';\nimport intToUint from '../number/intToUint';\n\nexport default function ulongFromInts(high: number, low: number) {\n high = intToUint(high), low = intToUint(low);\n return bigInt(high).shiftLeft(32).add(bigInt(low));\n}\n","import bigInt from 'big-integer';\n\nexport const safeBigInt = bigInt(Number.MAX_SAFE_INTEGER);\nexport const ulongBigInt = bigInt(bigInt[2]).pow(64);\nexport const longBigInt = ulongBigInt.divide(bigInt[2]);\n","import bigInt from 'big-integer';\nimport { longBigInt, ulongBigInt } from './bigIntConstants';\n\nexport function bigIntFromBytes(bytes: Uint8Array | number[], base = 256) {\n return bigInt.fromArray(bytes instanceof Uint8Array ? [...bytes] : bytes, base);\n}\n\nexport function bigIntToBytes(bigInt: bigInt.BigInteger) {\n return new Uint8Array(bigInt.toArray(256).value);\n}\n\nexport function bigIntToSigned(bigInt: bigInt.BigInteger) {\n return bigInt.greater(longBigInt) ? bigInt.minus(ulongBigInt) : bigInt;\n}\n\nexport function bigIntToUnsigned(bigInt: bigInt.BigInteger) {\n return bigInt.isNegative() ? ulongBigInt.add(bigInt) : bigInt;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Schema, {MTProtoConstructor} from './schema';\nimport {JSONValue} from '../../layer';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport isObject from '../../helpers/object/isObject';\nimport gzipUncompress from '../../helpers/gzipUncompress';\nimport bigInt from 'big-integer';\nimport ulongFromInts from '../../helpers/long/ulongFromInts';\nimport {safeBigInt} from '../../helpers/bigInt/bigIntConstants';\nimport {bigIntToSigned, bigIntToUnsigned} from '../../helpers/bigInt/bigIntConversion';\n\nconst boolFalse = +Schema.API.constructors.find((c) => c.predicate === 'boolFalse').id;\nconst boolTrue = +Schema.API.constructors.find((c) => c.predicate === 'boolTrue').id;\nconst vector = +Schema.API.constructors.find((c) => c.predicate === 'vector').id;\nconst gzipPacked = +Schema.MTProto.constructors.find((c) => c.predicate === 'gzip_packed').id;\n\n// * using slice to have a new buffer, otherwise the buffer will be copied to main thread\nconst sliceMethod: 'slice' | 'subarray' = 'slice'; // subarray\n\nclass TLSerialization {\n private maxLength = 2048; // 2Kb\n private offset = 0; // in bytes\n private mtproto = false;\n private debug = false;// Modes.debug;\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\n this.maxLength = options.startMaxLength || 2048; // 2Kb\n this.mtproto = options.mtproto || false;\n this.createBuffer();\n }\n\n public createBuffer() {\n this.buffer = new ArrayBuffer(this.maxLength);\n this.intView = new Int32Array(this.buffer);\n this.byteView = new Uint8Array(this.buffer);\n }\n\n public getArray() {\n const resultBuffer = new ArrayBuffer(this.offset);\n\n // let perf = performance.now();\n /* const resultUint8: any = new Uint8Array(resultBuffer);\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\n // console.log('perf uint8', performance.now() - perf);\n\n // perf = performance.now();\n const resultInt32 = new Int32Array(resultBuffer);\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\n // console.log('perf int32', performance.now() - perf);\n\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\n console.error(resultUint8, resultInt32);\n } */\n\n return resultInt32;\n }\n\n public getBuffer() {\n return this.getArray().buffer;\n }\n\n public getBytes(typed: true): Uint8Array;\n public getBytes(typed?: false): number[];\n public getBytes(typed: boolean = true): number[] | Uint8Array {\n if(typed) {\n const resultBuffer = new ArrayBuffer(this.offset);\n const resultArray = new Uint8Array(resultBuffer);\n\n resultArray.set(this.byteView.subarray(0, this.offset));\n\n return resultArray;\n }\n\n const bytes: number[] = new Array(this.offset);\n for(let i = 0; i < this.offset; ++i) {\n bytes[i] = this.byteView[i];\n }\n return bytes;\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public checkLength(needBytes: number) {\n if(this.offset + needBytes < this.maxLength) {\n return;\n }\n\n // console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\n const previousBuffer = this.buffer;\n // const previousByteView = this.byteView;\n const previousArray = new Int32Array(previousBuffer);\n\n this.createBuffer();\n\n new Int32Array(this.buffer).set(previousArray);\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32),\n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\n }\n\n public writeInt(i: number, field: string) {\n this.debug && console.log('>>>', i.toString(16), i, field);\n\n const offset = this.offset / 4;\n this.checkLength(4);\n this.intView[offset] = i;\n this.offset += 4;\n\n return offset;\n }\n\n public storeInt(i: number, field?: string) {\n return this.writeInt(i, (field || '') + ':int');\n }\n\n public storeBool(i: boolean, field?: string) {\n if(i) {\n this.writeInt(boolTrue, (field || '') + ':bool');\n } else {\n this.writeInt(boolFalse, (field || '') + ':bool');\n }\n }\n\n public storeLongP(iHigh: number, iLow: number, field?: string) {\n this.writeInt(iLow, (field || '') + ':long[low]');\n this.writeInt(iHigh, (field || '') + ':long[high]');\n }\n\n public storeLong(sLong: Array | string | number, field?: string) {\n if(Array.isArray(sLong)) {\n if(sLong.length === 2) {\n return this.storeLongP(sLong[0], sLong[1], field);\n } else {\n return this.storeIntBytes(sLong, 64, field);\n }\n }\n\n const _bigInt = bigIntToUnsigned(bigInt(sLong as string));\n const {quotient, remainder} = _bigInt.divmod(0x100000000);\n const high = quotient.toJSNumber();\n const low = remainder.toJSNumber();\n\n this.writeInt(low, (field || '') + ':long[low]');\n this.writeInt(high, (field || '') + ':long[high]');\n }\n\n public storeDouble(f: any, field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n\n doubleView[0] = f;\n\n this.writeInt(intView[0], (field || '') + ':double[low]');\n this.writeInt(intView[1], (field || '') + ':double[high]');\n }\n\n public storeString(s: string, field?: string) {\n this.debug && console.log('>>>', s, (field || '') + ':string');\n\n if(s === undefined) {\n s = '';\n }\n const sUTF8 = unescape(encodeURIComponent(s));\n\n this.checkLength(sUTF8.length + 8);\n\n const len = sUTF8.length;\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n for(let i = 0; i < len; ++i) {\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\n }\n\n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n\n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n } else if(bytes === undefined) {\n bytes = [];\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\n\n // if uint8array was json.stringified, then will be: {'0': 123, '1': 123}\n const len = (bytes as Uint8Array).length;\n this.checkLength(len + 8);\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n\n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n\n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n\n public storeIntBytes(bytes: ArrayBuffer | Uint8Array | number[], bits: number, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = (bytes as Uint8Array).length;\n if((bits % 32) || (len * 8) !== bits) {\n const error = new Error('Invalid bits: ' + bits + ', ' + len);\n console.error(error, bytes, field);\n throw error;\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as Uint8Array), (field || '') + ':int' + bits);\n this.checkLength(len);\n\n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n }\n\n public storeRawBytes(bytes: ArrayLike, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = bytes.length;\n\n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\n this.checkLength(len);\n\n this.byteView.set(bytes, this.offset);\n this.offset += len;\n }\n\n public storeMethod(methodName: string, params: any) {\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const methodData = schema.methods.find((m) => m.method === methodName);\n\n if(!methodData) {\n throw new Error('No method ' + methodName + ' found');\n }\n\n this.storeInt(methodData.id, methodName + '[id]');\n\n const pFlags = params.pFlags || params; // * support pFlags, though am not expecting it to be there\n const flagsOffsets: {[paramName: string]: number} = {};\n // console.log('storeMethod', len, methodData);\n for(const param of methodData.params) {\n let type = param.type;\n\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(params[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags[param.name] : params[param.name] !== undefined) {\n // console.log('storeMethod autocompleting', methodName, param.name, params[param.name], type);\n params[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n\n // console.log('storeMethod', methodName, fieldBit, params[fieldBit[0]], params, param, condType, !!(params[fieldBit[0]] & (1 << +fieldBit[1])));\n type = condType[1];\n }\n\n // console.log('storeMethod', methodName, param.name, params[param.name], type);\n const result = this.storeObject(params[param.name], type, methodName + '[' + param.name + ']');\n\n if(type === '#') {\n params[param.name] = params[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(const paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = params[paramName];\n }\n\n return methodData.type;\n }\n\n public storeObject(obj: any, type: string, field?: string) {\n // console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex);\n switch(type) {\n case '#':\n obj = obj || 0;\n case 'int':\n return this.storeInt(obj, field);\n case 'long':\n return this.storeLong(obj, field);\n case 'int128':\n return this.storeIntBytes(obj, 128, field);\n case 'int256':\n return this.storeIntBytes(obj, 256, field);\n case 'int512':\n return this.storeIntBytes(obj, 512, field);\n case 'string':\n return this.storeString(obj, field);\n case 'bytes':\n return this.storeBytes(obj, field);\n case 'double':\n return this.storeDouble(obj, field);\n case 'Bool':\n return this.storeBool(obj, field);\n case 'true':\n return\n }\n\n if(Array.isArray(obj)) {\n if(type.substr(0, 6) === 'Vector') {\n this.writeInt(vector, field + '[id]');\n } else if(type.substr(0, 6) !== 'vector') {\n throw new Error('Invalid vector type ' + type);\n }\n\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n this.writeInt(obj.length, field + '[count]');\n for(let i = 0; i < obj.length; ++i) {\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\n }\n\n return true;\n } else if(type.substr(0, 6).toLowerCase() === 'vector') {\n throw new Error('Invalid vector object');\n }\n\n if(!isObject(obj)) {\n throw new Error('Invalid object for type ' + type);\n }\n\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const predicate = obj['_'];\n let isBare = false;\n const constructorData: MTProtoConstructor = schema.constructors.find((c) => c.predicate === predicate);\n\n if(isBare = (type.charAt(0) === '%')) {\n type = type.substr(1);\n }\n\n if(!constructorData) {\n throw new Error('No predicate ' + predicate + ' found');\n }\n\n if(predicate === type) {\n isBare = true;\n }\n\n if(!isBare) {\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\n }\n\n const pFlags = obj.pFlags;\n const flagsOffsets: {[paramName: string]: number} = {};\n // console.log('storeObject', len, constructorData);\n for(const param of constructorData.params) {\n let type = param.type;\n\n // console.log('storeObject', param, type);\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n // console.log('storeObject fieldBit', fieldBit, obj[fieldBit[0]]);\n\n if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags && pFlags[param.name] : obj[param.name] !== undefined) {\n // console.log('storeObject autocompleting', param.name, obj[param.name], type);\n obj[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n\n type = condType[1];\n }\n // console.log('storeObject', param, type);\n\n const result = this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']');\n\n if(type === '#') {\n obj[param.name] = obj[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(const paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = obj[paramName];\n }\n\n return constructorData.type;\n }\n}\n\nclass TLDeserialization {\n private offset = 0; // in bytes\n private override: {[key: string]: (result: any, field: string) => void};\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n // this.debug =\n private mtproto: boolean = false;\n private debug: boolean;\n\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\n // buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\n if(buffer instanceof ArrayBuffer) {\n this.buffer = buffer;\n this.intView = new Int32Array(buffer);\n this.byteView = new Uint8Array(this.buffer);\n } else {\n this.buffer = buffer.buffer;\n this.intView = new Int32Array(buffer.buffer);\n this.byteView = buffer;\n }\n\n // console.log(this.intView);\n\n this.override = options.override || {};\n this.mtproto = !!options.mtproto;\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\n }\n\n /* public setMtproto(mtproto: boolean) {\n this.mtproto = mtproto;\n } */\n\n private readInt(field: string) {\n // if(this.offset >= this.intView.length * 4) {\n if((this.byteView.length - this.offset) < 4) {\n console.error(this.byteView, this.offset);\n throw new Error('Nothing to fetch: ' + field);\n }\n\n const i = this.intView[this.offset / 4];\n // const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\n\n this.debug &&/* || field.includes('[dialog][read_outbox_max_id]') */\n console.log('<<<', i.toString(16), i, field,\n this.byteView.slice(this.offset - 16, this.offset + 16),\n bytesToHex(this.byteView.slice(this.offset - 16, this.offset + 16)));\n\n this.offset += 4;\n\n return i;\n }\n\n public fetchInt(field?: string) {\n return this.readInt((field || '') + ':int');\n }\n\n public fetchDouble(field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n\n intView[0] = this.readInt((field || '') + ':double[low]'),\n intView[1] = this.readInt((field || '') + ':double[high]');\n\n return doubleView[0];\n }\n\n // ! it should've been signed\n public fetchLong(field?: string): FetchLongAs {\n const iLow = this.readInt((field || '') + ':long[low]');\n const iHigh = this.readInt((field || '') + ':long[high]');\n\n let ulong = ulongFromInts(iHigh, iLow);\n if(/* !unsigned && */!this.mtproto) { // make it signed\n ulong = bigIntToSigned(ulong);\n }\n\n if(!this.mtproto) {\n if(safeBigInt.greaterOrEquals(ulong.abs())) {\n // @ts-ignore\n return ulong.toJSNumber();\n }\n }\n\n // @ts-ignore\n return ulong.toString(10);\n }\n\n public fetchBool(field?: string): boolean {\n const i = this.readInt((field || '') + ':bool');\n if(i === boolTrue) {\n return true;\n } else if(i === boolFalse) {\n return false;\n }\n\n this.offset -= 4;\n return this.fetchObject('Object', field);\n }\n\n public fetchString(field?: string): string {\n let len = this.byteView[this.offset++];\n\n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n\n let sUTF8 = '';\n for(let i = 0; i < len; ++i) {\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\n }\n\n // Padding\n while(this.offset % 4) {\n ++this.offset;\n }\n\n let s: string;\n try {\n s = decodeURIComponent(escape(sUTF8));\n } catch(e) {\n s = sUTF8;\n }\n\n this.debug && console.log('<<<', s, (field || '') + ':string');\n\n return s;\n }\n\n public fetchBytes(field?: string) {\n let len = this.byteView[this.offset++];\n\n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n\n const bytes = this.byteView[sliceMethod](this.offset, this.offset + len);\n this.offset += len;\n\n // Padding\n while(this.offset % 4) {\n ++this.offset;\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\n\n return bytes;\n }\n\n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\n public fetchIntBytes(bits: number, typed: boolean = true, field?: string) {\n if(bits % 32) {\n throw new Error('Invalid bits: ' + bits);\n }\n\n const len = bits / 8;\n if(typed) {\n const result = this.byteView[sliceMethod](this.offset, this.offset + len);\n this.offset += len;\n return result;\n }\n\n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; ++i) {\n bytes[i] = this.byteView[this.offset++];\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\n\n return bytes;\n }\n\n public fetchRawBytes(len: number | false, typed: true, field: string): Uint8Array;\n public fetchRawBytes(len: number | false, typed: false, field: string): number[];\n public fetchRawBytes(len: number | false, typed: boolean = true, field: string) {\n if(len === false) {\n len = this.readInt((field || '') + '_length');\n if(len > this.byteView.byteLength) {\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\n }\n }\n\n if(typed) {\n const bytes = new Uint8Array(len);\n bytes.set(this.byteView[sliceMethod](this.offset, this.offset + len));\n this.offset += len;\n return bytes;\n }\n\n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; ++i) {\n bytes[i] = this.byteView[this.offset++];\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\n\n return bytes;\n }\n\n private fetchVector(type: string, field?: string) {\n const len = this.readInt(field + '[count]');\n const result: any[] = new Array(len);\n if(len > 0) {\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n for(let i = 0; i < len; ++i) {\n result[i] = this.fetchObject(itemType, field + '[' + i + ']');\n }\n }\n\n return result;\n }\n\n public fetchObject(type: string, field?: string): any {\n switch(type) {\n case '#':\n case 'int':\n return this.fetchInt(field);\n case 'long':\n return this.fetchLong(field);\n case 'int128':\n return this.fetchIntBytes(128, true, field);\n case 'int256':\n return this.fetchIntBytes(256, true, field);\n case 'int512':\n return this.fetchIntBytes(512, true, field);\n case 'string':\n return this.fetchString(field);\n case 'bytes':\n return this.fetchBytes(field);\n case 'double':\n return this.fetchDouble(field);\n case 'Bool':\n return this.fetchBool(field);\n case 'true':\n return true;\n }\n\n field = field || type || 'Object';\n\n if(type.charAt(0) === 'v' && type.substr(1, 5) === 'ector') {\n return this.fetchVector(type, field);\n }\n\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n let constructorData: MTProtoConstructor = null;\n let fallback = false;\n\n if(type.charAt(0) === '%') {\n const checkType = type.substr(1);\n constructorData = schema.constructors.find((c) => c.type === checkType);\n if(!constructorData) {\n throw new Error('Constructor not found for type: ' + type);\n }\n }/* else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\n constructorData = schema.constructors.find((c) => c.predicate === type);\n if(!constructorData) {\n throw new Error('Constructor not found for predicate: ' + type);\n }\n } */ else {\n const constructorCmp = this.readInt(field + '[id]');\n\n if(constructorCmp === gzipPacked) { // Gzip packed\n const compressed = this.fetchBytes(field + '[packed_string]');\n const uncompressed = gzipUncompress(compressed) as Uint8Array;\n const newDeserializer = new TLDeserialization(uncompressed); // rpc_result is packed here\n\n return newDeserializer.fetchObject(type, field);\n }\n\n if(constructorCmp === vector) {\n return this.fetchVector(type, field);\n }\n\n let index = schema.constructorsIndex;\n if(!index) {\n schema.constructorsIndex = index = {};\n for(let i = 0, len = schema.constructors.length; i < len; ++i) {\n index[schema.constructors[i].id] = i;\n }\n }\n\n const i = index[constructorCmp];\n if(i !== undefined) {\n constructorData = schema.constructors[i];\n }\n\n if(!constructorData && this.mtproto) {\n const schemaFallback = Schema.API;\n for(let i = 0, len = schemaFallback.constructors.length; i < len; ++i) {\n if(+schemaFallback.constructors[i].id === constructorCmp) {\n constructorData = schemaFallback.constructors[i];\n\n delete this.mtproto;\n fallback = true;\n break;\n }\n }\n }\n\n if(!constructorData) {\n console.error('Constructor not found:', constructorCmp);\n\n let int1: number, int2: number;\n try {\n int1 = this.fetchInt(field);\n int2 = this.fetchInt(field);\n } catch(err) {\n\n }\n\n throw new Error('Constructor not found: ' + constructorCmp + ' ' + int1 + ' ' + int2 + ' ' + field);\n }\n }\n\n const predicate = constructorData.predicate;\n\n const result: any = {'_': predicate};\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\n if(this.override[overrideKey]) {\n this.override[overrideKey](result, field + '[' + predicate + ']');\n } else {\n for(let i = 0, len = constructorData.params.length; i < len; ++i) {\n const param = constructorData.params[i];\n let type = param.type;\n\n if(type === '#' && result.pFlags === undefined) {\n result.pFlags = {};\n }\n\n const isCond = type.indexOf('?') !== -1;\n if(isCond) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(result[fieldBit[0]] & (1 << +fieldBit[1]))) {\n continue;\n }\n\n type = condType[1];\n }\n\n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\n\n if(isCond && type === 'true') {\n result.pFlags[param.name] = value;\n } else {\n result[param.name] = value;\n }\n }\n }\n\n if(fallback) {\n this.mtproto = true;\n }\n\n if(type === 'JSONValue') {\n return this.formatJSONValue(result);\n }\n\n return result;\n }\n\n private formatJSONValue(jsonValue: JSONValue): any {\n if(!jsonValue._) return jsonValue;\n switch(jsonValue._) {\n case 'jsonNull':\n return null;\n case 'jsonObject': {\n const out: any = {};\n const objectValues = jsonValue.value;\n for(let i = 0, length = objectValues.length; i < length; ++i) {\n const objectValue = objectValues[i];\n out[objectValue.key] = this.formatJSONValue(objectValue.value);\n }\n return out;\n }\n default:\n return jsonValue.value;\n }\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public setOffset(offset: number) {\n this.offset = offset;\n }\n\n /* public fetchEnd() {\n if(this.offset !== this.byteView.length) {\n throw new Error('Fetch end with non-empty buffer');\n }\n\n return true;\n } */\n}\n\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\nexport {TLDeserialization, TLSerialization};\n","// export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\n\n// @ts-ignore\nimport pako from 'pako/dist/pako_inflate.min.js';\n// import dT from './dT';\n\n// export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\nexport default function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\n // console.log(dT(), 'Gzip uncompress start');\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\n // console.log(dT(), 'Gzip uncompress finish'/* , result */);\n return result;\n}\n","import randomize from '../array/randomize';\nimport bufferConcats from './bufferConcats';\n\nexport default function addPadding(\n bytes: T,\n blockSize: number = 16,\n zeroes?: boolean,\n blockSizeAsTotalLength = false,\n prepend = false\n): T {\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\n if(needPadding > 0 && needPadding < blockSize) {\n // //console.log('addPadding()', len, blockSize, needPadding);\n const padding = new Uint8Array(needPadding);\n if(zeroes) {\n for(let i = 0; i < needPadding; ++i) {\n padding[i] = 0;\n }\n } else {\n randomize(padding);\n }\n\n if(bytes instanceof ArrayBuffer) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\n } else if(bytes instanceof Uint8Array) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\n } else {\n // @ts-ignore\n return (prepend ? [...padding].concat(bytes) : bytes.concat([...padding])) as T;\n }\n }\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {TLDeserialization, TLSerialization} from './tl_utils';\nimport CryptoWorker from '../crypto/cryptoMessagePort';\nimport sessionStorage from '../sessionStorage';\nimport Schema from './schema';\nimport {NetworkerFactory} from './networkerFactory';\nimport {logger, LogTypes} from '../logger';\nimport {InvokeApiOptions} from '../../types';\nimport longToBytes from '../../helpers/long/longToBytes';\nimport MTTransport from './transports/transport';\nimport {nextRandomUint, randomLong} from '../../helpers/random';\nimport App from '../../config/app';\nimport DEBUG from '../../config/debug';\nimport Modes from '../../config/modes';\nimport noop from '../../helpers/noop';\n\n \nimport HTTP from './transports/http';\n \n\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport bigInt from 'big-integer';\nimport {ConnectionStatus} from './connectionStatus';\nimport ctx from '../../environment/ctx';\nimport bufferConcats from '../../helpers/bytes/bufferConcats';\nimport bytesCmp from '../../helpers/bytes/bytesCmp';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport convertToUint8Array from '../../helpers/bytes/convertToUint8Array';\nimport isObject from '../../helpers/object/isObject';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport sortLongsArray from '../../helpers/long/sortLongsArray';\nimport randomize from '../../helpers/array/randomize';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport {getEnvironment} from '../../environment/utils';\nimport {TimeManager} from './timeManager';\n\n// console.error('networker included!', new Error().stack);\n\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\n noResponse: true, // http_wait\n longPoll: true,\n\n notContentRelated: true, // ACK\n noSchedule: true,\n // withResult: true,\n messageId: MTLong,\n}>;\n\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\n msg_id: MTLong,\n seq_no: number,\n body?: Uint8Array | number[],\n isAPI?: boolean,\n // only these four are important\n\n acked?: boolean,\n\n deferred?: CancellablePromise,\n\n container?: boolean,\n inner?: MTLong[],\n\n // below - options\n\n notContentRelated?: true,\n noSchedule?: true,\n\n resultType?: string,\n\n longPoll?: true,\n noResponse?: true, // only with http (http_wait for longPoll)\n};\n\nconst DRAIN_TIMEOUT = 10000;\nconst delays: {\n [k in 'client' | 'file']: {\n disconnectDelayMin: number,\n disconnectDelayMax: number,\n pingInterval: number,\n pingMaxTime: number,\n connectionTimeout: number\n }\n} = {\n client: {\n disconnectDelayMin: 7,\n disconnectDelayMax: 20,\n pingInterval: 2000,\n pingMaxTime: 5,\n connectionTimeout: 5000\n },\n file: {\n disconnectDelayMin: 10,\n disconnectDelayMax: 24,\n pingInterval: 3000,\n pingMaxTime: 7,\n connectionTimeout: 7500\n }\n};\nconst RESEND_OPTIONS: MTMessageOptions = {\n noSchedule: true,\n notContentRelated: true\n};\nlet invokeAfterMsgConstructor: number;\nlet networkerTempId = 0;\n\nexport default class MTPNetworker {\n private authKeyUint8: Uint8Array;\n\n public isFileNetworker: boolean;\n private isFileUpload: boolean;\n private isFileDownload: boolean;\n\n private lastServerMessages: Array = [];\n\n private sentMessages: {\n [msgId: MTLong]: MTMessage\n } = {};\n\n private pendingMessages: {[msgId: MTLong]: number} = {};\n private pendingAcks: Array = [];\n private pendingResendReq: MTLong[] = [];\n // private pendingResendAnsReq: MTLong[] = [];\n public connectionInited: boolean;\n\n private nextReqTimeout: number;\n private nextReq: number = 0;\n\n \n private longPollInterval: number;\n private longPollPending: number;\n private checkConnectionRetryAt: number;\n private checkConnectionTimeout: number;\n private checkConnectionPeriod = 0;\n private sleepAfter: number;\n private offline = false;\n private sendingLongPoll: boolean;\n \n\n private seqNo: number;\n private prevSessionId: Uint8Array;\n private sessionId: Uint8Array;\n private serverSalt: Uint8Array;\n\n private lastResendReq: {\n reqMsgId: MTLong,\n msgIds: MTPNetworker['pendingResendReq']\n };\n // private lastResendAnsReq: MTPNetworker['lastResendReq'];\n\n private name: string;\n private log: ReturnType;\n\n public isOnline = false;\n private status: ConnectionStatus = ConnectionStatus.Closed;\n private lastResponseTime = 0;\n\n private debug = DEBUG /* && false */ || Modes.debug;\n\n public activeRequests = 0;\n\n public onDrain: () => void;\n private onDrainTimeout: number;\n\n public transport: MTTransport;\n\n \n private pingDelayDisconnectDeferred: CancellablePromise;\n private pingPromise: Promise;\n // private pingInterval: number;\n private lastPingTime: number;\n private lastPingStartTime: number;\n private lastPingDelayDisconnectId: string;\n \n // public onConnectionStatusChange: (online: boolean) => void;\n\n // private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\n\n private delays: typeof delays[keyof typeof delays];\n // private getNewTimeOffset: boolean;\n\n constructor(\n private networkerFactory: NetworkerFactory,\n private timeManager: TimeManager,\n public dcId: number,\n private authKey: Uint8Array,\n private authKeyId: Uint8Array,\n serverSalt: Uint8Array,\n options: InvokeApiOptions = {}\n ) {\n this.authKeyUint8 = convertToUint8Array(this.authKey);\n this.serverSalt = convertToUint8Array(serverSalt);\n\n this.isFileUpload = !!options.fileUpload;\n this.isFileDownload = !!options.fileDownload;\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\n this.delays = this.isFileNetworker ? delays.file : delays.client;\n\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\n this.name = 'NET-' + dcId + suffix;\n // this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\n this.log = logger(this.name + (suffix ? '' : '-C') + '-' + networkerTempId++, LogTypes.Log/* | LogTypes.Debug */ | LogTypes.Error | LogTypes.Warn);\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\n\n // Test resend after bad_server_salt\n /* if(this.dcId === 2 && this.upload) {\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\n this.serverSalt[0] = 0;\n } */\n\n this.updateSession();\n\n // if(!NetworkerFactory.offlineInited) {\n // NetworkerFactory.offlineInited = true;\n // /* rootScope.offline = true\n // rootScope.offlineConnecting = true */\n // }\n }\n\n private updateSession() {\n this.seqNo = 0;\n this.prevSessionId = this.sessionId;\n this.sessionId = randomize(new Uint8Array(8));\n }\n\n /* private clearContainers() {\n for(const messageId in this.sentMessages) {\n const message = this.sentMessages[messageId];\n if(message.container) {\n delete this.sentMessages[messageId];\n }\n }\n } */\n\n private updateSentMessage(sentMessageId: string) {\n const sentMessage = this.sentMessages[sentMessageId];\n if(!sentMessage) {\n return false;\n }\n\n if(sentMessage.container) {\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\n if(!innerSentMessage) {\n sentMessage.inner.splice(idx, 1);\n } else {\n sentMessage.inner[idx] = innerSentMessage.msg_id;\n }\n });\n }\n\n sentMessage.msg_id = this.timeManager.generateId();\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated || sentMessage.container);\n\n if(this.debug) {\n this.log(`updateSentMessage, old=${sentMessageId}, new=${sentMessage.msg_id}`);\n }\n\n this.sentMessages[sentMessage.msg_id] = sentMessage;\n delete this.sentMessages[sentMessageId];\n\n return sentMessage;\n }\n\n private generateSeqNo(notContentRelated?: boolean) {\n let seqNo = this.seqNo * 2;\n\n if(!notContentRelated) {\n seqNo++;\n this.seqNo++;\n }\n\n return seqNo;\n }\n\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n\n serializer.storeMethod(method, params);\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n\n if(Modes.debug) {\n this.log('MT call', method, params, messageId, seqNo);\n }\n\n return this.pushMessage(message, options);\n }\n\n public wrapMtpMessage(object: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n serializer.storeObject(object, 'Object');\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo(options.notContentRelated);\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n\n if(Modes.debug) {\n this.log('MT message', object, messageId, seqNo);\n }\n\n return this.pushMessage(message, options);\n }\n\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\n const serializer = new TLSerialization(options);\n\n if(!this.connectionInited) { // this will call once for each new session\n // /////this.log('Wrap api call !this.connectionInited');\n\n const invokeWithLayer = Schema.API.methods.find((m) => m.method === 'invokeWithLayer');\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\n serializer.storeInt(+invokeWithLayer.id, 'invokeWithLayer');\n\n // @ts-ignore\n serializer.storeInt(Schema.layer, 'layer');\n\n const initConnection = Schema.API.methods.find((m) => m.method === 'initConnection');\n if(!initConnection) throw new Error('no initConnection!');\n\n serializer.storeInt(+initConnection.id, 'initConnection');\n serializer.storeInt(0x0, 'flags');\n serializer.storeInt(App.id, 'api_id');\n serializer.storeString(getEnvironment().USER_AGENT || 'Unknown UserAgent', 'device_model');\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\n serializer.storeString(App.version + (App.isMainDomain ? ' ' + App.suffix : ''), 'app_version');\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\n serializer.storeString(App.langPack, 'lang_pack');\n serializer.storeString(this.networkerFactory.language, 'lang_code');\n // serializer.storeInt(0x0, 'proxy');\n /* serializer.storeMethod('initConnection', {\n 'flags': 0,\n 'api_id': App.id,\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\n 'system_version': navigator.platform || 'Unknown Platform',\n 'app_version': App.version,\n 'system_lang_code': navigator.language || 'en',\n 'lang_pack': '',\n 'lang_code': navigator.language || 'en'\n }); */\n }\n\n if(options.afterMessageId) {\n if(invokeAfterMsgConstructor === undefined) {\n const m = Schema.API.methods.find((m) => m.method === 'invokeAfterMsg');\n invokeAfterMsgConstructor = m ? +m.id : 0;\n }\n\n if(invokeAfterMsgConstructor) {\n // if(this.debug) {\n // this.log('invokeApi: store invokeAfterMsg');\n // }\n\n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\n serializer.storeLong(options.afterMessageId, 'msg_id');\n } else {\n this.log.error('no invokeAfterMsg!');\n }\n }\n\n options.resultType = serializer.storeMethod(method, params);\n\n /* if(method === 'account.updateNotifySettings') {\n this.log('api call body:', serializer.getBytes(true));\n } */\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true),\n isAPI: true\n };\n\n if(Modes.debug/* || true */) {\n this.log('Api call', method, message, params, options);\n } else if(this.debug) {\n this.log('Api call', method, params, options);\n }\n\n return this.pushMessage(message, options);\n }\n\n public changeTransport(transport?: MTTransport) {\n const oldTransport = this.transport;\n if(oldTransport) {\n oldTransport.destroy();\n\n if(this.nextReqTimeout) {\n clearTimeout(this.nextReqTimeout);\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n }\n\n this.connectionInited = false;\n\n \n if(this.longPollInterval !== undefined) {\n clearInterval(this.longPollInterval);\n this.longPollInterval = undefined;\n }\n\n this.clearCheckConnectionTimeout();\n \n }\n\n this.log('change transport', transport, oldTransport);\n\n \n this.clearPingDelayDisconnect();\n\n // if(this.pingInterval !== undefined) {\n // clearInterval(this.pingInterval);\n // this.pingInterval = undefined;\n // }\n\n // this.clearPing();\n \n\n this.transport = transport;\n if(!transport) {\n return;\n }\n\n transport.networker = this;\n\n \n \n if(transport instanceof HTTP) {\n \n this.longPollInterval = ctx.setInterval(this.checkLongPoll, 10000);\n this.checkLongPoll();\n this.checkConnection('changed transport');\n \n }\n \n \n\n \n // * handle outcoming dead socket, server will close the connection\n if((transport as TcpObfuscated).connection) {\n // this.sendPingDelayDisconnect();\n\n if(transport.connected) {\n this.setConnectionStatus(ConnectionStatus.Connected);\n }\n\n // this.pingInterval = ctx.setInterval(this.sendPing, PING_INTERVAL);\n // this.sendPing();\n }\n \n\n this.resend();\n }\n\n public destroy() {\n this.log('destroy');\n }\n\n public forceReconnectTimeout() {\n if((this.transport as TcpObfuscated).reconnect) {\n (this.transport as TcpObfuscated).reconnect();\n } else {\n this.resend();\n }\n }\n\n public forceReconnect() {\n if((this.transport as TcpObfuscated).forceReconnect) {\n (this.transport as TcpObfuscated).forceReconnect();\n } else {\n this.checkConnection('force reconnect');\n }\n }\n\n /* private clearPing() {\n if(this.pingPromise) {\n this.pingPromise = undefined;\n }\n\n this.lastPingTime = undefined;\n }\n\n private sendPing = () => {\n // return;\n\n // if(!(this.transport as TcpObfuscated).connected) {\n // this.clearPing();\n // return;\n // }\n\n if(this.pingPromise) {\n return;\n }\n\n const startTime = Date.now();\n this.log('sendPing: ping', startTime);\n const promise = this.pingPromise = this.wrapMtpCall('ping', {\n ping_id: randomLong()\n }, {\n notContentRelated: true\n }).then(() => {\n const elapsedTime = Date.now() - startTime;\n this.lastPingTime = elapsedTime / 1000;\n this.log('sendPing: pong', elapsedTime);\n\n setTimeout(() => {\n if(this.pingPromise !== promise) {\n return;\n }\n\n this.pingPromise = undefined;\n this.sendPing();\n }, Math.max(0, PING_INTERVAL - elapsedTime));\n });\n }; */\n\n private clearPingDelayDisconnect() {\n const deferred = this.pingDelayDisconnectDeferred;\n this.pingDelayDisconnectDeferred = undefined;\n this.lastPingDelayDisconnectId = undefined;\n\n if(deferred) {\n deferred.reject();\n }\n }\n\n private sendPingDelayDisconnect = () => {\n // return;\n\n if(this.pingDelayDisconnectDeferred || !this.transport || !this.transport.connected) return;\n\n /* if(!this.isOnline) {\n if((this.transport as TcpObfuscated).connected) {\n (this.transport as TcpObfuscated).connection.close();\n }\n\n return;\n } */\n\n const deferred = this.pingDelayDisconnectDeferred = deferredPromise();\n const delays = this.delays;\n const pingMaxTime = this.delays.pingMaxTime;\n const lastPingTime = Math.min(this.lastPingTime ?? 0, pingMaxTime);\n const disconnectDelay = Math.round(delays.disconnectDelayMin + lastPingTime / pingMaxTime * (delays.disconnectDelayMax - delays.disconnectDelayMin));\n const timeoutTime = disconnectDelay * 1000;\n const startTime = this.lastPingStartTime = Date.now();\n const pingId = this.lastPingDelayDisconnectId = randomLong();\n const options: MTMessageOptions = {notContentRelated: true};\n this.wrapMtpCall('ping_delay_disconnect', {\n ping_id: pingId,\n disconnect_delay: disconnectDelay\n }, options);\n\n const log = this.log.bindPrefix('sendPingDelayDisconnect');\n this.debug && log.debug(`ping, timeout=${timeoutTime}, lastPingTime=${this.lastPingTime}, msgId=${options.messageId}, pingId=${pingId}`);\n const rejectTimeout = ctx.setTimeout(deferred.reject, timeoutTime);\n\n const onResolved = (reason: string) => {\n clearTimeout(rejectTimeout);\n const elapsedTime = Date.now() - startTime;\n this.lastPingTime = elapsedTime / 1000;\n this.debug && log.debug(`pong, reason='${reason}', time=${lastPingTime}, msgId=${options.messageId}`);\n if(elapsedTime > timeoutTime) {\n throw undefined;\n } else {\n return pause(Math.max(0, this.delays.pingInterval - elapsedTime/* timeoutTime - elapsedTime - PING_INTERVAL */));\n }\n };\n\n const onTimeout = () => {\n clearTimeout(rejectTimeout);\n const transport = this.transport as TcpObfuscated;\n if(this.pingDelayDisconnectDeferred !== deferred || !transport?.connection) {\n return;\n }\n\n log.error('catch, closing connection', this.lastPingTime, options.messageId);\n transport.connection.close();\n };\n\n const onFinally = () => {\n if(this.pingDelayDisconnectDeferred !== deferred) {\n return;\n }\n\n this.pingDelayDisconnectDeferred = undefined;\n this.sendPingDelayDisconnect();\n };\n\n deferred\n .then(onResolved)\n .catch(onTimeout)\n .finally(onFinally);\n };\n\n \n private checkLongPoll = () => {\n const isClean = this.cleanupSent();\n // this.log.error('Check lp', this.longPollPending, this.dcId, isClean, this);\n if((this.longPollPending && Date.now() < this.longPollPending) ||\n this.offline ||\n this.isStopped() ||\n this.isFileNetworker) {\n // this.log('No lp this time');\n return false;\n }\n\n sessionStorage.get('dc').then((baseDcId) => {\n if(isClean && (\n baseDcId !== this.dcId ||\n (this.sleepAfter && Date.now() > this.sleepAfter)\n )) {\n // console.warn(dT(), 'Send long-poll for DC is delayed', this.dcId, this.sleepAfter);\n return;\n }\n\n this.sendLongPoll();\n });\n };\n\n private sendLongPoll() {\n if(this.sendingLongPoll) return;\n this.sendingLongPoll = true;\n const maxWait = 25000;\n\n this.longPollPending = Date.now() + maxWait;\n this.debug && this.log.debug('sendLongPoll', this.longPollPending);\n\n this.wrapMtpCall('http_wait', {\n max_delay: 500,\n wait_after: 150,\n max_wait: maxWait\n }, {\n noResponse: true,\n // notContentRelated: true,\n longPoll: true\n }).then(() => {\n this.longPollPending = undefined;\n setTimeout(this.checkLongPoll, 0);\n }, (error: ErrorEvent) => {\n this.log('Long-poll failed', error);\n }).finally(() => {\n this.sendingLongPoll = undefined;\n });\n }\n\n private checkConnection = (event: Event | string) => {\n this.debug && this.log('Check connection', event);\n this.clearCheckConnectionTimeout();\n\n if(!this.transport) {\n this.log.warn('No transport for checkConnection');\n return;\n }\n\n const serializer = new TLSerialization({mtproto: true});\n const pingId = randomLong();\n\n serializer.storeMethod('ping', {\n ping_id: pingId\n });\n\n const pingMessage = {\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n body: serializer.getBytes(true)\n };\n\n if(this.offline) {\n this.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.sendEncryptedRequest(pingMessage).then(() => {\n this.toggleOffline(false);\n }, () => {\n this.debug && this.log('Delay', this.checkConnectionPeriod * 1000);\n this.checkConnectionTimeout = ctx.setTimeout(() => this.checkConnection('from failed checkConnection request'), this.checkConnectionPeriod * 1000 | 0);\n this.checkConnectionPeriod = Math.min(60, this.checkConnectionPeriod * 1.5);\n });\n };\n\n private clearCheckConnectionTimeout() {\n if(this.checkConnectionTimeout !== undefined) {\n clearTimeout(this.checkConnectionTimeout);\n this.checkConnectionTimeout = undefined;\n }\n }\n\n private toggleOffline(offline: boolean) {\n if(this.offline !== offline) {\n this.offline = offline;\n\n this.clearCheckConnectionTimeout();\n if(offline) {\n clearTimeout(this.nextReqTimeout);\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n\n if(this.checkConnectionPeriod < 1.5) {\n this.checkConnectionPeriod = 0;\n }\n\n const delay = this.checkConnectionPeriod * 1000 | 0;\n this.checkConnectionRetryAt = Date.now() + delay;\n this.setConnectionStatus(ConnectionStatus.Closed, this.checkConnectionRetryAt);\n this.checkConnectionTimeout = ctx.setTimeout(() => this.checkConnection('from toggleOfline'), delay);\n this.checkConnectionPeriod = Math.min(30, (1 + this.checkConnectionPeriod) * 1.5);\n\n \n \n \n \n } else {\n this.setConnectionStatus(ConnectionStatus.Connected);\n this.checkLongPoll();\n\n this.scheduleRequest();\n\n \n \n \n \n }\n }\n\n this.setConnectionStatus(offline ? ConnectionStatus.Closed : ConnectionStatus.Connected, offline ? this.checkConnectionRetryAt : undefined);\n }\n\n private handleSentEncryptedRequestHTTP(promise: ReturnType, message: MTMessage, noResponseMsgs: string[]) {\n // let timeout = setTimeout(() => {\n // this.log.error('handleSentEncryptedRequestHTTP timeout', promise, message, noResponseMsgs);\n // }, 5e3);\n\n promise.then((result) => {\n this.toggleOffline(false);\n // this.log('parse for', message);\n return this.parseResponse(result).then((response) => {\n this.debug && this.log.debug('Server response', response);\n\n this.processMessage(response.response, response.messageId, response.sessionId);\n\n this.checkLongPoll();\n this.checkConnectionPeriod = Math.max(1.1, Math.sqrt(this.checkConnectionPeriod));\n\n return true;\n });\n }, (error) => {\n this.log.error('Encrypted request failed', error, message);\n\n this.pushResend(message.msg_id);\n this.toggleOffline(true);\n\n return false;\n }).then((shouldResolve) => {\n // clearTimeout(timeout);\n const sentMessages = this.sentMessages;\n noResponseMsgs.forEach((msgId) => {\n const sentMessage = sentMessages[msgId];\n if(sentMessage) {\n const deferred = sentMessage.deferred;\n delete sentMessages[msgId];\n delete this.pendingMessages[msgId];\n shouldResolve ? deferred.resolve() : deferred.reject();\n }\n });\n });\n }\n \n\n // ั‚ัƒั‚ ะผะพะถะฝะพ ัะดะตะปะฐั‚ัŒ ั‚ะฐะนะผะฐัƒั‚ ะธ ะฒั‹ะฒะพะดะธั‚ัŒ ะดะธัะบะพะฝะฝะตะบั‚\n private pushMessage(message: {\n msg_id: string,\n seq_no: number,\n body: Uint8Array | number[],\n isAPI?: boolean\n }, options: MTMessageOptions) {\n let promise: CancellablePromise;\n if(!options.notContentRelated || options.noResponse) {\n promise = deferredPromise();\n }\n\n this.sentMessages[message.msg_id] = Object.assign(\n message,\n options,\n promise ? {deferred: promise} : undefined\n );\n\n // this.log.error('Networker pushMessage:', this.sentMessages[message.msg_id]);\n\n this.pendingMessages[message.msg_id] = 0;\n\n if(!options.noSchedule) {\n this.scheduleRequest();\n }\n\n if(isObject(options)) {\n options.messageId = message.msg_id;\n }\n\n return promise;\n }\n\n public attachPromise(promise: Promise, message: MTMessage) {\n const canIncrement = true;\n const timeout = setTimeout(() => {\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < this.delays.connectionTimeout) {\n return;\n }\n\n this.log.error('timeout', message);\n if(this.isOnline) {\n this.setConnectionStatus(ConnectionStatus.TimedOut);\n }\n\n /* this.getEncryptedOutput(message).then((bytes) => {\n this.log.error('timeout encrypted', bytes);\n }); */\n }, this.delays.connectionTimeout);\n\n promise.catch(noop).finally(() => {\n clearTimeout(timeout);\n this.setConnectionStatus(ConnectionStatus.Connected);\n\n if(canIncrement) {\n --this.activeRequests;\n this.setDrainTimeout();\n }\n });\n\n if(canIncrement) {\n ++this.activeRequests;\n if(this.onDrainTimeout !== undefined) {\n clearTimeout(this.onDrainTimeout);\n this.onDrainTimeout = undefined;\n }\n }\n }\n\n public setDrainTimeout() {\n if(!this.activeRequests && this.onDrain && this.onDrainTimeout === undefined) {\n this.onDrainTimeout = ctx.setTimeout(() => {\n this.onDrainTimeout = undefined;\n this.log('drain');\n this.onDrain();\n }, DRAIN_TIMEOUT);\n }\n }\n\n public setConnectionStatus(status: ConnectionStatus, retryAt?: number) {\n const isOnline = status === ConnectionStatus.Connected;\n const willChange = this.status !== status;\n this.isOnline = isOnline;\n this.status = status;\n\n if(willChange) {\n if(this.networkerFactory.onConnectionStatusChange) {\n this.networkerFactory.onConnectionStatusChange({\n _: 'networkerStatus',\n status,\n dcId: this.dcId,\n name: this.name,\n isFileNetworker: this.isFileNetworker,\n isFileDownload: this.isFileDownload,\n isFileUpload: this.isFileUpload,\n retryAt\n });\n }\n\n if(this.isOnline) {\n this.scheduleRequest();\n }\n\n if((this.transport as TcpObfuscated)?.connection) {\n this.clearPingDelayDisconnect();\n this.sendPingDelayDisconnect();\n }\n\n // this.getNewTimeOffset = true;\n }\n /* if(this.onConnectionStatusChange) {\n this.onConnectionStatusChange(this.isOnline);\n } */\n }\n\n private pushResend(messageId: string, delay = 100) {\n const value = delay ? Date.now() + delay : 0;\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage.container) {\n for(const innerMsgId of sentMessage.inner) {\n this.pendingMessages[innerMsgId] = value;\n }\n } else {\n this.pendingMessages[messageId] = value;\n }\n\n if(sentMessage.acked) {\n this.log.error('pushResend: acked message?', sentMessage);\n }\n\n if(this.debug) {\n this.log.debug('pushResend:', messageId, sentMessage, this.pendingMessages, delay);\n }\n\n this.scheduleRequest(delay);\n }\n\n // * correct, fully checked\n private async getMsgKey(dataWithPadding: Uint8Array, isOut: boolean) {\n const x = isOut ? 0 : 8;\n const msgKeyLargePlain = bufferConcats(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\n\n const msgKeyLarge = await CryptoWorker.invokeCrypto('sha256', msgKeyLargePlain);\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\n return msgKey;\n };\n\n // * correct, fully checked\n private getAesKeyIv(msgKey: Uint8Array, isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\n const x = isOut ? 0 : 8;\n const sha2aText = new Uint8Array(52);\n const sha2bText = new Uint8Array(52);\n const promises: Array> = [];\n\n sha2aText.set(msgKey, 0);\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\n promises.push(CryptoWorker.invokeCrypto('sha256', sha2aText));\n\n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\n sha2bText.set(msgKey, 36);\n promises.push(CryptoWorker.invokeCrypto('sha256', sha2bText));\n\n return Promise.all(promises).then((results) => {\n const aesKey = new Uint8Array(32);\n const aesIv = new Uint8Array(32);\n const sha2a = new Uint8Array(results[0]);\n const sha2b = new Uint8Array(results[1]);\n\n aesKey.set(sha2a.subarray(0, 8));\n aesKey.set(sha2b.subarray(8, 24), 8);\n aesKey.set(sha2a.subarray(24, 32), 24);\n\n aesIv.set(sha2b.subarray(0, 8));\n aesIv.set(sha2a.subarray(8, 24), 8);\n aesIv.set(sha2b.subarray(24, 32), 24);\n\n return [aesKey, aesIv];\n });\n }\n\n public isStopped() {\n return this.networkerFactory.akStopped && !this.isFileNetworker;\n }\n\n private performScheduledRequest() {\n if(this.isStopped()) {\n return false;\n }\n\n if(this.pendingAcks.length) {\n const ackMsgIds = this.pendingAcks.slice();\n\n // this.log('acking messages', ackMsgIDs)\n this.wrapMtpMessage({\n _: 'msgs_ack',\n msg_ids: ackMsgIds\n }, {\n notContentRelated: true,\n noSchedule: true\n });\n }\n\n const pendingResendReqLength = this.pendingResendReq.length;\n if(pendingResendReqLength) {\n const options: MTMessageOptions = {...RESEND_OPTIONS};\n const msgIds = this.pendingResendReq.splice(0, pendingResendReqLength);\n this.wrapMtpMessage({\n _: 'msg_resend_req',\n msg_ids: msgIds\n }, options);\n\n this.log('resend: resending requests', options.messageId, msgIds);\n /* this.lastResendReq = {\n reqMsgId: options.messageId,\n msgIds: msgIds\n }; */\n\n // this.pendingResendReq.length = 0;\n }\n\n // if(this.pendingResendAnsReq.length) {\n // const options: MTMessageOptions = {...RESEND_OPTIONS};\n // const msgIds = this.pendingResendAnsReq.slice();\n // this.wrapMtpMessage({\n // _: 'msg_resend_ans_req',\n // msg_ids: msgIds\n // }, options);\n\n // this.log('resend: requesting answers', options.messageId, msgIds);\n // this.lastResendAnsReq = {\n // reqMsgId: options.messageId,\n // msgIds: msgIds\n // };\n\n // // this.pendingResendAnsReq.length = 0;\n // }\n\n let outMessage: MTMessage;\n const messages: typeof outMessage[] = [];\n\n // const currentTime = Date.now();\n let messagesByteLen = 0;\n\n \n let hasApiCall = false;\n let hasHttpWait = false;\n \n\n let lengthOverflow = false;\n\n // * ะกัŽะดะฐ ะฝะธะบะพะณะดะฐ ะฝะต ะฟะพะฟะฐะดัƒั‚ ะบะพะฝั‚ะตะนะฝะตั€ั‹, ั‚ะฐะบ ะบะฐะบ ะธั… ะฝะต ะฑัƒะดะตั‚ ะฒ pendingMessages\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\n for(const messageId of keys) {\n // const value = this.pendingMessages[messageId];\n\n // if(!value || value <= currentTime) {\n const message = this.sentMessages[messageId];\n if(message && message.body) {\n /* if(message.fileUpload) {\n this.log('performScheduledRequest message:', message, message.body.length, (message.body as Uint8Array).byteLength, (message.body as Uint8Array).buffer.byteLength);\n } */\n\n const messageByteLength = message.body.length + 32;\n\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\n this.log.warn('lengthOverflow', message, messages);\n lengthOverflow = true;\n\n if(outMessage) { // if it's not a first message\n break;\n }\n }\n\n messages.push(message);\n messagesByteLen += messageByteLength;\n\n \n if(message.isAPI) {\n hasApiCall = true;\n } else if(message.longPoll) {\n hasHttpWait = true;\n }\n \n\n outMessage = message;\n } else {\n // this.log(message, messageId)\n }\n\n delete this.pendingMessages[messageId];\n // }\n }\n\n \n \n if(this.transport instanceof HTTP)\n \n if(hasApiCall && !hasHttpWait) {\n const serializer = new TLSerialization({mtproto: true});\n serializer.storeMethod('http_wait', {\n max_delay: 500,\n wait_after: 150,\n max_wait: 3000\n });\n\n messages.push({\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(),\n body: serializer.getBytes(true)\n });\n }\n \n\n if(!messages.length) {\n // this.log('no scheduled messages')\n return;\n }\n\n \n const noResponseMsgs: Array = messages.filter((message) => message.noResponse).map((message) => message.msg_id);\n \n\n if(messages.length > 1) {\n const container = this.generateContainerMessage(messagesByteLen, messages);\n outMessage = container.messageWithBody;\n\n this.sentMessages[outMessage.msg_id] = container.message;\n } else {\n this.sentMessages[outMessage.msg_id] = outMessage;\n }\n\n this.pendingAcks = [];\n\n const promise = this.sendEncryptedRequest(outMessage);\n\n \n \n if(this.transport instanceof HTTP)\n \n this.handleSentEncryptedRequestHTTP(promise, outMessage, noResponseMsgs);\n \n\n \n \n if(!(this.transport instanceof HTTP))\n \n this.cleanupSent(); // ! WARNING\n \n\n if(lengthOverflow) {\n this.scheduleRequest();\n }\n }\n\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\n const container = new TLSerialization({\n mtproto: true,\n startMaxLength: messagesByteLen + 64\n });\n\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\n container.storeInt(messages.length, 'CONTAINER[count]');\n\n const innerMessages: string[] = [];\n messages.forEach((message, i) => {\n innerMessages.push(message.msg_id);\n // this.log('Pushing to container:', message.msg_id);\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\n });\n\n const message: MTMessage = {\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n container: true,\n inner: innerMessages\n };\n\n if(Modes.debug/* || true */) {\n this.log.warn('Container', innerMessages, message.msg_id, message.seq_no);\n }\n\n return {\n message,\n messageWithBody: Object.assign({body: container.getBytes(true)}, message)\n };\n }\n\n private async getEncryptedMessage(dataWithPadding: Uint8Array) {\n const msgKey = await this.getMsgKey(dataWithPadding, true);\n const keyIv = await this.getAesKeyIv(msgKey, true);\n // this.log('after msg key iv')\n\n const encryptedBytes = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithPadding, keyIv[0], keyIv[1]);\n // this.log('Finish encrypt')\n\n return {\n bytes: encryptedBytes,\n msgKey\n };\n }\n\n private getDecryptedMessage(msgKey: Uint8Array, encryptedData: Uint8Array) {\n // this.log('get decrypted start')\n return this.getAesKeyIv(msgKey, false).then((keyIv) => {\n // this.log('after msg key iv')\n return CryptoWorker.invokeCrypto('aes-decrypt', encryptedData, keyIv[0], keyIv[1]);\n });\n }\n\n private getEncryptedOutput(message: MTMessage) {\n /* if(DEBUG) {\n this.log.debug('Send encrypted', message, this.authKeyId);\n } */\n /* if(!this.isOnline) {\n this.log('trying to send message when offline:', Object.assign({}, message));\n //debugger;\n } */\n\n const data = new TLSerialization({\n startMaxLength: message.body.length + 2048\n });\n\n data.storeIntBytes(this.serverSalt, 64, 'salt');\n data.storeIntBytes(this.sessionId, 64, 'session_id');\n\n data.storeLong(message.msg_id, 'message_id');\n data.storeInt(message.seq_no, 'seq_no');\n\n data.storeInt(message.body.length, 'message_data_length');\n data.storeRawBytes(message.body, 'message_data');\n\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\n const desSalt = des.fetchLong();\n const desSessionId = des.fetchLong();\n\n if(!this.isOnline) {\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\n } */\n\n /* const messageDataLength = message.body.length;\n let canBeLength = 0; // bytes\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 4;\n canBeLength += 4;\n canBeLength += message.body.length; */\n\n const dataBuffer = data.getBuffer();\n\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\n } */\n\n const paddingLength = (16 - (data.getOffset() % 16)) + 16 * (1 + nextRandomUint(8) % 5);\n const padding = /* (message as any).padding || */randomize(new Uint8Array(paddingLength))/* .fill(0) */;\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157,\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150,\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28, 167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157,\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150,\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\n\n // (message as any).padding = padding;\n\n const dataWithPadding = bufferConcats(dataBuffer, padding);\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\n\n /* if(dataWithPadding.byteLength % 16) {\n this.log.error('aaa', dataWithPadding, paddingLength);\n }\n\n if(message.fileUpload) {\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\n } */\n\n // * full next block is correct\n return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => {\n /* if(DEBUG) {\n this.log('Got encrypted out message', encryptedResult);\n } */\n\n const request = new TLSerialization({\n startMaxLength: encryptedResult.bytes.length + 256\n });\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\n\n const requestData = request.getBytes(true);\n\n // if(this.isFileNetworker) {\n // //this.log('Send encrypted: requestData length:', requestData.length, requestData.length % 16, paddingLength % 16, paddingLength, data.offset, encryptedResult.msgKey.length % 16, encryptedResult.bytes.length % 16);\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\n // }\n\n return requestData;\n });\n }\n\n private async sendEncryptedRequest(message: MTMessage) {\n const requestData = await this.getEncryptedOutput(message);\n\n if(!this.transport) {\n this.log.error('trying to send something when offline', this.transport, this);\n }\n\n this.debug && this.log.debug('sending:', message, [message.msg_id].concat(message.inner || []), requestData.length);\n const promise: Promise = this.transport ? this.transport.send(requestData) as any : Promise.reject({});\n // this.debug && this.log.debug('sendEncryptedRequest: launched message into space:', message, promise);\n\n \n \n \n\n \n if(!(this.transport instanceof HTTP)) return promise;\n \n\n const baseError: ApiError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE',\n // @ts-ignore\n transport: this.transport\n };\n\n return promise.then((result) => {\n if(!result?.byteLength) {\n throw baseError;\n }\n\n // this.debug && this.log.debug('sendEncryptedRequest: got response for:', message, [message.msg_id].concat(message.inner || []));\n return result;\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n type: 'NETWORK_BAD_REQUEST',\n originalError: error\n });\n }\n\n throw error;\n });\n \n }\n\n public parseResponse(responseBuffer: Uint8Array) {\n // const perf = performance.now();\n /* if(this.debug) {\n this.log.debug('Start parsing response', responseBuffer);\n } */\n\n this.lastResponseTime = Date.now();\n\n const deserializer = new TLDeserialization(responseBuffer);\n\n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\n if(!bytesCmp(authKeyId, this.authKeyId)) {\n throw new Error('[MT] Invalid server auth_key_id: ' + bytesToHex(authKeyId));\n }\n\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\n\n return this.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => {\n // this.log('after decrypt')\n return this.getMsgKey(dataWithPadding, false).then((calcMsgKey) => {\n if(!bytesCmp(msgKey, calcMsgKey)) {\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\n this.updateSession(); // fix 28.01.2020\n throw new Error('[MT] server msgKey mismatch, updating session');\n }\n // this.log('after msgKey check')\n\n let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\n\n /* const salt = */deserializer.fetchIntBytes(64, true, 'salt'); // need\n const sessionId = deserializer.fetchIntBytes(64, true, 'session_id');\n const messageId = deserializer.fetchLong('message_id');\n\n if(!bytesCmp(sessionId, this.sessionId) &&\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\n this.log.warn('Sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\n // this.updateSession();\n // this.sessionID = sessionID;\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\n }\n\n const seqNo = deserializer.fetchInt('seq_no');\n\n const totalLength = dataWithPadding.byteLength;\n\n const messageBodyLength = deserializer.fetchInt('message_data[length]');\n let offset = deserializer.getOffset();\n\n if((messageBodyLength % 4) ||\n messageBodyLength > totalLength - offset) {\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\n }\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\n\n offset = deserializer.getOffset();\n const paddingLength = totalLength - offset;\n if(paddingLength < 12 || paddingLength > 1024) {\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\n }\n\n // let buffer = bytesToArrayBuffer(messageBody);\n deserializer = new TLDeserialization(/* buffer */messageBody, {\n mtproto: true,\n override: {\n mt_message: (result: any, field: string) => {\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\n result.seqno = deserializer.fetchInt(field + '[seqno]');\n result.bytes = deserializer.fetchInt(field + '[bytes]');\n\n const offset = deserializer.getOffset();\n\n // self.log('mt_message!!!!!', result, field);\n\n try {\n result.body = deserializer.fetchObject('Object', field + '[body]');\n } catch(e) {\n this.log.error('parse error', (e as Error).message, (e as Error).stack);\n result.body = {\n _: 'parse_error',\n error: e\n };\n }\n\n if(deserializer.getOffset() !== offset + result.bytes) {\n // console.warn(dT(), 'set offset', this.offset, offset, result.bytes)\n // this.log(result)\n deserializer.setOffset(offset + result.bytes);\n }\n // this.log('override message', result)\n },\n mt_rpc_result: (result: any, field: any) => {\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\n\n const sentMessage = this.sentMessages[result.req_msg_id];\n const type = sentMessage && sentMessage.resultType || 'Object';\n\n if(result.req_msg_id && !sentMessage) {\n // console.warn(dT(), 'Result for unknown message', result);\n return;\n }\n\n // deserializer.setMtproto(false);\n result.result = deserializer.fetchObject(type, field + '[result]');\n // deserializer.setMtproto(true);\n // self.log(dT(), 'override rpc_result', sentMessage, type, result);\n }\n }\n });\n\n const response = deserializer.fetchObject('', 'INPUT');\n // this.log.error('Parse response time:', performance.now() - perf);\n return {\n response,\n messageId,\n sessionId,\n seqNo\n };\n });\n });\n }\n\n private applyServerSalt(newServerSalt: string) {\n const serverSalt = longToBytes(newServerSalt);\n\n sessionStorage.set({\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\n });\n\n this.serverSalt = new Uint8Array(serverSalt);\n }\n\n // ! ั‚ะฐะนะผะฐัƒั‚ ะพั‡ะตะฝัŒ ัะธะปัŒะฝะพ ั‚ะพั€ะผะพะทะธั‚ ัะบะพั€ะพัั‚ัŒ ั€ะฐะฑะพั‚ั‹ ัะพะบะตั‚ะฐ (ะดะฐะถะต ะฝัƒะปะตะฒะพะน)\n public scheduleRequest(delay?: number) {\n /* if(!this.isOnline) {\n return;\n } */\n\n \n \n if(this.transport instanceof HTTP) {\n \n if(this.offline) {\n this.checkConnection('forced schedule');\n }\n\n delay ||= 0; // set zero timeout to pack other messages too\n \n }\n \n \n\n const nextReq = Date.now() + (delay || 0);\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\n // this.debug && this.log('scheduleRequest: nextReq', this.nextReq, nextReq);\n return;\n }\n\n // this.debug && this.log('scheduleRequest: delay', delay);\n\n /* if(this.nextReqTimeout) {\n return;\n } */\n\n // const perf = performance.now();\n if(this.nextReqTimeout) {\n clearTimeout(this.nextReqTimeout);\n }\n\n const cb = () => {\n // this.debug && this.log('scheduleRequest: timeout delay was:', performance.now() - perf);\n\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n\n \n \n if(this.transport instanceof HTTP)\n \n if(this.offline) {\n // this.log('Cancel scheduled');\n return;\n }\n \n\n this.performScheduledRequest();\n };\n\n this.nextReq = nextReq;\n\n if(delay !== undefined) {\n this.nextReqTimeout = ctx.setTimeout(cb, delay);\n } else {\n cb();\n }\n }\n\n private ackMessage(msgId: MTLong) {\n // this.log('ack message', msgID)\n this.pendingAcks.push(msgId);\n\n let delay: number;\n\n \n \n if(this.transport instanceof HTTP)\n \n delay = 30000;\n \n\n this.scheduleRequest(delay);\n }\n\n private reqResend(msgId: MTLong/* , isAnswer?: boolean */) {\n if(this.debug) {\n this.log.debug('Req resend', msgId/* , isAnswer */);\n }\n\n // (isAnswer ? this.pendingResendAnsReq : this.pendingResendReq).push(msgId);\n this.pendingResendReq.push(msgId);\n this.scheduleRequest(100);\n }\n\n public cleanupSent() {\n let notEmpty = false;\n const sentMessages = this.sentMessages;\n // this.log('clean start', this.dcId/*, sentMessages*/)\n Object.keys(sentMessages).forEach((msgId) => {\n const message = sentMessages[msgId];\n\n // this.log('clean iter', msgID, message)\n if(message.notContentRelated && this.pendingMessages[msgId] === undefined) {\n // this.log('clean notContentRelated', msgID)\n delete sentMessages[msgId];\n } else if(message.container) {\n for(const innerMsgId of message.inner) {\n if(sentMessages[innerMsgId] !== undefined) {\n // this.log('clean failed, found', msgID, message.inner[i], sentMessages[message.inner[i]].seq_no)\n notEmpty = true;\n return;\n }\n }\n // this.log('clean container', msgID)\n delete sentMessages[msgId];\n } else {\n notEmpty = true;\n }\n });\n\n return !notEmpty;\n }\n\n private processMessageAck(messageId: Long) {\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage && !sentMessage.acked) {\n // delete sentMessage.body;\n sentMessage.acked = true;\n }\n }\n\n private processError(rawError: {error_message: string, error_code: number}): ApiError {\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\n rawError.error_code = rawError.error_code;\n\n return {\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\n type: matches[1] as any || 'UNKNOWN',\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\n originalError: rawError\n };\n }\n\n /**\n * * ั‚ะพะปัŒะบะพ ะดะปั ัะพะบะตั‚ะฐ\n * TODO: consider about containers resend\n */\n public resend() {\n const sentMessages = this.sentMessages;\n for(const id in sentMessages) {\n const msg = sentMessages[id];\n if(msg.body || msg.container) {\n this.pushResend(id);\n }\n }\n\n if((this.transport as TcpObfuscated).connection) {\n this.clearPingDelayDisconnect();\n this.sendPingDelayDisconnect();\n }\n }\n\n /* public requestMessageStatus() {\n const ids: string[] = [];\n for(const id in this.sentMessages) {\n const message = this.sentMessages[id];\n if(message.isAPI && message.fileUpload) {\n ids.push(message.msg_id);\n }\n }\n\n this.wrapMtpMessage({\n _: 'msgs_state_req',\n msg_ids: ids\n }, {\n notContentRelated: true\n }).then((res) => {\n this.log('status', res);\n });\n } */\n\n private applyServerTime(messageId: string) {\n const serverTime = bigInt(messageId).shiftRight(32).toJSNumber();\n this.log('applying server time', serverTime);\n return this.timeManager.applyServerTime(serverTime);\n }\n\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\n public processMessage(message: any, messageId: MTLong, sessionId: Uint8Array | number[]) {\n if(message._ === 'messageEmpty') {\n this.log.warn('processMessage: messageEmpty', message, messageId);\n return;\n }\n\n // messageId = messageId.toString();\n\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\n if(msgidInt % 2) {\n this.log.warn('Server even message id: ', messageId, message);\n return;\n }\n\n if(this.debug) {\n this.log.debug('process message', message, messageId);\n }\n\n if(this.pingDelayDisconnectDeferred) {\n this.pingDelayDisconnectDeferred.resolve('any message');\n }\n\n // let changedTimeOffset: boolean;\n // if(this.getNewTimeOffset) {\n // changedTimeOffset = this.applyServerTime(messageId);\n // this.getNewTimeOffset = undefined;\n // }\n\n switch(message._) {\n case 'msg_container': {\n for(const innerMessage of message.messages) {\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\n }\n\n break;\n }\n\n case 'bad_server_salt': {\n this.log('Bad server salt', message);\n\n this.applyServerSalt(message.new_server_salt);\n\n if(this.sentMessages[message.bad_msg_id]) {\n this.pushResend(message.bad_msg_id);\n }\n\n this.ackMessage(messageId);\n\n // simulate disconnect\n /* try {\n this.log('networker state:', this);\n // @ts-ignore\n this.transport.ws.close(1000);\n } catch(err) {\n this.log.error('transport', this.transport, err);\n } */\n\n break;\n }\n\n case 'bad_msg_notification': {\n this.log.error('Bad msg notification', message);\n\n switch(message.error_code) {\n case 16: // * msg_id too low\n case 17: // * msg_id too high\n case 32: // * msg_seqno too low\n case 33: // * msg_seqno too high\n case 64: { // * invalid container\n // if(changedTimeOffset === undefined) {\n // changedTimeOffset = this.applyServerTime(messageId);\n // }\n\n const changedTimeOffset = this.applyServerTime(messageId);\n if(message.error_code === 17 || changedTimeOffset) {\n this.log('Update session');\n this.updateSession();\n }\n\n const badMessage = this.updateSentMessage(message.bad_msg_id);\n if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020\n // this.ackMessage(messageId);\n }\n\n // * invalid container\n /* case 64: {\n const badMessage = this.sentMessages[message.bad_msg_id];\n if(badMessage) {\n for(const msgId of badMessage.inner) {\n if(this.sentMessages[msgId] !== undefined) {\n this.updateSentMessage\n }\n }\n const inner = badMessage.inner;\n }\n } */\n }\n\n break;\n }\n\n case 'message': {\n if(this.lastServerMessages.indexOf(messageId) !== -1) {\n // console.warn('[MT] Server same messageId: ', messageId)\n this.ackMessage(messageId);\n return;\n }\n\n this.lastServerMessages.push(messageId);\n if(this.lastServerMessages.length > 100) {\n this.lastServerMessages.shift();\n }\n\n this.processMessage(message.body, message.msg_id, sessionId);\n break;\n }\n\n case 'new_session_created': {\n this.ackMessage(messageId);\n\n if(this.debug) {\n this.log.debug('new_session_created', message);\n }\n // this.updateSession();\n\n this.processMessageAck(message.first_msg_id);\n this.applyServerSalt(message.server_salt);\n\n sessionStorage.get('dc').then((baseDcId) => {\n if(baseDcId === this.dcId && !this.isFileNetworker && this.networkerFactory.updatesProcessor) {\n this.networkerFactory.updatesProcessor(message);\n }\n });\n break;\n }\n\n case 'msgs_ack': {\n this.debug && this.log('got acks', message.msg_ids);\n for(const msgId of message.msg_ids) {\n this.processMessageAck(msgId);\n }\n\n break;\n }\n\n case 'msg_detailed_info': {\n const sentMessage = this.sentMessages[message.msg_id];\n if(!sentMessage) {\n this.ackMessage(message.answer_msg_id);\n break;\n }/* else if(sentMessage.acked) {\n this.reqResend(message.answer_msg_id, true);\n }\n\n break; */\n }\n\n case 'msg_new_detailed_info': {\n if(this.pendingAcks.indexOf(message.answer_msg_id) !== -1) {\n break;\n }\n\n this.reqResend(message.answer_msg_id);\n break;\n }\n\n case 'msgs_state_info': {\n this.ackMessage(message.answer_msg_id);\n const arr = [\n [this.lastResendReq, this.pendingResendReq] as const\n // [this.lastResendAnsReq, this.pendingResendAnsReq] as const\n ];\n\n for(const [lastResend, pendingResend] of arr) {\n if(lastResend?.reqMsgId === message.req_msg_id && pendingResend.length) {\n for(const badMsgId of lastResend.msgIds) {\n const pos = pendingResend.indexOf(badMsgId);\n if(pos !== -1) {\n pendingResend.splice(pos, 1);\n }\n }\n }\n }\n\n break;\n }\n\n case 'rpc_result': {\n this.ackMessage(messageId);\n\n const sentMessageId = message.req_msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n if(this.debug) {\n this.log('Rpc response', message.result, sentMessage);\n }\n\n this.processMessageAck(sentMessageId);\n if(sentMessage) {\n const deferred = sentMessage.deferred;\n if(message.result._ === 'rpc_error') {\n const error = this.processError(message.result);\n this.log('Rpc error', error);\n if(deferred) {\n deferred.reject(error);\n }\n } else {\n if(deferred) {\n deferred.resolve(message.result);\n }\n\n if(sentMessage.isAPI && !this.connectionInited) {\n this.connectionInited = true;\n }\n }\n\n delete this.sentMessages[sentMessageId];\n } else {\n if(this.debug) {\n this.log('Rpc result for unknown message:', sentMessageId, message);\n }\n }\n\n break;\n }\n\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages don't require acknowledgments\n /* const sentMessageId = message.msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n if(sentMessage) {\n sentMessage.deferred.resolve(message);\n delete this.sentMessages[sentMessageId];\n } */\n const pingId = message.ping_id;\n if(this.lastPingDelayDisconnectId === pingId) {\n const deferred = this.pingDelayDisconnectDeferred;\n if(deferred) {\n deferred.resolve('pong');\n } else {\n this.log('ping deferred deleted', pingId);\n }\n }\n\n break;\n }\n\n default:\n this.ackMessage(messageId);\n\n /* if(this.debug) {\n this.log.debug('Update', message);\n } */\n\n if(this.networkerFactory.updatesProcessor !== null) {\n this.networkerFactory.updatesProcessor(message);\n }\n break;\n }\n }\n}\n","import bigInt from 'big-integer';\n\nexport default function sortLongsArray(arr: string[]) {\n return arr.map((long) => {\n return bigInt(long);\n }).sort((a, b) => {\n return a.compare(b);\n }).map((bigInt) => {\n return bigInt.toString(10);\n });\n}\n","import addPadding from '../bytes/addPadding';\nimport bigInt from 'big-integer';\nimport {bigIntToBytes} from '../bigInt/bigIntConversion';\n\nexport default function longToBytes(sLong: string) {\n const bigIntBytes = bigIntToBytes(bigInt(sLong)).reverse();\n const bytes = addPadding(bigIntBytes, 8, true, false, false);\n // console.log('longToBytes', bytes, bigIntBytes);\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ConnectionStatusChange} from './connectionStatus';\nimport MTPNetworker from './networker';\nimport {InvokeApiOptions} from '../../types';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {AppManager} from '../appManagers/manager';\n\nexport class NetworkerFactory extends AppManager {\n private networkers: MTPNetworker[] = [];\n public language = navigator.language || App.langPackCode;\n public updatesProcessor: (obj: any) => void = null;\n // public onConnectionStatusChange: (status: ConnectionStatusChange) => void = null;\n public akStopped = false;\n\n public onConnectionStatusChange(status: ConnectionStatusChange) {\n this.rootScope.dispatchEvent('connection_status_change', status);\n // ({type: 'connectionStatusChange', payload: status});\n }\n\n public removeNetworker(networker: MTPNetworker) {\n indexOfAndSplice(this.networkers, networker);\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n }\n\n public getNetworker(dcId: number, authKey: Uint8Array, authKeyId: Uint8Array, serverSalt: Uint8Array, options: InvokeApiOptions) {\n // console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\n const networker = new MTPNetworker(this, this.timeManager, dcId, authKey, authKeyId, serverSalt, options);\n this.networkers.push(networker);\n return networker;\n }\n\n public startAll() {\n if(this.akStopped) {\n const stoppedNetworkers = this.networkers.filter((networker) => networker.isStopped());\n\n this.akStopped = false;\n this.updatesProcessor && this.updatesProcessor({_: 'new_session_created'});\n\n for(const networker of stoppedNetworkers) {\n networker.scheduleRequest();\n }\n }\n }\n\n public stopAll() {\n this.akStopped = true;\n }\n\n public setLanguage(langCode: string) {\n this.language = langCode;\n for(const networker of this.networkers) {\n if(!networker.isFileNetworker) {\n networker.connectionInited = false;\n }\n }\n }\n\n public unsetConnectionInited() {\n for(const networker of this.networkers) {\n networker.connectionInited = false;\n }\n }\n\n public forceReconnectTimeout() {\n for(const networker of this.networkers) {\n networker.forceReconnectTimeout();\n }\n }\n\n public forceReconnect() {\n for(const networker of this.networkers) {\n if(!networker.isFileNetworker) {\n networker.forceReconnect();\n break;\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {TLSerialization} from './tl_utils';\nimport cryptoWorker from '../crypto/cryptoMessagePort';\nimport Modes from '../../config/modes';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport bigInt from 'big-integer';\n\nexport type RSAPublicKeyHex = {\n modulus: string,\n exponent: string\n};\n\nexport class RSAKeysManager {\n /**\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\n *\n *\n * -----BEGIN RSA PUBLIC KEY-----\n * MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\n * 5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\n * 62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\n * +aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\n * t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\n * 5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\n * -----END RSA PUBLIC KEY-----\n *\n * -----BEGIN RSA PUBLIC KEY-----\n * MIIBCgKCAQEBadMIUYSKhyznMh+Pg+OxTLyDZrWEjQIPZC3oJCtuZX7qUxgcWqFX\n * Q1952TSY8S8NYuz12sK9Fvp+lil1hIG0U/cuPsK08VB1hB4VA+p0S46fGwVsRovq\n * 4qUiUIzQSjSHDASuXTOinlYEHwmg/GaLc5G7qhePWa0p9YmqYR5Ha3xHJywcXZrn\n * yE3nC9igL96Aanqv+Prbu1N+r9vAgZeHh9cfbtbV8WWwruOANOTEv2ctQLR0dfr9\n * MwQXNePTPQlYsO9HNIGS1LWe7hZFtGBAVJH92F7Kig68WqHM3PIZ6Sq7N0VSzfzL\n * b11Z/YHz2UXYtXADwL/m5pTpKBUtJBXkOQIDAQAB\n * -----END RSA PUBLIC KEY-----\n *\n * Bytes can be got via\n * $ openssl rsa -in rsa.pem -RSAPublicKey_in -pubout > pub.pem\n * $ openssl rsa -pubin -in pub.pem -text -noout\n */\n\n /* private publisKeysHex = [{\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\n exponent: '010001'\n }, {\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\n exponent: '010001'\n }, {\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\n exponent: '010001'\n }, {\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\n exponent: '010001'\n }, {\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\n exponent: '010001'\n }]; */\n\n private testPublicKeysHex: RSAPublicKeyHex[] = [{\n modulus: 'c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5',\n exponent: '010001'\n }];\n\n private publisKeysHex: RSAPublicKeyHex[] = [{\n // modulus: '00e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\n modulus: 'e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\n exponent: '010001'\n }];\n\n private publicKeysParsed: {\n [hex: string]: RSAPublicKeyHex\n } = {};\n private prepared = false;\n private preparePromise: Promise = null;\n\n constructor() {\n if(Modes.test) {\n this.publisKeysHex = this.testPublicKeysHex;\n }\n }\n\n public prepare(): Promise {\n if(this.preparePromise) return this.preparePromise;\n else if(this.prepared) {\n return Promise.resolve();\n }\n\n return this.preparePromise = Promise.all(this.publisKeysHex.map((keyParsed) => {\n const RSAPublicKey = new TLSerialization();\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\n\n const buffer = RSAPublicKey.getBuffer();\n\n return cryptoWorker.invokeCrypto('sha1', buffer).then((bytes) => {\n const fingerprintBytes = bytes.slice(-8);\n fingerprintBytes.reverse();\n\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\n modulus: keyParsed.modulus,\n exponent: keyParsed.exponent\n };\n });\n })).then(() => {\n this.prepared = true;\n\n // console.log('[MT] Prepared keys');\n this.preparePromise = null;\n });\n }\n\n public async select(fingerprints: Array) {\n await this.prepare();\n\n for(let i = 0; i < fingerprints.length; ++i) {\n let fingerprintHex = bigInt(fingerprints[i]).toString(16).toLowerCase();\n\n if(fingerprintHex.length < 16) {\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\n }\n\n // console.log(fingerprintHex, this.publicKeysParsed);\n const foundKey = this.publicKeysParsed[fingerprintHex];\n if(foundKey) {\n return Object.assign({\n fingerprint: fingerprints[i]\n }, foundKey);\n }\n }\n }\n}\n\nexport default new RSAKeysManager();\n","export default function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\n const len = bytes1.length;\n const bytes = new Uint8Array(len);\n\n for(let i = 0; i < len; ++i) {\n bytes[i] = bytes1[i] ^ bytes2[i];\n }\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n \nimport transportController from './transports/controller';\n \n\nimport {TLSerialization, TLDeserialization} from './tl_utils';\nimport {TransportType} from './dcConfigurator';\nimport rsaKeysManager from './rsaKeysManager';\n\nimport CryptoWorker from '../crypto/cryptoMessagePort';\n\nimport {logger, LogTypes} from '../logger';\nimport DEBUG from '../../config/debug';\nimport {Awaited, DcId} from '../../types';\nimport addPadding from '../../helpers/bytes/addPadding';\nimport bytesCmp from '../../helpers/bytes/bytesCmp';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport bytesXor from '../../helpers/bytes/bytesXor';\nimport {bigIntFromBytes} from '../../helpers/bigInt/bigIntConversion';\nimport bigInt from 'big-integer';\nimport randomize from '../../helpers/array/randomize';\nimport {AppManager} from '../appManagers/manager';\n\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\n\nfNewNonce = false;\nfNonce = false;\nfResult = false; */\n\ntype AuthOptions = {\n dcId: number,\n nonce: Uint8Array,\n\n serverNonce?: Uint8Array,\n pq?: Uint8Array,\n fingerprints?: string[],\n publicKey?: {\n modulus: string,\n exponent: string,\n fingerprint: string\n },\n\n // good\n p?: Uint8Array,\n q?: Uint8Array,\n\n newNonce?: Uint8Array,\n\n retry?: number,\n\n b?: Uint8Array,\n g?: number,\n gA?: Uint8Array,\n dhPrime?: Uint8Array,\n\n tmpAesKey?: Uint8Array,\n tmpAesIv?: Uint8Array,\n\n authKeyId?: Uint8Array,\n authKey?: Uint8Array,\n serverSalt?: Uint8Array,\n\n localTime?: number,\n serverTime?: any,\n};\n\ntype ResPQ = {\n _: 'resPQ';\n nonce: Uint8Array;\n pq: Uint8Array;\n server_nonce: Uint8Array;\n server_public_key_fingerprints: string[];\n};\n\ntype P_Q_inner_data = {\n _: 'p_q_inner_data_dc';\n pq: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n new_nonce: Uint8Array;\n dc: number;\n};\n\ntype req_DH_params = {\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n public_key_fingerprint: string;\n encrypted_data: Uint8Array;\n};\n\nexport class Authorizer extends AppManager {\n private cached: {\n [dcId: DcId]: Promise\n };\n\n private log: ReturnType;\n\n private transportType: TransportType;\n\n \n private getTransportTypePromise: Promise;\n \n\n protected after() {\n this.cached = {};\n this.log = logger(`AUTHORIZER`, LogTypes.Error | LogTypes.Log);\n }\n\n private sendPlainRequest(dcId: DcId, requestArray: Uint8Array) {\n const requestLength = requestArray.byteLength;\n\n const header = new TLSerialization();\n header.storeLongP(0, 0, 'auth_key_id');\n header.storeLong(this.timeManager.generateId(), 'msg_id');\n header.storeInt(requestLength, 'request_length');\n\n const headerArray = header.getBytes(true) as Uint8Array;\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\n resultArray.set(headerArray);\n resultArray.set(requestArray, headerArray.length);\n\n const transport = this.dcConfigurator.chooseServer(dcId, 'client', this.transportType);\n const baseError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE'\n };\n\n if(DEBUG) {\n this.log('mtpSendPlainRequest: creating requestPromise');\n }\n\n const promise = transport.send(resultArray) as any as Promise;\n return promise.then((result) => {\n if(DEBUG) {\n this.log('mtpSendPlainRequest: in good sector', result);\n }\n\n if(!result || !result.byteLength) {\n throw baseError;\n }\n\n try {\n /* result = fResult ? fResult : result;\n fResult = new Uint8Array(0); */\n\n const deserializer = new TLDeserialization(result, {mtproto: true});\n\n if(result.length === 4) {\n const errorCode = deserializer.fetchInt();\n this.log.error('mtpSendPlainRequest: wrong response, error code:', errorCode);\n throw errorCode;\n }\n\n const auth_key_id = deserializer.fetchLong('auth_key_id');\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\n\n const msg_id = deserializer.fetchLong('msg_id');\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\n\n const msg_len = deserializer.fetchInt('msg_len');\n if(!msg_len) this.log.error('no msg_len', msg_len);\n\n return deserializer;\n } catch(e) {\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\n const error = Object.assign(baseError, {originalError: e});\n throw error;\n }\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n originalError: error\n });\n }\n\n throw error;\n });\n }\n\n private async sendReqPQ(auth: AuthOptions) {\n const request = new TLSerialization({mtproto: true});\n\n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\n\n if(DEBUG) {\n this.log('Send req_pq', bytesToHex(auth.nonce));\n }\n\n let deserializer: Awaited>;\n try {\n const promise = this.sendPlainRequest(auth.dcId, request.getBytes(true));\n rsaKeysManager.prepare();\n deserializer = await promise;\n } catch(error) {\n this.log.error('req_pq error', (error as Error).message);\n throw error;\n }\n\n const response: ResPQ = deserializer.fetchObject('ResPQ');\n\n if(response._ !== 'resPQ') {\n throw new Error('[MT] resPQ response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n this.log.error(auth.nonce, response.nonce);\n throw new Error('[MT] resPQ nonce mismatch');\n }\n\n auth.serverNonce = response.server_nonce; // need\n auth.pq = response.pq;\n auth.fingerprints = response.server_public_key_fingerprints;\n\n if(DEBUG) {\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\n }\n\n const publicKey = await rsaKeysManager.select(auth.fingerprints);\n if(!publicKey) {\n throw new Error('[MT] No public key found');\n }\n\n auth.publicKey = publicKey;\n\n if(DEBUG) {\n this.log('PQ factorization start', auth.pq);\n }\n\n // let pAndQ: Awaited>;\n try {\n var pAndQ = await CryptoWorker.invokeCrypto('factorize', auth.pq);\n } catch(error) {\n this.log.error('worker error factorize', error);\n throw error;\n }\n\n auth.p = pAndQ[0];\n auth.q = pAndQ[1];\n\n if(DEBUG) {\n this.log('PQ factorization done', pAndQ);\n }\n\n return this.sendReqDhParams(auth);\n }\n\n private async sendReqDhParams(auth: AuthOptions): Promise {\n auth.newNonce = randomize(new Uint8Array(32));\n\n const p_q_inner_data_dc: P_Q_inner_data = {\n _: 'p_q_inner_data_dc',\n pq: auth.pq,\n p: auth.p,\n q: auth.q,\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n new_nonce: auth.newNonce,\n dc: 0\n };\n\n const pQInnerDataSerialization = new TLSerialization({mtproto: true});\n pQInnerDataSerialization.storeObject(p_q_inner_data_dc, 'P_Q_inner_data', 'DECRYPTED_DATA');\n\n const data = pQInnerDataSerialization.getBytes(true);\n if(data.length > 144) {\n throw 'DH_params: data is more than 144 bytes!';\n }\n\n const dataWithPadding = addPadding(data, 192, false, true, false);\n const dataPadReversed = dataWithPadding.slice().reverse();\n\n const getKeyAesEncrypted = async() => {\n for(;;) {\n const tempKey = randomize(new Uint8Array(32));\n const dataWithHash = dataPadReversed.concat(await CryptoWorker.invokeCrypto('sha256', tempKey.concat(dataWithPadding)));\n if(dataWithHash.length !== 224) {\n throw 'DH_params: dataWithHash !== 224 bytes!';\n }\n\n const aesEncrypted = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, tempKey, new Uint8Array([0]));\n const tempKeyXor = bytesXor(tempKey, await CryptoWorker.invokeCrypto('sha256', aesEncrypted));\n const keyAesEncrypted = tempKeyXor.concat(aesEncrypted);\n\n const keyAesEncryptedBigInt = bigIntFromBytes(keyAesEncrypted);\n const publicKeyModulusBigInt = bigInt(auth.publicKey.modulus, 16);\n\n if(keyAesEncryptedBigInt.compare(publicKeyModulusBigInt) === -1) {\n return keyAesEncrypted;\n }\n }\n };\n\n const keyAesEncrypted = await getKeyAesEncrypted();\n const encryptedData = addPadding(await CryptoWorker.invokeCrypto('rsa-encrypt', keyAesEncrypted, auth.publicKey), 256, true, true, true);\n\n const req_DH_params: req_DH_params = {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n p: auth.p,\n q: auth.q,\n public_key_fingerprint: auth.publicKey.fingerprint,\n encrypted_data: encryptedData\n };\n\n const request = new TLSerialization({mtproto: true});\n request.storeMethod('req_DH_params', req_DH_params);\n\n const requestBytes = request.getBytes(true);\n\n if(DEBUG) {\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\n }\n\n let deserializer: Awaited>;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, requestBytes);\n } catch(error) {\n this.log.error('Send req_DH_params FAIL!', error);\n throw error;\n }\n\n const response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\n\n if(DEBUG) {\n this.log('Sent req_DH_params, response:', response);\n }\n\n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Server_DH_Params nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\n }\n\n if(response._ === 'server_DH_params_fail') {\n const newNonceHash = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce)).slice(-16);\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\n }\n\n throw new Error('[MT] server_DH_params_fail');\n }\n\n // fill auth object\n try {\n await this.decryptServerDhDataAnswer(auth, response.encrypted_answer);\n } catch(e) {\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\n throw e;\n }\n\n // console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\n\n return this.sendSetClientDhParams(auth);\n }\n\n private async decryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\n auth.localTime = Date.now();\n\n // ! can't concat Array with Uint8Array!\n auth.tmpAesKey = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat(auth.serverNonce)))\n .concat((await CryptoWorker.invokeCrypto('sha1', auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\n\n auth.tmpAesIv = (await CryptoWorker.invokeCrypto('sha1', auth.serverNonce.concat(auth.newNonce))).slice(12)\n .concat(await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\n\n const answerWithHash = new Uint8Array(await CryptoWorker.invokeCrypto('aes-decrypt', encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\n\n const hash = answerWithHash.slice(0, 20);\n const answerWithPadding = answerWithHash.slice(20);\n\n const deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\n const response = deserializer.fetchObject('Server_DH_inner_data');\n\n if(response._ !== 'server_DH_inner_data') {\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\n }\n\n if(DEBUG) {\n this.log('Done decrypting answer');\n }\n auth.g = response.g;\n auth.dhPrime = response.dh_prime;\n auth.gA = response.g_a;\n auth.serverTime = response.server_time;\n auth.retry = 0;\n\n this.verifyDhParams(auth.g, auth.dhPrime, auth.gA);\n\n const offset = deserializer.getOffset();\n\n if(!bytesCmp(hash, await CryptoWorker.invokeCrypto('sha1', answerWithPadding.slice(0, offset)))) {\n throw new Error('[MT] server_DH_inner_data SHA1 mismatch');\n }\n\n this.timeManager.applyServerTime(auth.serverTime, auth.localTime);\n }\n\n private verifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\n if(DEBUG) {\n this.log('Verifying DH params', g, dhPrime, gA);\n }\n\n const dhPrimeHex = bytesToHex(dhPrime);\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\n }\n\n if(DEBUG) {\n this.log('dhPrime cmp OK');\n }\n\n const gABigInt = bigIntFromBytes(gA);\n const dhPrimeBigInt = bigInt(dhPrimeHex, 16);\n\n if(gABigInt.compare(bigInt.one) <= 0) {\n throw new Error('[MT] DH params are not verified: gA <= 1');\n }\n\n if(gABigInt.compare(dhPrimeBigInt.subtract(bigInt.one)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\n }\n\n if(DEBUG) {\n this.log('1 < gA < dhPrime-1 OK');\n }\n\n const twoPow = bigInt(2).pow(2048 - 64);\n\n if(gABigInt.compare(twoPow) < 0) {\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\n }\n if(gABigInt.compare(dhPrimeBigInt.subtract(twoPow)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\n }\n\n if(DEBUG) {\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\n }\n\n return true;\n }\n\n private async sendSetClientDhParams(auth: AuthOptions): Promise {\n const gBytes = bytesFromHex(auth.g.toString(16));\n\n auth.b = randomize(new Uint8Array(256));\n // MTProto.secureRandom.nextBytes(auth.b);\n\n // let gB: Awaited>;\n try {\n var gB = await CryptoWorker.invokeCrypto('mod-pow', gBytes, auth.b, auth.dhPrime);\n } catch(error) {\n throw error;\n }\n\n const data = new TLSerialization({mtproto: true});\n data.storeObject({\n _: 'client_DH_inner_data',\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n retry_id: [0, auth.retry++],\n g_b: gB\n }, 'Client_DH_Inner_Data');\n\n const dataWithHash = (await CryptoWorker.invokeCrypto('sha1', data.getBuffer())).concat(data.getBytes(true));\n const encryptedData = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\n\n const request = new TLSerialization({mtproto: true});\n request.storeMethod('set_client_DH_params', {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n encrypted_data: encryptedData\n });\n\n if(DEBUG) {\n this.log('Send set_client_DH_params');\n }\n\n let deserializer: Awaited>;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, request.getBytes(true));\n } catch(err) {\n throw err;\n }\n\n const response = deserializer.fetchObject('Set_client_DH_params_answer');\n\n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\n }\n\n // let authKey: Uint8Array;\n try {\n var authKey = await CryptoWorker.invokeCrypto('mod-pow', auth.gA, auth.b, auth.dhPrime);\n } catch(err) {\n throw authKey;\n }\n\n const authKeyHash = await CryptoWorker.invokeCrypto('sha1', authKey),\n authKeyAux = authKeyHash.slice(0, 8),\n authKeyId = authKeyHash.slice(-8);\n\n if(DEBUG) {\n this.log('Got Set_client_DH_params_answer', response._, authKey);\n }\n switch(response._) {\n case 'dh_gen_ok': {\n const newNonceHash1 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([1], authKeyAux))).slice(-16);\n\n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\n this.log.error('Set_client_DH_params_answer new_nonce_hash1 mismatch', newNonceHash1, response);\n throw new Error('new_nonce_hash1 mismatch');\n }\n\n const serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\n if(DEBUG) {\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\n }\n\n auth.authKeyId = authKeyId;\n auth.authKey = authKey;\n auth.serverSalt = serverSalt;\n\n return auth;\n }\n\n case 'dh_gen_retry': {\n const newNonceHash2 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([2], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\n }\n\n return this.sendSetClientDhParams(auth);\n }\n\n case 'dh_gen_fail': {\n const newNonceHash3 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([3], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\n }\n\n throw new Error('[MT] Set_client_DH_params_answer fail');\n }\n }\n }\n\n \n private getTransportType() {\n if(this.getTransportTypePromise) return this.getTransportTypePromise;\n return this.getTransportTypePromise = transportController.pingTransports().then(({websocket}) => {\n this.transportType = websocket ? 'websocket' : 'https';\n this.log('will use transport:', this.transportType);\n });\n }\n \n\n public auth(dcId: DcId) {\n let promise = this.cached[dcId];\n if(promise) {\n return promise;\n }\n\n promise = new Promise(async(resolve, reject) => {\n \n await this.getTransportType();\n \n\n let error: ApiError;\n let _try = 1;\n while(_try++ <= 3) {\n try {\n const auth: AuthOptions = {\n dcId,\n nonce: randomize(new Uint8Array(16))\n };\n\n const promise = this.sendReqPQ(auth);\n resolve(await promise);\n return;\n } catch(err) {\n error = err;\n }\n }\n\n reject(error);\n });\n\n return this.cached[dcId] = promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport sessionStorage from '../sessionStorage';\nimport {nextRandomUint} from '../../helpers/random';\nimport {WorkerTaskVoidTemplate} from '../../types';\nimport ulongFromInts from '../../helpers/long/ulongFromInts';\nimport {AppManager} from '../appManagers/manager';\n\n/*\nlet lol: any = {};\nfor(var i = 0; i < 100; i++) {\n timeManager.generateId();\n}\n*/\n\nexport interface ApplyServerTimeOffsetTask extends WorkerTaskVoidTemplate {\n type: 'applyServerTimeOffset',\n payload: TimeManager['timeOffset']\n};\n\nexport class TimeManager extends AppManager {\n private lastMessageId: [number, number];\n private timeOffset: number;\n\n /* private midnightNoOffset: number;\n private midnightOffseted: Date;\n\n private midnightOffset: number; */\n\n /* private timeParams: {\n midnightOffset: number,\n serverTimeOffset: number\n }; */\n\n protected after() {\n this.lastMessageId = [0, 0];\n this.timeOffset = 0;\n\n sessionStorage.get('server_time_offset').then((to) => {\n if(to) {\n this.timeOffset = to;\n }\n });\n\n\n // * migrated from ServerTimeManager\n /* const timestampNow = tsNow(true);\n this.midnightNoOffset = timestampNow - (timestampNow % 86400);\n this.midnightOffseted = new Date();\n this.midnightOffseted.setHours(0, 0, 0, 0);\n\n this.midnightOffset = this.midnightNoOffset - (Math.floor(+this.midnightOffseted / 1000)); */\n\n /* this.timeParams = {\n midnightOffset: this.midnightOffset,\n serverTimeOffset: this.serverTimeOffset\n }; */\n }\n\n public getServerTimeOffset() {\n return this.timeOffset;\n }\n\n public generateId(): string {\n const timeTicks = Date.now(),\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\n timeMSec = timeTicks % 1000,\n random = nextRandomUint(16);\n\n let messageId: TimeManager['lastMessageId'] = [timeSec, (timeMSec << 21) | (random << 3) | 4];\n if(this.lastMessageId[0] > messageId[0] ||\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\n }\n\n this.lastMessageId = messageId;\n\n const ret = ulongFromInts(messageId[0], messageId[1]).toString(10);\n\n // if(lol[ret]) {\n // console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\n // }\n // lol[ret] = true;\n\n // console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret);\n\n return ret\n }\n\n public applyServerTime(serverTime: number, localTime?: number) {\n localTime = (localTime || Date.now()) / 1000 | 0;\n const newTimeOffset = serverTime - localTime;\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\n this.lastMessageId = [0, 0];\n\n if(this.timeOffset !== newTimeOffset) {\n sessionStorage.set({\n server_time_offset: newTimeOffset\n });\n\n this.timeOffset = newTimeOffset;\n }\n\n // console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\n\n return changed;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {DocumentAttribute, WebDocument} from '../../layer';\n\nexport default class AppWebDocsManager {\n public saveWebDocument(webDocument: WebDocument) {\n if(!webDocument) {\n return;\n }\n\n const attribute: DocumentAttribute.documentAttributeImageSize = webDocument.attributes.find((attribute) => attribute._ === 'documentAttributeImageSize') as any;\n if(attribute) {\n webDocument.w = attribute.w;\n webDocument.h = attribute.h;\n }\n\n return webDocument;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputInvoice, InputPaymentCredentials, PaymentRequestedInfo, PaymentsPaymentForm} from '../../layer';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppPaymentsManager extends AppManager {\n public getInputInvoiceBySlug(slug: string): InputInvoice.inputInvoiceSlug {\n return {\n _: 'inputInvoiceSlug',\n slug\n };\n }\n\n public getInputInvoiceByPeerId(peerId: PeerId, mid: number): InputInvoice.inputInvoiceMessage {\n return {\n _: 'inputInvoiceMessage',\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n };\n }\n\n public getPaymentForm(invoice: InputInvoice) {\n return this.apiManager.invokeApi('payments.getPaymentForm', {\n invoice\n }).then((paymentForm) => {\n this.appUsersManager.saveApiUsers(paymentForm.users);\n\n return paymentForm;\n });\n }\n\n public getPaymentReceipt(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApi('payments.getPaymentReceipt', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((paymentForm) => {\n this.appUsersManager.saveApiUsers(paymentForm.users);\n\n return paymentForm;\n });\n }\n\n public validateRequestedInfo(invoice: InputInvoice, info: PaymentRequestedInfo, save?: boolean) {\n return this.apiManager.invokeApi('payments.validateRequestedInfo', {\n save,\n invoice,\n info\n });\n }\n\n public sendPaymentForm(\n invoice: InputInvoice,\n formId: PaymentsPaymentForm['form_id'],\n requestedInfoId: string,\n shippingOptionId: string,\n credentials: InputPaymentCredentials,\n tipAmount?: number\n ) {\n return this.apiManager.invokeApi('payments.sendPaymentForm', {\n form_id: formId,\n invoice,\n requested_info_id: requestedInfoId,\n shipping_option_id: shippingOptionId,\n credentials,\n tip_amount: tipAmount || undefined\n }).then((result) => {\n if(result._ === 'payments.paymentResult') {\n this.apiUpdatesManager.processUpdateMessage(result.updates);\n }\n\n return result;\n });\n }\n\n public clearSavedInfo(info?: boolean, credentials?: boolean) {\n return this.apiManager.invokeApi('payments.clearSavedInfo', {\n info,\n credentials\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MessageSendingParams} from './appMessagesManager';\nimport {AppManager} from './manager';\nimport {AttachMenuBots, AttachMenuBot, Update, DataJSON} from '../../layer';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\nimport getAttachMenuBotIcon from './utils/attachMenuBots/getAttachMenuBotIcon';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppAttachMenuBotsManager extends AppManager {\n private attachMenuBots: Map;\n private attachMenuBotsArr: AttachMenuBot[];\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateAttachMenuBots: this.onUpdateAttachMenuBots\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n this.attachMenuBots.clear();\n this.attachMenuBotsArr = undefined;\n } else {\n this.attachMenuBots = new Map();\n }\n };\n\n private onUpdateAttachMenuBots = (update: Update.updateAttachMenuBots) => {\n this.clear();\n this.getAttachMenuBots();\n };\n\n public saveAttachMenuBot(attachMenuBot: AttachMenuBot) {\n this.attachMenuBots.set(attachMenuBot.bot_id, attachMenuBot);\n const icon = getAttachMenuBotIcon(attachMenuBot);\n icon.icon = this.appDocsManager.saveDoc(icon.icon, {type: 'attachMenuBotIcon', botId: attachMenuBot.bot_id});\n return attachMenuBot;\n }\n\n public saveAttachMenuBots(attachMenuBots: AttachMenuBot[]) {\n if((attachMenuBots as any).saved) return;\n (attachMenuBots as any).saved = true;\n attachMenuBots.forEach((user) => this.saveAttachMenuBot(user));\n }\n\n public getAttachMenuBots() {\n return this.attachMenuBotsArr ?? this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAttachMenuBots',\n processResult: (attachMenuBots) => {\n assumeType(attachMenuBots);\n this.appUsersManager.saveApiUsers(attachMenuBots.users);\n this.saveAttachMenuBots(attachMenuBots.bots);\n // ! temporary\n return this.attachMenuBotsArr = attachMenuBots.bots.slice(0, 0);\n }\n });\n }\n\n public getAttachMenuBotCached(botId: BotId) {\n return this.attachMenuBots.get(botId);\n }\n\n public getAttachMenuBot(botId: BotId, overwrite?: boolean) {\n if(!this.appUsersManager.isAttachMenuBot(botId) || true) {\n throw makeError('BOT_INVALID');\n }\n\n return (!overwrite && this.getAttachMenuBotCached(botId)) ?? this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAttachMenuBot',\n params: {\n bot: this.appUsersManager.getUserInput(botId)\n },\n processResult: (attachMenuBotsBot) => {\n this.appUsersManager.saveApiUsers(attachMenuBotsBot.users);\n const attachMenuBot = this.saveAttachMenuBot(attachMenuBotsBot.bot);\n return attachMenuBot;\n }\n });\n }\n\n public requestWebView(options: MessageSendingParams & {\n botId: BotId,\n peerId: PeerId,\n // platform: string,\n startParam?: string,\n fromBotMenu?: boolean,\n url?: string,\n themeParams?: DataJSON\n }) {\n const {\n botId,\n peerId,\n url,\n fromBotMenu,\n themeParams,\n // platform,\n replyToMsgId,\n silent,\n sendAsPeerId,\n startParam,\n threadId\n } = options;\n\n const platform = 'web';\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.requestWebView',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n bot: this.appUsersManager.getUserInput(botId),\n silent,\n platform,\n url,\n reply_to_msg_id: replyToMsgId ? getServerMessageId(replyToMsgId) : undefined,\n from_bot_menu: fromBotMenu,\n theme_params: themeParams,\n send_as: sendAsPeerId ? this.appPeersManager.getInputPeerById(sendAsPeerId) : undefined,\n start_param: startParam,\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n },\n processResult: (result) => {\n console.log(result);\n return result;\n }\n });\n }\n\n public prolongWebView(options: MessageSendingParams & {\n peerId: PeerId,\n botId: BotId,\n queryId: string | number\n }) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.prolongWebView',\n params: {\n peer: this.appPeersManager.getInputPeerById(options.peerId),\n bot: this.appUsersManager.getUserInput(options.botId),\n query_id: options.queryId,\n silent: options.silent,\n reply_to_msg_id: options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined,\n top_msg_id: options.threadId ? getServerMessageId(options.threadId) : undefined\n },\n processResult: (result) => {\n console.log(result);\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {UrlAuthResult} from '../../layer';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppSeamlessLoginManager extends AppManager {\n public requestUrlAuth(url: string, peerId?: PeerId, mid?: number, buttonId?: number) {\n return this.apiManager.invokeApi('messages.requestUrlAuth', {\n button_id: buttonId,\n msg_id: mid ? getServerMessageId(mid) : undefined,\n peer: peerId ? this.appPeersManager.getInputPeerById(peerId) : undefined,\n url\n }).then((urlAuthResult) => {\n if(urlAuthResult._ === 'urlAuthResultRequest') {\n this.appUsersManager.saveApiUser(urlAuthResult.bot);\n }\n\n return urlAuthResult;\n });\n }\n\n public acceptUrlAuth(url: string, peerId?: PeerId, mid?: number, buttonId?: number, writeAllowed?: boolean) {\n return this.apiManager.invokeApi('messages.acceptUrlAuth', {\n button_id: buttonId,\n msg_id: mid ? getServerMessageId(mid) : undefined,\n peer: peerId ? this.appPeersManager.getInputPeerById(peerId) : undefined,\n url,\n write_allowed: writeAllowed\n }).then((urlAuthResult) => {\n return urlAuthResult as Exclude;\n });\n }\n\n public getWebAuthorizations() {\n return this.apiManager.invokeApi('account.getWebAuthorizations').then((webAuthorizations) => {\n this.appUsersManager.saveApiUsers(webAuthorizations.users);\n return webAuthorizations.authorizations;\n });\n }\n\n public resetWebAuthorization(hash: Long) {\n return this.apiManager.invokeApi('account.resetWebAuthorization', {\n hash\n });\n }\n\n public resetWebAuthorizations() {\n return this.apiManager.invokeApi('account.resetWebAuthorizations');\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport assumeType from '../../helpers/assumeType';\nimport {AccountThemes, AccountWallPapers, InputWallPaper, WallPaper} from '../../layer';\nimport {AppManager} from './manager';\n\ntype WallPaperId = WallPaper['id'];\n\nexport default class AppThemesManager extends AppManager {\n private wallPapers: {[id: WallPaperId]: WallPaper};\n\n protected after() {\n this.wallPapers = {};\n }\n\n private saveWallPaper(wallPaper: WallPaper) {\n if(!wallPaper) {\n return wallPaper;\n }\n // const oldWallPaper = this.wallPapers[wallPaper.id];\n\n // ! IT'S BROKEN NOW. SERVER RETURNS SAME ID FOR DIFFERENT WALLPAPERS\n // if(oldWallPaper) {\n // console.log('rewrite', {...oldWallPaper}, {...wallPaper});\n // }\n\n if(wallPaper._ !== 'wallPaperNoFile') {\n wallPaper.document = this.appDocsManager.saveDoc(wallPaper.document, {type: 'wallPaper', wallPaperId: wallPaper.id});\n }\n\n // if(oldWallPaper) {\n // return Object.assign(oldWallPaper, wallPaper);\n // } else {\n this.wallPapers[wallPaper.id] = wallPaper;\n // }\n\n return wallPaper;\n }\n\n public getWallPaper(inputWallPaper: InputWallPaper) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'account.getWallPaper',\n params: {wallpaper: inputWallPaper},\n processResult: (wallPaper) => {\n return this.saveWallPaper(wallPaper);\n }\n });\n }\n\n public getInputWallPaper(wallPaper: WallPaper | string): InputWallPaper {\n if(typeof(wallPaper) === 'string') {\n return {_: 'inputWallPaperSlug', slug: wallPaper};\n } else if(wallPaper._ === 'wallPaperNoFile') {\n return {_: 'inputWallPaperNoFile', id: wallPaper.id};\n } else {\n return {_: 'inputWallPaper', id: wallPaper.id, access_hash: wallPaper.access_hash};\n }\n }\n\n public getWallPaperById(id: WallPaperId) {\n const wallPaper = this.wallPapers[id];\n return this.getWallPaper(this.getInputWallPaper(wallPaper));\n }\n\n public getThemes() {\n return this.apiManager.invokeApiSingleProcess({\n method: 'account.getThemes',\n params: {format: 'macos', hash: 0},\n processResult: (accountThemes) => {\n assumeType(accountThemes);\n\n accountThemes.themes.forEach((theme) => {\n if(!theme.settings) {\n return;\n }\n\n theme.settings.forEach((themeSettings) => {\n themeSettings.wallpaper = this.saveWallPaper(themeSettings.wallpaper);\n });\n });\n\n return accountThemes.themes;\n }\n });\n }\n\n public getWallPapers() {\n return this.apiManager.invokeApiHashable({method: 'account.getWallPapers'}).then((accountWallpapers) => {\n const wallPapers = (accountWallpapers as AccountWallPapers.accountWallPapers).wallpapers;\n wallPapers.forEach((wallPaper, idx, arr) => {\n arr[idx] = this.saveWallPaper(wallPaper);\n });\n\n return wallPapers;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport callbackify from '../../helpers/callbackify';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport appStateManager from './appStateManager';\nimport {AppStoragesManager} from './appStoragesManager';\nimport createManagers from './createManagers';\n\ntype Managers = Awaited>;\n\nexport class AppManagersManager {\n private managers: Managers | Promise;\n private cryptoWorkersURLs: string[];\n private cryptoPortsAttached: number;\n private cryptoPortPromise: CancellablePromise;\n\n constructor() {\n this.cryptoWorkersURLs = [];\n this.cryptoPortsAttached = 0;\n this.cryptoPortPromise = deferredPromise();\n this.cryptoPortPromise.then(() => {\n this.cryptoPortPromise = undefined;\n });\n }\n\n public start() {\n const port = MTProtoMessagePort.getInstance();\n\n port.addEventListener('manager', ({name, method, args}) => {\n return callbackify(this.getManagers(), (managers) => {\n // @ts-ignore\n const manager = managers[name];\n return manager[method].apply(manager, args);\n });\n });\n\n port.addEventListener('cryptoPort', (payload, source, event) => {\n const port = event.ports[0];\n if(this.cryptoPortsAttached >= this.cryptoWorkersURLs.length) {\n port.close();\n return;\n }\n\n ++this.cryptoPortsAttached;\n cryptoMessagePort.attachPort(port);\n this.cryptoPortPromise?.resolve();\n });\n\n port.addEventListener('createProxyWorkerURLs', ({originalUrl, blob}) => {\n let length = this.cryptoWorkersURLs.length;\n if(!length) {\n this.cryptoWorkersURLs.push(originalUrl);\n ++length;\n }\n\n const maxLength = App.cryptoWorkers;\n if(length === maxLength) {\n return this.cryptoWorkersURLs;\n }\n\n const newURLs = new Array(maxLength - length).fill(undefined).map(() => URL.createObjectURL(blob));\n this.cryptoWorkersURLs.push(...newURLs);\n return this.cryptoWorkersURLs;\n });\n }\n\n public async createManagers() {\n const appStoragesManager = new AppStoragesManager();\n\n await Promise.all([\n // new Promise(() => {}),\n appStoragesManager.loadStorages(),\n this.cryptoPortPromise\n ]);\n\n const managers = await createManagers(appStoragesManager, appStateManager.userId);\n return this.managers = managers;\n }\n\n public getManagers() {\n return this.managers ??= this.createManagers();\n }\n}\n\nconst appManagersManager = new AppManagersManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appManagersManager = appManagersManager);\nexport default appManagersManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {PasswordManager} from '../mtproto/passwordManager';\nimport {ReferenceDatabase} from '../mtproto/referenceDatabase';\nimport DialogsStorage from '../storages/dialogs';\nimport FiltersStorage from '../storages/filters';\nimport {ApiUpdatesManager} from './apiUpdatesManager';\nimport {AppAvatarsManager} from './appAvatarsManager';\nimport {AppCallsManager} from './appCallsManager';\nimport {AppChatsManager} from './appChatsManager';\nimport {AppDocsManager} from './appDocsManager';\nimport {AppDraftsManager} from './appDraftsManager';\nimport {AppEmojiManager} from './appEmojiManager';\nimport {AppGroupCallsManager} from './appGroupCallsManager';\nimport {AppInlineBotsManager} from './appInlineBotsManager';\nimport {AppMessagesIdsManager} from './appMessagesIdsManager';\nimport {AppMessagesManager} from './appMessagesManager';\nimport {AppNotificationsManager} from './appNotificationsManager';\nimport {AppPeersManager} from './appPeersManager';\nimport {AppPhotosManager} from './appPhotosManager';\nimport {AppPollsManager} from './appPollsManager';\nimport {AppPrivacyManager} from './appPrivacyManager';\nimport {AppProfileManager} from './appProfileManager';\nimport {AppReactionsManager} from './appReactionsManager';\nimport {AppStickersManager} from './appStickersManager';\nimport {AppUsersManager} from './appUsersManager';\nimport {AppWebPagesManager} from './appWebPagesManager';\nimport {ApiFileManager} from '../mtproto/apiFileManager';\nimport {ApiManager} from '../mtproto/apiManager';\nimport ctx from '../../environment/ctx';\nimport PeersStorage from '../storages/peers';\nimport ThumbsStorage from '../storages/thumbs';\nimport {NetworkerFactory} from '../mtproto/networkerFactory';\nimport {RootScope} from '../rootScope';\nimport {Authorizer} from '../mtproto/authorizer';\nimport {DcConfigurator} from '../mtproto/dcConfigurator';\nimport {TimeManager} from '../mtproto/timeManager';\nimport {AppStoragesManager} from './appStoragesManager';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport appStateManager from './appStateManager';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport AppWebDocsManager from './appWebDocsManager';\nimport AppPaymentsManager from './appPaymentsManager';\nimport AppAttachMenuBotsManager from './appAttachMenuBotsManager';\nimport AppSeamlessLoginManager from './appSeamlessLoginManager';\nimport AppThemesManager from './appThemesManager';\n\nexport default function createManagers(appStoragesManager: AppStoragesManager, userId: UserId) {\n const managers = {\n appPeersManager: new AppPeersManager,\n appChatsManager: new AppChatsManager,\n appDocsManager: new AppDocsManager,\n appPhotosManager: new AppPhotosManager,\n appPollsManager: new AppPollsManager,\n appUsersManager: new AppUsersManager,\n appWebPagesManager: new AppWebPagesManager,\n appDraftsManager: new AppDraftsManager,\n appProfileManager: new AppProfileManager,\n appNotificationsManager: new AppNotificationsManager,\n apiUpdatesManager: new ApiUpdatesManager,\n appAvatarsManager: new AppAvatarsManager,\n appGroupCallsManager: new AppGroupCallsManager,\n appCallsManager: new AppCallsManager,\n appReactionsManager: new AppReactionsManager,\n appMessagesManager: new AppMessagesManager,\n appMessagesIdsManager: new AppMessagesIdsManager,\n appPrivacyManager: new AppPrivacyManager,\n appInlineBotsManager: new AppInlineBotsManager,\n appStickersManager: new AppStickersManager,\n referenceDatabase: new ReferenceDatabase,\n appEmojiManager: new AppEmojiManager,\n filtersStorage: new FiltersStorage,\n dialogsStorage: new DialogsStorage,\n apiManager: new ApiManager,\n cryptoWorker: cryptoMessagePort,\n passwordManager: new PasswordManager,\n apiFileManager: new ApiFileManager,\n peersStorage: new PeersStorage,\n thumbsStorage: new ThumbsStorage,\n networkerFactory: new NetworkerFactory,\n rootScope: new RootScope,\n authorizer: new Authorizer,\n dcConfigurator: new DcConfigurator,\n timeManager: new TimeManager,\n appStoragesManager: appStoragesManager,\n appStateManager: appStateManager,\n appWebDocsManager: new AppWebDocsManager,\n appPaymentsManager: new AppPaymentsManager,\n appAttachMenuBotsManager: new AppAttachMenuBotsManager,\n appSeamlessLoginManager: new AppSeamlessLoginManager,\n appThemesManager: new AppThemesManager\n };\n\n type T = typeof managers;\n\n for(const name in managers) {\n const manager = managers[name as keyof T];\n if(!manager) {\n continue;\n }\n\n if((manager as AppMessagesManager).setManagers) {\n (manager as AppMessagesManager).setManagers(managers as any);\n delete (manager as AppMessagesManager).setManagers;\n }\n\n // @ts-ignore\n ctx[name] = manager;\n }\n\n const promises: Array void) | void> | void>[] = [];\n let names = Object.keys(managers) as (keyof T)[];\n names.unshift('appUsersManager', 'appChatsManager', 'appNotificationsManager', 'appMessagesManager', 'dialogsStorage');\n names = filterUnique(names);\n for(const name of names) {\n const manager = managers[name];\n if((manager as any)?.after) {\n // console.log('injecting after', name);\n const result = (manager as any).after();\n promises.push(result);\n\n // if(result instanceof Promise) {\n // result.then(() => {\n // console.log('injected after', name);\n // });\n // }\n }\n }\n\n if(userId) {\n managers.apiManager.setUserAuth(userId);\n }\n\n return Promise.all(promises).then(() => managers);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// just to include\nimport '../polyfill';\nimport '../../helpers/peerIdPolyfill';\n\nimport cryptoWorker from '../crypto/cryptoMessagePort';\nimport {setEnvironment} from '../../environment/utils';\nimport appStateManager from '../appManagers/appStateManager';\nimport transportController from './transports/controller';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport RESET_STORAGES_PROMISE from '../appManagers/utils/storages/resetStoragesPromise';\nimport appManagersManager from '../appManagers/appManagersManager';\nimport listenMessagePort from '../../helpers/listenMessagePort';\nimport {logger} from '../logger';\nimport {State} from '../../config/state';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport appTabsManager from '../appManagers/appTabsManager';\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport callbackify from '../../helpers/callbackify';\n\nlet _isServiceWorkerOnline = true;\nexport function isServiceWorkerOnline() {\n return _isServiceWorkerOnline;\n}\n\nlet serviceMessagePort: ServiceMessagePort, _serviceMessagePort: MessagePort;\nexport function getServiceMessagePort() {\n return _isServiceWorkerOnline ? serviceMessagePort : undefined;\n}\n\nconst log = logger('MTPROTO');\n// let haveState = false;\n\nconst port = new MTProtoMessagePort();\nport.addMultipleEventsListeners({\n environment: (environment) => {\n setEnvironment(environment);\n\n transportController.waitForWebSocket();\n },\n\n crypto: ({method, args}) => {\n return cryptoWorker.invokeCrypto(method as any, ...args as any);\n },\n\n state: ({state, resetStorages, pushedKeys, newVersion, oldVersion, userId}) => {\n // if(haveState) {\n // return;\n // }\n\n log('got state', state, pushedKeys);\n\n appStateManager.userId = userId;\n appStateManager.newVersion = newVersion;\n appStateManager.oldVersion = oldVersion;\n\n (Object.keys(state) as any as (keyof State)[]).forEach((key) => {\n appStateManager.pushToState(key, state[key], true, !pushedKeys.includes(key));\n });\n\n RESET_STORAGES_PROMISE.resolve(resetStorages);\n // haveState = true;\n },\n\n toggleStorages: ({enabled, clearWrite}) => {\n return toggleStorages(enabled, clearWrite);\n },\n\n event: (payload, source) => {\n log('will redirect event', payload, source);\n port.invokeExceptSource('event', payload, source);\n },\n\n serviceWorkerOnline: (online) => {\n _isServiceWorkerOnline = online;\n },\n\n serviceWorkerPort: (payload, source, event) => {\n if(serviceMessagePort) {\n serviceMessagePort.detachPort(_serviceMessagePort);\n _serviceMessagePort = undefined;\n } else {\n serviceMessagePort = new ServiceMessagePort();\n serviceMessagePort.addMultipleEventsListeners({\n requestFilePart: (payload) => {\n return callbackify(appManagersManager.getManagers(), (managers) => {\n const {docId, dcId, offset, limit} = payload;\n return managers.appDocsManager.requestDocPart(docId, dcId, offset, limit);\n });\n }\n });\n }\n\n // * port can be undefined in the future\n if(_serviceMessagePort = event.ports[0]) {\n serviceMessagePort.attachPort(_serviceMessagePort);\n }\n },\n\n createObjectURL: (blob) => {\n return URL.createObjectURL(blob);\n }\n\n // socketProxy: (task) => {\n // const socketTask = task.payload;\n // const id = socketTask.id;\n\n // const socketProxied = socketsProxied.get(id);\n // if(socketTask.type === 'message') {\n // socketProxied.dispatchEvent('message', socketTask.payload);\n // } else if(socketTask.type === 'open') {\n // socketProxied.dispatchEvent('open');\n // } else if(socketTask.type === 'close') {\n // socketProxied.dispatchEvent('close');\n // socketsProxied.delete(id);\n // }\n // },\n});\n\nlog('MTProto start');\n\nappManagersManager.start();\nappManagersManager.getManagers();\nappTabsManager.start();\n\n// let sentHello = false;\nlistenMessagePort(port, (source) => {\n appTabsManager.addTab(source);\n\n // port.invokeVoid('hello', undefined, source);\n // if(!sentHello) {\n // port.invokeVoid('hello', undefined, source);\n // sentHello = true;\n // }\n}, (source) => {\n appTabsManager.deleteTab(source);\n});\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type SuperMessagePort from '../lib/mtproto/superMessagePort';\nimport ctx from '../environment/ctx';\n\nexport default function listenMessagePort(\n messagePort: SuperMessagePort,\n onConnect?: (source: MessageEventSource) => void,\n onDisconnect?: (source: MessageEventSource) => void\n) {\n const attachPort = (listenPort: any, sendPort: any) => {\n messagePort.attachListenPort(listenPort);\n sendPort && messagePort.attachSendPort(sendPort);\n onConnect?.(listenPort);\n };\n\n messagePort.setOnPortDisconnect(onDisconnect);\n\n if(typeof(SharedWorkerGlobalScope) !== 'undefined') {\n (ctx as any as SharedWorkerGlobalScope).addEventListener('connect', (e) => attachPort(e.source, e.source));\n } else if(typeof(ServiceWorkerGlobalScope) !== 'undefined') {\n attachPort(ctx, null);\n } else {\n attachPort(ctx, ctx);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../storages/filters';\n\n/**\n * Legacy Webogram's format, don't change dcID to camelCase. date is timestamp\n */\nexport type UserAuth = {dcID: number | string, date: number, id: PeerId};\nexport type REAL_FOLDER_ID = 0 | 1;\n\nexport const NULL_PEER_ID: PeerId = 0;\nexport const REPLIES_PEER_ID: PeerId = 1271266957;\nexport const REPLIES_HIDDEN_CHANNEL_ID: ChatId = 777;\nexport const SERVICE_PEER_ID: PeerId = 777000;\nexport const MUTE_UNTIL = 0x7FFFFFFF;\nexport const BOT_START_PARAM = '';\nexport const MAX_FILE_SAVE_SIZE = 20 * 1024 * 1024;\nexport const THUMB_TYPE_FULL = '';\nexport const TOPIC_COLORS = [0x6FB9F0, 0xFFD67E, 0xCB86DB, 0x8EEE98, 0xFF93B2, 0xFB6F5F];\nexport const ATTACH_MENU_BOT_ICON_NAME = 'default_static';\nexport const GENERAL_TOPIC_ID = 4295032831;\nexport const T_ME_PREFIXES = new Set(['web', 'k', 'z']);\n\nexport const FOLDER_ID_ALL: REAL_FOLDER_ID = 0;\nexport const FOLDER_ID_ARCHIVE: REAL_FOLDER_ID = 1;\nexport const REAL_FOLDERS: Set = new Set([FOLDER_ID_ALL, FOLDER_ID_ARCHIVE]);\nexport const START_LOCAL_ID = Math.max(...Array.from(REAL_FOLDERS)) + 1 as MyDialogFilter['localId'];\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport emojiRegExp from '../../vendor/emoji/regex';\nimport {MessageEntity} from '../../layer';\n\nconst EmojiHelper = {\n emojiMap: (code: string) => { return code; },\n shortcuts: [] as any,\n emojis: [] as any\n};\n\nexport const ALPHA_CHARS_REG_EXP = 'a-z' +\n '\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00f6\\\\u00f8-\\\\u00ff' + // Latin-1\n '\\\\u0100-\\\\u024f' + // Latin Extended A and B\n '\\\\u0253\\\\u0254\\\\u0256\\\\u0257\\\\u0259\\\\u025b\\\\u0263\\\\u0268\\\\u026f\\\\u0272\\\\u0289\\\\u028b' + // IPA Extensions\n '\\\\u02bb' + // Hawaiian\n '\\\\u0300-\\\\u036f' + // Combining diacritics\n '\\\\u1e00-\\\\u1eff' + // Latin Extended Additional (mostly for Vietnamese)\n '\\\\u0400-\\\\u04ff\\\\u0500-\\\\u0527' + // Cyrillic\n '\\\\u2de0-\\\\u2dff\\\\ua640-\\\\ua69f' + // Cyrillic Extended A/B\n '\\\\u0591-\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7' +\n '\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f4' + // Hebrew\n '\\\\ufb1d-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40-\\\\ufb41' +\n '\\\\ufb43-\\\\ufb44\\\\ufb46-\\\\ufb4f' + // Hebrew Pres. Forms\n '\\\\u0610-\\\\u061a\\\\u0620-\\\\u065f\\\\u066e-\\\\u06d3\\\\u06d5-\\\\u06dc' +\n '\\\\u06de-\\\\u06e8\\\\u06ea-\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff' + // Arabic\n '\\\\u0750-\\\\u077f\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u08e4-\\\\u08fe' + // Arabic Supplement and Extended A\n '\\\\ufb50-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb' + // Pres. Forms A\n '\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc' + // Pres. Forms B\n '\\\\u200c' + // Zero-Width Non-Joiner\n '\\\\u0e01-\\\\u0e3a\\\\u0e40-\\\\u0e4e' + // Thai\n '\\\\u1100-\\\\u11ff\\\\u3130-\\\\u3185\\\\uA960-\\\\uA97F\\\\uAC00-\\\\uD7AF\\\\uD7B0-\\\\uD7FF' + // Hangul (Korean)\n '\\\\u3003\\\\u3005\\\\u303b' + // Kanji/Han iteration marks\n '\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a' + // full width Alphabet\n '\\\\uff66-\\\\uff9f' + // half width Katakana\n '\\\\uffa1-\\\\uffdc'; // half width Hangul (Korean)\nexport const ALPHA_NUMERIC_REG_EXP = '0-9\\_' + ALPHA_CHARS_REG_EXP;\nexport const DOMAIN_ADD_CHARS = '\\u00b7';\n// Based on Regular Expression for URL validation by Diego Perini\nexport const URL_ALPHANUMERIC_REG_EXP_PART = '[' + ALPHA_CHARS_REG_EXP + '0-9]';\nexport const URL_PROTOCOL_REG_EXP_PART = '((?:https?|ftp)://|mailto:)?';\nexport const URL_REG_EXP = URL_PROTOCOL_REG_EXP_PART +\n // user:pass authentication\n '(?:' + URL_ALPHANUMERIC_REG_EXP_PART + '{1,64}(?::' + URL_ALPHANUMERIC_REG_EXP_PART + '{0,64})?@)?' +\n '(?:' +\n // sindresorhus/ip-regexp\n '(?: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}' +\n '|' +\n // host name\n URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}' +\n // domain name\n '(?:\\\\.' + URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}){0,10}' +\n // TLD identifier\n '(?:\\\\.(xn--[0-9a-z]{2,16}|[' + ALPHA_CHARS_REG_EXP + ']{2,24}))' +\n ')' +\n // port number\n '(?::\\\\d{2,5})?' +\n // resource path\n '(?:/(?:\\\\S{0,255}[^\\\\s.;,(\\\\[\\\\]{}<>\"\\'])?)?';\nexport const URL_PROTOCOL_REG_EXP = new RegExp('^' + URL_PROTOCOL_REG_EXP_PART.slice(0, -1), 'i');\nexport const URL_ANY_PROTOCOL_REG_EXP = /^((?:[^\\/]+?):\\/\\/|mailto:)/;\nexport const USERNAME_REG_EXP = '[a-zA-Z\\\\d_]{5,32}';\nexport const BOT_COMMAND_REG_EXP = '\\\\/([a-zA-Z\\\\d_]{1,32})(?:@(' + USERNAME_REG_EXP + '))?(\\\\b|$)';\nexport const FULL_REG_EXP = new RegExp('(^| )(@)(' + USERNAME_REG_EXP + ')|(' + URL_REG_EXP + ')|(\\\\n)|(' + emojiRegExp + ')|(^|[\\\\s\\\\(\\\\]])(#[' + ALPHA_NUMERIC_REG_EXP + ']{2,64})|(^|\\\\s)' + BOT_COMMAND_REG_EXP, 'i');\nexport const EMAIL_REG_EXP = /^(([^<>()[\\]\\\\.,;:\\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,}))$/;\n// const markdownTestRegExp = /[`_*@~]/;\nexport const MARKDOWN_REG_EXP = /(^|\\s|\\n)(````?)([\\s\\S]+?)(````?)([\\s\\n\\.,:?!;]|$)|(^|\\s|\\x01)(`|~~|\\*\\*|__|_-_|\\|\\|)([^\\n]+?)\\7([\\x01\\s\\.,:?!;]|$)|@(\\d+)\\s*\\((.+?)\\)|(\\[(.+?)\\]\\((.+?)\\))/m;\nexport const SITE_HASHTAGS: {[siteName: string]: string} = {\n 'Telegram': 'tg://search_hashtag?hashtag={1}',\n 'Twitter': 'https://twitter.com/hashtag/{1}',\n 'Instagram': 'https://instagram.com/explore/tags/{1}/',\n 'Google Plus': 'https://plus.google.com/explore/{1}'\n};\n\n// export const SITE_MENTIONS: {[siteName in 'Telegram' | 'Twitter' | 'Instagram' | 'GitHub']: string} = {\n// Telegram: '#{1}',\n// Twitter: 'https://twitter.com/{1}',\n// Instagram: 'https://instagram.com/{1}/',\n// GitHub: 'https://github.com/{1}'\n// };\n\nexport const MARKDOWN_ENTITIES: {[markdown: string]: MessageEntity['_']} = {\n '`': 'messageEntityCode',\n '``': 'messageEntityPre',\n '**': 'messageEntityBold',\n '__': 'messageEntityItalic',\n '~~': 'messageEntityStrike',\n '_-_': 'messageEntityUnderline',\n '||': 'messageEntitySpoiler'\n};\n\nexport const PASS_CONFLICTING_ENTITIES: Set = new Set([\n 'messageEntityEmoji',\n 'messageEntityLinebreak',\n 'messageEntityCaret'\n]);\nfor(const i in MARKDOWN_ENTITIES) {\n PASS_CONFLICTING_ENTITIES.add(MARKDOWN_ENTITIES[i]);\n}\n\nexport const PHONE_NUMBER_REG_EXP = /^\\+\\d+$/;\n\n/* export function parseEmojis(text: string) {\n return text.replace(/:([a-z0-9\\-\\+\\*_]+?):/gi, function (all, shortcut) {\n var emojiCode = EmojiHelper.shortcuts[shortcut]\n if (emojiCode !== undefined) {\n return EmojiHelper.emojis[emojiCode][0]\n }\n return all\n })\n} */\n\n\n/* export function replaceUrlEncodings(urlWithEncoded: string) {\n return urlWithEncoded.replace(/(%[A-Z\\d]{2})+/g, (str) => {\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n });\n} */\n","// https://github.com/twitter/twemoji-parser/blob/master/src/lib/regex.js\n\nexport function encodeEmoji(emojiText: string) {\n const codepoints = toCodePoints(removeVS16s(emojiText)).join('-');\n return codepoints;\n}\n\nconst vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\n\nconst removeVS16s = (rawEmoji: string) => (rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji);\n\nexport function toCodePoints(unicodeSurrogates: string): Array {\n const points = [];\n let char = 0;\n let previous = 0;\n let i = 0;\n while(i < unicodeSurrogates.length) {\n char = unicodeSurrogates.charCodeAt(i++);\n if(previous) {\n points.push((0x10000 + ((previous - 0xd800) << 10) + (char - 0xdc00)).toString(16));\n previous = 0;\n } else if(char > 0xd800 && char <= 0xdbff) {\n previous = char;\n } else {\n points.push(char.toString(16));\n }\n }\n\n if(points.length && points[0].length === 2) {\n points[0] = '00' + points[0];\n }\n\n return points;\n}\n\nexport function getEmojiToneIndex(input: string) {\n const match = input.match(/[\\uDFFB-\\uDFFF]/);\n return match ? 5 - (57343 - match[0].charCodeAt(0)) : 0;\n}\n\nconst VIRTUAL_COUNTRIES_EMOJIS: Map = new Map([\n ['FT', '๐Ÿดโ€โ˜ ']\n]);\n\nexport function getCountryEmoji(iso2: string) {\n return VIRTUAL_COUNTRIES_EMOJIS.get(iso2) ??\n String.fromCharCode(55356, 56741 + iso2.charCodeAt(0), 55356, 56741 + iso2.charCodeAt(1));\n}\n\nexport function emojiFromCodePoints(codePoints: string) {\n return codePoints.split('-').reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [699,211,147,85,110], () => (__webpack_require__(9092)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames not based on template\n\tif (chunkId === 85) return \"85.887945ef5f43bc205112.bundle.js\";\n\tif (chunkId === 110) return \"110.d2d030648acd67138f89.bundle.js\";\n\t// return url for filenames based on template\n\treturn \"\" + ({\"211\":\"npm.big-integer\",\"699\":\"npm.pako\"}[chunkId] || chunkId) + \".\" + {\"8\":\"93d2f33af815eb0455aa\",\"104\":\"f68acff124bec8da4bd6\",\"147\":\"d3d1728d5fd59c12e18f\",\"211\":\"363d763daad0ee4e2741\",\"301\":\"95838a8203f23dd1ce8f\",\"642\":\"be93122d1116ecdc9322\",\"699\":\"89deb457201f16c93925\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t678: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","DEBUG","MOUNT_CLASS_TO","window","self","EmojiVersions","Emoji","version","Object","assign","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","IS_FIREFOX","undefined","badCharsRe","trimRe","C2L","cleanSearchText","text","latinize","processSearchText","clearBadChars","ignoreCase","options","hasTag","includeTag","charAt","originalText","replace","clearBadCharsAndTrim","ch","latinizeCh","latinizeString","fixCyrillic","FILENAME_JOINER","getFileNameByLocation","location","ext","length","str","_","id","thumb_size","filter","Boolean","join","photo_id","pFlags","big","stickerset","short_name","emoticon","thumb_version","volume_id","local_id","url","console","error","downloadId","getFileURL","type","encodeURIComponent","JSON","stringify","platforms","Set","ignore","getRestrictionReason","reasons","find","reason","has","isRestricted","ignoreRestrictionReasons","clear","forEach","add","getPeerId","peerId","isPeerId","userId","user_id","toPeerId","chatId","channel_id","chat_id","isUser","peerParams","substr","split","IDB","constructor","db","this","name","storageIsAvailable","log","openDatabase","INSTANCES","push","isAvailable","createNew","openDbPromise","createIndexes","os","store","indexNames","Array","from","indexName","deleteIndex","indexes","index","contains","createIndex","keyPath","objectParameters","request","indexedDB","open","Promise","reject","message","finished","setTimeout","onerror","resolve","onsuccess","event","result","calledNew","onclose","e","onabort","transaction","target","close","onversionchange","onupgradeneeded","warn","oldVersion","newVersion","stores","objectStoreNames","objectStore","createObjectStore","static","instance","preserve","storage","IDBStorage","storeName","idb","create","delete","entryName","isArray","concat","getObjectStore","promises","map","save","value","idx","put","get","mode","callback","perf","performance","now","then","onError","clearTimeout","timeout","onComplete","results","requests","r","waitForTransactionComplete","oncomplete","callbackResult","left","onRequestFinished","i","getAll","environment","getEnvironment","setEnvironment","env","RootScope","super","myId","connectionStatus","premium","addEventListener","isNew","isPremium","dispatchEventSingle","status","dispatchEvent","args","invokeVoid","settings","getConnectionStatus","getPremium","state","stateStorage","getState","setByKey","key","object","splitted","getDeepProperty","slice","pop","setDeepProperty","first","pushToState","direct","onlyLocal","setKeyValueToStorage","set","HTTP","dcId","logSuffix","pending","debug","logTypes","Log","logger","connected","_send","body","fetch","method","response","arrayBuffer","buffer","TextDecoder","decode","Uint8Array","setConnected","err","destroyed","destroy","send","networker","promise","releasePending","releasing","splice","pause","Socket","handleOpen","handleError","handleClose","removeListeners","handleMessage","data","byteLength","ws","connect","removeEventListener","WebSocket","binaryType","randomize","arr","crypto","Error","getRandomValues","Obfuscation","_process","operation","cryptoMessagePort","transfer","init","codec","idPromise","release","initPayload","val","val2","reversedPayload","reverse","encKey","encIv","decKey","decIv","process","obfuscateTag","encrypted","encode","payload","tag","encodePacket","len","header","readPacket","bytesToHex","bytes","toString","TcpObfuscated","Connection","retryTimeout","abridged","obfuscation","autoReconnect","onOpen","connection","setConnectionStatus","cleanupSent","resend","onMessage","parseResponse","processMessage","messageId","sessionId","catch","shift","onClose","needTimeout","retryAt","time","Date","diff","lastCloseTime","isNaN","reconnectTimeout","ctx","reconnect","bodySent","forceReconnect","setAutoReconnect","once","enable","changeUrl","encodeBody","toEncode","encoded","releasingPending","sent","TEST_SUFFIX","getTelegramConnectionSuffix","connectionType","constructTelegramWebSocketUrl","suffix","path","DcConfigurator","sslSubdomains","dcOptions","host","port","chosenServers","transportSocket","chosenServer","oooohLetMeLive","transportHTTP","dcOption","chooseServer","transportType","reuse","hasOwnProperty","client","download","upload","servers","transports","transport","obj","indexOfAndSplice","MTTransportController","opened","Map","waitForWebSocket","pingTransports","dcConfigurator","https","websocket","httpPromise","websocketPromise","socket","isFulfilled","isRejected","isHttpAvailable","isWebSocketAvailable","all","pinging","setTransportValue","setTransportOpened","setTransportClosed","AppManager","setManagers","managers","loadStorages","storages","recordPromise","storagesKeys","keys","storagesPromises","storagesResults","resetStorages","size","loadStoragesInner","AppStoragesManager","names","createStorages","loadStorage","PasswordManager","apiManager","invokeApi","updateSettings","currentHashPromise","newHashPromise","params","password","new_settings","hint","email","currentPassword","cryptoWorker","invokeCrypto","newAlgo","new_algo","salt1","newPassword","hashes","new_password_hash","getInputCheckPassword","check","inputCheckPassword","auth","setUser","user","confirmPasswordEmail","code","resendPasswordEmail","cancelPasswordEmail","ReferenceDatabase","contexts","links","saveContext","reference","context","getContexts","_context","deepEqual","getReferenceByLink","getContext","values","deleteContext","refreshReference","c","appMessagesManager","reloadMessages","refreshEmojiesSoundsPromise","appStickersManager","getAnimatedEmojiSounds","appProfileManager","getProfile","appEmojiManager","getCustomEmojiDocuments","docId","appAttachMenuBotsManager","getAttachMenuBot","botId","appThemesManager","getWallPaperById","wallPaperId","hex","newHex","newContext","makeError","safeReplaceObject","wasObject","newObject","getPeerIdsFromMessage","peerIds","fromId","viaBotId","fwdFromId","media","contactUserId","recentVoters","recent_voters","recentReactions","recent_reactions","reaction","peer_id","action","userIds","users","inviter_id","chatIds","recentRepliers","recent_repliers","reply","setDialogIndex","dialog","indexKey","GLOBAL_FOLDER_ID","DialogsStorage","allDialogsLoaded","pinnedOrders","folderId","saveAllDialogsLoaded","resetPinnedOrder","savePinnedOrders","forumTopics","folders","dialogsOffsetDate","dialogsNum","dialogsIndex","cachedResults","query","count","dialogs","onUpdateFolderPeers","update","folder_peers","folderPeer","folder_id","peer","appPeersManager","dropDialog","pinned","handleDialogUnpinning","generateIndexForDialog","pushDialog","scheduleHandleNewDialogs","onUpdateDialogPinned","getDialogOnly","handleDialogTogglePinned","onUpdateChannelPinnedTopic","topicId","generateMessageId","topic_id","topic","getForumTopic","getFilterIdForForum","onUpdatePinnedDialogs","order","handleDialogsPinned","dialogsResult","applyDialogs","d","onUpdateChannelPinnedTopics","filterId","limit","getLimit","channel","appChatsManager","getChannelInput","toChatId","offset_date","offset_id","offset_topic","processTopics","topics","after","rootScope","appUsersManager","getSelf","peerText","getPeerSearchText","indexObject","onFilterUpdate","getCachedDialogs","processDialogForFilter","processDialogForFilters","getDialogIndexKeyByFilterId","processChangedUnreadOrUnmuted","chat","getChat","dropDialogOnDeletion","enabled","flushForumTopicsCache","apiUpdatesManager","addMultipleEventsListeners","updateFolderPeers","updateDialogPinned","updateChannelPinnedTopic","updatePinnedDialogs","updateChannelPinnedTopics","appStateManager","appStoragesManager","getCache","_order","getPinnedOrders","setDialogsFromState","bind","appDraftsManager","addMissedDialogs","top_message","getServerMessageId","topMessage","saveMessages","saveDialog","ignoreOffsetDate","getMessageByPeer","reloadConversation","isDialogsLoaded","setDialogsLoaded","loaded","isForum","isFilterIdForForum","defineNotNumerableProperties","every","orders","isDialogPinned","filtersStorage","getFilter","isPinned","pinnedPeerIds","getOffsetDate","offsetDate","Math","min","sort","a","b","generateFolder","folder","unreadMessagesCount","unreadPeerIds","unreadUnmutedPeerIds","getFolder","forumTopic","getDialogKey","isTopic","getFolderDialogs","skipMigrated","hidden","migratedTo","getNextDialog","currentPeerId","findIndex","getDialogIndexKey","localId","isDialogUnmuted","appNotificationsManager","isPeerLocalMuted","respectType","threadId","getFolderUnreadCount","unreadUnmutedCount","unreadCount","arrays","setDialogIndexInFilter","isRealFolder","testDialogForFilter","pinnedIds","pinnedKey","pinnedIndex","generateDialogIndex","generateDialogPinnedDateByIndex","getDialogIndex","getDialog","verify","skipped","getDialogOrTopic","isObject","date","tsNow","timeManager","getServerTimeOffset","noIndex","filters","getFilters","cmp","wasIndex","wasDialog","wasDialogIndex","newDialogIndex","prepareFolderUnreadCountModifyingByDialog","insertInDescendSortedArray","prepareDialogUnreadCountModifying","toggle","callbacks","wasUnreadCount","getDialogUnreadCount","wasUnmuted","newUnreadCount","newUnmuted","addMessagesCount","modifyFolderUnreadCount","toggleDialog","toggleUnmuted","forumUnreadCount","getForumUnreadCount","hasUnmuted","some","max","dispatchUnreadTimeout","_folder","justReturn","noPinnedOrderUpdate","topDate","generateDialogPinnedDate","channelId","isChannel","draft","dialogKey","unshift","setDialogToState","pts","historyStorage","getHistoryStorage","messagesStorage","getHistoryMessagesStorage","history","incomingMessage","mid","getMessageFromStorage","is_outgoing","peersStorage","requestPeersForKey","isAnyChat","newPts","getChannelState","requestPeer","saveGlobalOffset","getForumTopicsCache","getDialogOffsetDate","savedGlobalOffsetDate","savedOffsetDate","dropDialogFromFolders","foundDialog","wasPinned","keepLocal","clearDialogFromState","releasePeer","dropDialogWithEvent","dropped","items","forEachReverse","assumeType","saveApiUsers","saveApiChats","chats","messages","updatedDialogs","topMid","topPendingMid","pendingTopMsgs","topPendingMessage","maxId","cache","getUpdateCache","getUpdateAfterReloadKey","updates","newUpdatesAfterReloadToHandle","saveUpdate","canSaveDialogByPeerId","isDialog","wasDialogBefore","wasTopMessage","generateTempMessageId","from_id","getOutputPeer","deleted","out","isOutgoing","migrated_to","deactivated","migratedToPeer","migratedFromTo","migratedToFrom","read_inbox_max_id","read_outbox_max_id","saveDraft","isOut","unread","unread_count","isEnd","insertSlice","setEnd","mergeReplyKeyboard","readMaxId","readOutboxMaxId","savePeerSettings","notify_settings","addChannelState","releaseUnreadCount","dialogsStorage","processTopicUpdate","oldTopic","isIconChanged","icon_emoji_id","isTitleChanged","title","isChanged","getDialogs","offsetIndex","fillContactsResult","fillContacts","cached","reloadMissingDialogsPromise","reloadMissingPeerIds","realFolderId","curDialogStorage","d1","d2","offset","loadedAll","isEnoughDialogs","isTopEnd","getTopMessages","deletedTopics","getTopicPromises","getForumTopicById","getTopicsPromise","ids","fullfillLeft","messagesForumTopics","getForumTopicOrReload","callbackify","processTopicsPromise","f","reduce","acc","v","newPinned","convertment","PREPENDED_FILTERS","LOCAL_FILTER","flags","exclude_peers","include_peers","pinned_peers","excludePeerIds","includePeerIds","FiltersStorage","filtersArr","reloadedPeerIds","localFilters","generateLocalFilter","clearFilters","onUpdateDialogFilter","saveDialogFilter","findAndSplice","onUpdateDialogFilters","oldFilters","copy","getDialogFilters","_filterId","onUpdateDialogFilterOrder","includes","setLocalId","updateDialogFilter","updateDialogFilters","updateDialogFilterOrder","prependFilters","allChatsFilter","archiveFilter","allChatsFilterIndex","exclude_archived","exclude_unarchived","exclude_read","isDialogUnread","exclude_muted","unread_mentions_count","broadcasts","isBroadcast","groups","isAnyGroup","toUserId","isBot","bots","non_contacts","isContact","contacts","testDialogForFilterId","toggleDialogPin","getConfig","pinned_infolder_count_max","getInputPeerById","createDialogFilter","prepend","remove","getOutputDialogFilter","bool","updateDialogFiltersOrder","filterIncludedPinnedPeers","peers","reloadDialogs","inputPeer","isAlreadyReloaded","reloadPromises","missingPeerIds","overwrite","invokeApiSingle","getSuggestedDialogsFilters","silent","to","oldFilter","_filter","isFilterIdAvailable","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","getOwnPropertyDescriptor","defineProperty","ApiUpdatesManager","updatesState","pendingPtsUpdates","pendingSeqUpdates","syncPending","syncLoading","channelStates","attached","subscriptions","processUpdateMessage","updateMessage","processOpts","seq","seqStart","seq_start","forceGetDifference","processUpdate","toId","fwd_from","reply_to","entities","pts_count","override","_constructor","setProxy","Proxy","saveUpdatesState","us","popPendingSeqUpdate","nextSeq","pendingUpdatesData","seqAwaiting","ptsAwaiting","clearStatePendingSync","popPendingPtsUpdate","curState","curPts","goodPts","goodIndex","getDifference","processLocalUpdate","wasSyncing","pts_total_limit","qts","differenceResult","other_updates","new_messages","apiMessage","nextState","intermediate_state","onDifferenceTooLong","justAName","getChannelDifference","channelState","bindPrefix","lastDifferenceTime","final","lastPtsUpdateTime","fwdHeader","hasUser","post","hasChat","popPts","popSeq","subscribeToChannelUpdates","subscription","cb","interval","unsubscribeFromChannelUpdates","force","clearInterval","attach","langCode","noErrorBox","stateResult","setUpdatesProcessor","strs","en","ru","getChangelog","lang","res","ok","langStr","parseMarkdown","inbox_date","languages","filterUnique","language","AppAvatarsManager","savedAvatarURLs","removeFromAvatarsCache","isAvatarCached","saved","loadAvatar","photo","peerPhotoFileLocation","downloadOptions","dc_id","limitPart","apiFileManager","blob","URL","createObjectURL","AppCallsManager","calls","IS_CALL_SUPPORTED","updatePhoneCall","saveCall","phone_call","updatePhoneCallSignalingData","callId","phone_call_id","computeKey","g_b","p","call","isDiscarded","oldCall","getCall","getCallInput","access_hash","savePhonePhoneCall","phonePhoneCall","generateDh","random_length","dhConfig","requestCall","protocol","g_a_hash","video","getUserInput","random_id","discardCall","duration","connection_id","AppChatsManager","isPeerNeeded","modifyUsernamesCache","onChatUpdated","onUpdateChannelParticipant","clearCache","onUpdateChatDefaultBannedRights","default_banned_rights","updateChannelParticipant","updateChatDefaultBannedRights","getFromCache","apiChats","saveApiChat","oldChat","participants_count","changedUsername","setUsernameToCache","oldPhotoId","newPhotoId","toggledForum","forum","changedPhoto","changedTitle","changedAnyBadge","verified","scam","fake","hasRights","rights","isThread","editChatDefaultBannedRights","banned_rights","until_date","isMegagroup","megagroup","isInChat","good","getInputPeer","getChannelInputPeer","getChatInputPeer","allowMin","getChatString","createChannel","inviteToChannel","input","usersInputs","u","createChat","leaveChannel","joinChannel","addChatUser","fwdLimit","fwd_limit","deleteChatUser","leaveChat","leave","deleteChannel","deleteChat","migrateChat","updateUsername","username","doNotRefresh","refreshChatAfterRequest","editPhoto","inputFile","inputChatPhoto","file","editTitle","editAbout","about","editBanned","participant","getParticipantPeerId","wasChannel","timestamp","actor_id","prev_participant","new_participant","kicked_by","clearChannelParticipantBannedRights","kickFromChannel","view_messages","kickFromChat","resolveChannel","messagesChats","togglePreHistoryHidden","toggleSignatures","toggleNoForwards","setChatAvailableReactions","reactions","chatFull","getCachedFullChat","available_reactions","getSendAs","invokeApiSingleProcess","processResult","sendAsPeers","importChatInvite","hash","checkUsername","getSponsoredMessage","invokeApiCacheable","cacheSeconds","sponsoredMessages","sponsoredMessage","viewSponsoredMessage","randomId","checkChatInvite","chatInvite","toggleUsername","active","reorderUsernames","deactivateAllUsernames","makeChannelPrivate","getChannels","toggleForum","editForumTopic","iconEmojiId","closed","createForumTopic","iconColor","channelFull","getChannelFull","sendAsInputPeer","default_send_as","icon_color","send_as","updatePinnedForumTopic","wrapUrl","unsafe","matchUrlProtocol","tgMeMatch","telescoPeMatch","tgMatch","onclick","prefix","pathname","fullPath","I18n","pluralRules","cacheLangPackPromise","setLangCode","lastRequestedLangCode","lastRequestedNormalizedLangCode","updateAmPm","timeFormat","dateTimeFormat","getDateTimeFormat","hour","minute","hour12","setHours","amText","format","amPmCache","am","pmText","pm","loadLocalLangPack","defaultCode","langSign","countries","strings","formatLocalStrings","default","saveLangPack","from_version","lang_code","local","loadLangPack","web","requestedServerLanguage","lang_pack","polyfillPromise","pushTo","langPack","appVersion","applyLangPack","currentLangCode","Intl","PluralRules","string","countriesList","country","langPackKey","default_name","lastAppliedLangCode","cachedDateTimeFormats","document","querySelectorAll","element","weakMap","superFormatter","indexHolder","lastIndex","p1","p2","p3","p4","createElement","append","lastIndexOf","wrappedUrl","href","setAttribute","DocumentFragment","firstChild","textContent","arg","pushNextArgument","plain","select","item","Node","isRTL","setRTL","rtl","getCacheLangPack","finally","setTimeFormat","haveToUpdate","IntlDateElement","getStrings","getLangPack","langPack1","langPack2","localLangPack1","localLangPack2","l","_Intl","WeakMap","IntlElementBase","classList","property","IntlElement","safeAssign","formatted","dataset","compareAndUpdate","json","DateTimeFormat","hours","getHours","getMinutes","capitalizeFirstLetter","i18n","i18n_","_i18n","months","days","getWeekNumber","UTC","getFullYear","getMonth","getDate","dayNum","getUTCDay","setUTCDate","getUTCDate","yearStart","getUTCFullYear","ceil","getTime","today","year","day","month","weekday","minYear","yearPattern","RegExp","monthYearOrDayPattern","yearOrDayAndMonthPattern","shortDate","longDate","numberOfDaysEachMonth","createForMonthYear","dates","selectedYear","currentYear","setFullYear","minDate","setMonth","maxDate","formatterMonthYear","createForDayMonth","validDateForMonth","formatterDayMonth","formatterYearMax","formatWeekLong","getDay","q","safeReplaceArrayInObject","trim","dayOfWeek","setDate","getDayOfWeek","distance","setTime","matches","exec","g1","g2","k","g3","parseInt","k1","EXTENSION_MIME_TYPE_MAP","pdf","tgv","tgs","wav","mp3","ogg","jpeg","jpg","png","gif","webp","mp4","webm","mov","svg","MIME_TYPE_EXTENSION_MAP","uploadWallPaperTempId","AppDocsManager","onServiceWorkerFail","docs","doc","supportsStreaming","thumbsStorage","deleteCacheContext","stickerCachedThumbs","uploadingWallPapers","online","saveDoc","oldDoc","file_reference","referenceDatabase","attributes","attribute","file_name","wrapPlainText","voice","mime_type","w","h","round_message","alt","stickerEmojiRaw","stickerSetInput","thumbs","IS_WEBP_SUPPORTED","sticker","IS_WEBM_SUPPORTED","animated","mappedMimeType","joiner","monthAsNumber","noSeconds","getSeconds","leadingZero","noTime","getFullDate","isServiceWorkerOnline","getCacheContext","setCacheContextURL","thumb","getDocumentDownloadOptions","getDocumentURL","getDoc","downloadDoc","queueId","onlyCache","downloadMedia","getLottieCachedThumb","toneIndex","saveLottiePreview","width","height","saveWebPConvertedStrippedThumb","stickerThumbConverted","prepareWallPaperUpload","cacheContext","wallpaper","slug","uploadWallPaper","fileName","wallPaper","downloaded","getGifs","invokeApiHashable","gifs","requestDocPart","requestFilePart","getDocumentInputFileLocation","AppDraftsManager","drafts","updateDraftMessage","notify","getKey","getDraft","getAllDrafts","getAllDraftPromise","apiDraft","processApiDraft","isEmptyDraft","reply_to_msg_id","syncDraft","localDraft","saveOnServer","serverDraft","draftsAreEqual","draftObj","getInputEntities","no_webpage","top_msg_id","saveLocalDraft","clearAllDrafts","combined","clearDraft","emptyDraft","setDraft","EMOJI_LANG_PACK","keywords","AppEmojiManager","keywordLangPacks","indexedLangPacks","getKeywordsPromises","recent","getRecentEmojisPromises","getCustomEmojiDocumentPromises","getEmojiKeywords","storageKey","pack","validateInitObject","keywordsDifference","packKeywords","keyword","emoticons","getBothEmojiKeywords","networkerFactory","native","getRecentEmojis","indexEmojis","searchEmojis","emojis","POPULAR_EMOJI","recentEmoji","recentCustomEmoji","pushRecentEmoji","emoji","fixEmoji","docIds","document_id","documents","appDocsManager","getCachedCustomEmojiDocuments","setDebouncedGetCustomEmojiDocuments","getCustomEmojiDocumentsPromise","allIds","getCustomEmojiDocument","getCustomEmojis","getEmojiStickers","AppGroupCallsManager","groupCalls","participants","nextOffsets","updateGroupCall","saveGroupCall","updateGroupCallParticipants","groupCallId","saveApiParticipants","groupCall","getCachedParticipants","prepareToSavingNextOffset","nextOffsetsMap","nextOffset","setNextOffset","newNextOffset","saveApiParticipant","skipCounterUpdating","oldParticipant","hasLeft","muted","can_self_unmute","getGroupCall","modified","just_joined","apiParticipants","editParticipant","getGroupCallInput","getInputPeerSelf","volume","raise_hand","raiseHand","video_paused","videoPaused","video_stopped","videoStopped","presentation_paused","presentationPaused","getGroupCallFull","participants_next_offset","shouldUpdate","createGroupCall","scheduleDate","schedule_date","getGroupCallParticipants","sources","groupCallParticipants","next_offset","hangUp","discard","groupCallInput","source","join_as","joinGroupCall","isMuted","joinVideo","leaveGroupCallPresentation","getPhotoInput","getPhotoMediaInput","ttl_seconds","getMediaInput","AppInlineBotsManager","inlineResults","setHash","getGeoInput","geo","lat","long","accuracy_radius","getInlineResults","bot","geo_point","stopTime","botResults","queryId","query_id","appPhotosManager","savePhoto","generateQId","pushPopularBot","getTopPeers","topPeers","botPeerId","topPeer","rating","switchToPM","fromPeerId","startParam","startBot","checkSwitchReturn","getUser","bot_inline_placeholder","peerData","switchInlineQuery","getPeerUsername","callbackButtonClick","button","msg_id","sendInlineResult","queryAndResultIds","inlineResult","queryID","resultID","resultId","send_message","reply_markup","replyMarkup","sendText","inputMedia","messageMedia","caption","sendMessage","geoPoint","address","provider","venue_id","venue_type","phone_number","first_name","last_name","vcard","description","currency","total_amount","shipping_address_requested","start_param","sendOther","AppMessagesIdsManager","tempNum","num","splitStringByLength","maxLength","lastSliceStartIndex","arrayIndex","cut","end","part","_arrayIndex","partLength","appTabsManager","tabs","start","getTabs","tab","addTab","deleteTab","getDocumentInput","setBooleanFlag","processAfter","UPDATE_STICKERSET_ORDER","AppMessagesManager","pendingByRandomId","pendingByMessageId","pendingAfterMsgs","tempFinalizeCallbacks","sendSmthLazyLoadQueue","needSingleMessages","extendedMedia","maxSeenId","newDialogsToHandle","notificationsToHandle","reloadConversationsPeers","groupedTempId","typings","unreadMentions","goToNextMentionPromises","batchUpdates","middleware","clean","uploadFilePromises","messagesStorageByPeerId","groupedMessagesStorage","scheduledMessagesStorage","historiesStorage","threadsStorage","searchesStorage","pinnedMessages","threadsServiceMessagesIdsStorage","threadsToReplies","handleNewDialogs","newMaxSeenId","updateMap","processDialog","isDialogDefined","incrementMaxSeenId","handleNotifications","notificationsHandlePromise","notifyPeerToHandle","getNotifyPeerSettings","peerTypeNotifySettings","mentioned","notifyAboutMessage","fwdCount","onUpdateMessageId","onUpdateNewMessage","getMessagePeer","isLocalThreadUpdate","createMessageStorage","threadKey","getThreadKey","handleNewUpdateAfterReload","threadStorage","reply_to_peer_id","reply_to_mid","receiptMessage","checkPendingMessage","updateMessageRepliesIfNeeded","ignoreExisting","findSlice","firstSlice","forceUserOnline","handleNewMessage","inboxUnread","modifyCachedMentions","setDialogTopMessage","notifyPeer","onUpdateMessageReactions","recentReaction","previousReactions","previousRecentReactions","show_previews","peerReaction","pushBatchUpdate","batchUpdateReactions","setDialogToStateIfMessageIsTop","onUpdateDialogUnreadMark","unread_mark","onUpdateEditMessage","oldMessage","newMessage","handleEditedMessage","isTopMessage","clear_history","dispatchEditEvent","newReactions","grouped_id","onUpdateReadHistory","max_id","read_max_id","getObjectKeysAndSort","stillUnreadCount","still_unread_count","newUnreadMentionsCount","foundAffected","repliesKey","getReadMaxIdIfUnread","messageThreadId","getMessageThreadId","setCount","threadKeyPart","onUpdateReadMessagesContents","topMsgId","mids","findPeerIdByMids","media_unread","fixDialogUnreadMentionsIfNoMessage","onUpdateChannelAvailableMessages","availableMinId","available_min_id","onUpdateDeleteMessages","threadKeys","historyUpdated","handleDeletedMessages","threadsStorages","msgs","affected","onUpdateChannel","needDialog","getPeerActiveUsernames","onUpdateChannelReload","flushStoragesByPeerId","onUpdateChannelMessageViews","views","batchUpdateViews","onUpdateServiceNotification","popup","phone","onUpdatePinnedMessages","missingMessages","werePinned","getPinnedMessagesKey","hiddenPinnedMessages","onUpdateNotifySettings","onUpdateNewScheduledMessage","isScheduled","onUpdateDeleteScheduledMessages","onUpdateMessageExtendedMedia","extended_media","onUpdateTranscribedAudio","batch","toDispatch","getMessagesFromMap","previousResults","changedResults","reactionCount","previousReactionCount","_reactionCount","reactionsEqual","chosen_order","updateMessageID","updateNewDiscussionMessage","updateNewMessage","updateNewChannelMessage","updateDialogUnreadMark","updateEditMessage","updateEditChannelMessage","updateMessageReactions","updateReadChannelDiscussionInbox","updateReadChannelDiscussionOutbox","updateReadHistoryInbox","updateReadHistoryOutbox","updateReadChannelInbox","updateReadChannelOutbox","updateChannelReadMessagesContents","updateReadMessagesContents","updateChannelAvailableMessages","updateDeleteMessages","updateDeleteChannelMessages","updateChannel","updateChannelReload","updateChannelMessageViews","updateServiceNotification","updatePinnedMessages","updatePinnedChannelMessages","updateNotifySettings","updateNewScheduledMessage","updateDeleteScheduledMessages","updateMessageExtendedMedia","updateTranscribedAudio","filterFunc","getScheduledMessagesStorage","webpage","appWebPagesManager","getCachedWebPage","drop","poll","appPollsManager","pollToMessages","startsWith","batchUpdatesDebounced","debounce","details","maxSeenMsgId","sendEntites","entity","invokeAfterMessageIsSent","tempId","callbackName","finalize","editMessage","is_scheduled","newMedia","noWebPage","handled","transcribeAudio","transcription_id","processError","replyToMsgId","MAX_LENGTH","message_length_max","webPage","getPeerMigratedTo","generateOutgoingMessage","toggleError","onMessagesSendError","sentRequestOptions","afterMessageId","sendAs","sendAsPeerId","apiPromise","invokeApiAfter","clear_draft","update_stickersets_order","wrapMessageEntities","beforeMessageSending","sequential","noop","sendFile","attachType","apiFileName","fileType","File","isDocument","Blob","isPhoto","IMAGE_MIME_TYPES_SUPPORTED","strippedPhotoSize","strippedBytes","actionName","isVoiceMessage","waveform","isMedia","photoSize","sizes","objectURL","VIDEO_MIME_TYPES_SUPPORTED","videoAttribute","isRoundMessage","supports_streaming","noSound","thumbCacheContext","sentDeferred","spoiler","uploadingFileName","getFileNameForUpload","uploaded","uploadPromise","load","thumbUploadPromise","cancelPendingMessage","setTyping","addNotifyListener","progress","percents","floor","done","total","notifyAll","force_file","isGroupedItem","background","ret","sendAlbum","sendFileDetails","groupId","o","invoke","multiMedia","multi_media","originalInputMedia","inputSingleMedia","inputs","sendContact","contactPeerId","getContactMediaInput","pollId","savePoll","total_voters","getPoll","getPhoto","postAuthor","getPeer","signatures","generateFromId","post_author","generateFlags","generateReplyHeader","via_bot_id","replies","generateReplies","replyToTopId","originalMessage","forum_topic","reply_to_top_id","linked_chat_id","comments","replies_pts","isAnonymousSending","generateForwardHeader","isUserHidden","from_name","userFull","getCachedFullUser","private_forward_name","channel_post","saved_from_msg_id","saved_from_peer","generateFakeAvatarMessage","Number","MAX_SAFE_INTEGER","getUploadPromise","uploadFileName","admin_rights","anonymous","pendingData","fillConversations","chatHistoryStorage","maxSeenIdIncremented","hasPrepend","noIdsDialogs","setFolderId","setMessageUnreadByDialog","folderDialogs","dialogsLength","slicedDialogs","offset_peer","offsetPeerId","forwardMessages","config","overflowMids","forwarded_count_max","dropCaptions","dropAuthor","newMids","newMessages","replyToMid","replyToMessageIdx","newReplyToMid","getStickerEffectThumb","nopremium","group","from_peer","to_peer","with_my_score","withMyScore","drop_author","drop_media_captions","generateEmptyMessage","getMessagesStorageByKey","s","getMessagesStorage","getMessageById","cantForwardDeleteMids","cantForward","cantDelete","canForward","canDeleteMessage","reloadConversationOrTopic","inputDialogPeer","getInputDialogPeerById","reloadConversationsPromise","inputDialogPeers","currentState","doFlushHistory","just_clear","revoke","affectedHistory","flushHistory","justClear","getHistory","historyResult","getTypingKey","ss","hidePinnedMessages","getPinnedMessage","getSearch","inputFilter","getPinnedMessagesCount","getPinnedMessagesMaxId","updatePinnedMessage","unpin","pm_oneside","unpinAllMessages","unpinAll","getAlbumText","getGroupsFirstMessage","minMid","getMidsByAlbum","groupedId","getMessagesByAlbum","getMidsByMessage","filterMessages","appMessagesIdsManager","saveMessage","isMessage","replyTo","overwriting","msgId","savedFromPeerId","savedFromMid","savedFrom","mediaContext","unsupported","originalDoc","messageKey","getMessageKeyForPendingWebPage","saveWebPage","appWebDocsManager","saveWebDocument","extendedMediaMedia","totalEntities","migrateFrom","migrateTo","video_sizes","appGroupCallsManager","migrateChecks","getFirstMessageToEdit","goodMessage","myPeerId","canEditMessage","apiEntities","myEntities","parseEntities","mergeEntities","reportMessages","editPeerFolders","getDialogPeer","markDialogUnread","read","fromChat","canMessageBeEdited","kind","goodMedias","edit_time_limit","getReplyKeyboard","messageReplyMarkup","lastReplyMarkup","selective","maxOutId","single_use","getSearchStorage","getSearchCounters","canCache","isPeerRestricted","func","filterMessagesByInputFilterFromStorage","_storage","filterMessagesByInputFilter","nextRate","backLimit","offset_id_offset","next_rate","foundMsgs","min_date","max_date","add_offset","min_id","offsetId","offsetMessage","offset_rate","searchResult","foundCount","subscribeRepliesThread","getDiscussionMessage","generateThreadServiceStartMessage","maxMessageId","serviceStartMessage","is_single","getThreadServiceMessageId","getMessageWithReplies","newMaxId","unsetEnd","newDialogsHandlePromise","deleteMessages","isRecursion","creator","delete_messages","serverMessageIds","affectedMessages","readHistory","triedToReadMaxId","readPromise","getPeerString","readAllHistory","getUnreadMentionsKey","slicedArray","fixUnreadMentionsCountIfNeeded","goToNextMention","loadNextPromise","loadNextMentions","last","getUnreadMentions","mergeHistoryResult","minId","messagesMessages","readMessages","msgIds","getHistoryStorageTransferable","historySerialized","toJSON","inputNotifyPeer","getInputNotifyPeerById","ignorePeerId","getNotifyPeerTypeSettings","getNotifySettings","isMessageIsTopMessage","threadMessage","broadcastEventName","pendingMessage","finalizePendingMessage","mutePeer","validatePeerSettings","muteUntil","mute_until","togglePeerMute","mute","canSendToPeer","canSendToUser","finalMessage","tempMessage","finalizePendingMessageCallbacks","newPhoto","newDoc","newPhotoSize","oldCacheContext","getPhotoDownloadOptions","thumbSize","polls","handleReleasingMessage","getMessageReactionsListAndReadParticipants","skipReadParticipants","skipReactionsList","emptyMessageReactionsList","canViewMessageReadParticipants","getMessageReadParticipants","appReactionsManager","getMessageReactionsList","messageReactionsList","readParticipantsPeerIds","filteredReadParticipants","readPeerId","reactionsCount","readParticipants","appConfig","getAppConfig","chat_read_mark_size_threshold","chat_read_mark_expire_period","incrementMessageViews","increment","chatPeerIds","idleStartTime","getScheduledMessageByPeer","getScheduledMessages","sendScheduledMessages","deleteScheduledMessages","getMessageWithCommentReplies","isFetchIntervalNeeded","getNewHistory","isBottomEnd","getEnds","offsetIdOffset","haveSlice","sliceMe","fulfilled","fillHistoryStorage","constructSlice","isHistoryResultEnd","topWasMeantToLoad","wasMaxId","requestHistory","deleteSlice","oldestMessage","foundSlice","_historyResult","fetchSingleMessages","fetchSingleMessagesPromise","requestPromises","getMessagesResult","getExtendedMedia","toRequest","fetchMessageReplyTo","replyToPeerId","typing","smth","deleteWebPageFromPending","updatePollToMessage","groupedStorage","albums","dispatchAlbumEdit","deletedMids","noforwards","noForwards","getElementCallback","newMap","peerIdStr","saveDefaultSendAs","convertInputKeyToKey","inputKey","AppNotificationsManager","peerSettings","notifyUsers","notifyChats","notifyBroadcasts","notifyForumTopic","checkMuteUntil","checkMuteUntilTimeout","closestMuteUntil","peerNotifySettings","typeKey","checkMuteUntilThrottled","throttle","isPeerType","notifySettings","getNotifyPeerTypePromise","getContactSignUpNotification","notifyContactsSignUp","setContactSignUpNotification","getPeerKey","getPeerMuted","getPeerLocalSettings","n","peerKey","typeNotifySettings","AppPeersManager","canPinMessage","getPeerPhoto","getUserString","getRestrictionReasonText","restriction_reason","getUserInputPeer","getUserSearchText","getDialogType","getDeleteButtonText","AppPhotosManager","photos","oldPhoto","Infinity","getUserPhotos","inputUser","photosResult","photoIds","photoId","AppPollsManager","updateMessagePoll","poll_id","saveResults","chosenIndexes","answer","chosen","getInputMediaPoll","correctAnswers","solution","solutionEntities","correct_answers","solution_entities","sendVote","optionIds","answers","option","getResults","getVotes","votesList","stopPoll","newPoll","AppPrivacyManager","privacy","updatePrivacy","rules","setPrivacy","privacyRules","inputRule","rule","getPrivacy","privacyKey","getGlobalPrivacySettings","setGlobalPrivacySettings","PEER_FULL_TTL","AppProfileManager","usersFull","chatsFull","fullExpiration","onUpdateChatParticipants","onUpdateChatParticipantAdd","_participants","onUpdateChatParticipantDelete","onUpdateUserTyping","getTypingsKey","typingsInPeer","t","cancelAction","getChatFull","onUpdatePeerBlocked","blocked","updateChatParticipants","updateChatParticipantAdd","updateChatParticipantDelete","updateUserTyping","updateChatUserTyping","updateChannelUserTyping","updatePeerBlocked","fullChat","updated","call_active","hasChatPhoto","chat_photo","refreshFullPeer","invalidateChannelParticipants","usersUserFull","full_user","profile_photo","botInfo","bot_info","referenceContext","description_document","description_photo","getProfileByPeerId","getCachedProfileByPeerId","getFullPhoto","profile","full_chat","getChatInviteLink","exported_invite","link","exportedInvite","getParticipants","getChannelParticipants","chatParticipants","createSearchIndex","chatParticipant","found","filteredParticipants","getParticipant","getChannelParticipant","broadcast","channelParticipant","fullChannel","getMentions","processUserIds","ratingMap","cP","updateProfile","saveApiUser","uploadProfilePhoto","updateResult","strippedThumb","stripped_thumb","deletePhotos","deletedList","verifyParticipantForOnlineCount","reduceParticipantsForOnlineCount","getOnlines","chatInfo","channelParticipants","onlines","getPeerTypings","callbackifyAll","SAVE_DOC_KEYS","REFERENCE_CONTEXT","AppReactionsManager","availableReactions","getAvailableReactions","sendReactionPromises","lastSendingTimes","availableReaction","around_animation","static_icon","appear_animation","center_icon","messagesAvailableReactions","getActiveAvailableReactions","inactive","getAvailableReactionsForPeer","activeAvailableReactions","unshiftQuickReaction","getQuickReaction","quickReaction","chatAvailableReactions","filteredChatAvailableReactions","unshiftQuickReactionInner","getAvailableReactionsByMessage","isReactionActive","reactions_default","getReactionCached","getReaction","getMessagesReactions","setDefaultReaction","sendReaction","lastSendingTimeKey","unsetReactionCount","canSeeList","can_see_list","chosenReactions","unsetReactions","chosenReactionIdx","chosenReactionCount","chosenReactionsLength","reactionCountIdx","id1","id2","promiseKey","editMessageUpdateIdx","editMessageUpdate","LOCAL_IDS","EMOJI","EMOJI_ANIMATIONS","PREMIUM_GIFTS","GENERIC_ANIMATIONS","DEFAULT_STATUSES","DEFAULT_TOPIC_ICONS","LOCAL_IDS_SET","AppStickersManager","processAllStickersResult","allStickers","sets","stickerSet","videos","getStickerSetPromises","getStickersByEmoticonsPromises","sounds","getAnimatedEmojiStickerSet","getGreetingStickersPromise","getGreetingStickersTimeout","getGreetingSticker","onStickersUpdated","updateNewStickerSet","saveStickerSet","updateRecentStickers","updateFavedStickers","updateMoveStickerSetToTop","stickers","getFavedStickersStickers","getRecentStickersStickers","justPreload","getStickersByEmoticon","greetingStickers","random","saveStickers","canUseStickerSetCache","useCache","refreshTime","getStickerSet","cachedSet","getStickerSetInput","saveById","getLocalStickerSet","animations","getAnimatedEmojiSoundsPromise","emojies_sounds","sound","bytesStr","atob","file_reference_base64","charCodeAt","this_dc","getRecentStickers","recentStickers","saveRecentSticker","unsave","_doc","docEmoticon","faved","cleanEmoji","getAnimatedEmojiSticker","isAnimation","packs","getAnimatedEmojiSoundDocument","preloadAnimatedEmojiSticker","preloadEmojiPromise","preloadAnimatedEmojiStickerAnimation","animation","preloadSticker","isPremiumEffect","video_thumbs","newSet","setToCache","needSave","installed_date","getStickerSetThumbDownloadOptions","thumb_dc_id","isAnimated","mimeType","getFeaturedStickers","covered","getPromoPremiumStickers","getPremiumStickers","getFavedStickers","favedStickers","getFavedStickersLimit","faveSticker","unfave","toggleStickerSet","archived","toggleStickerSets","searchStickerSets","excludeFeatured","exclude_featured","foundSaved","cover","getAllStickers","preloadStickerSets","includeOurStickers","messagesStickers","installedSets","foundStickers","cachedStickersAnimated","cachedStickersStatic","iteratePacks","clearRecentStickers","AppUsersManager","usernames","getTopPeersPromises","contactsIndex","contactsFillPromise","contactsList","updatedContactsList","updateUsersStatuses","timestampNow","updateUserStatus","setInterval","expires","was_online","setUserToStateIfNeeded","updateUserName","contactsListCachedTime","contact","mutual_contact","pushContact","recentSearch","onContactsModified","fromServer","pushRecentSearch","clearRecentSearch","resolveUsername","resolvedPeer","processResolvedPeer","resolvePhone","popContact","getContacts","includeSaved","sortBy","_contactsList","userId1","userId2","sortName1","sortName","sortName2","localeCompare","status1","getUserStatusForSort","myUserId","testSelfSearch","getContactsPeerIds","toggleBlock","block","apiUsers","cleanedUsernames","cleanUsername","searchUsername","oldPeer","oldUser","fullName","wasContact","newContact","onContactUpdated","checkPremium","isUserOnlineVisible","getUserStatus","isRegularUser","getUserPhone","isAnonymous","fragment_prefixes","isAttachMenuBot","bot_attach_menu","support","isNonContactUser","eventTimestamp","importContact","importContacts","phones","inputContacts","j","client_id","importedContactsResult","imported","importedContact","topPeersCache","cachedTime","categories","getBlocked","contactsBlocked","getLocated","self_expires","searchContacts","my_results","curIsContact","setUserStatus","offline","updateMyOnlineStatus","addContact","addPhonePrivacyException","add_phone_privacy_exception","deleteContacts","photoTypeSet","AppWebPagesManager","webpages","pendingWebPages","updateWebPage","apiWebPage","oldWebPage","isUpdated","siteName","site_name","shortTitle","author","pendingSet","getWebPage","readBlobAsArrayBuffer","readBlobAs","fileNameRFC","escape","DownloadWriter","serviceMessagePort","getServiceMessagePort","write","chunk","saveToStorage","DownloadStorage","getFile","prepareWriting","headers","cancel","getWriter","MIN_PART_SIZE","IGNORE_ERRORS","ApiFileManager","cacheStorage","downloadStorage","downloadPromises","uploadPromises","downloadPulls","downloadActives","refreshReferencePromises","maxUploadParts","maxDownloadParts","uncompressTGS","uncompressTGV","svgIndex","__","fixFirefoxSvg","TextEncoder","convertWebp","convertOpus","webFileDcId","webfile_dc_id","upload_max_fileparts_premium","upload_max_fileparts_default","downloadRequest","activeDelta","downloadPull","downloadCheck","downloadLimit","setQueueId","getFileStorage","cancelDownload","canceled","requestWebFilePart","checkCancel","isLocalWebFile","extension","file_type","mtime","fileDownload","getDelta","checkedReference","getLimitPart","isUpload","maxParts","maxPartSize","inputFileLocation","isDownloading","getDownload","getUpload","getConvertMethod","IS_OPUS_SUPPORTED","allocateDeferredPromises","startOffset","delayed","writeDeferred","writePromise","originalMimeType","convertMethod","getDownloadFileNameFromOptions","cacheFileName","errorHandler","prepared","isWebFile","cachePrepared","downloadPrepared","possibleSize","_errorHandler","writer","truncate","downloadFileName","readBlobAsUint8Array","requestPart","dispatchProgress","throttledDispatchProgress","superpuper","isFinal","getParts","replaceParts","processedResult","getDownloadMediaDetails","downloadMediaURL","downloadMediaVoid","fileSize","isBigFile","partSize","totalParts","fileId","resultInputFile","parts","md5_checksum","resolved","it","_part","doneParts","file_id","file_part","file_total_parts","fileUpload","generator","ApiManagerMethods","apiPromisesSingleProcess","apiPromisesSingle","apiPromisesCacheable","afterMessageIdTemp","setUserAuth","prepareTempMessageId","queryJSON","newResult","cacheKey","oldPromise","getNewPromise","newPromise","ignore_restriction_reasons","pin","folderPin","bio","topicPin","ApiManager","cachedNetworkers","cachedExportPromise","gettingNetworkers","baseDcId","afterMessageTempIds","changeTransportType","updateConfig","iterateNetworkers","getTransportType","connections","dcs","array","oldTransportType","oldObject","oldGetKey","newGetKey","info","changeNetworkerTransport","getBaseDcId","sessionStorage","setBaseDcId","userAuth","dcID","user_auth","wasDcId","getNetworker","setOnDrainIfNeeded","dc","logOut","loggingOut","storageKeys","storageResult","logoutPromises","ignoreErrors","toggleStorages","generateNetworkerGetKey","networkers","maxNetworkers","isOnline","ak","authKeyHex","serverSaltHex","authKey","bytesFromHex","authKeyId","serverSalt","authorizer","_error","newTransportType","removeTransport","stack","getNetworkerVoid","oldTransport","changeTransport","onNetworkerDrain","onDrain","removeNetworker","isFileNetworker","canRelease","setDrainTimeout","updatesProcessor","cachedNetworker","startTime","isStopped","performRequest","wrapApiCall","exportResolve","exportReject","exportedAuth","newDcId","unsetConnectionInited","rawError","waitTime","floodMaxTimeout","attachPromise","originalError","PeersStorage","neededPeers","singlePeerMap","thumbFullSize","ThumbsStorage","thumbsCache","intToUint","ulongFromInts","high","low","shiftLeft","safeBigInt","ulongBigInt","pow","longBigInt","divide","bigIntFromBytes","base","boolFalse","predicate","boolTrue","vector","gzipPacked","sliceMethod","TLSerialization","mtproto","startMaxLength","createBuffer","ArrayBuffer","intView","Int32Array","byteView","getArray","resultBuffer","resultInt32","subarray","getBuffer","getBytes","typed","resultArray","getOffset","checkLength","needBytes","previousBuffer","previousArray","writeInt","field","storeInt","storeBool","storeLongP","iHigh","iLow","storeLong","sLong","storeIntBytes","_bigInt","bigInt","isNegative","quotient","remainder","divmod","toJSNumber","storeDouble","Float64Array","storeString","sUTF8","unescape","storeBytes","bits","storeRawBytes","storeMethod","methodName","methodData","methods","m","flagsOffsets","param","condType","fieldBit","storeObject","paramName","itemType","schema","isBare","constructorData","TLDeserialization","readInt","fetchInt","fetchDouble","doubleView","fetchLong","ulong","greater","minus","greaterOrEquals","abs","fetchBool","fetchObject","fetchString","String","fromCharCode","decodeURIComponent","fetchBytes","fetchIntBytes","fetchRawBytes","fetchVector","fallback","checkType","constructorCmp","uncompressed","constructorsIndex","schemaFallback","int1","int2","overrideKey","isCond","formatJSONValue","jsonValue","objectValues","objectValue","setOffset","addPadding","blockSize","zeroes","blockSizeAsTotalLength","needPadding","padding","bufferConcats","delays","disconnectDelayMin","disconnectDelayMax","pingInterval","pingMaxTime","connectionTimeout","RESEND_OPTIONS","noSchedule","notContentRelated","invokeAfterMsgConstructor","networkerTempId","MTPNetworker","lastServerMessages","sentMessages","pendingMessages","pendingAcks","pendingResendReq","nextReq","checkConnectionPeriod","lastResponseTime","activeRequests","sendPingDelayDisconnect","pingDelayDisconnectDeferred","lastPingTime","disconnectDelay","round","timeoutTime","lastPingStartTime","pingId","lastPingDelayDisconnectId","wrapMtpCall","ping_id","disconnect_delay","rejectTimeout","elapsedTime","checkLongPoll","isClean","longPollPending","sleepAfter","sendLongPoll","checkConnection","clearCheckConnectionTimeout","serializer","pingMessage","generateId","seq_no","generateSeqNo","sendEncryptedRequest","toggleOffline","checkConnectionTimeout","authKeyUint8","convertToUint8Array","isFileUpload","isFileDownload","updateSession","seqNo","prevSessionId","updateSentMessage","sentMessageId","sentMessage","container","inner","innerSentMessageId","innerSentMessage","pushMessage","wrapMtpMessage","connectionInited","invokeWithLayer","initConnection","resultType","isAPI","nextReqTimeout","longPollInterval","clearPingDelayDisconnect","forceReconnectTimeout","sendingLongPoll","max_delay","wait_after","max_wait","noResponse","longPoll","delay","checkConnectionRetryAt","scheduleRequest","handleSentEncryptedRequestHTTP","noResponseMsgs","sqrt","pushResend","shouldResolve","onDrainTimeout","willChange","onConnectionStatusChange","innerMsgId","acked","getMsgKey","dataWithPadding","x","msgKeyLargePlain","msgKeyLarge","getAesKeyIv","msgKey","sha2aText","sha2bText","aesKey","aesIv","sha2a","sha2b","akStopped","performScheduledRequest","ackMsgIds","msg_ids","pendingResendReqLength","outMessage","messagesByteLen","hasApiCall","hasHttpWait","lengthOverflow","compare","messageByteLength","generateContainerMessage","messageWithBody","innerMessages","getEncryptedMessage","keyIv","getDecryptedMessage","encryptedData","getEncryptedOutput","dataBuffer","paddingLength","encryptedResult","requestData","baseError","responseBuffer","deserializer","bytesCmp","calcMsgKey","totalLength","messageBodyLength","messageBody","mt_message","seqno","mt_rpc_result","req_msg_id","applyServerSalt","newServerSalt","toArray","ackMessage","reqResend","notEmpty","processMessageAck","error_message","error_code","msg","applyServerTime","serverTime","shiftRight","innerMessage","new_server_salt","bad_msg_id","changedTimeOffset","badMessage","first_msg_id","server_salt","answer_msg_id","lastResendReq","lastResend","pendingResend","reqMsgId","badMsgId","pos","NetworkerFactory","startAll","stoppedNetworkers","stopAll","setLanguage","testPublicKeysHex","modulus","exponent","publisKeysHex","publicKeysParsed","preparePromise","prepare","keyParsed","RSAPublicKey","fingerprintBytes","fingerprints","fingerprintHex","fill","foundKey","fingerprint","bytesXor","bytes1","bytes2","Authorizer","sendPlainRequest","requestArray","requestLength","headerArray","errorCode","auth_key_id","msg_len","sendReqPQ","nonce","rsaKeysManager","serverNonce","server_nonce","pq","server_public_key_fingerprints","publicKey","pAndQ","sendReqDhParams","newNonce","p_q_inner_data_dc","new_nonce","pQInnerDataSerialization","dataPadReversed","keyAesEncrypted","tempKey","dataWithHash","aesEncrypted","keyAesEncryptedBigInt","publicKeyModulusBigInt","getKeyAesEncrypted","req_DH_params","public_key_fingerprint","encrypted_data","requestBytes","newNonceHash","new_nonce_hash","decryptServerDhDataAnswer","encrypted_answer","sendSetClientDhParams","encryptedAnswer","localTime","tmpAesKey","tmpAesIv","answerWithHash","answerWithPadding","g","dhPrime","dh_prime","gA","g_a","server_time","retry","verifyDhParams","dhPrimeHex","gABigInt","dhPrimeBigInt","subtract","twoPow","gBytes","gB","retry_id","authKeyHash","authKeyAux","newNonceHash1","new_nonce_hash1","newNonceHash2","new_nonce_hash2","newNonceHash3","new_nonce_hash3","getTransportTypePromise","_try","TimeManager","lastMessageId","timeOffset","timeTicks","newTimeOffset","changed","server_time_offset","AppWebDocsManager","webDocument","AppPaymentsManager","getInputInvoiceBySlug","getInputInvoiceByPeerId","getPaymentForm","invoice","paymentForm","getPaymentReceipt","validateRequestedInfo","sendPaymentForm","formId","requestedInfoId","shippingOptionId","credentials","tipAmount","form_id","requested_info_id","shipping_option_id","tip_amount","clearSavedInfo","AppAttachMenuBotsManager","attachMenuBots","attachMenuBotsArr","onUpdateAttachMenuBots","getAttachMenuBots","updateAttachMenuBots","saveAttachMenuBot","attachMenuBot","bot_id","icon","getAttachMenuBotIcon","saveAttachMenuBots","getAttachMenuBotCached","requestWebView","fromBotMenu","themeParams","from_bot_menu","theme_params","prolongWebView","AppSeamlessLoginManager","requestUrlAuth","buttonId","button_id","urlAuthResult","acceptUrlAuth","writeAllowed","write_allowed","getWebAuthorizations","webAuthorizations","authorizations","resetWebAuthorization","resetWebAuthorizations","AppThemesManager","wallPapers","saveWallPaper","getWallPaper","inputWallPaper","getInputWallPaper","getThemes","accountThemes","themes","theme","themeSettings","getWallPapers","accountWallpapers","wallpapers","appManagersManager","cryptoWorkersURLs","cryptoPortsAttached","cryptoPortPromise","getManagers","manager","apply","ports","originalUrl","newURLs","createManagers","appAvatarsManager","appCallsManager","appPrivacyManager","appInlineBotsManager","passwordManager","appPaymentsManager","appSeamlessLoginManager","_serviceMessagePort","_isServiceWorkerOnline","pushedKeys","clearWrite","invokeExceptSource","serviceWorkerOnline","serviceWorkerPort","detachPort","attachPort","messagePort","onConnect","onDisconnect","listenPort","sendPort","attachListenPort","attachSendPort","setOnPortDisconnect","listenMessagePort","NULL_PEER_ID","REPLIES_PEER_ID","REPLIES_HIDDEN_CHANNEL_ID","SERVICE_PEER_ID","MUTE_UNTIL","MAX_FILE_SAVE_SIZE","THUMB_TYPE_FULL","ATTACH_MENU_BOT_ICON_NAME","GENERAL_TOPIC_ID","T_ME_PREFIXES","FOLDER_ID_ALL","FOLDER_ID_ARCHIVE","REAL_FOLDERS","START_LOCAL_ID","ALPHA_CHARS_REG_EXP","ALPHA_NUMERIC_REG_EXP","URL_ALPHANUMERIC_REG_EXP_PART","URL_PROTOCOL_REG_EXP_PART","URL_REG_EXP","URL_ANY_PROTOCOL_REG_EXP","USERNAME_REG_EXP","BOT_COMMAND_REG_EXP","FULL_REG_EXP","EMAIL_REG_EXP","MARKDOWN_REG_EXP","MARKDOWN_ENTITIES","PASS_CONFLICTING_ENTITIES","PHONE_NUMBER_REG_EXP","encodeEmoji","emojiText","unicodeSurrogates","points","char","previous","toCodePoints","removeVS16s","vs16RegExp","zeroWidthJoiner","rawEmoji","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","__webpack_exports__","O","chunkIds","fn","priority","notFulfilled","getter","__esModule","definition","enumerable","chunkId","miniCssF","globalThis","Function","prop","Symbol","toStringTag","nmd","paths","children","scriptUrl","importScripts","currentScript","src","scripts","getElementsByTagName","oldGetScript","oldLoadScript","queryMap","countMap","retries","realSrc","cacheBust","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","moreModules","runtime"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"mtproto.worker.8a2c8d1f5534b5f54052.chunk.js","mappings":"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Ac,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,cAAc,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,MAAO,kBAAkB,MAAO,QAAQ,MAAO,kBAAkB,MAAO,4CAA4C,MAAO,4CAA4C,MAAO,4CAA4C,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,6BAA6B,KAAM,wCAAwC,KAAM,QAAQ,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,8BAA8B,KAAM,yCAAyC,KAAM,yCAAyC,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,6BAA6B,KAAM,6BAA6B,KAAM,wCAAwC,KAAM,wCAAwC,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,GAAI,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,mBAAmB,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,GAAI,QAAQ,IAAK,QAAQ,IAAK,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,GAAI,QAAQ,IAAK,QAAQ,IAAK,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,IAAK,QAAQ,KAAM,QAAQ,IAAK,QAAQ,IAAK,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,IAAK,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,8BAA8B,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,mBAAmB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,kBAAkB,KAAM,kBAAkB,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,MAAO,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,QAAQ,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,IAAK,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,iBAAiB,KAAM,iBAAiB,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,kBAAkB,KAAM,kBAAkB,KAAM,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,MAAO,OAAO,KAAM,OAAO,MAAO,OAAO,MAAO,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,oDAAoD,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,yCAAyC,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,0CAA0C,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,yBAAyB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,cAAc,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB,EAAG,wBAAwB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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/config/emoji.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/helpers/cleanSearchText.ts","webpack://tweb/./src/helpers/fileName.ts","webpack://tweb/./src/helpers/restrictions.ts","webpack://tweb/./src/lib/appManagers/utils/peers/getPeerId.ts","webpack://tweb/./src/lib/files/idb.ts","webpack://tweb/./src/environment/utils.ts","webpack://tweb/./src/lib/rootScope.ts","webpack://tweb/./src/lib/appManagers/appStateManager.ts","webpack://tweb/./src/helpers/object/setDeepProperty.ts","webpack://tweb/./src/lib/mtproto/transports/http.ts","webpack://tweb/./src/lib/mtproto/transports/websocket.ts","webpack://tweb/./src/helpers/array/randomize.ts","webpack://tweb/./src/lib/mtproto/transports/obfuscation.ts","webpack://tweb/./src/lib/mtproto/transports/abridged.ts","webpack://tweb/./src/helpers/bytes/bytesToHex.ts","webpack://tweb/./src/lib/mtproto/transports/tcpObfuscated.ts","webpack://tweb/./src/lib/mtproto/dcConfigurator.ts","webpack://tweb/./src/lib/mtproto/transports/controller.ts","webpack://tweb/./src/lib/appManagers/utils/storages/resetStoragesPromise.ts","webpack://tweb/./src/lib/appManagers/manager.ts","webpack://tweb/./src/lib/appManagers/utils/storages/loadStorages.ts","webpack://tweb/./src/lib/appManagers/appStoragesManager.ts","webpack://tweb/./src/lib/appManagers/utils/storages/createStorages.ts","webpack://tweb/./src/lib/mtproto/passwordManager.ts","webpack://tweb/./src/lib/mtproto/referenceDatabase.ts","webpack://tweb/./src/helpers/object/safeReplaceObject.ts","webpack://tweb/./src/lib/appManagers/utils/messages/getPeerIdsFromMessage.ts","webpack://tweb/./src/lib/appManagers/utils/dialogs/setDialogIndex.ts","webpack://tweb/./src/lib/storages/dialogs.ts","webpack://tweb/./src/lib/storages/filters.ts","webpack://tweb/./src/helpers/applyMixins.ts","webpack://tweb/./src/lib/appManagers/apiUpdatesManager.ts","webpack://tweb/./src/lib/appManagers/appAvatarsManager.ts","webpack://tweb/./src/lib/appManagers/appCallsManager.ts","webpack://tweb/./src/lib/appManagers/appChatsManager.ts","webpack://tweb/./src/lib/langPack.ts","webpack://tweb/./src/lib/richTextProcessor/wrapUrl.ts","webpack://tweb/./src/helpers/dom/setInnerHTML.ts","webpack://tweb/./src/helpers/date.ts","webpack://tweb/./src/helpers/object/safeReplaceArrayInObject.ts","webpack://tweb/./src/environment/mimeTypeMap.ts","webpack://tweb/./src/lib/appManagers/appDocsManager.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentURL.ts","webpack://tweb/./src/lib/appManagers/appDraftsManager.ts","webpack://tweb/./src/lib/appManagers/appEmojiManager.ts","webpack://tweb/./src/lib/appManagers/appGroupCallsManager.ts","webpack://tweb/./src/lib/appManagers/utils/photos/getPhotoInput.ts","webpack://tweb/./src/lib/appManagers/utils/photos/getPhotoMediaInput.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentMediaInput.ts","webpack://tweb/./src/lib/appManagers/appInlineBotsManager.ts","webpack://tweb/./src/lib/appManagers/appMessagesIdsManager.ts","webpack://tweb/./src/helpers/string/splitStringByLength.ts","webpack://tweb/./src/lib/appManagers/appTabsManager.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentInput.ts","webpack://tweb/./src/helpers/object/setBooleanFlag.ts","webpack://tweb/./src/lib/appManagers/appMessagesManager.ts","webpack://tweb/./src/lib/appManagers/utils/docs/getDocumentInputFileName.ts","webpack://tweb/./src/helpers/string/convertInputKeyToKey.ts","webpack://tweb/./src/lib/appManagers/appNotificationsManager.ts","webpack://tweb/./src/lib/appManagers/appPeersManager.ts","webpack://tweb/./src/lib/appManagers/appPhotosManager.ts","webpack://tweb/./src/lib/appManagers/appPollsManager.ts","webpack://tweb/./src/lib/appManagers/appPrivacyManager.ts","webpack://tweb/./src/lib/appManagers/appProfileManager.ts","webpack://tweb/./src/helpers/callbackifyAll.ts","webpack://tweb/./src/lib/appManagers/appReactionsManager.ts","webpack://tweb/./src/lib/appManagers/appStickersManager.ts","webpack://tweb/./src/helpers/fixBase64String.ts","webpack://tweb/./src/lib/appManagers/appUsersManager.ts","webpack://tweb/./src/helpers/cleanUsername.ts","webpack://tweb/./src/lib/appManagers/appWebPagesManager.ts","webpack://tweb/./src/helpers/blob/readBlobAsArrayBuffer.ts","webpack://tweb/./src/helpers/string/fileNameRFC.ts","webpack://tweb/./src/lib/files/downloadWriter.ts","webpack://tweb/./src/lib/files/downloadStorage.ts","webpack://tweb/./src/lib/mtproto/apiFileManager.ts","webpack://tweb/./src/helpers/fixFirefoxSvg.ts","webpack://tweb/./src/helpers/blob/readBlobAsUint8Array.ts","webpack://tweb/./src/lib/mtproto/api_methods.ts","webpack://tweb/./src/lib/mtproto/apiManager.ts","webpack://tweb/./src/lib/storages/peers.ts","webpack://tweb/./src/lib/storages/thumbs.ts","webpack://tweb/./src/lib/mtproto/schema.ts","webpack://tweb/./src/helpers/number/intToUint.ts","webpack://tweb/./src/helpers/long/ulongFromInts.ts","webpack://tweb/./src/helpers/bigInt/bigIntConstants.ts","webpack://tweb/./src/helpers/bigInt/bigIntConversion.ts","webpack://tweb/./src/lib/mtproto/tl_utils.ts","webpack://tweb/./src/helpers/gzipUncompress.ts","webpack://tweb/./src/helpers/bytes/addPadding.ts","webpack://tweb/./src/lib/mtproto/networker.ts","webpack://tweb/./src/helpers/long/sortLongsArray.ts","webpack://tweb/./src/helpers/long/longToBytes.ts","webpack://tweb/./src/lib/mtproto/networkerFactory.ts","webpack://tweb/./src/lib/mtproto/rsaKeysManager.ts","webpack://tweb/./src/helpers/bytes/bytesXor.ts","webpack://tweb/./src/lib/mtproto/authorizer.ts","webpack://tweb/./src/lib/mtproto/timeManager.ts","webpack://tweb/./src/lib/appManagers/appWebDocsManager.ts","webpack://tweb/./src/lib/appManagers/appPaymentsManager.ts","webpack://tweb/./src/lib/appManagers/appAttachMenuBotsManager.ts","webpack://tweb/./src/lib/appManagers/appSeamlessLoginManager.ts","webpack://tweb/./src/lib/appManagers/appThemesManager.ts","webpack://tweb/./src/lib/appManagers/appManagersManager.ts","webpack://tweb/./src/lib/appManagers/createManagers.ts","webpack://tweb/./src/lib/mtproto/mtproto.worker.ts","webpack://tweb/./src/helpers/listenMessagePort.ts","webpack://tweb/./src/lib/mtproto/mtproto_config.ts","webpack://tweb/./src/lib/richTextProcessor/index.ts","webpack://tweb/./src/vendor/emoji/index.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/compat get default export","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/make namespace object","webpack://tweb/webpack/runtime/node module decorator","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn Promise.all([699,211,147,85,110].map(__webpack_require__.e, __webpack_require__)).then(next);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {EMOJI_VERSION} from '../environment/emojiVersionsSupport';\n\nexport const EmojiVersions: {[version in EMOJI_VERSION]: {[emoji: string]: number}} = {'14':{'1f6dd':4867, '1f6de':4916, '1f6df':4923, '1f7f0':62832, '1f979':183, '1f9cc':1557, '1fa7b':61332, '1fa7c':61330, '1faa9':51093, '1faaa':61364, '1faab':61189, '1faac':51085, '1fab7':2651, '1fab8':2631, '1fab9':2672, '1faba':2673, '1fac3':1520, '1fac4':1521, '1fac5':1505, '1fad7':3793, '1fad8':3707, '1fad9':3804, '1fae0':111, '1fae1':136, '1fae2':132, '1fae3':133, '1fae4':174, '1fae5':142, '1fae6':1385, '1fae7':61353, '1faf0':1341, '1faf1':1332, '1faf2':1333, '1faf3':1334, '1faf4':1335, '1faf5':1351, '1faf6':1360, '1faf1-1f3fb-200d-1faf2-1f3fc':0, '1faf1-1f3fb-200d-1faf2-1f3fd':0, '1faf1-1f3fb-200d-1faf2-1f3fe':0, '1faf1-1f3fb-200d-1faf2-1f3ff':0, '1faf1-1f3fc-200d-1faf2-1f3fb':0, '1faf1-1f3fc-200d-1faf2-1f3fd':0, '1faf1-1f3fc-200d-1faf2-1f3fe':0, '1faf1-1f3fc-200d-1faf2-1f3ff':0, '1faf1-1f3fd-200d-1faf2-1f3fb':0, '1faf1-1f3fd-200d-1faf2-1f3fc':0, '1faf1-1f3fd-200d-1faf2-1f3fe':0, '1faf1-1f3fd-200d-1faf2-1f3ff':0, '1faf1-1f3fe-200d-1faf2-1f3fb':0, '1faf1-1f3fe-200d-1faf2-1f3fc':0, '1faf1-1f3fe-200d-1faf2-1f3fd':0, '1faf1-1f3fe-200d-1faf2-1f3ff':0, '1faf1-1f3ff-200d-1faf2-1f3fb':0, '1faf1-1f3ff-200d-1faf2-1f3fc':0, '1faf1-1f3ff-200d-1faf2-1f3fd':0, '1faf1-1f3ff-200d-1faf2-1f3fe':0, '1fac3-1f3fb':0, '1fac3-1f3fc':0, '1fac3-1f3fd':0, '1fac3-1f3fe':0, '1fac3-1f3ff':0, '1fac4-1f3fb':0, '1fac4-1f3fc':0, '1fac4-1f3fd':0, '1fac4-1f3fe':0, '1fac4-1f3ff':0, '1fac5-1f3fb':0, '1fac5-1f3fc':0, '1fac5-1f3fd':0, '1fac5-1f3fe':0, '1fac5-1f3ff':0, '1faf0-1f3fb':0, '1faf0-1f3fc':0, '1faf0-1f3fd':0, '1faf0-1f3fe':0, '1faf0-1f3ff':0, '1faf1-1f3fb':0, '1faf1-1f3fc':0, '1faf1-1f3fd':0, '1faf1-1f3fe':0, '1faf1-1f3ff':0, '1faf2-1f3fb':0, '1faf2-1f3fc':0, '1faf2-1f3fd':0, '1faf2-1f3fe':0, '1faf2-1f3ff':0, '1faf3-1f3fb':0, '1faf3-1f3fc':0, '1faf3-1f3fd':0, '1faf3-1f3fe':0, '1faf3-1f3ff':0, '1faf4-1f3fb':0, '1faf4-1f3fc':0, '1faf4-1f3fd':0, '1faf4-1f3fe':0, '1faf4-1f3ff':0, '1faf5-1f3fb':0, '1faf5-1f3fc':0, '1faf5-1f3fd':0, '1faf5-1f3fe':0, '1faf5-1f3ff':0, '1faf6-1f3fb':0, '1faf6-1f3fc':0, '1faf6-1f3fd':0, '1faf6-1f3fe':0, '1faf6-1f3ff':0}, '':{'2049':62835, '2122':62863, '2139':62888, '2194':62764, '2195':62763, '2196':62762, '2197':62756, '2198':62758, '2199':62760, '2328':61194, '2600':4990, '2601':4998, '2602':41013, '2603':41018, '2604':41020, '2611':62851, '2614':41014, '2615':3781, '2618':2667, '2620':1106, '2622':62753, '2623':62754, '2626':62783, '2638':62780, '2639':177, '2648':62788, '2649':62789, '2650':62796, '2651':62797, '2652':62798, '2653':62799, '2660':51095, '2663':51098, '2665':51096, '2666':51097, '2668':4865, '2692':61297, '2693':4922, '2694':61300, '2696':61311, '2697':61319, '2699':61309, '2702':61284, '2705':62850, '2708':4931, '2709':61245, '2712':61259, '2714':62852, '2716':62828, '2721':62779, '2728':51029, '2733':62858, '2734':62859, '2744':41017, '2747':62860, '2753':62836, '2754':62837, '2755':62838, '2757':62839, '2763':1137, '2764':1141, '2795':62829, '2796':62830, '2797':62831, '2934':62767, '2935':62768, '3030':62840, '3297':62912, '3299':62913, '0023-20e3':62864, '002a-20e3':62865, '0030-20e3':62866, '0031-20e3':62867, '0032-20e3':62868, '0033-20e3':62869, '0034-20e3':62870, '0035-20e3':62871, '0036-20e3':62872, '0037-20e3':62873, '0038-20e3':62874, '0039-20e3':62875, '00a9':62861, '00ae':62862, '1f004':51101, '1f0cf':51100, '1f170':62882, '1f171':62884, '1f17e':62893, '1f17f':62895, '1f18e':62883, '1f191':62885, '1f192':62886, '1f193':62887, '1f194':62889, '1f195':62891, '1f196':62892, '1f197':62894, '1f198':62896, '1f199':62897, '1f19a':62898, '1f1e6-1f1e8':71594, '1f1e6-1f1e9':71595, '1f1e6-1f1ea':71596, '1f1e6-1f1eb':71597, '1f1e6-1f1ec':71598, '1f1e6-1f1ee':71599, '1f1e6-1f1f1':71600, '1f1e6-1f1f2':71601, '1f1e6-1f1f4':71602, '1f1e6-1f1f6':71603, '1f1e6-1f1f7':71604, '1f1e6-1f1f8':71605, '1f1e6-1f1f9':71606, '1f1e6-1f1fa':71607, '1f1e6-1f1fc':71608, '1f1e6-1f1fd':71609, '1f1e6-1f1ff':71610, '1f1e7-1f1e6':71611, '1f1e7-1f1e7':71612, '1f1e7-1f1e9':71613, '1f1e7-1f1ea':71614, '1f1e7-1f1eb':71615, '1f1e7-1f1ec':71616, '1f1e7-1f1ed':71617, '1f1e7-1f1ee':71618, '1f1e7-1f1ef':71619, '1f1e7-1f1f1':71620, '1f1e7-1f1f2':71621, '1f1e7-1f1f3':71622, '1f1e7-1f1f4':71623, '1f1e7-1f1f6':71624, '1f1e7-1f1f7':71625, '1f1e7-1f1f8':71626, '1f1e7-1f1f9':71627, '1f1e7-1f1fb':71628, '1f1e7-1f1fc':71629, '1f1e7-1f1fe':71630, '1f1e7-1f1ff':71631, '1f1e8-1f1e6':71632, '1f1e8-1f1e8':71633, '1f1e8-1f1e9':71634, '1f1e8-1f1eb':71635, '1f1e8-1f1ec':71636, '1f1e8-1f1ed':71637, '1f1e8-1f1ee':71638, '1f1e8-1f1f0':71639, '1f1e8-1f1f1':71640, '1f1e8-1f1f2':71641, '1f1e8-1f1f3':71642, '1f1e8-1f1f4':71643, '1f1e8-1f1f5':71644, '1f1e8-1f1f7':71645, '1f1e8-1f1fa':71646, '1f1e8-1f1fb':71647, '1f1e8-1f1fc':71648, '1f1e8-1f1fd':71649, '1f1e8-1f1fe':71650, '1f1e8-1f1ff':71651, '1f1e9-1f1ea':71652, '1f1e9-1f1ec':71653, '1f1e9-1f1ef':71654, '1f1e9-1f1f0':71655, '1f1e9-1f1f2':71656, '1f1e9-1f1f4':71657, '1f1e9-1f1ff':71658, '1f1ea-1f1e6':71659, '1f1ea-1f1e8':71660, '1f1ea-1f1ea':71661, '1f1ea-1f1ec':71662, '1f1ea-1f1ed':71663, '1f1ea-1f1f7':71664, '1f1ea-1f1f8':71665, '1f1ea-1f1f9':71666, '1f1ea-1f1fa':71667, '1f1eb-1f1ee':71668, '1f1eb-1f1ef':71669, '1f1eb-1f1f0':71670, '1f1eb-1f1f2':71671, '1f1eb-1f1f4':71672, '1f1eb-1f1f7':71673, '1f1ec-1f1e6':71674, '1f1ec-1f1e7':71675, '1f1ec-1f1e9':71676, '1f1ec-1f1ea':71677, '1f1ec-1f1eb':71678, '1f1ec-1f1ec':71679, '1f1ec-1f1ed':71680, '1f1ec-1f1ee':71681, '1f1ec-1f1f1':71682, '1f1ec-1f1f2':71683, '1f1ec-1f1f3':71684, '1f1ec-1f1f5':71685, '1f1ec-1f1f6':71686, '1f1ec-1f1f7':71687, '1f1ec-1f1f8':71688, '1f1ec-1f1f9':71689, '1f1ec-1f1fa':71690, '1f1ec-1f1fc':71691, '1f1ec-1f1fe':71692, '1f1ed-1f1f0':71693, '1f1ed-1f1f2':71694, '1f1ed-1f1f3':71695, '1f1ed-1f1f7':71696, '1f1ed-1f1f9':71697, '1f1ed-1f1fa':71698, '1f1ee-1f1e8':71699, '1f1ee-1f1e9':71700, '1f1ee-1f1ea':71701, '1f1ee-1f1f1':71702, '1f1ee-1f1f2':71703, '1f1ee-1f1f3':71704, '1f1ee-1f1f4':71705, '1f1ee-1f1f6':71706, '1f1ee-1f1f7':71707, '1f1ee-1f1f8':71708, '1f1ee-1f1f9':71709, '1f1ef-1f1ea':71710, '1f1ef-1f1f2':71711, '1f1ef-1f1f4':71712, '1f1ef-1f1f5':71713, '1f1f0-1f1ea':71714, '1f1f0-1f1ec':71715, '1f1f0-1f1ed':71716, '1f1f0-1f1ee':71717, '1f1f0-1f1f2':71718, '1f1f0-1f1f3':71719, '1f1f0-1f1f5':71720, '1f1f0-1f1f7':71721, '1f1f0-1f1fc':71722, '1f1f0-1f1fe':71723, '1f1f0-1f1ff':71724, '1f1f1-1f1e6':71725, '1f1f1-1f1e7':71726, '1f1f1-1f1e8':71727, '1f1f1-1f1ee':71728, '1f1f1-1f1f0':71729, '1f1f1-1f1f7':71730, '1f1f1-1f1f8':71731, '1f1f1-1f1f9':71732, '1f1f1-1f1fa':71733, '1f1f1-1f1fb':71734, '1f1f1-1f1fe':71735, '1f1f2-1f1e6':71736, '1f1f2-1f1e8':71737, '1f1f2-1f1e9':71738, '1f1f2-1f1ea':71739, '1f1f2-1f1eb':71740, '1f1f2-1f1ec':71741, '1f1f2-1f1ed':71742, '1f1f2-1f1f0':71743, '1f1f2-1f1f1':71744, '1f1f2-1f1f2':71745, '1f1f2-1f1f3':71746, '1f1f2-1f1f4':71747, '1f1f2-1f1f5':71748, '1f1f2-1f1f6':71749, '1f1f2-1f1f7':71750, '1f1f2-1f1f8':71751, '1f1f2-1f1f9':71752, '1f1f2-1f1fa':71753, '1f1f2-1f1fb':71754, '1f1f2-1f1fc':71755, '1f1f2-1f1fd':71756, '1f1f2-1f1fe':71757, '1f1f2-1f1ff':71758, '1f1f3-1f1e6':71759, '1f1f3-1f1e8':71760, '1f1f3-1f1ea':71761, '1f1f3-1f1eb':71762, '1f1f3-1f1ec':71763, '1f1f3-1f1ee':71764, '1f1f3-1f1f1':71765, '1f1f3-1f1f4':71766, '1f1f3-1f1f5':71767, '1f1f3-1f1f7':71768, '1f1f3-1f1fa':71769, '1f1f3-1f1ff':71770, '1f1f4-1f1f2':71771, '1f1f5-1f1e6':71772, '1f1f5-1f1ea':71773, '1f1f5-1f1eb':71774, '1f1f5-1f1ec':71775, '1f1f5-1f1ed':71776, '1f1f5-1f1f0':71777, '1f1f5-1f1f1':71778, '1f1f5-1f1f2':71779, '1f1f5-1f1f3':71780, '1f1f5-1f1f7':71781, '1f1f5-1f1f8':71782, '1f1f5-1f1f9':71783, '1f1f5-1f1fc':71784, '1f1f5-1f1fe':71785, '1f1f6-1f1e6':71786, '1f1f7-1f1ea':71787, '1f1f7-1f1f4':71788, '1f1f7-1f1f8':71789, '1f1f7-1f1fa':71790, '1f1f7-1f1fc':71791, '1f1f8-1f1e6':71792, '1f1f8-1f1e7':71793, '1f1f8-1f1e8':71794, '1f1f8-1f1e9':71795, '1f1f8-1f1ea':71796, '1f1f8-1f1ec':71797, '1f1f8-1f1ed':71798, '1f1f8-1f1ee':71799, '1f1f8-1f1ef':71800, '1f1f8-1f1f0':71801, '1f1f8-1f1f1':71802, '1f1f8-1f1f2':71803, '1f1f8-1f1f3':71804, '1f1f8-1f1f4':71805, '1f1f8-1f1f7':71806, '1f1f8-1f1f8':71807, '1f1f8-1f1f9':71808, '1f1f8-1f1fb':71809, '1f1f8-1f1fd':71810, '1f1f8-1f1fe':71811, '1f1f8-1f1ff':71812, '1f1f9-1f1e6':71813, '1f1f9-1f1e8':71814, '1f1f9-1f1e9':71815, '1f1f9-1f1eb':71816, '1f1f9-1f1ec':71817, '1f1f9-1f1ed':71818, '1f1f9-1f1ef':71819, '1f1f9-1f1f0':71820, '1f1f9-1f1f1':71821, '1f1f9-1f1f2':71822, '1f1f9-1f1f3':71823, '1f1f9-1f1f4':71824, '1f1f9-1f1f7':71825, '1f1f9-1f1f9':71826, '1f1f9-1f1fb':71827, '1f1f9-1f1fc':71828, '1f1f9-1f1ff':71829, '1f1fa-1f1e6':71830, '1f1fa-1f1ec':71831, '1f1fa-1f1f2':71832, '1f1fa-1f1f3':71833, '1f1fa-1f1f8':71834, '1f1fa-1f1fe':71835, '1f1fa-1f1ff':71836, '1f1fb-1f1e6':71837, '1f1fb-1f1e8':71838, '1f1fb-1f1ea':71839, '1f1fb-1f1ec':71840, '1f1fb-1f1ee':71841, '1f1fb-1f1f3':71842, '1f1fb-1f1fa':71843, '1f1fc-1f1eb':71844, '1f1fc-1f1f8':71845, '1f1fd-1f1f0':71846, '1f1fe-1f1ea':71847, '1f1fe-1f1f9':71848, '1f1ff-1f1e6':71849, '1f1ff-1f1f2':71850, '1f1ff-1f1fc':71851, '1f201':62899, '1f202':62900, '1f21a':62906, '1f22f':62903, '1f232':62907, '1f233':62911, '1f234':62910, '1f235':62915, '1f236':62902, '1f237':62901, '1f238':62909, '1f239':62905, '1f23a':62914, '1f250':62904, '1f251':62908, '1f300':41010, '1f301':4857, '1f302':41012, '1f303':4858, '1f304':4860, '1f305':4861, '1f306':4862, '1f307':4863, '1f308':41011, '1f309':4864, '1f30a':41023, '1f30b':4815, '1f30c':4997, '1f30d':4806, '1f30e':4807, '1f30f':4808, '1f310':4809, '1f311':4977, '1f312':4978, '1f313':4979, '1f314':4980, '1f315':4981, '1f316':4982, '1f317':4983, '1f318':4984, '1f319':4985, '1f31a':4986, '1f31b':4987, '1f31c':4988, '1f31d':4991, '1f31e':4992, '1f31f':4995, '1f320':4996, '1f321':4989, '1f324':41001, '1f325':41002, '1f326':41003, '1f327':41004, '1f328':41005, '1f329':41006, '1f32a':41007, '1f32b':41008, '1f32c':41009, '1f32d':3725, '1f32e':3727, '1f32f':3728, '1f330':3708, '1f331':2659, '1f332':2661, '1f333':2662, '1f334':2663, '1f335':2664, '1f336':3698, '1f337':2658, '1f338':2649, '1f339':2653, '1f33a':2655, '1f33b':2656, '1f33c':2657, '1f33d':3697, '1f33e':2665, '1f33f':2666, '1f340':2668, '1f341':2669, '1f342':2670, '1f343':2671, '1f344':3705, '1f345':3690, '1f346':3694, '1f347':3674, '1f348':3675, '1f349':3676, '1f34a':3677, '1f34b':3678, '1f34c':3679, '1f34d':3680, '1f34e':3682, '1f34f':3683, '1f350':3684, '1f351':3685, '1f352':3686, '1f353':3687, '1f354':3722, '1f355':3724, '1f356':3718, '1f357':3719, '1f358':3744, '1f359':3745, '1f35a':3746, '1f35b':3747, '1f35c':3748, '1f35d':3749, '1f35e':3709, '1f35f':3723, '1f360':3750, '1f361':3756, '1f362':3751, '1f363':3752, '1f364':3753, '1f365':3754, '1f366':3765, '1f367':3766, '1f368':3767, '1f369':3768, '1f36a':3769, '1f36b':3774, '1f36c':3775, '1f36d':3776, '1f36e':3777, '1f36f':3778, '1f370':3771, '1f371':3743, '1f372':3735, '1f373':3733, '1f374':3801, '1f375':3783, '1f376':3784, '1f377':3786, '1f378':3787, '1f379':3788, '1f37a':3789, '1f37b':3790, '1f37c':3779, '1f37d':3800, '1f37e':3785, '1f37f':3739, '1f380':51040, '1f381':51041, '1f382':3770, '1f383':51024, '1f384':51025, '1f385':1527, '1f386':51026, '1f387':51027, '1f388':51030, '1f389':51031, '1f38a':51032, '1f38b':51033, '1f38c':71588, '1f38d':51034, '1f38e':51035, '1f38f':51036, '1f390':51037, '1f391':51038, '1f392':61134, '1f393':61147, '1f396':51045, '1f397':51042, '1f399':61167, '1f39a':61168, '1f39b':61169, '1f39e':61203, '1f39f':51043, '1f3a0':4866, '1f3a1':4868, '1f3a2':4869, '1f3a3':51072, '1f3a4':61170, '1f3a5':61202, '1f3a6':62819, '1f3a7':61171, '1f3a8':51105, '1f3a9':61146, '1f3aa':4871, '1f3ab':51044, '1f3ac':61205, '1f3ad':51103, '1f3ae':51086, '1f3af':51078, '1f3b0':51088, '1f3b1':51081, '1f3b2':51089, '1f3b3':51060, '1f3b4':51102, '1f3b5':61165, '1f3b6':61166, '1f3b7':61173, '1f3b8':61175, '1f3b9':61176, '1f3ba':61177, '1f3bb':61178, '1f3bc':61164, '1f3bd':51074, '1f3be':51058, '1f3bf':51075, '1f3c0':51054, '1f3c1':71586, '1f3c2':1600, '1f3c3-200d-2640':1584, '1f3c3-200d-2642':1583, '1f3c3':1582, '1f3c4-200d-2640':1606, '1f3c4-200d-2642':1605, '1f3c4':1604, '1f3c5':51047, '1f3c6':51046, '1f3c7':1598, '1f3c8':51056, '1f3c9':51057, '1f3ca-200d-2640':1612, '1f3ca-200d-2642':1611, '1f3ca':1610, '1f3cb-200d-2640':1618, '1f3cb-200d-2642':1617, '1f3cb':1616, '1f3cc-200d-2640':1603, '1f3cc-200d-2642':1602, '1f3cc':1601, '1f3cd':4902, '1f3ce':4901, '1f3cf':51061, '1f3d0':51055, '1f3d1':51062, '1f3d2':51063, '1f3d3':51065, '1f3d4':4813, '1f3d5':4817, '1f3d6':4818, '1f3d7':4824, '1f3d8':4829, '1f3d9':4859, '1f3da':4830, '1f3db':4823, '1f3dc':4819, '1f3dd':4820, '1f3de':4821, '1f3df':4822, '1f3e0':4831, '1f3e1':4832, '1f3e2':4833, '1f3e3':4834, '1f3e4':4835, '1f3e5':4836, '1f3e6':4837, '1f3e7':62729, '1f3e8':4838, '1f3e9':4839, '1f3ea':4840, '1f3eb':4841, '1f3ec':4842, '1f3ed':4843, '1f3ee':61216, '1f3ef':4844, '1f3f0':4845, '1f3f3-200d-1f308':71591, '1f3f3-200d-26a7':71592, '1f3f3':71590, '1f3f4-200d-2620':71593, '1f3f4-e0067-e0062-e0065-e006e-e0067-e007f':71852, '1f3f4-e0067-e0062-e0073-e0063-e0074-e007f':71853, '1f3f4-e0067-e0062-e0077-e006c-e0073-e007f':71854, '1f3f4':71589, '1f3f5':2652, '1f3f7':61234, '1f3f8':51066, '1f3f9':61303, '1f3fa':3805, '1f3fb':9525, '1f3fc':9526, '1f3fd':9527, '1f3fe':9528, '1f3ff':9529, '1f400':2576, '1f401':2575, '1f402':2556, '1f403':2557, '1f404':2558, '1f405':2547, '1f406':2548, '1f407':2579, '1f408-200d-2b1b':2544, '1f408':2543, '1f409':2618, '1f40a':2613, '1f40b':2622, '1f40c':2632, '1f40d':2616, '1f40e':2550, '1f40f':2563, '1f410':2565, '1f411':2564, '1f412':2531, '1f413':2596, '1f414':2595, '1f415-200d-1f9ba':2537, '1f415':2535, '1f416':2560, '1f417':2561, '1f418':2570, '1f419':2629, '1f41a':2630, '1f41b':2634, '1f41c':2635, '1f41d':2636, '1f41e':2638, '1f41f':2625, '1f420':2626, '1f421':2627, '1f422':2614, '1f423':2597, '1f424':2598, '1f425':2599, '1f426':2600, '1f427':2601, '1f428':2586, '1f429':2538, '1f42a':2566, '1f42b':2567, '1f42c':2623, '1f42d':2574, '1f42e':2555, '1f42f':2546, '1f430':2578, '1f431':2542, '1f432':2617, '1f433':2621, '1f434':2549, '1f435':2530, '1f436':2534, '1f437':2559, '1f438':2612, '1f439':2577, '1f43a':2539, '1f43b-200d-2744':2585, '1f43b':2584, '1f43c':2587, '1f43d':2562, '1f43e':2593, '1f43f':2580, '1f440':1381, '1f441-200d-1f5e8':1159, '1f441':1382, '1f442':1373, '1f443':1375, '1f444':1384, '1f445':1383, '1f446':1347, '1f447':1349, '1f448':1345, '1f449':1346, '1f44a':1355, '1f44b':1327, '1f44c':1336, '1f44d':1352, '1f44e':1353, '1f44f':1358, '1f450':1361, '1f451':61144, '1f452':61145, '1f453':61110, '1f454':61115, '1f455':61116, '1f456':61117, '1f457':61122, '1f458':61123, '1f459':61128, '1f45a':61129, '1f45b':61130, '1f45c':61131, '1f45d':61132, '1f45e':61136, '1f45f':61137, '1f460':61140, '1f461':61141, '1f462':61143, '1f463':1687, '1f464':1684, '1f465':1685, '1f466':1388, '1f467':1389, '1f468-200d-1f33e':1457, '1f468-200d-1f373':1460, '1f468-200d-1f37c':1524, '1f468-200d-1f393':1448, '1f468-200d-1f3a4':1478, '1f468-200d-1f3a8':1481, '1f468-200d-1f3eb':1451, '1f468-200d-1f3ed':1466, '1f468-200d-1f466-200d-1f466':1674, '1f468-200d-1f466':1673, '1f468-200d-1f467-200d-1f466':1676, '1f468-200d-1f467-200d-1f467':1677, '1f468-200d-1f467':1675, '1f468-200d-1f468-200d-1f466':1663, '1f468-200d-1f468-200d-1f466-200d-1f466':1666, '1f468-200d-1f468-200d-1f467':1664, '1f468-200d-1f468-200d-1f467-200d-1f466':1665, '1f468-200d-1f468-200d-1f467-200d-1f467':1667, '1f468-200d-1f469-200d-1f466':1658, '1f468-200d-1f469-200d-1f466-200d-1f466':1661, '1f468-200d-1f469-200d-1f467':1659, '1f468-200d-1f469-200d-1f467-200d-1f466':1660, '1f468-200d-1f469-200d-1f467-200d-1f467':1662, '1f468-200d-1f4bb':1475, '1f468-200d-1f4bc':1469, '1f468-200d-1f527':1463, '1f468-200d-1f52c':1472, '1f468-200d-1f680':1487, '1f468-200d-1f692':1490, '1f468-200d-1f9af':1574, '1f468-200d-1f9b0':1396, '1f468-200d-1f9b1':1397, '1f468-200d-1f9b2':1399, '1f468-200d-1f9b3':1398, '1f468-200d-1f9bc':1577, '1f468-200d-1f9bd':1580, '1f468-200d-2695':1445, '1f468-200d-2696':1454, '1f468-200d-2708':1484, '1f468-200d-2764-200d-1f468':1655, '1f468-200d-2764-200d-1f48b-200d-1f468':1651, '1f468':1392, '1f469-200d-1f33e':1458, '1f469-200d-1f373':1461, '1f469-200d-1f37c':1523, '1f469-200d-1f393':1449, '1f469-200d-1f3a4':1479, '1f469-200d-1f3a8':1482, '1f469-200d-1f3eb':1452, '1f469-200d-1f3ed':1467, '1f469-200d-1f466-200d-1f466':1679, '1f469-200d-1f466':1678, '1f469-200d-1f467-200d-1f466':1681, '1f469-200d-1f467-200d-1f467':1682, '1f469-200d-1f467':1680, '1f469-200d-1f469-200d-1f466':1668, '1f469-200d-1f469-200d-1f466-200d-1f466':1671, '1f469-200d-1f469-200d-1f467':1669, '1f469-200d-1f469-200d-1f467-200d-1f466':1670, '1f469-200d-1f469-200d-1f467-200d-1f467':1672, '1f469-200d-1f4bb':1476, '1f469-200d-1f4bc':1470, '1f469-200d-1f527':1464, '1f469-200d-1f52c':1473, '1f469-200d-1f680':1488, '1f469-200d-1f692':1491, '1f469-200d-1f9af':1575, '1f469-200d-1f9b0':1401, '1f469-200d-1f9b1':1403, '1f469-200d-1f9b2':1407, '1f469-200d-1f9b3':1405, '1f469-200d-1f9bc':1578, '1f469-200d-1f9bd':1581, '1f469-200d-2695':1446, '1f469-200d-2696':1455, '1f469-200d-2708':1485, '1f469-200d-2764-200d-1f468':1654, '1f469-200d-2764-200d-1f469':1656, '1f469-200d-2764-200d-1f48b-200d-1f468':1650, '1f469-200d-2764-200d-1f48b-200d-1f469':1652, '1f469':1400, '1f46a':1657, '1f46b':1647, '1f46c':1648, '1f46d':1646, '1f46e-200d-2640':1494, '1f46e-200d-2642':1493, '1f46e':1492, '1f46f-200d-2640':1590, '1f46f-200d-2642':1589, '1f46f':1588, '1f470-200d-2640':1518, '1f470-200d-2642':1517, '1f470':1516, '1f471-200d-2640':1409, '1f471-200d-2642':1410, '1f471':1391, '1f472':1511, '1f473-200d-2640':1510, '1f473-200d-2642':1509, '1f473':1508, '1f474':1412, '1f475':1413, '1f476':1386, '1f477-200d-2640':1504, '1f477-200d-2642':1503, '1f477':1502, '1f478':1507, '1f479':1109, '1f47a':1110, '1f47b':1111, '1f47c':1526, '1f47d':1112, '1f47e':1113, '1f47f':1104, '1f480':1105, '1f481-200d-2640':1428, '1f481-200d-2642':1427, '1f481':1426, '1f482-200d-2640':1500, '1f482-200d-2642':1499, '1f482':1498, '1f483':1585, '1f484':61152, '1f485':1366, '1f486-200d-2640':1560, '1f486-200d-2642':1559, '1f486':1558, '1f487-200d-2640':1563, '1f487-200d-2642':1562, '1f487':1561, '1f488':4870, '1f489':61326, '1f48a':61328, '1f48b':1127, '1f48c':1128, '1f48d':61153, '1f48e':61154, '1f48f':1649, '1f490':2648, '1f491':1653, '1f492':4846, '1f493':1133, '1f494':1138, '1f495':1135, '1f496':1131, '1f497':1132, '1f498':1129, '1f499':1145, '1f49a':1144, '1f49b':1143, '1f49c':1146, '1f49d':1130, '1f49e':1134, '1f49f':1136, '1f4a0':62946, '1f4a1':61214, '1f4a2':1151, '1f4a3':1157, '1f4a4':1163, '1f4a5':1152, '1f4a6':1154, '1f4a7':41022, '1f4a8':1155, '1f4a9':1107, '1f4aa':1368, '1f4ab':1153, '1f4ac':1158, '1f4ad':1162, '1f4ae':2650, '1f4af':1150, '1f4b0':61235, '1f4b1':62841, '1f4b2':62842, '1f4b3':61242, '1f4b4':61237, '1f4b5':61238, '1f4b6':61239, '1f4b7':61240, '1f4b8':61241, '1f4b9':61244, '1f4ba':4936, '1f4bb':61191, '1f4bc':61265, '1f4bd':61197, '1f4be':61198, '1f4bf':61199, '1f4c0':61200, '1f4c1':61266, '1f4c2':61267, '1f4c3':61227, '1f4c4':61229, '1f4c5':61269, '1f4c6':61270, '1f4c7':61273, '1f4c8':61274, '1f4c9':61275, '1f4ca':61276, '1f4cb':61277, '1f4cc':61278, '1f4cd':61279, '1f4ce':61280, '1f4cf':61282, '1f4d0':61283, '1f4d1':61232, '1f4d2':61226, '1f4d3':61225, '1f4d4':61218, '1f4d5':61219, '1f4d6':61220, '1f4d7':61221, '1f4d8':61222, '1f4d9':61223, '1f4da':61224, '1f4db':62847, '1f4dc':61228, '1f4dd':61264, '1f4de':61185, '1f4df':61186, '1f4e0':61187, '1f4e1':61325, '1f4e2':61159, '1f4e3':61160, '1f4e4':61249, '1f4e5':61250, '1f4e6':61251, '1f4e7':61246, '1f4e8':61247, '1f4e9':61248, '1f4ea':61253, '1f4eb':61252, '1f4ec':61254, '1f4ed':61255, '1f4ee':61256, '1f4ef':61161, '1f4f0':61230, '1f4f1':61182, '1f4f2':61183, '1f4f3':62823, '1f4f4':62824, '1f4f5':62751, '1f4f6':62822, '1f4f7':61207, '1f4f8':61208, '1f4f9':61209, '1f4fa':61206, '1f4fb':61172, '1f4fc':61210, '1f4fd':61204, '1f4ff':61151, '1f500':62801, '1f501':62802, '1f502':62803, '1f503':62769, '1f504':62770, '1f505':62820, '1f506':62821, '1f507':61155, '1f508':61156, '1f509':61157, '1f50a':61158, '1f50b':61188, '1f50c':61190, '1f50d':61211, '1f50e':61212, '1f50f':61290, '1f510':61291, '1f511':61292, '1f512':61288, '1f513':61289, '1f514':61162, '1f515':61163, '1f516':61233, '1f517':61313, '1f518':62947, '1f519':62771, '1f51a':62772, '1f51b':62773, '1f51c':62774, '1f51d':62775, '1f51e':62752, '1f51f':62876, '1f520':62877, '1f521':62878, '1f522':62879, '1f523':62880, '1f524':62881, '1f525':41021, '1f526':61215, '1f527':61306, '1f528':61294, '1f529':61308, '1f52a':3803, '1f52b':61301, '1f52c':61323, '1f52d':61324, '1f52e':51082, '1f52f':62787, '1f530':62848, '1f531':62846, '1f532':62949, '1f533':62948, '1f534':62916, '1f535':62920, '1f536':62940, '1f537':62941, '1f538':62942, '1f539':62943, '1f53a':62944, '1f53b':62945, '1f53c':62811, '1f53d':62813, '1f549':62778, '1f54a':2602, '1f54b':4854, '1f54c':4850, '1f54d':4852, '1f54e':62786, '1f550':4955, '1f551':4957, '1f552':4959, '1f553':4961, '1f554':4963, '1f555':4965, '1f556':4967, '1f557':4969, '1f558':4971, '1f559':4973, '1f55a':4975, '1f55b':4953, '1f55c':4956, '1f55d':4958, '1f55e':4960, '1f55f':4962, '1f560':4964, '1f561':4966, '1f562':4968, '1f563':4970, '1f564':4972, '1f565':4974, '1f566':4976, '1f567':4954, '1f56f':61213, '1f570':4952, '1f573':1156, '1f574':1587, '1f575-200d-2640':1497, '1f575-200d-2642':1496, '1f575':1495, '1f576':61111, '1f577':2641, '1f578':2642, '1f579':51087, '1f57a':1586, '1f587':61281, '1f58a':61261, '1f58b':61260, '1f58c':61262, '1f58d':61263, '1f590':1329, '1f595':1348, '1f596':1331, '1f5a4':1148, '1f5a5':61192, '1f5a8':61193, '1f5b1':61195, '1f5b2':61196, '1f5bc':51104, '1f5c2':61268, '1f5c3':61285, '1f5c4':61286, '1f5d1':61287, '1f5d2':61271, '1f5d3':61272, '1f5dc':61310, '1f5dd':61293, '1f5de':61231, '1f5e1':61299, '1f5e3':1683, '1f5e8':1160, '1f5ef':1161, '1f5f3':61257, '1f5fa':4810, '1f5fb':4816, '1f5fc':4847, '1f5fd':4848, '1f5fe':4811, '1f5ff':61362, '1f600':11, '1f601':14, '1f602':18, '1f603':12, '1f604':13, '1f605':16, '1f606':15, '1f607':114, '1f608':1103, '1f609':112, '1f60a':113, '1f60b':124, '1f60c':150, '1f60d':116, '1f60e':170, '1f60f':144, '1f610':139, '1f611':140, '1f612':145, '1f613':195, '1f614':151, '1f615':173, '1f616':192, '1f617':119, '1f618':118, '1f619':122, '1f61a':121, '1f61b':125, '1f61c':126, '1f61d':128, '1f61e':194, '1f61f':175, '1f620':1101, '1f621':1100, '1f622':189, '1f623':193, '1f624':199, '1f625':188, '1f626':184, '1f627':185, '1f628':186, '1f629':196, '1f62a':152, '1f62b':197, '1f62c':147, '1f62d':190, '1f62e-200d-1f4a8':148, '1f62e':178, '1f62f':179, '1f630':187, '1f631':191, '1f632':180, '1f633':181, '1f634':154, '1f635-200d-1f4ab':165, '1f635':164, '1f636-200d-1f32b':143, '1f636':141, '1f637':155, '1f638':1116, '1f639':1117, '1f63a':1115, '1f63b':1118, '1f63c':1119, '1f63d':1120, '1f63e':1123, '1f63f':1122, '1f640':1121, '1f641':176, '1f642':19, '1f643':110, '1f644':146, '1f645-200d-2640':1422, '1f645-200d-2642':1421, '1f645':1420, '1f646-200d-2640':1425, '1f646-200d-2642':1424, '1f646':1423, '1f647-200d-2640':1437, '1f647-200d-2642':1436, '1f647':1435, '1f648':1124, '1f649':1125, '1f64a':1126, '1f64b-200d-2640':1431, '1f64b-200d-2642':1430, '1f64b':1429, '1f64c':1359, '1f64d-200d-2640':1416, '1f64d-200d-2642':1415, '1f64d':1414, '1f64e-200d-2640':1419, '1f64e-200d-2642':1418, '1f64e':1417, '1f64f':1364, '1f680':4942, '1f681':4937, '1f682':4872, '1f683':4873, '1f684':4874, '1f685':4875, '1f686':4876, '1f687':4877, '1f688':4878, '1f689':4879, '1f68a':4880, '1f68b':4883, '1f68c':4884, '1f68d':4885, '1f68e':4886, '1f68f':4911, '1f690':4887, '1f691':4888, '1f692':4889, '1f693':4890, '1f694':4891, '1f695':4892, '1f696':4893, '1f697':4894, '1f698':4895, '1f699':4896, '1f69a':4898, '1f69b':4899, '1f69c':4900, '1f69d':4881, '1f69e':4882, '1f69f':4938, '1f6a0':4939, '1f6a1':4940, '1f6a2':4930, '1f6a3-200d-2640':1609, '1f6a3-200d-2642':1608, '1f6a3':1607, '1f6a4':4926, '1f6a5':4918, '1f6a6':4919, '1f6a7':4921, '1f6a8':4917, '1f6a9':71587, '1f6aa':61333, '1f6ab':62745, '1f6ac':61358, '1f6ad':62747, '1f6ae':62730, '1f6af':62748, '1f6b0':62731, '1f6b1':62749, '1f6b2':4907, '1f6b3':62746, '1f6b4-200d-2640':1621, '1f6b4-200d-2642':1620, '1f6b4':1619, '1f6b5-200d-2640':1624, '1f6b5-200d-2642':1623, '1f6b5':1622, '1f6b6-200d-2640':1566, '1f6b6-200d-2642':1565, '1f6b6':1564, '1f6b7':62750, '1f6b8':62743, '1f6b9':62733, '1f6ba':62734, '1f6bb':62735, '1f6bc':62736, '1f6bd':61340, '1f6be':62737, '1f6bf':61342, '1f6c0':1643, '1f6c1':61343, '1f6c2':62738, '1f6c3':62739, '1f6c4':62740, '1f6c5':62741, '1f6cb':61338, '1f6cc':1644, '1f6cd':61133, '1f6ce':4944, '1f6cf':61337, '1f6d0':62776, '1f6d1':4920, '1f6d2':61357, '1f6d5':4851, '1f6d6':4828, '1f6d7':61334, '1f6e0':61298, '1f6e1':61304, '1f6e2':4914, '1f6e3':4912, '1f6e4':4913, '1f6e5':4929, '1f6e9':4932, '1f6eb':4933, '1f6ec':4934, '1f6f0':4941, '1f6f3':4927, '1f6f4':4908, '1f6f5':4903, '1f6f6':4925, '1f6f7':51076, '1f6f8':4943, '1f6f9':4909, '1f6fa':4906, '1f6fb':4897, '1f6fc':4910, '1f7e0':62917, '1f7e1':62918, '1f7e2':62919, '1f7e3':62921, '1f7e4':62922, '1f7e5':62925, '1f7e6':62929, '1f7e7':62926, '1f7e8':62927, '1f7e9':62928, '1f7ea':62930, '1f7eb':62931, '1f90c':1337, '1f90d':1149, '1f90e':1147, '1f90f':1338, '1f910':137, '1f911':129, '1f912':156, '1f913':171, '1f914':135, '1f915':157, '1f916':1114, '1f917':130, '1f918':1343, '1f919':1344, '1f91a':1328, '1f91b':1356, '1f91c':1357, '1f91d':1363, '1f91e':1340, '1f91f':1342, '1f920':167, '1f921':1108, '1f922':158, '1f923':17, '1f924':153, '1f925':149, '1f926-200d-2640':1440, '1f926-200d-2642':1439, '1f926':1438, '1f927':160, '1f928':138, '1f929':117, '1f92a':127, '1f92b':134, '1f92c':1102, '1f92d':131, '1f92e':159, '1f92f':166, '1f930':1519, '1f931':1522, '1f932':1362, '1f933':1367, '1f934':1506, '1f935-200d-2640':1515, '1f935-200d-2642':1514, '1f935':1513, '1f936':1528, '1f937-200d-2640':1443, '1f937-200d-2642':1442, '1f937':1441, '1f938-200d-2640':1627, '1f938-200d-2642':1626, '1f938':1625, '1f939-200d-2640':1639, '1f939-200d-2642':1638, '1f939':1637, '1f93a':1597, '1f93c-200d-2640':1630, '1f93c-200d-2642':1629, '1f93c':1628, '1f93d-200d-2640':1633, '1f93d-200d-2642':1632, '1f93d':1631, '1f93e-200d-2640':1636, '1f93e-200d-2642':1635, '1f93e':1634, '1f93f':51073, '1f940':2654, '1f941':61180, '1f942':3791, '1f943':3792, '1f944':3802, '1f945':51069, '1f947':51048, '1f948':51049, '1f949':51050, '1f94a':51067, '1f94b':51068, '1f94c':51077, '1f94d':51064, '1f94e':51053, '1f94f':51059, '1f950':3710, '1f951':3693, '1f952':3700, '1f953':3721, '1f954':3695, '1f955':3696, '1f956':3711, '1f957':3738, '1f958':3734, '1f959':3730, '1f95a':3732, '1f95b':3780, '1f95c':3706, '1f95d':3689, '1f95e':3715, '1f95f':3757, '1f960':3758, '1f961':3759, '1f962':3799, '1f963':3737, '1f964':3794, '1f965':3692, '1f966':3702, '1f967':3773, '1f968':3713, '1f969':3720, '1f96a':3726, '1f96b':3742, '1f96c':3701, '1f96d':3681, '1f96e':3755, '1f96f':3714, '1f970':115, '1f971':198, '1f972':123, '1f973':168, '1f974':163, '1f975':161, '1f976':162, '1f977':1501, '1f978':169, '1f97a':182, '1f97b':61124, '1f97c':61113, '1f97d':61112, '1f97e':61138, '1f97f':61139, '1f980':3760, '1f981':2545, '1f982':2643, '1f983':2594, '1f984':2551, '1f985':2603, '1f986':2604, '1f987':2583, '1f988':2628, '1f989':2606, '1f98a':2540, '1f98b':2633, '1f98c':2553, '1f98d':2532, '1f98e':2615, '1f98f':2572, '1f990':3762, '1f991':3763, '1f992':2569, '1f993':2552, '1f994':2582, '1f995':2619, '1f996':2620, '1f997':2639, '1f998':2591, '1f999':2568, '1f99a':2610, '1f99b':2573, '1f99c':2611, '1f99d':2541, '1f99e':3761, '1f99f':2644, '1f9a0':2647, '1f9a1':2592, '1f9a2':2605, '1f9a3':2571, '1f9a4':2607, '1f9a5':2588, '1f9a6':2589, '1f9a7':2533, '1f9a8':2590, '1f9a9':2609, '1f9aa':3764, '1f9ab':2581, '1f9ac':2554, '1f9ad':2624, '1f9ae':2536, '1f9af':61312, '1f9b4':1380, '1f9b5':1371, '1f9b6':1372, '1f9b7':1379, '1f9b8-200d-2640':1532, '1f9b8-200d-2642':1531, '1f9b8':1530, '1f9b9-200d-2640':1535, '1f9b9-200d-2642':1534, '1f9b9':1533, '1f9ba':61114, '1f9bb':1374, '1f9bc':4905, '1f9bd':4904, '1f9be':1369, '1f9bf':1370, '1f9c0':3717, '1f9c1':3772, '1f9c2':3741, '1f9c3':3796, '1f9c4':3703, '1f9c5':3704, '1f9c6':3731, '1f9c7':3716, '1f9c8':3740, '1f9c9':3797, '1f9ca':3798, '1f9cb':3795, '1f9cd-200d-2640':1569, '1f9cd-200d-2642':1568, '1f9cd':1567, '1f9ce-200d-2640':1572, '1f9ce-200d-2642':1571, '1f9ce':1570, '1f9cf-200d-2640':1434, '1f9cf-200d-2642':1433, '1f9cf':1432, '1f9d0':172, '1f9d1-200d-1f33e':1456, '1f9d1-200d-1f373':1459, '1f9d1-200d-1f37c':1525, '1f9d1-200d-1f384':1529, '1f9d1-200d-1f393':1447, '1f9d1-200d-1f3a4':1477, '1f9d1-200d-1f3a8':1480, '1f9d1-200d-1f3eb':1450, '1f9d1-200d-1f3ed':1465, '1f9d1-200d-1f4bb':1474, '1f9d1-200d-1f4bc':1468, '1f9d1-200d-1f527':1462, '1f9d1-200d-1f52c':1471, '1f9d1-200d-1f680':1486, '1f9d1-200d-1f692':1489, '1f9d1-200d-1f91d-200d-1f9d1':1645, '1f9d1-200d-1f9af':1573, '1f9d1-200d-1f9b0':1402, '1f9d1-200d-1f9b1':1404, '1f9d1-200d-1f9b2':1408, '1f9d1-200d-1f9b3':1406, '1f9d1-200d-1f9bc':1576, '1f9d1-200d-1f9bd':1579, '1f9d1-200d-2695':1444, '1f9d1-200d-2696':1453, '1f9d1-200d-2708':1483, '1f9d1':1390, '1f9d2':1387, '1f9d3':1411, '1f9d4-200d-2640':1395, '1f9d4-200d-2642':1394, '1f9d4':1393, '1f9d5':1512, '1f9d6-200d-2640':1593, '1f9d6-200d-2642':1592, '1f9d6':1591, '1f9d7-200d-2640':1596, '1f9d7-200d-2642':1595, '1f9d7':1594, '1f9d8-200d-2640':1642, '1f9d8-200d-2642':1641, '1f9d8':1640, '1f9d9-200d-2640':1538, '1f9d9-200d-2642':1537, '1f9d9':1536, '1f9da-200d-2640':1541, '1f9da-200d-2642':1540, '1f9da':1539, '1f9db-200d-2640':1544, '1f9db-200d-2642':1543, '1f9db':1542, '1f9dc-200d-2640':1547, '1f9dc-200d-2642':1546, '1f9dc':1545, '1f9dd-200d-2640':1550, '1f9dd-200d-2642':1549, '1f9dd':1548, '1f9de-200d-2640':1553, '1f9de-200d-2642':1552, '1f9de':1551, '1f9df-200d-2640':1556, '1f9df-200d-2642':1555, '1f9df':1554, '1f9e0':1376, '1f9e1':1142, '1f9e2':61148, '1f9e3':61118, '1f9e4':61119, '1f9e5':61120, '1f9e6':61121, '1f9e7':51039, '1f9e8':51028, '1f9e9':51090, '1f9ea':61320, '1f9eb':61321, '1f9ec':61322, '1f9ed':4812, '1f9ee':61201, '1f9ef':61356, '1f9f0':61316, '1f9f1':4825, '1f9f2':61317, '1f9f3':4945, '1f9f4':61346, '1f9f5':51106, '1f9f6':51108, '1f9f7':61347, '1f9f8':51091, '1f9f9':61348, '1f9fa':61349, '1f9fb':61350, '1f9fc':61352, '1f9fd':61355, '1f9fe':61243, '1f9ff':51084, '1fa70':61142, '1fa71':61125, '1fa72':61126, '1fa73':61127, '1fa74':61135, '1fa78':61327, '1fa79':61329, '1fa7a':61331, '1fa80':51079, '1fa81':51080, '1fa82':4935, '1fa83':61302, '1fa84':51083, '1fa85':51092, '1fa86':51094, '1fa90':4993, '1fa91':61339, '1fa92':61345, '1fa93':61295, '1fa94':61217, '1fa95':61179, '1fa96':61149, '1fa97':61174, '1fa98':61181, '1fa99':61236, '1fa9a':61305, '1fa9b':61307, '1fa9c':61318, '1fa9d':61315, '1fa9e':61335, '1fa9f':61336, '1faa0':61341, '1faa1':51107, '1faa2':51109, '1faa3':61351, '1faa4':61344, '1faa5':61354, '1faa6':61360, '1faa7':61363, '1faa8':4826, '1fab0':2645, '1fab1':2646, '1fab2':2637, '1fab3':2640, '1fab4':2660, '1fab5':4827, '1fab6':2608, '1fac0':1377, '1fac1':1378, '1fac2':1686, '1fad0':3688, '1fad1':3699, '1fad2':3691, '1fad3':3712, '1fad4':3729, '1fad5':3736, '1fad6':3782, '203c':62834, '21a9':62765, '21aa':62766, '231a':4948, '231b':4946, '23cf':62818, '23e9':62805, '23ea':62809, '23eb':62812, '23ec':62814, '23ed':62806, '23ee':62810, '23ef':62807, '23f0':4949, '23f1':4950, '23f2':4951, '23f3':4947, '23f8':62815, '23f9':62816, '23fa':62817, '24c2':62890, '25aa':62938, '25ab':62939, '25b6':62804, '25c0':62808, '25fb':62935, '25fc':62934, '25fd':62937, '25fe':62936, '260e':61184, '261d':1350, '262a':62784, '262e':62785, '262f':62781, '263a':120, '264a':62790, '264b':62791, '264c':62792, '264d':62793, '264e':62794, '264f':62795, '265f':51099, '267b':62844, '267e':62833, '267f':62732, '269b':62777, '269c':62845, '26a0':62742, '26a1':41016, '26a7':62827, '26aa':62924, '26ab':62923, '26b0':61359, '26b1':61361, '26bd':51051, '26be':51052, '26c4':41019, '26c5':4999, '26c8':41000, '26ce':62800, '26cf':61296, '26d1':61150, '26d3':61314, '26d4':62744, '26e9':4853, '26ea':4849, '26f0':4814, '26f1':41015, '26f2':4855, '26f3':51070, '26f4':4928, '26f5':4924, '26f7':1599, '26f8':51071, '26f9-200d-2640':1615, '26f9-200d-2642':1614, '26f9':1613, '26fa':4856, '26fd':4915, '270a':1354, '270b':1330, '270c':1339, '270d':1365, '270f':61258, '271d':62782, '274c':62853, '274e':62854, '2764-200d-1f525':1139, '2764-200d-1fa79':1140, '27a1':62757, '27b0':62855, '27bf':62856, '2b05':62761, '2b06':62755, '2b07':62759, '2b1b':62932, '2b1c':62933, '2b50':4994, '2b55':62849, '303d':62857, '1f385-1f3fb':0, '1f385-1f3fc':0, '1f385-1f3fd':0, '1f385-1f3fe':0, '1f385-1f3ff':0, '1f3c2-1f3fb':0, '1f3c2-1f3fc':0, '1f3c2-1f3fd':0, '1f3c2-1f3fe':0, '1f3c2-1f3ff':0, '1f3c3-1f3fb-200d-2640':0, '1f3c3-1f3fc-200d-2640':0, '1f3c3-1f3fd-200d-2640':0, '1f3c3-1f3fe-200d-2640':0, '1f3c3-1f3ff-200d-2640':0, '1f3c3-1f3fb-200d-2642':0, '1f3c3-1f3fc-200d-2642':0, '1f3c3-1f3fd-200d-2642':0, '1f3c3-1f3fe-200d-2642':0, '1f3c3-1f3ff-200d-2642':0, '1f3c3-1f3fb':0, '1f3c3-1f3fc':0, '1f3c3-1f3fd':0, '1f3c3-1f3fe':0, '1f3c3-1f3ff':0, '1f3c4-1f3fb-200d-2640':0, '1f3c4-1f3fc-200d-2640':0, '1f3c4-1f3fd-200d-2640':0, '1f3c4-1f3fe-200d-2640':0, '1f3c4-1f3ff-200d-2640':0, '1f3c4-1f3fb-200d-2642':0, '1f3c4-1f3fc-200d-2642':0, '1f3c4-1f3fd-200d-2642':0, '1f3c4-1f3fe-200d-2642':0, '1f3c4-1f3ff-200d-2642':0, '1f3c4-1f3fb':0, '1f3c4-1f3fc':0, '1f3c4-1f3fd':0, '1f3c4-1f3fe':0, '1f3c4-1f3ff':0, '1f3c7-1f3fb':0, '1f3c7-1f3fc':0, '1f3c7-1f3fd':0, '1f3c7-1f3fe':0, '1f3c7-1f3ff':0, '1f3ca-1f3fb-200d-2640':0, '1f3ca-1f3fc-200d-2640':0, '1f3ca-1f3fd-200d-2640':0, '1f3ca-1f3fe-200d-2640':0, '1f3ca-1f3ff-200d-2640':0, '1f3ca-1f3fb-200d-2642':0, '1f3ca-1f3fc-200d-2642':0, '1f3ca-1f3fd-200d-2642':0, '1f3ca-1f3fe-200d-2642':0, '1f3ca-1f3ff-200d-2642':0, '1f3ca-1f3fb':0, '1f3ca-1f3fc':0, '1f3ca-1f3fd':0, '1f3ca-1f3fe':0, '1f3ca-1f3ff':0, '1f3cb-1f3fb-200d-2640':0, '1f3cb-1f3fc-200d-2640':0, '1f3cb-1f3fd-200d-2640':0, '1f3cb-1f3fe-200d-2640':0, '1f3cb-1f3ff-200d-2640':0, '1f3cb-1f3fb-200d-2642':0, '1f3cb-1f3fc-200d-2642':0, '1f3cb-1f3fd-200d-2642':0, '1f3cb-1f3fe-200d-2642':0, '1f3cb-1f3ff-200d-2642':0, '1f3cb-1f3fb':0, '1f3cb-1f3fc':0, '1f3cb-1f3fd':0, '1f3cb-1f3fe':0, '1f3cb-1f3ff':0, '1f3cc-1f3fb-200d-2640':0, '1f3cc-1f3fc-200d-2640':0, '1f3cc-1f3fd-200d-2640':0, '1f3cc-1f3fe-200d-2640':0, '1f3cc-1f3ff-200d-2640':0, '1f3cc-1f3fb-200d-2642':0, '1f3cc-1f3fc-200d-2642':0, '1f3cc-1f3fd-200d-2642':0, '1f3cc-1f3fe-200d-2642':0, '1f3cc-1f3ff-200d-2642':0, '1f3cc-1f3fb':0, '1f3cc-1f3fc':0, '1f3cc-1f3fd':0, '1f3cc-1f3fe':0, '1f3cc-1f3ff':0, '1f442-1f3fb':0, '1f442-1f3fc':0, '1f442-1f3fd':0, '1f442-1f3fe':0, '1f442-1f3ff':0, '1f443-1f3fb':0, '1f443-1f3fc':0, '1f443-1f3fd':0, '1f443-1f3fe':0, '1f443-1f3ff':0, '1f446-1f3fb':0, '1f446-1f3fc':0, '1f446-1f3fd':0, '1f446-1f3fe':0, '1f446-1f3ff':0, '1f447-1f3fb':0, '1f447-1f3fc':0, '1f447-1f3fd':0, '1f447-1f3fe':0, '1f447-1f3ff':0, '1f448-1f3fb':0, '1f448-1f3fc':0, '1f448-1f3fd':0, '1f448-1f3fe':0, '1f448-1f3ff':0, '1f449-1f3fb':0, '1f449-1f3fc':0, '1f449-1f3fd':0, '1f449-1f3fe':0, '1f449-1f3ff':0, '1f44a-1f3fb':0, '1f44a-1f3fc':0, '1f44a-1f3fd':0, '1f44a-1f3fe':0, '1f44a-1f3ff':0, '1f44b-1f3fb':0, '1f44b-1f3fc':0, '1f44b-1f3fd':0, '1f44b-1f3fe':0, '1f44b-1f3ff':0, '1f44c-1f3fb':0, '1f44c-1f3fc':0, '1f44c-1f3fd':0, '1f44c-1f3fe':0, '1f44c-1f3ff':0, '1f44d-1f3fb':0, '1f44d-1f3fc':0, '1f44d-1f3fd':0, '1f44d-1f3fe':0, '1f44d-1f3ff':0, '1f44e-1f3fb':0, '1f44e-1f3fc':0, '1f44e-1f3fd':0, '1f44e-1f3fe':0, '1f44e-1f3ff':0, '1f44f-1f3fb':0, '1f44f-1f3fc':0, '1f44f-1f3fd':0, '1f44f-1f3fe':0, '1f44f-1f3ff':0, '1f450-1f3fb':0, '1f450-1f3fc':0, '1f450-1f3fd':0, '1f450-1f3fe':0, '1f450-1f3ff':0, '1f466-1f3fb':0, '1f466-1f3fc':0, '1f466-1f3fd':0, '1f466-1f3fe':0, '1f466-1f3ff':0, '1f467-1f3fb':0, '1f467-1f3fc':0, '1f467-1f3fd':0, '1f467-1f3fe':0, '1f467-1f3ff':0, '1f468-1f3fb-200d-1f33e':0, '1f468-1f3fc-200d-1f33e':0, '1f468-1f3fd-200d-1f33e':0, '1f468-1f3fe-200d-1f33e':0, '1f468-1f3ff-200d-1f33e':0, '1f468-1f3fb-200d-1f373':0, '1f468-1f3fc-200d-1f373':0, '1f468-1f3fd-200d-1f373':0, '1f468-1f3fe-200d-1f373':0, '1f468-1f3ff-200d-1f373':0, '1f468-1f3fb-200d-1f37c':0, '1f468-1f3fc-200d-1f37c':0, '1f468-1f3fd-200d-1f37c':0, '1f468-1f3fe-200d-1f37c':0, '1f468-1f3ff-200d-1f37c':0, '1f468-1f3fb-200d-1f393':0, '1f468-1f3fc-200d-1f393':0, '1f468-1f3fd-200d-1f393':0, '1f468-1f3fe-200d-1f393':0, '1f468-1f3ff-200d-1f393':0, '1f468-1f3fb-200d-1f3a4':0, '1f468-1f3fc-200d-1f3a4':0, '1f468-1f3fd-200d-1f3a4':0, '1f468-1f3fe-200d-1f3a4':0, '1f468-1f3ff-200d-1f3a4':0, '1f468-1f3fb-200d-1f3a8':0, '1f468-1f3fc-200d-1f3a8':0, '1f468-1f3fd-200d-1f3a8':0, '1f468-1f3fe-200d-1f3a8':0, '1f468-1f3ff-200d-1f3a8':0, '1f468-1f3fb-200d-1f3eb':0, '1f468-1f3fc-200d-1f3eb':0, '1f468-1f3fd-200d-1f3eb':0, '1f468-1f3fe-200d-1f3eb':0, '1f468-1f3ff-200d-1f3eb':0, '1f468-1f3fb-200d-1f3ed':0, '1f468-1f3fc-200d-1f3ed':0, '1f468-1f3fd-200d-1f3ed':0, '1f468-1f3fe-200d-1f3ed':0, '1f468-1f3ff-200d-1f3ed':0, '1f468-1f3fb-200d-1f4bb':0, '1f468-1f3fc-200d-1f4bb':0, '1f468-1f3fd-200d-1f4bb':0, '1f468-1f3fe-200d-1f4bb':0, '1f468-1f3ff-200d-1f4bb':0, '1f468-1f3fb-200d-1f4bc':0, '1f468-1f3fc-200d-1f4bc':0, '1f468-1f3fd-200d-1f4bc':0, '1f468-1f3fe-200d-1f4bc':0, '1f468-1f3ff-200d-1f4bc':0, '1f468-1f3fb-200d-1f527':0, '1f468-1f3fc-200d-1f527':0, '1f468-1f3fd-200d-1f527':0, '1f468-1f3fe-200d-1f527':0, '1f468-1f3ff-200d-1f527':0, '1f468-1f3fb-200d-1f52c':0, '1f468-1f3fc-200d-1f52c':0, '1f468-1f3fd-200d-1f52c':0, '1f468-1f3fe-200d-1f52c':0, '1f468-1f3ff-200d-1f52c':0, '1f468-1f3fb-200d-1f680':0, '1f468-1f3fc-200d-1f680':0, '1f468-1f3fd-200d-1f680':0, '1f468-1f3fe-200d-1f680':0, '1f468-1f3ff-200d-1f680':0, '1f468-1f3fb-200d-1f692':0, '1f468-1f3fc-200d-1f692':0, '1f468-1f3fd-200d-1f692':0, '1f468-1f3fe-200d-1f692':0, '1f468-1f3ff-200d-1f692':0, '1f468-1f3fb-200d-1f9af':0, '1f468-1f3fc-200d-1f9af':0, '1f468-1f3fd-200d-1f9af':0, '1f468-1f3fe-200d-1f9af':0, '1f468-1f3ff-200d-1f9af':0, '1f468-1f3fb-200d-1f9b0':0, '1f468-1f3fc-200d-1f9b0':0, '1f468-1f3fd-200d-1f9b0':0, '1f468-1f3fe-200d-1f9b0':0, '1f468-1f3ff-200d-1f9b0':0, '1f468-1f3fb-200d-1f9b1':0, '1f468-1f3fc-200d-1f9b1':0, '1f468-1f3fd-200d-1f9b1':0, '1f468-1f3fe-200d-1f9b1':0, '1f468-1f3ff-200d-1f9b1':0, '1f468-1f3fb-200d-1f9b2':0, '1f468-1f3fc-200d-1f9b2':0, '1f468-1f3fd-200d-1f9b2':0, '1f468-1f3fe-200d-1f9b2':0, '1f468-1f3ff-200d-1f9b2':0, '1f468-1f3fb-200d-1f9b3':0, '1f468-1f3fc-200d-1f9b3':0, '1f468-1f3fd-200d-1f9b3':0, '1f468-1f3fe-200d-1f9b3':0, '1f468-1f3ff-200d-1f9b3':0, '1f468-1f3fb-200d-1f9bc':0, '1f468-1f3fc-200d-1f9bc':0, '1f468-1f3fd-200d-1f9bc':0, '1f468-1f3fe-200d-1f9bc':0, '1f468-1f3ff-200d-1f9bc':0, '1f468-1f3fb-200d-1f9bd':0, '1f468-1f3fc-200d-1f9bd':0, '1f468-1f3fd-200d-1f9bd':0, '1f468-1f3fe-200d-1f9bd':0, '1f468-1f3ff-200d-1f9bd':0, '1f468-1f3fb-200d-2695':0, '1f468-1f3fc-200d-2695':0, '1f468-1f3fd-200d-2695':0, '1f468-1f3fe-200d-2695':0, '1f468-1f3ff-200d-2695':0, '1f468-1f3fb-200d-2696':0, '1f468-1f3fc-200d-2696':0, '1f468-1f3fd-200d-2696':0, '1f468-1f3fe-200d-2696':0, '1f468-1f3ff-200d-2696':0, '1f468-1f3fb-200d-2708':0, '1f468-1f3fc-200d-2708':0, '1f468-1f3fd-200d-2708':0, '1f468-1f3fe-200d-2708':0, '1f468-1f3ff-200d-2708':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3fe-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3fe':0, '1f468-1f3ff-200d-2764-200d-1f468-1f3ff':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f468-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f468-1f3fb':0, '1f468-1f3fc':0, '1f468-1f3fd':0, '1f468-1f3fe':0, '1f468-1f3ff':0, '1f469-1f3fb-200d-1f33e':0, '1f469-1f3fc-200d-1f33e':0, '1f469-1f3fd-200d-1f33e':0, '1f469-1f3fe-200d-1f33e':0, '1f469-1f3ff-200d-1f33e':0, '1f469-1f3fb-200d-1f373':0, '1f469-1f3fc-200d-1f373':0, '1f469-1f3fd-200d-1f373':0, '1f469-1f3fe-200d-1f373':0, '1f469-1f3ff-200d-1f373':0, '1f469-1f3fb-200d-1f37c':0, '1f469-1f3fc-200d-1f37c':0, '1f469-1f3fd-200d-1f37c':0, '1f469-1f3fe-200d-1f37c':0, '1f469-1f3ff-200d-1f37c':0, '1f469-1f3fb-200d-1f393':0, '1f469-1f3fc-200d-1f393':0, '1f469-1f3fd-200d-1f393':0, '1f469-1f3fe-200d-1f393':0, '1f469-1f3ff-200d-1f393':0, '1f469-1f3fb-200d-1f3a4':0, '1f469-1f3fc-200d-1f3a4':0, '1f469-1f3fd-200d-1f3a4':0, '1f469-1f3fe-200d-1f3a4':0, '1f469-1f3ff-200d-1f3a4':0, '1f469-1f3fb-200d-1f3a8':0, '1f469-1f3fc-200d-1f3a8':0, '1f469-1f3fd-200d-1f3a8':0, '1f469-1f3fe-200d-1f3a8':0, '1f469-1f3ff-200d-1f3a8':0, '1f469-1f3fb-200d-1f3eb':0, '1f469-1f3fc-200d-1f3eb':0, '1f469-1f3fd-200d-1f3eb':0, '1f469-1f3fe-200d-1f3eb':0, '1f469-1f3ff-200d-1f3eb':0, '1f469-1f3fb-200d-1f3ed':0, '1f469-1f3fc-200d-1f3ed':0, '1f469-1f3fd-200d-1f3ed':0, '1f469-1f3fe-200d-1f3ed':0, '1f469-1f3ff-200d-1f3ed':0, '1f469-1f3fb-200d-1f4bb':0, '1f469-1f3fc-200d-1f4bb':0, '1f469-1f3fd-200d-1f4bb':0, '1f469-1f3fe-200d-1f4bb':0, '1f469-1f3ff-200d-1f4bb':0, '1f469-1f3fb-200d-1f4bc':0, '1f469-1f3fc-200d-1f4bc':0, '1f469-1f3fd-200d-1f4bc':0, '1f469-1f3fe-200d-1f4bc':0, '1f469-1f3ff-200d-1f4bc':0, '1f469-1f3fb-200d-1f527':0, '1f469-1f3fc-200d-1f527':0, '1f469-1f3fd-200d-1f527':0, '1f469-1f3fe-200d-1f527':0, '1f469-1f3ff-200d-1f527':0, '1f469-1f3fb-200d-1f52c':0, '1f469-1f3fc-200d-1f52c':0, '1f469-1f3fd-200d-1f52c':0, '1f469-1f3fe-200d-1f52c':0, '1f469-1f3ff-200d-1f52c':0, '1f469-1f3fb-200d-1f680':0, '1f469-1f3fc-200d-1f680':0, '1f469-1f3fd-200d-1f680':0, '1f469-1f3fe-200d-1f680':0, '1f469-1f3ff-200d-1f680':0, '1f469-1f3fb-200d-1f692':0, '1f469-1f3fc-200d-1f692':0, '1f469-1f3fd-200d-1f692':0, '1f469-1f3fe-200d-1f692':0, '1f469-1f3ff-200d-1f692':0, '1f469-1f3fb-200d-1f9af':0, '1f469-1f3fc-200d-1f9af':0, '1f469-1f3fd-200d-1f9af':0, '1f469-1f3fe-200d-1f9af':0, '1f469-1f3ff-200d-1f9af':0, '1f469-1f3fb-200d-1f9b0':0, '1f469-1f3fc-200d-1f9b0':0, '1f469-1f3fd-200d-1f9b0':0, '1f469-1f3fe-200d-1f9b0':0, '1f469-1f3ff-200d-1f9b0':0, '1f469-1f3fb-200d-1f9b1':0, '1f469-1f3fc-200d-1f9b1':0, '1f469-1f3fd-200d-1f9b1':0, '1f469-1f3fe-200d-1f9b1':0, '1f469-1f3ff-200d-1f9b1':0, '1f469-1f3fb-200d-1f9b2':0, '1f469-1f3fc-200d-1f9b2':0, '1f469-1f3fd-200d-1f9b2':0, '1f469-1f3fe-200d-1f9b2':0, '1f469-1f3ff-200d-1f9b2':0, '1f469-1f3fb-200d-1f9b3':0, '1f469-1f3fc-200d-1f9b3':0, '1f469-1f3fd-200d-1f9b3':0, '1f469-1f3fe-200d-1f9b3':0, '1f469-1f3ff-200d-1f9b3':0, '1f469-1f3fb-200d-1f9bc':0, '1f469-1f3fc-200d-1f9bc':0, '1f469-1f3fd-200d-1f9bc':0, '1f469-1f3fe-200d-1f9bc':0, '1f469-1f3ff-200d-1f9bc':0, '1f469-1f3fb-200d-1f9bd':0, '1f469-1f3fc-200d-1f9bd':0, '1f469-1f3fd-200d-1f9bd':0, '1f469-1f3fe-200d-1f9bd':0, '1f469-1f3ff-200d-1f9bd':0, '1f469-1f3fb-200d-2695':0, '1f469-1f3fc-200d-2695':0, '1f469-1f3fd-200d-2695':0, '1f469-1f3fe-200d-2695':0, '1f469-1f3ff-200d-2695':0, '1f469-1f3fb-200d-2696':0, '1f469-1f3fc-200d-2696':0, '1f469-1f3fd-200d-2696':0, '1f469-1f3fe-200d-2696':0, '1f469-1f3ff-200d-2696':0, '1f469-1f3fb-200d-2708':0, '1f469-1f3fc-200d-2708':0, '1f469-1f3fd-200d-2708':0, '1f469-1f3fe-200d-2708':0, '1f469-1f3ff-200d-2708':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f468-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f469-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f468-1f3ff':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3fe-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3fe':0, '1f469-1f3ff-200d-2764-200d-1f48b-200d-1f469-1f3ff':0, '1f469-1f3fb':0, '1f469-1f3fc':0, '1f469-1f3fd':0, '1f469-1f3fe':0, '1f469-1f3ff':0, '1f46b-1f3fb':0, '1f46b-1f3fc':0, '1f46b-1f3fd':0, '1f46b-1f3fe':0, '1f46b-1f3ff':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fb-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fc-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3fe':0, '1f469-1f3fd-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3fe-200d-1f91d-200d-1f468-1f3ff':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fb':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fc':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fd':0, '1f469-1f3ff-200d-1f91d-200d-1f468-1f3fe':0, '1f46c-1f3fb':0, '1f46c-1f3fc':0, '1f46c-1f3fd':0, '1f46c-1f3fe':0, '1f46c-1f3ff':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe':0, '1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3fe-200d-1f91d-200d-1f468-1f3ff':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fb':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fc':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fd':0, '1f468-1f3ff-200d-1f91d-200d-1f468-1f3fe':0, '1f46d-1f3fb':0, '1f46d-1f3fc':0, '1f46d-1f3fd':0, '1f46d-1f3fe':0, '1f46d-1f3ff':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fb-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fc-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3fe':0, '1f469-1f3fd-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3fe-200d-1f91d-200d-1f469-1f3ff':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fb':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fc':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fd':0, '1f469-1f3ff-200d-1f91d-200d-1f469-1f3fe':0, '1f46e-1f3fb-200d-2640':0, '1f46e-1f3fc-200d-2640':0, '1f46e-1f3fd-200d-2640':0, '1f46e-1f3fe-200d-2640':0, '1f46e-1f3ff-200d-2640':0, '1f46e-1f3fb-200d-2642':0, '1f46e-1f3fc-200d-2642':0, '1f46e-1f3fd-200d-2642':0, '1f46e-1f3fe-200d-2642':0, '1f46e-1f3ff-200d-2642':0, '1f46e-1f3fb':0, '1f46e-1f3fc':0, '1f46e-1f3fd':0, '1f46e-1f3fe':0, '1f46e-1f3ff':0, '1f470-1f3fb-200d-2640':0, '1f470-1f3fc-200d-2640':0, '1f470-1f3fd-200d-2640':0, '1f470-1f3fe-200d-2640':0, '1f470-1f3ff-200d-2640':0, '1f470-1f3fb-200d-2642':0, '1f470-1f3fc-200d-2642':0, '1f470-1f3fd-200d-2642':0, '1f470-1f3fe-200d-2642':0, '1f470-1f3ff-200d-2642':0, '1f470-1f3fb':0, '1f470-1f3fc':0, '1f470-1f3fd':0, '1f470-1f3fe':0, '1f470-1f3ff':0, '1f471-1f3fb-200d-2640':0, '1f471-1f3fc-200d-2640':0, '1f471-1f3fd-200d-2640':0, '1f471-1f3fe-200d-2640':0, '1f471-1f3ff-200d-2640':0, '1f471-1f3fb-200d-2642':0, '1f471-1f3fc-200d-2642':0, '1f471-1f3fd-200d-2642':0, '1f471-1f3fe-200d-2642':0, '1f471-1f3ff-200d-2642':0, '1f471-1f3fb':0, '1f471-1f3fc':0, '1f471-1f3fd':0, '1f471-1f3fe':0, '1f471-1f3ff':0, '1f472-1f3fb':0, '1f472-1f3fc':0, '1f472-1f3fd':0, '1f472-1f3fe':0, '1f472-1f3ff':0, '1f473-1f3fb-200d-2640':0, '1f473-1f3fc-200d-2640':0, '1f473-1f3fd-200d-2640':0, '1f473-1f3fe-200d-2640':0, '1f473-1f3ff-200d-2640':0, '1f473-1f3fb-200d-2642':0, '1f473-1f3fc-200d-2642':0, '1f473-1f3fd-200d-2642':0, '1f473-1f3fe-200d-2642':0, '1f473-1f3ff-200d-2642':0, '1f473-1f3fb':0, '1f473-1f3fc':0, '1f473-1f3fd':0, '1f473-1f3fe':0, '1f473-1f3ff':0, '1f474-1f3fb':0, '1f474-1f3fc':0, '1f474-1f3fd':0, '1f474-1f3fe':0, '1f474-1f3ff':0, '1f475-1f3fb':0, '1f475-1f3fc':0, '1f475-1f3fd':0, '1f475-1f3fe':0, '1f475-1f3ff':0, '1f476-1f3fb':0, '1f476-1f3fc':0, '1f476-1f3fd':0, '1f476-1f3fe':0, '1f476-1f3ff':0, '1f477-1f3fb-200d-2640':0, '1f477-1f3fc-200d-2640':0, '1f477-1f3fd-200d-2640':0, '1f477-1f3fe-200d-2640':0, '1f477-1f3ff-200d-2640':0, '1f477-1f3fb-200d-2642':0, '1f477-1f3fc-200d-2642':0, '1f477-1f3fd-200d-2642':0, '1f477-1f3fe-200d-2642':0, '1f477-1f3ff-200d-2642':0, '1f477-1f3fb':0, '1f477-1f3fc':0, '1f477-1f3fd':0, '1f477-1f3fe':0, '1f477-1f3ff':0, '1f478-1f3fb':0, '1f478-1f3fc':0, '1f478-1f3fd':0, '1f478-1f3fe':0, '1f478-1f3ff':0, '1f47c-1f3fb':0, '1f47c-1f3fc':0, '1f47c-1f3fd':0, '1f47c-1f3fe':0, '1f47c-1f3ff':0, '1f481-1f3fb-200d-2640':0, '1f481-1f3fc-200d-2640':0, '1f481-1f3fd-200d-2640':0, '1f481-1f3fe-200d-2640':0, '1f481-1f3ff-200d-2640':0, '1f481-1f3fb-200d-2642':0, '1f481-1f3fc-200d-2642':0, '1f481-1f3fd-200d-2642':0, '1f481-1f3fe-200d-2642':0, '1f481-1f3ff-200d-2642':0, '1f481-1f3fb':0, '1f481-1f3fc':0, '1f481-1f3fd':0, '1f481-1f3fe':0, '1f481-1f3ff':0, '1f482-1f3fb-200d-2640':0, '1f482-1f3fc-200d-2640':0, '1f482-1f3fd-200d-2640':0, '1f482-1f3fe-200d-2640':0, '1f482-1f3ff-200d-2640':0, '1f482-1f3fb-200d-2642':0, '1f482-1f3fc-200d-2642':0, '1f482-1f3fd-200d-2642':0, '1f482-1f3fe-200d-2642':0, '1f482-1f3ff-200d-2642':0, '1f482-1f3fb':0, '1f482-1f3fc':0, '1f482-1f3fd':0, '1f482-1f3fe':0, '1f482-1f3ff':0, '1f483-1f3fb':0, '1f483-1f3fc':0, '1f483-1f3fd':0, '1f483-1f3fe':0, '1f483-1f3ff':0, '1f485-1f3fb':0, '1f485-1f3fc':0, '1f485-1f3fd':0, '1f485-1f3fe':0, '1f485-1f3ff':0, '1f486-1f3fb-200d-2640':0, '1f486-1f3fc-200d-2640':0, '1f486-1f3fd-200d-2640':0, '1f486-1f3fe-200d-2640':0, '1f486-1f3ff-200d-2640':0, '1f486-1f3fb-200d-2642':0, '1f486-1f3fc-200d-2642':0, '1f486-1f3fd-200d-2642':0, '1f486-1f3fe-200d-2642':0, '1f486-1f3ff-200d-2642':0, '1f486-1f3fb':0, '1f486-1f3fc':0, '1f486-1f3fd':0, '1f486-1f3fe':0, '1f486-1f3ff':0, '1f487-1f3fb-200d-2640':0, '1f487-1f3fc-200d-2640':0, '1f487-1f3fd-200d-2640':0, '1f487-1f3fe-200d-2640':0, '1f487-1f3ff-200d-2640':0, '1f487-1f3fb-200d-2642':0, '1f487-1f3fc-200d-2642':0, '1f487-1f3fd-200d-2642':0, '1f487-1f3fe-200d-2642':0, '1f487-1f3ff-200d-2642':0, '1f487-1f3fb':0, '1f487-1f3fc':0, '1f487-1f3fd':0, '1f487-1f3fe':0, '1f487-1f3ff':0, '1f48f-1f3fb':0, '1f48f-1f3fc':0, '1f48f-1f3fd':0, '1f48f-1f3fe':0, '1f48f-1f3ff':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-2764-200d-1f48b-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-2764-200d-1f48b-200d-1f9d1-1f3fe':0, '1f491-1f3fb':0, '1f491-1f3fc':0, '1f491-1f3fd':0, '1f491-1f3fe':0, '1f491-1f3ff':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-2764-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-2764-200d-1f9d1-1f3fe':0, '1f4aa-1f3fb':0, '1f4aa-1f3fc':0, '1f4aa-1f3fd':0, '1f4aa-1f3fe':0, '1f4aa-1f3ff':0, '1f574-1f3fb':0, '1f574-1f3fc':0, '1f574-1f3fd':0, '1f574-1f3fe':0, '1f574-1f3ff':0, '1f575-1f3fb-200d-2640':0, '1f575-1f3fc-200d-2640':0, '1f575-1f3fd-200d-2640':0, '1f575-1f3fe-200d-2640':0, '1f575-1f3ff-200d-2640':0, '1f575-1f3fb-200d-2642':0, '1f575-1f3fc-200d-2642':0, '1f575-1f3fd-200d-2642':0, '1f575-1f3fe-200d-2642':0, '1f575-1f3ff-200d-2642':0, '1f575-1f3fb':0, '1f575-1f3fc':0, '1f575-1f3fd':0, '1f575-1f3fe':0, '1f575-1f3ff':0, '1f57a-1f3fb':0, '1f57a-1f3fc':0, '1f57a-1f3fd':0, '1f57a-1f3fe':0, '1f57a-1f3ff':0, '1f590-1f3fb':0, '1f590-1f3fc':0, '1f590-1f3fd':0, '1f590-1f3fe':0, '1f590-1f3ff':0, '1f595-1f3fb':0, '1f595-1f3fc':0, '1f595-1f3fd':0, '1f595-1f3fe':0, '1f595-1f3ff':0, '1f596-1f3fb':0, '1f596-1f3fc':0, '1f596-1f3fd':0, '1f596-1f3fe':0, '1f596-1f3ff':0, '1f645-1f3fb-200d-2640':0, '1f645-1f3fc-200d-2640':0, '1f645-1f3fd-200d-2640':0, '1f645-1f3fe-200d-2640':0, '1f645-1f3ff-200d-2640':0, '1f645-1f3fb-200d-2642':0, '1f645-1f3fc-200d-2642':0, '1f645-1f3fd-200d-2642':0, '1f645-1f3fe-200d-2642':0, '1f645-1f3ff-200d-2642':0, '1f645-1f3fb':0, '1f645-1f3fc':0, '1f645-1f3fd':0, '1f645-1f3fe':0, '1f645-1f3ff':0, '1f646-1f3fb-200d-2640':0, '1f646-1f3fc-200d-2640':0, '1f646-1f3fd-200d-2640':0, '1f646-1f3fe-200d-2640':0, '1f646-1f3ff-200d-2640':0, '1f646-1f3fb-200d-2642':0, '1f646-1f3fc-200d-2642':0, '1f646-1f3fd-200d-2642':0, '1f646-1f3fe-200d-2642':0, '1f646-1f3ff-200d-2642':0, '1f646-1f3fb':0, '1f646-1f3fc':0, '1f646-1f3fd':0, '1f646-1f3fe':0, '1f646-1f3ff':0, '1f647-1f3fb-200d-2640':0, '1f647-1f3fc-200d-2640':0, '1f647-1f3fd-200d-2640':0, '1f647-1f3fe-200d-2640':0, '1f647-1f3ff-200d-2640':0, '1f647-1f3fb-200d-2642':0, '1f647-1f3fc-200d-2642':0, '1f647-1f3fd-200d-2642':0, '1f647-1f3fe-200d-2642':0, '1f647-1f3ff-200d-2642':0, '1f647-1f3fb':0, '1f647-1f3fc':0, '1f647-1f3fd':0, '1f647-1f3fe':0, '1f647-1f3ff':0, '1f64b-1f3fb-200d-2640':0, '1f64b-1f3fc-200d-2640':0, '1f64b-1f3fd-200d-2640':0, '1f64b-1f3fe-200d-2640':0, '1f64b-1f3ff-200d-2640':0, '1f64b-1f3fb-200d-2642':0, '1f64b-1f3fc-200d-2642':0, '1f64b-1f3fd-200d-2642':0, '1f64b-1f3fe-200d-2642':0, '1f64b-1f3ff-200d-2642':0, '1f64b-1f3fb':0, '1f64b-1f3fc':0, '1f64b-1f3fd':0, '1f64b-1f3fe':0, '1f64b-1f3ff':0, '1f64c-1f3fb':0, '1f64c-1f3fc':0, '1f64c-1f3fd':0, '1f64c-1f3fe':0, '1f64c-1f3ff':0, '1f64d-1f3fb-200d-2640':0, '1f64d-1f3fc-200d-2640':0, '1f64d-1f3fd-200d-2640':0, '1f64d-1f3fe-200d-2640':0, '1f64d-1f3ff-200d-2640':0, '1f64d-1f3fb-200d-2642':0, '1f64d-1f3fc-200d-2642':0, '1f64d-1f3fd-200d-2642':0, '1f64d-1f3fe-200d-2642':0, '1f64d-1f3ff-200d-2642':0, '1f64d-1f3fb':0, '1f64d-1f3fc':0, '1f64d-1f3fd':0, '1f64d-1f3fe':0, '1f64d-1f3ff':0, '1f64e-1f3fb-200d-2640':0, '1f64e-1f3fc-200d-2640':0, '1f64e-1f3fd-200d-2640':0, '1f64e-1f3fe-200d-2640':0, '1f64e-1f3ff-200d-2640':0, '1f64e-1f3fb-200d-2642':0, '1f64e-1f3fc-200d-2642':0, '1f64e-1f3fd-200d-2642':0, '1f64e-1f3fe-200d-2642':0, '1f64e-1f3ff-200d-2642':0, '1f64e-1f3fb':0, '1f64e-1f3fc':0, '1f64e-1f3fd':0, '1f64e-1f3fe':0, '1f64e-1f3ff':0, '1f64f-1f3fb':0, '1f64f-1f3fc':0, '1f64f-1f3fd':0, '1f64f-1f3fe':0, '1f64f-1f3ff':0, '1f6a3-1f3fb-200d-2640':0, '1f6a3-1f3fc-200d-2640':0, '1f6a3-1f3fd-200d-2640':0, '1f6a3-1f3fe-200d-2640':0, '1f6a3-1f3ff-200d-2640':0, '1f6a3-1f3fb-200d-2642':0, '1f6a3-1f3fc-200d-2642':0, '1f6a3-1f3fd-200d-2642':0, '1f6a3-1f3fe-200d-2642':0, '1f6a3-1f3ff-200d-2642':0, '1f6a3-1f3fb':0, '1f6a3-1f3fc':0, '1f6a3-1f3fd':0, '1f6a3-1f3fe':0, '1f6a3-1f3ff':0, '1f6b4-1f3fb-200d-2640':0, '1f6b4-1f3fc-200d-2640':0, '1f6b4-1f3fd-200d-2640':0, '1f6b4-1f3fe-200d-2640':0, '1f6b4-1f3ff-200d-2640':0, '1f6b4-1f3fb-200d-2642':0, '1f6b4-1f3fc-200d-2642':0, '1f6b4-1f3fd-200d-2642':0, '1f6b4-1f3fe-200d-2642':0, '1f6b4-1f3ff-200d-2642':0, '1f6b4-1f3fb':0, '1f6b4-1f3fc':0, '1f6b4-1f3fd':0, '1f6b4-1f3fe':0, '1f6b4-1f3ff':0, '1f6b5-1f3fb-200d-2640':0, '1f6b5-1f3fc-200d-2640':0, '1f6b5-1f3fd-200d-2640':0, '1f6b5-1f3fe-200d-2640':0, '1f6b5-1f3ff-200d-2640':0, '1f6b5-1f3fb-200d-2642':0, '1f6b5-1f3fc-200d-2642':0, '1f6b5-1f3fd-200d-2642':0, '1f6b5-1f3fe-200d-2642':0, '1f6b5-1f3ff-200d-2642':0, '1f6b5-1f3fb':0, '1f6b5-1f3fc':0, '1f6b5-1f3fd':0, '1f6b5-1f3fe':0, '1f6b5-1f3ff':0, '1f6b6-1f3fb-200d-2640':0, '1f6b6-1f3fc-200d-2640':0, '1f6b6-1f3fd-200d-2640':0, '1f6b6-1f3fe-200d-2640':0, '1f6b6-1f3ff-200d-2640':0, '1f6b6-1f3fb-200d-2642':0, '1f6b6-1f3fc-200d-2642':0, '1f6b6-1f3fd-200d-2642':0, '1f6b6-1f3fe-200d-2642':0, '1f6b6-1f3ff-200d-2642':0, '1f6b6-1f3fb':0, '1f6b6-1f3fc':0, '1f6b6-1f3fd':0, '1f6b6-1f3fe':0, '1f6b6-1f3ff':0, '1f6c0-1f3fb':0, '1f6c0-1f3fc':0, '1f6c0-1f3fd':0, '1f6c0-1f3fe':0, '1f6c0-1f3ff':0, '1f6cc-1f3fb':0, '1f6cc-1f3fc':0, '1f6cc-1f3fd':0, '1f6cc-1f3fe':0, '1f6cc-1f3ff':0, '1f90c-1f3fb':0, '1f90c-1f3fc':0, '1f90c-1f3fd':0, '1f90c-1f3fe':0, '1f90c-1f3ff':0, '1f90f-1f3fb':0, '1f90f-1f3fc':0, '1f90f-1f3fd':0, '1f90f-1f3fe':0, '1f90f-1f3ff':0, '1f918-1f3fb':0, '1f918-1f3fc':0, '1f918-1f3fd':0, '1f918-1f3fe':0, '1f918-1f3ff':0, '1f919-1f3fb':0, '1f919-1f3fc':0, '1f919-1f3fd':0, '1f919-1f3fe':0, '1f919-1f3ff':0, '1f91a-1f3fb':0, '1f91a-1f3fc':0, '1f91a-1f3fd':0, '1f91a-1f3fe':0, '1f91a-1f3ff':0, '1f91b-1f3fb':0, '1f91b-1f3fc':0, '1f91b-1f3fd':0, '1f91b-1f3fe':0, '1f91b-1f3ff':0, '1f91c-1f3fb':0, '1f91c-1f3fc':0, '1f91c-1f3fd':0, '1f91c-1f3fe':0, '1f91c-1f3ff':0, '1f91d-1f3fb':0, '1f91d-1f3fc':0, '1f91d-1f3fd':0, '1f91d-1f3fe':0, '1f91d-1f3ff':0, '1f91e-1f3fb':0, '1f91e-1f3fc':0, '1f91e-1f3fd':0, '1f91e-1f3fe':0, '1f91e-1f3ff':0, '1f91f-1f3fb':0, '1f91f-1f3fc':0, '1f91f-1f3fd':0, '1f91f-1f3fe':0, '1f91f-1f3ff':0, '1f926-1f3fb-200d-2640':0, '1f926-1f3fc-200d-2640':0, '1f926-1f3fd-200d-2640':0, '1f926-1f3fe-200d-2640':0, '1f926-1f3ff-200d-2640':0, '1f926-1f3fb-200d-2642':0, '1f926-1f3fc-200d-2642':0, '1f926-1f3fd-200d-2642':0, '1f926-1f3fe-200d-2642':0, '1f926-1f3ff-200d-2642':0, '1f926-1f3fb':0, '1f926-1f3fc':0, '1f926-1f3fd':0, '1f926-1f3fe':0, '1f926-1f3ff':0, '1f930-1f3fb':0, '1f930-1f3fc':0, '1f930-1f3fd':0, '1f930-1f3fe':0, '1f930-1f3ff':0, '1f931-1f3fb':0, '1f931-1f3fc':0, '1f931-1f3fd':0, '1f931-1f3fe':0, '1f931-1f3ff':0, '1f932-1f3fb':0, '1f932-1f3fc':0, '1f932-1f3fd':0, '1f932-1f3fe':0, '1f932-1f3ff':0, '1f933-1f3fb':0, '1f933-1f3fc':0, '1f933-1f3fd':0, '1f933-1f3fe':0, '1f933-1f3ff':0, '1f934-1f3fb':0, '1f934-1f3fc':0, '1f934-1f3fd':0, '1f934-1f3fe':0, '1f934-1f3ff':0, '1f935-1f3fb-200d-2640':0, '1f935-1f3fc-200d-2640':0, '1f935-1f3fd-200d-2640':0, '1f935-1f3fe-200d-2640':0, '1f935-1f3ff-200d-2640':0, '1f935-1f3fb-200d-2642':0, '1f935-1f3fc-200d-2642':0, '1f935-1f3fd-200d-2642':0, '1f935-1f3fe-200d-2642':0, '1f935-1f3ff-200d-2642':0, '1f935-1f3fb':0, '1f935-1f3fc':0, '1f935-1f3fd':0, '1f935-1f3fe':0, '1f935-1f3ff':0, '1f936-1f3fb':0, '1f936-1f3fc':0, '1f936-1f3fd':0, '1f936-1f3fe':0, '1f936-1f3ff':0, '1f937-1f3fb-200d-2640':0, '1f937-1f3fc-200d-2640':0, '1f937-1f3fd-200d-2640':0, '1f937-1f3fe-200d-2640':0, '1f937-1f3ff-200d-2640':0, '1f937-1f3fb-200d-2642':0, '1f937-1f3fc-200d-2642':0, '1f937-1f3fd-200d-2642':0, '1f937-1f3fe-200d-2642':0, '1f937-1f3ff-200d-2642':0, '1f937-1f3fb':0, '1f937-1f3fc':0, '1f937-1f3fd':0, '1f937-1f3fe':0, '1f937-1f3ff':0, '1f938-1f3fb-200d-2640':0, '1f938-1f3fc-200d-2640':0, '1f938-1f3fd-200d-2640':0, '1f938-1f3fe-200d-2640':0, '1f938-1f3ff-200d-2640':0, '1f938-1f3fb-200d-2642':0, '1f938-1f3fc-200d-2642':0, '1f938-1f3fd-200d-2642':0, '1f938-1f3fe-200d-2642':0, '1f938-1f3ff-200d-2642':0, '1f938-1f3fb':0, '1f938-1f3fc':0, '1f938-1f3fd':0, '1f938-1f3fe':0, '1f938-1f3ff':0, '1f939-1f3fb-200d-2640':0, '1f939-1f3fc-200d-2640':0, '1f939-1f3fd-200d-2640':0, '1f939-1f3fe-200d-2640':0, '1f939-1f3ff-200d-2640':0, '1f939-1f3fb-200d-2642':0, '1f939-1f3fc-200d-2642':0, '1f939-1f3fd-200d-2642':0, '1f939-1f3fe-200d-2642':0, '1f939-1f3ff-200d-2642':0, '1f939-1f3fb':0, '1f939-1f3fc':0, '1f939-1f3fd':0, '1f939-1f3fe':0, '1f939-1f3ff':0, '1f93d-1f3fb-200d-2640':0, '1f93d-1f3fc-200d-2640':0, '1f93d-1f3fd-200d-2640':0, '1f93d-1f3fe-200d-2640':0, '1f93d-1f3ff-200d-2640':0, '1f93d-1f3fb-200d-2642':0, '1f93d-1f3fc-200d-2642':0, '1f93d-1f3fd-200d-2642':0, '1f93d-1f3fe-200d-2642':0, '1f93d-1f3ff-200d-2642':0, '1f93d-1f3fb':0, '1f93d-1f3fc':0, '1f93d-1f3fd':0, '1f93d-1f3fe':0, '1f93d-1f3ff':0, '1f93e-1f3fb-200d-2640':0, '1f93e-1f3fc-200d-2640':0, '1f93e-1f3fd-200d-2640':0, '1f93e-1f3fe-200d-2640':0, '1f93e-1f3ff-200d-2640':0, '1f93e-1f3fb-200d-2642':0, '1f93e-1f3fc-200d-2642':0, '1f93e-1f3fd-200d-2642':0, '1f93e-1f3fe-200d-2642':0, '1f93e-1f3ff-200d-2642':0, '1f93e-1f3fb':0, '1f93e-1f3fc':0, '1f93e-1f3fd':0, '1f93e-1f3fe':0, '1f93e-1f3ff':0, '1f977-1f3fb':0, '1f977-1f3fc':0, '1f977-1f3fd':0, '1f977-1f3fe':0, '1f977-1f3ff':0, '1f9b5-1f3fb':0, '1f9b5-1f3fc':0, '1f9b5-1f3fd':0, '1f9b5-1f3fe':0, '1f9b5-1f3ff':0, '1f9b6-1f3fb':0, '1f9b6-1f3fc':0, '1f9b6-1f3fd':0, '1f9b6-1f3fe':0, '1f9b6-1f3ff':0, '1f9b8-1f3fb-200d-2640':0, '1f9b8-1f3fc-200d-2640':0, '1f9b8-1f3fd-200d-2640':0, '1f9b8-1f3fe-200d-2640':0, '1f9b8-1f3ff-200d-2640':0, '1f9b8-1f3fb-200d-2642':0, '1f9b8-1f3fc-200d-2642':0, '1f9b8-1f3fd-200d-2642':0, '1f9b8-1f3fe-200d-2642':0, '1f9b8-1f3ff-200d-2642':0, '1f9b8-1f3fb':0, '1f9b8-1f3fc':0, '1f9b8-1f3fd':0, '1f9b8-1f3fe':0, '1f9b8-1f3ff':0, '1f9b9-1f3fb-200d-2640':0, '1f9b9-1f3fc-200d-2640':0, '1f9b9-1f3fd-200d-2640':0, '1f9b9-1f3fe-200d-2640':0, '1f9b9-1f3ff-200d-2640':0, '1f9b9-1f3fb-200d-2642':0, '1f9b9-1f3fc-200d-2642':0, '1f9b9-1f3fd-200d-2642':0, '1f9b9-1f3fe-200d-2642':0, '1f9b9-1f3ff-200d-2642':0, '1f9b9-1f3fb':0, '1f9b9-1f3fc':0, '1f9b9-1f3fd':0, '1f9b9-1f3fe':0, '1f9b9-1f3ff':0, '1f9bb-1f3fb':0, '1f9bb-1f3fc':0, '1f9bb-1f3fd':0, '1f9bb-1f3fe':0, '1f9bb-1f3ff':0, '1f9cd-1f3fb-200d-2640':0, '1f9cd-1f3fc-200d-2640':0, '1f9cd-1f3fd-200d-2640':0, '1f9cd-1f3fe-200d-2640':0, '1f9cd-1f3ff-200d-2640':0, '1f9cd-1f3fb-200d-2642':0, '1f9cd-1f3fc-200d-2642':0, '1f9cd-1f3fd-200d-2642':0, '1f9cd-1f3fe-200d-2642':0, '1f9cd-1f3ff-200d-2642':0, '1f9cd-1f3fb':0, '1f9cd-1f3fc':0, '1f9cd-1f3fd':0, '1f9cd-1f3fe':0, '1f9cd-1f3ff':0, '1f9ce-1f3fb-200d-2640':0, '1f9ce-1f3fc-200d-2640':0, '1f9ce-1f3fd-200d-2640':0, '1f9ce-1f3fe-200d-2640':0, '1f9ce-1f3ff-200d-2640':0, '1f9ce-1f3fb-200d-2642':0, '1f9ce-1f3fc-200d-2642':0, '1f9ce-1f3fd-200d-2642':0, '1f9ce-1f3fe-200d-2642':0, '1f9ce-1f3ff-200d-2642':0, '1f9ce-1f3fb':0, '1f9ce-1f3fc':0, '1f9ce-1f3fd':0, '1f9ce-1f3fe':0, '1f9ce-1f3ff':0, '1f9cf-1f3fb-200d-2640':0, '1f9cf-1f3fc-200d-2640':0, '1f9cf-1f3fd-200d-2640':0, '1f9cf-1f3fe-200d-2640':0, '1f9cf-1f3ff-200d-2640':0, '1f9cf-1f3fb-200d-2642':0, '1f9cf-1f3fc-200d-2642':0, '1f9cf-1f3fd-200d-2642':0, '1f9cf-1f3fe-200d-2642':0, '1f9cf-1f3ff-200d-2642':0, '1f9cf-1f3fb':0, '1f9cf-1f3fc':0, '1f9cf-1f3fd':0, '1f9cf-1f3fe':0, '1f9cf-1f3ff':0, '1f9d1-1f3fb-200d-1f33e':0, '1f9d1-1f3fc-200d-1f33e':0, '1f9d1-1f3fd-200d-1f33e':0, '1f9d1-1f3fe-200d-1f33e':0, '1f9d1-1f3ff-200d-1f33e':0, '1f9d1-1f3fb-200d-1f373':0, '1f9d1-1f3fc-200d-1f373':0, '1f9d1-1f3fd-200d-1f373':0, '1f9d1-1f3fe-200d-1f373':0, '1f9d1-1f3ff-200d-1f373':0, '1f9d1-1f3fb-200d-1f37c':0, '1f9d1-1f3fc-200d-1f37c':0, '1f9d1-1f3fd-200d-1f37c':0, '1f9d1-1f3fe-200d-1f37c':0, '1f9d1-1f3ff-200d-1f37c':0, '1f9d1-1f3fb-200d-1f384':0, '1f9d1-1f3fc-200d-1f384':0, '1f9d1-1f3fd-200d-1f384':0, '1f9d1-1f3fe-200d-1f384':0, '1f9d1-1f3ff-200d-1f384':0, '1f9d1-1f3fb-200d-1f393':0, '1f9d1-1f3fc-200d-1f393':0, '1f9d1-1f3fd-200d-1f393':0, '1f9d1-1f3fe-200d-1f393':0, '1f9d1-1f3ff-200d-1f393':0, '1f9d1-1f3fb-200d-1f3a4':0, '1f9d1-1f3fc-200d-1f3a4':0, '1f9d1-1f3fd-200d-1f3a4':0, '1f9d1-1f3fe-200d-1f3a4':0, '1f9d1-1f3ff-200d-1f3a4':0, '1f9d1-1f3fb-200d-1f3a8':0, '1f9d1-1f3fc-200d-1f3a8':0, '1f9d1-1f3fd-200d-1f3a8':0, '1f9d1-1f3fe-200d-1f3a8':0, '1f9d1-1f3ff-200d-1f3a8':0, '1f9d1-1f3fb-200d-1f3eb':0, '1f9d1-1f3fc-200d-1f3eb':0, '1f9d1-1f3fd-200d-1f3eb':0, '1f9d1-1f3fe-200d-1f3eb':0, '1f9d1-1f3ff-200d-1f3eb':0, '1f9d1-1f3fb-200d-1f3ed':0, '1f9d1-1f3fc-200d-1f3ed':0, '1f9d1-1f3fd-200d-1f3ed':0, '1f9d1-1f3fe-200d-1f3ed':0, '1f9d1-1f3ff-200d-1f3ed':0, '1f9d1-1f3fb-200d-1f4bb':0, '1f9d1-1f3fc-200d-1f4bb':0, '1f9d1-1f3fd-200d-1f4bb':0, '1f9d1-1f3fe-200d-1f4bb':0, '1f9d1-1f3ff-200d-1f4bb':0, '1f9d1-1f3fb-200d-1f4bc':0, '1f9d1-1f3fc-200d-1f4bc':0, '1f9d1-1f3fd-200d-1f4bc':0, '1f9d1-1f3fe-200d-1f4bc':0, '1f9d1-1f3ff-200d-1f4bc':0, '1f9d1-1f3fb-200d-1f527':0, '1f9d1-1f3fc-200d-1f527':0, '1f9d1-1f3fd-200d-1f527':0, '1f9d1-1f3fe-200d-1f527':0, '1f9d1-1f3ff-200d-1f527':0, '1f9d1-1f3fb-200d-1f52c':0, '1f9d1-1f3fc-200d-1f52c':0, '1f9d1-1f3fd-200d-1f52c':0, '1f9d1-1f3fe-200d-1f52c':0, '1f9d1-1f3ff-200d-1f52c':0, '1f9d1-1f3fb-200d-1f680':0, '1f9d1-1f3fc-200d-1f680':0, '1f9d1-1f3fd-200d-1f680':0, '1f9d1-1f3fe-200d-1f680':0, '1f9d1-1f3ff-200d-1f680':0, '1f9d1-1f3fb-200d-1f692':0, '1f9d1-1f3fc-200d-1f692':0, '1f9d1-1f3fd-200d-1f692':0, '1f9d1-1f3fe-200d-1f692':0, '1f9d1-1f3ff-200d-1f692':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fb-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fc-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fd-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3fe-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fb':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fc':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fd':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3fe':0, '1f9d1-1f3ff-200d-1f91d-200d-1f9d1-1f3ff':0, '1f9d1-1f3fb-200d-1f9af':0, '1f9d1-1f3fc-200d-1f9af':0, '1f9d1-1f3fd-200d-1f9af':0, '1f9d1-1f3fe-200d-1f9af':0, '1f9d1-1f3ff-200d-1f9af':0, '1f9d1-1f3fb-200d-1f9b0':0, '1f9d1-1f3fc-200d-1f9b0':0, '1f9d1-1f3fd-200d-1f9b0':0, '1f9d1-1f3fe-200d-1f9b0':0, '1f9d1-1f3ff-200d-1f9b0':0, '1f9d1-1f3fb-200d-1f9b1':0, '1f9d1-1f3fc-200d-1f9b1':0, '1f9d1-1f3fd-200d-1f9b1':0, '1f9d1-1f3fe-200d-1f9b1':0, '1f9d1-1f3ff-200d-1f9b1':0, '1f9d1-1f3fb-200d-1f9b2':0, '1f9d1-1f3fc-200d-1f9b2':0, '1f9d1-1f3fd-200d-1f9b2':0, '1f9d1-1f3fe-200d-1f9b2':0, '1f9d1-1f3ff-200d-1f9b2':0, '1f9d1-1f3fb-200d-1f9b3':0, '1f9d1-1f3fc-200d-1f9b3':0, '1f9d1-1f3fd-200d-1f9b3':0, '1f9d1-1f3fe-200d-1f9b3':0, '1f9d1-1f3ff-200d-1f9b3':0, '1f9d1-1f3fb-200d-1f9bc':0, '1f9d1-1f3fc-200d-1f9bc':0, '1f9d1-1f3fd-200d-1f9bc':0, '1f9d1-1f3fe-200d-1f9bc':0, '1f9d1-1f3ff-200d-1f9bc':0, '1f9d1-1f3fb-200d-1f9bd':0, '1f9d1-1f3fc-200d-1f9bd':0, '1f9d1-1f3fd-200d-1f9bd':0, '1f9d1-1f3fe-200d-1f9bd':0, '1f9d1-1f3ff-200d-1f9bd':0, '1f9d1-1f3fb-200d-2695':0, '1f9d1-1f3fc-200d-2695':0, '1f9d1-1f3fd-200d-2695':0, '1f9d1-1f3fe-200d-2695':0, '1f9d1-1f3ff-200d-2695':0, '1f9d1-1f3fb-200d-2696':0, '1f9d1-1f3fc-200d-2696':0, '1f9d1-1f3fd-200d-2696':0, '1f9d1-1f3fe-200d-2696':0, '1f9d1-1f3ff-200d-2696':0, '1f9d1-1f3fb-200d-2708':0, '1f9d1-1f3fc-200d-2708':0, '1f9d1-1f3fd-200d-2708':0, '1f9d1-1f3fe-200d-2708':0, '1f9d1-1f3ff-200d-2708':0, '1f9d1-1f3fb':0, '1f9d1-1f3fc':0, '1f9d1-1f3fd':0, '1f9d1-1f3fe':0, '1f9d1-1f3ff':0, '1f9d2-1f3fb':0, '1f9d2-1f3fc':0, '1f9d2-1f3fd':0, '1f9d2-1f3fe':0, '1f9d2-1f3ff':0, '1f9d3-1f3fb':0, '1f9d3-1f3fc':0, '1f9d3-1f3fd':0, '1f9d3-1f3fe':0, '1f9d3-1f3ff':0, '1f9d4-1f3fb-200d-2640':0, '1f9d4-1f3fc-200d-2640':0, '1f9d4-1f3fd-200d-2640':0, '1f9d4-1f3fe-200d-2640':0, '1f9d4-1f3ff-200d-2640':0, '1f9d4-1f3fb-200d-2642':0, '1f9d4-1f3fc-200d-2642':0, '1f9d4-1f3fd-200d-2642':0, '1f9d4-1f3fe-200d-2642':0, '1f9d4-1f3ff-200d-2642':0, '1f9d4-1f3fb':0, '1f9d4-1f3fc':0, '1f9d4-1f3fd':0, '1f9d4-1f3fe':0, '1f9d4-1f3ff':0, '1f9d5-1f3fb':0, '1f9d5-1f3fc':0, '1f9d5-1f3fd':0, '1f9d5-1f3fe':0, '1f9d5-1f3ff':0, '1f9d6-1f3fb-200d-2640':0, '1f9d6-1f3fc-200d-2640':0, '1f9d6-1f3fd-200d-2640':0, '1f9d6-1f3fe-200d-2640':0, '1f9d6-1f3ff-200d-2640':0, '1f9d6-1f3fb-200d-2642':0, '1f9d6-1f3fc-200d-2642':0, '1f9d6-1f3fd-200d-2642':0, '1f9d6-1f3fe-200d-2642':0, '1f9d6-1f3ff-200d-2642':0, '1f9d6-1f3fb':0, '1f9d6-1f3fc':0, '1f9d6-1f3fd':0, '1f9d6-1f3fe':0, '1f9d6-1f3ff':0, '1f9d7-1f3fb-200d-2640':0, '1f9d7-1f3fc-200d-2640':0, '1f9d7-1f3fd-200d-2640':0, '1f9d7-1f3fe-200d-2640':0, '1f9d7-1f3ff-200d-2640':0, '1f9d7-1f3fb-200d-2642':0, '1f9d7-1f3fc-200d-2642':0, '1f9d7-1f3fd-200d-2642':0, '1f9d7-1f3fe-200d-2642':0, '1f9d7-1f3ff-200d-2642':0, '1f9d7-1f3fb':0, '1f9d7-1f3fc':0, '1f9d7-1f3fd':0, '1f9d7-1f3fe':0, '1f9d7-1f3ff':0, '1f9d8-1f3fb-200d-2640':0, '1f9d8-1f3fc-200d-2640':0, '1f9d8-1f3fd-200d-2640':0, '1f9d8-1f3fe-200d-2640':0, '1f9d8-1f3ff-200d-2640':0, '1f9d8-1f3fb-200d-2642':0, '1f9d8-1f3fc-200d-2642':0, '1f9d8-1f3fd-200d-2642':0, '1f9d8-1f3fe-200d-2642':0, '1f9d8-1f3ff-200d-2642':0, '1f9d8-1f3fb':0, '1f9d8-1f3fc':0, '1f9d8-1f3fd':0, '1f9d8-1f3fe':0, '1f9d8-1f3ff':0, '1f9d9-1f3fb-200d-2640':0, '1f9d9-1f3fc-200d-2640':0, '1f9d9-1f3fd-200d-2640':0, '1f9d9-1f3fe-200d-2640':0, '1f9d9-1f3ff-200d-2640':0, '1f9d9-1f3fb-200d-2642':0, '1f9d9-1f3fc-200d-2642':0, '1f9d9-1f3fd-200d-2642':0, '1f9d9-1f3fe-200d-2642':0, '1f9d9-1f3ff-200d-2642':0, '1f9d9-1f3fb':0, '1f9d9-1f3fc':0, '1f9d9-1f3fd':0, '1f9d9-1f3fe':0, '1f9d9-1f3ff':0, '1f9da-1f3fb-200d-2640':0, '1f9da-1f3fc-200d-2640':0, '1f9da-1f3fd-200d-2640':0, '1f9da-1f3fe-200d-2640':0, '1f9da-1f3ff-200d-2640':0, '1f9da-1f3fb-200d-2642':0, '1f9da-1f3fc-200d-2642':0, '1f9da-1f3fd-200d-2642':0, '1f9da-1f3fe-200d-2642':0, '1f9da-1f3ff-200d-2642':0, '1f9da-1f3fb':0, '1f9da-1f3fc':0, '1f9da-1f3fd':0, '1f9da-1f3fe':0, '1f9da-1f3ff':0, '1f9db-1f3fb-200d-2640':0, '1f9db-1f3fc-200d-2640':0, '1f9db-1f3fd-200d-2640':0, '1f9db-1f3fe-200d-2640':0, '1f9db-1f3ff-200d-2640':0, '1f9db-1f3fb-200d-2642':0, '1f9db-1f3fc-200d-2642':0, '1f9db-1f3fd-200d-2642':0, '1f9db-1f3fe-200d-2642':0, '1f9db-1f3ff-200d-2642':0, '1f9db-1f3fb':0, '1f9db-1f3fc':0, '1f9db-1f3fd':0, '1f9db-1f3fe':0, '1f9db-1f3ff':0, '1f9dc-1f3fb-200d-2640':0, '1f9dc-1f3fc-200d-2640':0, '1f9dc-1f3fd-200d-2640':0, '1f9dc-1f3fe-200d-2640':0, '1f9dc-1f3ff-200d-2640':0, '1f9dc-1f3fb-200d-2642':0, '1f9dc-1f3fc-200d-2642':0, '1f9dc-1f3fd-200d-2642':0, '1f9dc-1f3fe-200d-2642':0, '1f9dc-1f3ff-200d-2642':0, '1f9dc-1f3fb':0, '1f9dc-1f3fc':0, '1f9dc-1f3fd':0, '1f9dc-1f3fe':0, '1f9dc-1f3ff':0, '1f9dd-1f3fb-200d-2640':0, '1f9dd-1f3fc-200d-2640':0, '1f9dd-1f3fd-200d-2640':0, '1f9dd-1f3fe-200d-2640':0, '1f9dd-1f3ff-200d-2640':0, '1f9dd-1f3fb-200d-2642':0, '1f9dd-1f3fc-200d-2642':0, '1f9dd-1f3fd-200d-2642':0, '1f9dd-1f3fe-200d-2642':0, '1f9dd-1f3ff-200d-2642':0, '1f9dd-1f3fb':0, '1f9dd-1f3fc':0, '1f9dd-1f3fd':0, '1f9dd-1f3fe':0, '1f9dd-1f3ff':0, '261d-1f3fb':0, '261d-1f3fc':0, '261d-1f3fd':0, '261d-1f3fe':0, '261d-1f3ff':0, '26f9-1f3fb-200d-2640':0, '26f9-1f3fc-200d-2640':0, '26f9-1f3fd-200d-2640':0, '26f9-1f3fe-200d-2640':0, '26f9-1f3ff-200d-2640':0, '26f9-1f3fb-200d-2642':0, '26f9-1f3fc-200d-2642':0, '26f9-1f3fd-200d-2642':0, '26f9-1f3fe-200d-2642':0, '26f9-1f3ff-200d-2642':0, '26f9-1f3fb':0, '26f9-1f3fc':0, '26f9-1f3fd':0, '26f9-1f3fe':0, '26f9-1f3ff':0, '270a-1f3fb':0, '270a-1f3fc':0, '270a-1f3fd':0, '270a-1f3fe':0, '270a-1f3ff':0, '270b-1f3fb':0, '270b-1f3fc':0, '270b-1f3fd':0, '270b-1f3fe':0, '270b-1f3ff':0, '270c-1f3fb':0, '270c-1f3fc':0, '270c-1f3fd':0, '270c-1f3fe':0, '270c-1f3ff':0, '270d-1f3fb':0, '270d-1f3fc':0, '270d-1f3fd':0, '270d-1f3fe':0, '270d-1f3ff':0}};\n\nconst Emoji: {[emoji: string]: number} = EmojiVersions[''];\nfor(const version in EmojiVersions) {\n if(version) {\n Object.assign(Emoji, EmojiVersions[version as EMOJI_VERSION]);\n }\n}\n\nexport default Emoji;\n\n/* Emoji[\"00a9-fe0f\"] = 6362;\nEmoji[\"00ae-fe0f\"] = 6363;\nEmoji[\"2122-fe0f\"] = 6364; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport LatinizeMap from '../config/latinizeMap';\n\nexport const badCharsRe = /[`~!@#$%^&*()\\-_=+\\[\\]\\\\|{}'\";:\\/?.>,<]+/g;\nconst trimRe = /^\\s+|\\s$/g;\n\nconst C2L: {[k: string]: string} = {\n 'ะน': 'q',\n 'ั†': 'w',\n 'ัƒ': 'e',\n 'ะบ': 'r',\n 'ะต': 't',\n 'ะฝ': 'y',\n 'ะณ': 'u',\n 'ัˆ': 'i',\n 'ั‰': 'o',\n 'ะท': 'p',\n 'ั…': '[',\n 'ัŠ': ']',\n 'ั„': 'a',\n 'ั‹': 's',\n 'ะฒ': 'd',\n 'ะฐ': 'f',\n 'ะฟ': 'g',\n 'ั€': 'h',\n 'ะพ': 'j',\n 'ะป': 'k',\n 'ะด': 'l',\n 'ะถ': ';',\n 'ั': '\\'',\n 'ั': 'z',\n 'ั‡': 'x',\n 'ั': 'c',\n 'ะผ': 'v',\n 'ะธ': 'b',\n 'ั‚': 'n',\n 'ัŒ': 'm',\n 'ะฑ': ',',\n 'ัŽ': '.',\n '.': '/'\n};\n\nexport function clearBadCharsAndTrim(text: string) {\n return text.replace(badCharsRe, '').replace(trimRe, '');\n}\n\nexport function fixCyrillic(text: string) {\n return text.toLowerCase().replace(/[\\wะฐ-ั]/g, (ch) => {\n const latinizeCh = C2L[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport function latinizeString(text: string) {\n return text.replace(/[^A-Za-z0-9]/g, (ch) => {\n const latinizeCh = LatinizeMap[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport default function cleanSearchText(text: string, latinize = true) {\n return processSearchText(text, {\n clearBadChars: true,\n latinize,\n ignoreCase: true\n });\n}\n\nexport type ProcessSearchTextOptions = Partial<{\n clearBadChars: boolean,\n latinize: boolean,\n ignoreCase: boolean,\n includeTag: boolean\n}>;\n\nexport function processSearchText(text: string, options: ProcessSearchTextOptions = {}) {\n const hasTag = options.includeTag && text.charAt(0) === '%';\n const originalText = text;\n if(options.clearBadChars) text = clearBadCharsAndTrim(text);\n if(options.latinize) text = latinizeString(text);\n if(options.ignoreCase) text = text.toLowerCase();\n if(hasTag) text = '%' + text;\n if(options.latinize) text += '\\x01' + fixCyrillic(originalText);\n return text;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {InputFileLocation, InputStickerSet, InputWebFileLocation} from '../layer';\nimport type {DownloadOptions} from '../lib/mtproto/apiFileManager';\n\nconst FILENAME_JOINER = '_';\n\nexport function getFileNameByLocation(location: InputFileLocation | InputWebFileLocation, options?: Partial<{\n fileName: string,\n downloadId: string\n}>) {\n const fileName = '';// (options?.fileName || '').split('.');\n const ext = fileName[fileName.length - 1] || '';\n\n let str: string;\n switch(location._) {\n case 'inputPhotoFileLocation': {\n str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\n break;\n }\n\n case 'inputDocumentFileLocation': {\n str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\n break;\n }\n\n case 'inputPeerPhotoFileLocation':\n str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER);\n break;\n\n case 'inputStickerSetThumb': {\n const id = (location.stickerset as InputStickerSet.inputStickerSetID).id ||\n (location.stickerset as InputStickerSet.inputStickerSetShortName).short_name ||\n (location.stickerset as InputStickerSet.inputStickerSetDice).emoticon ||\n location.stickerset._;\n str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER);\n break;\n }\n\n case 'inputFileLocation': {\n str = [location.volume_id, location.local_id].join(FILENAME_JOINER);\n break;\n }\n\n case 'inputWebFileLocation': {\n str = ['webFile', location.url].join(FILENAME_JOINER);\n break;\n }\n\n default: {\n console.error('Unrecognized location:', location);\n str = '';\n break;\n }\n }\n\n return str + (options?.downloadId ? '_download' : '') + (ext ? '.' + ext : ext);\n}\n\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\n // console.log('getFileURL', location);\n // const perf = performance.now();\n const encoded = encodeURIComponent(JSON.stringify(options));\n // console.log('getFileURL encode:', performance.now() - perf, encoded);\n\n return /* '/' + */type + '/' + encoded;\n}\n","import {RestrictionReason} from '../layer';\n\nconst platforms = new Set([\n 'all',\n 'web',\n 'webk'\n]);\n\nconst ignore = new Set();\n\nexport function getRestrictionReason(reasons: RestrictionReason[]) {\n // return reasons[0];\n return reasons.find((reason) => platforms.has(reason.platform) && !ignore.has(reason.reason));\n}\n\nexport function isRestricted(reasons: RestrictionReason[]) {\n return !!getRestrictionReason(reasons);\n}\n\nexport function ignoreRestrictionReasons(reasons: string[]) {\n ignore.clear();\n reasons.forEach((reason) => {\n ignore.add(reason);\n });\n}\n","import isObject from '../../../../helpers/object/isObject';\nimport {InputChannel, InputPeer, Peer} from '../../../../layer';\nimport {NULL_PEER_ID} from '../../../mtproto/mtproto_config';\n\nexport default function getPeerId(peerId: {user_id: UserId} | {channel_id: ChatId} | {chat_id: ChatId} | InputPeer | InputChannel | PeerId | string): PeerId {\n if(peerId !== undefined && ((peerId as string).isPeerId ? (peerId as string).isPeerId() : false)) return peerId as PeerId;\n // if(typeof(peerId) === 'string' && /^[uc]/.test(peerId)) return peerId as PeerId;\n // if(typeof(peerId) === 'number') return peerId;\n else if(isObject(peerId)) {\n const userId = (peerId as Peer.peerUser).user_id;\n if(userId !== undefined) {\n return userId.toPeerId(false);\n }\n\n const chatId = (peerId as Peer.peerChannel).channel_id || (peerId as Peer.peerChat).chat_id;\n if(chatId !== undefined) {\n return chatId.toPeerId(true);\n }\n\n return NULL_PEER_ID; // maybe it is an inputPeerSelf\n // } else if(!peerId) return 'u0';\n } else if(!peerId) return NULL_PEER_ID;\n\n const isUser = (peerId as string).charAt(0) === 'u';\n const peerParams = (peerId as string).substr(1).split('_');\n\n return isUser ? peerParams[0].toPeerId() : (peerParams[0] || '').toPeerId(true);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport Modes from '../../config/modes';\nimport makeError from '../../helpers/makeError';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {logger} from '../logger';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\n */\nexport type IDBIndex = {\n indexName: string,\n keyPath: string,\n objectParameters: IDBIndexParameters\n};\n\nexport type IDBStore = {\n name: string,\n indexes?: IDBIndex[]\n};\n\nexport type IDBOptions = {\n name?: string,\n storeName: string,\n stores?: IDBStore[],\n version?: number\n};\n\nconst DEBUG = false;\n\nexport class IDB {\n private static INSTANCES: IDB[] = [];\n private openDbPromise: Promise;\n private db: IDBDatabase;\n private storageIsAvailable: boolean;\n private log: ReturnType;\n private name: string;\n private version: number;\n private stores: IDBStore[];\n\n constructor(db: Database) {\n safeAssign(this, db);\n\n if(Modes.test) {\n this.name += '_test';\n }\n\n this.storageIsAvailable = true;\n this.log = logger(['IDB', db.name].join('-'));\n this.log('constructor');\n\n this.openDatabase(true);\n\n IDB.INSTANCES.push(this);\n }\n\n public isAvailable() {\n return this.storageIsAvailable;\n }\n\n public openDatabase(createNew = false): Promise {\n if(this.openDbPromise && !createNew) {\n return this.openDbPromise;\n }\n\n const createIndexes = (os: IDBObjectStore, store: IDBStore) => {\n const indexNames = Array.from(os.indexNames);\n for(const indexName of indexNames) {\n os.deleteIndex(indexName);\n }\n\n if(!store.indexes?.length) {\n return;\n }\n\n for(const index of store.indexes) {\n if(os.indexNames.contains(index.indexName)) {\n continue;\n }\n\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\n }\n };\n\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\n const os = db.createObjectStore(store.name);\n createIndexes(os, store);\n };\n\n try {\n var request = indexedDB.open(this.name, this.version);\n\n if(!request) {\n return Promise.reject();\n }\n } catch(error) {\n this.log.error('error opening db', (error as Error).message);\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n let finished = false;\n setTimeout(() => {\n if(!finished) {\n request.onerror(makeError('IDB_CREATE_TIMEOUT') as Event);\n }\n }, 3000);\n\n return this.openDbPromise = new Promise((resolve, reject) => {\n request.onsuccess = (event) => {\n finished = true;\n const db = request.result;\n let calledNew = false;\n\n this.log('Opened');\n\n db.onerror = (error) => {\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', error);\n reject(error);\n };\n\n db.onclose = (e) => {\n this.log.error('closed:', e);\n !calledNew && this.openDatabase();\n };\n\n db.onabort = (e) => {\n this.log.error('abort:', e);\n const transaction = e.target as IDBTransaction;\n\n this.openDatabase(calledNew = true);\n\n if(transaction.onerror) {\n transaction.onerror(e);\n }\n\n db.close();\n };\n\n db.onversionchange = (e) => {\n this.log.error('onversionchange, lol?');\n };\n\n resolve(this.db = db);\n };\n\n request.onerror = (event) => {\n finished = true;\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', event);\n reject(event);\n };\n\n request.onupgradeneeded = (event) => {\n finished = true;\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\n\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n this.stores.forEach((store) => {\n /* if(db.objectStoreNames.contains(store.name)) {\n //if(event.oldVersion === 1) {\n db.deleteObjectStore(store.name);\n //}\n } */\n\n if(!db.objectStoreNames.contains(store.name)) {\n createObjectStore(db, store);\n } else {\n const txn = target.transaction;\n const os = txn.objectStore(store.name);\n createIndexes(os, store);\n }\n });\n };\n });\n }\n\n public static create>(db: T) {\n return this.INSTANCES.find((instance) => instance.name === db.name) ?? new IDB(db);\n }\n\n public static closeDatabases(preserve?: IDB) {\n this.INSTANCES.forEach((storage) => {\n if(preserve && preserve === storage) {\n return;\n }\n\n const db = storage.db;\n if(db) {\n db.onclose = () => {};\n db.close();\n }\n });\n }\n}\n\nexport default class IDBStorage, StoreName extends string = T['stores'][0]['name']> {\n private log: ReturnType;\n private storeName: T['stores'][0]['name'];\n private idb: IDB;\n\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\n this.storeName = storeName;\n this.log = logger(['IDB', db.name, storeName].join('-'));\n this.idb = IDB.create(db);\n }\n\n /**\n * ! WARNING ! function requires at least one opened connection\n */\n /* public static clearObjectStores() {\n const storage = this.STORAGES[0];\n this.closeDatabases(storage);\n\n const names = Array.from(storage.db.objectStoreNames);\n const promises = names.map((name) => storage.clear(name));\n return Promise.all(promises);\n } */\n\n /* public static deleteDatabase() {\n this.closeDatabases();\n\n const storages = this.STORAGES;\n const dbNames = Array.from(new Set(storages.map((storage) => storage.name)));\n const promises = dbNames.map((dbName) => {\n return new Promise((resolve, reject) => {\n const deleteRequest = indexedDB.deleteDatabase(dbName);\n\n deleteRequest.onerror = () => {\n reject();\n };\n\n deleteRequest.onsuccess = () => {\n resolve();\n };\n });\n });\n\n return Promise.all(promises);\n } */\n\n public delete(entryName: string | string[], storeName?: StoreName): Promise {\n // return Promise.resolve();\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.delete(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'delete: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n public clear(storeName?: StoreName): Promise {\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\n }\n\n public save(entryName: string | string[], value: any | any[], storeName?: StoreName) {\n // const handleError = (error: Error) => {\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\n // setTimeout(() => {\n // this.save(entryName, value);\n // }, 2e3);\n // } else {\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\n // }\n // };\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n value = [].concat(value);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'save: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n // public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // //return Promise.resolve(blobConstruct([blob]));\n // if(!(blob instanceof Blob)) {\n // blob = blobConstruct(blob);\n // }\n\n // return this.save(fileName, blob);\n // }\n\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\n return Promise.reject();\n }\n\n if(!(blob instanceof Blob)) {\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\n return this.storagePutB64String(db, fileName, address).then(() => {\n return blob;\n });\n }\n\n try {\n var reader = new FileReader();\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n let promise = new Promise((resolve, reject) => {\n reader.onloadend = () => {\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\n resolve(blob);\n }, reject);\n }\n\n reader.onerror = reject;\n });\n\n\n try {\n reader.readAsDataURL(blob);\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n return promise;\n }\n\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\n try {\n var objectStore = db.transaction([this.storeName], 'readwrite')\n .objectStore(this.storeName);\n var request = objectStore.put(b64string, fileName);\n } catch(error) {\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n resolve();\n };\n\n request.onerror = reject;\n });\n }\n\n public getBlobSize(blob: any) {\n return blob.size || blob.byteLength || blob.length;\n } */\n\n public get(entryName: string[], storeName?: StoreName): Promise;\n public get(entryName: string, storeName?: StoreName): Promise;\n public get(entryName: string | string[], storeName?: StoreName): Promise | Promise {\n // return Promise.reject();\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n if(!entryName) {\n return undefined;\n }\n\n entryName = [].concat(entryName);\n } else if(!entryName.length) {\n return Promise.resolve([]) as any;\n }\n\n return this.getObjectStore('readonly', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.get(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'get: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n private getObjectStore(\n mode: IDBTransactionMode,\n callback: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[],\n log?: string,\n storeName = this.storeName\n ) {\n let perf: number;\n\n if(log) {\n perf = performance.now();\n this.log(log + ': start');\n }\n\n return this.idb.openDatabase().then((db) => {\n return new Promise((resolve, reject) => {\n /* if(mode === 'readwrite') {\n return;\n } */\n\n const transaction = db.transaction([storeName], mode);\n\n const onError = () => {\n clearTimeout(timeout);\n reject(transaction.error);\n };\n\n // let resolved = false;\n const onComplete = (/* what: string */) => {\n clearTimeout(timeout);\n\n if(log) {\n this.log(log + ': end', performance.now() - perf/* , what */);\n }\n\n // if(resolved) {\n // return;\n // }\n\n // resolved = true;\n const results = requests.map((r) => r.result);\n resolve(isArray ? results : results[0]);\n };\n\n transaction.onerror = onError;\n\n // * have to wait while clearing or setting something\n const waitForTransactionComplete = mode === 'readwrite';\n if(waitForTransactionComplete) {\n transaction.oncomplete = () => onComplete(/* 'transaction' */);\n }\n\n const timeout = setTimeout(() => {\n this.log.error('transaction not finished', transaction, log);\n }, 10000);\n\n /* transaction.addEventListener('abort', (e) => {\n //handleError();\n this.log.error('IndexedDB: transaction abort!', transaction.error);\n }); */\n\n const callbackResult = callback(transaction.objectStore(storeName));\n\n const isArray = Array.isArray(callbackResult);\n const requests: IDBRequest[] = isArray ? callbackResult : [].concat(callbackResult) as any;\n\n if(waitForTransactionComplete) {\n return;\n }\n\n const length = requests.length;\n let left = length;\n\n const onRequestFinished = () => {\n if(transaction.error) {\n return;\n }\n\n if(!--left) {\n onComplete(/* 'requests' */);\n }\n };\n\n for(let i = 0; i < length; ++i) {\n const request = requests[i];\n request.onerror = onError;\n request.onsuccess = onRequestFinished;\n }\n });\n });\n }\n\n public getAll(storeName?: StoreName): Promise {\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '', storeName);\n }\n\n /* public getAllKeys(): Promise> {\n console.time('getAllEntries');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.getAllKeys();\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var result = event.target.result;\n resolve(result);\n console.timeEnd('getAllEntries');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public isFileExists(fileName: string): Promise {\n console.time('isFileExists');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.openCursor(fileName);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var cursor = event.target.result;\n resolve(!!cursor);\n console.timeEnd('isFileExists');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public getFileWriter(fileName: string, mimeType: string) {\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\n return this.saveFile(fileName, blob);\n });\n\n return Promise.resolve(fakeWriter);\n } */\n}\n","import type ENVIRONMENT from '.';\n\nlet environment: typeof ENVIRONMENT;\nexport function getEnvironment() {\n return environment;\n}\n\nexport function setEnvironment(env: typeof environment) {\n return environment = env;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, PollResults, Poll, WebPage, GroupCall, GroupCallParticipant, ReactionCount, MessagePeerReaction, PhoneCall, Config, Reaction} from '../layer';\nimport type {Dialog, ForumTopic, MessagesStorageKey, MyMessage} from './appManagers/appMessagesManager';\nimport type {MyDialogFilter} from './storages/filters';\nimport type {Folder} from './storages/dialogs';\nimport type {UserTyping} from './appManagers/appProfileManager';\nimport type {MyDraftMessage} from './appManagers/appDraftsManager';\nimport type {ConnectionStatusChange} from './mtproto/connectionStatus';\nimport type {GroupCallId} from './appManagers/appGroupCallsManager';\nimport type {AppManagers} from './appManagers/managers';\nimport type {State} from '../config/state';\nimport type {Progress} from './appManagers/appDownloadManager';\nimport type {CallId} from './appManagers/appCallsManager';\nimport type {MyDocument} from './appManagers/appDocsManager';\nimport type {MTAppConfig} from './mtproto/appConfig';\nimport {NULL_PEER_ID, UserAuth} from './mtproto/mtproto_config';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport MTProtoMessagePort from './mtproto/mtprotoMessagePort';\nimport {IS_WORKER} from '../helpers/context';\n\nexport type BroadcastEvents = {\n 'chat_full_update': ChatId,\n 'chat_update': ChatId,\n 'chat_toggle_forum': {chatId: ChatId, enabled: boolean},\n 'chat_participant': Update.updateChannelParticipant,\n\n 'channel_update': ChatId,\n\n 'user_update': UserId,\n 'user_auth': UserAuth,\n 'user_full_update': UserId,\n\n 'peer_pinned_messages': {peerId: PeerId, mids?: number[], pinned?: boolean, unpinAll?: true},\n 'peer_pinned_hidden': {peerId: PeerId, maxId: number},\n 'peer_typings': {peerId: PeerId, threadId?: number, typings: UserTyping[]},\n 'peer_block': {peerId: PeerId, blocked: boolean},\n 'peer_title_edit': {peerId: PeerId, threadId?: number},\n 'peer_bio_edit': PeerId,\n 'peer_deleted': PeerId, // left chat, deleted user dialog, left channel\n 'peer_full_update': PeerId,\n\n 'filter_delete': MyDialogFilter,\n 'filter_update': MyDialogFilter,\n 'filter_new': MyDialogFilter,\n 'filter_order': number[],\n\n 'folder_unread': Omit,\n\n 'dialog_draft': {peerId: PeerId, dialog: Dialog | ForumTopic, drop: boolean, draft: MyDraftMessage | undefined},\n 'dialog_unread': {peerId: PeerId, dialog: Dialog | ForumTopic},\n 'dialog_flush': {peerId: PeerId, dialog: Dialog},\n 'dialog_drop': Dialog | ForumTopic,\n 'dialog_migrate': {migrateFrom: PeerId, migrateTo: PeerId},\n // 'dialog_top': Dialog,\n 'dialog_notify_settings': Dialog | ForumTopic,\n // 'dialog_order': {dialog: Dialog, pos: number},\n 'dialogs_multiupdate': Map}>,\n\n 'history_append': {storageKey: MessagesStorageKey, message: Message.message},\n 'history_update': {storageKey: MessagesStorageKey, message: MyMessage, sequential?: boolean},\n 'history_reply_markup': {peerId: PeerId},\n 'history_multiappend': MyMessage,\n 'history_delete': {peerId: PeerId, msgs: Set},\n 'history_forbidden': PeerId,\n 'history_reload': PeerId,\n // 'history_request': void,\n\n 'message_edit': {storageKey: MessagesStorageKey, peerId: PeerId, mid: number, message: MyMessage},\n 'message_sent': {storageKey: MessagesStorageKey, tempId: number, tempMessage: any, mid: number, message: MyMessage},\n 'message_error': {storageKey: MessagesStorageKey, tempId: number, error: ApiError},\n 'message_transcribed': {peerId: PeerId, mid: number, text: string, pending?: boolean},\n 'messages_views': {peerId: PeerId, mid: number, views: number}[],\n 'messages_reactions': {message: Message.message, changedResults: ReactionCount[]}[],\n 'messages_pending': void,\n 'messages_read': void,\n 'messages_downloaded': {peerId: PeerId, mids: number[]},\n 'messages_media_read': {peerId: PeerId, mids: number[]},\n\n 'replies_updated': Message.message,\n\n 'scheduled_new': Message.message,\n 'scheduled_delete': {peerId: PeerId, mids: number[]},\n\n 'album_edit': {peerId: PeerId, groupId: string, deletedMids: number[], messages: Message.message[]},\n\n 'stickers_installed': StickerSet.stickerSet,\n 'stickers_deleted': StickerSet.stickerSet,\n 'stickers_updated': {type: 'recent' | 'faved', stickers: MyDocument[]},\n 'stickers_top': Long,\n 'sticker_updated': {type: 'recent' | 'faved', document: MyDocument, faved: boolean},\n\n 'state_cleared': void,\n 'state_synchronized': ChatId | void,\n 'state_synchronizing': ChatId | void,\n\n 'contacts_update': UserId,\n 'avatar_update': {peerId: PeerId, threadId?: number},\n 'poll_update': {poll: Poll, results: PollResults},\n 'invalidate_participants': ChatId,\n // 'channel_settings': {channelId: number},\n 'webpage_updated': {id: WebPage.webPage['id'], msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[]},\n\n 'connection_status_change': ConnectionStatusChange,\n 'settings_updated': {key: string, value: any, settings: State['settings']},\n 'draft_updated': {peerId: PeerId, threadId: number, draft: MyDraftMessage | undefined, force?: boolean},\n\n 'background_change': void,\n\n 'privacy_update': Update.updatePrivacy,\n\n 'notify_settings': Update.updateNotifySettings,\n 'notify_peer_type_settings': {key: Exclude, settings: PeerNotifySettings},\n\n 'notification_reset': string,\n 'notification_cancel': string,\n\n 'language_change': string,\n\n 'theme_change': void,\n\n 'media_play': void,\n\n 'emoji_recent': AppEmoji,\n\n 'download_progress': Progress,\n 'document_downloading': DocId,\n 'document_downloaded': DocId,\n\n 'choosing_sticker': boolean\n\n 'group_call_update': GroupCall,\n 'group_call_participant': {groupCallId: GroupCallId, participant: GroupCallParticipant},\n // 'group_call_video_track_added': {instance: GroupCallInstance}\n\n 'call_update': PhoneCall,\n 'call_signaling': {callId: CallId, data: Uint8Array},\n\n 'quick_reaction': Reaction,\n\n 'service_notification': Update.updateServiceNotification,\n\n 'logging_out': void,\n\n 'payment_sent': {peerId: PeerId, mid: number, receiptMessage: Message.messageService}\n\n 'premium_toggle': boolean,\n 'premium_toggle_private': {isNew: boolean, isPremium: boolean},\n\n 'config': Config,\n 'app_config': MTAppConfig\n};\n\nexport type BroadcastEventsListeners = {\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\n};\n\nexport class RootScope extends EventListenerBase {\n public myId: PeerId;\n private connectionStatus: {[name: string]: ConnectionStatusChange};\n public settings: State['settings'];\n public managers: AppManagers;\n public premium: boolean;\n\n constructor() {\n super();\n\n this.myId = NULL_PEER_ID;\n this.connectionStatus = {};\n this.premium = false;\n\n this.addEventListener('user_auth', ({id}) => {\n this.myId = id.toPeerId();\n });\n\n this.addEventListener('premium_toggle_private', ({isNew, isPremium}) => {\n this.premium = isPremium;\n this.dispatchEventSingle('premium_toggle', isPremium);\n });\n\n this.addEventListener('connection_status_change', (status) => {\n this.connectionStatus[status.name] = status;\n });\n\n this.dispatchEvent = (e, ...args) => {\n super.dispatchEvent(e, ...args);\n MTProtoMessagePort.getInstance().invokeVoid('event', {name: e as string, args});\n };\n\n if(!IS_WORKER) {\n this.addEventListener('settings_updated', ({settings}) => {\n this.settings = settings;\n });\n }\n }\n\n public getConnectionStatus() {\n return this.connectionStatus;\n }\n\n public getPremium() {\n return this.premium;\n }\n\n public dispatchEventSingle(...args: any[]) {\n // @ts-ignore\n super.dispatchEvent(...args);\n }\n}\n\nconst rootScope = new RootScope();\nMOUNT_CLASS_TO.rootScope = rootScope;\nexport default rootScope;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {State} from '../../config/state';\nimport rootScope from '../rootScope';\nimport stateStorage from '../stateStorage';\nimport setDeepProperty from '../../helpers/object/setDeepProperty';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\n\nexport class AppStateManager {\n private state: State = {} as any;\n private storage = stateStorage;\n\n // ! for mtproto worker use only\n public newVersion: string;\n public oldVersion: string;\n public userId: UserId;\n\n public getState() {\n return Promise.resolve(this.state);\n }\n\n public setByKey(key: string, value: any) {\n setDeepProperty(this.state, key, value);\n\n const first = key.split('.')[0] as keyof State;\n if(first === 'settings') {\n rootScope.dispatchEvent('settings_updated', {key, value, settings: this.state.settings});\n }\n\n this.pushToState(first, this.state[first]);\n }\n\n public pushToState(key: T, value: State[T], direct = true, onlyLocal?: boolean) {\n if(direct) {\n this.state[key] = value;\n }\n\n this.setKeyValueToStorage(key, value, onlyLocal);\n }\n\n public setKeyValueToStorage(key: T, value: State[T] = this.state[key], onlyLocal?: boolean) {\n MTProtoMessagePort.getInstance().invokeVoid('mirror', {name: 'state', key, value});\n\n this.storage.set({\n [key]: value\n }, onlyLocal);\n }\n\n /* public resetState() {\n for(let i in this.state) {\n // @ts-ignore\n this.state[i] = false;\n }\n sessionStorage.set(this.state).then(() => {\n location.reload();\n });\n } */\n}\n\nconst appStateManager = new AppStateManager();\nexport default appStateManager;\n","import getDeepProperty from './getDeepProperty';\n\nexport default function setDeepProperty(object: any, key: string, value: any) {\n const splitted = key.split('.');\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport pause from '../../../helpers/schedulers/pause';\nimport {DcId} from '../../../types';\nimport {logger, LogTypes} from '../../logger';\nimport type MTPNetworker from '../networker';\nimport MTTransport from './transport';\nimport Modes from '../../../config/modes';\n\n \nimport transportController from './controller';\n// import networkStats from '../networkStats';\n \n\nexport default class HTTP implements MTTransport {\n public networker: MTPNetworker;\n private log: ReturnType;\n\n private pending: Array<{\n resolve: (body: Uint8Array) => void,\n reject: any,\n body: Uint8Array\n }> = [];\n private releasing: boolean;\n\n public connected: boolean;\n private destroyed: boolean;\n private debug: boolean;\n\n constructor(protected dcId: DcId, protected url: string, logSuffix: string) {\n this.debug = Modes.debug && false;\n\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n\n this.log = logger(`HTTP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n\n this.connected = false;\n }\n\n public _send(body: Uint8Array, mode?: RequestMode) {\n const length = body.length;\n this.debug && this.log.debug('-> body length to send:', length);\n\n // networkStats.addSent(this.dcId, length);\n return fetch(this.url, {method: 'POST', body, mode}).then((response) => {\n if(response.status !== 200 && !mode) {\n response.arrayBuffer().then((buffer) => {\n this.log.error('not 200',\n new TextDecoder('utf-8').decode(new Uint8Array(buffer)));\n });\n\n throw response;\n }\n\n this.setConnected(true);\n\n // * test resending by dropping random request\n // if(Math.random() > .5) {\n // throw 'asd';\n // }\n\n return response.arrayBuffer().then((buffer) => {\n // networkStats.addReceived(this.dcId, buffer.byteLength);\n return new Uint8Array(buffer);\n });\n }, (err) => {\n this.setConnected(false);\n throw err;\n });\n }\n\n private setConnected(connected: boolean) {\n if(this.connected === connected || this.destroyed) {\n return;\n }\n\n this.connected = connected;\n\n \n transportController.setTransportValue('https', connected);\n \n }\n\n public destroy() {\n this.setConnected(false);\n this.destroyed = true;\n this.pending.forEach((pending) => pending.reject());\n this.pending.length = 0;\n }\n\n public send(body: Uint8Array) {\n if(this.networker) {\n return this._send(body);\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private async releasePending() {\n if(this.releasing) return;\n\n this.releasing = true;\n // this.log('-> messages to send:', this.pending.length);\n for(let i = 0; i < this.pending.length; ++i) {\n const pending = this.pending[i];\n const {body, resolve} = pending;\n\n try {\n const result = await this._send(body);\n resolve(result);\n this.pending.splice(i, 1);\n } catch(err) {\n this.log.error('Send plain request error:', err);\n await pause(5000);\n }\n\n --i;\n }\n\n this.releasing = false;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {logger, LogTypes} from '../../logger';\nimport Modes from '../../../config/modes';\nimport EventListenerBase from '../../../helpers/eventListenerBase';\nimport {MTConnection} from './transport';\n\n// let closeSocketBefore = Date.now() + 30e3;\n// let closeSocketAfter = Date.now() + 10e3;\n\nexport default class Socket extends EventListenerBase<{\n open: () => void,\n message: (buffer: ArrayBuffer) => any,\n close: () => void,\n}> implements MTConnection {\n private ws: WebSocket;\n private log: ReturnType;\n private debug = Modes.debug && false;\n\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\n super();\n\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n this.connect();\n\n return this;\n }\n\n private removeListeners() {\n if(!this.ws) {\n return;\n }\n\n this.ws.removeEventListener('open', this.handleOpen);\n this.ws.removeEventListener('close', this.handleClose);\n this.ws.removeEventListener('error', this.handleError);\n this.ws.removeEventListener('message', this.handleMessage);\n this.ws = undefined;\n }\n\n private connect() {\n this.ws = new WebSocket(this.url, 'binary');\n this.ws.binaryType = 'arraybuffer';\n this.ws.addEventListener('open', this.handleOpen);\n this.ws.addEventListener('close', this.handleClose);\n this.ws.addEventListener('error', this.handleError);\n this.ws.addEventListener('message', this.handleMessage);\n\n // if(Date.now() < closeSocketBefore) {\n // if(Date.now() >= closeSocketAfter) {\n // this.ws.close();\n // }\n }\n\n public close() {\n if(!this.ws) {\n return;\n }\n\n this.log('close execution');\n\n try {\n this.ws.close();\n } catch(err) {\n\n }\n this.handleClose();\n }\n\n private handleOpen = () => {\n this.log('opened');\n\n this.debug && this.log.debug('sending init packet');\n this.dispatchEvent('open');\n };\n\n private handleError = (e: Event) => {\n this.log.error('handleError', e);\n this.close();\n };\n\n private handleClose = (e?: CloseEvent) => {\n this.log('closed', e/* , this.pending, this.ws.bufferedAmount */);\n\n this.removeListeners();\n this.dispatchEvent('close');\n };\n\n private handleMessage = (event: MessageEvent) => {\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\n\n this.dispatchEvent('message', event.data as ArrayBuffer);\n };\n\n public send = (body: Uint8Array) => {\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n this.ws.send(body);\n };\n}\n","export default function randomize(arr: T) {\n if(crypto && 'getRandomValues' in crypto) {\n crypto.getRandomValues(arr);\n } else {\n throw new Error('NO_SECURE_RANDOM');\n }\n\n return arr;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import aesjs from 'aes-js';\nimport randomize from '../../../helpers/array/randomize';\nimport cryptoMessagePort from '../../crypto/cryptoMessagePort';\nimport {Codec} from './codec';\n\n/*\n@cryptography/aes ะฝะต ั€ะฐะฑะพั‚ะฐะตั‚ ั ะผะฐััะธะฒะฐะผะธ ะบะพั‚ะพั€ั‹ะต ะฝะต ะบั€ะฐั‚ะฝั‹ 4, ะฟะพัั‚ะพะผัƒ ะธัะฟะพะปัŒะทัƒัŽ intermediate ะฐ ะฝะต abridged\n*/\nexport default class Obfuscation {\n /* private enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\n private dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\n\n private id: number;\n private idPromise: Promise;\n private process: (data: Uint8Array, operation: 'encrypt' | 'decrypt') => ReturnType;\n\n // private cryptoEncKey: CryptoKey;\n // private cryptoDecKey: CryptoKey;\n // private cryptoKey: CryptoKey;\n\n // private encIv: Uint8Array;\n // private decIv: Uint8Array;\n\n // private decIvCounter: Counter;\n\n public async init(codec: Codec) {\n if(this.idPromise !== undefined) {\n this.release();\n }\n\n const initPayload = new Uint8Array(64);\n randomize(initPayload);\n\n while(true) {\n const val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | initPayload[0];\n const val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | initPayload[4];\n if(initPayload[0] !== 0xef &&\n val !== 0x44414548 &&\n val !== 0x54534f50 &&\n val !== 0x20544547 &&\n val !== 0x4954504f &&\n val !== 0xeeeeeeee &&\n val !== 0xdddddddd &&\n val2 !== 0x00000000) {\n // initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\n break;\n }\n randomize(initPayload);\n }\n\n // //////////////////////initPayload.subarray(60, 62).hex = dcId;\n /* initPayload.set(new Uint8Array([161, 208, 67, 71, 118, 109, 20, 111, 113, 255, 134, 10, 159, 241, 7, 44, 217, 82, 187, 76, 108, 131, 200, 186, 33, 57, 177, 251, 52, 34, 18, 54, 65, 105, 37, 89, 38, 20, 47, 168, 126, 181, 24, 138, 212, 68, 60, 150, 225, 37, 181, 4, 201, 50, 72, 151, 168, 143, 204, 169, 81, 187, 241, 23]));\n console.log('initPayload', initPayload); */\n\n const reversedPayload = initPayload.slice().reverse();\n\n const encKey = initPayload.slice(8, 40);\n const encIv = /* this.encIv = */initPayload.slice(40, 56);\n const decKey = reversedPayload.slice(8, 40);\n const decIv = /* this.decIv = */reversedPayload.slice(40, 56);\n\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\n\n // console.log('encKey', encKey.hex, encIv.hex);\n // console.log('decKey', decKey.hex, decIv.hex);\n\n const idPromise = this.idPromise = cryptoMessagePort.invokeCrypto('aes-ctr-prepare', {\n encKey,\n encIv,\n decKey,\n decIv\n });\n\n this.process = async(data, operation) => {\n await idPromise;\n return this._process(data, operation);\n };\n\n this.id = await idPromise;\n\n this.process = this._process;\n\n // this.decIvCounter = new Counter(this.decIv);\n /* const key = this.cryptoEncKey = await subtle.importKey(\n 'raw',\n encKey,\n {name: 'AES-CTR'},\n false,\n ['encrypt']\n ); */\n\n // this.cryptoDecKey = await subtle.importKey(\n // 'raw',\n // decKey,\n // {name: 'AES-CTR'},\n // false,\n // ['encrypt']\n // );\n\n // this.cryptoKey = await subtle.importKey(\n // 'raw',\n // encKey,\n // {name: 'AES-CTR'},\n // false,\n // ['encrypt', 'decrypt']\n // );\n\n initPayload.set(codec.obfuscateTag, 56);\n const encrypted = await this.encode(initPayload.slice());\n\n // console.log('encrypted', encrypted);\n\n initPayload.set(encrypted.slice(56, 64), 56);\n\n return initPayload;\n }\n\n /* public encode(payload: Uint8Array) {\n let startTime = performance.now();\n let res = this.enc.encrypt(payload);\n let time = performance.now() - startTime;\n\n try {\n startTime = performance.now();\n let arr = this.encNew.encrypt(payload);\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\n let resNew = new Uint8Array(bytesFromWordss(arr));\n let time2 = performance.now() - startTime;\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\n } catch(err) {\n console.error('Obfuscation: error:', err);\n }\n\n return res;\n }\n\n public decode(payload: Uint8Array) {\n let res = this.dec.encrypt(payload);\n\n try {\n let arr = this.decNew.decrypt(payload);\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\n let resNew = new Uint8Array(bytesFromWordss(arr));\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\n } catch(err) {\n console.error('Obfuscation: error:', err);\n }\n\n return res;\n } */\n\n private _process = (data: Uint8Array, operation: 'encrypt' | 'decrypt') => {\n return cryptoMessagePort.invokeCryptoNew({\n method: 'aes-ctr-process',\n args: [{id: this.id, data, operation}],\n transfer: [data.buffer]\n }) as Promise;\n };\n\n public encode(payload: Uint8Array) {\n /* return subtle.encrypt({\n name: 'AES-CTR',\n counter: this.encIv,\n length: 64\n },\n this.cryptoEncKey,\n payload\n ); */\n return this.process(payload, 'encrypt');\n }\n\n public decode(payload: Uint8Array) {\n return this.process(payload, 'decrypt');\n }\n\n public async release() {\n const idPromise = this.idPromise;\n if(idPromise === undefined) {\n return;\n }\n\n this.id = undefined;\n this.idPromise = undefined;\n\n const id = await idPromise;\n cryptoMessagePort.invokeCrypto('aes-ctr-destroy', id);\n }\n\n public destroy() {\n this.release();\n }\n\n // public encode(payload: Uint8Array) {\n // let res = this.encNew.encrypt(payload);\n // let bytes = new Uint8Array(bytesFromWordss(res));\n\n // return bytes;\n // }\n\n // public async decode(payload: Uint8Array) {\n // const counter = this.decIvCounter.counter.slice();\n // this.decIvCounter.increment();\n\n // const n: ArrayBuffer = await subtle.encrypt({\n // name: 'AES-CTR',\n // counter: counter,\n // length: 64\n // },\n // this.cryptoDecKey,\n // payload\n // );\n\n // const decoded = this.decNew.update(payload);\n\n // console.log('decode', bytesToHex(decoded), 'new', n, bytesToHex(new Uint8Array(n)));\n\n // return decoded;\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { bytesFromHex, addPadding } from \"../../bin_utils\";\nimport {Codec} from './codec';\n\nclass AbridgedPacketCodec implements Codec {\n public tag = 0xef;\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\n\n public encodePacket(data: Uint8Array) {\n const len = data.byteLength >> 2;\n let header: Uint8Array;\n if(len < 127) {\n header = new Uint8Array([len]);\n } else { // Length: payload length, divided by four, and encoded as 3 length bytes (little endian)\n // header = new Uint8Array([0x7f, ...addPadding(bytesFromHex(len.toString(16)).reverse(), 3, true)/* .reverse() */]);\n header = new Uint8Array([0x7f, len & 0xFF, (len >> 8) & 0xFF, (len >> 16) & 0xFF]);\n // console.log('got nobody cause im braindead', header, len);\n }\n\n return header.concat(data);\n // return new Uint8Array([...header, ...data]);\n }\n\n public readPacket(data: Uint8Array) {\n let length = data[0];\n if(length >= 127) { // 0x7f\n length = data[1] | (data[2] << 8) | (data[3] << 16);\n\n return data.slice(4, length << 2 + 1); // need +1\n }\n\n return data.slice(1, length << 2 + 1); // need +1\n }\n}\n\nexport default new AbridgedPacketCodec();\n","export default function bytesToHex(bytes: ArrayLike) {\n const length = bytes.length;\n const arr: string[] = new Array(length);\n for(let i = 0; i < length; ++i) {\n arr[i] = (bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16);\n }\n return arr.join('');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../../config/modes';\nimport {logger, LogTypes} from '../../logger';\nimport MTPNetworker from '../networker';\nimport Obfuscation from './obfuscation';\nimport MTTransport, {MTConnection, MTConnectionConstructable} from './transport';\n// import intermediatePacketCodec from './intermediate';\nimport abridgedPacketCodec from './abridged';\n// import paddedIntermediatePacketCodec from './padded';\nimport {ConnectionStatus} from '../connectionStatus';\n\n \nimport transportController from './controller';\nimport bytesToHex from '../../../helpers/bytes/bytesToHex';\n// import networkStats from '../networkStats';\nimport ctx from '../../../environment/ctx';\n \n\nexport default class TcpObfuscated implements MTTransport {\n private codec = abridgedPacketCodec;\n private obfuscation = new Obfuscation();\n public networker: MTPNetworker;\n\n private pending: Array> = [];\n\n private debug = Modes.debug && false/* true */;\n private log: ReturnType;\n public connected = false;\n private lastCloseTime: number;\n public connection: MTConnection;\n\n private autoReconnect = true;\n private reconnectTimeout: number;\n private releasingPending: boolean;\n\n // private debugPayloads: MTPNetworker['debugRequests'] = [];\n\n constructor(\n private Connection: MTConnectionConstructable,\n private dcId: number,\n private url: string,\n private logSuffix: string,\n private retryTimeout: number\n ) {\n let logTypes = LogTypes.Error | LogTypes.Log;\n if(this.debug) logTypes |= LogTypes.Debug;\n this.log = logger(`TCP-${dcId}` + logSuffix, logTypes);\n this.log('constructor');\n\n this.connect();\n }\n\n private onOpen = async() => {\n this.connected = true;\n\n \n transportController.setTransportOpened('websocket');\n \n\n const initPayload = await this.obfuscation.init(this.codec);\n if(!this.connected) {\n return;\n }\n\n this.connection.send(initPayload);\n\n if(this.networker) {\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\n this.networker.setConnectionStatus(ConnectionStatus.Connected);\n this.networker.cleanupSent();\n this.networker.resend();\n }/* else {\n for(const pending of this.pending) {\n if(pending.encoded && pending.body) {\n pending.encoded = this.encodeBody(pending.body);\n }\n }\n } */\n\n setTimeout(() => {\n this.releasePending();\n }, 0);\n };\n\n private onMessage = async(buffer: ArrayBuffer) => {\n // networkStats.addReceived(this.dcId, buffer.byteLength);\n\n let data = await this.obfuscation.decode(new Uint8Array(buffer));\n data = this.codec.readPacket(data);\n\n if(this.networker) { // authenticated!\n // this.pending = this.pending.filter((p) => p.body); // clear pending\n\n this.debug && this.log.debug('redirecting to networker', data.length);\n this.networker.parseResponse(data).then((response) => {\n this.debug && this.log.debug('redirecting to networker response:', response);\n\n try {\n this.networker.processMessage(response.response, response.messageId, response.sessionId);\n } catch(err) {\n this.log.error('handleMessage networker processMessage error', err);\n }\n\n // this.releasePending();\n }).catch((err) => {\n this.log.error('handleMessage networker parseResponse error', err);\n });\n\n // this.dd();\n return;\n }\n\n // console.log('got hex:', data.hex);\n const pending = this.pending.shift();\n if(!pending) {\n this.debug && this.log.debug('no pending for res:', bytesToHex(data));\n return;\n }\n\n pending.resolve(data);\n };\n\n private onClose = () => {\n this.clear();\n\n let needTimeout: number, retryAt: number;\n if(this.autoReconnect) {\n const time = Date.now();\n const diff = time - this.lastCloseTime;\n needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\n retryAt = time + needTimeout;\n }\n\n if(this.networker) {\n this.networker.setConnectionStatus(ConnectionStatus.Closed, retryAt);\n this.pending.length = 0;\n }\n\n if(this.autoReconnect) {\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\n this.reconnectTimeout = ctx.setTimeout(this.reconnect, needTimeout);\n } else {\n this.log('reconnect isn\\'t needed');\n }\n };\n\n public clear() {\n \n if(this.connected) {\n transportController.setTransportClosed('websocket');\n }\n \n\n this.connected = false;\n\n if(this.connection) {\n this.connection.removeEventListener('open', this.onOpen);\n this.connection.removeEventListener('close', this.onClose);\n this.connection.removeEventListener('message', this.onMessage);\n this.connection = undefined;\n }\n }\n\n /**\n * invoke only when closed\n */\n public reconnect = () => {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n\n if(this.connection) {\n return;\n }\n\n this.log('trying to reconnect...');\n this.lastCloseTime = Date.now();\n\n if(!this.networker) {\n for(const pending of this.pending) {\n if(pending.bodySent) {\n pending.bodySent = false;\n }\n }\n } else {\n this.networker.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.connect();\n }\n\n public forceReconnect() {\n this.close();\n this.reconnect();\n }\n\n public destroy() {\n this.setAutoReconnect(false);\n this.close();\n\n if(this.obfuscation) {\n this.obfuscation.destroy();\n }\n\n this.pending.forEach((pending) => {\n if(pending.reject) {\n pending.reject();\n }\n });\n this.pending.length = 0;\n }\n\n public close() {\n const connection = this.connection;\n if(connection) {\n const connected = this.connected;\n this.clear();\n if(connected) { // wait for buffered messages if they are there\n connection.addEventListener('message', this.onMessage);\n connection.addEventListener('close', () => {\n connection.removeEventListener('message', this.onMessage);\n }, {once: true});\n connection.close();\n }\n }\n }\n\n /**\n * Will connect if enable and disconnected \\\n * Will reset reconnection timeout if disable\n */\n public setAutoReconnect(enable: boolean) {\n this.autoReconnect = enable;\n\n if(!enable) {\n if(this.reconnectTimeout !== undefined) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = undefined;\n }\n } else if(!this.connection && this.reconnectTimeout === undefined) {\n this.reconnect();\n }\n }\n\n private connect() {\n if(this.connection) {\n this.close();\n }\n\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\n this.connection.addEventListener('open', this.onOpen);\n this.connection.addEventListener('close', this.onClose);\n this.connection.addEventListener('message', this.onMessage);\n }\n\n public changeUrl(url: string) {\n if(this.url === url) {\n return;\n }\n\n this.url = url;\n this.forceReconnect();\n }\n\n private encodeBody(body: Uint8Array) {\n const toEncode = this.codec.encodePacket(body);\n\n // this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\n const encoded = this.obfuscation.encode(toEncode);\n // this.log('send after obf:', enc.hex);\n\n return encoded;\n }\n\n public send(body: Uint8Array) {\n this.debug && this.log.debug('-> body length to pending:', body.length);\n\n const encoded: typeof body = /* this.connected ? this.encodeBody(body) : */undefined;\n\n // return;\n\n if(this.networker) {\n this.pending.push({body, encoded});\n this.releasePending();\n } else {\n const promise = new Promise((resolve, reject) => {\n this.pending.push({resolve, reject, body, encoded});\n });\n\n this.releasePending();\n\n return promise;\n }\n }\n\n private async releasePending(/* tt = false */) {\n if(!this.connected || this.releasingPending) {\n // this.connect();\n return;\n }\n\n this.releasingPending = true;\n\n /* if(!tt) {\n this.releasePendingDebounced();\n return;\n } */\n\n // this.log('-> messages to send:', this.pending.length);\n let length = this.pending.length;\n let sent = false;\n // for(let i = length - 1; i >= 0; --i) {\n for(let i = 0; i < length; ++i) {\n const pending = this.pending[i];\n if(!pending) {\n break;\n }\n\n const {body, bodySent} = pending;\n if(body && !bodySent) {\n // this.debugPayloads.push({before: body.slice(), after: enc});\n\n this.debug && this.log.debug('-> body length to send:', body.length);\n\n // if(!encoded) {\n // encoded = pending.encoded = this.encodeBody(body);\n // }\n\n const encoded = pending.encoded ??= await this.encodeBody(body);\n if(!this.connected) {\n break;\n }\n\n // networkStats.addSent(this.dcId, encoded.byteLength);\n this.connection.send(encoded);\n\n if(!pending.resolve) { // remove if no response needed\n this.pending.splice(i--, 1);\n length--;\n } else {\n pending.bodySent = true;\n }\n\n sent = true;\n // delete pending.body;\n }\n }\n\n this.releasingPending = undefined;\n\n if(this.pending.length && sent) {\n this.releasePending();\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport MTTransport, {MTConnectionConstructable} from './transports/transport';\nimport Modes from '../../config/modes';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\n\n \nimport HTTP from './transports/http';\n \n\n \nimport Socket from './transports/websocket';\nimport TcpObfuscated from './transports/tcpObfuscated';\nimport {IS_WEB_WORKER} from '../../helpers/context';\nimport {DcId} from '../../types';\nimport {getEnvironment} from '../../environment/utils';\n\n \n \n \n\n \n\nexport type TransportType = 'websocket' | 'https' | 'http';\nexport type ConnectionType = 'client' | 'download' | 'upload';\ntype Servers = {\n [transportType in TransportType]: {\n [connectionType in ConnectionType]: {\n [dcId: DcId]: MTTransport[]\n }\n }\n};\n\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\nconst PREMIUM_SUFFIX = '_premium';\n\nexport function getTelegramConnectionSuffix(connectionType: ConnectionType) {\n return connectionType === 'client' ? '' : '-1';\n}\n\n \nexport function constructTelegramWebSocketUrl(dcId: DcId, connectionType: ConnectionType, premium?: boolean) {\n const suffix = getTelegramConnectionSuffix(connectionType);\n const path = connectionType !== 'client' ? 'apiws' + TEST_SUFFIX + (premium ? PREMIUM_SUFFIX : '') : ('apiws' + TEST_SUFFIX);\n const chosenServer = `wss://${App.suffix.toLowerCase()}ws${dcId}${suffix}.web.telegram.org/${path}`;\n\n return chosenServer;\n}\n \n\nexport class DcConfigurator {\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\n\n private dcOptions = Modes.test ?\n [\n {id: 1, host: '149.154.175.10', port: 80},\n {id: 2, host: '149.154.167.40', port: 80},\n {id: 3, host: '149.154.175.117', port: 80}\n ] :\n [\n {id: 1, host: '149.154.175.50', port: 80},\n {id: 2, host: '149.154.167.50', port: 80},\n {id: 3, host: '149.154.175.100', port: 80},\n {id: 4, host: '149.154.167.91', port: 80},\n {id: 5, host: '149.154.171.5', port: 80}\n ];\n\n public chosenServers: Servers = {} as any;\n\n \n private transportSocket = (dcId: DcId, connectionType: ConnectionType, premium?: boolean) => {\n const chosenServer = constructTelegramWebSocketUrl(dcId, connectionType, premium);\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\n\n const retryTimeout = connectionType === 'client' ? 10000 : 10000;\n\n let oooohLetMeLive: MTConnectionConstructable;\n \n oooohLetMeLive = Socket;\n \n \n \n\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\n };\n \n\n \n private transportHTTP = (dcId: DcId, connectionType: ConnectionType, premium?: boolean) => {\n let chosenServer: string;\n if(Modes.ssl || !Modes.http) {\n const suffix = getTelegramConnectionSuffix(connectionType);\n const subdomain = this.sslSubdomains[dcId - 1] + suffix;\n const path = Modes.test ? 'apiw_test1' : 'apiw1';\n chosenServer = 'https://' + subdomain + '.web.telegram.org/' + path;\n } else {\n for(const dcOption of this.dcOptions) {\n if(dcOption.id === dcId) {\n chosenServer = 'http://' + dcOption.host + (dcOption.port !== 80 ? ':' + dcOption.port : '') + '/apiw1';\n break;\n }\n }\n }\n\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\n return new HTTP(dcId, chosenServer, logSuffix);\n };\n \n\n public chooseServer(\n dcId: DcId,\n connectionType: ConnectionType = 'client',\n transportType: TransportType = Modes.transport,\n reuse = true,\n premium?: boolean\n ) {\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\n connectionType = 'client';\n } */\n\n if(!this.chosenServers.hasOwnProperty(transportType)) {\n this.chosenServers[transportType] = {\n client: {},\n download: {},\n upload: {}\n };\n }\n\n const servers = this.chosenServers[transportType][connectionType];\n\n if(!(dcId in servers)) {\n servers[dcId] = [];\n }\n\n const transports = servers[dcId];\n\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\n let transport: MTTransport;\n\n \n transport = (transportType === 'websocket' ? this.transportSocket : this.transportHTTP)(dcId, connectionType, premium);\n \n \n \n \n \n\n if(!transport) {\n console.error('No chosenServer!', dcId);\n return null;\n }\n\n if(reuse) {\n transports.push(transport);\n }\n\n return transport;\n }\n\n return transports[0];\n }\n\n public static removeTransport(obj: any, transport: T) {\n for(const transportType in obj) {\n // @ts-ignore\n for(const connectionType in obj[transportType]) {\n // @ts-ignore\n for(const dcId in obj[transportType][connectionType]) {\n // @ts-ignore\n const transports: T[] = obj[transportType][connectionType][dcId];\n indexOfAndSplice(transports, transport);\n }\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../../../config/app';\nimport deferredPromise from '../../../helpers/cancellablePromise';\nimport EventListenerBase from '../../../helpers/eventListenerBase';\nimport pause from '../../../helpers/schedulers/pause';\nimport {TransportType, DcConfigurator} from '../dcConfigurator';\nimport type HTTP from './http';\nimport type TcpObfuscated from './tcpObfuscated';\nimport MTTransport from './transport';\n\nexport class MTTransportController extends EventListenerBase<{\n change: (opened: MTTransportController['opened']) => void,\n transport: (type: TransportType) => void\n}> {\n private opened: Map;\n private transports: {[k in TransportType]?: MTTransport};\n private pinging: boolean;\n private dcConfigurator: DcConfigurator;\n\n constructor() {\n super(true);\n\n this.opened = new Map();\n /* this.addEventListener('change', (opened) => {\n this.dispatchEvent('transport', opened.get('websocket') || !opened.get('https') ? 'websocket' : 'https');\n }); */\n\n this.addEventListener('change', (opened) => {\n if(!opened.get('websocket')) {\n this.waitForWebSocket();\n }\n });\n\n // setTimeout(() => {\n // this.waitForWebSocket();\n // }, 200); // wait for first transport so won't have delay for first WS\n }\n\n public async pingTransports() {\n const dcConfigurator = this.dcConfigurator ??= new DcConfigurator();\n const timeout = 2000;\n const transports: {[k in TransportType]?: MTTransport} = this.transports = {\n https: dcConfigurator.chooseServer(App.baseDcId, 'client', 'https', false),\n websocket: dcConfigurator.chooseServer(App.baseDcId, 'client', 'websocket', false)\n };\n\n const httpPromise = deferredPromise();\n ((this.transports.https as HTTP)._send(new Uint8Array(), 'no-cors') as any as Promise)\n .then(() => httpPromise.resolve(true), () => httpPromise.resolve(false));\n setTimeout(() => httpPromise.resolve(false), timeout);\n\n const websocketPromise = deferredPromise();\n const socket = transports.websocket as TcpObfuscated;\n socket.setAutoReconnect(false);\n socket.connection.addEventListener('close', () => websocketPromise.resolve(false), {once: true});\n socket.connection.addEventListener('open', () => websocketPromise.resolve(true), {once: true});\n setTimeout(() => {\n if(websocketPromise.isFulfilled || websocketPromise.isRejected) {\n return;\n }\n\n if(socket.connection) {\n socket.connection.close();\n }\n\n websocketPromise.resolve(false);\n }, timeout);\n\n const [isHttpAvailable, isWebSocketAvailable] = await Promise.all([httpPromise, websocketPromise]);\n\n for(const transportType in transports) {\n const transport = transports[transportType as TransportType];\n transport.destroy();\n }\n\n const result = {\n https: isHttpAvailable || this.opened.get('https') > 0,\n websocket: isWebSocketAvailable || this.opened.get('websocket') > 0\n };\n\n // result.websocket = false;\n return result;\n }\n\n public async waitForWebSocket() {\n if(this.pinging) return;\n this.pinging = true;\n\n while(true) {\n const {https, websocket} = await this.pingTransports();\n if(https || websocket) {\n this.dispatchEvent('transport', websocket || !https ? 'websocket' : 'https');\n }\n\n if(websocket) {\n break;\n }\n\n await pause(10000);\n }\n\n this.pinging = false;\n }\n\n public setTransportValue(type: TransportType, value: boolean) {\n let length = this.opened.get(type) || 0;\n length += value ? 1 : -1;\n\n this.opened.set(type, length);\n this.dispatchEvent('change', this.opened);\n }\n\n public setTransportOpened(type: TransportType) {\n return this.setTransportValue(type, true);\n }\n\n public setTransportClosed(type: TransportType) {\n return this.setTransportValue(type, false);\n }\n}\n\nconst transportController = new MTTransportController();\nexport default transportController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise, {CancellablePromise} from '../../../../helpers/cancellablePromise';\nimport type {StoragesResults} from './loadStorages';\n\nconst RESET_STORAGES_PROMISE: CancellablePromise> = deferredPromise();\nexport default RESET_STORAGES_PROMISE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {CryptoMessagePort} from '../crypto/cryptoMessagePort';\nimport type {ApiFileManager} from '../mtproto/apiFileManager';\nimport type {ApiManager} from '../mtproto/apiManager';\nimport type {Authorizer} from '../mtproto/authorizer';\nimport type {DcConfigurator} from '../mtproto/dcConfigurator';\nimport type {NetworkerFactory} from '../mtproto/networkerFactory';\nimport type {PasswordManager} from '../mtproto/passwordManager';\nimport type {ReferenceDatabase} from '../mtproto/referenceDatabase';\nimport type {TimeManager} from '../mtproto/timeManager';\nimport type {RootScope} from '../rootScope';\nimport type DialogsStorage from '../storages/dialogs';\nimport type FiltersStorage from '../storages/filters';\nimport type PeersStorage from '../storages/peers';\nimport type ThumbsStorage from '../storages/thumbs';\nimport type {ApiUpdatesManager} from './apiUpdatesManager';\nimport type {AppAvatarsManager} from './appAvatarsManager';\nimport type {AppCallsManager} from './appCallsManager';\nimport type {AppChatsManager} from './appChatsManager';\nimport type {AppDocsManager} from './appDocsManager';\nimport type {AppDraftsManager} from './appDraftsManager';\nimport type {AppEmojiManager} from './appEmojiManager';\nimport type {AppGroupCallsManager} from './appGroupCallsManager';\nimport type {AppInlineBotsManager} from './appInlineBotsManager';\nimport type {AppMessagesIdsManager} from './appMessagesIdsManager';\nimport type {AppMessagesManager} from './appMessagesManager';\nimport type {AppNotificationsManager} from './appNotificationsManager';\nimport type AppPaymentsManager from './appPaymentsManager';\nimport type {AppPeersManager} from './appPeersManager';\nimport type {AppPhotosManager} from './appPhotosManager';\nimport type {AppPollsManager} from './appPollsManager';\nimport type {AppPrivacyManager} from './appPrivacyManager';\nimport type {AppProfileManager} from './appProfileManager';\nimport type {AppReactionsManager} from './appReactionsManager';\nimport type {AppStateManager} from './appStateManager';\nimport type {AppStickersManager} from './appStickersManager';\nimport type {AppStoragesManager} from './appStoragesManager';\nimport type {AppUsersManager} from './appUsersManager';\nimport type AppWebDocsManager from './appWebDocsManager';\nimport type {AppWebPagesManager} from './appWebPagesManager';\nimport type AppAttachMenuBotsManager from './appAttachMenuBotsManager';\nimport type AppSeamlessLoginManager from './appSeamlessLoginManager';\nimport type AppThemesManager from './appThemesManager';\nimport type {AppManagers} from './managers';\n\nexport class AppManager {\n protected appPeersManager: AppPeersManager;\n protected appChatsManager: AppChatsManager;\n protected appDocsManager: AppDocsManager;\n protected appPhotosManager: AppPhotosManager;\n protected appPollsManager: AppPollsManager;\n protected appUsersManager: AppUsersManager;\n protected appWebPagesManager: AppWebPagesManager;\n protected appDraftsManager: AppDraftsManager;\n protected appProfileManager: AppProfileManager;\n protected appNotificationsManager: AppNotificationsManager;\n protected apiUpdatesManager: ApiUpdatesManager;\n protected appAvatarsManager: AppAvatarsManager;\n protected appGroupCallsManager: AppGroupCallsManager;\n protected appCallsManager: AppCallsManager;\n protected appReactionsManager: AppReactionsManager;\n protected appMessagesManager: AppMessagesManager;\n protected appMessagesIdsManager: AppMessagesIdsManager;\n protected appPrivacyManager: AppPrivacyManager;\n protected appInlineBotsManager: AppInlineBotsManager;\n protected appStickersManager: AppStickersManager;\n protected referenceDatabase: ReferenceDatabase;\n protected appEmojiManager: AppEmojiManager;\n protected dialogsStorage: DialogsStorage;\n protected filtersStorage: FiltersStorage;\n protected apiManager: ApiManager;\n // protected apiManager: ApiManagerProxy;\n protected passwordManager: PasswordManager;\n protected cryptoWorker: CryptoMessagePort;\n protected apiFileManager: ApiFileManager;\n protected peersStorage: PeersStorage;\n protected thumbsStorage: ThumbsStorage;\n protected networkerFactory: NetworkerFactory;\n protected rootScope: RootScope;\n protected authorizer: Authorizer;\n protected dcConfigurator: DcConfigurator;\n protected timeManager: TimeManager;\n protected appStoragesManager: AppStoragesManager;\n protected appStateManager: AppStateManager;\n protected appWebDocsManager: AppWebDocsManager;\n protected appPaymentsManager: AppPaymentsManager;\n protected appAttachMenuBotsManager: AppAttachMenuBotsManager;\n protected appSeamlessLoginManager: AppSeamlessLoginManager;\n protected appThemesManager: AppThemesManager;\n\n public clear: (init?: boolean) => void;\n\n public setManagers(managers: AppManagers) {\n Object.assign(this, managers);\n // this.after();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type{Chat} from '../../../../layer';\nimport type{Dialog} from '../../appMessagesManager';\nimport type{User} from '../../appUsersManager';\nimport type {StoragesStorages} from './createStorages';\nimport {recordPromiseBound} from '../../../../helpers/recordPromise';\nimport {Awaited} from '../../../../types';\nimport {logger} from '../../../logger';\nimport RESET_STORAGES_PROMISE from './resetStoragesPromise';\n\nexport type StoragesResults = Awaited>;\n\nasync function loadStoragesInner(storages: StoragesStorages) {\n const recordPromise = recordPromiseBound(logger('STORAGES-LOADER'));\n const storagesKeys = Object.keys(storages) as Array;\n const storagesPromises: Promise[] = storagesKeys.map((key) => {\n const promise = storages[key].getAll();\n return recordPromise(promise, 'storage ' + (key as any as string));\n });\n\n const storagesResults: {\n users: User[],\n chats: Chat[],\n dialogs: Dialog[]\n } = {} as any;\n const arr = await Promise.all(storagesPromises);\n for(let i = 0, length = storagesKeys.length; i < length; ++i) {\n storagesResults[storagesKeys[i]] = arr[i] as any;\n }\n\n arr.splice(0, storagesKeys.length);\n\n const resetStorages = await RESET_STORAGES_PROMISE;\n if(resetStorages.size) {\n for(const key of resetStorages) {\n storagesResults[key].length = 0;\n }\n\n resetStorages.clear();\n }\n\n return storagesResults;\n}\n\nlet promise: ReturnType;\nexport default function loadStorages(storages: StoragesStorages) {\n return promise ??= loadStoragesInner(storages);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {logger} from '../logger';\nimport {AppManager} from './manager';\nimport createStorages from './utils/storages/createStorages';\nimport loadStorages from './utils/storages/loadStorages';\n\nexport class AppStoragesManager extends AppManager {\n private storages: ReturnType;\n\n // private loadPromise: CancellablePromise;\n\n private log: ReturnType;\n\n constructor() {\n super();\n\n this.log = logger('STORAGES');\n this.storages = createStorages();\n // this.loadPromise = deferredPromise();\n }\n\n public loadStorages() {\n return loadStorages(this.storages);\n // loadStorages(this.storages).then((storagesResults) => {\n // this.loadPromise.resolve(storagesResults);\n // });\n\n // return this.loadPromise;\n }\n\n // public setStoragesResults(storagesResults: StoragesResults) {\n // this.loadPromise.resolve(storagesResults);\n // }\n\n public async loadStorage(name: T) {\n return this.loadStorages().then((storagesResults) => {\n return {\n storage: this.storages[name],\n results: storagesResults[name]\n };\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Chat} from '../../../../layer';\nimport type {Dialog} from '../../appMessagesManager';\nimport type {User} from '../../appUsersManager';\nimport DATABASE_STATE from '../../../../config/databases/state';\nimport AppStorage from '../../../storage';\n\nexport type StoragesStorages = {\n users: AppStorage, typeof DATABASE_STATE>,\n chats: AppStorage, typeof DATABASE_STATE>,\n dialogs: AppStorage, typeof DATABASE_STATE>\n};\n\nexport default function createStorages() {\n const names: (keyof StoragesStorages)[] = ['users', 'chats', 'dialogs'];\n const storages: StoragesStorages = {} as any;\n for(const name of names) {\n // @ts-ignore\n storages[name] = new AppStorage(DATABASE_STATE, name);\n }\n\n return storages;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {AccountPassword, AccountUpdatePasswordSettings, InputCheckPasswordSRP, PasswordKdfAlgo} from '../../layer';\nimport randomize from '../../helpers/array/randomize';\nimport {AppManager} from '../appManagers/manager';\n\nexport class PasswordManager extends AppManager {\n public getState(): Promise {\n return this.apiManager.invokeApi('account.getPassword').then((result) => {\n return result;\n });\n }\n\n public updateSettings(settings: {\n hint?: string,\n email?: string,\n newPassword?: string,\n currentPassword?: string\n } = {}) {\n // state = Object.assign({}, state);\n // state.new_algo = Object.assign({}, state.new_algo);\n\n return this.getState().then((state) => {\n let currentHashPromise: Promise;\n let newHashPromise: Promise;\n const params: AccountUpdatePasswordSettings = {\n password: null,\n new_settings: {\n _: 'account.passwordInputSettings',\n hint: settings.hint,\n email: settings.email\n }\n };\n\n if(settings.currentPassword) {\n currentHashPromise = this.cryptoWorker.invokeCrypto('computeSRP', settings.currentPassword, state, false) as any;\n } else {\n currentHashPromise = Promise.resolve({\n _: 'inputCheckPasswordEmpty'\n });\n }\n\n // * https://core.telegram.org/api/srp#setting-a-new-2fa-password, but still there is a mistake, TDesktop passes 'new_algo' everytime\n const newAlgo = state.new_algo as PasswordKdfAlgo.passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow;\n const salt1 = new Uint8Array(newAlgo.salt1.length + 32);\n randomize(salt1);\n salt1.set(newAlgo.salt1, 0);\n newAlgo.salt1 = salt1;\n\n if(settings.newPassword) {\n newHashPromise = this.cryptoWorker.invokeCrypto('computeSRP', settings.newPassword, state, true) as any;\n } else {\n newHashPromise = Promise.resolve(new Uint8Array());\n }\n\n return Promise.all([currentHashPromise, newHashPromise]).then((hashes) => {\n params.password = hashes[0];\n params.new_settings.new_algo = newAlgo;\n params.new_settings.new_password_hash = hashes[1];\n\n return this.apiManager.invokeApi('account.updatePasswordSettings', params);\n });\n });\n }\n\n public getInputCheckPassword(password: string, state: AccountPassword) {\n return this.cryptoWorker.invokeCrypto('computeSRP', password, state, false) as Promise;\n }\n\n public check(password: string, state: AccountPassword, options: any = {}) {\n return this.getInputCheckPassword(password, state).then((inputCheckPassword) => {\n // console.log('SRP', inputCheckPassword);\n return this.apiManager.invokeApi('auth.checkPassword', {\n password: inputCheckPassword as InputCheckPasswordSRP.inputCheckPasswordSRP\n }, options).then((auth) => {\n if(auth._ === 'auth.authorization') {\n this.apiManager.setUser(auth.user);\n }\n\n return auth;\n });\n });\n }\n\n public confirmPasswordEmail(code: string) {\n return this.apiManager.invokeApi('account.confirmPasswordEmail', {code});\n }\n\n public resendPasswordEmail() {\n return this.apiManager.invokeApi('account.resendPasswordEmail');\n }\n\n public cancelPasswordEmail() {\n return this.apiManager.invokeApi('account.cancelPasswordEmail');\n }\n\n /* public requestRecovery(options: any = {}) {\n return apiManager.invokeApi('auth.requestPasswordRecovery', {}, options);\n }\n\n public recover(code: any, options: any = {}) {\n return apiManager.invokeApi('auth.recoverPassword', {\n code\n }, options);\n } */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Photo, WallPaper} from '../../layer';\nimport {logger} from '../logger';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport {AppManager} from '../appManagers/manager';\nimport makeError from '../../helpers/makeError';\n\nexport type ReferenceContext = ReferenceContext.referenceContextProfilePhoto | ReferenceContext.referenceContextMessage | ReferenceContext.referenceContextEmojiesSounds | ReferenceContext.referenceContextReactions | ReferenceContext.referenceContextUserFull | ReferenceContext.referenceContextCustomEmoji | ReferenceContext.referenceContextAttachMenuBotIcon | ReferenceContext.referenceContextWallPaper;\nexport namespace ReferenceContext {\n export type referenceContextProfilePhoto = {\n type: 'profilePhoto',\n peerId: PeerId\n };\n\n export type referenceContextMessage = {\n type: 'message',\n peerId: PeerId,\n messageId: number\n };\n\n export type referenceContextEmojiesSounds = {\n type: 'emojiesSounds'\n };\n\n export type referenceContextReactions = {\n type: 'reactions'\n };\n\n export type referenceContextUserFull = {\n type: 'userFull',\n userId: UserId\n };\n\n export type referenceContextCustomEmoji = {\n type: 'customEmoji',\n docId: DocId\n };\n\n export type referenceContextAttachMenuBotIcon = {\n type: 'attachMenuBotIcon',\n botId: BotId\n };\n\n export type referenceContextWallPaper = {\n type: 'wallPaper',\n wallPaperId: WallPaper['id']\n };\n}\n\nexport type ReferenceBytes = Photo.photo['file_reference'];\nexport type ReferenceContexts = Set;\n\n// type ReferenceBytes = Uint8Array;\n\nexport class ReferenceDatabase extends AppManager {\n private contexts: Map = new Map();\n // private references: Map = new Map();\n private links: {[hex: string]: ReferenceBytes} = {};\n private log = logger('RD', undefined, true);\n private refreshEmojiesSoundsPromise: Promise;\n\n // constructor() {\n // super();\n\n // apiManager.addTaskListener('refreshReference', (task: RefreshReferenceTask) => {\n // const originalPayload = task.payload;\n\n // assumeType(task);\n // task.originalPayload = originalPayload;\n\n // this.refreshReference(originalPayload).then((bytes) => {\n // task.payload = bytes;\n // }, (err) => {\n // task.error = err;\n // }).then(() => apiManager.postMessage(task));\n // });\n // }\n\n public saveContext(reference: ReferenceBytes, context: ReferenceContext, contexts?: ReferenceContexts) {\n [contexts, reference] = this.getContexts(reference);\n if(!contexts) {\n contexts = new Set();\n this.contexts.set(reference, contexts);\n }\n\n this.links[bytesToHex(reference)] = reference;\n for(const _context of contexts) {\n if(deepEqual(_context, context)) {\n return;\n }\n }\n\n contexts.add(context);\n }\n\n public getReferenceByLink(reference: ReferenceBytes) {\n return this.links[bytesToHex(reference)];\n }\n\n public getContexts(reference: ReferenceBytes): [ReferenceContexts, ReferenceBytes] {\n const contexts = this.contexts.get(reference) || (reference = this.getReferenceByLink(reference) || reference, this.contexts.get(reference));\n return [contexts, reference];\n }\n\n public getContext(reference: ReferenceBytes): [ReferenceContext, ReferenceBytes] {\n const contexts = this.getContexts(reference);\n return contexts[0] ? [contexts[0].values().next().value, contexts[1]] : undefined;\n }\n\n public deleteContext(reference: ReferenceBytes, context: ReferenceContext, contexts?: ReferenceContexts) {\n [contexts, reference] = this.getContexts(reference);\n if(contexts) {\n for(const _context of contexts) {\n if(deepEqual(_context, context)) {\n contexts.delete(_context);\n if(!contexts.size) {\n this.contexts.delete(reference);\n delete this.links[bytesToHex(reference)];\n }\n return true;\n }\n }\n }\n\n return false;\n }\n\n public refreshReference(reference: ReferenceBytes, context?: ReferenceContext): Promise {\n this.log('refreshReference: start', reference.slice(), context);\n if(!context) {\n const c = this.getContext(reference);\n if(!c) {\n this.log('refreshReference: got no context for reference:', reference.slice());\n return Promise.reject('NO_CONTEXT');\n }\n\n [context, reference] = c;\n }\n\n let promise: Promise;\n switch(context?.type) {\n case 'message': {\n promise = this.appMessagesManager.reloadMessages(context.peerId, context.messageId, true);\n break;\n // .then(() => {\n // console.log('FILE_REFERENCE_EXPIRED: got message', context, appMessagesManager.getMessage((context as ReferenceContext.referenceContextMessage).messageId).media, reference);\n // });\n }\n\n case 'emojiesSounds': {\n promise = this.refreshEmojiesSoundsPromise || this.appStickersManager.getAnimatedEmojiSounds(true).then(() => {\n this.refreshEmojiesSoundsPromise = undefined;\n });\n break;\n }\n\n case 'userFull': {\n promise = Promise.resolve(this.appProfileManager.getProfile(context.userId, true));\n break;\n }\n\n case 'customEmoji': {\n promise = this.appEmojiManager.getCustomEmojiDocuments([context.docId]);\n break;\n }\n\n case 'attachMenuBotIcon': {\n promise = this.appAttachMenuBotsManager.getAttachMenuBot(context.botId, true) as any;\n break;\n }\n\n case 'wallPaper': {\n promise = this.appThemesManager.getWallPaperById(context.wallPaperId);\n break;\n }\n\n default: {\n this.log.warn('refreshReference: not implemented context', context);\n return Promise.reject();\n }\n }\n\n const hex = bytesToHex(reference);\n this.log('refreshReference: refreshing reference:', hex);\n return promise.then(() => {\n const newHex = bytesToHex(reference);\n this.log('refreshReference: refreshed, reference before:', hex, 'after:', newHex);\n if(hex !== newHex) {\n return reference;\n }\n\n this.deleteContext(reference, context);\n\n const newContext = this.getContext(reference);\n if(newContext) {\n return this.refreshReference(reference, newContext[0]);\n }\n\n this.log.error('refreshReference: no new context, reference before:', hex, 'after:', newHex, context);\n\n throw makeError('NO_NEW_CONTEXT');\n });\n }\n\n /* public replaceReference(oldReference: ReferenceBytes, newReference: ReferenceBytes) {\n const contexts = this.contexts.get(oldReference);\n if(contexts) {\n this.contexts.delete(oldReference);\n this.contexts.set(newReference, contexts);\n }\n } */\n}\n","export default function safeReplaceObject(wasObject: any, newObject: any) {\n if(!wasObject) {\n return newObject;\n }\n\n for(var key in wasObject) {\n if(!newObject.hasOwnProperty(key)) {\n delete wasObject[key];\n }\n }\n\n for(var key in newObject) {\n // if (newObject.hasOwnProperty(key)) { // useless\n wasObject[key] = newObject[key];\n // }\n }\n\n return wasObject;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Message, MessageAction, MessageMedia} from '../../../../layer';\nimport getPeerId from '../peers/getPeerId';\n\nexport default function getPeerIdsFromMessage(message: Message.message | Message.messageService) {\n const peerIds: number[] = [\n message.fromId,\n message.viaBotId,\n (message as Message.message).fwdFromId\n ];\n\n const media = (message as Message.message).media;\n if(media) {\n const contactUserId = (media as MessageMedia.messageMediaContact).user_id;\n if(contactUserId !== undefined) {\n peerIds.push(contactUserId.toPeerId());\n }\n\n const results = (media as MessageMedia.messageMediaPoll).results;\n const recentVoters = results?.recent_voters;\n if(recentVoters?.length) {\n peerIds.push(...recentVoters.map((userId) => userId.toPeerId()));\n }\n }\n\n const recentReactions = ((message as Message.message).reactions)?.recent_reactions;\n if(recentReactions?.length) {\n peerIds.push(...recentReactions.map((reaction) => getPeerId(reaction.peer_id)));\n }\n\n const action = (message as Message.messageService).action;\n if(action) {\n const userIds: UserId[] = [\n ...((action as MessageAction.messageActionChatAddUser).users || []),\n (action as MessageAction.messageActionChatDeleteUser).user_id,\n (action as MessageAction.messageActionChatJoinedByLink).inviter_id\n ];\n peerIds.push(...userIds.filter(Boolean).map((userId) => userId.toPeerId()));\n\n const chatIds: ChatId[] = [\n (action as MessageAction.messageActionChatMigrateTo).channel_id,\n (action as MessageAction.messageActionChannelMigrateFrom).chat_id\n ];\n peerIds.push(...chatIds.filter(Boolean).map((chatId) => chatId.toPeerId(true)));\n }\n\n const recentRepliers = ((message as Message.message).replies)?.recent_repliers;\n if(recentRepliers?.length) {\n peerIds.push(...recentRepliers.map((reply) => getPeerId(reply)));\n }\n\n return new Set(peerIds.filter(Boolean));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ForumTopic} from '../../../../layer';\nimport type {Dialog} from '../../appMessagesManager';\nimport type getDialogIndexKey from './getDialogIndexKey';\n\nexport default function setDialogIndex(\n dialog: Dialog | ForumTopic.forumTopic,\n indexKey: ReturnType,\n index: number\n) {\n return (dialog as Dialog)[indexKey] = index;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {Chat, ForumTopic as MTForumTopic, DialogPeer, Message, MessageAction, MessageMedia, MessagesForumTopics, MessagesPeerDialogs, Update} from '../../layer';\nimport type {Dialog, ForumTopic, MyMessage} from '../appManagers/appMessagesManager';\nimport tsNow from '../../helpers/tsNow';\nimport SearchIndex from '../searchIndex';\nimport {SliceEnd} from '../../helpers/slicedArray';\nimport {MyDialogFilter} from './filters';\nimport {FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, NULL_PEER_ID, REAL_FOLDERS, REAL_FOLDER_ID} from '../mtproto/mtproto_config';\nimport {MaybePromise, NoneToVoidFunction} from '../../types';\nimport ctx from '../../environment/ctx';\nimport AppStorage from '../storage';\nimport type DATABASE_STATE from '../../config/databases/state';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport getServerMessageId from '../appManagers/utils/messageId/getServerMessageId';\nimport generateMessageId from '../appManagers/utils/messageId/generateMessageId';\nimport {AppManager} from '../appManagers/manager';\nimport getDialogIndexKey from '../appManagers/utils/dialogs/getDialogIndexKey';\nimport isObject from '../../helpers/object/isObject';\nimport getDialogIndex from '../appManagers/utils/dialogs/getDialogIndex';\nimport getPeerIdsFromMessage from '../appManagers/utils/messages/getPeerIdsFromMessage';\nimport {AppStoragesManager} from '../appManagers/appStoragesManager';\nimport defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';\nimport setDialogIndex from '../appManagers/utils/dialogs/setDialogIndex';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport {BroadcastEvents} from '../rootScope';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\nimport callbackify from '../../helpers/callbackify';\n\nexport type FolderDialog = {\n dialog: Dialog,\n index: number\n};\n\nexport type Folder = {\n dialogs: (Dialog | ForumTopic)[],\n id: number,\n unreadMessagesCount: number,\n unreadPeerIds: Set,\n unreadUnmutedPeerIds: Set,\n dispatchUnreadTimeout?: number\n};\n\nexport const GLOBAL_FOLDER_ID: REAL_FOLDER_ID = undefined;\n\n// let spentTime = 0;\nexport default class DialogsStorage extends AppManager {\n private storage: AppStoragesManager['storages']['dialogs'];\n\n private dialogs: {[peerId: PeerId]: Dialog};\n\n private folders: {[folderId: number]: Folder};\n\n private allDialogsLoaded: {[folder_id: number]: boolean};\n private dialogsOffsetDate: {[folder_id: number]: number};\n private pinnedOrders: {[folder_id: number]: PeerId[]};\n private dialogsNum: number;\n\n private dialogsIndex: SearchIndex;\n\n private cachedResults: {\n query: string,\n count: number,\n dialogs: Dialog[],\n folderId: number\n };\n\n private forumTopics: Map,\n deletedTopics: Set,\n getTopicPromises: Map>,\n getTopicsPromise?: Promise\n }>;\n\n protected after() {\n this.clear(true);\n\n this.rootScope.addEventListener('language_change', () => {\n const peerId = this.appUsersManager.getSelf().id.toPeerId(false);\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n const peerText = this.appPeersManager.getPeerSearchText(peerId);\n this.dialogsIndex.indexObject(peerId, peerText);\n }\n });\n\n const onFilterUpdate = (filter: MyDialogFilter) => {\n const dialogs = this.getCachedDialogs(false);\n for(let i = 0; i < dialogs.length; ++i) {\n this.processDialogForFilter(dialogs[i], filter);\n }\n };\n\n this.rootScope.addEventListener('filter_order', () => {\n const dialogs = this.getCachedDialogs(false);\n // const indexKeys: ReturnType[] = [];\n for(const filterId in this.folders) {\n if(+filterId > 1) {\n delete this.folders[filterId];\n }\n\n // indexKeys.push(this.getDialogIndexKey(+filterId));\n }\n\n for(let i = 0; i < dialogs.length; ++i) {\n const dialog = dialogs[i];\n // for(const indexKey of indexKeys) {\n // delete dialog[indexKey];\n // }\n\n this.processDialogForFilters(dialog);\n }\n });\n\n this.rootScope.addEventListener('filter_update', onFilterUpdate);\n this.rootScope.addEventListener('filter_new', onFilterUpdate);\n\n this.rootScope.addEventListener('filter_delete', (filter) => {\n const dialogs = this.getCachedDialogs(false);\n\n const indexKey = this.getDialogIndexKeyByFilterId(filter.id);\n for(let i = 0; i < dialogs.length; ++i) {\n const dialog = dialogs[i];\n delete dialog[indexKey];\n }\n\n delete this.folders[filter.id];\n });\n\n this.rootScope.addEventListener('dialog_notify_settings', (dialog) => {\n this.processChangedUnreadOrUnmuted(dialog.peerId);\n });\n\n this.rootScope.addEventListener('chat_update', (chatId) => {\n const chat = this.appChatsManager.getChat(chatId);\n\n const peerId = chatId.toPeerId(true);\n if((chat as Chat.chat).pFlags.left && this.getDialogOnly(peerId)) {\n this.dropDialogOnDeletion(peerId);\n }\n });\n\n this.rootScope.addEventListener('chat_toggle_forum', ({chatId, enabled}) => {\n const peerId = chatId.toPeerId(true);\n if(!enabled) {\n this.flushForumTopicsCache(peerId);\n }\n\n this.processChangedUnreadOrUnmuted(peerId);\n });\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateFolderPeers: this.onUpdateFolderPeers,\n\n updateDialogPinned: this.onUpdateDialogPinned,\n\n updateChannelPinnedTopic: this.onUpdateChannelPinnedTopic,\n\n updatePinnedDialogs: this.onUpdatePinnedDialogs,\n\n updateChannelPinnedTopics: this.onUpdateChannelPinnedTopics\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('dialogs')\n ]).then(([state, {results: dialogs, storage}]) => {\n this.storage = storage;\n this.dialogs = this.storage.getCache();\n\n for(const folderId of REAL_FOLDERS) {\n const order = state.pinnedOrders[folderId];\n if(!order) {\n continue;\n }\n\n const _order = this.getPinnedOrders(folderId);\n _order.splice(0, _order.length, ...order);\n }\n\n if(dialogs.length) {\n AppStorage.freezeSaving(this.setDialogsFromState.bind(this, dialogs), ['chats', 'dialogs', 'messages', 'users']);\n }\n\n this.allDialogsLoaded = state.allDialogsLoaded || {};\n\n if(dialogs.length) {\n this.appDraftsManager.addMissedDialogs();\n }\n });\n }\n\n private setDialogsFromState(dialogs: Dialog[]) {\n for(let i = 0, length = dialogs.length; i < length; ++i) {\n const dialog = dialogs[i];\n if(!dialog) {\n continue;\n }\n\n // if(dialog.peerId !== SERVICE_PEER_ID) {\n dialog.top_message = getServerMessageId(dialog.top_message); // * fix outgoing message to avoid copying dialog\n // }\n\n if(dialog.topMessage) {\n this.appMessagesManager.saveMessages([dialog.topMessage]);\n }\n\n for(let i = 0; i <= 21; ++i) {\n const indexKey: ReturnType = `index_${i}` as any;\n delete dialog[indexKey];\n }\n // delete dialog.indexes;\n\n this.saveDialog({\n dialog,\n ignoreOffsetDate: true\n });\n\n // ! WARNING, ัƒะฑั€ะฐั‚ัŒ ัั‚ะพ ะบะพะณะดะฐ ะฝัƒะถะฝะพ ะฑัƒะดะตั‚ ะดะตะปะฐั‚ัŒ ั‡ั‚ะพะฑั‹ pending ัะพะพะฑั‰ะตะฝะธั ัะพั…ั€ะฐะฝัะปะธััŒ\n const message = this.appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n if(!message) {\n this.appMessagesManager.reloadConversation(dialog.peerId);\n }\n }\n }\n\n public isDialogsLoaded(folderId: number) {\n return !!this.allDialogsLoaded[folderId];\n }\n\n public setDialogsLoaded(folderId: number, loaded: boolean) {\n const isForum = this.isFilterIdForForum(folderId);\n\n if(folderId === GLOBAL_FOLDER_ID && loaded) {\n this.allDialogsLoaded[FOLDER_ID_ALL] = loaded;\n this.allDialogsLoaded[FOLDER_ID_ARCHIVE] = loaded;\n } else {\n if(isForum) {\n defineNotNumerableProperties(this.allDialogsLoaded, [folderId]);\n }\n\n this.allDialogsLoaded[folderId] = loaded;\n }\n\n if(isForum) {\n return;\n }\n\n if(Array.from(REAL_FOLDERS).every((folderId) => this.allDialogsLoaded[folderId])) {\n this.allDialogsLoaded[GLOBAL_FOLDER_ID] = true;\n }\n\n this.saveAllDialogsLoaded();\n }\n\n private saveAllDialogsLoaded() {\n this.appStateManager.pushToState('allDialogsLoaded', this.allDialogsLoaded);\n }\n\n public clear = (init = false) => {\n if(!init) {\n this.storage.clear();\n\n this.allDialogsLoaded = {};\n this.saveAllDialogsLoaded();\n\n // * clear not numerable properties\n this.pinnedOrders = Object.assign({}, this.pinnedOrders);\n for(const folderId of REAL_FOLDERS) {\n this.resetPinnedOrder(folderId);\n }\n this.savePinnedOrders();\n } else {\n this.allDialogsLoaded = {};\n this.pinnedOrders = {};\n for(const folderId of REAL_FOLDERS) {\n this.pinnedOrders[folderId] = [];\n }\n }\n\n this.forumTopics = new Map();\n this.folders = {};\n this.dialogsOffsetDate = {};\n this.dialogsNum = 0;\n this.dialogsIndex = new SearchIndex({\n clearBadChars: true,\n ignoreCase: true,\n latinize: true,\n includeTag: true\n });\n this.cachedResults = {\n query: '',\n count: 0,\n dialogs: [],\n folderId: 0\n };\n };\n\n public handleDialogUnpinning(dialog: Dialog | ForumTopic, folderId: number) {\n delete dialog.pFlags.pinned;\n indexOfAndSplice(this.getPinnedOrders(folderId), this.isFilterIdForForum(folderId) ? (dialog as ForumTopic).id : dialog.peerId);\n this.savePinnedOrders();\n }\n\n public savePinnedOrders() {\n this.appStateManager.pushToState('pinnedOrders', this.pinnedOrders);\n }\n\n public resetPinnedOrder(folderId: number) {\n this.getPinnedOrders(folderId).length = 0;\n }\n\n public getPinnedOrders(folderId: number) {\n let orders = this.pinnedOrders[folderId];\n if(!orders && this.isFilterIdForForum(folderId)) {\n defineNotNumerableProperties(this.pinnedOrders, [folderId]);\n orders = this.pinnedOrders[folderId] = [];\n }\n\n return orders;\n }\n\n public isDialogPinned(peerId: PeerId, folderId: number) {\n const filter = this.filtersStorage.getFilter(folderId);\n let isPinned: boolean;\n if(filter) {\n isPinned = filter.pinnedPeerIds.indexOf(peerId) !== -1;\n } else {\n isPinned = !!this.getDialogOnly(peerId).pFlags.pinned;\n }\n\n return isPinned;\n }\n\n public getOffsetDate(folderId: number): number {\n const offsetDate = this.dialogsOffsetDate[folderId] || 0;\n if(folderId === GLOBAL_FOLDER_ID && !offsetDate) { // make request not from beginning if we have loaded some dialogs\n return Math.min(...Array.from(REAL_FOLDERS).sort((a, b) => a - b));\n }\n\n return offsetDate;\n }\n\n private generateFolder(id: number) {\n const folder: Folder = {\n dialogs: [],\n id,\n unreadMessagesCount: 0,\n unreadPeerIds: new Set(),\n unreadUnmutedPeerIds: new Set()\n };\n\n defineNotNumerableProperties(folder, ['dispatchUnreadTimeout']);\n\n return folder;\n }\n\n public getFolder(id: number) {\n return this.folders[id] ??= this.generateFolder(id);\n }\n\n public isFilterIdForForum(filterId: number) {\n return filterId && filterId < 0;\n }\n\n public getFilterIdForForum(forumTopic: ForumTopic) {\n return forumTopic.peerId;\n }\n\n public getDialogKey(dialog: Dialog | ForumTopic) {\n return this.isTopic(dialog) ? dialog.id : dialog.peerId;\n }\n\n public getFolderDialogs(id: number, skipMigrated = true): Folder['dialogs'] {\n if(id === GLOBAL_FOLDER_ID) { // * it won't be sorted\n return this.getCachedDialogs(skipMigrated);\n }\n\n const folder = this.getFolder(id);\n if(this.isFilterIdForForum(id)) {\n return skipMigrated ? folder.dialogs.filter((forumTopic) => !(forumTopic as ForumTopic).pFlags.hidden) : folder.dialogs;\n }\n\n return skipMigrated ? folder.dialogs.filter((dialog) => (dialog as Dialog).migratedTo === undefined) : folder.dialogs;\n }\n\n public getNextDialog(currentPeerId: PeerId, next: boolean, filterId: number) {\n const folder = this.getFolderDialogs(filterId, true);\n let dialog: Folder['dialogs'][0];\n if(!currentPeerId) {\n if(next) {\n dialog = folder[0];\n }\n } else {\n const idx = folder.findIndex((dialog) => dialog.peerId === currentPeerId);\n if(idx !== -1) {\n const nextIndex = next ? idx + 1 : idx - 1;\n dialog = folder[nextIndex];\n }\n }\n\n return dialog;\n }\n\n public getDialogIndexKeyByFilterId(filterId: number) {\n if(this.isFilterIdForForum(filterId)) return getDialogIndexKey();\n if(REAL_FOLDERS.has(filterId)) return getDialogIndexKey(filterId as REAL_FOLDER_ID);\n const filter = this.filtersStorage.getFilter(filterId);\n return getDialogIndexKey(filter.localId);\n }\n\n private isDialogUnmuted(dialog: Dialog | ForumTopic) {\n return !this.appNotificationsManager.isPeerLocalMuted({\n peerId: dialog.peerId,\n respectType: true,\n threadId: this.isTopic(dialog) ? (dialog as ForumTopic).id : undefined\n });\n }\n\n public getFolderUnreadCount(filterId: number) {\n const folder = this.getFolder(filterId);\n return {unreadUnmutedCount: folder.unreadUnmutedPeerIds.size, unreadCount: folder.unreadPeerIds.size};\n }\n\n public getCachedDialogs(skipMigrated?: boolean) {\n const arrays = Array.from(REAL_FOLDERS).map((folderId) => this.getFolderDialogs(folderId, skipMigrated));\n return [].concat(...arrays) as Dialog[];\n }\n\n private setDialogIndexInFilter(\n dialog: Dialog | ForumTopic,\n indexKey: ReturnType,\n filter?: MyDialogFilter\n ) {\n // if(this.isTopic(dialog)) {\n // return dialog['index_0'];\n // }\n\n let index: number;\n\n const isTopic = this.isTopic(dialog);\n const isRealFolder = isTopic || REAL_FOLDERS.has(filter.id);\n /* if(isRealFolder) {\n // index = getDialogIndex(dialog, indexKey);\n index = this.generateIndexForDialog(dialog, true);\n } else */if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n const pinnedIds = isTopic ?\n this.getPinnedOrders(this.getFilterIdForForum(dialog)) :\n filter.pinnedPeerIds;\n\n const pinnedKey = this.getDialogKey(dialog);\n const pinnedIndex = pinnedIds.indexOf(pinnedKey);\n\n if(pinnedIndex !== -1) {\n index = this.generateDialogIndex(this.generateDialogPinnedDateByIndex(pinnedIds.length - 1 - pinnedIndex), true);\n } else if(dialog.pFlags?.pinned || isRealFolder) {\n index = this.generateIndexForDialog(dialog, true, undefined, !isRealFolder);\n } else {\n index = getDialogIndex(dialog) ?? this.generateIndexForDialog(dialog, true);\n }\n }\n\n // if(!dialog.hasOwnProperty(indexKey)) {\n // defineNotNumerableProperties(dialog, [indexKey]);\n // }\n\n return setDialogIndex(dialog, indexKey, index);\n }\n\n public getDialog(peerId: PeerId, folderId?: number, topicId?: number, skipMigrated = true): [Folder['dialogs'][0], number] | [] {\n const folders: Folder['dialogs'][] = [];\n\n if(topicId) {\n folderId = peerId;\n // skipMigrated = false;\n }\n\n if(folderId === undefined) {\n folders.push(...Array.from(REAL_FOLDERS).map((folderId) => this.getFolder(folderId).dialogs as Dialog[]));\n } else {\n folders.push(this.getFolderDialogs(folderId, false) as Dialog[]);\n }\n\n const verify: (d: Folder['dialogs'][0]) => boolean = topicId ?\n (d) => (d as ForumTopic).id === topicId :\n (d) => (d as Dialog).peerId === peerId;\n for(const folder of folders) {\n let i = 0, skipped = 0;\n for(let length = folder.length; i < length; ++i) {\n const dialog = folder[i];\n if(verify(dialog)) {\n return [dialog, i - skipped];\n } else if(skipMigrated && ((dialog as ForumTopic).pFlags.hidden || (dialog as Dialog).migratedTo !== undefined)) {\n ++skipped;\n }\n }\n }\n\n return [];\n }\n\n public getDialogOnly(peerId: PeerId) {\n return this.dialogs[peerId];\n }\n\n public getDialogOrTopic(peerId: PeerId, topicId?: number) {\n return topicId ? this.getForumTopic(peerId, topicId) : this.dialogs[peerId];\n }\n\n public getDialogIndex(\n peerId: PeerId | Parameters[0],\n indexKey: ReturnType,\n topicId?: number\n ) {\n const dialog = isObject(peerId) ? peerId : this.getDialogOrTopic(peerId, topicId);\n return getDialogIndex(dialog, indexKey);\n }\n\n /*\n var date = Date.now() / 1000 | 0;\n var m = date * 0x10000;\n\n var k = (date + 1) * 0x10000;\n k - m;\n 65536\n */\n public generateDialogIndex(date?: number, isPinned?: boolean) {\n date ??= tsNow(true) + this.timeManager.getServerTimeOffset();\n return (date * 0x10000) + (isPinned ? 0 : (++this.dialogsNum & 0xFFFF));\n }\n\n // public makeFilterForTopics(id: number): MyDialogFilter {\n // return {\n // _: 'dialogFilter',\n // id,\n\n // };\n // }\n\n public isTopic(dialog: Dialog | ForumTopic): dialog is ForumTopic {\n return 'id' in dialog;\n }\n\n public processDialogForFilters(dialog: Dialog | ForumTopic, noIndex?: boolean) {\n // let perf = performance.now();\n if(this.isTopic(dialog)) {\n this.processDialogForFilter(dialog, undefined, noIndex);\n return;\n }\n\n const filters = this.filtersStorage.getFilters();\n for(const id in filters) {\n const filter = filters[id];\n this.processDialogForFilter(dialog, filter, noIndex);\n }\n // spentTime += (performance.now() - perf);\n // console.log('generate index time:', spentTime);\n }\n\n public processDialogForFilter(\n dialog: Dialog | ForumTopic,\n filter?: MyDialogFilter,\n noIndex?: boolean\n ) {\n const isTopic = this.isTopic(dialog);\n const folderId = isTopic ? this.getFilterIdForForum(dialog) : filter.id;\n\n const indexKey = isTopic ? 'index_0' : this.getDialogIndexKeyByFilterId(folderId);\n const folder = this.getFolder(folderId);\n const dialogs = folder.dialogs;\n\n const cmp: (d: typeof dialog) => boolean = isTopic ?\n ((d: ForumTopic) => d.id === dialog.id) as any :\n ((d: Dialog) => d.peerId === dialog.peerId) as any;\n const wasIndex = dialogs.findIndex(cmp);\n const wasDialog = dialogs[wasIndex];\n const wasDialogIndex = this.getDialogIndex(wasDialog, indexKey);\n\n if(noIndex && folderId > FOLDER_ID_ARCHIVE) {\n noIndex = undefined;\n }\n\n const newDialogIndex = noIndex ? undefined : this.setDialogIndexInFilter(dialog, indexKey, filter);\n\n if(wasDialogIndex === newDialogIndex) {\n return false;\n }\n\n if(!!wasDialogIndex !== !!newDialogIndex) {\n this.prepareFolderUnreadCountModifyingByDialog(folderId, dialog, !!newDialogIndex);\n }\n\n if(wasIndex !== -1) {\n dialogs.splice(wasIndex, 1);\n }\n\n if(newDialogIndex) {\n insertInDescendSortedArray(dialogs, dialog, (dialog) => this.getDialogIndex(dialog, indexKey), -1);\n }\n\n return true;\n }\n\n public prepareDialogUnreadCountModifying(dialog: Dialog | ForumTopic, toggle?: boolean) {\n const isTopic = this.isTopic(dialog);\n const callbacks: NoneToVoidFunction[] = [];\n\n const folderId = isTopic ? this.getFilterIdForForum(dialog) : dialog.folder_id;\n callbacks.push(this.prepareFolderUnreadCountModifyingByDialog(folderId, dialog, toggle));\n\n if(!isTopic) {\n const filters = this.filtersStorage.getFilters();\n for(const id in filters) {\n const filter = filters[id];\n if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n callbacks.push(this.prepareFolderUnreadCountModifyingByDialog(filter.id, dialog, toggle));\n }\n }\n }\n\n return () => !toggle && callbacks.forEach((callback) => callback());\n }\n\n public prepareFolderUnreadCountModifyingByDialog(folderId: number, dialog: Dialog | ForumTopic, toggle?: boolean) {\n const wasUnreadCount = this.appMessagesManager.getDialogUnreadCount(dialog);\n const wasUnmuted = this.isDialogUnmuted(dialog);\n\n if(toggle !== undefined) {\n const addMessagesCount = toggle ? wasUnreadCount : -wasUnreadCount;\n this.modifyFolderUnreadCount(folderId, addMessagesCount, !!wasUnreadCount, wasUnreadCount && wasUnmuted, dialog);\n return;\n }\n\n return () => {\n const newUnreadCount = this.appMessagesManager.getDialogUnreadCount(dialog);\n const newUnmuted = this.isDialogUnmuted(dialog);\n\n const addMessagesCount = newUnreadCount - wasUnreadCount;\n this.modifyFolderUnreadCount(folderId, addMessagesCount, !!newUnreadCount, newUnreadCount && newUnmuted, dialog);\n };\n }\n\n public modifyFolderUnreadCount(\n folderId: number,\n addMessagesCount: number,\n toggleDialog: boolean,\n toggleUnmuted: boolean,\n dialog: Dialog | ForumTopic\n ) {\n const {peerId} = dialog;\n const isForum = this.appPeersManager.isForum(peerId);\n const isTopic = this.isTopic(dialog);\n if(isForum && !isTopic) {\n const forumUnreadCount = this.getForumUnreadCount(peerId);\n if(forumUnreadCount instanceof Promise) {\n forumUnreadCount.then(({count, hasUnmuted}) => {\n dialog = this.getDialogOnly(peerId);\n const folder = this.getFolder(folderId);\n if(\n !dialog ||\n !this.appPeersManager.isForum(peerId) ||\n !folder ||\n !folder.dialogs.some((dialog) => dialog.peerId === peerId)\n ) {\n return;\n }\n\n this.modifyFolderUnreadCount(folderId, 0, false, false, dialog);\n });\n\n return;\n } else {\n addMessagesCount = 0;\n toggleDialog = forumUnreadCount.count > 0;\n toggleUnmuted = forumUnreadCount.hasUnmuted;\n }\n }\n\n const folder = this.getFolder(folderId);\n if(addMessagesCount) {\n folder.unreadMessagesCount = Math.max(0, folder.unreadMessagesCount + addMessagesCount);\n }\n\n const key = this.getDialogKey(dialog);\n if(toggleDialog) {\n folder.unreadPeerIds.add(key);\n } else {\n folder.unreadPeerIds.delete(key);\n }\n\n if(toggleUnmuted) {\n folder.unreadUnmutedPeerIds.add(key);\n } else {\n folder.unreadUnmutedPeerIds.delete(key);\n }\n\n folder.dispatchUnreadTimeout ??= ctx.setTimeout(() => {\n folder.dispatchUnreadTimeout = undefined;\n const _folder = {...folder};\n delete _folder.dialogs;\n this.rootScope.dispatchEvent('folder_unread', _folder);\n\n if(isTopic) { // * refresh forum dialog unread count\n this.processChangedUnreadOrUnmuted(peerId);\n }\n }, 0);\n }\n\n public processChangedUnreadOrUnmuted(peerId: PeerId) {\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n this.processDialogForFilters(dialog);\n this.prepareDialogUnreadCountModifying(dialog)();\n this.rootScope.dispatchEvent('dialog_unread', {\n peerId,\n dialog\n });\n }\n }\n\n public generateIndexForDialog(\n dialog: Dialog | ForumTopic,\n justReturn?: boolean,\n message?: MyMessage,\n noPinnedOrderUpdate?: boolean\n ) {\n if(!justReturn/* && !isTopic */) {\n return;\n }\n\n const isTopic = this.isTopic(dialog);\n let topDate = 0, isPinned: boolean;\n if((dialog as ForumTopic).pFlags.hidden) { // general topic must be first\n topDate = this.generateDialogPinnedDateByIndex(0xFFF);\n isPinned = true;\n } else if(dialog.pFlags.pinned && !noPinnedOrderUpdate) {\n topDate = this.generateDialogPinnedDate(dialog);\n isPinned = true;\n } else {\n message ||= this.appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n\n topDate = (message as Message.message)?.date || topDate;\n\n if(!isTopic) {\n const channelId = this.appPeersManager.isChannel(dialog.peerId) && dialog.peerId.toChatId();\n if(channelId) {\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n if(!topDate || (channel.date && channel.date > topDate)) {\n topDate = channel.date;\n }\n }\n }\n\n if(dialog.draft?._ === 'draftMessage' && dialog.draft.date > topDate) {\n topDate = dialog.draft.date;\n }\n }\n\n topDate ||= tsNow(true);\n\n const index = this.generateDialogIndex(topDate, isPinned);\n if(justReturn) {\n return index;\n }\n\n const indexKey = getDialogIndexKey((dialog as Dialog).folder_id);\n setDialogIndex(dialog, indexKey, index);\n }\n\n public generateDialogPinnedDateByIndex(pinnedIndex: number) {\n return 0x7fff0000 + (pinnedIndex & 0xFFFF); // 0xFFFF - ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ ะฒ ะฟะฐะฟะบะฐั… ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ะฑะตัะบะพะฝะตั‡ะฝะพะต ั‡ะธัะปะพ ะฟะธะฝะฝะตะดะพะฒ\n }\n\n public generateDialogPinnedDate(dialog: Dialog | ForumTopic) {\n const isTopic = this.isTopic(dialog);\n const order = this.getPinnedOrders(isTopic ? this.getFilterIdForForum(dialog) : dialog.folder_id);\n\n const dialogKey = this.getDialogKey(dialog);\n let pinnedIndex = order.indexOf(dialogKey);\n if(pinnedIndex === -1) {\n order.unshift(dialogKey);\n pinnedIndex = 0;\n\n if(!isTopic) {\n this.savePinnedOrders();\n }\n }\n\n return this.generateDialogPinnedDateByIndex(order.length - 1 - pinnedIndex);\n }\n\n /* public generateDialog(peerId: PeerId) {\n const dialog: Dialog = {\n _: 'dialog',\n pFlags: {},\n peer: this.appPeersManager.getOutputPeer(peerId),\n top_message: 0,\n read_inbox_max_id: 0,\n read_outbox_max_id: 0,\n unread_count: 0,\n unread_mentions_count: 0,\n notify_settings: {\n _: 'peerNotifySettings',\n },\n };\n\n return dialog;\n } */\n\n public setDialogToState(dialog: Dialog | ForumTopic) {\n if(this.isTopic(dialog)) {\n return;\n }\n\n const {peerId, pts} = dialog;\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId);\n const messagesStorage = this.appMessagesManager.getHistoryMessagesStorage(peerId);\n const history = historyStorage.history.slice;\n let incomingMessage: MyMessage;\n for(let i = 0, length = history.length; i < length; ++i) {\n const mid = history[i];\n const message: MyMessage = this.appMessagesManager.getMessageFromStorage(messagesStorage, mid);\n if(message && !message.pFlags.is_outgoing/* || peerId === SERVICE_PEER_ID */) {\n incomingMessage = message;\n\n const peerIds = getPeerIdsFromMessage(message);\n this.peersStorage.requestPeersForKey(peerIds, `topMessage_${peerId}`);\n\n break;\n }\n }\n\n dialog.topMessage = incomingMessage;\n\n // DO NOT TOUCH THESE LINES, SOME REAL MAGIC HERE.\n // * Read service chat when refreshing page with outgoing & getting new service outgoing message\n /* if(incomingMessage && dialog.read_inbox_max_id >= dialog.top_message) {\n dialog.unread_count = 0;\n }\n\n dialog.read_inbox_max_id = this.appMessagesIdsManager.clearMessageId(dialog.read_inbox_max_id);\n dialog.read_outbox_max_id = this.appMessagesIdsManager.clearMessageId(dialog.read_outbox_max_id); */\n // CAN TOUCH NOW\n\n if(peerId.isAnyChat() && pts) {\n const newPts = this.apiUpdatesManager.getChannelState(peerId.toChatId(), pts).pts;\n dialog.pts = newPts;\n }\n\n this.storage.set({\n [peerId]: dialog\n });\n\n this.peersStorage.requestPeer(peerId, 'dialog');\n\n /* for(let id in this.filtersStorage.filters) {\n const filter = this.filtersStorage.filters[id];\n\n if(this.filtersStorage.testDialogForFilter(dialog, filter)) {\n\n }\n } */\n }\n\n public pushDialog({dialog, offsetDate, ignoreOffsetDate, saveGlobalOffset}: {\n dialog: Dialog | ForumTopic,\n offsetDate?: number,\n ignoreOffsetDate?: boolean,\n saveGlobalOffset?: boolean\n }) {\n const isTopic = this.isTopic(dialog);\n const {folder_id, peerId} = dialog as Dialog;\n\n if(isTopic) {\n const forumTopics = this.getForumTopicsCache(peerId);\n forumTopics.topics.set(dialog.id, dialog);\n } else {\n this.dialogs[peerId] = dialog;\n }\n\n offsetDate ??= this.getDialogOffsetDate(dialog);\n\n // if(!isTopic) {\n this.processDialogForFilters(dialog);\n // }\n\n if(offsetDate && !dialog.pFlags.pinned) {\n if(!isTopic && saveGlobalOffset) {\n const savedGlobalOffsetDate = this.dialogsOffsetDate[GLOBAL_FOLDER_ID];\n if(!savedGlobalOffsetDate || offsetDate < savedGlobalOffsetDate) {\n this.dialogsOffsetDate[GLOBAL_FOLDER_ID] = offsetDate;\n }\n }\n\n const folderId = isTopic ? this.getFilterIdForForum(dialog) : folder_id;\n const savedOffsetDate = this.dialogsOffsetDate[folderId];\n if(!savedOffsetDate || offsetDate < savedOffsetDate) {\n // if(pos !== -1) {\n if(!ignoreOffsetDate && !this.isDialogsLoaded(folderId)) {\n this.dropDialog(peerId, isTopic ? this.getDialogKey(dialog) : undefined, true);\n return;\n }\n\n this.dialogsOffsetDate[folderId] = offsetDate;\n }\n }\n\n this.setDialogToState(dialog);\n\n // if(pos === -1) {\n // this.prepareFolderUnreadCountModifyingByDialog(folder_id, dialog, true);\n // }\n\n // const indexKey = getDialogIndexKey(folder_id);\n // /* const newPos = */insertInDescendSortedArray(dialogs, dialog, (dialog) => getDialogIndex(dialog, indexKey), -1);\n /* if(pos !== -1 && pos !== newPos) {\n rootScope.dispatchEvent('dialog_order', {dialog, pos: newPos});\n } */\n }\n\n public dropDialogFromFolders(peerId: PeerId, topicId?: number) {\n const foundDialog = this.getDialog(peerId, undefined, topicId, false);\n const [dialog, index] = foundDialog;\n if(dialog) {\n const filterId = topicId ?\n this.getFilterIdForForum(dialog as ForumTopic) :\n (dialog as Dialog).folder_id;\n\n // const folder = this.getFolder(filterId);\n // folder.dialogs.splice(index, 1);\n const wasPinned = indexOfAndSplice(this.getPinnedOrders(filterId), this.getDialogKey(dialog)) !== undefined;\n\n this.processDialogForFilters(dialog, true);\n\n this.dialogsIndex.indexObject(peerId, '');\n\n if(wasPinned) {\n this.savePinnedOrders();\n }\n }\n\n return foundDialog;\n }\n\n public dropDialog(peerId: PeerId, topicId?: number, keepLocal?: boolean) {\n const dialog = this.getDialogOrTopic(peerId, topicId);\n const foundDialog = this.dropDialogFromFolders(peerId, topicId);\n if(dialog) {\n if(!keepLocal) {\n if(topicId) {\n this.getForumTopicsCache(peerId).topics.delete(topicId);\n } else {\n delete this.dialogs[peerId];\n }\n }\n\n this.clearDialogFromState(dialog, keepLocal);\n }\n\n return foundDialog;\n }\n\n public clearDialogFromState(dialog: Dialog | ForumTopic, keepLocal: boolean) {\n if(dialog._ === 'forumTopic') {\n return;\n }\n\n const {peerId} = dialog;\n this.peersStorage.requestPeersForKey([], `topMessage_${peerId}`);\n this.peersStorage.releasePeer(peerId, 'dialog');\n this.storage.delete(peerId, keepLocal);\n }\n\n public dropDialogWithEvent(peerId: PeerId, topicId?: number) {\n const dropped = this.dropDialog(peerId, topicId);\n if(dropped.length) {\n this.rootScope.dispatchEvent('dialog_drop', dropped[0]);\n }\n\n return dropped;\n }\n\n /**\n * leaving chat, leaving channel, deleting private dialog\n */\n public dropDialogOnDeletion(peerId: PeerId, topicId?: number) {\n this.dropDialogWithEvent(peerId, topicId);\n this.rootScope.dispatchEvent('peer_deleted', peerId);\n }\n\n public applyDialogs(result: MessagesPeerDialogs | MessagesForumTopics, peerId?: PeerId) {\n // * ะ’ ัั‚ัƒ ั„ัƒะฝะบั†ะธัŽ ะฟะพะฟะฐะดัƒั‚ ั‚ะพะปัŒะบะพ ั‚ะต ะดะธะฐะปะพะณะธ, ะฒ ะบะพั‚ะพั€ั‹ั… ะตัั‚ัŒ read_inbox_max_id ะธ read_outbox_max_id, ะฒ ะพั‚ะปะธั‡ะธะต ะพั‚ ั‚ะตั…, ั‡ั‚ะพ ะฑัƒะดัƒั‚ ะฒ getTopMessages\n\n const isForum = result._ === 'messages.forumTopics';\n const items = (result as MessagesPeerDialogs).dialogs || (result as MessagesForumTopics).topics;\n if(!isForum) {\n // ! fix 'dialogFolder', maybe there is better way to do it, this only can happen by 'messages.getPinnedDialogs' by folder_id: 0\n forEachReverse(result.dialogs, (dialog, idx) => {\n if(dialog._ === 'dialogFolder') {\n result.dialogs.splice(idx, 1);\n }\n });\n } else {\n this.processTopics(peerId, result);\n }\n\n assumeType(items);\n\n this.appUsersManager.saveApiUsers(result.users);\n this.appChatsManager.saveApiChats(result.chats);\n this.appMessagesManager.saveMessages(result.messages);\n\n // this.appMessagesManager.log('applyConversation', dialogsResult);\n\n const updatedDialogs: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const getUpdateCache = (peerId: PeerId) => {\n let cache = updatedDialogs.get(peerId);\n if(!cache) {\n updatedDialogs.set(peerId, cache = {});\n }\n\n return cache;\n };\n\n items.forEach((dialog) => {\n const peerId = this.appPeersManager.getPeerId(dialog.peer);\n let topMid = dialog.top_message;\n\n const topPendingMid = this.appMessagesManager.pendingTopMsgs[peerId];\n if(topPendingMid) {\n const topPendingMessage = this.appMessagesManager.getMessageByPeer(peerId, topPendingMid) as MyMessage;\n const topMessage = this.appMessagesManager.getMessageByPeer(peerId, topMid) as MyMessage;\n if(!topMid || (topPendingMessage && (!topMessage || topPendingMessage?.date > topMessage?.date))) {\n dialog.top_message = topMid = topPendingMid;\n this.appMessagesManager.getHistoryStorage(peerId).maxId = topPendingMid;\n }\n }\n\n /* const d = Object.assign({}, dialog);\n if(peerId === 239602833) {\n this.log.error('applyConversation lun', dialog, d);\n } */\n\n if(topMid || dialog.draft?._ === 'draftMessage') {\n if(this.saveDialog({dialog})) {\n const cache = getUpdateCache(peerId);\n\n if(isForum) {\n (cache.topics ??= new Map()).set(\n (dialog as ForumTopic).id,\n dialog as ForumTopic\n );\n } else {\n cache.dialog = dialog as Dialog;\n }\n }\n } else {\n this.dropDialogWithEvent(peerId, isForum ? this.getDialogKey(dialog) : undefined);\n }\n\n const key = this.appMessagesManager.getUpdateAfterReloadKey(peerId, isForum ? this.getDialogKey(dialog) : undefined);\n const updates = this.appMessagesManager.newUpdatesAfterReloadToHandle[key];\n if(updates !== undefined) {\n for(const update of updates) {\n updates.delete(update);\n this.apiUpdatesManager.saveUpdate(update);\n }\n\n if(!updates.size) {\n delete this.appMessagesManager.newUpdatesAfterReloadToHandle[key];\n }\n }\n });\n\n if(updatedDialogs.size) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', updatedDialogs);\n }\n }\n\n private getDialogOffsetDate(dialog: Dialog | ForumTopic) {\n const message = this.appMessagesManager.getMessageByPeer(dialog.peerId, dialog.top_message);\n return message?.date || 0;\n }\n\n public canSaveDialogByPeerId(peerId: PeerId) {\n if(peerId.isAnyChat()) {\n const chat: Chat = this.appChatsManager.getChat(peerId.toChatId());\n // ! chatForbidden stays for chat where you're kicked\n if(\n chat._ === 'channelForbidden' ||\n // || chat._ === 'chatForbidden'\n (chat as Chat.chat).pFlags.left\n // || (chat as any).pFlags.kicked\n ) {\n return false;\n }\n }\n\n return true;\n }\n\n /**\n * Won't save migrated from peer, forbidden peers, left and kicked\n */\n public saveDialog({\n dialog,\n folderId,\n ignoreOffsetDate,\n saveGlobalOffset\n }: {\n dialog: Dialog | ForumTopic,\n folderId?: REAL_FOLDER_ID,\n ignoreOffsetDate?: boolean,\n saveGlobalOffset?: boolean\n }) {\n const isTopic = this.isTopic(dialog);\n const isDialog = !isTopic;\n\n const topicId = isTopic ? dialog.id = generateMessageId(dialog.id) : undefined;\n if(!isTopic) {\n folderId ??= dialog.folder_id ?? FOLDER_ID_ALL;\n }\n\n const peerId = this.appPeersManager.getPeerId(dialog.peer);\n if(!peerId) {\n console.error('saveConversation no peerId???', dialog, folderId);\n return false;\n }\n\n if(!isTopic && dialog._ !== 'dialog'/* || peerId === 239602833 */) {\n console.error('saveConversation not regular dialog', dialog, Object.assign({}, dialog));\n }\n\n if(isDialog && !this.canSaveDialogByPeerId(peerId)) {\n return false;\n }\n\n const channelId = this.appPeersManager.isChannel(peerId) ? peerId.toChatId() : NULL_PEER_ID;\n\n if(isDialog) {\n const peerText = this.appPeersManager.getPeerSearchText(peerId);\n this.dialogsIndex.indexObject(peerId, peerText);\n }\n\n const wasDialogBefore = this.getDialogOrTopic(peerId, topicId);\n\n let mid: number, message: MyMessage;\n if(dialog.top_message) {\n mid = generateMessageId(dialog.top_message);// dialog.top_message;\n\n // preserve outgoing message\n const wasTopMessage = wasDialogBefore?.top_message && this.appMessagesManager.getMessageByPeer(peerId, wasDialogBefore.top_message) as MyMessage;\n if(wasTopMessage?.pFlags?.is_outgoing && wasDialogBefore.top_message >= mid) {\n mid = wasDialogBefore.top_message;\n }\n\n message = this.appMessagesManager.getMessageByPeer(peerId, mid);\n } else {\n mid = this.appMessagesManager.generateTempMessageId(peerId);\n message = {\n _: 'message',\n id: mid,\n mid,\n from_id: this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId(false)),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n deleted: true,\n pFlags: {out: true},\n date: 0,\n message: ''\n };\n this.appMessagesManager.saveMessages([message], {isOutgoing: true});\n }\n\n if(!message?.pFlags) {\n this.appMessagesManager.log.error('saveConversation no message:', dialog, message);\n }\n\n if(isDialog && !channelId && peerId.isAnyChat()) {\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n if(chat && chat.migrated_to && chat.pFlags.deactivated) {\n const migratedToPeer = this.appPeersManager.getPeerId(chat.migrated_to);\n this.appMessagesManager.migratedFromTo[peerId] = migratedToPeer;\n this.appMessagesManager.migratedToFrom[migratedToPeer] = peerId;\n dialog.migratedTo = migratedToPeer;\n // return;\n }\n }\n\n dialog.top_message = mid;\n // dialog.unread_count = wasDialogBefore && dialog.read_inbox_max_id === getServerMessageId(wasDialogBefore.read_inbox_max_id) ? wasDialogBefore.unread_count : dialog.unread_count;\n dialog.read_inbox_max_id = generateMessageId(wasDialogBefore && !dialog.read_inbox_max_id ? wasDialogBefore.read_inbox_max_id : dialog.read_inbox_max_id);\n dialog.read_outbox_max_id = generateMessageId(wasDialogBefore && !dialog.read_outbox_max_id ? wasDialogBefore.read_outbox_max_id : dialog.read_outbox_max_id);\n\n if(isDialog && dialog.folder_id === undefined) {\n if(dialog._ === 'dialog') {\n // ! ะกะ›ะžะ–ะะž ! ะกะœะžะขะ ะ˜ ะ’ getTopMessages\n dialog.folder_id = wasDialogBefore ? (wasDialogBefore as typeof dialog).folder_id : folderId;\n }/* else if(dialog._ === 'dialogFolder') {\n dialog.folder_id = dialog.folder.id;\n } */\n }\n\n dialog.draft = this.appDraftsManager.saveDraft({peerId, threadId: topicId, draft: dialog.draft});\n dialog.peerId = peerId;\n // dialog.indexes ??= {} as any;\n\n // Because we saved message without dialog present\n if(message && message.pFlags.is_outgoing) {\n const isOut = message.pFlags.out;\n if(mid > dialog[isOut ? 'read_outbox_max_id' : 'read_inbox_max_id']) {\n message.pFlags.unread = true;\n\n if(!dialog.unread_count && !isOut) {\n ++dialog.unread_count;\n }\n } else {\n delete message.pFlags.unread;\n }\n }\n\n const historyStorage = this.appMessagesManager.getHistoryStorage(peerId, topicId);\n const slice = historyStorage.history.slice;\n /* if(historyStorage === undefined) { // warning\n historyStorage.history.push(mid);\n } else */if(!slice.length) {\n historyStorage.history.unshift(mid);\n historyStorage.count ||= 1;\n if(this.appMessagesManager.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n } else if(!slice.isEnd(SliceEnd.Bottom)) { // * this will probably never happen, however, if it does, then it will fix slice with top_message\n const slice = historyStorage.history.insertSlice([mid]);\n slice.setEnd(SliceEnd.Bottom);\n historyStorage.count ||= 1;\n if(this.appMessagesManager.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n }\n\n historyStorage.maxId = mid;\n historyStorage.readMaxId = dialog.read_inbox_max_id;\n historyStorage.readOutboxMaxId = dialog.read_outbox_max_id;\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n threadId: isTopic ? dialog.id : undefined,\n settings: dialog.notify_settings\n });\n\n if(isDialog && channelId && dialog.pts) {\n this.apiUpdatesManager.addChannelState(channelId, dialog.pts);\n }\n\n this.generateIndexForDialog(dialog);\n\n if(wasDialogBefore) {\n // fix unread count\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(wasDialogBefore);\n safeReplaceObject(wasDialogBefore, dialog);\n releaseUnreadCount();\n }\n\n this.pushDialog({\n dialog,\n offsetDate: message?.date,\n ignoreOffsetDate,\n saveGlobalOffset\n });\n\n if(isTopic) {\n this.processTopicUpdate(dialog, wasDialogBefore as ForumTopic);\n }\n\n return true;\n }\n\n public processTopicUpdate(topic: ForumTopic, oldTopic?: ForumTopic) {\n if(!oldTopic) {\n return;\n }\n\n const {peerId, id: threadId} = topic;\n const isIconChanged = topic.icon_emoji_id !== (oldTopic as ForumTopic).icon_emoji_id;\n const isTitleChanged = topic.title !== (oldTopic as ForumTopic).title;\n const isChanged = isIconChanged || isTitleChanged;\n\n if(isIconChanged) {\n this.rootScope.dispatchEvent('avatar_update', {peerId, threadId});\n }\n\n if(isChanged) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId, threadId});\n }\n }\n\n public getDialogs(options: {\n query?: string,\n offsetIndex?: number,\n limit?: number,\n filterId?: number,\n skipMigrated?: boolean\n }): MaybePromise<{\n dialogs: Folder['dialogs'],\n count: number,\n isTopEnd: boolean,\n isEnd: boolean\n }> {\n const {\n query = '',\n offsetIndex,\n limit = 20,\n filterId = FOLDER_ID_ALL,\n skipMigrated = false\n } = options;\n\n const isForum = this.isFilterIdForForum(filterId);\n if(!isForum && !REAL_FOLDERS.has(filterId)) {\n const promises: Promise[] = [];\n\n const fillContactsResult = this.appUsersManager.fillContacts();\n if(!fillContactsResult.cached) {\n promises.push(fillContactsResult.promise);\n }\n\n const reloadMissingDialogsPromise = this.filtersStorage.reloadMissingPeerIds(filterId);\n if(reloadMissingDialogsPromise) {\n promises.push(reloadMissingDialogsPromise);\n }\n\n if(promises.length) {\n return Promise.all(promises).then(() => {\n return this.getDialogs(options);\n });\n }\n }\n\n // let's load only first pages by certain folderId. next pages will load without folder filtering\n const realFolderId/* : REAL_FOLDER_ID */ =\n (!REAL_FOLDERS.has(filterId) || this.getOffsetDate(filterId)) && !isForum ?\n GLOBAL_FOLDER_ID :\n filterId/* as REAL_FOLDER_ID */;\n let curDialogStorage = this.getFolderDialogs(filterId, skipMigrated);\n\n const indexKey = this.getDialogIndexKeyByFilterId(filterId);\n\n if(query && !isForum) {\n if(!limit || this.cachedResults.query !== query || this.cachedResults.folderId !== filterId) {\n this.cachedResults.query = query;\n this.cachedResults.folderId = filterId;\n\n const results = this.dialogsIndex.search(query);\n\n const dialogs: Dialog[] = [];\n for(const peerId in this.dialogs) {\n const dialog = this.dialogs[peerId];\n if(results.has(dialog.peerId) && dialog.folder_id === filterId) {\n dialogs.push(dialog);\n }\n }\n\n dialogs.sort((d1, d2) => this.getDialogIndex(d2, indexKey) - this.getDialogIndex(d1, indexKey));\n this.cachedResults.dialogs = dialogs;\n this.cachedResults.count = dialogs.length;\n }\n\n curDialogStorage = this.cachedResults.dialogs;\n } else {\n this.cachedResults.query = '';\n }\n\n let offset = 0;\n if(offsetIndex > 0) {\n for(let length = curDialogStorage.length; offset < length; ++offset) {\n if(offsetIndex > this.getDialogIndex(curDialogStorage[offset], indexKey)) {\n break;\n }\n }\n }\n\n const loadedAll = this.isDialogsLoaded(realFolderId);\n const isEnoughDialogs = curDialogStorage.length >= (offset + limit);\n if(query || loadedAll || isEnoughDialogs) {\n const dialogs = curDialogStorage.slice(offset, offset + limit);\n return {\n dialogs,\n count: loadedAll ? curDialogStorage.length : null,\n isTopEnd: curDialogStorage.length && ((dialogs[0] && dialogs[0] === curDialogStorage[0]) || this.getDialogIndex(curDialogStorage[0], indexKey) < offsetIndex),\n isEnd: (query || loadedAll) && (offset + limit) >= curDialogStorage.length\n };\n }\n\n return this.appMessagesManager.getTopMessages({limit, folderId: realFolderId}).then((result) => {\n // const curDialogStorage = this[folderId];\n if(skipMigrated) {\n curDialogStorage = this.getFolderDialogs(filterId, skipMigrated);\n }\n\n offset = 0;\n if(offsetIndex > 0) {\n for(let length = curDialogStorage.length; offset < length; ++offset) {\n if(offsetIndex > this.getDialogIndex(curDialogStorage[offset], indexKey)) {\n break;\n }\n }\n }\n\n // this.log.warn(offset, offset + limit, curDialogStorage.dialogs.length, this.dialogs.length);\n\n const dialogs = curDialogStorage.slice(offset, offset + limit);\n return {\n dialogs,\n count: result.count === undefined ? curDialogStorage.length : result.count,\n isTopEnd: curDialogStorage.length && ((dialogs[0] && dialogs[0] === curDialogStorage[0]) || this.getDialogIndex(curDialogStorage[0], indexKey) < offsetIndex),\n // isEnd: this.isDialogsLoaded(realFolderId) && (offset + limit) >= curDialogStorage.length\n isEnd: result.isEnd\n };\n });\n }\n\n // * FORUMS SECTION\n\n public flushForumTopicsCache(peerId: PeerId) {\n const cache = this.forumTopics.get(peerId);\n if(!cache) {\n return;\n }\n\n const folder = this.folders[peerId];\n if(folder) {\n if(folder.dispatchUnreadTimeout) {\n clearTimeout(folder.dispatchUnreadTimeout);\n }\n\n delete this.allDialogsLoaded[peerId];\n delete this.pinnedOrders[peerId];\n delete this.dialogsOffsetDate[peerId];\n delete this.folders[peerId];\n }\n\n cache.topics.clear();\n\n // for permanent delete\n // this.forumTopics.delete(peerId);\n }\n\n public getForumTopicsCache(peerId: PeerId) {\n let forumTopics = this.forumTopics.get(peerId);\n if(!forumTopics) {\n forumTopics = {\n topics: new Map(),\n deletedTopics: new Set(),\n getTopicPromises: new Map()\n };\n\n this.forumTopics.set(peerId, forumTopics);\n }\n\n return forumTopics;\n }\n\n public getForumTopicById(peerId: PeerId, topicId?: number): Promise {\n if(!this.appPeersManager.isForum(peerId)) {\n return Promise.reject(makeError('CHANNEL_FORUM_MISSING'));\n }\n\n const cache = this.getForumTopicsCache(peerId);\n let promise: CancellablePromise;\n if(topicId) {\n promise = cache.getTopicPromises.get(topicId);\n if(promise) {\n return promise;\n }\n\n if(cache.deletedTopics.has(topicId)) {\n return Promise.resolve(undefined);\n }\n\n cache.getTopicPromises.set(topicId, promise = deferredPromise());\n }\n\n cache.getTopicsPromise ??= pause(0).then(() => {\n const promises: {[topicId: number]: typeof promise} = {};\n const ids: number[] = [];\n for(const [topicId, promise] of cache.getTopicPromises) {\n promises[topicId] = promise;\n ids.push(getServerMessageId(topicId));\n }\n\n cache.getTopicPromises.clear();\n\n const fullfillLeft = () => {\n for(const topicId in promises) {\n promises[topicId].resolve(undefined);\n cache.deletedTopics.add(+topicId);\n }\n };\n\n if(this.getForumTopicsCache(peerId) !== cache) {\n fullfillLeft();\n return;\n }\n\n return this.apiManager.invokeApi('channels.getForumTopicsByID', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n topics: ids\n }).then((messagesForumTopics) => {\n if(this.getForumTopicsCache(peerId) !== cache) {\n return;\n }\n\n this.applyDialogs(messagesForumTopics, peerId);\n\n messagesForumTopics.topics.forEach((forumTopic) => {\n if(forumTopic._ === 'forumTopic') {\n promises[forumTopic.id].resolve(forumTopic);\n delete promises[peerId];\n }\n });\n\n return messagesForumTopics;\n }, () => {}).then(() => {\n fullfillLeft();\n\n cache.getTopicsPromise = undefined;\n if(cache.getTopicPromises.size) {\n this.getForumTopicById(peerId);\n }\n });\n });\n\n return promise || cache.getTopicsPromise;\n }\n\n // public getForumTopicById(peerId: PeerId, topicId: number) {\n // return this.getForumTopicsByID(peerId, topicId).then((result) => result.topics[0]);\n // }\n\n public getForumTopic(peerId: PeerId, topicId: number) {\n const forumTopics = this.forumTopics.get(peerId);\n return forumTopics?.topics?.get(topicId);\n }\n\n public getForumTopicOrReload(peerId: PeerId, topicId: number) {\n const forumTopic = this.getForumTopic(peerId, topicId);\n if(forumTopic) {\n return forumTopic;\n }\n\n const cache = this.getForumTopicsCache(peerId);\n return cache?.deletedTopics?.has(topicId) ? undefined : this.getForumTopicById(peerId, topicId);\n }\n\n public processTopics>(peerId: PeerId, result: T) {\n return callbackify(result, (result) => {\n if('pts' in result) {\n this.apiUpdatesManager.addChannelState(peerId.toChatId(), result.pts);\n }\n\n const peer = this.appPeersManager.getOutputPeer(peerId);\n result.topics = result.topics.map((topic) => {\n if(topic._ === 'forumTopicDeleted') {\n return;\n }\n\n (topic as ForumTopic).peer = peer;\n topic.id = generateMessageId(topic.id);\n return topic;\n }).filter(Boolean);\n\n return result;\n });\n }\n\n public processTopicsPromise[1]>>(peerId: PeerId, promise: T): T {\n return promise.then((result) => {\n this.processTopics(peerId, result);\n return result;\n }) as any;\n }\n\n public getForumUnreadCount(peerId: PeerId) {\n if(!this.appPeersManager.isForum(peerId)) {\n return;\n }\n\n const folder = this.getFolder(peerId);\n\n const f = folder.dialogs.length >= 20 || this.isDialogsLoaded(peerId) ?\n folder.dialogs.slice(0, 20) :\n callbackify(this.getDialogs({filterId: peerId, limit: 20}), (result) => {\n return result.dialogs;\n });\n\n return callbackify(f, (dialogs) => {\n return {\n count: dialogs.reduce((acc, v) => acc + +!!v.unread_count, 0),\n hasUnmuted: dialogs.some((dialog) => dialog.unread_count && this.isDialogUnmuted(dialog))\n };\n });\n }\n\n // * FORUMS SECTION END\n\n private handleDialogTogglePinned(dialog: Dialog | ForumTopic, pinned: boolean, folderId: number) {\n if(dialog) {\n if(!pinned) {\n this.handleDialogUnpinning(dialog, folderId);\n } else { // means set\n dialog.pFlags.pinned = true;\n }\n\n this.generateIndexForDialog(dialog);\n }\n\n this.appMessagesManager.scheduleHandleNewDialogs(dialog.peerId, dialog);\n }\n\n private handleDialogsPinned(folderId: number, order: (Dialog['peerId'] | ForumTopic['id'])[]) {\n const isForum = this.isFilterIdForForum(folderId);\n this.resetPinnedOrder(folderId);\n this.getPinnedOrders(folderId).push(...order);\n this.savePinnedOrders();\n order.reverse(); // index must be higher\n const newPinned: {[id: typeof order[0]]: true} = {};\n order.forEach((id) => {\n newPinned[id] = true;\n\n const peerId = isForum ? folderId : id;\n const topicId = isForum ? id : undefined;\n\n const dialog = this.getDialogOrTopic(peerId, topicId);\n this.appMessagesManager.scheduleHandleNewDialogs(peerId, dialog);\n if(!dialog) {\n return;\n }\n\n dialog.pFlags.pinned = true;\n this.generateIndexForDialog(dialog);\n });\n\n const dialogs = this.getFolderDialogs(folderId, false);\n for(const dialog of dialogs) {\n if(!dialog.pFlags.pinned) {\n break;\n }\n\n if(!newPinned[this.getDialogKey(dialog)]) {\n delete dialog.pFlags.pinned;\n this.generateIndexForDialog(dialog);\n this.appMessagesManager.scheduleHandleNewDialogs(dialog.peerId, dialog);\n }\n }\n }\n\n // only 0 and 1 folders\n private onUpdateFolderPeers = (update: Update.updateFolderPeers) => {\n // this.log('updateFolderPeers', update);\n const peers = update.folder_peers;\n\n peers.forEach((folderPeer) => {\n const {folder_id, peer} = folderPeer;\n\n const peerId = this.appPeersManager.getPeerId(peer);\n const dialog = this.dropDialog(peerId)[0];\n if(dialog) {\n if(dialog.pFlags?.pinned) {\n this.handleDialogUnpinning(dialog, folder_id);\n }\n\n (dialog as Dialog).folder_id = folder_id as REAL_FOLDER_ID;\n this.generateIndexForDialog(dialog);\n this.pushDialog({dialog}); // need for simultaneously updatePinnedDialogs\n }\n\n this.appMessagesManager.scheduleHandleNewDialogs(peerId, dialog);\n });\n };\n\n private onUpdateDialogPinned = (update: Update.updateDialogPinned) => {\n const folderId = update.folder_id ?? FOLDER_ID_ALL;\n // this.log('updateDialogPinned', update);\n const peerId = this.appPeersManager.getPeerId((update.peer as DialogPeer.dialogPeer).peer);\n const dialog = this.getDialogOnly(peerId);\n\n // ัั‚ะพั‚ ะบะพะด ะฒะฝะธะทัƒ ะฝะธะบะพะณะดะฐ ะฝะต ัั€ะฐะฑะพั‚ะฐะตั‚, ะฒ ะฟะฐะฟะบะฐั… ะทะฐ ะฟะธะฝะฝะตะด ะพั‚ะฒะตั‡ะฐะตั‚ updateDialogFilter\n /* if(update.folder_id > 1) {\n const filter = this.filtersStorage.filters[update.folder_id];\n if(update.pFlags.pinned) {\n filter.pinned_peers.unshift(peerId);\n } else {\n filter.pinned_peers.findAndSplice((p) => p === peerId);\n }\n } */\n\n this.handleDialogTogglePinned(dialog, update.pFlags.pinned, folderId);\n };\n\n private onUpdateChannelPinnedTopic = (update: Update.updateChannelPinnedTopic) => {\n const peerId = update.channel_id.toPeerId(true);\n const topicId = generateMessageId(update.topic_id);\n const topic = this.getForumTopic(peerId, topicId);\n if(!topic) {\n return;\n }\n\n this.handleDialogTogglePinned(topic, update.pFlags.pinned, this.getFilterIdForForum(topic));\n };\n\n private onUpdatePinnedDialogs = (update: Update.updatePinnedDialogs) => {\n const folderId = update.folder_id ?? FOLDER_ID_ALL;\n\n if(update.order) {\n this.handleDialogsPinned(folderId, update.order.map((peer) => this.appPeersManager.getPeerId((peer as DialogPeer.dialogPeer).peer)));\n } else {\n this.apiManager.invokeApi('messages.getPinnedDialogs', {\n folder_id: folderId\n }).then((dialogsResult) => {\n // * for test reordering and rendering\n // dialogsResult.dialogs.reverse();\n\n this.applyDialogs(dialogsResult);\n\n this.handleDialogsPinned(folderId, dialogsResult.dialogs.map((d) => d.peerId));\n });\n }\n };\n\n private onUpdateChannelPinnedTopics = async(update: Update.updateChannelPinnedTopics) => {\n const peerId = update.channel_id.toPeerId(true);\n const forumTopics = this.forumTopics.get(peerId);\n if(!forumTopics) {\n return;\n }\n\n const filterId = peerId;\n if(update.order) {\n const order = update.order.map((topicId) => generateMessageId(topicId));\n this.handleDialogsPinned(filterId, order);\n } else {\n const limit = await this.apiManager.getLimit('topicPin', true);\n\n const promise = this.apiManager.invokeApi('channels.getForumTopics', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n limit,\n offset_date: 0,\n offset_id: 0,\n offset_topic: 0\n });\n\n const result = await this.processTopics(peerId, promise);\n\n const topics = result.topics as ForumTopic[];\n const pinned = topics.filter((topic) => topic.pFlags.pinned);\n this.handleDialogsPinned(filterId, pinned.map((topic) => topic.id));\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {DialogFilter, ForumTopic, Update} from '../../layer';\nimport type {Dialog} from '../appManagers/appMessagesManager';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport copy from '../../helpers/object/copy';\nimport {AppManager} from '../appManagers/manager';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport assumeType from '../../helpers/assumeType';\nimport {FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, REAL_FOLDERS, REAL_FOLDER_ID, START_LOCAL_ID} from '../mtproto/mtproto_config';\nimport makeError from '../../helpers/makeError';\n\nexport type MyDialogFilter = DialogFilter.dialogFilter;\n\nconst convertment = [\n ['pinned_peers', 'pinnedPeerIds'],\n ['exclude_peers', 'excludePeerIds'],\n ['include_peers', 'includePeerIds']\n] as ['pinned_peers' | 'exclude_peers' | 'include_peers', 'pinnedPeerIds' | 'excludePeerIds' | 'includePeerIds'][];\n\nconst PREPENDED_FILTERS = REAL_FOLDERS.size;\n\nconst LOCAL_FILTER: MyDialogFilter = {\n _: 'dialogFilter',\n pFlags: {},\n flags: 0,\n id: 0,\n title: '',\n exclude_peers: [],\n include_peers: [],\n pinned_peers: [],\n excludePeerIds: [],\n includePeerIds: [],\n pinnedPeerIds: []\n};\n\nexport default class FiltersStorage extends AppManager {\n private filters: {[filterId: string]: MyDialogFilter};\n private filtersArr: Array;\n private localFilters: {[filterId: string]: MyDialogFilter};\n private localId: number;\n private reloadedPeerIds: Set;\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateDialogFilter: this.onUpdateDialogFilter,\n\n updateDialogFilters: this.onUpdateDialogFilters,\n\n updateDialogFilterOrder: this.onUpdateDialogFilterOrder\n });\n\n // delete peers when dialog is being dropped\n /* rootScope.addEventListener('peer_deleted', (peerId) => {\n for(const filterId in this.filters) {\n const filter = this.filters[filterId];\n let modified = false;\n [filter.pinned_peers, filter.include_peers, filter.exclude_peers].forEach((arr) => {\n forEachReverse(arr, (inputPeer, idx) => {\n if(getPeerId(inputPeer) === peerId) {\n arr.splice(idx, 1);\n modified = true;\n }\n });\n });\n\n if(modified) {\n this.saveDialogFilter(filter, true);\n }\n }\n }); */\n\n this.rootScope.addEventListener('premium_toggle', () => {\n this.onUpdateDialogFilters({_: 'updateDialogFilters'});\n });\n\n return this.appStateManager.getState().then((state) => {\n const filtersArr = this.prependFilters(state.filtersArr);\n filtersArr.map((filter) => {\n this.saveDialogFilter(filter, false, true);\n });\n });\n }\n\n /**\n * ! use it only with saving\n */\n private prependFilters(filters: DialogFilter[]) {\n filters = filters.slice();\n\n const allChatsFilter = this.localFilters[FOLDER_ID_ALL];\n const archiveFilter = this.localFilters[FOLDER_ID_ARCHIVE];\n\n const allChatsFilterIndex = filters.findIndex((filter) => filter._ === 'dialogFilterDefault' || filter.id === FOLDER_ID_ALL);\n if(allChatsFilterIndex !== -1) filters[allChatsFilterIndex] = allChatsFilter;\n else filters.unshift(allChatsFilter);\n\n findAndSplice(filters, (filter) => (filter as MyDialogFilter).id === FOLDER_ID_ARCHIVE);\n filters.splice(/* 1 */filters[0] === allChatsFilter ? 1 : 0, 0, archiveFilter);\n\n this.localId = START_LOCAL_ID;\n filters.forEach((filter) => {\n delete filter.localId;\n });\n\n return filters;\n }\n\n private generateLocalFilter(id: REAL_FOLDER_ID) {\n const filter: MyDialogFilter = {...copy(LOCAL_FILTER), id};\n if(id === FOLDER_ID_ALL) {\n filter.pFlags.exclude_archived = true;\n } else if(id === FOLDER_ID_ARCHIVE) {\n filter.pFlags.exclude_unarchived = true;\n }\n\n if(REAL_FOLDERS.has(id)) {\n filter.pinnedPeerIds = this.dialogsStorage.getPinnedOrders(id);\n }\n\n return filter;\n }\n\n // private getLocalFilter(id: number) {\n // return this.filters[id] ??= this.generateLocalFilter(id);\n // }\n\n public clear = (init?: boolean) => {\n if(!init) {\n // safeReplaceObject(this.filters, {});\n this.reloadedPeerIds.clear();\n this.clearFilters();\n } else {\n this.filters = {};\n this.filtersArr = [];\n this.reloadedPeerIds = new Set();\n\n this.localFilters = {};\n for(const filterId of REAL_FOLDERS) {\n this.localFilters[filterId] = this.generateLocalFilter(filterId as REAL_FOLDER_ID);\n }\n }\n\n this.localId = START_LOCAL_ID;\n };\n\n private onUpdateDialogFilter = (update: Update.updateDialogFilter) => {\n if(update.filter) {\n this.saveDialogFilter(update.filter as any);\n } else if(this.filters[update.id]) { // ะŸะฐะฟะบะฐ ัƒะดะฐะปะตะฝะฐ\n // this.getDialogFilters(true);\n this.rootScope.dispatchEvent('filter_delete', this.filters[update.id]);\n delete this.filters[update.id];\n findAndSplice(this.filtersArr, (filter) => (filter as DialogFilter.dialogFilter).id === update.id);\n }\n\n this.pushToState();\n };\n\n private onUpdateDialogFilters = (update: Update.updateDialogFilters) => {\n // console.warn('updateDialogFilters', update);\n\n const oldFilters = copy(this.filters);\n\n this.getDialogFilters(true).then((filters) => {\n for(const _filterId in oldFilters) {\n const filterId = +_filterId;\n if(!filters.find((filter) => filter.id === filterId)) { // * deleted\n this.onUpdateDialogFilter({_: 'updateDialogFilter', id: filterId});\n }\n }\n\n this.onUpdateDialogFilterOrder({_: 'updateDialogFilterOrder', order: filters.map((filter) => filter.id)});\n });\n };\n\n private onUpdateDialogFilterOrder = (update: Update.updateDialogFilterOrder) => {\n // console.log('updateDialogFilterOrder', update);\n\n const order = update.order.slice();\n if(!order.includes(FOLDER_ID_ARCHIVE)) {\n order.splice(order[0] === FOLDER_ID_ALL ? 1 : 0, 0, FOLDER_ID_ARCHIVE);\n }\n\n this.localId = START_LOCAL_ID;\n order.forEach((filterId) => {\n const filter = this.filters[filterId];\n delete filter.localId;\n this.setLocalId(filter);\n });\n\n this.rootScope.dispatchEvent('filter_order', order);\n\n this.pushToState();\n };\n\n private pushToState() {\n this.appStateManager.pushToState('filtersArr', this.filtersArr);\n }\n\n public testDialogForFilter(dialog: Dialog | ForumTopic.forumTopic, filter?: MyDialogFilter) {\n if(!filter) {\n return true;\n }\n\n if(REAL_FOLDERS.has(filter.id)) {\n return (dialog as Dialog).folder_id === filter.id && this.dialogsStorage.canSaveDialogByPeerId(dialog.peerId);\n }\n\n const peerId = dialog.peerId;\n\n // * check whether dialog exists\n if(!this.appMessagesManager.getDialogOnly(peerId)) {\n return false;\n }\n\n // exclude_peers\n if(filter.excludePeerIds.includes(peerId)) {\n return false;\n }\n\n // include_peers\n if(filter.includePeerIds.includes(peerId)) {\n return true;\n }\n\n const pFlags = filter.pFlags;\n\n // exclude_archived\n if(pFlags.exclude_archived && (dialog as Dialog).folder_id === FOLDER_ID_ARCHIVE) {\n return false;\n }\n\n // exclude_read\n if(pFlags.exclude_read && !this.appMessagesManager.isDialogUnread(dialog)) {\n return false;\n }\n\n // exclude_muted\n if(pFlags.exclude_muted && this.appNotificationsManager.isPeerLocalMuted({peerId}) && !(dialog.unread_mentions_count && dialog.unread_count)) {\n return false;\n }\n\n if(this.appPeersManager.isAnyChat(peerId)) {\n // broadcasts\n if(pFlags.broadcasts && this.appPeersManager.isBroadcast(peerId)) {\n return true;\n }\n\n // groups\n if(pFlags.groups && this.appPeersManager.isAnyGroup(peerId)) {\n return true;\n }\n } else {\n const userId = peerId.toUserId();\n\n // bots\n if(this.appUsersManager.isBot(userId)) {\n return !!pFlags.bots;\n }\n\n // non_contacts\n if(pFlags.non_contacts && !this.appUsersManager.isContact(userId)) {\n return true;\n }\n\n // contacts\n if(pFlags.contacts && this.appUsersManager.isContact(userId)) {\n return true;\n }\n }\n\n return false;\n }\n\n public testDialogForFilterId(dialog: Dialog, filterId: number) {\n return this.testDialogForFilter(dialog, this.filters[filterId]);\n }\n\n public getFilter(filterId: number) {\n return this.filters[filterId];\n }\n\n public getFilters() {\n return this.filters;\n }\n\n public clearFilters() {\n const filters = this.getFilters();\n for(const filterId in filters) { // delete filters\n if(REAL_FOLDERS.has(+filterId)) {\n continue;\n }\n\n this.onUpdateDialogFilter({\n _: 'updateDialogFilter',\n id: +filterId\n });\n }\n }\n\n public async toggleDialogPin(peerId: PeerId, filterId: number) {\n const filter = this.filters[filterId];\n\n const index = filter.pinnedPeerIds.indexOf(peerId);\n const wasPinned = index !== -1;\n\n if(wasPinned) {\n filter.pinned_peers.splice(index, 1);\n filter.pinnedPeerIds.splice(index, 1);\n }\n\n if(!wasPinned) {\n if(filter.pinned_peers.length >= (await this.apiManager.getConfig()).pinned_infolder_count_max) {\n return Promise.reject(makeError('PINNED_DIALOGS_TOO_MUCH'));\n }\n\n filter.pinned_peers.unshift(this.appPeersManager.getInputPeerById(peerId));\n filter.pinnedPeerIds.unshift(peerId);\n }\n\n return this.updateDialogFilter(filter);\n }\n\n public createDialogFilter(filter: MyDialogFilter, prepend?: boolean) {\n const maxId = Math.max(1, ...Object.keys(this.filters).map((i) => +i));\n filter = copy(filter);\n filter.id = maxId + 1;\n return this.updateDialogFilter(filter, undefined, prepend);\n }\n\n public updateDialogFilter(filter: MyDialogFilter, remove = false, prepend = false) {\n const flags = remove ? 0 : 1;\n\n return this.apiManager.invokeApi('messages.updateDialogFilter', {\n flags,\n id: filter.id,\n filter: remove ? undefined : this.getOutputDialogFilter(filter)\n }).then((bool) => { // ะฒะพะทะผะพะถะฝะพ ะฝัƒะถะฝะฐ ะฟั€ะพะฒะตั€ะบะฐ ะธ ะพั‚ะบะฐั‚, ะตัะปะธ ั€ะตะทัƒะปัŒั‚ะฐั‚ ะฝะต ะขะ ะฃ\n // console.log('updateDialogFilter bool:', bool);\n\n /* if(!this.filters[filter.id]) {\n this.saveDialogFilter(filter);\n }\n\n rootScope.$broadcast('filter_update', filter); */\n\n this.onUpdateDialogFilter({\n _: 'updateDialogFilter',\n id: filter.id,\n filter: remove ? undefined : filter as any\n });\n\n if(prepend) {\n const f: MyDialogFilter[] = [];\n for(const filterId in this.filters) {\n const filter = this.filters[filterId];\n ++filter.localId;\n f.push(filter);\n }\n\n filter.localId = START_LOCAL_ID;\n\n const order = f.sort((a, b) => a.localId - b.localId).map((filter) => filter.id);\n this.onUpdateDialogFilterOrder({\n _: 'updateDialogFilterOrder',\n order\n });\n }\n });\n }\n\n public updateDialogFiltersOrder(order: number[]) {\n return this.apiManager.invokeApi('messages.updateDialogFiltersOrder', {\n order\n }).then(() => {\n this.onUpdateDialogFilterOrder({\n _: 'updateDialogFilterOrder',\n order\n });\n });\n }\n\n public getOutputDialogFilter(filter: MyDialogFilter) {\n const c = copy(filter);\n /* convertment.forEach(([from, to]) => {\n c[from] = c[to].map((peerId) => this.appPeersManager.getInputPeerById(peerId));\n }); */\n\n this.filterIncludedPinnedPeers(filter);\n\n return c;\n }\n\n private filterIncludedPinnedPeers(filter: MyDialogFilter) {\n forEachReverse(filter.includePeerIds, (peerId, idx) => {\n if(filter.pinnedPeerIds.includes(peerId)) {\n filter.include_peers.splice(idx, 1);\n filter.includePeerIds.splice(idx, 1);\n }\n });\n }\n\n // private spliceMissingPeerIds(filterId: number, type: ArgumentTypes[1], missingPeerIds: PeerId[]) {\n // const filter = this.getFilter(filterId);\n // const peers = filter && filter[type];\n // if(!peers?.length) {\n // return;\n // }\n\n // let spliced = false;\n // missingPeerIds.forEach((peerId) => {\n // const inputPeer = findAndSplice(peers, (inputPeer) => getPeerId(inputPeer) === peerId);\n // if(inputPeer) {\n // spliced = true;\n // }\n // });\n\n // if(spliced) {\n // this.onUpdateDialogFilter({\n // _: 'updateDialogFilter',\n // id: filterId,\n // filter\n // });\n // }\n // }\n\n public reloadMissingPeerIds(\n filterId: number,\n type: 'pinned_peers' | 'include_peers' | 'exclude_peers' = 'pinned_peers'\n ) {\n const filter = this.getFilter(filterId);\n const peers = filter?.[type];\n if(!peers?.length) {\n return;\n }\n\n // const missingPeerIds: PeerId[] = [];\n const reloadDialogs = peers.filter((inputPeer) => {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n const isAlreadyReloaded = this.reloadedPeerIds.has(peerId);\n const dialog = this.appMessagesManager.getDialogOnly(peerId);\n // if(isAlreadyReloaded && !dialog) {\n // missingPeerIds.push(peerId);\n // }\n\n const reload = !isAlreadyReloaded && !dialog;\n return reload;\n });\n\n if(!reloadDialogs.length) {\n // if(missingPeerIds.length) {\n // this.spliceMissingPeerIds(filterId, type, missingPeerIds);\n // }\n\n return;\n }\n\n const reloadPromises = reloadDialogs.map((inputPeer) => {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n const promise = this.appMessagesManager.reloadConversation(inputPeer)\n .then((dialog) => {\n this.reloadedPeerIds.add(peerId);\n\n return dialog ? undefined : peerId;\n });\n\n return promise;\n });\n\n const reloadPromise = Promise.all(reloadPromises).then((missingPeerIds) => {\n missingPeerIds = missingPeerIds.filter(Boolean);\n if(!missingPeerIds.length) {\n return;\n }\n\n // this.spliceMissingPeerIds(filterId, type, missingPeerIds);\n });\n\n return reloadPromise;\n }\n\n public async getDialogFilters(overwrite = false): Promise {\n const keys = Object.keys(this.filters);\n if(keys.length > PREPENDED_FILTERS && !overwrite) {\n return keys.map((filterId) => this.filters[filterId]).sort((a, b) => a.localId - b.localId);\n }\n\n const filters = await this.apiManager.invokeApiSingle('messages.getDialogFilters');\n const prepended = this.prependFilters(filters);\n return prepended.map((filter) => this.saveDialogFilter(filter, overwrite)).filter(Boolean);\n }\n\n public getSuggestedDialogsFilters() {\n return this.apiManager.invokeApi('messages.getSuggestedDialogFilters');\n }\n\n public saveDialogFilter(filter: DialogFilter, update = true, silent?: boolean) {\n // defineNotNumerableProperties(filter, ['includePeerIds', 'excludePeerIds', 'pinnedPeerIds']);\n\n if(filter._ === 'dialogFilterDefault') {\n filter = this.localFilters[FOLDER_ID_ALL];\n }\n\n assumeType(filter);\n if(!REAL_FOLDERS.has(filter.id)) {\n convertment.forEach(([from, to]) => {\n assumeType(filter);\n filter[to] = filter[from].map((peer) => this.appPeersManager.getPeerId(peer));\n });\n\n this.filterIncludedPinnedPeers(filter);\n\n filter.include_peers = filter.pinned_peers.concat(filter.include_peers);\n filter.includePeerIds = filter.pinnedPeerIds.concat(filter.includePeerIds);\n }\n\n const oldFilter = this.filters[filter.id];\n if(oldFilter) {\n Object.assign(oldFilter, filter);\n } else {\n this.filters[filter.id] = filter;\n }\n\n this.setLocalId(filter);\n\n if(!silent) {\n if(update) {\n this.rootScope.dispatchEvent('filter_update', filter);\n } else if(!oldFilter) {\n this.rootScope.dispatchEvent('filter_new', filter);\n }\n }\n\n return filter;\n }\n\n private setLocalId(filter: MyDialogFilter) {\n if(filter.localId !== undefined) {\n if(filter.localId >= this.localId) {\n this.localId = filter.localId + 1;\n }\n } else {\n filter.localId = this.localId++ as MyDialogFilter['localId'];\n findAndSplice(this.filtersArr, (_filter) => _filter.id === filter.id);\n this.filtersArr.push(filter);\n this.pushToState();\n }\n }\n\n public async isFilterIdAvailable(filterId: number) {\n if(REAL_FOLDERS.has(filterId)) {\n return true;\n }\n\n const limit = await this.apiManager.getLimit('folders');\n const isFolderAvailable = this.filtersArr.filter((filter) => !REAL_FOLDERS.has(filter.id)).slice(0, limit).some((filter) => filter.id === filterId);\n\n return isFolderAvailable;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function applyMixins(derivedCtor: any, constructors: any[]) {\n // const callbacks: Array<(...args: any[]) => any> = [];\n\n constructors.forEach((baseCtor) => {\n Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {\n const value: PropertyDescriptor = Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null);\n /* if(name === '_constructor') {\n callbacks.push(value.value);\n return;\n } else */if(name === 'constructor') {\n return;\n }\n\n Object.defineProperty(\n derivedCtor.prototype,\n name,\n value\n );\n });\n });\n\n // if(callbacks.length) {\n // function c(...args: any[]): any {\n // callbacks.forEach((cb, idx) => {\n // // @ts-ignore\n // cb.apply(this, args[idx] || []);\n // });\n // };\n\n // Object.defineProperty(derivedCtor.prototype, 'superConstructor', {\n // configurable: true,\n // enumerable: true,\n // value: c,\n // writable: true\n // });\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport DEBUG from '../../config/debug';\nimport {ConstructorDeclMap, Message, MessageEntity, MessageFwdHeader, Peer, Update, Updates} from '../../layer';\nimport {logger, LogTypes} from '../logger';\nimport assumeType from '../../helpers/assumeType';\nimport App from '../../config/app';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport {AppManager} from './manager';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport ctx from '../../environment/ctx';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport applyMixins from '../../helpers/applyMixins';\nimport tsNow from '../../helpers/tsNow';\n\ntype UpdatesState = {\n pendingPtsUpdates: (Update & {pts: number, pts_count: number})[],\n pendingSeqUpdates?: {[seq: number]: {seq: number, date: number, updates: any[]}},\n syncPending: {\n seqAwaiting?: number,\n ptsAwaiting?: boolean,\n timeout: number\n },\n syncLoading: Promise,\n\n seq?: number,\n pts?: number,\n date?: number,\n lastPtsUpdateTime?: number,\n lastDifferenceTime?: number\n};\n\nconst SYNC_DELAY = 6;\n\nclass ApiUpdatesManager {\n public updatesState: UpdatesState = {\n pendingPtsUpdates: [],\n pendingSeqUpdates: {},\n syncPending: null,\n syncLoading: null\n };\n\n private channelStates: {[channelId: ChatId]: UpdatesState} = {};\n private attached = false;\n\n private log = logger('UPDATES', LogTypes.Error | LogTypes.Warn | LogTypes.Log/* | LogTypes.Debug */);\n private debug = DEBUG;\n\n private subscriptions: {[channelId: ChatId]: {count: number, interval?: number}} = {};\n\n constructor() {\n this._constructor(false);\n }\n\n private setProxy() {\n const self = this;\n this.updatesState = new Proxy(this.updatesState, {\n set: function(target: ApiUpdatesManager['updatesState'], key: keyof ApiUpdatesManager['updatesState'], value: ApiUpdatesManager['updatesState'][typeof key]) {\n // @ts-ignore\n target[key] = value;\n self.saveUpdatesState();\n return true;\n }\n });\n }\n\n public saveUpdatesState() {\n const us = this.updatesState;\n this.appStateManager.pushToState('updates', {\n seq: us.seq,\n pts: us.pts,\n date: us.date\n });\n }\n\n private popPendingSeqUpdate() {\n const state = this.updatesState;\n const nextSeq = state.seq + 1;\n const pendingUpdatesData = state.pendingSeqUpdates[nextSeq];\n if(!pendingUpdatesData) {\n return false;\n }\n\n const updates = pendingUpdatesData.updates;\n for(let i = 0, length = updates.length; i < length; ++i) {\n this.saveUpdate(updates[i]);\n }\n\n state.seq = pendingUpdatesData.seq;\n if(pendingUpdatesData.date && state.date < pendingUpdatesData.date) {\n state.date = pendingUpdatesData.date;\n }\n delete state.pendingSeqUpdates[nextSeq];\n\n if(!this.popPendingSeqUpdate() &&\n state.syncPending?.seqAwaiting &&\n state.seq >= state.syncPending.seqAwaiting) {\n if(!state.syncPending.ptsAwaiting) {\n this.clearStatePendingSync(state);\n } else {\n delete state.syncPending.seqAwaiting;\n }\n }\n\n return true;\n }\n\n private popPendingPtsUpdate(channelId: ChatId) {\n const curState = channelId ? this.getChannelState(channelId) : this.updatesState;\n if(!curState.pendingPtsUpdates.length) {\n return false;\n }\n\n curState.pendingPtsUpdates.sort((a, b) => {\n return a.pts - b.pts;\n });\n // this.log('pop update', channelId, curState.pendingPtsUpdates)\n\n let curPts = curState.pts;\n let goodPts = 0;\n let goodIndex = 0;\n for(let i = 0, length = curState.pendingPtsUpdates.length; i < length; ++i) {\n const update = curState.pendingPtsUpdates[i];\n curPts += update.pts_count;\n if(curPts >= update.pts) {\n goodPts = update.pts;\n goodIndex = i;\n }\n }\n\n if(!goodPts) {\n return false;\n }\n\n this.debug && this.log.debug('pop pending pts updates', goodPts, curState.pendingPtsUpdates.slice(0, goodIndex + 1));\n\n curState.pts = goodPts;\n for(let i = 0; i <= goodIndex; ++i) {\n const update = curState.pendingPtsUpdates[i];\n\n // @ts-ignore\n this.saveUpdate(update);\n }\n curState.pendingPtsUpdates.splice(0, goodIndex + 1);\n\n if(!curState.pendingPtsUpdates.length && curState.syncPending) {\n if(!curState.syncPending.seqAwaiting) {\n this.clearStatePendingSync(curState);\n } else {\n delete curState.syncPending.ptsAwaiting;\n }\n }\n\n return true;\n }\n\n public forceGetDifference() {\n if(!this.updatesState.syncLoading) {\n this.getDifference();\n }\n }\n\n public processLocalUpdate(update: Update) {\n this.processUpdateMessage({\n _: 'updateShort',\n update\n } as Updates);\n }\n\n public processUpdateMessage = (updateMessage: any, options: Partial<{\n override: boolean\n }> = {}) => {\n // return forceGetDifference()\n const processOpts = {\n date: updateMessage.date,\n seq: updateMessage.seq,\n seqStart: updateMessage.seq_start\n // ignoreSyncLoading: options.ignoreSyncLoading\n };\n\n this.debug && this.log.debug('processUpdateMessage', updateMessage);\n\n switch(updateMessage._) {\n case 'updatesTooLong':\n case 'new_session_created':\n this.forceGetDifference();\n break;\n\n case 'updateShort':\n this.processUpdate(updateMessage.update, processOpts);\n break;\n\n case 'updateShortMessage':\n case 'updateShortChatMessage': {\n assumeType(updateMessage);\n this.debug && this.log.debug('updateShortMessage | updateShortChatMessage', {...updateMessage});\n const isOut = updateMessage.pFlags.out;\n const fromId = (updateMessage as Updates.updateShortChatMessage).from_id || (isOut ? this.appPeersManager.peerId : (updateMessage as Updates.updateShortMessage).user_id);\n const toId = (updateMessage as Updates.updateShortChatMessage).chat_id ?\n (updateMessage as Updates.updateShortChatMessage).chat_id.toPeerId(true) :\n ((updateMessage as Updates.updateShortMessage).user_id.toPeerId(false) || this.appPeersManager.peerId);\n\n this.processUpdate({\n _: 'updateNewMessage',\n message: {\n _: 'message',\n pFlags: updateMessage.pFlags,\n id: updateMessage.id,\n from_id: this.appPeersManager.getOutputPeer(fromId.toPeerId()),\n peer_id: this.appPeersManager.getOutputPeer(toId),\n date: updateMessage.date,\n message: updateMessage.message,\n fwd_from: updateMessage.fwd_from,\n reply_to: updateMessage.reply_to,\n entities: updateMessage.entities\n },\n pts: updateMessage.pts,\n pts_count: updateMessage.pts_count\n }, processOpts);\n break;\n }\n\n case 'updatesCombined':\n case 'updates':\n this.appUsersManager.saveApiUsers(updateMessage.users, options.override);\n this.appChatsManager.saveApiChats(updateMessage.chats, options.override);\n\n updateMessage.updates.forEach((update: Update) => {\n this.processUpdate(update, processOpts);\n });\n break;\n\n default:\n this.log.warn('Unknown update message', updateMessage);\n }\n };\n\n private getDifference(first = false): Promise {\n // this.trace('Get full diff')\n const updatesState = this.updatesState;\n const wasSyncing = updatesState.syncLoading;\n if(!wasSyncing) {\n updatesState.pendingSeqUpdates = {};\n updatesState.pendingPtsUpdates = [];\n }\n\n this.clearStatePendingSync(updatesState);\n\n const promise = this.apiManager.invokeApi('updates.getDifference', {\n pts: updatesState.pts,\n pts_total_limit: first /* && false */? /* 50 */1200 : undefined,\n date: updatesState.date,\n qts: -1\n }, {\n timeout: 0x7fffffff\n }).then((differenceResult) => {\n this.debug && this.log.debug('Get diff result', differenceResult);\n\n if(differenceResult._ === 'updates.differenceEmpty') {\n this.debug && this.log.debug('apply empty diff', differenceResult.seq);\n updatesState.date = differenceResult.date;\n updatesState.seq = differenceResult.seq;\n return;\n }\n\n // ! SORRY I'M SORRY I'M SORRY\n if(first) {\n this.rootScope.dispatchEvent('state_synchronizing');\n }\n\n if(differenceResult._ !== 'updates.differenceTooLong') {\n this.appUsersManager.saveApiUsers(differenceResult.users);\n this.appChatsManager.saveApiChats(differenceResult.chats);\n\n // Should be first because of updateMessageID\n // this.log('applying', differenceResult.other_updates.length, 'other updates')\n\n differenceResult.other_updates.forEach((update) => {\n switch(update._) {\n case 'updateChannelTooLong':\n case 'updateNewChannelMessage':\n case 'updateEditChannelMessage':\n this.processUpdate(update);\n return;\n }\n\n this.saveUpdate(update);\n });\n\n // this.log('applying', differenceResult.new_messages.length, 'new messages')\n differenceResult.new_messages.forEach((apiMessage) => {\n this.saveUpdate({\n _: 'updateNewMessage',\n message: apiMessage,\n pts: updatesState.pts,\n pts_count: 0\n });\n });\n\n const nextState = differenceResult._ === 'updates.difference' ? differenceResult.state : differenceResult.intermediate_state;\n updatesState.seq = nextState.seq;\n updatesState.pts = nextState.pts;\n updatesState.date = nextState.date;\n } else {\n updatesState.pts = differenceResult.pts;\n updatesState.date = tsNow(true) + this.timeManager.getServerTimeOffset();\n delete updatesState.seq;\n\n this.channelStates = {};\n\n this.log.warn('getDifference:', differenceResult._);\n this.onDifferenceTooLong();\n }\n\n // this.log('apply diff', updatesState.seq, updatesState.pts)\n\n if(differenceResult._ === 'updates.differenceSlice') {\n return this.getDifference();\n } else {\n this.debug && this.log.debug('finished get diff');\n }\n });\n\n if(!wasSyncing) {\n this.justAName(updatesState, promise);\n }\n\n return promise;\n }\n\n private clearStatePendingSync(state: UpdatesState) {\n if(state.syncPending) {\n clearTimeout(state.syncPending.timeout);\n state.syncPending = null;\n }\n }\n\n private getChannelDifference(channelId: ChatId): Promise {\n const channelState = this.getChannelState(channelId);\n const wasSyncing = channelState.syncLoading;\n if(!wasSyncing) {\n channelState.pendingPtsUpdates = [];\n }\n\n this.clearStatePendingSync(channelState);\n\n const log = this.debug ? this.log.bindPrefix('getChannelDifference-' + channelId) : undefined;\n // this.log.trace('Get channel diff', appChatsManager.getChat(channelId), channelState.pts);\n const promise = this.apiManager.invokeApi('updates.getChannelDifference', {\n channel: this.appChatsManager.getChannelInput(channelId),\n filter: {_: 'channelMessagesFilterEmpty'},\n pts: channelState.pts,\n limit: 1000\n }, {timeout: 0x7fffffff}).then((differenceResult) => {\n log?.debug('diff result', differenceResult)\n channelState.pts = 'pts' in differenceResult ? differenceResult.pts : undefined;\n channelState.lastDifferenceTime = Date.now();\n\n if(differenceResult._ === 'updates.channelDifferenceEmpty') {\n // log?.debug('apply channel empty diff', differenceResult);\n return;\n }\n\n if(differenceResult._ === 'updates.channelDifferenceTooLong') {\n // log?.debug('channel diff too long', differenceResult);\n delete this.channelStates[channelId];\n\n this.saveUpdate({_: 'updateChannelReload', channel_id: channelId});\n return;\n }\n\n this.appUsersManager.saveApiUsers(differenceResult.users);\n this.appChatsManager.saveApiChats(differenceResult.chats);\n\n // Should be first because of updateMessageID\n log?.debug('applying', differenceResult.other_updates.length, 'channel other updates');\n differenceResult.other_updates.forEach((update) => {\n this.saveUpdate(update);\n });\n\n log?.debug('applying', differenceResult.new_messages.length, 'channel new messages');\n differenceResult.new_messages.forEach((apiMessage) => {\n this.saveUpdate({\n _: 'updateNewChannelMessage',\n message: apiMessage,\n pts: channelState.pts,\n pts_count: 0\n });\n });\n\n log?.debug('apply channel diff', channelState.pts);\n\n if(differenceResult._ === 'updates.channelDifference' &&\n !differenceResult.pFlags.final) {\n return this.getChannelDifference(channelId);\n } else {\n log?.debug('finished channel get diff');\n }\n });\n\n if(!wasSyncing) {\n this.justAName(channelState, promise, channelId);\n }\n\n return promise;\n }\n\n private onDifferenceTooLong() {\n this.appUsersManager.clear();\n this.appChatsManager.clear();\n this.appMessagesManager.clear();\n\n this.rootScope.dispatchEvent('state_cleared');\n }\n\n private justAName(state: UpdatesState, promise: UpdatesState['syncLoading'], channelId?: ChatId) {\n state.syncLoading = promise;\n this.rootScope.dispatchEvent('state_synchronizing', channelId);\n\n promise.then(() => {\n state.syncLoading = null;\n this.rootScope.dispatchEvent('state_synchronized', channelId);\n }, () => {\n state.syncLoading = null;\n });\n }\n\n public addChannelState(channelId: ChatId, pts: number) {\n if(!pts) {\n throw new Error('Add channel state without pts ' + channelId);\n }\n\n return this.channelStates[channelId] ??= {\n pts,\n pendingPtsUpdates: [],\n syncPending: null,\n syncLoading: null\n };\n }\n\n public getChannelState(channelId: ChatId, pts?: number) {\n if(this.channelStates[channelId] === undefined) {\n this.addChannelState(channelId, pts);\n }\n\n return this.channelStates[channelId];\n }\n\n private processUpdate(update: Update, options: Partial<{\n date: number,\n seq: number,\n seqStart: number/* ,\n ignoreSyncLoading: boolean */\n }> = {}) {\n let channelId: ChatId;\n switch(update._) {\n case 'updateNewChannelMessage':\n case 'updateEditChannelMessage':\n channelId = this.appPeersManager.getPeerId(update.message.peer_id).toChatId();\n break;\n /* case 'updateDeleteChannelMessages':\n channelId = update.channel_id;\n break; */\n case 'updateChannelTooLong':\n channelId = update.channel_id;\n if(!(channelId in this.channelStates)) {\n return false;\n }\n break;\n default:\n if('channel_id' in update && 'pts' in update) {\n channelId = update.channel_id;\n }\n break;\n }\n\n const {pts, pts_count} = update as Update.updateNewMessage;\n const curState = channelId ? this.getChannelState(channelId, pts) : this.updatesState;\n\n // this.log.log('process', channelId, curState.pts, update)\n\n if(curState.syncLoading/* && !options.ignoreSyncLoading */) {\n return false;\n }\n\n if(update._ === 'updateChannelTooLong') {\n if(!curState.lastPtsUpdateTime ||\n curState.lastPtsUpdateTime < (Date.now() - SYNC_DELAY)) {\n // this.log.trace('channel too long, get diff', channelId, update)\n this.getChannelDifference(channelId);\n }\n return false;\n }\n\n if(update._ === 'updateNewMessage' ||\n update._ === 'updateEditMessage' ||\n update._ === 'updateNewChannelMessage' ||\n update._ === 'updateEditChannelMessage') {\n const message = update.message as Message.message;\n const toPeerId = this.appPeersManager.getPeerId(message.peer_id);\n const fwdHeader: MessageFwdHeader.messageFwdHeader = message.fwd_from || {} as any;\n let reason: string;\n if(message.from_id && !this.appUsersManager.hasUser(this.appPeersManager.getPeerId(message.from_id), message.pFlags.post/* || channelId*/) && (reason = 'author') ||\n fwdHeader.from_id && !this.appUsersManager.hasUser(this.appPeersManager.getPeerId(fwdHeader.from_id), !!(fwdHeader.from_id as Peer.peerChannel).channel_id) && (reason = 'fwdAuthor') ||\n (fwdHeader.from_id as Peer.peerChannel)?.channel_id && !this.appChatsManager.hasChat((fwdHeader.from_id as Peer.peerChannel).channel_id, true) && (reason = 'fwdChannel') ||\n toPeerId.isUser() && !this.appUsersManager.hasUser(toPeerId) && (reason = 'toPeer User') ||\n toPeerId.isAnyChat() && !this.appChatsManager.hasChat(toPeerId.toChatId()) && (reason = 'toPeer Chat')) {\n this.log.warn('Not enough data for message update', toPeerId, reason, message);\n if(channelId && this.appChatsManager.hasChat(channelId)) {\n this.getChannelDifference(channelId);\n } else {\n this.forceGetDifference();\n }\n return false;\n }\n } else if(channelId && !this.appChatsManager.hasChat(channelId)) {\n // this.log.log('skip update, missing channel', channelId, update)\n return false;\n }\n\n let popPts: boolean;\n let popSeq: boolean;\n\n if(pts) {\n const newPts = curState.pts + (pts_count || 0);\n if(newPts < pts) {\n this.debug && this.log.warn('Pts hole', curState, update, channelId && this.appChatsManager.getChat(channelId));\n curState.pendingPtsUpdates.push(update as Update.updateNewMessage);\n if(!curState.syncPending && !curState.syncLoading) {\n curState.syncPending = {\n timeout: ctx.setTimeout(() => {\n curState.syncPending = null;\n\n if(curState.syncLoading) {\n return;\n }\n\n if(channelId) {\n this.getChannelDifference(channelId);\n } else {\n this.getDifference();\n }\n }, SYNC_DELAY)\n };\n }\n\n curState.syncPending.ptsAwaiting = true;\n return false;\n }\n\n if(pts > curState.pts) {\n curState.pts = pts;\n popPts = true;\n\n curState.lastPtsUpdateTime = Date.now();\n } else if(pts_count) {\n // this.log.warn('Duplicate update', update)\n return false;\n }\n\n if(channelId && options.date && this.updatesState.date < options.date) {\n this.updatesState.date = options.date;\n }\n } else if(!channelId && options.seq > 0) {\n const seq = options.seq;\n const seqStart = options.seqStart || seq;\n\n if(seqStart !== curState.seq + 1) {\n if(seqStart > curState.seq) {\n this.debug && this.log.warn('Seq hole', curState, curState.syncPending?.seqAwaiting);\n\n curState.pendingSeqUpdates[seqStart] ??= {seq, date: options.date, updates: []};\n curState.pendingSeqUpdates[seqStart].updates.push(update);\n\n if(!curState.syncPending) {\n curState.syncPending = {\n timeout: ctx.setTimeout(() => {\n curState.syncPending = null;\n\n if(curState.syncLoading) {\n return;\n }\n\n this.getDifference();\n }, SYNC_DELAY)\n };\n }\n\n if(!curState.syncPending.seqAwaiting ||\n curState.syncPending.seqAwaiting < seqStart) {\n curState.syncPending.seqAwaiting = seqStart;\n }\n return false;\n }\n }\n\n if(curState.seq !== seq) {\n curState.seq = seq;\n if(options.date && curState.date < options.date) {\n curState.date = options.date;\n }\n\n popSeq = true;\n }\n }\n\n this.saveUpdate(update);\n\n if(popPts) {\n this.popPendingPtsUpdate(channelId);\n } else if(popSeq) {\n this.popPendingSeqUpdate();\n }\n }\n\n public saveUpdate(update: Update) {\n // this.debug && this.log('saveUpdate', update);\n this.dispatchEvent(update._, update as any);\n }\n\n public subscribeToChannelUpdates(channelId: ChatId) {\n const subscription = this.subscriptions[channelId] ??= {count: 0};\n ++subscription.count;\n\n const cb = () => {\n const state = this.getChannelState(channelId);\n if(!state.syncLoading && (!state.lastDifferenceTime || (Date.now() - state.lastDifferenceTime) > 2500)) {\n this.getChannelDifference(channelId);\n }\n };\n\n subscription.interval ??= ctx.setInterval(cb, 3000);\n cb();\n }\n\n public unsubscribeFromChannelUpdates(channelId: ChatId, force?: boolean) {\n const subscription = this.subscriptions[channelId];\n if(!subscription?.interval || (--subscription.count && !force)) {\n return;\n }\n\n clearInterval(subscription.interval);\n subscription.interval = undefined;\n delete this.subscriptions[channelId];\n }\n\n public attach(langCode?: string) {\n if(this.attached) return;\n\n // return;\n\n this.log('attach');\n\n this.attached = true;\n\n this.appStateManager.getState().then(({updates: state}) => {\n const newVersion = this.appStateManager.newVersion/* || '1.6.0' */;\n\n // rootScope.broadcast('state_synchronizing');\n if(!state || !state.pts || !state.date/* || !state.seq */) { // seq can be undefined because of updates.differenceTooLong\n this.log('will get new state');\n\n this.updatesState.syncLoading = new Promise((resolve) => {\n this.apiManager.invokeApi('updates.getState', {}, {noErrorBox: true}).then((stateResult) => {\n this.updatesState.seq = stateResult.seq;\n this.updatesState.pts = stateResult.pts;\n this.updatesState.date = stateResult.date;\n this.saveUpdatesState();\n // setTimeout(() => {\n this.updatesState.syncLoading = null;\n resolve();\n // rootScope.broadcast('state_synchronized');\n // }, 1000);\n\n // ! for testing\n // updatesState.seq = 1\n // updatesState.pts = stateResult.pts - 5000\n // updatesState.date = 1\n // getDifference()\n });\n });\n } else {\n // ! for testing\n /* state.seq = 1;\n state.pts = state.pts - 15;\n state.date = 1; */\n // state.pts -= 100;\n\n // state.date = 1628623682;\n // state.pts = 2007500;\n // state.seq = 503;\n\n Object.assign(this.updatesState, state);\n\n this.log('will get difference', Object.assign({}, state));\n\n this.getDifference(true)/* .finally(() => {\n if(this.updatesState.syncLoading) {\n rootScope.broadcast('state_synchronizing');\n }\n }) */;\n }\n\n this.apiManager.setUpdatesProcessor(this.processUpdateMessage);\n\n // this.updatesState.syncLoading.then(() => {\n this.setProxy();\n // });\n\n if(newVersion) {\n this.updatesState.syncLoading.then(async() => {\n const strs: Record = {\n en: 'was updated to version',\n ru: 'ะพะฑะฝะพะฒะปั‘ะฝ ะดะพ ะฒะตั€ัะธะธ'\n };\n\n const getChangelog = (lang: string) => {\n fetch(`changelogs/${lang}_${newVersion.split(' ')[0]}.md`)\n .then((res) => (res.status === 200 && res.ok && res.text()) || Promise.reject())\n .then((text) => {\n const langStr = strs[lang] || strs.en;\n const pre = `**Telegram Web${App.suffix} ${langStr} ${newVersion}**\\n\\n`;\n\n text = pre + text;\n\n const entities: MessageEntity[] = [];\n const message = parseMarkdown(text, entities);\n\n const update: Update.updateServiceNotification = {\n _: 'updateServiceNotification',\n entities,\n message,\n type: 'local',\n pFlags: {},\n inbox_date: tsNow(true),\n media: undefined\n };\n\n this.processLocalUpdate(update);\n });\n };\n\n const languages = filterUnique([langCode, 'en']);\n for(const language of languages) {\n try {\n await getChangelog(language);\n break;\n } catch(err) {\n\n }\n }\n });\n }\n });\n }\n}\n\ninterface ApiUpdatesManager extends EventListenerBase<{\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\n}>, AppManager {}\napplyMixins(ApiUpdatesManager, [EventListenerBase, AppManager]);\n\nexport {ApiUpdatesManager};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {UserProfilePhoto, ChatPhoto, InputFileLocation} from '../../layer';\nimport {DownloadOptions} from '../mtproto/apiFileManager';\nimport {AppManager} from './manager';\n\nexport type PeerPhotoSize = 'photo_small' | 'photo_big';\n\nexport class AppAvatarsManager extends AppManager {\n private savedAvatarURLs: {\n [peerId: PeerId]: {\n [size in PeerPhotoSize]?: string | Promise\n }\n } = {};\n\n protected after() {\n this.rootScope.addEventListener('avatar_update', ({peerId, threadId}) => {\n if(threadId) {\n return;\n }\n\n this.removeFromAvatarsCache(peerId);\n });\n }\n\n public isAvatarCached(peerId: PeerId, size?: PeerPhotoSize) {\n const saved = this.savedAvatarURLs[peerId];\n if(size === undefined) {\n return !!saved;\n }\n\n return !!(saved && saved[size] && !(saved[size] instanceof Promise));\n }\n\n public removeFromAvatarsCache(peerId: PeerId) {\n if(this.savedAvatarURLs[peerId]) {\n delete this.savedAvatarURLs[peerId];\n }\n }\n\n public loadAvatar(peerId: PeerId, photo: UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto, size: PeerPhotoSize) {\n const saved = this.savedAvatarURLs[peerId] ??= {};\n if(!saved[size]) {\n // console.warn('will invoke downloadSmallFile:', peerId);\n const peerPhotoFileLocation: InputFileLocation.inputPeerPhotoFileLocation = {\n _: 'inputPeerPhotoFileLocation',\n pFlags: {},\n peer: this.appPeersManager.getInputPeerById(peerId),\n photo_id: photo.photo_id\n };\n\n const downloadOptions: DownloadOptions = {dcId: photo.dc_id, location: peerPhotoFileLocation};\n if(size === 'photo_big') {\n peerPhotoFileLocation.pFlags.big = true;\n downloadOptions.limitPart = 512 * 1024;\n }\n\n /* let str: string;\n const time = Date.now();\n if(peerId === 0) {\n str = `download avatar ${peerId}`;\n } */\n\n const promise = this.apiFileManager.download(downloadOptions);\n return saved[size] = promise.then((blob) => {\n return saved[size] = URL.createObjectURL(blob);\n\n /* if(str) {\n console.log(str, Date.now() / 1000, Date.now() - time);\n } */\n });\n } else {\n return saved[size];\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getEnvironment} from '../../environment/utils';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {nextRandomUint} from '../../helpers/random';\nimport {InputPhoneCall, MessagesDhConfig, PhoneCall, PhoneCallDiscardReason, PhoneCallProtocol, PhonePhoneCall} from '../../layer';\nimport {AppManager} from './manager';\n\nexport type CallId = PhoneCall['id'];\n\nexport type MyPhoneCall = Exclude;\n\nexport class AppCallsManager extends AppManager {\n private calls: Map;\n\n protected after() {\n this.calls = new Map();\n\n if(!getEnvironment().IS_CALL_SUPPORTED) {\n return;\n }\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updatePhoneCall: (update) => {\n this.saveCall(update.phone_call);\n },\n\n updatePhoneCallSignalingData: (update) => {\n this.rootScope.dispatchEvent('call_signaling', {callId: update.phone_call_id, data: update.data});\n }\n });\n }\n\n public computeKey(g_b: Uint8Array, a: Uint8Array, p: Uint8Array) {\n return this.cryptoWorker.invokeCrypto('compute-dh-key', g_b, a, p);\n }\n\n public saveCall(call: PhoneCall) {\n const isDiscarded = call._ === 'phoneCallDiscarded';\n const oldCall = this.calls.get(call.id);\n if(oldCall) {\n // if(shouldUpdate) {\n safeReplaceObject(oldCall, call);\n // }\n\n if(isDiscarded) {\n this.calls.delete(call.id);\n }\n\n call = oldCall;\n } else if(!isDiscarded) {\n this.calls.set(call.id, call as any);\n }\n\n this.rootScope.dispatchEvent('call_update', call);\n\n return call;\n }\n\n public getCall(callId: CallId) {\n return this.calls.get(callId);\n }\n\n public getCallInput(id: CallId): InputPhoneCall {\n const call = this.getCall(id);\n return {\n _: 'inputPhoneCall',\n id: call.id,\n access_hash: call.access_hash\n };\n }\n\n public savePhonePhoneCall(phonePhoneCall: PhonePhoneCall) {\n this.appUsersManager.saveApiUsers(phonePhoneCall.users);\n return this.saveCall(phonePhoneCall.phone_call);\n }\n\n public generateDh() {\n return this.apiManager.invokeApi('messages.getDhConfig', {\n version: 0,\n random_length: 256\n }).then((dhConfig) => {\n return this.cryptoWorker.invokeCrypto('generate-dh', dhConfig as MessagesDhConfig.messagesDhConfig);\n });\n }\n\n // private verifyProtocolCompatibility(protocol: PhoneCallProtocol) {\n // const my = getCallProtocol();\n // const myVersion = my.library_versions[0];\n // return !protocol.library_versions.find((version) => {\n // return compareVersion(myVersion, version) > 0;\n // });\n // }\n\n public async requestCall(userId: UserId, protocol: PhoneCallProtocol, g_a_hash: Uint8Array, video?: boolean) {\n const phonePhoneCall = await this.apiManager.invokeApi('phone.requestCall', {\n user_id: this.appUsersManager.getUserInput(userId),\n protocol: protocol,\n video: video,\n random_id: nextRandomUint(32),\n g_a_hash: g_a_hash\n });\n\n return this.savePhonePhoneCall(phonePhoneCall);\n }\n\n public async discardCall(callId: CallId, duration: number, reason: PhoneCallDiscardReason['_'], video?: boolean) {\n if(!this.getCall(callId)) {\n return;\n }\n\n const updates = await this.apiManager.invokeApi('phone.discardCall', {\n video,\n peer: this.getCallInput(callId),\n duration,\n reason: {\n _: reason\n },\n connection_id: '0'\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport deepEqual from '../../helpers/object/deepEqual';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {ChannelParticipant, ChannelsCreateChannel, Chat, ChatAdminRights, ChatBannedRights, ChatInvite, ChatParticipant, ChatPhoto, ChatReactions, InputChannel, InputChatPhoto, InputFile, InputPeer, MessagesSponsoredMessages, SponsoredMessage, Update, Updates} from '../../layer';\nimport {isRestricted} from '../../helpers/restrictions';\nimport {AppManager} from './manager';\nimport hasRights from './utils/chats/hasRights';\nimport getParticipantPeerId from './utils/chats/getParticipantPeerId';\nimport {AppStoragesManager} from './appStoragesManager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport {randomLong} from '../../helpers/random';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport tsNow from '../../helpers/tsNow';\n\nexport type Channel = Chat.channel;\nexport type ChatRights = keyof ChatBannedRights['pFlags'] | keyof ChatAdminRights['pFlags'] | 'change_type' | 'change_permissions' | 'delete_chat' | 'view_participants';\n\nexport class AppChatsManager extends AppManager {\n private storage: AppStoragesManager['storages']['chats'];\n\n private chats: {[id: ChatId]: Exclude};\n // private usernames: any;\n // private channelAccess: any;\n // private megagroups: {[id: number]: true};\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateChannelParticipant: this.onUpdateChannelParticipant,\n\n updateChatDefaultBannedRights: this.onUpdateChatDefaultBannedRights\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('chats')\n ]).then(([state, {results: chats, storage}]) => {\n this.storage = storage;\n\n this.saveApiChats(chats);\n\n this.peersStorage.addEventListener('peerNeeded', (peerId) => {\n if(peerId.isUser() || this.storage.getFromCache(peerId.toChatId())) {\n return;\n }\n\n this.storage.set({\n [peerId.toChatId()]: this.getChat(peerId.toChatId())\n });\n });\n\n this.peersStorage.addEventListener('peerUnneeded', (peerId) => {\n if(peerId.isUser() || !this.storage.getFromCache(peerId.toChatId())) {\n return;\n }\n\n this.storage.delete(peerId.toChatId());\n });\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n for(const chatId in this.chats) {\n if(!chatId) continue;\n if(!this.peersStorage.isPeerNeeded(chatId.toPeerId(true))) {\n const chat = this.chats[chatId];\n this.appUsersManager.modifyUsernamesCache(chat, false);\n\n this.storage.delete(chatId);\n delete this.chats[chatId];\n }\n }\n } else {\n this.chats = {};\n }\n };\n\n public saveApiChats(apiChats: any[], override?: boolean) {\n if((apiChats as any).saved) return;\n (apiChats as any).saved = true;\n apiChats.forEach((chat) => this.saveApiChat(chat, override));\n }\n\n public saveApiChat(chat: Chat, override?: boolean) {\n if(!chat || chat._ === 'chatEmpty') return;\n /* if(chat._ !== 'chat' && chat._ !== 'channel') {\n return;\n } */\n\n // * exclude from state\n // defineNotNumerableProperties(chat, ['rTitle', 'initials']);\n\n const oldChat = this.chats[chat.id];\n\n /* if(oldChat && !override) {\n return;\n } */\n\n (chat as Chat.chat).pFlags ??= {};\n\n if((chat as Chat.channel).pFlags.min && oldChat !== undefined) {\n return;\n }\n\n if(chat._ === 'channel' &&\n chat.participants_count === undefined &&\n oldChat !== undefined &&\n (oldChat as Chat.channel).participants_count) {\n chat.participants_count = (oldChat as Chat.channel).participants_count;\n }\n\n if((chat as Chat.channel).photo?._ === 'chatPhotoEmpty') {\n delete (chat as Chat.channel).photo;\n }\n\n const changedUsername = this.appUsersManager.setUsernameToCache(chat, oldChat);\n\n /* if(chat.username) {\n let searchUsername = searchIndexManager.cleanUsername(chat.username);\n this.usernames[searchUsername] = chat.id;\n } */\n\n const peerId = chat.id.toPeerId(true);\n if(oldChat === undefined) {\n this.chats[chat.id] = chat;\n } else {\n const oldPhotoId = ((oldChat as Chat.chat).photo as ChatPhoto.chatPhoto)?.photo_id;\n const newPhotoId = ((chat as Chat.chat).photo as ChatPhoto.chatPhoto)?.photo_id;\n const toggledForum = (oldChat as Chat.channel).pFlags.forum !== (chat as Chat.channel).pFlags.forum;\n const changedPhoto = oldPhotoId !== newPhotoId || toggledForum;\n\n const changedTitle = oldChat.title !== chat.title || changedUsername;\n\n const changedAnyBadge = (oldChat as Chat.channel).pFlags.verified !== (chat as Chat.channel).pFlags.verified ||\n (oldChat as Chat.channel).pFlags.scam !== (chat as Chat.channel).pFlags.scam ||\n (oldChat as Chat.channel).pFlags.fake !== (chat as Chat.channel).pFlags.fake;\n\n safeReplaceObject(oldChat, chat);\n this.rootScope.dispatchEvent('chat_update', chat.id);\n\n if(changedPhoto) {\n this.rootScope.dispatchEvent('avatar_update', {peerId});\n }\n\n if(changedTitle || changedAnyBadge) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId});\n }\n\n if(toggledForum) {\n this.rootScope.dispatchEvent('chat_toggle_forum', {chatId: chat.id, enabled: !!(chat as Chat.channel).pFlags.forum});\n }\n }\n\n if(this.peersStorage.isPeerNeeded(peerId)) {\n this.storage.set({\n [chat.id]: chat\n });\n }\n }\n\n public getChat(id: ChatId) {\n return this.chats[id];\n }\n\n /**\n * Check the user's ability to do an action in chat\n * @param id\n * @param action creator can still send messages to left channel. so this function shows server rights. see canSendToPeer for local rights in messages manager.\n * @param rights do not provide this parameter when checking rights for self\n * @param isThread\n * @returns\n */\n public hasRights(id: ChatId, action: ChatRights, rights?: ChatAdminRights | ChatBannedRights, isThread?: boolean) {\n return hasRights(this.getChat(id), action, rights, isThread);\n }\n\n public editChatDefaultBannedRights(id: ChatId, banned_rights: ChatBannedRights) {\n const chat = this.getChat(id) as Chat.chat;\n if(chat.default_banned_rights) {\n if(chat.default_banned_rights.until_date === banned_rights.until_date && deepEqual(chat.default_banned_rights.pFlags, banned_rights.pFlags)) {\n return Promise.resolve();\n }\n }\n\n return this.apiManager.invokeApi('messages.editChatDefaultBannedRights', {\n peer: this.appPeersManager.getInputPeerById(id.toPeerId(true)),\n banned_rights\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n /* public resolveUsername(username: string) {\n return this.usernames[username] || 0;\n } */\n\n /* public saveChannelAccess(id: ChatId, accessHash: string) {\n this.channelAccess[id] = accessHash;\n } */\n\n /* public saveIsMegagroup(id: ChatId) {\n this.megagroups[id] = true;\n } */\n\n public isChannel(id: ChatId) {\n const chat = this.chats[id];\n return !!(chat && (chat._ === 'channel' || chat._ === 'channelForbidden')/* || this.channelAccess[id] */);\n }\n\n public isMegagroup(id: ChatId) {\n /* if(this.megagroups[id]) {\n return true;\n } */\n\n const chat: Chat = this.chats[id];\n return !!(chat as Chat.channel)?.pFlags?.megagroup;\n }\n\n public isForum(id: ChatId) {\n const chat = this.chats[id];\n return !!(chat as Chat.channel)?.pFlags?.forum;\n }\n\n public isBroadcast(id: ChatId) {\n return this.isChannel(id) && !this.isMegagroup(id);\n }\n\n public isInChat(id: ChatId) {\n let good = true;\n const chat: Chat = this.getChat(id);\n if(!chat ||\n chat._ === 'channelForbidden' ||\n chat._ === 'chatForbidden' ||\n (chat as any as Chat.chatEmpty)._ === 'chatEmpty' ||\n (chat as Chat.chat).pFlags.left ||\n // || (chat as any).pFlags.kicked\n (chat as Chat.chat).pFlags.deactivated) {\n good = false;\n }\n\n return good;\n }\n\n public getChannelInput(id: ChatId): InputChannel {\n const chat: Chat = this.getChat(id);\n if(!chat || !(chat as Chat.channel).access_hash) {\n return {\n _: 'inputChannelEmpty'\n };\n } else {\n return {\n _: 'inputChannel',\n channel_id: id,\n access_hash: (chat as Chat.channel).access_hash/* || this.channelAccess[id] */ || '0'\n };\n }\n }\n\n public getInputPeer(id: ChatId) {\n return this.isChannel(id) ? this.getChannelInputPeer(id) : this.getChatInputPeer(id);\n }\n\n public getChatInputPeer(id: ChatId): InputPeer.inputPeerChat {\n return {\n _: 'inputPeerChat',\n chat_id: id\n };\n }\n\n public getChannelInputPeer(id: ChatId): InputPeer.inputPeerChannel {\n return {\n _: 'inputPeerChannel',\n channel_id: id,\n access_hash: (this.getChat(id) as Chat.channel).access_hash/* || this.channelAccess[id] */ || 0\n };\n }\n\n public hasChat(id: ChatId, allowMin?: true) {\n const chat = this.chats[id];\n return isObject(chat) && (allowMin || !(chat as Chat.channel).pFlags.min);\n }\n\n public getChatString(id: ChatId) {\n const chat = this.getChat(id);\n if(this.isChannel(id)) {\n return (this.isMegagroup(id) ? 's' : 'c') + id + '_' + (chat as Chat.channel).access_hash;\n }\n return 'g' + id;\n }\n\n /* public wrapForFull(id: number, fullChat: any) {\n const chatFull = copy(fullChat);\n const chat = this.getChat(id);\n\n if(!chatFull.participants_count) {\n chatFull.participants_count = chat.participants_count;\n }\n\n if(chatFull.participants &&\n chatFull.participants._ === 'chatParticipants') {\n chatFull.participants.participants = this.wrapParticipants(id, chatFull.participants.participants);\n }\n\n if(chatFull.about) {\n chatFull.rAbout = wrapRichText(chatFull.about, {noLinebreaks: true});\n }\n\n //chatFull.peerString = this.getChatString(id);\n chatFull.chat = chat;\n\n return chatFull;\n }\n\n public wrapParticipants(id: number, participants: any[]) {\n const chat = this.getChat(id);\n const myId = appUsersManager.getSelf().id;\n if(this.isChannel(id)) {\n const isAdmin = chat.pFlags.creator;\n participants.forEach((participant) => {\n participant.canLeave = myId === participant.user_id;\n participant.canKick = isAdmin && participant._ === 'channelParticipant';\n\n // just for order by last seen\n participant.user = appUsersManager.getUser(participant.user_id);\n });\n } else {\n const isAdmin = chat.pFlags.creator || chat.pFlags.admins_enabled && chat.pFlags.admin;\n participants.forEach((participant) => {\n participant.canLeave = myId === participant.user_id;\n participant.canKick = !participant.canLeave && (\n chat.pFlags.creator ||\n participant._ === 'chatParticipant' && (isAdmin || myId === participant.inviter_id)\n );\n\n // just for order by last seen\n participant.user = appUsersManager.getUser(participant.user_id);\n });\n }\n\n return participants;\n } */\n\n public createChannel(options: ChannelsCreateChannel): Promise {\n return this.apiManager.invokeApi('channels.createChannel', options).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const channelId = (updates as any).chats[0].id;\n return channelId;\n });\n }\n\n public inviteToChannel(id: ChatId, userIds: UserId[]) {\n const input = this.getChannelInput(id);\n const usersInputs = userIds.map((u) => this.appUsersManager.getUserInput(u));\n\n return this.apiManager.invokeApi('channels.inviteToChannel', {\n channel: input,\n users: usersInputs\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public createChat(title: string, userIds: UserId[]): Promise {\n return this.apiManager.invokeApi('messages.createChat', {\n users: userIds.map((u) => this.appUsersManager.getUserInput(u)),\n title\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const chatId = (updates as any as Updates.updates).chats[0].id;\n return chatId;\n });\n }\n\n private onChatUpdated = (chatId: ChatId, updates?: Updates) => {\n // console.log('onChatUpdated', chatId, updates);\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n if((updates as Updates.updates)?.updates?.length && this.isChannel(chatId)) {\n this.rootScope.dispatchEvent('invalidate_participants', chatId);\n }\n };\n\n public leaveChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.leaveChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public joinChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.joinChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public addChatUser(id: ChatId, userId: UserId, fwdLimit = 100) {\n return this.apiManager.invokeApi('messages.addChatUser', {\n chat_id: id,\n user_id: this.appUsersManager.getUserInput(userId),\n fwd_limit: fwdLimit\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public deleteChatUser(id: ChatId, userId: UserId) {\n return this.apiManager.invokeApi('messages.deleteChatUser', {\n chat_id: id,\n user_id: this.appUsersManager.getUserInput(userId)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public leaveChat(id: ChatId) {\n return this.deleteChatUser(id, this.appUsersManager.getSelf().id);\n }\n\n public leave(id: ChatId) {\n return this.isChannel(id) ? this.leaveChannel(id) : this.leaveChat(id);\n }\n\n public delete(id: ChatId) {\n return this.isChannel(id) ? this.deleteChannel(id) : this.deleteChat(id);\n }\n\n public deleteChannel(id: ChatId) {\n return this.apiManager.invokeApi('channels.deleteChannel', {\n channel: this.getChannelInput(id)\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public deleteChat(id: ChatId) {\n // return this.leaveChat(id).then(() => {\n return this.apiManager.invokeApi('messages.deleteChat', {\n chat_id: id\n });\n // });\n }\n\n public migrateChat(id: ChatId): Promise {\n const chat: Chat = this.getChat(id);\n if(chat._ === 'channel') return Promise.resolve(chat.id);\n return this.apiManager.invokeApi('messages.migrateChat', {\n chat_id: id\n }).then((updates) => {\n this.onChatUpdated(id, updates);\n const update: Update.updateChannel = (updates as Updates.updates).updates.find((u) => u._ === 'updateChannel') as any;\n return update.channel_id;\n });\n }\n\n public updateUsername(id: ChatId, username: string, doNotRefresh?: boolean) {\n const promise = this.apiManager.invokeApi('channels.updateUsername', {\n channel: this.getChannelInput(id),\n username\n });\n\n return this.refreshChatAfterRequest(id, promise, doNotRefresh);\n }\n\n public editPhoto(id: ChatId, inputFile: InputFile) {\n const inputChatPhoto: InputChatPhoto = {\n _: 'inputChatUploadedPhoto',\n file: inputFile\n };\n\n let promise: any;\n if(this.isChannel(id)) {\n promise = this.apiManager.invokeApi('channels.editPhoto', {\n channel: this.getChannelInput(id),\n photo: inputChatPhoto\n });\n } else {\n promise = this.apiManager.invokeApi('messages.editChatPhoto', {\n chat_id: id,\n photo: inputChatPhoto\n });\n }\n\n return promise.then(this.onChatUpdated.bind(this, id));\n }\n\n public editTitle(id: ChatId, title: string) {\n let promise: any;\n\n if(this.isChannel(id)) {\n promise = this.apiManager.invokeApi('channels.editTitle', {\n channel: this.getChannelInput(id),\n title\n });\n } else {\n promise = this.apiManager.invokeApi('messages.editChatTitle', {\n chat_id: id,\n title\n });\n }\n\n return promise.then(this.onChatUpdated.bind(this, id));\n }\n\n public editAbout(id: ChatId, about: string) {\n const peerId = id.toPeerId(true);\n return this.apiManager.invokeApi('messages.editChatAbout', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n about\n }).then((bool) => {\n if(bool) {\n this.rootScope.dispatchEvent('peer_bio_edit', peerId);\n }\n\n return bool;\n });\n }\n\n public async editBanned(id: ChatId, participant: PeerId | ChannelParticipant | ChatParticipant, banned_rights: ChatBannedRights) {\n const peerId = typeof(participant) !== 'object' ? participant : getParticipantPeerId(participant);\n const wasChannel = this.isChannel(id);\n if(!wasChannel) {\n const channelId = await this.migrateChat(id);\n id = channelId;\n }\n\n return this.apiManager.invokeApi('channels.editBanned', {\n channel: this.getChannelInput(id),\n participant: this.appPeersManager.getInputPeerById(peerId),\n banned_rights\n }).then((updates) => {\n this.onChatUpdated(id, updates);\n\n if(typeof(participant) === 'object') {\n const timestamp = tsNow(true);\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannelParticipant',\n channel_id: id,\n date: timestamp,\n actor_id: undefined,\n qts: undefined,\n user_id: peerId,\n prev_participant: wasChannel ? participant as ChannelParticipant : undefined,\n new_participant: Object.keys(banned_rights.pFlags).length ? {\n _: 'channelParticipantBanned',\n date: timestamp,\n banned_rights,\n kicked_by: this.appUsersManager.getSelf().id,\n peer: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {}\n } : undefined\n });\n }\n });\n }\n\n public clearChannelParticipantBannedRights(id: ChatId, participant: PeerId | ChannelParticipant) {\n return this.editBanned(id, participant, {\n _: 'chatBannedRights',\n until_date: 0,\n pFlags: {}\n });\n }\n\n public kickFromChannel(id: ChatId, participant: PeerId | ChannelParticipant) {\n return this.editBanned(id, participant, {\n _: 'chatBannedRights',\n until_date: 0,\n pFlags: {\n view_messages: true\n }\n });\n }\n\n public kickFromChat(id: ChatId, participant: PeerId | ChannelParticipant | ChatParticipant) {\n if(this.isChannel(id)) return this.kickFromChannel(id, participant as ChannelParticipant);\n else return this.deleteChatUser(id, isObject(participant) ? getParticipantPeerId(participant) : (participant as PeerId).toUserId());\n }\n\n public resolveChannel(id: ChatId) {\n return this.apiManager.invokeApiSingle('channels.getChannels', {\n id: [{\n _: 'inputChannel',\n channel_id: id,\n access_hash: '0'\n }]\n }).then((messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n });\n }\n\n public togglePreHistoryHidden(id: ChatId, enabled: boolean) {\n return this.migrateChat(id).then((channelId) => {\n return this.apiManager.invokeApi('channels.togglePreHistoryHidden', {\n channel: this.getChannelInput(channelId),\n enabled\n }).then(this.onChatUpdated.bind(this, channelId));\n });\n }\n\n public toggleSignatures(id: ChatId, enabled: boolean) {\n return this.apiManager.invokeApi('channels.toggleSignatures', {\n channel: this.getChannelInput(id),\n enabled\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public toggleNoForwards(id: ChatId, enabled: boolean) {\n return this.apiManager.invokeApi('messages.toggleNoForwards', {\n peer: this.getInputPeer(id),\n enabled\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public setChatAvailableReactions(id: ChatId, reactions: ChatReactions) {\n const chatFull = this.appProfileManager.getCachedFullChat(id);\n if(chatFull) {\n chatFull.available_reactions = reactions;\n this.rootScope.dispatchEvent('chat_full_update', id);\n }\n\n return this.apiManager.invokeApi('messages.setChatAvailableReactions', {\n peer: this.getInputPeer(id),\n available_reactions: reactions\n }).then(this.onChatUpdated.bind(this, id));\n }\n\n public getSendAs(channelId: ChatId) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'channels.getSendAs',\n params: {\n peer: this.getChannelInputPeer(channelId)\n },\n processResult: (sendAsPeers) => {\n this.appUsersManager.saveApiUsers(sendAsPeers.users);\n this.saveApiChats(sendAsPeers.chats);\n\n return sendAsPeers.peers;\n }\n });\n }\n\n public importChatInvite(hash: string) {\n return this.apiManager.invokeApi('messages.importChatInvite', {hash})\n .then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n const chat = (updates as Updates.updates).chats[0];\n return chat.id;\n });\n }\n\n public checkUsername(chatId: ChatId, username: string) {\n return this.apiManager.invokeApi('channels.checkUsername', {\n channel: this.getChannelInput(chatId),\n username\n });\n }\n\n public getSponsoredMessage(chatId: ChatId) {\n // const s: MessagesSponsoredMessages.messagesSponsoredMessages = {\n // '_': 'messages.sponsoredMessages',\n // 'messages': [\n // {\n // '_': 'sponsoredMessage',\n // 'pFlags': {},\n // 'flags': 9,\n // 'random_id': new Uint8Array([\n // 80,\n // 5,\n // 249,\n // 174,\n // 44,\n // 73,\n // 173,\n // 14,\n // 246,\n // 81,\n // 187,\n // 182,\n // 223,\n // 5,\n // 4,\n // 128\n // ]),\n // 'from_id': {\n // '_': 'peerUser',\n // 'user_id': 983000232\n // },\n // 'start_param': 'GreatMinds',\n // 'message': 'This is a long sponsored message. In fact, it has the maximum length allowed on the platform โ€“ย 160 characters ๐Ÿ˜ฌ๐Ÿ˜ฌ. It\\'s promoting a bot with a start parameter.' + chatId\n // }\n // ],\n // 'chats': [],\n // 'users': [\n // {\n // '_': 'user',\n // 'pFlags': {\n // 'bot': true,\n // 'verified': true,\n // 'apply_min_photo': true\n // },\n // 'flags': 34226219,\n // 'id': 983000232,\n // 'access_hash': '-294959558742535650',\n // 'first_name': 'Quiz Bot',\n // 'username': 'QuizBot',\n // 'photo': {\n // '_': 'userProfilePhoto',\n // 'pFlags': {},\n // 'flags': 2,\n // 'photo_id': '4221953848856651689',\n // 'stripped_thumb': new Uint8Array([\n // 1,\n // 8,\n // 8,\n // 155,\n // 247,\n // 95,\n // 103,\n // 255,\n // 0,\n // 110,\n // 138,\n // 40,\n // 174,\n // 132,\n // 142,\n // 6,\n // 238,\n // 127\n // ]),\n // 'dc_id': 2\n // },\n // 'bot_info_version': 11,\n // 'bot_inline_placeholder': 'Search a quiz...',\n // 'sortName': 'quiz bot'\n // }\n // ]\n // };\n\n // const promise = Promise.resolve(s);\n const promise = this.apiManager.invokeApiCacheable('channels.getSponsoredMessages', {\n channel: this.getChannelInput(chatId)\n }, {cacheSeconds: 300});\n\n return promise.then((sponsoredMessages) => {\n if(sponsoredMessages._ === 'messages.sponsoredMessages') {\n this.appUsersManager.saveApiUsers(sponsoredMessages.users);\n this.appChatsManager.saveApiChats(sponsoredMessages.chats);\n\n const sponsoredMessage = sponsoredMessages.messages.shift();\n sponsoredMessages.messages.push(sponsoredMessage);\n }\n\n return sponsoredMessages;\n });\n }\n\n public viewSponsoredMessage(chatId: ChatId, randomId: SponsoredMessage['random_id']) {\n return this.apiManager.invokeApiSingle('channels.viewSponsoredMessage', {\n channel: this.getChannelInput(chatId),\n random_id: randomId\n });\n }\n\n public checkChatInvite(hash: string) {\n return this.apiManager.invokeApi('messages.checkChatInvite', {\n hash: hash\n }).then((chatInvite) => {\n if((chatInvite as ChatInvite.chatInvitePeek).chat) {\n this.saveApiChat((chatInvite as ChatInvite.chatInvitePeek).chat, true);\n }\n\n return chatInvite;\n });\n }\n\n public toggleUsername(chatId: ChatId, username: string, active: boolean) {\n const promise = this.apiManager.invokeApi('channels.toggleUsername', {\n channel: this.getChannelInput(chatId),\n username,\n active\n });\n\n return this.refreshChatAfterRequest(chatId, promise);\n }\n\n public reorderUsernames(chatId: ChatId, order: string[]) {\n const promise = this.apiManager.invokeApi('channels.reorderUsernames', {\n channel: this.getChannelInput(chatId),\n order\n });\n\n return this.refreshChatAfterRequest(chatId, promise);\n }\n\n public deactivateAllUsernames(chatId: ChatId, doNotRefresh?: boolean) {\n const promise = this.apiManager.invokeApi('channels.deactivateAllUsernames', {\n channel: this.getChannelInput(chatId)\n });\n\n return this.refreshChatAfterRequest(chatId, promise, doNotRefresh);\n }\n\n public makeChannelPrivate(chatId: ChatId) {\n const promises: Promise[] = [\n this.updateUsername(chatId, '', true),\n this.deactivateAllUsernames(chatId, true)\n ];\n\n const promise = Promise.all(promises).then(() => true);\n return this.refreshChatAfterRequest(chatId, promise);\n }\n\n public refreshChatAfterRequest>(chatId: ChatId, promise: T, doNotRefresh?: boolean): T {\n if(doNotRefresh) {\n return promise;\n }\n\n return promise.then((value) => {\n return this.getChannels([chatId]).then(() => value);\n }) as T;\n }\n\n public getChannels(chatIds: ChatId[]) {\n return this.apiManager.invokeApi('channels.getChannels', {\n id: chatIds.map((chatId) => this.getChannelInput(chatId))\n }).then((messagesChats) => {\n this.saveApiChats(messagesChats.chats);\n });\n }\n\n public toggleForum(chatId: ChatId, enabled: boolean) {\n return this.migrateChat(chatId).then((channelId) => {\n return this.apiManager.invokeApi('channels.toggleForum', {\n channel: this.getChannelInput(channelId),\n enabled\n }).then(this.onChatUpdated.bind(this, channelId));\n });\n }\n\n public editForumTopic(options: {\n chatId: ChatId,\n topicId: number,\n title?: string,\n iconEmojiId?: DocId,\n closed?: boolean,\n hidden?: boolean\n }) {\n const {chatId, topicId, title, iconEmojiId, closed, hidden} = options;\n return this.apiManager.invokeApi('channels.editForumTopic', {\n channel: this.getChannelInput(chatId),\n topic_id: getServerMessageId(topicId),\n title,\n icon_emoji_id: iconEmojiId,\n closed,\n hidden\n }).then(this.onChatUpdated.bind(this, chatId));\n }\n\n public async createForumTopic(options: {\n chatId: ChatId,\n title: string,\n iconColor: number,\n iconEmojiId: DocId\n }) {\n const {chatId, title, iconColor, iconEmojiId} = options;\n\n const channelFull = await this.appProfileManager.getChannelFull(chatId);\n const sendAsInputPeer = channelFull.default_send_as && this.appPeersManager.getInputPeerById(this.appPeersManager.getPeerId(channelFull.default_send_as));\n\n return this.apiManager.invokeApi('channels.createForumTopic', {\n channel: this.getChannelInput(chatId),\n title,\n icon_color: iconColor,\n icon_emoji_id: iconEmojiId,\n random_id: randomLong(),\n send_as: sendAsInputPeer\n }).then((updates) => {\n this.onChatUpdated(chatId, updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateNewChannelMessage') as Update.updateNewChannelMessage;\n return generateMessageId(update.message.id);\n });\n }\n\n public updatePinnedForumTopic(chatId: ChatId, topicId: number, pinned: boolean) {\n return this.apiManager.invokeApi('channels.updatePinnedForumTopic', {\n channel: this.getChannelInput(chatId),\n topic_id: getServerMessageId(topicId),\n pinned\n }).then(this.onChatUpdated.bind(this, chatId));\n }\n\n private onUpdateChannelParticipant = (update: Update.updateChannelParticipant) => {\n this.apiManager.clearCache('channels.getParticipants', (params) => {\n return (params.channel as InputChannel.inputChannel).channel_id === update.channel_id;\n });\n\n this.rootScope.dispatchEvent('chat_participant', update);\n };\n\n private onUpdateChatDefaultBannedRights = (update: Update.updateChatDefaultBannedRights) => {\n const chatId = this.appPeersManager.getPeerId(update.peer).toChatId();\n const chat = this.chats[chatId] as Chat.chat;\n if(chat) {\n chat.default_banned_rights = update.default_banned_rights;\n this.rootScope.dispatchEvent('chat_update', chatId);\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type lang from '../lang';\nimport type langSign from '../langSign';\nimport type {State} from '../config/state';\nimport DEBUG, {MOUNT_CLASS_TO} from '../config/debug';\nimport {HelpCountriesList, HelpCountry, LangPackDifference, LangPackString} from '../layer';\nimport stateStorage from './stateStorage';\nimport App from '../config/app';\nimport rootScope from './rootScope';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport deepEqual from '../helpers/object/deepEqual';\nimport safeAssign from '../helpers/object/safeAssign';\nimport capitalizeFirstLetter from '../helpers/string/capitalizeFirstLetter';\nimport matchUrlProtocol from './richTextProcessor/matchUrlProtocol';\nimport wrapUrl from './richTextProcessor/wrapUrl';\nimport {setDirection} from '../helpers/dom/setInnerHTML';\n\nexport const langPack: {[actionType: string]: LangPackKey} = {\n 'messageActionChatCreate': 'ActionCreateGroup',\n 'messageActionChatCreateYou': 'ActionYouCreateGroup',\n 'messageActionChatEditTitle': 'ActionChangedTitle',\n 'messageActionChatEditPhoto': 'ActionChangedPhoto',\n 'messageActionChatEditVideo': 'ActionChangedVideo',\n 'messageActionChatDeletePhoto': 'ActionRemovedPhoto',\n 'messageActionChatReturn': 'ActionAddUserSelf',\n 'messageActionChatReturnYou': 'ActionAddUserSelfYou',\n 'messageActionChatJoined': 'ActionAddUserSelfMega',\n 'messageActionChatJoinedYou': 'ChannelMegaJoined',\n 'messageActionChatAddUser': 'ActionAddUser',\n 'messageActionChatAddUsers': 'ActionAddUser',\n 'messageActionChatLeave': 'ActionLeftUser',\n 'messageActionChatLeaveYou': 'YouLeft',\n 'messageActionChatDeleteUser': 'ActionKickUser',\n 'messageActionChatJoinedByLink': 'ActionInviteUser',\n 'messageActionPinMessage': 'Chat.Service.Group.UpdatedPinnedMessage',\n 'messageActionContactSignUp': 'Chat.Service.PeerJoinedTelegram',\n 'messageActionChannelCreate': 'ActionCreateChannel',\n 'messageActionChannelEditTitle': 'Chat.Service.Channel.UpdatedTitle',\n 'messageActionChannelEditPhoto': 'Chat.Service.Channel.UpdatedPhoto',\n 'messageActionChannelEditVideo': 'Chat.Service.Channel.UpdatedVideo',\n 'messageActionChannelDeletePhoto': 'Chat.Service.Channel.RemovedPhoto',\n 'messageActionHistoryClear': 'HistoryCleared',\n 'messageActionDiscussionStarted': 'DiscussionStarted',\n\n 'messageActionChannelMigrateFrom': 'ActionMigrateFromGroup',\n\n 'messageActionPhoneCall.video_in_ok': 'ChatList.Service.VideoCall.incoming',\n 'messageActionPhoneCall.video_out_ok': 'ChatList.Service.VideoCall.outgoing',\n 'messageActionPhoneCall.video_missed': 'ChatList.Service.VideoCall.Missed',\n 'messageActionPhoneCall.video_cancelled': 'ChatList.Service.VideoCall.Cancelled',\n 'messageActionPhoneCall.in_ok': 'ChatList.Service.Call.incoming',\n 'messageActionPhoneCall.out_ok': 'ChatList.Service.Call.outgoing',\n 'messageActionPhoneCall.missed': 'ChatList.Service.Call.Missed',\n 'messageActionPhoneCall.cancelled': 'ChatList.Service.Call.Cancelled',\n\n 'messageActionGroupCall.started': 'Chat.Service.VoiceChatStarted.Channel',\n 'messageActionGroupCall.started_by': 'Chat.Service.VoiceChatStarted',\n 'messageActionGroupCall.started_byYou': 'Chat.Service.VoiceChatStartedYou',\n 'messageActionGroupCall.ended': 'Chat.Service.VoiceChatFinished.Channel',\n 'messageActionGroupCall.ended_by': 'Chat.Service.VoiceChatFinished',\n 'messageActionGroupCall.ended_byYou': 'Chat.Service.VoiceChatFinishedYou',\n\n 'messageActionBotAllowed': 'Chat.Service.BotPermissionAllowed'\n};\n\nexport type LangPackKey = /* string | */keyof typeof lang | keyof typeof langSign;\n\nexport type FormatterArgument = string | number | Node | FormatterArgument[];\nexport type FormatterArguments = FormatterArgument[];\n\nexport const UNSUPPORTED_LANG_PACK_KEY: LangPackKey = IS_MOBILE ? 'Message.Unsupported.Mobile' : 'Message.Unsupported.Desktop';\n\nnamespace I18n {\n export const strings: Map = new Map();\n export const countriesList: HelpCountry[] = [];\n let pluralRules: Intl.PluralRules;\n\n let cacheLangPackPromise: Promise;\n export let lastRequestedLangCode: string;\n export let lastRequestedNormalizedLangCode: string;\n export let lastAppliedLangCode: string;\n export let requestedServerLanguage = false;\n export let timeFormat: State['settings']['timeFormat'];\n export let isRTL = false;\n\n export function setRTL(rtl: boolean) {\n isRTL = rtl;\n }\n\n function setLangCode(langCode: string) {\n lastRequestedLangCode = langCode;\n lastRequestedNormalizedLangCode = langCode.split('-')[0];\n }\n\n export function getCacheLangPack(): Promise {\n if(cacheLangPackPromise) return cacheLangPackPromise;\n return cacheLangPackPromise = Promise.all([\n stateStorage.get('langPack') as Promise,\n polyfillPromise\n ]).then(([langPack]) => {\n if(!langPack/* || true */) {\n return loadLocalLangPack();\n } else if(DEBUG && false) {\n return getLangPack(langPack.lang_code);\n }/* else if(langPack.appVersion !== App.langPackVersion) {\n return getLangPack(langPack.lang_code);\n } */\n\n if(!lastRequestedLangCode) {\n setLangCode(langPack.lang_code);\n }\n\n applyLangPack(langPack);\n return langPack;\n }).finally(() => {\n cacheLangPackPromise = undefined;\n });\n }\n\n function updateAmPm() {\n if(timeFormat === 'h12') {\n try {\n const dateTimeFormat = getDateTimeFormat({hour: 'numeric', minute: 'numeric', hour12: true});\n const date = new Date();\n date.setHours(0);\n const amText = dateTimeFormat.format(date);\n amPmCache.am = amText.split(/\\s/)[1];\n date.setHours(12);\n const pmText = dateTimeFormat.format(date);\n amPmCache.pm = pmText.split(/\\s/)[1];\n } catch(err) {\n console.error('cannot get am/pm', err);\n amPmCache = {am: 'AM', pm: 'PM'};\n }\n }\n }\n\n export function setTimeFormat(\n format: State['settings']['timeFormat'],\n haveToUpdate = !!timeFormat && timeFormat !== format\n ) {\n timeFormat = format;\n\n updateAmPm();\n\n if(haveToUpdate) {\n cachedDateTimeFormats.clear();\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance instanceof IntlDateElement) {\n instance.update();\n }\n });\n }\n }\n\n export function loadLocalLangPack() {\n const defaultCode = App.langPackCode;\n setLangCode(defaultCode);\n return Promise.all([\n import('../lang'),\n import('../langSign'),\n import('../countries')\n ]).then(([lang, langSign, countries]) => {\n const strings: LangPackString[] = [];\n formatLocalStrings(lang.default, strings);\n formatLocalStrings(langSign.default, strings);\n\n const langPack: LangPackDifference = {\n _: 'langPackDifference',\n from_version: 0,\n lang_code: defaultCode,\n strings,\n version: 0,\n local: true,\n countries: countries.default\n };\n return saveLangPack(langPack);\n });\n }\n\n export function loadLangPack(langCode: string, web?: boolean) {\n web = true;\n requestedServerLanguage = true;\n const managers = rootScope.managers;\n return Promise.all([\n managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: web ? 'web' : App.langPack\n }),\n !web && managers.apiManager.invokeApiCacheable('langpack.getLangPack', {\n lang_code: langCode,\n lang_pack: 'android'\n }),\n import('../lang'),\n import('../langSign'),\n managers.apiManager.invokeApiCacheable('help.getCountriesList', {\n lang_code: langCode,\n hash: 0\n }) as Promise,\n polyfillPromise\n ]);\n }\n\n export function getStrings(langCode: string, strings: string[]) {\n return rootScope.managers.apiManager.invokeApi('langpack.getStrings', {\n lang_pack: App.langPack,\n lang_code: langCode,\n keys: strings\n });\n }\n\n export function formatLocalStrings(strings: any, pushTo: LangPackString[] = []) {\n for(const i in strings) {\n // @ts-ignore\n const v = strings[i];\n if(typeof(v) === 'string') {\n pushTo.push({\n _: 'langPackString',\n key: i,\n value: v\n });\n } else {\n pushTo.push({\n _: 'langPackStringPluralized',\n key: i,\n ...v\n });\n }\n }\n\n return pushTo;\n }\n\n export function getLangPack(langCode: string, web?: boolean) {\n setLangCode(langCode);\n return loadLangPack(langCode, web).then(([langPack1, langPack2, localLangPack1, localLangPack2, countries, _]) => {\n let strings: LangPackString[] = [];\n\n [localLangPack1, localLangPack2].forEach((l) => {\n formatLocalStrings(l.default as any, strings);\n });\n\n strings = strings.concat(...[langPack1.strings, langPack2.strings].filter(Boolean));\n\n langPack1.strings = strings;\n langPack1.countries = countries;\n return saveLangPack(langPack1);\n });\n }\n\n export function saveLangPack(langPack: LangPackDifference) {\n langPack.appVersion = App.langPackVersion;\n\n return stateStorage.set({langPack}).then(() => {\n applyLangPack(langPack);\n return langPack;\n });\n }\n\n export const polyfillPromise = (function checkIfPolyfillNeeded() {\n if(typeof(Intl) !== 'undefined' && typeof(Intl.PluralRules) !== 'undefined'/* && false */) {\n return Promise.resolve();\n } else {\n return import('./pluralPolyfill').then((_Intl) => {\n (window as any).Intl = Object.assign(typeof(Intl) !== 'undefined' ? Intl : {}, _Intl.default);\n });\n }\n })();\n\n export function applyLangPack(langPack: LangPackDifference) {\n const currentLangCode = lastRequestedLangCode;\n if(langPack.lang_code !== currentLangCode) {\n return;\n }\n\n try {\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(lastRequestedNormalizedLangCode.split('-', 1)[0]);\n }\n\n try {\n pluralRules = new Intl.PluralRules(langPack.lang_code);\n } catch(err) {\n console.error('pluralRules error', err);\n pluralRules = new Intl.PluralRules(langPack.lang_code.split('-', 1)[0]);\n }\n\n strings.clear();\n\n for(const string of langPack.strings) {\n strings.set(string.key as LangPackKey, string);\n }\n\n if(langPack.countries) {\n countriesList.length = 0;\n countriesList.push(...langPack.countries.countries);\n\n langPack.countries.countries.forEach((country) => {\n if(country.name) {\n const langPackKey: any = country.default_name;\n strings.set(langPackKey, {\n _: 'langPackString',\n key: langPackKey,\n value: country.name\n });\n }\n });\n }\n\n if(lastAppliedLangCode !== currentLangCode) {\n rootScope.dispatchEvent('language_change', currentLangCode);\n lastAppliedLangCode = currentLangCode;\n cachedDateTimeFormats.clear();\n updateAmPm();\n }\n\n const elements = Array.from(document.querySelectorAll(`.i18n`)) as HTMLElement[];\n elements.forEach((element) => {\n const instance = weakMap.get(element);\n\n if(instance) {\n instance.update();\n }\n });\n }\n\n function pushNextArgument(out: ReturnType, args: FormatterArguments, indexHolder: {i: number}) {\n const arg = args[indexHolder.i++];\n if(Array.isArray(arg)) {\n out.push(...arg as any);\n } else {\n out.push(arg);\n }\n }\n\n export function superFormatter(input: string, args?: FormatterArguments, indexHolder = {i: 0}): Exclude[] {\n const out: ReturnType = [];\n const regExp = /(\\*\\*|__)(.+?)\\1|(\\n)|(\\[.+?\\]\\(.*?\\))|un\\d|%\\d\\$.|%./g;\n\n let lastIndex = 0;\n input.replace(regExp, (match, p1: any, p2: any, p3: any, p4: string, offset: number, string: string) => {\n // console.table({match, p1, p2, offset, string});\n\n out.push(string.slice(lastIndex, offset));\n\n if(p1) {\n // offset += p1.length;\n let element: HTMLElement;\n switch(p1) {\n case '**': {\n element = document.createElement('b');\n break;\n }\n\n case '__': {\n element = document.createElement('i');\n break;\n }\n }\n\n element.append(...superFormatter(p2, args, indexHolder) as any);\n out.push(element);\n } else if(p3) {\n out.push(document.createElement('br'));\n } else if(p4) {\n const idx = p4.lastIndexOf(']');\n const text = p4.slice(1, idx);\n\n const url = p4.slice(idx + 2, p4.length - 1);\n let a: HTMLAnchorElement;\n if(url && matchUrlProtocol(url)) {\n a = document.createElement('a');\n const wrappedUrl = wrapUrl(url);\n a.href = wrappedUrl.url;\n if(wrappedUrl.onclick) a.setAttribute('onclick', wrappedUrl.onclick);\n a.target = '_blank';\n } else {\n a = args[indexHolder.i++] as HTMLAnchorElement;\n\n if(a instanceof DocumentFragment) { // right after wrapRichText\n a = a.firstChild as any;\n }\n\n a.textContent = ''; // reset content\n }\n\n a.append(...superFormatter(text, args, indexHolder) as any);\n\n out.push(a);\n } else if(args) {\n pushNextArgument(out, args, indexHolder);\n }\n\n lastIndex = offset + match.length;\n return '';\n });\n\n if(lastIndex !== input.length) {\n out.push(input.slice(lastIndex));\n }\n\n return out;\n }\n\n export function format(key: LangPackKey, plain: true, args?: FormatterArguments): string;\n export function format(key: LangPackKey, plain?: false, args?: FormatterArguments): ReturnType;\n export function format(key: LangPackKey, plain = false, args?: FormatterArguments): ReturnType | string {\n const str = strings.get(key);\n let input: string;\n if(str) {\n if(str._ === 'langPackStringPluralized' && args?.length) {\n let v = args[0] as number | string;\n if(typeof(v) === 'string') v = +v.replace(/\\D/g, '');\n const s = pluralRules.select(v);\n // @ts-ignore\n input = str[s + '_value'] || str['other_value'];\n } else if(str._ === 'langPackString') {\n input = str.value;\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n } else {\n // input = '[' + key + ']';\n input = key;\n }\n\n const result = superFormatter(input, args);\n if(plain) { // * let's try a hack now... (don't want to replace []() entity)\n return result.map((item) => item instanceof Node ? item.textContent : item).join('');\n } else {\n return result;\n }\n\n /* if(plain) {\n if(args?.length) {\n const regExp = /un\\d|%\\d\\$.|%./g;\n let i = 0;\n input = input.replace(regExp, (match, offset, string) => {\n return '' + args[i++];\n });\n }\n\n return input;\n } else {\n return superFormatter(input, args);\n } */\n }\n\n export const weakMap: WeakMap> = new WeakMap();\n\n export type IntlElementBaseOptions = {\n element?: HTMLElement,\n property?: 'innerText' | 'innerHTML' | 'placeholder' | 'textContent',\n };\n\n abstract class IntlElementBase {\n public element: IntlElementBaseOptions['element'];\n public property: IntlElementBaseOptions['property'];\n\n constructor(options?: Options) {\n this.element = options?.element || document.createElement('span');\n this.element.classList.add('i18n');\n\n this.property = options?.property;\n if(options && ((options as any as IntlElementOptions).key || (options as any as IntlDateElementOptions).date)) {\n this.update(options);\n }\n\n weakMap.set(this.element, this);\n }\n\n abstract update(options?: Options): void;\n }\n\n export type IntlElementOptions = IntlElementBaseOptions & {\n key?: LangPackKey,\n args?: FormatterArguments\n };\n export class IntlElement extends IntlElementBase {\n public key: IntlElementOptions['key'];\n public args: IntlElementOptions['args'];\n\n constructor(options: IntlElementOptions = {}) {\n super({...options, property: options.property ?? 'innerHTML'});\n }\n\n public update(options?: IntlElementOptions) {\n safeAssign(this, options);\n\n if(this.property === 'innerHTML') {\n this.element.textContent = '';\n this.element.append(...format(this.key, false, this.args) as any);\n } else {\n // @ts-ignore\n const v = this.element[this.property];\n const formatted = format(this.key, true, this.args);\n\n // * hasOwnProperty won't work here\n if(v === undefined) this.element.dataset[this.property] = formatted;\n else (this.element as HTMLInputElement)[this.property] = formatted;\n }\n }\n\n public compareAndUpdate(options?: IntlElementOptions) {\n if(this.key === options.key && deepEqual(this.args, options.args)) {\n return;\n }\n\n return this.update(options);\n }\n }\n\n const cachedDateTimeFormats: Map = new Map();\n function getDateTimeFormat(options: Intl.DateTimeFormatOptions = {}) {\n const json = JSON.stringify(options);\n let dateTimeFormat = cachedDateTimeFormats.get(json);\n if(!dateTimeFormat) {\n dateTimeFormat = new Intl.DateTimeFormat(lastRequestedNormalizedLangCode + '-u-hc-' + timeFormat, options);\n cachedDateTimeFormats.set(json, dateTimeFormat);\n }\n\n return dateTimeFormat;\n }\n\n export let amPmCache = {am: 'AM', pm: 'PM'};\n export type IntlDateElementOptions = IntlElementBaseOptions & {\n date?: Date,\n options: Intl.DateTimeFormatOptions\n };\n export class IntlDateElement extends IntlElementBase {\n public date: IntlDateElementOptions['date'];\n public options: IntlDateElementOptions['options'];\n\n constructor(options: IntlDateElementOptions) {\n super({...options, property: options.property ?? 'textContent'});\n setDirection(this.element);\n }\n\n public update(options?: IntlDateElementOptions) {\n safeAssign(this, options);\n\n let text: string;\n if(this.options.hour && this.options.minute && Object.keys(this.options).length === 2/* && false */) {\n const hours = this.date.getHours();\n text = ('0' + (timeFormat === 'h12' ? (hours % 12) || 12 : hours)).slice(-2) + ':' + ('0' + this.date.getMinutes()).slice(-2);\n // if(this.options.second) {\n // text += ':' + ('0' + this.date.getSeconds()).slice(-2);\n // }\n\n if(timeFormat === 'h12') {\n text += ' ' + (hours < 12 ? amPmCache.am : amPmCache.pm);\n }\n } else {\n // * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale/hourCycle#adding_an_hour_cycle_via_the_locale_string\n const dateTimeFormat = getDateTimeFormat(this.options);\n text = capitalizeFirstLetter(dateTimeFormat.format(this.date));\n }\n\n (this.element as any)[this.property] = text;\n }\n }\n\n export function i18n(key: LangPackKey, args?: FormatterArguments) {\n return new IntlElement({key, args}).element;\n }\n\n export function i18n_(options: IntlElementOptions) {\n return new IntlElement(options).element;\n }\n\n export function _i18n(element: HTMLElement, key: LangPackKey, args?: FormatterArguments, property?: IntlElementOptions['property']) {\n return new IntlElement({element, key, args, property}).element;\n }\n}\n\nexport {I18n};\nexport default I18n;\n\nconst i18n = I18n.i18n;\nexport {i18n};\n\nconst i18n_ = I18n.i18n_;\nexport {i18n_};\n\nconst _i18n = I18n._i18n;\nexport {_i18n};\n\nexport function joinElementsWith(elements: (Node | string)[], joiner: typeof elements[0] | ((isLast: boolean) => typeof elements[0])) {\n const arr = elements.slice(0, 1);\n for(let i = 1; i < elements.length; ++i) {\n const isLast = (elements.length - 1) === i;\n arr.push(typeof(joiner) === 'function' ? joiner(isLast) : joiner);\n arr.push(elements[i]);\n }\n\n return arr;\n}\n\n\nexport function join(elements: (Node | string)[], useLast: boolean, plain: true): string;\nexport function join(elements: (Node | string)[], useLast?: boolean, plain?: false): (string | Node)[];\nexport function join(elements: (Node | string)[], useLast: boolean, plain: boolean): string | (string | Node)[];\nexport function join(elements: (Node | string)[], useLast = true, plain?: boolean): string | (string | Node)[] {\n const joined = joinElementsWith(elements, (isLast) => {\n const langPackKey: LangPackKey = isLast && useLast ? 'AutoDownloadSettings.LastDelimeter' : 'AutoDownloadSettings.Delimeter';\n return plain ? I18n.format(langPackKey, true) : i18n(langPackKey);\n });\n\n return plain ? joined.join('') : joined;\n}\n\nMOUNT_CLASS_TO.I18n = I18n;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type addAnchorListener from '../../helpers/addAnchorListener';\nimport {PHONE_NUMBER_REG_EXP} from '.';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport matchUrlProtocol from './matchUrlProtocol';\nimport {T_ME_PREFIXES} from '../mtproto/mtproto_config';\n\nexport default function wrapUrl(url: string, unsafe?: number | boolean) {\n if(!matchUrlProtocol(url)) {\n url = 'https://' + url;\n }\n\n const out: {url: string, onclick?: Parameters[0]['name']} = {url};\n let tgMeMatch, telescoPeMatch, tgMatch;\n let onclick: typeof out['onclick'];\n /* if(unsafe === 2) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } else */if((tgMeMatch = url.match(/^(?:https?:\\/\\/)?(?:(.+?)\\.)?(?:(?:web|k|z)\\.)?t(?:elegram)?\\.me(?:\\/(.+))?/))) {\n const u = new URL(url);\n let prefix = tgMeMatch[1];\n if(prefix && T_ME_PREFIXES.has(tgMeMatch[1])) {\n prefix = undefined;\n }\n\n if(prefix) {\n u.pathname = prefix + (u.pathname === '/' ? '' : u.pathname);\n }\n\n const fullPath = u.pathname.slice(1);\n const path = fullPath.split('/');\n\n if(path[0] && path[0][0] === '$' && path[0].length > 1) {\n onclick = 'invoice';\n } else if(/^\\W/.test(fullPath) && !PHONE_NUMBER_REG_EXP.test(fullPath)) { // second regexp is for phone numbers (t.me/+38050...)\n onclick = 'joinchat';\n } else switch(path[0]) {\n case 'joinchat':\n case 'addstickers':\n case 'addemoji':\n case 'voicechat':\n case 'invoice':\n if(path.length !== 1 && !prefix) {\n onclick = path[0];\n break;\n }\n\n default:\n if((path[1] && path[1].match(/^\\d+(?:\\?(?:comment|thread)=\\d+)?$/)) || path.length === 1) {\n onclick = 'im';\n break;\n }\n\n break;\n }\n } else if((telescoPeMatch = url.match(/^(?:https?:\\/\\/)?telesco\\.pe\\/([^/?]+)\\/(\\d+)/))) {\n onclick = 'im';\n } else if((tgMatch = url.match(/tg:(?:\\/\\/)?(.+?)(?:\\?|$)/))) {\n onclick = 'tg_' + tgMatch[1] as any;\n }/* else if(unsafe) {\n url = 'tg://unsafe_url?url=' + encodeURIComponent(url);\n } */\n\n if(!(window as any)[onclick]) {\n onclick = undefined;\n }\n\n out.onclick = onclick;\n return out;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.wrapUrl = wrapUrl);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import I18n from '../../lib/langPack';\n\nexport default function setInnerHTML(elem: Element, html: string | DocumentFragment | Element) {\n setDirection(elem);\n if(typeof(html) === 'string') {\n if(!html) elem.replaceChildren();\n else elem.innerHTML = html;\n } else {\n elem.replaceChildren(html);\n }\n}\n\nexport function setDirection(elem: Element) {\n // if(!I18n.isRTL) {\n elem.setAttribute('dir', 'auto');\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport I18n, {i18n} from '../lib/langPack';\n\nexport const months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];\nexport const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];\n\nexport const ONE_DAY = 86400;\n\n// https://stackoverflow.com/a/6117889\nexport const getWeekNumber = (date: Date) => {\n const d = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n const dayNum = d.getUTCDay() || 7;\n d.setUTCDate(d.getUTCDate() + 4 - dayNum);\n const yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));\n return Math.ceil((((d.getTime() - yearStart.getTime()) / ONE_DAY) + 1) / 7);\n};\n\nexport function formatDateAccordingToTodayNew(time: Date) {\n const today = new Date();\n const now = today.getTime() / 1000 | 0;\n const timestamp = time.getTime() / 1000 | 0;\n\n const options: Intl.DateTimeFormatOptions = {};\n if((now - timestamp) < ONE_DAY && today.getDate() === time.getDate()) { // if the same day\n options.hour = options.minute = '2-digit';\n } else if(today.getFullYear() !== time.getFullYear()) { // different year\n options.year = options.day = 'numeric';\n options.month = '2-digit';\n } else if((now - timestamp) < (ONE_DAY * 7) && getWeekNumber(today) === getWeekNumber(time)) { // current week\n options.weekday = 'short';\n } else { // same year\n options.month = 'short';\n options.day = 'numeric';\n }\n\n return new I18n.IntlDateElement({\n date: time,\n options\n }).element;\n}\n\nexport function formatFullSentTimeRaw(timestamp: number, options: {\n capitalize?: boolean\n} = {}) {\n const date = new Date();\n const time = new Date(timestamp * 1000);\n const now = date.getTime() / 1000;\n\n const timeEl = formatTime(time);\n\n let dateEl: Node | string;\n if((now - timestamp) < ONE_DAY && date.getDate() === time.getDate()) { // if the same day\n dateEl = i18n(options.capitalize ? 'Date.Today' : 'Peer.Status.Today');\n } else if((now - timestamp) < (ONE_DAY * 2) && (date.getDate() - 1) === time.getDate()) { // yesterday\n dateEl = i18n(options.capitalize ? 'Yesterday' : 'Peer.Status.Yesterday');\n\n if(options.capitalize) {\n (dateEl as HTMLElement).style.textTransform = 'capitalize';\n }\n } else if(date.getFullYear() !== time.getFullYear()) { // different year\n dateEl = new I18n.IntlDateElement({\n date: time,\n options: {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n }\n }).element;\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate() + ', ' + time.getFullYear();\n } else {\n dateEl = new I18n.IntlDateElement({\n date: time,\n options: {\n month: 'short',\n day: 'numeric'\n }\n }).element;\n // dateStr = months[time.getMonth()].slice(0, 3) + ' ' + time.getDate();\n }\n\n return {dateEl, timeEl};\n}\n\nexport function formatFullSentTime(timestamp: number) {\n const {dateEl, timeEl} = formatFullSentTimeRaw(timestamp, {\n capitalize: true\n });\n\n const fragment = document.createDocumentFragment();\n fragment.append(dateEl, ' ', i18n('ScheduleController.at'), ' ', timeEl);\n return fragment;\n}\n\nexport function formatTime(date: Date) {\n return new I18n.IntlDateElement({\n date,\n options: {\n hour: '2-digit',\n minute: '2-digit'\n }\n }).element;\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.formatDateAccordingToTodayNew = formatDateAccordingToTodayNew);\n\nexport const getFullDate = (date: Date, options: Partial<{\n noTime: true,\n noSeconds: true,\n monthAsNumber: true,\n leadingZero: true\n}> = {}) => {\n const joiner = options.monthAsNumber ? '.' : ' ';\n const time = ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + (options.noSeconds ? '' : ':' + ('0' + date.getSeconds()).slice(-2));\n\n return (options.leadingZero ? ('0' + date.getDate()).slice(-2) : date.getDate()) +\n joiner + (options.monthAsNumber ? ('0' + (date.getMonth() + 1)).slice(-2) : months[date.getMonth()]) +\n joiner + date.getFullYear() +\n (options.noTime ? '' : ', ' + time);\n};\n\n// https://github.com/DrKLO/Telegram/blob/d52b2c921abd3c1e8d6368858313ad0cb0468c07/TMessagesProj/src/main/java/org/telegram/ui/Adapters/FiltersView.java\nconst minYear = 2013;\nconst yearPattern = new RegExp('20[0-9]{1,2}');\nconst monthYearOrDayPattern = new RegExp('(\\\\w{3,}) ([0-9]{0,4})', 'i');\nconst yearOrDayAndMonthPattern = new RegExp('([0-9]{0,4}) (\\\\w{2,})', 'i');\nconst shortDate = new RegExp('^([0-9]{1,4})(\\\\.| |/|\\\\-)([0-9]{1,4})$', 'i');\nconst longDate = new RegExp('^([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,2})(\\\\.| |/|\\\\-)([0-9]{1,4})$', 'i');\nconst numberOfDaysEachMonth = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\nexport type DateData = {\n title: string,\n minDate: number,\n maxDate: number,\n};\nexport function fillTipDates(query: string, dates: DateData[]) {\n const q = query.trim().toLowerCase();\n\n if(q.length < 3) {\n return;\n }\n\n if('today'.indexOf(q) === 0) {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: 'Today',\n minDate,\n maxDate\n });\n return;\n }\n\n if('yesterday'.indexOf(q) === 0) {\n const date = new Date();\n const year = date.getFullYear();\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime() - 86400000;\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 86400001;\n dates.push({\n title: 'Yesterday',\n minDate,\n maxDate\n });\n return;\n }\n\n const dayOfWeek = getDayOfWeek(q);\n if(dayOfWeek >= 0) {\n const date = new Date();\n const now = date.getTime();\n const currentDay = date.getDay();\n const distance = dayOfWeek - currentDay;\n date.setDate(date.getDate() + distance);\n if(date.getTime() > now) {\n date.setTime(date.getTime() - 604800000);\n }\n const year = date.getFullYear()\n const month = date.getMonth();\n const day = date.getDate();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: formatWeekLong(minDate),\n minDate,\n maxDate\n });\n return;\n }\n\n let matches: any[];\n if((matches = shortDate.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[3];\n const k = parseInt(g1);\n const k1 = parseInt(g2);\n if(k > 0 && k <= 31) {\n if(k1 >= minYear && k <= 12) {\n const selectedYear = k1;\n const month = k - 1;\n createForMonthYear(dates, month, selectedYear);\n return;\n } else if(k1 <= 12) {\n const day = k - 1;\n const month = k1 - 1;\n createForDayMonth(dates, day, month);\n }\n } else if(k >= minYear && k1 <= 12) {\n const selectedYear = k;\n const month = k1 - 1;\n createForMonthYear(dates, month, selectedYear);\n }\n\n return;\n }\n\n if((matches = longDate.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[3];\n const g3 = matches[5];\n if(!matches[2] === matches[4]) {\n return;\n }\n\n const day = parseInt(g1);\n const month = parseInt(g2) - 1;\n let year = parseInt(g3);\n if(year >= 10 && year <= 99) {\n year += 2000;\n }\n\n const currentYear = new Date().getFullYear();\n if(validDateForMonth(day - 1, month) && year >= minYear && year <= currentYear) {\n const date = new Date();\n date.setFullYear(year, month, day);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(year, month, day + 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: formatterYearMax(minDate),\n minDate,\n maxDate\n });\n return;\n }\n\n return;\n }\n\n if((matches = yearPattern.exec(q)) !== null) {\n let selectedYear = +q;\n const currentYear = new Date().getFullYear();\n if(selectedYear < minYear) {\n selectedYear = minYear;\n for(let i = currentYear; i >= selectedYear; i--) {\n const date = new Date();\n date.setFullYear(i, 0, 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(i + 1, 0, 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: '' + i,\n minDate,\n maxDate\n });\n }\n } else if(selectedYear <= currentYear) {\n const date = new Date();\n date.setFullYear(selectedYear, 0, 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n date.setFullYear(selectedYear + 1, 0, 1);\n date.setHours(0, 0, 0);\n\n const maxDate = date.getTime() - 1;\n dates.push({\n title: '' + selectedYear,\n minDate,\n maxDate\n });\n }\n\n return;\n }\n\n if((matches = monthYearOrDayPattern.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[2];\n const month = getMonth(g1);\n if(month >= 0) {\n const k = +g2;\n if(k > 0 && k <= 31) {\n const day = k - 1;\n createForDayMonth(dates, day, month);\n return;\n } else if(k >= minYear) {\n const selectedYear = k;\n createForMonthYear(dates, month, selectedYear);\n return;\n }\n }\n }\n\n if((matches = yearOrDayAndMonthPattern.exec(q)) !== null) {\n const g1 = matches[1];\n const g2 = matches[2];\n const month = getMonth(g2);\n if(month >= 0) {\n const k = +g1;\n if(k > 0 && k <= 31) {\n const day = k - 1;\n createForDayMonth(dates, day, month);\n return;\n } else if(k >= minYear) {\n const selectedYear = k;\n createForMonthYear(dates, month, selectedYear);\n }\n }\n }\n}\n\nfunction createForMonthYear(dates: DateData[], month: number, selectedYear: number) {\n const currentYear = new Date().getFullYear();\n const today = Date.now();\n if(selectedYear >= minYear && selectedYear <= currentYear) {\n const date = new Date();\n date.setFullYear(selectedYear, month, 1);\n date.setHours(0, 0, 0);\n const minDate = date.getTime();\n if(minDate > today) {\n return;\n }\n date.setMonth(date.getMonth() + 1);\n const maxDate = date.getTime() - 1;\n\n dates.push({\n title: formatterMonthYear(minDate),\n minDate,\n maxDate\n });\n }\n}\n\nfunction createForDayMonth(dates: DateData[], day: number, month: number) {\n if(validDateForMonth(day, month)) {\n const currentYear = new Date().getFullYear();\n const today = Date.now();\n\n for(let i = currentYear; i >= minYear; i--) {\n if(month === 1 && day === 28 && !isLeapYear(i)) {\n continue;\n }\n\n const date = new Date();\n date.setFullYear(i, month, day + 1);\n date.setHours(0, 0, 0);\n\n const minDate = date.getTime();\n if(minDate > today) {\n continue;\n }\n\n date.setFullYear(i, month, day + 2);\n date.setHours(0, 0, 0);\n const maxDate = date.getTime() - 1;\n if(i === currentYear) {\n dates.push({\n title: formatterDayMonth(minDate),\n minDate,\n maxDate\n });\n } else {\n dates.push({\n title: formatterYearMax(minDate),\n minDate,\n maxDate\n });\n }\n }\n }\n}\n\nfunction formatterMonthYear(timestamp: number) {\n const date = new Date(timestamp);\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getFullYear();\n}\n\nfunction formatterDayMonth(timestamp: number) {\n const date = new Date(timestamp);\n return months[date.getMonth()].slice(0, 3) + ' ' + date.getDate();\n}\n\nfunction formatterYearMax(timestamp: number) {\n const date = new Date(timestamp);\n return ('0' + date.getDate()).slice(-2) + '.' + ('0' + (date.getMonth() + 1)).slice(-2) + '.' + date.getFullYear();\n}\n\nfunction formatWeekLong(timestamp: number) {\n const date = new Date(timestamp);\n return days[date.getDay()];\n}\n\nfunction validDateForMonth(day: number, month: number) {\n if(month >= 0 && month < 12) {\n if(day >= 0 && day < numberOfDaysEachMonth[month]) {\n return true;\n }\n }\n return false;\n}\n\nfunction isLeapYear(year: number) {\n return ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);\n}\n\nfunction getMonth(q: string) {\n /* String[] months = new String[]{\n LocaleController.getString(\"January\", R.string.January).toLowerCase(),\n LocaleController.getString(\"February\", R.string.February).toLowerCase(),\n LocaleController.getString(\"March\", R.string.March).toLowerCase(),\n LocaleController.getString(\"April\", R.string.April).toLowerCase(),\n LocaleController.getString(\"May\", R.string.May).toLowerCase(),\n LocaleController.getString(\"June\", R.string.June).toLowerCase(),\n LocaleController.getString(\"July\", R.string.July).toLowerCase(),\n LocaleController.getString(\"August\", R.string.August).toLowerCase(),\n LocaleController.getString(\"September\", R.string.September).toLowerCase(),\n LocaleController.getString(\"October\", R.string.October).toLowerCase(),\n LocaleController.getString(\"November\", R.string.November).toLowerCase(),\n LocaleController.getString(\"December\", R.string.December).toLowerCase()\n }; */\n\n /* String[] monthsEng = new String[12];\n Calendar c = Calendar.getInstance();\n for (int i = 1; i <= 12; i++) {\n c.set(0, 0, 0, 0, 0, 0);\n c.set(Calendar.MONTH, i);\n monthsEng[i - 1] = c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH).toLowerCase();\n } */\n\n q = q.toLowerCase();\n for(let i = 0; i < 12; i++) {\n const month = months[i].toLowerCase();\n if(month.indexOf(q) === 0) {\n return i;\n }\n }\n return -1;\n}\n\nfunction getDayOfWeek(q: string) {\n const c = new Date();\n if(q.length <= 3) {\n return -1;\n }\n\n for(let i = 0; i < 7; i++) {\n c.setDate(c.getDate() + 1);\n\n if(formatWeekLong(c.getTime()).toLowerCase().indexOf(q) === 0) {\n return c.getDay();\n }\n }\n return -1;\n}\n\nMOUNT_CLASS_TO.fillTipDates = fillTipDates;\n","/**\n * Will be used for FILE_REFERENCE_EXPIRED\n * @param key\n * @param wasObject\n * @param newObject\n */\nexport default function safeReplaceArrayInObject(key: K, wasObject: any, newObject: any) {\n if('byteLength' in newObject[key]) { // Uint8Array\n newObject[key] = [...newObject[key]];\n }\n\n if(wasObject && wasObject[key] !== newObject[key]) {\n wasObject[key].length = newObject[key].length;\n (newObject[key] as any[]).forEach((v, i) => {\n wasObject[key][i] = v;\n });\n\n /* wasObject[key].set(newObject[key]); */\n newObject[key] = wasObject[key];\n }\n}\n","export const EXTENSION_MIME_TYPE_MAP: {[ext in MTFileExtension]: MTMimeType} = {\n pdf: 'application/pdf',\n tgv: 'application/x-tgwallpattern',\n tgs: 'application/x-tgsticker',\n json: 'application/json',\n wav: 'audio/wav',\n mp3: 'audio/mpeg',\n ogg: 'audio/ogg',\n jpeg: 'image/jpeg',\n jpg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n mp4: 'video/mp4',\n webm: 'video/webm',\n mov: 'video/quicktime',\n svg: 'image/svg+xml'\n};\n\nexport const MIME_TYPE_EXTENSION_MAP: {[mimeType in MTMimeType]?: MTFileExtension} = {};\n\nfor(const ext in EXTENSION_MIME_TYPE_MAP) {\n MIME_TYPE_EXTENSION_MAP[EXTENSION_MIME_TYPE_MAP[ext as MTFileExtension]] = ext as MTFileExtension;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ThumbCache} from '../storages/thumbs';\nimport {AccountWallPapers, Document, DocumentAttribute, MessagesSavedGifs, PhotoSize, WallPaper} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {getFullDate} from '../../helpers/date';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceArrayInObject from '../../helpers/object/safeReplaceArrayInObject';\nimport {AppManager} from './manager';\nimport wrapPlainText from '../richTextProcessor/wrapPlainText';\nimport assumeType from '../../helpers/assumeType';\nimport {getEnvironment} from '../../environment/utils';\nimport {isServiceWorkerOnline} from '../mtproto/mtproto.worker';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport getDocumentInputFileLocation from './utils/docs/getDocumentInputFileLocation';\nimport getDocumentURL from './utils/docs/getDocumentURL';\nimport makeError from '../../helpers/makeError';\nimport {EXTENSION_MIME_TYPE_MAP} from '../../environment/mimeTypeMap';\nimport {THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\nimport tsNow from '../../helpers/tsNow';\n\nexport type MyDocument = Document.document;\n\n// TODO: ะตัะปะธ ะทะฐะปะธั‚ัŒ ะบะฐั€ั‚ะธะฝะบัƒ ั„ะฐะนะปะพะผ, ะฐ ะฟะพั‚ะพะผ ะฟะตั€ะตะทะฐะนั‚ะธ ะฒ ะดะธะฐะปะพะณ - ะฟั€ะตะฒัŒัŽัˆะบะฐ ะทะฐะฝะพะฒะพ ัะบะฐั‡ะฐะตั‚ัั\n\ntype WallPaperId = WallPaper.wallPaper['id'];\n\nlet uploadWallPaperTempId = 0;\n\nexport class AppDocsManager extends AppManager {\n private docs: {[docId: DocId]: MyDocument};\n\n private stickerCachedThumbs: {[docId: DocId]: {[toneIndex: number]: {url: string, w: number, h: number}}};\n\n private uploadingWallPapers: {[id: WallPaperId]: {cacheContext: ThumbCache, file: File}};\n\n protected after() {\n this.docs = {};\n this.stickerCachedThumbs = {};\n this.uploadingWallPapers = {};\n\n MTProtoMessagePort.getInstance().addEventListener('serviceWorkerOnline', (online) => {\n if(!online) {\n this.onServiceWorkerFail();\n }\n });\n }\n\n private onServiceWorkerFail = () => {\n for(const id in this.docs) {\n const doc = this.docs[id];\n\n if(doc.supportsStreaming) {\n delete doc.supportsStreaming;\n this.thumbsStorage.deleteCacheContext(doc);\n }\n }\n };\n\n public saveDoc(doc: Document, context?: ReferenceContext): MyDocument {\n if(!doc || doc._ === 'documentEmpty') {\n return;\n }\n\n const oldDoc = this.docs[doc.id];\n\n if(doc.file_reference) { // * because we can have a new object w/o the file_reference while sending\n safeReplaceArrayInObject('file_reference', oldDoc, doc);\n this.referenceDatabase.saveContext(doc.file_reference, context);\n }\n\n // console.log('saveDoc', apiDoc, this.docs[apiDoc.id]);\n // if(oldDoc) {\n // //if(doc._ !== 'documentEmpty' && doc._ === d._) {\n // if(doc.thumbs) {\n // if(!oldDoc.thumbs) oldDoc.thumbs = doc.thumbs;\n // /* else if(apiDoc.thumbs[0].bytes && !d.thumbs[0].bytes) {\n // d.thumbs.unshift(apiDoc.thumbs[0]);\n // } else if(d.thumbs[0].url) { // fix for converted thumb in safari\n // apiDoc.thumbs[0] = d.thumbs[0];\n // } */\n // }\n\n // //}\n\n // return oldDoc;\n\n // //return Object.assign(d, apiDoc, context);\n // //return context ? Object.assign(d, context) : d;\n // }\n\n if(!oldDoc) {\n this.docs[doc.id] = doc;\n }\n\n // * exclude from state\n // defineNotNumerableProperties(doc, [/* 'thumbs', */'type', 'h', 'w', 'file_name',\n // 'file', 'duration', 'downloaded', 'url', 'audioTitle',\n // 'audioPerformer', 'sticker', 'stickerEmoji', 'stickerEmojiRaw',\n // 'stickerSetInput', 'stickerThumbConverted', 'animated', 'supportsStreaming']);\n\n for(let i = 0, length = doc.attributes.length; i < length; ++i) {\n const attribute = doc.attributes[i];\n switch(attribute._) {\n case 'documentAttributeFilename': {\n doc.file_name = wrapPlainText(attribute.file_name);\n break;\n }\n\n case 'documentAttributeAudio': {\n if(doc.type === 'round') {\n break;\n }\n\n doc.duration = attribute.duration;\n doc.type = attribute.pFlags.voice && doc.mime_type === 'audio/ogg' ? 'voice' : 'audio';\n break;\n }\n\n case 'documentAttributeVideo': {\n doc.duration = attribute.duration;\n doc.w = attribute.w;\n doc.h = attribute.h;\n // apiDoc.supportsStreaming = attribute.pFlags?.supports_streaming/* && apiDoc.size > 524288 */;\n if(/* apiDoc.thumbs && */attribute.pFlags.round_message) {\n doc.type = 'round';\n } else /* if(apiDoc.thumbs) */ {\n doc.type = 'video';\n }\n break;\n }\n\n case 'documentAttributeCustomEmoji':\n case 'documentAttributeSticker': {\n if(attribute.alt !== undefined) {\n doc.stickerEmojiRaw = attribute.alt;\n }\n\n if(attribute.stickerset) {\n if(attribute.stickerset._ === 'inputStickerSetEmpty') {\n delete attribute.stickerset;\n } else if(attribute.stickerset._ === 'inputStickerSetID') {\n doc.stickerSetInput = attribute.stickerset;\n }\n }\n\n // * there can be no thumbs, then it is a document\n if(/* apiDoc.thumbs && */doc.mime_type === 'image/webp' && (doc.thumbs || getEnvironment().IS_WEBP_SUPPORTED)) {\n doc.type = 'sticker';\n doc.sticker = 1;\n } else if(doc.mime_type === 'video/webm') {\n if(!getEnvironment().IS_WEBM_SUPPORTED) {\n break;\n }\n\n doc.type = 'sticker';\n doc.sticker = 3;\n doc.animated = true;\n }\n break;\n }\n\n case 'documentAttributeImageSize': {\n doc.type = 'photo';\n doc.w = attribute.w;\n doc.h = attribute.h;\n break;\n }\n\n case 'documentAttributeAnimated': {\n if((doc.mime_type === 'image/gif' || doc.mime_type === 'video/mp4')/* && apiDoc.thumbs */) {\n doc.type = 'gif';\n }\n\n doc.animated = true;\n break;\n }\n }\n }\n\n if(!doc.mime_type) {\n const ext = (doc.file_name || '').split('.').pop();\n // @ts-ignore\n const mappedMimeType = ext && EXTENSION_MIME_TYPE_MAP[ext.toLowerCase()];\n if(mappedMimeType) {\n doc.mime_type = mappedMimeType;\n } else {\n switch(doc.type) {\n case 'gif':\n case 'video':\n case 'round':\n doc.mime_type = 'video/mp4';\n break;\n case 'sticker':\n doc.mime_type = 'image/webp';\n break;\n case 'audio':\n doc.mime_type = 'audio/mpeg';\n break;\n case 'voice':\n doc.mime_type = 'audio/ogg';\n break;\n default:\n doc.mime_type = 'application/octet-stream';\n break;\n }\n }\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.pdf) {\n doc.type = 'pdf';\n } else if(doc.mime_type === EXTENSION_MIME_TYPE_MAP.gif) {\n doc.type = 'gif';\n } else if(doc.mime_type === 'application/x-tgsticker' && doc.file_name === 'AnimatedSticker.tgs') {\n doc.type = 'sticker';\n doc.animated = true;\n doc.sticker = 2;\n }\n\n if(doc.type === 'voice' || doc.type === 'round') {\n // browser will identify extension\n const attribute = doc.attributes.find((attribute) => attribute._ === 'documentAttributeFilename') as DocumentAttribute.documentAttributeFilename;\n const ext = attribute && attribute.file_name.split('.').pop();\n const date = getFullDate(new Date(doc.date * 1000), {monthAsNumber: true, leadingZero: true}).replace(/[:\\.]/g, '-').replace(', ', '_');\n doc.file_name = `${doc.type}_${date}${ext ? '.' + ext : ''}`;\n }\n\n if(isServiceWorkerOnline() && ((doc.type === 'gif' && doc.size > 8e6) || doc.type === 'audio' || doc.type === 'video')/* || doc.mime_type.indexOf('video/') === 0 */) {\n doc.supportsStreaming = true;\n\n const cacheContext = this.thumbsStorage.getCacheContext(doc);\n if(!cacheContext.url) {\n this.thumbsStorage.setCacheContextURL(doc, undefined, getDocumentURL(doc), 0);\n }\n } else {\n doc.supportsStreaming = false;\n }\n\n // for testing purposes\n // doc.supportsStreaming = false;\n // doc.url = ''; // * this will break upload urls\n\n doc.file_name ||= '';\n\n /* if(!doc.url) {\n doc.url = this.getFileURL(doc);\n } */\n\n if(oldDoc) {\n return Object.assign(oldDoc, doc);\n }\n\n return doc;\n }\n\n public getDoc(docId: DocId | MyDocument): MyDocument {\n return isObject(docId) ? docId : this.docs[docId];\n }\n\n public downloadDoc(doc: MyDocument, queueId?: number, onlyCache?: boolean) {\n return this.apiFileManager.downloadMedia({\n media: doc,\n queueId,\n onlyCache\n });\n }\n\n public getLottieCachedThumb(docId: DocId, toneIndex: number) {\n const cached = this.stickerCachedThumbs[docId];\n return cached && cached[toneIndex];\n }\n\n public saveLottiePreview(docId: DocId, blob: Blob, width: number, height: number, toneIndex: number) {\n const doc = this.getDoc(docId);\n if(!doc) {\n return;\n }\n\n const cached = this.stickerCachedThumbs[doc.id] ??= {};\n\n const thumb = cached[toneIndex];\n if(thumb && thumb.w >= width && thumb.h >= height) {\n return;\n }\n\n cached[toneIndex] = {\n url: URL.createObjectURL(blob),\n w: width,\n h: height\n };\n }\n\n public saveWebPConvertedStrippedThumb(docId: DocId, bytes: Uint8Array) {\n const doc = this.getDoc(docId);\n if(!doc) {\n return;\n }\n\n const thumb = doc.thumbs && doc.thumbs.find((thumb) => thumb._ === 'photoStrippedSize') as PhotoSize.photoStrippedSize;\n if(!thumb) {\n return;\n }\n\n doc.pFlags.stickerThumbConverted = true;\n thumb.bytes = bytes;\n }\n\n public prepareWallPaperUpload(file: File) {\n const id = 'wallpaper-upload-' + ++uploadWallPaperTempId;\n\n const thumb = {\n _: 'photoSize',\n h: 0,\n w: 0,\n location: {} as any,\n size: file.size,\n type: THUMB_TYPE_FULL\n } as PhotoSize.photoSize;\n let document: MyDocument = {\n _: 'document',\n access_hash: '',\n attributes: [],\n dc_id: 0,\n file_reference: [],\n id,\n mime_type: file.type as MTMimeType,\n size: file.size,\n date: tsNow(true),\n pFlags: {},\n thumbs: [thumb],\n file_name: file.name\n };\n\n document = this.saveDoc(document);\n\n const cacheContext = this.thumbsStorage.setCacheContextURL(document, undefined, URL.createObjectURL(file), file.size);\n\n const wallpaper: WallPaper.wallPaper = {\n _: 'wallPaper',\n access_hash: '',\n document: document,\n id,\n slug: id,\n pFlags: {}\n };\n\n this.uploadingWallPapers[id] = {\n cacheContext,\n file\n };\n\n return wallpaper;\n }\n\n public uploadWallPaper(id: WallPaperId) {\n const {cacheContext, file} = this.uploadingWallPapers[id];\n delete this.uploadingWallPapers[id];\n\n const upload = this.apiFileManager.upload({file, fileName: file.name});\n return upload.then((inputFile) => {\n return this.apiManager.invokeApi('account.uploadWallPaper', {\n file: inputFile,\n mime_type: file.type,\n settings: {\n _: 'wallPaperSettings',\n pFlags: {}\n }\n }).then((wallPaper) => {\n assumeType(wallPaper);\n wallPaper.document = this.saveDoc(wallPaper.document);\n this.thumbsStorage.setCacheContextURL(wallPaper.document, undefined, cacheContext.url, cacheContext.downloaded);\n\n return wallPaper;\n });\n });\n }\n\n public getGifs() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getSavedGifs',\n processResult: (res) => {\n assumeType(res);\n return res.gifs.map((doc) => this.saveDoc(doc));\n }\n });\n }\n\n public requestDocPart(docId: DocId, dcId: number, offset: number, limit: number) {\n const doc = this.getDoc(docId);\n if(!doc) return Promise.reject(makeError('NO_DOC'));\n return this.apiFileManager.requestFilePart(dcId, getDocumentInputFileLocation(doc), offset, limit);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {FileURLType, getFileURL} from '../../../../helpers/fileName';\nimport {Document, PhotoSize} from '../../../../layer';\nimport getDocumentDownloadOptions from './getDocumentDownloadOptions';\n\nexport default function getDocumentURL(doc: Document.document, download = false, thumb?: PhotoSize.photoSize) {\n let type: FileURLType;\n if(download) {\n type = 'download';\n } else if(thumb) {\n type = 'thumb';\n } else if(doc.supportsStreaming) {\n type = 'stream';\n } else {\n type = 'document';\n }\n\n return getFileURL(type, getDocumentDownloadOptions(doc, thumb));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {MessageEntity, DraftMessage, MessagesSaveDraft} from '../../layer';\nimport tsNow from '../../helpers/tsNow';\nimport stateStorage from '../stateStorage';\nimport assumeType from '../../helpers/assumeType';\nimport {AppManager} from './manager';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport draftsAreEqual from './utils/drafts/draftsAreEqual';\n\nexport type MyDraftMessage = DraftMessage.draftMessage;\n\nexport class AppDraftsManager extends AppManager {\n private drafts: {[peerIdAndThreadId: string]: MyDraftMessage} = {};\n private getAllDraftPromise: Promise;\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateDraftMessage: (update) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n this.saveDraft({\n peerId,\n threadId: update.threadId,\n draft: update.draft,\n notify: true\n });\n }\n });\n\n /* return */stateStorage.get('drafts').then((drafts) => {\n this.drafts = drafts || {};\n });\n }\n\n private getKey(peerId: PeerId, threadId?: number) {\n return '' + peerId + (threadId ? '_' + threadId : '');\n }\n\n public getDraft(peerId: PeerId, threadId?: number) {\n return this.drafts[this.getKey(peerId, threadId)];\n }\n\n public addMissedDialogs() {\n return this.getAllDrafts().then(() => {\n for(const key in this.drafts) {\n if(key.indexOf('_') !== -1) { // exclude threads\n continue;\n }\n\n const peerId = key.toPeerId();\n const dialog = this.appMessagesManager.getDialogOnly(peerId);\n if(!dialog) {\n this.appMessagesManager.reloadConversation(peerId);\n /* const dialog = appMessagesManager.generateDialog(peerId);\n dialog.draft = this.drafts[key];\n appMessagesManager.saveConversation(dialog);\n appMessagesManager.newDialogsToHandle[peerId] = dialog;\n appMessagesManager.scheduleHandleNewDialogs(); */\n }\n }\n });\n }\n\n private getAllDrafts() {\n return this.getAllDraftPromise ??= this.apiManager.invokeApi('messages.getAllDrafts')\n .then((updates) => {\n const p = this.apiUpdatesManager.updatesState.syncLoading || Promise.resolve();\n p.then(() => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n });\n }\n\n public saveDraft({peerId, threadId, draft: apiDraft, notify, force}: {\n peerId: PeerId,\n threadId?: number,\n draft: DraftMessage,\n notify?: boolean,\n force?: boolean\n }) {\n const draft = this.processApiDraft(apiDraft);\n\n const key = this.getKey(peerId, threadId);\n if(draft) {\n this.drafts[key] = draft;\n } else {\n delete this.drafts[key];\n }\n\n stateStorage.set({\n drafts: this.drafts\n });\n\n if(notify) {\n // console.warn(dT(), 'save draft', peerId, apiDraft, options)\n this.rootScope.dispatchEvent('draft_updated', {\n peerId,\n threadId,\n draft,\n force\n });\n }\n\n return draft;\n }\n\n private isEmptyDraft(draft: DraftMessage) {\n if(draft?._ !== 'draftMessage') {\n return true;\n }\n\n if(draft.reply_to_msg_id !== undefined && draft.reply_to_msg_id > 0) {\n return false;\n }\n\n if(!draft.message.length) {\n return true;\n }\n\n return false;\n }\n\n private processApiDraft(draft: DraftMessage): MyDraftMessage {\n if(!draft || draft._ !== 'draftMessage') {\n return undefined;\n }\n\n if(draft.reply_to_msg_id) {\n draft.reply_to_msg_id = generateMessageId(draft.reply_to_msg_id);\n }\n\n return draft;\n }\n\n public syncDraft(peerId: PeerId, threadId: number, localDraft?: DraftMessage, saveOnServer = true, force = false) {\n // console.warn(dT(), 'sync draft', peerID)\n const serverDraft = this.getDraft(peerId, threadId);\n if(draftsAreEqual(serverDraft, localDraft)) {\n // console.warn(dT(), 'equal drafts', localDraft, serverDraft)\n return true;\n }\n\n // console.warn(dT(), 'changed draft', localDraft, serverDraft)\n const params: MessagesSaveDraft = {\n peer: this.appPeersManager.getInputPeerById(peerId),\n message: ''\n };\n\n let draftObj: DraftMessage;\n if(this.isEmptyDraft(localDraft)) {\n draftObj = {_: 'draftMessageEmpty'};\n } else {\n assumeType(localDraft);\n const message = localDraft.message;\n const entities: MessageEntity[] = localDraft.entities;\n\n if(localDraft.reply_to_msg_id) {\n params.reply_to_msg_id = getServerMessageId(localDraft.reply_to_msg_id);\n }\n\n if(entities?.length) {\n params.entities = this.appMessagesManager.getInputEntities(entities);\n }\n\n if(localDraft.pFlags.no_webpage) {\n params.no_webpage = localDraft.pFlags.no_webpage;\n }\n\n params.message = message;\n }\n\n if(threadId) {\n params.top_msg_id = getServerMessageId(threadId);\n }\n\n const saveLocalDraft = draftObj || localDraft;\n saveLocalDraft.date = tsNow(true) + this.timeManager.getServerTimeOffset();\n\n this.saveDraft({\n peerId,\n threadId,\n draft: saveLocalDraft,\n notify: true,\n force\n });\n\n if(saveOnServer) {\n return this.apiManager.invokeApi('messages.saveDraft', params);\n }\n\n return true;\n }\n\n public clearAllDrafts() {\n return this.apiManager.invokeApi('messages.clearAllDrafts').then((bool) => {\n if(!bool) {\n return;\n }\n\n for(const combined in this.drafts) {\n const [peerId, threadId] = combined.split('_');\n this.rootScope.dispatchEvent('draft_updated', {\n peerId: peerId.toPeerId(),\n threadId: threadId ? +threadId : undefined,\n draft: undefined\n });\n }\n });\n }\n\n public clearDraft(peerId: PeerId, threadId: number) {\n const emptyDraft: DraftMessage.draftMessageEmpty = {\n _: 'draftMessageEmpty'\n };\n\n if(threadId) {\n this.syncDraft(peerId, threadId, emptyDraft as any, false, true);\n } else {\n this.saveDraft({\n peerId,\n threadId,\n draft: emptyDraft,\n notify: true,\n force: true\n });\n }\n }\n\n public setDraft(peerId: PeerId, threadId: number, message: string, entities?: MessageEntity[]) {\n const draft: DraftMessage.draftMessage = {\n _: 'draftMessage',\n date: tsNow(true),\n message,\n pFlags: {},\n entities\n };\n\n if(threadId) {\n this.syncDraft(peerId, threadId, draft, false, true);\n } else {\n this.saveDraft({\n peerId,\n threadId,\n draft,\n notify: true,\n force: true\n });\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport isObject from '../../helpers/object/isObject';\nimport validateInitObject from '../../helpers/object/validateInitObject';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport SearchIndex from '../searchIndex';\nimport stateStorage from '../stateStorage';\nimport {AppManager} from './manager';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\n\ntype EmojiLangPack = {\n keywords: {\n [keyword: string]: string[],\n },\n version: number,\n langCode: string\n};\n\nconst EMOJI_LANG_PACK: EmojiLangPack = {\n keywords: {},\n version: 0,\n langCode: App.langPackCode\n};\n\nconst RECENT_MAX_LENGTH = 32;\n\ntype EmojiType = 'native' | 'custom';\n\nexport class AppEmojiManager extends AppManager {\n private static POPULAR_EMOJI = ['๐Ÿ˜‚', '๐Ÿ˜˜', 'โค๏ธ', '๐Ÿ˜', '๐Ÿ˜Š', '๐Ÿ˜', '๐Ÿ‘', 'โ˜บ๏ธ', '๐Ÿ˜”', '๐Ÿ˜„', '๐Ÿ˜ญ', '๐Ÿ’‹', '๐Ÿ˜’', '๐Ÿ˜ณ', '๐Ÿ˜œ', '๐Ÿ™ˆ', '๐Ÿ˜‰', '๐Ÿ˜ƒ', '๐Ÿ˜ข', '๐Ÿ˜', '๐Ÿ˜ฑ', '๐Ÿ˜ก', '๐Ÿ˜', '๐Ÿ˜ž', '๐Ÿ˜…', '๐Ÿ˜š', '๐Ÿ™Š', '๐Ÿ˜Œ', '๐Ÿ˜€', '๐Ÿ˜‹', '๐Ÿ˜†', '๐Ÿ‘Œ', '๐Ÿ˜', '๐Ÿ˜•'];\n private keywordLangPacks: {\n [langCode: string]: EmojiLangPack\n } = {};\n\n private index: SearchIndex;\n private indexedLangPacks: {[langCode: string]: boolean} = {};\n\n private getKeywordsPromises: {[langCode: string]: Promise} = {};\n\n private recent: {native?: string[], custom?: DocId[]} = {};\n private getRecentEmojisPromises: {native?: Promise, custom?: Promise} = {};\n\n private getCustomEmojiDocumentsPromise: Promise;\n private getCustomEmojiDocumentPromises: Map> = new Map();\n\n /* public getPopularEmoji() {\n return stateStorage.get('emojis_popular').then((popEmojis) => {\n var result = []\n if (popEmojis && popEmojis.length) {\n for (var i = 0, len = popEmojis.length; i < len; i++) {\n result.push({code: popEmojis[i][0], rate: popEmojis[i][1]})\n }\n callback(result)\n return\n }\n\n return stateStorage.get('emojis_recent').then((recentEmojis) => {\n recentEmojis = recentEmojis || popular || []\n var shortcut\n var code\n for (var i = 0, len = recentEmojis.length; i < len; i++) {\n shortcut = recentEmojis[i]\n if (Array.isArray(shortcut)) {\n shortcut = shortcut[0]\n }\n if (shortcut && typeof shortcut === 'string') {\n if (shortcut.charAt(0) == ':') {\n shortcut = shortcut.substr(1, shortcut.length - 2)\n }\n if (code = shortcuts[shortcut]) {\n result.push({code: code, rate: 1})\n }\n }\n }\n callback(result)\n });\n });\n }\n\n function pushPopularEmoji (code) {\n getPopularEmoji(function (popularEmoji) {\n var exists = false\n var count = popularEmoji.length\n var result = []\n for (var i = 0; i < count; i++) {\n if (popularEmoji[i].code == code) {\n exists = true\n popularEmoji[i].rate++\n }\n result.push([popularEmoji[i].code, popularEmoji[i].rate])\n }\n if (exists) {\n result.sort(function (a, b) {\n return b[1] - a[1]\n })\n } else {\n if (result.length > 41) {\n result = result.slice(0, 41)\n }\n result.push([code, 1])\n }\n ConfigStorage.set({emojis_popular: result})\n })\n } */\n\n public getEmojiKeywords(langCode: string = App.langPackCode) {\n const promise = this.getKeywordsPromises[langCode];\n if(promise) {\n return promise;\n }\n\n const storageKey: any = 'emojiKeywords_' + langCode;\n return this.getKeywordsPromises[langCode] = stateStorage.get(storageKey).then((pack: EmojiLangPack) => {\n if(!isObject(pack)) {\n pack = {} as any;\n }\n\n validateInitObject(EMOJI_LANG_PACK, pack);\n\n // important\n pack.langCode = langCode;\n this.keywordLangPacks[langCode] = pack;\n\n return this.apiManager.invokeApi('messages.getEmojiKeywordsDifference', {\n lang_code: pack.langCode,\n from_version: pack.version\n }).then((keywordsDifference) => {\n pack.version = keywordsDifference.version;\n\n const packKeywords = pack.keywords;\n const keywords = keywordsDifference.keywords;\n for(let i = 0, length = keywords.length; i < length; ++i) {\n const {keyword, emoticons} = keywords[i];\n packKeywords[keyword] = emoticons;\n }\n\n stateStorage.set({\n [storageKey]: pack\n });\n\n return pack;\n }, () => {\n return pack;\n });\n });\n }\n\n public getBothEmojiKeywords() {\n const promises: Promise[] = [\n this.getEmojiKeywords()\n ];\n\n if(this.networkerFactory.language !== App.langPackCode) {\n promises.push(this.getEmojiKeywords(this.networkerFactory.language));\n }\n\n if(!this.recent.native) {\n promises.push(this.getRecentEmojis('native'));\n }\n\n return Promise.all(promises);\n }\n\n private indexEmojis() {\n if(!this.index) {\n this.index = new SearchIndex(undefined, 2);\n }\n\n for(const langCode in this.keywordLangPacks) {\n if(this.indexedLangPacks[langCode]) {\n continue;\n }\n\n const pack = this.keywordLangPacks[langCode];\n const keywords = pack.keywords;\n\n for(const keyword in keywords) {\n const emoticons = keywords[keyword];\n this.index.indexObject(emoticons, keyword);\n }\n\n this.indexedLangPacks[langCode] = true;\n }\n }\n\n public searchEmojis(q: string) {\n this.indexEmojis();\n\n q = q.toLowerCase().replace(/_/g, ' ');\n\n // const perf = performance.now();\n let emojis: Array;\n if(q.trim()) {\n const set = this.index.search(q);\n emojis = Array.from(set).reduce((acc, v) => acc.concat(v), []);\n } else {\n emojis = this.recent.native.concat(AppEmojiManager.POPULAR_EMOJI).slice(0, RECENT_MAX_LENGTH);\n }\n\n emojis = Array.from(new Set(emojis));\n // console.log('searchEmojis', q, 'time', performance.now() - perf);\n\n /* for(let i = 0, length = emojis.length; i < length; ++i) {\n if(emojis[i].includes(zeroWidthJoiner) && !emojis[i].includes('\\ufe0f')) {\n emojis[i] += '\\ufe0f';\n }\n } */\n\n return emojis;\n }\n\n public getRecentEmojis(type: 'custom'): Promise;\n public getRecentEmojis(type: 'native'): Promise;\n public getRecentEmojis(type: T): Promise {\n const promises = this.getRecentEmojisPromises;\n return promises[type] ??= this.appStateManager.getState().then((state) => {\n let recent: string[] | DocId[] = [];\n if(type === 'native') {\n const {recentEmoji} = state;\n recent = Array.isArray(recentEmoji) && recentEmoji.length ? recentEmoji : AppEmojiManager.POPULAR_EMOJI;\n } else {\n const {recentCustomEmoji} = state;\n recent = Array.isArray(recentCustomEmoji) && recentCustomEmoji.length ? recentCustomEmoji : [];\n }\n\n return this.recent[type] = recent as any;\n }) as any;\n }\n\n public pushRecentEmoji(emoji: AppEmoji) {\n const type: EmojiType = emoji.docId ? 'custom' : 'native';\n emoji.emoji = fixEmoji(emoji.emoji);\n // @ts-ignore\n this.getRecentEmojis(type).then((recent) => {\n const i = emoji.docId || emoji.emoji;\n indexOfAndSplice(recent, i);\n recent.unshift(i);\n recent.splice(RECENT_MAX_LENGTH, recent.length - RECENT_MAX_LENGTH);\n\n this.appStateManager.pushToState(type === 'custom' ? 'recentCustomEmoji' : 'recentEmoji', recent);\n this.rootScope.dispatchEvent('emoji_recent', emoji);\n });\n }\n\n public getCustomEmojiDocuments(docIds: DocId[]) {\n if(!docIds.length) return Promise.resolve([] as MyDocument[]);\n return this.apiManager.invokeApi('messages.getCustomEmojiDocuments', {document_id: docIds}).then((documents) => {\n return documents.map((doc) => {\n return this.appDocsManager.saveDoc(doc, {\n type: 'customEmoji',\n docId: doc.id\n });\n });\n });\n }\n\n public getCachedCustomEmojiDocuments(docIds: DocId[]) {\n return docIds.map((docId) => this.appDocsManager.getDoc(docId));\n }\n\n private setDebouncedGetCustomEmojiDocuments() {\n if(this.getCustomEmojiDocumentsPromise || !this.getCustomEmojiDocumentPromises.size) {\n return;\n }\n\n this.getCustomEmojiDocumentsPromise = pause(0).then(() => {\n const allIds = [...this.getCustomEmojiDocumentPromises.keys()];\n const promises: Promise[] = [];\n do {\n const ids = allIds.splice(0, 100);\n const promise = this.getCustomEmojiDocuments(ids).then((docs) => {\n docs.forEach((doc, idx) => {\n const docId = ids[idx];\n const deferred = this.getCustomEmojiDocumentPromises.get(docId);\n this.getCustomEmojiDocumentPromises.delete(docId);\n deferred.resolve(doc);\n });\n });\n\n promises.push(promise);\n } while(allIds.length);\n\n return Promise.all(promises);\n }).finally(() => {\n this.getCustomEmojiDocumentsPromise = undefined;\n this.setDebouncedGetCustomEmojiDocuments();\n });\n }\n\n public getCustomEmojiDocument(id: DocId) {\n let promise = this.getCustomEmojiDocumentPromises.get(id);\n if(promise) {\n return promise;\n }\n\n const doc = this.appDocsManager.getDoc(id);\n if(doc) {\n return doc;\n }\n\n promise = deferredPromise();\n this.getCustomEmojiDocumentPromises.set(id, promise);\n\n this.setDebouncedGetCustomEmojiDocuments();\n\n return promise;\n }\n\n public getCustomEmojis() {\n return this.appStickersManager.getEmojiStickers();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport type GroupCallConnectionInstance from '../calls/groupCallConnectionInstance';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {nextRandomUint} from '../../helpers/random';\nimport {DataJSON, GroupCall, GroupCallParticipant, GroupCallParticipantVideoSourceGroup, InputGroupCall, PhoneJoinGroupCall, PhoneJoinGroupCallPresentation, Update, Updates} from '../../layer';\nimport {logger} from '../logger';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\n\nexport type GroupCallId = GroupCall['id'];\nexport type MyGroupCall = GroupCall | InputGroupCall;\n\nexport type GroupCallConnectionType = 'main' | 'presentation';\n\nexport type JoinGroupCallJsonPayload = {\n fingerprints: {\n fingerprint: string;\n setup: string;\n hash: string;\n }[];\n pwd: string;\n ssrc: number;\n 'ssrc-groups': GroupCallParticipantVideoSourceGroup.groupCallParticipantVideoSourceGroup[];\n ufrag: string;\n};\n\nconst GET_PARTICIPANTS_LIMIT = 100;\n\nexport type GroupCallOutputSource = 'main' | 'presentation' | number;\n\nexport class AppGroupCallsManager extends AppManager {\n private log: ReturnType;\n\n private groupCalls: Map;\n private participants: Map>;\n private nextOffsets: Map;\n\n // private doNotDispatchParticipantUpdate: PeerId;\n\n protected after() {\n this.log = logger('GROUP-CALLS');\n\n this.groupCalls = new Map();\n this.participants = new Map();\n this.nextOffsets = new Map();\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateGroupCall: (update) => {\n this.saveGroupCall(update.call, update.chat_id);\n },\n\n updateGroupCallParticipants: (update) => {\n this.saveGroupCall(update.call);\n\n // this.getGroupCallFull(update.call.id, true); // ! WARNING TEMP\n\n const groupCallId = update.call.id;\n this.saveApiParticipants(groupCallId, update.participants);\n }\n });\n\n this.rootScope.addEventListener('group_call_update', (groupCall) => {\n if(groupCall._ === 'groupCallDiscarded') {\n this.participants.delete(groupCall.id);\n }\n });\n }\n\n public getCachedParticipants(groupCallId: GroupCallId) {\n let participants = this.participants.get(groupCallId);\n if(!participants) {\n this.participants.set(groupCallId, participants = new Map());\n }\n\n return participants;\n }\n\n private prepareToSavingNextOffset(groupCallId: GroupCallId) {\n const nextOffsetsMap = this.nextOffsets;\n\n const setNextOffset = (newNextOffset: string) => {\n if(nextOffsetsMap.get(groupCallId) === nextOffset) {\n nextOffsetsMap.set(groupCallId, newNextOffset);\n }\n };\n\n const nextOffset = nextOffsetsMap.get(groupCallId);\n return {\n nextOffset,\n setNextOffset\n };\n }\n\n public saveApiParticipant(groupCallId: GroupCallId, participant: GroupCallParticipant, skipCounterUpdating?: boolean) {\n const participants = this.getCachedParticipants(groupCallId);\n\n const peerId = getPeerId(participant.peer);\n\n const oldParticipant = participants.get(peerId);\n const hasLeft = participant.pFlags.left;\n if(!oldParticipant && hasLeft) {\n return;\n }\n\n // * fix missing flag\n if(!participant.pFlags.muted && !participant.pFlags.can_self_unmute) {\n participant.pFlags.can_self_unmute = true;\n }\n\n if(oldParticipant) {\n safeReplaceObject(oldParticipant, participant);\n participant = oldParticipant;\n } else {\n participants.set(peerId, participant);\n }\n\n // if(!skipCounterUpdating) {\n const groupCall = this.getGroupCall(groupCallId);\n if(groupCall?._ === 'groupCall') {\n let modified = false;\n if(hasLeft) {\n --groupCall.participants_count;\n modified = true;\n } else if(participant.pFlags.just_joined && !oldParticipant && !participant.pFlags.self) {\n ++groupCall.participants_count;\n modified = true;\n }\n\n if(modified) {\n this.rootScope.dispatchEvent('group_call_update', groupCall);\n }\n }\n // }\n\n if(hasLeft) {\n participants.delete(peerId);\n }\n\n if(oldParticipant || true/* && this.doNotDispatchParticipantUpdate !== peerId */) {\n this.rootScope.dispatchEvent('group_call_participant', {\n groupCallId,\n participant\n });\n }\n }\n\n public saveApiParticipants(groupCallId: GroupCallId, apiParticipants: GroupCallParticipant[], skipCounterUpdating?: boolean) {\n if((apiParticipants as any).saved) return;\n (apiParticipants as any).saved = true;\n apiParticipants.forEach((p) => this.saveApiParticipant(groupCallId, p, skipCounterUpdating));\n }\n\n public async editParticipant(groupCallId: GroupCallId, participant: GroupCallParticipant, options: Partial<{\n muted: boolean,\n volume: number,\n raiseHand: boolean,\n videoStopped: boolean,\n videoPaused: boolean,\n presentationPaused: boolean\n }>) {\n this.saveApiParticipant(groupCallId, participant);\n\n const peerId = participant.pFlags.self ? NULL_PEER_ID : getPeerId(participant.peer);\n const updates = await this.apiManager.invokeApiSingle('phone.editGroupCallParticipant', {\n call: this.getGroupCallInput(groupCallId),\n participant: peerId === NULL_PEER_ID ? this.appPeersManager.getInputPeerSelf() : this.appPeersManager.getInputPeerById(peerId),\n muted: options.muted,\n volume: options.volume,\n raise_hand: options.raiseHand,\n video_paused: options.videoPaused,\n video_stopped: options.videoStopped,\n presentation_paused: options.presentationPaused\n });\n\n // do not replace with peerId because it can be null\n // if(!processUpdate) this.doNotDispatchParticipantUpdate = getPeerId(participant.peer);\n this.apiUpdatesManager.processUpdateMessage(updates);\n // if(!processUpdate) this.doNotDispatchParticipantUpdate = undefined;\n }\n\n public getGroupCall(id: GroupCallId) {\n return this.groupCalls.get(id);\n }\n\n public async getGroupCallFull(id: GroupCallId, override?: boolean): Promise {\n const call = this.getGroupCall(id);\n if(call && call._ !== 'inputGroupCall' && !override) {\n return call;\n }\n\n const limit = this.getCachedParticipants(id).size ? 0 : GET_PARTICIPANTS_LIMIT;\n return this.apiManager.invokeApiSingleProcess({\n method: 'phone.getGroupCall',\n params: {\n call: this.getGroupCallInput(id),\n limit\n },\n processResult: (groupCall) => {\n // ? maybe I should save group call after participants so I can avoid passing the 'skipCounterUpdating' flag ?\n this.appUsersManager.saveApiUsers(groupCall.users);\n this.appChatsManager.saveApiChats(groupCall.chats);\n this.saveApiParticipants(id, groupCall.participants, true);\n const call = this.saveGroupCall(groupCall.call) as GroupCall;\n\n if(limit && this.nextOffsets.get(id) === undefined) {\n this.nextOffsets.set(id, groupCall.participants_next_offset);\n }\n\n return call;\n }\n });\n }\n\n public saveGroupCall(call: MyGroupCall, chatId?: ChatId) {\n const oldCall = this.groupCalls.get(call.id);\n const shouldUpdate = call._ !== 'inputGroupCall' && (!oldCall || oldCall._ !== 'groupCallDiscarded');\n if(oldCall) {\n if(shouldUpdate) {\n safeReplaceObject(oldCall, call);\n }\n\n call = oldCall;\n } else {\n this.groupCalls.set(call.id, call);\n }\n\n if(shouldUpdate) {\n this.rootScope.dispatchEvent('group_call_update', call as any);\n }\n\n return call;\n }\n\n public async createGroupCall(chatId: ChatId, scheduleDate?: number, title?: string) {\n const updates = await this.apiManager.invokeApi('phone.createGroupCall', {\n peer: this.appPeersManager.getInputPeerById(chatId.toPeerId(true)),\n random_id: nextRandomUint(32),\n schedule_date: scheduleDate,\n title\n });\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateGroupCall') as Update.updateGroupCall;\n return update.call;\n }\n\n public getGroupCallInput(id: GroupCallId): InputGroupCall {\n const groupCall = this.getGroupCall(id);\n return {\n _: 'inputGroupCall',\n id: groupCall.id,\n access_hash: groupCall.access_hash\n };\n }\n\n // public generateSelfParticipant(): GroupCallParticipant {\n // const mainSources = this.currentGroupCall.connections.main.sources;\n // const presentationSources = this.currentGroupCall.connections.presentation?.sources;\n // return {\n // _: 'groupCallParticipant',\n // pFlags: {\n // can_self_unmute: true,\n // self: true\n // },\n // source: mainSources.audio.source,\n // video: this.generateSelfVideo(mainSources.video),\n // presentation: presentationSources && this.generateSelfVideo(presentationSources.video, presentationSources.audio?.source),\n // date: tsNow(true),\n // peer: this.appPeersManager.getOutputPeer(rootScope.myId)\n // };\n // }\n\n public async getGroupCallParticipants(id: GroupCallId) {\n const {nextOffset, setNextOffset} = this.prepareToSavingNextOffset(id);\n\n if(nextOffset !== '') {\n await this.apiManager.invokeApiSingleProcess({\n method: 'phone.getGroupParticipants',\n params: {\n call: this.getGroupCallInput(id),\n ids: [],\n sources: [],\n offset: nextOffset || '',\n limit: GET_PARTICIPANTS_LIMIT\n },\n processResult: (groupCallParticipants) => {\n const newNextOffset = groupCallParticipants.count === groupCallParticipants.participants.length ? '' : groupCallParticipants.next_offset;\n\n this.appChatsManager.saveApiChats(groupCallParticipants.chats);\n this.appUsersManager.saveApiUsers(groupCallParticipants.users);\n this.saveApiParticipants(id, groupCallParticipants.participants);\n\n setNextOffset(newNextOffset);\n }\n });\n }\n\n return {\n participants: this.getCachedParticipants(id),\n isEnd: this.nextOffsets.get(id) === ''\n };\n }\n\n public hangUp(id: GroupCallId, discard?: boolean | number) {\n const groupCallInput = this.getGroupCallInput(id);\n let promise: Promise;\n if(typeof(discard) === 'boolean' && discard) {\n promise = this.apiManager.invokeApi('phone.discardGroupCall', {\n call: groupCallInput\n });\n } else if(typeof(discard) === 'number') {\n promise = this.apiManager.invokeApi('phone.leaveGroupCall', {\n call: groupCallInput,\n source: discard\n });\n } else {\n promise = this.apiManager.invokeApi('phone.joinGroupCall', {\n call: groupCallInput,\n join_as: this.appPeersManager.getInputPeerSelf(),\n muted: true,\n video_stopped: true,\n params: {\n _: 'dataJSON',\n data: ''\n }\n });\n }\n\n return promise.then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public async joinGroupCall(groupCallId: GroupCallId, params: DataJSON, options: GroupCallConnectionInstance['options']) {\n const groupCallInput = this.getGroupCallInput(groupCallId);\n let promise: Promise;\n if(options.type === 'main') {\n const request: PhoneJoinGroupCall = {\n call: groupCallInput,\n join_as: this.appPeersManager.getInputPeerSelf(),\n params,\n muted: options.isMuted,\n video_stopped: !options.joinVideo\n };\n\n promise = this.apiManager.invokeApi('phone.joinGroupCall', request);\n this.log(`[api] joinGroupCall id=${groupCallId}`, request);\n } else {\n const request: PhoneJoinGroupCallPresentation = {\n call: groupCallInput,\n params\n };\n\n promise = this.apiManager.invokeApi('phone.joinGroupCallPresentation', request);\n this.log(`[api] joinGroupCallPresentation id=${groupCallId}`, request);\n }\n\n const updates = await promise;\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateGroupCallConnection') as Update.updateGroupCallConnection;\n return update;\n }\n\n public leaveGroupCallPresentation(groupCallId: GroupCallId) {\n return this.apiManager.invokeApi('phone.leaveGroupCallPresentation', {\n call: this.getGroupCallInput(groupCallId)\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputPhoto} from '../../../../layer';\nimport {MyPhoto} from '../../appPhotosManager';\n\nexport default function getPhotoInput(photo: MyPhoto): InputPhoto.inputPhoto {\n return {\n _: 'inputPhoto',\n id: photo.id,\n access_hash: photo.access_hash,\n file_reference: photo.file_reference\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputMedia} from '../../../../layer';\nimport {MyPhoto} from '../../appPhotosManager';\nimport getPhotoInput from './getPhotoInput';\n\nexport default function getPhotoMediaInput(photo: MyPhoto): InputMedia.inputMediaPhoto {\n return {\n _: 'inputMediaPhoto',\n id: getPhotoInput(photo),\n ttl_seconds: 0,\n pFlags: {}\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Document, InputMedia} from '../../../../layer';\n\nexport default function getMediaInput(doc: Document.document): InputMedia.inputMediaDocument {\n return {\n _: 'inputMediaDocument',\n id: {\n _: 'inputDocument',\n id: doc.id,\n access_hash: doc.access_hash,\n file_reference: doc.file_reference\n },\n ttl_seconds: 0,\n pFlags: {}\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport type {MyPhoto} from './appPhotosManager';\nimport type {MyTopPeer} from './appUsersManager';\nimport type {AppMessagesManager, MessageSendingParams} from './appMessagesManager';\nimport {BotInlineResult, GeoPoint, InputGeoPoint, InputMedia, MessageEntity, MessageMedia, MessagesBotResults, ReplyMarkup} from '../../layer';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport {AppManager} from './manager';\nimport getPhotoMediaInput from './utils/photos/getPhotoMediaInput';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport generateQId from './utils/inlineBots/generateQId';\nimport getDocumentMediaInput from './utils/docs/getDocumentMediaInput';\n\nexport class AppInlineBotsManager extends AppManager {\n private inlineResults: {[queryAndResultIds: string]: BotInlineResult} = {};\n private setHash: {\n [botId: UserId]: {\n peerId: PeerId,\n time: number\n }\n } = {};\n\n public getGeoInput(geo: GeoPoint): InputGeoPoint {\n return geo._ === 'geoPoint' ? {\n _: 'inputGeoPoint',\n lat: geo.lat,\n long: geo.long,\n accuracy_radius: geo.accuracy_radius\n } : {\n _: 'inputGeoPointEmpty'\n };\n }\n\n public getInlineResults(peerId: PeerId, botId: BotId, query = '', offset = '', geo?: GeoPoint) {\n return this.apiManager.invokeApi('messages.getInlineBotResults', {\n bot: this.appUsersManager.getUserInput(botId),\n peer: this.appPeersManager.getInputPeerById(peerId),\n query,\n geo_point: geo ? this.getGeoInput(geo) : undefined,\n offset\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true}).then((botResults) => {\n const queryId = botResults.query_id;\n\n /* if(botResults.switch_pm) {\n botResults.switch_pm.rText = wrapRichText(botResults.switch_pm.text, {noLinebreaks: true, noLinks: true});\n } */\n\n botResults.results.forEach((result) => {\n if(result._ === 'botInlineMediaResult') {\n if(result.document) {\n result.document = this.appDocsManager.saveDoc(result.document);\n }\n\n if(result.photo) {\n result.photo = this.appPhotosManager.savePhoto(result.photo);\n }\n }\n\n this.inlineResults[generateQId(queryId, result.id)] = result;\n });\n\n return botResults;\n });\n }\n\n private pushPopularBot(botId: BotId) {\n this.appUsersManager.getTopPeers('bots_inline').then((topPeers) => {\n const botPeerId = botId.toPeerId();\n const index = topPeers.findIndex((topPeer) => topPeer.id === botPeerId);\n let topPeer: MyTopPeer;\n if(index !== -1) {\n topPeer = topPeers[index];\n } else {\n topPeer = {\n id: botPeerId,\n rating: 0\n };\n }\n\n ++topPeer.rating;\n insertInDescendSortedArray(topPeers, topPeer, 'rating');\n\n this.appStateManager.setKeyValueToStorage('topPeersCache');\n\n // rootScope.$broadcast('inline_bots_popular')\n });\n }\n\n public switchToPM(fromPeerId: PeerId, botId: BotId, startParam: string) {\n this.setHash[botId] = {peerId: fromPeerId, time: Date.now()};\n return this.appMessagesManager.startBot(botId, undefined, startParam);\n }\n\n /*\n function resolveInlineMention (username) {\n return AppPeersManager.resolveUsername(username).then(function (peerId) {\n if (peerId.isUser()) {\n var bot = AppUsersManager.getUser(peerId)\n if (bot.pFlags.bot && bot.bot_inline_placeholder !== undefined) {\n var resolvedBot = {\n username: username,\n id: peerId,\n placeholder: bot.bot_inline_placeholder\n }\n if (bot.pFlags.bot_inline_geo &&\n GeoLocationManager.isAvailable()) {\n return checkGeoLocationAccess(peerId).then(function () {\n return GeoLocationManager.getPosition().then(function (coords) {\n resolvedBot.geo = coords\n return qSync.when(resolvedBot)\n })\n })['catch'](function () {\n return qSync.when(resolvedBot)\n })\n }\n return qSync.when(resolvedBot)\n }\n }\n return $q.reject()\n }, function (error) {\n error.handled = true\n return $q.reject(error)\n })\n }\n\n function regroupWrappedResults (results, rowW, rowH) {\n if (!results ||\n !results[0] ||\n ['photo', 'gif', 'sticker'].indexOf(results[0].type) === -1) {\n return\n }\n var ratios = []\n angular.forEach(results, function (result) {\n var w\n var h, doc\n var photo\n if (result._ === 'botInlineMediaResult') {\n if (doc = result.document) {\n w = result.document.w\n h = result.document.h\n }\n else if (photo = result.photo) {\n var photoSize = (photo.sizes || [])[0]\n w = photoSize && photoSize.w\n h = photoSize && photoSize.h\n }\n }else {\n w = result.w\n h = result.h\n }\n if (!w || !h) {\n w = h = 1\n }\n ratios.push(w / h)\n })\n\n var rows = []\n var curCnt = 0\n var curW = 0\n angular.forEach(ratios, function (ratio) {\n var w = ratio * rowH\n curW += w\n if (!curCnt || curCnt < 4 && curW < (rowW * 1.1)) {\n curCnt++\n } else {\n rows.push(curCnt)\n curCnt = 1\n curW = w\n }\n })\n if (curCnt) {\n rows.push(curCnt)\n }\n\n var i = 0\n var thumbs = []\n var lastRowI = rows.length - 1\n angular.forEach(rows, function (rowCnt, rowI) {\n var lastRow = rowI === lastRowI\n var curRatios = ratios.slice(i, i + rowCnt)\n var sumRatios = 0\n angular.forEach(curRatios, function (ratio) {\n sumRatios += ratio\n })\n angular.forEach(curRatios, function (ratio, j) {\n var thumbH = rowH\n var thumbW = rowW * ratio / sumRatios\n var realW = thumbH * ratio\n if (lastRow && thumbW > realW) {\n thumbW = realW\n }\n var result = results[i + j]\n result.thumbW = Math.floor(thumbW) - 2\n result.thumbH = Math.floor(thumbH) - 2\n })\n\n i += rowCnt\n })\n } */\n\n public async checkSwitchReturn(botId: BotId) {\n const bot = this.appUsersManager.getUser(botId);\n if(!bot || !bot.pFlags.bot || !bot.bot_inline_placeholder) {\n return;\n }\n\n const peerData = this.setHash[botId];\n if(peerData) {\n delete this.setHash[botId];\n if((Date.now() - peerData.time) < 3600e3) {\n return peerData.peerId;\n }\n }\n }\n\n public switchInlineQuery(peerId: PeerId, threadId: number, botId: BotId, query: string) {\n this.appDraftsManager.setDraft(peerId, threadId, '@' + this.appPeersManager.getPeerUsername(botId.toPeerId()) + ' ' + query);\n }\n\n public callbackButtonClick(peerId: PeerId, mid: number, button: any) {\n return this.apiManager.invokeApi('messages.getBotCallbackAnswer', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid),\n data: button.data\n }, {/* timeout: 1, */stopTime: -1, noErrorBox: true});\n }\n\n /* function gameButtonClick (id) {\n var message = AppMessagesManager.getMessage(id)\n var peerId = AppMessagesManager.getMessagePeer(message)\n\n return MtpApiManager.invokeApi('messages.getBotCallbackAnswer', {\n peer: AppPeersManager.getInputPeerByID(peerId),\n msg_id: AppMessagesIDsManager.getMessageLocalID(id)\n }, {timeout: 1, stopTime: -1, noErrorBox: true}).then(function (callbackAnswer) {\n if (typeof callbackAnswer.message === 'string' &&\n callbackAnswer.message.length) {\n showCallbackMessage(callbackAnswer.message, callbackAnswer.pFlags.alert)\n }\n else if (typeof callbackAnswer.url === 'string') {\n AppGamesManager.openGame(message.media.game.id, id, callbackAnswer.url)\n }\n })\n } */\n\n public sendInlineResult(peerId: PeerId, botId: BotId, queryAndResultIds: string, options: MessageSendingParams & Partial<{\n viaBotId: BotId,\n queryId: string,\n resultId: string,\n replyMarkup: ReplyMarkup,\n entities: MessageEntity[],\n clearDraft: true,\n geoPoint: GeoPoint\n }> = {}) {\n const inlineResult = this.inlineResults[queryAndResultIds];\n if(!inlineResult) {\n return;\n }\n\n this.pushPopularBot(botId);\n const splitted = queryAndResultIds.split('_');\n const queryID = splitted.shift();\n const resultID = splitted.join('_');\n options.viaBotId = botId;\n options.queryId = queryID;\n options.resultId = resultID;\n if(inlineResult.send_message.reply_markup) {\n options.replyMarkup = inlineResult.send_message.reply_markup;\n }\n\n if(inlineResult.send_message._ === 'botInlineMessageText') {\n options.entities = inlineResult.send_message.entities;\n this.appMessagesManager.sendText(peerId, inlineResult.send_message.message, options);\n } else {\n let caption = '';\n let inputMedia: Parameters[1], messageMedia: MessageMedia;\n const sendMessage = inlineResult.send_message;\n switch(sendMessage._) {\n case 'botInlineMessageMediaAuto': {\n caption = sendMessage.message;\n\n if(inlineResult._ === 'botInlineMediaResult') {\n const {document, photo} = inlineResult;\n if(document) {\n inputMedia = getDocumentMediaInput(document as MyDocument);\n } else {\n inputMedia = getPhotoMediaInput(photo as MyPhoto);\n }\n }\n\n break;\n }\n\n case 'botInlineMessageMediaGeo': {\n inputMedia = {\n _: 'inputMediaGeoPoint',\n geo_point: this.getGeoInput(sendMessage.geo)\n };\n\n options.geoPoint = sendMessage.geo;\n\n break;\n }\n\n case 'botInlineMessageMediaVenue': {\n inputMedia = {\n _: 'inputMediaVenue',\n geo_point: this.getGeoInput(sendMessage.geo),\n title: sendMessage.title,\n address: sendMessage.address,\n provider: sendMessage.provider,\n venue_id: sendMessage.venue_id,\n venue_type: sendMessage.venue_type\n };\n\n options.geoPoint = sendMessage.geo;\n\n break;\n }\n\n case 'botInlineMessageMediaContact': {\n inputMedia = {\n _: 'inputMediaContact',\n phone_number: sendMessage.phone_number,\n first_name: sendMessage.first_name,\n last_name: sendMessage.last_name,\n vcard: sendMessage.vcard\n };\n\n break;\n }\n\n case 'botInlineMessageMediaInvoice': {\n // const photo = sendMessage.photo;\n // inputMedia = {\n // _: 'inputMediaInvoice',\n // description: sendMessage.description,\n // title: sendMessage.title,\n // photo: photo && {\n // _: 'inputWebDocument',\n // attributes: photo.attributes,\n // mime_type: photo.mime_type,\n // size: photo.size,\n // url: photo.url\n // },\n // invoice: undefined,\n // payload: undefined,\n // provider: undefined,\n // provider_data: undefined,\n // start_param: undefined\n // };\n\n messageMedia = {\n _: 'messageMediaInvoice',\n title: sendMessage.title,\n description: sendMessage.description,\n photo: sendMessage.photo,\n currency: sendMessage.currency,\n total_amount: sendMessage.total_amount,\n pFlags: {\n shipping_address_requested: sendMessage.pFlags.shipping_address_requested,\n test: sendMessage.pFlags.test\n },\n start_param: undefined\n };\n\n break;\n }\n }\n\n if(!inputMedia && messageMedia) {\n inputMedia = {\n _: 'messageMediaPending',\n messageMedia\n };\n }\n\n this.appMessagesManager.sendOther(peerId, inputMedia, options);\n }\n }\n\n /* function checkGeoLocationAccess (botID) {\n var key = 'bot_access_geo' + botID\n return Storage.get(key).then(function (geoAccess) {\n if (geoAccess && geoAccess.granted) {\n return true\n }\n return ErrorService.confirm({\n type: 'BOT_ACCESS_GEO_INLINE'\n }).then(function () {\n var setHash = {}\n setHash[key] = {granted: true, time: tsNow()}\n Storage.set(setHash)\n return true\n }, function () {\n var setHash = {}\n setHash[key] = {denied: true, time: tsNow()}\n Storage.set(setHash)\n return $q.reject()\n })\n })\n } */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MESSAGE_ID_INCREMENT} from './utils/messageId';\nimport generateMessageId from './utils/messageId/generateMessageId';\n\nexport class AppMessagesIdsManager {\n private tempNum = 0;\n\n public generateTempMessageId(messageId: number) {\n const num = ++this.tempNum;\n return generateMessageId(messageId) + (num & (MESSAGE_ID_INCREMENT - 1));\n }\n}\n","export default function splitStringByLength(str: string, maxLength: number) {\n if(str.length < maxLength) return [str];\n let length = 0, lastSliceStartIndex = 0, arrayIndex = 0;\n const delimiter = ' ';// '\\n';\n const out: string[] = [];\n\n const cut = (end?: number) => {\n let part = str.slice(lastSliceStartIndex, end);\n const _arrayIndex = arrayIndex++;\n if(part.length > maxLength) {\n const overflowPart = part.slice(maxLength);\n const splitted = splitStringByLength(overflowPart, maxLength);\n splitted.forEach((part) => {\n out[arrayIndex++] = part;\n });\n\n part = part.slice(0, maxLength);\n }\n\n lastSliceStartIndex = end;\n length = 0;\n out[_arrayIndex] = (out[_arrayIndex] || '') + part;\n };\n\n let lastIndex = 0;\n do {\n let index = str.indexOf(delimiter, lastIndex);\n if(index === -1) {\n if(lastIndex !== (str.length - 1)) {\n cut();\n }\n\n break;\n }\n\n index += delimiter.length;\n\n const partLength = index - lastIndex;\n if((length + partLength) > maxLength) {\n cut(length);\n }\n\n lastIndex = index;\n length += partLength;\n } while(true);\n\n return out;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {TabState} from '../mtproto/mtprotoworker';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\n\ntype Tab = {\n source: MessageEventSource,\n state: TabState\n};\n\nexport class AppTabsManager {\n private tabs: Map;\n\n constructor() {\n this.tabs = new Map();\n }\n\n public start() {\n const port = MTProtoMessagePort.getInstance();\n\n port.addEventListener('tabState', (state, source) => {\n const tab = this.tabs.get(source);\n tab.state = state;\n });\n }\n\n public getTabs() {\n return [...this.tabs.values()].filter((tab) => !!tab.state);\n }\n\n public addTab(source: MessageEventSource) {\n const tab: Tab = {\n source,\n state: undefined\n };\n\n this.tabs.set(source, tab);\n }\n\n public deleteTab(source: MessageEventSource) {\n this.tabs.delete(source);\n }\n}\n\nconst appTabsManager = new AppTabsManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appTabsManager = appTabsManager);\nexport default appTabsManager;\n","import {InputDocument} from '../../../../layer';\nimport type {MyDocument} from '../../appDocsManager';\n\nexport default function getDocumentInput(doc: MyDocument): InputDocument {\n return {\n _: 'inputDocument',\n id: doc.id,\n access_hash: doc.access_hash,\n file_reference: doc.file_reference\n };\n}\n","export default function setBooleanFlag(obj: T, key: keyof T, value: boolean) {\n // @ts-ignore\n if(value) obj[key] = true;\n else delete obj[key];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ApiFileManager} from '../mtproto/apiFileManager';\nimport type {MediaSize} from '../../helpers/mediaSize';\nimport type {Progress} from './appDownloadManager';\nimport type {VIDEO_MIME_TYPE} from '../../environment/videoMimeTypesSupport';\nimport LazyLoadQueueBase from '../../components/lazyLoadQueueBase';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport tsNow from '../../helpers/tsNow';\nimport {randomLong} from '../../helpers/random';\nimport {Chat, ChatFull, Dialog as MTDialog, DialogPeer, DocumentAttribute, InputMedia, InputMessage, InputPeerNotifySettings, InputSingleMedia, Message, MessageAction, MessageEntity, MessageFwdHeader, MessageMedia, MessageReplies, MessageReplyHeader, MessagesDialogs, MessagesFilter, MessagesMessages, MethodDeclMap, NotifyPeer, PeerNotifySettings, PhotoSize, SendMessageAction, Update, Photo, Updates, ReplyMarkup, InputPeer, InputPhoto, InputDocument, InputGeoPoint, WebPage, GeoPoint, ReportReason, MessagesGetDialogs, InputChannel, InputDialogPeer, ReactionCount, MessagePeerReaction, MessagesSearchCounter, Peer, MessageReactions, Document, InputFile, Reaction, ForumTopic as MTForumTopic, MessagesForumTopics, MessagesGetReplies, MessagesGetHistory, MessagesAffectedHistory, UrlAuthResult, MessagesTranscribedAudio} from '../../layer';\nimport {ArgumentTypes, InvokeApiOptions} from '../../types';\nimport {logger, LogTypes} from '../logger';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport DialogsStorage, {GLOBAL_FOLDER_ID} from '../storages/dialogs';\nimport {ChatRights} from './appChatsManager';\nimport {MyDocument} from './appDocsManager';\nimport {MyPhoto} from './appPhotosManager';\nimport {getFileNameByLocation} from '../../helpers/fileName';\nimport DEBUG from '../../config/debug';\nimport SlicedArray, {Slice, SliceEnd} from '../../helpers/slicedArray';\nimport {FOLDER_ID_ALL, GENERAL_TOPIC_ID, MUTE_UNTIL, NULL_PEER_ID, REAL_FOLDER_ID, REPLIES_HIDDEN_CHANNEL_ID, REPLIES_PEER_ID, SERVICE_PEER_ID, THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\n// import telegramMeWebManager from '../mtproto/telegramMeWebManager';\nimport {getMiddleware} from '../../helpers/middleware';\nimport assumeType from '../../helpers/assumeType';\nimport copy from '../../helpers/object/copy';\nimport getObjectKeysAndSort from '../../helpers/object/getObjectKeysAndSort';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport splitStringByLength from '../../helpers/string/splitStringByLength';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {AppManager} from './manager';\nimport getPhotoMediaInput from './utils/photos/getPhotoMediaInput';\nimport getPhotoDownloadOptions from './utils/photos/getPhotoDownloadOptions';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport mergeEntities from '../richTextProcessor/mergeEntities';\nimport parseEntities from '../richTextProcessor/parseEntities';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport filterMessagesByInputFilter from './utils/messages/filterMessagesByInputFilter';\nimport ctx from '../../environment/ctx';\nimport {getEnvironment} from '../../environment/utils';\nimport getDialogIndex from './utils/dialogs/getDialogIndex';\nimport defineNotNumerableProperties from '../../helpers/object/defineNotNumerableProperties';\nimport getDocumentMediaInput from './utils/docs/getDocumentMediaInput';\nimport getDocumentInputFileName from './utils/docs/getDocumentInputFileName';\nimport getFileNameForUpload from '../../helpers/getFileNameForUpload';\nimport noop from '../../helpers/noop';\nimport appTabsManager from './appTabsManager';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport getAlbumText from './utils/messages/getAlbumText';\nimport pause from '../../helpers/schedulers/pause';\nimport makeError from '../../helpers/makeError';\nimport getStickerEffectThumb from './utils/stickers/getStickerEffectThumb';\nimport getDocumentInput from './utils/docs/getDocumentInput';\nimport reactionsEqual from './utils/reactions/reactionsEqual';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport {BroadcastEvents} from '../rootScope';\nimport setBooleanFlag from '../../helpers/object/setBooleanFlag';\nimport getMessageThreadId from './utils/messages/getMessageThreadId';\n\n// console.trace('include');\n// TODO: ะตัะปะธ ัƒะดะฐะปะธั‚ัŒ ะดะธะฐะปะพะณ ะฝะฐั…ะพะดัััŒ ะฒ ะฟะฐะฟะบะต, ั‚ะพ ะพะฝ ะฝะต ัƒะดะฐะปะธั‚ัั ะธะท ะฟะฐะฟะบะธ ะธ ะฑัƒะดะตั‚ ะฒะธะดะตะฝ ะฒ ะฝะฐัั‚ั€ะพะนะบะฐั…\n\nconst APITIMEOUT = 0;\nconst DO_NOT_READ_HISTORY = false;\n\nexport type SendFileDetails = {\n file: File | Blob | MyDocument,\n} & Partial<{\n duration: number,\n width: number,\n height: number,\n objectURL: string,\n thumb: {\n blob: Blob,\n url: string,\n size: MediaSize\n },\n strippedBytes: PhotoSize.photoStrippedSize['bytes'],\n spoiler: boolean\n}>;\n\nexport type HistoryStorage = {\n count: number | null,\n history: SlicedArray,\n\n maxId?: number,\n readPromise?: Promise,\n readMaxId?: number,\n readOutboxMaxId?: number,\n triedToReadMaxId?: number,\n\n maxOutId?: number,\n replyMarkup?: Exclude\n};\n\nexport type HistoryResult = {\n count: number,\n history: number[],\n isEnd: ReturnType['getEnds']>,\n offsetIdOffset?: number,\n};\n\nexport type Dialog = MTDialog.dialog;\nexport type ForumTopic = MTForumTopic.forumTopic;\n\nexport type MyMessage = Message.message | Message.messageService;\nexport type MyInputMessagesFilter = 'inputMessagesFilterEmpty'\n | 'inputMessagesFilterPhotos'\n | 'inputMessagesFilterPhotoVideo'\n | 'inputMessagesFilterVideo'\n | 'inputMessagesFilterDocument'\n | 'inputMessagesFilterVoice'\n | 'inputMessagesFilterRoundVoice'\n | 'inputMessagesFilterRoundVideo'\n | 'inputMessagesFilterMusic'\n | 'inputMessagesFilterUrl'\n | 'inputMessagesFilterMyMentions'\n | 'inputMessagesFilterChatPhotos'\n | 'inputMessagesFilterPinned';\n\nexport type PinnedStorage = Partial<{\n promise: Promise,\n count: number,\n maxId: number\n}>;\nexport type MessagesStorage = Map & {peerId: PeerId, type: MessagesStorageType, key: MessagesStorageKey};\nexport type MessagesStorageType = 'scheduled' | 'history' | 'grouped';\nexport type MessagesStorageKey = `${PeerId}_${MessagesStorageType}`;\n\nexport type MyMessageActionType = Message.messageService['action']['_'];\n\ntype PendingAfterMsg = Partial;\n\ntype MapValueType = A extends Map ? V : never;\n\nexport type BatchUpdates = {\n 'messages_reactions': AppMessagesManager['batchUpdateReactions'],\n 'messages_views': AppMessagesManager['batchUpdateViews']\n};\n\ntype PendingMessageDetails = {\n peerId: PeerId,\n tempId: number,\n threadId: number,\n storage: MessagesStorage,\n sequential?: boolean\n};\n\nconst processAfter = (cb: () => void) => {\n // setTimeout(cb, 0);\n cb();\n};\n\nconst UPDATE_STICKERSET_ORDER = true;\n\nexport type MessageSendingParams = Partial<{\n threadId: number,\n replyToMsgId: number,\n scheduleDate: number,\n silent: boolean,\n sendAsPeerId: number,\n}>;\n\nexport class AppMessagesManager extends AppManager {\n private messagesStorageByPeerId: {[peerId: string]: MessagesStorage};\n private groupedMessagesStorage: {[groupId: string]: MessagesStorage}; // will be used for albums\n private scheduledMessagesStorage: {[peerId: PeerId]: MessagesStorage};\n private historiesStorage: {\n [peerId: PeerId]: HistoryStorage\n };\n private threadsStorage: {\n [peerId: PeerId]: {\n [threadId: string]: HistoryStorage\n }\n };\n private searchesStorage: {\n [peerId: PeerId]: Partial<{\n [inputFilter in MyInputMessagesFilter]: {\n count?: number,\n history: number[]\n }\n }>\n };\n private pinnedMessages: {[key: string]: PinnedStorage};\n\n private threadsServiceMessagesIdsStorage: {[peerId_threadId: string]: number};\n private threadsToReplies: {\n [peerId_threadId: string]: string;\n };\n\n private pendingByRandomId: {\n [randomId: string]: PendingMessageDetails\n } = {};\n private pendingByMessageId: {[mid: string]: Long} = {};\n private pendingAfterMsgs: {[peerId: PeerId]: PendingAfterMsg} = {};\n public pendingTopMsgs: {[peerId: PeerId]: number} = {};\n private tempFinalizeCallbacks: {\n [tempId: string]: {\n [callbackName: string]: Partial<{\n deferred: CancellablePromise,\n callback: (message: MyMessage) => Promise\n }>\n }\n } = {};\n\n private sendSmthLazyLoadQueue = new LazyLoadQueueBase(10);\n\n private needSingleMessages: Map>> = new Map();\n private fetchSingleMessagesPromise: Promise;\n private extendedMedia: Map>> = new Map();\n\n private maxSeenId = 0;\n\n public migratedFromTo: {[peerId: PeerId]: PeerId} = {};\n public migratedToFrom: {[peerId: PeerId]: PeerId} = {};\n\n private newDialogsHandlePromise: Promise;\n private newDialogsToHandle: Map}> = new Map();\n public newUpdatesAfterReloadToHandle: {[key: string]: Set} = {};\n\n private notificationsHandlePromise: number;\n private notificationsToHandle: {[key: string]: {\n fwdCount: number,\n fromId: PeerId,\n topMessage?: MyMessage\n }} = {};\n\n private reloadConversationsPromise: Promise;\n private reloadConversationsPeers: Map}> = new Map();\n\n public log = logger('MESSAGES', LogTypes.Error | LogTypes.Debug | LogTypes.Log | LogTypes.Warn);\n\n private groupedTempId = 0;\n\n private typings: {[key: string]: {action: SendMessageAction, timeout?: number}} = {};\n\n private middleware: ReturnType;\n\n private unreadMentions: {[key: string]: SlicedArray} = {};\n private goToNextMentionPromises: {[key: string]: Promise} = {};\n\n private batchUpdates: {\n [k in keyof BatchUpdates]?: {\n callback: BatchUpdates[k],\n batch: ArgumentTypes[0]\n }\n } = {};\n private batchUpdatesDebounced: () => Promise;\n\n private uploadFilePromises: {[fileName: string]: CancellablePromise};\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateMessageID: this.onUpdateMessageId,\n\n updateNewDiscussionMessage: this.onUpdateNewMessage,\n updateNewMessage: this.onUpdateNewMessage,\n updateNewChannelMessage: this.onUpdateNewMessage,\n\n updateDialogUnreadMark: this.onUpdateDialogUnreadMark,\n\n updateEditMessage: this.onUpdateEditMessage,\n updateEditChannelMessage: this.onUpdateEditMessage,\n\n updateMessageReactions: this.onUpdateMessageReactions,\n\n updateReadChannelDiscussionInbox: this.onUpdateReadHistory,\n updateReadChannelDiscussionOutbox: this.onUpdateReadHistory,\n updateReadHistoryInbox: this.onUpdateReadHistory,\n updateReadHistoryOutbox: this.onUpdateReadHistory,\n updateReadChannelInbox: this.onUpdateReadHistory,\n updateReadChannelOutbox: this.onUpdateReadHistory,\n\n updateChannelReadMessagesContents: this.onUpdateReadMessagesContents,\n updateReadMessagesContents: this.onUpdateReadMessagesContents,\n\n updateChannelAvailableMessages: this.onUpdateChannelAvailableMessages,\n\n updateDeleteMessages: this.onUpdateDeleteMessages,\n updateDeleteChannelMessages: this.onUpdateDeleteMessages,\n\n updateChannel: this.onUpdateChannel,\n\n updateChannelReload: this.onUpdateChannelReload,\n\n updateChannelMessageViews: this.onUpdateChannelMessageViews,\n\n updateServiceNotification: this.onUpdateServiceNotification,\n\n updatePinnedMessages: this.onUpdatePinnedMessages,\n updatePinnedChannelMessages: this.onUpdatePinnedMessages,\n\n updateNotifySettings: this.onUpdateNotifySettings,\n\n updateNewScheduledMessage: this.onUpdateNewScheduledMessage,\n\n updateDeleteScheduledMessages: this.onUpdateDeleteScheduledMessages,\n\n updateMessageExtendedMedia: this.onUpdateMessageExtendedMedia,\n\n updateTranscribedAudio: this.onUpdateTranscribedAudio\n });\n\n // ! Invalidate notify settings, can optimize though\n this.rootScope.addEventListener('notify_peer_type_settings', ({key, settings}) => {\n const dialogs = this.dialogsStorage.getFolderDialogs(0).concat(this.dialogsStorage.getFolderDialogs(1));\n let filterFunc: (dialog: typeof dialogs[0]) => boolean;\n if(key === 'notifyUsers') filterFunc = (dialog) => dialog.peerId.isUser();\n else if(key === 'notifyBroadcasts') filterFunc = (dialog) => this.appPeersManager.isBroadcast(dialog.peerId);\n else filterFunc = (dialog) => this.appPeersManager.isAnyGroup(dialog.peerId);\n\n dialogs\n .filter(filterFunc)\n .forEach((dialog) => {\n this.rootScope.dispatchEvent('dialog_notify_settings', dialog);\n });\n });\n\n this.rootScope.addEventListener('webpage_updated', ({id, msgs}) => {\n msgs.forEach(({peerId, mid, isScheduled}) => {\n const storage = isScheduled ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n const message = this.getMessageFromStorage(storage, mid) as Message.message;\n if(!message) return;\n message.media = {\n _: 'messageMediaWebPage',\n webpage: this.appWebPagesManager.getCachedWebPage(id)\n };\n\n this.rootScope.dispatchEvent('message_edit', {\n storageKey: storage.key,\n peerId,\n mid,\n message\n });\n });\n });\n\n this.rootScope.addEventListener('draft_updated', ({peerId, threadId, draft}) => {\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, threadId);\n if(dialog) {\n dialog.draft = draft;\n\n let drop = false;\n if(!draft && !getServerMessageId(dialog.top_message)) {\n this.dialogsStorage.dropDialog(peerId);\n drop = true;\n } else {\n this.dialogsStorage.generateIndexForDialog(dialog);\n this.dialogsStorage.pushDialog({dialog});\n }\n\n this.rootScope.dispatchEvent('dialog_draft', {\n peerId,\n dialog,\n drop,\n draft\n });\n } else if(threadId) {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n if(!chat) {\n this.reloadConversation(peerId);\n } else if((chat as Chat.channel).pFlags.forum) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n }\n } else {\n this.reloadConversation(peerId);\n }\n });\n\n this.rootScope.addEventListener('poll_update', ({poll}) => {\n const set = this.appPollsManager.pollToMessages[poll.id];\n if(set) {\n for(const key of set) {\n const [peerId, mid] = key.split('_');\n\n const message = this.getMessageByPeer(peerId.toPeerId(), +mid);\n if(message) {\n this.setDialogToStateIfMessageIsTop(message);\n }\n }\n }\n });\n\n // * clear forum cache\n this.rootScope.addEventListener('chat_toggle_forum', ({chatId, enabled}) => {\n const peerId = chatId.toPeerId(true);\n if(!enabled) {\n delete this.threadsStorage[peerId];\n\n for(const key in this.pinnedMessages) {\n if(+key === peerId && key.startsWith(peerId + '_')) {\n delete this.pinnedMessages[key];\n }\n }\n }\n });\n\n this.batchUpdatesDebounced = debounce(() => {\n for(const event in this.batchUpdates) {\n const details = this.batchUpdates[event as keyof BatchUpdates];\n delete this.batchUpdates[event as keyof BatchUpdates];\n\n // @ts-ignore\n const result = details.callback(details.batch);\n if(result && (!(result instanceof Array) || result.length)) {\n // @ts-ignore\n rootScope.dispatchEvent(event as keyof BatchUpdates, result);\n }\n }\n }, 33, false, true);\n\n return this.appStateManager.getState().then((state) => {\n if(state.maxSeenMsgId) {\n this.maxSeenId = state.maxSeenMsgId;\n }\n });\n }\n\n public clear = (init?: boolean) => {\n if(this.middleware) {\n this.middleware.clean();\n } else {\n this.middleware = getMiddleware();\n this.uploadFilePromises = {};\n }\n\n this.messagesStorageByPeerId = {};\n this.groupedMessagesStorage = {};\n this.scheduledMessagesStorage = {};\n this.historiesStorage = {};\n this.threadsStorage = {};\n this.searchesStorage = {};\n this.pinnedMessages = {};\n this.threadsServiceMessagesIdsStorage = {};\n this.threadsToReplies = {};\n\n this.dialogsStorage && this.dialogsStorage.clear(init);\n this.filtersStorage && this.filtersStorage.clear(init);\n };\n\n public getInputEntities(entities: MessageEntity[]) {\n const sendEntites = copy(entities);\n sendEntites.forEach((entity) => {\n if(entity._ === 'messageEntityMentionName') {\n (entity as any as MessageEntity.inputMessageEntityMentionName)._ = 'inputMessageEntityMentionName';\n (entity as any as MessageEntity.inputMessageEntityMentionName).user_id = this.appUsersManager.getUserInput(entity.user_id);\n }\n });\n return sendEntites;\n }\n\n public invokeAfterMessageIsSent(tempId: number, callbackName: string, callback: (message: MyMessage) => Promise) {\n const finalize = this.tempFinalizeCallbacks[tempId] ??= {};\n const obj = finalize[callbackName] ??= {deferred: deferredPromise()};\n\n obj.callback = callback;\n\n return obj.deferred;\n }\n\n public editMessage(message: any, text: string, options: Partial<{\n noWebPage: true,\n newMedia: any,\n scheduleDate: number,\n entities: MessageEntity[]\n }> = {}): Promise {\n /* if(!this.canEditMessage(messageId)) {\n return Promise.reject({type: 'MESSAGE_EDIT_FORBIDDEN'});\n } */\n\n const {mid, peerId} = message;\n\n if(message.pFlags.is_outgoing) {\n return this.invokeAfterMessageIsSent(mid, 'edit', (message) => {\n // this.log('invoke editMessage callback', message);\n return this.editMessage(message, text, options);\n });\n }\n\n const entities = options.entities || [];\n if(text) {\n text = parseMarkdown(text, entities);\n }\n\n const schedule_date = options.scheduleDate || (message.pFlags.is_scheduled ? message.date : undefined);\n return this.apiManager.invokeApi('messages.editMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: message.id,\n message: text,\n media: options.newMedia,\n entities: entities.length ? this.getInputEntities(entities) : undefined,\n no_webpage: options.noWebPage,\n schedule_date\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error) => {\n this.log.error('editMessage error:', error);\n\n if(error && error.type === 'MESSAGE_NOT_MODIFIED') {\n error.handled = true;\n return;\n }\n if(error && error.type === 'MESSAGE_EMPTY') {\n error.handled = true;\n }\n return Promise.reject(error);\n });\n }\n\n public async transcribeAudio(message: Message.message): Promise {\n const {id, peerId} = message;\n\n const process = (result: MessagesTranscribedAudio) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateTranscribedAudio',\n msg_id: message.id,\n peer: this.appPeersManager.getOutputPeer(peerId),\n pFlags: result.pFlags,\n text: result.text,\n transcription_id: result.transcription_id\n });\n };\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.transcribeAudio',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: id\n },\n processResult: (result) => {\n process(result);\n return result;\n },\n processError: (error) => {\n if(error.type === 'TRANSCRIPTION_FAILED') {\n process({\n _: 'messages.transcribedAudio',\n transcription_id: 0,\n text: '',\n pFlags: {}\n });\n }\n\n throw error;\n }\n });\n }\n\n public async sendText(peerId: PeerId, text: string, options: MessageSendingParams & Partial<{\n entities: MessageEntity[],\n viaBotId: BotId,\n queryId: string,\n resultId: string,\n noWebPage: true,\n replyMarkup: ReplyMarkup,\n clearDraft: true,\n webPage: WebPage,\n }> = {}): Promise {\n if(!text.trim()) {\n return;\n }\n\n options.entities ??= [];\n\n // this.checkSendOptions(options);\n if(options.threadId && !options.replyToMsgId) {\n options.replyToMsgId = options.threadId;\n }\n\n const config = await this.apiManager.getConfig();\n const MAX_LENGTH = config.message_length_max;\n const splitted = splitStringByLength(text, MAX_LENGTH);\n text = splitted[0];\n if(splitted.length > 1) {\n if(options.webPage?._ === 'webPage' && !text.includes(options.webPage.url)) {\n delete options.webPage;\n }\n }\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n const entities = options.entities;\n if(!options.viaBotId) {\n text = parseMarkdown(text, entities);\n // entities = mergeEntities(entities, parseEntities(text));\n }\n\n let sendEntites = this.getInputEntities(entities);\n if(!sendEntites.length) {\n sendEntites = undefined;\n }\n\n const message = this.generateOutgoingMessage(peerId, options);\n message.entities = entities;\n message.message = text;\n\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n const isChannel = this.appPeersManager.isChannel(peerId);\n\n if(options.webPage) {\n message.media = {\n _: 'messageMediaWebPage',\n webpage: options.webPage\n };\n }\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n message.send = () => {\n toggleError();\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const sendAs = options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n let apiPromise: any;\n if(options.viaBotId) {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendInlineBotResult', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n query_id: options.queryId,\n id: options.resultId,\n clear_draft: options.clearDraft,\n send_as: sendAs\n }, sentRequestOptions);\n } else {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendMessage', {\n no_webpage: options.noWebPage,\n peer: this.appPeersManager.getInputPeerById(peerId),\n message: text,\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n entities: sendEntites,\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate || undefined,\n silent: options.silent,\n send_as: sendAs,\n update_stickersets_order: UPDATE_STICKERSET_ORDER\n }, sentRequestOptions);\n }\n\n /* function is(value: any, condition: boolean): value is T {\n return condition;\n } */\n\n // this.log('sendText', message.mid);\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n return apiPromise.then((updates: Updates) => {\n // this.log('sendText sent', message.mid);\n // if(is(updates, updates._ === 'updateShortSentMessage')) {\n if(updates._ === 'updateShortSentMessage') {\n // assumeType(updates);\n\n // * fix copying object with promise\n const promise = message.promise;\n delete message.promise;\n const newMessage = copy(message);\n defineNotNumerableProperties(message, ['promise']);\n message.promise = promise;\n\n newMessage.date = updates.date;\n newMessage.id = updates.id;\n newMessage.media = updates.media;\n newMessage.entities = updates.entities;\n this.wrapMessageEntities(newMessage);\n if(updates.pFlags.out) {\n newMessage.pFlags.out = true;\n }\n\n // * override with new updates\n updates = {\n _: 'updates',\n users: [],\n chats: [],\n seq: 0,\n date: undefined,\n updates: [{\n _: 'updateMessageID',\n random_id: message.random_id,\n id: newMessage.id\n }, {\n _: options.scheduleDate ? 'updateNewScheduledMessage' : (isChannel ? 'updateNewChannelMessage' : 'updateNewMessage'),\n message: newMessage,\n pts: updates.pts,\n pts_count: updates.pts_count\n }]\n };\n } else if((updates as Updates.updates).updates) {\n (updates as Updates.updates).updates.forEach((update) => {\n if(update._ === 'updateDraftMessage') {\n update.local = true;\n }\n });\n }\n\n // this.reloadConversation(peerId);\n\n // setTimeout(() => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n // }, 5000);\n message.promise.resolve();\n }, (error: ApiError) => {\n toggleError(error);\n message.promise.reject(error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n };\n\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n sequential: true\n });\n\n const promises: ReturnType[] = [message.promise];\n for(let i = 1; i < splitted.length; ++i) {\n promises.push(this.sendText(peerId, splitted[i], options));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public sendFile(peerId: PeerId, options: MessageSendingParams & SendFileDetails & Partial<{\n isRoundMessage: boolean,\n isVoiceMessage: boolean,\n isGroupedItem: boolean,\n isMedia: boolean,\n\n groupId: string,\n caption: string,\n entities: MessageEntity[],\n background: boolean,\n clearDraft: boolean,\n noSound: boolean,\n\n waveform: Uint8Array,\n\n // ! only for internal use\n processAfter?: typeof processAfter\n }>) {\n const file = options.file;\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n // this.checkSendOptions(options);\n\n const message = this.generateOutgoingMessage(peerId, options);\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n\n let attachType: 'document' | 'audio' | 'video' | 'voice' | 'photo', apiFileName: string;\n\n const fileType = 'mime_type' in file ? file.mime_type : file.type;\n const fileName = file instanceof File ? file.name : '';\n const isDocument = !(file instanceof File) && !(file instanceof Blob);\n let caption = options.caption || '';\n\n this.log('sendFile', file, fileType);\n\n const entities = options.entities || [];\n if(caption) {\n caption = parseMarkdown(caption, entities);\n }\n\n const attributes: DocumentAttribute[] = [];\n\n const isPhoto = getEnvironment().IMAGE_MIME_TYPES_SUPPORTED.has(fileType);\n\n const strippedPhotoSize: PhotoSize.photoStrippedSize = options.strippedBytes && {\n _: 'photoStrippedSize',\n bytes: options.strippedBytes,\n type: 'i'\n };\n\n let photo: MyPhoto, document: MyDocument;\n\n let actionName: Extract;\n if(isDocument) { // maybe it's a sticker or gif\n attachType = 'document';\n apiFileName = '';\n } else if(fileType.indexOf('audio/') === 0 || ['video/ogg'].indexOf(fileType) >= 0) {\n attachType = 'audio';\n apiFileName = 'audio.' + (fileType.split('/')[1] === 'ogg' ? 'ogg' : 'mp3');\n actionName = 'sendMessageUploadAudioAction';\n\n if(options.isVoiceMessage) {\n attachType = 'voice';\n message.pFlags.media_unread = true;\n }\n\n const attribute: DocumentAttribute.documentAttributeAudio = {\n _: 'documentAttributeAudio',\n pFlags: {\n voice: options.isVoiceMessage || undefined\n },\n waveform: options.waveform,\n duration: options.duration || 0\n };\n\n attributes.push(attribute);\n } else if(!options.isMedia) {\n attachType = 'document';\n apiFileName = 'document.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadDocumentAction';\n } else if(isPhoto) {\n attachType = 'photo';\n apiFileName = 'photo.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadPhotoAction';\n\n const photoSize = {\n _: 'photoSize',\n w: options.width,\n h: options.height,\n type: THUMB_TYPE_FULL,\n location: null,\n size: file.size\n } as PhotoSize.photoSize;\n\n photo = {\n _: 'photo',\n id: '' + message.id,\n sizes: [photoSize],\n w: options.width,\n h: options.height\n } as any;\n\n if(strippedPhotoSize) {\n photo.sizes.unshift(strippedPhotoSize);\n }\n\n const cacheContext = this.thumbsStorage.getCacheContext(photo, photoSize.type);\n cacheContext.downloaded = file.size;\n cacheContext.url = options.objectURL || '';\n\n photo = this.appPhotosManager.savePhoto(photo);\n } else if(getEnvironment().VIDEO_MIME_TYPES_SUPPORTED.has(fileType as VIDEO_MIME_TYPE)) {\n attachType = 'video';\n apiFileName = 'video.mp4';\n actionName = 'sendMessageUploadVideoAction';\n\n const videoAttribute: DocumentAttribute.documentAttributeVideo = {\n _: 'documentAttributeVideo',\n pFlags: {\n round_message: options.isRoundMessage || undefined,\n supports_streaming: true\n },\n duration: options.duration,\n w: options.width,\n h: options.height\n };\n\n attributes.push(videoAttribute);\n\n // * must follow after video attribute\n if(options.noSound &&\n file.size > (10 * 1024) &&\n file.size < (10 * 1024 * 1024)) {\n attributes.push({\n _: 'documentAttributeAnimated'\n });\n }\n } else {\n attachType = 'document';\n apiFileName = 'document.' + fileType.split('/')[1];\n actionName = 'sendMessageUploadDocumentAction';\n }\n\n attributes.push({_: 'documentAttributeFilename', file_name: fileName || apiFileName});\n\n if((['document', 'video', 'audio', 'voice'] as (typeof attachType)[]).indexOf(attachType) !== -1 && !isDocument) {\n const thumbs: PhotoSize[] = [];\n document = {\n _: 'document',\n id: '' + message.id,\n duration: options.duration,\n attributes,\n w: options.width,\n h: options.height,\n thumbs,\n mime_type: fileType,\n size: file.size\n } as any;\n\n if(options.objectURL) {\n const cacheContext = this.thumbsStorage.getCacheContext(document);\n cacheContext.downloaded = file.size;\n cacheContext.url = options.objectURL;\n }\n\n let thumb: PhotoSize.photoSize;\n if(isPhoto) {\n attributes.push({\n _: 'documentAttributeImageSize',\n w: options.width,\n h: options.height\n });\n\n thumb = {\n _: 'photoSize',\n w: options.width,\n h: options.height,\n type: THUMB_TYPE_FULL,\n size: file.size\n };\n } else if(attachType === 'video') {\n if(options.thumb) {\n thumb = {\n _: 'photoSize',\n w: options.thumb.size.width,\n h: options.thumb.size.height,\n type: 'local-thumb',\n size: options.thumb.blob.size\n };\n\n const thumbCacheContext = this.thumbsStorage.getCacheContext(document, thumb.type);\n thumbCacheContext.downloaded = thumb.size;\n thumbCacheContext.url = options.thumb.url;\n }\n }\n\n if(thumb) {\n thumbs.push(thumb);\n }\n\n if(strippedPhotoSize) {\n thumbs.unshift(strippedPhotoSize);\n }\n\n /* if(thumbs.length) {\n const thumb = thumbs[0] as PhotoSize.photoSize;\n const docThumb = appPhotosManager.getDocumentCachedThumb(document.id);\n docThumb.downloaded = thumb.size;\n docThumb.url = thumb.url;\n } */\n\n document = this.appDocsManager.saveDoc(document);\n }\n\n this.log('sendFile', attachType, apiFileName, file.type, options);\n\n const sentDeferred = deferredPromise();\n // sentDeferred.cancel = () => {\n // const error = new Error('Download canceled');\n // error.name = 'AbortError';\n // sentDeferred.reject(error);\n\n // if(uploadPromise?.cancel) {\n // uploadPromise.cancel();\n // }\n // };\n\n const media: MessageMedia = isDocument ? undefined : {\n _: photo ? 'messageMediaPhoto' : 'messageMediaDocument',\n pFlags: {},\n // preloader,\n photo,\n document\n };\n\n if(media) {\n defineNotNumerableProperties(media as any, ['promise']);\n (media as any).promise = sentDeferred;\n\n if(options.spoiler) {\n (media as MessageMedia.messageMediaPhoto).pFlags.spoiler = true;\n }\n }\n\n message.entities = entities;\n message.message = caption;\n message.media = isDocument ? {\n _: 'messageMediaDocument',\n pFlags: {},\n document: file\n } as MessageMedia.messageMediaDocument : media;\n\n const uploadingFileName = !isDocument ? getFileNameForUpload(file) : undefined;\n message.uploadingFileName = uploadingFileName;\n\n if(uploadingFileName) {\n this.uploadFilePromises[uploadingFileName] = sentDeferred;\n }\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n let uploaded = false,\n uploadPromise: ReturnType = null;\n\n message.send = () => {\n if(isDocument) {\n const inputMedia: InputMedia = {\n _: 'inputMediaDocument',\n id: getDocumentInput(file),\n pFlags: {}\n };\n\n sentDeferred.resolve(inputMedia);\n } else if(file instanceof File || file instanceof Blob) {\n const load = () => {\n if(!uploaded || message.error) {\n uploaded = false;\n\n uploadPromise = this.apiFileManager.upload({file, fileName: uploadingFileName});\n uploadPromise.catch((err) => {\n if(!uploaded) {\n this.log('cancelling upload', media);\n\n this.cancelPendingMessage(message.random_id);\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n sentDeferred.reject(err);\n }\n });\n\n uploadPromise.addNotifyListener((progress: Progress) => {\n /* if(DEBUG) {\n this.log('upload progress', progress);\n } */\n\n const percents = Math.max(1, Math.floor(100 * progress.done / progress.total));\n if(actionName) {\n this.setTyping(peerId, {_: actionName, progress: percents | 0}, undefined, options.threadId);\n }\n sentDeferred.notifyAll(progress);\n });\n\n sentDeferred.notifyAll({done: 0, total: file.size});\n }\n\n let thumbUploadPromise: typeof uploadPromise;\n if(attachType === 'video' && options.objectURL && options.thumb?.blob) {\n thumbUploadPromise = this.apiFileManager.upload({file: options.thumb.blob});\n }\n\n uploadPromise && uploadPromise.then(async(inputFile) => {\n /* if(DEBUG) {\n this.log('appMessagesManager: sendFile uploaded:', inputFile);\n } */\n\n inputFile.name = apiFileName;\n uploaded = true;\n let inputMedia: InputMedia;\n switch(attachType) {\n case 'photo':\n inputMedia = {\n _: 'inputMediaUploadedPhoto',\n file: inputFile,\n pFlags: {\n spoiler: options.spoiler || undefined\n }\n };\n break;\n\n default:\n inputMedia = {\n _: 'inputMediaUploadedDocument',\n file: inputFile,\n mime_type: fileType,\n pFlags: {\n force_file: actionName === 'sendMessageUploadDocumentAction' || undefined,\n spoiler: options.spoiler || undefined\n // nosound_video: options.noSound ? true : undefined\n },\n attributes\n };\n }\n\n if(thumbUploadPromise) {\n try {\n const inputFile = await thumbUploadPromise;\n (inputMedia as InputMedia.inputMediaUploadedDocument).thumb = inputFile;\n } catch(err) {\n this.log.error('sendFile thumb upload error:', err);\n }\n }\n\n sentDeferred.resolve(inputMedia);\n }, (error: ApiError) => {\n toggleError(error);\n throw error;\n });\n\n return sentDeferred;\n };\n\n if(options.isGroupedItem) {\n load();\n } else {\n this.sendSmthLazyLoadQueue.push({\n load\n });\n }\n }\n\n return sentDeferred;\n };\n\n this.beforeMessageSending(message, {\n isGroupedItem: options.isGroupedItem,\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n processAfter: options.processAfter\n });\n\n if(!options.isGroupedItem) {\n sentDeferred.then((inputMedia) => {\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n\n return this.apiManager.invokeApi('messages.sendMedia', {\n background: options.background,\n peer: this.appPeersManager.getInputPeerById(peerId),\n media: inputMedia,\n message: caption,\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n entities,\n clear_draft: options.clearDraft,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n if(attachType === 'photo' &&\n error.code === 400 &&\n (error.type === 'PHOTO_INVALID_DIMENSIONS' ||\n error.type === 'PHOTO_SAVE_FILE_INVALID')) {\n error.handled = true;\n attachType = 'document';\n message.send();\n return;\n }\n\n toggleError(error);\n throw error;\n });\n });\n\n sentDeferred.then(message.promise.resolve, message.promise.reject);\n }\n\n const ret: {\n message: typeof message,\n promise: typeof sentDeferred\n } = {\n message\n } as any;\n\n defineNotNumerableProperties(ret, ['promise']);\n ret.promise = sentDeferred;\n\n return ret;\n }\n\n public async sendAlbum(peerId: PeerId, options: MessageSendingParams & {\n isMedia?: boolean,\n entities?: MessageEntity[],\n caption?: string,\n sendFileDetails: SendFileDetails[],\n clearDraft?: boolean\n }) {\n // this.checkSendOptions(options);\n\n if(options.threadId && !options.replyToMsgId) {\n options.replyToMsgId = options.threadId;\n }\n\n if(options.sendFileDetails.length === 1) {\n return this.sendFile(peerId, {...options, ...options.sendFileDetails[0]});\n }\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n\n let caption = options.caption || '';\n let entities = options.entities || [];\n if(caption) {\n caption = parseMarkdown(caption, entities);\n }\n\n this.log('sendAlbum', options);\n\n const groupId = '' + ++this.groupedTempId;\n\n const callbacks: Array<() => void> = [];\n const processAfter = (cb: () => void) => {\n callbacks.push(cb);\n };\n\n const messages = options.sendFileDetails.map((details, idx) => {\n const o: Parameters[1] = {\n isGroupedItem: true,\n isMedia: options.isMedia,\n scheduleDate: options.scheduleDate,\n silent: options.silent,\n replyToMsgId,\n threadId: options.threadId,\n sendAsPeerId: options.sendAsPeerId,\n groupId,\n processAfter,\n ...details\n };\n\n if(idx === 0) {\n o.caption = caption;\n o.entities = entities;\n // o.replyToMsgId = replyToMsgId;\n }\n\n return this.sendFile(peerId, o).message;\n });\n\n if(options.clearDraft) {\n callbacks.push(() => {\n this.appDraftsManager.clearDraft(peerId, options.threadId);\n });\n }\n\n callbacks.forEach((callback) => {\n callback();\n });\n\n // * test pending\n // return;\n\n const toggleError = (message: Message.message, error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n const inputPeer = this.appPeersManager.getInputPeerById(peerId);\n const invoke = (multiMedia: InputSingleMedia[]) => {\n this.setTyping(peerId, {_: 'sendMessageCancelAction'}, undefined, options.threadId);\n\n const deferred = deferredPromise();\n this.sendSmthLazyLoadQueue.push({\n load: () => {\n return this.apiManager.invokeApi('messages.sendMultiMedia', {\n peer: inputPeer,\n multi_media: multiMedia,\n reply_to_msg_id: replyToMsgId,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n clear_draft: options.clearDraft,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined,\n update_stickersets_order: UPDATE_STICKERSET_ORDER\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n deferred.resolve();\n }, (error: ApiError) => {\n messages.forEach((message) => toggleError(message, error));\n deferred.reject(error);\n });\n }\n });\n\n return deferred;\n };\n\n const promises: Promise[] = messages.map((message) => {\n return (message.send() as Promise).then((inputMedia) => {\n return Promise.all([\n inputMedia,\n this.apiManager.invokeApi('messages.uploadMedia', {\n peer: inputPeer,\n media: inputMedia\n })\n ]);\n })\n .then(([originalInputMedia, messageMedia]) => {\n let inputMedia: InputMedia;\n if(messageMedia._ === 'messageMediaPhoto') {\n const photo = this.appPhotosManager.savePhoto(messageMedia.photo);\n inputMedia = getPhotoMediaInput(photo);\n } else if(messageMedia._ === 'messageMediaDocument') {\n const doc = this.appDocsManager.saveDoc(messageMedia.document);\n inputMedia = getDocumentMediaInput(doc);\n }\n\n // copy original flags\n const copyProperties: (keyof InputMedia.inputMediaPhoto)[] = [\n 'pFlags',\n 'ttl_seconds'\n ];\n\n copyProperties.forEach((property) => {\n // @ts-ignore\n inputMedia[property] = originalInputMedia[property] ?? inputMedia[property];\n });\n\n const inputSingleMedia: InputSingleMedia = {\n _: 'inputSingleMedia',\n media: inputMedia,\n random_id: message.random_id,\n message: caption,\n entities\n };\n\n // * only 1 caption for all inputs\n if(caption) {\n caption = '';\n entities = [];\n }\n\n return inputSingleMedia;\n }).catch((err: ApiError) => {\n this.log.error('sendAlbum upload item error:', err, message);\n toggleError(message, err);\n throw err;\n });\n });\n\n return Promise.all(promises).then((inputs) => {\n return invoke(inputs.filter(Boolean));\n });\n }\n\n public sendContact(peerId: PeerId, contactPeerId: PeerId) {\n return this.sendOther(peerId, this.appUsersManager.getContactMediaInput(contactPeerId));\n }\n\n public sendOther(\n peerId: PeerId,\n inputMedia: InputMedia | {_: 'messageMediaPending', messageMedia: MessageMedia},\n options: MessageSendingParams & Partial<{\n viaBotId: BotId,\n replyMarkup: ReplyMarkup,\n clearDraft: true,\n queryId: string\n resultId: string,\n geoPoint: GeoPoint\n }> = {}\n ) {\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n // this.checkSendOptions(options);\n const message = this.generateOutgoingMessage(peerId, options);\n const replyToMsgId = options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined;\n\n let media: MessageMedia;\n switch(inputMedia._) {\n case 'inputMediaPoll': {\n const pollId = '' + message.id;\n inputMedia.poll.id = pollId;\n this.appPollsManager.savePoll(inputMedia.poll, {\n _: 'pollResults',\n flags: 4,\n total_voters: 0,\n pFlags: {},\n recent_voters: []\n });\n\n const {poll, results} = this.appPollsManager.getPoll(pollId);\n media = {\n _: 'messageMediaPoll',\n poll,\n results\n };\n\n break;\n }\n\n case 'inputMediaPhoto': {\n media = {\n _: 'messageMediaPhoto',\n photo: this.appPhotosManager.getPhoto((inputMedia.id as InputPhoto.inputPhoto).id),\n pFlags: {}\n };\n break;\n }\n\n case 'inputMediaDocument': {\n const doc = this.appDocsManager.getDoc((inputMedia.id as InputDocument.inputDocument).id);\n /* if(doc.sticker && doc.stickerSetInput) {\n appStickersManager.pushPopularSticker(doc.id);\n } */\n media = {\n _: 'messageMediaDocument',\n document: doc,\n pFlags: {}\n };\n break;\n }\n\n case 'inputMediaContact': {\n media = {\n _: 'messageMediaContact',\n phone_number: inputMedia.phone_number,\n first_name: inputMedia.first_name,\n last_name: inputMedia.last_name,\n user_id: inputMedia.user_id ?? '0',\n vcard: inputMedia.vcard\n };\n break;\n }\n\n case 'inputMediaGeoPoint': {\n media = {\n _: 'messageMediaGeo',\n geo: options.geoPoint\n };\n break;\n }\n\n case 'inputMediaVenue': {\n media = {\n _: 'messageMediaVenue',\n geo: options.geoPoint,\n title: inputMedia.title,\n address: inputMedia.address,\n provider: inputMedia.provider,\n venue_id: inputMedia.venue_id,\n venue_type: inputMedia.venue_type\n };\n break;\n }\n\n case 'messageMediaPending': {\n media = (inputMedia as any).messageMedia;\n break;\n }\n }\n\n message.media = media;\n\n const toggleError = (error?: ApiError) => {\n this.onMessagesSendError([message], error);\n this.rootScope.dispatchEvent('messages_pending');\n };\n\n message.send = () => {\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const sendAs = options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined;\n let apiPromise: Promise;\n if(options.viaBotId) {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendInlineBotResult', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n query_id: options.queryId,\n id: options.resultId,\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n send_as: sendAs\n }, sentRequestOptions);\n } else {\n apiPromise = this.apiManager.invokeApiAfter('messages.sendMedia', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n media: inputMedia as InputMedia,\n random_id: message.random_id,\n reply_to_msg_id: replyToMsgId || undefined,\n message: '',\n clear_draft: options.clearDraft,\n schedule_date: options.scheduleDate,\n silent: options.silent,\n send_as: sendAs,\n update_stickersets_order: UPDATE_STICKERSET_ORDER\n }, sentRequestOptions);\n }\n\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n return apiPromise.then((updates) => {\n if(updates.updates) {\n updates.updates.forEach((update: Update) => {\n if(update._ === 'updateDraftMessage') {\n update.local = true;\n }\n });\n }\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n toggleError(error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n };\n\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n threadId: options.threadId,\n clearDraft: options.clearDraft,\n sequential: true\n });\n\n return message.promise;\n }\n\n /* private checkSendOptions(options: Partial<{\n scheduleDate: number\n }>) {\n if(options.scheduleDate) {\n const minTimestamp = (Date.now() / 1000 | 0) + 10;\n if(options.scheduleDate <= minTimestamp) {\n delete options.scheduleDate;\n }\n }\n } */\n\n private beforeMessageSending(message: Message.message, options: Pick & Partial<{\n isGroupedItem: boolean,\n isScheduled: boolean,\n clearDraft: boolean,\n sequential: boolean,\n processAfter?: (cb: () => void) => void\n }> = {}) {\n const messageId = message.id;\n const peerId = this.getMessagePeer(message);\n const storage = options.isScheduled ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n message.storageKey = storage.key;\n const callbacks: Array<() => void> = [];\n if(options.isScheduled) {\n // if(!options.isGroupedItem) {\n this.saveMessages([message], {storage, isScheduled: true, isOutgoing: true});\n callbacks.push(() => {\n this.rootScope.dispatchEvent('scheduled_new', message);\n });\n } else {\n /* if(options.threadId && this.threadsStorage[peerId]) {\n delete this.threadsStorage[peerId][options.threadId];\n } */\n const storages: HistoryStorage[] = [\n this.getHistoryStorage(peerId),\n options.threadId ? this.getHistoryStorage(peerId, options.threadId) : undefined\n ];\n\n for(const storage of storages) {\n if(storage) {\n storage.history.unshift(messageId);\n }\n }\n\n this.saveMessages([message], {storage, isOutgoing: true});\n this.setDialogTopMessage(message);\n\n if(options.threadId) {\n const forumTopic = this.dialogsStorage.getForumTopic(peerId, options.threadId);\n if(forumTopic) {\n this.setDialogTopMessage(message, forumTopic);\n }\n }\n\n callbacks.push(() => {\n this.rootScope.dispatchEvent('history_append', {storageKey: storage.key, message});\n });\n }\n\n const pending: PendingMessageDetails = this.pendingByRandomId[message.random_id] = {\n peerId,\n tempId: messageId,\n threadId: options.threadId,\n storage,\n sequential: options.sequential\n };\n\n this.pendingTopMsgs[peerId] = messageId;\n\n if(!options.isGroupedItem && message.send) {\n callbacks.push(() => {\n if(options.clearDraft) {\n this.appDraftsManager.clearDraft(peerId, options.threadId);\n }\n\n message.send();\n });\n }\n\n if(callbacks.length) {\n (options.processAfter || processAfter)(() => {\n for(const callback of callbacks) {\n callback();\n }\n });\n }\n\n return pending;\n }\n\n private generateOutgoingMessage(peerId: PeerId, options: MessageSendingParams & Partial<{\n viaBotId: BotId,\n groupId: string,\n replyMarkup: ReplyMarkup,\n }>) {\n if(options.threadId && !options.replyToMsgId) {\n options.replyToMsgId = options.threadId;\n }\n\n let postAuthor: string;\n const isBroadcast = this.appPeersManager.isBroadcast(peerId);\n if(isBroadcast) {\n const chat = this.appPeersManager.getPeer(peerId) as Chat.channel;\n if(chat.pFlags.signatures) {\n const user = this.appUsersManager.getSelf();\n const fullName = user.first_name + (user.last_name ? ' ' + user.last_name : '');\n postAuthor = fullName;\n }\n }\n\n const message: Message.message = {\n _: 'message',\n id: this.generateTempMessageId(peerId),\n from_id: options.sendAsPeerId ? this.appPeersManager.getOutputPeer(options.sendAsPeerId) : this.generateFromId(peerId),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n post_author: postAuthor,\n pFlags: this.generateFlags(peerId),\n date: options.scheduleDate || (tsNow(true) + this.timeManager.getServerTimeOffset()),\n message: '',\n grouped_id: options.groupId,\n random_id: randomLong(),\n reply_to: this.generateReplyHeader(peerId, options.replyToMsgId, options.threadId),\n via_bot_id: options.viaBotId,\n reply_markup: options.replyMarkup,\n replies: this.generateReplies(peerId),\n views: isBroadcast && 1,\n pending: true\n };\n\n defineNotNumerableProperties(message, ['send', 'promise']);\n if(options.groupId === undefined) {\n message.promise = deferredPromise();\n }\n\n return message;\n }\n\n private generateReplyHeader(peerId: PeerId, replyToMsgId: number, replyToTopId?: number) {\n const isForum = this.appPeersManager.isForum(peerId);\n if(isForum && !replyToTopId) {\n const originalMessage = this.getMessageByPeer(peerId, replyToMsgId);\n if(originalMessage) {\n replyToTopId = getMessageThreadId(originalMessage, true);\n }\n }\n\n const header: MessageReplyHeader = {\n _: 'messageReplyHeader',\n reply_to_msg_id: replyToMsgId || replyToTopId,\n pFlags: {}\n };\n\n if(replyToTopId && isForum && GENERAL_TOPIC_ID !== replyToTopId) {\n header.pFlags.forum_topic = true;\n }\n\n if(replyToTopId && header.reply_to_msg_id !== replyToTopId) {\n header.reply_to_top_id = replyToTopId;\n }\n\n return header;\n }\n\n private generateReplies(peerId: PeerId) {\n let replies: MessageReplies.messageReplies;\n if(this.appPeersManager.isBroadcast(peerId)) {\n const channelFull = this.appProfileManager.getCachedFullChat(peerId.toChatId()) as ChatFull.channelFull;\n if(channelFull?.linked_chat_id) {\n replies = {\n _: 'messageReplies',\n flags: 1,\n pFlags: {\n comments: true\n },\n channel_id: channelFull.linked_chat_id,\n replies: 0,\n replies_pts: 0\n };\n }\n }\n\n return replies;\n }\n\n /**\n * Generate correct from_id according to anonymous or broadcast\n */\n private generateFromId(peerId: PeerId) {\n if(this.appPeersManager.isAnyChat(peerId) && (this.appPeersManager.isBroadcast(peerId) || this.isAnonymousSending(peerId))) {\n return undefined;\n } else {\n return this.appPeersManager.getOutputPeer(this.appUsersManager.getSelf().id.toPeerId());\n }\n }\n\n private generateFlags(peerId: PeerId) {\n const pFlags: Message.message['pFlags'] = {};\n const fromId = this.appUsersManager.getSelf().id;\n if(peerId !== fromId) {\n pFlags.out = true;\n\n if(!this.appPeersManager.isChannel(peerId) && !this.appUsersManager.isBot(peerId)) {\n pFlags.unread = true;\n }\n }\n\n if(this.appPeersManager.isBroadcast(peerId)) {\n pFlags.post = true;\n }\n\n return pFlags;\n }\n\n private generateForwardHeader(peerId: PeerId, originalMessage: Message.message) {\n const myId = this.appUsersManager.getSelf().id.toPeerId();\n const fromId = originalMessage.fromId;\n if(fromId === myId && originalMessage.peerId === myId && !originalMessage.fwd_from) {\n return;\n }\n\n const fwdHeader: MessageFwdHeader.messageFwdHeader = {\n _: 'messageFwdHeader',\n flags: 0,\n date: originalMessage.date,\n pFlags: {}\n };\n\n let isUserHidden = false;\n if(originalMessage.fwd_from) {\n fwdHeader.from_id = originalMessage.fwd_from.from_id;\n fwdHeader.from_name = originalMessage.fwd_from.from_name;\n fwdHeader.post_author = originalMessage.fwd_from.post_author;\n } else {\n fwdHeader.post_author = originalMessage.post_author;\n\n if(fromId.isUser()) {\n const userFull = this.appProfileManager.getCachedFullUser(fromId.toUserId());\n if(userFull?.private_forward_name) {\n fwdHeader.from_name = userFull.private_forward_name;\n isUserHidden = true;\n }\n }\n\n if(!isUserHidden) {\n fwdHeader.from_id = this.appPeersManager.getOutputPeer(fromId);\n }\n }\n\n if(this.appPeersManager.isBroadcast(originalMessage.peerId)) {\n if(originalMessage.post_author) {\n fwdHeader.post_author = originalMessage.post_author;\n }\n\n fwdHeader.channel_post = originalMessage.id;\n }\n\n if(peerId === myId && !isUserHidden) {\n fwdHeader.saved_from_msg_id = originalMessage.id;\n fwdHeader.saved_from_peer = this.appPeersManager.getOutputPeer(originalMessage.peerId);\n }\n\n return fwdHeader;\n }\n\n public generateFakeAvatarMessage(peerId: PeerId, photo: Photo) {\n const maxId = Number.MAX_SAFE_INTEGER;\n const message: Message.messageService = {\n _: 'messageService',\n pFlags: {},\n action: {\n _: 'messageActionChannelEditPhoto',\n photo\n },\n id: maxId,\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n mid: maxId,\n peerId,\n date: (photo as Photo.photo).date,\n fromId: peerId\n };\n\n this.getHistoryMessagesStorage(peerId).set(maxId, message);\n return message;\n }\n\n public getUploadPromise(uploadFileName: string) {\n return this.uploadFilePromises[uploadFileName];\n }\n\n public isAnonymousSending(peerId: PeerId): boolean {\n if(!peerId.isAnyChat()) {\n return false;\n }\n\n const chat = this.appPeersManager.getPeer(peerId);\n return (chat as Chat.channel).admin_rights?.pFlags?.anonymous;\n }\n\n public setDialogTopMessage(\n message: MyMessage,\n dialog: MTDialog.dialog | ForumTopic = this.getDialogOnly(message.peerId)\n ) {\n if(!dialog) {\n return;\n }\n\n dialog.top_message = message.mid;\n\n const historyStorage = this.getHistoryStorage(message.peerId, dialog._ === 'forumTopic' ? dialog.id : undefined);\n historyStorage.maxId = message.mid;\n\n this.dialogsStorage.generateIndexForDialog(dialog, false, message);\n\n this.scheduleHandleNewDialogs(message.peerId, dialog);\n }\n\n public cancelPendingMessage(randomId: string) {\n const pendingData = this.pendingByRandomId[randomId];\n\n /* if(DEBUG) {\n this.log('cancelPendingMessage', randomId, pendingData);\n } */\n\n if(pendingData) {\n const {peerId, tempId, storage} = pendingData;\n const historyStorage = this.getHistoryStorage(peerId);\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteMessages',\n messages: [tempId],\n pts: undefined,\n pts_count: undefined\n });\n\n historyStorage.history.delete(tempId);\n\n delete this.pendingByRandomId[randomId];\n storage.delete(tempId);\n\n return true;\n }\n\n return false;\n }\n\n /* public async refreshConversations() {\n const limit = 200, outDialogs: Dialog[] = [];\n for(let folderId = 0; folderId < 2; ++folderId) {\n let offsetDate = 0;\n for(;;) {\n const {dialogs, isEnd} = await this.getTopMessages(limit, folderId, offsetDate);\n\n if(dialogs.length) {\n outDialogs.push(...dialogs as Dialog[]);\n const dialog = dialogs[dialogs.length - 1];\n\n // * get peerId and mid manually, because dialog can be migrated peer and it won't be saved\n const peerId = getPeerId(dialog.peer);\n const mid = generateMessageId(dialog.top_message);\n offsetDate = this.getMessageByPeer(peerId, mid).date;\n\n if(!offsetDate) {\n console.error('refreshConversations: got no offsetDate', dialog);\n break;\n }\n }\n\n if(isEnd) {\n break;\n }\n }\n }\n\n let obj: {[peerId: string]: Dialog} = {};\n outDialogs.forEach((dialog) => {\n obj[dialog.peerId] = dialog;\n });\n rootScope.dispatchEvent('dialogs_multiupdate', obj);\n\n return outDialogs;\n } */\n\n public async fillConversations(folderId = GLOBAL_FOLDER_ID): Promise {\n const middleware = this.middleware.get();\n while(!this.dialogsStorage.isDialogsLoaded(folderId)) {\n const result = await this.getTopMessages({limit: 100, folderId});\n if(!middleware() || result.isEnd) {\n break;\n }\n }\n }\n\n /* public async getConversationsAll(query = '', folderId = 0) {\n const limit = 200, outDialogs: Dialog[] = [];\n for(; folderId < 2; ++folderId) {\n let offsetIndex = 0;\n for(;;) {\n const {dialogs} = await appMessagesManager.getConversations(query, offsetIndex, limit, folderId).promise;\n\n if(dialogs.length) {\n outDialogs.push(...dialogs);\n offsetIndex = dialogs[dialogs.length - 1].index || 0;\n } else {\n break;\n }\n }\n }\n\n return outDialogs;\n } */\n\n public getReadMaxIdIfUnread(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n if(threadId && !this.appChatsManager.isForum(peerId.toChatId())) {\n const chatHistoryStorage = this.getHistoryStorage(peerId);\n const readMaxId = Math.max(chatHistoryStorage.readMaxId ?? 0, historyStorage.readMaxId);\n const message = this.getMessageByPeer(peerId, historyStorage.maxId); // usually message is missing, so pFlags.out won't be there anyway\n return !message?.pFlags?.out && readMaxId < historyStorage.maxId ? readMaxId : 0;\n } else {\n const message = this.getMessageByPeer(peerId, historyStorage.maxId);\n const readMaxId = peerId.isUser() ? Math.max(historyStorage.readMaxId, historyStorage.readOutboxMaxId) : historyStorage.readMaxId;\n // readMaxId can be 4294967295 (0)\n return !message?.pFlags?.out && readMaxId < historyStorage.maxId && getServerMessageId(readMaxId) ? readMaxId : 0;\n }\n }\n\n // public lolSet = new Set();\n public getTopMessages({limit, folderId}: {\n limit: number,\n folderId: number\n }) {\n // const dialogs = this.dialogsStorage.getFolder(folderId);\n const offsetId = 0;\n let offsetPeerId: PeerId;\n let offsetIndex = 0;\n\n let offsetDate = this.dialogsStorage.getOffsetDate(folderId);\n if(offsetDate) {\n offsetIndex = offsetDate * 0x10000;\n offsetDate += this.timeManager.getServerTimeOffset();\n }\n\n const useLimit = 100;\n const middleware = this.middleware.get();\n const peerId = this.dialogsStorage.isFilterIdForForum(folderId) ? folderId : undefined;\n\n const processResult = (result: MessagesDialogs | MessagesForumTopics) => {\n if(!middleware() || result._ === 'messages.dialogsNotModified') return null;\n\n if(DEBUG) {\n this.log('messages.getDialogs result:', result);\n }\n\n // can reset pinned order here\n if(!peerId && !offsetId && !offsetDate && !offsetPeerId && folderId !== GLOBAL_FOLDER_ID) {\n this.dialogsStorage.resetPinnedOrder(folderId);\n }\n\n if(!peerId && !offsetDate) {\n // telegramMeWebManager.setAuthorized(true);\n this.appDraftsManager.addMissedDialogs();\n }\n\n this.appUsersManager.saveApiUsers(result.users);\n this.appChatsManager.saveApiChats(result.chats);\n this.saveMessages(result.messages);\n\n let maxSeenIdIncremented = offsetDate ? true : false;\n let hasPrepend = false;\n const noIdsDialogs: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const setFolderId: REAL_FOLDER_ID = folderId === GLOBAL_FOLDER_ID ? FOLDER_ID_ALL : folderId as REAL_FOLDER_ID;\n const saveGlobalOffset = !!peerId || folderId === GLOBAL_FOLDER_ID;\n const items: Array =\n (result as MessagesDialogs.messagesDialogsSlice).dialogs as Dialog[] ||\n (result as MessagesForumTopics).topics as ForumTopic[];\n forEachReverse(items, (dialog) => {\n if(!dialog) {\n return;\n }\n\n // const d = Object.assign({}, dialog);\n // ! ะฝัƒะถะฝะพ ะฟะตั€ะตะดะฐะฒะฐั‚ัŒ folderId, ั‚ะฐะบ ะบะฐะบ ะฟะพ ะฟะฐะฟะบะต !== 0 ะฝะตั‚ ัะฒะพะนัั‚ะฒะฐ folder_id\n if(!peerId) {\n (dialog as Dialog).folder_id ??= setFolderId;\n }\n\n this.dialogsStorage.saveDialog({\n dialog,\n ignoreOffsetDate: true,\n saveGlobalOffset\n });\n\n if(dialog.peerId === undefined) {\n this.log.error('bugged dialog?', dialog);\n debugger;\n return;\n }\n\n if(!maxSeenIdIncremented &&\n !this.appPeersManager.isChannel(dialog.peerId || this.appPeersManager.getPeerId(dialog.peer))) {\n this.incrementMaxSeenId(dialog.top_message);\n maxSeenIdIncremented = true;\n }\n\n // if(!folderId && !dialog.folder_id) {\n // this.lolSet.add(dialog.peerId);\n // }\n\n if(offsetIndex && getDialogIndex(dialog) > offsetIndex) {\n this.scheduleHandleNewDialogs(dialog.peerId, dialog);\n hasPrepend = true;\n }\n\n // ! ัั‚ะพ ะผะพะถะตั‚ ัะปัƒั‡ะธั‚ัŒัั, ะตัะปะธ ะทะฐะฟั€ะพั ะธะดั‘ั‚ ะฝะต ะฟะพ ะฟะฐะฟะบะต 0, ะฐ ะฟะพ 1. ะฟะพั‡ะตะผัƒ-ั‚ะพ read'ะพะฒ ะฝะตั‚\n // ! ะฒ ะธั‚ะพะณะต, ั‡ั‚ะพะฑั‹ ะฟะพะปัƒั‡ะธั‚ัŒ 1 ะดะธะฐะปะพะณ, ะดะตะปะฐะตั‚ัั ะฟะตั€ะฒั‹ะน ะทะฐะฟั€ะพั ะฟะพ ะฟะฐะฟะบะต 0, ะฟะพั‚ะพะผ ะทะฐะฟั€ะพั ะดะปั ะฐั€ั…ะธะฒะฝั‹ั… ะฟะพ ะฟะฐะฟะบะต 1, ะธ ะฟะพั‚ะพะผ ะตั‰ั‘ ะฟะตั€ะตะทะฐะณั€ัƒะทะบะฐ ะฐั€ั…ะธะฒะฝะพะณะพ ะดะธะฐะปะพะณะฐ\n if(!peerId && !getServerMessageId(dialog.read_inbox_max_id) && !getServerMessageId(dialog.read_outbox_max_id)) {\n noIdsDialogs.set(dialog.peerId, {dialog: dialog as Dialog});\n\n this.log.error('noIdsDialogs', dialog, params);\n } else if(dialog.top_message) { // * fix sending status\n const topMessage = this.getMessageByPeer(dialog.peerId, dialog.top_message);\n if(topMessage) {\n this.setMessageUnreadByDialog(topMessage, dialog);\n this.dialogsStorage.setDialogToState(dialog);\n }\n }\n });\n\n if(noIdsDialogs.size) {\n // setTimeout(() => { // test bad situation\n const peerIds = [...noIdsDialogs.keys()];\n const promises = peerIds.map((peerId) => this.reloadConversation(peerId));\n Promise.all(promises).then(() => {\n this.rootScope.dispatchEvent('dialogs_multiupdate', noIdsDialogs);\n\n for(let i = 0; i < peerIds.length; ++i) {\n const peerId = peerIds[i];\n this.rootScope.dispatchEvent('dialog_unread', {\n peerId,\n dialog: this.getDialogOnly(peerId)\n });\n }\n });\n // }, 10e3);\n }\n\n const count = (result as MessagesDialogs.messagesDialogsSlice).count;\n\n // exclude empty draft dialogs\n const folderDialogs = this.dialogsStorage.getFolderDialogs(folderId, false);\n let dialogsLength = 0;\n for(let i = 0, length = folderDialogs.length; i < length; ++i) {\n const dialog = folderDialogs[i];\n if(getServerMessageId(dialog.top_message)) {\n ++dialogsLength;\n } else {\n this.log.error('something strange with dialog', dialog);\n }\n }\n\n const isEnd = /* limit > dialogsResult.dialogs.length || */\n !count ||\n dialogsLength >= count ||\n !items.length;\n if(isEnd) {\n this.dialogsStorage.setDialogsLoaded(folderId, true);\n }\n\n if(hasPrepend) {\n this.scheduleHandleNewDialogs();\n } else {\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map());\n }\n\n const dialogs = items;\n const slicedDialogs = limit === useLimit ? dialogs : dialogs.slice(0, limit);\n return {\n isEnd: isEnd && slicedDialogs[slicedDialogs.length - 1] === dialogs[dialogs.length - 1],\n count,\n dialogs: slicedDialogs\n };\n };\n\n let promise: Promise>, params: any;\n if(peerId) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'channels.getForumTopics',\n params: params = {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n limit: useLimit,\n offset_date: offsetDate,\n offset_id: offsetId,\n offset_topic: 0\n },\n options: {\n // timeout: APITIMEOUT,\n noErrorBox: true\n },\n processResult: (result) => {\n result = this.dialogsStorage.processTopics(peerId, result);\n return processResult(result);\n }\n });\n } else {\n // ! ะ’ะะ˜ะœะะะ˜ะ•: ะžะงะ•ะะฌ ะกะ›ะžะ–ะะะฏ ะ›ะžะ“ะ˜ะšะ:\n // ! ะตัะปะธ ะดะตะปะฐั‚ัŒ ะทะฐะฟั€ะพั ัะฝะฐั‡ะฐะปะฐ ะฟะพ ะฟะฐะฟะบะต 0, ะฟะพั‚ะพะผ ะฟะพ ะฟะฐะฟะบะต 1, ะฟะพ ะธะฝะดะตะบััƒ 0 ะฒ ะผะฐััะธะฒะต ะฑัƒะดะตั‚ ะพะดะธะฝ ะธ ั‚ะพั‚ ะถะต ะดะธะฐะปะพะณ, ั dialog.pFlags.pinned, ะ›ะžะ›???\n // ! ั‚.ะต., ั ะทะฐะฟั€ะพัะพะผ folder_id: 1, ะธ exclude_pinned: 0, ะฒ ั€ะตะทัƒะปัŒั‚ะฐั‚ะต ะฑัƒะดัƒั‚ ะตั‰ั‘ ะธ ะทะฐะบั€ะตะฟะปั‘ะฝะฝั‹ะต ั ะฟะฐะฟะบะธ 0\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'messages.getDialogs',\n params: params = {\n folder_id: folderId,\n offset_date: offsetDate,\n offset_id: offsetId,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId),\n limit: useLimit,\n hash: '0'\n },\n options: {\n // timeout: APITIMEOUT,\n noErrorBox: true\n },\n processResult\n });\n }\n\n return promise;\n }\n\n public async forwardMessages(peerId: PeerId, fromPeerId: PeerId, mids: number[], options: MessageSendingParams & Partial<{\n withMyScore: true,\n dropAuthor: boolean,\n dropCaptions: boolean\n }> = {}) {\n delete options.replyToMsgId;\n delete options.threadId;\n\n peerId = this.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n mids = mids.slice().sort((a, b) => a - b);\n\n for(let i = 0, length = mids.length; i < length; ++i) {\n const mid = mids[i];\n const originalMessage = this.getMessageByPeer(fromPeerId, mid) as Message.message;\n if(originalMessage.pFlags.is_outgoing) { // this can happen when forwarding a changelog\n this.sendText(peerId, originalMessage.message, {\n entities: originalMessage.entities,\n scheduleDate: options.scheduleDate,\n silent: options.silent\n });\n\n mids.splice(i--, 1);\n --length;\n }\n }\n\n if(!mids.length) {\n return Promise.resolve();\n }\n\n const config = await this.apiManager.getConfig();\n const overflowMids = mids.splice(config.forwarded_count_max, mids.length - config.forwarded_count_max);\n\n if(options.dropCaptions) {\n options.dropAuthor = true;\n }\n\n const groups: {\n [groupId: string]: {\n tempId: string,\n messages: Message.message[]\n }\n } = {};\n\n const newMids: number[] = [];\n const newMessages = mids.map((mid) => {\n const originalMessage = this.getMessageByPeer(fromPeerId, mid) as Message.message;\n const message: Message.message = this.generateOutgoingMessage(peerId, options);\n newMids.push(message.id);\n\n const keys: Array = [\n 'entities',\n 'media'\n // 'reply_markup'\n ];\n\n if(!options.dropAuthor) {\n message.fwd_from = this.generateForwardHeader(peerId, originalMessage);\n keys.push('views', 'forwards');\n\n if(message.fwd_from?.from_name && peerId === this.appPeersManager.peerId) {\n delete message.from_id;\n }\n }\n\n if(!options.dropCaptions || !originalMessage.media) {\n keys.push('message');\n }\n\n const replyToMid = originalMessage.reply_to?.reply_to_msg_id;\n const replyToMessageIdx = mids.indexOf(replyToMid);\n if(replyToMid && replyToMessageIdx !== -1) {\n const newReplyToMid = newMids[replyToMessageIdx];\n message.reply_to = {\n _: 'messageReplyHeader',\n reply_to_msg_id: newReplyToMid,\n pFlags: {}\n };\n\n /* this.invokeAfterMessageIsSent(newReplyToMid, 'reply', async(originalMessage) => {\n message.reply_to.reply_to_msg_id = originalMessage.mid;\n }); */\n }\n\n keys.forEach((key) => {\n // @ts-ignore\n message[key] = copy(originalMessage[key]);\n });\n\n const document = (message.media as MessageMedia.messageMediaDocument)?.document as MyDocument;\n if(document) {\n const types: MyDocument['type'][] = ['round', 'voice'];\n if(types.includes(document.type)) {\n (message as MyMessage).pFlags.media_unread = true;\n }\n\n if(document.sticker && !this.rootScope.premium) {\n const effectThumb = getStickerEffectThumb(document);\n if(effectThumb) {\n (message.media as MessageMedia.messageMediaDocument).pFlags.nopremium = true;\n }\n }\n }\n\n if(originalMessage.grouped_id) {\n const group = groups[originalMessage.grouped_id] ??= {tempId: '' + ++this.groupedTempId, messages: []};\n group.messages.push(message);\n }\n\n return message;\n });\n\n for(const groupId in groups) {\n const group = groups[groupId];\n if(group.messages.length > 1) {\n group.messages.forEach((message) => {\n message.grouped_id = group.tempId;\n });\n }\n }\n\n newMessages.forEach((message) => {\n this.beforeMessageSending(message, {\n isScheduled: !!options.scheduleDate || undefined,\n sequential: true\n });\n });\n\n const sentRequestOptions: PendingAfterMsg = {};\n if(this.pendingAfterMsgs[peerId]) {\n sentRequestOptions.afterMessageId = this.pendingAfterMsgs[peerId].messageId;\n }\n\n const promise = /* true ? Promise.resolve() : */this.apiManager.invokeApiAfter('messages.forwardMessages', {\n from_peer: this.appPeersManager.getInputPeerById(fromPeerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n random_id: newMessages.map((message) => message.random_id),\n to_peer: this.appPeersManager.getInputPeerById(peerId),\n with_my_score: options.withMyScore,\n silent: options.silent,\n schedule_date: options.scheduleDate,\n drop_author: options.dropAuthor,\n drop_media_captions: options.dropCaptions,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined\n }, sentRequestOptions).then((updates) => {\n this.log('forwardMessages updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n }, (error: ApiError) => {\n this.onMessagesSendError(newMessages, error);\n throw error;\n }).finally(() => {\n if(this.pendingAfterMsgs[peerId] === sentRequestOptions) {\n delete this.pendingAfterMsgs[peerId];\n }\n });\n\n this.pendingAfterMsgs[peerId] = sentRequestOptions;\n\n const promises: (typeof promise)[] = [promise];\n if(overflowMids.length) {\n promises.push(this.forwardMessages(peerId, fromPeerId, overflowMids, options));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public generateEmptyMessage(mid: number): Message.message | Message.messageService {\n return undefined;\n // return {\n // _: 'messageEmpty',\n // id: getServerMessageId(mid),\n // mid,\n // deleted: true,\n // pFlags: {}\n // };\n }\n\n private onMessagesSendError(messages: Message.message[], error?: ApiError) {\n messages.forEach((message) => {\n if(message.error === error) {\n return;\n }\n\n if(error) {\n message.error = error;\n this.rootScope.dispatchEvent('message_error', {storageKey: message.storageKey, tempId: message.mid, error});\n\n const dialog = this.getDialogOnly(message.peerId);\n if(dialog) {\n this.rootScope.dispatchEvent('dialog_unread', {peerId: message.peerId, dialog});\n }\n } else {\n delete message.error;\n }\n });\n }\n\n public getMessagesStorageByKey(key: MessagesStorageKey) {\n const s = key.split('_');\n const peerId: PeerId = +s[0];\n const type: MessagesStorageType = s[1] as any;\n return type === 'scheduled' ? this.getScheduledMessagesStorage(peerId) : this.getHistoryMessagesStorage(peerId);\n }\n\n public getMessageFromStorage(storage: MessagesStorage | MessagesStorageKey, mid: number) {\n if(typeof(storage) === 'string') {\n storage = this.getMessagesStorageByKey(storage);\n }\n\n return storage && storage.get(mid)/* || this.generateEmptyMessage(mid) */;\n }\n\n private createMessageStorage(peerId: PeerId, type: MessagesStorageType) {\n const storage: MessagesStorage = new Map() as any;\n storage.peerId = peerId;\n storage.type = type;\n storage.key = `${peerId}_${type}`;\n\n /* let num = 0;\n Object.defineProperty(storage, 'num', {\n get: () => ++num,\n set: (_num: number) => num = _num,\n enumerable: false\n });\n\n Object.defineProperty(storage, 'generateIndex', {\n value: (message: any) => {\n if(message.index === undefined) {\n message.index = (message.date * 0x10000) + (storage.num & 0xFFFF);\n }\n },\n enumerable: false\n }); */\n\n return storage;\n }\n\n public getHistoryMessagesStorage(peerId: PeerId) {\n return this.messagesStorageByPeerId[peerId] ??= this.createMessageStorage(peerId, 'history');\n }\n\n public getMessagesStorage(key: MessagesStorageKey | MessagesStorage): MessagesStorage {\n if(typeof(key) === 'object') {\n return key;\n } else {\n return this.getMessagesStorageByKey(key);\n }\n }\n\n public getMessageById(messageId: number) {\n for(const peerId in this.messagesStorageByPeerId) {\n if(this.appPeersManager.isChannel(peerId.toPeerId())) {\n continue;\n }\n\n const message = this.messagesStorageByPeerId[peerId].get(messageId);\n if(message) {\n return message;\n }\n }\n\n return this.getMessageFromStorage(null, messageId);\n }\n\n public getMessageByPeer(peerId: PeerId, messageId: number) {\n if(!peerId) {\n return this.getMessageById(messageId);\n }\n\n return this.getMessageFromStorage(this.getHistoryMessagesStorage(peerId), messageId);\n }\n\n public getMessagePeer(message: any): PeerId {\n const toId = message.peer_id && this.appPeersManager.getPeerId(message.peer_id) || NULL_PEER_ID;\n\n return toId;\n }\n\n public getDialogOnly(peerId: PeerId) {\n return this.dialogsStorage.getDialogOnly(peerId);\n }\n\n public cantForwardDeleteMids(storageKey: MessagesStorageKey, mids: number[]) {\n const storage = this.getMessagesStorage(storageKey);\n let cantForward = !mids.length, cantDelete = !mids.length;\n for(const mid of mids) {\n const message = this.getMessageFromStorage(storage, mid);\n if(!cantForward) {\n cantForward = !this.canForward(message);\n }\n\n if(!cantDelete) {\n cantDelete = !this.canDeleteMessage(message);\n }\n\n if(cantForward && cantDelete) break;\n }\n\n return {cantForward, cantDelete};\n }\n\n public reloadConversationOrTopic(peerId: PeerId, threadId?: number) {\n if(threadId) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n this.reloadConversation(peerId);\n }\n }\n\n public reloadConversation(inputPeer?: PeerId | InputPeer): CancellablePromise;\n public reloadConversation(inputPeer: PeerId | InputPeer) {\n let promise: CancellablePromise;\n if(inputPeer !== undefined) {\n const peerId = this.appPeersManager.getPeerId(inputPeer);\n this.log.warn('reloadConversation', peerId);\n\n let obj = this.reloadConversationsPeers.get(peerId);\n if(obj) {\n promise = obj.promise;\n }\n\n if(promise) {\n return promise;\n }\n\n promise = deferredPromise();\n this.reloadConversationsPeers.set(peerId, obj = {\n inputDialogPeer: this.appPeersManager.getInputDialogPeerById(inputPeer),\n promise\n });\n }\n\n if(this.reloadConversationsPromise) {\n return promise || this.reloadConversationsPromise;\n }\n\n this.reloadConversationsPromise = pause(0).then(() => {\n const inputDialogPeers: InputDialogPeer[] = [];\n const promises: {[peerId: string]: typeof promise} = {};\n for(const [peerId, {inputDialogPeer, promise}] of this.reloadConversationsPeers) {\n inputDialogPeers.push(inputDialogPeer);\n promises[peerId] = promise;\n }\n\n const fullfillLeft = () => {\n for(const peerId in promises) {\n this.reloadConversationsPeers.delete(+peerId);\n promises[peerId].resolve(undefined);\n }\n };\n\n const invoke = async() => {\n for(;;) {\n const result = await this.apiManager.invokeApi('messages.getPeerDialogs', {peers: inputDialogPeers});\n const currentState = this.apiUpdatesManager.updatesState;\n const {state} = result;\n if(currentState.pts && currentState.pts !== state.pts) {\n await pause(500);\n continue;\n }\n\n return result;\n }\n };\n\n return invoke().then((result) => {\n for(const peerId in promises) {\n this.reloadConversationsPeers.delete(+peerId);\n }\n\n this.dialogsStorage.applyDialogs(result);\n\n result.dialogs.forEach((dialog) => {\n const peerId = dialog.peerId;\n if(peerId) {\n promises[peerId].resolve(dialog as Dialog);\n delete promises[peerId];\n }\n });\n }, noop).then(() => {\n fullfillLeft();\n\n this.reloadConversationsPromise = null;\n if(this.reloadConversationsPeers.size) {\n this.reloadConversation();\n }\n });\n });\n\n return promise || this.reloadConversationsPromise;\n }\n\n private doFlushHistory(peerId: PeerId, just_clear?: boolean, revoke?: boolean, threadId?: number): Promise {\n let promise: Promise;\n const processResult = (affectedHistory: MessagesAffectedHistory) => {\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updateShort',\n update: {\n _: 'updatePts',\n pts: affectedHistory.pts,\n pts_count: affectedHistory.pts_count\n }\n });\n\n if(!affectedHistory.offset) {\n return true;\n }\n\n return this.doFlushHistory(peerId, just_clear, revoke, threadId);\n };\n\n if(!threadId) {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'messages.deleteHistory',\n params: {\n just_clear,\n revoke,\n peer: this.appPeersManager.getInputPeerById(peerId),\n max_id: 0\n },\n processResult\n });\n } else {\n promise = this.apiManager.invokeApiSingleProcess({\n method: 'channels.deleteTopicHistory',\n params: {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n top_msg_id: getServerMessageId(threadId)\n },\n processResult\n });\n }\n\n return promise;\n }\n\n public async flushHistory(peerId: PeerId, justClear?: boolean, revoke?: boolean, threadId?: number) {\n if(this.appPeersManager.isChannel(peerId) && !threadId) {\n const promise = this.getHistory(peerId, 0, 1);\n\n const historyResult = await promise;\n\n const channelId = peerId.toChatId();\n const maxId = historyResult.history[0] || 0;\n return this.apiManager.invokeApiSingle('channels.deleteHistory', {\n channel: this.appChatsManager.getChannelInput(channelId),\n max_id: getServerMessageId(maxId)\n }).then((bool) => {\n if(bool) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateChannelAvailableMessages',\n channel_id: channelId,\n available_min_id: maxId\n });\n }\n\n return bool;\n });\n }\n\n return this.doFlushHistory(peerId, justClear, revoke, threadId).then(() => {\n if(!threadId) {\n this.flushStoragesByPeerId(peerId);\n }\n\n if(justClear) {\n this.rootScope.dispatchEvent('dialog_flush', {peerId, dialog: this.getDialogOnly(peerId)});\n } else {\n const key = this.getTypingKey(peerId, threadId);\n delete this.notificationsToHandle[key];\n delete this.typings[key];\n\n if(!threadId) {\n const c = this.reloadConversationsPeers.get(peerId);\n if(c) {\n this.reloadConversationsPeers.delete(peerId);\n c.promise.resolve(undefined);\n }\n }\n\n this.dialogsStorage.dropDialogOnDeletion(peerId, threadId);\n }\n });\n }\n\n private flushStoragesByPeerId(peerId: PeerId) {\n [\n this.historiesStorage,\n this.threadsStorage,\n this.searchesStorage,\n this.pendingAfterMsgs,\n this.pendingTopMsgs\n ].forEach((s) => {\n delete s[peerId];\n });\n\n for(const key in this.pinnedMessages) {\n if(+key === peerId || key.startsWith(peerId + '_')) {\n delete this.pinnedMessages[key];\n }\n }\n\n const needSingleMessages = this.needSingleMessages.get(peerId);\n if(needSingleMessages) {\n for(const [mid, promise] of needSingleMessages) {\n promise.resolve(this.generateEmptyMessage(mid));\n }\n\n needSingleMessages.clear();\n }\n\n [\n this.messagesStorageByPeerId,\n this.scheduledMessagesStorage\n ].forEach((s) => {\n const ss = s[peerId];\n if(ss) {\n ss.clear();\n }\n });\n\n this.dialogsStorage.flushForumTopicsCache(peerId);\n }\n\n public hidePinnedMessages(peerId: PeerId) {\n return Promise.all([\n this.appStateManager.getState(),\n this.getPinnedMessage(peerId)\n ])\n .then(([state, pinned]) => {\n state.hiddenPinnedMessages[peerId] = pinned.maxId;\n this.rootScope.dispatchEvent('peer_pinned_hidden', {peerId, maxId: pinned.maxId});\n });\n }\n\n public getPinnedMessagesKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n public getPinnedMessage(peerId: PeerId, threadId?: number) {\n const p = this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)] ??= {};\n if(p.promise) return p.promise;\n else if(p.maxId) return Promise.resolve(p);\n\n return p.promise = this.getSearch({\n peerId,\n inputFilter: {_: 'inputMessagesFilterPinned'},\n maxId: 0,\n limit: 1,\n threadId\n }).then((result) => {\n p.count = result.count;\n p.maxId = result.history[0]?.mid;\n return p;\n }).finally(() => {\n delete p.promise;\n });\n }\n\n public getPinnedMessagesCount(peerId: PeerId, threadId?: number) {\n return this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)]?.count;\n }\n\n public getPinnedMessagesMaxId(peerId: PeerId, threadId?: number) {\n return this.pinnedMessages[this.getPinnedMessagesKey(peerId, threadId)]?.maxId;\n }\n\n public updatePinnedMessage(peerId: PeerId, mid: number, unpin?: boolean, silent?: boolean, pm_oneside?: boolean) {\n return this.apiManager.invokeApi('messages.updatePinnedMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n unpin,\n silent,\n pm_oneside,\n id: getServerMessageId(mid)\n }).then((updates) => {\n // this.log('pinned updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public unpinAllMessages(peerId: PeerId): Promise {\n return this.apiManager.invokeApiSingle('messages.unpinAllMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId)\n }).then((affectedHistory) => {\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updateShort',\n update: {\n _: 'updatePts',\n pts: affectedHistory.pts,\n pts_count: affectedHistory.pts_count\n }\n });\n\n if(!affectedHistory.offset) {\n const storage = this.getHistoryMessagesStorage(peerId);\n storage.forEach((message) => {\n if((message as Message.message).pFlags.pinned) {\n delete (message as Message.message).pFlags.pinned;\n }\n });\n\n this.rootScope.dispatchEvent('peer_pinned_messages', {peerId, unpinAll: true});\n delete this.pinnedMessages[this.getPinnedMessagesKey(peerId)];\n\n return true;\n }\n\n return this.unpinAllMessages(peerId);\n });\n }\n\n public getAlbumText(grouped_id: string) {\n const group = this.groupedMessagesStorage[grouped_id];\n return getAlbumText(Array.from(group.values()) as Message.message[]);\n }\n\n public getGroupsFirstMessage(message: Message.message) {\n if(!message?.grouped_id) return message;\n\n const storage = this.groupedMessagesStorage[message.grouped_id];\n let minMid = Number.MAX_SAFE_INTEGER;\n for(const [mid, message] of storage) {\n if(message.mid < minMid) {\n minMid = message.mid;\n }\n }\n\n return this.getMessageFromStorage(storage, minMid) as Message.message;\n }\n\n public getMidsByAlbum(groupedId: string, sort: 'asc' | 'desc' = 'asc') {\n return getObjectKeysAndSort(this.groupedMessagesStorage[groupedId], sort);\n }\n\n public getMessagesByAlbum(groupedId: string) {\n const mids = this.getMidsByAlbum(groupedId, 'asc');\n const storage = this.groupedMessagesStorage[groupedId];\n return mids.map((mid) => this.getMessageFromStorage(storage, mid) as Message.message);\n }\n\n public getMidsByMessage(message: Message) {\n if(!message) return [];\n else if((message as Message.message).grouped_id) return this.getMidsByAlbum((message as Message.message).grouped_id);\n else return [message.mid];\n }\n\n public filterMessages(message: MyMessage, verify: (message: MyMessage) => boolean) {\n const out: MyMessage[] = [];\n if((message as Message.message).grouped_id) {\n const storage = this.groupedMessagesStorage[(message as Message.message).grouped_id];\n for(const [mid, message] of storage) {\n if(verify(message)) {\n out.push(message);\n }\n }\n } else {\n if(verify(message)) {\n out.push(message);\n }\n }\n\n return out;\n }\n\n public generateTempMessageId(peerId: PeerId) {\n const dialog = this.getDialogOnly(peerId);\n return this.appMessagesIdsManager.generateTempMessageId(dialog?.top_message || 0);\n }\n\n public setMessageUnreadByDialog(message: MyMessage, dialog: Dialog | ForumTopic = this.getDialogOnly(message.peerId)) {\n if(dialog && message.mid) {\n if(message.mid > dialog[message.pFlags.out ?\n 'read_outbox_max_id' :\n 'read_inbox_max_id']) {\n message.pFlags.unread = true;\n }\n }\n }\n\n public saveMessage(message: Message, options: Partial<{\n storage: MessagesStorage,\n isScheduled: true,\n isOutgoing: true,\n // isNew: boolean, // * new - from update\n }> = {}) {\n if(!message || message._ === 'messageEmpty') {\n return;\n }\n\n message.pFlags ??= {};\n\n // * exclude from state\n // defineNotNumerableProperties(message, ['rReply', 'mid', 'savedFrom', 'fwdFromId', 'fromId', 'peerId', 'reply_to_mid', 'viaBotId']);\n\n const peerId = this.getMessagePeer(message);\n const storage = options.storage || this.getHistoryMessagesStorage(peerId);\n const isChannel = message.peer_id._ === 'peerChannel';\n const isBroadcast = isChannel && this.appChatsManager.isBroadcast(peerId.toChatId());\n const isMessage = message._ === 'message';\n\n if(options.isOutgoing) {\n message.pFlags.is_outgoing = true;\n }\n\n const mid = generateMessageId(message.id);\n message.mid = mid;\n\n if(isMessage) {\n if(options.isScheduled) {\n message.pFlags.is_scheduled = true;\n }\n\n if(message.grouped_id) {\n const storage = this.groupedMessagesStorage[message.grouped_id] ??= this.createMessageStorage(peerId, 'grouped');\n storage.set(mid, message);\n }\n\n if(message.via_bot_id) {\n // ! WARNING\n message.viaBotId = message.via_bot_id as any;\n }\n }\n\n // this.log(dT(), 'msg unread', mid, apiMessage.pFlags.out, dialog && dialog[apiMessage.pFlags.out ? 'read_outbox_max_id' : 'read_inbox_max_id'])\n\n const replyTo = message.reply_to;\n if(replyTo) {\n if(replyTo.reply_to_msg_id) {\n replyTo.reply_to_msg_id = message.reply_to_mid = generateMessageId(replyTo.reply_to_msg_id);\n }\n\n if(replyTo.reply_to_top_id) {\n replyTo.reply_to_top_id = generateMessageId(replyTo.reply_to_top_id);\n }\n }\n\n const replies = isMessage && message.replies;\n if(replies) {\n if(replies.max_id) replies.max_id = generateMessageId(replies.max_id);\n if(replies.read_max_id) replies.read_max_id = generateMessageId(replies.read_max_id);\n }\n\n const overwriting = !!peerId;\n if(!overwriting) {\n message.date -= this.timeManager.getServerTimeOffset();\n }\n\n // storage.generateIndex(message);\n const myId = this.appPeersManager.peerId;\n\n const fwdHeader = isMessage && (message as Message.message).fwd_from;\n\n message.peerId = peerId;\n if(peerId === myId/* && !message.from_id && !message.fwd_from */) {\n message.fromId = fwdHeader ? (fwdHeader.from_id ? this.appPeersManager.getPeerId(fwdHeader.from_id) : NULL_PEER_ID) : myId;\n } else {\n // message.fromId = message.pFlags.post || (!message.pFlags.out && !message.from_id) ? peerId : appPeersManager.getPeerId(message.from_id);\n message.fromId = message.pFlags.post || !message.from_id ? peerId : this.appPeersManager.getPeerId(message.from_id);\n }\n\n this.setMessageUnreadByDialog(message);\n\n if(fwdHeader) {\n // if(peerId === myID) {\n if(fwdHeader.saved_from_msg_id) fwdHeader.saved_from_msg_id = generateMessageId(fwdHeader.saved_from_msg_id);\n if(fwdHeader.channel_post) fwdHeader.channel_post = generateMessageId(fwdHeader.channel_post);\n\n const peer = fwdHeader.saved_from_peer || fwdHeader.from_id;\n const msgId = fwdHeader.saved_from_msg_id || fwdHeader.channel_post;\n if(peer && msgId) {\n const savedFromPeerId = this.appPeersManager.getPeerId(peer);\n const savedFromMid = generateMessageId(msgId);\n message.savedFrom = savedFromPeerId + '_' + savedFromMid;\n }\n\n /* if(peerId.isAnyChat() || peerId === myID) {\n message.fromId = appPeersManager.getPeerID(!message.from_id || deepEqual(message.from_id, fwdHeader.from_id) ? fwdHeader.from_id : message.from_id);\n } */\n /* } else {\n apiMessage.fwdPostID = fwdHeader.channel_post;\n } */\n\n message.fwdFromId = this.appPeersManager.getPeerId(fwdHeader.from_id);\n\n if(!overwriting) {\n fwdHeader.date -= this.timeManager.getServerTimeOffset();\n }\n }\n\n const mediaContext: ReferenceContext = {\n type: 'message',\n peerId,\n messageId: mid\n };\n\n /* if(isMessage) {\n const entities = message.entities;\n if(entities && entities.find((entity) => entity._ === 'messageEntitySpoiler')) {\n message.media = {_: 'messageMediaUnsupported'};\n }\n } */\n\n let unsupported = false;\n const media = isMessage && message.media;\n if(media) {\n switch(media._) {\n case 'messageMediaEmpty': {\n delete message.media;\n break;\n }\n\n case 'messageMediaPhoto': {\n if(media.ttl_seconds) {\n unsupported = true;\n } else {\n media.photo = this.appPhotosManager.savePhoto(media.photo, mediaContext);\n }\n\n if(!(media as MessageMedia.messageMediaPhoto).photo) { // * found this bug on test DC\n delete message.media;\n }\n\n break;\n }\n\n case 'messageMediaPoll': {\n const result = this.appPollsManager.savePoll(media.poll, media.results, message);\n media.poll = result.poll;\n media.results = result.results;\n break;\n }\n\n case 'messageMediaDocument': {\n if(media.ttl_seconds) {\n unsupported = true;\n } else {\n const originalDoc = media.document;\n media.document = this.appDocsManager.saveDoc(originalDoc, mediaContext); // 11.04.2020 warning\n\n if(!media.document && originalDoc._ !== 'documentEmpty') {\n unsupported = true;\n }\n }\n\n break;\n }\n\n case 'messageMediaWebPage': {\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(peerId, mid, options.isScheduled);\n media.webpage = this.appWebPagesManager.saveWebPage(media.webpage, messageKey, mediaContext);\n\n if(!media.webpage) {\n delete message.media;\n }\n\n break;\n }\n\n /* case 'messageMediaGame':\n AppGamesManager.saveGame(apiMessage.media.game, apiMessage.mid, mediaContext);\n apiMessage.media.handleMessage = true;\n break; */\n\n case 'messageMediaInvoice': {\n media.photo = this.appWebDocsManager.saveWebDocument(media.photo);\n const extendedMedia = media.extended_media;\n if(extendedMedia?._ === 'messageExtendedMedia') {\n const extendedMediaMedia = extendedMedia.media;\n (extendedMediaMedia as MessageMedia.messageMediaPhoto).photo = this.appPhotosManager.savePhoto((extendedMediaMedia as MessageMedia.messageMediaPhoto).photo, mediaContext);\n (extendedMediaMedia as MessageMedia.messageMediaDocument).document = this.appDocsManager.saveDoc((extendedMediaMedia as MessageMedia.messageMediaDocument).document, mediaContext);\n }\n break;\n }\n\n case 'messageMediaUnsupported': {\n unsupported = true;\n break;\n }\n }\n }\n\n // if(isMessage && !unsupported && message.entities) {\n // unsupported = message.entities.some((entity) => entity._ === 'messageEntityCustomEmoji');\n // }\n\n if(isMessage && unsupported) {\n message.media = {_: 'messageMediaUnsupported'};\n message.message = '';\n delete message.entities;\n delete message.totalEntities;\n }\n\n if(!isMessage && message.action) {\n const action = message.action as MessageAction;\n const suffix = message.fromId === this.appUsersManager.getSelf().id ? 'You' : '';\n let migrateFrom: PeerId, migrateTo: PeerId;\n\n if((action as MessageAction.messageActionChatEditPhoto).photo) {\n (action as MessageAction.messageActionChatEditPhoto).photo = this.appPhotosManager.savePhoto((action as MessageAction.messageActionChatEditPhoto).photo, mediaContext);\n }\n\n if((action as any).document) {\n (action as any).document = this.appDocsManager.saveDoc((action as any).photo, mediaContext);\n }\n\n switch(action._) {\n // case 'messageActionChannelEditPhoto':\n case 'messageActionChatEditPhoto':\n // action.photo = appPhotosManager.savePhoto(action.photo, mediaContext);\n if((action.photo as Photo.photo)?.video_sizes) {\n // @ts-ignore\n action._ = isBroadcast ? 'messageActionChannelEditVideo' : 'messageActionChatEditVideo';\n } else {\n if(isBroadcast) { // ! messageActionChannelEditPhoto ะฝะต ััƒั‰ะตัั‚ะฒัƒะตั‚ ะฒ ะฟั€ะธะฝั†ะธะฟะต, ัั‚ะพ ะธัะฟะพะปัŒะทัƒะตั‚ัั ะดะปั ะฟะตั€ะตะฒะพะดะฐ.\n // @ts-ignore\n action._ = 'messageActionChannelEditPhoto';\n }\n }\n break;\n\n case 'messageActionGroupCall': {\n // assumeType(action);\n\n this.appGroupCallsManager.saveGroupCall(action.call);\n\n let type: string;\n if(action.duration === undefined) {\n type = 'started';\n } else {\n type = 'ended'\n }\n\n if(!isBroadcast) {\n type += '_by' + suffix;\n }\n\n // @ts-ignore\n action.type = type;\n\n break;\n }\n\n case 'messageActionChatEditTitle':\n /* if(options.isNew) {\n const chat = appChatsManager.getChat(peerId.toChatId());\n chat.title = action.title;\n appChatsManager.saveApiChat(chat, true);\n } */\n\n if(isBroadcast) {\n // @ts-ignore\n action._ = 'messageActionChannelEditTitle';\n }\n break;\n\n case 'messageActionChatDeletePhoto':\n if(isBroadcast) {\n // @ts-ignore\n action._ = 'messageActionChannelDeletePhoto';\n }\n break;\n\n case 'messageActionChatAddUser':\n if(action.users.length === 1) {\n // @ts-ignore\n action.user_id = action.users[0];\n // @ts-ignore\n if(message.fromId === action.user_id) {\n if(isChannel) {\n // @ts-ignore\n action._ = 'messageActionChatJoined' + suffix;\n } else {\n // @ts-ignore\n action._ = 'messageActionChatReturn' + suffix;\n }\n }\n } else if(action.users.length > 1) {\n // @ts-ignore\n action._ = 'messageActionChatAddUsers';\n }\n break;\n\n case 'messageActionChatDeleteUser':\n if(message.fromId === action.user_id) {\n // @ts-ignore\n action._ = 'messageActionChatLeave' + suffix;\n }\n break;\n\n case 'messageActionChannelMigrateFrom':\n migrateFrom = action.chat_id.toPeerId(true);\n migrateTo = peerId;\n break\n\n case 'messageActionChatMigrateTo':\n migrateFrom = peerId;\n migrateTo = action.channel_id.toPeerId(true);\n break;\n\n case 'messageActionHistoryClear':\n // apiMessage.deleted = true;\n message.clear_history = true;\n delete message.pFlags.out;\n delete message.pFlags.unread;\n break;\n\n case 'messageActionPhoneCall':\n // @ts-ignore\n action.type =\n (action.pFlags.video ? 'video_' : '') +\n (action.duration !== undefined ? (message.pFlags.out ? 'out_' : 'in_') : '') +\n (\n action.duration !== undefined ? 'ok' : (\n action.reason._ === 'phoneCallDiscardReasonMissed' ?\n 'missed' :\n 'cancelled'\n )\n );\n break;\n }\n\n if(migrateFrom &&\n migrateTo &&\n !this.migratedFromTo[migrateFrom] &&\n !this.migratedToFrom[migrateTo]) {\n this.migrateChecks(migrateFrom, migrateTo);\n }\n }\n\n /* if(message.grouped_id) {\n if(!groups) {\n groups = new Set();\n }\n\n groups.add(message.grouped_id);\n } else {\n message.rReply = this.getRichReplyText(message);\n } */\n\n if(isMessage && message.message.length && !message.totalEntities) {\n this.wrapMessageEntities(message);\n }\n\n storage.set(mid, message);\n\n return message;\n }\n\n public saveMessages(messages: any[], options: Partial<{\n storage: MessagesStorage,\n isScheduled: true,\n isOutgoing: true,\n // isNew: boolean, // * new - from update\n }> = {}): (Message.message | Message.messageService)[] {\n if((messages as any).saved) return messages;\n (messages as any).saved = true;\n messages.forEach((message, idx, arr) => {\n arr[idx] = this.saveMessage(message, options);\n });\n\n return messages;\n }\n\n public async getFirstMessageToEdit(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const slice = historyStorage.history.slice;\n if(slice.isEnd(SliceEnd.Bottom) && slice.length) {\n let goodMessage: Message.message | Message.messageService;\n const myPeerId = this.appPeersManager.peerId;\n for(const mid of slice) {\n const message = this.getMessageByPeer(peerId, mid);\n const good = myPeerId === peerId ? message.fromId === myPeerId : message.pFlags.out;\n\n if(good) {\n if(await this.canEditMessage(message, 'text')) {\n goodMessage = message;\n break;\n }\n\n // * this check will allow editing only last message\n // break;\n }\n }\n\n return goodMessage;\n }\n }\n\n private wrapMessageEntities(message: Message.message) {\n const apiEntities = message.entities ? message.entities.slice() : [];\n message.message = fixEmoji(message.message, apiEntities);\n\n const myEntities = parseEntities(message.message);\n message.totalEntities = mergeEntities(apiEntities, myEntities); // ! only in this order, otherwise bold and emoji formatting won't work\n }\n\n public reportMessages(peerId: PeerId, mids: number[], reason: ReportReason['_'], message?: string) {\n return this.apiManager.invokeApiSingle('messages.report', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n reason: {\n _: reason\n },\n message\n });\n }\n\n public startBot(botId: BotId, chatId?: ChatId, startParam?: string) {\n const peerId = chatId ? chatId.toPeerId(true) : botId.toPeerId();\n if(startParam) {\n const randomId = randomLong();\n\n return this.apiManager.invokeApi('messages.startBot', {\n bot: this.appUsersManager.getUserInput(botId),\n peer: this.appPeersManager.getInputPeerById(peerId),\n random_id: randomId,\n start_param: startParam\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n const str = '/start';\n if(chatId) {\n let promise: Promise;\n if(this.appChatsManager.isChannel(chatId)) {\n promise = this.appChatsManager.inviteToChannel(chatId, [botId]);\n } else {\n promise = this.appChatsManager.addChatUser(chatId, botId, 0);\n }\n\n return promise.catch((error: ApiError) => {\n if(error?.type == 'USER_ALREADY_PARTICIPANT') {\n error.handled = true;\n return;\n }\n\n throw error;\n }).then(() => {\n return this.sendText(peerId, str + '@' + this.appPeersManager.getPeerUsername(botId.toPeerId()));\n });\n }\n\n return this.sendText(peerId, str);\n }\n\n public editPeerFolders(peerIds: PeerId[], folderId: number) {\n this.apiManager.invokeApi('folders.editPeerFolders', {\n folder_peers: peerIds.map((peerId) => {\n return {\n _: 'inputFolderPeer',\n peer: this.appPeersManager.getInputPeerById(peerId),\n folder_id: folderId\n };\n })\n }).then((updates) => {\n // this.log('editPeerFolders updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates); // WARNING! ะฒะพะทะผะพะถะฝะพ ั‚ัƒั‚ ะฝัƒะถะฝะพ ะดะพะฑะฐะฒะปัั‚ัŒ channelId, ะธ ะฒั‹ะทั‹ะฒะฐั‚ัŒ ะฐะฟะดะตะนั‚ ะดะปั ะบะฐะถะดะพะณะพ ะบะฐะฝะฐะปะฐ ะพั‚ะดะตะปัŒะฝะพ\n });\n }\n\n public getFilter(filterId: number) {\n return this.filtersStorage.getFilter(filterId);\n }\n\n public async toggleDialogPin(options: {\n peerId: PeerId,\n filterId?: number,\n topicId?: number\n }) {\n const {peerId, topicId, filterId = topicId ? peerId : undefined} = options;\n if(filterId === undefined) {\n throw new Error('No filterId');\n }\n\n if(filterId > 1) {\n return this.filtersStorage.toggleDialogPin(peerId, filterId);\n }\n\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, topicId);\n if(!dialog) throw undefined;\n\n const pinned = dialog.pFlags?.pinned ? undefined : true;\n\n if(pinned) {\n const max = await this.apiManager.getLimit(topicId ? 'topicPin' : (filterId === 1 ? 'folderPin' : 'pin'));\n if(this.dialogsStorage.getPinnedOrders(filterId).length >= max) {\n throw makeError(topicId ? 'PINNED_TOO_MUCH' : 'PINNED_DIALOGS_TOO_MUCH');\n }\n }\n\n if(topicId) {\n return this.appChatsManager.updatePinnedForumTopic(peerId.toChatId(), topicId, pinned);\n }\n\n return this.apiManager.invokeApi('messages.toggleDialogPin', {\n peer: this.appPeersManager.getInputDialogPeerById(peerId),\n pinned\n }).then((bool) => {\n const pFlags: Update.updateDialogPinned['pFlags'] = pinned ? {pinned} : {};\n this.apiUpdatesManager.saveUpdate({\n _: 'updateDialogPinned',\n peer: this.appPeersManager.getDialogPeer(peerId),\n folder_id: filterId,\n pFlags\n });\n });\n }\n\n public markDialogUnread(peerId: PeerId, read?: true) {\n const dialog = this.getDialogOnly(peerId);\n if(!dialog) return Promise.reject();\n\n const unread = read || dialog.pFlags?.unread_mark ? undefined : true;\n return this.apiManager.invokeApi('messages.markDialogUnread', {\n peer: this.appPeersManager.getInputDialogPeerById(peerId),\n unread\n }).then((bool) => {\n if(bool) {\n const pFlags: Update.updateDialogUnreadMark['pFlags'] = unread ? {unread} : {};\n this.onUpdateDialogUnreadMark({\n _: 'updateDialogUnreadMark',\n peer: this.appPeersManager.getDialogPeer(peerId),\n pFlags\n });\n }\n });\n }\n\n public migrateChecks(migrateFrom: PeerId, migrateTo: PeerId) {\n if(!this.migratedFromTo[migrateFrom] &&\n !this.migratedToFrom[migrateTo] &&\n this.appChatsManager.hasChat(migrateTo.toChatId())) {\n const fromChat = this.appChatsManager.getChat(migrateFrom.toChatId()) as Chat.chat;\n if(fromChat?.migrated_to && (fromChat.migrated_to as InputChannel.inputChannel).channel_id === migrateTo.toChatId()) {\n this.migratedFromTo[migrateFrom] = migrateTo;\n this.migratedToFrom[migrateTo] = migrateFrom;\n\n this.rootScope.dispatchEvent('dialog_migrate', {migrateFrom, migrateTo});\n\n this.dialogsStorage.dropDialogWithEvent(migrateFrom);\n }\n }\n }\n\n private canMessageBeEdited(message: Message, kind: 'text' | 'poll') {\n if((message as Message.message)?.pFlags?.is_outgoing) {\n return false;\n }\n\n const goodMedias = [\n 'messageMediaPhoto',\n 'messageMediaDocument',\n 'messageMediaWebPage'\n ];\n\n if(kind === 'poll') {\n goodMedias.push('messageMediaPoll');\n }\n\n if(!message ||\n message._ !== 'message' ||\n message.deleted ||\n message.fwd_from ||\n message.via_bot_id ||\n message.media && goodMedias.indexOf(message.media._) === -1 ||\n message.fromId && this.appUsersManager.isBot(message.fromId)) {\n return false;\n }\n\n if(message.media?._ === 'messageMediaDocument' &&\n ((message.media.document as Document.document).sticker || (message.media.document as Document.document).type === 'round')) {\n return false;\n }\n\n return true;\n }\n\n public async canEditMessage(message: Message.message | Message.messageService, kind: 'text' | 'poll' = 'text') {\n if(!message || !this.canMessageBeEdited(message, kind)) {\n return false;\n }\n\n // * second rule for saved messages, because there is no 'out' flag\n if(/* message.pFlags.out || */this.getMessagePeer(message) === this.appUsersManager.getSelf().id) {\n return true;\n }\n\n const {peerId} = message;\n\n const canEditMessageInPeer = this.appPeersManager.isBroadcast(peerId) ?\n this.appChatsManager.hasRights(peerId.toChatId(), 'edit_messages') :\n (\n peerId.isAnyChat() && kind === 'text' ?\n this.appChatsManager.hasRights(peerId.toChatId(), 'send_plain') || this.appChatsManager.hasRights(peerId.toChatId(), 'send_media') :\n true\n ) && message.pFlags.out;\n\n if(\n !canEditMessageInPeer || (\n message.peer_id._ !== 'peerChannel' &&\n message.date < (tsNow(true) - (await this.apiManager.getConfig()).edit_time_limit) &&\n (message as Message.message).media?._ !== 'messageMediaPoll'\n )\n ) {\n return false;\n }\n\n return true;\n }\n\n public canDeleteMessage(message: MyMessage) {\n return message && (\n message.peerId.isUser() ||\n message.pFlags.out ||\n this.appChatsManager.getChat(message.peerId.toChatId())._ === 'chat' ||\n this.appChatsManager.hasRights(message.peerId.toChatId(), 'delete_messages')\n ) && (!message.pFlags.is_outgoing || !!message.error);\n }\n\n public getReplyKeyboard(peerId: PeerId) {\n return this.getHistoryStorage(peerId).replyMarkup;\n }\n\n public mergeReplyKeyboard(historyStorage: HistoryStorage, message: Message.messageService | Message.message) {\n // this.log('merge', message.mid, message.reply_markup, historyStorage.reply_markup)\n if(!message) {\n return false;\n }\n\n const messageReplyMarkup = (message as Message.message).reply_markup;\n if(!messageReplyMarkup &&\n !message.pFlags?.out &&\n !(message as Message.messageService).action) {\n return false;\n }\n\n if(messageReplyMarkup?._ === 'replyInlineMarkup') {\n return false;\n }\n\n const lastReplyMarkup = historyStorage.replyMarkup;\n if(messageReplyMarkup) {\n if(lastReplyMarkup && lastReplyMarkup.mid >= message.mid) {\n return false;\n }\n\n if(messageReplyMarkup.pFlags.selective) {\n return false;\n }\n\n if(historyStorage.maxOutId &&\n message.mid < historyStorage.maxOutId &&\n (messageReplyMarkup as ReplyMarkup.replyKeyboardMarkup | ReplyMarkup.replyKeyboardForceReply).pFlags.single_use) {\n (messageReplyMarkup as ReplyMarkup.replyKeyboardMarkup | ReplyMarkup.replyKeyboardForceReply).pFlags.hidden = true;\n }\n\n messageReplyMarkup.mid = message.mid;\n /* messageReplyMarkup = Object.assign({\n mid: message.mid\n }, messageReplyMarkup); */\n\n if(messageReplyMarkup._ !== 'replyKeyboardHide') {\n messageReplyMarkup.fromId = this.appPeersManager.getPeerId(message.from_id);\n }\n\n historyStorage.replyMarkup = messageReplyMarkup;\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n\n if(message.pFlags.out) {\n if(lastReplyMarkup) {\n assumeType(lastReplyMarkup);\n if(lastReplyMarkup.pFlags.single_use &&\n !lastReplyMarkup.pFlags.hidden &&\n (message.mid > lastReplyMarkup.mid || message.pFlags.is_outgoing) &&\n (message as Message.message).message) {\n lastReplyMarkup.pFlags.hidden = true;\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n } else if(!historyStorage.maxOutId ||\n message.mid > historyStorage.maxOutId) {\n historyStorage.maxOutId = message.mid;\n }\n }\n\n assumeType(message);\n if(message.action?._ === 'messageActionChatDeleteUser' &&\n (lastReplyMarkup ?\n message.action.user_id === (lastReplyMarkup as ReplyMarkup.replyKeyboardMarkup).fromId :\n this.appUsersManager.isBot(message.action.user_id)\n )\n ) {\n historyStorage.replyMarkup = {\n _: 'replyKeyboardHide',\n mid: message.mid,\n pFlags: {}\n };\n // this.log('set', historyStorage.reply_markup)\n return true;\n }\n\n return false;\n }\n\n public getSearchStorage(peerId: PeerId, inputFilter: MyInputMessagesFilter) {\n if(!this.searchesStorage[peerId]) this.searchesStorage[peerId] = {};\n if(!this.searchesStorage[peerId][inputFilter]) this.searchesStorage[peerId][inputFilter] = {history: []};\n return this.searchesStorage[peerId][inputFilter];\n }\n\n public getSearchCounters(\n peerId: PeerId,\n filters: MessagesFilter[],\n canCache = true,\n threadId?: number\n ): Promise {\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return Promise.resolve(filters.map((filter) => {\n return {\n _: 'messages.searchCounter',\n pFlags: {},\n filter: filter,\n count: 0\n };\n }));\n }\n\n const func = (canCache ? this.apiManager.invokeApiCacheable : this.apiManager.invokeApi).bind(this.apiManager);\n return func('messages.getSearchCounters', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n filters,\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n });\n }\n\n public filterMessagesByInputFilterFromStorage(inputFilter: MyInputMessagesFilter, history: number[], storage: MessagesStorage | MessagesStorageKey, limit: number) {\n const _storage = this.getMessagesStorage(storage);\n return filterMessagesByInputFilter(inputFilter, history.map((mid) => _storage.get(mid)), limit);\n }\n\n public getSearch({peerId, query, inputFilter, maxId, limit, nextRate, backLimit, threadId, folderId, minDate, maxDate}: {\n peerId?: PeerId,\n maxId?: number,\n limit?: number,\n nextRate?: number,\n backLimit?: number,\n threadId?: number,\n folderId?: number,\n query?: string,\n inputFilter?: {\n _: MyInputMessagesFilter\n },\n minDate?: number,\n maxDate?: number\n }): Promise<{\n count: number,\n next_rate: number,\n offset_id_offset: number,\n history: MyMessage[]\n }> {\n if(this.appPeersManager.isPeerRestricted(peerId)/* || true */) {\n return Promise.resolve({\n count: 0,\n offset_id_offset: 0,\n next_rate: undefined,\n history: []\n });\n }\n\n if(!query) query = '';\n if(!inputFilter) inputFilter = {_: 'inputMessagesFilterEmpty'};\n if(limit === undefined) limit = 20;\n if(!nextRate) nextRate = 0;\n if(!backLimit) backLimit = 0;\n\n minDate = minDate ? minDate / 1000 | 0 : 0;\n maxDate = maxDate ? maxDate / 1000 | 0 : 0;\n\n let foundMsgs: MyMessage[] = [];\n\n // this.log('search', maxId);\n\n if(backLimit) {\n limit += backLimit;\n }\n\n // const beta = inputFilter._ === 'inputMessagesFilterPinned' && !backLimit;\n const beta = false;\n\n let storage: {\n count?: number;\n history: SlicedArray;\n };\n\n // * ะบะพัั‚ั‹ะปัŒ ะดะปั limit 1, ะตัะปะธ ะฝัƒะถะฝะพ ะธ ะฟะพะปัƒั‡ะธั‚ัŒ ัะพะพะฑั‰ะตะฝะธะต, ะธ ัƒะทะฝะฐั‚ัŒ ะบะพะปะธั‡ะตัั‚ะฒะพ ัะพะพะฑั‰ะตะฝะธะน\n if(peerId && !backLimit && !maxId && !query && limit !== 1 && !threadId/* && inputFilter._ !== 'inputMessagesFilterPinned' */) {\n storage = beta ?\n this.getSearchStorage(peerId, inputFilter._) as any :\n this.getHistoryStorage(peerId);\n foundMsgs = this.filterMessagesByInputFilterFromStorage(inputFilter._, storage.history.slice, this.getHistoryMessagesStorage(peerId), limit);\n }\n\n if(foundMsgs.length) {\n if(foundMsgs.length < limit && (beta ? storage.count !== storage.history.length : true)) {\n maxId = foundMsgs[foundMsgs.length - 1].mid;\n limit = limit - foundMsgs.length;\n } else {\n return Promise.resolve({\n count: beta ? storage.count : 0,\n next_rate: 0,\n offset_id_offset: 0,\n history: foundMsgs\n });\n }\n } else if(beta && storage?.count) {\n return Promise.resolve({\n count: storage.count,\n next_rate: 0,\n offset_id_offset: 0,\n history: []\n });\n }\n\n const canCache = false && (['inputMessagesFilterChatPhotos', 'inputMessagesFilterPinned'] as MyInputMessagesFilter[]).includes(inputFilter._);\n const method = (canCache ? this.apiManager.invokeApiCacheable : this.apiManager.invokeApi).bind(this.apiManager);\n\n let apiPromise: Promise;\n if(peerId && !nextRate && folderId === undefined/* || !query */) {\n apiPromise = method('messages.search', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n q: query || '',\n filter: inputFilter as any as MessagesFilter,\n min_date: minDate,\n max_date: maxDate,\n limit,\n offset_id: getServerMessageId(maxId) || 0,\n add_offset: backLimit ? -backLimit : 0,\n max_id: 0,\n min_id: 0,\n hash: '',\n top_msg_id: getServerMessageId(threadId) || 0\n }, {\n // timeout: APITIMEOUT,\n noErrorBox: true\n });\n } else {\n // var offsetDate = 0;\n let offsetPeerId: PeerId;\n let offsetId = 0;\n const offsetMessage = maxId && this.getMessageByPeer(peerId, maxId);\n\n if(offsetMessage && offsetMessage.date) {\n // offsetDate = offsetMessage.date + timeManager.getServerTimeOffset();\n offsetId = offsetMessage.id;\n offsetPeerId = this.getMessagePeer(offsetMessage);\n }\n\n apiPromise = method('messages.searchGlobal', {\n q: query,\n filter: inputFilter as any as MessagesFilter,\n min_date: minDate,\n max_date: maxDate,\n offset_rate: nextRate,\n offset_peer: this.appPeersManager.getInputPeerById(offsetPeerId),\n offset_id: offsetId,\n limit,\n folder_id: folderId\n }, {\n // timeout: APITIMEOUT,\n noErrorBox: true\n });\n }\n\n return apiPromise.then((searchResult: any) => {\n this.appUsersManager.saveApiUsers(searchResult.users);\n this.appChatsManager.saveApiChats(searchResult.chats);\n this.saveMessages(searchResult.messages);\n\n /* if(beta && storage && (!maxId || storage.history[storage.history.length - 1] === maxId)) {\n const storage = this.getSearchStorage(peerId, inputFilter._);\n const add = (searchResult.messages.map((m: any) => m.mid) as number[]).filter((mid) => storage.history.indexOf(mid) === -1);\n storage.history.push(...add);\n storage.history.sort((a, b) => b - a);\n storage.count = searchResult.count;\n } */\n\n if(DEBUG) {\n this.log('getSearch result:', inputFilter, searchResult);\n }\n\n const foundCount: number = searchResult.count || (foundMsgs.length + searchResult.messages.length);\n\n searchResult.messages.forEach((message: MyMessage) => {\n const peerId = this.getMessagePeer(message);\n if(peerId.isAnyChat()) {\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n if(chat.migrated_to) {\n this.migrateChecks(peerId, (chat.migrated_to as InputChannel.inputChannel).channel_id.toPeerId(true));\n }\n }\n\n foundMsgs.push(message);\n });\n\n return {\n count: foundCount,\n offset_id_offset: searchResult.offset_id_offset || 0,\n next_rate: searchResult.next_rate,\n history: foundMsgs\n };\n });\n }\n\n public subscribeRepliesThread(peerId: PeerId, mid: number) {\n const repliesKey = peerId + '_' + mid;\n for(const threadKey in this.threadsToReplies) {\n if(this.threadsToReplies[threadKey] === repliesKey) return;\n }\n\n this.getDiscussionMessage(peerId, mid);\n }\n\n public generateThreadServiceStartMessage(message: Message.message | Message.messageService) {\n const threadKey = message.peerId + '_' + message.mid;\n if(this.threadsServiceMessagesIdsStorage[threadKey]) return;\n\n const maxMessageId = getServerMessageId(Math.max(...this.getMidsByMessage(message)));\n const serviceStartMessage: Message.messageService = {\n _: 'messageService',\n pFlags: {\n is_single: true\n },\n id: this.appMessagesIdsManager.generateTempMessageId(maxMessageId),\n date: message.date,\n from_id: {_: 'peerUser', user_id: NULL_PEER_ID}/* message.from_id */,\n peer_id: message.peer_id,\n action: {\n _: 'messageActionDiscussionStarted'\n },\n reply_to: this.generateReplyHeader(message.peerId, message.id)\n };\n\n this.saveMessages([serviceStartMessage], {isOutgoing: true});\n this.threadsServiceMessagesIdsStorage[threadKey] = serviceStartMessage.mid;\n }\n\n public getThreadServiceMessageId(peerId: PeerId, threadId: number) {\n return this.threadsServiceMessagesIdsStorage[peerId + '_' + threadId];\n }\n\n public getDiscussionMessage(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApiSingle('messages.getDiscussionMessage', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((result) => {\n this.appChatsManager.saveApiChats(result.chats);\n this.appUsersManager.saveApiUsers(result.users);\n this.saveMessages(result.messages);\n\n const message = this.getMessageWithReplies(result.messages[0] as Message.message);\n const threadKey = message.peerId + '_' + message.mid;\n\n this.generateThreadServiceStartMessage(message);\n\n const historyStorage = this.getHistoryStorage(message.peerId, message.mid);\n const newMaxId = result.max_id = generateMessageId(result.max_id) || 0;\n result.read_inbox_max_id = historyStorage.readMaxId = generateMessageId(result.read_inbox_max_id ?? message.mid);\n result.read_outbox_max_id = historyStorage.readOutboxMaxId = generateMessageId(result.read_outbox_max_id) || 0;\n\n const first = historyStorage.history.first;\n if(historyStorage.maxId && historyStorage.maxId < newMaxId && first.isEnd(SliceEnd.Bottom)) {\n first.unsetEnd(SliceEnd.Bottom);\n }\n historyStorage.maxId = newMaxId;\n\n this.threadsToReplies[threadKey] = peerId + '_' + mid;\n\n return message;\n });\n }\n\n private handleNewMessage(message: MyMessage) {\n this.rootScope.dispatchEvent('history_multiappend', message);\n }\n\n private handleNewDialogs = () => {\n let newMaxSeenId = 0;\n const updateMap: BroadcastEvents['dialogs_multiupdate']= new Map();\n\n const processDialog = (dialog: MTDialog.dialog | ForumTopic) => {\n const {peerId} = dialog;\n this.dialogsStorage.pushDialog({dialog});\n if(!this.appPeersManager.isChannel(peerId)) {\n newMaxSeenId = Math.max(newMaxSeenId, dialog.top_message || 0);\n }\n\n let cache = updateMap.get(peerId);\n if(!cache) {\n updateMap.set(peerId, cache = {});\n }\n\n if(dialog._ === 'forumTopic') {\n (cache.topics ??= new Map()).set(dialog.id, dialog);\n } else {\n cache.dialog = dialog;\n }\n };\n\n for(const [peerId, obj] of this.newDialogsToHandle) {\n const isDialogDefined = 'dialog' in obj;\n const {dialog, topics} = obj;\n\n if(isDialogDefined) {\n if(!dialog) {\n this.reloadConversation(peerId.toPeerId());\n } else if(this.dialogsStorage.getDialogOnly(peerId)) { // * can be already dropped\n processDialog(dialog);\n }\n }\n\n if(topics) {\n topics?.forEach((topic, id) => {\n if(!topic) {\n this.dialogsStorage.getForumTopicById(peerId, id);\n } else if(this.dialogsStorage.getForumTopic(peerId, id)) { // * can be already dropped\n processDialog(topic);\n }\n });\n }\n }\n\n // this.log('after order:', this.dialogsStorage[0].map((d) => d.peerId));\n\n if(newMaxSeenId !== 0) {\n this.incrementMaxSeenId(newMaxSeenId);\n }\n\n this.rootScope.dispatchEvent('dialogs_multiupdate', updateMap);\n this.newDialogsToHandle.clear();\n };\n\n public scheduleHandleNewDialogs(peerId?: PeerId, dialog?: Dialog | ForumTopic | ForumTopic['id']) {\n if(peerId !== undefined) {\n let obj = this.newDialogsToHandle.get(peerId);\n if(!obj) {\n this.newDialogsToHandle.set(peerId, obj = {});\n }\n\n const isObject = typeof(dialog) === 'object';\n if(!dialog || (isObject && dialog._ === 'dialog')) {\n obj.dialog = dialog as Dialog;\n } else {\n obj.topics ??= new Map();\n if(isObject) {\n obj.topics.set((dialog as ForumTopic).id, dialog as ForumTopic);\n } else {\n obj.topics.set(dialog as number, undefined);\n }\n }\n }\n\n return this.newDialogsHandlePromise ??= pause(0).then(() => {\n this.newDialogsHandlePromise = undefined;\n this.handleNewDialogs();\n });\n }\n\n public async deleteMessages(peerId: PeerId, mids: number[], revoke?: boolean, isRecursion?: boolean) {\n let promise: Promise;\n\n const isChannel = this.appPeersManager.isChannel(peerId);\n const channelId = isChannel && peerId.toChatId();\n if(isChannel && !isRecursion) {\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n if(!channel.pFlags.creator && !channel.admin_rights?.pFlags?.delete_messages) {\n mids = mids.filter((mid) => {\n const message = this.getMessageByPeer(peerId, mid);\n return !!message.pFlags.out;\n });\n\n if(!mids.length) {\n return;\n }\n }\n }\n\n const config = await this.apiManager.getConfig();\n const overflowMids = mids.splice(config.forwarded_count_max, mids.length - config.forwarded_count_max);\n\n const serverMessageIds = mids.map((mid) => {\n const messageId = getServerMessageId(mid);\n // filter outgoing messages\n return generateMessageId(messageId) === mid && messageId;\n }).filter(Boolean);\n\n if(isChannel) {\n promise = this.apiManager.invokeApi('channels.deleteMessages', {\n channel: this.appChatsManager.getChannelInput(channelId),\n id: serverMessageIds\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteChannelMessages',\n channel_id: channelId,\n messages: mids,\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n });\n });\n } else {\n promise = this.apiManager.invokeApi('messages.deleteMessages', {\n revoke,\n id: serverMessageIds\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateDeleteMessages',\n messages: mids,\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n });\n });\n }\n\n const promises: (typeof promise)[] = [promise];\n if(overflowMids.length) {\n promises.push(this.deleteMessages(peerId, overflowMids, revoke, true));\n }\n\n return Promise.all(promises).then(noop);\n }\n\n public readHistory(peerId: PeerId, maxId = 0, threadId?: number, force = false) {\n if(DO_NOT_READ_HISTORY) {\n return Promise.resolve();\n }\n\n // console.trace('start read')\n this.log('readHistory:', peerId, maxId, threadId);\n const readMaxId = this.getReadMaxIdIfUnread(peerId, threadId);\n if(!readMaxId) {\n if(threadId && !force) {\n const forumTopic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(!getServerMessageId(forumTopic.read_inbox_max_id)) {\n force = true;\n }\n }\n\n if(!force) {\n const dialog = this.appChatsManager.isForum(peerId.toChatId()) && threadId ?\n this.dialogsStorage.getForumTopic(peerId, threadId) :\n this.getDialogOnly(peerId);\n if(dialog && this.isDialogUnread(dialog)) {\n force = true;\n }\n }\n\n if(!force) {\n this.log('readHistory: isn\\'t unread');\n return Promise.resolve();\n }\n }\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(historyStorage.triedToReadMaxId >= maxId) {\n return Promise.resolve();\n }\n\n let apiPromise: Promise;\n if(threadId) {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('messages.readDiscussion', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(threadId),\n read_max_id: getServerMessageId(maxId)\n });\n // apiPromise = new Promise((resolve) => resolve());\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadChannelDiscussionInbox',\n channel_id: peerId.toChatId(),\n top_msg_id: threadId,\n read_max_id: maxId\n });\n } else if(this.appPeersManager.isChannel(peerId)) {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('channels.readHistory', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n max_id: getServerMessageId(maxId)\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadChannelInbox',\n max_id: maxId,\n channel_id: peerId.toChatId(),\n still_unread_count: undefined,\n pts: undefined\n });\n } else {\n if(!historyStorage.readPromise) {\n apiPromise = this.apiManager.invokeApi('messages.readHistory', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n max_id: getServerMessageId(maxId)\n }).then((affectedMessages) => {\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updateShort',\n update: {\n _: 'updatePts',\n pts: affectedMessages.pts,\n pts_count: affectedMessages.pts_count\n }\n });\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateReadHistoryInbox',\n max_id: maxId,\n peer: this.appPeersManager.getOutputPeer(peerId),\n still_unread_count: undefined,\n pts: undefined,\n pts_count: undefined\n });\n }\n\n this.rootScope.dispatchEvent('notification_reset', this.appPeersManager.getPeerString(peerId));\n\n if(historyStorage.readPromise) {\n return historyStorage.readPromise;\n }\n\n historyStorage.triedToReadMaxId = maxId;\n\n apiPromise.finally(() => {\n delete historyStorage.readPromise;\n\n const {readMaxId} = historyStorage;\n this.log('readHistory: promise finally', maxId, readMaxId);\n\n if(readMaxId > maxId) {\n this.readHistory(peerId, readMaxId, threadId, true);\n }\n });\n\n return historyStorage.readPromise = apiPromise;\n }\n\n public readAllHistory(peerId: PeerId, threadId?: number, force = false) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n if(historyStorage.maxId) {\n this.readHistory(peerId, historyStorage.maxId, threadId, force); // lol\n }\n }\n\n private getUnreadMentionsKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? `_${threadId}` : '');\n }\n\n private fixDialogUnreadMentionsIfNoMessage(peerId: PeerId, threadId?: number) {\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, threadId);\n if(dialog?.unread_mentions_count) {\n this.reloadConversationOrTopic(peerId);\n }\n }\n\n private modifyCachedMentions(peerId: PeerId, mid: number, add: boolean, threadId?: number) {\n const slicedArray = this.unreadMentions[this.getUnreadMentionsKey(peerId, threadId)];\n if(!slicedArray) return;\n\n if(add) {\n if(slicedArray.first.isEnd(SliceEnd.Top)) {\n slicedArray.insertSlice([mid]);\n }\n } else {\n slicedArray.delete(mid);\n }\n }\n\n private fixUnreadMentionsCountIfNeeded(peerId: PeerId, slicedArray: SlicedArray, threadId?: number) {\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, threadId);\n if(!slicedArray.length && dialog?.unread_mentions_count) {\n this.reloadConversationOrTopic(peerId);\n }\n }\n\n public goToNextMention(peerId: PeerId, threadId?: number) {\n /* this.getUnreadMentions(peerId, 1, 2, 0).then((messages) => {\n console.log(messages);\n }); */\n\n const key = this.getUnreadMentionsKey(peerId, threadId);\n const promise = this.goToNextMentionPromises[key];\n if(promise) {\n return promise;\n }\n\n const slicedArray = this.unreadMentions[peerId] ??= new SlicedArray();\n const length = slicedArray.length;\n const isTopEnd = slicedArray.first.isEnd(SliceEnd.Top);\n if(!length && isTopEnd) {\n this.fixUnreadMentionsCountIfNeeded(peerId, slicedArray, threadId);\n return Promise.resolve();\n }\n\n let loadNextPromise = Promise.resolve();\n if(!isTopEnd && length < 25) {\n loadNextPromise = this.loadNextMentions(peerId, threadId);\n }\n\n return this.goToNextMentionPromises[key] = loadNextPromise.then(() => {\n const last = slicedArray.last;\n const mid = last && last[last.length - 1];\n if(mid) {\n slicedArray.delete(mid);\n return mid;\n } else {\n this.fixUnreadMentionsCountIfNeeded(peerId, slicedArray, threadId);\n }\n }).finally(() => {\n delete this.goToNextMentionPromises[key];\n });\n }\n\n private loadNextMentions(peerId: PeerId, threadId?: number) {\n const slicedArray = this.unreadMentions[peerId];\n const maxId = slicedArray.first[0] || 1;\n\n const backLimit = 50;\n const add_offset = -backLimit;\n const limit = backLimit;\n return this.getUnreadMentions(peerId, maxId, add_offset, limit, undefined, undefined, threadId)\n .then((messages) => {\n this.mergeHistoryResult(slicedArray, messages, maxId === 1 ? 0 : maxId, limit, add_offset);\n });\n }\n\n private getUnreadMentions(\n peerId: PeerId,\n offsetId: number,\n add_offset: number,\n limit: number,\n maxId = 0,\n minId = 0,\n threadId?: number\n ) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getUnreadMentions',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n offset_id: getServerMessageId(offsetId),\n add_offset,\n limit,\n max_id: getServerMessageId(maxId),\n min_id: getServerMessageId(minId),\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n },\n processResult: (messagesMessages) => {\n assumeType>(messagesMessages);\n this.appUsersManager.saveApiUsers(messagesMessages.users);\n this.appChatsManager.saveApiChats(messagesMessages.chats);\n this.saveMessages(messagesMessages.messages);\n\n return messagesMessages;\n }\n });\n }\n\n public readMessages(peerId: PeerId, msgIds: number[]) {\n if(DO_NOT_READ_HISTORY) {\n return Promise.resolve();\n }\n\n if(!msgIds.length) {\n return Promise.resolve();\n }\n\n msgIds = msgIds.map((mid) => getServerMessageId(mid));\n let promise: Promise, update: Update.updateChannelReadMessagesContents | Update.updateReadMessagesContents;\n if(peerId.isAnyChat() && this.appPeersManager.isChannel(peerId)) {\n const channelId = peerId.toChatId();\n\n update = {\n _: 'updateChannelReadMessagesContents',\n channel_id: channelId,\n messages: msgIds\n };\n\n promise = this.apiManager.invokeApi('channels.readMessageContents', {\n channel: this.appChatsManager.getChannelInput(channelId),\n id: msgIds\n });\n } else {\n update = {\n _: 'updateReadMessagesContents',\n messages: msgIds,\n pts: undefined,\n pts_count: undefined\n };\n\n promise = this.apiManager.invokeApi('messages.readMessageContents', {\n id: msgIds\n }).then((affectedMessages) => {\n (update as Update.updateReadMessagesContents).pts = affectedMessages.pts;\n (update as Update.updateReadMessagesContents).pts_count = affectedMessages.pts_count;\n this.apiUpdatesManager.processLocalUpdate(update);\n });\n }\n\n this.apiUpdatesManager.processLocalUpdate(update);\n\n return promise;\n }\n\n public getHistoryStorage(peerId: PeerId, threadId?: number) {\n if(threadId) {\n // threadId = this.getLocalMessageId(threadId);\n return (this.threadsStorage[peerId] ??= {})[threadId] ??= {count: null, history: new SlicedArray()};\n }\n\n return this.historiesStorage[peerId] ??= {count: null, history: new SlicedArray()};\n }\n\n public getHistoryStorageTransferable(peerId: PeerId, threadId?: number) {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const {\n count,\n history,\n maxId,\n readMaxId,\n readOutboxMaxId,\n maxOutId,\n replyMarkup\n } = historyStorage;\n\n return {\n count,\n history: undefined as HistoryStorage,\n historySerialized: history.toJSON(),\n maxId,\n readMaxId,\n readOutboxMaxId,\n maxOutId,\n replyMarkup\n };\n }\n\n private getNotifyPeerSettings(peerId: PeerId, threadId?: number) {\n const inputNotifyPeer = this.appPeersManager.getInputNotifyPeerById({peerId, ignorePeerId: true, threadId});\n return Promise.all([\n this.appNotificationsManager.getNotifyPeerTypeSettings(),\n this.appNotificationsManager.getNotifySettings(inputNotifyPeer)\n ]).then(([_, peerTypeNotifySettings]) => {\n return {\n muted: this.appNotificationsManager.isPeerLocalMuted({peerId, respectType: true, threadId}),\n peerTypeNotifySettings\n };\n });\n }\n\n private handleNotifications = () => {\n ctx.clearTimeout(this.notificationsHandlePromise);\n this.notificationsHandlePromise = undefined;\n\n // var timeout = $rootScope.idle.isIDLE && StatusManager.isOtherDeviceActive() ? 30000 : 1000;\n // const timeout = 1000;\n\n for(const key in this.notificationsToHandle) {\n const [peerId, threadId] = key.split('_');\n // if(rootScope.peerId === peerId && !rootScope.idle.isIDLE) {\n // continue;\n // }\n\n const notifyPeerToHandle = this.notificationsToHandle[key];\n this.getNotifyPeerSettings(peerId.toPeerId(), threadId ? +threadId : undefined)\n .then(({muted, peerTypeNotifySettings}) => {\n const topMessage = notifyPeerToHandle.topMessage;\n if((muted && !topMessage.pFlags.mentioned) || !topMessage.pFlags.unread) {\n return;\n }\n\n // setTimeout(() => {\n if(topMessage.pFlags.unread) {\n this.notifyAboutMessage(topMessage, {\n fwdCount: notifyPeerToHandle.fwdCount,\n peerTypeNotifySettings\n });\n }\n // }, timeout);\n });\n }\n\n this.notificationsToHandle = {};\n };\n\n public getUpdateAfterReloadKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n private handleNewUpdateAfterReload(peerId: PeerId, update: Update, threadId?: number) {\n const set = this.newUpdatesAfterReloadToHandle[this.getUpdateAfterReloadKey(peerId, threadId)] ??= new Set();\n if(set.has(update)) {\n this.log.error('here we go again', peerId);\n return;\n }\n\n (update as any).ignoreExisting = true;\n set.add(update);\n this.scheduleHandleNewDialogs(peerId, threadId);\n }\n\n private onUpdateMessageId = (update: Update.updateMessageID) => {\n const randomId = update.random_id;\n const pendingData = this.pendingByRandomId[randomId];\n if(!pendingData) {\n return;\n }\n\n const mid = generateMessageId(update.id);\n this.pendingByMessageId[mid] = randomId;\n // const {storage} = pendingData;\n // const message = this.getMessageFromStorage(storage, mid);\n // if(message) { // if message somehow already exists\n // this.checkPendingMessage(message);\n // }\n };\n\n private onUpdateNewMessage = (update: Update.updateNewDiscussionMessage | Update.updateNewMessage | Update.updateNewChannelMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n const storage = this.getHistoryMessagesStorage(peerId);\n\n // * local update\n const isLocalThreadUpdate = update._ === 'updateNewDiscussionMessage';\n\n // * temporary save the message for info (peerId, reply mids...)\n this.saveMessages([message], {storage: this.createMessageStorage(peerId, 'history')});\n\n // * check if sent message is already in storage\n // const oldMessage = this.getMessageFromStorage(storage, message.mid);\n // if(\n // (message as Message.message).pFlags.is_outgoing &&\n // oldMessage &&\n // !(oldMessage as Message.message).pFlags.is_outgoing\n // ) {\n // this.checkPendingMessage(message);\n // return;\n // }\n\n const isForum = this.appPeersManager.isForum(peerId);\n const threadKey = this.getThreadKey(message);\n const threadId = threadKey ? +threadKey.split('_')[1] : undefined;\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, isLocalThreadUpdate ? threadId : undefined);\n\n if((!dialog || this.reloadConversationsPeers.has(peerId)) && !isLocalThreadUpdate) {\n let good = true;\n if(peerId.isAnyChat()) {\n good = this.appChatsManager.isInChat(peerId.toChatId());\n }\n\n if(good) {\n this.handleNewUpdateAfterReload(peerId, update);\n return;\n }\n\n // return;\n }\n\n if(threadId && !isLocalThreadUpdate) {\n const threadStorage = this.threadsStorage[peerId]?.[threadId];\n const update = {\n _: 'updateNewDiscussionMessage',\n message\n } as Update.updateNewDiscussionMessage;\n\n if(this.appChatsManager.isForum(peerId.toChatId()) && !this.dialogsStorage.getForumTopic(peerId, threadId)) {\n // this.dialogsStorage.getForumTopicById(peerId, threadId);\n this.handleNewUpdateAfterReload(peerId, update, threadId);\n } else if(threadStorage) {\n this.onUpdateNewMessage(update);\n }\n }\n\n if(message._ === 'messageService') {\n const {action} = message;\n if(action._ === 'messageActionPaymentSent' && message.reply_to) {\n this.rootScope.dispatchEvent('payment_sent', {\n peerId: message.reply_to.reply_to_peer_id ?\n this.appPeersManager.getPeerId(message.reply_to.reply_to_peer_id) :\n message.peerId,\n mid: message.reply_to_mid,\n receiptMessage: message\n });\n }\n\n if(action._ === 'messageActionTopicEdit' && !isLocalThreadUpdate) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(!topic) {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n const oldTopic = copy(topic);\n\n if(action.title !== undefined) {\n topic.title = action.title;\n }\n\n if(action.closed !== undefined) {\n setBooleanFlag(topic.pFlags, 'closed', action.closed);\n }\n\n if(action.hidden !== undefined) {\n setBooleanFlag(topic.pFlags, 'hidden', action.hidden);\n }\n\n if(action.icon_emoji_id !== undefined) {\n topic.icon_emoji_id = action.icon_emoji_id;\n }\n\n this.scheduleHandleNewDialogs(peerId, topic);\n\n this.dialogsStorage.processTopicUpdate(topic, oldTopic);\n }\n }\n }\n\n /* if(update._ === 'updateNewChannelMessage') {\n const chat = appChatsManager.getChat(peerId.toChatId());\n if(chat.pFlags && (chat.pFlags.left || chat.pFlags.kicked)) {\n return;\n }\n } */\n\n this.saveMessages([message], {storage});\n // this.log.warn(dT(), 'message unread', message.mid, message.pFlags.unread)\n\n /* if((message as Message.message).grouped_id) {\n this.log('updateNewMessage', message);\n } */\n\n this.checkPendingMessage(message);\n const historyStorage = this.getHistoryStorage(peerId, isLocalThreadUpdate ? threadId : undefined);\n\n if(!isLocalThreadUpdate) {\n this.updateMessageRepliesIfNeeded(message);\n }\n\n // * so message can exist if reloadConversation came back earlier with mid\n const ignoreExisting: boolean = (update as any).ignoreExisting;\n const isExisting = !!historyStorage.history.findSlice(message.mid);\n if(isExisting) {\n if(!ignoreExisting) {\n return false;\n }\n } else {\n // * catch situation with disconnect. if message's id is lower than we already have (in bottom end slice), will sort it\n const firstSlice = historyStorage.history.first;\n if(firstSlice.isEnd(SliceEnd.Bottom)) {\n let i = 0;\n for(const length = firstSlice.length; i < length; ++i) {\n if(message.mid > firstSlice[i]) {\n break;\n }\n }\n\n firstSlice.splice(i, 0, message.mid);\n } else {\n historyStorage.history.unshift(message.mid);\n }\n\n if(historyStorage.count !== null) {\n ++historyStorage.count;\n }\n }\n\n if(!historyStorage.maxId || message.mid > historyStorage.maxId) {\n historyStorage.maxId = message.mid;\n }\n\n if(this.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n\n const fromId = message.fromId;\n if(fromId.isUser() && !message.pFlags.out && message.from_id) {\n this.appUsersManager.forceUserOnline(fromId, message.date);\n\n const action: SendMessageAction = {\n _: 'sendMessageCancelAction'\n };\n\n let update: Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChannelUserTyping;\n if(peerId.isUser()) {\n update = {\n _: 'updateUserTyping',\n action,\n user_id: fromId\n };\n } else if(this.appPeersManager.isChannel(peerId)) {\n update = {\n _: 'updateChannelUserTyping',\n action,\n channel_id: peerId.toChatId(),\n from_id: this.appPeersManager.getOutputPeer(fromId),\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n };\n } else {\n update = {\n _: 'updateChatUserTyping',\n action,\n chat_id: peerId.toChatId(),\n from_id: this.appPeersManager.getOutputPeer(fromId)\n };\n }\n\n this.apiUpdatesManager.processLocalUpdate(update);\n }\n\n // commented to render the message if it's been sent faster than history_append came to main thread\n // if(!pendingMessage) {\n this.handleNewMessage(message);\n // }\n\n const isTopic = dialog?._ === 'forumTopic';\n if((isLocalThreadUpdate && !isTopic) || !dialog) {\n return;\n }\n\n const inboxUnread = !message.pFlags.out && message.pFlags.unread;\n\n {\n if(inboxUnread && message.mid > dialog.top_message) {\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n ++dialog.unread_count;\n if(message.pFlags.mentioned) {\n ++dialog.unread_mentions_count;\n this.modifyCachedMentions(peerId, message.mid, true, isTopic ? threadId : undefined);\n }\n\n releaseUnreadCount();\n }\n\n if(message.mid >= dialog.top_message) {\n this.setDialogTopMessage(message, dialog);\n }\n }\n\n if(((!isLocalThreadUpdate && !isForum) || isTopic) && inboxUnread) {\n const notifyPeer = threadKey || peerId;\n const notifyPeerToHandle = this.notificationsToHandle[notifyPeer] ??= {\n fwdCount: 0,\n fromId: NULL_PEER_ID\n };\n\n if(notifyPeerToHandle.fromId !== fromId) {\n notifyPeerToHandle.fromId = fromId;\n notifyPeerToHandle.fwdCount = 0;\n }\n\n if((message as Message.message).fwd_from) {\n ++notifyPeerToHandle.fwdCount;\n }\n\n notifyPeerToHandle.topMessage = message;\n\n this.notificationsHandlePromise ??= ctx.setTimeout(this.handleNotifications, 0);\n }\n };\n\n private onUpdateMessageReactions = (update: Update.updateMessageReactions) => {\n const {peer, msg_id, reactions} = update;\n const mid = generateMessageId(msg_id);\n const peerId = this.appPeersManager.getPeerId(peer);\n const message: MyMessage = this.getMessageByPeer(peerId, mid);\n\n if(message?._ !== 'message') {\n return;\n }\n\n const recentReactions = reactions?.recent_reactions;\n if(recentReactions?.length && message.pFlags.out) {\n const recentReaction = recentReactions[recentReactions.length - 1];\n const previousReactions = message.reactions;\n const previousRecentReactions = previousReactions?.recent_reactions;\n if(\n this.appPeersManager.getPeerId(recentReaction.peer_id) !== this.appPeersManager.peerId && (\n !previousRecentReactions ||\n previousRecentReactions.length <= recentReactions.length\n ) && (\n !previousRecentReactions ||\n !deepEqual(recentReaction, previousRecentReactions[previousRecentReactions.length - 1])\n )\n ) {\n this.getNotifyPeerSettings(peerId).then(({muted, peerTypeNotifySettings}) => {\n if(/* muted || */!peerTypeNotifySettings.show_previews) return;\n this.notifyAboutMessage(message, {\n peerReaction: recentReaction,\n peerTypeNotifySettings\n });\n });\n }\n }\n\n const key = message.peerId + '_' + message.mid;\n this.pushBatchUpdate('messages_reactions', this.batchUpdateReactions, key, () => copy(message.reactions));\n\n message.reactions = reactions;\n\n if(!update.local) {\n this.setDialogToStateIfMessageIsTop(message);\n }\n };\n\n private onUpdateDialogUnreadMark = (update: Update.updateDialogUnreadMark) => {\n // this.log('updateDialogUnreadMark', update);\n const peerId = this.appPeersManager.getPeerId((update.peer as DialogPeer.dialogPeer).peer);\n const dialog = this.getDialogOnly(peerId);\n\n if(!dialog) {\n this.scheduleHandleNewDialogs(peerId);\n } else {\n const releaseUnreadCount = this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n if(!update.pFlags.unread) {\n delete dialog.pFlags.unread_mark;\n } else {\n dialog.pFlags.unread_mark = true;\n }\n\n releaseUnreadCount();\n this.dialogsStorage.setDialogToState(dialog);\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map([[peerId, {dialog}]]));\n }\n };\n\n private onUpdateEditMessage = (update: Update.updateEditMessage | Update.updateEditChannelMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n const mid = generateMessageId(message.id);\n const storage = this.getHistoryMessagesStorage(peerId);\n if(!storage.has(mid)) {\n // this.fixDialogUnreadMentionsIfNoMessage(peerId);\n return;\n }\n\n // console.trace(dT(), 'edit message', message)\n\n const oldMessage: Message = this.getMessageFromStorage(storage, mid);\n this.saveMessages([message], {storage});\n const newMessage: Message = this.getMessageFromStorage(storage, mid);\n\n this.handleEditedMessage(oldMessage, newMessage, storage);\n\n const dialog = this.getDialogOnly(peerId);\n\n // if sender erased mention\n /* if(dialog.unread_mentions_count && (oldMessage as Message.message)?.pFlags?.mentioned && !message.pFlags.mentioned) {\n --dialog.unread_mentions_count;\n this.modifyCachedMentions(peerId, mid, false);\n } */\n\n const isTopMessage = dialog?.top_message === mid;\n if((message as Message.messageService).clear_history) {\n if(isTopMessage) {\n this.rootScope.dispatchEvent('dialog_flush', {peerId, dialog});\n }\n } else {\n let dispatchEditEvent = true;\n // no sense in dispatching message_edit since only reactions have changed\n if(oldMessage?._ === 'message' && !deepEqual(oldMessage.reactions, (newMessage as Message.message).reactions)) {\n const newReactions = (newMessage as Message.message).reactions;\n (newMessage as Message.message).reactions = oldMessage.reactions;\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageReactions',\n peer: this.appPeersManager.getOutputPeer(peerId),\n msg_id: message.id,\n reactions: newReactions\n });\n\n dispatchEditEvent = false;\n }\n\n dispatchEditEvent && this.rootScope.dispatchEvent('message_edit', {\n storageKey: storage.key,\n peerId,\n mid,\n message\n });\n\n if(isTopMessage) {\n this.dialogsStorage.setDialogToState(dialog);\n }\n\n const map: BroadcastEvents['dialogs_multiupdate'] = new Map();\n const getUpdateCache = () => {\n let cache = map.get(peerId);\n if(!cache) {\n map.set(peerId, cache = {});\n }\n\n return cache;\n };\n\n if((isTopMessage || (message as Message.message).grouped_id) && dialog) {\n getUpdateCache().dialog = dialog;\n }\n\n const threadKey = this.getThreadKey(message);\n if(threadKey) {\n const topicId = +threadKey.split('_')[1];\n const topic = this.dialogsStorage.getForumTopic(peerId, topicId);\n if(topic) {\n (getUpdateCache().topics ??= new Map()).set(topicId, topic);\n }\n }\n\n if(map.size) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', map);\n }\n }\n };\n\n private onUpdateReadHistory = (update: Update.updateReadChannelDiscussionInbox | Update.updateReadChannelDiscussionOutbox\n | Update.updateReadHistoryInbox | Update.updateReadHistoryOutbox\n | Update.updateReadChannelInbox | Update.updateReadChannelOutbox) => {\n const channelId = (update as Update.updateReadChannelInbox).channel_id;\n const maxId = generateMessageId((update as Update.updateReadChannelInbox).max_id || (update as Update.updateReadChannelDiscussionInbox).read_max_id);\n const threadId = generateMessageId((update as Update.updateReadChannelDiscussionInbox).top_msg_id);\n const peerId = channelId ? channelId.toPeerId(true) : this.appPeersManager.getPeerId((update as Update.updateReadHistoryInbox).peer);\n\n const isOut = update._ === 'updateReadHistoryOutbox' ||\n update._ === 'updateReadChannelOutbox' ||\n update._ === 'updateReadChannelDiscussionOutbox' ? true : undefined;\n\n const isForum = channelId ? this.appChatsManager.isForum(channelId) : false;\n const storage = this.getHistoryMessagesStorage(peerId);\n const history = getObjectKeysAndSort(storage, 'desc');\n const foundDialog = threadId && isForum ?\n this.dialogsStorage.getForumTopic(peerId, threadId) :\n this.getDialogOnly(peerId);\n const stillUnreadCount = (update as Update.updateReadChannelInbox).still_unread_count;\n let newUnreadCount = 0;\n let newUnreadMentionsCount = 0;\n let foundAffected = false;\n\n // this.log.warn(dT(), 'read', peerId, isOut ? 'out' : 'in', maxId)\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(peerId.isUser() && isOut) {\n this.appUsersManager.forceUserOnline(peerId.toUserId());\n }\n\n if(threadId) {\n const repliesKey = this.threadsToReplies[peerId + '_' + threadId];\n if(repliesKey) {\n const [peerId, mid] = repliesKey.split('_');\n this.updateMessage(peerId.toPeerId(), +mid, 'replies_updated');\n }\n }\n\n const releaseUnreadCount = foundDialog && this.dialogsStorage.prepareDialogUnreadCountModifying(foundDialog);\n const readMaxId = this.getReadMaxIdIfUnread(peerId, threadId);\n\n for(let i = 0, length = history.length; i < length; i++) {\n const mid = history[i];\n if(mid > maxId) {\n continue;\n }\n\n const message: MyMessage = storage.get(mid);\n\n if(message.pFlags.out !== isOut) {\n continue;\n }\n\n const messageThreadId = getMessageThreadId(message, isForum);\n if(threadId && messageThreadId !== threadId) {\n continue;\n }\n\n const isUnread = message.pFlags.unread || (readMaxId && readMaxId < mid);\n\n if(!isUnread) {\n break;\n }\n\n // this.log.warn('read', messageId, isUnread, message)\n delete message.pFlags.unread;\n foundAffected ||= true;\n\n if(!message.pFlags.out && foundDialog) {\n if(stillUnreadCount === undefined) {\n newUnreadCount = --foundDialog.unread_count;\n }\n\n if(message.pFlags.mentioned) {\n newUnreadMentionsCount = --foundDialog.unread_mentions_count;\n this.modifyCachedMentions(peerId, message.mid, false);\n }\n }\n\n this.rootScope.dispatchEvent('notification_cancel', 'msg' + mid);\n }\n\n if(isOut) historyStorage.readOutboxMaxId = maxId;\n else historyStorage.readMaxId = maxId;\n\n if(foundDialog) {\n if(isOut) foundDialog.read_outbox_max_id = maxId;\n else foundDialog.read_inbox_max_id = maxId;\n\n if(!isOut) {\n let setCount: number;\n if(stillUnreadCount !== undefined) {\n setCount = stillUnreadCount;\n } else if(\n newUnreadCount < 0 ||\n maxId >= foundDialog.top_message ||\n !readMaxId\n ) {\n setCount = 0;\n } else if(newUnreadCount && foundDialog.top_message > maxId) {\n setCount = newUnreadCount;\n }\n\n if(setCount !== undefined) {\n foundDialog.unread_count = setCount;\n }\n\n if(newUnreadMentionsCount < 0 || !foundDialog.unread_count) {\n foundDialog.unread_mentions_count = 0;\n }\n }\n\n releaseUnreadCount?.();\n\n this.dialogsStorage.processDialogForFilters(foundDialog);\n\n this.rootScope.dispatchEvent('dialog_unread', {peerId, dialog: foundDialog});\n this.dialogsStorage.setDialogToState(foundDialog);\n\n if(!foundAffected && stillUnreadCount === undefined && !isOut && foundDialog.unread_count) {\n if(foundDialog._ === 'forumTopic') {\n this.dialogsStorage.getForumTopicById(peerId, threadId);\n } else {\n this.reloadConversation(peerId);\n }\n }\n }\n\n if(foundAffected) {\n this.rootScope.dispatchEvent('messages_read');\n }\n\n if(!threadId && channelId) {\n const threadKeyPart = peerId + '_';\n for(const threadKey in this.threadsToReplies) {\n if(threadKey.indexOf(threadKeyPart) === 0) {\n const [peerId, mid] = this.threadsToReplies[threadKey].split('_');\n this.rootScope.dispatchEvent('replies_updated', this.getMessageByPeer(peerId.toPeerId(), +mid) as Message.message);\n }\n }\n }\n };\n\n private onUpdateReadMessagesContents = (update: Update.updateChannelReadMessagesContents | Update.updateReadMessagesContents) => {\n const channelId = (update as Update.updateChannelReadMessagesContents).channel_id;\n const topMsgId = (update as Update.updateChannelReadMessagesContents).top_msg_id;\n const threadId = topMsgId ? generateMessageId(topMsgId) : undefined;\n const mids = (update as Update.updateReadMessagesContents).messages.map((id) => generateMessageId(id));\n const peerId = channelId ? channelId.toPeerId(true) : this.findPeerIdByMids(mids);\n for(let i = 0, length = mids.length; i < length; ++i) {\n const mid = mids[i];\n const message: MyMessage = this.getMessageByPeer(peerId, mid);\n if(message) {\n if(message.pFlags.media_unread) {\n delete message.pFlags.media_unread;\n this.setDialogToStateIfMessageIsTop(message);\n\n if(!message.pFlags.out && message.pFlags.mentioned) {\n this.modifyCachedMentions(peerId, mid, false, threadId);\n }\n }\n } else {\n this.fixDialogUnreadMentionsIfNoMessage(peerId, threadId);\n }\n }\n\n this.rootScope.dispatchEvent('messages_media_read', {peerId, mids});\n };\n\n private onUpdateChannelAvailableMessages = (update: Update.updateChannelAvailableMessages) => {\n const peerId = update.channel_id.toPeerId(true);\n const history = this.getHistoryStorage(peerId).history.slice;\n const availableMinId = generateMessageId(update.available_min_id);\n const messages = history.filter((mid) => mid <= availableMinId);\n\n (update as any as Update.updateDeleteChannelMessages).messages = messages;\n this.onUpdateDeleteMessages(update as any as Update.updateDeleteChannelMessages);\n };\n\n private onUpdateDeleteMessages = (update: Update.updateDeleteMessages | Update.updateDeleteChannelMessages) => {\n const channelId = (update as Update.updateDeleteChannelMessages).channel_id;\n // const messages = (update as any as Update.updateDeleteChannelMessages).messages;\n const messages = (update as any as Update.updateDeleteChannelMessages).messages.map((id) => generateMessageId(id));\n const peerId: PeerId = channelId ? channelId.toPeerId(true) : this.findPeerIdByMids(messages);\n\n if(!peerId) {\n return;\n }\n\n this.apiManager.clearCache('messages.getSearchCounters', (params) => {\n return this.appPeersManager.getPeerId(params.peer) === peerId;\n });\n\n const threadKeys: Set = new Set(), topics: Map = new Map();\n for(const mid of messages) {\n const message = this.getMessageByPeer(peerId, mid);\n const threadKey = this.getThreadKey(message);\n if(!threadKey) {\n continue;\n }\n\n const threadId = +threadKey.split('_')[1];\n if(this.threadsStorage[peerId]?.[threadId]) {\n threadKeys.add(threadKey);\n\n if(!topics.has(threadId)) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(topic) {\n topics.set(threadId, topic);\n }\n }\n }\n }\n\n const historyUpdated = this.handleDeletedMessages(\n peerId,\n this.getHistoryMessagesStorage(peerId),\n messages\n );\n\n const threadsStorages = Array.from(threadKeys).map((threadKey) => {\n const [peerId, mid] = threadKey.split('_');\n return this.getHistoryStorage(peerId.toPeerId(), +mid);\n });\n\n const historyStorages = [\n this.getHistoryStorage(peerId),\n ...threadsStorages\n ];\n historyStorages.forEach((historyStorage) => {\n for(const mid of historyUpdated.msgs) {\n historyStorage.history.delete(mid);\n }\n\n if(historyUpdated.count && historyStorage.count) {\n historyStorage.count = Math.max(0, historyStorage.count - historyUpdated.count);\n }\n });\n\n this.rootScope.dispatchEvent('history_delete', {peerId, msgs: historyUpdated.msgs});\n\n const dialogs: (MTDialog.dialog | ForumTopic)[] = [\n ...topics.values()\n ];\n\n const dialog = this.getDialogOnly(peerId);\n if(dialog) {\n dialogs.unshift(dialog);\n }\n\n dialogs.forEach((dialog) => {\n const isTopic = dialog._ === 'forumTopic';\n const affected = historyUpdated.unreadMentions || historyUpdated.unread;\n const releaseUnreadCount = affected && this.dialogsStorage.prepareDialogUnreadCountModifying(dialog);\n\n if(historyUpdated.unread) {\n dialog.unread_count = Math.max(0, dialog.unread_count - historyUpdated.unread);\n }\n\n if(historyUpdated.unreadMentions) {\n dialog.unread_mentions_count = !dialog.unread_count ? 0 : Math.max(0, dialog.unread_mentions_count - historyUpdated.unreadMentions);\n }\n\n if(affected) {\n releaseUnreadCount();\n\n if(!isTopic) {\n this.rootScope.dispatchEvent('dialog_unread', {peerId, dialog});\n }\n }\n\n if(historyUpdated.msgs.has(dialog.top_message)) {\n const historyStorage = this.getHistoryStorage(dialog.peerId, isTopic ? dialog.id : undefined);\n const slice = historyStorage.history.first;\n if(slice.isEnd(SliceEnd.Bottom) && slice.length) {\n const mid = slice[0];\n const message = this.getMessageByPeer(peerId, mid);\n this.setDialogTopMessage(message, dialog);\n } else if(isTopic) {\n this.dialogsStorage.getForumTopicById(peerId, dialog.id);\n } else {\n this.reloadConversation(peerId);\n }\n }\n });\n };\n\n private onUpdateChannel = (update: Update.updateChannel) => {\n const channelId = update.channel_id;\n const peerId = channelId.toPeerId(true);\n const channel = this.appChatsManager.getChat(channelId) as Chat.channel;\n\n const needDialog = this.appChatsManager.isInChat(channelId);\n\n const canViewHistory = !!getPeerActiveUsernames(channel)[0] || !channel.pFlags.left;\n const hasHistory = this.historiesStorage[peerId] !== undefined;\n\n if(canViewHistory !== hasHistory) {\n delete this.historiesStorage[peerId];\n this.rootScope.dispatchEvent('history_forbidden', peerId);\n }\n\n const dialog = this.getDialogOnly(peerId);\n if(!!dialog !== needDialog) {\n if(needDialog) {\n this.reloadConversation(peerId);\n } else {\n this.dialogsStorage.dropDialogOnDeletion(peerId);\n }\n }\n\n this.rootScope.dispatchEvent('channel_update', channelId);\n };\n\n private onUpdateChannelReload = (update: Update.updateChannelReload) => {\n const peerId = update.channel_id.toPeerId(true);\n\n // if(this.appPeersManager.isForum(peerId)) {\n // const cache = this.dialogsStorage.getForumTopicsCache(peerId);\n // if(cache.topics.size) {\n\n // }\n // }\n\n this.flushStoragesByPeerId(peerId);\n Promise.all([\n this.reloadConversation(peerId)\n ]).then(() => {\n this.rootScope.dispatchEvent('history_reload', peerId);\n });\n };\n\n private onUpdateChannelMessageViews = (update: Update.updateChannelMessageViews) => {\n const views = update.views;\n const peerId = update.peerId ?? update.channel_id.toPeerId(true);\n const mid = generateMessageId(update.id);\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(message?.views !== undefined && message.views < views) {\n message.views = views;\n this.pushBatchUpdate('messages_views', this.batchUpdateViews, message.peerId + '_' + message.mid);\n this.setDialogToStateIfMessageIsTop(message);\n }\n };\n\n private onUpdateServiceNotification = (update: Update.updateServiceNotification) => {\n // this.log('updateServiceNotification', update);\n if(update.pFlags?.popup) {\n this.rootScope.dispatchEvent('service_notification', update);\n return;\n }\n\n const fromId = SERVICE_PEER_ID;\n const peerId = fromId;\n const messageId = this.generateTempMessageId(peerId);\n const message: Message.message = {\n _: 'message',\n id: messageId,\n from_id: this.appPeersManager.getOutputPeer(fromId),\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n pFlags: {unread: true},\n date: (update.inbox_date || tsNow(true)) + this.timeManager.getServerTimeOffset(),\n message: update.message,\n media: update.media,\n entities: update.entities\n };\n if(!this.appUsersManager.hasUser(fromId)) {\n this.appUsersManager.saveApiUsers([{\n _: 'user',\n id: fromId,\n pFlags: {verified: true},\n access_hash: '0',\n first_name: 'Telegram',\n phone: '42777'\n }]);\n }\n this.saveMessages([message], {isOutgoing: true});\n\n if(update.inbox_date) {\n this.pendingTopMsgs[peerId] = messageId;\n this.onUpdateNewMessage({\n _: 'updateNewMessage',\n message,\n pts: undefined,\n pts_count: undefined\n });\n }\n };\n\n private onUpdatePinnedMessages = (update: Update.updatePinnedMessages | Update.updatePinnedChannelMessages) => {\n const channelId = update._ === 'updatePinnedChannelMessages' ? update.channel_id : undefined;\n const peerId = channelId ? channelId.toPeerId(true) : this.appPeersManager.getPeerId((update as Update.updatePinnedMessages).peer);\n\n /* const storage = this.getSearchStorage(peerId, 'inputMessagesFilterPinned');\n if(storage.count !== storage.history.length) {\n if(storage.count !== undefined) {\n delete this.searchesStorage[peerId]['inputMessagesFilterPinned'];\n }\n\n rootScope.broadcast('peer_pinned_messages', peerId);\n break;\n } */\n\n const messages = update.messages.map((id) => generateMessageId(id));\n\n const storage = this.getHistoryMessagesStorage(peerId);\n const missingMessages = messages.filter((mid) => !storage.has(mid));\n const getMissingPromise = missingMessages.length ? Promise.all(missingMessages.map((mid) => this.reloadMessages(peerId, mid))) : Promise.resolve();\n getMissingPromise.finally(() => {\n const werePinned = update.pFlags?.pinned;\n if(werePinned) {\n for(const mid of messages) {\n // storage.history.push(mid);\n const message = storage.get(mid) as Message.message;\n message.pFlags.pinned = true;\n }\n\n /* if(this.pinnedMessages[peerId]?.maxId) {\n const maxMid = Math.max(...messages);\n this.pinnedMessages\n } */\n\n // storage.history.sort((a, b) => b - a);\n } else {\n for(const mid of messages) {\n // storage.history.findAndSplice((_mid) => _mid === mid);\n const message = storage.get(mid) as Message.message;\n delete message.pFlags.pinned;\n }\n }\n\n /* const info = this.pinnedMessages[peerId];\n if(info) {\n info.count += messages.length * (werePinned ? 1 : -1);\n } */\n\n delete this.pinnedMessages[this.getPinnedMessagesKey(peerId)];\n this.appStateManager.getState().then((state) => {\n delete state.hiddenPinnedMessages[peerId];\n this.rootScope.dispatchEvent('peer_pinned_messages', {peerId, mids: messages, pinned: werePinned});\n });\n });\n };\n\n private onUpdateNotifySettings = (update: Update.updateNotifySettings) => {\n const {peer, notify_settings} = update;\n const isTopic = peer._ === 'notifyForumTopic';\n const isPeerType = peer._ === 'notifyPeer' || isTopic;\n if(!isPeerType) {\n return;\n }\n\n const peerId = this.appPeersManager.getPeerId(peer.peer);\n const dialog = this.dialogsStorage.getDialogOrTopic(peerId, isTopic ? generateMessageId(peer.top_msg_id) : undefined);\n if(!dialog) {\n return;\n }\n\n dialog.notify_settings = notify_settings;\n this.rootScope.dispatchEvent('dialog_notify_settings', dialog);\n this.dialogsStorage.setDialogToState(dialog);\n };\n\n private onUpdateNewScheduledMessage = (update: Update.updateNewScheduledMessage) => {\n const message = update.message as MyMessage;\n const peerId = this.getMessagePeer(message);\n\n const storage = this.scheduledMessagesStorage[peerId];\n if(!storage) {\n return;\n }\n\n const mid = generateMessageId(message.id);\n\n const oldMessage = this.getMessageFromStorage(storage, mid);\n this.saveMessages([message], {storage, isScheduled: true});\n const newMessage = this.getMessageFromStorage(storage, mid);\n\n if(oldMessage) {\n this.handleEditedMessage(oldMessage, newMessage, storage);\n this.rootScope.dispatchEvent('message_edit', {storageKey: storage.key, peerId, mid: message.mid, message});\n } else {\n const pendingMessage = this.checkPendingMessage(message);\n if(!pendingMessage) {\n this.rootScope.dispatchEvent('scheduled_new', message as Message.message);\n }\n }\n };\n\n private onUpdateDeleteScheduledMessages = (update: Update.updateDeleteScheduledMessages) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n\n const storage = this.scheduledMessagesStorage[peerId];\n if(storage) {\n const mids = update.messages.map((id) => generateMessageId(id));\n this.handleDeletedMessages(peerId, storage, mids);\n\n this.rootScope.dispatchEvent('scheduled_delete', {peerId, mids});\n }\n };\n\n private onUpdateMessageExtendedMedia = (update: Update.updateMessageExtendedMedia) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const mid = generateMessageId(update.msg_id);\n const storage = this.getHistoryMessagesStorage(peerId);\n if(!storage.has(mid)) {\n // this.fixDialogUnreadMentionsIfNoMessage(peerId);\n return;\n }\n\n const message = this.getMessageFromStorage(storage, mid) as Message.message;\n const messageMedia = message.media as MessageMedia.messageMediaInvoice;\n if(messageMedia.extended_media?._ === 'messageExtendedMedia') {\n return;\n }\n\n messageMedia.extended_media = update.extended_media;\n this.onUpdateEditMessage({\n _: 'updateEditMessage',\n message,\n pts: 0,\n pts_count: 0\n });\n };\n\n private onUpdateTranscribedAudio = (update: Update.updateTranscribedAudio) => {\n const peerId = this.appPeersManager.getPeerId(update.peer);\n const text = update.text;\n const mid = generateMessageId(update.msg_id);\n\n this.rootScope.dispatchEvent('message_transcribed', {peerId, mid, text, pending: update.pFlags.pending});\n };\n\n public setDialogToStateIfMessageIsTop(message: MyMessage) {\n if(this.isMessageIsTopMessage(message)) {\n this.dialogsStorage.setDialogToState(this.getDialogOnly(message.peerId));\n }\n }\n\n public isMessageIsTopMessage(message: MyMessage) {\n const dialog = this.getDialogOnly(message.peerId);\n return dialog && dialog.top_message === message.mid;\n }\n\n private updateMessageRepliesIfNeeded(threadMessage: MyMessage) {\n try { // * ะฝะฐ ะฒััะบะธะน ัะปัƒั‡ะฐะน, ัะบะพั€ะตะต ะฒัะตะณะพ ัั‚ะพ ะฝะต ะฟะพะฝะฐะดะพะฑะธั‚ัั\n const threadKey = this.getThreadKey(threadMessage);\n if(threadKey) {\n const repliesKey = this.threadsToReplies[threadKey];\n if(repliesKey) {\n const [peerId, mid] = repliesKey.split('_');\n\n this.updateMessage(peerId.toPeerId(), +mid, 'replies_updated');\n }\n }\n } catch(err) {\n this.log.error('incrementMessageReplies err', err, threadMessage);\n }\n }\n\n private getThreadKey(threadMessage: MyMessage) {\n let threadKey = '';\n if(threadMessage?.peerId?.isAnyChat()) {\n const threadId = getMessageThreadId(threadMessage, this.appChatsManager.isForum(threadMessage.peerId.toChatId()));\n if(threadId) {\n threadKey = threadMessage.peerId + '_' + threadId;\n }\n }\n\n return threadKey;\n }\n\n public updateMessage(peerId: PeerId, mid: number, broadcastEventName?: 'replies_updated'): Promise {\n const promise: Promise = this.reloadMessages(peerId, mid, true).then(() => {\n const message = this.getMessageByPeer(peerId, mid) as Message.message;\n if(!message) {\n return;\n }\n\n if(broadcastEventName) {\n this.rootScope.dispatchEvent(broadcastEventName, message);\n }\n\n return message;\n });\n\n return promise;\n }\n\n private checkPendingMessage(message: MyMessage) {\n const randomId = this.pendingByMessageId[message.mid];\n let pendingMessage: ReturnType;\n if(randomId) {\n const pendingData = this.pendingByRandomId[randomId];\n if(pendingMessage = this.finalizePendingMessage(randomId, message)) {\n this.rootScope.dispatchEvent('history_update', {\n storageKey: pendingData.storage.key,\n message,\n sequential: pendingData.sequential\n });\n }\n\n delete this.pendingByMessageId[message.mid];\n }\n\n return pendingMessage;\n }\n\n public mutePeer(options: {peerId: PeerId, muteUntil: number, threadId?: number}) {\n if(!(options = this.appNotificationsManager.validatePeerSettings(options))) {\n return;\n }\n\n const {peerId, muteUntil, threadId} = options;\n const settings: InputPeerNotifySettings = {\n _: 'inputPeerNotifySettings'\n };\n\n settings.mute_until = muteUntil;\n\n const peer = this.appPeersManager.getInputPeerById(peerId);\n return this.appNotificationsManager.updateNotifySettings(threadId ? {\n _: 'inputNotifyForumTopic',\n peer,\n top_msg_id: getServerMessageId(threadId)\n } : {\n _: 'inputNotifyPeer',\n peer\n }, settings);\n }\n\n public togglePeerMute({peerId, mute, threadId}: {peerId: PeerId, mute?: boolean, threadId?: number}) {\n if(mute === undefined) {\n mute = !this.appNotificationsManager.isPeerLocalMuted({peerId, respectType: false, threadId});\n }\n\n return this.mutePeer({peerId, muteUntil: mute ? MUTE_UNTIL : 0, threadId});\n }\n\n private findPeerIdByMids(mids: number[]) {\n for(let length = mids.length, i = length - 1; i >= 0; --i) {\n const mid = mids[i];\n const message = this.getMessageById(mid);\n if(message) {\n return message.peerId;\n }\n }\n }\n\n public canSendToPeer(peerId: PeerId, threadId?: number, action: ChatRights = 'send_messages') {\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return false;\n }\n\n if(peerId.isAnyChat()) {\n const chatId = peerId.toChatId();\n if(threadId) {\n const topic = this.dialogsStorage.getForumTopic(peerId, threadId);\n if(topic?.pFlags?.closed && !this.appChatsManager.hasRights(chatId, 'manage_topics')) {\n return false;\n }\n }\n\n // const isChannel = appPeersManager.isChannel(peerId);\n const chat = this.appChatsManager.getChat(chatId) as Chat.chat;\n const hasRights = /* isChannel && */this.appChatsManager.hasRights(chatId, action, undefined, !!threadId);\n return /* !isChannel || */hasRights && (!chat.pFlags.left || !!threadId);\n } else {\n return this.appUsersManager.canSendToUser(peerId);\n }\n }\n\n public finalizePendingMessage(randomId: Long, finalMessage: MyMessage) {\n const pendingData = this.pendingByRandomId[randomId];\n if(!pendingData) {\n return;\n }\n\n const {peerId, tempId, threadId, storage} = pendingData;\n\n [\n this.getHistoryStorage(peerId),\n threadId ? this.getHistoryStorage(peerId, threadId) : undefined\n ]\n .filter(Boolean)\n .forEach((storage) => {\n storage.history.delete(tempId);\n });\n\n // this.log('pending', randomID, historyStorage.pending)\n\n const tempMessage: MyMessage = this.getMessageFromStorage(storage, tempId);\n if(tempMessage) {\n delete finalMessage.pFlags.is_outgoing;\n delete finalMessage.pending;\n delete finalMessage.error;\n delete finalMessage.random_id;\n delete finalMessage.send;\n }\n\n this.rootScope.dispatchEvent('messages_pending');\n\n delete this.pendingByRandomId[randomId];\n\n this.finalizePendingMessageCallbacks(storage, tempId, finalMessage);\n\n return tempMessage;\n }\n\n public finalizePendingMessageCallbacks(storage: MessagesStorage, tempId: number, message: MyMessage) {\n const callbacks = this.tempFinalizeCallbacks[tempId];\n // this.log.warn(callbacks, tempId);\n if(callbacks !== undefined) {\n for(const name in callbacks) {\n const {deferred, callback} = callbacks[name];\n // this.log(`finalizePendingMessageCallbacks: will invoke ${name} callback`);\n callback(message).then(deferred.resolve, deferred.reject);\n }\n\n delete this.tempFinalizeCallbacks[tempId];\n }\n\n // set cached url to media\n if((message as Message.message).media) {\n assumeType(message);\n const {photo: newPhoto, document: newDoc} = message.media as any;\n if(newPhoto) {\n const photo = this.appPhotosManager.getPhoto('' + tempId);\n if(/* photo._ !== 'photoEmpty' */photo) {\n const newPhotoSize = newPhoto.sizes[newPhoto.sizes.length - 1];\n const cacheContext = this.thumbsStorage.getCacheContext(newPhoto, newPhotoSize.type);\n const oldCacheContext = this.thumbsStorage.getCacheContext(photo, THUMB_TYPE_FULL);\n Object.assign(cacheContext, oldCacheContext);\n\n const photoSize = newPhoto.sizes[newPhoto.sizes.length - 1] as PhotoSize.photoSize;\n\n const downloadOptions = getPhotoDownloadOptions(newPhoto, photoSize);\n const fileName = getFileNameByLocation(downloadOptions.location);\n // this.appDownloadManager.fakeDownload(fileName, oldCacheContext.url);\n }\n } else if(newDoc) {\n const oldDoc = this.appDocsManager.getDoc('' + tempId);\n if(oldDoc) {\n const oldCacheContext = this.thumbsStorage.getCacheContext(oldDoc);\n if(\n /* doc._ !== 'documentEmpty' && */\n oldDoc.type &&\n oldDoc.type !== 'sticker' &&\n oldDoc.mime_type !== 'image/gif' &&\n oldCacheContext.url\n ) {\n const cacheContext = this.thumbsStorage.getCacheContext(newDoc);\n Object.assign(cacheContext, oldCacheContext);\n\n const fileName = getDocumentInputFileName(newDoc);\n // this.appDownloadManager.fakeDownload(fileName, oldCacheContext.url);\n }\n }\n } else if((message.media as MessageMedia.messageMediaPoll).poll) {\n delete this.appPollsManager.polls[tempId];\n delete this.appPollsManager.results[tempId];\n }\n }\n\n const tempMessage = this.getMessageFromStorage(storage, tempId);\n storage.delete(tempId);\n\n if(!(tempMessage as Message.message).reply_markup && (message as Message.message).reply_markup) {\n setTimeout(() => { // TODO: refactor it to normal buttons adding\n if(!this.getMessageFromStorage(storage, message.mid)) {\n return;\n }\n\n this.rootScope.dispatchEvent('message_edit', {storageKey: storage.key, peerId: message.peerId, mid: message.mid, message});\n }, 0);\n }\n\n this.handleReleasingMessage(tempMessage, storage);\n\n this.rootScope.dispatchEvent('message_sent', {storageKey: storage.key, tempId, tempMessage, mid: message.mid, message});\n }\n\n public incrementMaxSeenId(maxId: number) {\n if(!maxId || !(!this.maxSeenId || maxId > this.maxSeenId)) {\n return false;\n }\n\n this.maxSeenId = maxId;\n this.appStateManager.pushToState('maxSeenMsgId', maxId);\n\n this.apiManager.invokeApi('messages.receivedMessages', {\n max_id: getServerMessageId(maxId)\n });\n }\n\n public async getMessageReactionsListAndReadParticipants(\n message: Message.message,\n limit?: number,\n reaction?: Reaction,\n offset?: string,\n skipReadParticipants?: boolean,\n skipReactionsList?: boolean\n ) {\n const emptyMessageReactionsList = {\n reactions: [] as MessagePeerReaction[],\n count: 0,\n next_offset: undefined as string\n };\n\n const canViewMessageReadParticipants = await this.canViewMessageReadParticipants(message);\n if(canViewMessageReadParticipants && limit === undefined) {\n limit = 100;\n } else if(limit === undefined) {\n limit = 50;\n }\n\n return Promise.all([\n canViewMessageReadParticipants && !reaction && !skipReadParticipants ? this.getMessageReadParticipants(message.peerId, message.mid).catch(() => [] as UserId[]) : [] as UserId[],\n\n message.reactions?.recent_reactions?.length && !skipReactionsList ? this.appReactionsManager.getMessageReactionsList(message.peerId, message.mid, limit, reaction, offset).catch((err) => emptyMessageReactionsList) : emptyMessageReactionsList\n ]).then(([userIds, messageReactionsList]) => {\n const readParticipantsPeerIds = userIds.map((userId) => userId.toPeerId());\n\n const filteredReadParticipants = readParticipantsPeerIds.slice();\n forEachReverse(filteredReadParticipants, (peerId, idx, arr) => {\n if(messageReactionsList.reactions.some((reaction) => this.appPeersManager.getPeerId(reaction.peer_id) === peerId)) {\n arr.splice(idx, 1);\n }\n });\n\n let combined: {peerId: PeerId, reaction?: Reaction}[] = messageReactionsList.reactions.map((reaction) => ({peerId: this.appPeersManager.getPeerId(reaction.peer_id), reaction: reaction.reaction}));\n combined = combined.concat(filteredReadParticipants.map((readPeerId) => ({peerId: readPeerId})));\n\n return {\n reactions: messageReactionsList.reactions,\n reactionsCount: messageReactionsList.count,\n readParticipants: readParticipantsPeerIds,\n combined: combined,\n nextOffset: messageReactionsList.next_offset\n };\n });\n }\n\n public getMessageReadParticipants(peerId: PeerId, mid: number): Promise {\n return this.apiManager.invokeApiSingle('messages.getMessageReadParticipants', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((userIds) => { // ! convert long to number\n return userIds.map((userId) => userId.toUserId());\n });\n }\n\n public async canViewMessageReadParticipants(message: Message) {\n if(\n message?._ !== 'message' ||\n message.pFlags.is_outgoing ||\n !message.pFlags.out ||\n !this.appPeersManager.isAnyGroup(message.peerId)\n ) {\n return false;\n }\n\n const chat = this.appChatsManager.getChat(message.peerId.toChatId()) as Chat.chat | Chat.channel;\n const appConfig = await this.apiManager.getAppConfig();\n return chat.participants_count <= appConfig.chat_read_mark_size_threshold &&\n (tsNow(true) - message.date) < appConfig.chat_read_mark_expire_period;\n }\n\n public incrementMessageViews(peerId: PeerId, mids: number[]) {\n if(!mids.length) {\n return;\n }\n\n return this.apiManager.invokeApiSingle('messages.getMessagesViews', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid)),\n increment: true\n }).then((views) => {\n const updates: Update[] = new Array(mids.length);\n for(let i = 0, length = mids.length; i < length; ++i) {\n updates[i] = {\n _: 'updateChannelMessageViews',\n channel_id: NULL_PEER_ID,\n peerId,\n id: mids[i],\n views: views.views[i].views\n };\n }\n\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updates',\n updates,\n chats: views.chats,\n users: views.users\n });\n });\n }\n\n private notifyAboutMessage(message: MyMessage, options: Partial<{\n fwdCount: number,\n peerReaction: MessagePeerReaction,\n peerTypeNotifySettings: PeerNotifySettings\n }> = {}) {\n const peerId = this.getMessagePeer(message);\n\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n return;\n }\n\n const tabs = appTabsManager.getTabs();\n let tab = tabs.find((tab) => {\n const {chatPeerIds} = tab.state;\n return chatPeerIds[chatPeerIds.length - 1] === peerId;\n });\n\n if(!tab && tabs.length) {\n tabs.sort((a, b) => a.state.idleStartTime - b.state.idleStartTime);\n tab = !tabs[0].state.idleStartTime ? tabs[0] : tabs[tabs.length - 1];\n }\n\n const port = MTProtoMessagePort.getInstance();\n port.invokeVoid('notificationBuild', {\n message,\n ...options\n }, tab?.source);\n }\n\n public getScheduledMessagesStorage(peerId: PeerId) {\n return this.scheduledMessagesStorage[peerId] ??= this.createMessageStorage(peerId, 'scheduled');\n }\n\n public getScheduledMessageByPeer(peerId: PeerId, mid: number) {\n return this.getMessageFromStorage(this.getScheduledMessagesStorage(peerId), mid);\n }\n\n public getScheduledMessages(peerId: PeerId) {\n if(!this.canSendToPeer(peerId)) return;\n\n const storage = this.getScheduledMessagesStorage(peerId);\n if(storage.size) {\n return [...storage.keys()];\n }\n\n return this.apiManager.invokeApiSingle('messages.getScheduledHistory', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n hash: ''\n }).then((historyResult) => {\n if(historyResult._ !== 'messages.messagesNotModified') {\n this.appUsersManager.saveApiUsers(historyResult.users);\n this.appChatsManager.saveApiChats(historyResult.chats);\n\n const storage = this.getScheduledMessagesStorage(peerId);\n this.saveMessages(historyResult.messages, {storage, isScheduled: true});\n return [...storage.keys()];\n }\n\n return [];\n });\n }\n\n public sendScheduledMessages(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApi('messages.sendScheduledMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public deleteScheduledMessages(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApi('messages.deleteScheduledMessages', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: mids.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getMessageWithReplies(message: Message.message) {\n return this.filterMessages(message, (message) => !!(message as Message.message).replies)[0] as any;\n }\n\n public getMessageWithCommentReplies(message: Message.message) {\n if(message.peerId !== REPLIES_PEER_ID) {\n message = this.getMessageWithReplies(message);\n const replies = message?.replies;\n if(!(replies && replies.pFlags.comments && replies.channel_id.toChatId() !== REPLIES_HIDDEN_CHANNEL_ID)) {\n return;\n }\n }\n\n return message;\n }\n\n public isFetchIntervalNeeded(peerId: PeerId) {\n return peerId.isAnyChat() && (\n !this.appChatsManager.isInChat(peerId.toChatId()) ||\n this.appChatsManager.isForum(peerId.toChatId())\n );\n }\n\n public async getNewHistory(peerId: PeerId, threadId?: number) {\n if(!this.isFetchIntervalNeeded(peerId)) {\n return;\n }\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const slice = historyStorage.history.slice;\n if(!slice.isEnd(SliceEnd.Bottom)) {\n return;\n }\n\n delete historyStorage.maxId;\n slice.unsetEnd(SliceEnd.Bottom);\n\n // if there is no id - then request by first id because cannot request by id 0 with backLimit\n const historyResult = await this.getHistory(peerId, slice[0] ?? 1, 0, 50, threadId);\n for(let i = 0, length = historyResult.history.length; i < length; ++i) {\n this.handleNewMessage(this.getMessageByPeer(peerId, historyResult.history[i]));\n }\n\n return {isBottomEnd: historyStorage.history.slice.isEnd(SliceEnd.Bottom)};\n }\n\n /**\n * * https://core.telegram.org/api/offsets, offset_id is inclusive\n */\n // public getHistory(peerId: PeerId, maxId?: number, limit?: number, backLimit?: number, threadId?: number, onlyCache?: false): Promise | HistoryResult;\n // public getHistory(peerId: PeerId, maxId?: number, limit?: number, backLimit?: number, threadId?: number, onlyCache?: true): HistoryResult;\n public getHistory(peerId: PeerId, maxId: number = 0, limit?: number, backLimit?: number, threadId?: number/* , onlyCache?: boolean */): Promise | HistoryResult {\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n\n if(this.appPeersManager.isPeerRestricted(peerId)) {\n const first = historyStorage.history.first;\n first.setEnd(SliceEnd.Both);\n\n const slice = first.slice(0, 0);\n slice.setEnd(SliceEnd.Both);\n\n return {\n count: 0,\n history: Array.from(slice),\n isEnd: slice.getEnds(),\n offsetIdOffset: 0\n };\n }\n\n let offset = 0;\n /*\n let offsetFound = true;\n\n if(maxId) {\n offsetFound = false;\n for(; offset < historyStorage.history.length; offset++) {\n if(maxId > historyStorage.history.slice[offset]) {\n offsetFound = true;\n break;\n }\n }\n }\n\n if(offsetFound && (\n historyStorage.count !== null && historyStorage.history.length === historyStorage.count ||\n historyStorage.history.length >= offset + limit\n )) {\n if(backLimit) {\n backLimit = Math.min(offset, backLimit);\n offset = Math.max(0, offset - backLimit);\n limit += backLimit;\n } else {\n limit = limit;\n }\n\n const history = historyStorage.history.slice.slice(offset, offset + limit);\n return {\n count: historyStorage.count,\n history: history,\n offsetIdOffset: offset\n };\n }\n\n if(offsetFound) {\n offset = 0;\n } */\n\n if(backLimit) {\n offset = -backLimit;\n limit += backLimit;\n\n /* return this.requestHistory(reqPeerId, maxId, limit, offset, undefined, threadId).then((historyResult) => {\n historyStorage.count = (historyResult as MessagesMessages.messagesMessagesSlice).count || historyResult.messages.length;\n\n const history = (historyResult.messages as MyMessage[]).map((message) => message.mid);\n return {\n count: historyStorage.count,\n history,\n offsetIdOffset: (historyResult as MessagesMessages.messagesMessagesSlice).offset_id_offset || 0\n };\n }); */\n }\n\n const haveSlice = historyStorage.history.sliceMe(maxId, offset, limit);\n if(haveSlice && (haveSlice.slice.length === limit || (haveSlice.fulfilled & SliceEnd.Both) === SliceEnd.Both)) {\n return {\n count: historyStorage.count,\n history: Array.from(haveSlice.slice),\n isEnd: haveSlice.slice.getEnds(),\n offsetIdOffset: haveSlice.offsetIdOffset\n };\n }\n\n // if(onlyCache) {\n // return;\n // }\n\n return this.fillHistoryStorage(peerId, maxId, limit, offset, historyStorage, threadId).then(() => {\n const slice = historyStorage.history.sliceMe(maxId, offset, limit);\n const f = slice?.slice || historyStorage.history.constructSlice();\n return {\n count: historyStorage.count,\n history: Array.from(f),\n isEnd: f.getEnds(),\n offsetIdOffset: slice?.offsetIdOffset || historyStorage.count\n };\n });\n }\n\n public isHistoryResultEnd(historyResult: Exclude, limit: number, add_offset: number) {\n const {offset_id_offset, messages} = historyResult as MessagesMessages.messagesMessagesSlice;\n\n const count = (historyResult as MessagesMessages.messagesMessagesSlice).count || messages.length;\n const offsetIdOffset = offset_id_offset || 0;\n\n const topWasMeantToLoad = add_offset < 0 ? limit + add_offset : limit;\n\n const isTopEnd = offsetIdOffset >= (count - topWasMeantToLoad) || count < topWasMeantToLoad;\n const isBottomEnd = !offsetIdOffset || (add_offset < 0 && (offsetIdOffset + add_offset) <= 0);\n\n return {count, offsetIdOffset, isTopEnd, isBottomEnd};\n }\n\n public mergeHistoryResult(\n slicedArray: SlicedArray,\n historyResult: Parameters[0],\n offset_id: number,\n limit: number,\n add_offset: number\n ) {\n const {messages} = historyResult as MessagesMessages.messagesMessagesSlice;\n const isEnd = this.isHistoryResultEnd(historyResult, limit, add_offset);\n const {count, offsetIdOffset, isTopEnd, isBottomEnd} = isEnd;\n const mids = messages.map((message) => {\n return (message as MyMessage).mid;\n });\n\n // * add bound manually.\n // * offset_id will be inclusive only if there is 'add_offset' <= -1 (-1 - will only include the 'offset_id')\n // * check that offset_id is not 0\n if(offset_id && getServerMessageId(offset_id) && !mids.includes(offset_id) && offsetIdOffset < count) {\n let i = 0;\n for(const length = mids.length; i < length; ++i) {\n if(offset_id > mids[i]) {\n break;\n }\n }\n\n mids.splice(i, 0, offset_id);\n }\n\n const slice = slicedArray.insertSlice(mids) || slicedArray.slice;\n if(isTopEnd) {\n slice.setEnd(SliceEnd.Top);\n }\n\n if(isBottomEnd) {\n slice.setEnd(SliceEnd.Bottom);\n }\n\n return {slice, mids, messages, ...isEnd};\n }\n\n public fillHistoryStorage(peerId: PeerId, offset_id: number, limit: number, add_offset: number, historyStorage: HistoryStorage, threadId?: number): Promise {\n const wasMaxId = historyStorage.maxId;\n return this.requestHistory(peerId, offset_id, limit, add_offset, undefined, threadId).then((historyResult) => {\n const {count, isBottomEnd, slice, messages} = this.mergeHistoryResult(historyStorage.history, historyResult, offset_id, limit, add_offset);\n\n historyStorage.count = count;\n\n /* if(!maxId && historyResult.messages.length) {\n maxId = this.incrementMessageId((historyResult.messages[0] as MyMessage).mid, 1);\n }\n\n const wasTotalCount = historyStorage.history.length; */\n\n for(let i = 0, length = messages.length; i < length; ++i) {\n const message = messages[i] as MyMessage;\n if(this.mergeReplyKeyboard(historyStorage, message)) {\n this.rootScope.dispatchEvent('history_reply_markup', {peerId});\n }\n }\n\n if(isBottomEnd) {\n const newMaxId = slice[0];\n\n if(historyStorage.maxId === wasMaxId) {\n const first = historyStorage.history.first;\n if(first !== slice) {\n historyStorage.history.deleteSlice(first);\n }\n\n if(historyStorage.maxId !== newMaxId) {\n historyStorage.maxId = slice[0]; // ! WARNING\n\n this.reloadConversation(peerId); // when top_message is deleted but cached\n }\n }\n }\n\n /* const isBackLimit = offset < 0 && -offset !== fullLimit;\n if(isBackLimit) {\n return;\n }\n\n const totalCount = historyStorage.history.length;\n fullLimit -= (totalCount - wasTotalCount);\n\n const migratedNextPeer = this.migratedFromTo[peerId];\n const migratedPrevPeer = this.migratedToFrom[peerId]\n const isMigrated = migratedNextPeer !== undefined || migratedPrevPeer !== undefined;\n\n if(isMigrated) {\n historyStorage.count = Math.max(historyStorage.count, totalCount) + 1;\n }\n\n if(fullLimit > 0) {\n maxId = historyStorage.history.slice[totalCount - 1];\n if(isMigrated) {\n if(!historyResult.messages.length) {\n if(migratedPrevPeer) {\n maxId = 0;\n peerId = migratedPrevPeer;\n } else {\n historyStorage.count = totalCount;\n return true;\n }\n }\n\n return this.fillHistoryStorage(peerId, maxId, fullLimit, historyStorage, threadId);\n } else if(totalCount < historyStorage.count) {\n return this.fillHistoryStorage(peerId, maxId, fullLimit, offset, historyStorage, threadId);\n }\n } */\n });\n }\n\n public requestHistory(peerId: PeerId, maxId: number, limit = 0, offset = 0, offsetDate = 0, threadId = 0): Promise> {\n // console.trace('requestHistory', peerId, maxId, limit, offset);\n\n // rootScope.broadcast('history_request');\n\n const options: MessagesGetReplies | MessagesGetHistory = {\n peer: this.appPeersManager.getInputPeerById(peerId),\n offset_id: getServerMessageId(maxId) || 0,\n offset_date: offsetDate,\n add_offset: offset,\n limit,\n max_id: 0,\n min_id: 0,\n hash: 0\n };\n\n if(threadId) {\n (options as MessagesGetReplies).msg_id = getServerMessageId(threadId) || 0;\n }\n\n const promise: ReturnType = this.apiManager.invokeApiSingle(threadId ? 'messages.getReplies' : 'messages.getHistory', options, {\n // timeout: APITIMEOUT,\n noErrorBox: true\n }) as any;\n\n return promise.then((historyResult) => {\n if(DEBUG) {\n this.log('requestHistory result:', peerId, historyResult, maxId, limit, offset);\n }\n\n this.appUsersManager.saveApiUsers(historyResult.users);\n this.appChatsManager.saveApiChats(historyResult.chats);\n this.saveMessages(historyResult.messages);\n\n if('pts' in historyResult) {\n this.apiUpdatesManager.addChannelState(peerId.toChatId(), historyResult.pts);\n }\n\n let length = historyResult.messages.length, count = (historyResult as MessagesMessages.messagesMessagesSlice).count;\n if(length && !historyResult.messages[length - 1]) {\n historyResult.messages.splice(length - 1, 1);\n length--;\n count--;\n }\n\n // will load more history if last message is album grouped (because it can be not last item)\n // historyResult.messages: desc sorted\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n const oldestMessage: Message.message = historyResult.messages[length - 1] as any;\n if(length && oldestMessage.grouped_id) {\n const foundSlice = historyStorage.history.findSlice(oldestMessage.mid);\n if(foundSlice && (foundSlice.slice.length + historyResult.messages.length) < count) {\n return this.requestHistory(peerId, oldestMessage.mid, 10, 0, offsetDate, threadId).then((_historyResult) => {\n return historyResult;\n });\n }\n }\n\n return historyResult;\n }, (error) => {\n switch(error.type) {\n case 'CHANNEL_PRIVATE':\n let channel = this.appChatsManager.getChat(peerId.toChatId());\n if(channel._ === 'channel') {\n channel = {\n _: 'channelForbidden',\n id: peerId.toChatId(),\n access_hash: channel.access_hash,\n title: channel.title,\n pFlags: channel.pFlags\n };\n }\n\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updates',\n updates: [{\n _: 'updateChannel',\n channel_id: peerId.toChatId()\n }],\n chats: [channel],\n users: []\n });\n break;\n }\n\n throw error;\n });\n }\n\n public fetchSingleMessages() {\n if(this.fetchSingleMessagesPromise) {\n return this.fetchSingleMessagesPromise;\n }\n\n return this.fetchSingleMessagesPromise = pause(0).then(() => {\n const requestPromises: Promise[] = [];\n\n for(const [peerId, map] of this.needSingleMessages) {\n const mids = [...map.keys()];\n const msgIds: InputMessage[] = mids.map((mid) => {\n return {\n _: 'inputMessageID',\n id: getServerMessageId(mid)\n };\n });\n\n let promise: Promise;\n if(peerId.isAnyChat() && this.appPeersManager.isChannel(peerId)) {\n promise = this.apiManager.invokeApiSingle('channels.getMessages', {\n channel: this.appChatsManager.getChannelInput(peerId.toChatId()),\n id: msgIds\n });\n } else {\n promise = this.apiManager.invokeApiSingle('messages.getMessages', {\n id: msgIds\n });\n }\n\n const after = promise.then((getMessagesResult) => {\n assumeType>(getMessagesResult);\n\n this.appUsersManager.saveApiUsers(getMessagesResult.users);\n this.appChatsManager.saveApiChats(getMessagesResult.chats);\n const messages = this.saveMessages(getMessagesResult.messages);\n\n for(let i = 0; i < messages.length; ++i) {\n const message = messages[i];\n if(!message) {\n continue;\n }\n\n const mid = generateMessageId(message.id);\n const promise = map.get(mid);\n promise.resolve(message);\n map.delete(mid);\n }\n\n if(map.size) {\n for(const [mid, promise] of map) {\n promise.resolve(this.generateEmptyMessage(mid));\n }\n }\n }).finally(() => {\n this.rootScope.dispatchEvent('messages_downloaded', {peerId, mids});\n });\n\n requestPromises.push(after);\n }\n\n this.needSingleMessages.clear();\n\n return Promise.all(requestPromises).then(noop, noop).then(() => {\n this.fetchSingleMessagesPromise = undefined;\n if(this.needSingleMessages.size) this.fetchSingleMessages();\n });\n });\n }\n\n public reloadMessages(peerId: PeerId, mid: number, overwrite?: boolean): Promise;\n public reloadMessages(peerId: PeerId, mid: number[], overwrite?: boolean): Promise;\n public reloadMessages(peerId: PeerId, mid: number | number[], overwrite?: boolean): Promise {\n if(Array.isArray(mid)) {\n return Promise.all(mid.map((mid) => {\n return this.reloadMessages(peerId, mid, overwrite);\n }));\n }\n\n const message = this.getMessageByPeer(peerId, mid);\n if(message && !overwrite) {\n this.rootScope.dispatchEvent('messages_downloaded', {peerId, mids: [mid]});\n return Promise.resolve(message);\n } else {\n let map = this.needSingleMessages.get(peerId);\n if(!map) {\n this.needSingleMessages.set(peerId, map = new Map());\n }\n\n let promise = map.get(mid);\n if(promise) {\n return promise;\n }\n\n promise = deferredPromise();\n map.set(mid, promise);\n this.fetchSingleMessages();\n return promise;\n }\n }\n\n public getExtendedMedia(peerId: PeerId, mids: number[]) {\n let map = this.extendedMedia.get(peerId);\n if(!map) {\n this.extendedMedia.set(peerId, map = new Map());\n }\n\n const deferred = deferredPromise();\n const toRequest: number[] = [];\n const promises = mids.map((mid) => {\n let promise = map.get(mid);\n if(!promise) {\n map.set(mid, promise = deferred);\n toRequest.push(mid);\n\n promise.then(() => {\n map.delete(mid);\n if(!map.size && this.extendedMedia.get(peerId) === map) {\n this.extendedMedia.delete(peerId);\n }\n });\n }\n\n return promise;\n });\n\n if(!toRequest.length) {\n deferred.resolve();\n } else {\n this.apiManager.invokeApi('messages.getExtendedMedia', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: toRequest.map((mid) => getServerMessageId(mid))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n deferred.resolve();\n });\n }\n\n return Promise.all(promises);\n }\n\n public fetchMessageReplyTo(message: MyMessage) {\n if(!message.reply_to_mid) return Promise.resolve(this.generateEmptyMessage(0));\n const replyToPeerId = message.reply_to.reply_to_peer_id ? this.appPeersManager.getPeerId(message.reply_to.reply_to_peer_id) : message.peerId;\n return this.reloadMessages(replyToPeerId, message.reply_to_mid).then((originalMessage) => {\n if(!originalMessage) { // ! break the infinite loop\n message = this.getMessageByPeer(message.peerId, message.mid); // message can come from other thread\n delete message.reply_to_mid; // ! WARNING!\n }\n\n if(message._ === 'messageService') {\n const peerId = message.peerId;\n this.rootScope.dispatchEvent('message_edit', {\n storageKey: `${peerId}_history`,\n peerId: peerId,\n mid: message.mid,\n message\n });\n\n if(this.isMessageIsTopMessage(message)) {\n this.rootScope.dispatchEvent('dialogs_multiupdate', new Map([[peerId, {dialog: this.getDialogOnly(peerId)}]]));\n }\n }\n\n return originalMessage;\n });\n }\n\n private getTypingKey(peerId: PeerId, threadId?: number) {\n return threadId ? `${peerId}_${threadId}` : peerId;\n }\n\n public setTyping(\n peerId: PeerId,\n action: SendMessageAction,\n force?: boolean,\n threadId?: number\n ): Promise {\n if(threadId && !this.appPeersManager.isForum(peerId)) {\n threadId = undefined;\n }\n\n const key = this.getTypingKey(peerId, threadId);\n let typing = this.typings[key];\n if(\n !peerId ||\n !this.canSendToPeer(peerId) ||\n peerId === this.appPeersManager.peerId ||\n // (!force && deepEqual(typing?.action, action))\n (!force && typing?.action?._ === action._)\n ) {\n return Promise.resolve(false);\n }\n\n if(typing?.timeout) {\n clearTimeout(typing.timeout);\n }\n\n typing = this.typings[key] = {\n action\n };\n\n return this.apiManager.invokeApi('messages.setTyping', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n action,\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n }).finally(() => {\n if(typing === this.typings[key]) {\n typing.timeout = ctx.setTimeout(() => {\n delete this.typings[key];\n }, 6000);\n }\n });\n }\n\n private handleReleasingMessage(message: MyMessage, storage: MessagesStorage) {\n const media = (message as Message.message).media;\n if(media) {\n const c = (media as MessageMedia.messageMediaWebPage).webpage as WebPage.webPage || media as MessageMedia.messageMediaPhoto | MessageMedia.messageMediaDocument;\n const smth: Photo.photo | MyDocument = (c as MessageMedia.messageMediaPhoto).photo as any || (c as MessageMedia.messageMediaDocument).document as any;\n\n if(smth?.file_reference) {\n this.referenceDatabase.deleteContext(smth.file_reference, {type: 'message', peerId: message.peerId, messageId: message.mid});\n }\n\n if('webpage' in media && media.webpage) {\n const isScheduled = this.getScheduledMessagesStorage(message.peerId) === storage;\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(message.peerId, message.mid, isScheduled);\n this.appWebPagesManager.deleteWebPageFromPending(media.webpage, messageKey);\n }\n\n if((media as MessageMedia.messageMediaPoll).poll) {\n this.appPollsManager.updatePollToMessage(message as Message.message, false);\n }\n }\n }\n\n private handleDeletedMessages(peerId: PeerId, storage: MessagesStorage, messages: number[]) {\n const history: {\n count: number,\n unread: number,\n unreadMentions: number,\n msgs: Set,\n albums?: {[groupId: string]: Set},\n } = {\n count: 0,\n unread: 0,\n unreadMentions: 0,\n msgs: new Set()\n };\n\n for(const mid of messages) {\n const message: MyMessage = this.getMessageFromStorage(storage, mid);\n if(!message) {\n this.fixDialogUnreadMentionsIfNoMessage(peerId);\n continue;\n }\n\n this.handleReleasingMessage(message, storage);\n\n this.updateMessageRepliesIfNeeded(message);\n\n if(!message.pFlags.out && !message.pFlags.is_outgoing && message.pFlags.unread) {\n ++history.unread;\n this.rootScope.dispatchEvent('notification_cancel', 'msg' + mid);\n\n if(message.pFlags.mentioned) {\n ++history.unreadMentions;\n this.modifyCachedMentions(peerId, mid, false);\n }\n }\n\n ++history.count;\n history.msgs.add(mid);\n\n message.deleted = true;\n\n const groupedId = (message as Message.message).grouped_id;\n if(groupedId) {\n const groupedStorage = this.groupedMessagesStorage[groupedId];\n if(groupedStorage) {\n groupedStorage.delete(mid);\n\n if(!history.albums) history.albums = {};\n (history.albums[groupedId] || (history.albums[groupedId] = new Set())).add(mid);\n\n if(!groupedStorage.size) {\n delete history.albums;\n delete this.groupedMessagesStorage[groupedId];\n }\n }\n }\n\n storage.delete(mid);\n }\n\n if(history.albums) {\n for(const groupedId in history.albums) {\n this.dispatchAlbumEdit(groupedId, storage, [...history.albums[groupedId]]);\n /* const mids = this.getMidsByAlbum(groupId);\n if(mids.length) {\n const mid = Math.max(...mids);\n rootScope.$broadcast('message_edit', {peerId, mid, justMedia: false});\n } */\n }\n }\n\n return history;\n }\n\n private handleEditedMessage(oldMessage: Message, newMessage: Message, storage: MessagesStorage) {\n if(oldMessage._ === 'message') {\n if((oldMessage.media as MessageMedia.messageMediaWebPage)?.webpage) {\n const messageKey = this.appWebPagesManager.getMessageKeyForPendingWebPage(oldMessage.peerId, oldMessage.mid, !!oldMessage.pFlags.is_scheduled);\n this.appWebPagesManager.deleteWebPageFromPending((oldMessage.media as MessageMedia.messageMediaWebPage).webpage, messageKey);\n }\n\n const groupedId = oldMessage.grouped_id;\n if(groupedId) {\n this.dispatchAlbumEdit(groupedId, storage, []);\n }\n }\n }\n\n private dispatchAlbumEdit(groupedId: string, storage: MessagesStorage, deletedMids?: number[]) {\n const mids = this.getMidsByAlbum(groupedId);\n const messages = mids.map((mid) => this.getMessageFromStorage(storage, mid)) as Message.message[];\n this.rootScope.dispatchEvent('album_edit', {peerId: messages[0].peerId, groupId: groupedId, deletedMids: deletedMids || [], messages});\n }\n\n public getDialogUnreadCount(dialog: Dialog | ForumTopic) {\n let unreadCount = dialog.unread_count;\n if(!this.dialogsStorage.isTopic(dialog) && this.appPeersManager.isForum(dialog.peerId)) {\n const forumUnreadCount = this.dialogsStorage.getForumUnreadCount(dialog.peerId);\n if(forumUnreadCount instanceof Promise) {\n unreadCount = 0;\n } else {\n unreadCount = forumUnreadCount.count;\n }\n }\n\n return unreadCount || +!!(dialog as Dialog).pFlags?.unread_mark;\n }\n\n public isDialogUnread(dialog: Dialog | ForumTopic) {\n return !!this.getDialogUnreadCount(dialog);\n }\n\n public canForward(message: Message.message | Message.messageService) {\n return message?._ === 'message' && !(message as Message.message).pFlags.noforwards && !this.appPeersManager.noForwards(message.peerId);\n }\n\n private pushBatchUpdate(\n event: E,\n callback: C,\n key: string,\n getElementCallback?: () => MapValueType[0]>\n ) {\n let details = this.batchUpdates[event];\n if(!details) {\n // @ts-ignore\n details = this.batchUpdates[event] = {\n callback,\n batch: new Map()\n };\n }\n\n if(!details.batch.has(key)) {\n // @ts-ignore\n details.batch.set(key, getElementCallback ? getElementCallback() : undefined);\n this.batchUpdatesDebounced();\n }\n }\n\n private getMessagesFromMap>(map: T) {\n const newMap: Map> = new Map();\n for(const [key, value] of map) {\n const [peerIdStr, mid] = key.split('_');\n const message = this.getMessageByPeer(peerIdStr.toPeerId(), +mid) as Message.message;\n if(!message) {\n continue;\n }\n\n newMap.set(message, value);\n }\n\n return newMap;\n }\n\n private batchUpdateViews = (batch: Map) => {\n const toDispatch: {peerId: PeerId, mid: number, views: number}[] = [];\n\n const map = this.getMessagesFromMap(batch);\n for(const [message] of map) {\n toDispatch.push({\n peerId: message.peerId,\n mid: message.mid,\n views: message.views\n })\n }\n\n return toDispatch;\n };\n\n private batchUpdateReactions = (batch: Map) => {\n const toDispatch: {message: Message.message, changedResults: ReactionCount.reactionCount[]}[] = [];\n\n const map = this.getMessagesFromMap(batch);\n for(const [message, previousReactions] of map) {\n const results = message.reactions?.results ?? [];\n const previousResults = previousReactions?.results ?? [];\n const changedResults = results.filter((reactionCount) => {\n const previousReactionCount = previousResults.find((_reactionCount) => reactionsEqual(_reactionCount.reaction, reactionCount.reaction));\n return (\n message.pFlags.out && (\n !previousReactionCount ||\n reactionCount.count > previousReactionCount.count\n )\n ) || (\n reactionCount.chosen_order !== undefined && (\n !previousReactionCount ||\n previousReactionCount.chosen_order === undefined\n )\n );\n });\n\n toDispatch.push({message, changedResults});\n }\n\n return toDispatch;\n };\n\n public saveDefaultSendAs(peerId: PeerId, sendAsPeerId: PeerId) {\n const channelFull = this.appProfileManager.getCachedFullChat(peerId.toChatId()) as ChatFull.channelFull;\n channelFull.default_send_as = this.appPeersManager.getOutputPeer(sendAsPeerId);\n return this.apiManager.invokeApi('messages.saveDefaultSendAs', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n send_as: this.appPeersManager.getInputPeerById(sendAsPeerId)\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getFileNameByLocation} from '../../../../helpers/fileName';\nimport {Document} from '../../../../layer';\nimport getDocumentInputFileLocation from './getDocumentInputFileLocation';\n\nexport default function getDocumentInputFileName(doc: Document.document, thumbSize?: string) {\n return getFileNameByLocation(getDocumentInputFileLocation(doc, thumbSize), {fileName: doc.file_name});\n}\n","export default function convertInputKeyToKey(inputKey: string) {\n const str = inputKey.replace('input', '');\n return (str[0].toLowerCase() + str.slice(1)) as T;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport tsNow from '../../helpers/tsNow';\nimport {InputNotifyPeer, InputPeerNotifySettings, NotifyPeer, PeerNotifySettings, Update} from '../../layer';\nimport {MUTE_UNTIL} from '../mtproto/mtproto_config';\nimport throttle from '../../helpers/schedulers/throttle';\nimport convertInputKeyToKey from '../../helpers/string/convertInputKeyToKey';\nimport {AppManager} from './manager';\nimport ctx from '../../environment/ctx';\nimport assumeType from '../../helpers/assumeType';\nimport generateMessageId from './utils/messageId/generateMessageId';\n\ntype ImSadAboutIt = Promise | PeerNotifySettings;\ntype MyNotifyPeer = Exclude;\ntype MyInputNotifyPeer = Exclude;\nexport class AppNotificationsManager extends AppManager {\n private peerSettings = {\n notifyPeer: {} as {[peerId: string]: ImSadAboutIt},\n notifyUsers: null as ImSadAboutIt,\n notifyChats: null as ImSadAboutIt,\n notifyBroadcasts: null as ImSadAboutIt,\n notifyForumTopic: {} as {[peerId_threadId: string]: ImSadAboutIt}\n };\n // private exceptions: {[peerId: string]: PeerNotifySettings} = {};\n\n private getNotifyPeerTypePromise: Promise;\n\n private checkMuteUntilTimeout: number;\n private checkMuteUntilThrottled: () => void;\n\n private notifyContactsSignUp: Promise;\n\n protected after() {\n this.checkMuteUntilThrottled = throttle(this.checkMuteUntil, 1000, false);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateNotifySettings: (update) => {\n const {peer} = update;\n const isTopic = peer._ === 'notifyForumTopic';\n const isPeerType = peer._ === 'notifyPeer' || isTopic;\n const peerId = isPeerType && this.appPeersManager.getPeerId(peer.peer);\n const key = !isPeerType ? peer._ : undefined;\n this.savePeerSettings({\n key,\n peerId,\n threadId: isTopic ? generateMessageId(peer.top_msg_id) : undefined,\n settings: update.notify_settings\n });\n this.rootScope.dispatchEvent('notify_settings', update);\n }\n });\n\n return this.appStateManager.getState().then((state) => {\n if(state.notifySettings) {\n for(const key in state.notifySettings) {\n assumeType(key);\n this.savePeerSettings({\n key,\n settings: state.notifySettings[key]\n });\n }\n }\n });\n }\n\n public getNotifySettings(peer: InputNotifyPeer): ImSadAboutIt {\n let key: any = convertInputKeyToKey(peer._);\n let obj: any = this.peerSettings[key as MyNotifyPeer];\n\n let peerId: PeerId;\n if(peer._ === 'inputNotifyPeer') {\n peerId = key = this.appPeersManager.getPeerId(peer.peer);\n obj = obj[key];\n }\n\n if(obj) {\n return obj;\n }\n\n return (obj || this.peerSettings)[key] = this.apiManager.invokeApi('account.getNotifySettings', {peer})\n .then((settings) => {\n this.savePeerSettings({\n key,\n peerId,\n settings\n });\n\n return settings;\n });\n }\n\n public getNotifyPeerTypeSettings() {\n if(this.getNotifyPeerTypePromise) return this.getNotifyPeerTypePromise;\n\n const promises = (['inputNotifyBroadcasts', 'inputNotifyUsers', 'inputNotifyChats'] as MyInputNotifyPeer[])\n .map((inputKey) => {\n return this.getNotifySettings({_: inputKey});\n });\n\n return this.getNotifyPeerTypePromise = Promise.all(promises);\n }\n\n public updateNotifySettings(peer: InputNotifyPeer, settings: InputPeerNotifySettings) {\n // this.savePeerSettings(peerId, settings);\n\n /* const inputSettings: InputPeerNotifySettings = copy(settings) as any;\n inputSettings._ = 'inputPeerNotifySettings'; */\n\n return this.apiManager.invokeApi('account.updateNotifySettings', {\n peer,\n settings\n }).then((value) => {\n if(value) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateNotifySettings',\n peer: {\n ...peer as any,\n _: convertInputKeyToKey(peer._)\n },\n notify_settings: { // ! WOW, IT WORKS !\n ...settings,\n _: 'peerNotifySettings'\n }\n });\n }\n });\n }\n\n // public getNotifyExceptions() {\n // apiManager.invokeApi('account.getNotifyExceptions', {compare_sound: true})\n // .then((updates) => {\n // apiUpdatesManager.processUpdateMessage(updates);\n // });\n // }\n\n public getContactSignUpNotification() {\n if(this.notifyContactsSignUp) return this.notifyContactsSignUp;\n return this.notifyContactsSignUp = this.apiManager.invokeApi('account.getContactSignUpNotification');\n }\n\n public setContactSignUpNotification(silent: boolean) {\n this.apiManager.invokeApi('account.setContactSignUpNotification', {silent})\n .then((value) => {\n this.notifyContactsSignUp = Promise.resolve(!silent);\n });\n }\n\n private checkMuteUntil = () => {\n if(this.checkMuteUntilTimeout !== undefined) {\n clearTimeout(this.checkMuteUntilTimeout);\n this.checkMuteUntilTimeout = undefined;\n }\n\n const timestamp = tsNow(true);\n let closestMuteUntil = MUTE_UNTIL;\n\n const p = (peerNotifySettings: ImSadAboutIt): peerNotifySettings is PeerNotifySettings => {\n if(peerNotifySettings instanceof Promise) {\n return false;\n }\n\n const muteUntil = peerNotifySettings.mute_until;\n if(!muteUntil) {\n return false;\n }\n\n if(muteUntil <= timestamp) {\n // ! do not delete it because peer's unique settings will be overwritten in getPeerLocalSettings with type's settings\n peerNotifySettings.mute_until = 0;\n return true;\n } else if(muteUntil < closestMuteUntil) {\n closestMuteUntil = muteUntil;\n }\n\n return false;\n };\n\n [\n 'notifyPeer' as const,\n 'notifyForumTopic' as const\n ].forEach((typeKey) => {\n for(const key in this.peerSettings[typeKey]) {\n const peerNotifySettings = this.peerSettings[typeKey][key];\n if(p(peerNotifySettings)) {\n const [peerId, topicId] = key.split('_');\n const peer = this.appPeersManager.getOutputPeer(peerId.toPeerId());\n this.apiUpdatesManager.saveUpdate({\n _: 'updateNotifySettings',\n peer: topicId ? {\n _: 'notifyForumTopic',\n peer,\n top_msg_id: +topicId\n } : {\n _: 'notifyPeer',\n peer\n },\n notify_settings: peerNotifySettings\n });\n }\n }\n });\n\n const timeout = Math.min(1800e3, (closestMuteUntil - timestamp) * 1000);\n this.checkMuteUntilTimeout = ctx.setTimeout(this.checkMuteUntil, timeout);\n };\n\n public getPeerKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n }\n\n public savePeerSettings({key, peerId, threadId, settings}: {\n key?: Exclude,\n peerId?: PeerId,\n threadId?: number,\n settings: PeerNotifySettings\n }) {\n let obj: any;\n if(peerId) {\n key = this.getPeerKey(peerId, threadId) as any;\n obj = this.peerSettings[threadId ? 'notifyForumTopic' : 'notifyPeer'];\n }\n\n (obj || this.peerSettings)[key] = settings;\n\n if(!peerId) {\n this.rootScope.dispatchEvent('notify_peer_type_settings', {key, settings});\n this.appStateManager.getState().then((state) => {\n const notifySettings = state.notifySettings;\n notifySettings[key] = settings;\n this.appStateManager.pushToState('notifySettings', notifySettings);\n });\n } else {\n this.checkMuteUntilThrottled();\n }\n\n // rootScope.broadcast('notify_settings', {peerId: peerId});\n }\n\n public isMuted(peerNotifySettings: PeerNotifySettings) {\n return peerNotifySettings._ === 'peerNotifySettings' &&\n (peerNotifySettings.silent || (peerNotifySettings.mute_until !== undefined && (peerNotifySettings.mute_until * 1000) > tsNow()));\n }\n\n private getPeerMuted(peerId: PeerId) {\n const ret = this.getNotifySettings({_: 'inputNotifyPeer', peer: this.appPeersManager.getInputPeerById(peerId)});\n return (ret instanceof Promise ? ret : Promise.resolve(ret))\n .then((peerNotifySettings) => this.isMuted(peerNotifySettings));\n }\n\n private getPeerLocalSettings({\n peerId,\n respectType = true,\n threadId\n }: {\n peerId: PeerId,\n respectType?: boolean,\n threadId?: number\n }): PeerNotifySettings {\n const n: PeerNotifySettings = {\n _: 'peerNotifySettings'\n };\n\n const peerKey = this.getPeerKey(peerId, threadId);\n const notifySettings = this.peerSettings[threadId ? 'notifyForumTopic' : 'notifyPeer'][peerKey];\n // if(!notifySettings || (notifySettings instanceof Promise)) return false;\n if(notifySettings && !(notifySettings instanceof Promise)) {\n Object.assign(n, notifySettings);\n }\n\n if(respectType) {\n const inputNotify = this.appPeersManager.getInputNotifyPeerById({peerId, ignorePeerId: true, threadId});\n const key = convertInputKeyToKey(inputNotify._);\n const typeNotifySettings = this.peerSettings[key as MyNotifyPeer];\n if(typeNotifySettings && !(typeNotifySettings instanceof Promise)) {\n for(const i in typeNotifySettings) {\n // @ts-ignore\n if(n[i] === undefined) {\n // @ts-ignore\n n[i] = typeNotifySettings[i];\n }\n }\n }\n }\n\n return n;\n }\n\n public validatePeerSettings[0]>(options: T): T {\n if(options.peerId === this.appPeersManager.peerId) return;\n if(options.threadId && !this.appPeersManager.isForum(options.peerId)) options.threadId = undefined;\n return options;\n }\n\n public isPeerLocalMuted(options: Parameters[0]): boolean {\n if(!(options = this.validatePeerSettings(options))) return false;\n\n if(options.threadId) {\n const notifySettings = this.getPeerLocalSettings({...options, respectType: false});\n if(notifySettings.silent !== undefined || notifySettings.mute_until !== undefined) {\n return this.isMuted(notifySettings);\n } else {\n return this.isPeerLocalMuted({...options, threadId: undefined});\n }\n }\n\n const notifySettings = this.getPeerLocalSettings(options);\n const isMuted = this.isMuted(notifySettings);\n return isMuted;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {Chat, ChatPhoto, DialogPeer, InputChannel, InputDialogPeer, InputNotifyPeer, InputPeer, Peer, Update, User, UserProfilePhoto} from '../../layer';\nimport type {LangPackKey} from '../langPack';\nimport {getRestrictionReason} from '../../helpers/restrictions';\nimport isObject from '../../helpers/object/isObject';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\nimport isUser from './utils/peers/isUser';\nimport isAnyChat from './utils/peers/isAnyChat';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\nimport isPeerRestricted from './utils/peers/isPeerRestricted';\nimport getPeerPhoto from './utils/peers/getPeerPhoto';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport type PeerType = 'channel' | 'chat' | 'megagroup' | 'group' | 'saved';\nexport class AppPeersManager extends AppManager {\n public get peerId() {\n return this.appUsersManager.userId.toPeerId();\n }\n /* public savePeerInstance(peerId: PeerId, instance: any) {\n if(peerId < 0) appChatsManager.saveApiChat(instance);\n else appUsersManager.saveApiUser(instance);\n } */\n\n public canPinMessage(peerId: PeerId) {\n return peerId.isUser() || this.appChatsManager.hasRights(peerId.toChatId(), 'pin_messages');\n }\n\n public getPeerPhoto(peerId: PeerId) {\n const peer = this.getPeer(peerId) as User.user | Chat.channel;\n return getPeerPhoto(peer);\n }\n\n public getPeerMigratedTo(peerId: PeerId) {\n if(peerId.isUser()) {\n return false;\n }\n\n const chat = this.appChatsManager.getChat(peerId.toChatId()) as Chat.chat;\n const migratedTo = chat?.migrated_to;\n if(migratedTo && chat.pFlags.deactivated) {\n return getPeerId(migratedTo);\n }\n\n return false;\n }\n\n public getOutputPeer(peerId: PeerId): Peer {\n if(peerId.isUser()) {\n return {_: 'peerUser', user_id: peerId.toUserId()};\n }\n\n const chatId = peerId.toChatId();\n if(this.appChatsManager.isChannel(chatId)) {\n return {_: 'peerChannel', channel_id: chatId};\n }\n\n return {_: 'peerChat', chat_id: chatId};\n }\n\n public getPeerString(peerId: PeerId) {\n if(peerId.isUser()) {\n return this.appUsersManager.getUserString(peerId.toUserId());\n }\n return this.appChatsManager.getChatString(peerId.toChatId());\n }\n\n public getPeerUsername(peerId: PeerId) {\n return this.getPeerActiveUsernames(peerId)[0] || '';\n }\n\n public getPeerActiveUsernames(peerId: PeerId) {\n const peer = this.getPeer(peerId);\n return getPeerActiveUsernames(peer);\n }\n\n public getPeer(peerId: PeerId) {\n return peerId.isUser() ?\n this.appUsersManager.getUser(peerId.toUserId()) :\n this.appChatsManager.getChat(peerId.toChatId());\n }\n\n public getPeerId(peerId: Parameters[0]) {\n return getPeerId(peerId) || (isObject(peerId) && peerId._ === 'inputPeerSelf' && this.peerId) || NULL_PEER_ID;\n }\n\n public getDialogPeer(peerId: PeerId): DialogPeer {\n return {\n _: 'dialogPeer',\n peer: this.getOutputPeer(peerId)\n };\n }\n\n public isChannel(peerId: PeerId): boolean {\n return !peerId.isUser() && this.appChatsManager.isChannel(peerId.toChatId());\n }\n\n public isMegagroup(peerId: PeerId) {\n return !peerId.isUser() && this.appChatsManager.isMegagroup(peerId.toChatId());\n }\n\n public isForum(peerId: PeerId) {\n return !peerId.isUser() && this.appChatsManager.isForum(peerId.toChatId());\n }\n\n public isAnyGroup(peerId: PeerId): boolean {\n return !peerId.isUser() && !this.appChatsManager.isBroadcast(peerId.toChatId());\n }\n\n public isBroadcast(peerId: PeerId): boolean {\n return this.isChannel(peerId) && !this.isMegagroup(peerId);\n }\n\n public isBot(peerId: PeerId): boolean {\n return peerId.isUser() && this.appUsersManager.isBot(peerId.toUserId());\n }\n\n public isContact(peerId: PeerId): boolean {\n return peerId.isUser() && this.appUsersManager.isContact(peerId.toUserId());\n }\n\n public isUser(peerId: PeerId)/* : peerId is UserId */ {\n return isUser(peerId);\n }\n\n public isAnyChat(peerId: PeerId) {\n return isAnyChat(peerId);\n }\n\n public isPeerRestricted(peerId: PeerId) {\n return isPeerRestricted(this.getPeer(peerId));\n }\n\n public getRestrictionReasonText(peerId: PeerId) {\n const peer = this.getPeer(peerId) as Chat.channel | User.user;\n const reason = peer.restriction_reason ? getRestrictionReason(peer.restriction_reason) : undefined;\n if(reason) {\n return reason.text;\n } else {\n return peerId.isUser() ? 'This user is restricted' : 'This chat is restricted';\n }\n }\n\n /* public getInputPeer(peerString: string): InputPeer {\n var firstChar = peerString.charAt(0);\n var peerParams = peerString.substr(1).split('_');\n let id = +peerParams[0];\n\n if(firstChar === 'u') {\n //appUsersManager.saveUserAccess(id, peerParams[1]);\n\n return {\n _: 'inputPeerUser',\n user_id: id,\n access_hash: peerParams[1]\n };\n } else if(firstChar === 'c' || firstChar === 's') {\n //appChatsManager.saveChannelAccess(id, peerParams[1]);\n if(firstChar === 's') {\n appChatsManager.saveIsMegagroup(id);\n }\n\n return {\n _: 'inputPeerChannel',\n channel_id: id,\n access_hash: peerParams[1] || '0'\n };\n } else {\n return {\n _: 'inputPeerChat',\n chat_id: id\n };\n }\n } */\n\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId: true): Exclude;\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId?: false): InputNotifyPeer.inputNotifyPeer;\n // public getInputNotifyPeerById(peerId: PeerId, ignorePeerId?: boolean): InputNotifyPeer {\n public getInputNotifyPeerById({\n peerId,\n ignorePeerId,\n threadId\n }: T): T['ignorePeerId'] extends true ? Exclude : (T['threadId'] extends number ? InputNotifyPeer.inputNotifyForumTopic : InputNotifyPeer.inputNotifyPeer) {\n if(ignorePeerId) {\n if(peerId.isUser()) {\n return {_: 'inputNotifyUsers'} as any;\n } else {\n if(this.isBroadcast(peerId)) {\n return {_: 'inputNotifyBroadcasts'} as any;\n } else {\n return {_: 'inputNotifyChats'} as any;\n }\n }\n } else if(threadId) {\n return {\n _: 'inputNotifyForumTopic',\n peer: this.getInputPeerById(peerId),\n top_msg_id: getServerMessageId(threadId)\n } as any;\n } else {\n return {\n _: 'inputNotifyPeer',\n peer: this.getInputPeerById(peerId)\n } as any;\n }\n }\n\n public getInputPeerById(peerId: PeerId): InputPeer {\n if(!peerId) {\n return {_: 'inputPeerEmpty'};\n }\n\n if(!peerId.isUser()) {\n const chatId = peerId.toChatId();\n return this.appChatsManager.getInputPeer(chatId);\n }\n\n const userId = peerId.toUserId();\n return this.appUsersManager.getUserInputPeer(userId);\n }\n\n /**\n * ! use it only in safe places like requests\n */\n public getInputPeerSelf(): InputPeer.inputPeerSelf {\n return {_: 'inputPeerSelf'};\n }\n\n public getInputDialogPeerById(peerId: PeerId | InputPeer): InputDialogPeer {\n return {\n _: 'inputDialogPeer',\n peer: isObject(peerId) ? peerId : this.getInputPeerById(peerId)\n };\n }\n\n public getPeerSearchText(peerId: PeerId) {\n let text: string;\n if(this.isUser(peerId)) {\n text = '%pu ' + this.appUsersManager.getUserSearchText(peerId.toUserId());\n } else {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n text = '%pg ' + (chat.title || '');\n }\n\n return text;\n }\n\n public getDialogType(peerId: PeerId): PeerType {\n if(this.isMegagroup(peerId)) {\n return 'megagroup';\n } else if(this.isChannel(peerId)) {\n return 'channel';\n } else if(!this.isUser(peerId)) {\n return 'group';\n } else {\n return peerId === this.peerId ? 'saved' : 'chat';\n }\n }\n\n public getDeleteButtonText(peerId: PeerId): Extract {\n switch(this.getDialogType(peerId)) {\n case 'channel':\n return this.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat') ? 'ChannelDelete' : 'ChatList.Context.LeaveChannel';\n\n case 'megagroup':\n case 'group':\n return this.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat') ? 'DeleteMega' : 'ChatList.Context.LeaveGroup';\n\n default:\n return 'ChatList.Context.DeleteChat';\n }\n }\n\n public noForwards(peerId: PeerId) {\n if(peerId.isUser()) return false;\n else {\n const chat = this.appChatsManager.getChat(peerId.toChatId());\n return !!(chat as Chat.chat).pFlags?.noforwards;\n }\n }\n}\n\nexport type IsPeerType = 'isChannel' | 'isMegagroup' | 'isAnyGroup' | 'isBroadcast' | 'isBot' | 'isContact' | 'isUser' | 'isAnyChat';\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Photo, PhotoSize, PhotosPhotos} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceArrayInObject from '../../helpers/object/safeReplaceArrayInObject';\nimport {AppManager} from './manager';\n\nexport type MyPhoto = Photo.photo;\n\n// TIMES = 2 DUE TO SIDEBAR AND CHAT\n// let TEST_FILE_REFERENCE = \"5440692274120994569\", TEST_FILE_REFERENCE_TIMES = 2;\n\nexport class AppPhotosManager extends AppManager {\n private photos: {\n [id: string]: MyPhoto\n } = {};\n\n public savePhoto(photo: Photo, context?: ReferenceContext) {\n if(!photo || photo._ === 'photoEmpty') return;\n\n /* if(photo.id === TEST_FILE_REFERENCE) {\n console.warn('Testing FILE_REFERENCE_EXPIRED');\n const bytes = [2, 67, 175, 43, 190, 0, 0, 20, 62, 95, 111, 33, 45, 99, 220, 116, 218, 11, 167, 127, 213, 18, 127, 32, 243, 202, 117, 80, 30];\n //photo.file_reference = new Uint8Array(bytes);\n photo.file_reference = bytes;\n if(!--TEST_FILE_REFERENCE_TIMES) {\n TEST_FILE_REFERENCE = '';\n }\n } */\n\n const oldPhoto = this.photos[photo.id];\n if(photo.file_reference) { // * because we can have a new object w/o the file_reference while sending\n safeReplaceArrayInObject('file_reference', oldPhoto, photo);\n this.referenceDatabase.saveContext(photo.file_reference, context);\n }\n\n if(photo.sizes?.length) {\n // * sometimes photoStrippedSize can be the last item\n photo.sizes.sort((a, b) => {\n return ((a as PhotoSize.photoSize).size || ((a as PhotoSize.photoSizeProgressive).sizes ? Infinity : 0)) - ((b as PhotoSize.photoSize).size || ((b as PhotoSize.photoSizeProgressive).sizes ? Infinity : 0));\n });\n\n const size = photo.sizes[photo.sizes.length - 1];\n if(size._ === 'photoSizeProgressive') {\n size.size = size.sizes[size.sizes.length - 1];\n }\n }\n\n if(oldPhoto) {\n return Object.assign(oldPhoto, photo);\n }\n\n return this.photos[photo.id] = photo;\n }\n\n public getUserPhotos(userId: UserId, maxId: Photo.photo['id'] = '0', limit: number = 20) {\n const inputUser = this.appUsersManager.getUserInput(userId);\n return this.apiManager.invokeApiCacheable('photos.getUserPhotos', {\n user_id: inputUser,\n offset: 0,\n limit,\n max_id: maxId\n }, {cacheSeconds: 60}).then((photosResult) => {\n this.appUsersManager.saveApiUsers(photosResult.users);\n const photoIds = photosResult.photos.map((photo, idx) => {\n photosResult.photos[idx] = this.savePhoto(photo, {type: 'profilePhoto', peerId: userId.toPeerId()});\n return photo.id;\n });\n\n // ! WARNING !\n if(maxId !== '0' && maxId) {\n const idx = photoIds.indexOf(maxId);\n if(idx !== -1) {\n photoIds.splice(idx, 1);\n }\n }\n\n return {\n count: (photosResult as PhotosPhotos.photosPhotosSlice).count || photoIds.length,\n photos: photoIds\n };\n });\n }\n\n /* public getPhotoURL(photo: MTPhoto | MTMyDocument, photoSize: MTPhotoSize) {\n const downloadOptions = this.getPhotoDownloadOptions(photo, photoSize);\n\n return {url: getFileURL('photo', downloadOptions), location: downloadOptions.location};\n } */\n\n /* public isDownloaded(media: any) {\n const isPhoto = media._ === 'photo';\n const photo = isPhoto ? this.getPhoto(media.id) : null;\n let isDownloaded: boolean;\n if(photo) {\n isDownloaded = photo.downloaded > 0;\n } else {\n const cachedThumb = this.getDocumentCachedThumb(media.id);\n isDownloaded = cachedThumb?.downloaded > 0;\n }\n\n return isDownloaded;\n } */\n\n public getPhoto(photoId: any/* MyPhoto | string */): MyPhoto {\n return isObject(photoId) ? photoId as MyPhoto : this.photos[photoId as any as string];\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport copy from '../../helpers/object/copy';\nimport {InputMedia, Message, MessageEntity, MessageMedia, Poll, PollResults} from '../../layer';\nimport {logger, LogTypes} from '../logger';\nimport parseMarkdown from '../richTextProcessor/parseMarkdown';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\ntype PollId = Poll['id'];\n\nexport class AppPollsManager extends AppManager {\n public polls: {[id: PollId]: Poll} = {};\n public results: {[id: PollId]: PollResults} = {};\n public pollToMessages: {[id: PollId]: Set} = {};\n\n private log = logger('POLLS', LogTypes.Error);\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateMessagePoll: (update) => {\n this.log('updateMessagePoll:', update);\n\n let poll: Poll = update.poll || this.polls[update.poll_id];\n if(!poll) {\n return;\n }\n\n let results = update.results;\n const ret = this.savePoll(poll, results as any);\n poll = ret.poll;\n results = ret.results;\n\n this.rootScope.dispatchEvent('poll_update', {poll, results: results as any});\n }\n });\n }\n\n public savePoll(poll: Poll, results: PollResults, message?: Message.message) {\n if(message) {\n this.updatePollToMessage(message, true);\n }\n\n const id = poll.id;\n if(this.polls[id]) {\n poll = Object.assign(this.polls[id], poll);\n results = this.saveResults(poll, results);\n } else {\n this.polls[id] = poll;\n\n poll.chosenIndexes = [];\n results = this.saveResults(poll, results);\n }\n\n return {poll, results};\n }\n\n public saveResults(poll: Poll, results: PollResults) {\n if(this.results[poll.id]) {\n results = Object.assign(this.results[poll.id], results);\n } else {\n this.results[poll.id] = results;\n }\n\n if(!results.pFlags.min) { // ! https://core.telegram.org/constructor/pollResults - min\n poll.chosenIndexes.length = 0;\n if(results?.results?.length) {\n results.results.forEach((answer, idx) => {\n if(answer.pFlags?.chosen) {\n poll.chosenIndexes.push(idx);\n }\n });\n }\n }\n\n return results;\n }\n\n public getPoll(pollId: PollId): {poll: Poll, results: PollResults} {\n return {\n poll: this.polls[pollId],\n results: this.results[pollId]\n };\n }\n\n public getInputMediaPoll(poll: Poll, correctAnswers?: Uint8Array[], solution?: string, solutionEntities?: MessageEntity[]): InputMedia.inputMediaPoll {\n if(solution) {\n if(!solutionEntities) {\n solutionEntities = [];\n }\n\n solution = parseMarkdown(solution, solutionEntities);\n } else {\n solution = undefined; // can be string here\n }\n\n return {\n _: 'inputMediaPoll',\n poll,\n correct_answers: correctAnswers,\n solution,\n solution_entities: solution ? solutionEntities : undefined\n };\n }\n\n public updatePollToMessage(message: Message.message, add: boolean) {\n const {id} = (message.media as MessageMedia.messageMediaPoll).poll;\n let set = this.pollToMessages[id];\n\n if(!add && !set) {\n return;\n }\n\n if(!set) {\n set = this.pollToMessages[id] = new Set();\n }\n\n const key = message.peerId + '_' + message.mid;\n if(add) set.add(key);\n else set.delete(key);\n\n if(!add && !set.size) {\n delete this.polls[id];\n delete this.results[id];\n delete this.pollToMessages[id];\n }\n }\n\n public sendVote(message: Message.message, optionIds: number[]): Promise {\n const poll: Poll = (message.media as MessageMedia.messageMediaPoll).poll;\n\n const options: Uint8Array[] = optionIds.map((index) => {\n return poll.answers[index].option;\n });\n\n const messageId = message.mid;\n const peerId = message.peerId;\n const inputPeer = this.appPeersManager.getInputPeerById(peerId);\n\n if(message.pFlags.is_outgoing) {\n return this.appMessagesManager.invokeAfterMessageIsSent(messageId, 'sendVote', (message) => {\n this.log('invoke sendVote callback');\n return this.sendVote(message as Message.message, optionIds);\n });\n }\n\n return this.apiManager.invokeApi('messages.sendVote', {\n peer: inputPeer,\n msg_id: getServerMessageId(message.mid),\n options\n }).then((updates) => {\n this.log('sendVote updates:', updates);\n this.apiUpdatesManager.processUpdateMessage(updates);\n });\n }\n\n public getResults(message: Message.message) {\n const inputPeer = this.appPeersManager.getInputPeerById(message.peerId);\n\n return this.apiManager.invokeApi('messages.getPollResults', {\n peer: inputPeer,\n msg_id: getServerMessageId(message.mid)\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n this.log('getResults updates:', updates);\n });\n }\n\n public getVotes(message: Message.message, option?: Uint8Array, offset?: string, limit = 20) {\n return this.apiManager.invokeApi('messages.getPollVotes', {\n peer: this.appPeersManager.getInputPeerById(message.peerId),\n id: getServerMessageId(message.mid),\n option,\n offset,\n limit\n }).then((votesList) => {\n this.log('getPollVotes messages:', votesList);\n\n this.appUsersManager.saveApiUsers(votesList.users);\n\n return votesList;\n });\n }\n\n public stopPoll(message: Message.message) {\n const poll: Poll = (message.media as MessageMedia.messageMediaPoll).poll;\n\n if(poll.pFlags.closed) return Promise.resolve();\n\n const newPoll = copy(poll);\n newPoll.pFlags.closed = true;\n return this.appMessagesManager.editMessage(message, undefined, {\n newMedia: this.getInputMediaPoll(newPoll)\n }).then(() => {\n // console.log('stopped poll');\n }, err => {\n this.log.error('stopPoll error:', err);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputPrivacyKey, InputPrivacyRule, PrivacyRule, PrivacyKey, GlobalPrivacySettings} from '../../layer';\nimport convertInputKeyToKey from '../../helpers/string/convertInputKeyToKey';\nimport {AppManager} from './manager';\n\nexport class AppPrivacyManager extends AppManager {\n private privacy: Partial<{\n [key in PrivacyKey['_']]: PrivacyRule[] | Promise\n }> = {};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updatePrivacy: (update) => {\n const key = update.key._;\n this.privacy[key] = update.rules;\n this.rootScope.dispatchEvent('privacy_update', update);\n }\n });\n }\n\n public setPrivacy(inputKey: InputPrivacyKey['_'], rules: InputPrivacyRule[]) {\n return this.apiManager.invokeApi('account.setPrivacy', {\n key: {\n _: inputKey\n },\n rules\n }).then((privacyRules) => {\n this.appUsersManager.saveApiUsers(privacyRules.users);\n this.appChatsManager.saveApiChats(privacyRules.chats);\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePrivacy',\n key: {\n _: convertInputKeyToKey(inputKey)\n },\n rules: rules.map((inputRule) => {\n const rule: PrivacyRule = {} as any;\n Object.assign(rule, inputRule);\n rule._ = convertInputKeyToKey(rule._) as any;\n return rule;\n })\n });\n\n // console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\n\n return privacyRules.rules;\n });\n }\n\n public getPrivacy(inputKey: InputPrivacyKey['_']) {\n const privacyKey: PrivacyKey['_'] = convertInputKeyToKey(inputKey) as any;\n const rules = this.privacy[privacyKey];\n if(rules) {\n return Promise.resolve(rules);\n }\n\n return this.privacy[privacyKey] = this.apiManager.invokeApi('account.getPrivacy', {\n key: {\n _: inputKey\n }\n }).then((privacyRules) => {\n this.appUsersManager.saveApiUsers(privacyRules.users);\n this.appChatsManager.saveApiChats(privacyRules.chats);\n\n // console.log('privacy rules', inputKey, privacyRules, privacyRules.rules);\n\n return this.privacy[privacyKey] = privacyRules.rules;\n });\n }\n\n public getGlobalPrivacySettings() {\n return this.apiManager.invokeApi('account.getGlobalPrivacySettings');\n }\n\n public setGlobalPrivacySettings(settings: GlobalPrivacySettings) {\n return this.apiManager.invokeApi('account.setGlobalPrivacySettings', {settings});\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {MyTopPeer} from './appUsersManager';\nimport tsNow from '../../helpers/tsNow';\nimport {ChannelParticipantsFilter, ChannelsChannelParticipants, ChannelParticipant, Chat, ChatFull, ChatParticipants, ChatPhoto, ExportedChatInvite, InputChannel, InputFile, SendMessageAction, Update, UserFull, Photo, PhotoSize, Updates} from '../../layer';\nimport SearchIndex from '../searchIndex';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport getPhotoInput from './utils/photos/getPhotoInput';\nimport getParticipantPeerId from './utils/chats/getParticipantPeerId';\nimport ctx from '../../environment/ctx';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport generateMessageId from './utils/messageId/generateMessageId';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\n\nexport type UserTyping = Partial<{userId: UserId, action: SendMessageAction, timeout: number}>;\n\nconst PEER_FULL_TTL = 3 * 60e3;\n\nexport class AppProfileManager extends AppManager {\n // private botInfos: any = {};\n private usersFull: {[id: UserId]: UserFull.userFull} = {};\n private chatsFull: {[id: ChatId]: ChatFull} = {};\n private fullExpiration: {[peerId: PeerId]: number} = {};\n private typingsInPeer: {[key: string]: UserTyping[]};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateChatParticipants: this.onUpdateChatParticipants,\n\n updateChatParticipantAdd: this.onUpdateChatParticipantAdd,\n\n updateChatParticipantDelete: this.onUpdateChatParticipantDelete,\n\n updateUserTyping: this.onUpdateUserTyping,\n updateChatUserTyping: this.onUpdateUserTyping,\n updateChannelUserTyping: this.onUpdateUserTyping,\n\n updatePeerBlocked: this.onUpdatePeerBlocked\n });\n\n this.rootScope.addEventListener('chat_update', (chatId) => {\n const fullChat = this.chatsFull[chatId];\n const chat: Chat.chat | Chat.channel | Chat.chatForbidden | Chat.channelForbidden = this.appChatsManager.getChat(chatId);\n if(!fullChat || !chat) {\n return;\n }\n\n let updated = false;\n if(!!fullChat.call !== !!(chat as Chat.chat).pFlags?.call_active) {\n updated = true;\n }\n\n const {photo} = chat as Chat.chat;\n if(photo) {\n const hasChatPhoto = photo._ !== 'chatPhotoEmpty';\n const hasFullChatPhoto = !!(fullChat.chat_photo && fullChat.chat_photo._ !== 'photoEmpty'); // chat_photo can be missing\n if(\n hasChatPhoto !== hasFullChatPhoto || (\n hasChatPhoto &&\n photo.photo_id !== fullChat.chat_photo?.id\n )\n ) {\n updated = true;\n }\n }\n\n if(updated) {\n this.refreshFullPeer(chatId.toPeerId(true));\n }\n });\n\n this.rootScope.addEventListener('channel_update', (chatId) => {\n this.refreshFullPeer(chatId.toPeerId(true));\n });\n\n // * genius\n this.rootScope.addEventListener('chat_full_update', (chatId) => {\n this.rootScope.dispatchEvent('peer_full_update', chatId.toPeerId(true));\n });\n\n // * genius\n this.rootScope.addEventListener('user_full_update', (userId) => {\n this.rootScope.dispatchEvent('peer_full_update', userId.toPeerId(false));\n });\n\n this.rootScope.addEventListener('invalidate_participants', (chatId) => {\n this.invalidateChannelParticipants(chatId);\n });\n\n this.typingsInPeer = {};\n }\n\n /* public saveBotInfo(botInfo: any) {\n const botId = botInfo && botInfo.user_id;\n if(!botId) {\n return null;\n }\n\n const commands: any = {};\n botInfo.commands.forEach((botCommand: any) => {\n commands[botCommand.command] = botCommand.description;\n });\n\n return this.botInfos[botId] = {\n id: botId,\n version: botInfo.version,\n shareText: botInfo.share_text,\n description: botInfo.description,\n commands: commands\n };\n } */\n\n public getProfile(id: UserId, override?: true) {\n if(this.usersFull[id] && !override && Date.now() < this.fullExpiration[id.toPeerId()]) {\n return this.usersFull[id];\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'users.getFullUser',\n params: {\n id: this.appUsersManager.getUserInput(id)\n },\n processResult: (usersUserFull) => {\n this.appChatsManager.saveApiChats(usersUserFull.chats, true);\n this.appUsersManager.saveApiUsers(usersUserFull.users);\n\n const userFull = usersUserFull.full_user;\n const peerId = id.toPeerId(false);\n if(userFull.profile_photo) {\n userFull.profile_photo = this.appPhotosManager.savePhoto(userFull.profile_photo, {type: 'profilePhoto', peerId});\n }\n\n const botInfo = userFull.bot_info;\n if(botInfo) {\n const referenceContext: ReferenceContext = {type: 'userFull', userId: id};\n botInfo.description_document = this.appDocsManager.saveDoc(botInfo.description_document, referenceContext);\n botInfo.description_photo = this.appPhotosManager.savePhoto(botInfo.description_photo, referenceContext);\n }\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: userFull.notify_settings\n });\n\n this.usersFull[id] = userFull;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n\n /* if(userFull.bot_info) {\n userFull.bot_info = this.saveBotInfo(userFull.bot_info) as any;\n } */\n\n // appMessagesManager.savePinnedMessage(id, userFull.pinned_msg_id);\n\n this.rootScope.dispatchEvent('user_full_update', id);\n return userFull;\n }\n });\n }\n\n public getProfileByPeerId(peerId: PeerId, override?: true) {\n if(this.appPeersManager.isAnyChat(peerId)) return this.getChatFull(peerId.toChatId(), override);\n else return this.getProfile(peerId.toUserId(), override);\n }\n\n public getCachedFullChat(chatId: ChatId) {\n return this.chatsFull[chatId];\n }\n\n public getCachedFullUser(userId: UserId) {\n return this.usersFull[userId];\n }\n\n public getCachedProfileByPeerId(peerId: PeerId) {\n return peerId.isUser() ? this.getCachedFullUser(peerId.toUserId()) : this.getCachedFullChat(peerId.toChatId());\n }\n\n public async getFullPhoto(peerId: PeerId) {\n const profile = await this.getProfileByPeerId(peerId);\n switch(profile._) {\n case 'userFull':\n return profile.profile_photo;\n case 'channelFull':\n case 'chatFull':\n return profile.chat_photo;\n }\n }\n\n /* public getPeerBots(peerId: PeerId) {\n var peerBots: any[] = [];\n if(peerId >= 0 && !appUsersManager.isBot(peerId) ||\n (appPeersManager.isChannel(peerId) && !appPeersManager.isMegagroup(peerId))) {\n return Promise.resolve(peerBots);\n }\n if(peerId >= 0) {\n return this.getProfile(peerId).then((userFull: any) => {\n var botInfo = userFull.bot_info;\n if(botInfo && botInfo._ !== 'botInfoEmpty') {\n peerBots.push(botInfo);\n }\n return peerBots;\n });\n }\n\n return this.getChatFull(peerId.toChatId()).then((chatFull: any) => {\n chatFull.bot_info.forEach((botInfo: any) => {\n peerBots.push(this.saveBotInfo(botInfo))\n });\n return peerBots;\n });\n } */\n\n public getChatFull(id: ChatId, override?: true) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelFull(id, override);\n }\n\n const peerId = id.toPeerId(true);\n const fullChat = this.chatsFull[id] as ChatFull.chatFull;\n if(fullChat && !override && Date.now() < this.fullExpiration[peerId]) {\n const chat = this.appChatsManager.getChat(id) as Chat.chat;\n if(\n chat.pFlags.left ||\n chat.pFlags.deactivated ||\n chat.version === (fullChat.participants as ChatParticipants.chatParticipants).version\n ) {\n return fullChat as ChatFull;\n }\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getFullChat',\n params: {\n chat_id: id\n },\n processResult: (result) => {\n this.appChatsManager.saveApiChats(result.chats, true);\n this.appUsersManager.saveApiUsers(result.users);\n const chatFull = result.full_chat as ChatFull.chatFull;\n if(chatFull && chatFull.chat_photo && chatFull.chat_photo.id) {\n chatFull.chat_photo = this.appPhotosManager.savePhoto(chatFull.chat_photo, {type: 'profilePhoto', peerId});\n }\n\n if(chatFull.call) {\n this.appGroupCallsManager.saveGroupCall(chatFull.call, id);\n }\n\n // appMessagesManager.savePinnedMessage(peerId, fullChat.pinned_msg_id);\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: chatFull.notify_settings\n });\n\n this.chatsFull[id] = chatFull;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n this.rootScope.dispatchEvent('chat_full_update', id);\n\n return chatFull;\n }\n });\n }\n\n public async getChatInviteLink(id: ChatId, force?: boolean) {\n const chatFull = await this.getChatFull(id);\n if(!force &&\n chatFull.exported_invite &&\n chatFull.exported_invite._ == 'chatInviteExported') {\n return chatFull.exported_invite.link;\n }\n\n return this.apiManager.invokeApi('messages.exportChatInvite', {\n peer: this.appPeersManager.getInputPeerById(id.toPeerId(true))\n }).then((exportedInvite) => {\n if(this.chatsFull[id] !== undefined) {\n this.chatsFull[id].exported_invite = exportedInvite;\n }\n\n return (exportedInvite as ExportedChatInvite.chatInviteExported).link;\n });\n }\n\n public getParticipants(\n id: ChatId,\n filter: ChannelParticipantsFilter = {_: 'channelParticipantsRecent'},\n limit = 200,\n offset = 0\n ) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelParticipants(id, filter, limit, offset);\n }\n\n return Promise.resolve(this.getChatFull(id)).then((chatFull) => {\n const chatParticipants = (chatFull as ChatFull.chatFull).participants;\n if(chatParticipants._ !== 'chatParticipants') {\n throw makeError('CHAT_PRIVATE');\n }\n\n if(filter._ === 'channelParticipantsSearch' && filter.q.trim()) {\n const index = this.appUsersManager.createSearchIndex();\n chatParticipants.participants.forEach((chatParticipant) => {\n const userId = chatParticipant.user_id;\n index.indexObject(userId, this.appUsersManager.getUserSearchText(userId));\n });\n\n const found = index.search(filter.q);\n const filteredParticipants = chatParticipants.participants.filter((chatParticipant) => {\n return found.has(chatParticipant.user_id);\n });\n\n return {...chatParticipants, participants: filteredParticipants};\n }\n\n return chatParticipants;\n });\n }\n\n public getParticipant(id: ChatId, peerId: PeerId) {\n if(this.appChatsManager.isChannel(id)) {\n return this.getChannelParticipant(id, peerId);\n }\n\n return this.getParticipants(id).then((chatParticipants) => {\n assumeType(chatParticipants);\n const found = chatParticipants.participants.find((chatParticipant) => {\n if(getParticipantPeerId(chatParticipant) === peerId) {\n return chatParticipant;\n }\n });\n\n if(!found) {\n throw makeError('USER_NOT_PARTICIPANT');\n }\n\n return found;\n });\n }\n\n public getChannelParticipants(\n id: ChatId,\n filter: ChannelParticipantsFilter = {_: 'channelParticipantsRecent'},\n limit = 200,\n offset = 0\n ) {\n if(filter._ === 'channelParticipantsRecent') {\n const chat = this.appChatsManager.getChat(id);\n if(chat?.pFlags && (\n // chat.pFlags.kicked ||\n (chat as Chat.channel).pFlags.broadcast &&\n !(chat as Chat.channel).pFlags.creator &&\n !(chat as Chat.channel).admin_rights\n )) {\n return Promise.reject();\n }\n }\n\n return this.apiManager.invokeApiCacheable('channels.getParticipants', {\n channel: this.appChatsManager.getChannelInput(id),\n filter,\n offset,\n limit,\n hash: '0'\n }, {cacheSeconds: 60}).then((result) => {\n this.appUsersManager.saveApiUsers((result as ChannelsChannelParticipants.channelsChannelParticipants).users);\n return result as ChannelsChannelParticipants.channelsChannelParticipants;\n });\n /* let maybeAddSelf = (participants: any[]) => {\n let chat = appChatsManager.getChat(id);\n let selfMustBeFirst = filter._ === 'channelParticipantsRecent' &&\n !offset &&\n !chat.pFlags.kicked &&\n !chat.pFlags.left;\n\n if(selfMustBeFirst) {\n participants = copy(participants);\n let myID = appUsersManager.getSelf().id;\n let myIndex = participants.findIndex((p) => p.user_id === myID);\n let myParticipant;\n\n if(myIndex !== -1) {\n myParticipant = participants[myIndex];\n participants.splice(myIndex, 1);\n } else {\n myParticipant = {_: 'channelParticipantSelf', user_id: myID};\n }\n\n participants.unshift(myParticipant);\n }\n\n return participants;\n } */\n }\n\n public getChannelParticipant(id: ChatId, peerId: PeerId) {\n return this.apiManager.invokeApiSingle('channels.getParticipant', {\n channel: this.appChatsManager.getChannelInput(id),\n participant: this.appPeersManager.getInputPeerById(peerId)\n }).then((channelParticipant) => {\n this.appUsersManager.saveApiUsers(channelParticipant.users);\n return channelParticipant.participant;\n });\n }\n\n public getChannelFull(id: ChatId, override?: true) {\n const peerId = id.toPeerId(true);\n if(this.chatsFull[id] !== undefined && !override && Date.now() < this.fullExpiration[peerId]) {\n return this.chatsFull[id] as ChatFull.channelFull;\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'channels.getFullChannel',\n params: {\n channel: this.appChatsManager.getChannelInput(id)\n },\n processResult: (result) => {\n this.appChatsManager.saveApiChats(result.chats, true);\n this.appUsersManager.saveApiUsers(result.users);\n const fullChannel = result.full_chat as ChatFull.channelFull;\n if(fullChannel && fullChannel.chat_photo.id) {\n fullChannel.chat_photo = this.appPhotosManager.savePhoto(fullChannel.chat_photo, {type: 'profilePhoto', peerId});\n // appPhotosManager.savePhoto(fullChannel.chat_photo);\n }\n\n if(fullChannel.call) {\n this.appGroupCallsManager.saveGroupCall(fullChannel.call, id);\n }\n\n this.appNotificationsManager.savePeerSettings({\n peerId,\n settings: fullChannel.notify_settings\n });\n\n this.chatsFull[id] = fullChannel;\n this.fullExpiration[peerId] = Date.now() + PEER_FULL_TTL;\n this.rootScope.dispatchEvent('chat_full_update', id);\n\n return fullChannel;\n },\n processError: (error) => {\n switch(error.type) {\n case 'CHANNEL_PRIVATE':\n const channel = this.appChatsManager.getChat(id) as Chat.channel | Chat.channelForbidden;\n this.apiUpdatesManager.processUpdateMessage({\n _: 'updates',\n updates: [{\n _: 'updateChannel',\n channel_id: id\n }],\n chats: [channel._ === 'channelForbidden' ? channel : {\n _: 'channelForbidden',\n id,\n access_hash: channel.access_hash,\n title: channel.title,\n pFlags: channel.pFlags\n }],\n users: []\n } as Updates.updates);\n break;\n }\n\n throw error;\n }\n });\n }\n\n public getMentions(chatId: ChatId, query: string, threadId?: number): Promise {\n const processUserIds = (topPeers: MyTopPeer[]) => {\n const startsWithAt = query.charAt(0) === '@';\n if(startsWithAt) query = query.slice(1);\n /* const startsWithAt = query.charAt(0) === '@';\n if(startsWithAt) query = query.slice(1);\n\n const index = new SearchIndex(!startsWithAt, !startsWithAt); */\n const index = new SearchIndex({\n ignoreCase: true\n });\n\n const ratingMap: Map = new Map();\n topPeers.forEach((peer) => {\n index.indexObject(peer.id, this.appUsersManager.getUserSearchText(peer.id));\n ratingMap.set(peer.id, peer.rating);\n });\n\n const peerIds = Array.from(index.search(query));\n peerIds.sort((a, b) => ratingMap.get(b) - ratingMap.get(a));\n return peerIds;\n };\n\n let promise: Promise;\n if(this.appChatsManager.isChannel(chatId)) {\n promise = this.getChannelParticipants(chatId, {\n _: 'channelParticipantsMentions',\n q: query,\n top_msg_id: getServerMessageId(threadId)\n }, 50, 0).then((cP) => {\n return cP.participants.map((p) => getParticipantPeerId(p));\n });\n } else if(chatId) {\n promise = Promise.resolve(this.getChatFull(chatId)).then((chatFull) => {\n return ((chatFull as ChatFull.chatFull).participants as ChatParticipants.chatParticipants).participants.map((p) => p.user_id.toPeerId());\n });\n } else {\n promise = Promise.resolve([]);\n }\n\n return Promise.all([\n // [],\n this.appUsersManager.getTopPeers('bots_inline').catch(() => [] as MyTopPeer[]),\n promise\n ]).then((results) => {\n const peers = results[0].concat(results[1].map((peerId) => ({id: peerId, rating: 0})));\n\n return processUserIds(peers);\n });\n }\n\n private invalidateChannelParticipants(id: ChatId) {\n this.apiManager.clearCache('channels.getParticipants', (params) => (params.channel as InputChannel.inputChannel).channel_id === id);\n this.refreshFullPeer(id.toPeerId(true));\n }\n\n private refreshFullPeer(peerId: PeerId) {\n if(peerId.isUser()) {\n const userId = peerId.toUserId();\n delete this.usersFull[userId];\n this.rootScope.dispatchEvent('user_full_update', userId);\n } else {\n const chatId = peerId.toChatId();\n delete this.chatsFull[chatId];\n this.rootScope.dispatchEvent('chat_full_update', chatId);\n }\n\n // ! ัั‚ะฐ ัั‚ั€ะพั‡ะบะฐ ะฑัƒะดะตั‚ ัะพะทะดะฐะฒะฐั‚ัŒ race condition:\n // ! ะทะฐะฟั€ะพั ะฒะตั€ะฝั‘ั‚ chat ั ัƒัั‚ะฐะฝะพะฒะปะตะฝะฝั‹ะผ ั„ะปะฐะณะพะผ call_not_empty, ั…ะพั‚ั ัะฐะผ ะฐะฟะดะตะนั‚ ัƒะถะต ะฑัƒะดะตั‚ ะฟั€ะธะผะตะฝั‘ะฝ\n // this.getProfileByPeerId(peerId, true);\n }\n\n public updateProfile(first_name?: string, last_name?: string, about?: string) {\n return this.apiManager.invokeApi('account.updateProfile', {\n first_name,\n last_name,\n about\n }).then((user) => {\n this.appUsersManager.saveApiUser(user);\n\n if(about !== undefined) {\n const peerId = user.id.toPeerId();\n const userFull = this.usersFull[user.id];\n if(userFull) {\n userFull.about = about;\n }\n\n this.rootScope.dispatchEvent('peer_bio_edit', peerId);\n }\n\n return this.getProfile(user.id, true);\n });\n }\n\n public uploadProfilePhoto(inputFile: InputFile) {\n return this.apiManager.invokeApi('photos.uploadProfilePhoto', {\n file: inputFile\n }).then((updateResult) => {\n // ! sometimes can have no user in users\n const photo = updateResult.photo as Photo.photo;\n if(!updateResult.users.length) {\n const strippedThumb = photo.sizes.find((size) => size._ === 'photoStrippedSize') as PhotoSize.photoStrippedSize;\n updateResult.users.push({\n ...this.appUsersManager.getSelf(),\n photo: {\n _: 'userProfilePhoto',\n dc_id: photo.dc_id,\n photo_id: photo.id,\n stripped_thumb: strippedThumb?.bytes,\n pFlags: {\n\n }\n }\n });\n }\n this.appUsersManager.saveApiUsers(updateResult.users);\n\n const myId = this.appPeersManager.peerId;\n this.appPhotosManager.savePhoto(updateResult.photo, {\n type: 'profilePhoto',\n peerId: myId\n });\n\n const userId = myId.toUserId();\n // this.apiUpdatesManager.processLocalUpdate({\n // _: 'updateUserPhoto',\n // user_id: userId,\n // date: tsNow(true),\n // photo: this.appUsersManager.getUser(userId).photo,\n // previous: true\n // });\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateUser',\n user_id: userId\n });\n });\n }\n\n public deletePhotos(photoIds: string[]) {\n return this.apiManager.invokeApiSingle('photos.deletePhotos', {\n id: photoIds.map((photoId) => {\n const photo = this.appPhotosManager.getPhoto(photoId);\n return getPhotoInput(photo);\n })\n }).then((deletedList) => {\n\n });\n }\n\n private verifyParticipantForOnlineCount(participant: {user_id: UserId}) {\n const user = this.appUsersManager.getUser(participant.user_id);\n return !!(user && user.status && user.status._ === 'userStatusOnline');\n }\n\n private reduceParticipantsForOnlineCount(participants: {user_id: UserId}[]) {\n return participants.reduce((acc, participant) => {\n return acc + +this.verifyParticipantForOnlineCount(participant);\n }, 0);\n }\n\n public async getOnlines(id: ChatId): Promise {\n const minOnline = 1;\n if(this.appChatsManager.isBroadcast(id)) {\n return minOnline;\n }\n\n const chatInfo = await this.getChatFull(id);\n if(this.appChatsManager.isMegagroup(id)) {\n if((chatInfo as ChatFull.channelFull).participants_count <= 100) {\n const channelParticipants = await this.getChannelParticipants(id, {_: 'channelParticipantsRecent'}, 100);\n return this.reduceParticipantsForOnlineCount(channelParticipants.participants as ChannelParticipant.channelParticipant[]);\n }\n\n const res = await this.apiManager.invokeApiCacheable('messages.getOnlines', {\n peer: this.appChatsManager.getChannelInputPeer(id)\n }, {cacheSeconds: 60});\n\n const onlines = res.onlines ?? minOnline;\n return onlines;\n }\n\n const _participants = (chatInfo as ChatFull.chatFull).participants as ChatParticipants.chatParticipants;\n if(_participants?.participants) {\n return this.reduceParticipantsForOnlineCount(_participants.participants);\n } else {\n return minOnline;\n }\n }\n\n private getTypingsKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? `_${threadId}` : '');\n }\n\n public getPeerTypings(peerId: PeerId, threadId?: number) {\n return this.typingsInPeer[this.getTypingsKey(peerId, threadId)];\n }\n\n private onUpdateChatParticipants = (update: Update.updateChatParticipants) => {\n const participants = update.participants;\n if(participants._ !== 'chatParticipants') {\n return;\n }\n\n const chatId = participants.chat_id;\n const chatFull = this.chatsFull[chatId] as ChatFull.chatFull;\n if(chatFull !== undefined) {\n chatFull.participants = participants;\n this.rootScope.dispatchEvent('chat_full_update', chatId);\n }\n };\n\n private onUpdateChatParticipantAdd = (update: Update.updateChatParticipantAdd) => {\n const chatFull = this.chatsFull[update.chat_id] as ChatFull.chatFull;\n if(chatFull === undefined) {\n return;\n }\n\n const _participants = chatFull.participants as ChatParticipants.chatParticipants;\n const participants = _participants.participants || [];\n for(let i = 0, length = participants.length; i < length; i++) {\n if(participants[i].user_id === update.user_id) {\n return;\n }\n }\n\n participants.push({\n _: 'chatParticipant',\n user_id: update.user_id,\n inviter_id: update.inviter_id,\n date: tsNow(true)\n });\n\n _participants.version = update.version;\n this.rootScope.dispatchEvent('chat_full_update', update.chat_id);\n };\n\n private onUpdateChatParticipantDelete = (update: Update.updateChatParticipantDelete) => {\n const chatFull = this.chatsFull[update.chat_id] as ChatFull.chatFull;\n if(chatFull === undefined) {\n return;\n }\n\n const _participants = chatFull.participants as ChatParticipants.chatParticipants;\n const participants = _participants.participants || [];\n for(let i = 0, length = participants.length; i < length; i++) {\n if(participants[i].user_id === update.user_id) {\n participants.splice(i, 1);\n _participants.version = update.version;\n this.rootScope.dispatchEvent('chat_full_update', update.chat_id);\n return;\n }\n }\n };\n\n private onUpdateUserTyping = (update: Update.updateUserTyping | Update.updateChatUserTyping | Update.updateChannelUserTyping) => {\n const fromId = (update as Update.updateUserTyping).user_id ?\n (update as Update.updateUserTyping).user_id.toPeerId() :\n this.appPeersManager.getPeerId((update as Update.updateChatUserTyping).from_id);\n if(this.appPeersManager.peerId === fromId || update.action._ === 'speakingInGroupCallAction') {\n return;\n }\n\n const topMsgId = (update as Update.updateChannelUserTyping).top_msg_id;\n const threadId = topMsgId ? generateMessageId(topMsgId) : undefined;\n const peerId = this.appPeersManager.getPeerId(update);\n const key = this.getTypingsKey(peerId, threadId);\n const typings = this.typingsInPeer[key] ??= [];\n let typing = typings.find((t) => t.userId === fromId);\n\n const cancelAction = () => {\n delete typing.timeout;\n // typings.findAndSplice((t) => t === typing);\n const idx = typings.indexOf(typing);\n if(idx !== -1) {\n typings.splice(idx, 1);\n }\n\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n\n if(!typings.length) {\n delete this.typingsInPeer[key];\n }\n };\n\n if(typing?.timeout !== undefined) {\n clearTimeout(typing.timeout);\n }\n\n if(update.action._ === 'sendMessageCancelAction') {\n if(!typing) {\n return;\n }\n\n cancelAction();\n return;\n }\n\n if(!typing) {\n typing = {\n userId: fromId\n };\n\n typings.push(typing);\n }\n\n // console.log('updateChatUserTyping', update, typings);\n\n typing.action = update.action;\n\n const hasUser = this.appUsersManager.hasUser(fromId);\n if(!hasUser) {\n // let's load user here\n if(update._ === 'updateChatUserTyping') {\n if(update.chat_id && this.appChatsManager.hasChat(update.chat_id) && !this.appChatsManager.isChannel(update.chat_id)) {\n Promise.resolve(this.getChatFull(update.chat_id)).then(() => {\n if(typing.timeout !== undefined && this.appUsersManager.hasUser(fromId)) {\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n }\n });\n }\n }\n\n // return;\n } else {\n this.appUsersManager.forceUserOnline(fromId);\n }\n\n typing.timeout = ctx.setTimeout(cancelAction, 6000);\n if(hasUser) {\n this.rootScope.dispatchEvent('peer_typings', {peerId, threadId, typings});\n }\n };\n\n private onUpdatePeerBlocked = (update: Update.updatePeerBlocked) => {\n const peerId = this.appPeersManager.getPeerId(update.peer_id);\n if(this.appPeersManager.isUser(peerId)) {\n const userId = peerId.toUserId();\n const userFull = this.usersFull[userId];\n if(userFull) {\n if(update.blocked) userFull.pFlags.blocked = true;\n else delete userFull.pFlags.blocked;\n }\n\n this.rootScope.dispatchEvent('user_full_update', userId);\n }\n\n this.rootScope.dispatchEvent('peer_block', {peerId, blocked: update.blocked});\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Awaited} from '../types';\n\nexport default function callbackifyAll(\n values: T,\n callback: (result: { -readonly [P in keyof T]: Awaited }) => R\n): Promise> | R {\n if(values.some((value) => value instanceof Promise)) {\n return Promise.all(values).then(callback as any);\n } else {\n return callback(values as any);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport assumeType from '../../helpers/assumeType';\nimport callbackify from '../../helpers/callbackify';\nimport callbackifyAll from '../../helpers/callbackifyAll';\nimport copy from '../../helpers/object/copy';\nimport pause from '../../helpers/schedulers/pause';\nimport {AvailableReaction, Message, MessagePeerReaction, MessagesAvailableReactions, Reaction, ReactionCount, Update, Updates} from '../../layer';\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport reactionsEqual from './utils/reactions/reactionsEqual';\n\nconst SAVE_DOC_KEYS = [\n 'static_icon' as const,\n 'appear_animation' as const,\n 'select_animation' as const,\n 'activate_animation' as const,\n 'effect_animation' as const,\n 'around_animation' as const,\n 'center_icon' as const\n];\n\nconst REFERENCE_CONTEXT: ReferenceContext = {\n type: 'reactions'\n};\n\nexport class AppReactionsManager extends AppManager {\n private availableReactions: AvailableReaction[];\n private sendReactionPromises: Map>;\n private lastSendingTimes: Map;\n\n protected after() {\n this.rootScope.addEventListener('language_change', () => {\n this.availableReactions = undefined;\n this.getAvailableReactions();\n });\n\n this.sendReactionPromises = new Map();\n this.lastSendingTimes = new Map();\n\n this.rootScope.addEventListener('user_auth', () => {\n setTimeout(() => {\n Promise.resolve(this.getAvailableReactions()).then(async(availableReactions) => {\n for(const availableReaction of availableReactions) {\n await Promise.all([\n availableReaction.around_animation && this.apiFileManager.downloadMedia({media: availableReaction.around_animation}),\n availableReaction.static_icon && this.apiFileManager.downloadMedia({media: availableReaction.static_icon}),\n availableReaction.appear_animation && this.apiFileManager.downloadMedia({media: availableReaction.appear_animation}),\n availableReaction.center_icon && this.apiFileManager.downloadMedia({media: availableReaction.center_icon})\n ]);\n\n await pause(1000);\n }\n });\n }, 7.5e3);\n });\n }\n\n public getAvailableReactions() {\n if(this.availableReactions) return this.availableReactions;\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAvailableReactions',\n processResult: (messagesAvailableReactions) => {\n assumeType(messagesAvailableReactions);\n\n const availableReactions = this.availableReactions = messagesAvailableReactions.reactions;\n for(const reaction of availableReactions) {\n for(const key of SAVE_DOC_KEYS) {\n if(!reaction[key]) {\n continue;\n }\n\n reaction[key] = this.appDocsManager.saveDoc(reaction[key], REFERENCE_CONTEXT);\n }\n }\n\n return availableReactions;\n },\n params: {\n hash: 0\n }\n });\n }\n\n public getActiveAvailableReactions() {\n return callbackify(this.getAvailableReactions(), (availableReactions) => {\n return availableReactions.filter((availableReaction) => !availableReaction.pFlags.inactive);\n });\n }\n\n public getAvailableReactionsForPeer(peerId: PeerId) {\n const activeAvailableReactions = this.getActiveAvailableReactions();\n if(peerId.isUser()) {\n return this.unshiftQuickReaction(activeAvailableReactions);\n }\n\n const chatFull = this.appProfileManager.getChatFull(peerId.toChatId());\n return callbackifyAll([activeAvailableReactions, chatFull, this.getQuickReaction()], ([activeAvailableReactions, chatFull, quickReaction]) => {\n const chatAvailableReactions = chatFull.available_reactions ?? {_: 'chatReactionsNone'};\n\n let filteredChatAvailableReactions: AvailableReaction[] = [];\n if(chatAvailableReactions._ === 'chatReactionsAll') {\n filteredChatAvailableReactions = activeAvailableReactions;\n } else if(chatAvailableReactions._ === 'chatReactionsSome') {\n filteredChatAvailableReactions = chatAvailableReactions.reactions.map((reaction) => {\n return activeAvailableReactions.find((availableReaction) => availableReaction.reaction === (reaction as Reaction.reactionEmoji).emoticon);\n }).filter(Boolean);\n }\n\n return this.unshiftQuickReactionInner(filteredChatAvailableReactions, quickReaction);\n });\n }\n\n private unshiftQuickReactionInner(availableReactions: AvailableReaction[], quickReaction: Reaction | AvailableReaction) {\n if(quickReaction && quickReaction._ !== 'reactionEmoji' && quickReaction._ !== 'availableReaction') return availableReactions;\n const emoticon = (quickReaction as Reaction.reactionEmoji).emoticon || (quickReaction as AvailableReaction).reaction;\n const availableReaction = findAndSplice(availableReactions, (availableReaction) => availableReaction.reaction === emoticon);\n if(availableReaction) {\n availableReactions.unshift(availableReaction);\n }\n\n return availableReactions;\n }\n\n private unshiftQuickReaction(\n availableReactions: AvailableReaction[] | PromiseLike,\n quickReaction: ReturnType = this.getQuickReaction()\n ) {\n return callbackifyAll([\n availableReactions,\n quickReaction\n ], ([availableReactions, quickReaction]) => {\n return this.unshiftQuickReactionInner(availableReactions, quickReaction);\n });\n }\n\n public getAvailableReactionsByMessage(message: Message.message) {\n if(!message) return [];\n const peerId = (message.fwd_from?.channel_post && this.appPeersManager.isMegagroup(message.peerId) && message.fwdFromId) || message.peerId;\n return this.getAvailableReactionsForPeer(peerId);\n }\n\n public isReactionActive(reaction: string) {\n if(!this.availableReactions) return false;\n return !!this.availableReactions.find((availableReaction) => availableReaction.reaction === reaction);\n }\n\n public getQuickReaction() {\n return callbackifyAll([\n this.apiManager.getConfig(),\n this.getAvailableReactions()\n ], ([config, availableReactions]) => {\n const reaction = config.reactions_default;\n if(reaction?._ === 'reactionEmoji') {\n return availableReactions.find((availableReaction) => availableReaction.reaction === reaction.emoticon);\n }\n\n return reaction as Reaction.reactionCustomEmoji;\n });\n }\n\n public getReactionCached(reaction: string) {\n return this.availableReactions.find((availableReaction) => availableReaction.reaction === reaction);\n }\n\n public getReaction(reaction: string) {\n return callbackify(this.getAvailableReactions(), () => {\n return this.getReactionCached(reaction);\n });\n }\n\n public getMessagesReactions(peerId: PeerId, mids: number[]) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getMessagesReactions',\n params: {\n id: mids.map((mid) => getServerMessageId(mid)),\n peer: this.appPeersManager.getInputPeerById(peerId)\n },\n processResult: (updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n\n // const update = (updates as Updates.updates).updates.find((update) => update._ === 'updateMessageReactions') as Update.updateMessageReactions;\n // return update.reactions;\n }\n });\n }\n\n public getMessageReactionsList(peerId: PeerId, mid: number, limit: number, reaction?: Reaction, offset?: string) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.getMessageReactionsList',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n id: getServerMessageId(mid),\n limit,\n reaction,\n offset\n },\n processResult: (messageReactionsList) => {\n this.appUsersManager.saveApiUsers(messageReactionsList.users);\n return messageReactionsList;\n }\n });\n }\n\n public setDefaultReaction(reaction: Reaction) {\n return this.apiManager.invokeApi('messages.setDefaultReaction', {reaction}).then(async(value) => {\n if(value) {\n const appConfig = await this.apiManager.getConfig();\n if(appConfig) {\n appConfig.reactions_default = reaction;\n }/* else { // if no config or loading it - overwrite\n this.apiManager.getAppConfig(true);\n } */\n\n this.rootScope.dispatchEvent('quick_reaction', reaction);\n }\n\n return value;\n });\n }\n\n public async sendReaction(message: Message.message, reaction?: Reaction | AvailableReaction, onlyLocal?: boolean) {\n if(reaction._ === 'availableReaction') {\n reaction = {\n _: 'reactionEmoji',\n emoticon: reaction.reaction\n };\n }\n\n const limit = await this.apiManager.getLimit('reactions');\n\n const lastSendingTimeKey = message.peerId + '_' + message.mid;\n const lastSendingTime = this.lastSendingTimes.get(lastSendingTimeKey);\n if(lastSendingTime) {\n return;\n } else {\n this.lastSendingTimes.set(lastSendingTimeKey, Date.now());\n setTimeout(() => {\n this.lastSendingTimes.delete(lastSendingTimeKey);\n }, 333);\n }\n\n const {peerId, mid} = message;\n const myPeerId = this.appPeersManager.peerId;\n\n const unsetReactionCount = (reactionCount: ReactionCount) => {\n --reactionCount.count;\n delete reactionCount.chosen_order;\n\n if(reactionsEqual(reaction as Reaction, reactionCount.reaction)) {\n reaction = undefined as Reaction;\n }\n\n if(!reactionCount.count) {\n indexOfAndSplice(reactions.results, reactionCount);\n }/* else {\n insertInDescendSortedArray(reactions.results, chosenReaction, 'count', chosenReactionIdx);\n } */\n\n if(reactions.recent_reactions) {\n findAndSplice(reactions.recent_reactions, (recentReaction) => reactionsEqual(recentReaction.reaction, reactionCount.reaction) && this.appPeersManager.getPeerId(recentReaction.peer_id) === myPeerId);\n }\n\n if(!reactions.results.length) {\n reactions = undefined;\n }\n };\n\n const canSeeList = message.reactions?.pFlags?.can_see_list || !this.appPeersManager.isBroadcast(message.peerId) || message.peerId.isUser();\n if(!message.reactions) {\n message.reactions = {\n _: 'messageReactions',\n results: [],\n recent_reactions: canSeeList ? [] : undefined,\n pFlags: {\n can_see_list: canSeeList || undefined\n }\n };\n }\n\n let reactions = onlyLocal ? message.reactions : copy(message.reactions);\n const chosenReactions = reactions.results.filter((reactionCount) => reactionCount.chosen_order !== undefined);\n chosenReactions.sort((a, b) => b.chosen_order - a.chosen_order);\n const unsetReactions: ReactionCount[] = [];\n const chosenReactionIdx = chosenReactions.findIndex((reactionCount) => reactionsEqual(reactionCount.reaction, reaction as Reaction));\n if(chosenReactionIdx !== -1) unsetReactions.push(...chosenReactions.splice(chosenReactionIdx, 1));\n unsetReactions.push(...chosenReactions.splice(limit - +(chosenReactionIdx === -1)));\n unsetReactions.forEach((reactionCount) => {\n chosenReactions.forEach((chosenReactionCount) => {\n if(chosenReactionCount.chosen_order > reactionCount.chosen_order) {\n --chosenReactionCount.chosen_order;\n }\n });\n\n unsetReactionCount(reactionCount);\n });\n\n const chosenReactionsLength = chosenReactions.length;\n chosenReactions.forEach((reactionCount, idx) => {\n reactionCount.chosen_order = chosenReactionsLength - 1 - idx;\n });\n\n if(reaction) {\n if(!reactions) {\n reactions/* = message.reactions */ = {\n _: 'messageReactions',\n results: [],\n pFlags: {}\n };\n\n if(canSeeList) {\n reactions.pFlags.can_see_list = true;\n }\n }\n\n let reactionCountIdx = reactions.results.findIndex((reactionCount) => reactionsEqual(reactionCount.reaction, reaction as Reaction));\n let reactionCount = reactionCountIdx !== -1 && reactions.results[reactionCountIdx];\n if(!reactionCount) {\n reactionCount = {\n _: 'reactionCount',\n count: 0,\n reaction\n };\n\n reactionCountIdx = reactions.results.push(reactionCount) - 1;\n }\n\n ++reactionCount.count;\n reactionCount.chosen_order = chosenReactions.length ? chosenReactions[0].chosen_order + 1 : 0;\n chosenReactions.unshift(reactionCount);\n\n if(!reactions.recent_reactions && canSeeList) {\n reactions.recent_reactions = [];\n }\n\n if(reactions.recent_reactions) {\n const peerReaction: MessagePeerReaction = {\n _: 'messagePeerReaction',\n reaction,\n peer_id: this.appPeersManager.getOutputPeer(myPeerId),\n pFlags: {}\n };\n\n if(!this.appPeersManager.isMegagroup(peerId) && false) {\n reactions.recent_reactions.push(peerReaction);\n reactions.recent_reactions = reactions.recent_reactions.slice(-3);\n } else {\n reactions.recent_reactions.unshift(peerReaction);\n reactions.recent_reactions = reactions.recent_reactions.slice(0, 3);\n }\n }\n\n // insertInDescendSortedArray(reactions.results, reactionCount, 'count', reactionCountIdx);\n }\n\n const availableReactions = this.availableReactions;\n if(reactions && availableReactions?.length) {\n const indexes: Map = new Map();\n availableReactions.forEach((availableReaction, idx) => {\n indexes.set(availableReaction.reaction, idx);\n });\n\n reactions.results.sort((a, b) => {\n const id1 = (a.reaction as Reaction.reactionCustomEmoji).document_id || (a.reaction as Reaction.reactionEmoji).emoticon;\n const id2 = (b.reaction as Reaction.reactionCustomEmoji).document_id || (b.reaction as Reaction.reactionEmoji).emoticon;\n return (b.count - a.count) || ((indexes.get(id1) ?? 0) - (indexes.get(id2) ?? 0));\n });\n }\n\n if(onlyLocal) {\n message.reactions = reactions;\n this.rootScope.dispatchEvent('messages_reactions', [{message, changedResults: []}]);\n return Promise.resolve();\n }\n\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updateMessageReactions',\n peer: message.peer_id,\n msg_id: message.id,\n reactions: reactions,\n local: true\n });\n\n const promiseKey = [peerId, mid].join('-');\n const msgId = getServerMessageId(mid);\n const promise = this.apiManager.invokeApi('messages.sendReaction', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: msgId,\n reaction: chosenReactions.map((reactionCount) => reactionCount.reaction)\n }).then((updates) => {\n assumeType(updates);\n\n const editMessageUpdateIdx = updates.updates.findIndex((update) => update._ === 'updateEditMessage' || update._ === 'updateEditChannelMessage');\n if(editMessageUpdateIdx !== -1) {\n const editMessageUpdate = updates.updates[editMessageUpdateIdx] as Update.updateEditMessage | Update.updateEditChannelMessage;\n updates.updates[editMessageUpdateIdx] = {\n _: 'updateMessageReactions',\n msg_id: msgId,\n peer: this.appPeersManager.getOutputPeer(peerId),\n reactions: (editMessageUpdate.message as Message.message).reactions,\n pts: editMessageUpdate.pts,\n pts_count: editMessageUpdate.pts_count\n };\n }\n\n this.apiUpdatesManager.processUpdateMessage(updates);\n }).catch((err) => {\n if(err.type === 'REACTION_INVALID' && this.sendReactionPromises.get(promiseKey) === promise) {\n this.sendReaction(message, chosenReactions[0]?.reaction, true);\n }\n }).finally(() => {\n if(this.sendReactionPromises.get(promiseKey) === promise) {\n this.sendReactionPromises.delete(promiseKey);\n }\n });\n\n this.sendReactionPromises.set(promiseKey, promise);\n return promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from './appDocsManager';\nimport type {DownloadOptions} from '../mtproto/apiFileManager';\nimport {Document, InputFileLocation, InputStickerSet, MessagesAllStickers, MessagesFavedStickers, MessagesFeaturedStickers, MessagesFoundStickerSets, MessagesRecentStickers, MessagesStickers, MessagesStickerSet, PhotoSize, StickerPack, StickerSet, StickerSetCovered, Update, VideoSize} from '../../layer';\nimport {Modify} from '../../types';\nimport AppStorage from '../storage';\nimport DATABASE_STATE from '../../config/databases/state';\nimport assumeType from '../../helpers/assumeType';\nimport fixBase64String from '../../helpers/fixBase64String';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport {AppManager} from './manager';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport ctx from '../../environment/ctx';\nimport {getEnvironment} from '../../environment/utils';\nimport getDocumentInput from './utils/docs/getDocumentInput';\nimport getStickerEffectThumb from './utils/stickers/getStickerEffectThumb';\nimport tsNow from '../../helpers/tsNow';\n\nconst CACHE_TIME = 3600e3;\n\ntype LOCAL_STICKER_SET_ID = Extract<\n InputStickerSet['_'],\n 'inputStickerSetAnimatedEmoji' | 'inputStickerSetAnimatedEmojiAnimations' |\n 'inputStickerSetPremiumGifts' | 'inputStickerSetEmojiGenericAnimations' |\n 'inputStickerSetEmojiDefaultStatuses' | 'inputStickerSetEmojiDefaultTopicIcons'\n>;\n\ntype LOCAL_ID = 'EMOJI' | 'EMOJI_ANIMATIONS' | 'PREMIUM_GIFTS' | 'GENERIC_ANIMATIONS' | 'DEFAULT_STATUSES' | 'DEFAULT_TOPIC_ICONS';\n\nconst LOCAL_IDS: {[key in LOCAL_ID]: LOCAL_STICKER_SET_ID} = {\n EMOJI: 'inputStickerSetAnimatedEmoji',\n EMOJI_ANIMATIONS: 'inputStickerSetAnimatedEmojiAnimations',\n PREMIUM_GIFTS: 'inputStickerSetPremiumGifts',\n GENERIC_ANIMATIONS: 'inputStickerSetEmojiGenericAnimations',\n DEFAULT_STATUSES: 'inputStickerSetEmojiDefaultStatuses',\n DEFAULT_TOPIC_ICONS: 'inputStickerSetEmojiDefaultTopicIcons'\n}\n\nconst LOCAL_IDS_SET: Set = new Set(Object.values(LOCAL_IDS) as any);\n\n// let TEST_FILE_REFERENCE_REFRESH = true;\n\nexport type MyStickerSetInput = {\n id: StickerSet.stickerSet['id'],\n access_hash?: StickerSet.stickerSet['access_hash']\n};\n\nexport type MyMessagesStickerSet = MessagesStickerSet.messagesStickerSet;\n\nexport class AppStickersManager extends AppManager {\n private storage = new AppStorage, typeof DATABASE_STATE>(DATABASE_STATE, 'stickerSets');\n\n private getStickerSetPromises: {[setId: Long]: Promise};\n private getStickersByEmoticonsPromises: {[emoticon: string]: Promise};\n\n private greetingStickers: MyDocument[];\n private getGreetingStickersTimeout: number;\n private getGreetingStickersPromise: Promise;\n\n private sounds: Record;\n private getAnimatedEmojiSoundsPromise: Promise;\n\n private favedStickers: MyDocument[];\n private recentStickers: MyDocument[];\n\n private names: Record;\n\n protected after() {\n this.getStickerSetPromises = {};\n this.getStickersByEmoticonsPromises = {};\n this.sounds = {};\n this.names = {};\n\n this.rootScope.addEventListener('user_auth', () => {\n setTimeout(() => {\n this.getAnimatedEmojiStickerSet();\n // this.getFavedStickersStickers();\n }, 1000);\n\n if(!this.getGreetingStickersPromise && this.getGreetingStickersTimeout === undefined) {\n this.getGreetingStickersTimeout = ctx.setTimeout(() => {\n this.getGreetingStickersTimeout = undefined;\n this.getGreetingSticker(true);\n }, 5000);\n }\n });\n\n this.rootScope.addEventListener('app_config', () => this.onStickersUpdated('faved', true));\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateNewStickerSet: (update) => {\n const stickerSet = update.stickerset as MyMessagesStickerSet;\n this.saveStickerSet(stickerSet, stickerSet.set.id);\n this.rootScope.dispatchEvent('stickers_installed', stickerSet.set);\n },\n\n updateRecentStickers: () => this.onStickersUpdated('recent', true),\n\n updateFavedStickers: () => this.onStickersUpdated('faved', true),\n\n updateMoveStickerSetToTop: (update) => {\n this.rootScope.dispatchEvent('stickers_top', update.stickerset);\n }\n });\n }\n\n private async onStickersUpdated(type: 'faved' | 'recent', overwrite: boolean) {\n const stickers = await (type === 'faved' ? this.getFavedStickersStickers(overwrite) : this.getRecentStickersStickers(overwrite));\n this.rootScope.dispatchEvent('stickers_updated', {\n type,\n stickers\n });\n }\n\n public getGreetingSticker(justPreload = false) {\n if(this.getGreetingStickersTimeout) {\n clearTimeout(this.getGreetingStickersTimeout);\n this.getGreetingStickersTimeout = undefined;\n }\n\n if(!this.getGreetingStickersPromise) {\n this.getGreetingStickersPromise = this.getStickersByEmoticon('๐Ÿ‘‹โญ๏ธ', false).then((docs) => {\n if(!docs.length) throw 'NO_STICKERS';\n this.greetingStickers = docs.slice() as Document.document[];\n this.greetingStickers.sort((a, b) => Math.random() - Math.random());\n });\n }\n\n return this.getGreetingStickersPromise.then(() => {\n let doc: Document.document;\n if(!justPreload) {\n doc = this.greetingStickers.shift();\n this.greetingStickers.push(doc);\n }\n\n this.apiFileManager.downloadMedia({media: this.greetingStickers[0]}); // preload next sticker\n\n return doc;\n });\n }\n\n private saveStickers(docs: Document[]) {\n forEachReverse(docs, (doc, idx) => {\n doc = this.appDocsManager.saveDoc(doc);\n\n if(!doc) docs.splice(idx, 1);\n else docs[idx] = doc;\n });\n }\n\n private canUseStickerSetCache(set: MyMessagesStickerSet, useCache?: boolean) {\n return set && set.documents?.length && ((Date.now() - set.refreshTime) < CACHE_TIME || useCache);\n }\n\n public getStickerSet(set: MyStickerSetInput, params: Partial<{\n overwrite: boolean,\n useCache: boolean,\n saveById: boolean\n }> = {}): Promise | MyMessagesStickerSet {\n let {id} = set;\n if(!set.access_hash) {\n set = this.names[id] || set;\n id = set.id;\n }\n\n if(this.getStickerSetPromises[id]) {\n return this.getStickerSetPromises[id];\n }\n\n if(!params.overwrite) {\n const cachedSet = this.storage.getFromCache(id);\n if(this.canUseStickerSetCache(cachedSet, params.useCache)) {\n return cachedSet;\n }\n }\n\n const promise = this.getStickerSetPromises[id] = new Promise(async(resolve) => {\n if(!params.overwrite) {\n const cachedSet = await this.storage.get(id);\n if(this.canUseStickerSetCache(cachedSet, params.useCache)) {\n this.saveStickers(cachedSet.documents);\n resolve(cachedSet);\n\n if(this.getStickerSetPromises[id] === promise) {\n delete this.getStickerSetPromises[id];\n }\n\n return;\n }\n }\n\n try {\n const stickerSet = await this.apiManager.invokeApi('messages.getStickerSet', {\n stickerset: this.getStickerSetInput(set),\n hash: 0\n }) as MyMessagesStickerSet;\n\n const saveById = params.saveById ? id : stickerSet.set.id;\n this.saveStickerSet(stickerSet, saveById);\n\n resolve(stickerSet);\n } catch(err) {\n resolve(null);\n }\n\n if(this.getStickerSetPromises[id] === promise) {\n delete this.getStickerSetPromises[id];\n }\n });\n\n return promise;\n }\n\n public getLocalStickerSet(id: LOCAL_STICKER_SET_ID) {\n return this.getStickerSet({id}, {saveById: true});\n }\n\n public getAnimatedEmojiStickerSet() {\n return Promise.all([\n this.getLocalStickerSet(LOCAL_IDS.EMOJI),\n this.getLocalStickerSet(LOCAL_IDS.EMOJI_ANIMATIONS),\n this.getAnimatedEmojiSounds()\n ]).then(([emoji, animations]) => {\n return {emoji, animations};\n });\n }\n\n public getAnimatedEmojiSounds(overwrite?: boolean) {\n if(this.getAnimatedEmojiSoundsPromise && !overwrite) return this.getAnimatedEmojiSoundsPromise;\n const promise = this.getAnimatedEmojiSoundsPromise = Promise.all([\n this.apiManager.getAppConfig(overwrite),\n this.apiManager.getConfig()\n ]).then(([appConfig, config]) => {\n if(this.getAnimatedEmojiSoundsPromise !== promise) {\n return;\n }\n\n for(const emoji in appConfig.emojies_sounds) {\n const sound = appConfig.emojies_sounds[emoji];\n const bytesStr = atob(fixBase64String(sound.file_reference_base64, false));\n const bytes = new Uint8Array(bytesStr.length);\n for(let i = 0, length = bytes.length; i < length; ++i) {\n bytes[i] = bytesStr[i].charCodeAt(0);\n }\n\n // if(TEST_FILE_REFERENCE_REFRESH) {\n // bytes[0] = bytes[1] = bytes[2] = bytes[3] = bytes[4] = 0;\n // sound.access_hash += '999';\n // }\n\n const doc = this.appDocsManager.saveDoc({\n _: 'document',\n pFlags: {},\n flags: 0,\n id: sound.id,\n access_hash: sound.access_hash,\n attributes: [{\n _: 'documentAttributeAudio',\n duration: 1,\n pFlags: {\n voice: true\n }\n }],\n date: 0,\n dc_id: config.this_dc,\n file_reference: bytes,\n mime_type: 'audio/ogg'\n // size: 101010 // test loading everytime\n }, {\n type: 'emojiesSounds'\n });\n\n this.sounds[emoji] = doc;\n }\n\n // if(TEST_FILE_REFERENCE_REFRESH) {\n // TEST_FILE_REFERENCE_REFRESH = false;\n // }\n });\n\n return promise;\n }\n\n public async getRecentStickers(overwrite?: boolean): Promise> {\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.getRecentStickers',\n processResult: (res) => {\n assumeType(res);\n\n this.recentStickers = res.stickers as MyDocument[];\n this.saveStickers(res.stickers);\n return res;\n },\n overwrite\n });\n\n return res;\n }\n\n public getRecentStickersStickers(overwrite?: boolean) {\n if(overwrite) this.recentStickers = undefined;\n else if(this.recentStickers) return this.recentStickers;\n return this.getRecentStickers(overwrite).then(() => this.recentStickers);\n }\n\n public saveRecentSticker(docId: DocId, unsave?: boolean, attached?: boolean) {\n const doc = this.appDocsManager.getDoc(docId);\n\n findAndSplice(this.recentStickers, (_doc) => _doc.id === docId);\n if(!unsave) {\n this.recentStickers.unshift(doc);\n\n const docEmoticon = fixEmoji(doc.stickerEmojiRaw);\n for(const emoticon in this.getStickersByEmoticonsPromises) {\n const promise = this.getStickersByEmoticonsPromises[emoticon];\n promise.then((stickers) => {\n const _doc = findAndSplice(stickers, (_doc) => _doc.id === doc.id);\n if(_doc) {\n stickers.unshift(_doc);\n } else if(emoticon.includes(docEmoticon)) {\n stickers.unshift(doc);\n }\n });\n }\n }\n\n this.rootScope.dispatchEvent('sticker_updated', {type: 'recent', faved: !unsave, document: doc});\n\n if(unsave) {\n this.onStickersUpdated('recent', false);\n }\n\n return this.apiManager.invokeApi('messages.saveRecentSticker', {\n id: getDocumentInput(doc),\n unsave,\n attached\n });\n }\n\n private cleanEmoji(emoji: string) {\n return emoji.replace(/\\ufe0f/g, '').replace(/๐Ÿป|๐Ÿผ|๐Ÿฝ|๐Ÿพ|๐Ÿฟ/g, '');\n }\n\n public getAnimatedEmojiSticker(emoji: string, isAnimation?: boolean) {\n const id = isAnimation ? LOCAL_IDS.EMOJI_ANIMATIONS : LOCAL_IDS.EMOJI;\n const stickerSet = this.storage.getFromCache(id);\n // const stickerSet = await this.getStickerSet({id});\n if(!stickerSet?.documents) return;\n\n if(isAnimation) {\n if(['๐Ÿงก', '๐Ÿ’›', '๐Ÿ’š', '๐Ÿ’™', '๐Ÿ’œ', '๐Ÿ–ค', '๐Ÿค', '๐ŸคŽ'].includes(emoji)) {\n emoji = 'โค๏ธ';\n }\n }\n\n emoji = this.cleanEmoji(emoji);\n const pack = stickerSet.packs.find((p) => p.emoticon === emoji);\n return pack ? this.appDocsManager.getDoc(pack.documents[0]) : undefined;\n }\n\n public getAnimatedEmojiSoundDocument(emoji: string) {\n return this.sounds[this.cleanEmoji(emoji)];\n }\n\n public preloadAnimatedEmojiSticker(emoji: string) {\n const preloadEmojiPromise = this.getAnimatedEmojiStickerSet().then(() => {\n return this.getAnimatedEmojiSticker(emoji);\n });\n\n return Promise.all([\n preloadEmojiPromise,\n this.preloadAnimatedEmojiStickerAnimation(emoji)\n ]).then(([doc, a]) => {\n return {\n doc: doc,\n animation: a?.doc,\n sound: a?.sound\n };\n });\n }\n\n public preloadAnimatedEmojiStickerAnimation(emoji: string) {\n return this.getAnimatedEmojiStickerSet().then(() => {\n return this.getAnimatedEmojiSticker(emoji, true);\n }).then((doc) => {\n if(!doc) {\n return;\n }\n\n const sound = this.getAnimatedEmojiSoundDocument(emoji);\n return Promise.all([\n this.preloadSticker(doc.id),\n sound ? this.preloadSticker(sound.id) : undefined\n ]).then(() => {\n return {doc, sound};\n });\n });\n }\n\n public preloadSticker(docId: DocId, isPremiumEffect?: boolean) {\n const doc = this.appDocsManager.getDoc(docId);\n return this.apiFileManager.downloadMedia({media: doc, thumb: isPremiumEffect ? doc.video_thumbs?.[0] as Extract : undefined});\n }\n\n private saveStickerSet(res: Omit, id: DocId) {\n const newSet: MessagesStickerSet = {\n _: 'messages.stickerSet',\n set: res.set,\n packs: res.packs,\n documents: res.documents as Document[],\n keywords: res.keywords\n };\n\n let stickerSet = this.storage.getFromCache(id);\n if(stickerSet) {\n Object.assign(stickerSet, newSet);\n } else {\n stickerSet = this.storage.setToCache(id, newSet);\n }\n\n if(stickerSet.set.short_name) {\n this.names[stickerSet.set.short_name] = this.getStickerSetInput(newSet.set) as any;\n }\n\n this.saveStickers(res.documents);\n\n // console.log('stickers wrote', this.stickerSets);\n const needSave = stickerSet.set.installed_date || LOCAL_IDS_SET.has(id as any);\n stickerSet.refreshTime = Date.now();\n this.storage.set({[id]: stickerSet}, !needSave);\n }\n\n public getStickerSetThumbDownloadOptions(stickerSet: StickerSet.stickerSet): DownloadOptions {\n const thumb = stickerSet.thumbs.find((thumb) => thumb._ === 'photoSize') as PhotoSize.photoSize;\n const dcId = stickerSet.thumb_dc_id;\n\n const isAnimated = stickerSet.pFlags?.animated;\n\n const input: InputFileLocation.inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n thumb_version: stickerSet.thumb_version\n };\n\n return {dcId, location: input, size: thumb.size, mimeType: isAnimated ? 'application/x-tgsticker' : 'image/webp'};\n }\n\n /* public getStickerSetThumbURL(stickerSet: MTStickerSet) {\n const thumb = stickerSet.thumb;\n const dcId = stickerSet.thumb_dc_id;\n\n const isAnimated = stickerSet.pFlags?.animated;\n\n const input: inputStickerSetThumb = {\n _: 'inputStickerSetThumb',\n stickerset: this.getStickerSetInput(stickerSet),\n volume_id: thumb.location.volume_id,\n local_id: thumb.location.local_id\n };\n\n const url = getFileURL('document', this.getStickerSetThumbDownloadOptions(stickerSet));\n return url;\n\n //return promise;\n } */\n\n public getStickerSetInput(set: MyStickerSetInput): InputStickerSet {\n if(LOCAL_IDS_SET.has(set.id as any)) {\n return {\n _: set.id as any\n };\n } else if(!set.access_hash) {\n return {\n _: 'inputStickerSetShortName',\n short_name: '' + set.id\n };\n } else {\n return {\n _: 'inputStickerSetID',\n id: set.id,\n access_hash: set.access_hash\n };\n }\n }\n\n public async getFeaturedStickers() {\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.getFeaturedStickers',\n processResult: (res) => {\n assumeType(res);\n\n forEachReverse(res.sets, (covered, idx, arr) => {\n if(covered.set.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n arr.splice(idx, 1);\n }\n });\n\n res.sets.forEach((covered) => {\n this.saveStickerSet({set: covered.set, documents: [], packs: [], keywords: []}, covered.set.id);\n });\n\n return res;\n }\n });\n\n return res.sets;\n }\n\n public getPromoPremiumStickers() {\n return this.getStickersByEmoticon('โญ๏ธโญ๏ธ', false);\n }\n\n public getPremiumStickers() {\n return this.getStickersByEmoticon('๐Ÿ“‚โญ๏ธ', false);\n }\n\n public getFavedStickers(overwrite?: boolean) {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getFavedStickers',\n processResult: (favedStickers) => {\n assumeType(favedStickers);\n this.saveStickers(favedStickers.stickers);\n this.favedStickers = favedStickers.stickers as MyDocument[];\n return favedStickers;\n },\n overwrite\n });\n }\n\n public getFavedStickersStickers(overwrite?: boolean) {\n if(overwrite) this.favedStickers = undefined;\n else if(this.favedStickers) return this.favedStickers;\n return this.getFavedStickers(overwrite).then(() => this.favedStickers);\n }\n\n public getFavedStickersLimit() {\n return this.apiManager.getLimit('favedStickers');\n }\n\n public async faveSticker(docId: DocId, unfave?: boolean) {\n if(!this.favedStickers) {\n await this.getFavedStickersStickers();\n }\n\n const limit = await this.getFavedStickersLimit();\n\n const doc = this.appDocsManager.getDoc(docId);\n findAndSplice(this.favedStickers, (_doc) => _doc.id === doc.id);\n\n if(!unfave) {\n this.favedStickers.unshift(doc);\n const spliced = this.favedStickers.splice(limit, this.favedStickers.length - limit);\n }\n\n this.rootScope.dispatchEvent('sticker_updated', {type: 'faved', faved: !unfave, document: doc});\n\n return this.apiManager.invokeApi('messages.faveSticker', {\n id: getDocumentInput(doc),\n unfave\n }).then(() => {\n if(unfave) {\n this.onStickersUpdated('faved', true);\n }\n });\n }\n\n public async toggleStickerSet(set: StickerSet.stickerSet) {\n set = this.storage.getFromCache(set.id).set;\n\n if(set.installed_date) {\n const res = await this.apiManager.invokeApi('messages.uninstallStickerSet', {\n stickerset: this.getStickerSetInput(set)\n });\n\n if(res) {\n delete set.installed_date;\n this.rootScope.dispatchEvent('stickers_deleted', set);\n this.storage.delete(set.id, true);\n return true;\n }\n } else {\n const res = await this.apiManager.invokeApi('messages.installStickerSet', {\n stickerset: this.getStickerSetInput(set),\n archived: false\n });\n\n if(res) {\n set.installed_date = tsNow(true);\n this.rootScope.dispatchEvent('stickers_installed', set);\n return true;\n }\n }\n\n return false;\n }\n\n public toggleStickerSets(sets: StickerSet.stickerSet[]) {\n return Promise.all(sets.map((set) => this.toggleStickerSet(set)));\n }\n\n public async searchStickerSets(query: string, excludeFeatured = true) {\n const flags = excludeFeatured ? 1 : 0;\n const res = await this.apiManager.invokeApiHashable({\n method: 'messages.searchStickerSets',\n params: {\n flags,\n exclude_featured: excludeFeatured || undefined,\n q: query\n },\n processResult: (res) => {\n assumeType(res);\n\n forEachReverse(res.sets, (covered, idx, arr) => {\n if(covered.set.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n arr.splice(idx, 1);\n }\n });\n\n res.sets.forEach((covered) => {\n this.saveStickerSet({set: covered.set, documents: [], packs: [], keywords: []}, covered.set.id);\n });\n\n return res;\n }\n });\n\n const foundSaved: StickerSetCovered[] = [];\n const cache = this.storage.getCache();\n for(const id in cache) {\n const {set} = cache[id];\n\n if(set.title.toLowerCase().includes(query.toLowerCase()) && !res.sets.find((c) => c.set.id === set.id)) {\n foundSaved.push({_: 'stickerSetCovered', set, cover: null});\n }\n }\n\n return res.sets.concat(foundSaved);\n }\n\n private processAllStickersResult = (allStickers: MessagesAllStickers) => {\n assumeType(allStickers);\n\n forEachReverse(allStickers.sets, (stickerSet, idx, arr) => {\n if(stickerSet.pFlags.videos && !getEnvironment().IS_WEBM_SUPPORTED) {\n arr.splice(idx, 1);\n }\n });\n\n return allStickers;\n };\n\n public getAllStickers() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getAllStickers',\n processResult: this.processAllStickersResult\n });\n }\n\n public getEmojiStickers() {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getEmojiStickers',\n processResult: this.processAllStickersResult\n });\n }\n\n public preloadStickerSets() {\n return this.getAllStickers().then((allStickers) => {\n return Promise.all((allStickers as MessagesAllStickers.messagesAllStickers).sets.map((set) => this.getStickerSet(set, {useCache: true})));\n });\n }\n\n // TODO: detect \"๐Ÿคท\" by \"๐Ÿคทโ€โ™‚๏ธ\"\n public getStickersByEmoticon(emoticon: string, includeOurStickers = true) {\n emoticon = fixEmoji(emoticon);\n if(this.getStickersByEmoticonsPromises[emoticon]) return this.getStickersByEmoticonsPromises[emoticon];\n\n return this.getStickersByEmoticonsPromises[emoticon] = Promise.all([\n this.apiManager.invokeApiHashable({\n method: 'messages.getStickers',\n params: {\n emoticon\n },\n processResult: (stickers) => stickers\n }),\n includeOurStickers ? this.preloadStickerSets() : [],\n includeOurStickers ? this.getRecentStickers() : undefined\n ]).then(([messagesStickers, installedSets, recentStickers]) => {\n const foundStickers = (messagesStickers as MessagesStickers.messagesStickers).stickers.map((sticker) => this.appDocsManager.saveDoc(sticker));\n const cachedStickersAnimated: Document.document[] = [], cachedStickersStatic: Document.document[] = [];\n\n // console.log('getStickersByEmoticon', messagesStickers, installedSets, recentStickers);\n\n const iteratePacks = (packs: StickerPack.stickerPack[]) => {\n for(const pack of packs) {\n const packEmoticon = fixEmoji(pack.emoticon);\n if(packEmoticon.includes(emoticon)) {\n for(const docId of pack.documents) {\n const doc = this.appDocsManager.getDoc(docId);\n (doc.animated ? cachedStickersAnimated : cachedStickersStatic).push(doc);\n }\n }\n }\n };\n\n if(recentStickers) {\n iteratePacks(recentStickers.packs);\n const stickers = recentStickers.stickers;\n [cachedStickersAnimated, cachedStickersStatic].forEach((s) => {\n s.sort((a, b) => stickers.indexOf(a) - stickers.indexOf(b));\n });\n }\n\n for(const set of installedSets) {\n iteratePacks(set.packs);\n }\n\n /* const entities = parseEntities(emoticon);\n if(entities.length === 1) {\n [cachedStickersAnimated, cachedStickersStatic].forEach((s) => {\n forEachReverse(s, (doc, idx) => {\n const docEmoticon = fixEmoji(doc.stickerEmojiRaw);\n if(docEmoticon !== emoticon) {\n s.splice(idx, 1);\n }\n });\n });\n } */\n\n const stickers = [...new Set(cachedStickersAnimated.concat(cachedStickersStatic, foundStickers))]/* .filter((doc) => !doc.animated) */;\n\n forEachReverse(stickers, (sticker, idx, arr) => {\n if((sticker.sticker === 3 && !getEnvironment().IS_WEBM_SUPPORTED) ||\n (!this.rootScope.premium && getStickerEffectThumb(sticker))) {\n arr.splice(idx, 1);\n }\n });\n\n return stickers;\n });\n }\n\n public clearRecentStickers() {\n if(this.recentStickers) {\n this.recentStickers.length = 0;\n this.onStickersUpdated('recent', false);\n }\n\n return this.apiManager.invokeApi('messages.clearRecentStickers');\n }\n}\n","export default function fixBase64String(str: string, toUrl: boolean) {\n if(toUrl) {\n return str.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/\\=+$/, '');\n } else {\n return str.replace(/-/g, '+').replace(/_/g, '/');\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport filterUnique from '../../helpers/array/filterUnique';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport cleanSearchText from '../../helpers/cleanSearchText';\nimport cleanUsername from '../../helpers/cleanUsername';\nimport tsNow from '../../helpers/tsNow';\nimport isObject from '../../helpers/object/isObject';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {isRestricted} from '../../helpers/restrictions';\nimport {Chat, ContactsResolvedPeer, InputContact, InputGeoPoint, InputMedia, InputPeer, InputUser, User as MTUser, UserProfilePhoto, UserStatus} from '../../layer';\nimport parseEntities from '../richTextProcessor/parseEntities';\nimport wrapUrl from '../richTextProcessor/wrapUrl';\nimport SearchIndex from '../searchIndex';\nimport {AppManager} from './manager';\nimport getPeerId from './utils/peers/getPeerId';\nimport canSendToUser from './utils/users/canSendToUser';\nimport {AppStoragesManager} from './appStoragesManager';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport getPeerActiveUsernames from './utils/peers/getPeerActiveUsernames';\n\nexport type User = MTUser.user;\nexport type TopPeerType = 'correspondents' | 'bots_inline';\nexport type MyTopPeer = {id: PeerId, rating: number};\n\nexport class AppUsersManager extends AppManager {\n private storage: AppStoragesManager['storages']['users'];\n\n private users: {[userId: UserId]: User};\n private usernames: {[username: string]: PeerId};\n private contactsIndex: SearchIndex;\n private contactsFillPromise: CancellablePromise;\n private contactsList: Set;\n private updatedContactsList: boolean;\n\n private getTopPeersPromises: {[type in TopPeerType]?: Promise};\n\n protected after() {\n this.clear(true);\n\n setInterval(this.updateUsersStatuses, 60000);\n\n this.rootScope.addEventListener('state_synchronized', this.updateUsersStatuses);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateUserStatus: (update) => {\n const userId = update.user_id;\n const user = this.users[userId];\n if(user) {\n user.status = update.status;\n if(user.status) {\n if('expires' in user.status) {\n user.status.expires -= this.timeManager.getServerTimeOffset();\n }\n\n if('was_online' in user.status) {\n user.status.was_online -= this.timeManager.getServerTimeOffset();\n }\n }\n\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', userId);\n this.setUserToStateIfNeeded(user);\n } // ////else console.warn('No user by id:', userId);\n },\n\n // updateUserPhoto: (update) => {\n // const userId = update.user_id;\n // const user = this.users[userId];\n // if(user) {\n // if((user.photo as UserProfilePhoto.userProfilePhoto)?.photo_id === (update.photo as UserProfilePhoto.userProfilePhoto)?.photo_id) {\n // return;\n // }\n\n // this.forceUserOnline(userId, update.date);\n\n // if(update.photo._ === 'userProfilePhotoEmpty') {\n // delete user.photo;\n // } else {\n // user.photo = safeReplaceObject(user.photo, update.photo);\n // }\n\n // this.setUserToStateIfNeeded(user);\n\n // this.rootScope.dispatchEvent('user_update', userId);\n // this.rootScope.dispatchEvent('avatar_update', userId.toPeerId());\n // } else console.warn('No user by id:', userId);\n // },\n\n updateUserName: (update) => {\n const userId = update.user_id;\n const user = this.users[userId];\n if(user) {\n this.forceUserOnline(userId);\n\n this.saveApiUser({\n ...user,\n first_name: update.first_name,\n last_name: update.last_name,\n username: undefined,\n usernames: update.usernames\n }, true);\n }\n }\n });\n\n /* case 'updateContactLink':\n this.onContactUpdated(update.user_id, update.my_link._ === 'contactLinkContact');\n break; */\n\n this.rootScope.addEventListener('language_change', (e) => {\n const userId = this.getSelf().id;\n this.contactsIndex.indexObject(userId, this.getUserSearchText(userId));\n });\n\n return Promise.all([\n this.appStateManager.getState(),\n this.appStoragesManager.loadStorage('users')\n ]).then(([state, {results: users, storage}]) => {\n this.storage = storage;\n\n this.saveApiUsers(users);\n for(let i = 0, length = users.length; i < length; ++i) {\n const user = users[i];\n if(!user) {\n continue;\n }\n\n if(state.contactsListCachedTime && (user.pFlags.contact || user.pFlags.mutual_contact)) {\n this.pushContact(user.id);\n\n if(!this.contactsFillPromise) {\n this.contactsFillPromise = deferredPromise();\n this.contactsFillPromise.resolve(this.contactsList);\n }\n }\n }\n\n // const contactsList = state.contactsList;\n // if(Array.isArray(contactsList)) {\n // contactsList.forEach((userId) => {\n // this.pushContact(userId);\n // });\n\n // if(contactsList.length) {\n // this.contactsFillPromise = deferredPromise();\n // this.contactsFillPromise.resolve(this.contactsList);\n // }\n // }\n\n const recentSearch = state.recentSearch || [];\n for(let i = 0, length = recentSearch.length; i < length; ++i) {\n this.peersStorage.requestPeer(recentSearch[i], 'recentSearch');\n }\n\n this.peersStorage.addEventListener('peerNeeded', (peerId) => {\n if(!this.appPeersManager.isUser(peerId)) {\n return;\n }\n\n const userId = peerId.toUserId();\n if(!this.storage.getFromCache(userId)) {\n this.storage.set({\n [userId]: this.getUser(userId)\n });\n }\n });\n\n this.peersStorage.addEventListener('peerUnneeded', (peerId) => {\n if(!this.appPeersManager.isUser(peerId)) {\n return;\n }\n\n const userId = peerId.toUserId();\n if(this.storage.getFromCache(userId)) {\n this.storage.delete(userId);\n }\n });\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n for(const userId in this.users) {\n // const userId = +userId;\n if(!userId) continue;\n const peerId = userId.toPeerId();\n if(!this.peersStorage.isPeerNeeded(peerId)) {\n const user = this.users[userId];\n this.modifyUsernamesCache(user, false);\n\n this.storage.delete(userId);\n delete this.users[userId];\n }\n }\n } else {\n this.users = {};\n this.usernames = {};\n }\n\n this.getTopPeersPromises = {};\n this.contactsIndex = this.createSearchIndex();\n this.contactsFillPromise = undefined;\n this.contactsList = new Set();\n this.updatedContactsList = false;\n };\n\n public get userId() {\n return this.rootScope.myId.toUserId();\n }\n\n private onContactsModified(fromServer?: boolean) {\n // const contactsList = [...this.contactsList];\n // this.appStateManager.pushToState('contactsList', contactsList);\n\n if(fromServer) {\n this.appStateManager.pushToState('contactsListCachedTime', tsNow(true));\n }\n }\n\n public pushRecentSearch(peerId: PeerId) {\n return this.appStateManager.getState().then((state) => {\n const recentSearch = state.recentSearch || [];\n if(recentSearch[0] !== peerId) {\n indexOfAndSplice(recentSearch, peerId);\n recentSearch.unshift(peerId);\n if(recentSearch.length > 20) {\n recentSearch.length = 20;\n }\n\n this.appStateManager.pushToState('recentSearch', recentSearch);\n for(const peerId of recentSearch) {\n this.peersStorage.requestPeer(peerId, 'recentSearch');\n }\n }\n });\n }\n\n public clearRecentSearch() {\n return this.appStateManager.getState().then((state) => {\n const recentSearch = state.recentSearch || [];\n for(const peerId of recentSearch) {\n this.peersStorage.releasePeer(peerId, 'recentSearch');\n }\n\n recentSearch.length = 0;\n this.appStateManager.pushToState('recentSearch', recentSearch);\n });\n }\n\n public fillContacts() {\n if(this.contactsFillPromise && this.updatedContactsList) {\n return {\n cached: this.contactsFillPromise.isFulfilled,\n promise: this.contactsFillPromise\n };\n }\n\n this.updatedContactsList = true;\n\n const promise = deferredPromise>();\n this.apiManager.invokeApi('contacts.getContacts').then((result) => {\n if(result._ === 'contacts.contacts') {\n this.contactsList.clear();\n\n this.saveApiUsers(result.users);\n\n result.contacts.forEach((contact) => {\n this.pushContact(contact.user_id);\n });\n\n this.onContactsModified(true);\n\n this.contactsFillPromise = promise;\n }\n\n promise.resolve(this.contactsList);\n }, () => {\n this.updatedContactsList = false;\n });\n\n return {\n cached: this.contactsFillPromise?.isFulfilled,\n promise: this.contactsFillPromise ||= promise\n };\n }\n\n public resolveUsername(username: string): Promise | Chat | User {\n if(username[0] === '@') {\n username = username.slice(1);\n }\n\n username = username.toLowerCase();\n const peerId = this.usernames[username];\n if(peerId) {\n return this.appPeersManager.getPeer(peerId);\n }\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'contacts.resolveUsername',\n params: {username},\n processResult: (resolvedPeer) => this.processResolvedPeer(resolvedPeer)\n });\n }\n\n private processResolvedPeer(resolvedPeer: ContactsResolvedPeer.contactsResolvedPeer) {\n this.saveApiUsers(resolvedPeer.users);\n this.appChatsManager.saveApiChats(resolvedPeer.chats);\n\n return this.appPeersManager.getPeer(getPeerId(resolvedPeer.peer)) as Chat | User;\n }\n\n public resolvePhone(phone: string) {\n return this.apiManager.invokeApi('contacts.resolvePhone', {phone}).then((resolvedPeer) => {\n return this.processResolvedPeer(resolvedPeer) as User;\n });\n }\n\n private pushContact(id: UserId) {\n this.contactsList.add(id);\n this.contactsIndex.indexObject(id, this.getUserSearchText(id));\n this.peersStorage.requestPeer(id.toPeerId(), 'contact');\n }\n\n private popContact(id: UserId) {\n this.contactsList.delete(id);\n this.contactsIndex.indexObject(id, ''); // delete search index\n this.peersStorage.releasePeer(id.toPeerId(), 'contact');\n }\n\n public getUserSearchText(id: UserId) {\n const user = this.users[id];\n if(!user) {\n return '';\n }\n\n const arr: string[] = [\n user.first_name,\n user.last_name,\n user.phone,\n ...getPeerActiveUsernames(user),\n // user.pFlags.self ? I18n.format('SavedMessages', true) : '',\n user.pFlags.self ? 'Saved Messages' : ''\n ];\n\n return arr.filter(Boolean).join(' ');\n }\n\n public getContacts(query?: string, includeSaved = false, sortBy: 'name' | 'online' | 'none' = 'name') {\n return this.fillContacts().promise.then((_contactsList) => {\n let contactsList = [..._contactsList];\n if(query) {\n const results = this.contactsIndex.search(query);\n const filteredContactsList = [...contactsList].filter((id) => results.has(id));\n\n contactsList = filteredContactsList;\n }\n\n if(sortBy === 'name') {\n contactsList.sort((userId1, userId2) => {\n const sortName1 = (this.users[userId1] || {}).sortName || '';\n const sortName2 = (this.users[userId2] || {}).sortName || '';\n return sortName1.localeCompare(sortName2);\n });\n } else if(sortBy === 'online') {\n contactsList.sort((userId1, userId2) => {\n const status1 = this.getUserStatusForSort(this.getUser(userId1).status);\n const status2 = this.getUserStatusForSort(this.getUser(userId2).status);\n return status2 - status1;\n });\n }\n\n const myUserId = this.userId;\n indexOfAndSplice(contactsList, myUserId);\n if(includeSaved) {\n if(this.testSelfSearch(query)) {\n contactsList.unshift(myUserId);\n }\n }\n\n return contactsList;\n });\n }\n\n public getContactsPeerIds(\n query?: Parameters[0],\n includeSaved?: Parameters[1],\n sortBy?: Parameters[2],\n limit?: number\n ) {\n return this.getContacts(query, includeSaved, sortBy).then((userIds) => {\n const peerIds = userIds.map((userId) => userId.toPeerId(false));\n if(limit) {\n return peerIds.slice(0, limit);\n }\n\n return peerIds;\n });\n }\n\n public toggleBlock(peerId: PeerId, block: boolean) {\n return this.apiManager.invokeApiSingle(block ? 'contacts.block' : 'contacts.unblock', {\n id: this.appPeersManager.getInputPeerById(peerId)\n }).then((value) => {\n if(value) {\n this.apiUpdatesManager.processLocalUpdate({\n _: 'updatePeerBlocked',\n peer_id: this.appPeersManager.getOutputPeer(peerId),\n blocked: block\n });\n }\n\n return value;\n });\n }\n\n public testSelfSearch(query: string) {\n const user = this.getSelf();\n const index = this.createSearchIndex();\n index.indexObject(user.id, this.getUserSearchText(user.id));\n return index.search(query).has(user.id);\n }\n\n public createSearchIndex() {\n return new SearchIndex({\n clearBadChars: true,\n ignoreCase: true,\n latinize: true,\n includeTag: true\n });\n }\n\n public saveApiUsers(apiUsers: MTUser[], override?: boolean) {\n if((apiUsers as any).saved) return;\n (apiUsers as any).saved = true;\n apiUsers.forEach((user) => this.saveApiUser(user, override));\n }\n\n public modifyUsernamesCache(peer: Parameters[0], save: boolean) {\n const usernames = getPeerActiveUsernames(peer);\n if(!usernames.length) {\n return;\n }\n\n const cleanedUsernames = usernames.map((username) => cleanUsername(username));\n if(save) {\n cleanedUsernames.forEach((searchUsername) => {\n this.usernames[searchUsername] = peer.id.toPeerId(peer._ !== 'user');\n });\n } else {\n cleanedUsernames.forEach((searchUsername) => {\n delete this.usernames[searchUsername];\n });\n }\n }\n\n public setUsernameToCache(peer: Parameters[0], oldPeer?: typeof peer) {\n if(\n !oldPeer ||\n (oldPeer as MTUser.user).username !== (peer as MTUser.user).username ||\n !deepEqual((oldPeer as MTUser.user).usernames, (peer as MTUser.user).usernames)\n ) {\n this.modifyUsernamesCache(oldPeer, false);\n this.modifyUsernamesCache(peer, true);\n\n return true;\n }\n\n return false;\n }\n\n public saveApiUser(user: MTUser, override?: boolean) {\n if(!user || user._ === 'userEmpty') return;\n\n const userId = user.id;\n const oldUser = this.users[userId];\n\n // ! commented block can affect performance !\n // if(oldUser && !override) {\n // console.log('saveApiUser same');\n // return;\n // }\n\n user.pFlags ??= {};\n\n if(user.pFlags.min && oldUser !== undefined) {\n return;\n }\n\n // * exclude from state\n // defineNotNumerableProperties(user, ['initials', 'num', 'rFirstName', 'rFullName', 'rPhone', 'sortName', 'sortStatus']);\n\n const changedUsername = this.setUsernameToCache(user, oldUser);\n\n if(!oldUser ||\n oldUser.sortName === undefined ||\n oldUser.first_name !== user.first_name ||\n oldUser.last_name !== user.last_name) {\n const fullName = user.first_name + (user.last_name ? ' ' + user.last_name : '');\n\n user.sortName = user.pFlags.deleted ? '' : cleanSearchText(fullName, false);\n } else {\n user.sortName = oldUser.sortName;\n }\n\n if(user.status) {\n if((user.status as UserStatus.userStatusOnline).expires) {\n (user.status as UserStatus.userStatusOnline).expires -= this.timeManager.getServerTimeOffset();\n }\n\n if((user.status as UserStatus.userStatusOffline).was_online) {\n (user.status as UserStatus.userStatusOffline).was_online -= this.timeManager.getServerTimeOffset();\n }\n }\n\n if((user as User).photo?._ === 'userProfilePhotoEmpty') {\n delete (user as User).photo;\n }\n\n // user.sortStatus = user.pFlags.bot ? -1 : this.getUserStatusForSort(user.status);\n\n // if(!user.username && user.usernames) {\n // user.username = user.usernames.find((username) => username.pFlags.active).username;\n // }\n\n if(oldUser === undefined) {\n this.users[userId] = user;\n } else {\n const changedTitle = user.first_name !== oldUser.first_name ||\n user.last_name !== oldUser.last_name ||\n changedUsername;\n\n const oldPhotoId = (oldUser.photo as UserProfilePhoto.userProfilePhoto)?.photo_id;\n const newPhotoId = (user.photo as UserProfilePhoto.userProfilePhoto)?.photo_id;\n const changedPhoto = oldPhotoId !== newPhotoId;\n\n const changedAnyBadge = oldUser.pFlags.premium !== user.pFlags.premium ||\n oldUser.pFlags.verified !== user.pFlags.verified ||\n oldUser.pFlags.scam !== user.pFlags.scam ||\n oldUser.pFlags.fake !== user.pFlags.fake;\n\n /* if(user.pFlags.bot && user.bot_info_version !== oldUser.bot_info_version) {\n\n } */\n\n const wasContact = !!oldUser.pFlags.contact;\n const newContact = !!user.pFlags.contact;\n\n safeReplaceObject(oldUser, user);\n this.rootScope.dispatchEvent('user_update', userId);\n\n if(wasContact !== newContact) {\n this.onContactUpdated(userId, newContact, wasContact);\n }\n\n if(changedPhoto) {\n this.rootScope.dispatchEvent('avatar_update', {peerId: user.id.toPeerId()});\n }\n\n if(changedTitle || changedAnyBadge) {\n this.rootScope.dispatchEvent('peer_title_edit', {peerId: user.id.toPeerId()});\n }\n }\n\n this.checkPremium(user, oldUser);\n this.setUserToStateIfNeeded(user);\n }\n\n private checkPremium(user: User, oldUser: User) {\n if(user.pFlags.self) {\n const isPremium = !!user.pFlags.premium;\n if(this.rootScope.premium !== isPremium) {\n this.rootScope.dispatchEvent('premium_toggle_private', {isNew: !oldUser, isPremium});\n }\n }\n }\n\n private setUserToStateIfNeeded(user: User) {\n if(this.peersStorage.isPeerNeeded(user.id.toPeerId())) {\n this.storage.set({\n [user.id]: user\n });\n }\n }\n\n public isUserOnlineVisible(id: UserId) {\n return this.getUserStatusForSort(id) > 3;\n }\n\n public getUserStatusForSort(status: User['status'] | UserId) {\n if(typeof(status) !== 'object') {\n const user = this.getUser(status);\n status = user?.status;\n }\n\n if(status) {\n const expires = status._ === 'userStatusOnline' ? status.expires : (status._ === 'userStatusOffline' ? status.was_online : 0);\n if(expires) {\n return expires;\n }\n\n /* const timeNow = tsNow(true);\n switch(status._) {\n case 'userStatusRecently':\n return timeNow - 86400 * 3;\n case 'userStatusLastWeek':\n return timeNow - 86400 * 7;\n case 'userStatusLastMonth':\n return timeNow - 86400 * 30;\n } */\n switch(status._) {\n case 'userStatusRecently':\n return 3;\n case 'userStatusLastWeek':\n return 2;\n case 'userStatusLastMonth':\n return 1;\n }\n }\n\n return 0;\n }\n\n public getUser(id: User | UserId) {\n if(isObject(id)) {\n return id;\n }\n\n return this.users[id];\n }\n\n public getUserStatus(id: UserId) {\n return this.isRegularUser(id) && !this.users[id].pFlags.self && this.users[id].status;\n }\n\n public async getUserPhone(id: UserId) {\n const user = this.getUser(id);\n if(!user?.phone) {\n return;\n }\n\n const appConfig = await this.apiManager.getAppConfig();\n return {\n phone: user.phone,\n isAnonymous: appConfig.fragment_prefixes.some((prefix) => user.phone.startsWith(prefix))\n };\n }\n\n public getSelf() {\n return this.getUser(this.userId);\n }\n\n public isBot(id: UserId) {\n return this.users[id] && !!this.users[id].pFlags.bot;\n }\n\n public isAttachMenuBot(id: UserId) {\n return this.isBot(id) && !!this.users[id].pFlags.bot_attach_menu;\n }\n\n public isContact(id: UserId) {\n return this.contactsList.has(id) || !!(this.users[id] && this.users[id].pFlags.contact);\n }\n\n public isRegularUser(id: UserId) {\n const user = this.users[id];\n return user && !this.isBot(id) && !user.pFlags.deleted && !user.pFlags.support;\n }\n\n public isNonContactUser(id: UserId) {\n return this.isRegularUser(id) && !this.isContact(id) && id !== this.userId;\n }\n\n public hasUser(id: UserId, allowMin?: boolean) {\n const user = this.users[id];\n return isObject(user) && (allowMin || !user.pFlags.min);\n }\n\n public getUserString(id: UserId) {\n const user = this.getUser(id);\n return 'u' + id + (user.access_hash ? '_' + user.access_hash : '');\n }\n\n public getUserInput(id: UserId): InputUser {\n const user = this.getUser(id);\n if(user.pFlags && user.pFlags.self) {\n return {_: 'inputUserSelf'};\n }\n\n return {\n _: 'inputUser',\n user_id: id,\n access_hash: user.access_hash\n };\n }\n\n public getUserInputPeer(id: UserId): InputPeer.inputPeerSelf | InputPeer.inputPeerUser {\n const user = this.getUser(id);\n // ! do not use it, there are places that don't support it. need explicit peer id\n // if(user.pFlags?.self) {\n // return {_: 'inputPeerSelf'};\n // }\n\n return {\n _: 'inputPeerUser',\n user_id: id,\n access_hash: user.access_hash\n };\n }\n\n public getContactMediaInput(id: UserId): InputMedia.inputMediaContact {\n const user = this.getUser(id);\n\n return {\n _: 'inputMediaContact',\n first_name: user.first_name,\n last_name: user.last_name,\n phone_number: user.phone,\n vcard: '',\n user_id: id\n };\n }\n\n private updateUsersStatuses = () => {\n const timestampNow = tsNow(true);\n for(const i in this.users) {\n const user = this.users[i];\n this.updateUserStatus(user, timestampNow);\n }\n };\n\n private updateUserStatus(user: MTUser.user, timestampNow = tsNow(true)) {\n if(user.status &&\n user.status._ === 'userStatusOnline' &&\n user.status.expires < timestampNow) {\n user.status = {_: 'userStatusOffline', was_online: user.status.expires};\n this.rootScope.dispatchEvent('user_update', user.id);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public forceUserOnline(id: UserId, eventTimestamp?: number) {\n if(this.isBot(id)) {\n return;\n }\n\n const timestamp = tsNow(true);\n const onlineTimeFor = 60;\n if(eventTimestamp) {\n if((timestamp - eventTimestamp) >= onlineTimeFor) {\n return;\n }\n } else if(this.apiUpdatesManager.updatesState.syncLoading) {\n return;\n }\n\n const user = this.getUser(id);\n if(user?.status &&\n user.status._ !== 'userStatusOnline' &&\n user.status._ !== 'userStatusEmpty' &&\n !user.pFlags.support &&\n !user.pFlags.deleted) {\n user.status = {\n _: 'userStatusOnline',\n expires: timestamp + onlineTimeFor\n };\n\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', id);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public importContact(first_name: string, last_name: string, phone: string) {\n return this.importContacts([{\n first_name,\n last_name,\n phones: [phone]\n }]).then((userIds) => {\n if(!userIds.length) {\n const error = new Error();\n (error as any).type = 'NO_USER';\n throw error;\n }\n\n return userIds[0];\n });\n }\n\n public importContacts(contacts: {phones: string[], first_name: string, last_name: string}[]) {\n const inputContacts: InputContact[] = [];\n\n for(let i = 0; i < contacts.length; ++i) {\n for(let j = 0; j < contacts[i].phones.length; ++j) {\n inputContacts.push({\n _: 'inputPhoneContact',\n client_id: (i << 16 | j).toString(10),\n phone: contacts[i].phones[j],\n first_name: contacts[i].first_name,\n last_name: contacts[i].last_name\n });\n }\n }\n\n return this.apiManager.invokeApi('contacts.importContacts', {\n contacts: inputContacts\n }).then((importedContactsResult) => {\n this.saveApiUsers(importedContactsResult.users);\n\n const userIds = importedContactsResult.imported.map((importedContact) => {\n this.onContactUpdated(importedContact.user_id, true);\n return importedContact.user_id;\n });\n\n return userIds;\n });\n }\n\n public getTopPeers(type: TopPeerType) {\n if(this.getTopPeersPromises[type]) return this.getTopPeersPromises[type];\n\n return this.getTopPeersPromises[type] = this.appStateManager.getState().then((state) => {\n const cached = state.topPeersCache[type];\n if(cached && (cached.cachedTime + 86400e3) > Date.now() && cached.peers) {\n return cached.peers;\n }\n\n return this.apiManager.invokeApi('contacts.getTopPeers', {\n [type]: true,\n offset: 0,\n limit: 15,\n hash: '0'\n }).then((result) => {\n let topPeers: MyTopPeer[] = [];\n if(result._ === 'contacts.topPeers') {\n // console.log(result);\n this.saveApiUsers(result.users);\n this.appChatsManager.saveApiChats(result.chats);\n\n if(result.categories.length) {\n topPeers = result.categories[0].peers.map((topPeer) => {\n const peerId = getPeerId(topPeer.peer);\n this.peersStorage.requestPeer(peerId, 'topPeer');\n return {id: peerId, rating: topPeer.rating};\n });\n }\n }\n\n state.topPeersCache[type] = {\n peers: topPeers,\n cachedTime: Date.now()\n };\n this.appStateManager.pushToState('topPeersCache', state.topPeersCache);\n\n return topPeers;\n });\n });\n }\n\n public getBlocked(offset = 0, limit = 0) {\n return this.apiManager.invokeApiSingle('contacts.getBlocked', {offset, limit}).then((contactsBlocked) => {\n this.saveApiUsers(contactsBlocked.users);\n this.appChatsManager.saveApiChats(contactsBlocked.chats);\n const count = contactsBlocked._ === 'contacts.blocked' ? contactsBlocked.users.length + contactsBlocked.chats.length : contactsBlocked.count;\n\n const peerIds: PeerId[] = contactsBlocked.users.map((u) => u.id.toPeerId()).concat(contactsBlocked.chats.map((c) => c.id.toPeerId(true)));\n\n return {count, peerIds};\n });\n }\n\n public getLocated(\n lat: number,\n long: number,\n accuracy_radius: number,\n background: boolean = false,\n self_expires: number = 0\n ) {\n const geo_point: InputGeoPoint = {\n _: 'inputGeoPoint',\n lat,\n long,\n accuracy_radius\n };\n\n return this.apiManager.invokeApi('contacts.getLocated', {\n geo_point,\n background\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates);\n return updates;\n });\n }\n\n /* public searchContacts(query: string, limit = 20) {\n return Promise.all([\n this.getContacts(query),\n apiManager.invokeApi('contacts.search', {\n q: query,\n limit\n })\n ]).then((results) => {\n const [myContacts, peers] = results;\n\n this.saveApiUsers(peers.users);\n appChatsManager.saveApiChats(peers.chats);\n\n // * contacts.search returns duplicates in my_results\n const myResults = new Set(myContacts.concat(peers.my_results.map((p) => appPeersManager.getPeerID(p))));\n\n const out = {\n my_results: [...myResults].slice(0, limit),\n results: peers.results.map((p) => appPeersManager.getPeerID(p))\n };\n\n return out;\n });\n } */\n public searchContacts(query: string, limit = 20) {\n // handle 't.me/username' as 'username'\n const entities = parseEntities(query);\n if(entities.length && entities[0].length === query.trim().length && entities[0]._ === 'messageEntityUrl') {\n try {\n const url = new URL(wrapUrl(query).url);\n const path = url.pathname.slice(1);\n if(path) {\n query = path;\n }\n } catch(err) {}\n }\n\n return this.apiManager.invokeApiCacheable('contacts.search', {\n q: query,\n limit\n }, {cacheSeconds: 60}).then((peers) => {\n this.saveApiUsers(peers.users);\n this.appChatsManager.saveApiChats(peers.chats);\n\n const out = {\n my_results: filterUnique(peers.my_results.map((p) => getPeerId(p))), // ! contacts.search returns duplicates in my_results\n results: peers.results.map((p) => getPeerId(p))\n };\n\n return out;\n });\n }\n\n private onContactUpdated(userId: UserId, isContact: boolean, curIsContact = this.isContact(userId)) {\n if(isContact !== curIsContact) {\n if(isContact) {\n this.pushContact(userId);\n } else {\n this.popContact(userId);\n }\n\n this.onContactsModified();\n\n this.rootScope.dispatchEvent('contacts_update', userId);\n }\n }\n\n public updateUsername(username: string) {\n return this.apiManager.invokeApi('account.updateUsername', {\n username\n }).then((user) => {\n this.saveApiUser(user);\n });\n }\n\n public setUserStatus(userId: UserId, offline: boolean) {\n if(this.isBot(userId)) {\n return;\n }\n\n const user = this.users[userId];\n if(user) {\n const status: UserStatus = offline ? {\n _: 'userStatusOffline',\n was_online: tsNow(true)\n } : {\n _: 'userStatusOnline',\n expires: tsNow(true) + 50\n };\n\n user.status = status;\n // user.sortStatus = this.getUserStatusForSort(user.status);\n this.rootScope.dispatchEvent('user_update', userId);\n\n this.setUserToStateIfNeeded(user);\n }\n }\n\n public updateMyOnlineStatus(offline: boolean) {\n this.setUserStatus(this.getSelf().id, offline);\n return this.apiManager.invokeApiSingle('account.updateStatus', {offline});\n }\n\n public addContact(userId: UserId, first_name: string, last_name: string, phone: string, addPhonePrivacyException?: boolean) {\n /* if(!userId) {\n return this.importContacts([{\n first_name,\n last_name,\n phones: [phone]\n }]);\n } */\n\n return this.apiManager.invokeApi('contacts.addContact', {\n id: this.getUserInput(userId),\n first_name,\n last_name,\n phone,\n add_phone_privacy_exception: addPhonePrivacyException\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates, {override: true});\n\n this.onContactUpdated(userId, true);\n });\n }\n\n public deleteContacts(userIds: UserId[]) {\n return this.apiManager.invokeApi('contacts.deleteContacts', {\n id: userIds.map((userId) => this.getUserInput(userId))\n }).then((updates) => {\n this.apiUpdatesManager.processUpdateMessage(updates, {override: true});\n\n userIds.forEach((userId) => {\n this.onContactUpdated(userId, false);\n });\n });\n }\n\n public checkUsername(username: string) {\n return this.apiManager.invokeApi('account.checkUsername', {username});\n }\n\n public toggleUsername(username: string, active: boolean) {\n return this.apiManager.invokeApi('account.toggleUsername', {username, active});\n }\n\n public reorderUsernames(usernames: string[]) {\n return this.apiManager.invokeApi('account.reorderUsernames', {order: usernames});\n }\n\n public canSendToUser(userId: UserId) {\n return canSendToUser(this.getUser(userId));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nexport default function cleanUsername(username: string) {\n return username && username.toLowerCase() || '';\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {ReferenceContext} from '../mtproto/referenceDatabase';\nimport {WebPage} from '../../layer';\nimport safeReplaceObject from '../../helpers/object/safeReplaceObject';\nimport {AppManager} from './manager';\n\nconst photoTypeSet = new Set(['photo', 'video', 'gif', 'document']);\n\ntype WebPageMessageKey = `${PeerId}_${number}`;\n\nexport class AppWebPagesManager extends AppManager {\n private webpages: {\n [webPageId: string]: WebPage\n } = {};\n private pendingWebPages: {\n [webPageId: string]: Set\n } = {};\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateWebPage: (update) => {\n this.saveWebPage(update.webpage);\n }\n });\n }\n\n public saveWebPage(apiWebPage: WebPage, messageKey?: WebPageMessageKey, mediaContext?: ReferenceContext) {\n if(apiWebPage._ === 'webPageNotModified' || apiWebPage._ === 'webPageEmpty') return;\n const {id} = apiWebPage;\n\n const oldWebPage = this.webpages[id];\n const isUpdated = oldWebPage &&\n oldWebPage._ === apiWebPage._ &&\n (oldWebPage as WebPage.webPage).hash === (oldWebPage as WebPage.webPage).hash;\n\n if(apiWebPage._ === 'webPage') {\n if(apiWebPage.photo?._ === 'photo') {\n apiWebPage.photo = this.appPhotosManager.savePhoto(apiWebPage.photo, mediaContext);\n } else {\n delete apiWebPage.photo;\n }\n\n if(apiWebPage.document?._ === 'document') {\n apiWebPage.document = this.appDocsManager.saveDoc(apiWebPage.document, mediaContext);\n } else {\n if(apiWebPage.type === 'document') {\n delete apiWebPage.type;\n }\n\n delete apiWebPage.document;\n }\n\n const siteName = apiWebPage.site_name;\n const shortTitle = apiWebPage.title || apiWebPage.author || siteName || '';\n if(siteName && shortTitle === siteName) {\n delete apiWebPage.site_name;\n }\n\n // delete apiWebPage.description\n\n if(!photoTypeSet.has(apiWebPage.type) &&\n !apiWebPage.description &&\n apiWebPage.photo) {\n apiWebPage.type = 'photo';\n }\n }\n\n let pendingSet = this.pendingWebPages[id];\n if(messageKey) {\n if(!pendingSet) pendingSet = this.pendingWebPages[id] = new Set();\n pendingSet.add(messageKey);\n }\n\n if(oldWebPage === undefined) {\n this.webpages[id] = apiWebPage;\n } else {\n safeReplaceObject(oldWebPage, apiWebPage);\n }\n\n if(!messageKey && pendingSet !== undefined && isUpdated) {\n const msgs: {peerId: PeerId, mid: number, isScheduled: boolean}[] = [];\n pendingSet.forEach((value) => {\n const [peerId, mid, isScheduled] = value.split('_');\n msgs.push({\n peerId: peerId.toPeerId(),\n mid: +mid,\n isScheduled: !!isScheduled\n });\n });\n\n this.rootScope.dispatchEvent('webpage_updated', {\n id,\n msgs\n });\n }\n\n return apiWebPage;\n }\n\n public getMessageKeyForPendingWebPage(peerId: PeerId, mid: number, isScheduled?: boolean): WebPageMessageKey {\n return peerId + '_' + mid + (isScheduled ? '_s' : '') as any;\n }\n\n public deleteWebPageFromPending(webPage: WebPage, messageKey: WebPageMessageKey) {\n const id = (webPage as WebPage.webPage).id;\n if(!id) return;\n\n const set = this.pendingWebPages[id];\n if(set && set.has(messageKey)) {\n set.delete(messageKey);\n\n if(!set.size) {\n delete this.pendingWebPages[id];\n }\n }\n }\n\n public getCachedWebPage(id: WebPage.webPage['id']) {\n return this.webpages[id];\n }\n\n public getWebPage(url: string) {\n return this.apiManager.invokeApiHashable({\n method: 'messages.getWebPage',\n processResult: (webPage) => {\n return this.saveWebPage(webPage);\n },\n params: {\n url\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from './readBlobAs';\n\nexport default function readBlobAsArrayBuffer(blob: Blob) {\n return readBlobAs(blob, 'readAsArrayBuffer');\n}\n","export default function fileNameRFC(fileName: string) {\n // Make filename RFC5987 compatible\n return encodeURIComponent(fileName).replace(/['()]/g, escape).replace(/\\*/g, '%2A');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {getServiceMessagePort} from '../mtproto/mtproto.worker';\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport StreamWriter from './streamWriter';\n\nexport default class DownloadWriter implements StreamWriter {\n constructor(\n private serviceMessagePort: ServiceMessagePort,\n private downloadId: string\n ) {\n this.serviceMessagePort = getServiceMessagePort();\n }\n\n public async write(part: Uint8Array, offset?: number) {\n return this.serviceMessagePort.invoke('downloadChunk', {\n id: this.downloadId,\n chunk: part\n });\n }\n\n public finalize(saveToStorage?: boolean): Promise {\n return this.serviceMessagePort.invoke('downloadFinalize', this.downloadId).then(() => undefined);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise from '../../helpers/cancellablePromise';\nimport makeError from '../../helpers/makeError';\nimport fileNameRFC from '../../helpers/string/fileNameRFC';\nimport {getServiceMessagePort} from '../mtproto/mtproto.worker';\nimport DownloadWriter from './downloadWriter';\nimport FileStorage from './fileStorage';\n\nexport default class DownloadStorage implements FileStorage {\n public getFile(fileName: string): Promise {\n return Promise.reject(makeError('NO_ENTRY_FOUND'));\n }\n\n public prepareWriting({fileName, downloadId, size}: {\n fileName: string,\n downloadId: string,\n size: number\n }) {\n const headers = {\n 'Content-Type': 'application/octet-stream; charset=utf-8',\n 'Content-Disposition': 'attachment; filename*=UTF-8\\'\\'' + fileNameRFC(fileName),\n ...(size ? {'Content-Length': size} : {})\n };\n\n const serviceMessagePort = getServiceMessagePort();\n const promise = serviceMessagePort.invoke('download', {\n headers,\n id: downloadId\n });\n\n const deferred = deferredPromise();\n deferred.cancel = () => {\n deferred.reject(makeError('DOWNLOAD_CANCELED'));\n };\n\n deferred.catch(() => {\n getServiceMessagePort().invoke('downloadCancel', downloadId);\n });\n\n promise.then(deferred.resolve, deferred.reject);\n\n return {\n deferred,\n getWriter: () => {\n return new DownloadWriter(serviceMessagePort, downloadId);\n }\n };\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ReferenceBytes} from './referenceDatabase';\nimport Modes from '../../config/modes';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport {randomLong} from '../../helpers/random';\nimport {Document, InputFile, InputFileLocation, InputWebFileLocation, Photo, PhotoSize, UploadFile, UploadWebFile, VideoSize, WebDocument} from '../../layer';\nimport {DcId} from '../../types';\nimport CacheStorageController from '../files/cacheStorage';\nimport {logger, LogTypes} from '../logger';\nimport assumeType from '../../helpers/assumeType';\nimport noop from '../../helpers/noop';\nimport readBlobAsArrayBuffer from '../../helpers/blob/readBlobAsArrayBuffer';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport findAndSplice from '../../helpers/array/findAndSplice';\nimport fixFirefoxSvg from '../../helpers/fixFirefoxSvg';\nimport {AppManager} from '../appManagers/manager';\nimport {getEnvironment} from '../../environment/utils';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport getFileNameForUpload from '../../helpers/getFileNameForUpload';\nimport type {Progress} from '../appManagers/appDownloadManager';\nimport getDownloadMediaDetails from '../appManagers/utils/download/getDownloadMediaDetails';\n// import networkStats from './networkStats';\nimport getDownloadFileNameFromOptions from '../appManagers/utils/download/getDownloadFileNameFromOptions';\nimport StreamWriter from '../files/streamWriter';\nimport FileStorage from '../files/fileStorage';\nimport {MAX_FILE_SAVE_SIZE} from './mtproto_config';\nimport throttle from '../../helpers/schedulers/throttle';\nimport makeError from '../../helpers/makeError';\nimport readBlobAsUint8Array from '../../helpers/blob/readBlobAsUint8Array';\nimport DownloadStorage from '../files/downloadStorage';\nimport copy from '../../helpers/object/copy';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {EXTENSION_MIME_TYPE_MAP, MIME_TYPE_EXTENSION_MAP} from '../../environment/mimeTypeMap';\nimport {getServiceMessagePort} from './mtproto.worker';\n\ntype Delayed = {\n offset: number,\n writePromise: CancellablePromise,\n writeDeferred: CancellablePromise\n};\n\nexport type DownloadOptions = {\n dcId: DcId,\n location: InputFileLocation | InputWebFileLocation,\n size?: number,\n fileName?: string,\n mimeType?: MTMimeType,\n limitPart?: number,\n queueId?: number,\n onlyCache?: boolean,\n downloadId?: string\n // getFileMethod: Parameters[1]\n};\n\nexport type DownloadMediaOptions = {\n media: Photo.photo | Document.document | WebDocument,\n thumb?: PhotoSize | Extract,\n queueId?: number,\n onlyCache?: boolean,\n downloadId?: string\n};\n\ntype DownloadPromise = CancellablePromise;\n\nexport type MyUploadFile = UploadFile.uploadFile | UploadWebFile.uploadWebFile;\n\n// export interface RefreshReferenceTask extends WorkerTaskVoidTemplate {\n// type: 'refreshReference',\n// payload: ReferenceBytes,\n// };\n\n// export interface RefreshReferenceTaskResponse extends WorkerTaskVoidTemplate {\n// type: 'refreshReference',\n// payload: ReferenceBytes,\n// originalPayload: ReferenceBytes\n// };\n\nconst MAX_DOWNLOAD_FILE_PART_SIZE = 1 * 1024 * 1024;\nconst MAX_UPLOAD_FILE_PART_SIZE = 512 * 1024;\nconst MIN_PART_SIZE = 128 * 1024;\nconst AVG_PART_SIZE = 512 * 1024;\n\nconst REGULAR_DOWNLOAD_DELTA = (9 * 512 * 1024) / MIN_PART_SIZE;\n// const PREMIUM_DOWNLOAD_DELTA = REGULAR_DOWNLOAD_DELTA * 2;\nconst PREMIUM_DOWNLOAD_DELTA = (56 * 512 * 1024) / MIN_PART_SIZE;\n\nconst IGNORE_ERRORS: Set = new Set([\n 'DOWNLOAD_CANCELED',\n 'UPLOAD_CANCELED',\n 'UNKNOWN',\n 'NO_NEW_CONTEXT'\n]);\n\nexport class ApiFileManager extends AppManager {\n private cacheStorage = new CacheStorageController('cachedFiles');\n private downloadStorage = new DownloadStorage();\n\n private downloadPromises: {\n [fileName: string]: DownloadPromise\n } = {};\n\n // private downloadToDiscPromises: {\n // [fileName: string]: DownloadPromise\n // } = {};\n\n private uploadPromises: {\n [fileName: string]: CancellablePromise\n } = {};\n\n private downloadPulls: {\n [dcId: string]: Array<{\n id: number,\n queueId: number,\n cb: () => Promise,\n deferred: {\n resolve: (...args: any[]) => void,\n reject: (...args: any[]) => void\n },\n activeDelta: number\n }>\n } = {};\n private downloadActives: {[dcId: string]: number} = {};\n\n public refreshReferencePromises: {\n [referenceHex: string]: {\n deferred: CancellablePromise,\n timeout?: number\n }\n } = {};\n\n private log: ReturnType = logger('AFM', LogTypes.Error | LogTypes.Log);\n private tempId = 0;\n private queueId = 0;\n private debug = Modes.debug;\n\n private maxUploadParts = 4000;\n private maxDownloadParts = 8000;\n private webFileDcId: DcId;\n\n protected after() {\n setInterval(() => { // clear old promises\n for(const hex in this.refreshReferencePromises) {\n const {deferred} = this.refreshReferencePromises[hex];\n if(deferred.isFulfilled || deferred.isRejected) {\n delete this.refreshReferencePromises[hex];\n }\n }\n }, 1800e3);\n\n this.rootScope.addEventListener('config', (config) => {\n this.webFileDcId = config.webfile_dc_id;\n });\n\n this.rootScope.addEventListener('app_config', (appConfig) => {\n this.maxUploadParts = this.rootScope.premium ? appConfig.upload_max_fileparts_premium : appConfig.upload_max_fileparts_default;\n this.maxDownloadParts = appConfig.upload_max_fileparts_premium;\n });\n }\n\n private downloadRequest(dcId: 'upload', id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\n private downloadRequest(dcId: number, id: number, cb: () => Promise, activeDelta: number, queueId?: number): Promise;\n private downloadRequest(dcId: number | string, id: number, cb: () => Promise, activeDelta: number, queueId: number = 0) {\n if(this.downloadPulls[dcId] === undefined) {\n this.downloadPulls[dcId] = [];\n this.downloadActives[dcId] = 0;\n }\n\n const downloadPull = this.downloadPulls[dcId];\n\n const promise = new Promise((resolve, reject) => {\n downloadPull.push({id, queueId, cb, deferred: {resolve, reject}, activeDelta});\n });\n\n setTimeout(() => {\n this.downloadCheck(dcId);\n }, 0);\n\n return promise;\n }\n\n private downloadCheck(dcId: string | number) {\n const downloadPull = this.downloadPulls[dcId];\n const downloadLimit = /* dcId === 'upload' ? 24 : */(this.rootScope.premium ? PREMIUM_DOWNLOAD_DELTA : REGULAR_DOWNLOAD_DELTA);\n // const downloadLimit = Infinity;\n\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull?.length) {\n return false;\n }\n\n // const data = downloadPull.shift();\n const data = findAndSplice(downloadPull, (d) => d.queueId === 0) || findAndSplice(downloadPull, (d) => d.queueId === this.queueId) || downloadPull.shift();\n const activeDelta = data.activeDelta || 1;\n\n this.downloadActives[dcId] += activeDelta;\n\n const promise = data.cb();\n // const networkPromise = networkStats.waitForChunk(dcId as DcId, activeDelta * MIN_PART_SIZE);\n /* Promise.race([\n promise\n // networkPromise\n ]) */promise.then(() => {\n this.downloadActives[dcId] -= activeDelta;\n this.downloadCheck(dcId);\n\n // networkPromise.resolve();\n }, (error: ApiError) => {\n if(!error?.type || !IGNORE_ERRORS.has(error.type)) {\n this.log.error('downloadCheck error:', error);\n }\n\n this.downloadActives[dcId] -= activeDelta;\n this.downloadCheck(dcId);\n\n // networkPromise.reject(error);\n }).finally(() => {\n promise.then(data.deferred.resolve, data.deferred.reject);\n });\n }\n\n public setQueueId(queueId: number) {\n // this.log.error('setQueueId', queueId);\n this.queueId = queueId;\n }\n\n private getFileStorage() {\n return this.cacheStorage;\n }\n\n public cancelDownload(fileName: string) {\n const promises = [this.downloadPromises[fileName], this.uploadPromises[fileName]].filter(Boolean);\n let canceled = false;\n for(let i = 0, length = promises.length; i < length; ++i) {\n const promise = promises[i];\n if(promise && !promise.isRejected && !promise.isFulfilled) {\n promise.cancel();\n canceled = true;\n }\n }\n\n return canceled;\n }\n\n public requestWebFilePart(\n dcId: DcId,\n location: InputWebFileLocation,\n offset: number,\n limit: number,\n id = 0,\n queueId = 0,\n checkCancel?: () => void\n ) {\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\n checkCancel?.();\n\n if('url' in location) {\n const url = location.url;\n if(this.isLocalWebFile(url)) {\n return fetch(url)\n .then((response) => response.arrayBuffer())\n .then((arrayBuffer) => {\n const extension = url.split('.').pop() as MTFileExtension;\n const mimeType = EXTENSION_MIME_TYPE_MAP[extension] || 'application/octet-stream';\n return {\n _: 'upload.webFile',\n size: arrayBuffer.byteLength,\n mime_type: mimeType,\n file_type: {_: 'storage.fileUnknown'},\n mtime: 0,\n bytes: new Uint8Array(arrayBuffer)\n };\n });\n }\n }\n\n return this.apiManager.invokeApi('upload.getWebFile', {\n location,\n offset,\n limit\n }, {\n dcId,\n fileDownload: true\n });\n }, this.getDelta(limit), queueId);\n }\n\n public requestFilePart(\n dcId: DcId,\n location: InputFileLocation,\n offset: number,\n limit: number,\n id = 0,\n queueId = 0,\n checkCancel?: () => void\n ) {\n return this.downloadRequest(dcId, id, async() => { // do not remove async, because checkCancel will throw an error\n checkCancel?.();\n\n const invoke = async(): Promise => {\n checkCancel?.(); // do not remove async, because checkCancel will throw an error\n\n // * IMPORTANT: reference can be changed in previous request\n const reference = (location as InputFileLocation.inputDocumentFileLocation).file_reference?.slice();\n\n const promise = // pause(offset > (100 * 1024 * 1024) ? 10000000 : 0).then(() =>\n this.apiManager.invokeApi('upload.getFile', {\n location,\n offset,\n limit\n }, {\n dcId,\n fileDownload: true\n }) as Promise/* ) */;\n\n return promise.catch((err: ApiError) => {\n checkCancel?.();\n\n if(err.type === 'FILE_REFERENCE_EXPIRED') {\n return this.refreshReference(location as InputFileLocation.inputDocumentFileLocation, reference).then(invoke);\n }\n\n throw err;\n });\n };\n\n assumeType(location);\n const reference = location.file_reference;\n if(reference && !location.checkedReference) { // check stream's location because it's new every call\n location.checkedReference = true;\n const hex = bytesToHex(reference);\n if(this.refreshReferencePromises[hex]) {\n return this.refreshReference(location, reference).then(invoke);\n }\n }\n\n return invoke();\n }, this.getDelta(limit), queueId);\n }\n\n /* private convertBlobToBytes(blob: Blob) {\n return blob.arrayBuffer().then((buffer) => new Uint8Array(buffer));\n } */\n\n private getDelta(bytes: number) {\n return bytes / MIN_PART_SIZE;\n }\n\n private getLimitPart(size: number, isUpload: boolean): number {\n if(!size) { // * sometimes size can be 0 (e.g. avatars, webDocuments)\n return AVG_PART_SIZE;\n }\n\n // return 1 * 1024 * 1024;\n\n let bytes = MIN_PART_SIZE;\n\n const maxParts = isUpload ? this.maxUploadParts : this.maxDownloadParts;\n const maxPartSize = isUpload ? MAX_UPLOAD_FILE_PART_SIZE : MAX_DOWNLOAD_FILE_PART_SIZE;\n // usually it will stick to 512Kb size if the file is too big\n while((size / bytes) > maxParts && bytes < maxPartSize) {\n bytes *= 2;\n }\n /* if(size < 1e6 || !size) bytes = 512;\n else if(size < 3e6) bytes = 256;\n else bytes = 128; */\n\n return bytes;\n }\n\n private uncompressTGS = (bytes: Uint8Array, fileName: string) => {\n // this.log('uncompressTGS', bytes, bytes.slice().buffer);\n // slice ะฝัƒะถะตะฝ ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ ะฒ uint8array - 5053 length, ะฒ arraybuffer - 5084\n return this.cryptoWorker.invokeCrypto('gzipUncompress', bytes.slice().buffer, false) as Promise;\n };\n\n private uncompressTGV = (bytes: Uint8Array, fileName: string) => {\n // this.log('uncompressTGS', bytes, bytes.slice().buffer);\n // slice ะฝัƒะถะตะฝ ะฟะพั‚ะพะผัƒ ั‡ั‚ะพ ะฒ uint8array - 5053 length, ะฒ arraybuffer - 5084\n const buffer = bytes.slice().buffer;\n if(getEnvironment().IS_FIREFOX) {\n return this.cryptoWorker.invokeCrypto('gzipUncompress', buffer, true).then((text) => {\n return fixFirefoxSvg(text as string);\n }).then((text) => {\n const textEncoder = new TextEncoder();\n return textEncoder.encode(text);\n });\n }\n\n return this.cryptoWorker.invokeCrypto('gzipUncompress', buffer, false) as Promise;\n };\n\n private convertWebp = (bytes: Uint8Array, fileName: string) => {\n const instance = MTProtoMessagePort.getInstance();\n return instance.invoke('convertWebp', {fileName, bytes});\n };\n\n private convertOpus = (bytes: Uint8Array, fileName: string) => {\n const instance = MTProtoMessagePort.getInstance();\n return instance.invoke('convertOpus', {fileName, bytes});\n };\n\n private refreshReference(\n inputFileLocation: InputFileLocation.inputDocumentFileLocation,\n reference: typeof inputFileLocation['file_reference'],\n hex = bytesToHex(reference)\n ) {\n let r = this.refreshReferencePromises[hex];\n if(!r) {\n const deferred = deferredPromise();\n\n r = this.refreshReferencePromises[hex] = {\n deferred\n\n // ! I don't remember what it was for...\n // timeout: ctx.setTimeout(() => {\n // this.log.error('Didn\\'t refresh the reference:', inputFileLocation);\n // deferred.reject(makeError('REFERENCE_IS_NOT_REFRESHED'));\n // }, 60000)\n };\n\n // deferred.catch(noop).finally(() => {\n // clearTimeout(r.timeout);\n // });\n\n this.referenceDatabase.refreshReference(reference).then((reference) => {\n if(hex === bytesToHex(reference)) {\n deferred.reject(makeError('REFERENCE_IS_NOT_REFRESHED'));\n }\n\n deferred.resolve(reference);\n }, deferred.reject);\n }\n\n // have to replace file_reference in any way, because location can be different everytime if it's stream\n return r.deferred.then((reference) => {\n inputFileLocation.file_reference = reference;\n });\n }\n\n public isDownloading(fileName: string) {\n return !!this.downloadPromises[fileName];\n }\n\n public getDownload(fileName: string) {\n return this.downloadPromises[fileName];\n }\n\n public getUpload(fileName: string) {\n return this.uploadPromises[fileName];\n }\n\n private getConvertMethod(mimeType: MTMimeType) {\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\n if(mimeType === 'application/x-tgwallpattern') {\n process = this.uncompressTGV;\n mimeType = 'image/svg+xml';\n } else if(mimeType === 'image/webp' && !getEnvironment().IS_WEBP_SUPPORTED) {\n process = this.convertWebp;\n mimeType = 'image/png';\n } else if(mimeType === 'application/x-tgsticker') {\n process = this.uncompressTGS;\n mimeType = 'application/json';\n } else if(mimeType === 'audio/ogg' && !getEnvironment().IS_OPUS_SUPPORTED) {\n process = this.convertOpus;\n mimeType = 'audio/wav';\n }\n\n return {mimeType, process};\n }\n\n private allocateDeferredPromises(startOffset: number, size: number, limitPart: number) {\n const delayed: Delayed[] = [];\n let offset = startOffset;\n let writePromise: CancellablePromise = Promise.resolve(),\n writeDeferred: CancellablePromise;\n do {\n writeDeferred = deferredPromise();\n delayed.push({offset, writePromise, writeDeferred});\n writePromise = writeDeferred;\n offset += limitPart;\n } while(offset < size);\n\n return delayed;\n }\n\n private isLocalWebFile(url: string) {\n return url.startsWith('assets/');\n }\n\n public download(options: DownloadOptions): DownloadPromise {\n const size = options.size ?? 0;\n const {dcId, location} = options;\n let {downloadId} = options;\n if(downloadId && !getServiceMessagePort()) {\n this.log.error('download fallback to blob', options);\n downloadId = undefined;\n }\n\n const originalMimeType = options.mimeType;\n const convertMethod = this.getConvertMethod(originalMimeType);\n const {process} = convertMethod;\n options.mimeType = convertMethod.mimeType || 'image/jpeg';\n\n const fileName = getDownloadFileNameFromOptions(options);\n const cacheFileName = downloadId ? getDownloadFileNameFromOptions({...copy(options), downloadId: undefined}) : fileName;\n const cacheStorage: FileStorage = this.getFileStorage();\n const downloadStorage: FileStorage = downloadId ? this.downloadStorage : undefined;\n let deferred: DownloadPromise = downloadId ? undefined : this.downloadPromises[fileName];\n\n this.debug && this.log('downloadFile', fileName, options);\n\n if(deferred) {\n return deferred;\n }\n\n // if(deferred) {\n // if(size) {\n // return deferred.then(async(blob) => {\n // if(blob instanceof Blob && blob.size < size) {\n // this.debug && this.log('downloadFile need to deleteFile, wrong size:', blob.size, size);\n\n // try {\n // await this.delete(fileName);\n // } finally {\n // return this.download(options);\n // }\n // } else {\n // return blob;\n // }\n // });\n // } else {\n // return deferred;\n // }\n // }\n\n const errorHandler = (item: typeof cachePrepared, error: ApiError) => {\n if(item?.error) {\n return;\n }\n\n for(const p of prepared) {\n if(item && item !== p) {\n continue;\n }\n\n p.error = error;\n p.deferred.reject(error);\n }\n };\n\n const isWebFile = location._ === 'inputWebFileLocation';\n const isLocalWebFile = isWebFile && this.isLocalWebFile(location.url);\n const id = this.tempId++;\n const limitPart = isLocalWebFile ?\n size :\n options.limitPart || this.getLimitPart(size, false);\n\n let getFile: FileStorage['getFile'] = cacheStorage.getFile.bind(cacheStorage);\n\n let cachePrepared: ReturnType & {writer?: StreamWriter, error?: ApiError},\n downloadPrepared: typeof cachePrepared;\n const prepared: (typeof cachePrepared)[] = [];\n const possibleSize = size || limitPart;\n\n const getErrorsCount = () => prepared.reduce((acc, item) => acc + +!!item.error, 0);\n\n const attach = (item: typeof cachePrepared, fileName: string) => {\n const {deferred} = item;\n const _errorHandler = errorHandler.bind(null, item);\n\n deferred.cancel = () => deferred.reject(makeError('DOWNLOAD_CANCELED'));\n deferred.catch((error) => {\n _errorHandler(error);\n item.writer?.truncate?.();\n }).finally(() => {\n if(this.downloadPromises[fileName] === deferred) {\n delete this.downloadPromises[fileName];\n }\n\n delete item.writer;\n // indexOfAndSplice(prepared, item);\n });\n\n this.downloadPromises[fileName] = deferred;\n\n prepared.push(item);\n };\n\n if(cacheStorage && (!downloadStorage || possibleSize <= MAX_FILE_SAVE_SIZE)) {\n cachePrepared = cacheStorage.prepareWriting(cacheFileName, possibleSize, options.mimeType)\n attach(cachePrepared, cacheFileName);\n }\n\n if(downloadStorage) {\n let downloadFileName = options.fileName; // it's doc file_name\n if(!downloadFileName) {\n downloadFileName = cacheFileName;\n const ext = MIME_TYPE_EXTENSION_MAP[options.mimeType];\n if(ext) {\n downloadFileName += '.' + ext;\n }\n }\n\n downloadPrepared = downloadStorage.prepareWriting({\n fileName: downloadFileName,\n downloadId,\n size: possibleSize\n });\n attach(downloadPrepared, fileName);\n\n if(cachePrepared) { // cancel cache too\n downloadPrepared.deferred.catch((err) => cachePrepared.deferred.reject(err));\n }\n\n // this.downloadToDiscPromises[cacheFileName] = deferred;\n // deferred.catch(noop).finally(() => {\n // if(this.downloadToDiscPromises[cacheFileName] === deferred) {\n // delete this.downloadToDiscPromises[cacheFileName];\n // }\n // });\n }\n\n deferred = downloadPrepared?.deferred ?? cachePrepared.deferred;\n\n if(downloadStorage && process) { // then have to load file again\n getFile = downloadStorage.getFile.bind(downloadStorage);\n }\n\n getFile(cacheFileName).then(async(blob: Blob) => {\n checkCancel();\n\n // if(blob.size < size) {\n // if(!options.onlyCache) {\n // await this.delete(cacheFileName);\n // checkCancel();\n // }\n\n // throw makeError('NO_ENTRY_FOUND');\n // }\n\n if(downloadPrepared) {\n const writer = downloadPrepared.writer = downloadPrepared.getWriter();\n checkCancel();\n\n const arr = await readBlobAsUint8Array(blob);\n checkCancel();\n await writer.write(arr);\n checkCancel();\n\n downloadPrepared.deferred.resolve(await writer.finalize());\n }\n\n if(cachePrepared) {\n cachePrepared.deferred.resolve(blob);\n }\n }).catch(async(err: ApiError) => {\n if(options.onlyCache) {\n errorHandler(null, err);\n return;\n }\n\n prepared.forEach((p) => {\n p.writer = p.getWriter();\n });\n\n const maxRequests = Infinity;\n\n const requestPart = (isWebFile ? this.requestWebFilePart : this.requestFilePart).bind(this);\n\n if(isWebFile && this.webFileDcId === undefined && !isLocalWebFile) {\n await this.apiManager.getConfig();\n checkCancel();\n }\n\n const delayed = this.allocateDeferredPromises(0, size, limitPart);\n\n const progress: Progress = {done: 0, offset: 0, total: size, fileName};\n const dispatchProgress = () => {\n try {\n checkCancel();\n progress.done = done;\n this.rootScope.dispatchEvent('download_progress', progress);\n } catch(err) {}\n };\n\n const throttledDispatchProgress = throttle(dispatchProgress, 50, true);\n\n let done = 0;\n const superpuper = async() => {\n const {offset, writePromise, writeDeferred} = delayed.shift();\n try {\n checkCancel();\n\n const requestPerf = performance.now();\n const result = await requestPart(dcId, location as any, offset, limitPart, id, options.queueId, checkCancel);\n const requestTime = performance.now() - requestPerf;\n\n const bytes = result.bytes;\n\n if(delayed.length) {\n superpuper();\n }\n\n const byteLength = bytes.byteLength;\n this.debug && this.log('downloadFile requestFilePart result:', fileName, result);\n const isFinal = (offset + limitPart) >= size || !byteLength;\n if(byteLength) {\n done += byteLength;\n\n if(isFinal) {\n dispatchProgress();\n } else {\n throttledDispatchProgress();\n }\n\n const writeQueuePerf = performance.now();\n await writePromise;\n checkCancel();\n const writeQueueTime = performance.now() - writeQueuePerf;\n\n const perf = performance.now();\n await Promise.all(prepared.map(({writer}) => writer?.write(bytes, offset)));\n checkCancel();\n // downloadId && this.log('write time', performance.now() - perf, 'request time', requestTime, 'queue time', writeQueueTime);\n }\n\n if(isFinal) {\n if(!size || done < size) {\n prepared.forEach(({writer}) => writer?.trim?.(done));\n }\n }\n\n if(isFinal && process) {\n const promises = prepared\n .filter(({writer}) => writer?.getParts && writer.replaceParts)\n .map(async({writer}) => {\n const bytes = writer.getParts();\n const processedResult = await process(bytes, cacheFileName);\n writer.replaceParts(processedResult);\n });\n\n await Promise.all(promises);\n checkCancel();\n }\n\n writeDeferred.resolve();\n\n if(isFinal) {\n const saveToStorage = done <= MAX_FILE_SAVE_SIZE;\n prepared.forEach((item) => {\n const {deferred, writer} = item;\n if(deferred.isFulfilled || deferred.isRejected || !writer) {\n return;\n }\n\n const result = writer.finalize(saveToStorage);\n deferred.resolve(result);\n });\n }\n } catch(err) {\n errorHandler(null, err as ApiError);\n }\n };\n\n for(let i = 0, length = Math.min(maxRequests, delayed.length); i < length; ++i) {\n superpuper();\n }\n }).catch(noop);\n\n const checkCancel = () => {\n if(getErrorsCount() === prepared.length) {\n throw prepared[0].error;\n }\n };\n\n return deferred;\n }\n\n public downloadMedia(options: DownloadMediaOptions): DownloadPromise {\n let {media, thumb} = options;\n const isPhoto = media._ === 'photo';\n if(isPhoto && !thumb) {\n return Promise.reject('preloadPhoto photoEmpty!');\n }\n\n // get original instance with correct file_reference instead of using copies\n const isDocument = media._ === 'document';\n // const isWebDocument = media._ === 'webDocument';\n if(isDocument) media = this.appDocsManager.getDoc((media as Document.document).id);\n else if(isPhoto) media = this.appPhotosManager.getPhoto((media as Photo.photo).id);\n\n const {fileName, downloadOptions} = getDownloadMediaDetails(options);\n\n let promise = this.getDownload(fileName);\n if(!promise) {\n promise = this.download(downloadOptions);\n\n if(isDocument && !thumb) {\n this.rootScope.dispatchEvent('document_downloading', (media as Document.document).id);\n promise.then(() => {\n this.rootScope.dispatchEvent('document_downloaded', (media as Document.document).id);\n }).catch(noop);\n }\n }\n\n return promise;\n }\n\n public downloadMediaURL(options: DownloadMediaOptions): Promise {\n const {media, thumb} = options;\n\n let cacheContext = this.thumbsStorage.getCacheContext(media as any, thumb?.type);\n if((thumb ? (cacheContext.downloaded >= ('size' in thumb ? thumb.size : 0)) : true) && cacheContext.url) {\n return Promise.resolve(cacheContext.url);\n }\n\n return this.downloadMedia(options).then((blob) => {\n if(!cacheContext.downloaded || cacheContext.downloaded < blob.size) {\n const url = URL.createObjectURL(blob);\n cacheContext = this.thumbsStorage.setCacheContextURL(media as any, cacheContext.type, url, blob.size);\n }\n\n return cacheContext.url;\n });\n }\n\n public downloadMediaVoid(options: DownloadMediaOptions) {\n return this.downloadMedia(options).then(noop);\n }\n\n private delete(fileName: string) {\n delete this.downloadPromises[fileName];\n return this.getFileStorage().delete(fileName);\n }\n\n public upload({file, fileName}: {file: Blob | File, fileName?: string}) {\n fileName ||= getFileNameForUpload(file);\n\n const fileSize = file.size;\n const isBigFile = fileSize >= 10485760;\n const partSize = this.getLimitPart(fileSize, true);\n const activeDelta = this.getDelta(partSize);\n const totalParts = Math.ceil(fileSize / partSize);\n const fileId = randomLong();\n const resultInputFile: InputFile = {\n _: isBigFile ? 'inputFileBig' : 'inputFile',\n id: fileId as any,\n parts: totalParts,\n name: fileName,\n md5_checksum: ''\n };\n\n const deferred = deferredPromise();\n if(totalParts > this.maxUploadParts) {\n deferred.reject(makeError('FILE_TOO_BIG'));\n return deferred;\n }\n\n let canceled = false, resolved = false;\n let errorHandler = (error: ApiError) => {\n if(error?.type !== 'UPLOAD_CANCELED') {\n this.log.error('Up Error', error);\n }\n\n deferred.reject(error);\n canceled = true;\n errorHandler = noop;\n };\n\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\n const id = this.tempId++;\n\n const self = this;\n function* generator() {\n let _part = 0, doneParts = 0;\n for(let offset = 0; offset < fileSize; offset += partSize) {\n const part = _part++; // 0, 1\n yield self.downloadRequest('upload', id, async() => {\n checkCancel();\n\n const blob = file.slice(offset, offset + partSize);\n const buffer = await readBlobAsArrayBuffer(blob);\n checkCancel();\n\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\n\n return self.apiManager.invokeApi(method, {\n file_id: fileId,\n file_part: part,\n file_total_parts: totalParts,\n bytes: buffer\n } as any, {\n fileUpload: true\n }).then(() => {\n if(canceled) {\n return;\n }\n\n ++doneParts;\n const progress: Progress = {done: doneParts * partSize, offset, total: fileSize, fileName};\n deferred.notify(progress);\n\n if(doneParts >= totalParts) {\n deferred.resolve(resultInputFile);\n resolved = true;\n }\n }, errorHandler);\n }, activeDelta).catch(errorHandler);\n }\n }\n\n const it = generator();\n const process = () => {\n if(canceled) return;\n const r = it.next();\n if(r.done || canceled) return;\n (r.value as Promise).then(process);\n };\n\n const maxRequests = Infinity;\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\n process();\n }\n\n const checkCancel = () => {\n if(canceled) {\n throw makeError('UPLOAD_CANCELED');\n }\n };\n\n deferred.cancel = () => {\n if(!canceled && !resolved) {\n canceled = true;\n errorHandler(makeError('UPLOAD_CANCELED'));\n }\n };\n\n deferred.notify = (progress: Progress) => {\n this.rootScope.dispatchEvent('download_progress', progress);\n };\n\n deferred.finally(() => {\n if(this.uploadPromises[fileName] === deferred) {\n delete this.uploadPromises[fileName];\n }\n });\n\n return this.uploadPromises[fileName] = deferred;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function fixFirefoxSvg(text: string) {\n const svgIndex = text.indexOf('/, ` width=\"${width}\" height=\"${height}\">`).replace(/[^\\x00-\\x7F]/g, '');\n return text;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAsArrayBuffer from './readBlobAsArrayBuffer';\n\nexport default function readBlobAsUint8Array(blob: Blob) {\n return readBlobAsArrayBuffer(blob).then((buffer) => new Uint8Array(buffer));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from '../../environment/ctx';\nimport callbackify from '../../helpers/callbackify';\nimport {ignoreRestrictionReasons} from '../../helpers/restrictions';\nimport {Config, MethodDeclMap, User} from '../../layer';\nimport {InvokeApiOptions} from '../../types';\nimport {AppManager} from '../appManagers/manager';\nimport {MTAppConfig} from './appConfig';\nimport {UserAuth} from './mtproto_config';\nimport {MTMessage} from './networker';\n\ntype HashResult = {\n hash: number,\n result: any\n};\n\ntype HashOptions = {\n [queryJSON: string]: HashResult\n};\n\nexport type ApiLimitType = 'pin' | 'folderPin' | 'folders' |\n 'favedStickers' | 'reactions' | 'bio' | 'topicPin' | 'caption';\n\nexport default abstract class ApiManagerMethods extends AppManager {\n private afterMessageIdTemp: number;\n private hashes: {[method: string]: HashOptions} = {};\n private apiPromisesSingleProcess: {\n [q: string]: Map>\n } = {};\n private apiPromisesSingle: {\n [q: string]: Promise\n } = {};\n private apiPromisesCacheable: {\n [method: string]: {\n [queryJSON: string]: {\n timestamp: number,\n promise: Promise,\n fulfilled: boolean,\n timeout?: number,\n params: any\n }\n }\n } = {};\n\n protected config: Config;\n protected appConfig: MTAppConfig;\n\n constructor() {\n super();\n this.afterMessageIdTemp = 0;\n }\n\n abstract setUserAuth(userAuth: UserAuth | UserId): Promise;\n\n public setUser(user: User) {\n // appUsersManager.saveApiUser(user);\n return this.setUserAuth(user.id);\n }\n\n abstract invokeApi(method: T, params?: MethodDeclMap[T]['req'], options?: InvokeApiOptions): Promise;\n\n public invokeApiAfter(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): Promise {\n let o = options;\n o.prepareTempMessageId = '' + ++this.afterMessageIdTemp;\n\n o = {...options};\n (options as MTMessage).messageId = o.prepareTempMessageId;\n\n // console.log('will invokeApi:', method, params, options);\n return this.invokeApi(method, params, o);\n }\n\n public invokeApiHashable(o: {\n method: T,\n processResult?: (response: MethodDeclMap[T]['res']) => R,\n processError?: (error: ApiError) => any,\n params?: Omit,\n options?: InvokeApiOptions & {cacheKey?: string},\n overwrite?: boolean\n }) {\n // @ts-ignore\n o.params ??= {};\n o.options ??= {};\n // console.log('will invokeApi:', method, params, options);\n\n const {params, options, method, overwrite} = o;\n\n const queryJSON = JSON.stringify(params);\n let cached: HashResult;\n if(this.hashes[method]) {\n cached = this.hashes[method][queryJSON];\n if(cached) {\n if(overwrite) {\n delete this.hashes[method][queryJSON];\n cached = undefined;\n } else {\n (params as any).hash = cached.hash;\n }\n }\n }\n\n return this.invokeApiSingleProcess({\n method,\n processResult: (result) => {\n if(result._.includes('NotModified')) {\n // this.debug && this.log.warn('NotModified saved!', method, queryJSON);\n return cached.result;\n }\n\n if(result.hash/* || result.messages */) {\n const hash = result.hash/* || this.computeHash(result.messages) */;\n\n if(!this.hashes[method]) this.hashes[method] = {};\n cached = this.hashes[method][queryJSON] = {\n hash,\n result\n };\n }\n\n if(o.processResult) {\n const newResult = o.processResult(result);\n return cached ? cached.result = newResult : newResult;\n }\n\n return result;\n },\n params,\n options\n });\n }\n\n public invokeApiSingle(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions = {}): Promise {\n const q = method + '-' + JSON.stringify(params);\n const cache = this.apiPromisesSingle;\n if(cache[q]) {\n return cache[q];\n }\n\n return cache[q] = this.invokeApi(method, params, options).finally(() => {\n delete cache[q];\n });\n }\n\n public invokeApiSingleProcess(o: {\n method: T,\n processResult: (response: MethodDeclMap[T]['res']) => R,\n processError?: (error: ApiError) => any,\n params?: MethodDeclMap[T]['req'],\n options?: InvokeApiOptions & {cacheKey?: string, overwrite?: boolean}\n }): Promise> {\n o.params ??= {};\n o.options ??= {};\n\n const {method, processResult, processError, params, options} = o;\n const cache = this.apiPromisesSingleProcess;\n const cacheKey = options.cacheKey || JSON.stringify(params);\n const map = cache[method] ?? (cache[method] = new Map());\n const oldPromise = map.get(cacheKey);\n if(oldPromise) {\n return oldPromise;\n }\n\n const getNewPromise = () => {\n const promise = map.get(cacheKey);\n return promise === p ? undefined : promise;\n }\n\n const originalPromise = this.invokeApi(method, params, options);\n const newPromise: Promise> = originalPromise.then((result) => {\n return getNewPromise() || processResult(result);\n }, (error) => {\n const promise = getNewPromise();\n if(promise) {\n return promise;\n }\n\n if(!processError) {\n throw error;\n }\n\n return processError(error);\n });\n\n const p = newPromise.finally(() => {\n if(map.get(cacheKey) !== p) {\n return;\n }\n\n map.delete(cacheKey);\n if(!map.size) {\n delete cache[method];\n }\n });\n\n map.set(cacheKey, p);\n return p;\n }\n\n public invokeApiCacheable(method: T, params: MethodDeclMap[T]['req'] = {} as any, options: InvokeApiOptions & Partial<{cacheSeconds: number, override: boolean}> = {}): Promise {\n const cache = this.apiPromisesCacheable[method] ?? (this.apiPromisesCacheable[method] = {});\n const queryJSON = JSON.stringify(params);\n const item = cache[queryJSON];\n if(item && (!options.override || !item.fulfilled)) {\n return item.promise;\n }\n\n if(options.override) {\n if(item && item.timeout) {\n clearTimeout(item.timeout);\n delete item.timeout;\n }\n\n delete options.override;\n }\n\n let timeout: number;\n if(options.cacheSeconds) {\n timeout = ctx.setTimeout(() => {\n delete cache[queryJSON];\n }, options.cacheSeconds * 1000);\n delete options.cacheSeconds;\n }\n\n const promise = this.invokeApi(method, params, options);\n\n cache[queryJSON] = {\n timestamp: Date.now(),\n fulfilled: false,\n timeout,\n promise,\n params\n };\n\n return promise;\n }\n\n public clearCache(method: T, verify: (params: MethodDeclMap[T]['req']) => boolean) {\n const cache = this.apiPromisesCacheable[method];\n if(cache) {\n for(const queryJSON in cache) {\n const item = cache[queryJSON];\n try {\n if(verify(item.params)) {\n if(item.timeout) {\n clearTimeout(item.timeout);\n }\n\n delete cache[queryJSON];\n }\n } catch(err) {\n // this.log.error('clearCache error:', err, queryJSON, item);\n }\n }\n }\n }\n\n public getConfig(overwrite?: boolean) {\n if(this.config && !overwrite) {\n return this.config;\n }\n\n return this.invokeApiSingleProcess({\n method: 'help.getConfig',\n params: {},\n processResult: (config) => {\n this.config = config;\n this.rootScope.dispatchEvent('config', config);\n return config;\n },\n options: {overwrite}\n });\n }\n\n public getAppConfig(overwrite?: boolean) {\n if(this.appConfig && !overwrite) {\n return this.appConfig;\n }\n\n return this.invokeApiSingleProcess({\n method: 'help.getAppConfig',\n params: {},\n processResult: (config: MTAppConfig) => {\n this.appConfig = config;\n ignoreRestrictionReasons(config.ignore_restriction_reasons ?? []);\n this.rootScope.dispatchEvent('app_config', config);\n return config;\n },\n options: {overwrite}\n });\n }\n\n public getLimit(type: ApiLimitType, isPremium?: boolean) {\n return callbackify(this.getAppConfig(), (appConfig) => {\n const map: {[type in ApiLimitType]: [keyof MTAppConfig, keyof MTAppConfig] | keyof MTAppConfig} = {\n pin: ['dialogs_pinned_limit_default', 'dialogs_pinned_limit_premium'],\n folderPin: ['dialogs_folder_pinned_limit_default', 'dialogs_folder_pinned_limit_premium'],\n folders: ['dialog_filters_limit_default', 'dialog_filters_limit_premium'],\n favedStickers: ['stickers_faved_limit_default', 'stickers_faved_limit_premium'],\n reactions: ['reactions_user_max_default', 'reactions_user_max_premium'],\n bio: ['about_length_limit_default', 'about_length_limit_premium'],\n topicPin: 'topics_pinned_limit',\n caption: ['caption_length_limit_default', 'caption_length_limit_premium']\n };\n\n isPremium ??= this.rootScope.premium;\n\n const a = map[type];\n const key = Array.isArray(a) ? a[isPremium ? 1 : 0] : a;\n return appConfig[key] as number;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n \nimport transportController from './transports/controller';\nimport MTTransport from './transports/transport';\n \n\nimport type {UserAuth} from './mtproto_config';\nimport type {DcAuthKey, DcId, DcServerSalt, InvokeApiOptions} from '../../types';\nimport type {MethodDeclMap} from '../../layer';\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport sessionStorage from '../sessionStorage';\nimport MTPNetworker, {MTMessage} from './networker';\nimport {ConnectionType, constructTelegramWebSocketUrl, DcConfigurator, TransportType} from './dcConfigurator';\nimport {logger} from '../logger';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {IDB} from '../files/idb';\nimport CryptoWorker from '../crypto/cryptoMessagePort';\nimport ctx from '../../environment/ctx';\nimport noop from '../../helpers/noop';\nimport Modes from '../../config/modes';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport isObject from '../../helpers/object/isObject';\nimport pause from '../../helpers/schedulers/pause';\nimport ApiManagerMethods from './api_methods';\nimport {getEnvironment} from '../../environment/utils';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport tsNow from '../../helpers/tsNow';\n\n/* class RotatableArray {\n public array: Array = [];\n private lastIndex = -1;\n\n public get() {\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\n return this.array[this.lastIndex];\n }\n} */\n\nconst PREMIUM_FILE_NETWORKERS_COUNT = 6;\nconst REGULAR_FILE_NETWORKERS_COUNT = 3;\n\nexport class ApiManager extends ApiManagerMethods {\n private cachedNetworkers: {\n [transportType in TransportType]: {\n [connectionType in ConnectionType]: {\n [dcId: DcId]: MTPNetworker[]\n }\n }\n };\n\n private cachedExportPromise: {[x: number]: Promise};\n private gettingNetworkers: {[dcIdAndType: string]: Promise};\n private baseDcId: DcId;\n\n // public telegramMeNotified = false;\n\n private log: ReturnType;\n\n private afterMessageTempIds: {\n [tempId: string]: {\n messageId: string,\n promise: Promise\n }\n };\n\n private transportType: TransportType;\n\n private updatesProcessor: (obj: any) => void;\n\n private loggingOut: boolean;\n\n constructor() {\n super();\n this.log = logger('API');\n\n this.cachedNetworkers = {} as any;\n this.cachedExportPromise = {};\n this.gettingNetworkers = {};\n this.baseDcId = 0;\n this.afterMessageTempIds = {};\n\n this.transportType = Modes.transport;\n\n \n transportController.addEventListener('transport', (transportType) => {\n this.changeTransportType(transportType);\n });\n \n\n // * Make sure that the used autologin_token is no more than 10000 seconds old\n // * https://core.telegram.org/api/url-authorization\n const REFRESH_APP_CONFIG_INTERVAL = (10000 - 30) * 1000;\n setInterval(() => {\n this.getAppConfig(true);\n }, REFRESH_APP_CONFIG_INTERVAL);\n }\n\n protected after() {\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateConfig: () => {\n this.getConfig(true);\n this.getAppConfig(true);\n }\n });\n\n this.rootScope.addEventListener('user_auth', () => {\n if(this.config) { // refresh configs if had a config during authorization\n this.apiUpdatesManager.processLocalUpdate({_: 'updateConfig'});\n }\n });\n\n this.rootScope.addEventListener('premium_toggle', (isPremium) => {\n this.iterateNetworkers(({networker, connectionType, dcId, transportType}) => {\n if(connectionType === 'client' || transportType !== 'websocket') {\n return;\n }\n\n const transport = networker.transport;\n if(!transport) {\n this.log.error('wow what, no transport?', networker);\n return;\n }\n\n if((transport as TcpObfuscated).connection) {\n const url = constructTelegramWebSocketUrl(dcId, connectionType, isPremium);\n (transport as TcpObfuscated).changeUrl(url);\n }\n });\n });\n }\n\n // private lol = false;\n\n // constructor() {\n // MtpSingleInstanceService.start();\n\n /* AppStorage.get('dc').then((dcId) => {\n if(dcId) {\n this.baseDcId = dcId;\n }\n }); */\n // }\n\n /* public telegramMeNotify(newValue: boolean) {\n if(this.telegramMeNotified !== newValue) {\n this.telegramMeNotified = newValue;\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\n }\n } */\n\n private getTransportType(connectionType: ConnectionType) {\n \n \n \n \n \n // @ts-ignore\n const transportType: TransportType = this.transportType;\n \n\n return transportType;\n }\n\n private iterateNetworkers(callback: (o: {networker: MTPNetworker, dcId: DcId, connectionType: ConnectionType, transportType: TransportType, index: number, array: MTPNetworker[]}) => void) {\n for(const transportType in this.cachedNetworkers) {\n const connections = this.cachedNetworkers[transportType as TransportType];\n for(const connectionType in connections) {\n const dcs = connections[connectionType as ConnectionType];\n for(const dcId in dcs) {\n const networkers = dcs[dcId as any as DcId];\n networkers.forEach((networker, idx, arr) => {\n callback({\n networker,\n dcId: +dcId as DcId,\n connectionType: connectionType as ConnectionType,\n transportType: transportType as TransportType,\n index: idx,\n array: arr\n });\n });\n }\n }\n }\n }\n\n private chooseServer(dcId: DcId, connectionType: ConnectionType, transportType: TransportType) {\n return this.dcConfigurator.chooseServer(dcId, connectionType, transportType, connectionType === 'client', this.rootScope.premium);\n }\n\n public changeTransportType(transportType: TransportType) {\n const oldTransportType = this.transportType;\n if(oldTransportType === transportType) {\n return;\n }\n\n this.log('changing transport from', oldTransportType, 'to', transportType);\n\n const oldObject = this.cachedNetworkers[oldTransportType];\n const newObject = this.cachedNetworkers[transportType];\n this.cachedNetworkers[transportType] = oldObject;\n this.cachedNetworkers[oldTransportType] = newObject;\n\n this.transportType = transportType;\n\n for(const oldGetKey in this.gettingNetworkers) {\n const promise = this.gettingNetworkers[oldGetKey];\n delete this.gettingNetworkers[oldGetKey];\n\n const newGetKey = oldGetKey.replace(oldTransportType, transportType);\n this.gettingNetworkers[newGetKey] = promise;\n\n this.log('changed networker getKey from', oldGetKey, 'to', newGetKey)\n }\n\n this.iterateNetworkers((info) => {\n const transportType = this.getTransportType(info.connectionType);\n const transport = this.chooseServer(info.dcId, info.connectionType, transportType);\n this.changeNetworkerTransport(info.networker, transport);\n });\n }\n\n public async getBaseDcId() {\n if(this.baseDcId) {\n return this.baseDcId;\n }\n\n const baseDcId = await sessionStorage.get('dc');\n if(!this.baseDcId) {\n if(!baseDcId) {\n this.setBaseDcId(App.baseDcId);\n } else {\n this.baseDcId = baseDcId;\n }\n }\n\n return this.baseDcId;\n }\n\n public async setUserAuth(userAuth: UserAuth | UserId) {\n if(typeof(userAuth) === 'string' || typeof(userAuth) === 'number') {\n userAuth = {dcID: 0, date: tsNow(true), id: userAuth.toPeerId(false)};\n }\n\n this.rootScope.dispatchEvent('user_auth', userAuth);\n\n if(!userAuth.dcID) {\n const baseDcId = await this.getBaseDcId();\n userAuth.dcID = baseDcId;\n }\n\n sessionStorage.set({\n user_auth: userAuth\n });\n\n // this.telegramMeNotify(true);\n }\n\n public setBaseDcId(dcId: DcId) {\n const wasDcId = this.baseDcId;\n if(wasDcId) { // if migrated set ondrain\n this.getNetworker(wasDcId).then((networker) => {\n this.setOnDrainIfNeeded(networker);\n });\n }\n\n this.baseDcId = dcId;\n\n sessionStorage.set({\n dc: this.baseDcId\n });\n }\n\n public async logOut() {\n if(this.loggingOut) {\n return;\n }\n\n this.loggingOut = true;\n const storageKeys: Array = [];\n\n const prefix = 'dc';\n for(let dcId = 1; dcId <= 5; dcId++) {\n storageKeys.push(prefix + dcId + '_auth_key' as any);\n }\n\n // WebPushApiManager.forceUnsubscribe(); // WARNING // moved to worker's master\n const storageResult = await Promise.all(storageKeys.map((key) => sessionStorage.get(key)));\n\n const logoutPromises: Promise[] = [];\n for(let i = 0; i < storageResult.length; i++) {\n if(storageResult[i]) {\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: (i + 1) as DcId, ignoreErrors: true}));\n }\n }\n\n const clear = async() => {\n this.baseDcId = undefined;\n // this.telegramMeNotify(false);\n await toggleStorages(false, true);\n IDB.closeDatabases();\n this.rootScope.dispatchEvent('logging_out');\n };\n\n setTimeout(clear, 1e3);\n\n // return;\n\n return Promise.all(logoutPromises).catch((error) => {\n error.handled = true;\n }).finally(clear)/* .then(() => {\n location.pathname = '/';\n }) */;\n }\n\n private generateNetworkerGetKey(dcId: DcId, transportType: TransportType, connectionType: ConnectionType) {\n return [dcId, transportType, connectionType].join('-');\n }\n\n public getNetworker(dcId: DcId, options: InvokeApiOptions = {}): Promise {\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\n // const connectionType: ConnectionType = 'client';\n\n const transportType = this.getTransportType(connectionType);\n if(!this.cachedNetworkers[transportType]) {\n this.cachedNetworkers[transportType] = {\n client: {},\n download: {},\n upload: {}\n };\n }\n\n const cache = this.cachedNetworkers[transportType][connectionType];\n if(!(dcId in cache)) {\n cache[dcId] = [];\n }\n\n const networkers = cache[dcId];\n // @ts-ignore\n const maxNetworkers = connectionType === 'client' || transportType === 'https' ? 1 : (this.rootScope.premium ? PREMIUM_FILE_NETWORKERS_COUNT : REGULAR_FILE_NETWORKERS_COUNT);\n if(networkers.length >= maxNetworkers) {\n let i = maxNetworkers - 1, found = false;\n for(; i >= 0; --i) {\n if(networkers[i].isOnline) {\n found = true;\n break;\n }\n }\n\n const networker = networkers.splice(found ? i : maxNetworkers - 1, 1)[0];\n networkers.unshift(networker);\n return Promise.resolve(networker);\n }\n\n let getKey = this.generateNetworkerGetKey(dcId, transportType, connectionType);\n if(this.gettingNetworkers[getKey]) {\n return this.gettingNetworkers[getKey];\n }\n\n const ak: DcAuthKey = `dc${dcId}_auth_key` as any;\n const ss: DcServerSalt = `dc${dcId}_server_salt` as any;\n\n let transport = this.chooseServer(dcId, connectionType, transportType);\n return this.gettingNetworkers[getKey] = Promise.all([ak, ss].map((key) => sessionStorage.get(key)))\n .then(async([authKeyHex, serverSaltHex]) => {\n let networker: MTPNetworker, error: any;\n if(authKeyHex && authKeyHex.length === 512) {\n if(!serverSaltHex || serverSaltHex.length !== 16) {\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\n }\n\n const authKey = bytesFromHex(authKeyHex);\n const authKeyId = (await CryptoWorker.invokeCrypto('sha1', authKey)).slice(-8);\n const serverSalt = bytesFromHex(serverSaltHex);\n\n networker = this.networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, options);\n } else {\n try { // if no saved state\n const auth = await this.authorizer.auth(dcId);\n\n sessionStorage.set({\n [ak]: bytesToHex(auth.authKey),\n [ss]: bytesToHex(auth.serverSalt)\n });\n\n networker = this.networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, options);\n } catch(_error) {\n error = _error;\n }\n }\n\n // ! cannot get it before this promise because simultaneous changeTransport will change nothing\n const newTransportType = this.getTransportType(connectionType);\n if(newTransportType !== transportType) {\n getKey = this.generateNetworkerGetKey(dcId, newTransportType, connectionType);\n transport.destroy();\n DcConfigurator.removeTransport(this.dcConfigurator.chosenServers, transport);\n\n if(networker) {\n transport = this.chooseServer(dcId, connectionType, newTransportType);\n }\n\n this.log('transport has been changed during authorization from', transportType, 'to', newTransportType);\n }\n\n /* networker.onConnectionStatusChange = (online) => {\n console.log('status:', online);\n }; */\n\n delete this.gettingNetworkers[getKey];\n\n if(error) {\n this.log('get networker error', error, (error as Error).stack);\n throw error;\n }\n\n this.changeNetworkerTransport(networker, transport);\n networkers.unshift(networker);\n this.setOnDrainIfNeeded(networker);\n return networker;\n });\n }\n\n public getNetworkerVoid(dcId: DcId) {\n return this.getNetworker(dcId).then(noop, noop);\n }\n\n private changeNetworkerTransport(networker: MTPNetworker, transport?: MTTransport) {\n const oldTransport = networker.transport;\n if(oldTransport) {\n DcConfigurator.removeTransport(this.dcConfigurator.chosenServers, oldTransport);\n }\n\n networker.changeTransport(transport);\n }\n\n private onNetworkerDrain(networker: MTPNetworker) {\n this.log('networker drain', networker.dcId);\n networker.onDrain = undefined;\n this.changeNetworkerTransport(networker);\n networker.destroy();\n this.networkerFactory.removeNetworker(networker);\n DcConfigurator.removeTransport(this.cachedNetworkers, networker);\n }\n\n public setOnDrainIfNeeded(networker: MTPNetworker) {\n if(networker.onDrain) {\n return;\n }\n\n const checkPromise: Promise = networker.isFileNetworker ?\n Promise.resolve(true) :\n this.getBaseDcId().then((baseDcId) => networker.dcId !== baseDcId);\n checkPromise.then((canRelease) => {\n if(networker.onDrain) {\n return;\n }\n\n if(canRelease) {\n networker.onDrain = () => this.onNetworkerDrain(networker);\n networker.setDrainTimeout();\n }\n });\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n this.networkerFactory.setUpdatesProcessor(callback);\n }\n\n public invokeApi(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise {\n // /////this.log('Invoke api', method, params, options);\n\n /* if(!this.lol) {\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\n this.lol = true;\n } */\n\n const deferred = deferredPromise();\n\n let {afterMessageId, prepareTempMessageId} = options;\n if(prepareTempMessageId) {\n deferred.then(() => {\n delete this.afterMessageTempIds[prepareTempMessageId];\n });\n }\n\n if(MOUNT_CLASS_TO) {\n const startTime = Date.now();\n const interval = ctx.setInterval(() => {\n if(!cachedNetworker || !cachedNetworker.isStopped()) {\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\n }\n // this.cachedUploadNetworkers[2].requestMessageStatus();\n }, 5e3);\n\n deferred.catch(noop).finally(() => {\n clearInterval(interval);\n });\n }\n\n const rejectPromise = async(error: ApiError) => {\n if(!error) {\n error = {type: 'ERROR_EMPTY'};\n } else if(!isObject(error)) {\n error = {message: error};\n }\n\n if((error.code === 401 && error.type === 'SESSION_REVOKED') ||\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\n this.logOut();\n }\n\n if(options.ignoreErrors) {\n throw error;\n }\n\n if(error.code === 406) {\n error.handled = true;\n }\n\n if(!options.noErrorBox) {\n error.input = method;\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\n setTimeout(() => {\n if(!error.handled) {\n if(error.code === 401) {\n this.logOut();\n } else {\n // ErrorService.show({error: error}); // WARNING\n }\n\n error.handled = true;\n }\n }, 100);\n }\n\n throw error;\n };\n\n let dcId: DcId;\n\n let cachedNetworker: MTPNetworker;\n const stack = (new Error()).stack || 'empty stack';\n const performRequest = (): Promise => {\n if(afterMessageId) {\n const after = this.afterMessageTempIds[afterMessageId];\n if(after) {\n options.afterMessageId = after.messageId;\n }\n }\n\n const promise = cachedNetworker.wrapApiCall(method, params, options);\n\n if(prepareTempMessageId) {\n this.afterMessageTempIds[prepareTempMessageId] = {\n messageId: (options as MTMessage).messageId,\n promise: deferred\n };\n }\n\n return promise.catch((error: ApiError) => {\n // if(!options.ignoreErrors) {\n if(error.type !== 'FILE_REFERENCE_EXPIRED'/* && error.type !== 'MSG_WAIT_FAILED' */) {\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\n }\n\n if(error.code === 401 && this.baseDcId === dcId) {\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\n sessionStorage.delete('dc')\n sessionStorage.delete('user_auth'); // ! ะฒะพะทะผะพะถะฝะพ ั‚ัƒั‚ ะฒะพะพะฑั‰ะต ะฝะต ะฝัƒะถะฝะพ ัั‚ะพ ะดะตะปะฐั‚ัŒ, ะฝะพ ะฝัƒะถะฝะพ ะฟั€ะพะฒะตั€ะธั‚ัŒ ัะปัƒั‡ะฐะน ั USER_DEACTIVATED (https://core.telegram.org/api/errors)\n // this.telegramMeNotify(false);\n }\n\n throw error;\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\n if(this.cachedExportPromise[dcId] === undefined) {\n const promise = new Promise((exportResolve, exportReject) => {\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\n this.invokeApi('auth.importAuthorization', {\n id: exportedAuth.id,\n bytes: exportedAuth.bytes\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\n }, exportReject);\n });\n\n this.cachedExportPromise[dcId] = promise;\n }\n\n return this.cachedExportPromise[dcId].then(() => performRequest());\n } else if(error.code === 303) {\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_)(\\d+)/)[2] as DcId;\n if(newDcId !== dcId) {\n if(options.dcId) {\n options.dcId = newDcId;\n } else {\n this.setBaseDcId(newDcId);\n }\n\n return this.invokeApi(method, params, options);\n }\n } else if(error.code === 400 && error.type.indexOf('FILE_MIGRATE') === 0) {\n const newDcId = +error.type.match(/^(FILE_MIGRATE_)(\\d+)/)[2] as DcId;\n if(newDcId !== dcId) {\n options.dcId = newDcId;\n return this.invokeApi(method, params, options);\n } else {\n throw error;\n }\n } else if(error.code === 400 && error.type === 'CONNECTION_NOT_INITED') {\n this.networkerFactory.unsetConnectionInited();\n return performRequest();\n } else if(!options.rawError && error.code === 420) {\n const waitTime = +error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 1;\n\n if(waitTime > (options.floodMaxTimeout ?? 60) && !options.prepareTempMessageId) {\n throw error;\n }\n\n return pause(waitTime/* (waitTime + 5) */ * 1000).then(() => performRequest());\n } else if(!options.rawError && ['MSG_WAIT_FAILED', 'MSG_WAIT_TIMEOUT'].includes(error.type)) {\n const after = this.afterMessageTempIds[afterMessageId];\n\n afterMessageId = undefined;\n delete options.afterMessageId;\n\n if(after) return after.promise.then(() => performRequest());\n else return performRequest();\n } else if(!options.rawError && error.code === 500) {\n const now = Date.now();\n if(options.stopTime) {\n if(now >= options.stopTime) {\n throw error;\n }\n }\n\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\n return pause(options.waitTime * 1000).then(() => performRequest());\n } else if(error.type === 'UNKNOWN' || error.type === 'MTPROTO_CLUSTER_INVALID') { // cluster invalid - request from regular user to premium endpoint\n return pause(1000).then(() => performRequest());\n } else {\n throw error;\n }\n });\n }\n\n let p: Promise;\n if(dcId = (options.dcId || this.baseDcId)) {\n p = this.getNetworker(dcId, options);\n } else {\n p = this.getBaseDcId().then((baseDcId) => this.getNetworker(dcId = baseDcId, options));\n }\n\n p.then((networker) => {\n cachedNetworker = networker;\n const promise = performRequest();\n cachedNetworker.attachPromise(deferred, options as MTMessage);\n return promise;\n })\n .then(deferred.resolve)\n .catch(rejectPromise)\n .catch(deferred.reject);\n\n return deferred;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport applyMixins from '../../helpers/applyMixins';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport {AppManager} from '../appManagers/manager';\n\nexport type StatePeerType = 'recentSearch' | 'topPeer' | 'dialog' | 'contact' | 'topMessage' | 'self';\n\ntype PeersStorageKey = `${StatePeerType}_${string | PeerId}` | StatePeerType;\n\nclass PeersStorage {\n private neededPeers: Map> = new Map();\n private singlePeerMap: Map> = new Map();\n\n constructor() {\n this._constructor(false);\n }\n\n protected after() {\n this.rootScope.addEventListener('user_auth', () => {\n this.requestPeer(this.appPeersManager.peerId, 'self');\n });\n }\n\n public requestPeer(peerId: PeerId, key: PeersStorageKey) {\n let set = this.neededPeers.get(peerId);\n if(set && set.has(key)) {\n return;\n }\n\n if(!set) {\n set = new Set();\n this.neededPeers.set(peerId, set);\n }\n\n set.add(key);\n\n this.dispatchEvent('peerNeeded', peerId);\n }\n\n public releasePeer(peerId: PeerId, key: PeersStorageKey) {\n const set = this.neededPeers.get(peerId);\n if(!set) {\n return;\n }\n\n set.delete(key);\n\n if(!set.size) {\n this.neededPeers.delete(peerId);\n this.dispatchEvent('peerUnneeded', peerId);\n }\n }\n\n public requestPeersForKey(peerIds: Set | number[], key: PeersStorageKey) {\n if(Array.isArray(peerIds)) {\n peerIds = new Set(peerIds);\n }\n\n let set = this.singlePeerMap.get(key);\n if(set) {\n for(const peerId of set) {\n if(peerIds.has(peerId)) {\n continue;\n }\n\n this.releasePeer(peerId, key);\n set.delete(peerId);\n }\n\n if(!set.size && !peerIds.size) {\n this.singlePeerMap.delete(key);\n return;\n }\n }\n\n if(peerIds.size) {\n if(!set) {\n set = new Set();\n this.singlePeerMap.set(key, set);\n }\n\n for(const peerId of peerIds) {\n if(set.has(peerId)) {\n continue;\n }\n\n this.requestPeer(peerId, key);\n set.add(peerId);\n }\n }\n }\n\n public isPeerNeeded(peerId: PeerId) {\n return this.neededPeers.has(peerId);\n }\n}\n\ninterface PeersStorage extends EventListenerBase<{\n peerNeeded: (peerId: PeerId) => void,\n peerUnneeded: (peerId: PeerId) => void,\n}>, AppManager {}\napplyMixins(PeersStorage, [EventListenerBase, AppManager]);\n\nexport default PeersStorage;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WebDocument} from '../../layer';\nimport type {MyDocument} from '../appManagers/appDocsManager';\nimport type {MyPhoto} from '../appManagers/appPhotosManager';\nimport {THUMB_TYPE_FULL} from '../mtproto/mtproto_config';\n\nexport type ThumbCache = {\n downloaded: number,\n url: string,\n type: string\n};\n\nexport type ThumbsCache = {\n [key: string]: {\n [size: string]: ThumbCache\n }\n};\n\nconst thumbFullSize = THUMB_TYPE_FULL;\n\nexport type ThumbStorageMedia = MyPhoto | MyDocument | WebDocument;\n\nexport default class ThumbsStorage {\n private thumbsCache: ThumbsCache = {};\n\n private getKey(media: ThumbStorageMedia) {\n return media._ + ((media as MyPhoto).id ?? (media as WebDocument).url);\n }\n\n public getCacheContext(media: ThumbStorageMedia, thumbSize: string = thumbFullSize): ThumbCache {\n /* if(media._ === 'photo' && thumbSize !== 'i') {\n thumbSize = thumbFullSize;\n } */\n\n const cache = this.thumbsCache[this.getKey(media)] ??= {};\n return cache[thumbSize] ??= {downloaded: 0, url: '', type: thumbSize};\n }\n\n public setCacheContextURL(media: ThumbStorageMedia, thumbSize: string = thumbFullSize, url: string, downloaded: number = 0) {\n const cacheContext = this.getCacheContext(media, thumbSize);\n cacheContext.url = url;\n cacheContext.downloaded = downloaded;\n return cacheContext;\n }\n\n public deleteCacheContext(media: ThumbStorageMedia, thumbSize: string = thumbFullSize) {\n const cache = this.thumbsCache[this.getKey(media)];\n if(cache) {\n delete cache[thumbSize];\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport type MTProtoConstructor = {\n id: number,\n predicate: string,\n params: Array<{\n name: string,\n type: string\n }>,\n type: string\n};\n\nexport type MTProtoMethod = {\n id: number,\n method: string,\n params: Array<{\n name: string,\n type: string\n }>,\n type: string\n};\n\n// eslint-disable-next-line quotes, comma-spacing\nexport default {\"MTProto\":{\"constructors\":[{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":85337187,\"predicate\":\"resPQ\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"server_public_key_fingerprints\",\"type\":\"Vector\"}],\"type\":\"ResPQ\"},{\"id\":-1443537003,\"predicate\":\"p_q_inner_data_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":1459478408,\"predicate\":\"p_q_inner_data_temp_dc\",\"params\":[{\"name\":\"pq\",\"type\":\"bytes\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce\",\"type\":\"int256\"},{\"name\":\"dc\",\"type\":\"int\"},{\"name\":\"expires_in\",\"type\":\"int\"}],\"type\":\"P_Q_inner_data\"},{\"id\":-790100132,\"predicate\":\"server_DH_params_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_answer\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-1249309254,\"predicate\":\"server_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"dh_prime\",\"type\":\"bytes\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"server_time\",\"type\":\"int\"}],\"type\":\"Server_DH_inner_data\"},{\"id\":1715713620,\"predicate\":\"client_DH_inner_data\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"retry_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"}],\"type\":\"Client_DH_Inner_Data\"},{\"id\":1003222836,\"predicate\":\"dh_gen_ok\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash1\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1188831161,\"predicate\":\"dh_gen_retry\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash2\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":-1499615742,\"predicate\":\"dh_gen_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash3\",\"type\":\"int128\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1973679973,\"predicate\":\"bind_auth_key_inner\",\"params\":[{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"temp_auth_key_id\",\"type\":\"long\"},{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"temp_session_id\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"}],\"type\":\"BindAuthKeyInner\"},{\"id\":-212046591,\"predicate\":\"rpc_result\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"result\",\"type\":\"Object\"}],\"type\":\"RpcResult\"},{\"id\":558156313,\"predicate\":\"rpc_error\",\"params\":[{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"error_message\",\"type\":\"string\"}],\"type\":\"RpcError\"},{\"id\":1579864942,\"predicate\":\"rpc_answer_unknown\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-847714938,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":-1539647305,\"predicate\":\"rpc_answer_dropped\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seq_no\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"}],\"type\":\"RpcDropAnswer\"},{\"id\":155834844,\"predicate\":\"future_salt\",\"params\":[{\"name\":\"valid_since\",\"type\":\"int\"},{\"name\":\"valid_until\",\"type\":\"int\"},{\"name\":\"salt\",\"type\":\"long\"}],\"type\":\"FutureSalt\"},{\"id\":-1370486635,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector\"}],\"type\":\"FutureSalts\"},{\"id\":880243653,\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-501201412,\"predicate\":\"destroy_session_ok\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":1658015945,\"predicate\":\"destroy_session_none\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1631450872,\"predicate\":\"new_session_created\",\"params\":[{\"name\":\"first_msg_id\",\"type\":\"long\"},{\"name\":\"unique_id\",\"type\":\"long\"},{\"name\":\"server_salt\",\"type\":\"long\"}],\"type\":\"NewSession\"},{\"id\":1945237724,\"predicate\":\"msg_container\",\"params\":[{\"name\":\"messages\",\"type\":\"vector<%Message>\"}],\"type\":\"MessageContainer\"},{\"id\":1538843921,\"predicate\":\"message\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"seqno\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"body\",\"type\":\"Object\"}],\"type\":\"Message\"},{\"id\":-530561358,\"predicate\":\"msg_copy\",\"params\":[{\"name\":\"orig_message\",\"type\":\"Message\"}],\"type\":\"MessageCopy\"},{\"id\":812830625,\"predicate\":\"gzip_packed\",\"params\":[{\"name\":\"packed_data\",\"type\":\"bytes\"}],\"type\":\"Object\"},{\"id\":1658238041,\"predicate\":\"msgs_ack\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsAck\"},{\"id\":-1477445615,\"predicate\":\"bad_msg_notification\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"}],\"type\":\"BadMsgNotification\"},{\"id\":-307542917,\"predicate\":\"bad_server_salt\",\"params\":[{\"name\":\"bad_msg_id\",\"type\":\"long\"},{\"name\":\"bad_msg_seqno\",\"type\":\"int\"},{\"name\":\"error_code\",\"type\":\"int\"},{\"name\":\"new_server_salt\",\"type\":\"long\"}],\"type\":\"BadMsgNotification\"},{\"id\":2105940488,\"predicate\":\"msg_resend_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgResendReq\"},{\"id\":-630588590,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"}],\"type\":\"MsgsStateReq\"},{\"id\":81704317,\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":-1933520591,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsAllInfo\"},{\"id\":661470918,\"predicate\":\"msg_detailed_info\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-2137147681,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"id\":-161422892,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":178201177,\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":-368010477,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}],\"methods\":[{\"id\":-1099002127,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":-686627650,\"method\":\"req_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"q\",\"type\":\"bytes\"},{\"name\":\"public_key_fingerprint\",\"type\":\"long\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Server_DH_Params\"},{\"id\":-184262881,\"method\":\"set_client_DH_params\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"encrypted_data\",\"type\":\"bytes\"}],\"type\":\"Set_client_DH_params_answer\"},{\"id\":1491380032,\"method\":\"rpc_drop_answer\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"}],\"type\":\"RpcDropAnswer\"},{\"id\":-1188971260,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":2059302892,\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":-213746804,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":-414113498,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"},{\"id\":-1835453025,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":-784117408,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"}]},\"API\":{\"constructors\":[{\"id\":-1132882121,\"predicate\":\"boolFalse\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1720552011,\"predicate\":\"boolTrue\",\"params\":[],\"type\":\"Bool\"},{\"id\":1072550713,\"predicate\":\"true\",\"params\":[],\"type\":\"True\"},{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":-994444869,\"predicate\":\"error\",\"params\":[{\"name\":\"code\",\"type\":\"int\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Error\"},{\"id\":1450380236,\"predicate\":\"null\",\"params\":[],\"type\":\"Null\"},{\"id\":2134579434,\"predicate\":\"inputPeerEmpty\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":2107670217,\"predicate\":\"inputPeerSelf\",\"params\":[],\"type\":\"InputPeer\"},{\"id\":900291769,\"predicate\":\"inputPeerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-1182234929,\"predicate\":\"inputUserEmpty\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-138301121,\"predicate\":\"inputUserSelf\",\"params\":[],\"type\":\"InputUser\"},{\"id\":-208488460,\"predicate\":\"inputPhoneContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"InputContact\"},{\"id\":-181407105,\"predicate\":\"inputFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"md5_checksum\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":-1771768449,\"predicate\":\"inputMediaEmpty\",\"params\":[],\"type\":\"InputMedia\"},{\"id\":505969924,\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.2?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":-1279654347,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-104578748,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":-122978821,\"predicate\":\"inputMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":480546647,\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":-1110593856,\"predicate\":\"inputChatUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.3?VideoSize\"}],\"type\":\"InputChatPhoto\"},{\"id\":-1991004873,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":-457104426,\"predicate\":\"inputGeoPointEmpty\",\"params\":[],\"type\":\"InputGeoPoint\"},{\"id\":1210199983,\"predicate\":\"inputGeoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"InputGeoPoint\"},{\"id\":483901197,\"predicate\":\"inputPhotoEmpty\",\"params\":[],\"type\":\"InputPhoto\"},{\"id\":1001634122,\"predicate\":\"inputPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputPhoto\"},{\"id\":-539317279,\"predicate\":\"inputFileLocation\",\"params\":[{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputFileLocation\"},{\"id\":1498486562,\"predicate\":\"peerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":918946202,\"predicate\":\"peerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":-1432995067,\"predicate\":\"storage.fileUnknown\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1086091090,\"predicate\":\"storage.filePartial\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":8322574,\"predicate\":\"storage.fileJpeg\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-891180321,\"predicate\":\"storage.fileGif\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":172975040,\"predicate\":\"storage.filePng\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1373745011,\"predicate\":\"storage.filePdf\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1384777335,\"predicate\":\"storage.fileMp3\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":1258941372,\"predicate\":\"storage.fileMov\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-1278304028,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":276907596,\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":-742634630,\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"User\"},{\"id\":1326562017,\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":-2100168954,\"predicate\":\"userProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"personal\",\"type\":\"flags.2?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"UserProfilePhoto\"},{\"id\":164646985,\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-306628279,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":9203775,\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":693512293,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Chat\"},{\"id\":1103884886,\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"deactivated\",\"type\":\"flags.5?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"noforwards\",\"type\":\"flags.25?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"migrated_to\",\"type\":\"flags.6?InputChannel\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"}],\"type\":\"Chat\"},{\"id\":1704108455,\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":-908914376,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants\",\"type\":\"ChatParticipants\"},{\"name\":\"chat_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.13?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"flags.3?Vector\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"call\",\"type\":\"flags.12?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.15?Peer\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.16?string\"},{\"name\":\"requests_pending\",\"type\":\"flags.17?int\"},{\"name\":\"recent_requesters\",\"type\":\"flags.17?Vector\"},{\"name\":\"available_reactions\",\"type\":\"flags.18?ChatReactions\"}],\"type\":\"ChatFull\"},{\"id\":-1070776313,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-2023500831,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":1018991608,\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"ChatParticipants\"},{\"id\":935395612,\"predicate\":\"chatPhotoEmpty\",\"params\":[],\"type\":\"ChatPhoto\"},{\"id\":476978193,\"predicate\":\"chatPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_video\",\"type\":\"flags.0?true\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"stripped_thumb\",\"type\":\"flags.1?bytes\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"ChatPhoto\"},{\"id\":-1868117372,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":940666592,\"predicate\":\"message\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"from_scheduled\",\"type\":\"flags.18?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"edit_hide\",\"type\":\"flags.21?true\"},{\"name\":\"pinned\",\"type\":\"flags.24?true\"},{\"name\":\"noforwards\",\"type\":\"flags.26?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.6?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"views\",\"type\":\"flags.10?int\"},{\"name\":\"forwards\",\"type\":\"flags.10?int\"},{\"name\":\"replies\",\"type\":\"flags.23?MessageReplies\"},{\"name\":\"edit_date\",\"type\":\"flags.15?int\"},{\"name\":\"post_author\",\"type\":\"flags.16?string\"},{\"name\":\"grouped_id\",\"type\":\"flags.17?long\"},{\"name\":\"reactions\",\"type\":\"flags.20?MessageReactions\"},{\"name\":\"restriction_reason\",\"type\":\"flags.22?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":721967202,\"predicate\":\"messageService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"post\",\"type\":\"flags.14?true\"},{\"name\":\"legacy\",\"type\":\"flags.19?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"flags.8?Peer\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"MessageAction\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Message\"},{\"id\":1038967584,\"predicate\":\"messageMediaEmpty\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":1766936791,\"predicate\":\"messageMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.3?true\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1457575028,\"predicate\":\"messageMediaGeo\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"}],\"type\":\"MessageMedia\"},{\"id\":1882335561,\"predicate\":\"messageMediaContact\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageMedia\"},{\"id\":-1618676578,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":-1230047312,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1119368275,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1247687078,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2144015272,\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-1780220945,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":365886720,\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-1539362612,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-712374074,\"predicate\":\"dialog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"unread_mark\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"unread_reactions_count\",\"type\":\"int\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.5?int\"}],\"type\":\"Dialog\"},{\"id\":590459437,\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":-82216347,\"predicate\":\"photo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_stickers\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"Photo\"},{\"id\":236446268,\"predicate\":\"photoSizeEmpty\",\"params\":[{\"name\":\"type\",\"type\":\"string\"}],\"type\":\"PhotoSize\"},{\"id\":1976012384,\"predicate\":\"photoSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"}],\"type\":\"PhotoSize\"},{\"id\":35527382,\"predicate\":\"photoCachedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":286776671,\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":-1297942941,\"predicate\":\"geoPoint\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"long\",\"type\":\"double\"},{\"name\":\"lat\",\"type\":\"double\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"accuracy_radius\",\"type\":\"flags.0?int\"}],\"type\":\"GeoPoint\"},{\"id\":1577067778,\"predicate\":\"auth.sentCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"auth.SentCodeType\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"next_type\",\"type\":\"flags.1?auth.CodeType\"},{\"name\":\"timeout\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCode\"},{\"id\":782418132,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"setup_password_required\",\"type\":\"flags.1?true\"},{\"name\":\"otherwise_relogin_days\",\"type\":\"flags.1?int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"future_auth_token\",\"type\":\"flags.2?bytes\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":-1271602504,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1195615476,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":423314455,\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":1251338318,\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-551616469,\"predicate\":\"inputPeerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"sound\",\"type\":\"flags.3?NotificationSound\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":-1472527322,\"predicate\":\"peerNotifySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"show_previews\",\"type\":\"flags.0?Bool\"},{\"name\":\"silent\",\"type\":\"flags.1?Bool\"},{\"name\":\"mute_until\",\"type\":\"flags.2?int\"},{\"name\":\"ios_sound\",\"type\":\"flags.3?NotificationSound\"},{\"name\":\"android_sound\",\"type\":\"flags.4?NotificationSound\"},{\"name\":\"other_sound\",\"type\":\"flags.5?NotificationSound\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-1525149427,\"predicate\":\"peerSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"report_spam\",\"type\":\"flags.0?true\"},{\"name\":\"add_contact\",\"type\":\"flags.1?true\"},{\"name\":\"block_contact\",\"type\":\"flags.2?true\"},{\"name\":\"share_contact\",\"type\":\"flags.3?true\"},{\"name\":\"need_contacts_exception\",\"type\":\"flags.4?true\"},{\"name\":\"report_geo\",\"type\":\"flags.5?true\"},{\"name\":\"autoarchived\",\"type\":\"flags.7?true\"},{\"name\":\"invite_members\",\"type\":\"flags.8?true\"},{\"name\":\"request_chat_broadcast\",\"type\":\"flags.10?true\"},{\"name\":\"geo_distance\",\"type\":\"flags.6?int\"},{\"name\":\"request_chat_title\",\"type\":\"flags.9?string\"},{\"name\":\"request_chat_date\",\"type\":\"flags.9?int\"}],\"type\":\"PeerSettings\"},{\"id\":-1539849235,\"predicate\":\"wallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"pattern\",\"type\":\"flags.3?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"Document\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1490799288,\"predicate\":\"inputReportReasonSpam\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":505595789,\"predicate\":\"inputReportReasonViolence\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":777640226,\"predicate\":\"inputReportReasonPornography\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1376497949,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1041980751,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-120378643,\"predicate\":\"userFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blocked\",\"type\":\"flags.0?true\"},{\"name\":\"phone_calls_available\",\"type\":\"flags.4?true\"},{\"name\":\"phone_calls_private\",\"type\":\"flags.5?true\"},{\"name\":\"can_pin_message\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.12?true\"},{\"name\":\"video_calls_available\",\"type\":\"flags.13?true\"},{\"name\":\"voice_messages_forbidden\",\"type\":\"flags.20?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags.23?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"personal_photo\",\"type\":\"flags.21?Photo\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?Photo\"},{\"name\":\"fallback_photo\",\"type\":\"flags.22?Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"bot_info\",\"type\":\"flags.3?BotInfo\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.6?int\"},{\"name\":\"common_chats_count\",\"type\":\"int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"ttl_period\",\"type\":\"flags.14?int\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.15?string\"},{\"name\":\"private_forward_name\",\"type\":\"flags.16?string\"},{\"name\":\"bot_group_admin_rights\",\"type\":\"flags.17?ChatAdminRights\"},{\"name\":\"bot_broadcast_admin_rights\",\"type\":\"flags.18?ChatAdminRights\"},{\"name\":\"premium_gifts\",\"type\":\"flags.19?Vector\"}],\"type\":\"UserFull\"},{\"id\":341499403,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":-1052885936,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":383348795,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":-1219778094,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":-353862078,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Contacts\"},{\"id\":2010127419,\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector\"},{\"name\":\"popular_invites\",\"type\":\"Vector\"},{\"name\":\"retry_contacts\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":182326673,\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":-513392236,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Blocked\"},{\"id\":364538944,\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":1910543603,\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1938715001,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":978610270,\"predicate\":\"messages.messagesSlice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"next_rate\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":1694474197,\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-438840932,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1269012015,\"predicate\":\"messages.affectedHistory\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1474492012,\"predicate\":\"inputMessagesFilterEmpty\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1777752804,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1614803355,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1458172132,\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1629621880,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2129714567,\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-3644025,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":522914557,\"predicate\":\"updateNewMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1318109142,\"predicate\":\"updateMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-1576161051,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1071741569,\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-2092401936,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":125178264,\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":-440534818,\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":-1484486364,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"usernames\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1519637954,\"predicate\":\"updates.state\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"}],\"type\":\"updates.State\"},{\"id\":1567990072,\"predicate\":\"updates.differenceEmpty\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":16030880,\"predicate\":\"updates.difference\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-1459938943,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":-484987010,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":826001400,\"predicate\":\"updateShortMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":1299050149,\"predicate\":\"updateShortChatMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"mentioned\",\"type\":\"flags.4?true\"},{\"name\":\"media_unread\",\"type\":\"flags.5?true\"},{\"name\":\"silent\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"fwd_from\",\"type\":\"flags.2?MessageFwdHeader\"},{\"name\":\"via_bot_id\",\"type\":\"flags.11?long\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":2027216577,\"predicate\":\"updateShort\",\"params\":[{\"name\":\"update\",\"type\":\"Update\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1918567619,\"predicate\":\"updatesCombined\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1957577280,\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1916114267,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":352657236,\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photos\"},{\"id\":539045032,\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"photos.Photo\"},{\"id\":157948117,\"predicate\":\"upload.file\",\"params\":[{\"name\":\"type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.File\"},{\"id\":414687501,\"predicate\":\"dcOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"ipv6\",\"type\":\"flags.0?true\"},{\"name\":\"media_only\",\"type\":\"flags.1?true\"},{\"name\":\"tcpo_only\",\"type\":\"flags.2?true\"},{\"name\":\"cdn\",\"type\":\"flags.3?true\"},{\"name\":\"static\",\"type\":\"flags.4?true\"},{\"name\":\"this_port_only\",\"type\":\"flags.5?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":589653676,\"predicate\":\"config\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phonecalls_enabled\",\"type\":\"flags.1?true\"},{\"name\":\"default_p2p_contacts\",\"type\":\"flags.3?true\"},{\"name\":\"preload_featured_stickers\",\"type\":\"flags.4?true\"},{\"name\":\"ignore_phone_entities\",\"type\":\"flags.5?true\"},{\"name\":\"revoke_pm_inbox\",\"type\":\"flags.6?true\"},{\"name\":\"blocked_mode\",\"type\":\"flags.8?true\"},{\"name\":\"pfs_enabled\",\"type\":\"flags.13?true\"},{\"name\":\"force_try_ipv6\",\"type\":\"flags.14?true\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector\"},{\"name\":\"dc_txt_domain_name\",\"type\":\"string\"},{\"name\":\"chat_size_max\",\"type\":\"int\"},{\"name\":\"megagroup_size_max\",\"type\":\"int\"},{\"name\":\"forwarded_count_max\",\"type\":\"int\"},{\"name\":\"online_update_period_ms\",\"type\":\"int\"},{\"name\":\"offline_blur_timeout_ms\",\"type\":\"int\"},{\"name\":\"offline_idle_timeout_ms\",\"type\":\"int\"},{\"name\":\"online_cloud_timeout_ms\",\"type\":\"int\"},{\"name\":\"notify_cloud_delay_ms\",\"type\":\"int\"},{\"name\":\"notify_default_delay_ms\",\"type\":\"int\"},{\"name\":\"push_chat_period_ms\",\"type\":\"int\"},{\"name\":\"push_chat_limit\",\"type\":\"int\"},{\"name\":\"saved_gifs_limit\",\"type\":\"int\"},{\"name\":\"edit_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_time_limit\",\"type\":\"int\"},{\"name\":\"revoke_pm_time_limit\",\"type\":\"int\"},{\"name\":\"rating_e_decay\",\"type\":\"int\"},{\"name\":\"stickers_recent_limit\",\"type\":\"int\"},{\"name\":\"stickers_faved_limit\",\"type\":\"int\"},{\"name\":\"channels_read_media_period\",\"type\":\"int\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"pinned_dialogs_count_max\",\"type\":\"int\"},{\"name\":\"pinned_infolder_count_max\",\"type\":\"int\"},{\"name\":\"call_receive_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_ring_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_connect_timeout_ms\",\"type\":\"int\"},{\"name\":\"call_packet_timeout_ms\",\"type\":\"int\"},{\"name\":\"me_url_prefix\",\"type\":\"string\"},{\"name\":\"autoupdate_url_prefix\",\"type\":\"flags.7?string\"},{\"name\":\"gif_search_username\",\"type\":\"flags.9?string\"},{\"name\":\"venue_search_username\",\"type\":\"flags.10?string\"},{\"name\":\"img_search_username\",\"type\":\"flags.11?string\"},{\"name\":\"static_maps_provider\",\"type\":\"flags.12?string\"},{\"name\":\"caption_length_max\",\"type\":\"int\"},{\"name\":\"message_length_max\",\"type\":\"int\"},{\"name\":\"webfile_dc_id\",\"type\":\"int\"},{\"name\":\"suggested_lang_code\",\"type\":\"flags.2?string\"},{\"name\":\"lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"base_lang_pack_version\",\"type\":\"flags.2?int\"},{\"name\":\"reactions_default\",\"type\":\"flags.15?Reaction\"}],\"type\":\"Config\"},{\"id\":-1910892683,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":-860107216,\"predicate\":\"help.appUpdate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_not_skip\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"sticker\",\"type\":\"flags.3?Document\"}],\"type\":\"help.AppUpdate\"},{\"id\":-1000708810,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":415997816,\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":314359194,\"predicate\":\"updateNewEncryptedMessage\",\"params\":[{\"name\":\"message\",\"type\":\"EncryptedMessage\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":386986326,\"predicate\":\"updateEncryptedChatTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1264392051,\"predicate\":\"updateEncryption\",\"params\":[{\"name\":\"chat\",\"type\":\"EncryptedChat\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":956179895,\"predicate\":\"updateEncryptedMessagesRead\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1417756512,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1722964307,\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":1223809356,\"predicate\":\"encryptedChatRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1643173063,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":505183301,\"predicate\":\"encryptedChatDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"history_deleted\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":-247351839,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":-1038136962,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":-1476358952,\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"EncryptedFile\"},{\"id\":406307684,\"predicate\":\"inputEncryptedFileEmpty\",\"params\":[],\"type\":\"InputEncryptedFile\"},{\"id\":1690108678,\"predicate\":\"inputEncryptedFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1511503333,\"predicate\":\"inputEncryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedFile\"},{\"id\":-182231723,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-317144808,\"predicate\":\"encryptedMessage\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"EncryptedMessage\"},{\"id\":594758406,\"predicate\":\"encryptedMessageService\",\"params\":[{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"EncryptedMessage\"},{\"id\":-1058912715,\"predicate\":\"messages.dhConfigNotModified\",\"params\":[{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":740433629,\"predicate\":\"messages.dhConfig\",\"params\":[{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random\",\"type\":\"bytes\"}],\"type\":\"messages.DhConfig\"},{\"id\":1443858741,\"predicate\":\"messages.sentEncryptedMessage\",\"params\":[{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-1802240206,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":-95482955,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":767652808,\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":1037718609,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-483443337,\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1906403213,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1530447553,\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"spoiler\",\"type\":\"flags.5?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":860303448,\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":-1666158377,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nopremium\",\"type\":\"flags.3?true\"},{\"name\":\"spoiler\",\"type\":\"flags.4?true\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":1928391342,\"predicate\":\"inputDocumentEmpty\",\"params\":[],\"type\":\"InputDocument\"},{\"id\":448771445,\"predicate\":\"inputDocument\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"}],\"type\":\"InputDocument\"},{\"id\":-1160743548,\"predicate\":\"inputDocumentFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":922273905,\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":-1881881384,\"predicate\":\"document\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"Document\"},{\"id\":398898678,\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":-1613493288,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":-1261946036,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1073230141,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-1094555409,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":381645902,\"predicate\":\"sendMessageTypingAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-44119819,\"predicate\":\"sendMessageCancelAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1584933265,\"predicate\":\"sendMessageRecordVideoAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-378127636,\"predicate\":\"sendMessageUploadVideoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-718310409,\"predicate\":\"sendMessageRecordAudioAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-212740181,\"predicate\":\"sendMessageUploadAudioAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-774682074,\"predicate\":\"sendMessageUploadPhotoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-1441998364,\"predicate\":\"sendMessageUploadDocumentAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":393186209,\"predicate\":\"sendMessageGeoLocationAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":1653390447,\"predicate\":\"sendMessageChooseContactAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-1290580579,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.Found\"},{\"id\":-337352679,\"predicate\":\"updateServiceNotification\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"inbox_date\",\"type\":\"flags.1?int\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"MessageMedia\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-496024847,\"predicate\":\"userStatusRecently\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":129960444,\"predicate\":\"userStatusLastWeek\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":2011940674,\"predicate\":\"userStatusLastMonth\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":-298113238,\"predicate\":\"updatePrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"PrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":1335282456,\"predicate\":\"inputPrivacyKeyStatusTimestamp\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1137792208,\"predicate\":\"privacyKeyStatusTimestamp\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":218751099,\"predicate\":\"inputPrivacyValueAllowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":407582158,\"predicate\":\"inputPrivacyValueAllowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":320652927,\"predicate\":\"inputPrivacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":195371015,\"predicate\":\"inputPrivacyValueDisallowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-697604407,\"predicate\":\"inputPrivacyValueDisallowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":-1877932953,\"predicate\":\"inputPrivacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-123988,\"predicate\":\"privacyValueAllowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1698855810,\"predicate\":\"privacyValueAllowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1198497870,\"predicate\":\"privacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-125240806,\"predicate\":\"privacyValueDisallowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-1955338397,\"predicate\":\"privacyValueDisallowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":-463335103,\"predicate\":\"privacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1352683077,\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1194283041,\"predicate\":\"accountDaysTTL\",\"params\":[{\"name\":\"days\",\"type\":\"int\"}],\"type\":\"AccountDaysTTL\"},{\"id\":88680979,\"predicate\":\"updateUserPhone\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1815593308,\"predicate\":\"documentAttributeImageSize\",\"params\":[{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":297109817,\"predicate\":\"documentAttributeAnimated\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1662637586,\"predicate\":\"documentAttributeSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"mask\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"DocumentAttribute\"},{\"id\":250621158,\"predicate\":\"documentAttributeVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"round_message\",\"type\":\"flags.0?true\"},{\"name\":\"supports_streaming\",\"type\":\"flags.1?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"DocumentAttribute\"},{\"id\":-1739392570,\"predicate\":\"documentAttributeAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"voice\",\"type\":\"flags.10?true\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"},{\"name\":\"waveform\",\"type\":\"flags.2?bytes\"}],\"type\":\"DocumentAttribute\"},{\"id\":358154344,\"predicate\":\"documentAttributeFilename\",\"params\":[{\"name\":\"file_name\",\"type\":\"string\"}],\"type\":\"DocumentAttribute\"},{\"id\":-244016606,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":816245886,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.Stickers\"},{\"id\":313694676,\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerPack\"},{\"id\":-395967805,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":-843329861,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.AllStickers\"},{\"id\":-1667805217,\"predicate\":\"updateReadHistoryInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":791617983,\"predicate\":\"updateReadHistoryOutbox\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-2066640507,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":2139689491,\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-350980120,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"WebPage\"},{\"id\":-981018084,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-392411726,\"predicate\":\"webPage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"display_url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"type\",\"type\":\"flags.0?string\"},{\"name\":\"site_name\",\"type\":\"flags.1?string\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"embed_url\",\"type\":\"flags.5?string\"},{\"name\":\"embed_type\",\"type\":\"flags.5?string\"},{\"name\":\"embed_width\",\"type\":\"flags.6?int\"},{\"name\":\"embed_height\",\"type\":\"flags.6?int\"},{\"name\":\"duration\",\"type\":\"flags.7?int\"},{\"name\":\"author\",\"type\":\"flags.8?string\"},{\"name\":\"document\",\"type\":\"flags.9?Document\"},{\"name\":\"cached_page\",\"type\":\"flags.10?Page\"},{\"name\":\"attributes\",\"type\":\"flags.12?Vector\"}],\"type\":\"WebPage\"},{\"id\":-1557277184,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"id\":-1392388579,\"predicate\":\"authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.0?true\"},{\"name\":\"official_app\",\"type\":\"flags.1?true\"},{\"name\":\"password_pending\",\"type\":\"flags.2?true\"},{\"name\":\"encrypted_requests_disabled\",\"type\":\"flags.3?true\"},{\"name\":\"call_requests_disabled\",\"type\":\"flags.4?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"app_name\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"Authorization\"},{\"id\":1275039392,\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorization_ttl_days\",\"type\":\"int\"},{\"name\":\"authorizations\",\"type\":\"Vector\"}],\"type\":\"account.Authorizations\"},{\"id\":-1787080453,\"predicate\":\"account.password\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_recovery\",\"type\":\"flags.0?true\"},{\"name\":\"has_secure_values\",\"type\":\"flags.1?true\"},{\"name\":\"has_password\",\"type\":\"flags.2?true\"},{\"name\":\"current_algo\",\"type\":\"flags.2?PasswordKdfAlgo\"},{\"name\":\"srp_B\",\"type\":\"flags.2?bytes\"},{\"name\":\"srp_id\",\"type\":\"flags.2?long\"},{\"name\":\"hint\",\"type\":\"flags.3?string\"},{\"name\":\"email_unconfirmed_pattern\",\"type\":\"flags.4?string\"},{\"name\":\"new_algo\",\"type\":\"PasswordKdfAlgo\"},{\"name\":\"new_secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_random\",\"type\":\"bytes\"},{\"name\":\"pending_reset_date\",\"type\":\"flags.5?int\"},{\"name\":\"login_email_pattern\",\"type\":\"flags.6?string\"}],\"type\":\"account.Password\"},{\"id\":-1705233435,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1036572727,\"predicate\":\"account.passwordInputSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"new_algo\",\"type\":\"flags.0?PasswordKdfAlgo\"},{\"name\":\"new_password_hash\",\"type\":\"flags.0?bytes\"},{\"name\":\"hint\",\"type\":\"flags.0?string\"},{\"name\":\"email\",\"type\":\"flags.1?string\"},{\"name\":\"new_secure_settings\",\"type\":\"flags.2?SecureSecretSettings\"}],\"type\":\"account.PasswordInputSettings\"},{\"id\":326715557,\"predicate\":\"auth.passwordRecovery\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"}],\"type\":\"auth.PasswordRecovery\"},{\"id\":-1052959727,\"predicate\":\"inputMediaVenue\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":784356159,\"predicate\":\"messageMediaVenue\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-1551583367,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":179611673,\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"request_needed\",\"type\":\"flags.6?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"start_date\",\"type\":\"flags.4?int\"},{\"name\":\"expire_date\",\"type\":\"flags.1?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.2?int\"},{\"name\":\"usage\",\"type\":\"flags.3?int\"},{\"name\":\"requested\",\"type\":\"flags.7?int\"},{\"name\":\"title\",\"type\":\"flags.8?string\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1516793212,\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":806110401,\"predicate\":\"chatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"flags.0?true\"},{\"name\":\"broadcast\",\"type\":\"flags.1?true\"},{\"name\":\"public\",\"type\":\"flags.2?true\"},{\"name\":\"megagroup\",\"type\":\"flags.3?true\"},{\"name\":\"request_needed\",\"type\":\"flags.6?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"flags.5?string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector\"}],\"type\":\"ChatInvite\"},{\"id\":51520707,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":1757493555,\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-4838507,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1645763991,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":-2044933984,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":768691932,\"predicate\":\"stickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archived\",\"type\":\"flags.1?true\"},{\"name\":\"official\",\"type\":\"flags.2?true\"},{\"name\":\"masks\",\"type\":\"flags.3?true\"},{\"name\":\"animated\",\"type\":\"flags.5?true\"},{\"name\":\"videos\",\"type\":\"flags.6?true\"},{\"name\":\"emojis\",\"type\":\"flags.7?true\"},{\"name\":\"installed_date\",\"type\":\"flags.0?int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumbs\",\"type\":\"flags.4?Vector\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_version\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_document_id\",\"type\":\"flags.8?long\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":1846886166,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"keywords\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSet\"},{\"id\":-1885878744,\"predicate\":\"user\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"self\",\"type\":\"flags.10?true\"},{\"name\":\"contact\",\"type\":\"flags.11?true\"},{\"name\":\"mutual_contact\",\"type\":\"flags.12?true\"},{\"name\":\"deleted\",\"type\":\"flags.13?true\"},{\"name\":\"bot\",\"type\":\"flags.14?true\"},{\"name\":\"bot_chat_history\",\"type\":\"flags.15?true\"},{\"name\":\"bot_nochats\",\"type\":\"flags.16?true\"},{\"name\":\"verified\",\"type\":\"flags.17?true\"},{\"name\":\"restricted\",\"type\":\"flags.18?true\"},{\"name\":\"min\",\"type\":\"flags.20?true\"},{\"name\":\"bot_inline_geo\",\"type\":\"flags.21?true\"},{\"name\":\"support\",\"type\":\"flags.23?true\"},{\"name\":\"scam\",\"type\":\"flags.24?true\"},{\"name\":\"apply_min_photo\",\"type\":\"flags.25?true\"},{\"name\":\"fake\",\"type\":\"flags.26?true\"},{\"name\":\"bot_attach_menu\",\"type\":\"flags.27?true\"},{\"name\":\"premium\",\"type\":\"flags.28?true\"},{\"name\":\"attach_menu_enabled\",\"type\":\"flags.29?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"flags.0?long\"},{\"name\":\"first_name\",\"type\":\"flags.1?string\"},{\"name\":\"last_name\",\"type\":\"flags.2?string\"},{\"name\":\"username\",\"type\":\"flags.3?string\"},{\"name\":\"phone\",\"type\":\"flags.4?string\"},{\"name\":\"photo\",\"type\":\"flags.5?UserProfilePhoto\"},{\"name\":\"status\",\"type\":\"flags.6?UserStatus\"},{\"name\":\"bot_info_version\",\"type\":\"flags.14?int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.18?Vector\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"},{\"name\":\"emoji_status\",\"type\":\"flags.30?EmojiStatus\"},{\"name\":\"usernames\",\"type\":\"flags2.0?Vector\"}],\"type\":\"User\"},{\"id\":-1032140601,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":-1892676777,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"flags.0?long\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"description_photo\",\"type\":\"flags.4?Photo\"},{\"name\":\"description_document\",\"type\":\"flags.5?Document\"},{\"name\":\"commands\",\"type\":\"flags.2?Vector\"},{\"name\":\"menu_button\",\"type\":\"flags.3?BotMenuButton\"}],\"type\":\"BotInfo\"},{\"id\":-1560655744,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2002815875,\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":-1606526075,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2035021048,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-2049074735,\"predicate\":\"replyKeyboardMarkup\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"resize\",\"type\":\"flags.0?true\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"},{\"name\":\"persistent\",\"type\":\"flags.4?true\"},{\"name\":\"rows\",\"type\":\"Vector\"},{\"name\":\"placeholder\",\"type\":\"flags.3?string\"}],\"type\":\"ReplyMarkup\"},{\"id\":-571955892,\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-233744186,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":-1148011883,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-100378723,\"predicate\":\"messageEntityMention\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1868782349,\"predicate\":\"messageEntityHashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1827637959,\"predicate\":\"messageEntityBotCommand\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1859134776,\"predicate\":\"messageEntityUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1692693954,\"predicate\":\"messageEntityEmail\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1117713463,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-2106619040,\"predicate\":\"messageEntityItalic\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":681706865,\"predicate\":\"messageEntityCode\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1938967520,\"predicate\":\"messageEntityPre\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":1990644519,\"predicate\":\"messageEntityTextUrl\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"MessageEntity\"},{\"id\":-1877614335,\"predicate\":\"updateShortSentMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"out\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"media\",\"type\":\"flags.9?MessageMedia\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":-292807034,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":-212145112,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1566230754,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"Peer\"},{\"id\":666680316,\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-2094689180,\"predicate\":\"channel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.2?true\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"verified\",\"type\":\"flags.7?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"restricted\",\"type\":\"flags.9?true\"},{\"name\":\"signatures\",\"type\":\"flags.11?true\"},{\"name\":\"min\",\"type\":\"flags.12?true\"},{\"name\":\"scam\",\"type\":\"flags.19?true\"},{\"name\":\"has_link\",\"type\":\"flags.20?true\"},{\"name\":\"has_geo\",\"type\":\"flags.21?true\"},{\"name\":\"slowmode_enabled\",\"type\":\"flags.22?true\"},{\"name\":\"call_active\",\"type\":\"flags.23?true\"},{\"name\":\"call_not_empty\",\"type\":\"flags.24?true\"},{\"name\":\"fake\",\"type\":\"flags.25?true\"},{\"name\":\"gigagroup\",\"type\":\"flags.26?true\"},{\"name\":\"noforwards\",\"type\":\"flags.27?true\"},{\"name\":\"join_to_send\",\"type\":\"flags.28?true\"},{\"name\":\"join_request\",\"type\":\"flags.29?true\"},{\"name\":\"forum\",\"type\":\"flags.30?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"flags.13?long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"flags.6?string\"},{\"name\":\"photo\",\"type\":\"ChatPhoto\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector\"},{\"name\":\"admin_rights\",\"type\":\"flags.14?ChatAdminRights\"},{\"name\":\"banned_rights\",\"type\":\"flags.15?ChatBannedRights\"},{\"name\":\"default_banned_rights\",\"type\":\"flags.18?ChatBannedRights\"},{\"name\":\"participants_count\",\"type\":\"flags.17?int\"},{\"name\":\"usernames\",\"type\":\"flags2.0?Vector\"}],\"type\":\"Chat\"},{\"id\":399807445,\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":2131196633,\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-231385849,\"predicate\":\"channelFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_view_participants\",\"type\":\"flags.3?true\"},{\"name\":\"can_set_username\",\"type\":\"flags.6?true\"},{\"name\":\"can_set_stickers\",\"type\":\"flags.7?true\"},{\"name\":\"hidden_prehistory\",\"type\":\"flags.10?true\"},{\"name\":\"can_set_location\",\"type\":\"flags.16?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.19?true\"},{\"name\":\"can_view_stats\",\"type\":\"flags.20?true\"},{\"name\":\"blocked\",\"type\":\"flags.22?true\"},{\"name\":\"flags2\",\"type\":\"#\"},{\"name\":\"can_delete_channel\",\"type\":\"flags2.0?true\"},{\"name\":\"antispam\",\"type\":\"flags2.1?true\"},{\"name\":\"participants_hidden\",\"type\":\"flags2.2?true\"},{\"name\":\"translations_disabled\",\"type\":\"flags2.3?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"participants_count\",\"type\":\"flags.0?int\"},{\"name\":\"admins_count\",\"type\":\"flags.1?int\"},{\"name\":\"kicked_count\",\"type\":\"flags.2?int\"},{\"name\":\"banned_count\",\"type\":\"flags.2?int\"},{\"name\":\"online_count\",\"type\":\"flags.13?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chat_photo\",\"type\":\"Photo\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"exported_invite\",\"type\":\"flags.23?ExportedChatInvite\"},{\"name\":\"bot_info\",\"type\":\"Vector\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?long\"},{\"name\":\"migrated_from_max_id\",\"type\":\"flags.4?int\"},{\"name\":\"pinned_msg_id\",\"type\":\"flags.5?int\"},{\"name\":\"stickerset\",\"type\":\"flags.8?StickerSet\"},{\"name\":\"available_min_id\",\"type\":\"flags.9?int\"},{\"name\":\"folder_id\",\"type\":\"flags.11?int\"},{\"name\":\"linked_chat_id\",\"type\":\"flags.14?long\"},{\"name\":\"location\",\"type\":\"flags.15?ChannelLocation\"},{\"name\":\"slowmode_seconds\",\"type\":\"flags.17?int\"},{\"name\":\"slowmode_next_send_date\",\"type\":\"flags.18?int\"},{\"name\":\"stats_dc\",\"type\":\"flags.12?int\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"flags.21?InputGroupCall\"},{\"name\":\"ttl_period\",\"type\":\"flags.24?int\"},{\"name\":\"pending_suggestions\",\"type\":\"flags.25?Vector\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"},{\"name\":\"theme_emoticon\",\"type\":\"flags.27?string\"},{\"name\":\"requests_pending\",\"type\":\"flags.28?int\"},{\"name\":\"recent_requesters\",\"type\":\"flags.28?Vector\"},{\"name\":\"default_send_as\",\"type\":\"flags.29?Peer\"},{\"name\":\"available_reactions\",\"type\":\"flags.30?ChatReactions\"}],\"type\":\"ChatFull\"},{\"id\":182649427,\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"id\":-948520370,\"predicate\":\"messages.channelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.2?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"topics\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1781355374,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":277713951,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1666927625,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":1656358105,\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1842450928,\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1020437742,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-232346616,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1041346555,\"predicate\":\"updates.channelDifferenceEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1531132162,\"predicate\":\"updates.channelDifferenceTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"dialog\",\"type\":\"Dialog\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":543450958,\"predicate\":\"updates.channelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"final\",\"type\":\"flags.0?true\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"timeout\",\"type\":\"flags.1?int\"},{\"name\":\"new_messages\",\"type\":\"Vector\"},{\"name\":\"other_updates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1798033689,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":-847783593,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":-1072953408,\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":900251559,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"via_request\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":803602899,\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":-566281095,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1268741783,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1548400251,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-1699676497,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-541588713,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":-462696732,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"ChatParticipant\"},{\"id\":-1600962725,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":-674602590,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-519864430,\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-365344535,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":-1328445861,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2013922064,\"predicate\":\"help.termsOfService\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"popup\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"DataJSON\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":1753886890,\"predicate\":\"updateNewStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"messages.StickerSet\"}],\"type\":\"Update\"},{\"id\":196268545,\"predicate\":\"updateStickerSetsOrder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":834816008,\"predicate\":\"updateStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"}],\"type\":\"Update\"},{\"id\":-402498398,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":-2069878259,\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"gifs\",\"type\":\"Vector\"}],\"type\":\"messages.SavedGifs\"},{\"id\":-1821035490,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":864077702,\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1036876423,\"predicate\":\"inputBotInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-2000710887,\"predicate\":\"inputBotInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?InputWebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?InputWebDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1984755728,\"predicate\":\"botInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1937807902,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":295067450,\"predicate\":\"botInlineResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"url\",\"type\":\"flags.3?string\"},{\"name\":\"thumb\",\"type\":\"flags.4?WebDocument\"},{\"name\":\"content\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1803769784,\"predicate\":\"messages.botResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"next_offset\",\"type\":\"flags.1?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.2?InlineBotSwitchPM\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.BotResults\"},{\"id\":1232025500,\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":317794823,\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":1358283666,\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":928101534,\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1107622874,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1343122938,\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1571494644,\"predicate\":\"exportedMessageLink\",\"params\":[{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"html\",\"type\":\"string\"}],\"type\":\"ExportedMessageLink\"},{\"id\":1601666510,\"predicate\":\"messageFwdHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"imported\",\"type\":\"flags.7?true\"},{\"name\":\"from_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"from_name\",\"type\":\"flags.5?string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"post_author\",\"type\":\"flags.3?string\"},{\"name\":\"saved_from_peer\",\"type\":\"flags.4?Peer\"},{\"name\":\"saved_from_msg_id\",\"type\":\"flags.4?int\"},{\"name\":\"psa_type\",\"type\":\"flags.6?string\"}],\"type\":\"MessageFwdHeader\"},{\"id\":457133559,\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1799538451,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1923290508,\"predicate\":\"auth.codeTypeSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1948046307,\"predicate\":\"auth.codeTypeCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":577556219,\"predicate\":\"auth.codeTypeFlashCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":1035688326,\"predicate\":\"auth.sentCodeTypeApp\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1073693790,\"predicate\":\"auth.sentCodeTypeSms\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1398007207,\"predicate\":\"auth.sentCodeTypeCall\",\"params\":[{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1425815847,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"id\":629866245,\"predicate\":\"keyboardButtonUrl\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":901503851,\"predicate\":\"keyboardButtonCallback\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requires_password\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"KeyboardButton\"},{\"id\":-1318425559,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-59151553,\"predicate\":\"keyboardButtonRequestGeoLocation\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":90744648,\"predicate\":\"keyboardButtonSwitchInline\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"same_peer\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"query\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1218642516,\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"ReplyMarkup\"},{\"id\":911761060,\"predicate\":\"messages.botCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"has_url\",\"type\":\"flags.3?true\"},{\"name\":\"native_ui\",\"type\":\"flags.4?true\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-1177566067,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":649453030,\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":-469536605,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1768777083,\"predicate\":\"inputBotInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":1098628881,\"predicate\":\"inputBotInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-1494368259,\"predicate\":\"inputBotInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":85477117,\"predicate\":\"botInlineMessageMediaGeo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1970903652,\"predicate\":\"botInlineMessageMediaVenue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"venue_id\",\"type\":\"string\"},{\"name\":\"venue_type\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":416402882,\"predicate\":\"botInlineMessageMediaContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"vcard\",\"type\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1462213465,\"predicate\":\"inputBotInlineResultPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"InputPhoto\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":-459324,\"predicate\":\"inputBotInlineResultDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"description\",\"type\":\"flags.2?string\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":400266251,\"predicate\":\"botInlineMediaResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?Photo\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"title\",\"type\":\"flags.2?string\"},{\"name\":\"description\",\"type\":\"flags.3?string\"},{\"name\":\"send_message\",\"type\":\"BotInlineMessage\"}],\"type\":\"BotInlineResult\"},{\"id\":-1995686519,\"predicate\":\"inputBotInlineMessageID\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":1763610706,\"predicate\":\"updateInlineBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"msg_id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"chat_instance\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"game_short_name\",\"type\":\"flags.1?string\"}],\"type\":\"Update\"},{\"id\":1008755359,\"predicate\":\"inlineBotSwitchPM\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"InlineBotSwitchPM\"},{\"id\":863093588,\"predicate\":\"messages.peerDialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-305282981,\"predicate\":\"topPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"rating\",\"type\":\"double\"}],\"type\":\"TopPeer\"},{\"id\":-1419371685,\"predicate\":\"topPeerCategoryBotsPM\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":344356834,\"predicate\":\"topPeerCategoryBotsInline\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":104314861,\"predicate\":\"topPeerCategoryCorrespondents\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-1122524854,\"predicate\":\"topPeerCategoryGroups\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":371037736,\"predicate\":\"topPeerCategoryChannels\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-75283823,\"predicate\":\"topPeerCategoryPeers\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":-567906571,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":1891070632,\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"contacts.TopPeers\"},{\"id\":-595914432,\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"MessageEntity\"},{\"id\":546203849,\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":975236280,\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1218471511,\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":457829485,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":453805082,\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":-40996577,\"predicate\":\"draftMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"DraftMessage\"},{\"id\":-1615153660,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-958657434,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1103615738,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"},{\"name\":\"unread\",\"type\":\"Vector\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1461528386,\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":186120336,\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":-1999405994,\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"dates\",\"type\":\"Vector\"}],\"type\":\"messages.RecentStickers\"},{\"id\":-1706939360,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":1338747336,\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":946083368,\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":904138920,\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":1678812626,\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1574314746,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":861169551,\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":-440664550,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":-78455655,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"spoiler\",\"type\":\"flags.1?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":872932635,\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1361650766,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":-1744710921,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":1251549527,\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":70813275,\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":-1107729093,\"predicate\":\"game\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"}],\"type\":\"Game\"},{\"id\":1336154098,\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":1262639204,\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":-38694904,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":-750828557,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":53231223,\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":-1020139510,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":1358175439,\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1834538890,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1940093419,\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":-1707344487,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.HighScores\"},{\"id\":1258196845,\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":791390623,\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1663561404,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-599948721,\"predicate\":\"textEmpty\",\"params\":[],\"type\":\"RichText\"},{\"id\":1950782688,\"predicate\":\"textPlain\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":1730456516,\"predicate\":\"textBold\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-653089380,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1054465340,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-1678197867,\"predicate\":\"textStrike\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1816074681,\"predicate\":\"textFixed\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":1009288385,\"predicate\":\"textUrl\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"}],\"type\":\"RichText\"},{\"id\":-564523562,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2120376535,\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector\"}],\"type\":\"RichText\"},{\"id\":324435594,\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":1890305021,\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1879401953,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1162877472,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":-1076861716,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-248793375,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1182402406,\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1066346178,\"predicate\":\"pageBlockPreformatted\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"language\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":1216809369,\"predicate\":\"pageBlockFooter\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-618614392,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":-837994576,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":-454524911,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":641563686,\"predicate\":\"pageBlockBlockquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1329878739,\"predicate\":\"pageBlockPullquote\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"caption\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":391759200,\"predicate\":\"pageBlockPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photo_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"},{\"name\":\"url\",\"type\":\"flags.0?string\"},{\"name\":\"webpage_id\",\"type\":\"flags.0?long\"}],\"type\":\"PageBlock\"},{\"id\":2089805750,\"predicate\":\"pageBlockVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autoplay\",\"type\":\"flags.0?true\"},{\"name\":\"loop\",\"type\":\"flags.1?true\"},{\"name\":\"video_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":972174080,\"predicate\":\"pageBlockCover\",\"params\":[{\"name\":\"cover\",\"type\":\"PageBlock\"}],\"type\":\"PageBlock\"},{\"id\":-1468953147,\"predicate\":\"pageBlockEmbed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"full_width\",\"type\":\"flags.0?true\"},{\"name\":\"allow_scrolling\",\"type\":\"flags.3?true\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"html\",\"type\":\"flags.2?string\"},{\"name\":\"poster_photo_id\",\"type\":\"flags.4?long\"},{\"name\":\"w\",\"type\":\"flags.5?int\"},{\"name\":\"h\",\"type\":\"flags.5?int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-229005301,\"predicate\":\"pageBlockEmbedPost\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"author_photo_id\",\"type\":\"long\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1705048653,\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":52401552,\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1930545681,\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":-88417185,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1030105979,\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-580219064,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":-2048646399,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-527056480,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1471006352,\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":-84416311,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1852826908,\"predicate\":\"updateDialogPinned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-99664734,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":2104790276,\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":-2095595325,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-1684914010,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-886477832,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":1048946971,\"predicate\":\"invoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"test\",\"type\":\"flags.0?true\"},{\"name\":\"name_requested\",\"type\":\"flags.1?true\"},{\"name\":\"phone_requested\",\"type\":\"flags.2?true\"},{\"name\":\"email_requested\",\"type\":\"flags.3?true\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.4?true\"},{\"name\":\"flexible\",\"type\":\"flags.5?true\"},{\"name\":\"phone_to_provider\",\"type\":\"flags.6?true\"},{\"name\":\"email_to_provider\",\"type\":\"flags.7?true\"},{\"name\":\"recurring\",\"type\":\"flags.9?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"},{\"name\":\"max_tip_amount\",\"type\":\"flags.8?long\"},{\"name\":\"suggested_tip_amounts\",\"type\":\"flags.8?Vector\"},{\"name\":\"recurring_terms_url\",\"type\":\"flags.9?string\"}],\"type\":\"Invoice\"},{\"id\":-1900697899,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"start_param\",\"type\":\"flags.1?string\"},{\"name\":\"extended_media\",\"type\":\"flags.2?InputMedia\"}],\"type\":\"InputMedia\"},{\"id\":-368917890,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"id\":-1892568281,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recurring_init\",\"type\":\"flags.2?true\"},{\"name\":\"recurring_used\",\"type\":\"flags.3?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"charge\",\"type\":\"PaymentCharge\"}],\"type\":\"MessageAction\"},{\"id\":-156940077,\"predicate\":\"messageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"receipt_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"},{\"name\":\"extended_media\",\"type\":\"flags.4?MessageExtendedMedia\"}],\"type\":\"MessageMedia\"},{\"id\":512535275,\"predicate\":\"postAddress\",\"params\":[{\"name\":\"street_line1\",\"type\":\"string\"},{\"name\":\"street_line2\",\"type\":\"string\"},{\"name\":\"city\",\"type\":\"string\"},{\"name\":\"state\",\"type\":\"string\"},{\"name\":\"country_iso2\",\"type\":\"string\"},{\"name\":\"post_code\",\"type\":\"string\"}],\"type\":\"PostAddress\"},{\"id\":-1868808300,\"predicate\":\"paymentRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"flags.0?string\"},{\"name\":\"phone\",\"type\":\"flags.1?string\"},{\"name\":\"email\",\"type\":\"flags.2?string\"},{\"name\":\"shipping_address\",\"type\":\"flags.3?PostAddress\"}],\"type\":\"PaymentRequestedInfo\"},{\"id\":-1344716869,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1776926890,\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recurring_init\",\"type\":\"flags.2?true\"},{\"name\":\"recurring_used\",\"type\":\"flags.3?true\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"invoice_slug\",\"type\":\"flags.0?string\"}],\"type\":\"MessageAction\"},{\"id\":-842892769,\"predicate\":\"paymentSavedCredentialsCard\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentSavedCredentials\"},{\"id\":475467473,\"predicate\":\"webDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":-1678949555,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"InputWebDocument\"},{\"id\":-1036396922,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":568808380,\"predicate\":\"upload.webFile\",\"params\":[{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"file_type\",\"type\":\"storage.FileType\"},{\"name\":\"mtime\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.WebFile\"},{\"id\":-1610250415,\"predicate\":\"payments.paymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_save_credentials\",\"type\":\"flags.2?true\"},{\"name\":\"password_missing\",\"type\":\"flags.3?true\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.5?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"additional_methods\",\"type\":\"flags.6?Vector\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentForm\"},{\"id\":-784000893,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":1314881805,\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1891958275,\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"provider_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.2?WebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping\",\"type\":\"flags.1?ShippingOption\"},{\"name\":\"tip_amount\",\"type\":\"flags.3?long\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"credentials_title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-74456004,\"predicate\":\"payments.savedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"has_saved_credentials\",\"type\":\"flags.1?true\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"}],\"type\":\"payments.SavedInfo\"},{\"id\":-1056001329,\"predicate\":\"inputPaymentCredentialsSaved\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"tmp_password\",\"type\":\"bytes\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":873977640,\"predicate\":\"inputPaymentCredentials\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-614138572,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":-1239335713,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector\"}],\"type\":\"ShippingOption\"},{\"id\":-1246823043,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":-1934976362,\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-6249322,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"InputStickerSetItem\"},{\"id\":-1425052898,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":506920429,\"predicate\":\"inputPhoneCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPhoneCall\"},{\"id\":1399245077,\"predicate\":\"phoneCallEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"PhoneCall\"},{\"id\":-987599081,\"predicate\":\"phoneCallWaiting\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":347139340,\"predicate\":\"phoneCallRequested\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":912311057,\"predicate\":\"phoneCallAccepted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":-1770029977,\"predicate\":\"phoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"p2p_allowed\",\"type\":\"flags.5?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"participant_id\",\"type\":\"long\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector\"},{\"name\":\"start_date\",\"type\":\"int\"}],\"type\":\"PhoneCall\"},{\"id\":1355435489,\"predicate\":\"phoneCallDiscarded\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"need_rating\",\"type\":\"flags.2?true\"},{\"name\":\"need_debug\",\"type\":\"flags.3?true\"},{\"name\":\"video\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"PhoneCall\"},{\"id\":-1665063993,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tcp\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"id\":-58224696,\"predicate\":\"phoneCallProtocol\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"udp_p2p\",\"type\":\"flags.0?true\"},{\"name\":\"udp_reflector\",\"type\":\"flags.1?true\"},{\"name\":\"min_layer\",\"type\":\"int\"},{\"name\":\"max_layer\",\"type\":\"int\"},{\"name\":\"library_versions\",\"type\":\"Vector\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":-326966976,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.PhoneCall\"},{\"id\":-2134272152,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":-2132731265,\"predicate\":\"messageActionPhoneCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call_id\",\"type\":\"long\"},{\"name\":\"reason\",\"type\":\"flags.0?PhoneCallDiscardReason\"},{\"name\":\"duration\",\"type\":\"flags.1?int\"}],\"type\":\"MessageAction\"},{\"id\":2054952868,\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1253451181,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1997373508,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":608050278,\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":-242427324,\"predicate\":\"upload.fileCdnRedirect\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"encryption_key\",\"type\":\"bytes\"},{\"name\":\"encryption_iv\",\"type\":\"bytes\"},{\"name\":\"file_hashes\",\"type\":\"Vector\"}],\"type\":\"upload.File\"},{\"id\":-290921362,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1449145777,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":-914167110,\"predicate\":\"cdnPublicKey\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"CdnPublicKey\"},{\"id\":1462101002,\"predicate\":\"cdnConfig\",\"params\":[{\"name\":\"public_keys\",\"type\":\"Vector\"}],\"type\":\"CdnConfig\"},{\"id\":-283684427,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":-892239370,\"predicate\":\"langPackString\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":1816636575,\"predicate\":\"langPackStringPluralized\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"zero_value\",\"type\":\"flags.0?string\"},{\"name\":\"one_value\",\"type\":\"flags.1?string\"},{\"name\":\"two_value\",\"type\":\"flags.2?string\"},{\"name\":\"few_value\",\"type\":\"flags.3?string\"},{\"name\":\"many_value\",\"type\":\"flags.4?string\"},{\"name\":\"other_value\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":695856818,\"predicate\":\"langPackStringDeleted\",\"params\":[{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"LangPackString\"},{\"id\":-209337866,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector\"}],\"type\":\"LangPackDifference\"},{\"id\":-288727837,\"predicate\":\"langPackLanguage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"official\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.2?true\"},{\"name\":\"beta\",\"type\":\"flags.3?true\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"native_name\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"base_lang_code\",\"type\":\"flags.1?string\"},{\"name\":\"plural_code\",\"type\":\"string\"},{\"name\":\"strings_count\",\"type\":\"int\"},{\"name\":\"translated_count\",\"type\":\"int\"},{\"name\":\"translations_url\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":1180041828,\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1442983757,\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":885242707,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?long\"},{\"name\":\"promoted_by\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":1844969806,\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"kicked_by\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":338142689,\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":106343499,\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-421545947,\"predicate\":\"channelAdminLogEventActionChangeTitle\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1427671598,\"predicate\":\"channelAdminLogEventActionChangeAbout\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1783299128,\"predicate\":\"channelAdminLogEventActionChangeUsername\",\"params\":[{\"name\":\"prev_value\",\"type\":\"string\"},{\"name\":\"new_value\",\"type\":\"string\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1129042607,\"predicate\":\"channelAdminLogEventActionChangePhoto\",\"params\":[{\"name\":\"prev_photo\",\"type\":\"Photo\"},{\"name\":\"new_photo\",\"type\":\"Photo\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":460916654,\"predicate\":\"channelAdminLogEventActionToggleInvites\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":648939889,\"predicate\":\"channelAdminLogEventActionToggleSignatures\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-370660328,\"predicate\":\"channelAdminLogEventActionUpdatePinned\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1889215493,\"predicate\":\"channelAdminLogEventActionEditMessage\",\"params\":[{\"name\":\"prev_message\",\"type\":\"Message\"},{\"name\":\"new_message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1121994683,\"predicate\":\"channelAdminLogEventActionDeleteMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":405815507,\"predicate\":\"channelAdminLogEventActionParticipantJoin\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-124291086,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-484690728,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-422036098,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-714643696,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":531458253,\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":-309659827,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-368018716,\"predicate\":\"channelAdminLogEventsFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join\",\"type\":\"flags.0?true\"},{\"name\":\"leave\",\"type\":\"flags.1?true\"},{\"name\":\"invite\",\"type\":\"flags.2?true\"},{\"name\":\"ban\",\"type\":\"flags.3?true\"},{\"name\":\"unban\",\"type\":\"flags.4?true\"},{\"name\":\"kick\",\"type\":\"flags.5?true\"},{\"name\":\"unkick\",\"type\":\"flags.6?true\"},{\"name\":\"promote\",\"type\":\"flags.7?true\"},{\"name\":\"demote\",\"type\":\"flags.8?true\"},{\"name\":\"info\",\"type\":\"flags.9?true\"},{\"name\":\"settings\",\"type\":\"flags.10?true\"},{\"name\":\"pinned\",\"type\":\"flags.11?true\"},{\"name\":\"edit\",\"type\":\"flags.12?true\"},{\"name\":\"delete\",\"type\":\"flags.13?true\"},{\"name\":\"group_call\",\"type\":\"flags.14?true\"},{\"name\":\"invites\",\"type\":\"flags.15?true\"},{\"name\":\"send\",\"type\":\"flags.16?true\"},{\"name\":\"forums\",\"type\":\"flags.17?true\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":511092620,\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-2143067670,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1558266229,\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":1200788123,\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1634752813,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":750063767,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"stickers\",\"type\":\"Vector\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-451831443,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-366410403,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1040652646,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1887741886,\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":-1312568665,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-85549226,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":178373535,\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":-419271411,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-530392189,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1304443240,\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1599903217,\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1759532989,\"predicate\":\"inputMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"stopped\",\"type\":\"flags.0?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.2?int\"},{\"name\":\"period\",\"type\":\"flags.1?int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.3?int\"}],\"type\":\"InputMedia\"},{\"id\":-1186937242,\"predicate\":\"messageMediaGeoLive\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"heading\",\"type\":\"flags.0?int\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"proximity_notification_radius\",\"type\":\"flags.1?int\"}],\"type\":\"MessageMedia\"},{\"id\":1189204285,\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1188296222,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1294306862,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"RecentMeUrl\"},{\"id\":-347535331,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":-1140172836,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":235081943,\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-266911767,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":1951620897,\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":482797855,\"predicate\":\"inputSingleMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.0?Vector\"}],\"type\":\"InputSingleMedia\"},{\"id\":-1493633966,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"domain\",\"type\":\"string\"},{\"name\":\"browser\",\"type\":\"string\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"date_created\",\"type\":\"int\"},{\"name\":\"date_active\",\"type\":\"int\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"region\",\"type\":\"string\"}],\"type\":\"WebAuthorization\"},{\"id\":-313079300,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":-1502174430,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-1160215659,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":-2037963464,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":-1687559349,\"predicate\":\"messageEntityPhone\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1280209983,\"predicate\":\"messageEntityCashtag\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1410748418,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-55902537,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":-445792507,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":223655517,\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":-1963942446,\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"sets\",\"type\":\"Vector\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-207944868,\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":-104284986,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector\"}],\"type\":\"WebDocument\"},{\"id\":1968737087,\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":-483352705,\"predicate\":\"help.termsOfServiceUpdateEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":686618977,\"predicate\":\"help.termsOfServiceUpdate\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"terms_of_service\",\"type\":\"help.TermsOfService\"}],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":859091184,\"predicate\":\"inputSecureFileUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"md5_checksum\",\"type\":\"string\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"InputSecureFile\"},{\"id\":1399317950,\"predicate\":\"inputSecureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputSecureFile\"},{\"id\":-876089816,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":1679398724,\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":2097791614,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":-1964327229,\"predicate\":\"secureData\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureData\"},{\"id\":2103482845,\"predicate\":\"securePlainPhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":569137759,\"predicate\":\"securePlainEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"SecurePlainData\"},{\"id\":-1658158621,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":1034709504,\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":115615172,\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1596951477,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1717268701,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-874308058,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-63531698,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1995211763,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1954007928,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1713143702,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-368907213,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1289704741,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":-1908627474,\"predicate\":\"secureValueTypeEmail\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":411017418,\"predicate\":\"secureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?SecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?SecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?SecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":-618540889,\"predicate\":\"inputSecureValue\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data\",\"type\":\"flags.0?SecureData\"},{\"name\":\"front_side\",\"type\":\"flags.1?InputSecureFile\"},{\"name\":\"reverse_side\",\"type\":\"flags.2?InputSecureFile\"},{\"name\":\"selfie\",\"type\":\"flags.3?InputSecureFile\"},{\"name\":\"translation\",\"type\":\"flags.6?Vector\"},{\"name\":\"files\",\"type\":\"flags.4?Vector\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":-316748368,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":-391902247,\"predicate\":\"secureValueErrorData\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"data_hash\",\"type\":\"bytes\"},{\"name\":\"field\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":12467706,\"predicate\":\"secureValueErrorFrontSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2037765467,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-449327402,\"predicate\":\"secureValueErrorSelfie\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2054162547,\"predicate\":\"secureValueErrorFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":1717706985,\"predicate\":\"secureValueErrorFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":871426631,\"predicate\":\"secureCredentialsEncrypted\",\"params\":[{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureCredentialsEncrypted\"},{\"id\":-1389486888,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector\"},{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"errors\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-2128640689,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"id\":455635795,\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":-648257196,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":1722786150,\"predicate\":\"help.deepLinkInfoEmpty\",\"params\":[],\"type\":\"help.DeepLinkInfo\"},{\"id\":1783556146,\"predicate\":\"help.deepLinkInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"update_app\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":289586518,\"predicate\":\"savedPhoneContact\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"SavedContact\"},{\"id\":1304052993,\"predicate\":\"account.takeout\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"account.Takeout\"},{\"id\":700340377,\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"id\":-513517117,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":-253500010,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":-1625153079,\"predicate\":\"inputWebFileGeoPointLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputWebFileLocation\"},{\"id\":-1255369827,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":-1685456582,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-732254058,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":4883767,\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-1141711456,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":-2042159726,\"predicate\":\"securePasswordKdfAlgoSHA512\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":354925740,\"predicate\":\"secureSecretSettings\",\"params\":[{\"name\":\"secure_algo\",\"type\":\"SecurePasswordKdfAlgo\"},{\"name\":\"secure_secret\",\"type\":\"bytes\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureSecretSettings\"},{\"id\":982592842,\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":-1736378792,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-763367294,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":-2036501105,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-1592506512,\"predicate\":\"secureValueErrorTranslationFile\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":878931416,\"predicate\":\"secureValueErrorTranslationFiles\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"Vector\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":-2103600678,\"predicate\":\"secureRequiredType\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"native_names\",\"type\":\"flags.0?true\"},{\"name\":\"selfie_required\",\"type\":\"flags.1?true\"},{\"name\":\"translation_required\",\"type\":\"flags.2?true\"},{\"name\":\"type\",\"type\":\"SecureValueType\"}],\"type\":\"SecureRequiredType\"},{\"id\":41187252,\"predicate\":\"secureRequiredTypeOneOf\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"SecureRequiredType\"},{\"id\":-1078332329,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":-1600596305,\"predicate\":\"help.passportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"countries_langs\",\"type\":\"DataJSON\"}],\"type\":\"help.PassportConfig\"},{\"id\":488313413,\"predicate\":\"inputAppEvent\",\"params\":[{\"name\":\"time\",\"type\":\"double\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"peer\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"JSONValue\"}],\"type\":\"InputAppEvent\"},{\"id\":-1059185703,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":1064139624,\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":-952869270,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":736157604,\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":-1222740358,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":-146520221,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1715350371,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector\"}],\"type\":\"JSONValue\"},{\"id\":-1311015810,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":-703403793,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":-311786236,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":-939827711,\"predicate\":\"textSuperscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":55281185,\"predicate\":\"textMarked\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":483104362,\"predicate\":\"textPhone\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":136105807,\"predicate\":\"textImage\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"}],\"type\":\"RichText\"},{\"id\":504660880,\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":878078826,\"predicate\":\"pageTableCell\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"header\",\"type\":\"flags.0?true\"},{\"name\":\"align_center\",\"type\":\"flags.3?true\"},{\"name\":\"align_right\",\"type\":\"flags.4?true\"},{\"name\":\"valign_middle\",\"type\":\"flags.5?true\"},{\"name\":\"valign_bottom\",\"type\":\"flags.6?true\"},{\"name\":\"text\",\"type\":\"flags.7?RichText\"},{\"name\":\"colspan\",\"type\":\"flags.1?int\"},{\"name\":\"rowspan\",\"type\":\"flags.2?int\"}],\"type\":\"PageTableCell\"},{\"id\":-524237339,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector\"}],\"type\":\"PageTableRow\"},{\"id\":-1085412734,\"predicate\":\"pageBlockTable\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bordered\",\"type\":\"flags.0?true\"},{\"name\":\"striped\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"rows\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1869903447,\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":-1188055347,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":635466748,\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListItem\"},{\"id\":1577484359,\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1730311882,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"}],\"type\":\"PageListOrderedItem\"},{\"id\":-1702174239,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":1987480557,\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":-1282352120,\"predicate\":\"pageRelatedArticle\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"webpage_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"description\",\"type\":\"flags.1?string\"},{\"name\":\"photo_id\",\"type\":\"flags.2?long\"},{\"name\":\"author\",\"type\":\"flags.3?string\"},{\"name\":\"published_date\",\"type\":\"flags.4?int\"}],\"type\":\"PageRelatedArticle\"},{\"id\":370236054,\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector\"}],\"type\":\"PageBlock\"},{\"id\":-1538310410,\"predicate\":\"pageBlockMap\",\"params\":[{\"name\":\"geo\",\"type\":\"GeoPoint\"},{\"name\":\"zoom\",\"type\":\"int\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":-1738178803,\"predicate\":\"page\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"part\",\"type\":\"flags.0?true\"},{\"name\":\"rtl\",\"type\":\"flags.1?true\"},{\"name\":\"v2\",\"type\":\"flags.2?true\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector\"},{\"name\":\"photos\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":-610373422,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":961092808,\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":894777186,\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":-1945767479,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":-206688531,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":32192344,\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":-202219658,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":-1398708869,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":1823064809,\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":-2032041631,\"predicate\":\"poll\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"closed\",\"type\":\"flags.0?true\"},{\"name\":\"public_voters\",\"type\":\"flags.1?true\"},{\"name\":\"multiple_choice\",\"type\":\"flags.2?true\"},{\"name\":\"quiz\",\"type\":\"flags.3?true\"},{\"name\":\"question\",\"type\":\"string\"},{\"name\":\"answers\",\"type\":\"Vector\"},{\"name\":\"close_period\",\"type\":\"flags.4?int\"},{\"name\":\"close_date\",\"type\":\"flags.5?int\"}],\"type\":\"Poll\"},{\"id\":997055186,\"predicate\":\"pollAnswerVoters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen\",\"type\":\"flags.0?true\"},{\"name\":\"correct\",\"type\":\"flags.1?true\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"voters\",\"type\":\"int\"}],\"type\":\"PollAnswerVoters\"},{\"id\":-591909213,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector\"}],\"type\":\"PollResults\"},{\"id\":261416433,\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"InputMedia\"},{\"id\":1272375192,\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":-264117680,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":1202287072,\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":-525288402,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":1605510357,\"predicate\":\"chatAdminRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"change_info\",\"type\":\"flags.0?true\"},{\"name\":\"post_messages\",\"type\":\"flags.1?true\"},{\"name\":\"edit_messages\",\"type\":\"flags.2?true\"},{\"name\":\"delete_messages\",\"type\":\"flags.3?true\"},{\"name\":\"ban_users\",\"type\":\"flags.4?true\"},{\"name\":\"invite_users\",\"type\":\"flags.5?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.7?true\"},{\"name\":\"add_admins\",\"type\":\"flags.9?true\"},{\"name\":\"anonymous\",\"type\":\"flags.10?true\"},{\"name\":\"manage_call\",\"type\":\"flags.11?true\"},{\"name\":\"other\",\"type\":\"flags.12?true\"},{\"name\":\"manage_topics\",\"type\":\"flags.13?true\"}],\"type\":\"ChatAdminRights\"},{\"id\":-1626209256,\"predicate\":\"chatBannedRights\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"view_messages\",\"type\":\"flags.0?true\"},{\"name\":\"send_messages\",\"type\":\"flags.1?true\"},{\"name\":\"send_media\",\"type\":\"flags.2?true\"},{\"name\":\"send_stickers\",\"type\":\"flags.3?true\"},{\"name\":\"send_gifs\",\"type\":\"flags.4?true\"},{\"name\":\"send_games\",\"type\":\"flags.5?true\"},{\"name\":\"send_inline\",\"type\":\"flags.6?true\"},{\"name\":\"embed_links\",\"type\":\"flags.7?true\"},{\"name\":\"send_polls\",\"type\":\"flags.8?true\"},{\"name\":\"change_info\",\"type\":\"flags.10?true\"},{\"name\":\"invite_users\",\"type\":\"flags.15?true\"},{\"name\":\"pin_messages\",\"type\":\"flags.17?true\"},{\"name\":\"manage_topics\",\"type\":\"flags.18?true\"},{\"name\":\"send_photos\",\"type\":\"flags.19?true\"},{\"name\":\"send_videos\",\"type\":\"flags.20?true\"},{\"name\":\"send_roundvideos\",\"type\":\"flags.21?true\"},{\"name\":\"send_audios\",\"type\":\"flags.22?true\"},{\"name\":\"send_voices\",\"type\":\"flags.23?true\"},{\"name\":\"send_docs\",\"type\":\"flags.24?true\"},{\"name\":\"send_plain\",\"type\":\"flags.25?true\"},{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":1421875280,\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-433014407,\"predicate\":\"inputWallPaper\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":1913199744,\"predicate\":\"inputWallPaperSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputWallPaper\"},{\"id\":-1150621555,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":771095562,\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1895328189,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":471437699,\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":-842824308,\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"account.WallPapers\"},{\"id\":-1390068360,\"predicate\":\"codeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_flashcall\",\"type\":\"flags.0?true\"},{\"name\":\"current_number\",\"type\":\"flags.1?true\"},{\"name\":\"allow_app_hash\",\"type\":\"flags.4?true\"},{\"name\":\"allow_missed_call\",\"type\":\"flags.5?true\"},{\"name\":\"allow_firebase\",\"type\":\"flags.7?true\"},{\"name\":\"logout_tokens\",\"type\":\"flags.6?Vector\"},{\"name\":\"token\",\"type\":\"flags.8?string\"},{\"name\":\"app_sandbox\",\"type\":\"flags.8?Bool\"}],\"type\":\"CodeSettings\"},{\"id\":499236004,\"predicate\":\"wallPaperSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"blur\",\"type\":\"flags.1?true\"},{\"name\":\"motion\",\"type\":\"flags.2?true\"},{\"name\":\"background_color\",\"type\":\"flags.0?int\"},{\"name\":\"second_background_color\",\"type\":\"flags.4?int\"},{\"name\":\"third_background_color\",\"type\":\"flags.5?int\"},{\"name\":\"fourth_background_color\",\"type\":\"flags.6?int\"},{\"name\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"}],\"type\":\"WallPaperSettings\"},{\"id\":-1896171181,\"predicate\":\"autoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"video_preload_large\",\"type\":\"flags.1?true\"},{\"name\":\"audio_preload_next\",\"type\":\"flags.2?true\"},{\"name\":\"phonecalls_less_data\",\"type\":\"flags.3?true\"},{\"name\":\"photo_size_max\",\"type\":\"int\"},{\"name\":\"video_size_max\",\"type\":\"long\"},{\"name\":\"file_size_max\",\"type\":\"long\"},{\"name\":\"video_upload_maxbitrate\",\"type\":\"int\"}],\"type\":\"AutoDownloadSettings\"},{\"id\":1674235686,\"predicate\":\"account.autoDownloadSettings\",\"params\":[{\"name\":\"low\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"medium\",\"type\":\"AutoDownloadSettings\"},{\"name\":\"high\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"account.AutoDownloadSettings\"},{\"id\":-709641735,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":594408994,\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiKeyword\"},{\"id\":1556570557,\"predicate\":\"emojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"keywords\",\"type\":\"Vector\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":-1519029347,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":-1275374751,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":-1529000952,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1777096355,\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1461304012,\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-1777000467,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1075322878,\"predicate\":\"inputPhotoFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"thumb_size\",\"type\":\"string\"}],\"type\":\"InputFileLocation\"},{\"id\":-667654413,\"predicate\":\"inputPhotoLegacyFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"file_reference\",\"type\":\"bytes\"},{\"name\":\"volume_id\",\"type\":\"long\"},{\"name\":\"local_id\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":925204121,\"predicate\":\"inputPeerPhotoFileLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":-1652231205,\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb_version\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":-11252123,\"predicate\":\"folder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"autofill_new_broadcasts\",\"type\":\"flags.0?true\"},{\"name\":\"autofill_public_groups\",\"type\":\"flags.1?true\"},{\"name\":\"autofill_new_correspondents\",\"type\":\"flags.2?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.3?ChatPhoto\"}],\"type\":\"Folder\"},{\"id\":1908216652,\"predicate\":\"dialogFolder\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.2?true\"},{\"name\":\"folder\",\"type\":\"Folder\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"unread_muted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_peers_count\",\"type\":\"int\"},{\"name\":\"unread_muted_messages_count\",\"type\":\"int\"},{\"name\":\"unread_unmuted_messages_count\",\"type\":\"int\"}],\"type\":\"Dialog\"},{\"id\":1684014375,\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":1363483106,\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":-70073706,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":-373643672,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":422972864,\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":497305826,\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":1536380829,\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":-1468331492,\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":-1121318848,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":55761658,\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":-778378131,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1472172887,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":-68239120,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":84703944,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"long\"},{\"name\":\"new_value\",\"type\":\"long\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-398136321,\"predicate\":\"messages.searchCounter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.1?true\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.SearchCounter\"},{\"id\":280464681,\"predicate\":\"keyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"}],\"type\":\"KeyboardButton\"},{\"id\":-802258988,\"predicate\":\"inputKeyboardButtonUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"fwd_text\",\"type\":\"flags.1?string\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":-1831650802,\"predicate\":\"urlAuthResultRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"request_write_access\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"User\"},{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1886646706,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1445536993,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":-2079962673,\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":-380694650,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"InputPrivacyRule\"},{\"id\":1796427406,\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":1103656293,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector\"}],\"type\":\"PrivacyRule\"},{\"id\":-1672577397,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1090087980,\"predicate\":\"messageEntityStrike\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":34469328,\"predicate\":\"messageEntityBlockquote\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":1786671974,\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":-1078612597,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":547062491,\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":-901375139,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":-1263546448,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":241923758,\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-606798099,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":1401984889,\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1148485274,\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":-666824391,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":42402760,\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":967122427,\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":-1870238482,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-797791052,\"predicate\":\"restrictionReason\",\"params\":[{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"RestrictionReason\"},{\"id\":1012306921,\"predicate\":\"inputTheme\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputTheme\"},{\"id\":-175567375,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":-1609668650,\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"for_chat\",\"type\":\"flags.5?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?Document\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"},{\"name\":\"emoticon\",\"type\":\"flags.6?string\"},{\"name\":\"installs_count\",\"type\":\"flags.4?int\"}],\"type\":\"Theme\"},{\"id\":-199313886,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":-1707242387,\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"themes\",\"type\":\"Vector\"}],\"type\":\"account.Themes\"},{\"id\":-2112423005,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":-786326563,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1124062251,\"predicate\":\"privacyKeyAddedByPhone\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-2027964103,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1448076945,\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":1654593920,\"predicate\":\"auth.loginToken\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":110008598,\"predicate\":\"auth.loginTokenMigrateTo\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":957176926,\"predicate\":\"auth.loginTokenSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.LoginToken\"},{\"id\":1474462241,\"predicate\":\"account.contentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"},{\"name\":\"sensitive_can_change\",\"type\":\"flags.1?true\"}],\"type\":\"account.ContentSettings\"},{\"id\":-1456996667,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.InactiveChats\"},{\"id\":-1012849566,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-69724536,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1212997976,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1834973166,\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1527845466,\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":-1770371538,\"predicate\":\"inputWallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"InputWallPaper\"},{\"id\":-528465642,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"name\":\"settings\",\"type\":\"flags.2?WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":-1881255857,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message_colors_animated\",\"type\":\"flags.2?true\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"outbox_accent_color\",\"type\":\"flags.3?int\"},{\"name\":\"message_colors\",\"type\":\"flags.0?Vector\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":-94849324,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message_colors_animated\",\"type\":\"flags.2?true\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"outbox_accent_color\",\"type\":\"flags.3?int\"},{\"name\":\"message_colors\",\"type\":\"flags.0?Vector\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":1421174295,\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":274961865,\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":886196148,\"predicate\":\"messageUserVote\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":1017491692,\"predicate\":\"messageUserVoteInputOption\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":-1973033641,\"predicate\":\"messageUserVoteMultiple\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"options\",\"type\":\"Vector\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":136574537,\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":-1144565411,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1981704948,\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-177732982,\"predicate\":\"bankCardOpenUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"BankCardOpenUrl\"},{\"id\":1042605427,\"predicate\":\"payments.bankCardData\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"open_urls\",\"type\":\"Vector\"}],\"type\":\"payments.BankCardData\"},{\"id\":-118740917,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":1949890536,\"predicate\":\"dialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"non_contacts\",\"type\":\"flags.1?true\"},{\"name\":\"groups\",\"type\":\"flags.2?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.3?true\"},{\"name\":\"bots\",\"type\":\"flags.4?true\"},{\"name\":\"exclude_muted\",\"type\":\"flags.11?true\"},{\"name\":\"exclude_read\",\"type\":\"flags.12?true\"},{\"name\":\"exclude_archived\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"emoticon\",\"type\":\"flags.25?string\"},{\"name\":\"pinned_peers\",\"type\":\"Vector\"},{\"name\":\"include_peers\",\"type\":\"Vector\"},{\"name\":\"exclude_peers\",\"type\":\"Vector\"}],\"type\":\"DialogFilter\"},{\"id\":2004110666,\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":654302845,\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":-1512627963,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":889491791,\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":-1237848657,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":-884757282,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":-875679776,\"predicate\":\"statsPercentValue\",\"params\":[{\"name\":\"part\",\"type\":\"double\"},{\"name\":\"total\",\"type\":\"double\"}],\"type\":\"StatsPercentValue\"},{\"id\":1244130093,\"predicate\":\"statsGraphAsync\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1092839390,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":-1901828938,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":-1387279939,\"predicate\":\"messageInteractionCounters\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"MessageInteractionCounters\"},{\"id\":-1107852396,\"predicate\":\"stats.broadcastStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"followers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"views_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"shares_per_post\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"enabled_notifications\",\"type\":\"StatsPercentValue\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"followers_graph\",\"type\":\"StatsGraph\"},{\"name\":\"mute_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"iv_interactions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"views_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_followers_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"recent_message_interactions\",\"type\":\"Vector\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":-428884101,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":1065280907,\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":-427863538,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":-1728664459,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":-1942390465,\"predicate\":\"help.promoData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"proxy\",\"type\":\"flags.0?true\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":-567037804,\"predicate\":\"videoSize\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"video_start_ts\",\"type\":\"flags.0?double\"}],\"type\":\"VideoSize\"},{\"id\":643940105,\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":1634294960,\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":-1660637285,\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":-682079097,\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":1398765469,\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":-276825834,\"predicate\":\"stats.megagroupStats\",\"params\":[{\"name\":\"period\",\"type\":\"StatsDateRangeDays\"},{\"name\":\"members\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"messages\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"viewers\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"posters\",\"type\":\"StatsAbsValueAndPrev\"},{\"name\":\"growth_graph\",\"type\":\"StatsGraph\"},{\"name\":\"members_graph\",\"type\":\"StatsGraph\"},{\"name\":\"new_members_by_source_graph\",\"type\":\"StatsGraph\"},{\"name\":\"languages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"messages_graph\",\"type\":\"StatsGraph\"},{\"name\":\"actions_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_hours_graph\",\"type\":\"StatsGraph\"},{\"name\":\"weekdays_graph\",\"type\":\"StatsGraph\"},{\"name\":\"top_posters\",\"type\":\"Vector\"},{\"name\":\"top_admins\",\"type\":\"Vector\"},{\"name\":\"top_inviters\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-1096616924,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?Bool\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":1667228533,\"predicate\":\"phoneConnectionWebrtc\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"turn\",\"type\":\"flags.0?true\"},{\"name\":\"stun\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"string\"}],\"type\":\"PhoneConnection\"},{\"id\":1107543535,\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector\"}],\"type\":\"help.CountryCode\"},{\"id\":-1014526429,\"predicate\":\"help.country\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hidden\",\"type\":\"flags.0?true\"},{\"name\":\"iso2\",\"type\":\"string\"},{\"name\":\"default_name\",\"type\":\"string\"},{\"name\":\"name\",\"type\":\"flags.1?string\"},{\"name\":\"country_codes\",\"type\":\"Vector\"}],\"type\":\"help.Country\"},{\"id\":-1815339214,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":-2016381538,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":1163625789,\"predicate\":\"messageViews\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"views\",\"type\":\"flags.0?int\"},{\"name\":\"forwards\",\"type\":\"flags.1?int\"},{\"name\":\"replies\",\"type\":\"flags.2?MessageReplies\"}],\"type\":\"MessageViews\"},{\"id\":-761649164,\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-96535659,\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector\"}],\"type\":\"PhotoSize\"},{\"id\":-1228606141,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.MessageViews\"},{\"id\":-693004986,\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?long\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1767677564,\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1506535550,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"max_id\",\"type\":\"flags.0?int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"flags.1?int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"flags.2?int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-1495959709,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_to_scheduled\",\"type\":\"flags.2?true\"},{\"name\":\"forum_topic\",\"type\":\"flags.3?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"reply_to_peer_id\",\"type\":\"flags.0?Peer\"},{\"name\":\"reply_to_top_id\",\"type\":\"flags.1?int\"}],\"type\":\"MessageReplyHeader\"},{\"id\":-2083123262,\"predicate\":\"messageReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"comments\",\"type\":\"flags.0?true\"},{\"name\":\"replies\",\"type\":\"int\"},{\"name\":\"replies_pts\",\"type\":\"int\"},{\"name\":\"recent_repliers\",\"type\":\"flags.1?Vector\"},{\"name\":\"channel_id\",\"type\":\"flags.0?long\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":610945826,\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"blocked\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":-386039788,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":-1937192669,\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":-1392895362,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":453242886,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"ChannelParticipant\"},{\"id\":-531931925,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":-309990731,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1538885128,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":464520273,\"predicate\":\"inputMessagesFilterPinned\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":-1986399595,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":-1730095465,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-668906175,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":-651419003,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2004925620,\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-711498484,\"predicate\":\"groupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"join_muted\",\"type\":\"flags.1?true\"},{\"name\":\"can_change_join_muted\",\"type\":\"flags.2?true\"},{\"name\":\"join_date_asc\",\"type\":\"flags.6?true\"},{\"name\":\"schedule_start_subscribed\",\"type\":\"flags.8?true\"},{\"name\":\"can_start_video\",\"type\":\"flags.9?true\"},{\"name\":\"record_video_active\",\"type\":\"flags.11?true\"},{\"name\":\"rtmp_stream\",\"type\":\"flags.12?true\"},{\"name\":\"listeners_hidden\",\"type\":\"flags.13?true\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.3?string\"},{\"name\":\"stream_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"record_start_date\",\"type\":\"flags.5?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.7?int\"},{\"name\":\"unmuted_video_count\",\"type\":\"flags.10?int\"},{\"name\":\"unmuted_video_limit\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":-659913713,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":2047704898,\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":1345295095,\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"MessageAction\"},{\"id\":-341428482,\"predicate\":\"groupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"left\",\"type\":\"flags.1?true\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.2?true\"},{\"name\":\"just_joined\",\"type\":\"flags.4?true\"},{\"name\":\"versioned\",\"type\":\"flags.5?true\"},{\"name\":\"min\",\"type\":\"flags.8?true\"},{\"name\":\"muted_by_you\",\"type\":\"flags.9?true\"},{\"name\":\"volume_by_admin\",\"type\":\"flags.10?true\"},{\"name\":\"self\",\"type\":\"flags.12?true\"},{\"name\":\"video_joined\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"active_date\",\"type\":\"flags.3?int\"},{\"name\":\"source\",\"type\":\"int\"},{\"name\":\"volume\",\"type\":\"flags.7?int\"},{\"name\":\"about\",\"type\":\"flags.11?string\"},{\"name\":\"raise_hand_rating\",\"type\":\"flags.13?long\"},{\"name\":\"video\",\"type\":\"flags.6?GroupCallParticipantVideo\"},{\"name\":\"presentation\",\"type\":\"flags.14?GroupCallParticipantVideo\"}],\"type\":\"GroupCallParticipant\"},{\"id\":-124097970,\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":-219423922,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":347227392,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":-1636664659,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCall\"},{\"id\":-193506890,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":813821341,\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-2093215828,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":-681130742,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1589952067,\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1664413338,\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":589338437,\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-610299584,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-115071790,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-431740480,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1456906823,\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1966921727,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":375566091,\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"id\":-606432698,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":1578088377,\"predicate\":\"messages.historyImportParsed\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pm\",\"type\":\"flags.0?true\"},{\"name\":\"group\",\"type\":\"flags.1?true\"},{\"name\":\"title\",\"type\":\"flags.2?string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":-170010905,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-275956116,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1007897979,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"period\",\"type\":\"int\"},{\"name\":\"auto_setting_from\",\"type\":\"flags.0?long\"}],\"type\":\"MessageAction\"},{\"id\":-1147422299,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":-796432838,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChatParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChatParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1738720581,\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"prev_participant\",\"type\":\"flags.0?ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"flags.1?ChannelParticipant\"},{\"name\":\"invite\",\"type\":\"flags.2?ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-997782967,\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1940201511,\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requested\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"about\",\"type\":\"flags.2?string\"},{\"name\":\"approved_by\",\"type\":\"flags.1?long\"}],\"type\":\"ChatInviteImporter\"},{\"id\":-1111085620,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":410107472,\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":572915951,\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-2118733814,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-219353309,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"long\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":-1231326505,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":1557846647,\"predicate\":\"channelAdminLogEventActionParticipantJoinByInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1515256996,\"predicate\":\"channelAdminLogEventActionExportedInviteDelete\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1091179342,\"predicate\":\"channelAdminLogEventActionExportedInviteRevoke\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-384910503,\"predicate\":\"channelAdminLogEventActionExportedInviteEdit\",\"params\":[{\"name\":\"prev_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1048537159,\"predicate\":\"channelAdminLogEventActionParticipantVolume\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1855199800,\"predicate\":\"channelAdminLogEventActionChangeHistoryTTL\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1571952873,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":93890858,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"},{\"name\":\"video_channel\",\"type\":\"flags.0?int\"},{\"name\":\"video_quality\",\"type\":\"flags.0?int\"}],\"type\":\"InputFileLocation\"},{\"id\":-1343921601,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":541839704,\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":-672693723,\"predicate\":\"inputBotInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?InputWebDocument\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"provider\",\"type\":\"string\"},{\"name\":\"provider_data\",\"type\":\"DataJSON\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":894081801,\"predicate\":\"botInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"shipping_address_requested\",\"type\":\"flags.1?true\"},{\"name\":\"test\",\"type\":\"flags.3?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"flags.0?WebDocument\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":-1281329567,\"predicate\":\"messageActionGroupCallScheduled\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"schedule_date\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":-592373577,\"predicate\":\"groupCallParticipantVideoSourceGroup\",\"params\":[{\"name\":\"semantics\",\"type\":\"string\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"GroupCallParticipantVideoSourceGroup\"},{\"id\":1735736008,\"predicate\":\"groupCallParticipantVideo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"paused\",\"type\":\"flags.0?true\"},{\"name\":\"endpoint\",\"type\":\"string\"},{\"name\":\"source_groups\",\"type\":\"Vector\"},{\"name\":\"audio_source\",\"type\":\"flags.1?int\"}],\"type\":\"GroupCallParticipantVideo\"},{\"id\":192428418,\"predicate\":\"updateGroupCallConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"presentation\",\"type\":\"flags.0?true\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":-2046910401,\"predicate\":\"stickers.suggestedShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":795652779,\"predicate\":\"botCommandScopeDefault\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1011811544,\"predicate\":\"botCommandScopeUsers\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":1877059713,\"predicate\":\"botCommandScopeChats\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-1180016534,\"predicate\":\"botCommandScopeChatAdmins\",\"params\":[],\"type\":\"BotCommandScope\"},{\"id\":-610432643,\"predicate\":\"botCommandScopePeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":1071145937,\"predicate\":\"botCommandScopePeerAdmins\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"BotCommandScope\"},{\"id\":169026035,\"predicate\":\"botCommandScopePeerUser\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotCommandScope\"},{\"id\":-478701471,\"predicate\":\"account.resetPasswordFailedWait\",\"params\":[{\"name\":\"retry_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-370148227,\"predicate\":\"account.resetPasswordRequestedWait\",\"params\":[{\"name\":\"until_date\",\"type\":\"int\"}],\"type\":\"account.ResetPasswordResult\"},{\"id\":-383330754,\"predicate\":\"account.resetPasswordOk\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1299263278,\"predicate\":\"updateBotCommands\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":-1434950843,\"predicate\":\"messageActionSetChatTheme\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-1336228175,\"predicate\":\"sendMessageChooseStickerAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":981691896,\"predicate\":\"sponsoredMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"recommended\",\"type\":\"flags.5?true\"},{\"name\":\"show_peer_photo\",\"type\":\"flags.6?true\"},{\"name\":\"random_id\",\"type\":\"bytes\"},{\"name\":\"from_id\",\"type\":\"flags.3?Peer\"},{\"name\":\"chat_invite\",\"type\":\"flags.4?ChatInvite\"},{\"name\":\"chat_invite_hash\",\"type\":\"flags.4?string\"},{\"name\":\"channel_post\",\"type\":\"flags.2?int\"},{\"name\":\"start_param\",\"type\":\"flags.0?string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector\"}],\"type\":\"SponsoredMessage\"},{\"id\":-907141753,\"predicate\":\"messages.sponsoredMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"posts_between\",\"type\":\"flags.0?int\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SponsoredMessages\"},{\"id\":215889721,\"predicate\":\"inputStickerSetAnimatedEmojiAnimations\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":630664139,\"predicate\":\"sendMessageEmojiInteraction\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"interaction\",\"type\":\"DataJSON\"}],\"type\":\"SendMessageAction\"},{\"id\":-1234857938,\"predicate\":\"sendMessageEmojiInteractionSeen\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"SendMessageAction\"},{\"id\":-1227287081,\"predicate\":\"inputBotInlineMessageID64\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"owner_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"id\":-911191137,\"predicate\":\"searchResultsCalendarPeriod\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"min_msg_id\",\"type\":\"int\"},{\"name\":\"max_msg_id\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"SearchResultsCalendarPeriod\"},{\"id\":343859772,\"predicate\":\"messages.searchResultsCalendar\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inexact\",\"type\":\"flags.0?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"min_msg_id\",\"type\":\"int\"},{\"name\":\"offset_id_offset\",\"type\":\"flags.1?int\"},{\"name\":\"periods\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.SearchResultsCalendar\"},{\"id\":2137295719,\"predicate\":\"searchResultPosition\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"SearchResultsPosition\"},{\"id\":1404185519,\"predicate\":\"messages.searchResultsPositions\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"positions\",\"type\":\"Vector\"}],\"type\":\"messages.SearchResultsPositions\"},{\"id\":-339958837,\"predicate\":\"messageActionChatJoinedByRequest\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1885586395,\"predicate\":\"updatePendingJoinRequests\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"requests_pending\",\"type\":\"int\"},{\"name\":\"recent_requesters\",\"type\":\"Vector\"}],\"type\":\"Update\"},{\"id\":299870598,\"predicate\":\"updateBotChatInviteRequester\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":-1347021750,\"predicate\":\"channelAdminLogEventActionParticipantJoinByRequest\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"approved_by\",\"type\":\"long\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-376962181,\"predicate\":\"inputKeyboardButtonUserProfile\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"KeyboardButton\"},{\"id\":814112961,\"predicate\":\"keyboardButtonUserProfile\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"KeyboardButton\"},{\"id\":-191450938,\"predicate\":\"channels.sendAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"channels.SendAsPeers\"},{\"id\":-886388890,\"predicate\":\"channelAdminLogEventActionToggleNoForwards\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-738646805,\"predicate\":\"messages.stickerSetNotModified\",\"params\":[],\"type\":\"messages.StickerSet\"},{\"id\":997004590,\"predicate\":\"users.userFull\",\"params\":[{\"name\":\"full_user\",\"type\":\"UserFull\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"users.UserFull\"},{\"id\":1753266509,\"predicate\":\"messages.peerSettings\",\"params\":[{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"messages.PeerSettings\"},{\"id\":663693416,\"predicate\":\"channelAdminLogEventActionSendMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-702884114,\"predicate\":\"auth.codeTypeMissedCall\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":-2113903484,\"predicate\":\"auth.sentCodeTypeMissedCall\",\"params\":[{\"name\":\"prefix\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1012759713,\"predicate\":\"auth.loggedOut\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"future_auth_token\",\"type\":\"flags.0?bytes\"}],\"type\":\"auth.LoggedOut\"},{\"id\":1578843320,\"predicate\":\"updateMessageReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"reactions\",\"type\":\"MessageReactions\"}],\"type\":\"Update\"},{\"id\":-1546531968,\"predicate\":\"reactionCount\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chosen_order\",\"type\":\"flags.0?int\"},{\"name\":\"reaction\",\"type\":\"Reaction\"},{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"ReactionCount\"},{\"id\":1328256121,\"predicate\":\"messageReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"can_see_list\",\"type\":\"flags.2?true\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"recent_reactions\",\"type\":\"flags.1?Vector\"}],\"type\":\"MessageReactions\"},{\"id\":834488621,\"predicate\":\"messages.messageReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.MessageReactionsList\"},{\"id\":-1065882623,\"predicate\":\"availableReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inactive\",\"type\":\"flags.0?true\"},{\"name\":\"premium\",\"type\":\"flags.2?true\"},{\"name\":\"reaction\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"static_icon\",\"type\":\"Document\"},{\"name\":\"appear_animation\",\"type\":\"Document\"},{\"name\":\"select_animation\",\"type\":\"Document\"},{\"name\":\"activate_animation\",\"type\":\"Document\"},{\"name\":\"effect_animation\",\"type\":\"Document\"},{\"name\":\"around_animation\",\"type\":\"flags.1?Document\"},{\"name\":\"center_icon\",\"type\":\"flags.1?Document\"}],\"type\":\"AvailableReaction\"},{\"id\":-1626924713,\"predicate\":\"messages.availableReactionsNotModified\",\"params\":[],\"type\":\"messages.AvailableReactions\"},{\"id\":1989032621,\"predicate\":\"messages.availableReactions\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"messages.AvailableReactions\"},{\"id\":852137487,\"predicate\":\"messageEntitySpoiler\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":-1102180616,\"predicate\":\"channelAdminLogEventActionChangeAvailableReactions\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChatReactions\"},{\"name\":\"new_value\",\"type\":\"ChatReactions\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1319698788,\"predicate\":\"messagePeerReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.0?true\"},{\"name\":\"unread\",\"type\":\"flags.1?true\"},{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"MessagePeerReaction\"},{\"id\":-2132064081,\"predicate\":\"groupCallStreamChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"int\"},{\"name\":\"scale\",\"type\":\"int\"},{\"name\":\"last_timestamp_ms\",\"type\":\"long\"}],\"type\":\"GroupCallStreamChannel\"},{\"id\":-790330702,\"predicate\":\"phone.groupCallStreamChannels\",\"params\":[{\"name\":\"channels\",\"type\":\"Vector\"}],\"type\":\"phone.GroupCallStreamChannels\"},{\"id\":177124030,\"predicate\":\"inputReportReasonIllegalDrugs\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":-1631091139,\"predicate\":\"inputReportReasonPersonalDetails\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":767505458,\"predicate\":\"phone.groupCallStreamRtmpUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"key\",\"type\":\"string\"}],\"type\":\"phone.GroupCallStreamRtmpUrl\"},{\"id\":1165423600,\"predicate\":\"attachMenuBotIconColor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"color\",\"type\":\"int\"}],\"type\":\"AttachMenuBotIconColor\"},{\"id\":-1297663893,\"predicate\":\"attachMenuBotIcon\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"icon\",\"type\":\"Document\"},{\"name\":\"colors\",\"type\":\"flags.0?Vector\"}],\"type\":\"AttachMenuBotIcon\"},{\"id\":-928371502,\"predicate\":\"attachMenuBot\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"inactive\",\"type\":\"flags.0?true\"},{\"name\":\"has_settings\",\"type\":\"flags.1?true\"},{\"name\":\"request_write_access\",\"type\":\"flags.2?true\"},{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"peer_types\",\"type\":\"Vector\"},{\"name\":\"icons\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBot\"},{\"id\":-237467044,\"predicate\":\"attachMenuBotsNotModified\",\"params\":[],\"type\":\"AttachMenuBots\"},{\"id\":1011024320,\"predicate\":\"attachMenuBots\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bots\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBots\"},{\"id\":-1816172929,\"predicate\":\"attachMenuBotsBot\",\"params\":[{\"name\":\"bot\",\"type\":\"AttachMenuBot\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"AttachMenuBotsBot\"},{\"id\":397910539,\"predicate\":\"updateAttachMenuBots\",\"params\":[],\"type\":\"Update\"},{\"id\":202659196,\"predicate\":\"webViewResultUrl\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"WebViewResult\"},{\"id\":-2010155333,\"predicate\":\"simpleWebViewResultUrl\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"SimpleWebViewResult\"},{\"id\":211046684,\"predicate\":\"webViewMessageSent\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"msg_id\",\"type\":\"flags.0?InputBotInlineMessageID\"}],\"type\":\"WebViewMessageSent\"},{\"id\":361936797,\"predicate\":\"updateWebViewResultSent\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":326529584,\"predicate\":\"keyboardButtonWebView\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":-1598009252,\"predicate\":\"keyboardButtonSimpleWebView\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":1205698681,\"predicate\":\"messageActionWebViewDataSentMe\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":-1262252875,\"predicate\":\"messageActionWebViewDataSent\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":347625491,\"predicate\":\"updateBotMenuButton\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"button\",\"type\":\"BotMenuButton\"}],\"type\":\"Update\"},{\"id\":1966318984,\"predicate\":\"botMenuButtonDefault\",\"params\":[],\"type\":\"BotMenuButton\"},{\"id\":1113113093,\"predicate\":\"botMenuButtonCommands\",\"params\":[],\"type\":\"BotMenuButton\"},{\"id\":-944407322,\"predicate\":\"botMenuButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"BotMenuButton\"},{\"id\":-67704655,\"predicate\":\"account.savedRingtonesNotModified\",\"params\":[],\"type\":\"account.SavedRingtones\"},{\"id\":-1041683259,\"predicate\":\"account.savedRingtones\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"ringtones\",\"type\":\"Vector\"}],\"type\":\"account.SavedRingtones\"},{\"id\":1960361625,\"predicate\":\"updateSavedRingtones\",\"params\":[],\"type\":\"Update\"},{\"id\":-1746354498,\"predicate\":\"notificationSoundDefault\",\"params\":[],\"type\":\"NotificationSound\"},{\"id\":1863070943,\"predicate\":\"notificationSoundNone\",\"params\":[],\"type\":\"NotificationSound\"},{\"id\":-2096391452,\"predicate\":\"notificationSoundLocal\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"NotificationSound\"},{\"id\":-9666487,\"predicate\":\"notificationSoundRingtone\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"NotificationSound\"},{\"id\":-1222230163,\"predicate\":\"account.savedRingtone\",\"params\":[],\"type\":\"account.SavedRingtone\"},{\"id\":523271863,\"predicate\":\"account.savedRingtoneConverted\",\"params\":[{\"name\":\"document\",\"type\":\"Document\"}],\"type\":\"account.SavedRingtone\"},{\"id\":2104224014,\"predicate\":\"attachMenuPeerTypeSameBotPM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-1020528102,\"predicate\":\"attachMenuPeerTypeBotPM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-247016673,\"predicate\":\"attachMenuPeerTypePM\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":84480319,\"predicate\":\"attachMenuPeerTypeChat\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":2080104188,\"predicate\":\"attachMenuPeerTypeBroadcast\",\"params\":[],\"type\":\"AttachMenuPeerType\"},{\"id\":-317687113,\"predicate\":\"chatInvitePublicJoinRequests\",\"params\":[],\"type\":\"ExportedChatInvite\"},{\"id\":-977967015,\"predicate\":\"inputInvoiceMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"InputInvoice\"},{\"id\":-1020867857,\"predicate\":\"inputInvoiceSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputInvoice\"},{\"id\":-1362048039,\"predicate\":\"payments.exportedInvoice\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.ExportedInvoice\"},{\"id\":8703322,\"predicate\":\"updateTranscribedAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pending\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":-1821037486,\"predicate\":\"messages.transcribedAudio\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pending\",\"type\":\"flags.0?true\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"messages.TranscribedAudio\"},{\"id\":909284270,\"predicate\":\"dialogFilterDefault\",\"params\":[],\"type\":\"DialogFilter\"},{\"id\":1395946908,\"predicate\":\"help.premiumPromo\",\"params\":[{\"name\":\"status_text\",\"type\":\"string\"},{\"name\":\"status_entities\",\"type\":\"Vector\"},{\"name\":\"video_sections\",\"type\":\"Vector\"},{\"name\":\"videos\",\"type\":\"Vector\"},{\"name\":\"period_options\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"help.PremiumPromo\"},{\"id\":-925956616,\"predicate\":\"messageEntityCustomEmoji\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"MessageEntity\"},{\"id\":-48981863,\"predicate\":\"documentAttributeCustomEmoji\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"free\",\"type\":\"flags.0?true\"},{\"name\":\"text_color\",\"type\":\"flags.1?true\"},{\"name\":\"alt\",\"type\":\"string\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"DocumentAttribute\"},{\"id\":1087454222,\"predicate\":\"stickerSetFullCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector\"},{\"name\":\"keywords\",\"type\":\"Vector\"},{\"name\":\"documents\",\"type\":\"Vector\"}],\"type\":\"StickerSetCovered\"},{\"id\":-1502273946,\"predicate\":\"inputStorePaymentPremiumSubscription\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"restore\",\"type\":\"flags.0?true\"},{\"name\":\"upgrade\",\"type\":\"flags.1?true\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":1634697192,\"predicate\":\"inputStorePaymentGiftPremium\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"InputStorePaymentPurpose\"},{\"id\":-1415514682,\"predicate\":\"messageActionGiftPremium\",\"params\":[{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"months\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":1958953753,\"predicate\":\"premiumGiftOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"bot_url\",\"type\":\"string\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"}],\"type\":\"PremiumGiftOption\"},{\"id\":-930399486,\"predicate\":\"inputStickerSetPremiumGifts\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-78886548,\"predicate\":\"updateReadFeaturedEmojiStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":-1360618136,\"predicate\":\"inputPrivacyKeyVoiceMessages\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":110621716,\"predicate\":\"privacyKeyVoiceMessages\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":-1996951013,\"predicate\":\"paymentFormMethod\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"PaymentFormMethod\"},{\"id\":-193992412,\"predicate\":\"inputWebFileAudioAlbumThumbLocation\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"small\",\"type\":\"flags.2?true\"},{\"name\":\"document\",\"type\":\"flags.0?InputDocument\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"performer\",\"type\":\"flags.1?string\"}],\"type\":\"InputWebFileLocation\"},{\"id\":183518013,\"predicate\":\"bots.premiumGiftsOptions\",\"params\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"gifts\",\"type\":\"Vector\"}],\"type\":\"bots.PremiumGiftsOptions\"},{\"id\":769727150,\"predicate\":\"emojiStatusEmpty\",\"params\":[],\"type\":\"EmojiStatus\"},{\"id\":-1835310691,\"predicate\":\"emojiStatus\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"EmojiStatus\"},{\"id\":-97474361,\"predicate\":\"emojiStatusUntil\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"until\",\"type\":\"int\"}],\"type\":\"EmojiStatus\"},{\"id\":674706841,\"predicate\":\"updateUserEmojiStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"},{\"name\":\"emoji_status\",\"type\":\"EmojiStatus\"}],\"type\":\"Update\"},{\"id\":821314523,\"predicate\":\"updateRecentEmojiStatuses\",\"params\":[],\"type\":\"Update\"},{\"id\":-796072379,\"predicate\":\"account.emojiStatusesNotModified\",\"params\":[],\"type\":\"account.EmojiStatuses\"},{\"id\":-1866176559,\"predicate\":\"account.emojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"statuses\",\"type\":\"Vector\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":2046153753,\"predicate\":\"reactionEmpty\",\"params\":[],\"type\":\"Reaction\"},{\"id\":455247544,\"predicate\":\"reactionEmoji\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"Reaction\"},{\"id\":-1992950669,\"predicate\":\"reactionCustomEmoji\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Reaction\"},{\"id\":-352570692,\"predicate\":\"chatReactionsNone\",\"params\":[],\"type\":\"ChatReactions\"},{\"id\":1385335754,\"predicate\":\"chatReactionsAll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"allow_custom\",\"type\":\"flags.0?true\"}],\"type\":\"ChatReactions\"},{\"id\":1713193015,\"predicate\":\"chatReactionsSome\",\"params\":[{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"ChatReactions\"},{\"id\":-1334846497,\"predicate\":\"messages.reactionsNotModified\",\"params\":[],\"type\":\"messages.Reactions\"},{\"id\":-352454890,\"predicate\":\"messages.reactions\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"reactions\",\"type\":\"Vector\"}],\"type\":\"messages.Reactions\"},{\"id\":1870160884,\"predicate\":\"updateRecentReactions\",\"params\":[],\"type\":\"Update\"},{\"id\":-2030252155,\"predicate\":\"updateMoveStickerSetToTop\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"stickerset\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":1511364673,\"predicate\":\"auth.sentCodeTypeEmailCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"apple_signin_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"google_signin_allowed\",\"type\":\"flags.1?true\"},{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"next_phone_login_date\",\"type\":\"flags.2?int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":-1521934870,\"predicate\":\"auth.sentCodeTypeSetUpEmailRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"apple_signin_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"google_signin_allowed\",\"type\":\"flags.1?true\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1128644211,\"predicate\":\"emailVerifyPurposeLoginSetup\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"EmailVerifyPurpose\"},{\"id\":1383932651,\"predicate\":\"emailVerifyPurposeLoginChange\",\"params\":[],\"type\":\"EmailVerifyPurpose\"},{\"id\":-1141565819,\"predicate\":\"emailVerifyPurposePassport\",\"params\":[],\"type\":\"EmailVerifyPurpose\"},{\"id\":-1842457175,\"predicate\":\"emailVerificationCode\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":-611279166,\"predicate\":\"emailVerificationGoogle\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":-1764723459,\"predicate\":\"emailVerificationApple\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"EmailVerification\"},{\"id\":731303195,\"predicate\":\"account.emailVerified\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.EmailVerified\"},{\"id\":-507835039,\"predicate\":\"account.emailVerifiedLogin\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"sent_code\",\"type\":\"auth.SentCode\"}],\"type\":\"account.EmailVerified\"},{\"id\":1596792306,\"predicate\":\"premiumSubscriptionOption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"current\",\"type\":\"flags.1?true\"},{\"name\":\"can_purchase_upgrade\",\"type\":\"flags.2?true\"},{\"name\":\"transaction\",\"type\":\"flags.3?string\"},{\"name\":\"months\",\"type\":\"int\"},{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"},{\"name\":\"bot_url\",\"type\":\"string\"},{\"name\":\"store_product\",\"type\":\"flags.0?string\"}],\"type\":\"PremiumSubscriptionOption\"},{\"id\":80008398,\"predicate\":\"inputStickerSetEmojiGenericAnimations\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":701560302,\"predicate\":\"inputStickerSetEmojiDefaultStatuses\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":-1206095820,\"predicate\":\"sendAsPeer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"premium_required\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"SendAsPeer\"},{\"id\":-1386050360,\"predicate\":\"messageExtendedMediaPreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"w\",\"type\":\"flags.0?int\"},{\"name\":\"h\",\"type\":\"flags.0?int\"},{\"name\":\"thumb\",\"type\":\"flags.1?PhotoSize\"},{\"name\":\"video_duration\",\"type\":\"flags.2?int\"}],\"type\":\"MessageExtendedMedia\"},{\"id\":-297296796,\"predicate\":\"messageExtendedMedia\",\"params\":[{\"name\":\"media\",\"type\":\"MessageMedia\"}],\"type\":\"MessageExtendedMedia\"},{\"id\":1517529484,\"predicate\":\"updateMessageExtendedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"extended_media\",\"type\":\"MessageExtendedMedia\"}],\"type\":\"Update\"},{\"id\":-50416996,\"predicate\":\"stickerKeyword\",\"params\":[{\"name\":\"document_id\",\"type\":\"long\"},{\"name\":\"keyword\",\"type\":\"Vector\"}],\"type\":\"StickerKeyword\"},{\"id\":-1274595769,\"predicate\":\"username\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"editable\",\"type\":\"flags.0?true\"},{\"name\":\"active\",\"type\":\"flags.1?true\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Username\"},{\"id\":-263212119,\"predicate\":\"channelAdminLogEventActionChangeUsernames\",\"params\":[{\"name\":\"prev_value\",\"type\":\"Vector\"},{\"name\":\"new_value\",\"type\":\"Vector\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":46949251,\"predicate\":\"channelAdminLogEventActionToggleForum\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1483767080,\"predicate\":\"channelAdminLogEventActionCreateTopic\",\"params\":[{\"name\":\"topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-261103096,\"predicate\":\"channelAdminLogEventActionEditTopic\",\"params\":[{\"name\":\"prev_topic\",\"type\":\"ForumTopic\"},{\"name\":\"new_topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":-1374254839,\"predicate\":\"channelAdminLogEventActionDeleteTopic\",\"params\":[{\"name\":\"topic\",\"type\":\"ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1569535291,\"predicate\":\"channelAdminLogEventActionPinTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"prev_topic\",\"type\":\"flags.0?ForumTopic\"},{\"name\":\"new_topic\",\"type\":\"flags.1?ForumTopic\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":37687451,\"predicate\":\"forumTopicDeleted\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ForumTopic\"},{\"id\":1903173033,\"predicate\":\"forumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"my\",\"type\":\"flags.1?true\"},{\"name\":\"closed\",\"type\":\"flags.2?true\"},{\"name\":\"pinned\",\"type\":\"flags.3?true\"},{\"name\":\"short\",\"type\":\"flags.5?true\"},{\"name\":\"hidden\",\"type\":\"flags.6?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.0?long\"},{\"name\":\"top_message\",\"type\":\"int\"},{\"name\":\"read_inbox_max_id\",\"type\":\"int\"},{\"name\":\"read_outbox_max_id\",\"type\":\"int\"},{\"name\":\"unread_count\",\"type\":\"int\"},{\"name\":\"unread_mentions_count\",\"type\":\"int\"},{\"name\":\"unread_reactions_count\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"draft\",\"type\":\"flags.4?DraftMessage\"}],\"type\":\"ForumTopic\"},{\"id\":913709011,\"predicate\":\"messages.forumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"order_by_create_date\",\"type\":\"flags.0?true\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"topics\",\"type\":\"Vector\"},{\"name\":\"messages\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"messages.ForumTopics\"},{\"id\":228168278,\"predicate\":\"messageActionTopicCreate\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.0?long\"}],\"type\":\"MessageAction\"},{\"id\":-1064024032,\"predicate\":\"messageActionTopicEdit\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.1?long\"},{\"name\":\"closed\",\"type\":\"flags.2?Bool\"},{\"name\":\"hidden\",\"type\":\"flags.3?Bool\"}],\"type\":\"MessageAction\"},{\"id\":422509539,\"predicate\":\"updateChannelPinnedTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"topic_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1548122514,\"predicate\":\"inputNotifyForumTopic\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"InputNotifyPeer\"},{\"id\":577659656,\"predicate\":\"notifyForumTopic\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"NotifyPeer\"},{\"id\":1153562857,\"predicate\":\"inputStickerSetEmojiDefaultTopicIcons\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":406407439,\"predicate\":\"messages.sponsoredMessagesEmpty\",\"params\":[],\"type\":\"messages.SponsoredMessages\"},{\"id\":-31881726,\"predicate\":\"updateChannelPinnedTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"long\"},{\"name\":\"order\",\"type\":\"flags.0?Vector\"}],\"type\":\"Update\"},{\"id\":1135897376,\"predicate\":\"defaultHistoryTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"DefaultHistoryTTL\"},{\"id\":116234636,\"predicate\":\"auth.codeTypeFragmentSms\",\"params\":[],\"type\":\"auth.CodeType\"},{\"id\":-648651719,\"predicate\":\"auth.sentCodeTypeFragmentSms\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":1103040667,\"predicate\":\"exportedContactToken\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ExportedContactToken\"},{\"id\":1693675004,\"predicate\":\"channelAdminLogEventActionToggleAntiSpam\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1474192222,\"predicate\":\"messageActionSuggestProfilePhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":-404267113,\"predicate\":\"messageActionAttachMenuBotAllowed\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2008112412,\"predicate\":\"stickerSetNoCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"}],\"type\":\"StickerSetCovered\"},{\"id\":542282808,\"predicate\":\"updateUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"long\"}],\"type\":\"Update\"},{\"id\":596704836,\"predicate\":\"auth.sentCodeSuccess\",\"params\":[{\"name\":\"authorization\",\"type\":\"auth.Authorization\"}],\"type\":\"auth.SentCode\"},{\"id\":-25742243,\"predicate\":\"messageActionRequestedPeer\",\"params\":[{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"MessageAction\"},{\"id\":1597737472,\"predicate\":\"requestPeerTypeUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"flags.0?Bool\"},{\"name\":\"premium\",\"type\":\"flags.1?Bool\"}],\"type\":\"RequestPeerType\"},{\"id\":-906990053,\"predicate\":\"requestPeerTypeChat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"bot_participant\",\"type\":\"flags.5?true\"},{\"name\":\"has_username\",\"type\":\"flags.3?Bool\"},{\"name\":\"forum\",\"type\":\"flags.4?Bool\"},{\"name\":\"user_admin_rights\",\"type\":\"flags.1?ChatAdminRights\"},{\"name\":\"bot_admin_rights\",\"type\":\"flags.2?ChatAdminRights\"}],\"type\":\"RequestPeerType\"},{\"id\":865857388,\"predicate\":\"requestPeerTypeBroadcast\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"has_username\",\"type\":\"flags.3?Bool\"},{\"name\":\"user_admin_rights\",\"type\":\"flags.1?ChatAdminRights\"},{\"name\":\"bot_admin_rights\",\"type\":\"flags.2?ChatAdminRights\"}],\"type\":\"RequestPeerType\"},{\"id\":218842764,\"predicate\":\"keyboardButtonRequestPeer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"peer_type\",\"type\":\"RequestPeerType\"}],\"type\":\"KeyboardButton\"},{\"id\":1209970170,\"predicate\":\"emojiListNotModified\",\"params\":[],\"type\":\"EmojiList\"},{\"id\":2048790993,\"predicate\":\"emojiList\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"document_id\",\"type\":\"Vector\"}],\"type\":\"EmojiList\"},{\"id\":-444918734,\"predicate\":\"auth.sentCodeTypeFirebaseSms\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nonce\",\"type\":\"flags.0?bytes\"},{\"name\":\"receipt\",\"type\":\"flags.1?string\"},{\"name\":\"push_timeout\",\"type\":\"flags.1?int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"auth.SentCodeType\"},{\"id\":2056961449,\"predicate\":\"emojiGroup\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_emoji_id\",\"type\":\"long\"},{\"name\":\"emoticons\",\"type\":\"Vector\"}],\"type\":\"EmojiGroup\"},{\"id\":1874111879,\"predicate\":\"messages.emojiGroupsNotModified\",\"params\":[],\"type\":\"messages.EmojiGroups\"},{\"id\":-2011186869,\"predicate\":\"messages.emojiGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"groups\",\"type\":\"Vector\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":-128171716,\"predicate\":\"videoSizeEmojiMarkup\",\"params\":[{\"name\":\"emoji_id\",\"type\":\"long\"},{\"name\":\"background_colors\",\"type\":\"Vector\"}],\"type\":\"VideoSize\"},{\"id\":228623102,\"predicate\":\"videoSizeStickerMarkup\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker_id\",\"type\":\"long\"},{\"name\":\"background_colors\",\"type\":\"Vector\"}],\"type\":\"VideoSize\"},{\"id\":1964978502,\"predicate\":\"textWithEntities\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"TextWithEntities\"},{\"id\":870003448,\"predicate\":\"messages.translateResult\",\"params\":[{\"name\":\"result\",\"type\":\"Vector\"}],\"type\":\"messages.TranslatedText\"},{\"id\":-934791986,\"predicate\":\"autoSaveSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"photos\",\"type\":\"flags.0?true\"},{\"name\":\"videos\",\"type\":\"flags.1?true\"},{\"name\":\"video_max_size\",\"type\":\"flags.2?long\"}],\"type\":\"AutoSaveSettings\"},{\"id\":-2124403385,\"predicate\":\"autoSaveException\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"AutoSaveSettings\"}],\"type\":\"AutoSaveException\"},{\"id\":1279133341,\"predicate\":\"account.autoSaveSettings\",\"params\":[{\"name\":\"users_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"chats_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"broadcasts_settings\",\"type\":\"AutoSaveSettings\"},{\"name\":\"exceptions\",\"type\":\"Vector\"},{\"name\":\"chats\",\"type\":\"Vector\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"account.AutoSaveSettings\"},{\"id\":-335171433,\"predicate\":\"updateAutoSaveSettings\",\"params\":[],\"type\":\"Update\"}],\"methods\":[{\"id\":-878758099,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1036301552,\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1502141361,\"method\":\"auth.sendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":-2131827673,\"method\":\"auth.signUp\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1923962543,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"flags.0?string\"},{\"name\":\"email_verification\",\"type\":\"flags.1?EmailVerification\"}],\"type\":\"auth.Authorization\"},{\"id\":1047706137,\"method\":\"auth.logOut\",\"params\":[],\"type\":\"auth.LoggedOut\"},{\"id\":-1616179942,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":-440401971,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":-1518699091,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":-841733627,\"method\":\"auth.bindTempAuthKey\",\"params\":[{\"name\":\"perm_auth_key_id\",\"type\":\"long\"},{\"name\":\"nonce\",\"type\":\"long\"},{\"name\":\"expires_at\",\"type\":\"int\"},{\"name\":\"encrypted_message\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-326762118,\"method\":\"account.registerDevice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_muted\",\"type\":\"flags.0?true\"},{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"app_sandbox\",\"type\":\"Bool\"},{\"name\":\"secret\",\"type\":\"bytes\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1779249670,\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2067899501,\"method\":\"account.updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"},{\"name\":\"settings\",\"type\":\"InputPeerNotifySettings\"}],\"type\":\"Bool\"},{\"id\":313765169,\"method\":\"account.getNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputNotifyPeer\"}],\"type\":\"PeerNotifySettings\"},{\"id\":-612493497,\"method\":\"account.resetNotifySettings\",\"params\":[],\"type\":\"Bool\"},{\"id\":2018596725,\"method\":\"account.updateProfile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"first_name\",\"type\":\"flags.0?string\"},{\"name\":\"last_name\",\"type\":\"flags.1?string\"},{\"name\":\"about\",\"type\":\"flags.2?string\"}],\"type\":\"User\"},{\"id\":1713919532,\"method\":\"account.updateStatus\",\"params\":[{\"name\":\"offline\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":127302966,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.WallPapers\"},{\"id\":-977650298,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":227648840,\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1240508136,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"users.UserFull\"},{\"id\":2061264541,\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":-995929106,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector\"},{\"id\":1574346258,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"contacts.Contacts\"},{\"id\":746589157,\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":157945344,\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":269745566,\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1758204945,\"method\":\"contacts.block\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1096393392,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-176409329,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":1673946374,\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1594569905,\"method\":\"messages.getDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_pinned\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Dialogs\"},{\"id\":1143203525,\"method\":\"messages.getHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":-1593989278,\"method\":\"messages.search\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"from_id\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":238054714,\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-1332768214,\"method\":\"messages.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"just_clear\",\"type\":\"flags.0?true\"},{\"name\":\"revoke\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_date\",\"type\":\"flags.2?int\"},{\"name\":\"max_date\",\"type\":\"flags.3?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-443640366,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":94983360,\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1486110434,\"method\":\"messages.setTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Bool\"},{\"id\":482476935,\"method\":\"messages.sendMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":1967638886,\"method\":\"messages.sendMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"media\",\"type\":\"InputMedia\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":-966673468,\"method\":\"messages.forwardMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"with_my_score\",\"type\":\"flags.8?true\"},{\"name\":\"drop_author\",\"type\":\"flags.11?true\"},{\"name\":\"drop_media_captions\",\"type\":\"flags.12?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"random_id\",\"type\":\"Vector\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":-820669733,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-270948702,\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.PeerSettings\"},{\"id\":-1991005362,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1240027791,\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-1364194508,\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"messages.ChatFull\"},{\"id\":1937260541,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":903730804,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":-230206493,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1575461717,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":3450904,\"method\":\"messages.createChat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"Vector\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":-304838614,\"method\":\"updates.getState\",\"params\":[],\"type\":\"updates.State\"},{\"id\":630429265,\"method\":\"updates.getDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_total_limit\",\"type\":\"flags.0?int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":473782614,\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"fallback\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":154966609,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"fallback\",\"type\":\"flags.3?true\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.4?VideoSize\"}],\"type\":\"photos.Photo\"},{\"id\":-2016444625,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1291540959,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1101843010,\"method\":\"upload.getFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"precise\",\"type\":\"flags.0?true\"},{\"name\":\"cdn_supported\",\"type\":\"flags.1?true\"},{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":-990308245,\"method\":\"help.getConfig\",\"params\":[],\"type\":\"Config\"},{\"id\":531836966,\"method\":\"help.getNearestDc\",\"params\":[],\"type\":\"NearestDc\"},{\"id\":1378703997,\"method\":\"help.getAppUpdate\",\"params\":[{\"name\":\"source\",\"type\":\"string\"}],\"type\":\"help.AppUpdate\"},{\"id\":1295590211,\"method\":\"help.getInviteText\",\"params\":[],\"type\":\"help.InviteText\"},{\"id\":-1848823128,\"method\":\"photos.getUserPhotos\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"photos.Photos\"},{\"id\":651135312,\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":-162681021,\"method\":\"messages.requestEncryption\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":1035731989,\"method\":\"messages.acceptEncryption\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"}],\"type\":\"EncryptedChat\"},{\"id\":-208425312,\"method\":\"messages.discardEncryption\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2031374829,\"method\":\"messages.setEncryptedTyping\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"typing\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2135648522,\"method\":\"messages.readEncryptedHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1157265941,\"method\":\"messages.sendEncrypted\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1431914525,\"method\":\"messages.sendEncryptedFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":852769188,\"method\":\"messages.sendEncryptedService\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"id\":1436924774,\"method\":\"messages.receivedQueue\",\"params\":[{\"name\":\"max_qts\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1259113487,\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":-562337987,\"method\":\"upload.saveBigFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"file_total_parts\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-1043505495,\"method\":\"initConnection\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"device_model\",\"type\":\"string\"},{\"name\":\"system_version\",\"type\":\"string\"},{\"name\":\"app_version\",\"type\":\"string\"},{\"name\":\"system_lang_code\",\"type\":\"string\"},{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"proxy\",\"type\":\"flags.0?InputClientProxy\"},{\"name\":\"params\",\"type\":\"flags.1?JSONValue\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1663104819,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":916930423,\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":655677548,\"method\":\"account.checkUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1040964988,\"method\":\"account.updateUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":301470424,\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":-623130288,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-906486552,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector\"}],\"type\":\"account.PrivacyRules\"},{\"id\":-1564422284,\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reason\",\"type\":\"string\"},{\"name\":\"password\",\"type\":\"flags.0?InputCheckPasswordSRP\"}],\"type\":\"Bool\"},{\"id\":150761757,\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":608323678,\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":-627372787,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-113456221,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":-2108208411,\"method\":\"account.sendChangePhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1891839707,\"method\":\"account.changePhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":-710552671,\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Stickers\"},{\"id\":-1197432408,\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":954152242,\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1738800940,\"method\":\"auth.importBotAuthorization\",\"params\":[{\"name\":\"flags\",\"type\":\"int\"},{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"bot_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-1956073268,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"MessageMedia\"},{\"id\":-484392616,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":-545786948,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1418342645,\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":-1663767815,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":-1516564433,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"id\":-779399914,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":-661144474,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":923364464,\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"code\",\"type\":\"string\"},{\"name\":\"new_settings\",\"type\":\"flags.0?account.PasswordInputSettings\"}],\"type\":\"auth.Authorization\"},{\"id\":-1080796745,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1607670315,\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"request_needed\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"},{\"name\":\"title\",\"type\":\"flags.4?string\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1051570619,\"method\":\"messages.checkChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"ChatInvite\"},{\"id\":1817183516,\"method\":\"messages.importChatInvite\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-928977804,\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-946871200,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":-110209570,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":-421563528,\"method\":\"messages.startBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"start_param\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1877938321,\"method\":\"help.getAppChangelog\",\"params\":[{\"name\":\"prev_app_version\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1468322785,\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":-871347913,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-2067661490,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":-196443371,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1383294429,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":2010044880,\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":-1599378234,\"method\":\"channels.getParticipant\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"channels.ChannelParticipant\"},{\"id\":176122811,\"method\":\"channels.getChannels\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":141781513,\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":-1862244601,\"method\":\"channels.createChannel\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.0?true\"},{\"name\":\"megagroup\",\"type\":\"flags.1?true\"},{\"name\":\"for_import\",\"type\":\"flags.3?true\"},{\"name\":\"forum\",\"type\":\"flags.5?true\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"},{\"name\":\"ttl_period\",\"type\":\"flags.4?int\"}],\"type\":\"Updates\"},{\"id\":-751007486,\"method\":\"channels.editAdmin\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1450044624,\"method\":\"channels.editTitle\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-248621111,\"method\":\"channels.editPhoto\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":283557164,\"method\":\"channels.checkUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":890549214,\"method\":\"channels.updateUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":615851205,\"method\":\"channels.joinChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":-130635115,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":429865580,\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":-1072619549,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":51854712,\"method\":\"updates.getChannelDifference\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelMessagesFilter\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":-1470377534,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1568189671,\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1271290010,\"method\":\"messages.searchGlobal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":2016638777,\"method\":\"messages.reorderStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1309538785,\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"long\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":1559270965,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.SavedGifs\"},{\"id\":846868683,\"method\":\"messages.saveGif\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1364105629,\"method\":\"messages.getInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"geo_point\",\"type\":\"flags.0?InputGeoPoint\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"messages.BotResults\"},{\"id\":-346119674,\"method\":\"messages.setInlineBotResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"gallery\",\"type\":\"flags.0?true\"},{\"name\":\"private\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"results\",\"type\":\"Vector\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"next_offset\",\"type\":\"flags.2?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.3?InlineBotSwitchPM\"}],\"type\":\"Bool\"},{\"id\":-738468661,\"method\":\"messages.sendInlineBotResult\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"hide_via\",\"type\":\"flags.11?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":-432034325,\"method\":\"channels.exportMessageLink\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"grouped\",\"type\":\"flags.0?true\"},{\"name\":\"thread\",\"type\":\"flags.1?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"ExportedMessageLink\"},{\"id\":527021574,\"method\":\"channels.toggleSignatures\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1056025023,\"method\":\"auth.resendCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"auth.SentCode\"},{\"id\":520357240,\"method\":\"auth.cancelCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-39416522,\"method\":\"messages.getMessageEditData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"messages.MessageEditData\"},{\"id\":1224152952,\"method\":\"messages.editMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"}],\"type\":\"Updates\"},{\"id\":-2091549254,\"method\":\"messages.editInlineBotMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"message\",\"type\":\"flags.11?string\"},{\"name\":\"media\",\"type\":\"flags.14?InputMedia\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":-1824339449,\"method\":\"messages.getBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"game\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"data\",\"type\":\"flags.0?bytes\"},{\"name\":\"password\",\"type\":\"flags.2?InputCheckPasswordSRP\"}],\"type\":\"messages.BotCallbackAnswer\"},{\"id\":-712043766,\"method\":\"messages.setBotCallbackAnswer\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"alert\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"message\",\"type\":\"flags.0?string\"},{\"name\":\"url\",\"type\":\"flags.2?string\"},{\"name\":\"cache_time\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-1758168906,\"method\":\"contacts.getTopPeers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"correspondents\",\"type\":\"flags.0?true\"},{\"name\":\"bots_pm\",\"type\":\"flags.1?true\"},{\"name\":\"bots_inline\",\"type\":\"flags.2?true\"},{\"name\":\"phone_calls\",\"type\":\"flags.3?true\"},{\"name\":\"forward_users\",\"type\":\"flags.4?true\"},{\"name\":\"forward_chats\",\"type\":\"flags.5?true\"},{\"name\":\"groups\",\"type\":\"flags.10?true\"},{\"name\":\"channels\",\"type\":\"flags.15?true\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"contacts.TopPeers\"},{\"id\":451113900,\"method\":\"contacts.resetTopPeerRating\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-462373635,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1271718337,\"method\":\"messages.saveDraft\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.2?int\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector\"}],\"type\":\"Bool\"},{\"id\":1782549861,\"method\":\"messages.getAllDrafts\",\"params\":[],\"type\":\"Updates\"},{\"id\":1685588756,\"method\":\"messages.getFeaturedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1527873830,\"method\":\"messages.readFeaturedStickers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1649852357,\"method\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.RecentStickers\"},{\"id\":958863608,\"method\":\"messages.saveRecentSticker\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1986437075,\"method\":\"messages.clearRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":1475442322,\"method\":\"messages.getArchivedStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"emojis\",\"type\":\"flags.1?true\"},{\"name\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":457157256,\"method\":\"account.sendConfirmPhoneCode\",\"params\":[{\"name\":\"hash\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1596029123,\"method\":\"account.confirmPhone\",\"params\":[{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-122669393,\"method\":\"channels.getAdminedPublicChannels\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"by_location\",\"type\":\"flags.0?true\"},{\"name\":\"check_limit\",\"type\":\"flags.1?true\"}],\"type\":\"messages.Chats\"},{\"id\":1678738104,\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":-866424884,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector\"},{\"id\":-1907842680,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1896289088,\"method\":\"messages.setGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":363700068,\"method\":\"messages.setInlineGameScore\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"edit_message\",\"type\":\"flags.0?true\"},{\"name\":\"force\",\"type\":\"flags.1?true\"},{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-400399203,\"method\":\"messages.getGameHighScores\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":258170395,\"method\":\"messages.getInlineGameHighScores\",\"params\":[{\"name\":\"id\",\"type\":\"InputBotInlineMessageID\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.HighScores\"},{\"id\":-468934396,\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-2023787330,\"method\":\"messages.getAllChats\",\"params\":[{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"messages.Chats\"},{\"id\":-333262899,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":852135825,\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":-1489903017,\"method\":\"messages.toggleDialogPin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":991616823,\"method\":\"messages.reorderPinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"folder_id\",\"type\":\"int\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-692498958,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":-1440257555,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":-434028723,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":619086221,\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":924093883,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"}],\"type\":\"payments.PaymentForm\"},{\"id\":611897804,\"method\":\"payments.getPaymentReceipt\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":-1228345045,\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":755192367,\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"invoice\",\"type\":\"InputInvoice\"},{\"name\":\"requested_info_id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_option_id\",\"type\":\"flags.1?string\"},{\"name\":\"credentials\",\"type\":\"InputPaymentCredentials\"},{\"name\":\"tip_amount\",\"type\":\"flags.2?long\"}],\"type\":\"payments.PaymentResult\"},{\"id\":1151208273,\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":578650699,\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":-667062079,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":-436833542,\"method\":\"messages.setBotShippingResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector\"}],\"type\":\"Bool\"},{\"id\":163765653,\"method\":\"messages.setBotPrecheckoutResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.1?true\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"error\",\"type\":\"flags.0?string\"}],\"type\":\"Bool\"},{\"id\":-1876841625,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"animated\",\"type\":\"flags.1?true\"},{\"name\":\"videos\",\"type\":\"flags.4?true\"},{\"name\":\"emojis\",\"type\":\"flags.5?true\"},{\"name\":\"text_color\",\"type\":\"flags.6?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"stickers\",\"type\":\"Vector\"},{\"name\":\"software\",\"type\":\"flags.3?string\"}],\"type\":\"messages.StickerSet\"},{\"id\":-143257775,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":-4795190,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":-2041315650,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":1369162417,\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":1430593449,\"method\":\"phone.getCallConfig\",\"params\":[],\"type\":\"DataJSON\"},{\"id\":1124046573,\"method\":\"phone.requestCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":1003664544,\"method\":\"phone.acceptCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":788404002,\"method\":\"phone.confirmCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"g_a\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"phone.PhoneCall\"},{\"id\":399855457,\"method\":\"phone.receivedCall\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"}],\"type\":\"Bool\"},{\"id\":-1295269440,\"method\":\"phone.discardCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"video\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"duration\",\"type\":\"int\"},{\"name\":\"reason\",\"type\":\"PhoneCallDiscardReason\"},{\"name\":\"connection_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":1508562471,\"method\":\"phone.setCallRating\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_initiative\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"rating\",\"type\":\"int\"},{\"name\":\"comment\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":662363518,\"method\":\"phone.saveCallDebug\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"debug\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":962554330,\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":-1691921240,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector\"},{\"id\":1375900482,\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":-219008246,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":-269862909,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-845657435,\"method\":\"langpack.getDifference\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"LangPackDifference\"},{\"id\":1120311183,\"method\":\"langpack.getLanguages\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1763259007,\"method\":\"channels.editBanned\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":870184064,\"method\":\"channels.getAdminLog\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"events_filter\",\"type\":\"flags.0?ChannelAdminLogEventsFilter\"},{\"name\":\"admins\",\"type\":\"flags.1?Vector\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":-1847836879,\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":-914493408,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":-359881479,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":82946729,\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FavedStickers\"},{\"id\":-1174420133,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-357180360,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-2020263951,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":-251140208,\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1683319225,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"for_everyone\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1036054804,\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":-356796084,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":921026381,\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1881817312,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":-1225713124,\"method\":\"messages.sendMultiMedia\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"background\",\"type\":\"flags.6?true\"},{\"name\":\"clear_draft\",\"type\":\"flags.7?true\"},{\"name\":\"noforwards\",\"type\":\"flags.14?true\"},{\"name\":\"update_stickersets_order\",\"type\":\"flags.15?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"multi_media\",\"type\":\"Vector\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Updates\"},{\"id\":1347929239,\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":405695855,\"method\":\"account.getWebAuthorizations\",\"params\":[],\"type\":\"account.WebAuthorizations\"},{\"id\":755087855,\"method\":\"account.resetWebAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1747789204,\"method\":\"account.resetWebAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":896555914,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":-1856595926,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"long\"}],\"type\":\"Vector\"},{\"id\":749019089,\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":-294455398,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":-1299661699,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector\"},{\"id\":1936088002,\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1986010339,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":-1199522741,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1865902923,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1456907910,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":-202552205,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"long\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":-1516022023,\"method\":\"account.sendVerifyPhoneCode\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"CodeSettings\"}],\"type\":\"auth.SentCode\"},{\"id\":1305716726,\"method\":\"account.verifyPhone\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1730136133,\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"purpose\",\"type\":\"EmailVerifyPurpose\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":53322959,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"purpose\",\"type\":\"EmailVerifyPurpose\"},{\"name\":\"verification\",\"type\":\"EmailVerification\"}],\"type\":\"account.EmailVerified\"},{\"id\":1072547679,\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":-2098076769,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2092831552,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":-1896617296,\"method\":\"account.initTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"contacts\",\"type\":\"flags.0?true\"},{\"name\":\"message_users\",\"type\":\"flags.1?true\"},{\"name\":\"message_chats\",\"type\":\"flags.2?true\"},{\"name\":\"message_megagroups\",\"type\":\"flags.3?true\"},{\"name\":\"message_channels\",\"type\":\"flags.4?true\"},{\"name\":\"files\",\"type\":\"flags.5?true\"},{\"name\":\"file_max_size\",\"type\":\"flags.5?long\"}],\"type\":\"account.Takeout\"},{\"id\":489050862,\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":486505992,\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector\"},{\"id\":911373810,\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1398145746,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":-1031349873,\"method\":\"messages.markDialogUnread\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputDialogPeer\"}],\"type\":\"Bool\"},{\"id\":585256482,\"method\":\"messages.getDialogUnreadMarks\",\"params\":[],\"type\":\"Vector\"},{\"id\":-2062238246,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2119757468,\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1735311088,\"method\":\"help.getAppConfig\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":1862465352,\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-966677240,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":1784243458,\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":-760547348,\"method\":\"messages.updatePinnedMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.0?true\"},{\"name\":\"unpin\",\"type\":\"flags.1?true\"},{\"name\":\"pm_oneside\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-1881204448,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2055154197,\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-1043606090,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":-748624084,\"method\":\"help.getSupportName\",\"params\":[],\"type\":\"help.SupportName\"},{\"id\":59377875,\"method\":\"help.getUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"help.UserInfo\"},{\"id\":1723407216,\"method\":\"help.editUserInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector\"}],\"type\":\"help.UserInfo\"},{\"id\":-1626880216,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":-806076575,\"method\":\"account.setContactSignUpNotification\",\"params\":[{\"name\":\"silent\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1398240377,\"method\":\"account.getNotifyExceptions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"compare_sound\",\"type\":\"flags.1?true\"},{\"name\":\"peer\",\"type\":\"flags.0?InputNotifyPeer\"}],\"type\":\"Updates\"},{\"id\":283795844,\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1941660731,\"method\":\"messages.getPollResults\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1848369232,\"method\":\"messages.getOnlines\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"ChatOnlines\"},{\"id\":-554301545,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-1517917375,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"id\":-57811990,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":-578472351,\"method\":\"account.uploadWallPaper\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"WallPaper\"},{\"id\":1817860919,\"method\":\"account.saveWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"unsave\",\"type\":\"Bool\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-18000023,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":-1153722364,\"method\":\"account.resetWallPapers\",\"params\":[],\"type\":\"Bool\"},{\"id\":1457130303,\"method\":\"account.getAutoDownloadSettings\",\"params\":[],\"type\":\"account.AutoDownloadSettings\"},{\"id\":1995661875,\"method\":\"account.saveAutoDownloadSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"low\",\"type\":\"flags.0?true\"},{\"name\":\"high\",\"type\":\"flags.1?true\"},{\"name\":\"settings\",\"type\":\"AutoDownloadSettings\"}],\"type\":\"Bool\"},{\"id\":899735650,\"method\":\"messages.getEmojiKeywords\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":352892591,\"method\":\"messages.getEmojiKeywordsDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":1318675378,\"method\":\"messages.getEmojiKeywordsLanguages\",\"params\":[{\"name\":\"lang_codes\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-709817306,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":1749536939,\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":472471681,\"method\":\"folders.deleteFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":11435201,\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"filters\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-170208392,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":1079520178,\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":428848198,\"method\":\"messages.requestUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":-1322487515,\"method\":\"messages.acceptUrlAuth\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"flags.1?InputPeer\"},{\"name\":\"msg_id\",\"type\":\"flags.1?int\"},{\"name\":\"button_id\",\"type\":\"flags.1?int\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"UrlAuthResult\"},{\"id\":1336717624,\"method\":\"messages.hidePeerSettingsBar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-386636848,\"method\":\"contacts.addContact\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"add_phone_privacy_exception\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-130964977,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-1892102881,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":-750207932,\"method\":\"contacts.getLocated\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"background\",\"type\":\"flags.1?true\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"self_expires\",\"type\":\"flags.0?int\"}],\"type\":\"Updates\"},{\"id\":1491484525,\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-304832784,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-183077365,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":-1111817116,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"messages.Messages\"},{\"id\":-1120369398,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1504586518,\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":473805619,\"method\":\"account.uploadTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.0?InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":1697530880,\"method\":\"account.createTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"slug\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"}],\"type\":\"Theme\"},{\"id\":737414348,\"method\":\"account.updateTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"slug\",\"type\":\"flags.0?string\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"document\",\"type\":\"flags.2?InputDocument\"},{\"name\":\"settings\",\"type\":\"flags.3?Vector\"}],\"type\":\"Theme\"},{\"id\":-229175188,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-953697477,\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"},{\"name\":\"format\",\"type\":\"flags.2?string\"},{\"name\":\"base_theme\",\"type\":\"flags.3?BaseTheme\"}],\"type\":\"Bool\"},{\"id\":978872812,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"}],\"type\":\"Theme\"},{\"id\":1913054296,\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.Themes\"},{\"id\":-1210022402,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector\"}],\"type\":\"auth.LoginToken\"},{\"id\":-1783866140,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":-392909491,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":-1250643605,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":-1952756306,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":300429806,\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":1705865692,\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-1200736242,\"method\":\"messages.getPollVotes\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"flags.0?bytes\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.VotesList\"},{\"id\":-1257951254,\"method\":\"messages.toggleStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"uninstall\",\"type\":\"flags.0?true\"},{\"name\":\"archive\",\"type\":\"flags.1?true\"},{\"name\":\"unarchive\",\"type\":\"flags.2?true\"},{\"name\":\"stickersets\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":779736953,\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":-241247891,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":-1566780372,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector\"},{\"id\":450142282,\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":-983318044,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":-1421720550,\"method\":\"stats.getBroadcastStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":1646092192,\"method\":\"stats.loadAsyncGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"x\",\"type\":\"flags.0?long\"}],\"type\":\"StatsGraph\"},{\"id\":-1707717072,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":85399130,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":2127598753,\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-1063816159,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":505748629,\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-8744061,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-589330937,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":-349483786,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":517647042,\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":-183649631,\"method\":\"help.dismissSuggestion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"suggestion\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1935116200,\"method\":\"help.getCountriesList\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.CountriesList\"},{\"id\":584962828,\"method\":\"messages.getReplies\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Messages\"},{\"id\":1147761405,\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":-147740172,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":698914348,\"method\":\"contacts.blockFromReplies\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"delete_message\",\"type\":\"flags.0?true\"},{\"name\":\"delete_history\",\"type\":\"flags.1?true\"},{\"name\":\"report_spam\",\"type\":\"flags.2?true\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1445996571,\"method\":\"stats.getMessagePublicForwards\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"offset_rate\",\"type\":\"int\"},{\"name\":\"offset_peer\",\"type\":\"InputPeer\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":-1226791947,\"method\":\"stats.getMessageStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"stats.MessageStats\"},{\"id\":-299714136,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":1221445336,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"rtmp_stream\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"random_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"schedule_date\",\"type\":\"flags.1?int\"}],\"type\":\"Updates\"},{\"id\":-1322057861,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"video_stopped\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"},{\"name\":\"invite_hash\",\"type\":\"flags.1?string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":1342404601,\"method\":\"phone.leaveGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2067345760,\"method\":\"phone.inviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":2054648117,\"method\":\"phone.discardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1958458429,\"method\":\"phone.toggleGroupCallSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reset_invite_hash\",\"type\":\"flags.1?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"join_muted\",\"type\":\"flags.0?Bool\"}],\"type\":\"Updates\"},{\"id\":68699611,\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupCall\"},{\"id\":-984033109,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector\"},{\"name\":\"sources\",\"type\":\"Vector\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":-1248003721,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"sources\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":1540419152,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-104078327,\"method\":\"messages.deletePhoneCallHistory\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":1140726259,\"method\":\"messages.checkHistoryImport\",\"params\":[{\"name\":\"import_head\",\"type\":\"string\"}],\"type\":\"messages.HistoryImportParsed\"},{\"id\":873008187,\"method\":\"messages.initHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"media_count\",\"type\":\"int\"}],\"type\":\"messages.HistoryImport\"},{\"id\":713433234,\"method\":\"messages.uploadImportedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":-1271008444,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":-1565154314,\"method\":\"messages.getExportedChatInvites\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.3?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"},{\"name\":\"offset_date\",\"type\":\"flags.2?int\"},{\"name\":\"offset_link\",\"type\":\"flags.2?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":1937010524,\"method\":\"messages.getExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":-1110823051,\"method\":\"messages.editExportedChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"},{\"name\":\"request_needed\",\"type\":\"flags.3?Bool\"},{\"name\":\"title\",\"type\":\"flags.4?string\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":1452833749,\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":-731601877,\"method\":\"messages.deleteExportedChatInvite\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":958457583,\"method\":\"messages.getAdminsWithInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":-553329330,\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"requested\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"flags.1?string\"},{\"name\":\"q\",\"type\":\"flags.2?string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":-1207017500,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":-91437323,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":187239529,\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":1573261059,\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":-248985848,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"video\",\"type\":\"flags.2?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"},{\"name\":\"video_portrait\",\"type\":\"flags.2?Bool\"}],\"type\":\"Updates\"},{\"id\":-1524155713,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"muted\",\"type\":\"flags.0?Bool\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"},{\"name\":\"video_stopped\",\"type\":\"flags.3?Bool\"},{\"name\":\"video_paused\",\"type\":\"flags.4?Bool\"},{\"name\":\"presentation_paused\",\"type\":\"flags.5?Bool\"}],\"type\":\"Updates\"},{\"id\":480685066,\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-277077702,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":-425040769,\"method\":\"phone.exportGroupCallInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_self_unmute\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.ExportedGroupCallInvite\"},{\"id\":563885286,\"method\":\"phone.toggleGroupCallStartSubscription\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"subscribed\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1451287362,\"method\":\"phone.startScheduledGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":1465786252,\"method\":\"phone.saveDefaultGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"join_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-873829436,\"method\":\"phone.joinGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"Updates\"},{\"id\":475058500,\"method\":\"phone.leaveGroupCallPresentation\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"Updates\"},{\"id\":676017721,\"method\":\"stickers.checkShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1303364867,\"method\":\"stickers.suggestShortName\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"stickers.SuggestedShortName\"},{\"id\":1032708345,\"method\":\"bots.resetBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-481554986,\"method\":\"bots.getBotCommands\",\"params\":[{\"name\":\"scope\",\"type\":\"BotCommandScope\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Vector\"},{\"id\":-1828139493,\"method\":\"account.resetPassword\",\"params\":[],\"type\":\"account.ResetPasswordResult\"},{\"id\":1284770294,\"method\":\"account.declinePasswordReset\",\"params\":[],\"type\":\"Bool\"},{\"id\":221691769,\"method\":\"auth.checkRecoveryPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":-700916087,\"method\":\"account.getChatThemes\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.Themes\"},{\"id\":-432283329,\"method\":\"messages.setChatTheme\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":-1095836780,\"method\":\"channels.viewSponsoredMessage\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"random_id\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":-333377601,\"method\":\"channels.getSponsoredMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.SponsoredMessages\"},{\"id\":745510839,\"method\":\"messages.getMessageReadParticipants\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Vector\"},{\"id\":1240514025,\"method\":\"messages.getSearchResultsCalendar\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_date\",\"type\":\"int\"}],\"type\":\"messages.SearchResultsCalendar\"},{\"id\":1855292323,\"method\":\"messages.getSearchResultsPositions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.SearchResultsPositions\"},{\"id\":2145904661,\"method\":\"messages.hideChatJoinRequest\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"approved\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":-528091926,\"method\":\"messages.hideAllChatJoinRequests\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"approved\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":-1323389022,\"method\":\"messages.toggleNoForwards\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-855777386,\"method\":\"messages.saveDefaultSendAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"send_as\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":231174382,\"method\":\"channels.getSendAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"channels.SendAsPeers\"},{\"id\":-1081501024,\"method\":\"account.setAuthorizationTTL\",\"params\":[{\"name\":\"authorization_ttl_days\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1089766498,\"method\":\"account.changeAuthorizationSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"encrypted_requests_disabled\",\"type\":\"flags.0?Bool\"},{\"name\":\"call_requests_disabled\",\"type\":\"flags.1?Bool\"}],\"type\":\"Bool\"},{\"id\":913655003,\"method\":\"channels.deleteParticipantHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"participant\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-754091820,\"method\":\"messages.sendReaction\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"big\",\"type\":\"flags.1?true\"},{\"name\":\"add_to_recent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.0?Vector\"}],\"type\":\"Updates\"},{\"id\":-1950707482,\"method\":\"messages.getMessagesReactions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1176190792,\"method\":\"messages.getMessageReactionsList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"reaction\",\"type\":\"flags.0?Reaction\"},{\"name\":\"offset\",\"type\":\"flags.1?string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.MessageReactionsList\"},{\"id\":-21928079,\"method\":\"messages.setChatAvailableReactions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"available_reactions\",\"type\":\"ChatReactions\"}],\"type\":\"Updates\"},{\"id\":417243308,\"method\":\"messages.getAvailableReactions\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AvailableReactions\"},{\"id\":1330094102,\"method\":\"messages.setDefaultReaction\",\"params\":[{\"name\":\"reaction\",\"type\":\"Reaction\"}],\"type\":\"Bool\"},{\"id\":1662529584,\"method\":\"messages.translateText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"flags.0?InputPeer\"},{\"name\":\"id\",\"type\":\"flags.0?Vector\"},{\"name\":\"text\",\"type\":\"flags.1?Vector\"},{\"name\":\"to_lang\",\"type\":\"string\"}],\"type\":\"messages.TranslatedText\"},{\"id\":841173339,\"method\":\"messages.getUnreadReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"add_offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"min_id\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1420459918,\"method\":\"messages.readReactions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":-1963375804,\"method\":\"contacts.resolvePhone\",\"params\":[{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":447879488,\"method\":\"phone.getGroupCallStreamChannels\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.GroupCallStreamChannels\"},{\"id\":-558650433,\"method\":\"phone.getGroupCallStreamRtmpUrl\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"revoke\",\"type\":\"Bool\"}],\"type\":\"phone.GroupCallStreamRtmpUrl\"},{\"id\":276705696,\"method\":\"messages.searchSentMedia\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"filter\",\"type\":\"MessagesFilter\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":385663691,\"method\":\"messages.getAttachMenuBots\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"AttachMenuBots\"},{\"id\":1998676370,\"method\":\"messages.getAttachMenuBot\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"}],\"type\":\"AttachMenuBotsBot\"},{\"id\":1777704297,\"method\":\"messages.toggleBotInAttachMenu\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"write_allowed\",\"type\":\"flags.0?true\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":395003915,\"method\":\"messages.requestWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"from_bot_menu\",\"type\":\"flags.4?true\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"url\",\"type\":\"flags.1?string\"},{\"name\":\"start_param\",\"type\":\"flags.3?string\"},{\"name\":\"theme_params\",\"type\":\"flags.2?DataJSON\"},{\"name\":\"platform\",\"type\":\"string\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"WebViewResult\"},{\"id\":2146648841,\"method\":\"messages.prolongWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"silent\",\"type\":\"flags.5?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.9?int\"},{\"name\":\"send_as\",\"type\":\"flags.13?InputPeer\"}],\"type\":\"Bool\"},{\"id\":698084494,\"method\":\"messages.requestSimpleWebView\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"theme_params\",\"type\":\"flags.0?DataJSON\"},{\"name\":\"platform\",\"type\":\"string\"}],\"type\":\"SimpleWebViewResult\"},{\"id\":172168437,\"method\":\"messages.sendWebViewResultMessage\",\"params\":[{\"name\":\"bot_query_id\",\"type\":\"string\"},{\"name\":\"result\",\"type\":\"InputBotInlineResult\"}],\"type\":\"WebViewMessageSent\"},{\"id\":-603831608,\"method\":\"messages.sendWebViewData\",\"params\":[{\"name\":\"bot\",\"type\":\"InputUser\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"button_text\",\"type\":\"string\"},{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":1157944655,\"method\":\"bots.setBotMenuButton\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"button\",\"type\":\"BotMenuButton\"}],\"type\":\"Bool\"},{\"id\":-1671369944,\"method\":\"bots.getBotMenuButton\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"BotMenuButton\"},{\"id\":-510647672,\"method\":\"account.getSavedRingtones\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.SavedRingtones\"},{\"id\":1038768899,\"method\":\"account.saveRingtone\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"account.SavedRingtone\"},{\"id\":-2095414366,\"method\":\"account.uploadRingtone\",\"params\":[{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"file_name\",\"type\":\"string\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":2021942497,\"method\":\"bots.setBotBroadcastDefaultAdminRights\",\"params\":[{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"}],\"type\":\"Bool\"},{\"id\":-1839281686,\"method\":\"bots.setBotGroupDefaultAdminRights\",\"params\":[{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"}],\"type\":\"Bool\"},{\"id\":1092913030,\"method\":\"phone.saveCallLog\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"file\",\"type\":\"InputFile\"}],\"type\":\"Bool\"},{\"id\":-456419968,\"method\":\"channels.toggleJoinToSend\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":1277789622,\"method\":\"channels.toggleJoinRequest\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":261206117,\"method\":\"payments.exportInvoice\",\"params\":[{\"name\":\"invoice_media\",\"type\":\"InputMedia\"}],\"type\":\"payments.ExportedInvoice\"},{\"id\":647928393,\"method\":\"messages.transcribeAudio\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.TranscribedAudio\"},{\"id\":2132608815,\"method\":\"messages.rateTranscribedAudio\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"transcription_id\",\"type\":\"long\"},{\"name\":\"good\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-2131921795,\"method\":\"payments.assignAppStoreTransaction\",\"params\":[{\"name\":\"receipt\",\"type\":\"bytes\"},{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Updates\"},{\"id\":-537046829,\"method\":\"payments.assignPlayMarketTransaction\",\"params\":[{\"name\":\"receipt\",\"type\":\"DataJSON\"},{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Updates\"},{\"id\":-1614700874,\"method\":\"payments.canPurchasePremium\",\"params\":[{\"name\":\"purpose\",\"type\":\"InputStorePaymentPurpose\"}],\"type\":\"Bool\"},{\"id\":-1206152236,\"method\":\"help.getPremiumPromo\",\"params\":[],\"type\":\"help.PremiumPromo\"},{\"id\":-643100844,\"method\":\"messages.getCustomEmojiDocuments\",\"params\":[{\"name\":\"document_id\",\"type\":\"Vector\"}],\"type\":\"Vector\"},{\"id\":-67329649,\"method\":\"messages.getEmojiStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.AllStickers\"},{\"id\":248473398,\"method\":\"messages.getFeaturedEmojiStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":-70001045,\"method\":\"account.updateEmojiStatus\",\"params\":[{\"name\":\"emoji_status\",\"type\":\"EmojiStatus\"}],\"type\":\"Bool\"},{\"id\":-696962170,\"method\":\"account.getDefaultEmojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":257392901,\"method\":\"account.getRecentEmojiStatuses\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"account.EmojiStatuses\"},{\"id\":404757166,\"method\":\"account.clearRecentEmojiStatuses\",\"params\":[],\"type\":\"Bool\"},{\"id\":1063567478,\"method\":\"messages.reportReaction\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"reaction_peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1149164102,\"method\":\"messages.getTopReactions\",\"params\":[{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Reactions\"},{\"id\":960896434,\"method\":\"messages.getRecentReactions\",\"params\":[{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"messages.Reactions\"},{\"id\":-1644236876,\"method\":\"messages.clearRecentReactions\",\"params\":[],\"type\":\"Bool\"},{\"id\":-2064119788,\"method\":\"messages.getExtendedMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":767062953,\"method\":\"auth.importWebTokenAuthorization\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"web_auth_token\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":-279966037,\"method\":\"account.reorderUsernames\",\"params\":[{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1490465654,\"method\":\"account.toggleUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"active\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":-1268978403,\"method\":\"channels.reorderUsernames\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Bool\"},{\"id\":1358053637,\"method\":\"channels.toggleUsername\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"username\",\"type\":\"string\"},{\"name\":\"active\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":170155475,\"method\":\"channels.deactivateAllUsernames\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":-1540781271,\"method\":\"channels.toggleForum\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-200539612,\"method\":\"channels.createForumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"icon_color\",\"type\":\"flags.0?int\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.3?long\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"send_as\",\"type\":\"flags.2?InputPeer\"}],\"type\":\"Updates\"},{\"id\":233136337,\"method\":\"channels.getForumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_id\",\"type\":\"int\"},{\"name\":\"offset_topic\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ForumTopics\"},{\"id\":-1333584199,\"method\":\"channels.getForumTopicsByID\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topics\",\"type\":\"Vector\"}],\"type\":\"messages.ForumTopics\"},{\"id\":-186670715,\"method\":\"channels.editForumTopic\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topic_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"flags.0?string\"},{\"name\":\"icon_emoji_id\",\"type\":\"flags.1?long\"},{\"name\":\"closed\",\"type\":\"flags.2?Bool\"},{\"name\":\"hidden\",\"type\":\"flags.3?Bool\"}],\"type\":\"Updates\"},{\"id\":1814925350,\"method\":\"channels.updatePinnedForumTopic\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"topic_id\",\"type\":\"int\"},{\"name\":\"pinned\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":876830509,\"method\":\"channels.deleteTopicHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"top_msg_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":693150095,\"method\":\"channels.reorderPinnedForumTopics\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"force\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"order\",\"type\":\"Vector\"}],\"type\":\"Updates\"},{\"id\":1760814315,\"method\":\"channels.toggleAntiSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-1471109485,\"method\":\"channels.reportAntiSpamFalsePositive\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":-1632299963,\"method\":\"messages.setDefaultHistoryTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":1703637384,\"method\":\"messages.getDefaultHistoryTTL\",\"params\":[],\"type\":\"DefaultHistoryTTL\"},{\"id\":-127582169,\"method\":\"contacts.exportContactToken\",\"params\":[],\"type\":\"ExportedContactToken\"},{\"id\":318789512,\"method\":\"contacts.importContactToken\",\"params\":[{\"name\":\"token\",\"type\":\"string\"}],\"type\":\"User\"},{\"id\":-515093903,\"method\":\"photos.uploadContactProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"suggest\",\"type\":\"flags.3?true\"},{\"name\":\"save\",\"type\":\"flags.4?true\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"},{\"name\":\"video_emoji_markup\",\"type\":\"flags.5?VideoSize\"}],\"type\":\"photos.Photo\"},{\"id\":1785624660,\"method\":\"channels.toggleParticipantsHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":-29831141,\"method\":\"messages.sendBotRequestedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"button_id\",\"type\":\"int\"},{\"name\":\"requested_peer\",\"type\":\"InputPeer\"}],\"type\":\"Updates\"},{\"id\":-495647960,\"method\":\"account.getDefaultProfilePhotoEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-1856479058,\"method\":\"account.getDefaultGroupPhotoEmojis\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-1991881904,\"method\":\"auth.requestFirebaseSms\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"safety_net_token\",\"type\":\"flags.0?string\"},{\"name\":\"ios_push_secret\",\"type\":\"flags.1?string\"}],\"type\":\"Bool\"},{\"id\":1955122779,\"method\":\"messages.getEmojiGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":785209037,\"method\":\"messages.getEmojiStatusGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":564480243,\"method\":\"messages.getEmojiProfilePhotoGroups\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.EmojiGroups\"},{\"id\":739360983,\"method\":\"messages.searchCustomEmoji\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"EmojiList\"},{\"id\":-461589127,\"method\":\"messages.togglePeerTranslations\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"disabled\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":-1379156774,\"method\":\"account.getAutoSaveSettings\",\"params\":[],\"type\":\"account.AutoSaveSettings\"},{\"id\":-694451359,\"method\":\"account.saveAutoSaveSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"users\",\"type\":\"flags.0?true\"},{\"name\":\"chats\",\"type\":\"flags.1?true\"},{\"name\":\"broadcasts\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"flags.3?InputPeer\"},{\"name\":\"settings\",\"type\":\"AutoSaveSettings\"}],\"type\":\"Bool\"},{\"id\":1404829728,\"method\":\"account.deleteAutoSaveExceptions\",\"params\":[],\"type\":\"Bool\"}]},\"layer\":152} as {\n MTProto: {\n constructors: MTProtoConstructor[],\n methods: MTProtoMethod[],\n constructorsIndex?: {[id: number]: number}\n },\n API: {\n constructors: MTProtoConstructor[],\n methods: MTProtoMethod[],\n constructorsIndex?: {[id: number]: number}\n },\n layer: number,\n};\n","export default function intToUint(val: number) {\n // return val < 0 ? val + 4294967296 : val; // 0 <= val <= Infinity\n return val >>> 0; // (4294967296 >>> 0) === 0; 0 <= val <= 4294967295\n}\n","import bigInt from 'big-integer';\nimport intToUint from '../number/intToUint';\n\nexport default function ulongFromInts(high: number, low: number) {\n high = intToUint(high), low = intToUint(low);\n return bigInt(high).shiftLeft(32).add(bigInt(low));\n}\n","import bigInt from 'big-integer';\n\nexport const safeBigInt = bigInt(Number.MAX_SAFE_INTEGER);\nexport const ulongBigInt = bigInt(bigInt[2]).pow(64);\nexport const longBigInt = ulongBigInt.divide(bigInt[2]);\n","import bigInt from 'big-integer';\nimport { longBigInt, ulongBigInt } from './bigIntConstants';\n\nexport function bigIntFromBytes(bytes: Uint8Array | number[], base = 256) {\n return bigInt.fromArray(bytes instanceof Uint8Array ? [...bytes] : bytes, base);\n}\n\nexport function bigIntToBytes(bigInt: bigInt.BigInteger) {\n return new Uint8Array(bigInt.toArray(256).value);\n}\n\nexport function bigIntToSigned(bigInt: bigInt.BigInteger) {\n return bigInt.greater(longBigInt) ? bigInt.minus(ulongBigInt) : bigInt;\n}\n\nexport function bigIntToUnsigned(bigInt: bigInt.BigInteger) {\n return bigInt.isNegative() ? ulongBigInt.add(bigInt) : bigInt;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport Schema, {MTProtoConstructor} from './schema';\nimport {JSONValue} from '../../layer';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport isObject from '../../helpers/object/isObject';\nimport gzipUncompress from '../../helpers/gzipUncompress';\nimport bigInt from 'big-integer';\nimport ulongFromInts from '../../helpers/long/ulongFromInts';\nimport {safeBigInt} from '../../helpers/bigInt/bigIntConstants';\nimport {bigIntToSigned, bigIntToUnsigned} from '../../helpers/bigInt/bigIntConversion';\n\nconst boolFalse = +Schema.API.constructors.find((c) => c.predicate === 'boolFalse').id;\nconst boolTrue = +Schema.API.constructors.find((c) => c.predicate === 'boolTrue').id;\nconst vector = +Schema.API.constructors.find((c) => c.predicate === 'vector').id;\nconst gzipPacked = +Schema.MTProto.constructors.find((c) => c.predicate === 'gzip_packed').id;\n\n// * using slice to have a new buffer, otherwise the buffer will be copied to main thread\nconst sliceMethod: 'slice' | 'subarray' = 'slice'; // subarray\n\nclass TLSerialization {\n private maxLength = 2048; // 2Kb\n private offset = 0; // in bytes\n private mtproto = false;\n private debug = false;// Modes.debug;\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\n this.maxLength = options.startMaxLength || 2048; // 2Kb\n this.mtproto = options.mtproto || false;\n this.createBuffer();\n }\n\n public createBuffer() {\n this.buffer = new ArrayBuffer(this.maxLength);\n this.intView = new Int32Array(this.buffer);\n this.byteView = new Uint8Array(this.buffer);\n }\n\n public getArray() {\n const resultBuffer = new ArrayBuffer(this.offset);\n\n // let perf = performance.now();\n /* const resultUint8: any = new Uint8Array(resultBuffer);\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\n // console.log('perf uint8', performance.now() - perf);\n\n // perf = performance.now();\n const resultInt32 = new Int32Array(resultBuffer);\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\n // console.log('perf int32', performance.now() - perf);\n\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\n console.error(resultUint8, resultInt32);\n } */\n\n return resultInt32;\n }\n\n public getBuffer() {\n return this.getArray().buffer;\n }\n\n public getBytes(typed: true): Uint8Array;\n public getBytes(typed?: false): number[];\n public getBytes(typed: boolean = true): number[] | Uint8Array {\n if(typed) {\n const resultBuffer = new ArrayBuffer(this.offset);\n const resultArray = new Uint8Array(resultBuffer);\n\n resultArray.set(this.byteView.subarray(0, this.offset));\n\n return resultArray;\n }\n\n const bytes: number[] = new Array(this.offset);\n for(let i = 0; i < this.offset; ++i) {\n bytes[i] = this.byteView[i];\n }\n return bytes;\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public checkLength(needBytes: number) {\n if(this.offset + needBytes < this.maxLength) {\n return;\n }\n\n // console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\n const previousBuffer = this.buffer;\n // const previousByteView = this.byteView;\n const previousArray = new Int32Array(previousBuffer);\n\n this.createBuffer();\n\n new Int32Array(this.buffer).set(previousArray);\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32),\n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\n }\n\n public writeInt(i: number, field: string) {\n this.debug && console.log('>>>', i.toString(16), i, field);\n\n const offset = this.offset / 4;\n this.checkLength(4);\n this.intView[offset] = i;\n this.offset += 4;\n\n return offset;\n }\n\n public storeInt(i: number, field?: string) {\n return this.writeInt(i, (field || '') + ':int');\n }\n\n public storeBool(i: boolean, field?: string) {\n if(i) {\n this.writeInt(boolTrue, (field || '') + ':bool');\n } else {\n this.writeInt(boolFalse, (field || '') + ':bool');\n }\n }\n\n public storeLongP(iHigh: number, iLow: number, field?: string) {\n this.writeInt(iLow, (field || '') + ':long[low]');\n this.writeInt(iHigh, (field || '') + ':long[high]');\n }\n\n public storeLong(sLong: Array | string | number, field?: string) {\n if(Array.isArray(sLong)) {\n if(sLong.length === 2) {\n return this.storeLongP(sLong[0], sLong[1], field);\n } else {\n return this.storeIntBytes(sLong, 64, field);\n }\n }\n\n const _bigInt = bigIntToUnsigned(bigInt(sLong as string));\n const {quotient, remainder} = _bigInt.divmod(0x100000000);\n const high = quotient.toJSNumber();\n const low = remainder.toJSNumber();\n\n this.writeInt(low, (field || '') + ':long[low]');\n this.writeInt(high, (field || '') + ':long[high]');\n }\n\n public storeDouble(f: any, field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n\n doubleView[0] = f;\n\n this.writeInt(intView[0], (field || '') + ':double[low]');\n this.writeInt(intView[1], (field || '') + ':double[high]');\n }\n\n public storeString(s: string, field?: string) {\n this.debug && console.log('>>>', s, (field || '') + ':string');\n\n if(s === undefined) {\n s = '';\n }\n const sUTF8 = unescape(encodeURIComponent(s));\n\n this.checkLength(sUTF8.length + 8);\n\n const len = sUTF8.length;\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n for(let i = 0; i < len; ++i) {\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\n }\n\n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n\n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n } else if(bytes === undefined) {\n bytes = [];\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\n\n // if uint8array was json.stringified, then will be: {'0': 123, '1': 123}\n const len = (bytes as Uint8Array).length;\n this.checkLength(len + 8);\n if(len <= 253) {\n this.byteView[this.offset++] = len;\n } else {\n this.byteView[this.offset++] = 254;\n this.byteView[this.offset++] = len & 0xFF;\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\n }\n\n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n\n // Padding\n while(this.offset % 4) {\n this.byteView[this.offset++] = 0;\n }\n }\n\n public storeIntBytes(bytes: ArrayBuffer | Uint8Array | number[], bits: number, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = (bytes as Uint8Array).length;\n if((bits % 32) || (len * 8) !== bits) {\n const error = new Error('Invalid bits: ' + bits + ', ' + len);\n console.error(error, bytes, field);\n throw error;\n }\n\n this.debug && console.log('>>>', bytesToHex(bytes as Uint8Array), (field || '') + ':int' + bits);\n this.checkLength(len);\n\n this.byteView.set(bytes as Uint8Array, this.offset);\n this.offset += len;\n }\n\n public storeRawBytes(bytes: ArrayLike, field?: string) {\n if(bytes instanceof ArrayBuffer) {\n bytes = new Uint8Array(bytes);\n }\n\n const len = bytes.length;\n\n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\n this.checkLength(len);\n\n this.byteView.set(bytes, this.offset);\n this.offset += len;\n }\n\n public storeMethod(methodName: string, params: any) {\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const methodData = schema.methods.find((m) => m.method === methodName);\n\n if(!methodData) {\n throw new Error('No method ' + methodName + ' found');\n }\n\n this.storeInt(methodData.id, methodName + '[id]');\n\n const pFlags = params.pFlags || params; // * support pFlags, though am not expecting it to be there\n const flagsOffsets: {[paramName: string]: number} = {};\n // console.log('storeMethod', len, methodData);\n for(const param of methodData.params) {\n let type = param.type;\n\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(params[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags[param.name] : params[param.name] !== undefined) {\n // console.log('storeMethod autocompleting', methodName, param.name, params[param.name], type);\n params[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n\n // console.log('storeMethod', methodName, fieldBit, params[fieldBit[0]], params, param, condType, !!(params[fieldBit[0]] & (1 << +fieldBit[1])));\n type = condType[1];\n }\n\n // console.log('storeMethod', methodName, param.name, params[param.name], type);\n const result = this.storeObject(params[param.name], type, methodName + '[' + param.name + ']');\n\n if(type === '#') {\n params[param.name] = params[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(const paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = params[paramName];\n }\n\n return methodData.type;\n }\n\n public storeObject(obj: any, type: string, field?: string) {\n // console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex);\n switch(type) {\n case '#':\n obj = obj || 0;\n case 'int':\n return this.storeInt(obj, field);\n case 'long':\n return this.storeLong(obj, field);\n case 'int128':\n return this.storeIntBytes(obj, 128, field);\n case 'int256':\n return this.storeIntBytes(obj, 256, field);\n case 'int512':\n return this.storeIntBytes(obj, 512, field);\n case 'string':\n return this.storeString(obj, field);\n case 'bytes':\n return this.storeBytes(obj, field);\n case 'double':\n return this.storeDouble(obj, field);\n case 'Bool':\n return this.storeBool(obj, field);\n case 'true':\n return\n }\n\n if(Array.isArray(obj)) {\n if(type.substr(0, 6) === 'Vector') {\n this.writeInt(vector, field + '[id]');\n } else if(type.substr(0, 6) !== 'vector') {\n throw new Error('Invalid vector type ' + type);\n }\n\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n this.writeInt(obj.length, field + '[count]');\n for(let i = 0; i < obj.length; ++i) {\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\n }\n\n return true;\n } else if(type.substr(0, 6).toLowerCase() === 'vector') {\n throw new Error('Invalid vector object');\n }\n\n if(!isObject(obj)) {\n throw new Error('Invalid object for type ' + type);\n }\n\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n const predicate = obj['_'];\n let isBare = false;\n const constructorData: MTProtoConstructor = schema.constructors.find((c) => c.predicate === predicate);\n\n if(isBare = (type.charAt(0) === '%')) {\n type = type.substr(1);\n }\n\n if(!constructorData) {\n throw new Error('No predicate ' + predicate + ' found');\n }\n\n if(predicate === type) {\n isBare = true;\n }\n\n if(!isBare) {\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\n }\n\n const pFlags = obj.pFlags;\n const flagsOffsets: {[paramName: string]: number} = {};\n // console.log('storeObject', len, constructorData);\n for(const param of constructorData.params) {\n let type = param.type;\n\n // console.log('storeObject', param, type);\n if(type.indexOf('?') !== -1) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n // console.log('storeObject fieldBit', fieldBit, obj[fieldBit[0]]);\n\n if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\n if(condType[1] === 'true' ? pFlags && pFlags[param.name] : obj[param.name] !== undefined) {\n // console.log('storeObject autocompleting', param.name, obj[param.name], type);\n obj[fieldBit[0]] |= 1 << +fieldBit[1];\n } else {\n continue;\n }\n }\n\n type = condType[1];\n }\n // console.log('storeObject', param, type);\n\n const result = this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']');\n\n if(type === '#') {\n obj[param.name] = obj[param.name] || 0;\n flagsOffsets[param.name] = result as number;\n }\n }\n\n for(const paramName in flagsOffsets) {\n this.intView[flagsOffsets[paramName]] = obj[paramName];\n }\n\n return constructorData.type;\n }\n}\n\nclass TLDeserialization {\n private offset = 0; // in bytes\n private override: {[key: string]: (result: any, field: string) => void};\n\n private buffer: ArrayBuffer;\n private intView: Int32Array;\n private byteView: Uint8Array;\n\n // this.debug =\n private mtproto: boolean = false;\n private debug: boolean;\n\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\n // buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\n if(buffer instanceof ArrayBuffer) {\n this.buffer = buffer;\n this.intView = new Int32Array(buffer);\n this.byteView = new Uint8Array(this.buffer);\n } else {\n this.buffer = buffer.buffer;\n this.intView = new Int32Array(buffer.buffer);\n this.byteView = buffer;\n }\n\n // console.log(this.intView);\n\n this.override = options.override || {};\n this.mtproto = !!options.mtproto;\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\n }\n\n /* public setMtproto(mtproto: boolean) {\n this.mtproto = mtproto;\n } */\n\n private readInt(field: string) {\n // if(this.offset >= this.intView.length * 4) {\n if((this.byteView.length - this.offset) < 4) {\n console.error(this.byteView, this.offset);\n throw new Error('Nothing to fetch: ' + field);\n }\n\n const i = this.intView[this.offset / 4];\n // const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\n\n this.debug &&/* || field.includes('[dialog][read_outbox_max_id]') */\n console.log('<<<', i.toString(16), i, field,\n this.byteView.slice(this.offset - 16, this.offset + 16),\n bytesToHex(this.byteView.slice(this.offset - 16, this.offset + 16)));\n\n this.offset += 4;\n\n return i;\n }\n\n public fetchInt(field?: string) {\n return this.readInt((field || '') + ':int');\n }\n\n public fetchDouble(field?: string) {\n const buffer = new ArrayBuffer(8);\n const intView = new Int32Array(buffer);\n const doubleView = new Float64Array(buffer);\n\n intView[0] = this.readInt((field || '') + ':double[low]'),\n intView[1] = this.readInt((field || '') + ':double[high]');\n\n return doubleView[0];\n }\n\n // ! it should've been signed\n public fetchLong(field?: string): FetchLongAs {\n const iLow = this.readInt((field || '') + ':long[low]');\n const iHigh = this.readInt((field || '') + ':long[high]');\n\n let ulong = ulongFromInts(iHigh, iLow);\n if(/* !unsigned && */!this.mtproto) { // make it signed\n ulong = bigIntToSigned(ulong);\n }\n\n if(!this.mtproto) {\n if(safeBigInt.greaterOrEquals(ulong.abs())) {\n // @ts-ignore\n return ulong.toJSNumber();\n }\n }\n\n // @ts-ignore\n return ulong.toString(10);\n }\n\n public fetchBool(field?: string): boolean {\n const i = this.readInt((field || '') + ':bool');\n if(i === boolTrue) {\n return true;\n } else if(i === boolFalse) {\n return false;\n }\n\n this.offset -= 4;\n return this.fetchObject('Object', field);\n }\n\n public fetchString(field?: string): string {\n let len = this.byteView[this.offset++];\n\n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n\n let sUTF8 = '';\n for(let i = 0; i < len; ++i) {\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\n }\n\n // Padding\n while(this.offset % 4) {\n ++this.offset;\n }\n\n let s: string;\n try {\n s = decodeURIComponent(escape(sUTF8));\n } catch(e) {\n s = sUTF8;\n }\n\n this.debug && console.log('<<<', s, (field || '') + ':string');\n\n return s;\n }\n\n public fetchBytes(field?: string) {\n let len = this.byteView[this.offset++];\n\n if(len === 254) {\n len = this.byteView[this.offset++] |\n (this.byteView[this.offset++] << 8) |\n (this.byteView[this.offset++] << 16);\n }\n\n const bytes = this.byteView[sliceMethod](this.offset, this.offset + len);\n this.offset += len;\n\n // Padding\n while(this.offset % 4) {\n ++this.offset;\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\n\n return bytes;\n }\n\n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\n public fetchIntBytes(bits: number, typed: boolean = true, field?: string) {\n if(bits % 32) {\n throw new Error('Invalid bits: ' + bits);\n }\n\n const len = bits / 8;\n if(typed) {\n const result = this.byteView[sliceMethod](this.offset, this.offset + len);\n this.offset += len;\n return result;\n }\n\n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; ++i) {\n bytes[i] = this.byteView[this.offset++];\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\n\n return bytes;\n }\n\n public fetchRawBytes(len: number | false, typed: true, field: string): Uint8Array;\n public fetchRawBytes(len: number | false, typed: false, field: string): number[];\n public fetchRawBytes(len: number | false, typed: boolean = true, field: string) {\n if(len === false) {\n len = this.readInt((field || '') + '_length');\n if(len > this.byteView.byteLength) {\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\n }\n }\n\n if(typed) {\n const bytes = new Uint8Array(len);\n bytes.set(this.byteView[sliceMethod](this.offset, this.offset + len));\n this.offset += len;\n return bytes;\n }\n\n const bytes: number[] = new Array(len);\n for(let i = 0; i < len; ++i) {\n bytes[i] = this.byteView[this.offset++];\n }\n\n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\n\n return bytes;\n }\n\n private fetchVector(type: string, field?: string) {\n const len = this.readInt(field + '[count]');\n const result: any[] = new Array(len);\n if(len > 0) {\n const itemType = type.substr(7, type.length - 8); // for \"Vector\"\n for(let i = 0; i < len; ++i) {\n result[i] = this.fetchObject(itemType, field + '[' + i + ']');\n }\n }\n\n return result;\n }\n\n public fetchObject(type: string, field?: string): any {\n switch(type) {\n case '#':\n case 'int':\n return this.fetchInt(field);\n case 'long':\n return this.fetchLong(field);\n case 'int128':\n return this.fetchIntBytes(128, true, field);\n case 'int256':\n return this.fetchIntBytes(256, true, field);\n case 'int512':\n return this.fetchIntBytes(512, true, field);\n case 'string':\n return this.fetchString(field);\n case 'bytes':\n return this.fetchBytes(field);\n case 'double':\n return this.fetchDouble(field);\n case 'Bool':\n return this.fetchBool(field);\n case 'true':\n return true;\n }\n\n field = field || type || 'Object';\n\n if(type.charAt(0) === 'v' && type.substr(1, 5) === 'ector') {\n return this.fetchVector(type, field);\n }\n\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\n let constructorData: MTProtoConstructor = null;\n let fallback = false;\n\n if(type.charAt(0) === '%') {\n const checkType = type.substr(1);\n constructorData = schema.constructors.find((c) => c.type === checkType);\n if(!constructorData) {\n throw new Error('Constructor not found for type: ' + type);\n }\n }/* else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\n constructorData = schema.constructors.find((c) => c.predicate === type);\n if(!constructorData) {\n throw new Error('Constructor not found for predicate: ' + type);\n }\n } */ else {\n const constructorCmp = this.readInt(field + '[id]');\n\n if(constructorCmp === gzipPacked) { // Gzip packed\n const compressed = this.fetchBytes(field + '[packed_string]');\n const uncompressed = gzipUncompress(compressed) as Uint8Array;\n const newDeserializer = new TLDeserialization(uncompressed); // rpc_result is packed here\n\n return newDeserializer.fetchObject(type, field);\n }\n\n if(constructorCmp === vector) {\n return this.fetchVector(type, field);\n }\n\n let index = schema.constructorsIndex;\n if(!index) {\n schema.constructorsIndex = index = {};\n for(let i = 0, len = schema.constructors.length; i < len; ++i) {\n index[schema.constructors[i].id] = i;\n }\n }\n\n const i = index[constructorCmp];\n if(i !== undefined) {\n constructorData = schema.constructors[i];\n }\n\n if(!constructorData && this.mtproto) {\n const schemaFallback = Schema.API;\n for(let i = 0, len = schemaFallback.constructors.length; i < len; ++i) {\n if(+schemaFallback.constructors[i].id === constructorCmp) {\n constructorData = schemaFallback.constructors[i];\n\n delete this.mtproto;\n fallback = true;\n break;\n }\n }\n }\n\n if(!constructorData) {\n console.error('Constructor not found:', constructorCmp);\n\n let int1: number, int2: number;\n try {\n int1 = this.fetchInt(field);\n int2 = this.fetchInt(field);\n } catch(err) {\n\n }\n\n throw new Error('Constructor not found: ' + constructorCmp + ' ' + int1 + ' ' + int2 + ' ' + field);\n }\n }\n\n const predicate = constructorData.predicate;\n\n const result: any = {'_': predicate};\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\n if(this.override[overrideKey]) {\n this.override[overrideKey](result, field + '[' + predicate + ']');\n } else {\n for(let i = 0, len = constructorData.params.length; i < len; ++i) {\n const param = constructorData.params[i];\n let type = param.type;\n\n if(type === '#' && result.pFlags === undefined) {\n result.pFlags = {};\n }\n\n const isCond = type.indexOf('?') !== -1;\n if(isCond) {\n const condType = type.split('?');\n const fieldBit = condType[0].split('.');\n\n if(!(result[fieldBit[0]] & (1 << +fieldBit[1]))) {\n continue;\n }\n\n type = condType[1];\n }\n\n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\n\n if(isCond && type === 'true') {\n result.pFlags[param.name] = value;\n } else {\n result[param.name] = value;\n }\n }\n }\n\n if(fallback) {\n this.mtproto = true;\n }\n\n if(type === 'JSONValue') {\n return this.formatJSONValue(result);\n }\n\n return result;\n }\n\n private formatJSONValue(jsonValue: JSONValue): any {\n if(!jsonValue._) return jsonValue;\n switch(jsonValue._) {\n case 'jsonNull':\n return null;\n case 'jsonObject': {\n const out: any = {};\n const objectValues = jsonValue.value;\n for(let i = 0, length = objectValues.length; i < length; ++i) {\n const objectValue = objectValues[i];\n out[objectValue.key] = this.formatJSONValue(objectValue.value);\n }\n return out;\n }\n default:\n return jsonValue.value;\n }\n }\n\n public getOffset() {\n return this.offset;\n }\n\n public setOffset(offset: number) {\n this.offset = offset;\n }\n\n /* public fetchEnd() {\n if(this.offset !== this.byteView.length) {\n throw new Error('Fetch end with non-empty buffer');\n }\n\n return true;\n } */\n}\n\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\nexport {TLDeserialization, TLSerialization};\n","// export function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\n\n// @ts-ignore\nimport pako from 'pako/dist/pako_inflate.min.js';\n// import dT from './dT';\n\n// export function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\nexport default function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\n // console.log(dT(), 'Gzip uncompress start');\n const result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\n // console.log(dT(), 'Gzip uncompress finish'/* , result */);\n return result;\n}\n","import randomize from '../array/randomize';\nimport bufferConcats from './bufferConcats';\n\nexport default function addPadding(\n bytes: T,\n blockSize: number = 16,\n zeroes?: boolean,\n blockSizeAsTotalLength = false,\n prepend = false\n): T {\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\n const needPadding = blockSizeAsTotalLength ? blockSize - len : blockSize - (len % blockSize);\n if(needPadding > 0 && needPadding < blockSize) {\n // //console.log('addPadding()', len, blockSize, needPadding);\n const padding = new Uint8Array(needPadding);\n if(zeroes) {\n for(let i = 0; i < needPadding; ++i) {\n padding[i] = 0;\n }\n } else {\n randomize(padding);\n }\n\n if(bytes instanceof ArrayBuffer) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer as T;\n } else if(bytes instanceof Uint8Array) {\n return (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)) as T;\n } else {\n // @ts-ignore\n return (prepend ? [...padding].concat(bytes) : bytes.concat([...padding])) as T;\n }\n }\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {TLDeserialization, TLSerialization} from './tl_utils';\nimport CryptoWorker from '../crypto/cryptoMessagePort';\nimport sessionStorage from '../sessionStorage';\nimport Schema from './schema';\nimport {NetworkerFactory} from './networkerFactory';\nimport {logger, LogTypes} from '../logger';\nimport {InvokeApiOptions} from '../../types';\nimport longToBytes from '../../helpers/long/longToBytes';\nimport MTTransport from './transports/transport';\nimport {nextRandomUint, randomLong} from '../../helpers/random';\nimport App from '../../config/app';\nimport DEBUG from '../../config/debug';\nimport Modes from '../../config/modes';\nimport noop from '../../helpers/noop';\n\n \nimport HTTP from './transports/http';\n \n\nimport type TcpObfuscated from './transports/tcpObfuscated';\nimport bigInt from 'big-integer';\nimport {ConnectionStatus} from './connectionStatus';\nimport ctx from '../../environment/ctx';\nimport bufferConcats from '../../helpers/bytes/bufferConcats';\nimport bytesCmp from '../../helpers/bytes/bytesCmp';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport convertToUint8Array from '../../helpers/bytes/convertToUint8Array';\nimport isObject from '../../helpers/object/isObject';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport sortLongsArray from '../../helpers/long/sortLongsArray';\nimport randomize from '../../helpers/array/randomize';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport pause from '../../helpers/schedulers/pause';\nimport {getEnvironment} from '../../environment/utils';\nimport {TimeManager} from './timeManager';\n\n// console.error('networker included!', new Error().stack);\n\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\n noResponse: true, // http_wait\n longPoll: true,\n\n notContentRelated: true, // ACK\n noSchedule: true,\n // withResult: true,\n messageId: MTLong,\n}>;\n\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\n msg_id: MTLong,\n seq_no: number,\n body?: Uint8Array | number[],\n isAPI?: boolean,\n // only these four are important\n\n acked?: boolean,\n\n deferred?: CancellablePromise,\n\n container?: boolean,\n inner?: MTLong[],\n\n // below - options\n\n notContentRelated?: true,\n noSchedule?: true,\n\n resultType?: string,\n\n longPoll?: true,\n noResponse?: true, // only with http (http_wait for longPoll)\n};\n\nconst DRAIN_TIMEOUT = 10000;\nconst delays: {\n [k in 'client' | 'file']: {\n disconnectDelayMin: number,\n disconnectDelayMax: number,\n pingInterval: number,\n pingMaxTime: number,\n connectionTimeout: number\n }\n} = {\n client: {\n disconnectDelayMin: 7,\n disconnectDelayMax: 20,\n pingInterval: 2000,\n pingMaxTime: 5,\n connectionTimeout: 5000\n },\n file: {\n disconnectDelayMin: 10,\n disconnectDelayMax: 24,\n pingInterval: 3000,\n pingMaxTime: 7,\n connectionTimeout: 7500\n }\n};\nconst RESEND_OPTIONS: MTMessageOptions = {\n noSchedule: true,\n notContentRelated: true\n};\nlet invokeAfterMsgConstructor: number;\nlet networkerTempId = 0;\n\nexport default class MTPNetworker {\n private authKeyUint8: Uint8Array;\n\n public isFileNetworker: boolean;\n private isFileUpload: boolean;\n private isFileDownload: boolean;\n\n private lastServerMessages: Array = [];\n\n private sentMessages: {\n [msgId: MTLong]: MTMessage\n } = {};\n\n private pendingMessages: {[msgId: MTLong]: number} = {};\n private pendingAcks: Array = [];\n private pendingResendReq: MTLong[] = [];\n // private pendingResendAnsReq: MTLong[] = [];\n public connectionInited: boolean;\n\n private nextReqTimeout: number;\n private nextReq: number = 0;\n\n \n private longPollInterval: number;\n private longPollPending: number;\n private checkConnectionRetryAt: number;\n private checkConnectionTimeout: number;\n private checkConnectionPeriod = 0;\n private sleepAfter: number;\n private offline = false;\n private sendingLongPoll: boolean;\n \n\n private seqNo: number;\n private prevSessionId: Uint8Array;\n private sessionId: Uint8Array;\n private serverSalt: Uint8Array;\n\n private lastResendReq: {\n reqMsgId: MTLong,\n msgIds: MTPNetworker['pendingResendReq']\n };\n // private lastResendAnsReq: MTPNetworker['lastResendReq'];\n\n private name: string;\n private log: ReturnType;\n\n public isOnline = false;\n private status: ConnectionStatus = ConnectionStatus.Closed;\n private lastResponseTime = 0;\n\n private debug = DEBUG /* && false */ || Modes.debug;\n\n public activeRequests = 0;\n\n public onDrain: () => void;\n private onDrainTimeout: number;\n\n public transport: MTTransport;\n\n \n private pingDelayDisconnectDeferred: CancellablePromise;\n private pingPromise: Promise;\n // private pingInterval: number;\n private lastPingTime: number;\n private lastPingStartTime: number;\n private lastPingDelayDisconnectId: string;\n \n // public onConnectionStatusChange: (online: boolean) => void;\n\n // private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\n\n private delays: typeof delays[keyof typeof delays];\n // private getNewTimeOffset: boolean;\n\n constructor(\n private networkerFactory: NetworkerFactory,\n private timeManager: TimeManager,\n public dcId: number,\n private authKey: Uint8Array,\n private authKeyId: Uint8Array,\n serverSalt: Uint8Array,\n options: InvokeApiOptions = {}\n ) {\n this.authKeyUint8 = convertToUint8Array(this.authKey);\n this.serverSalt = convertToUint8Array(serverSalt);\n\n this.isFileUpload = !!options.fileUpload;\n this.isFileDownload = !!options.fileDownload;\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\n this.delays = this.isFileNetworker ? delays.file : delays.client;\n\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\n this.name = 'NET-' + dcId + suffix;\n // this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\n this.log = logger(this.name + (suffix ? '' : '-C') + '-' + networkerTempId++, LogTypes.Log/* | LogTypes.Debug */ | LogTypes.Error | LogTypes.Warn);\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\n\n // Test resend after bad_server_salt\n /* if(this.dcId === 2 && this.upload) {\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\n this.serverSalt[0] = 0;\n } */\n\n this.updateSession();\n\n // if(!NetworkerFactory.offlineInited) {\n // NetworkerFactory.offlineInited = true;\n // /* rootScope.offline = true\n // rootScope.offlineConnecting = true */\n // }\n }\n\n private updateSession() {\n this.seqNo = 0;\n this.prevSessionId = this.sessionId;\n this.sessionId = randomize(new Uint8Array(8));\n }\n\n /* private clearContainers() {\n for(const messageId in this.sentMessages) {\n const message = this.sentMessages[messageId];\n if(message.container) {\n delete this.sentMessages[messageId];\n }\n }\n } */\n\n private updateSentMessage(sentMessageId: string) {\n const sentMessage = this.sentMessages[sentMessageId];\n if(!sentMessage) {\n return false;\n }\n\n if(sentMessage.container) {\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\n if(!innerSentMessage) {\n sentMessage.inner.splice(idx, 1);\n } else {\n sentMessage.inner[idx] = innerSentMessage.msg_id;\n }\n });\n }\n\n sentMessage.msg_id = this.timeManager.generateId();\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated || sentMessage.container);\n\n if(this.debug) {\n this.log(`updateSentMessage, old=${sentMessageId}, new=${sentMessage.msg_id}`);\n }\n\n this.sentMessages[sentMessage.msg_id] = sentMessage;\n delete this.sentMessages[sentMessageId];\n\n return sentMessage;\n }\n\n private generateSeqNo(notContentRelated?: boolean) {\n let seqNo = this.seqNo * 2;\n\n if(!notContentRelated) {\n seqNo++;\n this.seqNo++;\n }\n\n return seqNo;\n }\n\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n\n serializer.storeMethod(method, params);\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n\n if(Modes.debug) {\n this.log('MT call', method, params, messageId, seqNo);\n }\n\n return this.pushMessage(message, options);\n }\n\n public wrapMtpMessage(object: any, options: MTMessageOptions) {\n const serializer = new TLSerialization({mtproto: true});\n serializer.storeObject(object, 'Object');\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo(options.notContentRelated);\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true)\n };\n\n if(Modes.debug) {\n this.log('MT message', object, messageId, seqNo);\n }\n\n return this.pushMessage(message, options);\n }\n\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\n const serializer = new TLSerialization(options);\n\n if(!this.connectionInited) { // this will call once for each new session\n // /////this.log('Wrap api call !this.connectionInited');\n\n const invokeWithLayer = Schema.API.methods.find((m) => m.method === 'invokeWithLayer');\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\n serializer.storeInt(+invokeWithLayer.id, 'invokeWithLayer');\n\n // @ts-ignore\n serializer.storeInt(Schema.layer, 'layer');\n\n const initConnection = Schema.API.methods.find((m) => m.method === 'initConnection');\n if(!initConnection) throw new Error('no initConnection!');\n\n serializer.storeInt(+initConnection.id, 'initConnection');\n serializer.storeInt(0x0, 'flags');\n serializer.storeInt(App.id, 'api_id');\n serializer.storeString(getEnvironment().USER_AGENT || 'Unknown UserAgent', 'device_model');\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\n serializer.storeString(App.version + (App.isMainDomain ? ' ' + App.suffix : ''), 'app_version');\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\n serializer.storeString(App.langPack, 'lang_pack');\n serializer.storeString(this.networkerFactory.language, 'lang_code');\n // serializer.storeInt(0x0, 'proxy');\n /* serializer.storeMethod('initConnection', {\n 'flags': 0,\n 'api_id': App.id,\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\n 'system_version': navigator.platform || 'Unknown Platform',\n 'app_version': App.version,\n 'system_lang_code': navigator.language || 'en',\n 'lang_pack': '',\n 'lang_code': navigator.language || 'en'\n }); */\n }\n\n if(options.afterMessageId) {\n if(invokeAfterMsgConstructor === undefined) {\n const m = Schema.API.methods.find((m) => m.method === 'invokeAfterMsg');\n invokeAfterMsgConstructor = m ? +m.id : 0;\n }\n\n if(invokeAfterMsgConstructor) {\n // if(this.debug) {\n // this.log('invokeApi: store invokeAfterMsg');\n // }\n\n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\n serializer.storeLong(options.afterMessageId, 'msg_id');\n } else {\n this.log.error('no invokeAfterMsg!');\n }\n }\n\n options.resultType = serializer.storeMethod(method, params);\n\n /* if(method === 'account.updateNotifySettings') {\n this.log('api call body:', serializer.getBytes(true));\n } */\n\n const messageId = this.timeManager.generateId();\n const seqNo = this.generateSeqNo();\n const message = {\n msg_id: messageId,\n seq_no: seqNo,\n body: serializer.getBytes(true),\n isAPI: true\n };\n\n if(Modes.debug/* || true */) {\n this.log('Api call', method, message, params, options);\n } else if(this.debug) {\n this.log('Api call', method, params, options);\n }\n\n return this.pushMessage(message, options);\n }\n\n public changeTransport(transport?: MTTransport) {\n const oldTransport = this.transport;\n if(oldTransport) {\n oldTransport.destroy();\n\n if(this.nextReqTimeout) {\n clearTimeout(this.nextReqTimeout);\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n }\n\n this.connectionInited = false;\n\n \n if(this.longPollInterval !== undefined) {\n clearInterval(this.longPollInterval);\n this.longPollInterval = undefined;\n }\n\n this.clearCheckConnectionTimeout();\n \n }\n\n this.log('change transport', transport, oldTransport);\n\n \n this.clearPingDelayDisconnect();\n\n // if(this.pingInterval !== undefined) {\n // clearInterval(this.pingInterval);\n // this.pingInterval = undefined;\n // }\n\n // this.clearPing();\n \n\n this.transport = transport;\n if(!transport) {\n return;\n }\n\n transport.networker = this;\n\n \n \n if(transport instanceof HTTP) {\n \n this.longPollInterval = ctx.setInterval(this.checkLongPoll, 10000);\n this.checkLongPoll();\n this.checkConnection('changed transport');\n \n }\n \n \n\n \n // * handle outcoming dead socket, server will close the connection\n if((transport as TcpObfuscated).connection) {\n // this.sendPingDelayDisconnect();\n\n if(transport.connected) {\n this.setConnectionStatus(ConnectionStatus.Connected);\n }\n\n // this.pingInterval = ctx.setInterval(this.sendPing, PING_INTERVAL);\n // this.sendPing();\n }\n \n\n this.resend();\n }\n\n public destroy() {\n this.log('destroy');\n }\n\n public forceReconnectTimeout() {\n if((this.transport as TcpObfuscated).reconnect) {\n (this.transport as TcpObfuscated).reconnect();\n } else {\n this.resend();\n }\n }\n\n public forceReconnect() {\n if((this.transport as TcpObfuscated).forceReconnect) {\n (this.transport as TcpObfuscated).forceReconnect();\n } else {\n this.checkConnection('force reconnect');\n }\n }\n\n /* private clearPing() {\n if(this.pingPromise) {\n this.pingPromise = undefined;\n }\n\n this.lastPingTime = undefined;\n }\n\n private sendPing = () => {\n // return;\n\n // if(!(this.transport as TcpObfuscated).connected) {\n // this.clearPing();\n // return;\n // }\n\n if(this.pingPromise) {\n return;\n }\n\n const startTime = Date.now();\n this.log('sendPing: ping', startTime);\n const promise = this.pingPromise = this.wrapMtpCall('ping', {\n ping_id: randomLong()\n }, {\n notContentRelated: true\n }).then(() => {\n const elapsedTime = Date.now() - startTime;\n this.lastPingTime = elapsedTime / 1000;\n this.log('sendPing: pong', elapsedTime);\n\n setTimeout(() => {\n if(this.pingPromise !== promise) {\n return;\n }\n\n this.pingPromise = undefined;\n this.sendPing();\n }, Math.max(0, PING_INTERVAL - elapsedTime));\n });\n }; */\n\n private clearPingDelayDisconnect() {\n const deferred = this.pingDelayDisconnectDeferred;\n this.pingDelayDisconnectDeferred = undefined;\n this.lastPingDelayDisconnectId = undefined;\n\n if(deferred) {\n deferred.reject();\n }\n }\n\n private sendPingDelayDisconnect = () => {\n // return;\n\n if(this.pingDelayDisconnectDeferred || !this.transport || !this.transport.connected) return;\n\n /* if(!this.isOnline) {\n if((this.transport as TcpObfuscated).connected) {\n (this.transport as TcpObfuscated).connection.close();\n }\n\n return;\n } */\n\n const deferred = this.pingDelayDisconnectDeferred = deferredPromise();\n const delays = this.delays;\n const pingMaxTime = this.delays.pingMaxTime;\n const lastPingTime = Math.min(this.lastPingTime ?? 0, pingMaxTime);\n const disconnectDelay = Math.round(delays.disconnectDelayMin + lastPingTime / pingMaxTime * (delays.disconnectDelayMax - delays.disconnectDelayMin));\n const timeoutTime = disconnectDelay * 1000;\n const startTime = this.lastPingStartTime = Date.now();\n const pingId = this.lastPingDelayDisconnectId = randomLong();\n const options: MTMessageOptions = {notContentRelated: true};\n this.wrapMtpCall('ping_delay_disconnect', {\n ping_id: pingId,\n disconnect_delay: disconnectDelay\n }, options);\n\n const log = this.log.bindPrefix('sendPingDelayDisconnect');\n this.debug && log.debug(`ping, timeout=${timeoutTime}, lastPingTime=${this.lastPingTime}, msgId=${options.messageId}, pingId=${pingId}`);\n const rejectTimeout = ctx.setTimeout(deferred.reject, timeoutTime);\n\n const onResolved = (reason: string) => {\n clearTimeout(rejectTimeout);\n const elapsedTime = Date.now() - startTime;\n this.lastPingTime = elapsedTime / 1000;\n this.debug && log.debug(`pong, reason='${reason}', time=${lastPingTime}, msgId=${options.messageId}`);\n if(elapsedTime > timeoutTime) {\n throw undefined;\n } else {\n return pause(Math.max(0, this.delays.pingInterval - elapsedTime/* timeoutTime - elapsedTime - PING_INTERVAL */));\n }\n };\n\n const onTimeout = () => {\n clearTimeout(rejectTimeout);\n const transport = this.transport as TcpObfuscated;\n if(this.pingDelayDisconnectDeferred !== deferred || !transport?.connection) {\n return;\n }\n\n log.error('catch, closing connection', this.lastPingTime, options.messageId);\n transport.connection.close();\n };\n\n const onFinally = () => {\n if(this.pingDelayDisconnectDeferred !== deferred) {\n return;\n }\n\n this.pingDelayDisconnectDeferred = undefined;\n this.sendPingDelayDisconnect();\n };\n\n deferred\n .then(onResolved)\n .catch(onTimeout)\n .finally(onFinally);\n };\n\n \n private checkLongPoll = () => {\n const isClean = this.cleanupSent();\n // this.log.error('Check lp', this.longPollPending, this.dcId, isClean, this);\n if((this.longPollPending && Date.now() < this.longPollPending) ||\n this.offline ||\n this.isStopped() ||\n this.isFileNetworker) {\n // this.log('No lp this time');\n return false;\n }\n\n sessionStorage.get('dc').then((baseDcId) => {\n if(isClean && (\n baseDcId !== this.dcId ||\n (this.sleepAfter && Date.now() > this.sleepAfter)\n )) {\n // console.warn(dT(), 'Send long-poll for DC is delayed', this.dcId, this.sleepAfter);\n return;\n }\n\n this.sendLongPoll();\n });\n };\n\n private sendLongPoll() {\n if(this.sendingLongPoll) return;\n this.sendingLongPoll = true;\n const maxWait = 25000;\n\n this.longPollPending = Date.now() + maxWait;\n this.debug && this.log.debug('sendLongPoll', this.longPollPending);\n\n this.wrapMtpCall('http_wait', {\n max_delay: 500,\n wait_after: 150,\n max_wait: maxWait\n }, {\n noResponse: true,\n // notContentRelated: true,\n longPoll: true\n }).then(() => {\n this.longPollPending = undefined;\n setTimeout(this.checkLongPoll, 0);\n }, (error: ErrorEvent) => {\n this.log('Long-poll failed', error);\n }).finally(() => {\n this.sendingLongPoll = undefined;\n });\n }\n\n private checkConnection = (event: Event | string) => {\n this.debug && this.log('Check connection', event);\n this.clearCheckConnectionTimeout();\n\n if(!this.transport) {\n this.log.warn('No transport for checkConnection');\n return;\n }\n\n const serializer = new TLSerialization({mtproto: true});\n const pingId = randomLong();\n\n serializer.storeMethod('ping', {\n ping_id: pingId\n });\n\n const pingMessage = {\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n body: serializer.getBytes(true)\n };\n\n if(this.offline) {\n this.setConnectionStatus(ConnectionStatus.Connecting);\n }\n\n this.sendEncryptedRequest(pingMessage).then(() => {\n this.toggleOffline(false);\n }, () => {\n this.debug && this.log('Delay', this.checkConnectionPeriod * 1000);\n this.checkConnectionTimeout = ctx.setTimeout(() => this.checkConnection('from failed checkConnection request'), this.checkConnectionPeriod * 1000 | 0);\n this.checkConnectionPeriod = Math.min(60, this.checkConnectionPeriod * 1.5);\n });\n };\n\n private clearCheckConnectionTimeout() {\n if(this.checkConnectionTimeout !== undefined) {\n clearTimeout(this.checkConnectionTimeout);\n this.checkConnectionTimeout = undefined;\n }\n }\n\n private toggleOffline(offline: boolean) {\n if(this.offline !== offline) {\n this.offline = offline;\n\n this.clearCheckConnectionTimeout();\n if(offline) {\n clearTimeout(this.nextReqTimeout);\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n\n if(this.checkConnectionPeriod < 1.5) {\n this.checkConnectionPeriod = 0;\n }\n\n const delay = this.checkConnectionPeriod * 1000 | 0;\n this.checkConnectionRetryAt = Date.now() + delay;\n this.setConnectionStatus(ConnectionStatus.Closed, this.checkConnectionRetryAt);\n this.checkConnectionTimeout = ctx.setTimeout(() => this.checkConnection('from toggleOfline'), delay);\n this.checkConnectionPeriod = Math.min(30, (1 + this.checkConnectionPeriod) * 1.5);\n\n \n \n \n \n } else {\n this.setConnectionStatus(ConnectionStatus.Connected);\n this.checkLongPoll();\n\n this.scheduleRequest();\n\n \n \n \n \n }\n }\n\n this.setConnectionStatus(offline ? ConnectionStatus.Closed : ConnectionStatus.Connected, offline ? this.checkConnectionRetryAt : undefined);\n }\n\n private handleSentEncryptedRequestHTTP(promise: ReturnType, message: MTMessage, noResponseMsgs: string[]) {\n // let timeout = setTimeout(() => {\n // this.log.error('handleSentEncryptedRequestHTTP timeout', promise, message, noResponseMsgs);\n // }, 5e3);\n\n promise.then((result) => {\n this.toggleOffline(false);\n // this.log('parse for', message);\n return this.parseResponse(result).then((response) => {\n this.debug && this.log.debug('Server response', response);\n\n this.processMessage(response.response, response.messageId, response.sessionId);\n\n this.checkLongPoll();\n this.checkConnectionPeriod = Math.max(1.1, Math.sqrt(this.checkConnectionPeriod));\n\n return true;\n });\n }, (error) => {\n this.log.error('Encrypted request failed', error, message);\n\n this.pushResend(message.msg_id);\n this.toggleOffline(true);\n\n return false;\n }).then((shouldResolve) => {\n // clearTimeout(timeout);\n const sentMessages = this.sentMessages;\n noResponseMsgs.forEach((msgId) => {\n const sentMessage = sentMessages[msgId];\n if(sentMessage) {\n const deferred = sentMessage.deferred;\n delete sentMessages[msgId];\n delete this.pendingMessages[msgId];\n shouldResolve ? deferred.resolve() : deferred.reject();\n }\n });\n });\n }\n \n\n // ั‚ัƒั‚ ะผะพะถะฝะพ ัะดะตะปะฐั‚ัŒ ั‚ะฐะนะผะฐัƒั‚ ะธ ะฒั‹ะฒะพะดะธั‚ัŒ ะดะธัะบะพะฝะฝะตะบั‚\n private pushMessage(message: {\n msg_id: string,\n seq_no: number,\n body: Uint8Array | number[],\n isAPI?: boolean\n }, options: MTMessageOptions) {\n let promise: CancellablePromise;\n if(!options.notContentRelated || options.noResponse) {\n promise = deferredPromise();\n }\n\n this.sentMessages[message.msg_id] = Object.assign(\n message,\n options,\n promise ? {deferred: promise} : undefined\n );\n\n // this.log.error('Networker pushMessage:', this.sentMessages[message.msg_id]);\n\n this.pendingMessages[message.msg_id] = 0;\n\n if(!options.noSchedule) {\n this.scheduleRequest();\n }\n\n if(isObject(options)) {\n options.messageId = message.msg_id;\n }\n\n return promise;\n }\n\n public attachPromise(promise: Promise, message: MTMessage) {\n const canIncrement = true;\n const timeout = setTimeout(() => {\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < this.delays.connectionTimeout) {\n return;\n }\n\n this.log.error('timeout', message);\n if(this.isOnline) {\n this.setConnectionStatus(ConnectionStatus.TimedOut);\n }\n\n /* this.getEncryptedOutput(message).then((bytes) => {\n this.log.error('timeout encrypted', bytes);\n }); */\n }, this.delays.connectionTimeout);\n\n promise.catch(noop).finally(() => {\n clearTimeout(timeout);\n this.setConnectionStatus(ConnectionStatus.Connected);\n\n if(canIncrement) {\n --this.activeRequests;\n this.setDrainTimeout();\n }\n });\n\n if(canIncrement) {\n ++this.activeRequests;\n if(this.onDrainTimeout !== undefined) {\n clearTimeout(this.onDrainTimeout);\n this.onDrainTimeout = undefined;\n }\n }\n }\n\n public setDrainTimeout() {\n if(!this.activeRequests && this.onDrain && this.onDrainTimeout === undefined) {\n this.onDrainTimeout = ctx.setTimeout(() => {\n this.onDrainTimeout = undefined;\n this.log('drain');\n this.onDrain();\n }, DRAIN_TIMEOUT);\n }\n }\n\n public setConnectionStatus(status: ConnectionStatus, retryAt?: number) {\n const isOnline = status === ConnectionStatus.Connected;\n const willChange = this.status !== status;\n this.isOnline = isOnline;\n this.status = status;\n\n if(willChange) {\n if(this.networkerFactory.onConnectionStatusChange) {\n this.networkerFactory.onConnectionStatusChange({\n _: 'networkerStatus',\n status,\n dcId: this.dcId,\n name: this.name,\n isFileNetworker: this.isFileNetworker,\n isFileDownload: this.isFileDownload,\n isFileUpload: this.isFileUpload,\n retryAt\n });\n }\n\n if(this.isOnline) {\n this.scheduleRequest();\n }\n\n if((this.transport as TcpObfuscated)?.connection) {\n this.clearPingDelayDisconnect();\n this.sendPingDelayDisconnect();\n }\n\n // this.getNewTimeOffset = true;\n }\n /* if(this.onConnectionStatusChange) {\n this.onConnectionStatusChange(this.isOnline);\n } */\n }\n\n private pushResend(messageId: string, delay = 100) {\n const value = delay ? Date.now() + delay : 0;\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage.container) {\n for(const innerMsgId of sentMessage.inner) {\n this.pendingMessages[innerMsgId] = value;\n }\n } else {\n this.pendingMessages[messageId] = value;\n }\n\n if(sentMessage.acked) {\n this.log.error('pushResend: acked message?', sentMessage);\n }\n\n if(this.debug) {\n this.log.debug('pushResend:', messageId, sentMessage, this.pendingMessages, delay);\n }\n\n this.scheduleRequest(delay);\n }\n\n // * correct, fully checked\n private async getMsgKey(dataWithPadding: Uint8Array, isOut: boolean) {\n const x = isOut ? 0 : 8;\n const msgKeyLargePlain = bufferConcats(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\n\n const msgKeyLarge = await CryptoWorker.invokeCrypto('sha256', msgKeyLargePlain);\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\n return msgKey;\n };\n\n // * correct, fully checked\n private getAesKeyIv(msgKey: Uint8Array, isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\n const x = isOut ? 0 : 8;\n const sha2aText = new Uint8Array(52);\n const sha2bText = new Uint8Array(52);\n const promises: Array> = [];\n\n sha2aText.set(msgKey, 0);\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\n promises.push(CryptoWorker.invokeCrypto('sha256', sha2aText));\n\n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\n sha2bText.set(msgKey, 36);\n promises.push(CryptoWorker.invokeCrypto('sha256', sha2bText));\n\n return Promise.all(promises).then((results) => {\n const aesKey = new Uint8Array(32);\n const aesIv = new Uint8Array(32);\n const sha2a = new Uint8Array(results[0]);\n const sha2b = new Uint8Array(results[1]);\n\n aesKey.set(sha2a.subarray(0, 8));\n aesKey.set(sha2b.subarray(8, 24), 8);\n aesKey.set(sha2a.subarray(24, 32), 24);\n\n aesIv.set(sha2b.subarray(0, 8));\n aesIv.set(sha2a.subarray(8, 24), 8);\n aesIv.set(sha2b.subarray(24, 32), 24);\n\n return [aesKey, aesIv];\n });\n }\n\n public isStopped() {\n return this.networkerFactory.akStopped && !this.isFileNetworker;\n }\n\n private performScheduledRequest() {\n if(this.isStopped()) {\n return false;\n }\n\n if(this.pendingAcks.length) {\n const ackMsgIds = this.pendingAcks.slice();\n\n // this.log('acking messages', ackMsgIDs)\n this.wrapMtpMessage({\n _: 'msgs_ack',\n msg_ids: ackMsgIds\n }, {\n notContentRelated: true,\n noSchedule: true\n });\n }\n\n const pendingResendReqLength = this.pendingResendReq.length;\n if(pendingResendReqLength) {\n const options: MTMessageOptions = {...RESEND_OPTIONS};\n const msgIds = this.pendingResendReq.splice(0, pendingResendReqLength);\n this.wrapMtpMessage({\n _: 'msg_resend_req',\n msg_ids: msgIds\n }, options);\n\n this.log('resend: resending requests', options.messageId, msgIds);\n /* this.lastResendReq = {\n reqMsgId: options.messageId,\n msgIds: msgIds\n }; */\n\n // this.pendingResendReq.length = 0;\n }\n\n // if(this.pendingResendAnsReq.length) {\n // const options: MTMessageOptions = {...RESEND_OPTIONS};\n // const msgIds = this.pendingResendAnsReq.slice();\n // this.wrapMtpMessage({\n // _: 'msg_resend_ans_req',\n // msg_ids: msgIds\n // }, options);\n\n // this.log('resend: requesting answers', options.messageId, msgIds);\n // this.lastResendAnsReq = {\n // reqMsgId: options.messageId,\n // msgIds: msgIds\n // };\n\n // // this.pendingResendAnsReq.length = 0;\n // }\n\n let outMessage: MTMessage;\n const messages: typeof outMessage[] = [];\n\n // const currentTime = Date.now();\n let messagesByteLen = 0;\n\n \n let hasApiCall = false;\n let hasHttpWait = false;\n \n\n let lengthOverflow = false;\n\n // * ะกัŽะดะฐ ะฝะธะบะพะณะดะฐ ะฝะต ะฟะพะฟะฐะดัƒั‚ ะบะพะฝั‚ะตะนะฝะตั€ั‹, ั‚ะฐะบ ะบะฐะบ ะธั… ะฝะต ะฑัƒะดะตั‚ ะฒ pendingMessages\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\n for(const messageId of keys) {\n // const value = this.pendingMessages[messageId];\n\n // if(!value || value <= currentTime) {\n const message = this.sentMessages[messageId];\n if(message && message.body) {\n /* if(message.fileUpload) {\n this.log('performScheduledRequest message:', message, message.body.length, (message.body as Uint8Array).byteLength, (message.body as Uint8Array).buffer.byteLength);\n } */\n\n const messageByteLength = message.body.length + 32;\n\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\n this.log.warn('lengthOverflow', message, messages);\n lengthOverflow = true;\n\n if(outMessage) { // if it's not a first message\n break;\n }\n }\n\n messages.push(message);\n messagesByteLen += messageByteLength;\n\n \n if(message.isAPI) {\n hasApiCall = true;\n } else if(message.longPoll) {\n hasHttpWait = true;\n }\n \n\n outMessage = message;\n } else {\n // this.log(message, messageId)\n }\n\n delete this.pendingMessages[messageId];\n // }\n }\n\n \n \n if(this.transport instanceof HTTP)\n \n if(hasApiCall && !hasHttpWait) {\n const serializer = new TLSerialization({mtproto: true});\n serializer.storeMethod('http_wait', {\n max_delay: 500,\n wait_after: 150,\n max_wait: 3000\n });\n\n messages.push({\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(),\n body: serializer.getBytes(true)\n });\n }\n \n\n if(!messages.length) {\n // this.log('no scheduled messages')\n return;\n }\n\n \n const noResponseMsgs: Array = messages.filter((message) => message.noResponse).map((message) => message.msg_id);\n \n\n if(messages.length > 1) {\n const container = this.generateContainerMessage(messagesByteLen, messages);\n outMessage = container.messageWithBody;\n\n this.sentMessages[outMessage.msg_id] = container.message;\n } else {\n this.sentMessages[outMessage.msg_id] = outMessage;\n }\n\n this.pendingAcks = [];\n\n const promise = this.sendEncryptedRequest(outMessage);\n\n \n \n if(this.transport instanceof HTTP)\n \n this.handleSentEncryptedRequestHTTP(promise, outMessage, noResponseMsgs);\n \n\n \n \n if(!(this.transport instanceof HTTP))\n \n this.cleanupSent(); // ! WARNING\n \n\n if(lengthOverflow) {\n this.scheduleRequest();\n }\n }\n\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\n const container = new TLSerialization({\n mtproto: true,\n startMaxLength: messagesByteLen + 64\n });\n\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\n container.storeInt(messages.length, 'CONTAINER[count]');\n\n const innerMessages: string[] = [];\n messages.forEach((message, i) => {\n innerMessages.push(message.msg_id);\n // this.log('Pushing to container:', message.msg_id);\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\n });\n\n const message: MTMessage = {\n msg_id: this.timeManager.generateId(),\n seq_no: this.generateSeqNo(true),\n container: true,\n inner: innerMessages\n };\n\n if(Modes.debug/* || true */) {\n this.log.warn('Container', innerMessages, message.msg_id, message.seq_no);\n }\n\n return {\n message,\n messageWithBody: Object.assign({body: container.getBytes(true)}, message)\n };\n }\n\n private async getEncryptedMessage(dataWithPadding: Uint8Array) {\n const msgKey = await this.getMsgKey(dataWithPadding, true);\n const keyIv = await this.getAesKeyIv(msgKey, true);\n // this.log('after msg key iv')\n\n const encryptedBytes = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithPadding, keyIv[0], keyIv[1]);\n // this.log('Finish encrypt')\n\n return {\n bytes: encryptedBytes,\n msgKey\n };\n }\n\n private getDecryptedMessage(msgKey: Uint8Array, encryptedData: Uint8Array) {\n // this.log('get decrypted start')\n return this.getAesKeyIv(msgKey, false).then((keyIv) => {\n // this.log('after msg key iv')\n return CryptoWorker.invokeCrypto('aes-decrypt', encryptedData, keyIv[0], keyIv[1]);\n });\n }\n\n private getEncryptedOutput(message: MTMessage) {\n /* if(DEBUG) {\n this.log.debug('Send encrypted', message, this.authKeyId);\n } */\n /* if(!this.isOnline) {\n this.log('trying to send message when offline:', Object.assign({}, message));\n //debugger;\n } */\n\n const data = new TLSerialization({\n startMaxLength: message.body.length + 2048\n });\n\n data.storeIntBytes(this.serverSalt, 64, 'salt');\n data.storeIntBytes(this.sessionId, 64, 'session_id');\n\n data.storeLong(message.msg_id, 'message_id');\n data.storeInt(message.seq_no, 'seq_no');\n\n data.storeInt(message.body.length, 'message_data_length');\n data.storeRawBytes(message.body, 'message_data');\n\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\n const desSalt = des.fetchLong();\n const desSessionId = des.fetchLong();\n\n if(!this.isOnline) {\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\n } */\n\n /* const messageDataLength = message.body.length;\n let canBeLength = 0; // bytes\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 8;\n canBeLength += 4;\n canBeLength += 4;\n canBeLength += message.body.length; */\n\n const dataBuffer = data.getBuffer();\n\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\n } */\n\n const paddingLength = (16 - (data.getOffset() % 16)) + 16 * (1 + nextRandomUint(8) % 5);\n const padding = /* (message as any).padding || */randomize(new Uint8Array(paddingLength))/* .fill(0) */;\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157,\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150,\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28, 167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157,\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150,\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\n\n // (message as any).padding = padding;\n\n const dataWithPadding = bufferConcats(dataBuffer, padding);\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\n\n /* if(dataWithPadding.byteLength % 16) {\n this.log.error('aaa', dataWithPadding, paddingLength);\n }\n\n if(message.fileUpload) {\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\n } */\n\n // * full next block is correct\n return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => {\n /* if(DEBUG) {\n this.log('Got encrypted out message', encryptedResult);\n } */\n\n const request = new TLSerialization({\n startMaxLength: encryptedResult.bytes.length + 256\n });\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\n\n const requestData = request.getBytes(true);\n\n // if(this.isFileNetworker) {\n // //this.log('Send encrypted: requestData length:', requestData.length, requestData.length % 16, paddingLength % 16, paddingLength, data.offset, encryptedResult.msgKey.length % 16, encryptedResult.bytes.length % 16);\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\n // }\n\n return requestData;\n });\n }\n\n private async sendEncryptedRequest(message: MTMessage) {\n const requestData = await this.getEncryptedOutput(message);\n\n if(!this.transport) {\n this.log.error('trying to send something when offline', this.transport, this);\n }\n\n this.debug && this.log.debug('sending:', message, [message.msg_id].concat(message.inner || []), requestData.length);\n const promise: Promise = this.transport ? this.transport.send(requestData) as any : Promise.reject({});\n // this.debug && this.log.debug('sendEncryptedRequest: launched message into space:', message, promise);\n\n \n \n \n\n \n if(!(this.transport instanceof HTTP)) return promise;\n \n\n const baseError: ApiError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE',\n // @ts-ignore\n transport: this.transport\n };\n\n return promise.then((result) => {\n if(!result?.byteLength) {\n throw baseError;\n }\n\n // this.debug && this.log.debug('sendEncryptedRequest: got response for:', message, [message.msg_id].concat(message.inner || []));\n return result;\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n type: 'NETWORK_BAD_REQUEST',\n originalError: error\n });\n }\n\n throw error;\n });\n \n }\n\n public parseResponse(responseBuffer: Uint8Array) {\n // const perf = performance.now();\n /* if(this.debug) {\n this.log.debug('Start parsing response', responseBuffer);\n } */\n\n this.lastResponseTime = Date.now();\n\n const deserializer = new TLDeserialization(responseBuffer);\n\n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\n if(!bytesCmp(authKeyId, this.authKeyId)) {\n throw new Error('[MT] Invalid server auth_key_id: ' + bytesToHex(authKeyId));\n }\n\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\n\n return this.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => {\n // this.log('after decrypt')\n return this.getMsgKey(dataWithPadding, false).then((calcMsgKey) => {\n if(!bytesCmp(msgKey, calcMsgKey)) {\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\n this.updateSession(); // fix 28.01.2020\n throw new Error('[MT] server msgKey mismatch, updating session');\n }\n // this.log('after msgKey check')\n\n let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\n\n /* const salt = */deserializer.fetchIntBytes(64, true, 'salt'); // need\n const sessionId = deserializer.fetchIntBytes(64, true, 'session_id');\n const messageId = deserializer.fetchLong('message_id');\n\n if(!bytesCmp(sessionId, this.sessionId) &&\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\n this.log.warn('Sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\n // this.updateSession();\n // this.sessionID = sessionID;\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\n }\n\n const seqNo = deserializer.fetchInt('seq_no');\n\n const totalLength = dataWithPadding.byteLength;\n\n const messageBodyLength = deserializer.fetchInt('message_data[length]');\n let offset = deserializer.getOffset();\n\n if((messageBodyLength % 4) ||\n messageBodyLength > totalLength - offset) {\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\n }\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\n\n offset = deserializer.getOffset();\n const paddingLength = totalLength - offset;\n if(paddingLength < 12 || paddingLength > 1024) {\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\n }\n\n // let buffer = bytesToArrayBuffer(messageBody);\n deserializer = new TLDeserialization(/* buffer */messageBody, {\n mtproto: true,\n override: {\n mt_message: (result: any, field: string) => {\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\n result.seqno = deserializer.fetchInt(field + '[seqno]');\n result.bytes = deserializer.fetchInt(field + '[bytes]');\n\n const offset = deserializer.getOffset();\n\n // self.log('mt_message!!!!!', result, field);\n\n try {\n result.body = deserializer.fetchObject('Object', field + '[body]');\n } catch(e) {\n this.log.error('parse error', (e as Error).message, (e as Error).stack);\n result.body = {\n _: 'parse_error',\n error: e\n };\n }\n\n if(deserializer.getOffset() !== offset + result.bytes) {\n // console.warn(dT(), 'set offset', this.offset, offset, result.bytes)\n // this.log(result)\n deserializer.setOffset(offset + result.bytes);\n }\n // this.log('override message', result)\n },\n mt_rpc_result: (result: any, field: any) => {\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\n\n const sentMessage = this.sentMessages[result.req_msg_id];\n const type = sentMessage && sentMessage.resultType || 'Object';\n\n if(result.req_msg_id && !sentMessage) {\n // console.warn(dT(), 'Result for unknown message', result);\n return;\n }\n\n // deserializer.setMtproto(false);\n result.result = deserializer.fetchObject(type, field + '[result]');\n // deserializer.setMtproto(true);\n // self.log(dT(), 'override rpc_result', sentMessage, type, result);\n }\n }\n });\n\n const response = deserializer.fetchObject('', 'INPUT');\n // this.log.error('Parse response time:', performance.now() - perf);\n return {\n response,\n messageId,\n sessionId,\n seqNo\n };\n });\n });\n }\n\n private applyServerSalt(newServerSalt: string) {\n const serverSalt = longToBytes(newServerSalt);\n\n sessionStorage.set({\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\n });\n\n this.serverSalt = new Uint8Array(serverSalt);\n }\n\n // ! ั‚ะฐะนะผะฐัƒั‚ ะพั‡ะตะฝัŒ ัะธะปัŒะฝะพ ั‚ะพั€ะผะพะทะธั‚ ัะบะพั€ะพัั‚ัŒ ั€ะฐะฑะพั‚ั‹ ัะพะบะตั‚ะฐ (ะดะฐะถะต ะฝัƒะปะตะฒะพะน)\n public scheduleRequest(delay?: number) {\n /* if(!this.isOnline) {\n return;\n } */\n\n \n \n if(this.transport instanceof HTTP) {\n \n if(this.offline) {\n this.checkConnection('forced schedule');\n }\n\n delay ||= 0; // set zero timeout to pack other messages too\n \n }\n \n \n\n const nextReq = Date.now() + (delay || 0);\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\n // this.debug && this.log('scheduleRequest: nextReq', this.nextReq, nextReq);\n return;\n }\n\n // this.debug && this.log('scheduleRequest: delay', delay);\n\n /* if(this.nextReqTimeout) {\n return;\n } */\n\n // const perf = performance.now();\n if(this.nextReqTimeout) {\n clearTimeout(this.nextReqTimeout);\n }\n\n const cb = () => {\n // this.debug && this.log('scheduleRequest: timeout delay was:', performance.now() - perf);\n\n this.nextReqTimeout = 0;\n this.nextReq = 0;\n\n \n \n if(this.transport instanceof HTTP)\n \n if(this.offline) {\n // this.log('Cancel scheduled');\n return;\n }\n \n\n this.performScheduledRequest();\n };\n\n this.nextReq = nextReq;\n\n if(delay !== undefined) {\n this.nextReqTimeout = ctx.setTimeout(cb, delay);\n } else {\n cb();\n }\n }\n\n private ackMessage(msgId: MTLong) {\n // this.log('ack message', msgID)\n this.pendingAcks.push(msgId);\n\n let delay: number;\n\n \n \n if(this.transport instanceof HTTP)\n \n delay = 30000;\n \n\n this.scheduleRequest(delay);\n }\n\n private reqResend(msgId: MTLong/* , isAnswer?: boolean */) {\n if(this.debug) {\n this.log.debug('Req resend', msgId/* , isAnswer */);\n }\n\n // (isAnswer ? this.pendingResendAnsReq : this.pendingResendReq).push(msgId);\n this.pendingResendReq.push(msgId);\n this.scheduleRequest(100);\n }\n\n public cleanupSent() {\n let notEmpty = false;\n const sentMessages = this.sentMessages;\n // this.log('clean start', this.dcId/*, sentMessages*/)\n Object.keys(sentMessages).forEach((msgId) => {\n const message = sentMessages[msgId];\n\n // this.log('clean iter', msgID, message)\n if(message.notContentRelated && this.pendingMessages[msgId] === undefined) {\n // this.log('clean notContentRelated', msgID)\n delete sentMessages[msgId];\n } else if(message.container) {\n for(const innerMsgId of message.inner) {\n if(sentMessages[innerMsgId] !== undefined) {\n // this.log('clean failed, found', msgID, message.inner[i], sentMessages[message.inner[i]].seq_no)\n notEmpty = true;\n return;\n }\n }\n // this.log('clean container', msgID)\n delete sentMessages[msgId];\n } else {\n notEmpty = true;\n }\n });\n\n return !notEmpty;\n }\n\n private processMessageAck(messageId: Long) {\n const sentMessage = this.sentMessages[messageId];\n if(sentMessage && !sentMessage.acked) {\n // delete sentMessage.body;\n sentMessage.acked = true;\n }\n }\n\n private processError(rawError: {error_message: string, error_code: number}): ApiError {\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\n rawError.error_code = rawError.error_code;\n\n return {\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\n type: matches[1] as any || 'UNKNOWN',\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\n originalError: rawError\n };\n }\n\n /**\n * * ั‚ะพะปัŒะบะพ ะดะปั ัะพะบะตั‚ะฐ\n * TODO: consider about containers resend\n */\n public resend() {\n const sentMessages = this.sentMessages;\n for(const id in sentMessages) {\n const msg = sentMessages[id];\n if(msg.body || msg.container) {\n this.pushResend(id);\n }\n }\n\n if((this.transport as TcpObfuscated).connection) {\n this.clearPingDelayDisconnect();\n this.sendPingDelayDisconnect();\n }\n }\n\n /* public requestMessageStatus() {\n const ids: string[] = [];\n for(const id in this.sentMessages) {\n const message = this.sentMessages[id];\n if(message.isAPI && message.fileUpload) {\n ids.push(message.msg_id);\n }\n }\n\n this.wrapMtpMessage({\n _: 'msgs_state_req',\n msg_ids: ids\n }, {\n notContentRelated: true\n }).then((res) => {\n this.log('status', res);\n });\n } */\n\n private applyServerTime(messageId: string) {\n const serverTime = bigInt(messageId).shiftRight(32).toJSNumber();\n this.log('applying server time', serverTime);\n return this.timeManager.applyServerTime(serverTime);\n }\n\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\n public processMessage(message: any, messageId: MTLong, sessionId: Uint8Array | number[]) {\n if(message._ === 'messageEmpty') {\n this.log.warn('processMessage: messageEmpty', message, messageId);\n return;\n }\n\n // messageId = messageId.toString();\n\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\n if(msgidInt % 2) {\n this.log.warn('Server even message id: ', messageId, message);\n return;\n }\n\n if(this.debug) {\n this.log.debug('process message', message, messageId);\n }\n\n if(this.pingDelayDisconnectDeferred) {\n this.pingDelayDisconnectDeferred.resolve('any message');\n }\n\n // let changedTimeOffset: boolean;\n // if(this.getNewTimeOffset) {\n // changedTimeOffset = this.applyServerTime(messageId);\n // this.getNewTimeOffset = undefined;\n // }\n\n switch(message._) {\n case 'msg_container': {\n for(const innerMessage of message.messages) {\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\n }\n\n break;\n }\n\n case 'bad_server_salt': {\n this.log('Bad server salt', message);\n\n this.applyServerSalt(message.new_server_salt);\n\n if(this.sentMessages[message.bad_msg_id]) {\n this.pushResend(message.bad_msg_id);\n }\n\n this.ackMessage(messageId);\n\n // simulate disconnect\n /* try {\n this.log('networker state:', this);\n // @ts-ignore\n this.transport.ws.close(1000);\n } catch(err) {\n this.log.error('transport', this.transport, err);\n } */\n\n break;\n }\n\n case 'bad_msg_notification': {\n this.log.error('Bad msg notification', message);\n\n switch(message.error_code) {\n case 16: // * msg_id too low\n case 17: // * msg_id too high\n case 32: // * msg_seqno too low\n case 33: // * msg_seqno too high\n case 64: { // * invalid container\n // if(changedTimeOffset === undefined) {\n // changedTimeOffset = this.applyServerTime(messageId);\n // }\n\n const changedTimeOffset = this.applyServerTime(messageId);\n if(message.error_code === 17 || changedTimeOffset) {\n this.log('Update session');\n this.updateSession();\n }\n\n const badMessage = this.updateSentMessage(message.bad_msg_id);\n if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020\n // this.ackMessage(messageId);\n }\n\n // * invalid container\n /* case 64: {\n const badMessage = this.sentMessages[message.bad_msg_id];\n if(badMessage) {\n for(const msgId of badMessage.inner) {\n if(this.sentMessages[msgId] !== undefined) {\n this.updateSentMessage\n }\n }\n const inner = badMessage.inner;\n }\n } */\n }\n\n break;\n }\n\n case 'message': {\n if(this.lastServerMessages.indexOf(messageId) !== -1) {\n // console.warn('[MT] Server same messageId: ', messageId)\n this.ackMessage(messageId);\n return;\n }\n\n this.lastServerMessages.push(messageId);\n if(this.lastServerMessages.length > 100) {\n this.lastServerMessages.shift();\n }\n\n this.processMessage(message.body, message.msg_id, sessionId);\n break;\n }\n\n case 'new_session_created': {\n this.ackMessage(messageId);\n\n if(this.debug) {\n this.log.debug('new_session_created', message);\n }\n // this.updateSession();\n\n this.processMessageAck(message.first_msg_id);\n this.applyServerSalt(message.server_salt);\n\n sessionStorage.get('dc').then((baseDcId) => {\n if(baseDcId === this.dcId && !this.isFileNetworker && this.networkerFactory.updatesProcessor) {\n this.networkerFactory.updatesProcessor(message);\n }\n });\n break;\n }\n\n case 'msgs_ack': {\n this.debug && this.log('got acks', message.msg_ids);\n for(const msgId of message.msg_ids) {\n this.processMessageAck(msgId);\n }\n\n break;\n }\n\n case 'msg_detailed_info': {\n const sentMessage = this.sentMessages[message.msg_id];\n if(!sentMessage) {\n this.ackMessage(message.answer_msg_id);\n break;\n }/* else if(sentMessage.acked) {\n this.reqResend(message.answer_msg_id, true);\n }\n\n break; */\n }\n\n case 'msg_new_detailed_info': {\n if(this.pendingAcks.indexOf(message.answer_msg_id) !== -1) {\n break;\n }\n\n this.reqResend(message.answer_msg_id);\n break;\n }\n\n case 'msgs_state_info': {\n this.ackMessage(message.answer_msg_id);\n const arr = [\n [this.lastResendReq, this.pendingResendReq] as const\n // [this.lastResendAnsReq, this.pendingResendAnsReq] as const\n ];\n\n for(const [lastResend, pendingResend] of arr) {\n if(lastResend?.reqMsgId === message.req_msg_id && pendingResend.length) {\n for(const badMsgId of lastResend.msgIds) {\n const pos = pendingResend.indexOf(badMsgId);\n if(pos !== -1) {\n pendingResend.splice(pos, 1);\n }\n }\n }\n }\n\n break;\n }\n\n case 'rpc_result': {\n this.ackMessage(messageId);\n\n const sentMessageId = message.req_msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n if(this.debug) {\n this.log('Rpc response', message.result, sentMessage);\n }\n\n this.processMessageAck(sentMessageId);\n if(sentMessage) {\n const deferred = sentMessage.deferred;\n if(message.result._ === 'rpc_error') {\n const error = this.processError(message.result);\n this.log('Rpc error', error);\n if(deferred) {\n deferred.reject(error);\n }\n } else {\n if(deferred) {\n deferred.resolve(message.result);\n }\n\n if(sentMessage.isAPI && !this.connectionInited) {\n this.connectionInited = true;\n }\n }\n\n delete this.sentMessages[sentMessageId];\n } else {\n if(this.debug) {\n this.log('Rpc result for unknown message:', sentMessageId, message);\n }\n }\n\n break;\n }\n\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages don't require acknowledgments\n /* const sentMessageId = message.msg_id;\n const sentMessage = this.sentMessages[sentMessageId];\n\n if(sentMessage) {\n sentMessage.deferred.resolve(message);\n delete this.sentMessages[sentMessageId];\n } */\n const pingId = message.ping_id;\n if(this.lastPingDelayDisconnectId === pingId) {\n const deferred = this.pingDelayDisconnectDeferred;\n if(deferred) {\n deferred.resolve('pong');\n } else {\n this.log('ping deferred deleted', pingId);\n }\n }\n\n break;\n }\n\n default:\n this.ackMessage(messageId);\n\n /* if(this.debug) {\n this.log.debug('Update', message);\n } */\n\n if(this.networkerFactory.updatesProcessor !== null) {\n this.networkerFactory.updatesProcessor(message);\n }\n break;\n }\n }\n}\n","import bigInt from 'big-integer';\n\nexport default function sortLongsArray(arr: string[]) {\n return arr.map((long) => {\n return bigInt(long);\n }).sort((a, b) => {\n return a.compare(b);\n }).map((bigInt) => {\n return bigInt.toString(10);\n });\n}\n","import addPadding from '../bytes/addPadding';\nimport bigInt from 'big-integer';\nimport {bigIntToBytes} from '../bigInt/bigIntConversion';\n\nexport default function longToBytes(sLong: string) {\n const bigIntBytes = bigIntToBytes(bigInt(sLong)).reverse();\n const bytes = addPadding(bigIntBytes, 8, true, false, false);\n // console.log('longToBytes', bytes, bigIntBytes);\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport type {ConnectionStatusChange} from './connectionStatus';\nimport MTPNetworker from './networker';\nimport {InvokeApiOptions} from '../../types';\nimport App from '../../config/app';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {AppManager} from '../appManagers/manager';\n\nexport class NetworkerFactory extends AppManager {\n private networkers: MTPNetworker[] = [];\n public language = navigator.language || App.langPackCode;\n public updatesProcessor: (obj: any) => void = null;\n // public onConnectionStatusChange: (status: ConnectionStatusChange) => void = null;\n public akStopped = false;\n\n public onConnectionStatusChange(status: ConnectionStatusChange) {\n this.rootScope.dispatchEvent('connection_status_change', status);\n // ({type: 'connectionStatusChange', payload: status});\n }\n\n public removeNetworker(networker: MTPNetworker) {\n indexOfAndSplice(this.networkers, networker);\n }\n\n public setUpdatesProcessor(callback: (obj: any) => void) {\n this.updatesProcessor = callback;\n }\n\n public getNetworker(dcId: number, authKey: Uint8Array, authKeyId: Uint8Array, serverSalt: Uint8Array, options: InvokeApiOptions) {\n // console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\n const networker = new MTPNetworker(this, this.timeManager, dcId, authKey, authKeyId, serverSalt, options);\n this.networkers.push(networker);\n return networker;\n }\n\n public startAll() {\n if(this.akStopped) {\n const stoppedNetworkers = this.networkers.filter((networker) => networker.isStopped());\n\n this.akStopped = false;\n this.updatesProcessor && this.updatesProcessor({_: 'new_session_created'});\n\n for(const networker of stoppedNetworkers) {\n networker.scheduleRequest();\n }\n }\n }\n\n public stopAll() {\n this.akStopped = true;\n }\n\n public setLanguage(langCode: string) {\n this.language = langCode;\n for(const networker of this.networkers) {\n if(!networker.isFileNetworker) {\n networker.connectionInited = false;\n }\n }\n }\n\n public unsetConnectionInited() {\n for(const networker of this.networkers) {\n networker.connectionInited = false;\n }\n }\n\n public forceReconnectTimeout() {\n for(const networker of this.networkers) {\n networker.forceReconnectTimeout();\n }\n }\n\n public forceReconnect() {\n for(const networker of this.networkers) {\n if(!networker.isFileNetworker) {\n networker.forceReconnect();\n break;\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {TLSerialization} from './tl_utils';\nimport cryptoWorker from '../crypto/cryptoMessagePort';\nimport Modes from '../../config/modes';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport bigInt from 'big-integer';\n\nexport type RSAPublicKeyHex = {\n modulus: string,\n exponent: string\n};\n\nexport class RSAKeysManager {\n /**\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\n *\n *\n * -----BEGIN RSA PUBLIC KEY-----\n * MIIBCgKCAQEA6LszBcC1LGzyr992NzE0ieY+BSaOW622Aa9Bd4ZHLl+TuFQ4lo4g\n * 5nKaMBwK/BIb9xUfg0Q29/2mgIR6Zr9krM7HjuIcCzFvDtr+L0GQjae9H0pRB2OO\n * 62cECs5HKhT5DZ98K33vmWiLowc621dQuwKWSQKjWf50XYFw42h21P2KXUGyp2y/\n * +aEyZ+uVgLLQbRA1dEjSDZ2iGRy12Mk5gpYc397aYp438fsJoHIgJ2lgMv5h7WY9\n * t6N/byY9Nw9p21Og3AoXSL2q/2IJ1WRUhebgAdGVMlV1fkuOQoEzR7EdpqtQD9Cs\n * 5+bfo3Nhmcyvk5ftB0WkJ9z6bNZ7yxrP8wIDAQAB\n * -----END RSA PUBLIC KEY-----\n *\n * -----BEGIN RSA PUBLIC KEY-----\n * MIIBCgKCAQEBadMIUYSKhyznMh+Pg+OxTLyDZrWEjQIPZC3oJCtuZX7qUxgcWqFX\n * Q1952TSY8S8NYuz12sK9Fvp+lil1hIG0U/cuPsK08VB1hB4VA+p0S46fGwVsRovq\n * 4qUiUIzQSjSHDASuXTOinlYEHwmg/GaLc5G7qhePWa0p9YmqYR5Ha3xHJywcXZrn\n * yE3nC9igL96Aanqv+Prbu1N+r9vAgZeHh9cfbtbV8WWwruOANOTEv2ctQLR0dfr9\n * MwQXNePTPQlYsO9HNIGS1LWe7hZFtGBAVJH92F7Kig68WqHM3PIZ6Sq7N0VSzfzL\n * b11Z/YHz2UXYtXADwL/m5pTpKBUtJBXkOQIDAQAB\n * -----END RSA PUBLIC KEY-----\n *\n * Bytes can be got via\n * $ openssl rsa -in rsa.pem -RSAPublicKey_in -pubout > pub.pem\n * $ openssl rsa -pubin -in pub.pem -text -noout\n */\n\n /* private publisKeysHex = [{\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\n exponent: '010001'\n }, {\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\n exponent: '010001'\n }, {\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\n exponent: '010001'\n }, {\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\n exponent: '010001'\n }, {\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\n exponent: '010001'\n }]; */\n\n private testPublicKeysHex: RSAPublicKeyHex[] = [{\n modulus: 'c8c11d635691fac091dd9489aedced2932aa8a0bcefef05fa800892d9b52ed03200865c9e97211cb2ee6c7ae96d3fb0e15aeffd66019b44a08a240cfdd2868a85e1f54d6fa5deaa041f6941ddf302690d61dc476385c2fa655142353cb4e4b59f6e5b6584db76fe8b1370263246c010c93d011014113ebdf987d093f9d37c2be48352d69a1683f8f6e6c2167983c761e3ab169fde5daaa12123fa1beab621e4da5935e9c198f82f35eae583a99386d8110ea6bd1abb0f568759f62694419ea5f69847c43462abef858b4cb5edc84e7b9226cd7bd7e183aa974a712c079dde85b9dc063b8a5c08e8f859c0ee5dcd824c7807f20153361a7f63cfd2a433a1be7f5',\n exponent: '010001'\n }];\n\n private publisKeysHex: RSAPublicKeyHex[] = [{\n // modulus: '00e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\n modulus: 'e8bb3305c0b52c6cf2afdf7637313489e63e05268e5badb601af417786472e5f93b85438968e20e6729a301c0afc121bf7151f834436f7fda680847a66bf64accec78ee21c0b316f0edafe2f41908da7bd1f4a5107638eeb67040ace472a14f90d9f7c2b7def99688ba3073adb5750bb02964902a359fe745d8170e36876d4fd8a5d41b2a76cbff9a13267eb9580b2d06d10357448d20d9da2191cb5d8c93982961cdfdeda629e37f1fb09a0722027696032fe61ed663db7a37f6f263d370f69db53a0dc0a1748bdaaff6209d5645485e6e001d1953255757e4b8e42813347b11da6ab500fd0ace7e6dfa3736199ccaf9397ed0745a427dcfa6cd67bcb1acff3',\n exponent: '010001'\n }];\n\n private publicKeysParsed: {\n [hex: string]: RSAPublicKeyHex\n } = {};\n private prepared = false;\n private preparePromise: Promise = null;\n\n constructor() {\n if(Modes.test) {\n this.publisKeysHex = this.testPublicKeysHex;\n }\n }\n\n public prepare(): Promise {\n if(this.preparePromise) return this.preparePromise;\n else if(this.prepared) {\n return Promise.resolve();\n }\n\n return this.preparePromise = Promise.all(this.publisKeysHex.map((keyParsed) => {\n const RSAPublicKey = new TLSerialization();\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\n\n const buffer = RSAPublicKey.getBuffer();\n\n return cryptoWorker.invokeCrypto('sha1', buffer).then((bytes) => {\n const fingerprintBytes = bytes.slice(-8);\n fingerprintBytes.reverse();\n\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\n modulus: keyParsed.modulus,\n exponent: keyParsed.exponent\n };\n });\n })).then(() => {\n this.prepared = true;\n\n // console.log('[MT] Prepared keys');\n this.preparePromise = null;\n });\n }\n\n public async select(fingerprints: Array) {\n await this.prepare();\n\n for(let i = 0; i < fingerprints.length; ++i) {\n let fingerprintHex = bigInt(fingerprints[i]).toString(16).toLowerCase();\n\n if(fingerprintHex.length < 16) {\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\n }\n\n // console.log(fingerprintHex, this.publicKeysParsed);\n const foundKey = this.publicKeysParsed[fingerprintHex];\n if(foundKey) {\n return Object.assign({\n fingerprint: fingerprints[i]\n }, foundKey);\n }\n }\n }\n}\n\nexport default new RSAKeysManager();\n","export default function bytesXor(bytes1: Uint8Array, bytes2: Uint8Array) {\n const len = bytes1.length;\n const bytes = new Uint8Array(len);\n\n for(let i = 0; i < len; ++i) {\n bytes[i] = bytes1[i] ^ bytes2[i];\n }\n\n return bytes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n \nimport transportController from './transports/controller';\n \n\nimport {TLSerialization, TLDeserialization} from './tl_utils';\nimport {TransportType} from './dcConfigurator';\nimport rsaKeysManager from './rsaKeysManager';\n\nimport CryptoWorker from '../crypto/cryptoMessagePort';\n\nimport {logger, LogTypes} from '../logger';\nimport DEBUG from '../../config/debug';\nimport {Awaited, DcId} from '../../types';\nimport addPadding from '../../helpers/bytes/addPadding';\nimport bytesCmp from '../../helpers/bytes/bytesCmp';\nimport bytesFromHex from '../../helpers/bytes/bytesFromHex';\nimport bytesToHex from '../../helpers/bytes/bytesToHex';\nimport bytesXor from '../../helpers/bytes/bytesXor';\nimport {bigIntFromBytes} from '../../helpers/bigInt/bigIntConversion';\nimport bigInt from 'big-integer';\nimport randomize from '../../helpers/array/randomize';\nimport {AppManager} from '../appManagers/manager';\n\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\n\nfNewNonce = false;\nfNonce = false;\nfResult = false; */\n\ntype AuthOptions = {\n dcId: number,\n nonce: Uint8Array,\n\n serverNonce?: Uint8Array,\n pq?: Uint8Array,\n fingerprints?: string[],\n publicKey?: {\n modulus: string,\n exponent: string,\n fingerprint: string\n },\n\n // good\n p?: Uint8Array,\n q?: Uint8Array,\n\n newNonce?: Uint8Array,\n\n retry?: number,\n\n b?: Uint8Array,\n g?: number,\n gA?: Uint8Array,\n dhPrime?: Uint8Array,\n\n tmpAesKey?: Uint8Array,\n tmpAesIv?: Uint8Array,\n\n authKeyId?: Uint8Array,\n authKey?: Uint8Array,\n serverSalt?: Uint8Array,\n\n localTime?: number,\n serverTime?: any,\n};\n\ntype ResPQ = {\n _: 'resPQ';\n nonce: Uint8Array;\n pq: Uint8Array;\n server_nonce: Uint8Array;\n server_public_key_fingerprints: string[];\n};\n\ntype P_Q_inner_data = {\n _: 'p_q_inner_data_dc';\n pq: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n new_nonce: Uint8Array;\n dc: number;\n};\n\ntype req_DH_params = {\n nonce: Uint8Array;\n server_nonce: Uint8Array;\n p: Uint8Array;\n q: Uint8Array;\n public_key_fingerprint: string;\n encrypted_data: Uint8Array;\n};\n\nexport class Authorizer extends AppManager {\n private cached: {\n [dcId: DcId]: Promise\n };\n\n private log: ReturnType;\n\n private transportType: TransportType;\n\n \n private getTransportTypePromise: Promise;\n \n\n protected after() {\n this.cached = {};\n this.log = logger(`AUTHORIZER`, LogTypes.Error | LogTypes.Log);\n }\n\n private sendPlainRequest(dcId: DcId, requestArray: Uint8Array) {\n const requestLength = requestArray.byteLength;\n\n const header = new TLSerialization();\n header.storeLongP(0, 0, 'auth_key_id');\n header.storeLong(this.timeManager.generateId(), 'msg_id');\n header.storeInt(requestLength, 'request_length');\n\n const headerArray = header.getBytes(true) as Uint8Array;\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\n resultArray.set(headerArray);\n resultArray.set(requestArray, headerArray.length);\n\n const transport = this.dcConfigurator.chooseServer(dcId, 'client', this.transportType);\n const baseError = {\n code: 406,\n type: 'NETWORK_BAD_RESPONSE'\n };\n\n if(DEBUG) {\n this.log('mtpSendPlainRequest: creating requestPromise');\n }\n\n const promise = transport.send(resultArray) as any as Promise;\n return promise.then((result) => {\n if(DEBUG) {\n this.log('mtpSendPlainRequest: in good sector', result);\n }\n\n if(!result || !result.byteLength) {\n throw baseError;\n }\n\n try {\n /* result = fResult ? fResult : result;\n fResult = new Uint8Array(0); */\n\n const deserializer = new TLDeserialization(result, {mtproto: true});\n\n if(result.length === 4) {\n const errorCode = deserializer.fetchInt();\n this.log.error('mtpSendPlainRequest: wrong response, error code:', errorCode);\n throw errorCode;\n }\n\n const auth_key_id = deserializer.fetchLong('auth_key_id');\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\n\n const msg_id = deserializer.fetchLong('msg_id');\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\n\n const msg_len = deserializer.fetchInt('msg_len');\n if(!msg_len) this.log.error('no msg_len', msg_len);\n\n return deserializer;\n } catch(e) {\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\n const error = Object.assign(baseError, {originalError: e});\n throw error;\n }\n }, (error) => {\n if(!error.message && !error.type) {\n error = Object.assign(baseError, {\n originalError: error\n });\n }\n\n throw error;\n });\n }\n\n private async sendReqPQ(auth: AuthOptions) {\n const request = new TLSerialization({mtproto: true});\n\n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\n\n if(DEBUG) {\n this.log('Send req_pq', bytesToHex(auth.nonce));\n }\n\n let deserializer: Awaited>;\n try {\n const promise = this.sendPlainRequest(auth.dcId, request.getBytes(true));\n rsaKeysManager.prepare();\n deserializer = await promise;\n } catch(error) {\n this.log.error('req_pq error', (error as Error).message);\n throw error;\n }\n\n const response: ResPQ = deserializer.fetchObject('ResPQ');\n\n if(response._ !== 'resPQ') {\n throw new Error('[MT] resPQ response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n this.log.error(auth.nonce, response.nonce);\n throw new Error('[MT] resPQ nonce mismatch');\n }\n\n auth.serverNonce = response.server_nonce; // need\n auth.pq = response.pq;\n auth.fingerprints = response.server_public_key_fingerprints;\n\n if(DEBUG) {\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\n }\n\n const publicKey = await rsaKeysManager.select(auth.fingerprints);\n if(!publicKey) {\n throw new Error('[MT] No public key found');\n }\n\n auth.publicKey = publicKey;\n\n if(DEBUG) {\n this.log('PQ factorization start', auth.pq);\n }\n\n // let pAndQ: Awaited>;\n try {\n var pAndQ = await CryptoWorker.invokeCrypto('factorize', auth.pq);\n } catch(error) {\n this.log.error('worker error factorize', error);\n throw error;\n }\n\n auth.p = pAndQ[0];\n auth.q = pAndQ[1];\n\n if(DEBUG) {\n this.log('PQ factorization done', pAndQ);\n }\n\n return this.sendReqDhParams(auth);\n }\n\n private async sendReqDhParams(auth: AuthOptions): Promise {\n auth.newNonce = randomize(new Uint8Array(32));\n\n const p_q_inner_data_dc: P_Q_inner_data = {\n _: 'p_q_inner_data_dc',\n pq: auth.pq,\n p: auth.p,\n q: auth.q,\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n new_nonce: auth.newNonce,\n dc: 0\n };\n\n const pQInnerDataSerialization = new TLSerialization({mtproto: true});\n pQInnerDataSerialization.storeObject(p_q_inner_data_dc, 'P_Q_inner_data', 'DECRYPTED_DATA');\n\n const data = pQInnerDataSerialization.getBytes(true);\n if(data.length > 144) {\n throw 'DH_params: data is more than 144 bytes!';\n }\n\n const dataWithPadding = addPadding(data, 192, false, true, false);\n const dataPadReversed = dataWithPadding.slice().reverse();\n\n const getKeyAesEncrypted = async() => {\n for(;;) {\n const tempKey = randomize(new Uint8Array(32));\n const dataWithHash = dataPadReversed.concat(await CryptoWorker.invokeCrypto('sha256', tempKey.concat(dataWithPadding)));\n if(dataWithHash.length !== 224) {\n throw 'DH_params: dataWithHash !== 224 bytes!';\n }\n\n const aesEncrypted = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, tempKey, new Uint8Array([0]));\n const tempKeyXor = bytesXor(tempKey, await CryptoWorker.invokeCrypto('sha256', aesEncrypted));\n const keyAesEncrypted = tempKeyXor.concat(aesEncrypted);\n\n const keyAesEncryptedBigInt = bigIntFromBytes(keyAesEncrypted);\n const publicKeyModulusBigInt = bigInt(auth.publicKey.modulus, 16);\n\n if(keyAesEncryptedBigInt.compare(publicKeyModulusBigInt) === -1) {\n return keyAesEncrypted;\n }\n }\n };\n\n const keyAesEncrypted = await getKeyAesEncrypted();\n const encryptedData = addPadding(await CryptoWorker.invokeCrypto('rsa-encrypt', keyAesEncrypted, auth.publicKey), 256, true, true, true);\n\n const req_DH_params: req_DH_params = {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n p: auth.p,\n q: auth.q,\n public_key_fingerprint: auth.publicKey.fingerprint,\n encrypted_data: encryptedData\n };\n\n const request = new TLSerialization({mtproto: true});\n request.storeMethod('req_DH_params', req_DH_params);\n\n const requestBytes = request.getBytes(true);\n\n if(DEBUG) {\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\n }\n\n let deserializer: Awaited>;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, requestBytes);\n } catch(error) {\n this.log.error('Send req_DH_params FAIL!', error);\n throw error;\n }\n\n const response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\n\n if(DEBUG) {\n this.log('Sent req_DH_params, response:', response);\n }\n\n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Server_DH_Params nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\n }\n\n if(response._ === 'server_DH_params_fail') {\n const newNonceHash = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce)).slice(-16);\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\n }\n\n throw new Error('[MT] server_DH_params_fail');\n }\n\n // fill auth object\n try {\n await this.decryptServerDhDataAnswer(auth, response.encrypted_answer);\n } catch(e) {\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\n throw e;\n }\n\n // console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\n\n return this.sendSetClientDhParams(auth);\n }\n\n private async decryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\n auth.localTime = Date.now();\n\n // ! can't concat Array with Uint8Array!\n auth.tmpAesKey = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat(auth.serverNonce)))\n .concat((await CryptoWorker.invokeCrypto('sha1', auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\n\n auth.tmpAesIv = (await CryptoWorker.invokeCrypto('sha1', auth.serverNonce.concat(auth.newNonce))).slice(12)\n .concat(await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\n\n const answerWithHash = new Uint8Array(await CryptoWorker.invokeCrypto('aes-decrypt', encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\n\n const hash = answerWithHash.slice(0, 20);\n const answerWithPadding = answerWithHash.slice(20);\n\n const deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\n const response = deserializer.fetchObject('Server_DH_inner_data');\n\n if(response._ !== 'server_DH_inner_data') {\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\n }\n\n if(DEBUG) {\n this.log('Done decrypting answer');\n }\n auth.g = response.g;\n auth.dhPrime = response.dh_prime;\n auth.gA = response.g_a;\n auth.serverTime = response.server_time;\n auth.retry = 0;\n\n this.verifyDhParams(auth.g, auth.dhPrime, auth.gA);\n\n const offset = deserializer.getOffset();\n\n if(!bytesCmp(hash, await CryptoWorker.invokeCrypto('sha1', answerWithPadding.slice(0, offset)))) {\n throw new Error('[MT] server_DH_inner_data SHA1 mismatch');\n }\n\n this.timeManager.applyServerTime(auth.serverTime, auth.localTime);\n }\n\n private verifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\n if(DEBUG) {\n this.log('Verifying DH params', g, dhPrime, gA);\n }\n\n const dhPrimeHex = bytesToHex(dhPrime);\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\n }\n\n if(DEBUG) {\n this.log('dhPrime cmp OK');\n }\n\n const gABigInt = bigIntFromBytes(gA);\n const dhPrimeBigInt = bigInt(dhPrimeHex, 16);\n\n if(gABigInt.compare(bigInt.one) <= 0) {\n throw new Error('[MT] DH params are not verified: gA <= 1');\n }\n\n if(gABigInt.compare(dhPrimeBigInt.subtract(bigInt.one)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\n }\n\n if(DEBUG) {\n this.log('1 < gA < dhPrime-1 OK');\n }\n\n const twoPow = bigInt(2).pow(2048 - 64);\n\n if(gABigInt.compare(twoPow) < 0) {\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\n }\n if(gABigInt.compare(dhPrimeBigInt.subtract(twoPow)) >= 0) {\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\n }\n\n if(DEBUG) {\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\n }\n\n return true;\n }\n\n private async sendSetClientDhParams(auth: AuthOptions): Promise {\n const gBytes = bytesFromHex(auth.g.toString(16));\n\n auth.b = randomize(new Uint8Array(256));\n // MTProto.secureRandom.nextBytes(auth.b);\n\n // let gB: Awaited>;\n try {\n var gB = await CryptoWorker.invokeCrypto('mod-pow', gBytes, auth.b, auth.dhPrime);\n } catch(error) {\n throw error;\n }\n\n const data = new TLSerialization({mtproto: true});\n data.storeObject({\n _: 'client_DH_inner_data',\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n retry_id: [0, auth.retry++],\n g_b: gB\n }, 'Client_DH_Inner_Data');\n\n const dataWithHash = (await CryptoWorker.invokeCrypto('sha1', data.getBuffer())).concat(data.getBytes(true));\n const encryptedData = await CryptoWorker.invokeCrypto('aes-encrypt', dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\n\n const request = new TLSerialization({mtproto: true});\n request.storeMethod('set_client_DH_params', {\n nonce: auth.nonce,\n server_nonce: auth.serverNonce,\n encrypted_data: encryptedData\n });\n\n if(DEBUG) {\n this.log('Send set_client_DH_params');\n }\n\n let deserializer: Awaited>;\n try {\n deserializer = await this.sendPlainRequest(auth.dcId, request.getBytes(true));\n } catch(err) {\n throw err;\n }\n\n const response = deserializer.fetchObject('Set_client_DH_params_answer');\n\n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\n }\n\n if(!bytesCmp(auth.nonce, response.nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\n }\n\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\n }\n\n // let authKey: Uint8Array;\n try {\n var authKey = await CryptoWorker.invokeCrypto('mod-pow', auth.gA, auth.b, auth.dhPrime);\n } catch(err) {\n throw authKey;\n }\n\n const authKeyHash = await CryptoWorker.invokeCrypto('sha1', authKey),\n authKeyAux = authKeyHash.slice(0, 8),\n authKeyId = authKeyHash.slice(-8);\n\n if(DEBUG) {\n this.log('Got Set_client_DH_params_answer', response._, authKey);\n }\n switch(response._) {\n case 'dh_gen_ok': {\n const newNonceHash1 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([1], authKeyAux))).slice(-16);\n\n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\n this.log.error('Set_client_DH_params_answer new_nonce_hash1 mismatch', newNonceHash1, response);\n throw new Error('new_nonce_hash1 mismatch');\n }\n\n const serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\n if(DEBUG) {\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\n }\n\n auth.authKeyId = authKeyId;\n auth.authKey = authKey;\n auth.serverSalt = serverSalt;\n\n return auth;\n }\n\n case 'dh_gen_retry': {\n const newNonceHash2 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([2], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\n }\n\n return this.sendSetClientDhParams(auth);\n }\n\n case 'dh_gen_fail': {\n const newNonceHash3 = (await CryptoWorker.invokeCrypto('sha1', auth.newNonce.concat([3], authKeyAux))).slice(-16);\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\n }\n\n throw new Error('[MT] Set_client_DH_params_answer fail');\n }\n }\n }\n\n \n private getTransportType() {\n if(this.getTransportTypePromise) return this.getTransportTypePromise;\n return this.getTransportTypePromise = transportController.pingTransports().then(({websocket}) => {\n this.transportType = websocket ? 'websocket' : 'https';\n this.log('will use transport:', this.transportType);\n });\n }\n \n\n public auth(dcId: DcId) {\n let promise = this.cached[dcId];\n if(promise) {\n return promise;\n }\n\n promise = new Promise(async(resolve, reject) => {\n \n await this.getTransportType();\n \n\n let error: ApiError;\n let _try = 1;\n while(_try++ <= 3) {\n try {\n const auth: AuthOptions = {\n dcId,\n nonce: randomize(new Uint8Array(16))\n };\n\n const promise = this.sendReqPQ(auth);\n resolve(await promise);\n return;\n } catch(err) {\n error = err;\n }\n }\n\n reject(error);\n });\n\n return this.cached[dcId] = promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport sessionStorage from '../sessionStorage';\nimport {nextRandomUint} from '../../helpers/random';\nimport {WorkerTaskVoidTemplate} from '../../types';\nimport ulongFromInts from '../../helpers/long/ulongFromInts';\nimport {AppManager} from '../appManagers/manager';\n\n/*\nlet lol: any = {};\nfor(var i = 0; i < 100; i++) {\n timeManager.generateId();\n}\n*/\n\nexport interface ApplyServerTimeOffsetTask extends WorkerTaskVoidTemplate {\n type: 'applyServerTimeOffset',\n payload: TimeManager['timeOffset']\n};\n\nexport class TimeManager extends AppManager {\n private lastMessageId: [number, number];\n private timeOffset: number;\n\n /* private midnightNoOffset: number;\n private midnightOffseted: Date;\n\n private midnightOffset: number; */\n\n /* private timeParams: {\n midnightOffset: number,\n serverTimeOffset: number\n }; */\n\n protected after() {\n this.lastMessageId = [0, 0];\n this.timeOffset = 0;\n\n sessionStorage.get('server_time_offset').then((to) => {\n if(to) {\n this.timeOffset = to;\n }\n });\n\n\n // * migrated from ServerTimeManager\n /* const timestampNow = tsNow(true);\n this.midnightNoOffset = timestampNow - (timestampNow % 86400);\n this.midnightOffseted = new Date();\n this.midnightOffseted.setHours(0, 0, 0, 0);\n\n this.midnightOffset = this.midnightNoOffset - (Math.floor(+this.midnightOffseted / 1000)); */\n\n /* this.timeParams = {\n midnightOffset: this.midnightOffset,\n serverTimeOffset: this.serverTimeOffset\n }; */\n }\n\n public getServerTimeOffset() {\n return this.timeOffset;\n }\n\n public generateId(): string {\n const timeTicks = Date.now(),\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\n timeMSec = timeTicks % 1000,\n random = nextRandomUint(16);\n\n let messageId: TimeManager['lastMessageId'] = [timeSec, (timeMSec << 21) | (random << 3) | 4];\n if(this.lastMessageId[0] > messageId[0] ||\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\n }\n\n this.lastMessageId = messageId;\n\n const ret = ulongFromInts(messageId[0], messageId[1]).toString(10);\n\n // if(lol[ret]) {\n // console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\n // }\n // lol[ret] = true;\n\n // console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret);\n\n return ret\n }\n\n public applyServerTime(serverTime: number, localTime?: number) {\n localTime = (localTime || Date.now()) / 1000 | 0;\n const newTimeOffset = serverTime - localTime;\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\n this.lastMessageId = [0, 0];\n\n if(this.timeOffset !== newTimeOffset) {\n sessionStorage.set({\n server_time_offset: newTimeOffset\n });\n\n this.timeOffset = newTimeOffset;\n }\n\n // console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\n\n return changed;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {DocumentAttribute, WebDocument} from '../../layer';\n\nexport default class AppWebDocsManager {\n public saveWebDocument(webDocument: WebDocument) {\n if(!webDocument) {\n return;\n }\n\n const attribute: DocumentAttribute.documentAttributeImageSize = webDocument.attributes.find((attribute) => attribute._ === 'documentAttributeImageSize') as any;\n if(attribute) {\n webDocument.w = attribute.w;\n webDocument.h = attribute.h;\n }\n\n return webDocument;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputInvoice, InputPaymentCredentials, PaymentRequestedInfo, PaymentsPaymentForm} from '../../layer';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppPaymentsManager extends AppManager {\n public getInputInvoiceBySlug(slug: string): InputInvoice.inputInvoiceSlug {\n return {\n _: 'inputInvoiceSlug',\n slug\n };\n }\n\n public getInputInvoiceByPeerId(peerId: PeerId, mid: number): InputInvoice.inputInvoiceMessage {\n return {\n _: 'inputInvoiceMessage',\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n };\n }\n\n public getPaymentForm(invoice: InputInvoice) {\n return this.apiManager.invokeApi('payments.getPaymentForm', {\n invoice\n }).then((paymentForm) => {\n this.appUsersManager.saveApiUsers(paymentForm.users);\n\n return paymentForm;\n });\n }\n\n public getPaymentReceipt(peerId: PeerId, mid: number) {\n return this.apiManager.invokeApi('payments.getPaymentReceipt', {\n peer: this.appPeersManager.getInputPeerById(peerId),\n msg_id: getServerMessageId(mid)\n }).then((paymentForm) => {\n this.appUsersManager.saveApiUsers(paymentForm.users);\n\n return paymentForm;\n });\n }\n\n public validateRequestedInfo(invoice: InputInvoice, info: PaymentRequestedInfo, save?: boolean) {\n return this.apiManager.invokeApi('payments.validateRequestedInfo', {\n save,\n invoice,\n info\n });\n }\n\n public sendPaymentForm(\n invoice: InputInvoice,\n formId: PaymentsPaymentForm['form_id'],\n requestedInfoId: string,\n shippingOptionId: string,\n credentials: InputPaymentCredentials,\n tipAmount?: number\n ) {\n return this.apiManager.invokeApi('payments.sendPaymentForm', {\n form_id: formId,\n invoice,\n requested_info_id: requestedInfoId,\n shipping_option_id: shippingOptionId,\n credentials,\n tip_amount: tipAmount || undefined\n }).then((result) => {\n if(result._ === 'payments.paymentResult') {\n this.apiUpdatesManager.processUpdateMessage(result.updates);\n }\n\n return result;\n });\n }\n\n public clearSavedInfo(info?: boolean, credentials?: boolean) {\n return this.apiManager.invokeApi('payments.clearSavedInfo', {\n info,\n credentials\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MessageSendingParams} from './appMessagesManager';\nimport {AppManager} from './manager';\nimport {AttachMenuBots, AttachMenuBot, Update, DataJSON} from '../../layer';\nimport assumeType from '../../helpers/assumeType';\nimport makeError from '../../helpers/makeError';\nimport getAttachMenuBotIcon from './utils/attachMenuBots/getAttachMenuBotIcon';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppAttachMenuBotsManager extends AppManager {\n private attachMenuBots: Map;\n private attachMenuBotsArr: AttachMenuBot[];\n\n protected after() {\n this.clear(true);\n\n this.apiUpdatesManager.addMultipleEventsListeners({\n updateAttachMenuBots: this.onUpdateAttachMenuBots\n });\n }\n\n public clear = (init = false) => {\n if(!init) {\n this.attachMenuBots.clear();\n this.attachMenuBotsArr = undefined;\n } else {\n this.attachMenuBots = new Map();\n }\n };\n\n private onUpdateAttachMenuBots = (update: Update.updateAttachMenuBots) => {\n this.clear();\n this.getAttachMenuBots();\n };\n\n public saveAttachMenuBot(attachMenuBot: AttachMenuBot) {\n this.attachMenuBots.set(attachMenuBot.bot_id, attachMenuBot);\n const icon = getAttachMenuBotIcon(attachMenuBot);\n icon.icon = this.appDocsManager.saveDoc(icon.icon, {type: 'attachMenuBotIcon', botId: attachMenuBot.bot_id});\n return attachMenuBot;\n }\n\n public saveAttachMenuBots(attachMenuBots: AttachMenuBot[]) {\n if((attachMenuBots as any).saved) return;\n (attachMenuBots as any).saved = true;\n attachMenuBots.forEach((user) => this.saveAttachMenuBot(user));\n }\n\n public getAttachMenuBots() {\n return this.attachMenuBotsArr ?? this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAttachMenuBots',\n processResult: (attachMenuBots) => {\n assumeType(attachMenuBots);\n this.appUsersManager.saveApiUsers(attachMenuBots.users);\n this.saveAttachMenuBots(attachMenuBots.bots);\n // ! temporary\n return this.attachMenuBotsArr = attachMenuBots.bots.slice(0, 0);\n }\n });\n }\n\n public getAttachMenuBotCached(botId: BotId) {\n return this.attachMenuBots.get(botId);\n }\n\n public getAttachMenuBot(botId: BotId, overwrite?: boolean) {\n if(!this.appUsersManager.isAttachMenuBot(botId) || true) {\n throw makeError('BOT_INVALID');\n }\n\n return (!overwrite && this.getAttachMenuBotCached(botId)) ?? this.apiManager.invokeApiSingleProcess({\n method: 'messages.getAttachMenuBot',\n params: {\n bot: this.appUsersManager.getUserInput(botId)\n },\n processResult: (attachMenuBotsBot) => {\n this.appUsersManager.saveApiUsers(attachMenuBotsBot.users);\n const attachMenuBot = this.saveAttachMenuBot(attachMenuBotsBot.bot);\n return attachMenuBot;\n }\n });\n }\n\n public requestWebView(options: MessageSendingParams & {\n botId: BotId,\n peerId: PeerId,\n // platform: string,\n startParam?: string,\n fromBotMenu?: boolean,\n url?: string,\n themeParams?: DataJSON\n }) {\n const {\n botId,\n peerId,\n url,\n fromBotMenu,\n themeParams,\n // platform,\n replyToMsgId,\n silent,\n sendAsPeerId,\n startParam,\n threadId\n } = options;\n\n const platform = 'web';\n\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.requestWebView',\n params: {\n peer: this.appPeersManager.getInputPeerById(peerId),\n bot: this.appUsersManager.getUserInput(botId),\n silent,\n platform,\n url,\n reply_to_msg_id: replyToMsgId ? getServerMessageId(replyToMsgId) : undefined,\n from_bot_menu: fromBotMenu,\n theme_params: themeParams,\n send_as: sendAsPeerId ? this.appPeersManager.getInputPeerById(sendAsPeerId) : undefined,\n start_param: startParam,\n top_msg_id: threadId ? getServerMessageId(threadId) : undefined\n },\n processResult: (result) => {\n console.log(result);\n return result;\n }\n });\n }\n\n public prolongWebView(options: MessageSendingParams & {\n peerId: PeerId,\n botId: BotId,\n queryId: string | number\n }) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'messages.prolongWebView',\n params: {\n peer: this.appPeersManager.getInputPeerById(options.peerId),\n bot: this.appUsersManager.getUserInput(options.botId),\n query_id: options.queryId,\n silent: options.silent,\n reply_to_msg_id: options.replyToMsgId ? getServerMessageId(options.replyToMsgId) : undefined,\n send_as: options.sendAsPeerId ? this.appPeersManager.getInputPeerById(options.sendAsPeerId) : undefined,\n top_msg_id: options.threadId ? getServerMessageId(options.threadId) : undefined\n },\n processResult: (result) => {\n console.log(result);\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {UrlAuthResult} from '../../layer';\nimport {AppManager} from './manager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\n\nexport default class AppSeamlessLoginManager extends AppManager {\n public requestUrlAuth(url: string, peerId?: PeerId, mid?: number, buttonId?: number) {\n return this.apiManager.invokeApi('messages.requestUrlAuth', {\n button_id: buttonId,\n msg_id: mid ? getServerMessageId(mid) : undefined,\n peer: peerId ? this.appPeersManager.getInputPeerById(peerId) : undefined,\n url\n }).then((urlAuthResult) => {\n if(urlAuthResult._ === 'urlAuthResultRequest') {\n this.appUsersManager.saveApiUser(urlAuthResult.bot);\n }\n\n return urlAuthResult;\n });\n }\n\n public acceptUrlAuth(url: string, peerId?: PeerId, mid?: number, buttonId?: number, writeAllowed?: boolean) {\n return this.apiManager.invokeApi('messages.acceptUrlAuth', {\n button_id: buttonId,\n msg_id: mid ? getServerMessageId(mid) : undefined,\n peer: peerId ? this.appPeersManager.getInputPeerById(peerId) : undefined,\n url,\n write_allowed: writeAllowed\n }).then((urlAuthResult) => {\n return urlAuthResult as Exclude;\n });\n }\n\n public getWebAuthorizations() {\n return this.apiManager.invokeApi('account.getWebAuthorizations').then((webAuthorizations) => {\n this.appUsersManager.saveApiUsers(webAuthorizations.users);\n return webAuthorizations.authorizations;\n });\n }\n\n public resetWebAuthorization(hash: Long) {\n return this.apiManager.invokeApi('account.resetWebAuthorization', {\n hash\n });\n }\n\n public resetWebAuthorizations() {\n return this.apiManager.invokeApi('account.resetWebAuthorizations');\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport assumeType from '../../helpers/assumeType';\nimport {AccountThemes, AccountWallPapers, InputWallPaper, WallPaper} from '../../layer';\nimport {AppManager} from './manager';\n\ntype WallPaperId = WallPaper['id'];\n\nexport default class AppThemesManager extends AppManager {\n private wallPapers: {[id: WallPaperId]: WallPaper};\n\n protected after() {\n this.wallPapers = {};\n }\n\n private saveWallPaper(wallPaper: WallPaper) {\n if(!wallPaper) {\n return wallPaper;\n }\n // const oldWallPaper = this.wallPapers[wallPaper.id];\n\n // ! IT'S BROKEN NOW. SERVER RETURNS SAME ID FOR DIFFERENT WALLPAPERS\n // if(oldWallPaper) {\n // console.log('rewrite', {...oldWallPaper}, {...wallPaper});\n // }\n\n if(wallPaper._ !== 'wallPaperNoFile') {\n wallPaper.document = this.appDocsManager.saveDoc(wallPaper.document, {type: 'wallPaper', wallPaperId: wallPaper.id});\n }\n\n // if(oldWallPaper) {\n // return Object.assign(oldWallPaper, wallPaper);\n // } else {\n this.wallPapers[wallPaper.id] = wallPaper;\n // }\n\n return wallPaper;\n }\n\n public getWallPaper(inputWallPaper: InputWallPaper) {\n return this.apiManager.invokeApiSingleProcess({\n method: 'account.getWallPaper',\n params: {wallpaper: inputWallPaper},\n processResult: (wallPaper) => {\n return this.saveWallPaper(wallPaper);\n }\n });\n }\n\n public getInputWallPaper(wallPaper: WallPaper | string): InputWallPaper {\n if(typeof(wallPaper) === 'string') {\n return {_: 'inputWallPaperSlug', slug: wallPaper};\n } else if(wallPaper._ === 'wallPaperNoFile') {\n return {_: 'inputWallPaperNoFile', id: wallPaper.id};\n } else {\n return {_: 'inputWallPaper', id: wallPaper.id, access_hash: wallPaper.access_hash};\n }\n }\n\n public getWallPaperById(id: WallPaperId) {\n const wallPaper = this.wallPapers[id];\n return this.getWallPaper(this.getInputWallPaper(wallPaper));\n }\n\n public getThemes() {\n return this.apiManager.invokeApiSingleProcess({\n method: 'account.getThemes',\n params: {format: 'macos', hash: 0},\n processResult: (accountThemes) => {\n assumeType(accountThemes);\n\n accountThemes.themes.forEach((theme) => {\n if(!theme.settings) {\n return;\n }\n\n theme.settings.forEach((themeSettings) => {\n themeSettings.wallpaper = this.saveWallPaper(themeSettings.wallpaper);\n });\n });\n\n return accountThemes.themes;\n }\n });\n }\n\n public getWallPapers() {\n return this.apiManager.invokeApiHashable({method: 'account.getWallPapers'}).then((accountWallpapers) => {\n const wallPapers = (accountWallpapers as AccountWallPapers.accountWallPapers).wallpapers;\n wallPapers.forEach((wallPaper, idx, arr) => {\n arr[idx] = this.saveWallPaper(wallPaper);\n });\n\n return wallPapers;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../../config/app';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport callbackify from '../../helpers/callbackify';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport MTProtoMessagePort from '../mtproto/mtprotoMessagePort';\nimport appStateManager from './appStateManager';\nimport {AppStoragesManager} from './appStoragesManager';\nimport createManagers from './createManagers';\n\ntype Managers = Awaited>;\n\nexport class AppManagersManager {\n private managers: Managers | Promise;\n private cryptoWorkersURLs: string[];\n private cryptoPortsAttached: number;\n private cryptoPortPromise: CancellablePromise;\n\n constructor() {\n this.cryptoWorkersURLs = [];\n this.cryptoPortsAttached = 0;\n this.cryptoPortPromise = deferredPromise();\n this.cryptoPortPromise.then(() => {\n this.cryptoPortPromise = undefined;\n });\n }\n\n public start() {\n const port = MTProtoMessagePort.getInstance();\n\n port.addEventListener('manager', ({name, method, args}) => {\n return callbackify(this.getManagers(), (managers) => {\n // @ts-ignore\n const manager = managers[name];\n return manager[method].apply(manager, args);\n });\n });\n\n port.addEventListener('cryptoPort', (payload, source, event) => {\n const port = event.ports[0];\n if(this.cryptoPortsAttached >= this.cryptoWorkersURLs.length) {\n port.close();\n return;\n }\n\n ++this.cryptoPortsAttached;\n cryptoMessagePort.attachPort(port);\n this.cryptoPortPromise?.resolve();\n });\n\n port.addEventListener('createProxyWorkerURLs', ({originalUrl, blob}) => {\n let length = this.cryptoWorkersURLs.length;\n if(!length) {\n this.cryptoWorkersURLs.push(originalUrl);\n ++length;\n }\n\n const maxLength = App.cryptoWorkers;\n if(length === maxLength) {\n return this.cryptoWorkersURLs;\n }\n\n const newURLs = new Array(maxLength - length).fill(undefined).map(() => URL.createObjectURL(blob));\n this.cryptoWorkersURLs.push(...newURLs);\n return this.cryptoWorkersURLs;\n });\n }\n\n public async createManagers() {\n const appStoragesManager = new AppStoragesManager();\n\n await Promise.all([\n // new Promise(() => {}),\n appStoragesManager.loadStorages(),\n this.cryptoPortPromise\n ]);\n\n const managers = await createManagers(appStoragesManager, appStateManager.userId);\n return this.managers = managers;\n }\n\n public getManagers() {\n return this.managers ??= this.createManagers();\n }\n}\n\nconst appManagersManager = new AppManagersManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appManagersManager = appManagersManager);\nexport default appManagersManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {PasswordManager} from '../mtproto/passwordManager';\nimport {ReferenceDatabase} from '../mtproto/referenceDatabase';\nimport DialogsStorage from '../storages/dialogs';\nimport FiltersStorage from '../storages/filters';\nimport {ApiUpdatesManager} from './apiUpdatesManager';\nimport {AppAvatarsManager} from './appAvatarsManager';\nimport {AppCallsManager} from './appCallsManager';\nimport {AppChatsManager} from './appChatsManager';\nimport {AppDocsManager} from './appDocsManager';\nimport {AppDraftsManager} from './appDraftsManager';\nimport {AppEmojiManager} from './appEmojiManager';\nimport {AppGroupCallsManager} from './appGroupCallsManager';\nimport {AppInlineBotsManager} from './appInlineBotsManager';\nimport {AppMessagesIdsManager} from './appMessagesIdsManager';\nimport {AppMessagesManager} from './appMessagesManager';\nimport {AppNotificationsManager} from './appNotificationsManager';\nimport {AppPeersManager} from './appPeersManager';\nimport {AppPhotosManager} from './appPhotosManager';\nimport {AppPollsManager} from './appPollsManager';\nimport {AppPrivacyManager} from './appPrivacyManager';\nimport {AppProfileManager} from './appProfileManager';\nimport {AppReactionsManager} from './appReactionsManager';\nimport {AppStickersManager} from './appStickersManager';\nimport {AppUsersManager} from './appUsersManager';\nimport {AppWebPagesManager} from './appWebPagesManager';\nimport {ApiFileManager} from '../mtproto/apiFileManager';\nimport {ApiManager} from '../mtproto/apiManager';\nimport ctx from '../../environment/ctx';\nimport PeersStorage from '../storages/peers';\nimport ThumbsStorage from '../storages/thumbs';\nimport {NetworkerFactory} from '../mtproto/networkerFactory';\nimport {RootScope} from '../rootScope';\nimport {Authorizer} from '../mtproto/authorizer';\nimport {DcConfigurator} from '../mtproto/dcConfigurator';\nimport {TimeManager} from '../mtproto/timeManager';\nimport {AppStoragesManager} from './appStoragesManager';\nimport cryptoMessagePort from '../crypto/cryptoMessagePort';\nimport appStateManager from './appStateManager';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport AppWebDocsManager from './appWebDocsManager';\nimport AppPaymentsManager from './appPaymentsManager';\nimport AppAttachMenuBotsManager from './appAttachMenuBotsManager';\nimport AppSeamlessLoginManager from './appSeamlessLoginManager';\nimport AppThemesManager from './appThemesManager';\n\nexport default function createManagers(appStoragesManager: AppStoragesManager, userId: UserId) {\n const managers = {\n appPeersManager: new AppPeersManager,\n appChatsManager: new AppChatsManager,\n appDocsManager: new AppDocsManager,\n appPhotosManager: new AppPhotosManager,\n appPollsManager: new AppPollsManager,\n appUsersManager: new AppUsersManager,\n appWebPagesManager: new AppWebPagesManager,\n appDraftsManager: new AppDraftsManager,\n appProfileManager: new AppProfileManager,\n appNotificationsManager: new AppNotificationsManager,\n apiUpdatesManager: new ApiUpdatesManager,\n appAvatarsManager: new AppAvatarsManager,\n appGroupCallsManager: new AppGroupCallsManager,\n appCallsManager: new AppCallsManager,\n appReactionsManager: new AppReactionsManager,\n appMessagesManager: new AppMessagesManager,\n appMessagesIdsManager: new AppMessagesIdsManager,\n appPrivacyManager: new AppPrivacyManager,\n appInlineBotsManager: new AppInlineBotsManager,\n appStickersManager: new AppStickersManager,\n referenceDatabase: new ReferenceDatabase,\n appEmojiManager: new AppEmojiManager,\n filtersStorage: new FiltersStorage,\n dialogsStorage: new DialogsStorage,\n apiManager: new ApiManager,\n cryptoWorker: cryptoMessagePort,\n passwordManager: new PasswordManager,\n apiFileManager: new ApiFileManager,\n peersStorage: new PeersStorage,\n thumbsStorage: new ThumbsStorage,\n networkerFactory: new NetworkerFactory,\n rootScope: new RootScope,\n authorizer: new Authorizer,\n dcConfigurator: new DcConfigurator,\n timeManager: new TimeManager,\n appStoragesManager: appStoragesManager,\n appStateManager: appStateManager,\n appWebDocsManager: new AppWebDocsManager,\n appPaymentsManager: new AppPaymentsManager,\n appAttachMenuBotsManager: new AppAttachMenuBotsManager,\n appSeamlessLoginManager: new AppSeamlessLoginManager,\n appThemesManager: new AppThemesManager\n };\n\n type T = typeof managers;\n\n for(const name in managers) {\n const manager = managers[name as keyof T];\n if(!manager) {\n continue;\n }\n\n if((manager as AppMessagesManager).setManagers) {\n (manager as AppMessagesManager).setManagers(managers as any);\n delete (manager as AppMessagesManager).setManagers;\n }\n\n // @ts-ignore\n ctx[name] = manager;\n }\n\n const promises: Array void) | void> | void>[] = [];\n let names = Object.keys(managers) as (keyof T)[];\n names.unshift('appUsersManager', 'appChatsManager', 'appNotificationsManager', 'appMessagesManager', 'dialogsStorage');\n names = filterUnique(names);\n for(const name of names) {\n const manager = managers[name];\n if((manager as any)?.after) {\n // console.log('injecting after', name);\n const result = (manager as any).after();\n promises.push(result);\n\n // if(result instanceof Promise) {\n // result.then(() => {\n // console.log('injected after', name);\n // });\n // }\n }\n }\n\n if(userId) {\n managers.apiManager.setUserAuth(userId);\n }\n\n return Promise.all(promises).then(() => managers);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// just to include\nimport '../polyfill';\nimport '../../helpers/peerIdPolyfill';\n\nimport cryptoWorker from '../crypto/cryptoMessagePort';\nimport {setEnvironment} from '../../environment/utils';\nimport appStateManager from '../appManagers/appStateManager';\nimport transportController from './transports/controller';\nimport MTProtoMessagePort from './mtprotoMessagePort';\nimport RESET_STORAGES_PROMISE from '../appManagers/utils/storages/resetStoragesPromise';\nimport appManagersManager from '../appManagers/appManagersManager';\nimport listenMessagePort from '../../helpers/listenMessagePort';\nimport {logger} from '../logger';\nimport {State} from '../../config/state';\nimport toggleStorages from '../../helpers/toggleStorages';\nimport appTabsManager from '../appManagers/appTabsManager';\nimport ServiceMessagePort from '../serviceWorker/serviceMessagePort';\nimport callbackify from '../../helpers/callbackify';\n\nlet _isServiceWorkerOnline = true;\nexport function isServiceWorkerOnline() {\n return _isServiceWorkerOnline;\n}\n\nlet serviceMessagePort: ServiceMessagePort, _serviceMessagePort: MessagePort;\nexport function getServiceMessagePort() {\n return _isServiceWorkerOnline ? serviceMessagePort : undefined;\n}\n\nconst log = logger('MTPROTO');\n// let haveState = false;\n\nconst port = new MTProtoMessagePort();\nport.addMultipleEventsListeners({\n environment: (environment) => {\n setEnvironment(environment);\n\n transportController.waitForWebSocket();\n },\n\n crypto: ({method, args}) => {\n return cryptoWorker.invokeCrypto(method as any, ...args as any);\n },\n\n state: ({state, resetStorages, pushedKeys, newVersion, oldVersion, userId}) => {\n // if(haveState) {\n // return;\n // }\n\n log('got state', state, pushedKeys);\n\n appStateManager.userId = userId;\n appStateManager.newVersion = newVersion;\n appStateManager.oldVersion = oldVersion;\n\n (Object.keys(state) as any as (keyof State)[]).forEach((key) => {\n appStateManager.pushToState(key, state[key], true, !pushedKeys.includes(key));\n });\n\n RESET_STORAGES_PROMISE.resolve(resetStorages);\n // haveState = true;\n },\n\n toggleStorages: ({enabled, clearWrite}) => {\n return toggleStorages(enabled, clearWrite);\n },\n\n event: (payload, source) => {\n log('will redirect event', payload, source);\n port.invokeExceptSource('event', payload, source);\n },\n\n serviceWorkerOnline: (online) => {\n _isServiceWorkerOnline = online;\n },\n\n serviceWorkerPort: (payload, source, event) => {\n if(serviceMessagePort) {\n serviceMessagePort.detachPort(_serviceMessagePort);\n _serviceMessagePort = undefined;\n } else {\n serviceMessagePort = new ServiceMessagePort();\n serviceMessagePort.addMultipleEventsListeners({\n requestFilePart: (payload) => {\n return callbackify(appManagersManager.getManagers(), (managers) => {\n const {docId, dcId, offset, limit} = payload;\n return managers.appDocsManager.requestDocPart(docId, dcId, offset, limit);\n });\n }\n });\n }\n\n // * port can be undefined in the future\n if(_serviceMessagePort = event.ports[0]) {\n serviceMessagePort.attachPort(_serviceMessagePort);\n }\n },\n\n createObjectURL: (blob) => {\n return URL.createObjectURL(blob);\n }\n\n // socketProxy: (task) => {\n // const socketTask = task.payload;\n // const id = socketTask.id;\n\n // const socketProxied = socketsProxied.get(id);\n // if(socketTask.type === 'message') {\n // socketProxied.dispatchEvent('message', socketTask.payload);\n // } else if(socketTask.type === 'open') {\n // socketProxied.dispatchEvent('open');\n // } else if(socketTask.type === 'close') {\n // socketProxied.dispatchEvent('close');\n // socketsProxied.delete(id);\n // }\n // },\n});\n\nlog('MTProto start');\n\nappManagersManager.start();\nappManagersManager.getManagers();\nappTabsManager.start();\n\n// let sentHello = false;\nlistenMessagePort(port, (source) => {\n appTabsManager.addTab(source);\n\n // port.invokeVoid('hello', undefined, source);\n // if(!sentHello) {\n // port.invokeVoid('hello', undefined, source);\n // sentHello = true;\n // }\n}, (source) => {\n appTabsManager.deleteTab(source);\n});\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type SuperMessagePort from '../lib/mtproto/superMessagePort';\nimport ctx from '../environment/ctx';\n\nexport default function listenMessagePort(\n messagePort: SuperMessagePort,\n onConnect?: (source: MessageEventSource) => void,\n onDisconnect?: (source: MessageEventSource) => void\n) {\n const attachPort = (listenPort: any, sendPort: any) => {\n messagePort.attachListenPort(listenPort);\n sendPort && messagePort.attachSendPort(sendPort);\n onConnect?.(listenPort);\n };\n\n messagePort.setOnPortDisconnect(onDisconnect);\n\n if(typeof(SharedWorkerGlobalScope) !== 'undefined') {\n (ctx as any as SharedWorkerGlobalScope).addEventListener('connect', (e) => attachPort(e.source, e.source));\n } else if(typeof(ServiceWorkerGlobalScope) !== 'undefined') {\n attachPort(ctx, null);\n } else {\n attachPort(ctx, ctx);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../storages/filters';\n\n/**\n * Legacy Webogram's format, don't change dcID to camelCase. date is timestamp\n */\nexport type UserAuth = {dcID: number | string, date: number, id: PeerId};\nexport type REAL_FOLDER_ID = 0 | 1;\n\nexport const NULL_PEER_ID: PeerId = 0;\nexport const REPLIES_PEER_ID: PeerId = 1271266957;\nexport const REPLIES_HIDDEN_CHANNEL_ID: ChatId = 777;\nexport const SERVICE_PEER_ID: PeerId = 777000;\nexport const MUTE_UNTIL = 0x7FFFFFFF;\nexport const BOT_START_PARAM = '';\nexport const MAX_FILE_SAVE_SIZE = 20 * 1024 * 1024;\nexport const THUMB_TYPE_FULL = '';\nexport const TOPIC_COLORS = [0x6FB9F0, 0xFFD67E, 0xCB86DB, 0x8EEE98, 0xFF93B2, 0xFB6F5F];\nexport const ATTACH_MENU_BOT_ICON_NAME = 'default_static';\nexport const GENERAL_TOPIC_ID = 4295032831;\nexport const T_ME_PREFIXES = new Set(['web', 'k', 'z']);\n\nexport const FOLDER_ID_ALL: REAL_FOLDER_ID = 0;\nexport const FOLDER_ID_ARCHIVE: REAL_FOLDER_ID = 1;\nexport const REAL_FOLDERS: Set = new Set([FOLDER_ID_ALL, FOLDER_ID_ARCHIVE]);\nexport const START_LOCAL_ID = Math.max(...Array.from(REAL_FOLDERS)) + 1 as MyDialogFilter['localId'];\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport emojiRegExp from '../../vendor/emoji/regex';\nimport {MessageEntity} from '../../layer';\n\nconst EmojiHelper = {\n emojiMap: (code: string) => { return code; },\n shortcuts: [] as any,\n emojis: [] as any\n};\n\nexport const ALPHA_CHARS_REG_EXP = 'a-z' +\n '\\\\u00c0-\\\\u00d6\\\\u00d8-\\\\u00f6\\\\u00f8-\\\\u00ff' + // Latin-1\n '\\\\u0100-\\\\u024f' + // Latin Extended A and B\n '\\\\u0253\\\\u0254\\\\u0256\\\\u0257\\\\u0259\\\\u025b\\\\u0263\\\\u0268\\\\u026f\\\\u0272\\\\u0289\\\\u028b' + // IPA Extensions\n '\\\\u02bb' + // Hawaiian\n '\\\\u0300-\\\\u036f' + // Combining diacritics\n '\\\\u1e00-\\\\u1eff' + // Latin Extended Additional (mostly for Vietnamese)\n '\\\\u0400-\\\\u04ff\\\\u0500-\\\\u0527' + // Cyrillic\n '\\\\u2de0-\\\\u2dff\\\\ua640-\\\\ua69f' + // Cyrillic Extended A/B\n '\\\\u0591-\\\\u05bf\\\\u05c1-\\\\u05c2\\\\u05c4-\\\\u05c5\\\\u05c7' +\n '\\\\u05d0-\\\\u05ea\\\\u05f0-\\\\u05f4' + // Hebrew\n '\\\\ufb1d-\\\\ufb28\\\\ufb2a-\\\\ufb36\\\\ufb38-\\\\ufb3c\\\\ufb3e\\\\ufb40-\\\\ufb41' +\n '\\\\ufb43-\\\\ufb44\\\\ufb46-\\\\ufb4f' + // Hebrew Pres. Forms\n '\\\\u0610-\\\\u061a\\\\u0620-\\\\u065f\\\\u066e-\\\\u06d3\\\\u06d5-\\\\u06dc' +\n '\\\\u06de-\\\\u06e8\\\\u06ea-\\\\u06ef\\\\u06fa-\\\\u06fc\\\\u06ff' + // Arabic\n '\\\\u0750-\\\\u077f\\\\u08a0\\\\u08a2-\\\\u08ac\\\\u08e4-\\\\u08fe' + // Arabic Supplement and Extended A\n '\\\\ufb50-\\\\ufbb1\\\\ufbd3-\\\\ufd3d\\\\ufd50-\\\\ufd8f\\\\ufd92-\\\\ufdc7\\\\ufdf0-\\\\ufdfb' + // Pres. Forms A\n '\\\\ufe70-\\\\ufe74\\\\ufe76-\\\\ufefc' + // Pres. Forms B\n '\\\\u200c' + // Zero-Width Non-Joiner\n '\\\\u0e01-\\\\u0e3a\\\\u0e40-\\\\u0e4e' + // Thai\n '\\\\u1100-\\\\u11ff\\\\u3130-\\\\u3185\\\\uA960-\\\\uA97F\\\\uAC00-\\\\uD7AF\\\\uD7B0-\\\\uD7FF' + // Hangul (Korean)\n '\\\\u3003\\\\u3005\\\\u303b' + // Kanji/Han iteration marks\n '\\\\uff21-\\\\uff3a\\\\uff41-\\\\uff5a' + // full width Alphabet\n '\\\\uff66-\\\\uff9f' + // half width Katakana\n '\\\\uffa1-\\\\uffdc'; // half width Hangul (Korean)\nexport const ALPHA_NUMERIC_REG_EXP = '0-9\\_' + ALPHA_CHARS_REG_EXP;\nexport const DOMAIN_ADD_CHARS = '\\u00b7';\n// Based on Regular Expression for URL validation by Diego Perini\nexport const URL_ALPHANUMERIC_REG_EXP_PART = '[' + ALPHA_CHARS_REG_EXP + '0-9]';\nexport const URL_PROTOCOL_REG_EXP_PART = '((?:https?|ftp)://|mailto:)?';\nexport const URL_REG_EXP = URL_PROTOCOL_REG_EXP_PART +\n // user:pass authentication\n '(?:' + URL_ALPHANUMERIC_REG_EXP_PART + '{1,64}(?::' + URL_ALPHANUMERIC_REG_EXP_PART + '{0,64})?@)?' +\n '(?:' +\n // sindresorhus/ip-regexp\n '(?: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}' +\n '|' +\n // host name\n URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}' +\n // domain name\n '(?:\\\\.' + URL_ALPHANUMERIC_REG_EXP_PART + '[' + ALPHA_CHARS_REG_EXP + DOMAIN_ADD_CHARS + '0-9\\-]{0,64}){0,10}' +\n // TLD identifier\n '(?:\\\\.(xn--[0-9a-z]{2,16}|[' + ALPHA_CHARS_REG_EXP + ']{2,24}))' +\n ')' +\n // port number\n '(?::\\\\d{2,5})?' +\n // resource path\n '(?:/(?:\\\\S{0,255}[^\\\\s.;,(\\\\[\\\\]{}<>\"\\'])?)?';\nexport const URL_PROTOCOL_REG_EXP = new RegExp('^' + URL_PROTOCOL_REG_EXP_PART.slice(0, -1), 'i');\nexport const URL_ANY_PROTOCOL_REG_EXP = /^((?:[^\\/]+?):\\/\\/|mailto:)/;\nexport const USERNAME_REG_EXP = '[a-zA-Z\\\\d_]{5,32}';\nexport const BOT_COMMAND_REG_EXP = '\\\\/([a-zA-Z\\\\d_]{1,32})(?:@(' + USERNAME_REG_EXP + '))?(\\\\b|$)';\nexport const FULL_REG_EXP = new RegExp('(^| )(@)(' + USERNAME_REG_EXP + ')|(' + URL_REG_EXP + ')|(\\\\n)|(' + emojiRegExp + ')|(^|[\\\\s\\\\(\\\\]])(#[' + ALPHA_NUMERIC_REG_EXP + ']{2,64})|(^|\\\\s)' + BOT_COMMAND_REG_EXP, 'i');\nexport const EMAIL_REG_EXP = /^(([^<>()[\\]\\\\.,;:\\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,}))$/;\n// const markdownTestRegExp = /[`_*@~]/;\nexport const MARKDOWN_REG_EXP = /(^|\\s|\\n)(````?)([\\s\\S]+?)(````?)([\\s\\n\\.,:?!;]|$)|(^|\\s|\\x01)(`|~~|\\*\\*|__|_-_|\\|\\|)([^\\n]+?)\\7([\\x01\\s\\.,:?!;]|$)|@(\\d+)\\s*\\((.+?)\\)|(\\[(.+?)\\]\\((.+?)\\))/m;\nexport const SITE_HASHTAGS: {[siteName: string]: string} = {\n 'Telegram': 'tg://search_hashtag?hashtag={1}',\n 'Twitter': 'https://twitter.com/hashtag/{1}',\n 'Instagram': 'https://instagram.com/explore/tags/{1}/',\n 'Google Plus': 'https://plus.google.com/explore/{1}'\n};\n\n// export const SITE_MENTIONS: {[siteName in 'Telegram' | 'Twitter' | 'Instagram' | 'GitHub']: string} = {\n// Telegram: '#{1}',\n// Twitter: 'https://twitter.com/{1}',\n// Instagram: 'https://instagram.com/{1}/',\n// GitHub: 'https://github.com/{1}'\n// };\n\nexport const MARKDOWN_ENTITIES: {[markdown: string]: MessageEntity['_']} = {\n '`': 'messageEntityCode',\n '``': 'messageEntityPre',\n '**': 'messageEntityBold',\n '__': 'messageEntityItalic',\n '~~': 'messageEntityStrike',\n '_-_': 'messageEntityUnderline',\n '||': 'messageEntitySpoiler'\n};\n\nexport const PASS_CONFLICTING_ENTITIES: Set = new Set([\n 'messageEntityEmoji',\n 'messageEntityLinebreak',\n 'messageEntityCaret'\n]);\nfor(const i in MARKDOWN_ENTITIES) {\n PASS_CONFLICTING_ENTITIES.add(MARKDOWN_ENTITIES[i]);\n}\n\nexport const PHONE_NUMBER_REG_EXP = /^\\+\\d+$/;\n\n/* export function parseEmojis(text: string) {\n return text.replace(/:([a-z0-9\\-\\+\\*_]+?):/gi, function (all, shortcut) {\n var emojiCode = EmojiHelper.shortcuts[shortcut]\n if (emojiCode !== undefined) {\n return EmojiHelper.emojis[emojiCode][0]\n }\n return all\n })\n} */\n\n\n/* export function replaceUrlEncodings(urlWithEncoded: string) {\n return urlWithEncoded.replace(/(%[A-Z\\d]{2})+/g, (str) => {\n try {\n return decodeURIComponent(str);\n } catch (e) {\n return str;\n }\n });\n} */\n","// https://github.com/twitter/twemoji-parser/blob/master/src/lib/regex.js\n\nexport function encodeEmoji(emojiText: string) {\n const codepoints = toCodePoints(removeVS16s(emojiText)).join('-');\n return codepoints;\n}\n\nconst vs16RegExp = /\\uFE0F/g;\n// avoid using a string literal like '\\u200D' here because minifiers expand it inline\nconst zeroWidthJoiner = String.fromCharCode(0x200d);\n\nconst removeVS16s = (rawEmoji: string) => (rawEmoji.indexOf(zeroWidthJoiner) < 0 ? rawEmoji.replace(vs16RegExp, '') : rawEmoji);\n\nexport function toCodePoints(unicodeSurrogates: string): Array {\n const points = [];\n let char = 0;\n let previous = 0;\n let i = 0;\n while(i < unicodeSurrogates.length) {\n char = unicodeSurrogates.charCodeAt(i++);\n if(previous) {\n points.push((0x10000 + ((previous - 0xd800) << 10) + (char - 0xdc00)).toString(16));\n previous = 0;\n } else if(char > 0xd800 && char <= 0xdbff) {\n previous = char;\n } else {\n points.push(char.toString(16));\n }\n }\n\n if(points.length && points[0].length === 2) {\n points[0] = '00' + points[0];\n }\n\n return points;\n}\n\nexport function getEmojiToneIndex(input: string) {\n const match = input.match(/[\\uDFFB-\\uDFFF]/);\n return match ? 5 - (57343 - match[0].charCodeAt(0)) : 0;\n}\n\nconst VIRTUAL_COUNTRIES_EMOJIS: Map = new Map([\n ['FT', '๐Ÿดโ€โ˜ ']\n]);\n\nexport function getCountryEmoji(iso2: string) {\n return VIRTUAL_COUNTRIES_EMOJIS.get(iso2) ??\n String.fromCharCode(55356, 56741 + iso2.charCodeAt(0), 55356, 56741 + iso2.charCodeAt(1));\n}\n\nexport function emojiFromCodePoints(codePoints: string) {\n return codePoints.split('-').reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [699,211,147,85,110], () => (__webpack_require__(9092)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames not based on template\n\tif (chunkId === 85) return \"85.887945ef5f43bc205112.bundle.js\";\n\tif (chunkId === 110) return \"110.392baae5965bb16e7063.bundle.js\";\n\t// return url for filenames based on template\n\treturn \"\" + ({\"211\":\"npm.big-integer\",\"699\":\"npm.pako\"}[chunkId] || chunkId) + \".\" + {\"8\":\"93d2f33af815eb0455aa\",\"104\":\"f68acff124bec8da4bd6\",\"147\":\"d3d1728d5fd59c12e18f\",\"211\":\"363d763daad0ee4e2741\",\"301\":\"95838a8203f23dd1ce8f\",\"642\":\"be93122d1116ecdc9322\",\"699\":\"89deb457201f16c93925\"}[chunkId] + \".chunk.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t678: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","DEBUG","MOUNT_CLASS_TO","window","self","EmojiVersions","Emoji","version","Object","assign","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","IS_FIREFOX","undefined","badCharsRe","trimRe","C2L","cleanSearchText","text","latinize","processSearchText","clearBadChars","ignoreCase","options","hasTag","includeTag","charAt","originalText","replace","clearBadCharsAndTrim","ch","latinizeCh","latinizeString","fixCyrillic","FILENAME_JOINER","getFileNameByLocation","location","ext","length","str","_","id","thumb_size","filter","Boolean","join","photo_id","pFlags","big","stickerset","short_name","emoticon","thumb_version","volume_id","local_id","url","console","error","downloadId","getFileURL","type","encodeURIComponent","JSON","stringify","platforms","Set","ignore","getRestrictionReason","reasons","find","reason","has","isRestricted","ignoreRestrictionReasons","clear","forEach","add","getPeerId","peerId","isPeerId","userId","user_id","toPeerId","chatId","channel_id","chat_id","isUser","peerParams","substr","split","IDB","constructor","db","this","name","storageIsAvailable","log","openDatabase","INSTANCES","push","isAvailable","createNew","openDbPromise","createIndexes","os","store","indexNames","Array","from","indexName","deleteIndex","indexes","index","contains","createIndex","keyPath","objectParameters","request","indexedDB","open","Promise","reject","message","finished","setTimeout","onerror","resolve","onsuccess","event","result","calledNew","onclose","e","onabort","transaction","target","close","onversionchange","onupgradeneeded","warn","oldVersion","newVersion","stores","objectStoreNames","objectStore","createObjectStore","static","instance","preserve","storage","IDBStorage","storeName","idb","create","delete","entryName","isArray","concat","getObjectStore","promises","map","save","value","idx","put","get","mode","callback","perf","performance","now","then","onError","clearTimeout","timeout","onComplete","results","requests","r","waitForTransactionComplete","oncomplete","callbackResult","left","onRequestFinished","i","getAll","environment","getEnvironment","setEnvironment","env","RootScope","super","myId","connectionStatus","premium","addEventListener","isNew","isPremium","dispatchEventSingle","status","dispatchEvent","args","invokeVoid","settings","getConnectionStatus","getPremium","state","stateStorage","getState","setByKey","key","object","splitted","getDeepProperty","slice","pop","setDeepProperty","first","pushToState","direct","onlyLocal","setKeyValueToStorage","set","HTTP","dcId","logSuffix","pending","debug","logTypes","Log","logger","connected","_send","body","fetch","method","response","arrayBuffer","buffer","TextDecoder","decode","Uint8Array","setConnected","err","destroyed","destroy","send","networker","promise","releasePending","releasing","splice","pause","Socket","handleOpen","handleError","handleClose","removeListeners","handleMessage","data","byteLength","ws","connect","removeEventListener","WebSocket","binaryType","randomize","arr","crypto","Error","getRandomValues","Obfuscation","_process","operation","cryptoMessagePort","transfer","init","codec","idPromise","release","initPayload","val","val2","reversedPayload","reverse","encKey","encIv","decKey","decIv","process","obfuscateTag","encrypted","encode","payload","tag","encodePacket","len","header","readPacket","bytesToHex","bytes","toString","TcpObfuscated","Connection","retryTimeout","abridged","obfuscation","autoReconnect","onOpen","connection","setConnectionStatus","cleanupSent","resend","onMessage","parseResponse","processMessage","messageId","sessionId","catch","shift","onClose","needTimeout","retryAt","time","Date","diff","lastCloseTime","isNaN","reconnectTimeout","ctx","reconnect","bodySent","forceReconnect","setAutoReconnect","once","enable","changeUrl","encodeBody","toEncode","encoded","releasingPending","sent","TEST_SUFFIX","getTelegramConnectionSuffix","connectionType","constructTelegramWebSocketUrl","suffix","path","DcConfigurator","sslSubdomains","dcOptions","host","port","chosenServers","transportSocket","chosenServer","oooohLetMeLive","transportHTTP","dcOption","chooseServer","transportType","reuse","hasOwnProperty","client","download","upload","servers","transports","transport","obj","indexOfAndSplice","MTTransportController","opened","Map","waitForWebSocket","pingTransports","dcConfigurator","https","websocket","httpPromise","websocketPromise","socket","isFulfilled","isRejected","isHttpAvailable","isWebSocketAvailable","all","pinging","setTransportValue","setTransportOpened","setTransportClosed","AppManager","setManagers","managers","loadStorages","storages","recordPromise","storagesKeys","keys","storagesPromises","storagesResults","resetStorages","size","loadStoragesInner","AppStoragesManager","names","createStorages","loadStorage","PasswordManager","apiManager","invokeApi","updateSettings","currentHashPromise","newHashPromise","params","password","new_settings","hint","email","currentPassword","cryptoWorker","invokeCrypto","newAlgo","new_algo","salt1","newPassword","hashes","new_password_hash","getInputCheckPassword","check","inputCheckPassword","auth","setUser","user","confirmPasswordEmail","code","resendPasswordEmail","cancelPasswordEmail","ReferenceDatabase","contexts","links","saveContext","reference","context","getContexts","_context","deepEqual","getReferenceByLink","getContext","values","deleteContext","refreshReference","c","appMessagesManager","reloadMessages","refreshEmojiesSoundsPromise","appStickersManager","getAnimatedEmojiSounds","appProfileManager","getProfile","appEmojiManager","getCustomEmojiDocuments","docId","appAttachMenuBotsManager","getAttachMenuBot","botId","appThemesManager","getWallPaperById","wallPaperId","hex","newHex","newContext","makeError","safeReplaceObject","wasObject","newObject","getPeerIdsFromMessage","peerIds","fromId","viaBotId","fwdFromId","media","contactUserId","recentVoters","recent_voters","recentReactions","recent_reactions","reaction","peer_id","action","userIds","users","inviter_id","chatIds","recentRepliers","recent_repliers","reply","setDialogIndex","dialog","indexKey","GLOBAL_FOLDER_ID","DialogsStorage","allDialogsLoaded","pinnedOrders","folderId","saveAllDialogsLoaded","resetPinnedOrder","savePinnedOrders","forumTopics","folders","dialogsOffsetDate","dialogsNum","dialogsIndex","cachedResults","query","count","dialogs","onUpdateFolderPeers","update","folder_peers","folderPeer","folder_id","peer","appPeersManager","dropDialog","pinned","handleDialogUnpinning","generateIndexForDialog","pushDialog","scheduleHandleNewDialogs","onUpdateDialogPinned","getDialogOnly","handleDialogTogglePinned","onUpdateChannelPinnedTopic","topicId","generateMessageId","topic_id","topic","getForumTopic","getFilterIdForForum","onUpdatePinnedDialogs","order","handleDialogsPinned","dialogsResult","applyDialogs","d","onUpdateChannelPinnedTopics","filterId","limit","getLimit","channel","appChatsManager","getChannelInput","toChatId","offset_date","offset_id","offset_topic","processTopics","topics","after","rootScope","appUsersManager","getSelf","peerText","getPeerSearchText","indexObject","onFilterUpdate","getCachedDialogs","processDialogForFilter","processDialogForFilters","getDialogIndexKeyByFilterId","processChangedUnreadOrUnmuted","chat","getChat","dropDialogOnDeletion","enabled","flushForumTopicsCache","apiUpdatesManager","addMultipleEventsListeners","updateFolderPeers","updateDialogPinned","updateChannelPinnedTopic","updatePinnedDialogs","updateChannelPinnedTopics","appStateManager","appStoragesManager","getCache","_order","getPinnedOrders","setDialogsFromState","bind","appDraftsManager","addMissedDialogs","top_message","getServerMessageId","topMessage","saveMessages","saveDialog","ignoreOffsetDate","getMessageByPeer","reloadConversation","isDialogsLoaded","setDialogsLoaded","loaded","isForum","isFilterIdForForum","defineNotNumerableProperties","every","orders","isDialogPinned","filtersStorage","getFilter","isPinned","pinnedPeerIds","getOffsetDate","offsetDate","Math","min","sort","a","b","generateFolder","folder","unreadMessagesCount","unreadPeerIds","unreadUnmutedPeerIds","getFolder","forumTopic","getDialogKey","isTopic","getFolderDialogs","skipMigrated","hidden","migratedTo","getNextDialog","currentPeerId","findIndex","getDialogIndexKey","localId","isDialogUnmuted","appNotificationsManager","isPeerLocalMuted","respectType","threadId","getFolderUnreadCount","unreadUnmutedCount","unreadCount","arrays","setDialogIndexInFilter","isRealFolder","testDialogForFilter","pinnedIds","pinnedKey","pinnedIndex","generateDialogIndex","generateDialogPinnedDateByIndex","getDialogIndex","getDialog","verify","skipped","getDialogOrTopic","isObject","date","tsNow","timeManager","getServerTimeOffset","noIndex","filters","getFilters","cmp","wasIndex","wasDialog","wasDialogIndex","newDialogIndex","prepareFolderUnreadCountModifyingByDialog","insertInDescendSortedArray","prepareDialogUnreadCountModifying","toggle","callbacks","wasUnreadCount","getDialogUnreadCount","wasUnmuted","newUnreadCount","newUnmuted","addMessagesCount","modifyFolderUnreadCount","toggleDialog","toggleUnmuted","forumUnreadCount","getForumUnreadCount","hasUnmuted","some","max","dispatchUnreadTimeout","_folder","justReturn","noPinnedOrderUpdate","topDate","generateDialogPinnedDate","channelId","isChannel","draft","dialogKey","unshift","setDialogToState","pts","historyStorage","getHistoryStorage","messagesStorage","getHistoryMessagesStorage","history","incomingMessage","mid","getMessageFromStorage","is_outgoing","peersStorage","requestPeersForKey","isAnyChat","newPts","getChannelState","requestPeer","saveGlobalOffset","getForumTopicsCache","getDialogOffsetDate","savedGlobalOffsetDate","savedOffsetDate","dropDialogFromFolders","foundDialog","wasPinned","keepLocal","clearDialogFromState","releasePeer","dropDialogWithEvent","dropped","items","forEachReverse","assumeType","saveApiUsers","saveApiChats","chats","messages","updatedDialogs","topMid","topPendingMid","pendingTopMsgs","topPendingMessage","maxId","cache","getUpdateCache","getUpdateAfterReloadKey","updates","newUpdatesAfterReloadToHandle","saveUpdate","canSaveDialogByPeerId","isDialog","wasDialogBefore","wasTopMessage","generateTempMessageId","from_id","getOutputPeer","deleted","out","isOutgoing","migrated_to","deactivated","migratedToPeer","migratedFromTo","migratedToFrom","read_inbox_max_id","read_outbox_max_id","saveDraft","isOut","unread","unread_count","isEnd","insertSlice","setEnd","mergeReplyKeyboard","readMaxId","readOutboxMaxId","savePeerSettings","notify_settings","addChannelState","releaseUnreadCount","dialogsStorage","processTopicUpdate","oldTopic","isIconChanged","icon_emoji_id","isTitleChanged","title","isChanged","getDialogs","offsetIndex","fillContactsResult","fillContacts","cached","reloadMissingDialogsPromise","reloadMissingPeerIds","realFolderId","curDialogStorage","d1","d2","offset","loadedAll","isEnoughDialogs","isTopEnd","getTopMessages","deletedTopics","getTopicPromises","getForumTopicById","getTopicsPromise","ids","fullfillLeft","messagesForumTopics","getForumTopicOrReload","callbackify","processTopicsPromise","f","reduce","acc","v","newPinned","convertment","PREPENDED_FILTERS","LOCAL_FILTER","flags","exclude_peers","include_peers","pinned_peers","excludePeerIds","includePeerIds","FiltersStorage","filtersArr","reloadedPeerIds","localFilters","generateLocalFilter","clearFilters","onUpdateDialogFilter","saveDialogFilter","findAndSplice","onUpdateDialogFilters","oldFilters","copy","getDialogFilters","_filterId","onUpdateDialogFilterOrder","includes","setLocalId","updateDialogFilter","updateDialogFilters","updateDialogFilterOrder","prependFilters","allChatsFilter","archiveFilter","allChatsFilterIndex","exclude_archived","exclude_unarchived","exclude_read","isDialogUnread","exclude_muted","unread_mentions_count","broadcasts","isBroadcast","groups","isAnyGroup","toUserId","isBot","bots","non_contacts","isContact","contacts","testDialogForFilterId","toggleDialogPin","getConfig","pinned_infolder_count_max","getInputPeerById","createDialogFilter","prepend","remove","getOutputDialogFilter","bool","updateDialogFiltersOrder","filterIncludedPinnedPeers","peers","reloadDialogs","inputPeer","isAlreadyReloaded","reloadPromises","missingPeerIds","overwrite","invokeApiSingle","getSuggestedDialogsFilters","silent","to","oldFilter","_filter","isFilterIdAvailable","applyMixins","derivedCtor","constructors","baseCtor","getOwnPropertyNames","prototype","getOwnPropertyDescriptor","defineProperty","ApiUpdatesManager","updatesState","pendingPtsUpdates","pendingSeqUpdates","syncPending","syncLoading","channelStates","attached","subscriptions","processUpdateMessage","updateMessage","processOpts","seq","seqStart","seq_start","forceGetDifference","processUpdate","toId","fwd_from","reply_to","entities","pts_count","override","_constructor","setProxy","Proxy","saveUpdatesState","us","popPendingSeqUpdate","nextSeq","pendingUpdatesData","seqAwaiting","ptsAwaiting","clearStatePendingSync","popPendingPtsUpdate","curState","curPts","goodPts","goodIndex","getDifference","processLocalUpdate","wasSyncing","pts_total_limit","qts","differenceResult","other_updates","new_messages","apiMessage","nextState","intermediate_state","onDifferenceTooLong","justAName","getChannelDifference","channelState","bindPrefix","lastDifferenceTime","final","lastPtsUpdateTime","fwdHeader","hasUser","post","hasChat","popPts","popSeq","subscribeToChannelUpdates","subscription","cb","interval","unsubscribeFromChannelUpdates","force","clearInterval","attach","langCode","noErrorBox","stateResult","setUpdatesProcessor","strs","en","ru","getChangelog","lang","res","ok","langStr","parseMarkdown","inbox_date","languages","filterUnique","language","AppAvatarsManager","savedAvatarURLs","removeFromAvatarsCache","isAvatarCached","saved","loadAvatar","photo","peerPhotoFileLocation","downloadOptions","dc_id","limitPart","apiFileManager","blob","URL","createObjectURL","AppCallsManager","calls","IS_CALL_SUPPORTED","updatePhoneCall","saveCall","phone_call","updatePhoneCallSignalingData","callId","phone_call_id","computeKey","g_b","p","call","isDiscarded","oldCall","getCall","getCallInput","access_hash","savePhonePhoneCall","phonePhoneCall","generateDh","random_length","dhConfig","requestCall","protocol","g_a_hash","video","getUserInput","random_id","discardCall","duration","connection_id","AppChatsManager","isPeerNeeded","modifyUsernamesCache","onChatUpdated","onUpdateChannelParticipant","clearCache","onUpdateChatDefaultBannedRights","default_banned_rights","updateChannelParticipant","updateChatDefaultBannedRights","getFromCache","apiChats","saveApiChat","oldChat","participants_count","changedUsername","setUsernameToCache","oldPhotoId","newPhotoId","toggledForum","forum","changedPhoto","changedTitle","changedAnyBadge","verified","scam","fake","hasRights","rights","isThread","editChatDefaultBannedRights","banned_rights","until_date","isMegagroup","megagroup","isInChat","good","getInputPeer","getChannelInputPeer","getChatInputPeer","allowMin","getChatString","createChannel","inviteToChannel","input","usersInputs","u","createChat","leaveChannel","joinChannel","addChatUser","fwdLimit","fwd_limit","deleteChatUser","leaveChat","leave","deleteChannel","deleteChat","migrateChat","updateUsername","username","doNotRefresh","refreshChatAfterRequest","editPhoto","inputFile","inputChatPhoto","file","editTitle","editAbout","about","editBanned","participant","getParticipantPeerId","wasChannel","timestamp","actor_id","prev_participant","new_participant","kicked_by","clearChannelParticipantBannedRights","kickFromChannel","view_messages","kickFromChat","resolveChannel","messagesChats","togglePreHistoryHidden","toggleSignatures","toggleNoForwards","setChatAvailableReactions","reactions","chatFull","getCachedFullChat","available_reactions","getSendAs","invokeApiSingleProcess","processResult","sendAsPeers","importChatInvite","hash","checkUsername","getSponsoredMessage","invokeApiCacheable","cacheSeconds","sponsoredMessages","sponsoredMessage","viewSponsoredMessage","randomId","checkChatInvite","chatInvite","toggleUsername","active","reorderUsernames","deactivateAllUsernames","makeChannelPrivate","getChannels","toggleForum","editForumTopic","iconEmojiId","closed","createForumTopic","iconColor","channelFull","getChannelFull","sendAsInputPeer","default_send_as","icon_color","send_as","updatePinnedForumTopic","wrapUrl","unsafe","matchUrlProtocol","tgMeMatch","telescoPeMatch","tgMatch","onclick","prefix","pathname","fullPath","I18n","pluralRules","cacheLangPackPromise","setLangCode","lastRequestedLangCode","lastRequestedNormalizedLangCode","updateAmPm","timeFormat","dateTimeFormat","getDateTimeFormat","hour","minute","hour12","setHours","amText","format","amPmCache","am","pmText","pm","loadLocalLangPack","defaultCode","langSign","countries","strings","formatLocalStrings","default","saveLangPack","from_version","lang_code","local","loadLangPack","web","requestedServerLanguage","lang_pack","polyfillPromise","pushTo","langPack","appVersion","applyLangPack","currentLangCode","Intl","PluralRules","string","countriesList","country","langPackKey","default_name","lastAppliedLangCode","cachedDateTimeFormats","document","querySelectorAll","element","weakMap","superFormatter","indexHolder","lastIndex","p1","p2","p3","p4","createElement","append","lastIndexOf","wrappedUrl","href","setAttribute","DocumentFragment","firstChild","textContent","arg","pushNextArgument","plain","select","item","Node","isRTL","setRTL","rtl","getCacheLangPack","finally","setTimeFormat","haveToUpdate","IntlDateElement","getStrings","getLangPack","langPack1","langPack2","localLangPack1","localLangPack2","l","_Intl","WeakMap","IntlElementBase","classList","property","IntlElement","safeAssign","formatted","dataset","compareAndUpdate","json","DateTimeFormat","hours","getHours","getMinutes","capitalizeFirstLetter","i18n","i18n_","_i18n","months","days","getWeekNumber","UTC","getFullYear","getMonth","getDate","dayNum","getUTCDay","setUTCDate","getUTCDate","yearStart","getUTCFullYear","ceil","getTime","today","year","day","month","weekday","minYear","yearPattern","RegExp","monthYearOrDayPattern","yearOrDayAndMonthPattern","shortDate","longDate","numberOfDaysEachMonth","createForMonthYear","dates","selectedYear","currentYear","setFullYear","minDate","setMonth","maxDate","formatterMonthYear","createForDayMonth","validDateForMonth","formatterDayMonth","formatterYearMax","formatWeekLong","getDay","q","safeReplaceArrayInObject","trim","dayOfWeek","setDate","getDayOfWeek","distance","setTime","matches","exec","g1","g2","k","g3","parseInt","k1","EXTENSION_MIME_TYPE_MAP","pdf","tgv","tgs","wav","mp3","ogg","jpeg","jpg","png","gif","webp","mp4","webm","mov","svg","MIME_TYPE_EXTENSION_MAP","uploadWallPaperTempId","AppDocsManager","onServiceWorkerFail","docs","doc","supportsStreaming","thumbsStorage","deleteCacheContext","stickerCachedThumbs","uploadingWallPapers","online","saveDoc","oldDoc","file_reference","referenceDatabase","attributes","attribute","file_name","wrapPlainText","voice","mime_type","w","h","round_message","alt","stickerEmojiRaw","stickerSetInput","thumbs","IS_WEBP_SUPPORTED","sticker","IS_WEBM_SUPPORTED","animated","mappedMimeType","joiner","monthAsNumber","noSeconds","getSeconds","leadingZero","noTime","getFullDate","isServiceWorkerOnline","getCacheContext","setCacheContextURL","thumb","getDocumentDownloadOptions","getDocumentURL","getDoc","downloadDoc","queueId","onlyCache","downloadMedia","getLottieCachedThumb","toneIndex","saveLottiePreview","width","height","saveWebPConvertedStrippedThumb","stickerThumbConverted","prepareWallPaperUpload","cacheContext","wallpaper","slug","uploadWallPaper","fileName","wallPaper","downloaded","getGifs","invokeApiHashable","gifs","requestDocPart","requestFilePart","getDocumentInputFileLocation","AppDraftsManager","drafts","updateDraftMessage","notify","getKey","getDraft","getAllDrafts","getAllDraftPromise","apiDraft","processApiDraft","isEmptyDraft","reply_to_msg_id","syncDraft","localDraft","saveOnServer","serverDraft","draftsAreEqual","draftObj","getInputEntities","no_webpage","top_msg_id","saveLocalDraft","clearAllDrafts","combined","clearDraft","emptyDraft","setDraft","EMOJI_LANG_PACK","keywords","AppEmojiManager","keywordLangPacks","indexedLangPacks","getKeywordsPromises","recent","getRecentEmojisPromises","getCustomEmojiDocumentPromises","getEmojiKeywords","storageKey","pack","validateInitObject","keywordsDifference","packKeywords","keyword","emoticons","getBothEmojiKeywords","networkerFactory","native","getRecentEmojis","indexEmojis","searchEmojis","emojis","POPULAR_EMOJI","recentEmoji","recentCustomEmoji","pushRecentEmoji","emoji","fixEmoji","docIds","document_id","documents","appDocsManager","getCachedCustomEmojiDocuments","setDebouncedGetCustomEmojiDocuments","getCustomEmojiDocumentsPromise","allIds","getCustomEmojiDocument","getCustomEmojis","getEmojiStickers","AppGroupCallsManager","groupCalls","participants","nextOffsets","updateGroupCall","saveGroupCall","updateGroupCallParticipants","groupCallId","saveApiParticipants","groupCall","getCachedParticipants","prepareToSavingNextOffset","nextOffsetsMap","nextOffset","setNextOffset","newNextOffset","saveApiParticipant","skipCounterUpdating","oldParticipant","hasLeft","muted","can_self_unmute","getGroupCall","modified","just_joined","apiParticipants","editParticipant","getGroupCallInput","getInputPeerSelf","volume","raise_hand","raiseHand","video_paused","videoPaused","video_stopped","videoStopped","presentation_paused","presentationPaused","getGroupCallFull","participants_next_offset","shouldUpdate","createGroupCall","scheduleDate","schedule_date","getGroupCallParticipants","sources","groupCallParticipants","next_offset","hangUp","discard","groupCallInput","source","join_as","joinGroupCall","isMuted","joinVideo","leaveGroupCallPresentation","getPhotoInput","getPhotoMediaInput","ttl_seconds","getMediaInput","AppInlineBotsManager","inlineResults","setHash","getGeoInput","geo","lat","long","accuracy_radius","getInlineResults","bot","geo_point","stopTime","botResults","queryId","query_id","appPhotosManager","savePhoto","generateQId","pushPopularBot","getTopPeers","topPeers","botPeerId","topPeer","rating","switchToPM","fromPeerId","startParam","startBot","checkSwitchReturn","getUser","bot_inline_placeholder","peerData","switchInlineQuery","getPeerUsername","callbackButtonClick","button","msg_id","sendInlineResult","queryAndResultIds","inlineResult","queryID","resultID","resultId","send_message","reply_markup","replyMarkup","sendText","inputMedia","messageMedia","caption","sendMessage","geoPoint","address","provider","venue_id","venue_type","phone_number","first_name","last_name","vcard","description","currency","total_amount","shipping_address_requested","start_param","sendOther","AppMessagesIdsManager","tempNum","num","splitStringByLength","maxLength","lastSliceStartIndex","arrayIndex","cut","end","part","_arrayIndex","partLength","appTabsManager","tabs","start","getTabs","tab","addTab","deleteTab","getDocumentInput","setBooleanFlag","processAfter","UPDATE_STICKERSET_ORDER","AppMessagesManager","pendingByRandomId","pendingByMessageId","pendingAfterMsgs","tempFinalizeCallbacks","sendSmthLazyLoadQueue","needSingleMessages","extendedMedia","maxSeenId","newDialogsToHandle","notificationsToHandle","reloadConversationsPeers","groupedTempId","typings","unreadMentions","goToNextMentionPromises","batchUpdates","middleware","clean","uploadFilePromises","messagesStorageByPeerId","groupedMessagesStorage","scheduledMessagesStorage","historiesStorage","threadsStorage","searchesStorage","pinnedMessages","threadsServiceMessagesIdsStorage","threadsToReplies","handleNewDialogs","newMaxSeenId","updateMap","processDialog","isDialogDefined","incrementMaxSeenId","handleNotifications","notificationsHandlePromise","notifyPeerToHandle","getNotifyPeerSettings","peerTypeNotifySettings","mentioned","notifyAboutMessage","fwdCount","onUpdateMessageId","onUpdateNewMessage","getMessagePeer","isLocalThreadUpdate","createMessageStorage","threadKey","getThreadKey","handleNewUpdateAfterReload","threadStorage","reply_to_peer_id","reply_to_mid","receiptMessage","checkPendingMessage","updateMessageRepliesIfNeeded","ignoreExisting","findSlice","firstSlice","forceUserOnline","handleNewMessage","inboxUnread","modifyCachedMentions","setDialogTopMessage","notifyPeer","onUpdateMessageReactions","recentReaction","previousReactions","previousRecentReactions","show_previews","peerReaction","pushBatchUpdate","batchUpdateReactions","setDialogToStateIfMessageIsTop","onUpdateDialogUnreadMark","unread_mark","onUpdateEditMessage","oldMessage","newMessage","handleEditedMessage","isTopMessage","clear_history","dispatchEditEvent","newReactions","grouped_id","onUpdateReadHistory","max_id","read_max_id","getObjectKeysAndSort","stillUnreadCount","still_unread_count","newUnreadMentionsCount","foundAffected","repliesKey","getReadMaxIdIfUnread","messageThreadId","getMessageThreadId","setCount","threadKeyPart","onUpdateReadMessagesContents","topMsgId","mids","findPeerIdByMids","media_unread","fixDialogUnreadMentionsIfNoMessage","onUpdateChannelAvailableMessages","availableMinId","available_min_id","onUpdateDeleteMessages","threadKeys","historyUpdated","handleDeletedMessages","threadsStorages","msgs","affected","onUpdateChannel","needDialog","getPeerActiveUsernames","onUpdateChannelReload","flushStoragesByPeerId","onUpdateChannelMessageViews","views","batchUpdateViews","onUpdateServiceNotification","popup","phone","onUpdatePinnedMessages","missingMessages","werePinned","getPinnedMessagesKey","hiddenPinnedMessages","onUpdateNotifySettings","onUpdateNewScheduledMessage","isScheduled","onUpdateDeleteScheduledMessages","onUpdateMessageExtendedMedia","extended_media","onUpdateTranscribedAudio","batch","toDispatch","getMessagesFromMap","previousResults","changedResults","reactionCount","previousReactionCount","_reactionCount","reactionsEqual","chosen_order","updateMessageID","updateNewDiscussionMessage","updateNewMessage","updateNewChannelMessage","updateDialogUnreadMark","updateEditMessage","updateEditChannelMessage","updateMessageReactions","updateReadChannelDiscussionInbox","updateReadChannelDiscussionOutbox","updateReadHistoryInbox","updateReadHistoryOutbox","updateReadChannelInbox","updateReadChannelOutbox","updateChannelReadMessagesContents","updateReadMessagesContents","updateChannelAvailableMessages","updateDeleteMessages","updateDeleteChannelMessages","updateChannel","updateChannelReload","updateChannelMessageViews","updateServiceNotification","updatePinnedMessages","updatePinnedChannelMessages","updateNotifySettings","updateNewScheduledMessage","updateDeleteScheduledMessages","updateMessageExtendedMedia","updateTranscribedAudio","filterFunc","getScheduledMessagesStorage","webpage","appWebPagesManager","getCachedWebPage","drop","poll","appPollsManager","pollToMessages","startsWith","batchUpdatesDebounced","debounce","details","maxSeenMsgId","sendEntites","entity","invokeAfterMessageIsSent","tempId","callbackName","finalize","editMessage","is_scheduled","newMedia","noWebPage","handled","transcribeAudio","transcription_id","processError","replyToMsgId","MAX_LENGTH","message_length_max","webPage","getPeerMigratedTo","generateOutgoingMessage","toggleError","onMessagesSendError","sentRequestOptions","afterMessageId","sendAs","sendAsPeerId","apiPromise","invokeApiAfter","clear_draft","update_stickersets_order","wrapMessageEntities","beforeMessageSending","sequential","noop","sendFile","attachType","apiFileName","fileType","File","isDocument","Blob","isPhoto","IMAGE_MIME_TYPES_SUPPORTED","strippedPhotoSize","strippedBytes","actionName","isVoiceMessage","waveform","isMedia","photoSize","sizes","objectURL","VIDEO_MIME_TYPES_SUPPORTED","videoAttribute","isRoundMessage","supports_streaming","noSound","thumbCacheContext","sentDeferred","spoiler","uploadingFileName","getFileNameForUpload","uploaded","uploadPromise","load","thumbUploadPromise","cancelPendingMessage","setTyping","addNotifyListener","progress","percents","floor","done","total","notifyAll","force_file","isGroupedItem","background","ret","sendAlbum","sendFileDetails","groupId","o","invoke","multiMedia","multi_media","originalInputMedia","inputSingleMedia","inputs","sendContact","contactPeerId","getContactMediaInput","pollId","savePoll","total_voters","getPoll","getPhoto","postAuthor","getPeer","signatures","generateFromId","post_author","generateFlags","generateReplyHeader","via_bot_id","replies","generateReplies","replyToTopId","originalMessage","forum_topic","reply_to_top_id","linked_chat_id","comments","replies_pts","isAnonymousSending","generateForwardHeader","isUserHidden","from_name","userFull","getCachedFullUser","private_forward_name","channel_post","saved_from_msg_id","saved_from_peer","generateFakeAvatarMessage","Number","MAX_SAFE_INTEGER","getUploadPromise","uploadFileName","admin_rights","anonymous","pendingData","fillConversations","chatHistoryStorage","maxSeenIdIncremented","hasPrepend","noIdsDialogs","setFolderId","setMessageUnreadByDialog","folderDialogs","dialogsLength","slicedDialogs","offset_peer","offsetPeerId","forwardMessages","config","overflowMids","forwarded_count_max","dropCaptions","dropAuthor","newMids","newMessages","replyToMid","replyToMessageIdx","newReplyToMid","getStickerEffectThumb","nopremium","group","from_peer","to_peer","with_my_score","withMyScore","drop_author","drop_media_captions","generateEmptyMessage","getMessagesStorageByKey","s","getMessagesStorage","getMessageById","cantForwardDeleteMids","cantForward","cantDelete","canForward","canDeleteMessage","reloadConversationOrTopic","inputDialogPeer","getInputDialogPeerById","reloadConversationsPromise","inputDialogPeers","currentState","doFlushHistory","just_clear","revoke","affectedHistory","flushHistory","justClear","getHistory","historyResult","getTypingKey","ss","hidePinnedMessages","getPinnedMessage","getSearch","inputFilter","getPinnedMessagesCount","getPinnedMessagesMaxId","updatePinnedMessage","unpin","pm_oneside","unpinAllMessages","unpinAll","getAlbumText","getGroupsFirstMessage","minMid","getMidsByAlbum","groupedId","getMessagesByAlbum","getMidsByMessage","filterMessages","appMessagesIdsManager","saveMessage","isMessage","replyTo","overwriting","msgId","savedFromPeerId","savedFromMid","savedFrom","mediaContext","unsupported","originalDoc","messageKey","getMessageKeyForPendingWebPage","saveWebPage","appWebDocsManager","saveWebDocument","extendedMediaMedia","totalEntities","migrateFrom","migrateTo","video_sizes","appGroupCallsManager","migrateChecks","getFirstMessageToEdit","goodMessage","myPeerId","canEditMessage","apiEntities","myEntities","parseEntities","mergeEntities","reportMessages","editPeerFolders","getDialogPeer","markDialogUnread","read","fromChat","canMessageBeEdited","kind","goodMedias","edit_time_limit","getReplyKeyboard","messageReplyMarkup","lastReplyMarkup","selective","maxOutId","single_use","getSearchStorage","getSearchCounters","canCache","isPeerRestricted","func","filterMessagesByInputFilterFromStorage","_storage","filterMessagesByInputFilter","nextRate","backLimit","offset_id_offset","next_rate","foundMsgs","min_date","max_date","add_offset","min_id","offsetId","offsetMessage","offset_rate","searchResult","foundCount","subscribeRepliesThread","getDiscussionMessage","generateThreadServiceStartMessage","maxMessageId","serviceStartMessage","is_single","getThreadServiceMessageId","getMessageWithReplies","newMaxId","unsetEnd","newDialogsHandlePromise","deleteMessages","isRecursion","creator","delete_messages","serverMessageIds","affectedMessages","readHistory","triedToReadMaxId","readPromise","getPeerString","readAllHistory","getUnreadMentionsKey","slicedArray","fixUnreadMentionsCountIfNeeded","goToNextMention","loadNextPromise","loadNextMentions","last","getUnreadMentions","mergeHistoryResult","minId","messagesMessages","readMessages","msgIds","getHistoryStorageTransferable","historySerialized","toJSON","inputNotifyPeer","getInputNotifyPeerById","ignorePeerId","getNotifyPeerTypeSettings","getNotifySettings","isMessageIsTopMessage","threadMessage","broadcastEventName","pendingMessage","finalizePendingMessage","mutePeer","validatePeerSettings","muteUntil","mute_until","togglePeerMute","mute","canSendToPeer","canSendToUser","finalMessage","tempMessage","finalizePendingMessageCallbacks","newPhoto","newDoc","newPhotoSize","oldCacheContext","getPhotoDownloadOptions","thumbSize","polls","handleReleasingMessage","getMessageReactionsListAndReadParticipants","skipReadParticipants","skipReactionsList","emptyMessageReactionsList","canViewMessageReadParticipants","getMessageReadParticipants","appReactionsManager","getMessageReactionsList","messageReactionsList","readParticipantsPeerIds","filteredReadParticipants","readPeerId","reactionsCount","readParticipants","appConfig","getAppConfig","chat_read_mark_size_threshold","chat_read_mark_expire_period","incrementMessageViews","increment","chatPeerIds","idleStartTime","getScheduledMessageByPeer","getScheduledMessages","sendScheduledMessages","deleteScheduledMessages","getMessageWithCommentReplies","isFetchIntervalNeeded","getNewHistory","isBottomEnd","getEnds","offsetIdOffset","haveSlice","sliceMe","fulfilled","fillHistoryStorage","constructSlice","isHistoryResultEnd","topWasMeantToLoad","wasMaxId","requestHistory","deleteSlice","oldestMessage","foundSlice","_historyResult","fetchSingleMessages","fetchSingleMessagesPromise","requestPromises","getMessagesResult","getExtendedMedia","toRequest","fetchMessageReplyTo","replyToPeerId","typing","smth","deleteWebPageFromPending","updatePollToMessage","groupedStorage","albums","dispatchAlbumEdit","deletedMids","noforwards","noForwards","getElementCallback","newMap","peerIdStr","saveDefaultSendAs","convertInputKeyToKey","inputKey","AppNotificationsManager","peerSettings","notifyUsers","notifyChats","notifyBroadcasts","notifyForumTopic","checkMuteUntil","checkMuteUntilTimeout","closestMuteUntil","peerNotifySettings","typeKey","checkMuteUntilThrottled","throttle","isPeerType","notifySettings","getNotifyPeerTypePromise","getContactSignUpNotification","notifyContactsSignUp","setContactSignUpNotification","getPeerKey","getPeerMuted","getPeerLocalSettings","n","peerKey","typeNotifySettings","AppPeersManager","canPinMessage","getPeerPhoto","getUserString","getRestrictionReasonText","restriction_reason","getUserInputPeer","getUserSearchText","getDialogType","getDeleteButtonText","AppPhotosManager","photos","oldPhoto","Infinity","getUserPhotos","inputUser","photosResult","photoIds","photoId","AppPollsManager","updateMessagePoll","poll_id","saveResults","chosenIndexes","answer","chosen","getInputMediaPoll","correctAnswers","solution","solutionEntities","correct_answers","solution_entities","sendVote","optionIds","answers","option","getResults","getVotes","votesList","stopPoll","newPoll","AppPrivacyManager","privacy","updatePrivacy","rules","setPrivacy","privacyRules","inputRule","rule","getPrivacy","privacyKey","getGlobalPrivacySettings","setGlobalPrivacySettings","PEER_FULL_TTL","AppProfileManager","usersFull","chatsFull","fullExpiration","onUpdateChatParticipants","onUpdateChatParticipantAdd","_participants","onUpdateChatParticipantDelete","onUpdateUserTyping","getTypingsKey","typingsInPeer","t","cancelAction","getChatFull","onUpdatePeerBlocked","blocked","updateChatParticipants","updateChatParticipantAdd","updateChatParticipantDelete","updateUserTyping","updateChatUserTyping","updateChannelUserTyping","updatePeerBlocked","fullChat","updated","call_active","hasChatPhoto","chat_photo","refreshFullPeer","invalidateChannelParticipants","usersUserFull","full_user","profile_photo","botInfo","bot_info","referenceContext","description_document","description_photo","getProfileByPeerId","getCachedProfileByPeerId","getFullPhoto","profile","full_chat","getChatInviteLink","exported_invite","link","exportedInvite","getParticipants","getChannelParticipants","chatParticipants","createSearchIndex","chatParticipant","found","filteredParticipants","getParticipant","getChannelParticipant","broadcast","channelParticipant","fullChannel","getMentions","processUserIds","ratingMap","cP","updateProfile","saveApiUser","uploadProfilePhoto","updateResult","strippedThumb","stripped_thumb","deletePhotos","deletedList","verifyParticipantForOnlineCount","reduceParticipantsForOnlineCount","getOnlines","chatInfo","channelParticipants","onlines","getPeerTypings","callbackifyAll","SAVE_DOC_KEYS","REFERENCE_CONTEXT","AppReactionsManager","availableReactions","getAvailableReactions","sendReactionPromises","lastSendingTimes","availableReaction","around_animation","static_icon","appear_animation","center_icon","messagesAvailableReactions","getActiveAvailableReactions","inactive","getAvailableReactionsForPeer","activeAvailableReactions","unshiftQuickReaction","getQuickReaction","quickReaction","chatAvailableReactions","filteredChatAvailableReactions","unshiftQuickReactionInner","getAvailableReactionsByMessage","isReactionActive","reactions_default","getReactionCached","getReaction","getMessagesReactions","setDefaultReaction","sendReaction","lastSendingTimeKey","unsetReactionCount","canSeeList","can_see_list","chosenReactions","unsetReactions","chosenReactionIdx","chosenReactionCount","chosenReactionsLength","reactionCountIdx","id1","id2","promiseKey","editMessageUpdateIdx","editMessageUpdate","LOCAL_IDS","EMOJI","EMOJI_ANIMATIONS","PREMIUM_GIFTS","GENERIC_ANIMATIONS","DEFAULT_STATUSES","DEFAULT_TOPIC_ICONS","LOCAL_IDS_SET","AppStickersManager","processAllStickersResult","allStickers","sets","stickerSet","videos","getStickerSetPromises","getStickersByEmoticonsPromises","sounds","getAnimatedEmojiStickerSet","getGreetingStickersPromise","getGreetingStickersTimeout","getGreetingSticker","onStickersUpdated","updateNewStickerSet","saveStickerSet","updateRecentStickers","updateFavedStickers","updateMoveStickerSetToTop","stickers","getFavedStickersStickers","getRecentStickersStickers","justPreload","getStickersByEmoticon","greetingStickers","random","saveStickers","canUseStickerSetCache","useCache","refreshTime","getStickerSet","cachedSet","getStickerSetInput","saveById","getLocalStickerSet","animations","getAnimatedEmojiSoundsPromise","emojies_sounds","sound","bytesStr","atob","file_reference_base64","charCodeAt","this_dc","getRecentStickers","recentStickers","saveRecentSticker","unsave","_doc","docEmoticon","faved","cleanEmoji","getAnimatedEmojiSticker","isAnimation","packs","getAnimatedEmojiSoundDocument","preloadAnimatedEmojiSticker","preloadEmojiPromise","preloadAnimatedEmojiStickerAnimation","animation","preloadSticker","isPremiumEffect","video_thumbs","newSet","setToCache","needSave","installed_date","getStickerSetThumbDownloadOptions","thumb_dc_id","isAnimated","mimeType","getFeaturedStickers","covered","getPromoPremiumStickers","getPremiumStickers","getFavedStickers","favedStickers","getFavedStickersLimit","faveSticker","unfave","toggleStickerSet","archived","toggleStickerSets","searchStickerSets","excludeFeatured","exclude_featured","foundSaved","cover","getAllStickers","preloadStickerSets","includeOurStickers","messagesStickers","installedSets","foundStickers","cachedStickersAnimated","cachedStickersStatic","iteratePacks","clearRecentStickers","AppUsersManager","usernames","getTopPeersPromises","contactsIndex","contactsFillPromise","contactsList","updatedContactsList","updateUsersStatuses","timestampNow","updateUserStatus","setInterval","expires","was_online","setUserToStateIfNeeded","updateUserName","contactsListCachedTime","contact","mutual_contact","pushContact","recentSearch","onContactsModified","fromServer","pushRecentSearch","clearRecentSearch","resolveUsername","resolvedPeer","processResolvedPeer","resolvePhone","popContact","getContacts","includeSaved","sortBy","_contactsList","userId1","userId2","sortName1","sortName","sortName2","localeCompare","status1","getUserStatusForSort","myUserId","testSelfSearch","getContactsPeerIds","toggleBlock","block","apiUsers","cleanedUsernames","cleanUsername","searchUsername","oldPeer","oldUser","fullName","wasContact","newContact","onContactUpdated","checkPremium","isUserOnlineVisible","getUserStatus","isRegularUser","getUserPhone","isAnonymous","fragment_prefixes","isAttachMenuBot","bot_attach_menu","support","isNonContactUser","eventTimestamp","importContact","importContacts","phones","inputContacts","j","client_id","importedContactsResult","imported","importedContact","topPeersCache","cachedTime","categories","getBlocked","contactsBlocked","getLocated","self_expires","searchContacts","my_results","curIsContact","setUserStatus","offline","updateMyOnlineStatus","addContact","addPhonePrivacyException","add_phone_privacy_exception","deleteContacts","photoTypeSet","AppWebPagesManager","webpages","pendingWebPages","updateWebPage","apiWebPage","oldWebPage","isUpdated","siteName","site_name","shortTitle","author","pendingSet","getWebPage","readBlobAsArrayBuffer","readBlobAs","fileNameRFC","escape","DownloadWriter","serviceMessagePort","getServiceMessagePort","write","chunk","saveToStorage","DownloadStorage","getFile","prepareWriting","headers","cancel","getWriter","MIN_PART_SIZE","IGNORE_ERRORS","ApiFileManager","cacheStorage","downloadStorage","downloadPromises","uploadPromises","downloadPulls","downloadActives","refreshReferencePromises","maxUploadParts","maxDownloadParts","uncompressTGS","uncompressTGV","svgIndex","__","fixFirefoxSvg","TextEncoder","convertWebp","convertOpus","webFileDcId","webfile_dc_id","upload_max_fileparts_premium","upload_max_fileparts_default","downloadRequest","activeDelta","downloadPull","downloadCheck","downloadLimit","setQueueId","getFileStorage","cancelDownload","canceled","requestWebFilePart","checkCancel","isLocalWebFile","extension","file_type","mtime","fileDownload","getDelta","checkedReference","getLimitPart","isUpload","maxParts","maxPartSize","inputFileLocation","isDownloading","getDownload","getUpload","getConvertMethod","IS_OPUS_SUPPORTED","allocateDeferredPromises","startOffset","delayed","writeDeferred","writePromise","originalMimeType","convertMethod","getDownloadFileNameFromOptions","cacheFileName","errorHandler","prepared","isWebFile","cachePrepared","downloadPrepared","possibleSize","_errorHandler","writer","truncate","downloadFileName","readBlobAsUint8Array","requestPart","dispatchProgress","throttledDispatchProgress","superpuper","isFinal","getParts","replaceParts","processedResult","getDownloadMediaDetails","downloadMediaURL","downloadMediaVoid","fileSize","isBigFile","partSize","totalParts","fileId","resultInputFile","parts","md5_checksum","resolved","it","_part","doneParts","file_id","file_part","file_total_parts","fileUpload","generator","ApiManagerMethods","apiPromisesSingleProcess","apiPromisesSingle","apiPromisesCacheable","afterMessageIdTemp","setUserAuth","prepareTempMessageId","queryJSON","newResult","cacheKey","oldPromise","getNewPromise","newPromise","ignore_restriction_reasons","pin","folderPin","bio","topicPin","ApiManager","cachedNetworkers","cachedExportPromise","gettingNetworkers","baseDcId","afterMessageTempIds","changeTransportType","updateConfig","iterateNetworkers","getTransportType","connections","dcs","array","oldTransportType","oldObject","oldGetKey","newGetKey","info","changeNetworkerTransport","getBaseDcId","sessionStorage","setBaseDcId","userAuth","dcID","user_auth","wasDcId","getNetworker","setOnDrainIfNeeded","dc","logOut","loggingOut","storageKeys","storageResult","logoutPromises","ignoreErrors","toggleStorages","generateNetworkerGetKey","networkers","maxNetworkers","isOnline","ak","authKeyHex","serverSaltHex","authKey","bytesFromHex","authKeyId","serverSalt","authorizer","_error","newTransportType","removeTransport","stack","getNetworkerVoid","oldTransport","changeTransport","onNetworkerDrain","onDrain","removeNetworker","isFileNetworker","canRelease","setDrainTimeout","updatesProcessor","cachedNetworker","startTime","isStopped","performRequest","wrapApiCall","exportResolve","exportReject","exportedAuth","newDcId","unsetConnectionInited","rawError","waitTime","floodMaxTimeout","attachPromise","originalError","PeersStorage","neededPeers","singlePeerMap","thumbFullSize","ThumbsStorage","thumbsCache","intToUint","ulongFromInts","high","low","shiftLeft","safeBigInt","ulongBigInt","pow","longBigInt","divide","bigIntFromBytes","base","boolFalse","predicate","boolTrue","vector","gzipPacked","sliceMethod","TLSerialization","mtproto","startMaxLength","createBuffer","ArrayBuffer","intView","Int32Array","byteView","getArray","resultBuffer","resultInt32","subarray","getBuffer","getBytes","typed","resultArray","getOffset","checkLength","needBytes","previousBuffer","previousArray","writeInt","field","storeInt","storeBool","storeLongP","iHigh","iLow","storeLong","sLong","storeIntBytes","_bigInt","bigInt","isNegative","quotient","remainder","divmod","toJSNumber","storeDouble","Float64Array","storeString","sUTF8","unescape","storeBytes","bits","storeRawBytes","storeMethod","methodName","methodData","methods","m","flagsOffsets","param","condType","fieldBit","storeObject","paramName","itemType","schema","isBare","constructorData","TLDeserialization","readInt","fetchInt","fetchDouble","doubleView","fetchLong","ulong","greater","minus","greaterOrEquals","abs","fetchBool","fetchObject","fetchString","String","fromCharCode","decodeURIComponent","fetchBytes","fetchIntBytes","fetchRawBytes","fetchVector","fallback","checkType","constructorCmp","uncompressed","constructorsIndex","schemaFallback","int1","int2","overrideKey","isCond","formatJSONValue","jsonValue","objectValues","objectValue","setOffset","addPadding","blockSize","zeroes","blockSizeAsTotalLength","needPadding","padding","bufferConcats","delays","disconnectDelayMin","disconnectDelayMax","pingInterval","pingMaxTime","connectionTimeout","RESEND_OPTIONS","noSchedule","notContentRelated","invokeAfterMsgConstructor","networkerTempId","MTPNetworker","lastServerMessages","sentMessages","pendingMessages","pendingAcks","pendingResendReq","nextReq","checkConnectionPeriod","lastResponseTime","activeRequests","sendPingDelayDisconnect","pingDelayDisconnectDeferred","lastPingTime","disconnectDelay","round","timeoutTime","lastPingStartTime","pingId","lastPingDelayDisconnectId","wrapMtpCall","ping_id","disconnect_delay","rejectTimeout","elapsedTime","checkLongPoll","isClean","longPollPending","sleepAfter","sendLongPoll","checkConnection","clearCheckConnectionTimeout","serializer","pingMessage","generateId","seq_no","generateSeqNo","sendEncryptedRequest","toggleOffline","checkConnectionTimeout","authKeyUint8","convertToUint8Array","isFileUpload","isFileDownload","updateSession","seqNo","prevSessionId","updateSentMessage","sentMessageId","sentMessage","container","inner","innerSentMessageId","innerSentMessage","pushMessage","wrapMtpMessage","connectionInited","invokeWithLayer","initConnection","resultType","isAPI","nextReqTimeout","longPollInterval","clearPingDelayDisconnect","forceReconnectTimeout","sendingLongPoll","max_delay","wait_after","max_wait","noResponse","longPoll","delay","checkConnectionRetryAt","scheduleRequest","handleSentEncryptedRequestHTTP","noResponseMsgs","sqrt","pushResend","shouldResolve","onDrainTimeout","willChange","onConnectionStatusChange","innerMsgId","acked","getMsgKey","dataWithPadding","x","msgKeyLargePlain","msgKeyLarge","getAesKeyIv","msgKey","sha2aText","sha2bText","aesKey","aesIv","sha2a","sha2b","akStopped","performScheduledRequest","ackMsgIds","msg_ids","pendingResendReqLength","outMessage","messagesByteLen","hasApiCall","hasHttpWait","lengthOverflow","compare","messageByteLength","generateContainerMessage","messageWithBody","innerMessages","getEncryptedMessage","keyIv","getDecryptedMessage","encryptedData","getEncryptedOutput","dataBuffer","paddingLength","encryptedResult","requestData","baseError","responseBuffer","deserializer","bytesCmp","calcMsgKey","totalLength","messageBodyLength","messageBody","mt_message","seqno","mt_rpc_result","req_msg_id","applyServerSalt","newServerSalt","toArray","ackMessage","reqResend","notEmpty","processMessageAck","error_message","error_code","msg","applyServerTime","serverTime","shiftRight","innerMessage","new_server_salt","bad_msg_id","changedTimeOffset","badMessage","first_msg_id","server_salt","answer_msg_id","lastResendReq","lastResend","pendingResend","reqMsgId","badMsgId","pos","NetworkerFactory","startAll","stoppedNetworkers","stopAll","setLanguage","testPublicKeysHex","modulus","exponent","publisKeysHex","publicKeysParsed","preparePromise","prepare","keyParsed","RSAPublicKey","fingerprintBytes","fingerprints","fingerprintHex","fill","foundKey","fingerprint","bytesXor","bytes1","bytes2","Authorizer","sendPlainRequest","requestArray","requestLength","headerArray","errorCode","auth_key_id","msg_len","sendReqPQ","nonce","rsaKeysManager","serverNonce","server_nonce","pq","server_public_key_fingerprints","publicKey","pAndQ","sendReqDhParams","newNonce","p_q_inner_data_dc","new_nonce","pQInnerDataSerialization","dataPadReversed","keyAesEncrypted","tempKey","dataWithHash","aesEncrypted","keyAesEncryptedBigInt","publicKeyModulusBigInt","getKeyAesEncrypted","req_DH_params","public_key_fingerprint","encrypted_data","requestBytes","newNonceHash","new_nonce_hash","decryptServerDhDataAnswer","encrypted_answer","sendSetClientDhParams","encryptedAnswer","localTime","tmpAesKey","tmpAesIv","answerWithHash","answerWithPadding","g","dhPrime","dh_prime","gA","g_a","server_time","retry","verifyDhParams","dhPrimeHex","gABigInt","dhPrimeBigInt","subtract","twoPow","gBytes","gB","retry_id","authKeyHash","authKeyAux","newNonceHash1","new_nonce_hash1","newNonceHash2","new_nonce_hash2","newNonceHash3","new_nonce_hash3","getTransportTypePromise","_try","TimeManager","lastMessageId","timeOffset","timeTicks","newTimeOffset","changed","server_time_offset","AppWebDocsManager","webDocument","AppPaymentsManager","getInputInvoiceBySlug","getInputInvoiceByPeerId","getPaymentForm","invoice","paymentForm","getPaymentReceipt","validateRequestedInfo","sendPaymentForm","formId","requestedInfoId","shippingOptionId","credentials","tipAmount","form_id","requested_info_id","shipping_option_id","tip_amount","clearSavedInfo","AppAttachMenuBotsManager","attachMenuBots","attachMenuBotsArr","onUpdateAttachMenuBots","getAttachMenuBots","updateAttachMenuBots","saveAttachMenuBot","attachMenuBot","bot_id","icon","getAttachMenuBotIcon","saveAttachMenuBots","getAttachMenuBotCached","requestWebView","fromBotMenu","themeParams","from_bot_menu","theme_params","prolongWebView","AppSeamlessLoginManager","requestUrlAuth","buttonId","button_id","urlAuthResult","acceptUrlAuth","writeAllowed","write_allowed","getWebAuthorizations","webAuthorizations","authorizations","resetWebAuthorization","resetWebAuthorizations","AppThemesManager","wallPapers","saveWallPaper","getWallPaper","inputWallPaper","getInputWallPaper","getThemes","accountThemes","themes","theme","themeSettings","getWallPapers","accountWallpapers","wallpapers","appManagersManager","cryptoWorkersURLs","cryptoPortsAttached","cryptoPortPromise","getManagers","manager","apply","ports","originalUrl","newURLs","createManagers","appAvatarsManager","appCallsManager","appPrivacyManager","appInlineBotsManager","passwordManager","appPaymentsManager","appSeamlessLoginManager","_serviceMessagePort","_isServiceWorkerOnline","pushedKeys","clearWrite","invokeExceptSource","serviceWorkerOnline","serviceWorkerPort","detachPort","attachPort","messagePort","onConnect","onDisconnect","listenPort","sendPort","attachListenPort","attachSendPort","setOnPortDisconnect","listenMessagePort","NULL_PEER_ID","REPLIES_PEER_ID","REPLIES_HIDDEN_CHANNEL_ID","SERVICE_PEER_ID","MUTE_UNTIL","MAX_FILE_SAVE_SIZE","THUMB_TYPE_FULL","ATTACH_MENU_BOT_ICON_NAME","GENERAL_TOPIC_ID","T_ME_PREFIXES","FOLDER_ID_ALL","FOLDER_ID_ARCHIVE","REAL_FOLDERS","START_LOCAL_ID","ALPHA_CHARS_REG_EXP","ALPHA_NUMERIC_REG_EXP","URL_ALPHANUMERIC_REG_EXP_PART","URL_PROTOCOL_REG_EXP_PART","URL_REG_EXP","URL_ANY_PROTOCOL_REG_EXP","USERNAME_REG_EXP","BOT_COMMAND_REG_EXP","FULL_REG_EXP","EMAIL_REG_EXP","MARKDOWN_REG_EXP","MARKDOWN_ENTITIES","PASS_CONFLICTING_ENTITIES","PHONE_NUMBER_REG_EXP","encodeEmoji","emojiText","unicodeSurrogates","points","char","previous","toCodePoints","removeVS16s","vs16RegExp","zeroWidthJoiner","rawEmoji","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","__webpack_exports__","O","chunkIds","fn","priority","notFulfilled","getter","__esModule","definition","enumerable","chunkId","miniCssF","globalThis","Function","prop","Symbol","toStringTag","nmd","paths","children","scriptUrl","importScripts","currentScript","src","scripts","getElementsByTagName","oldGetScript","oldLoadScript","queryMap","countMap","retries","realSrc","cacheBust","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","moreModules","runtime"],"sourceRoot":""} \ No newline at end of file diff --git a/public/report.html b/public/report.html index aae92dff..b0a9754c 100644 --- a/public/report.html +++ b/public/report.html @@ -3,7 +3,7 @@ - tweb [1 Mar 2023 at 16:58] + tweb [1 Mar 2023 at 17:07] diff --git a/public/sw.8b8ecbcfa5033da30213.chunk.js b/public/sw.3ce4749eb536186e614e.chunk.js similarity index 99% rename from public/sw.8b8ecbcfa5033da30213.chunk.js rename to public/sw.3ce4749eb536186e614e.chunk.js index 1fe85026..027d190f 100644 --- a/public/sw.8b8ecbcfa5033da30213.chunk.js +++ b/public/sw.3ce4749eb536186e614e.chunk.js @@ -1,2 +1,2 @@ (()=>{"use strict";var e,t,n={410:(e,t,n)=>{n.d(t,{GO:()=>r,ZP:()=>i});const o=n(1267).Z.debug,r="undefined"!=typeof window?window:self,i=o},4762:(e,t,n)=>{n.d(t,{IS_FIREFOX:()=>s,IS_SAFARI:()=>i});var o=n(6761);const r=navigator?navigator.userAgent:null,i=(navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i),navigator.userAgent.toLowerCase().indexOf("android"),/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor),(/iPad|iPhone|iPod/.test(navigator.platform)||"MacIntel"===navigator.platform&&navigator.maxTouchPoints>1)&&o.Z.MSStream,!!("safari"in o.Z)||!(!r||!(/\b(iPad|iPhone|iPod)\b/.test(r)||r.match("Safari")&&!r.match("Chrome")))),s=navigator.userAgent.toLowerCase().indexOf("firefox")>-1;(void 0===navigator.maxTouchPoints||navigator.maxTouchPoints>0)&&navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i)},1352:(e,t,n)=>{n.d(t,{FK:()=>s,N5:()=>r,SU:()=>o,kC:()=>i});const o="undefined"!=typeof ServiceWorkerGlobalScope&&self instanceof ServiceWorkerGlobalScope,r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&!o,i=r||o,s=()=>self.clients.matchAll({includeUncontrolled:!1,type:"window"}),a=(e,...t)=>{try{e.postMessage(...t)}catch(e){console.error("[worker] postMessage error:",e,t)}},c=(e,...t)=>{s().then((n=>{n.length&&n.slice(e?0:-1).forEach((e=>{a(e,...t)}))}))};o&&c.bind(null,!1),o&&c.bind(null,!0)},5003:(e,t,n)=>{n.d(t,{kg:()=>f,v9:()=>o});var o,r=n(410),i=n(4762),s=n(1352),a=n(5289);!function(e){e[e.None=0]="None",e[e.Error=1]="Error",e[e.Warn=2]="Warn",e[e.Log=4]="Log",e[e.Debug=8]="Debug"}(o||(o={}));const c=[o.None,o.Error,o.Warn,o.Log,o.Debug],l=!(i.IS_SAFARI||i.IS_FIREFOX),u="",h="",d=[["debug",o.Debug],["info",o.Log],["warn",o.Warn],["error",o.Error],["assert",o.Error],["trace",o.Log],["group",o.Log],["groupCollapsed",o.Log],["groupEnd",o.Log]];function f(e,t=o.Log|o.Warn|o.Error,n=!1,i=""){let g;r.ZP||n||(t=o.Error),l?i||(s.SU?i=u:s.N5&&(i=h)):i="";const p=i;i=i?`%s ${i}%s`:"%s";const m=function(...n){return t&o.Log&&console.log(i,(0,a.Z)(),e,...n)};return d.forEach((([n,o])=>{m[n]=function(...r){return t&o&&console[n](i,(0,a.Z)(),e,...r)}})),m.setPrefix=function(t){g=t,e="["+t+"]"},m.setPrefix(e),m.setLevel=function(e){t=c.slice(0,e+1).reduce(((e,t)=>e|t),0)},m.bindPrefix=function(e){return f(`${g}] [${e}`,t,n,p)},m}},6350:(e,t,n)=>{n.d(t,{Vp:()=>ee,cM:()=>Y,j6:()=>ne});var o=n(5003);function r(e){return new Promise((t=>{setTimeout(t,e)}))}const i=self,s="cachedAssets";function a(e){return e.ok&&200===e.status}function c(e){return Promise.race([e,r(1e4).then((()=>Promise.reject()))])}function l(){}function u(){const e={isFulfilled:!1,isRejected:!1,notify:()=>{},notifyAll:(...t)=>{e.lastNotify=t,e.listeners.forEach((e=>e(...t)))},listeners:[],addNotifyListener:t=>{e.lastNotify&&t(...e.lastNotify),e.listeners.push(t)}},t=new Promise(((n,o)=>{e.resolve=e=>{t.isFulfilled||t.isRejected||(t.isFulfilled=!0,n(e))},e.reject=(...e)=>{t.isRejected||t.isFulfilled||(t.isRejected=!0,o(...e))}}));return t.catch(l).finally((()=>{t.notify=t.notifyAll=t.lastNotify=null,t.listeners.length=0,t.cancel&&(t.cancel=l)})),Object.assign(t,e),t}var h=n(6761),d=n(1267);function f(e,t=""){Array.isArray(e)||(e=[e]);const n=function(e){return-1===["image/jpeg","image/png","image/gif","image/svg+xml","image/webp","image/bmp","video/mp4","video/webm","video/quicktime","audio/ogg","audio/mpeg","audio/mp4","audio/wav","application/json","application/pdf"].indexOf(e)?"application/octet-stream":e}(t);return new Blob(e,{type:n})}class g{constructor(e,t,n){this.mimeType=e,this.size=t,this.saveFileCallback=n,this.bytes=new Uint8Array(t)}write(e,t){return n=this,o=void 0,i=function*(){const n=t+e.byteLength;if(n>this.bytes.byteLength){const e=new Uint8Array(n);e.set(this.bytes,0),this.bytes=e}this.bytes.set(e,t)},new((r=void 0)||(r=Promise))((function(e,t){function s(e){try{c(i.next(e))}catch(e){t(e)}}function a(e){try{c(i.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof r?n:new r((function(e){e(n)}))).then(s,a)}c((i=i.apply(n,o||[])).next())}));var n,o,r,i}truncate(){this.bytes=new Uint8Array}trim(e){this.bytes=this.bytes.slice(0,e)}finalize(e=!0){const t=f(this.bytes,this.mimeType);return e&&this.saveFileCallback&&this.saveFileCallback(t),t}getParts(){return this.bytes}replaceParts(e){this.bytes=e}}var p=n(5471);class m{constructor(e){this.dbName=e,this.useStorage=!0,d.Z.test&&(this.dbName+="_test"),m.STORAGES.length&&(this.useStorage=m.STORAGES[0].useStorage),this.openDatabase(),m.STORAGES.push(this)}openDatabase(){var e;return null!==(e=this.openDbPromise)&&void 0!==e?e:this.openDbPromise=caches.open(this.dbName)}delete(e){return this.timeoutOperation((t=>t.delete("/"+e)))}deleteAll(){return caches.delete(this.dbName)}get(e){return this.timeoutOperation((t=>t.match("/"+e)))}save(e,t){return this.timeoutOperation((n=>n.put("/"+e,t)))}getFile(e,t="blob"){return this.get(e).then((e=>{if(!e)throw(0,p.Z)("NO_ENTRY_FOUND");return e[t]()}))}saveFile(e,t){t instanceof Blob||(t=f(t));const n=new Response(t,{headers:{"Content-Length":""+t.size}});return this.save(e,n).then((()=>t))}timeoutOperation(e){return this.useStorage?new Promise(((t,n)=>{return o=this,r=void 0,s=function*(){let o=!1;const r=setTimeout((()=>{n(),o=!0}),15e3);try{const n=yield this.openDatabase();if(!n)throw this.useStorage=!1,this.openDbPromise=void 0,"no cache?";const r=yield e(n);if(o)return;t(r)}catch(e){n(e)}clearTimeout(r)},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i((function(e){e(o)}))).then(n,a)}c((s=s.apply(o,r||[])).next())}));var o,r,i,s})):Promise.reject((0,p.Z)("STORAGE_OFFLINE"))}prepareWriting(e,t,n){return{deferred:u(),getWriter:()=>new g(n,t,(t=>this.saveFile(e,t).catch((()=>t))))}}static toggleStorage(e,t){return Promise.all(this.STORAGES.map((n=>{if(n.useStorage=e,t)return e?void 0:n.deleteAll()})))}}m.STORAGES=[];const v=new Map,w=new m("cachedStreamChunks"),y="Time-Cached";setInterval((()=>w.timeoutOperation((e=>e.keys().then((t=>{const n=new Map,o=Date.now()/1e3|0;for(const e of t){const t=e.url.match(/\/(\d+?)\?/);t&&!n.has(t[1])&&n.set(t[1],e)}const r=[];for(const[t,i]of n){const n=e.match(i).then((n=>{if(+n.headers.get(y)+86400<=o)return Y("will delete stream chunk:",t),e.delete(i,{ignoreSearch:!0,ignoreVary:!0})}));r.push(n)}return Promise.all(r)}))))),18e5),setInterval((()=>{const e=ee();for(const[t,n]of v)if(t!==e){for(const e in n)n[e].reject();v.delete(t)}}),12e4);const b=new Map;class P{constructor(e){this.info=e,this.loadedOffsets=new Set,this.destroy=()=>{b.delete(this.id)},this.id=P.getId(e),b.set(this.id,this),this.limitPart=e.size>78643200?O:S,this.destroyDebounced=function(e,t,n=!0,o=!0){let r,i,s,a,c=!1;const u=t=>{const n=s,o=a;try{n(e.apply(null,t))}catch(e){console.error("debounce error",e),o(e)}},d=(...e)=>{i||(i=new Promise(((e,t)=>(s=e,a=t)))),r?(clearTimeout(r),c=!0,a(),i=new Promise(((e,t)=>(s=e,a=t)))):n&&(u(e),c=!1);const d=h.Z.setTimeout((()=>{!o||n&&!c||u(e),r===d&&(r=i=s=a=void 0,c=!1)}),t);return r=d,i.catch(l),i};return d.clearTimeout=()=>{r&&(h.Z.clearTimeout(r),a(),r=i=s=a=void 0,c=!1)},d.isDebounced=()=>!!r,d}(this.destroy,15e4,!1,!0)}requestFilePartFromWorker(e,t,n=!1){return o=this,r=void 0,s=function*(){const o={docId:this.id,dcId:this.info.dcId,offset:e,limit:t},r=JSON.stringify(o),i=ee();let s=v.get(i);s||v.set(i,s={});let a=s[r];if(a)return a.then((e=>e.bytes));this.loadedOffsets.add(e),a=s[r]=u(),ne.invoke("requestFilePart",o,void 0,i).then(a.resolve,a.reject).finally((()=>{s[r]===a&&(delete s[r],Object.keys(s).length||v.delete(i))}));const c=a.then((e=>e.bytes));return this.saveChunkToCache(c,e,t),!n&&this.preloadChunks(e,e+15*this.limitPart),c},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i((function(e){e(o)}))).then(n,a)}c((s=s.apply(o,r||[])).next())}));var o,r,i,s}requestFilePartFromCache(e,t,n){const o=this.getChunkKey(e,t);return w.getFile(o).then((e=>n?new Uint8Array:function(e){return function(e){return function(e,t){return new Promise((t=>{const n=new FileReader;n.addEventListener("loadend",(e=>{t(e.target.result)})),n.readAsArrayBuffer(e)}))}(e)}(e).then((e=>new Uint8Array(e)))}(e)),(e=>{e.type}))}requestFilePart(e,t,n){return this.requestFilePartFromCache(e,t,n).then((o=>o||this.requestFilePartFromWorker(e,t,n)))}saveChunkToCache(e,t,n){return e.then((e=>{const o=this.getChunkKey(t,n),r=new Response(e,{headers:{"Content-Length":""+e.length,"Content-Type":"application/octet-stream",[y]:""+(Date.now()/1e3|0)}});return w.save(o,r)}))}preloadChunk(e){this.loadedOffsets.has(e)||(this.loadedOffsets.add(e),this.requestFilePart(e,this.limitPart,!0))}preloadChunks(e,t){if(t>this.info.size&&(t=this.info.size),e)for(;e{n===i&&o===i+r||(e=e.slice(n-i,o-i+1));const t={"Accept-Ranges":"bytes","Content-Range":`bytes ${n}-${n+e.byteLength-1}/${this.info.size||"*"}`,"Content-Length":`${e.byteLength}`};return this.info.mimeType&&(t["Content-Type"]=this.info.mimeType),new Response(e,{status:206,statusText:"Partial Content",headers:t})}))}getChunkKey(e,t){return this.id+"?offset="+e+"&limit="+t}static get(e){var t;return null!==(t=b.get(this.getId(e)))&&void 0!==t?t:new P(e)}static getId(e){return e.location.id}}const S=524288,O=1048576;function k(e,t=2048){return e-e%t}var A=n(4762);function C(e,t){const n=Object.keys,o=typeof e;return e&&t&&"object"===o&&o===typeof t?n(e).length===n(t).length&&n(e).every((n=>C(e[n],t[n]))):e===t}class T{constructor(e){!function(e,t){if(t)for(const n in t)void 0!==t[n]&&(e[n]=t[n])}(this,e),d.Z.test&&(this.name+="_test"),this.storageIsAvailable=!0,this.log=(0,o.kg)(["IDB",e.name].join("-")),this.log("constructor"),this.openDatabase(!0),T.INSTANCES.push(this)}isAvailable(){return this.storageIsAvailable}openDatabase(e=!1){if(this.openDbPromise&&!e)return this.openDbPromise;const t=(e,t)=>{var n;const o=Array.from(e.indexNames);for(const t of o)e.deleteIndex(t);if(null===(n=t.indexes)||void 0===n?void 0:n.length)for(const n of t.indexes)e.indexNames.contains(n.indexName)||e.createIndex(n.indexName,n.keyPath,n.objectParameters)};try{var n=indexedDB.open(this.name,this.version);if(!n)return Promise.reject()}catch(e){return this.log.error("error opening db",e.message),this.storageIsAvailable=!1,Promise.reject(e)}let o=!1;return setTimeout((()=>{o||n.onerror((0,p.Z)("IDB_CREATE_TIMEOUT"))}),3e3),this.openDbPromise=new Promise(((e,r)=>{n.onsuccess=t=>{o=!0;const i=n.result;let s=!1;this.log("Opened"),i.onerror=e=>{this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),r(e)},i.onclose=e=>{this.log.error("closed:",e),!s&&this.openDatabase()},i.onabort=e=>{this.log.error("abort:",e);const t=e.target;this.openDatabase(s=!0),t.onerror&&t.onerror(e),i.close()},i.onversionchange=e=>{this.log.error("onversionchange, lol?")},e(this.db=i)},n.onerror=e=>{o=!0,this.storageIsAvailable=!1,this.log.error("Error creating/accessing IndexedDB database",e),r(e)},n.onupgradeneeded=e=>{o=!0,this.log.warn("performing idb upgrade from",e.oldVersion,"to",e.newVersion);const n=e.target,r=n.result;this.stores.forEach((e=>{if(r.objectStoreNames.contains(e.name)){const o=n.transaction.objectStore(e.name);t(o,e)}else((e,n)=>{const o=e.createObjectStore(n.name);t(o,n)})(r,e)}))}}))}static create(e){var t;return null!==(t=this.INSTANCES.find((t=>t.name===e.name)))&&void 0!==t?t:new T(e)}static closeDatabases(e){this.INSTANCES.forEach((t=>{if(e&&e===t)return;const n=t.db;n&&(n.onclose=()=>{},n.close())}))}}T.INSTANCES=[];class j{constructor(e,t){this.storeName=t,this.log=(0,o.kg)(["IDB",e.name,t].join("-")),this.idb=T.create(e)}delete(e,t){const n=Array.isArray(e);return n||(e=[].concat(e)),this.getObjectStore("readwrite",(t=>{const o=e.map((e=>t.delete(e)));return n?o:o[0]}),"",t)}clear(e){return this.getObjectStore("readwrite",(e=>e.clear()),"",e)}save(e,t,n){const o=Array.isArray(e);return o||(e=[].concat(e),t=[].concat(t)),this.getObjectStore("readwrite",(n=>{const r=e.map(((e,o)=>n.put(t[o],e)));return o?r:r[0]}),"",n)}get(e,t){const n=Array.isArray(e);if(n){if(!e.length)return Promise.resolve([])}else{if(!e)return;e=[].concat(e)}return this.getObjectStore("readonly",(t=>{const o=e.map((e=>t.get(e)));return n?o:o[0]}),"",t)}getObjectStore(e,t,n,o=this.storeName){let r;return n&&(r=performance.now(),this.log(n+": start")),this.idb.openDatabase().then((i=>new Promise(((s,a)=>{const c=i.transaction([o],e),l=()=>{clearTimeout(d),a(c.error)},u=()=>{clearTimeout(d),n&&this.log(n+": end",performance.now()-r);const e=p.map((e=>e.result));s(g?e:e[0])};c.onerror=l;const h="readwrite"===e;h&&(c.oncomplete=()=>u());const d=setTimeout((()=>{this.log.error("transaction not finished",c,n)}),1e4),f=t(c.objectStore(o)),g=Array.isArray(f),p=g?f:[].concat(f);if(h)return;const m=p.length;let v=m;const w=()=>{c.error||--v||u()};for(let e=0;ee.getAll()),"",e)}}const x=self,E=location.protocol+"//"+location.hostname+location.pathname.split("/").slice(0,-1).join("/")+"/";let _=0,I=!0;const N={push_mute_until:0,push_lang:{push_message_nopreview:"You have a new message",push_action_mute1d:"Mute for 24H",push_action_settings:"Settings"},push_settings:{}},D=new class{constructor(e,t,n){this.defaults=n,this.cache={},this.storage=new j(e,t)}getDefault(e){const t=this.defaults[e];return"function"==typeof t?t():t}get(e){return this.cache.hasOwnProperty(e)?this.cache[e]:this.storage.get(e).then((e=>e),(()=>{})).then((t=>this.cache.hasOwnProperty(e)?this.cache[e]:(null!=t||(t=this.getDefault(e)),this.cache[e]=t)))}getCached(e){const t=this.get(e);if(t instanceof Promise)throw"no property";return t}set(e,t){var n,o,r,i,s;return o=this,r=void 0,s=function*(){if(!C(null!==(n=this.cache[e])&&void 0!==n?n:this.defaults[e],t)){this.cache[e]=t;try{this.storage.save(e,t)}catch(e){}}},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i((function(e){e(o)}))).then(n,a)}c((s=s.apply(o,r||[])).next())}))}}({name:"tweb",version:7,stores:[{name:"session"},{name:"stickerSets"},{name:"users"},{name:"chats"},{name:"dialogs"},{name:"messages"}]},"session",N);for(const e in N)D.get(e);x.addEventListener("push",(e=>{const t=e.data.json();Y("push",Object.assign({},t));try{const[n,o,r]=[D.getCached("push_mute_until"),D.getCached("push_settings"),D.getCached("push_lang")],i=Date.now();if(L()&&n&&i{Y.error("Show notification promise",e)}))}(t,o,r);e.waitUntil(s)}catch(t){Y(t);const n="fix",o=x.registration.showNotification("Telegram",{tag:n});o.then((()=>{W(n)})),e.waitUntil(o)}})),x.addEventListener("notificationclick",(e=>{const t=e.notification;Y("on notification click",t),t.close();const n=e.action;if("mute1d"===n&&L())return Y("[SW] mute for 1d"),void D.set("push_mute_until",Date.now()+864e5);const o=t.data;if(!o)return;const r=x.clients.matchAll({type:"window"}).then((e=>{o.action=n,R=o;for(let t=0;tx.clients.openWindow(e.baseUrl||E)))})).catch((e=>{Y.error("Clients.matchAll error",e)}));e.waitUntil(r)})),x.addEventListener("notificationclose",(function(e){var t;t=e.notification,F.delete(t)}));const F=new Set;let R;function W(e){for(const t of F)try{if(e&&t.tag!==e)continue;t.close(),F.delete(t)}catch(e){}let t;return t="getNotifications"in x.registration?x.registration.getNotifications({tag:e}).then((e=>{for(let t=0,n=e.length;t{Y.error("Offline register SW error",e)})):Promise.resolve(),t}function L(){return A.IS_FIREFOX}const M=new Set;var q=n(153),U=n(410);class Z extends q.Z{constructor(){super("SERVICE"),U.GO&&(U.GO.serviceMessagePort=this)}}var G=n(1352);const z=new Map,$=(0,p.Z)("UNKNOWN");self.downloadMap=z;const B={download:e=>{const{id:t}=e;if(z.has(t))return Promise.reject($);const n=new CountQueuingStrategy({highWaterMark:1}),o=u();let r;o.then((()=>{setTimeout((()=>{z.delete(t)}),5e3)}),(()=>{z.delete(t)}));const i=new ReadableStream({start:e=>{r=e},cancel:e=>{o.reject($)}},n),s=Object.assign(Object.assign({},e),{readableStream:i,promise:o,controller:r});return z.set(t,s),o.catch((()=>{throw $}))},downloadChunk:({id:e,chunk:t})=>{const n=z.get(e);return n?n.controller.enqueue(t):Promise.reject()},downloadFinalize:e=>{const t=z.get(e);return t?(t.promise.resolve(),t.controller.close()):Promise.reject()},downloadCancel:e=>{const t=z.get(e);if(t)return t.promise.reject(),t.controller.error()}};function V(e,t){const n=r(100).then((()=>{const e=z.get(t);if(!e||e.used)return;e.used=!0;const n=e.readableStream;return new Response(n,{headers:e.headers})}));e.respondWith(n)}function K(){if(z.size)for(const[e,t]of z)t.controller.error()}const X={};function J(e,t){const n=e.request.formData().then((t=>(function(e,t){var n,o,r,i,s;o=this,r=void 0,s=function*(){try{Y("share data",e);const o=function(e){return{files:e.getAll("files"),title:e.get("title"),text:e.get("text"),url:e.get("url")}}(e);(null!==(n=X[t])&&void 0!==n?n:X[t]=[]).push(o)}catch(e){Y.warn("something wrong with the data",e)}},new((i=void 0)||(i=Promise))((function(e,t){function n(e){try{c(s.next(e))}catch(e){t(e)}}function a(e){try{c(s.throw(e))}catch(e){t(e)}}function c(t){var o;t.done?e(t.value):(o=t.value,o instanceof i?o:new i((function(e){e(o)}))).then(n,a)}c((s=s.apply(o,r||[])).next())}))}(t,e.resultingClientId),Response.redirect(".."))));e.respondWith(n)}const Y=(0,o.kg)("SW",o.v9.Error|o.v9.Debug|o.v9.Log|o.v9.Warn,!0),H=self;let Q;const ee=()=>Q,te=e=>{Y("window connected",e.id,"windows before",ie.size),"none"!==e.frameType?(Y("windows",Array.from(ie)),ne.invokeVoid("hello",void 0,e),(e=>{ie.size||Q||(Y("sending message port for mtproto"),(e=>{const t=new MessageChannel;ne.attachPort(Q=t.port1),ne.invokeVoid("port",void 0,e,[t.port2])})(e))})(e),ie.set(e.id,e),function(e){const t=X[e.id];t&&(delete X[e.id],Y("releasing share events to client:",e.id,"length:",t.length),t.forEach((t=>{ne.invokeVoid("share",t,e)})))}(e)):Y.warn("maybe a bugged Safari starting window",e.id)},ne=new Z;ne.addMultipleEventsListeners({notificationsClear:W,toggleStorages:({enabled:e,clearWrite:t})=>{m.toggleStorage(e,t)},pushPing:(e,t)=>{!function(e,t){_=Date.now(),I=e.localNotifications,R&&t&&(ne.invokeVoid("pushClick",R,t),R=void 0),e.lang&&D.set("push_lang",e.lang),e.settings&&D.set("push_settings",e.settings)}(e,t)},hello:(e,t)=>{te(t)},shownNotification:function(e){M.add(e)}});const{onDownloadFetch:oe,onClosedWindows:re}=function(e){return e.addMultipleEventsListeners(B),{onDownloadFetch:V,onClosedWindows:K}}(ne);(0,G.FK)().then((e=>{Y(`got ${e.length} windows from the start`),e.forEach((e=>{te(e)}))}));const ie=new Map;self.connectedWindows=ie,function(e,t,n){const o=(t,n)=>{e.attachListenPort(t),n&&e.attachSendPort(n)};e.setOnPortDisconnect((e=>{Y("something has disconnected",e),e instanceof WindowClient&&ie.has(e.id)?(ie.delete(e.id),Y("window disconnected, left",ie.size),ie.size||(Y.warn("no windows left"),Q&&(ne.detachPort(Q),Q=void 0),re())):Y.warn("it is not a window")})),"undefined"!=typeof SharedWorkerGlobalScope?h.Z.addEventListener("connect",(e=>o(e.source,e.source))):"undefined"!=typeof ServiceWorkerGlobalScope?o(h.Z,null):o(h.Z,h.Z)}(ne);const se=e=>{if(!A.IS_SAFARI&&0===e.request.url.indexOf(location.origin+"/")&&e.request.url.match(/\.(js|css|jpe?g|json|wasm|png|mp3|svg|tgs|ico|woff2?|ttf|webmanifest?)(?:\?.*)?$/))return e.respondWith(function(e){return t=this,n=void 0,r=function*(){try{const t=yield c(i.caches.open(s)),n=yield c(t.match(e.request,{ignoreVary:!0}));if(n&&a(n))return n;const o={Vary:"*"};let r=yield fetch(e.request,{headers:o});if(a(r))t.put(e.request,r.clone());else if(304===r.status){const n=e.request.url.replace(/\?.+$/,"")+"?"+(1e5*Math.random()|0);r=yield fetch(n,{headers:o}),a(r)&&t.put(e.request,r.clone())}return r}catch(t){return fetch(e.request)}},new((o=void 0)||(o=Promise))((function(e,i){function s(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof o?n:new o((function(e){e(n)}))).then(s,a)}c((r=r.apply(t,n||[])).next())}));var t,n,o,r}(e));try{const[t,n]=e.request.url.split("/").slice(-2);switch(t){case"stream":!function(e,t){const n=function(e){if(!e)return[0,0];const[,t]=e.split("="),n=t.split(", "),[o,r]=n[0].split("-");return[+o,+r||0]}(e.request.headers.get("Range")),o=JSON.parse(decodeURIComponent(t)),r=P.get(o);e.respondWith(Promise.race([(45e3,new Promise((e=>{setTimeout((()=>{e(new Response("",{status:408,statusText:"Request timed out."}))}),45e3)}))),r.requestRange(n)]))}(e,n);break;case"download":oe(e,n);break;case"share":J(e);break;case"ping":e.respondWith(new Response("pong"))}}catch(t){Y.error("fetch error",t),e.respondWith(new Response("",{status:500,statusText:"Internal Server Error",headers:{"Cache-Control":"no-cache"}}))}},ae=()=>{H.onfetch=se};H.addEventListener("install",(e=>{Y("installing"),e.waitUntil(H.skipWaiting().then((()=>Y("skipped waiting"))))})),H.addEventListener("activate",(e=>{Y("activating",H),e.waitUntil(H.caches.delete(s).then((()=>Y("cleared assets cache")))),e.waitUntil(H.clients.claim().then((()=>Y("claimed clients"))))})),H.onoffline=H.ononline=ae,ae()}},o={};function r(e){var t=o[e];if(void 0!==t)return t.exports;var i=o[e]={exports:{}};return n[e](i,i.exports,r),i.exports}r.m=n,r.x=()=>{var e=r.O(void 0,[85],(()=>r(6350)));return r.O(e)},e=[],r.O=(t,n,o,i)=>{if(!n){var s=1/0;for(u=0;u=i)&&Object.keys(r.O).every((e=>r.O[e](n[c])))?n.splice(c--,1):(a=!1,i0&&e[u-1][2]>i;u--)e[u]=e[u-1];e[u]=[n,o,i]},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.f={},r.e=e=>Promise.all(Object.keys(r.f).reduce(((t,n)=>(r.f[n](e,t),t)),[])),r.u=e=>e+".887945ef5f43bc205112.bundle.js",r.miniCssF=e=>{},r.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var e;r.g.importScripts&&(e=r.g.location+"");var t=r.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var n=t.getElementsByTagName("script");n.length&&(e=n[n.length-1].src)}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),r.p=e})(),(()=>{if(void 0!==r){var e=r.u,t=r.e,n={},o={};r.u=function(t){return e(t)+(n.hasOwnProperty(t)?"?"+n[t]:"")},r.e=function(i){return t(i).catch((function(t){var s=o.hasOwnProperty(i)?o[i]:999999;if(s<1){var a=e(i);throw t.message="Loading chunk "+i+" failed after 999999 retries.\n("+a+")",t.request=a,t}return new Promise((function(e){setTimeout((function(){var t=Date.now();n[i]=t,o[i]=s-1,e(r.e(i))}),3e3)}))}))}}})(),(()=>{var e={670:1};r.f.i=(t,n)=>{e[t]||importScripts(r.p+r.u(t))};var t=this.webpackChunktweb=this.webpackChunktweb||[],n=t.push.bind(t);t.push=t=>{var[o,i,s]=t;for(var a in i)r.o(i,a)&&(r.m[a]=i[a]);for(s&&s(r);o.length;)e[o.pop()]=1;n(t)}})(),t=r.x,r.x=()=>r.e(85).then(t),r.x()})(); -//# sourceMappingURL=sw.8b8ecbcfa5033da30213.chunk.js.map \ No newline at end of file +//# sourceMappingURL=sw.3ce4749eb536186e614e.chunk.js.map \ No newline at end of file diff --git a/public/sw.8b8ecbcfa5033da30213.chunk.js.map b/public/sw.3ce4749eb536186e614e.chunk.js.map similarity index 99% rename from public/sw.8b8ecbcfa5033da30213.chunk.js.map rename to public/sw.3ce4749eb536186e614e.chunk.js.map index 25a03abf..fb2f11dc 100644 --- a/public/sw.8b8ecbcfa5033da30213.chunk.js.map +++ b/public/sw.3ce4749eb536186e614e.chunk.js.map @@ -1 +1 @@ -{"version":3,"file":"sw.8b8ecbcfa5033da30213.chunk.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/helpers/context.ts","webpack://tweb/./src/lib/logger.ts","webpack://tweb/./src/helpers/schedulers/pause.ts","webpack://tweb/./src/lib/serviceWorker/cache.ts","webpack://tweb/./src/helpers/noop.ts","webpack://tweb/./src/helpers/cancellablePromise.ts","webpack://tweb/./src/helpers/blob/blobConstruct.ts","webpack://tweb/./src/helpers/blob/blobSafeMimeType.ts","webpack://tweb/./src/lib/files/memoryWriter.ts","webpack://tweb/./src/lib/files/cacheStorage.ts","webpack://tweb/./src/lib/serviceWorker/stream.ts","webpack://tweb/./src/helpers/schedulers/debounce.ts","webpack://tweb/./src/helpers/blob/readBlobAsUint8Array.ts","webpack://tweb/./src/helpers/blob/readBlobAsArrayBuffer.ts","webpack://tweb/./src/helpers/blob/readBlobAs.ts","webpack://tweb/./src/helpers/object/deepEqual.ts","webpack://tweb/./src/lib/files/idb.ts","webpack://tweb/./src/helpers/object/safeAssign.ts","webpack://tweb/./src/lib/serviceWorker/push.ts","webpack://tweb/./src/config/databases/state.ts","webpack://tweb/./src/config/notifications.ts","webpack://tweb/./src/lib/serviceWorker/serviceMessagePort.ts","webpack://tweb/./src/lib/serviceWorker/download.ts","webpack://tweb/./src/lib/serviceWorker/share.ts","webpack://tweb/./src/lib/serviceWorker/index.service.ts","webpack://tweb/./src/helpers/listenMessagePort.ts","webpack://tweb/./src/lib/serviceWorker/timeout.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(85).then(next);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// ะฒ SW ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ัั€ะฐะทัƒ ะดะฒะต ะฟะตั€ะตะผะตะฝะฝั‹ั… TRUE\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\n\nexport const getWindowClients = () => {\n return (self as any as ServiceWorkerGlobalScope)\n .clients\n .matchAll({includeUncontrolled: false, type: 'window'});\n};\n\nexport const getLastWindowClient = () => getWindowClients().then((windowClients) => windowClients.slice(-1)[0]);\n\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\n try {\n // @ts-ignore\n listener.postMessage(...args);\n } catch(err) {\n console.error('[worker] postMessage error:', err, args);\n }\n};\n\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\n getWindowClients().then((listeners) => {\n if(!listeners.length) {\n // console.trace('no listeners?', self, listeners);\n return;\n }\n\n listeners.slice(all ? 0 : -1).forEach((listener) => {\n postMessage(listener, ...args);\n });\n });\n};\n\nconst notifyWorker = (...args: any[]) => {\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\n};\n\nconst noop = () => {};\n\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../config/debug';\nimport {IS_FIREFOX, IS_SAFARI} from '../environment/userAgent';\nimport {IS_SERVICE_WORKER, IS_WEB_WORKER} from '../helpers/context';\nimport dT from '../helpers/dT';\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst IS_WEBKIT = IS_SAFARI || IS_FIREFOX;\n\n// let getCallerFunctionNameFromLine: (line: string) => string;\n// if(IS_WEBKIT) {\n// getCallerFunctionNameFromLine = (line) => {\n// const splitted = line.split('@');\n// return splitted[0];\n// };\n// } else {\n// getCallerFunctionNameFromLine = (line: string) => {\n// const splitted = line.trim().split(' ');\n// if(splitted.length === 3) {\n// return splitted[1].slice(splitted[1].lastIndexOf('.') + 1);\n// }\n// };\n// }\n\nconst STYLES_SUPPORTED = !IS_WEBKIT;\n// const LINE_INDEX = IS_WEBKIT ? 2 : 3;\n\n// function getCallerFunctionName() {\n// const stack = new Error().stack;\n// const lines = stack.split('\\n');\n// const line = lines[LINE_INDEX] || lines[lines.length - 1];\n// // const match = line.match(/\\.([^\\.]+?)\\s/);\n// // line = match ? match[1] : line.trim();\n// const caller = getCallerFunctionNameFromLine(line) || '';\n// return '[' + caller + ']';\n// }\n\nexport const LOGGER_STYLES = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m'\n }\n};\n\nexport type Logger = {\n (...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n error(...args: any[]): void;\n trace(...args: any[]): void;\n debug(...args: any[]): void;\n assert(...args: any[]): void;\n // log(...args: any[]): void;\n group(...args: any[]): void;\n groupCollapsed(...args: any[]): void;\n groupEnd(...args: any[]): void;\n setPrefix(newPrefix: string): void;\n setLevel(level: 0 | 1 | 2 | 3 | 4): void;\n bindPrefix(prefix: string): Logger;\n};\n\nconst methods: ['debug' | 'info' | 'warn' | 'error' | 'assert' | 'trace'/* | 'log' */ | 'group' | 'groupCollapsed' | 'groupEnd', LogTypes][] = [\n ['debug', LogTypes.Debug],\n ['info', LogTypes.Log],\n ['warn', LogTypes.Warn],\n ['error', LogTypes.Error],\n ['assert', LogTypes.Error],\n ['trace', LogTypes.Log],\n ['group', LogTypes.Log],\n ['groupCollapsed', LogTypes.Log],\n ['groupEnd', LogTypes.Log]\n // [\"log\", LogTypes.Log]\n];\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false, style = ''): Logger {\n let originalPrefix: string;\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n if(!STYLES_SUPPORTED) {\n style = '';\n } else if(!style) {\n if(IS_SERVICE_WORKER) style = LOGGER_STYLES.fg.yellow;\n else if(IS_WEB_WORKER) style = LOGGER_STYLES.fg.cyan;\n }\n\n const originalStyle = style;\n if(style) style = `%s ${style}%s`;\n else style = '%s';\n\n // level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n const log: Logger = function(...args: any[]) {\n return type & LogTypes.Log && console.log(style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n } as any;\n\n methods.forEach(([method, logType]) => {\n log[method] = function(...args: any[]) {\n return type & logType && console[method](style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n };\n });\n\n log.setPrefix = function(newPrefix: string) {\n originalPrefix = newPrefix;\n prefix = '[' + newPrefix + ']';\n };\n\n log.setPrefix(prefix);\n\n log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n\n log.bindPrefix = function(prefix: string) {\n return logger(`${originalPrefix}] [${prefix}`, type, ignoreDebugReset, originalStyle);\n };\n\n return log;\n};\n","export default function pause(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport pause from '../../helpers/schedulers/pause';\n\nconst ctx = self as any as ServiceWorkerGlobalScope;\nexport const CACHE_ASSETS_NAME = 'cachedAssets';\n\nfunction isCorrectResponse(response: Response) {\n return response.ok && response.status === 200;\n}\n\nfunction timeoutRace>(promise: T) {\n return Promise.race([\n promise,\n pause(10000).then(() => Promise.reject())\n ]);\n}\n\nexport async function requestCache(event: FetchEvent) {\n try {\n // const cache = await ctx.caches.open(CACHE_ASSETS_NAME);\n const cache = await timeoutRace(ctx.caches.open(CACHE_ASSETS_NAME));\n const file = await timeoutRace(cache.match(event.request, {ignoreVary: true}));\n\n if(file && isCorrectResponse(file)) {\n return file;\n }\n\n const headers: HeadersInit = {'Vary': '*'};\n let response = await fetch(event.request, {headers});\n if(isCorrectResponse(response)) {\n cache.put(event.request, response.clone());\n } else if(response.status === 304) { // possible fix for 304 in Safari\n const url = event.request.url.replace(/\\?.+$/, '') + '?' + (Math.random() * 100000 | 0);\n response = await fetch(url, {headers});\n if(isCorrectResponse(response)) {\n cache.put(event.request, response.clone());\n }\n }\n\n return response;\n } catch(err) {\n return fetch(event.request);\n }\n}\n","export default function noop() {}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from './noop';\n\nexport interface CancellablePromise extends Promise {\n resolve?: (value: T) => void,\n reject?: (...args: any[]) => void,\n cancel?: (reason?: any) => void,\n\n notify?: (...args: any[]) => void,\n notifyAll?: (...args: any[]) => void,\n lastNotify?: any,\n listeners?: Array<(...args: any[]) => void>,\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\n\n isFulfilled?: boolean,\n isRejected?: boolean\n}\n\nexport default function deferredPromise() {\n const deferredHelper: any = {\n isFulfilled: false,\n isRejected: false,\n\n notify: () => {},\n notifyAll: (...args: any[]) => {\n deferredHelper.lastNotify = args;\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\n },\n\n listeners: [],\n addNotifyListener: (callback: (...args: any[]) => void) => {\n if(deferredHelper.lastNotify) {\n callback(...deferredHelper.lastNotify);\n }\n\n deferredHelper.listeners.push(callback);\n }\n };\n\n const deferred: CancellablePromise = new Promise((resolve, reject) => {\n deferredHelper.resolve = (value: T) => {\n if(deferred.isFulfilled || deferred.isRejected) return;\n\n deferred.isFulfilled = true;\n resolve(value);\n };\n\n deferredHelper.reject = (...args: any[]) => {\n if(deferred.isRejected || deferred.isFulfilled) return;\n\n deferred.isRejected = true;\n reject(...args);\n };\n });\n\n // @ts-ignore\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\n const n = deferredPromise>();\n\n }; */\n\n deferred.catch(noop).finally(() => {\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\n deferred.listeners.length = 0;\n\n if(deferred.cancel) {\n deferred.cancel = noop;\n }\n });\n\n Object.assign(deferred, deferredHelper);\n\n return deferred;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport blobSafeMimeType from './blobSafeMimeType';\n\nexport default function blobConstruct(blobParts: Array | T, mimeType: string = ''): Blob {\n if(!Array.isArray(blobParts)) {\n blobParts = [blobParts];\n }\n\n const safeMimeType = blobSafeMimeType(mimeType);\n const blob = new Blob(blobParts, {type: safeMimeType});\n return blob;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// https://www.iana.org/assignments/media-types/media-types.xhtml\nexport default function blobSafeMimeType(mimeType: string) {\n if([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp',\n 'image/bmp',\n 'video/mp4',\n 'video/webm',\n 'video/quicktime',\n 'audio/ogg',\n 'audio/mpeg',\n 'audio/mp4',\n 'audio/wav', // though it is not in list\n 'application/json',\n 'application/pdf'\n ].indexOf(mimeType) === -1) {\n return 'application/octet-stream';\n }\n\n return mimeType;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport StreamWriter from './streamWriter';\n\nexport default class MemoryWriter implements StreamWriter {\n private bytes: Uint8Array;\n\n constructor(\n private mimeType: string,\n private size: number,\n private saveFileCallback?: (blob: Blob) => Promise\n ) {\n this.bytes = new Uint8Array(size);\n }\n\n public async write(part: Uint8Array, offset: number) {\n // sometimes file size can be bigger than the prov\n const endOffset = offset + part.byteLength;\n if(endOffset > this.bytes.byteLength) {\n const newBytes = new Uint8Array(endOffset);\n newBytes.set(this.bytes, 0);\n this.bytes = newBytes;\n }\n\n this.bytes.set(part, offset);\n };\n\n public truncate() {\n this.bytes = new Uint8Array();\n }\n\n public trim(size: number) {\n this.bytes = this.bytes.slice(0, size);\n }\n\n public finalize(saveToStorage = true) {\n const blob = blobConstruct(this.bytes, this.mimeType);\n\n if(saveToStorage && this.saveFileCallback) {\n this.saveFileCallback(blob);\n }\n\n return blob;\n }\n\n public getParts() {\n return this.bytes;\n }\n\n public replaceParts(parts: Uint8Array) {\n this.bytes = parts;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../config/modes';\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport MemoryWriter from './memoryWriter';\nimport FileManager from './memoryWriter';\nimport FileStorage from './fileStorage';\nimport makeError from '../../helpers/makeError';\nimport deferredPromise from '../../helpers/cancellablePromise';\n\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\n\nexport default class CacheStorageController implements FileStorage {\n private static STORAGES: CacheStorageController[] = [];\n private openDbPromise: Promise;\n\n private useStorage = true;\n\n // private log: ReturnType = logger('CS');\n\n constructor(private dbName: CacheStorageDbName) {\n if(Modes.test) {\n this.dbName += '_test';\n }\n\n if(CacheStorageController.STORAGES.length) {\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\n }\n\n this.openDatabase();\n CacheStorageController.STORAGES.push(this);\n }\n\n private openDatabase(): Promise {\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\n }\n\n public delete(entryName: string) {\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\n }\n\n public deleteAll() {\n return caches.delete(this.dbName);\n }\n\n public get(entryName: string) {\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\n }\n\n public save(entryName: string, response: Response) {\n // return new Promise((resolve) => {}); // DEBUG\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\n }\n\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise {\n /* if(method === 'blob') {\n return Promise.reject();\n } */\n\n // const str = `get fileName: ${fileName}`;\n // console.time(str);\n return this.get(fileName).then((response) => {\n if(!response) {\n // console.warn('getFile:', response, fileName);\n throw makeError('NO_ENTRY_FOUND');\n }\n\n const promise = response[method]();\n // promise.then(() => {\n // console.timeEnd(str);\n // });\n return promise;\n });\n }\n\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // return Promise.resolve(blobConstruct([blob]));\n if(!(blob instanceof Blob)) {\n blob = blobConstruct(blob);\n }\n\n const response = new Response(blob, {\n headers: {\n 'Content-Length': '' + blob.size\n }\n });\n\n return this.save(fileName, response).then(() => blob as Blob);\n }\n\n public timeoutOperation(callback: (cache: Cache) => Promise) {\n if(!this.useStorage) {\n return Promise.reject(makeError('STORAGE_OFFLINE'));\n }\n\n return new Promise(async(resolve, reject) => {\n let rejected = false;\n const timeout = setTimeout(() => {\n reject();\n // console.warn('CACHESTORAGE TIMEOUT');\n rejected = true;\n }, 15e3);\n\n try {\n const cache = await this.openDatabase();\n if(!cache) {\n this.useStorage = false;\n this.openDbPromise = undefined;\n throw 'no cache?';\n }\n\n const res = await callback(cache);\n\n if(rejected) return;\n resolve(res);\n } catch(err) {\n reject(err);\n }\n\n clearTimeout(timeout);\n });\n }\n\n public prepareWriting(fileName: string, fileSize: number, mimeType: string) {\n return {\n deferred: deferredPromise(),\n getWriter: () => {\n const writer = new MemoryWriter(mimeType, fileSize, (blob) => {\n return this.saveFile(fileName, blob).catch(() => blob);\n });\n\n return writer;\n }\n };\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n return storage.deleteAll();\n }\n }));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAsUint8Array from '../../helpers/blob/readBlobAsUint8Array';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {InputFileLocation} from '../../layer';\nimport CacheStorageController from '../files/cacheStorage';\nimport {DownloadOptions, MyUploadFile} from '../mtproto/apiFileManager';\nimport {getMtprotoMessagePort, log, serviceMessagePort} from './index.service';\nimport {ServiceRequestFilePartTaskPayload} from './serviceMessagePort';\nimport timeout from './timeout';\n\nconst deferredPromises: Map}> = new Map();\nconst cacheStorage = new CacheStorageController('cachedStreamChunks');\nconst CHUNK_TTL = 86400;\nconst CHUNK_CACHED_TIME_HEADER = 'Time-Cached';\nconst USE_CACHE = true;\n\nconst clearOldChunks = () => {\n return cacheStorage.timeoutOperation((cache) => {\n return cache.keys().then((requests) => {\n const filtered: Map = new Map();\n const timestamp = Date.now() / 1000 | 0;\n for(const request of requests) {\n const match = request.url.match(/\\/(\\d+?)\\?/);\n if(match && !filtered.has(match[1])) {\n filtered.set(match[1], request);\n }\n }\n\n const promises: Promise[] = [];\n for(const [id, request] of filtered) {\n const promise = cache.match(request).then((response) => {\n if((+response.headers.get(CHUNK_CACHED_TIME_HEADER) + CHUNK_TTL) <= timestamp) {\n log('will delete stream chunk:', id);\n return cache.delete(request, {ignoreSearch: true, ignoreVary: true});\n }\n });\n\n promises.push(promise);\n }\n\n return Promise.all(promises);\n });\n });\n};\n\nsetInterval(clearOldChunks, 1800e3);\nsetInterval(() => {\n const mtprotoMessagePort = getMtprotoMessagePort();\n for(const [messagePort, promises] of deferredPromises) {\n if(messagePort !== mtprotoMessagePort) {\n for(const taskId in promises) {\n const promise = promises[taskId];\n promise.reject();\n }\n\n deferredPromises.delete(messagePort);\n }\n }\n}, 120e3);\n\ntype StreamRange = [number, number];\ntype StreamId = DocId;\nconst streams: Map = new Map();\nclass Stream {\n private destroyDebounced: () => void;\n private id: StreamId;\n private limitPart: number;\n private loadedOffsets: Set = new Set();\n\n constructor(private info: DownloadOptions) {\n this.id = Stream.getId(info);\n streams.set(this.id, this);\n\n // ! ะตัะปะธ ะณั€ัƒะทะธั‚ัŒ ะพั‡ะตะฝัŒ ะฑะพะปัŒัˆะพะต ะฒะธะดะตะพ ั‡ะฐะฝะบะฐะผะธ ะฟะพ 512ะšะฑ ะฒ ะผะพะฑะธะปัŒะฝะพะผ Safari, ั‚ะพ ัั‚ั€ะธะผ ะฝะต ะทะฐะฟัƒัั‚ะธั‚ัั\n this.limitPart = info.size > (75 * 1024 * 1024) ? STREAM_CHUNK_UPPER_LIMIT : STREAM_CHUNK_MIDDLE_LIMIT;\n this.destroyDebounced = debounce(this.destroy, 150000, false, true);\n }\n\n private destroy = () => {\n streams.delete(this.id);\n };\n\n private async requestFilePartFromWorker(alignedOffset: number, limit: number, fromPreload = false) {\n const payload: ServiceRequestFilePartTaskPayload = {\n docId: this.id,\n dcId: this.info.dcId,\n offset: alignedOffset,\n limit\n };\n\n const taskId = JSON.stringify(payload);\n\n const mtprotoMessagePort = getMtprotoMessagePort();\n let promises = deferredPromises.get(mtprotoMessagePort);\n if(!promises) {\n deferredPromises.set(mtprotoMessagePort, promises = {});\n }\n\n let deferred = promises[taskId];\n if(deferred) {\n return deferred.then((uploadFile) => uploadFile.bytes);\n }\n\n this.loadedOffsets.add(alignedOffset);\n\n deferred = promises[taskId] = deferredPromise();\n\n serviceMessagePort.invoke('requestFilePart', payload, undefined, mtprotoMessagePort)\n .then(deferred.resolve, deferred.reject).finally(() => {\n if(promises[taskId] === deferred) {\n delete promises[taskId];\n\n if(!Object.keys(promises).length) {\n deferredPromises.delete(mtprotoMessagePort);\n }\n }\n });\n\n const bytesPromise = deferred.then((uploadFile) => uploadFile.bytes);\n\n if(USE_CACHE) {\n this.saveChunkToCache(bytesPromise, alignedOffset, limit);\n !fromPreload && this.preloadChunks(alignedOffset, alignedOffset + (this.limitPart * 15));\n }\n\n return bytesPromise;\n }\n\n private requestFilePartFromCache(alignedOffset: number, limit: number, fromPreload?: boolean) {\n if(!USE_CACHE) {\n return Promise.resolve();\n }\n\n const key = this.getChunkKey(alignedOffset, limit);\n return cacheStorage.getFile(key).then((blob: Blob) => {\n return fromPreload ? new Uint8Array() : readBlobAsUint8Array(blob);\n }, (error: ApiError) => {\n if(error.type === 'NO_ENTRY_FOUND') {\n return;\n }\n });\n }\n\n private requestFilePart(alignedOffset: number, limit: number, fromPreload?: boolean) {\n return this.requestFilePartFromCache(alignedOffset, limit, fromPreload).then((bytes) => {\n return bytes || this.requestFilePartFromWorker(alignedOffset, limit, fromPreload);\n });\n }\n\n private saveChunkToCache(deferred: Promise, alignedOffset: number, limit: number) {\n return deferred.then((bytes) => {\n const key = this.getChunkKey(alignedOffset, limit);\n const response = new Response(bytes, {\n headers: {\n 'Content-Length': '' + bytes.length,\n 'Content-Type': 'application/octet-stream',\n [CHUNK_CACHED_TIME_HEADER]: '' + (Date.now() / 1000 | 0)\n }\n });\n\n return cacheStorage.save(key, response);\n });\n }\n\n private preloadChunk(offset: number) {\n if(this.loadedOffsets.has(offset)) {\n return;\n }\n\n this.loadedOffsets.add(offset);\n this.requestFilePart(offset, this.limitPart, true);\n }\n\n private preloadChunks(offset: number, end: number) {\n if(end > this.info.size) {\n end = this.info.size;\n }\n\n if(!offset) { // load last chunk for bounds\n this.preloadChunk(alignOffset(offset, this.limitPart));\n } else { // don't preload next chunks before the start\n for(; offset < end; offset += this.limitPart) {\n this.preloadChunk(offset);\n }\n }\n }\n\n public requestRange(range: StreamRange) {\n this.destroyDebounced();\n\n const possibleResponse = responseForSafariFirstRange(range, this.info.mimeType, this.info.size);\n if(possibleResponse) {\n return possibleResponse;\n }\n\n let [offset, end] = range;\n\n /* if(info.size > limitPart && isSafari && offset === limitPart) {\n //end = info.size - 1;\n //offset = info.size - 1 - limitPart;\n offset = info.size - (info.size % limitPart);\n } */\n\n const limit = end && end < this.limitPart ? alignLimit(end - offset + 1) : this.limitPart;\n const alignedOffset = alignOffset(offset, limit);\n\n if(!end) {\n end = Math.min(offset + limit, this.info.size - 1);\n }\n\n return this.requestFilePart(alignedOffset, limit).then((ab) => {\n // log.debug('[stream] requestFilePart result:', result);\n\n // if(isSafari) {\n if(offset !== alignedOffset || end !== (alignedOffset + limit)) {\n ab = ab.slice(offset - alignedOffset, end - alignedOffset + 1);\n }\n\n const headers: Record = {\n 'Accept-Ranges': 'bytes',\n 'Content-Range': `bytes ${offset}-${offset + ab.byteLength - 1}/${this.info.size || '*'}`,\n 'Content-Length': `${ab.byteLength}`\n };\n\n if(this.info.mimeType) {\n headers['Content-Type'] = this.info.mimeType;\n }\n\n // simulate slow connection\n // setTimeout(() => {\n return new Response(ab, {\n status: 206,\n statusText: 'Partial Content',\n headers\n });\n // }, 2.5e3);\n });\n }\n\n private getChunkKey(alignedOffset: number, limit: number) {\n return this.id + '?offset=' + alignedOffset + '&limit=' + limit;\n }\n\n public static get(info: DownloadOptions) {\n return streams.get(this.getId(info)) ?? new Stream(info);\n }\n\n private static getId(info: DownloadOptions) {\n return (info.location as InputFileLocation.inputDocumentFileLocation).id;\n }\n}\n\nexport default function onStreamFetch(event: FetchEvent, params: string) {\n const range = parseRange(event.request.headers.get('Range'));\n const info: DownloadOptions = JSON.parse(decodeURIComponent(params));\n const stream = Stream.get(info);\n\n // log.debug('[stream]', url, offset, end);\n\n event.respondWith(Promise.race([\n timeout(45 * 1000),\n stream.requestRange(range)\n ]));\n}\n\nfunction responseForSafariFirstRange(range: StreamRange, mimeType: string, size: number): Response {\n if(range[0] === 0 && range[1] === 1) {\n return new Response(new Uint8Array(2).buffer, {\n status: 206,\n statusText: 'Partial Content',\n headers: {\n 'Accept-Ranges': 'bytes',\n 'Content-Range': `bytes 0-1/${size || '*'}`,\n 'Content-Length': '2',\n 'Content-Type': mimeType || 'video/mp4'\n }\n });\n }\n\n return null;\n}\n\n/* const STREAM_CHUNK_UPPER_LIMIT = 256 * 1024;\nconst SMALLEST_CHUNK_LIMIT = 256 * 4; */\n/* const STREAM_CHUNK_UPPER_LIMIT = 1024 * 1024;\nconst SMALLEST_CHUNK_LIMIT = 1024 * 4; */\nconst STREAM_CHUNK_MIDDLE_LIMIT = 512 * 1024;\nconst STREAM_CHUNK_UPPER_LIMIT = 1024 * 1024;\nconst SMALLEST_CHUNK_LIMIT = 512 * 4;\n\nfunction parseRange(header: string): StreamRange {\n if(!header) return [0, 0];\n const [, chunks] = header.split('=');\n const ranges = chunks.split(', ');\n const [offset, end] = ranges[0].split('-');\n\n return [+offset, +end || 0];\n}\n\nfunction alignOffset(offset: number, base = SMALLEST_CHUNK_LIMIT) {\n return offset - (offset % base);\n}\n\nfunction alignLimit(limit: number) {\n return 2 ** Math.ceil(Math.log(limit) / Math.log(2));\n}\n","// * Jolly Cobra's schedulers\n\nimport ctx from '../../environment/ctx';\nimport {AnyFunction, Awaited} from '../../types';\nimport noop from '../noop';\n\nexport type DebounceReturnType = {\n (...args: Parameters): Promise>>;\n clearTimeout(): void;\n isDebounced(): boolean;\n};\n\nexport default function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true\n): DebounceReturnType {\n let waitingTimeout: number;\n let waitingPromise: Promise>>, resolve: (result: any) => void, reject: () => void;\n let hadNewCall = false;\n\n const invoke = (args: Parameters) => {\n const _resolve = resolve, _reject = reject;\n try {\n const result = fn.apply(null, args);\n _resolve(result);\n } catch(err) {\n console.error('debounce error', err);\n // @ts-ignore\n _reject(err);\n }\n };\n\n const debounce = (...args: Parameters) => {\n if(!waitingPromise) waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n\n if(waitingTimeout) {\n clearTimeout(waitingTimeout);\n hadNewCall = true;\n reject();\n waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n } else if(shouldRunFirst) {\n invoke(args);\n hadNewCall = false;\n }\n\n const _waitingTimeout = ctx.setTimeout(() => {\n // will run if should run last or first but with new call\n if(shouldRunLast && (!shouldRunFirst || hadNewCall)) {\n invoke(args);\n }\n\n // if debounce was called during invoking\n if(waitingTimeout === _waitingTimeout) {\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n }, ms);\n\n waitingTimeout = _waitingTimeout;\n waitingPromise.catch(noop);\n return waitingPromise;\n };\n\n debounce.clearTimeout = () => {\n if(waitingTimeout) {\n ctx.clearTimeout(waitingTimeout);\n reject();\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n };\n\n debounce.isDebounced = () => !!waitingTimeout;\n\n return debounce;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAsArrayBuffer from './readBlobAsArrayBuffer';\n\nexport default function readBlobAsUint8Array(blob: Blob) {\n return readBlobAsArrayBuffer(blob).then((buffer) => new Uint8Array(buffer));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from './readBlobAs';\n\nexport default function readBlobAsArrayBuffer(blob: Blob) {\n return readBlobAs(blob, 'readAsArrayBuffer');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { IS_WEB_WORKER } from \"../context\";\n\n// const id = IS_WEB_WORKER ? Math.random() * 0x1000 | 0 : 0;\nexport default function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\n // const perf = performance.now();\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (e) => {\n // console.log(`readBlobAs [${id}] ${method} time ${performance.now() - perf}`);\n resolve(e.target.result);\n });\n reader[method](blob);\n });\n}\n","export default function deepEqual(x: any, y: any): boolean {\n const ok = Object.keys, tx = typeof x, ty = typeof y;\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key) => deepEqual(x[key], y[key]))\n ) : (x === y);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport Modes from '../../config/modes';\nimport makeError from '../../helpers/makeError';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {logger} from '../logger';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\n */\nexport type IDBIndex = {\n indexName: string,\n keyPath: string,\n objectParameters: IDBIndexParameters\n};\n\nexport type IDBStore = {\n name: string,\n indexes?: IDBIndex[]\n};\n\nexport type IDBOptions = {\n name?: string,\n storeName: string,\n stores?: IDBStore[],\n version?: number\n};\n\nconst DEBUG = false;\n\nexport class IDB {\n private static INSTANCES: IDB[] = [];\n private openDbPromise: Promise;\n private db: IDBDatabase;\n private storageIsAvailable: boolean;\n private log: ReturnType;\n private name: string;\n private version: number;\n private stores: IDBStore[];\n\n constructor(db: Database) {\n safeAssign(this, db);\n\n if(Modes.test) {\n this.name += '_test';\n }\n\n this.storageIsAvailable = true;\n this.log = logger(['IDB', db.name].join('-'));\n this.log('constructor');\n\n this.openDatabase(true);\n\n IDB.INSTANCES.push(this);\n }\n\n public isAvailable() {\n return this.storageIsAvailable;\n }\n\n public openDatabase(createNew = false): Promise {\n if(this.openDbPromise && !createNew) {\n return this.openDbPromise;\n }\n\n const createIndexes = (os: IDBObjectStore, store: IDBStore) => {\n const indexNames = Array.from(os.indexNames);\n for(const indexName of indexNames) {\n os.deleteIndex(indexName);\n }\n\n if(!store.indexes?.length) {\n return;\n }\n\n for(const index of store.indexes) {\n if(os.indexNames.contains(index.indexName)) {\n continue;\n }\n\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\n }\n };\n\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\n const os = db.createObjectStore(store.name);\n createIndexes(os, store);\n };\n\n try {\n var request = indexedDB.open(this.name, this.version);\n\n if(!request) {\n return Promise.reject();\n }\n } catch(error) {\n this.log.error('error opening db', (error as Error).message);\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n let finished = false;\n setTimeout(() => {\n if(!finished) {\n request.onerror(makeError('IDB_CREATE_TIMEOUT') as Event);\n }\n }, 3000);\n\n return this.openDbPromise = new Promise((resolve, reject) => {\n request.onsuccess = (event) => {\n finished = true;\n const db = request.result;\n let calledNew = false;\n\n this.log('Opened');\n\n db.onerror = (error) => {\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', error);\n reject(error);\n };\n\n db.onclose = (e) => {\n this.log.error('closed:', e);\n !calledNew && this.openDatabase();\n };\n\n db.onabort = (e) => {\n this.log.error('abort:', e);\n const transaction = e.target as IDBTransaction;\n\n this.openDatabase(calledNew = true);\n\n if(transaction.onerror) {\n transaction.onerror(e);\n }\n\n db.close();\n };\n\n db.onversionchange = (e) => {\n this.log.error('onversionchange, lol?');\n };\n\n resolve(this.db = db);\n };\n\n request.onerror = (event) => {\n finished = true;\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', event);\n reject(event);\n };\n\n request.onupgradeneeded = (event) => {\n finished = true;\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\n\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n this.stores.forEach((store) => {\n /* if(db.objectStoreNames.contains(store.name)) {\n //if(event.oldVersion === 1) {\n db.deleteObjectStore(store.name);\n //}\n } */\n\n if(!db.objectStoreNames.contains(store.name)) {\n createObjectStore(db, store);\n } else {\n const txn = target.transaction;\n const os = txn.objectStore(store.name);\n createIndexes(os, store);\n }\n });\n };\n });\n }\n\n public static create>(db: T) {\n return this.INSTANCES.find((instance) => instance.name === db.name) ?? new IDB(db);\n }\n\n public static closeDatabases(preserve?: IDB) {\n this.INSTANCES.forEach((storage) => {\n if(preserve && preserve === storage) {\n return;\n }\n\n const db = storage.db;\n if(db) {\n db.onclose = () => {};\n db.close();\n }\n });\n }\n}\n\nexport default class IDBStorage, StoreName extends string = T['stores'][0]['name']> {\n private log: ReturnType;\n private storeName: T['stores'][0]['name'];\n private idb: IDB;\n\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\n this.storeName = storeName;\n this.log = logger(['IDB', db.name, storeName].join('-'));\n this.idb = IDB.create(db);\n }\n\n /**\n * ! WARNING ! function requires at least one opened connection\n */\n /* public static clearObjectStores() {\n const storage = this.STORAGES[0];\n this.closeDatabases(storage);\n\n const names = Array.from(storage.db.objectStoreNames);\n const promises = names.map((name) => storage.clear(name));\n return Promise.all(promises);\n } */\n\n /* public static deleteDatabase() {\n this.closeDatabases();\n\n const storages = this.STORAGES;\n const dbNames = Array.from(new Set(storages.map((storage) => storage.name)));\n const promises = dbNames.map((dbName) => {\n return new Promise((resolve, reject) => {\n const deleteRequest = indexedDB.deleteDatabase(dbName);\n\n deleteRequest.onerror = () => {\n reject();\n };\n\n deleteRequest.onsuccess = () => {\n resolve();\n };\n });\n });\n\n return Promise.all(promises);\n } */\n\n public delete(entryName: string | string[], storeName?: StoreName): Promise {\n // return Promise.resolve();\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.delete(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'delete: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n public clear(storeName?: StoreName): Promise {\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\n }\n\n public save(entryName: string | string[], value: any | any[], storeName?: StoreName) {\n // const handleError = (error: Error) => {\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\n // setTimeout(() => {\n // this.save(entryName, value);\n // }, 2e3);\n // } else {\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\n // }\n // };\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n value = [].concat(value);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'save: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n // public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // //return Promise.resolve(blobConstruct([blob]));\n // if(!(blob instanceof Blob)) {\n // blob = blobConstruct(blob);\n // }\n\n // return this.save(fileName, blob);\n // }\n\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\n return Promise.reject();\n }\n\n if(!(blob instanceof Blob)) {\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\n return this.storagePutB64String(db, fileName, address).then(() => {\n return blob;\n });\n }\n\n try {\n var reader = new FileReader();\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n let promise = new Promise((resolve, reject) => {\n reader.onloadend = () => {\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\n resolve(blob);\n }, reject);\n }\n\n reader.onerror = reject;\n });\n\n\n try {\n reader.readAsDataURL(blob);\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n return promise;\n }\n\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\n try {\n var objectStore = db.transaction([this.storeName], 'readwrite')\n .objectStore(this.storeName);\n var request = objectStore.put(b64string, fileName);\n } catch(error) {\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n resolve();\n };\n\n request.onerror = reject;\n });\n }\n\n public getBlobSize(blob: any) {\n return blob.size || blob.byteLength || blob.length;\n } */\n\n public get(entryName: string[], storeName?: StoreName): Promise;\n public get(entryName: string, storeName?: StoreName): Promise;\n public get(entryName: string | string[], storeName?: StoreName): Promise | Promise {\n // return Promise.reject();\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n if(!entryName) {\n return undefined;\n }\n\n entryName = [].concat(entryName);\n } else if(!entryName.length) {\n return Promise.resolve([]) as any;\n }\n\n return this.getObjectStore('readonly', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.get(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'get: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n private getObjectStore(\n mode: IDBTransactionMode,\n callback: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[],\n log?: string,\n storeName = this.storeName\n ) {\n let perf: number;\n\n if(log) {\n perf = performance.now();\n this.log(log + ': start');\n }\n\n return this.idb.openDatabase().then((db) => {\n return new Promise((resolve, reject) => {\n /* if(mode === 'readwrite') {\n return;\n } */\n\n const transaction = db.transaction([storeName], mode);\n\n const onError = () => {\n clearTimeout(timeout);\n reject(transaction.error);\n };\n\n // let resolved = false;\n const onComplete = (/* what: string */) => {\n clearTimeout(timeout);\n\n if(log) {\n this.log(log + ': end', performance.now() - perf/* , what */);\n }\n\n // if(resolved) {\n // return;\n // }\n\n // resolved = true;\n const results = requests.map((r) => r.result);\n resolve(isArray ? results : results[0]);\n };\n\n transaction.onerror = onError;\n\n // * have to wait while clearing or setting something\n const waitForTransactionComplete = mode === 'readwrite';\n if(waitForTransactionComplete) {\n transaction.oncomplete = () => onComplete(/* 'transaction' */);\n }\n\n const timeout = setTimeout(() => {\n this.log.error('transaction not finished', transaction, log);\n }, 10000);\n\n /* transaction.addEventListener('abort', (e) => {\n //handleError();\n this.log.error('IndexedDB: transaction abort!', transaction.error);\n }); */\n\n const callbackResult = callback(transaction.objectStore(storeName));\n\n const isArray = Array.isArray(callbackResult);\n const requests: IDBRequest[] = isArray ? callbackResult : [].concat(callbackResult) as any;\n\n if(waitForTransactionComplete) {\n return;\n }\n\n const length = requests.length;\n let left = length;\n\n const onRequestFinished = () => {\n if(transaction.error) {\n return;\n }\n\n if(!--left) {\n onComplete(/* 'requests' */);\n }\n };\n\n for(let i = 0; i < length; ++i) {\n const request = requests[i];\n request.onerror = onError;\n request.onsuccess = onRequestFinished;\n }\n });\n });\n }\n\n public getAll(storeName?: StoreName): Promise {\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '', storeName);\n }\n\n /* public getAllKeys(): Promise> {\n console.time('getAllEntries');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.getAllKeys();\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var result = event.target.result;\n resolve(result);\n console.timeEnd('getAllEntries');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public isFileExists(fileName: string): Promise {\n console.time('isFileExists');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.openCursor(fileName);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var cursor = event.target.result;\n resolve(!!cursor);\n console.timeEnd('isFileExists');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public getFileWriter(fileName: string, mimeType: string) {\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\n return this.saveFile(fileName, blob);\n });\n\n return Promise.resolve(fakeWriter);\n } */\n}\n","export default function safeAssign(object: T, fromObject: any) {\n if(fromObject) {\n for(const i in fromObject) {\n if(fromObject[i] !== undefined) {\n // @ts-ignore\n object[i] = fromObject[i];\n }\n }\n }\n\n return object;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport DATABASE_STATE from '../../config/databases/state';\nimport {NOTIFICATION_BADGE_PATH, NOTIFICATION_ICON_PATH} from '../../config/notifications';\nimport {IS_FIREFOX, IS_MOBILE} from '../../environment/userAgent';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport IDBStorage from '../files/idb';\nimport {log, serviceMessagePort} from './index.service';\nimport {ServicePushPingTaskPayload} from './serviceMessagePort';\n\nconst ctx = self as any as ServiceWorkerGlobalScope;\nconst defaultBaseUrl = location.protocol + '//' + location.hostname + location.pathname.split('/').slice(0, -1).join('/') + '/';\n\n// as in webPushApiManager.ts\nconst PING_PUSH_TIMEOUT = 10000 + 1500;\nlet lastPingTime = 0;\nlet localNotificationsAvailable = true;\n\nexport type PushNotificationObject = {\n loc_key: string,\n loc_args: string[],\n // user_id: number, // should be number\n custom: {\n channel_id?: string, // should be number\n chat_id?: string, // should be number\n from_id?: string, // should be number\n msg_id: string,\n peerId?: string, // should be number\n silent?: string // can be '1'\n },\n sound?: string,\n random_id: number,\n badge?: string, // should be number\n description: string,\n mute: string, // should be number\n title: string,\n message?: string,\n} & {\n action?: 'mute1d' | 'push_settings', // will be set before postMessage to main thread\n};\n\nclass SomethingGetter, Storage extends Record> {\n private cache: Partial = {};\n private storage: IDBStorage;\n\n constructor(\n db: T,\n storeName: typeof db['stores'][number]['name'],\n private defaults: {\n [Property in keyof Storage]: ((value: Storage[Property]) => Storage[Property]) | Storage[Property]\n }\n ) {\n this.storage = new IDBStorage(db, storeName);\n }\n\n private getDefault(key: T) {\n const callback = this.defaults[key];\n return typeof(callback) === 'function' ? callback() : callback;\n }\n\n public get(key: T) {\n if(this.cache.hasOwnProperty(key)) {\n return this.cache[key];\n }\n\n const promise = this.storage.get(key as string) as Promise;\n return promise.then((value) => value, () => undefined as Storage[T]).then((value) => {\n if(this.cache.hasOwnProperty(key)) {\n return this.cache[key];\n }\n\n value ??= this.getDefault(key);\n\n return this.cache[key] = value;\n });\n }\n\n public getCached(key: T) {\n const value = this.get(key);\n if(value instanceof Promise) {\n throw 'no property';\n }\n\n return value;\n }\n\n public async set(key: T, value: Storage[T]) {\n const cached = this.cache[key] ?? this.defaults[key];\n if(deepEqual(cached, value)) {\n return;\n }\n\n this.cache[key] = value;\n\n try {\n this.storage.save(key as string, value);\n } catch(err) {\n\n }\n }\n}\n\ntype PushStorage = {\n push_mute_until: number,\n push_lang: Partial\n push_settings: Partial\n};\n\nconst defaults: PushStorage = {\n push_mute_until: 0,\n push_lang: {\n push_message_nopreview: 'You have a new message',\n push_action_mute1d: 'Mute for 24H',\n push_action_settings: 'Settings'\n },\n push_settings: {}\n};\n\nconst getter = new SomethingGetter(DATABASE_STATE, 'session', defaults);\n\n// fill cache\nfor(const i in defaults) {\n getter.get(i as keyof PushStorage);\n}\n\nctx.addEventListener('push', (event) => {\n const obj: PushNotificationObject = event.data.json();\n log('push', {...obj});\n\n try {\n const [muteUntil, settings, lang] = [\n getter.getCached('push_mute_until'),\n getter.getCached('push_settings'),\n getter.getCached('push_lang')\n ];\n\n const nowTime = Date.now();\n if(\n userInvisibleIsSupported() &&\n muteUntil &&\n nowTime < muteUntil\n ) {\n throw `supress notification because mute for ${Math.ceil((muteUntil - nowTime) / 60000)} min`;\n }\n\n const hasActiveWindows = (Date.now() - lastPingTime) <= PING_PUSH_TIMEOUT && localNotificationsAvailable;\n if(hasActiveWindows) {\n throw 'supress notification because some instance is alive';\n }\n\n const notificationPromise = fireNotification(obj, settings, lang);\n event.waitUntil(notificationPromise);\n } catch(err) {\n log(err);\n\n const tag = 'fix';\n const notificationPromise = ctx.registration.showNotification('Telegram', {tag});\n\n notificationPromise.then(() => {\n closeAllNotifications(tag);\n });\n\n event.waitUntil(notificationPromise);\n }\n});\n\nctx.addEventListener('notificationclick', (event) => {\n const notification = event.notification;\n log('on notification click', notification);\n notification.close();\n\n const action = event.action as PushNotificationObject['action'];\n if(action === 'mute1d' && userInvisibleIsSupported()) {\n log('[SW] mute for 1d');\n getter.set('push_mute_until', Date.now() + 86400e3);\n return;\n }\n\n const data: PushNotificationObject = notification.data;\n if(!data) {\n return;\n }\n\n const promise = ctx.clients.matchAll({\n type: 'window'\n }).then((clientList) => {\n data.action = action;\n pendingNotification = data;\n for(let i = 0; i < clientList.length; ++i) {\n const client = clientList[i];\n if('focus' in client) {\n client.focus();\n serviceMessagePort.invokeVoid('pushClick', pendingNotification, client);\n pendingNotification = undefined;\n return;\n }\n }\n\n if(ctx.clients.openWindow) {\n return Promise.resolve(getter.get('push_settings')).then((settings) => {\n return ctx.clients.openWindow(settings.baseUrl || defaultBaseUrl);\n });\n }\n }).catch((error) => {\n log.error('Clients.matchAll error', error);\n })\n\n event.waitUntil(promise);\n});\n\nctx.addEventListener('notificationclose', onCloseNotification);\n\nconst notifications: Set = new Set();\nlet pendingNotification: PushNotificationObject;\nfunction pushToNotifications(notification: Notification) {\n if(!notifications.has(notification)) {\n notifications.add(notification);\n // @ts-ignore\n notification.onclose = onCloseNotification;\n }\n}\n\nfunction onCloseNotification(event: NotificationEvent) {\n removeFromNotifications(event.notification)\n}\n\nfunction removeFromNotifications(notification: Notification) {\n notifications.delete(notification);\n}\n\nexport function closeAllNotifications(tag?: string) {\n for(const notification of notifications) {\n try {\n if(tag && notification.tag !== tag) {\n continue;\n }\n\n notification.close();\n notifications.delete(notification);\n } catch(e) {}\n }\n\n let promise: Promise;\n if('getNotifications' in ctx.registration) {\n promise = ctx.registration.getNotifications({tag}).then((notifications) => {\n for(let i = 0, len = notifications.length; i < len; ++i) {\n try {\n notifications[i].close();\n } catch(e) {}\n }\n }).catch((error) => {\n log.error('Offline register SW error', error);\n });\n } else {\n promise = Promise.resolve();\n }\n\n return promise;\n}\n\nfunction userInvisibleIsSupported() {\n return IS_FIREFOX;\n}\n\nfunction fireNotification(obj: PushNotificationObject, settings: PushStorage['push_settings'], lang: PushStorage['push_lang']) {\n let title = obj.title || 'Telegram';\n let body = obj.description || '';\n let peerId: string;\n\n if(obj.custom) {\n if(obj.custom.channel_id) {\n peerId = '' + -obj.custom.channel_id;\n } else if(obj.custom.chat_id) {\n peerId = '' + -obj.custom.chat_id;\n } else {\n peerId = obj.custom.from_id || '';\n }\n }\n\n obj.custom.peerId = '' + peerId;\n let tag = 'peer' + peerId;\n\n const messageKey = peerId + '_' + obj.custom.msg_id;\n if(ignoreMessages) {\n const error = 'ignoring push';\n log.warn(error, obj);\n ignoreMessages.delete(messageKey);\n throw error;\n }\n\n if(settings?.nopreview) {\n title = 'Telegram';\n body = lang.push_message_nopreview;\n tag = 'unknown_peer';\n }\n\n const actions: (Omit & {action: PushNotificationObject['action']})[] = [{\n action: 'mute1d',\n title: lang.push_action_mute1d\n }/* , {\n action: 'push_settings',\n title: lang.push_action_settings || 'Settings'\n } */];\n\n const notificationOptions: NotificationOptions = {\n body,\n icon: NOTIFICATION_ICON_PATH,\n tag,\n data: obj,\n actions,\n badge: NOTIFICATION_BADGE_PATH,\n silent: obj.custom.silent === '1'\n };\n\n log('show notify', title, body, obj, notificationOptions);\n\n const notificationPromise = ctx.registration.showNotification(title, notificationOptions);\n\n return notificationPromise.catch((error) => {\n log.error('Show notification promise', error);\n });\n}\n\nexport function onPing(payload: ServicePushPingTaskPayload, source?: MessageEventSource) {\n lastPingTime = Date.now();\n localNotificationsAvailable = payload.localNotifications;\n\n if(pendingNotification && source) {\n serviceMessagePort.invokeVoid('pushClick', pendingNotification, source);\n pendingNotification = undefined;\n }\n\n if(payload.lang) {\n getter.set('push_lang', payload.lang);\n }\n\n if(payload.settings) {\n getter.set('push_settings', payload.settings);\n }\n}\n\nconst ignoreMessages: Set = new Set();\nexport function onShownNotification(payload: string) {\n ignoreMessages.add(payload);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Database} from '.';\nimport type {IDBIndex} from '../../lib/files/idb';\n\nconst DATABASE_STATE: Database<'session' | 'stickerSets' | 'users' | 'chats' | 'messages' | 'dialogs'> = {\n name: 'tweb',\n version: 7,\n stores: [{\n name: 'session'\n }, {\n name: 'stickerSets'\n }, {\n name: 'users'\n }, {\n name: 'chats'\n }, {\n name: 'dialogs'\n // indexes: [\n // ...(new Array(20 + 2).fill(0)).map((_, idx) => {\n // const name = `index_${idx}`;\n // const index: IDBIndex = {\n // indexName: name,\n // keyPath: name,\n // objectParameters: {}\n // };\n\n // return index\n // })\n // ]\n }, {\n name: 'messages'\n }]\n};\n\nexport default DATABASE_STATE;\n","export const NOTIFICATION_ICON_PATH = 'assets/img/logo_filled_rounded.png';\nexport const NOTIFICATION_BADGE_PATH = 'assets/img/logo_plain.svg'; // masked\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WebPushApiManager} from '../mtproto/webPushApiManager';\nimport type {PushNotificationObject} from './push';\nimport type {MyUploadFile} from '../mtproto/apiFileManager';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\n\nexport type ServicePushPingTaskPayload = {\n localNotifications: boolean,\n lang: {\n push_action_mute1d: string\n push_action_settings: string\n push_message_nopreview: string\n },\n settings: WebPushApiManager['settings']\n};\n\nexport type ServiceRequestFilePartTaskPayload = {\n docId: DocId,\n dcId: number,\n offset: number,\n limit: number\n};\n\nexport type ServiceDownloadTaskPayload = {\n headers: any,\n id: string\n};\n\nexport type ServiceEvent = {\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void\n};\n\nexport default class ServiceMessagePort extends SuperMessagePort<{\n // from main thread to service worker\n notificationsClear: () => void,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => void,\n pushPing: (payload: ServicePushPingTaskPayload, source: MessageEventSource, event: MessageEvent) => void,\n hello: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n shownNotification: (payload: string) => void,\n\n // from mtproto worker\n download: (payload: ServiceDownloadTaskPayload) => void,\n downloadChunk: (payload: {id: ServiceDownloadTaskPayload['id'], chunk: Uint8Array}) => void\n downloadFinalize: (payload: ServiceDownloadTaskPayload['id']) => void,\n downloadCancel: (payload: ServiceDownloadTaskPayload['id']) => void\n}, {\n // to main thread\n pushClick: (payload: PushNotificationObject) => void,\n hello: (payload: void, source: MessageEventSource) => void,\n share: (payload: ShareData) => void,\n\n // to mtproto worker\n requestFilePart: (payload: ServiceRequestFilePartTaskPayload) => Promise | MyUploadFile\n} & ServiceEvent, Master> {\n constructor() {\n super('SERVICE');\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.serviceMessagePort = this);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ServiceDownloadTaskPayload} from './serviceMessagePort';\nimport type ServiceMessagePort from './serviceMessagePort';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport makeError from '../../helpers/makeError';\nimport pause from '../../helpers/schedulers/pause';\n\ntype DownloadType = Uint8Array;\ntype DownloadItem = ServiceDownloadTaskPayload & {\n // transformStream: TransformStream,\n readableStream: ReadableStream,\n // writableStream: WritableStream,\n // writer: WritableStreamDefaultWriter,\n // controller: TransformStreamDefaultController,\n controller: ReadableStreamController,\n promise: CancellablePromise,\n // downloadPromise: Promise,\n used?: boolean\n};\nconst downloadMap: Map = new Map();\nconst DOWNLOAD_ERROR = makeError('UNKNOWN');\nconst DOWNLOAD_TEST = false;\n\n(self as any).downloadMap = downloadMap;\n\ntype A = Parameters['addMultipleEventsListeners']>[0];\n\nconst events: A = {\n download: (payload) => {\n const {id} = payload;\n if(downloadMap.has(id)) {\n return Promise.reject(DOWNLOAD_ERROR);\n }\n\n // const y = (20 * 1024 * 1024) / payload.limitPart;\n // const strategy = new ByteLengthQueuingStrategy({highWaterMark: y});\n // let controller: TransformStreamDefaultController;\n const strategy = new CountQueuingStrategy({highWaterMark: 1});\n // const transformStream = new TransformStream(/* {\n // start: (_controller) => controller = _controller,\n // }, */undefined, strategy, strategy);\n\n // const {readable, writable} = transformStream;\n // const writer = writable.getWriter();\n\n const promise = deferredPromise();\n promise.then(() => {\n setTimeout(() => {\n downloadMap.delete(id);\n }, 5e3);\n }, () => {\n downloadMap.delete(id);\n });\n\n // writer.closed.then(promise.resolve, promise.reject);\n\n let controller: ReadableStreamController;\n const readable = new ReadableStream({\n start: (_controller) => {\n controller = _controller;\n },\n\n cancel: (reason) => {\n promise.reject(DOWNLOAD_ERROR);\n }\n }, strategy);\n\n // writer.closed.catch(noop).finally(() => {\n // log.error('closed writer');\n // onEnd();\n // });\n\n // const downloadPromise = writer.closed.catch(() => {throw DOWNLOAD_ERROR;});\n const item: DownloadItem = {\n ...payload,\n // transformStream,\n readableStream: readable,\n // writableStream: writable,\n // writer,\n // downloadPromise,\n promise,\n controller\n };\n\n downloadMap.set(id, item);\n\n // return downloadPromise;\n return promise.catch(() => {throw DOWNLOAD_ERROR});\n },\n\n downloadChunk: ({id, chunk}) => {\n const item = downloadMap.get(id);\n if(!item) {\n return Promise.reject();\n }\n\n // return item.controller.enqueue(chunk);\n // return item.writer.write(chunk);\n // @ts-ignore\n return item.controller.enqueue(chunk);\n },\n\n downloadFinalize: (id) => {\n const item = downloadMap.get(id);\n if(!item) {\n return Promise.reject();\n }\n\n item.promise.resolve();\n // return item.controller.terminate();\n // return item.writer.close();\n return item.controller.close();\n },\n\n downloadCancel: (id) => {\n const item = downloadMap.get(id);\n if(!item) {\n return;\n }\n\n item.promise.reject();\n // return item.controller.error();\n // return item.writer.abort();\n return item.controller.error();\n }\n};\n\nexport default function handleDownload(serviceMessagePort: ServiceMessagePort) {\n serviceMessagePort.addMultipleEventsListeners(events);\n\n return {\n onDownloadFetch,\n onClosedWindows: cancelAllDownloads\n };\n}\n\nfunction onDownloadFetch(event: FetchEvent, params: string) {\n const promise = pause(100).then(() => {\n const item = downloadMap.get(params);\n if(!item || (item.used && !DOWNLOAD_TEST)) {\n return;\n }\n\n item.used = true;\n const stream = item.readableStream;\n const response = new Response(stream, {headers: item.headers});\n return response;\n });\n\n event.respondWith(promise);\n}\n\nfunction cancelAllDownloads() {\n if(downloadMap.size) {\n for(const [id, item] of downloadMap) {\n // item.writer.abort().catch(noop);\n item.controller.error();\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {log, serviceMessagePort} from './index.service';\n\nconst deferred: {[id: string]: ShareData[]} = {};\n\nfunction parseFormData(formData: FormData): ShareData {\n return {\n files: formData.getAll('files') as File[],\n title: formData.get('title') as string,\n text: formData.get('text') as string,\n url: formData.get('url') as string\n };\n}\n\nasync function processShareEvent(formData: FormData, clientId: string) {\n try {\n log('share data', formData);\n const data = parseFormData(formData);\n (deferred[clientId] ??= []).push(data);\n } catch(err) {\n log.warn('something wrong with the data', err);\n }\n};\n\nexport function checkWindowClientForDeferredShare(windowClient: WindowClient) {\n const arr = deferred[windowClient.id];\n if(!arr) {\n return;\n }\n\n delete deferred[windowClient.id];\n\n log('releasing share events to client:', windowClient.id, 'length:', arr.length);\n arr.forEach((data) => {\n serviceMessagePort.invokeVoid('share', data, windowClient);\n });\n}\n\nexport default function onShareFetch(event: FetchEvent, params: string) {\n const promise = event.request.formData()\n .then((formData) => {\n processShareEvent(formData, event.resultingClientId)\n return Response.redirect('..');\n });\n\n event.respondWith(promise);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n \n \n \n\nimport {logger, LogTypes} from '../logger';\nimport {CACHE_ASSETS_NAME, requestCache} from './cache';\nimport onStreamFetch from './stream';\nimport {closeAllNotifications, onPing, onShownNotification} from './push';\nimport CacheStorageController from '../files/cacheStorage';\nimport {IS_SAFARI} from '../../environment/userAgent';\nimport ServiceMessagePort from './serviceMessagePort';\nimport listenMessagePort from '../../helpers/listenMessagePort';\nimport {getWindowClients} from '../../helpers/context';\nimport {MessageSendPort} from '../mtproto/superMessagePort';\nimport handleDownload from './download';\nimport onShareFetch, {checkWindowClientForDeferredShare} from './share';\n\nexport const log = logger('SW', LogTypes.Error | LogTypes.Debug | LogTypes.Log | LogTypes.Warn, true);\nconst ctx = self as any as ServiceWorkerGlobalScope;\n\n \nlet _mtprotoMessagePort: MessagePort;\nexport const getMtprotoMessagePort = () => _mtprotoMessagePort;\n\nconst sendMessagePort = (source: MessageSendPort) => {\n const channel = new MessageChannel();\n serviceMessagePort.attachPort(_mtprotoMessagePort = channel.port1);\n serviceMessagePort.invokeVoid('port', undefined, source, [channel.port2]);\n};\n\nconst sendMessagePortIfNeeded = (source: MessageSendPort) => {\n if(!connectedWindows.size && !_mtprotoMessagePort) {\n log('sending message port for mtproto');\n sendMessagePort(source);\n }\n};\n\nconst onWindowConnected = (source: WindowClient) => {\n log('window connected', source.id, 'windows before', connectedWindows.size);\n\n if(source.frameType === 'none') {\n log.warn('maybe a bugged Safari starting window', source.id);\n return;\n }\n\n log('windows', Array.from(connectedWindows));\n serviceMessagePort.invokeVoid('hello', undefined, source);\n sendMessagePortIfNeeded(source);\n connectedWindows.set(source.id, source);\n\n checkWindowClientForDeferredShare(source);\n};\n\nexport const serviceMessagePort = new ServiceMessagePort();\nserviceMessagePort.addMultipleEventsListeners({\n notificationsClear: closeAllNotifications,\n\n toggleStorages: ({enabled, clearWrite}) => {\n CacheStorageController.toggleStorage(enabled, clearWrite);\n },\n\n pushPing: (payload, source) => {\n onPing(payload, source);\n },\n\n hello: (payload, source) => {\n onWindowConnected(source as any as WindowClient);\n },\n\n shownNotification: onShownNotification\n});\n\nconst {\n onDownloadFetch,\n onClosedWindows: onDownloadClosedWindows\n} = handleDownload(serviceMessagePort);\n\n// * service worker can be killed, so won't get 'hello' event\ngetWindowClients().then((windowClients) => {\n log(`got ${windowClients.length} windows from the start`);\n windowClients.forEach((windowClient) => {\n onWindowConnected(windowClient);\n });\n});\n\nconst connectedWindows: Map = new Map();\n(self as any).connectedWindows = connectedWindows;\nlistenMessagePort(serviceMessagePort, undefined, (source) => {\n log('something has disconnected', source);\n const isWindowClient = source instanceof WindowClient;\n if(!isWindowClient || !connectedWindows.has(source.id)) {\n log.warn('it is not a window');\n return;\n }\n\n connectedWindows.delete(source.id);\n log('window disconnected, left', connectedWindows.size);\n if(!connectedWindows.size) {\n log.warn('no windows left');\n\n if(_mtprotoMessagePort) {\n serviceMessagePort.detachPort(_mtprotoMessagePort);\n _mtprotoMessagePort = undefined;\n }\n\n onDownloadClosedWindows();\n }\n});\n \n\nconst onFetch = (event: FetchEvent): void => {\n \n if(\n !IS_SAFARI &&\n event.request.url.indexOf(location.origin + '/') === 0 &&\n event.request.url.match(/\\.(js|css|jpe?g|json|wasm|png|mp3|svg|tgs|ico|woff2?|ttf|webmanifest?)(?:\\?.*)?$/)\n ) {\n return event.respondWith(requestCache(event));\n }\n \n\n try {\n // const [, url, scope, params] = /http[:s]+\\/\\/.*?(\\/(.*?)(?:$|\\/(.*)$))/.exec(event.request.url) || [];\n const [scope, params] = event.request.url.split('/').slice(-2);\n\n // log.debug('[fetch]:', event);\n\n switch(scope) {\n case 'stream': {\n onStreamFetch(event, params);\n break;\n }\n\n case 'download': {\n onDownloadFetch(event, params);\n break;\n }\n\n case 'share': {\n onShareFetch(event, params);\n break;\n }\n\n case 'ping': {\n event.respondWith(new Response('pong'));\n break;\n }\n }\n } catch(err) {\n log.error('fetch error', err);\n event.respondWith(new Response('', {\n status: 500,\n statusText: 'Internal Server Error',\n headers: {'Cache-Control': 'no-cache'}\n }));\n }\n};\n\nconst onChangeState = () => {\n ctx.onfetch = onFetch;\n};\n\nctx.addEventListener('install', (event) => {\n log('installing');\n event.waitUntil(ctx.skipWaiting().then(() => log('skipped waiting'))); // Activate worker immediately\n});\n\nctx.addEventListener('activate', (event) => {\n log('activating', ctx);\n event.waitUntil(ctx.caches.delete(CACHE_ASSETS_NAME).then(() => log('cleared assets cache')));\n event.waitUntil(ctx.clients.claim().then(() => log('claimed clients')));\n});\n\n// ctx.onerror = (error) => {\n// log.error('error:', error);\n// };\n\n// ctx.onunhandledrejection = (error) => {\n// log.error('onunhandledrejection:', error);\n// };\n\nctx.onoffline = ctx.ononline = onChangeState;\n\nonChangeState();\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type SuperMessagePort from '../lib/mtproto/superMessagePort';\nimport ctx from '../environment/ctx';\n\nexport default function listenMessagePort(\n messagePort: SuperMessagePort,\n onConnect?: (source: MessageEventSource) => void,\n onDisconnect?: (source: MessageEventSource) => void\n) {\n const attachPort = (listenPort: any, sendPort: any) => {\n messagePort.attachListenPort(listenPort);\n sendPort && messagePort.attachSendPort(sendPort);\n onConnect?.(listenPort);\n };\n\n messagePort.setOnPortDisconnect(onDisconnect);\n\n if(typeof(SharedWorkerGlobalScope) !== 'undefined') {\n (ctx as any as SharedWorkerGlobalScope).addEventListener('connect', (e) => attachPort(e.source, e.source));\n } else if(typeof(ServiceWorkerGlobalScope) !== 'undefined') {\n attachPort(ctx, null);\n } else {\n attachPort(ctx, ctx);\n }\n}\n","export default function timeout(delay: number): Promise {\n return new Promise(((resolve) => {\n setTimeout(() => {\n resolve(new Response('', {\n status: 408,\n statusText: 'Request timed out.'\n }));\n }, delay);\n }));\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [85], () => (__webpack_require__(6350)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + \"887945ef5f43bc205112\" + \".bundle.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t670: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","DEBUG","MOUNT_CLASS_TO","window","self","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","IS_FIREFOX","undefined","IS_SERVICE_WORKER","ServiceWorkerGlobalScope","IS_WEB_WORKER","WorkerGlobalScope","IS_WORKER","getWindowClients","clients","matchAll","includeUncontrolled","type","postMessage","listener","args","err","console","error","notifyServiceWorker","all","then","listeners","length","slice","forEach","bind","LogTypes","LOG_LEVELS","None","Error","Warn","Log","Debug","STYLES_SUPPORTED","LOGGER_STYLES","methods","logger","prefix","ignoreDebugReset","style","originalPrefix","originalStyle","log","method","logType","setPrefix","newPrefix","setLevel","level","reduce","acc","v","bindPrefix","pause","ms","Promise","resolve","setTimeout","ctx","CACHE_ASSETS_NAME","isCorrectResponse","response","ok","status","timeoutRace","promise","race","reject","noop","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","callback","addNotifyListener","push","value","catch","finally","cancel","Object","assign","blobConstruct","blobParts","mimeType","Array","isArray","safeMimeType","blobSafeMimeType","Blob","MemoryWriter","constructor","size","saveFileCallback","this","bytes","Uint8Array","write","part","offset","endOffset","byteLength","newBytes","set","truncate","trim","finalize","saveToStorage","blob","getParts","replaceParts","parts","CacheStorageController","dbName","useStorage","STORAGES","openDatabase","openDbPromise","caches","open","delete","entryName","timeoutOperation","cache","deleteAll","get","save","put","getFile","fileName","makeError","saveFile","Response","headers","rejected","timeout","res","clearTimeout","prepareWriting","fileSize","getWriter","static","enabled","clearWrite","map","storage","deferredPromises","Map","cacheStorage","CHUNK_CACHED_TIME_HEADER","setInterval","keys","requests","filtered","timestamp","Date","now","request","url","has","promises","id","ignoreSearch","ignoreVary","mtprotoMessagePort","getMtprotoMessagePort","messagePort","taskId","streams","Stream","info","loadedOffsets","Set","destroy","getId","limitPart","STREAM_CHUNK_UPPER_LIMIT","STREAM_CHUNK_MIDDLE_LIMIT","destroyDebounced","fn","shouldRunFirst","shouldRunLast","waitingTimeout","waitingPromise","hadNewCall","invoke","_resolve","_reject","apply","debounce","_waitingTimeout","isDebounced","requestFilePartFromWorker","alignedOffset","limit","fromPreload","payload","docId","dcId","JSON","stringify","uploadFile","add","serviceMessagePort","bytesPromise","saveChunkToCache","preloadChunks","requestFilePartFromCache","key","getChunkKey","reader","FileReader","addEventListener","e","target","result","readBlobAs","readBlobAsArrayBuffer","buffer","readBlobAsUint8Array","requestFilePart","preloadChunk","end","alignOffset","requestRange","range","possibleResponse","statusText","responseForSafariFirstRange","Math","ceil","alignLimit","min","ab","location","base","deepEqual","x","y","tx","every","IDB","db","object","fromObject","i","safeAssign","name","storageIsAvailable","join","INSTANCES","isAvailable","createNew","createIndexes","os","store","indexNames","from","indexName","deleteIndex","indexes","index","contains","createIndex","keyPath","objectParameters","indexedDB","version","message","finished","onerror","onsuccess","event","calledNew","onclose","onabort","transaction","close","onversionchange","onupgradeneeded","warn","oldVersion","newVersion","stores","objectStoreNames","objectStore","createObjectStore","find","instance","preserve","IDBStorage","storeName","idb","create","concat","getObjectStore","clear","idx","mode","perf","performance","onError","onComplete","results","r","waitForTransactionComplete","oncomplete","callbackResult","left","onRequestFinished","getAll","defaultBaseUrl","protocol","hostname","pathname","split","lastPingTime","localNotificationsAvailable","defaults","push_mute_until","push_lang","push_message_nopreview","push_action_mute1d","push_action_settings","push_settings","getter","getDefault","hasOwnProperty","getCached","obj","data","json","muteUntil","settings","lang","nowTime","userInvisibleIsSupported","notificationPromise","peerId","title","body","description","custom","channel_id","chat_id","from_id","tag","messageKey","msg_id","ignoreMessages","nopreview","notificationOptions","icon","actions","action","badge","silent","registration","showNotification","fireNotification","waitUntil","closeAllNotifications","notification","clientList","pendingNotification","client","focus","invokeVoid","openWindow","baseUrl","notifications","getNotifications","len","ServiceMessagePort","super","downloadMap","DOWNLOAD_ERROR","events","download","strategy","CountQueuingStrategy","highWaterMark","controller","readable","ReadableStream","start","_controller","reason","item","readableStream","downloadChunk","chunk","enqueue","downloadFinalize","downloadCancel","onDownloadFetch","params","used","stream","respondWith","cancelAllDownloads","onShareFetch","formData","clientId","files","text","parseFormData","processShareEvent","resultingClientId","redirect","_mtprotoMessagePort","onWindowConnected","source","connectedWindows","frameType","channel","MessageChannel","attachPort","port1","port2","sendMessagePort","sendMessagePortIfNeeded","windowClient","arr","checkWindowClientForDeferredShare","addMultipleEventsListeners","notificationsClear","toggleStorages","toggleStorage","pushPing","localNotifications","onPing","hello","shownNotification","onClosedWindows","onDownloadClosedWindows","handleDownload","windowClients","onConnect","onDisconnect","listenPort","sendPort","attachListenPort","attachSendPort","setOnPortDisconnect","WindowClient","detachPort","listenMessagePort","onFetch","origin","file","fetch","clone","replace","random","requestCache","scope","header","chunks","ranges","parseRange","parse","decodeURIComponent","onStreamFetch","onChangeState","onfetch","skipWaiting","claim","onoffline","ononline","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","m","__webpack_exports__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","splice","d","definition","o","defineProperty","enumerable","f","chunkId","u","miniCssF","g","globalThis","Function","prop","prototype","call","scriptUrl","importScripts","document","currentScript","src","scripts","getElementsByTagName","p","oldGetScript","oldLoadScript","queryMap","countMap","retries","realSrc","cacheBust","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","moreModules","runtime","pop"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"sw.3ce4749eb536186e614e.chunk.js","mappings":"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","sources":["webpack://tweb/webpack/runtime/chunk loaded","webpack://tweb/webpack/runtime/startup chunk dependencies","webpack://tweb/./src/config/debug.ts","webpack://tweb/./src/environment/userAgent.ts","webpack://tweb/./src/helpers/context.ts","webpack://tweb/./src/lib/logger.ts","webpack://tweb/./src/helpers/schedulers/pause.ts","webpack://tweb/./src/lib/serviceWorker/cache.ts","webpack://tweb/./src/helpers/noop.ts","webpack://tweb/./src/helpers/cancellablePromise.ts","webpack://tweb/./src/helpers/blob/blobConstruct.ts","webpack://tweb/./src/helpers/blob/blobSafeMimeType.ts","webpack://tweb/./src/lib/files/memoryWriter.ts","webpack://tweb/./src/lib/files/cacheStorage.ts","webpack://tweb/./src/lib/serviceWorker/stream.ts","webpack://tweb/./src/helpers/schedulers/debounce.ts","webpack://tweb/./src/helpers/blob/readBlobAsUint8Array.ts","webpack://tweb/./src/helpers/blob/readBlobAsArrayBuffer.ts","webpack://tweb/./src/helpers/blob/readBlobAs.ts","webpack://tweb/./src/helpers/object/deepEqual.ts","webpack://tweb/./src/lib/files/idb.ts","webpack://tweb/./src/helpers/object/safeAssign.ts","webpack://tweb/./src/lib/serviceWorker/push.ts","webpack://tweb/./src/config/databases/state.ts","webpack://tweb/./src/config/notifications.ts","webpack://tweb/./src/lib/serviceWorker/serviceMessagePort.ts","webpack://tweb/./src/lib/serviceWorker/download.ts","webpack://tweb/./src/lib/serviceWorker/share.ts","webpack://tweb/./src/lib/serviceWorker/index.service.ts","webpack://tweb/./src/helpers/listenMessagePort.ts","webpack://tweb/./src/lib/serviceWorker/timeout.ts","webpack://tweb/webpack/bootstrap","webpack://tweb/webpack/runtime/define property getters","webpack://tweb/webpack/runtime/ensure chunk","webpack://tweb/webpack/runtime/get javascript chunk filename","webpack://tweb/webpack/runtime/get mini-css chunk filename","webpack://tweb/webpack/runtime/global","webpack://tweb/webpack/runtime/hasOwnProperty shorthand","webpack://tweb/webpack/runtime/publicPath","webpack://tweb/webpack/runtime/compat","webpack://tweb/webpack/runtime/importScripts chunk loading","webpack://tweb/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var next = __webpack_require__.x;\n__webpack_require__.x = () => {\n\treturn __webpack_require__.e(85).then(next);\n};","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from './modes';\n\nexport const IS_BETA = process.env.NODE_ENV !== 'production';\nexport const DEBUG = (IS_BETA || Modes.debug)/* && false */;\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\nexport default DEBUG;\n\n// let m = DEBUG;\n/* if(!DEBUG) {\n ctx.sandpitTurtle = () => {\n //if(!m) {\n for(let i in MOUNT_CLASS_TO) {\n ctx[i] = MOUNT_CLASS_TO[i];\n }\n //m = true;\n //}\n\n //DEBUG = !DEBUG;\n };\n} */\n\n/* export const superDebug = (object: any, key: string) => {\n var d = object[key];\n var beforeStr = '', afterStr = '';\n for(var r of d) {\n beforeStr += r.before.hex + '\\n';\n afterStr += r.after.hex + '\\n';\n }\n\n beforeStr = beforeStr.trim();\n afterStr = afterStr.trim();\n //var beforeStr = d.map((r) => r.before.hex).join('\\n');\n //var afterStr = d.map((r) => r.after.hex).join('\\n');\n\n var dada = (name: string, str: string) => {\n var a = document.createElement('a');\n a.target = '_blank';\n a.download = name + '.txt';\n a.href = URL.createObjectURL(new Blob([str], {\n type: 'text/plain'\n }));\n document.body.append(a);\n a.click();\n };\n\n dada(key + '_' + 'before', beforeStr);\n dada(key + '_' + 'after', afterStr);\n}\n\nMOUNT_CLASS_TO.superDebug = superDebug; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from './ctx';\n\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\n\n// https://stackoverflow.com/a/58065241\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\n !(ctx as any).MSStream;\n\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\n\nexport const IS_MOBILE = (navigator.maxTouchPoints === undefined || navigator.maxTouchPoints > 0) && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// ะฒ SW ะผะพะถะตั‚ ะฑั‹ั‚ัŒ ัั€ะฐะทัƒ ะดะฒะต ะฟะตั€ะตะผะตะฝะฝั‹ั… TRUE\nexport const IS_SERVICE_WORKER = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\nexport const IS_WEB_WORKER = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope && !IS_SERVICE_WORKER;\nexport const IS_WORKER = IS_WEB_WORKER || IS_SERVICE_WORKER;\n\nexport const getWindowClients = () => {\n return (self as any as ServiceWorkerGlobalScope)\n .clients\n .matchAll({includeUncontrolled: false, type: 'window'});\n};\n\nexport const getLastWindowClient = () => getWindowClients().then((windowClients) => windowClients.slice(-1)[0]);\n\nconst postMessage = (listener: WindowClient | DedicatedWorkerGlobalScope, ...args: any[]) => {\n try {\n // @ts-ignore\n listener.postMessage(...args);\n } catch(err) {\n console.error('[worker] postMessage error:', err, args);\n }\n};\n\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\n getWindowClients().then((listeners) => {\n if(!listeners.length) {\n // console.trace('no listeners?', self, listeners);\n return;\n }\n\n listeners.slice(all ? 0 : -1).forEach((listener) => {\n postMessage(listener, ...args);\n });\n });\n};\n\nconst notifyWorker = (...args: any[]) => {\n postMessage(self as any as DedicatedWorkerGlobalScope, ...args);\n};\n\nconst noop = () => {};\n\nexport const notifySomeone = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, false) : (IS_WEB_WORKER ? notifyWorker : noop);\nexport const notifyAll = IS_SERVICE_WORKER ? notifyServiceWorker.bind(null, true) : (IS_WEB_WORKER ? notifyWorker : noop);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport DEBUG from '../config/debug';\nimport {IS_FIREFOX, IS_SAFARI} from '../environment/userAgent';\nimport {IS_SERVICE_WORKER, IS_WEB_WORKER} from '../helpers/context';\nimport dT from '../helpers/dT';\n\nexport enum LogTypes {\n None = 0,\n Error = 1,\n Warn = 2,\n Log = 4,\n Debug = 8\n};\n\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\n\nconst IS_WEBKIT = IS_SAFARI || IS_FIREFOX;\n\n// let getCallerFunctionNameFromLine: (line: string) => string;\n// if(IS_WEBKIT) {\n// getCallerFunctionNameFromLine = (line) => {\n// const splitted = line.split('@');\n// return splitted[0];\n// };\n// } else {\n// getCallerFunctionNameFromLine = (line: string) => {\n// const splitted = line.trim().split(' ');\n// if(splitted.length === 3) {\n// return splitted[1].slice(splitted[1].lastIndexOf('.') + 1);\n// }\n// };\n// }\n\nconst STYLES_SUPPORTED = !IS_WEBKIT;\n// const LINE_INDEX = IS_WEBKIT ? 2 : 3;\n\n// function getCallerFunctionName() {\n// const stack = new Error().stack;\n// const lines = stack.split('\\n');\n// const line = lines[LINE_INDEX] || lines[lines.length - 1];\n// // const match = line.match(/\\.([^\\.]+?)\\s/);\n// // line = match ? match[1] : line.trim();\n// const caller = getCallerFunctionNameFromLine(line) || '';\n// return '[' + caller + ']';\n// }\n\nexport const LOGGER_STYLES = {\n reset: '\\x1b[0m',\n bright: '\\x1b[1m',\n dim: '\\x1b[2m',\n underscore: '\\x1b[4m',\n blink: '\\x1b[5m',\n reverse: '\\x1b[7m',\n hidden: '\\x1b[8m',\n // Foreground (text) colors\n fg: {\n black: '\\x1b[30m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m'\n },\n // Background colors\n bg: {\n black: '\\x1b[40m',\n red: '\\x1b[41m',\n green: '\\x1b[42m',\n yellow: '\\x1b[43m',\n blue: '\\x1b[44m',\n magenta: '\\x1b[45m',\n cyan: '\\x1b[46m',\n white: '\\x1b[47m'\n }\n};\n\nexport type Logger = {\n (...args: any[]): void;\n warn(...args: any[]): void;\n info(...args: any[]): void;\n error(...args: any[]): void;\n trace(...args: any[]): void;\n debug(...args: any[]): void;\n assert(...args: any[]): void;\n // log(...args: any[]): void;\n group(...args: any[]): void;\n groupCollapsed(...args: any[]): void;\n groupEnd(...args: any[]): void;\n setPrefix(newPrefix: string): void;\n setLevel(level: 0 | 1 | 2 | 3 | 4): void;\n bindPrefix(prefix: string): Logger;\n};\n\nconst methods: ['debug' | 'info' | 'warn' | 'error' | 'assert' | 'trace'/* | 'log' */ | 'group' | 'groupCollapsed' | 'groupEnd', LogTypes][] = [\n ['debug', LogTypes.Debug],\n ['info', LogTypes.Log],\n ['warn', LogTypes.Warn],\n ['error', LogTypes.Error],\n ['assert', LogTypes.Error],\n ['trace', LogTypes.Log],\n ['group', LogTypes.Log],\n ['groupCollapsed', LogTypes.Log],\n ['groupEnd', LogTypes.Log]\n // [\"log\", LogTypes.Log]\n];\n\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error, ignoreDebugReset = false, style = ''): Logger {\n let originalPrefix: string;\n if(!DEBUG && !ignoreDebugReset/* || true */) {\n type = LogTypes.Error;\n }\n\n if(!STYLES_SUPPORTED) {\n style = '';\n } else if(!style) {\n if(IS_SERVICE_WORKER) style = LOGGER_STYLES.fg.yellow;\n else if(IS_WEB_WORKER) style = LOGGER_STYLES.fg.cyan;\n }\n\n const originalStyle = style;\n if(style) style = `%s ${style}%s`;\n else style = '%s';\n\n // level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\n\n const log: Logger = function(...args: any[]) {\n return type & LogTypes.Log && console.log(style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n } as any;\n\n methods.forEach(([method, logType]) => {\n log[method] = function(...args: any[]) {\n return type & logType && console[method](style, dT(), prefix, /* getCallerFunctionName(), */ ...args);\n };\n });\n\n log.setPrefix = function(newPrefix: string) {\n originalPrefix = newPrefix;\n prefix = '[' + newPrefix + ']';\n };\n\n log.setPrefix(prefix);\n\n log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\n };\n\n log.bindPrefix = function(prefix: string) {\n return logger(`${originalPrefix}] [${prefix}`, type, ignoreDebugReset, originalStyle);\n };\n\n return log;\n};\n","export default function pause(ms: number) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport pause from '../../helpers/schedulers/pause';\n\nconst ctx = self as any as ServiceWorkerGlobalScope;\nexport const CACHE_ASSETS_NAME = 'cachedAssets';\n\nfunction isCorrectResponse(response: Response) {\n return response.ok && response.status === 200;\n}\n\nfunction timeoutRace>(promise: T) {\n return Promise.race([\n promise,\n pause(10000).then(() => Promise.reject())\n ]);\n}\n\nexport async function requestCache(event: FetchEvent) {\n try {\n // const cache = await ctx.caches.open(CACHE_ASSETS_NAME);\n const cache = await timeoutRace(ctx.caches.open(CACHE_ASSETS_NAME));\n const file = await timeoutRace(cache.match(event.request, {ignoreVary: true}));\n\n if(file && isCorrectResponse(file)) {\n return file;\n }\n\n const headers: HeadersInit = {'Vary': '*'};\n let response = await fetch(event.request, {headers});\n if(isCorrectResponse(response)) {\n cache.put(event.request, response.clone());\n } else if(response.status === 304) { // possible fix for 304 in Safari\n const url = event.request.url.replace(/\\?.+$/, '') + '?' + (Math.random() * 100000 | 0);\n response = await fetch(url, {headers});\n if(isCorrectResponse(response)) {\n cache.put(event.request, response.clone());\n }\n }\n\n return response;\n } catch(err) {\n return fetch(event.request);\n }\n}\n","export default function noop() {}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from './noop';\n\nexport interface CancellablePromise extends Promise {\n resolve?: (value: T) => void,\n reject?: (...args: any[]) => void,\n cancel?: (reason?: any) => void,\n\n notify?: (...args: any[]) => void,\n notifyAll?: (...args: any[]) => void,\n lastNotify?: any,\n listeners?: Array<(...args: any[]) => void>,\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\n\n isFulfilled?: boolean,\n isRejected?: boolean\n}\n\nexport default function deferredPromise() {\n const deferredHelper: any = {\n isFulfilled: false,\n isRejected: false,\n\n notify: () => {},\n notifyAll: (...args: any[]) => {\n deferredHelper.lastNotify = args;\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\n },\n\n listeners: [],\n addNotifyListener: (callback: (...args: any[]) => void) => {\n if(deferredHelper.lastNotify) {\n callback(...deferredHelper.lastNotify);\n }\n\n deferredHelper.listeners.push(callback);\n }\n };\n\n const deferred: CancellablePromise = new Promise((resolve, reject) => {\n deferredHelper.resolve = (value: T) => {\n if(deferred.isFulfilled || deferred.isRejected) return;\n\n deferred.isFulfilled = true;\n resolve(value);\n };\n\n deferredHelper.reject = (...args: any[]) => {\n if(deferred.isRejected || deferred.isFulfilled) return;\n\n deferred.isRejected = true;\n reject(...args);\n };\n });\n\n // @ts-ignore\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\n const n = deferredPromise>();\n\n }; */\n\n deferred.catch(noop).finally(() => {\n deferred.notify = deferred.notifyAll = deferred.lastNotify = null;\n deferred.listeners.length = 0;\n\n if(deferred.cancel) {\n deferred.cancel = noop;\n }\n });\n\n Object.assign(deferred, deferredHelper);\n\n return deferred;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport blobSafeMimeType from './blobSafeMimeType';\n\nexport default function blobConstruct(blobParts: Array | T, mimeType: string = ''): Blob {\n if(!Array.isArray(blobParts)) {\n blobParts = [blobParts];\n }\n\n const safeMimeType = blobSafeMimeType(mimeType);\n const blob = new Blob(blobParts, {type: safeMimeType});\n return blob;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// https://www.iana.org/assignments/media-types/media-types.xhtml\nexport default function blobSafeMimeType(mimeType: string) {\n if([\n 'image/jpeg',\n 'image/png',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp',\n 'image/bmp',\n 'video/mp4',\n 'video/webm',\n 'video/quicktime',\n 'audio/ogg',\n 'audio/mpeg',\n 'audio/mp4',\n 'audio/wav', // though it is not in list\n 'application/json',\n 'application/pdf'\n ].indexOf(mimeType) === -1) {\n return 'application/octet-stream';\n }\n\n return mimeType;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport StreamWriter from './streamWriter';\n\nexport default class MemoryWriter implements StreamWriter {\n private bytes: Uint8Array;\n\n constructor(\n private mimeType: string,\n private size: number,\n private saveFileCallback?: (blob: Blob) => Promise\n ) {\n this.bytes = new Uint8Array(size);\n }\n\n public async write(part: Uint8Array, offset: number) {\n // sometimes file size can be bigger than the prov\n const endOffset = offset + part.byteLength;\n if(endOffset > this.bytes.byteLength) {\n const newBytes = new Uint8Array(endOffset);\n newBytes.set(this.bytes, 0);\n this.bytes = newBytes;\n }\n\n this.bytes.set(part, offset);\n };\n\n public truncate() {\n this.bytes = new Uint8Array();\n }\n\n public trim(size: number) {\n this.bytes = this.bytes.slice(0, size);\n }\n\n public finalize(saveToStorage = true) {\n const blob = blobConstruct(this.bytes, this.mimeType);\n\n if(saveToStorage && this.saveFileCallback) {\n this.saveFileCallback(blob);\n }\n\n return blob;\n }\n\n public getParts() {\n return this.bytes;\n }\n\n public replaceParts(parts: Uint8Array) {\n this.bytes = parts;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Modes from '../../config/modes';\nimport blobConstruct from '../../helpers/blob/blobConstruct';\nimport MemoryWriter from './memoryWriter';\nimport FileManager from './memoryWriter';\nimport FileStorage from './fileStorage';\nimport makeError from '../../helpers/makeError';\nimport deferredPromise from '../../helpers/cancellablePromise';\n\nexport type CacheStorageDbName = 'cachedFiles' | 'cachedStreamChunks' | 'cachedAssets';\n\nexport default class CacheStorageController implements FileStorage {\n private static STORAGES: CacheStorageController[] = [];\n private openDbPromise: Promise;\n\n private useStorage = true;\n\n // private log: ReturnType = logger('CS');\n\n constructor(private dbName: CacheStorageDbName) {\n if(Modes.test) {\n this.dbName += '_test';\n }\n\n if(CacheStorageController.STORAGES.length) {\n this.useStorage = CacheStorageController.STORAGES[0].useStorage;\n }\n\n this.openDatabase();\n CacheStorageController.STORAGES.push(this);\n }\n\n private openDatabase(): Promise {\n return this.openDbPromise ?? (this.openDbPromise = caches.open(this.dbName));\n }\n\n public delete(entryName: string) {\n return this.timeoutOperation((cache) => cache.delete('/' + entryName));\n }\n\n public deleteAll() {\n return caches.delete(this.dbName);\n }\n\n public get(entryName: string) {\n return this.timeoutOperation((cache) => cache.match('/' + entryName));\n }\n\n public save(entryName: string, response: Response) {\n // return new Promise((resolve) => {}); // DEBUG\n return this.timeoutOperation((cache) => cache.put('/' + entryName, response));\n }\n\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise {\n /* if(method === 'blob') {\n return Promise.reject();\n } */\n\n // const str = `get fileName: ${fileName}`;\n // console.time(str);\n return this.get(fileName).then((response) => {\n if(!response) {\n // console.warn('getFile:', response, fileName);\n throw makeError('NO_ENTRY_FOUND');\n }\n\n const promise = response[method]();\n // promise.then(() => {\n // console.timeEnd(str);\n // });\n return promise;\n });\n }\n\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // return Promise.resolve(blobConstruct([blob]));\n if(!(blob instanceof Blob)) {\n blob = blobConstruct(blob);\n }\n\n const response = new Response(blob, {\n headers: {\n 'Content-Length': '' + blob.size\n }\n });\n\n return this.save(fileName, response).then(() => blob as Blob);\n }\n\n public timeoutOperation(callback: (cache: Cache) => Promise) {\n if(!this.useStorage) {\n return Promise.reject(makeError('STORAGE_OFFLINE'));\n }\n\n return new Promise(async(resolve, reject) => {\n let rejected = false;\n const timeout = setTimeout(() => {\n reject();\n // console.warn('CACHESTORAGE TIMEOUT');\n rejected = true;\n }, 15e3);\n\n try {\n const cache = await this.openDatabase();\n if(!cache) {\n this.useStorage = false;\n this.openDbPromise = undefined;\n throw 'no cache?';\n }\n\n const res = await callback(cache);\n\n if(rejected) return;\n resolve(res);\n } catch(err) {\n reject(err);\n }\n\n clearTimeout(timeout);\n });\n }\n\n public prepareWriting(fileName: string, fileSize: number, mimeType: string) {\n return {\n deferred: deferredPromise(),\n getWriter: () => {\n const writer = new MemoryWriter(mimeType, fileSize, (blob) => {\n return this.saveFile(fileName, blob).catch(() => blob);\n });\n\n return writer;\n }\n };\n }\n\n public static toggleStorage(enabled: boolean, clearWrite: boolean) {\n return Promise.all(this.STORAGES.map((storage) => {\n storage.useStorage = enabled;\n\n if(!clearWrite) {\n return;\n }\n\n if(!enabled) {\n return storage.deleteAll();\n }\n }));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAsUint8Array from '../../helpers/blob/readBlobAsUint8Array';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {InputFileLocation} from '../../layer';\nimport CacheStorageController from '../files/cacheStorage';\nimport {DownloadOptions, MyUploadFile} from '../mtproto/apiFileManager';\nimport {getMtprotoMessagePort, log, serviceMessagePort} from './index.service';\nimport {ServiceRequestFilePartTaskPayload} from './serviceMessagePort';\nimport timeout from './timeout';\n\nconst deferredPromises: Map}> = new Map();\nconst cacheStorage = new CacheStorageController('cachedStreamChunks');\nconst CHUNK_TTL = 86400;\nconst CHUNK_CACHED_TIME_HEADER = 'Time-Cached';\nconst USE_CACHE = true;\n\nconst clearOldChunks = () => {\n return cacheStorage.timeoutOperation((cache) => {\n return cache.keys().then((requests) => {\n const filtered: Map = new Map();\n const timestamp = Date.now() / 1000 | 0;\n for(const request of requests) {\n const match = request.url.match(/\\/(\\d+?)\\?/);\n if(match && !filtered.has(match[1])) {\n filtered.set(match[1], request);\n }\n }\n\n const promises: Promise[] = [];\n for(const [id, request] of filtered) {\n const promise = cache.match(request).then((response) => {\n if((+response.headers.get(CHUNK_CACHED_TIME_HEADER) + CHUNK_TTL) <= timestamp) {\n log('will delete stream chunk:', id);\n return cache.delete(request, {ignoreSearch: true, ignoreVary: true});\n }\n });\n\n promises.push(promise);\n }\n\n return Promise.all(promises);\n });\n });\n};\n\nsetInterval(clearOldChunks, 1800e3);\nsetInterval(() => {\n const mtprotoMessagePort = getMtprotoMessagePort();\n for(const [messagePort, promises] of deferredPromises) {\n if(messagePort !== mtprotoMessagePort) {\n for(const taskId in promises) {\n const promise = promises[taskId];\n promise.reject();\n }\n\n deferredPromises.delete(messagePort);\n }\n }\n}, 120e3);\n\ntype StreamRange = [number, number];\ntype StreamId = DocId;\nconst streams: Map = new Map();\nclass Stream {\n private destroyDebounced: () => void;\n private id: StreamId;\n private limitPart: number;\n private loadedOffsets: Set = new Set();\n\n constructor(private info: DownloadOptions) {\n this.id = Stream.getId(info);\n streams.set(this.id, this);\n\n // ! ะตัะปะธ ะณั€ัƒะทะธั‚ัŒ ะพั‡ะตะฝัŒ ะฑะพะปัŒัˆะพะต ะฒะธะดะตะพ ั‡ะฐะฝะบะฐะผะธ ะฟะพ 512ะšะฑ ะฒ ะผะพะฑะธะปัŒะฝะพะผ Safari, ั‚ะพ ัั‚ั€ะธะผ ะฝะต ะทะฐะฟัƒัั‚ะธั‚ัั\n this.limitPart = info.size > (75 * 1024 * 1024) ? STREAM_CHUNK_UPPER_LIMIT : STREAM_CHUNK_MIDDLE_LIMIT;\n this.destroyDebounced = debounce(this.destroy, 150000, false, true);\n }\n\n private destroy = () => {\n streams.delete(this.id);\n };\n\n private async requestFilePartFromWorker(alignedOffset: number, limit: number, fromPreload = false) {\n const payload: ServiceRequestFilePartTaskPayload = {\n docId: this.id,\n dcId: this.info.dcId,\n offset: alignedOffset,\n limit\n };\n\n const taskId = JSON.stringify(payload);\n\n const mtprotoMessagePort = getMtprotoMessagePort();\n let promises = deferredPromises.get(mtprotoMessagePort);\n if(!promises) {\n deferredPromises.set(mtprotoMessagePort, promises = {});\n }\n\n let deferred = promises[taskId];\n if(deferred) {\n return deferred.then((uploadFile) => uploadFile.bytes);\n }\n\n this.loadedOffsets.add(alignedOffset);\n\n deferred = promises[taskId] = deferredPromise();\n\n serviceMessagePort.invoke('requestFilePart', payload, undefined, mtprotoMessagePort)\n .then(deferred.resolve, deferred.reject).finally(() => {\n if(promises[taskId] === deferred) {\n delete promises[taskId];\n\n if(!Object.keys(promises).length) {\n deferredPromises.delete(mtprotoMessagePort);\n }\n }\n });\n\n const bytesPromise = deferred.then((uploadFile) => uploadFile.bytes);\n\n if(USE_CACHE) {\n this.saveChunkToCache(bytesPromise, alignedOffset, limit);\n !fromPreload && this.preloadChunks(alignedOffset, alignedOffset + (this.limitPart * 15));\n }\n\n return bytesPromise;\n }\n\n private requestFilePartFromCache(alignedOffset: number, limit: number, fromPreload?: boolean) {\n if(!USE_CACHE) {\n return Promise.resolve();\n }\n\n const key = this.getChunkKey(alignedOffset, limit);\n return cacheStorage.getFile(key).then((blob: Blob) => {\n return fromPreload ? new Uint8Array() : readBlobAsUint8Array(blob);\n }, (error: ApiError) => {\n if(error.type === 'NO_ENTRY_FOUND') {\n return;\n }\n });\n }\n\n private requestFilePart(alignedOffset: number, limit: number, fromPreload?: boolean) {\n return this.requestFilePartFromCache(alignedOffset, limit, fromPreload).then((bytes) => {\n return bytes || this.requestFilePartFromWorker(alignedOffset, limit, fromPreload);\n });\n }\n\n private saveChunkToCache(deferred: Promise, alignedOffset: number, limit: number) {\n return deferred.then((bytes) => {\n const key = this.getChunkKey(alignedOffset, limit);\n const response = new Response(bytes, {\n headers: {\n 'Content-Length': '' + bytes.length,\n 'Content-Type': 'application/octet-stream',\n [CHUNK_CACHED_TIME_HEADER]: '' + (Date.now() / 1000 | 0)\n }\n });\n\n return cacheStorage.save(key, response);\n });\n }\n\n private preloadChunk(offset: number) {\n if(this.loadedOffsets.has(offset)) {\n return;\n }\n\n this.loadedOffsets.add(offset);\n this.requestFilePart(offset, this.limitPart, true);\n }\n\n private preloadChunks(offset: number, end: number) {\n if(end > this.info.size) {\n end = this.info.size;\n }\n\n if(!offset) { // load last chunk for bounds\n this.preloadChunk(alignOffset(offset, this.limitPart));\n } else { // don't preload next chunks before the start\n for(; offset < end; offset += this.limitPart) {\n this.preloadChunk(offset);\n }\n }\n }\n\n public requestRange(range: StreamRange) {\n this.destroyDebounced();\n\n const possibleResponse = responseForSafariFirstRange(range, this.info.mimeType, this.info.size);\n if(possibleResponse) {\n return possibleResponse;\n }\n\n let [offset, end] = range;\n\n /* if(info.size > limitPart && isSafari && offset === limitPart) {\n //end = info.size - 1;\n //offset = info.size - 1 - limitPart;\n offset = info.size - (info.size % limitPart);\n } */\n\n const limit = end && end < this.limitPart ? alignLimit(end - offset + 1) : this.limitPart;\n const alignedOffset = alignOffset(offset, limit);\n\n if(!end) {\n end = Math.min(offset + limit, this.info.size - 1);\n }\n\n return this.requestFilePart(alignedOffset, limit).then((ab) => {\n // log.debug('[stream] requestFilePart result:', result);\n\n // if(isSafari) {\n if(offset !== alignedOffset || end !== (alignedOffset + limit)) {\n ab = ab.slice(offset - alignedOffset, end - alignedOffset + 1);\n }\n\n const headers: Record = {\n 'Accept-Ranges': 'bytes',\n 'Content-Range': `bytes ${offset}-${offset + ab.byteLength - 1}/${this.info.size || '*'}`,\n 'Content-Length': `${ab.byteLength}`\n };\n\n if(this.info.mimeType) {\n headers['Content-Type'] = this.info.mimeType;\n }\n\n // simulate slow connection\n // setTimeout(() => {\n return new Response(ab, {\n status: 206,\n statusText: 'Partial Content',\n headers\n });\n // }, 2.5e3);\n });\n }\n\n private getChunkKey(alignedOffset: number, limit: number) {\n return this.id + '?offset=' + alignedOffset + '&limit=' + limit;\n }\n\n public static get(info: DownloadOptions) {\n return streams.get(this.getId(info)) ?? new Stream(info);\n }\n\n private static getId(info: DownloadOptions) {\n return (info.location as InputFileLocation.inputDocumentFileLocation).id;\n }\n}\n\nexport default function onStreamFetch(event: FetchEvent, params: string) {\n const range = parseRange(event.request.headers.get('Range'));\n const info: DownloadOptions = JSON.parse(decodeURIComponent(params));\n const stream = Stream.get(info);\n\n // log.debug('[stream]', url, offset, end);\n\n event.respondWith(Promise.race([\n timeout(45 * 1000),\n stream.requestRange(range)\n ]));\n}\n\nfunction responseForSafariFirstRange(range: StreamRange, mimeType: string, size: number): Response {\n if(range[0] === 0 && range[1] === 1) {\n return new Response(new Uint8Array(2).buffer, {\n status: 206,\n statusText: 'Partial Content',\n headers: {\n 'Accept-Ranges': 'bytes',\n 'Content-Range': `bytes 0-1/${size || '*'}`,\n 'Content-Length': '2',\n 'Content-Type': mimeType || 'video/mp4'\n }\n });\n }\n\n return null;\n}\n\n/* const STREAM_CHUNK_UPPER_LIMIT = 256 * 1024;\nconst SMALLEST_CHUNK_LIMIT = 256 * 4; */\n/* const STREAM_CHUNK_UPPER_LIMIT = 1024 * 1024;\nconst SMALLEST_CHUNK_LIMIT = 1024 * 4; */\nconst STREAM_CHUNK_MIDDLE_LIMIT = 512 * 1024;\nconst STREAM_CHUNK_UPPER_LIMIT = 1024 * 1024;\nconst SMALLEST_CHUNK_LIMIT = 512 * 4;\n\nfunction parseRange(header: string): StreamRange {\n if(!header) return [0, 0];\n const [, chunks] = header.split('=');\n const ranges = chunks.split(', ');\n const [offset, end] = ranges[0].split('-');\n\n return [+offset, +end || 0];\n}\n\nfunction alignOffset(offset: number, base = SMALLEST_CHUNK_LIMIT) {\n return offset - (offset % base);\n}\n\nfunction alignLimit(limit: number) {\n return 2 ** Math.ceil(Math.log(limit) / Math.log(2));\n}\n","// * Jolly Cobra's schedulers\n\nimport ctx from '../../environment/ctx';\nimport {AnyFunction, Awaited} from '../../types';\nimport noop from '../noop';\n\nexport type DebounceReturnType = {\n (...args: Parameters): Promise>>;\n clearTimeout(): void;\n isDebounced(): boolean;\n};\n\nexport default function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true\n): DebounceReturnType {\n let waitingTimeout: number;\n let waitingPromise: Promise>>, resolve: (result: any) => void, reject: () => void;\n let hadNewCall = false;\n\n const invoke = (args: Parameters) => {\n const _resolve = resolve, _reject = reject;\n try {\n const result = fn.apply(null, args);\n _resolve(result);\n } catch(err) {\n console.error('debounce error', err);\n // @ts-ignore\n _reject(err);\n }\n };\n\n const debounce = (...args: Parameters) => {\n if(!waitingPromise) waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n\n if(waitingTimeout) {\n clearTimeout(waitingTimeout);\n hadNewCall = true;\n reject();\n waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n } else if(shouldRunFirst) {\n invoke(args);\n hadNewCall = false;\n }\n\n const _waitingTimeout = ctx.setTimeout(() => {\n // will run if should run last or first but with new call\n if(shouldRunLast && (!shouldRunFirst || hadNewCall)) {\n invoke(args);\n }\n\n // if debounce was called during invoking\n if(waitingTimeout === _waitingTimeout) {\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n }, ms);\n\n waitingTimeout = _waitingTimeout;\n waitingPromise.catch(noop);\n return waitingPromise;\n };\n\n debounce.clearTimeout = () => {\n if(waitingTimeout) {\n ctx.clearTimeout(waitingTimeout);\n reject();\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n };\n\n debounce.isDebounced = () => !!waitingTimeout;\n\n return debounce;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAsArrayBuffer from './readBlobAsArrayBuffer';\n\nexport default function readBlobAsUint8Array(blob: Blob) {\n return readBlobAsArrayBuffer(blob).then((buffer) => new Uint8Array(buffer));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from './readBlobAs';\n\nexport default function readBlobAsArrayBuffer(blob: Blob) {\n return readBlobAs(blob, 'readAsArrayBuffer');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { IS_WEB_WORKER } from \"../context\";\n\n// const id = IS_WEB_WORKER ? Math.random() * 0x1000 | 0 : 0;\nexport default function readBlobAs(blob: Blob, method: 'readAsText'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise {\n // const perf = performance.now();\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (e) => {\n // console.log(`readBlobAs [${id}] ${method} time ${performance.now() - perf}`);\n resolve(e.target.result);\n });\n reader[method](blob);\n });\n}\n","export default function deepEqual(x: any, y: any): boolean {\n const ok = Object.keys, tx = typeof x, ty = typeof y;\n return x && y && tx === 'object' && tx === ty ? (\n ok(x).length === ok(y).length &&\n ok(x).every((key) => deepEqual(x[key], y[key]))\n ) : (x === y);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport Modes from '../../config/modes';\nimport makeError from '../../helpers/makeError';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {logger} from '../logger';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\n */\nexport type IDBIndex = {\n indexName: string,\n keyPath: string,\n objectParameters: IDBIndexParameters\n};\n\nexport type IDBStore = {\n name: string,\n indexes?: IDBIndex[]\n};\n\nexport type IDBOptions = {\n name?: string,\n storeName: string,\n stores?: IDBStore[],\n version?: number\n};\n\nconst DEBUG = false;\n\nexport class IDB {\n private static INSTANCES: IDB[] = [];\n private openDbPromise: Promise;\n private db: IDBDatabase;\n private storageIsAvailable: boolean;\n private log: ReturnType;\n private name: string;\n private version: number;\n private stores: IDBStore[];\n\n constructor(db: Database) {\n safeAssign(this, db);\n\n if(Modes.test) {\n this.name += '_test';\n }\n\n this.storageIsAvailable = true;\n this.log = logger(['IDB', db.name].join('-'));\n this.log('constructor');\n\n this.openDatabase(true);\n\n IDB.INSTANCES.push(this);\n }\n\n public isAvailable() {\n return this.storageIsAvailable;\n }\n\n public openDatabase(createNew = false): Promise {\n if(this.openDbPromise && !createNew) {\n return this.openDbPromise;\n }\n\n const createIndexes = (os: IDBObjectStore, store: IDBStore) => {\n const indexNames = Array.from(os.indexNames);\n for(const indexName of indexNames) {\n os.deleteIndex(indexName);\n }\n\n if(!store.indexes?.length) {\n return;\n }\n\n for(const index of store.indexes) {\n if(os.indexNames.contains(index.indexName)) {\n continue;\n }\n\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\n }\n };\n\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\n const os = db.createObjectStore(store.name);\n createIndexes(os, store);\n };\n\n try {\n var request = indexedDB.open(this.name, this.version);\n\n if(!request) {\n return Promise.reject();\n }\n } catch(error) {\n this.log.error('error opening db', (error as Error).message);\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n let finished = false;\n setTimeout(() => {\n if(!finished) {\n request.onerror(makeError('IDB_CREATE_TIMEOUT') as Event);\n }\n }, 3000);\n\n return this.openDbPromise = new Promise((resolve, reject) => {\n request.onsuccess = (event) => {\n finished = true;\n const db = request.result;\n let calledNew = false;\n\n this.log('Opened');\n\n db.onerror = (error) => {\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', error);\n reject(error);\n };\n\n db.onclose = (e) => {\n this.log.error('closed:', e);\n !calledNew && this.openDatabase();\n };\n\n db.onabort = (e) => {\n this.log.error('abort:', e);\n const transaction = e.target as IDBTransaction;\n\n this.openDatabase(calledNew = true);\n\n if(transaction.onerror) {\n transaction.onerror(e);\n }\n\n db.close();\n };\n\n db.onversionchange = (e) => {\n this.log.error('onversionchange, lol?');\n };\n\n resolve(this.db = db);\n };\n\n request.onerror = (event) => {\n finished = true;\n this.storageIsAvailable = false;\n this.log.error('Error creating/accessing IndexedDB database', event);\n reject(event);\n };\n\n request.onupgradeneeded = (event) => {\n finished = true;\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\n\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n this.stores.forEach((store) => {\n /* if(db.objectStoreNames.contains(store.name)) {\n //if(event.oldVersion === 1) {\n db.deleteObjectStore(store.name);\n //}\n } */\n\n if(!db.objectStoreNames.contains(store.name)) {\n createObjectStore(db, store);\n } else {\n const txn = target.transaction;\n const os = txn.objectStore(store.name);\n createIndexes(os, store);\n }\n });\n };\n });\n }\n\n public static create>(db: T) {\n return this.INSTANCES.find((instance) => instance.name === db.name) ?? new IDB(db);\n }\n\n public static closeDatabases(preserve?: IDB) {\n this.INSTANCES.forEach((storage) => {\n if(preserve && preserve === storage) {\n return;\n }\n\n const db = storage.db;\n if(db) {\n db.onclose = () => {};\n db.close();\n }\n });\n }\n}\n\nexport default class IDBStorage, StoreName extends string = T['stores'][0]['name']> {\n private log: ReturnType;\n private storeName: T['stores'][0]['name'];\n private idb: IDB;\n\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\n this.storeName = storeName;\n this.log = logger(['IDB', db.name, storeName].join('-'));\n this.idb = IDB.create(db);\n }\n\n /**\n * ! WARNING ! function requires at least one opened connection\n */\n /* public static clearObjectStores() {\n const storage = this.STORAGES[0];\n this.closeDatabases(storage);\n\n const names = Array.from(storage.db.objectStoreNames);\n const promises = names.map((name) => storage.clear(name));\n return Promise.all(promises);\n } */\n\n /* public static deleteDatabase() {\n this.closeDatabases();\n\n const storages = this.STORAGES;\n const dbNames = Array.from(new Set(storages.map((storage) => storage.name)));\n const promises = dbNames.map((dbName) => {\n return new Promise((resolve, reject) => {\n const deleteRequest = indexedDB.deleteDatabase(dbName);\n\n deleteRequest.onerror = () => {\n reject();\n };\n\n deleteRequest.onsuccess = () => {\n resolve();\n };\n });\n });\n\n return Promise.all(promises);\n } */\n\n public delete(entryName: string | string[], storeName?: StoreName): Promise {\n // return Promise.resolve();\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.delete(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'delete: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n public clear(storeName?: StoreName): Promise {\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'clear' : '', storeName);\n }\n\n public save(entryName: string | string[], value: any | any[], storeName?: StoreName) {\n // const handleError = (error: Error) => {\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\n // setTimeout(() => {\n // this.save(entryName, value);\n // }, 2e3);\n // } else {\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\n // }\n // };\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n entryName = [].concat(entryName);\n value = [].concat(value);\n }\n\n return this.getObjectStore('readwrite', (objectStore) => {\n const promises = (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'save: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n // public saveFile(fileName: string, blob: Blob | Uint8Array) {\n // //return Promise.resolve(blobConstruct([blob]));\n // if(!(blob instanceof Blob)) {\n // blob = blobConstruct(blob);\n // }\n\n // return this.save(fileName, blob);\n // }\n\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise {\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\n return Promise.reject();\n }\n\n if(!(blob instanceof Blob)) {\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\n return this.storagePutB64String(db, fileName, address).then(() => {\n return blob;\n });\n }\n\n try {\n var reader = new FileReader();\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n let promise = new Promise((resolve, reject) => {\n reader.onloadend = () => {\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\n resolve(blob);\n }, reject);\n }\n\n reader.onerror = reject;\n });\n\n\n try {\n reader.readAsDataURL(blob);\n } catch (e) {\n this.storageIsAvailable = false;\n return Promise.reject();\n }\n\n return promise;\n }\n\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\n try {\n var objectStore = db.transaction([this.storeName], 'readwrite')\n .objectStore(this.storeName);\n var request = objectStore.put(b64string, fileName);\n } catch(error) {\n this.storageIsAvailable = false;\n return Promise.reject(error);\n }\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n resolve();\n };\n\n request.onerror = reject;\n });\n }\n\n public getBlobSize(blob: any) {\n return blob.size || blob.byteLength || blob.length;\n } */\n\n public get(entryName: string[], storeName?: StoreName): Promise;\n public get(entryName: string, storeName?: StoreName): Promise;\n public get(entryName: string | string[], storeName?: StoreName): Promise | Promise {\n // return Promise.reject();\n\n const isArray = Array.isArray(entryName);\n if(!isArray) {\n if(!entryName) {\n return undefined;\n }\n\n entryName = [].concat(entryName);\n } else if(!entryName.length) {\n return Promise.resolve([]) as any;\n }\n\n return this.getObjectStore('readonly', (objectStore) => {\n const promises = (entryName as string[]).map((entryName) => objectStore.get(entryName));\n return isArray ? promises : promises[0];\n }, DEBUG ? 'get: ' + (entryName as string[]).join(', ') : '', storeName);\n }\n\n private getObjectStore(\n mode: IDBTransactionMode,\n callback: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[],\n log?: string,\n storeName = this.storeName\n ) {\n let perf: number;\n\n if(log) {\n perf = performance.now();\n this.log(log + ': start');\n }\n\n return this.idb.openDatabase().then((db) => {\n return new Promise((resolve, reject) => {\n /* if(mode === 'readwrite') {\n return;\n } */\n\n const transaction = db.transaction([storeName], mode);\n\n const onError = () => {\n clearTimeout(timeout);\n reject(transaction.error);\n };\n\n // let resolved = false;\n const onComplete = (/* what: string */) => {\n clearTimeout(timeout);\n\n if(log) {\n this.log(log + ': end', performance.now() - perf/* , what */);\n }\n\n // if(resolved) {\n // return;\n // }\n\n // resolved = true;\n const results = requests.map((r) => r.result);\n resolve(isArray ? results : results[0]);\n };\n\n transaction.onerror = onError;\n\n // * have to wait while clearing or setting something\n const waitForTransactionComplete = mode === 'readwrite';\n if(waitForTransactionComplete) {\n transaction.oncomplete = () => onComplete(/* 'transaction' */);\n }\n\n const timeout = setTimeout(() => {\n this.log.error('transaction not finished', transaction, log);\n }, 10000);\n\n /* transaction.addEventListener('abort', (e) => {\n //handleError();\n this.log.error('IndexedDB: transaction abort!', transaction.error);\n }); */\n\n const callbackResult = callback(transaction.objectStore(storeName));\n\n const isArray = Array.isArray(callbackResult);\n const requests: IDBRequest[] = isArray ? callbackResult : [].concat(callbackResult) as any;\n\n if(waitForTransactionComplete) {\n return;\n }\n\n const length = requests.length;\n let left = length;\n\n const onRequestFinished = () => {\n if(transaction.error) {\n return;\n }\n\n if(!--left) {\n onComplete(/* 'requests' */);\n }\n };\n\n for(let i = 0; i < length; ++i) {\n const request = requests[i];\n request.onerror = onError;\n request.onsuccess = onRequestFinished;\n }\n });\n });\n }\n\n public getAll(storeName?: StoreName): Promise {\n return this.getObjectStore('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '', storeName);\n }\n\n /* public getAllKeys(): Promise> {\n console.time('getAllEntries');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.getAllKeys();\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var result = event.target.result;\n resolve(result);\n console.timeEnd('getAllEntries');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public isFileExists(fileName: string): Promise {\n console.time('isFileExists');\n return this.openDatabase().then((db) => {\n var objectStore = db.transaction([this.storeName], 'readonly')\n .objectStore(this.storeName);\n var request = objectStore.openCursor(fileName);\n\n return new Promise((resolve, reject) => {\n request.onsuccess = function(event) {\n // @ts-ignore\n var cursor = event.target.result;\n resolve(!!cursor);\n console.timeEnd('isFileExists');\n }\n\n request.onerror = reject;\n });\n });\n } */\n\n /* public getFileWriter(fileName: string, mimeType: string) {\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\n return this.saveFile(fileName, blob);\n });\n\n return Promise.resolve(fakeWriter);\n } */\n}\n","export default function safeAssign(object: T, fromObject: any) {\n if(fromObject) {\n for(const i in fromObject) {\n if(fromObject[i] !== undefined) {\n // @ts-ignore\n object[i] = fromObject[i];\n }\n }\n }\n\n return object;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport {Database} from '../../config/databases';\nimport DATABASE_STATE from '../../config/databases/state';\nimport {NOTIFICATION_BADGE_PATH, NOTIFICATION_ICON_PATH} from '../../config/notifications';\nimport {IS_FIREFOX, IS_MOBILE} from '../../environment/userAgent';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport IDBStorage from '../files/idb';\nimport {log, serviceMessagePort} from './index.service';\nimport {ServicePushPingTaskPayload} from './serviceMessagePort';\n\nconst ctx = self as any as ServiceWorkerGlobalScope;\nconst defaultBaseUrl = location.protocol + '//' + location.hostname + location.pathname.split('/').slice(0, -1).join('/') + '/';\n\n// as in webPushApiManager.ts\nconst PING_PUSH_TIMEOUT = 10000 + 1500;\nlet lastPingTime = 0;\nlet localNotificationsAvailable = true;\n\nexport type PushNotificationObject = {\n loc_key: string,\n loc_args: string[],\n // user_id: number, // should be number\n custom: {\n channel_id?: string, // should be number\n chat_id?: string, // should be number\n from_id?: string, // should be number\n msg_id: string,\n peerId?: string, // should be number\n silent?: string // can be '1'\n },\n sound?: string,\n random_id: number,\n badge?: string, // should be number\n description: string,\n mute: string, // should be number\n title: string,\n message?: string,\n} & {\n action?: 'mute1d' | 'push_settings', // will be set before postMessage to main thread\n};\n\nclass SomethingGetter, Storage extends Record> {\n private cache: Partial = {};\n private storage: IDBStorage;\n\n constructor(\n db: T,\n storeName: typeof db['stores'][number]['name'],\n private defaults: {\n [Property in keyof Storage]: ((value: Storage[Property]) => Storage[Property]) | Storage[Property]\n }\n ) {\n this.storage = new IDBStorage(db, storeName);\n }\n\n private getDefault(key: T) {\n const callback = this.defaults[key];\n return typeof(callback) === 'function' ? callback() : callback;\n }\n\n public get(key: T) {\n if(this.cache.hasOwnProperty(key)) {\n return this.cache[key];\n }\n\n const promise = this.storage.get(key as string) as Promise;\n return promise.then((value) => value, () => undefined as Storage[T]).then((value) => {\n if(this.cache.hasOwnProperty(key)) {\n return this.cache[key];\n }\n\n value ??= this.getDefault(key);\n\n return this.cache[key] = value;\n });\n }\n\n public getCached(key: T) {\n const value = this.get(key);\n if(value instanceof Promise) {\n throw 'no property';\n }\n\n return value;\n }\n\n public async set(key: T, value: Storage[T]) {\n const cached = this.cache[key] ?? this.defaults[key];\n if(deepEqual(cached, value)) {\n return;\n }\n\n this.cache[key] = value;\n\n try {\n this.storage.save(key as string, value);\n } catch(err) {\n\n }\n }\n}\n\ntype PushStorage = {\n push_mute_until: number,\n push_lang: Partial\n push_settings: Partial\n};\n\nconst defaults: PushStorage = {\n push_mute_until: 0,\n push_lang: {\n push_message_nopreview: 'You have a new message',\n push_action_mute1d: 'Mute for 24H',\n push_action_settings: 'Settings'\n },\n push_settings: {}\n};\n\nconst getter = new SomethingGetter(DATABASE_STATE, 'session', defaults);\n\n// fill cache\nfor(const i in defaults) {\n getter.get(i as keyof PushStorage);\n}\n\nctx.addEventListener('push', (event) => {\n const obj: PushNotificationObject = event.data.json();\n log('push', {...obj});\n\n try {\n const [muteUntil, settings, lang] = [\n getter.getCached('push_mute_until'),\n getter.getCached('push_settings'),\n getter.getCached('push_lang')\n ];\n\n const nowTime = Date.now();\n if(\n userInvisibleIsSupported() &&\n muteUntil &&\n nowTime < muteUntil\n ) {\n throw `supress notification because mute for ${Math.ceil((muteUntil - nowTime) / 60000)} min`;\n }\n\n const hasActiveWindows = (Date.now() - lastPingTime) <= PING_PUSH_TIMEOUT && localNotificationsAvailable;\n if(hasActiveWindows) {\n throw 'supress notification because some instance is alive';\n }\n\n const notificationPromise = fireNotification(obj, settings, lang);\n event.waitUntil(notificationPromise);\n } catch(err) {\n log(err);\n\n const tag = 'fix';\n const notificationPromise = ctx.registration.showNotification('Telegram', {tag});\n\n notificationPromise.then(() => {\n closeAllNotifications(tag);\n });\n\n event.waitUntil(notificationPromise);\n }\n});\n\nctx.addEventListener('notificationclick', (event) => {\n const notification = event.notification;\n log('on notification click', notification);\n notification.close();\n\n const action = event.action as PushNotificationObject['action'];\n if(action === 'mute1d' && userInvisibleIsSupported()) {\n log('[SW] mute for 1d');\n getter.set('push_mute_until', Date.now() + 86400e3);\n return;\n }\n\n const data: PushNotificationObject = notification.data;\n if(!data) {\n return;\n }\n\n const promise = ctx.clients.matchAll({\n type: 'window'\n }).then((clientList) => {\n data.action = action;\n pendingNotification = data;\n for(let i = 0; i < clientList.length; ++i) {\n const client = clientList[i];\n if('focus' in client) {\n client.focus();\n serviceMessagePort.invokeVoid('pushClick', pendingNotification, client);\n pendingNotification = undefined;\n return;\n }\n }\n\n if(ctx.clients.openWindow) {\n return Promise.resolve(getter.get('push_settings')).then((settings) => {\n return ctx.clients.openWindow(settings.baseUrl || defaultBaseUrl);\n });\n }\n }).catch((error) => {\n log.error('Clients.matchAll error', error);\n })\n\n event.waitUntil(promise);\n});\n\nctx.addEventListener('notificationclose', onCloseNotification);\n\nconst notifications: Set = new Set();\nlet pendingNotification: PushNotificationObject;\nfunction pushToNotifications(notification: Notification) {\n if(!notifications.has(notification)) {\n notifications.add(notification);\n // @ts-ignore\n notification.onclose = onCloseNotification;\n }\n}\n\nfunction onCloseNotification(event: NotificationEvent) {\n removeFromNotifications(event.notification)\n}\n\nfunction removeFromNotifications(notification: Notification) {\n notifications.delete(notification);\n}\n\nexport function closeAllNotifications(tag?: string) {\n for(const notification of notifications) {\n try {\n if(tag && notification.tag !== tag) {\n continue;\n }\n\n notification.close();\n notifications.delete(notification);\n } catch(e) {}\n }\n\n let promise: Promise;\n if('getNotifications' in ctx.registration) {\n promise = ctx.registration.getNotifications({tag}).then((notifications) => {\n for(let i = 0, len = notifications.length; i < len; ++i) {\n try {\n notifications[i].close();\n } catch(e) {}\n }\n }).catch((error) => {\n log.error('Offline register SW error', error);\n });\n } else {\n promise = Promise.resolve();\n }\n\n return promise;\n}\n\nfunction userInvisibleIsSupported() {\n return IS_FIREFOX;\n}\n\nfunction fireNotification(obj: PushNotificationObject, settings: PushStorage['push_settings'], lang: PushStorage['push_lang']) {\n let title = obj.title || 'Telegram';\n let body = obj.description || '';\n let peerId: string;\n\n if(obj.custom) {\n if(obj.custom.channel_id) {\n peerId = '' + -obj.custom.channel_id;\n } else if(obj.custom.chat_id) {\n peerId = '' + -obj.custom.chat_id;\n } else {\n peerId = obj.custom.from_id || '';\n }\n }\n\n obj.custom.peerId = '' + peerId;\n let tag = 'peer' + peerId;\n\n const messageKey = peerId + '_' + obj.custom.msg_id;\n if(ignoreMessages) {\n const error = 'ignoring push';\n log.warn(error, obj);\n ignoreMessages.delete(messageKey);\n throw error;\n }\n\n if(settings?.nopreview) {\n title = 'Telegram';\n body = lang.push_message_nopreview;\n tag = 'unknown_peer';\n }\n\n const actions: (Omit & {action: PushNotificationObject['action']})[] = [{\n action: 'mute1d',\n title: lang.push_action_mute1d\n }/* , {\n action: 'push_settings',\n title: lang.push_action_settings || 'Settings'\n } */];\n\n const notificationOptions: NotificationOptions = {\n body,\n icon: NOTIFICATION_ICON_PATH,\n tag,\n data: obj,\n actions,\n badge: NOTIFICATION_BADGE_PATH,\n silent: obj.custom.silent === '1'\n };\n\n log('show notify', title, body, obj, notificationOptions);\n\n const notificationPromise = ctx.registration.showNotification(title, notificationOptions);\n\n return notificationPromise.catch((error) => {\n log.error('Show notification promise', error);\n });\n}\n\nexport function onPing(payload: ServicePushPingTaskPayload, source?: MessageEventSource) {\n lastPingTime = Date.now();\n localNotificationsAvailable = payload.localNotifications;\n\n if(pendingNotification && source) {\n serviceMessagePort.invokeVoid('pushClick', pendingNotification, source);\n pendingNotification = undefined;\n }\n\n if(payload.lang) {\n getter.set('push_lang', payload.lang);\n }\n\n if(payload.settings) {\n getter.set('push_settings', payload.settings);\n }\n}\n\nconst ignoreMessages: Set = new Set();\nexport function onShownNotification(payload: string) {\n ignoreMessages.add(payload);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Database} from '.';\nimport type {IDBIndex} from '../../lib/files/idb';\n\nconst DATABASE_STATE: Database<'session' | 'stickerSets' | 'users' | 'chats' | 'messages' | 'dialogs'> = {\n name: 'tweb',\n version: 7,\n stores: [{\n name: 'session'\n }, {\n name: 'stickerSets'\n }, {\n name: 'users'\n }, {\n name: 'chats'\n }, {\n name: 'dialogs'\n // indexes: [\n // ...(new Array(20 + 2).fill(0)).map((_, idx) => {\n // const name = `index_${idx}`;\n // const index: IDBIndex = {\n // indexName: name,\n // keyPath: name,\n // objectParameters: {}\n // };\n\n // return index\n // })\n // ]\n }, {\n name: 'messages'\n }]\n};\n\nexport default DATABASE_STATE;\n","export const NOTIFICATION_ICON_PATH = 'assets/img/logo_filled_rounded.png';\nexport const NOTIFICATION_BADGE_PATH = 'assets/img/logo_plain.svg'; // masked\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {WebPushApiManager} from '../mtproto/webPushApiManager';\nimport type {PushNotificationObject} from './push';\nimport type {MyUploadFile} from '../mtproto/apiFileManager';\nimport SuperMessagePort from '../mtproto/superMessagePort';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\n\nexport type ServicePushPingTaskPayload = {\n localNotifications: boolean,\n lang: {\n push_action_mute1d: string\n push_action_settings: string\n push_message_nopreview: string\n },\n settings: WebPushApiManager['settings']\n};\n\nexport type ServiceRequestFilePartTaskPayload = {\n docId: DocId,\n dcId: number,\n offset: number,\n limit: number\n};\n\nexport type ServiceDownloadTaskPayload = {\n headers: any,\n id: string\n};\n\nexport type ServiceEvent = {\n port: (payload: void, source: MessageEventSource, event: MessageEvent) => void\n};\n\nexport default class ServiceMessagePort extends SuperMessagePort<{\n // from main thread to service worker\n notificationsClear: () => void,\n toggleStorages: (payload: {enabled: boolean, clearWrite: boolean}) => void,\n pushPing: (payload: ServicePushPingTaskPayload, source: MessageEventSource, event: MessageEvent) => void,\n hello: (payload: void, source: MessageEventSource, event: MessageEvent) => void,\n shownNotification: (payload: string) => void,\n\n // from mtproto worker\n download: (payload: ServiceDownloadTaskPayload) => void,\n downloadChunk: (payload: {id: ServiceDownloadTaskPayload['id'], chunk: Uint8Array}) => void\n downloadFinalize: (payload: ServiceDownloadTaskPayload['id']) => void,\n downloadCancel: (payload: ServiceDownloadTaskPayload['id']) => void\n}, {\n // to main thread\n pushClick: (payload: PushNotificationObject) => void,\n hello: (payload: void, source: MessageEventSource) => void,\n share: (payload: ShareData) => void,\n\n // to mtproto worker\n requestFilePart: (payload: ServiceRequestFilePartTaskPayload) => Promise | MyUploadFile\n} & ServiceEvent, Master> {\n constructor() {\n super('SERVICE');\n\n MOUNT_CLASS_TO && (MOUNT_CLASS_TO.serviceMessagePort = this);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ServiceDownloadTaskPayload} from './serviceMessagePort';\nimport type ServiceMessagePort from './serviceMessagePort';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport makeError from '../../helpers/makeError';\nimport pause from '../../helpers/schedulers/pause';\n\ntype DownloadType = Uint8Array;\ntype DownloadItem = ServiceDownloadTaskPayload & {\n // transformStream: TransformStream,\n readableStream: ReadableStream,\n // writableStream: WritableStream,\n // writer: WritableStreamDefaultWriter,\n // controller: TransformStreamDefaultController,\n controller: ReadableStreamController,\n promise: CancellablePromise,\n // downloadPromise: Promise,\n used?: boolean\n};\nconst downloadMap: Map = new Map();\nconst DOWNLOAD_ERROR = makeError('UNKNOWN');\nconst DOWNLOAD_TEST = false;\n\n(self as any).downloadMap = downloadMap;\n\ntype A = Parameters['addMultipleEventsListeners']>[0];\n\nconst events: A = {\n download: (payload) => {\n const {id} = payload;\n if(downloadMap.has(id)) {\n return Promise.reject(DOWNLOAD_ERROR);\n }\n\n // const y = (20 * 1024 * 1024) / payload.limitPart;\n // const strategy = new ByteLengthQueuingStrategy({highWaterMark: y});\n // let controller: TransformStreamDefaultController;\n const strategy = new CountQueuingStrategy({highWaterMark: 1});\n // const transformStream = new TransformStream(/* {\n // start: (_controller) => controller = _controller,\n // }, */undefined, strategy, strategy);\n\n // const {readable, writable} = transformStream;\n // const writer = writable.getWriter();\n\n const promise = deferredPromise();\n promise.then(() => {\n setTimeout(() => {\n downloadMap.delete(id);\n }, 5e3);\n }, () => {\n downloadMap.delete(id);\n });\n\n // writer.closed.then(promise.resolve, promise.reject);\n\n let controller: ReadableStreamController;\n const readable = new ReadableStream({\n start: (_controller) => {\n controller = _controller;\n },\n\n cancel: (reason) => {\n promise.reject(DOWNLOAD_ERROR);\n }\n }, strategy);\n\n // writer.closed.catch(noop).finally(() => {\n // log.error('closed writer');\n // onEnd();\n // });\n\n // const downloadPromise = writer.closed.catch(() => {throw DOWNLOAD_ERROR;});\n const item: DownloadItem = {\n ...payload,\n // transformStream,\n readableStream: readable,\n // writableStream: writable,\n // writer,\n // downloadPromise,\n promise,\n controller\n };\n\n downloadMap.set(id, item);\n\n // return downloadPromise;\n return promise.catch(() => {throw DOWNLOAD_ERROR});\n },\n\n downloadChunk: ({id, chunk}) => {\n const item = downloadMap.get(id);\n if(!item) {\n return Promise.reject();\n }\n\n // return item.controller.enqueue(chunk);\n // return item.writer.write(chunk);\n // @ts-ignore\n return item.controller.enqueue(chunk);\n },\n\n downloadFinalize: (id) => {\n const item = downloadMap.get(id);\n if(!item) {\n return Promise.reject();\n }\n\n item.promise.resolve();\n // return item.controller.terminate();\n // return item.writer.close();\n return item.controller.close();\n },\n\n downloadCancel: (id) => {\n const item = downloadMap.get(id);\n if(!item) {\n return;\n }\n\n item.promise.reject();\n // return item.controller.error();\n // return item.writer.abort();\n return item.controller.error();\n }\n};\n\nexport default function handleDownload(serviceMessagePort: ServiceMessagePort) {\n serviceMessagePort.addMultipleEventsListeners(events);\n\n return {\n onDownloadFetch,\n onClosedWindows: cancelAllDownloads\n };\n}\n\nfunction onDownloadFetch(event: FetchEvent, params: string) {\n const promise = pause(100).then(() => {\n const item = downloadMap.get(params);\n if(!item || (item.used && !DOWNLOAD_TEST)) {\n return;\n }\n\n item.used = true;\n const stream = item.readableStream;\n const response = new Response(stream, {headers: item.headers});\n return response;\n });\n\n event.respondWith(promise);\n}\n\nfunction cancelAllDownloads() {\n if(downloadMap.size) {\n for(const [id, item] of downloadMap) {\n // item.writer.abort().catch(noop);\n item.controller.error();\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {log, serviceMessagePort} from './index.service';\n\nconst deferred: {[id: string]: ShareData[]} = {};\n\nfunction parseFormData(formData: FormData): ShareData {\n return {\n files: formData.getAll('files') as File[],\n title: formData.get('title') as string,\n text: formData.get('text') as string,\n url: formData.get('url') as string\n };\n}\n\nasync function processShareEvent(formData: FormData, clientId: string) {\n try {\n log('share data', formData);\n const data = parseFormData(formData);\n (deferred[clientId] ??= []).push(data);\n } catch(err) {\n log.warn('something wrong with the data', err);\n }\n};\n\nexport function checkWindowClientForDeferredShare(windowClient: WindowClient) {\n const arr = deferred[windowClient.id];\n if(!arr) {\n return;\n }\n\n delete deferred[windowClient.id];\n\n log('releasing share events to client:', windowClient.id, 'length:', arr.length);\n arr.forEach((data) => {\n serviceMessagePort.invokeVoid('share', data, windowClient);\n });\n}\n\nexport default function onShareFetch(event: FetchEvent, params: string) {\n const promise = event.request.formData()\n .then((formData) => {\n processShareEvent(formData, event.resultingClientId)\n return Response.redirect('..');\n });\n\n event.respondWith(promise);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n \n \n \n\nimport {logger, LogTypes} from '../logger';\nimport {CACHE_ASSETS_NAME, requestCache} from './cache';\nimport onStreamFetch from './stream';\nimport {closeAllNotifications, onPing, onShownNotification} from './push';\nimport CacheStorageController from '../files/cacheStorage';\nimport {IS_SAFARI} from '../../environment/userAgent';\nimport ServiceMessagePort from './serviceMessagePort';\nimport listenMessagePort from '../../helpers/listenMessagePort';\nimport {getWindowClients} from '../../helpers/context';\nimport {MessageSendPort} from '../mtproto/superMessagePort';\nimport handleDownload from './download';\nimport onShareFetch, {checkWindowClientForDeferredShare} from './share';\n\nexport const log = logger('SW', LogTypes.Error | LogTypes.Debug | LogTypes.Log | LogTypes.Warn, true);\nconst ctx = self as any as ServiceWorkerGlobalScope;\n\n \nlet _mtprotoMessagePort: MessagePort;\nexport const getMtprotoMessagePort = () => _mtprotoMessagePort;\n\nconst sendMessagePort = (source: MessageSendPort) => {\n const channel = new MessageChannel();\n serviceMessagePort.attachPort(_mtprotoMessagePort = channel.port1);\n serviceMessagePort.invokeVoid('port', undefined, source, [channel.port2]);\n};\n\nconst sendMessagePortIfNeeded = (source: MessageSendPort) => {\n if(!connectedWindows.size && !_mtprotoMessagePort) {\n log('sending message port for mtproto');\n sendMessagePort(source);\n }\n};\n\nconst onWindowConnected = (source: WindowClient) => {\n log('window connected', source.id, 'windows before', connectedWindows.size);\n\n if(source.frameType === 'none') {\n log.warn('maybe a bugged Safari starting window', source.id);\n return;\n }\n\n log('windows', Array.from(connectedWindows));\n serviceMessagePort.invokeVoid('hello', undefined, source);\n sendMessagePortIfNeeded(source);\n connectedWindows.set(source.id, source);\n\n checkWindowClientForDeferredShare(source);\n};\n\nexport const serviceMessagePort = new ServiceMessagePort();\nserviceMessagePort.addMultipleEventsListeners({\n notificationsClear: closeAllNotifications,\n\n toggleStorages: ({enabled, clearWrite}) => {\n CacheStorageController.toggleStorage(enabled, clearWrite);\n },\n\n pushPing: (payload, source) => {\n onPing(payload, source);\n },\n\n hello: (payload, source) => {\n onWindowConnected(source as any as WindowClient);\n },\n\n shownNotification: onShownNotification\n});\n\nconst {\n onDownloadFetch,\n onClosedWindows: onDownloadClosedWindows\n} = handleDownload(serviceMessagePort);\n\n// * service worker can be killed, so won't get 'hello' event\ngetWindowClients().then((windowClients) => {\n log(`got ${windowClients.length} windows from the start`);\n windowClients.forEach((windowClient) => {\n onWindowConnected(windowClient);\n });\n});\n\nconst connectedWindows: Map = new Map();\n(self as any).connectedWindows = connectedWindows;\nlistenMessagePort(serviceMessagePort, undefined, (source) => {\n log('something has disconnected', source);\n const isWindowClient = source instanceof WindowClient;\n if(!isWindowClient || !connectedWindows.has(source.id)) {\n log.warn('it is not a window');\n return;\n }\n\n connectedWindows.delete(source.id);\n log('window disconnected, left', connectedWindows.size);\n if(!connectedWindows.size) {\n log.warn('no windows left');\n\n if(_mtprotoMessagePort) {\n serviceMessagePort.detachPort(_mtprotoMessagePort);\n _mtprotoMessagePort = undefined;\n }\n\n onDownloadClosedWindows();\n }\n});\n \n\nconst onFetch = (event: FetchEvent): void => {\n \n if(\n !IS_SAFARI &&\n event.request.url.indexOf(location.origin + '/') === 0 &&\n event.request.url.match(/\\.(js|css|jpe?g|json|wasm|png|mp3|svg|tgs|ico|woff2?|ttf|webmanifest?)(?:\\?.*)?$/)\n ) {\n return event.respondWith(requestCache(event));\n }\n \n\n try {\n // const [, url, scope, params] = /http[:s]+\\/\\/.*?(\\/(.*?)(?:$|\\/(.*)$))/.exec(event.request.url) || [];\n const [scope, params] = event.request.url.split('/').slice(-2);\n\n // log.debug('[fetch]:', event);\n\n switch(scope) {\n case 'stream': {\n onStreamFetch(event, params);\n break;\n }\n\n case 'download': {\n onDownloadFetch(event, params);\n break;\n }\n\n case 'share': {\n onShareFetch(event, params);\n break;\n }\n\n case 'ping': {\n event.respondWith(new Response('pong'));\n break;\n }\n }\n } catch(err) {\n log.error('fetch error', err);\n event.respondWith(new Response('', {\n status: 500,\n statusText: 'Internal Server Error',\n headers: {'Cache-Control': 'no-cache'}\n }));\n }\n};\n\nconst onChangeState = () => {\n ctx.onfetch = onFetch;\n};\n\nctx.addEventListener('install', (event) => {\n log('installing');\n event.waitUntil(ctx.skipWaiting().then(() => log('skipped waiting'))); // Activate worker immediately\n});\n\nctx.addEventListener('activate', (event) => {\n log('activating', ctx);\n event.waitUntil(ctx.caches.delete(CACHE_ASSETS_NAME).then(() => log('cleared assets cache')));\n event.waitUntil(ctx.clients.claim().then(() => log('claimed clients')));\n});\n\n// ctx.onerror = (error) => {\n// log.error('error:', error);\n// };\n\n// ctx.onunhandledrejection = (error) => {\n// log.error('onunhandledrejection:', error);\n// };\n\nctx.onoffline = ctx.ononline = onChangeState;\n\nonChangeState();\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type SuperMessagePort from '../lib/mtproto/superMessagePort';\nimport ctx from '../environment/ctx';\n\nexport default function listenMessagePort(\n messagePort: SuperMessagePort,\n onConnect?: (source: MessageEventSource) => void,\n onDisconnect?: (source: MessageEventSource) => void\n) {\n const attachPort = (listenPort: any, sendPort: any) => {\n messagePort.attachListenPort(listenPort);\n sendPort && messagePort.attachSendPort(sendPort);\n onConnect?.(listenPort);\n };\n\n messagePort.setOnPortDisconnect(onDisconnect);\n\n if(typeof(SharedWorkerGlobalScope) !== 'undefined') {\n (ctx as any as SharedWorkerGlobalScope).addEventListener('connect', (e) => attachPort(e.source, e.source));\n } else if(typeof(ServiceWorkerGlobalScope) !== 'undefined') {\n attachPort(ctx, null);\n } else {\n attachPort(ctx, ctx);\n }\n}\n","export default function timeout(delay: number): Promise {\n return new Promise(((resolve) => {\n setTimeout(() => {\n resolve(new Response('', {\n status: 408,\n statusText: 'Request timed out.'\n }));\n }, delay);\n }));\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n// the startup function\n__webpack_require__.x = () => {\n\t// Load entry module and return exports\n\t// This entry module depends on other loaded chunks and execution need to be delayed\n\tvar __webpack_exports__ = __webpack_require__.O(undefined, [85], () => (__webpack_require__(6350)))\n\t__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n\treturn __webpack_exports__;\n};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + chunkId + \".\" + \"887945ef5f43bc205112\" + \".bundle.js\";\n};","// This function allow to reference async chunks and sibling chunks for the entrypoint\n__webpack_require__.miniCssF = (chunkId) => {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","(() => {\n if (typeof __webpack_require__ !== 'undefined') {\n var oldGetScript = __webpack_require__.u;\n var oldLoadScript = __webpack_require__.e;\n var queryMap = {};\n var countMap = {};\n var getRetryDelay = function () {\n return 3000;\n };\n __webpack_require__.u = function (chunkId) {\n var result = oldGetScript(chunkId);\n return (\n result +\n (queryMap.hasOwnProperty(chunkId) ? '?' + queryMap[chunkId] : '')\n );\n };\n __webpack_require__.e = function (chunkId) {\n var result = oldLoadScript(chunkId);\n return result.catch(function (error) {\n var retries = countMap.hasOwnProperty(chunkId)\n ? countMap[chunkId]\n : 999999;\n if (retries < 1) {\n var realSrc = oldGetScript(chunkId);\n error.message =\n 'Loading chunk ' +\n chunkId +\n ' failed after 999999 retries.\\n(' +\n realSrc +\n ')';\n error.request = realSrc;\n throw error;\n }\n return new Promise(function (resolve) {\n var retryAttempt = 999999 - retries + 1;\n setTimeout(function () {\n var retryAttemptString = '&retry-attempt=' + retryAttempt;\n var cacheBust = (function () {\n return Date.now();\n })();\n +retryAttemptString;\n queryMap[chunkId] = cacheBust;\n countMap[chunkId] = retries - 1;\n resolve(__webpack_require__.e(chunkId));\n }, getRetryDelay(retryAttempt));\n });\n });\n };\n }\n})();\n","// no baseURI\n\n// object to store loaded chunks\n// \"1\" means \"already loaded\"\nvar installedChunks = {\n\t670: 1\n};\n\n// importScripts chunk loading\nvar installChunk = (data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\tfor(var moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) runtime(__webpack_require__);\n\twhile(chunkIds.length)\n\t\tinstalledChunks[chunkIds.pop()] = 1;\n\tparentChunkLoadingFunction(data);\n};\n__webpack_require__.f.i = (chunkId, promises) => {\n\t// \"1\" is the signal for \"already loaded\"\n\tif(!installedChunks[chunkId]) {\n\t\tif(true) { // all chunks have JS\n\t\t\timportScripts(__webpack_require__.p + __webpack_require__.u(chunkId));\n\t\t}\n\t}\n};\n\nvar chunkLoadingGlobal = this[\"webpackChunktweb\"] = this[\"webpackChunktweb\"] || [];\nvar parentChunkLoadingFunction = chunkLoadingGlobal.push.bind(chunkLoadingGlobal);\nchunkLoadingGlobal.push = installChunk;\n\n// no HMR\n\n// no HMR manifest","// run startup\nvar __webpack_exports__ = __webpack_require__.x();\n"],"names":["deferred","next","DEBUG","MOUNT_CLASS_TO","window","self","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","match","IS_FIREFOX","undefined","IS_SERVICE_WORKER","ServiceWorkerGlobalScope","IS_WEB_WORKER","WorkerGlobalScope","IS_WORKER","getWindowClients","clients","matchAll","includeUncontrolled","type","postMessage","listener","args","err","console","error","notifyServiceWorker","all","then","listeners","length","slice","forEach","bind","LogTypes","LOG_LEVELS","None","Error","Warn","Log","Debug","STYLES_SUPPORTED","LOGGER_STYLES","methods","logger","prefix","ignoreDebugReset","style","originalPrefix","originalStyle","log","method","logType","setPrefix","newPrefix","setLevel","level","reduce","acc","v","bindPrefix","pause","ms","Promise","resolve","setTimeout","ctx","CACHE_ASSETS_NAME","isCorrectResponse","response","ok","status","timeoutRace","promise","race","reject","noop","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","callback","addNotifyListener","push","value","catch","finally","cancel","Object","assign","blobConstruct","blobParts","mimeType","Array","isArray","safeMimeType","blobSafeMimeType","Blob","MemoryWriter","constructor","size","saveFileCallback","this","bytes","Uint8Array","write","part","offset","endOffset","byteLength","newBytes","set","truncate","trim","finalize","saveToStorage","blob","getParts","replaceParts","parts","CacheStorageController","dbName","useStorage","STORAGES","openDatabase","openDbPromise","caches","open","delete","entryName","timeoutOperation","cache","deleteAll","get","save","put","getFile","fileName","makeError","saveFile","Response","headers","rejected","timeout","res","clearTimeout","prepareWriting","fileSize","getWriter","static","enabled","clearWrite","map","storage","deferredPromises","Map","cacheStorage","CHUNK_CACHED_TIME_HEADER","setInterval","keys","requests","filtered","timestamp","Date","now","request","url","has","promises","id","ignoreSearch","ignoreVary","mtprotoMessagePort","getMtprotoMessagePort","messagePort","taskId","streams","Stream","info","loadedOffsets","Set","destroy","getId","limitPart","STREAM_CHUNK_UPPER_LIMIT","STREAM_CHUNK_MIDDLE_LIMIT","destroyDebounced","fn","shouldRunFirst","shouldRunLast","waitingTimeout","waitingPromise","hadNewCall","invoke","_resolve","_reject","apply","debounce","_waitingTimeout","isDebounced","requestFilePartFromWorker","alignedOffset","limit","fromPreload","payload","docId","dcId","JSON","stringify","uploadFile","add","serviceMessagePort","bytesPromise","saveChunkToCache","preloadChunks","requestFilePartFromCache","key","getChunkKey","reader","FileReader","addEventListener","e","target","result","readBlobAs","readBlobAsArrayBuffer","buffer","readBlobAsUint8Array","requestFilePart","preloadChunk","end","alignOffset","requestRange","range","possibleResponse","statusText","responseForSafariFirstRange","Math","ceil","alignLimit","min","ab","location","base","deepEqual","x","y","tx","every","IDB","db","object","fromObject","i","safeAssign","name","storageIsAvailable","join","INSTANCES","isAvailable","createNew","createIndexes","os","store","indexNames","from","indexName","deleteIndex","indexes","index","contains","createIndex","keyPath","objectParameters","indexedDB","version","message","finished","onerror","onsuccess","event","calledNew","onclose","onabort","transaction","close","onversionchange","onupgradeneeded","warn","oldVersion","newVersion","stores","objectStoreNames","objectStore","createObjectStore","find","instance","preserve","IDBStorage","storeName","idb","create","concat","getObjectStore","clear","idx","mode","perf","performance","onError","onComplete","results","r","waitForTransactionComplete","oncomplete","callbackResult","left","onRequestFinished","getAll","defaultBaseUrl","protocol","hostname","pathname","split","lastPingTime","localNotificationsAvailable","defaults","push_mute_until","push_lang","push_message_nopreview","push_action_mute1d","push_action_settings","push_settings","getter","getDefault","hasOwnProperty","getCached","obj","data","json","muteUntil","settings","lang","nowTime","userInvisibleIsSupported","notificationPromise","peerId","title","body","description","custom","channel_id","chat_id","from_id","tag","messageKey","msg_id","ignoreMessages","nopreview","notificationOptions","icon","actions","action","badge","silent","registration","showNotification","fireNotification","waitUntil","closeAllNotifications","notification","clientList","pendingNotification","client","focus","invokeVoid","openWindow","baseUrl","notifications","getNotifications","len","ServiceMessagePort","super","downloadMap","DOWNLOAD_ERROR","events","download","strategy","CountQueuingStrategy","highWaterMark","controller","readable","ReadableStream","start","_controller","reason","item","readableStream","downloadChunk","chunk","enqueue","downloadFinalize","downloadCancel","onDownloadFetch","params","used","stream","respondWith","cancelAllDownloads","onShareFetch","formData","clientId","files","text","parseFormData","processShareEvent","resultingClientId","redirect","_mtprotoMessagePort","onWindowConnected","source","connectedWindows","frameType","channel","MessageChannel","attachPort","port1","port2","sendMessagePort","sendMessagePortIfNeeded","windowClient","arr","checkWindowClientForDeferredShare","addMultipleEventsListeners","notificationsClear","toggleStorages","toggleStorage","pushPing","localNotifications","onPing","hello","shownNotification","onClosedWindows","onDownloadClosedWindows","handleDownload","windowClients","onConnect","onDisconnect","listenPort","sendPort","attachListenPort","attachSendPort","setOnPortDisconnect","WindowClient","detachPort","listenMessagePort","onFetch","origin","file","fetch","clone","replace","random","requestCache","scope","header","chunks","ranges","parseRange","parse","decodeURIComponent","onStreamFetch","onChangeState","onfetch","skipWaiting","claim","onoffline","ononline","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","m","__webpack_exports__","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","j","splice","d","definition","o","defineProperty","enumerable","f","chunkId","u","miniCssF","g","globalThis","Function","prop","prototype","call","scriptUrl","importScripts","document","currentScript","src","scripts","getElementsByTagName","p","oldGetScript","oldLoadScript","queryMap","countMap","retries","realSrc","cacheBust","installedChunks","chunkLoadingGlobal","parentChunkLoadingFunction","moreModules","runtime","pop"],"sourceRoot":""} \ No newline at end of file diff --git a/public/version b/public/version index ddc2db73..166999ba 100644 --- a/public/version +++ b/public/version @@ -1 +1 @@ -1.7.3 (307) \ No newline at end of file +1.7.3 (308) \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 58f7e5b7..a3fd9f31 100644 --- a/src/index.ts +++ b/src/index.ts @@ -283,7 +283,7 @@ document.addEventListener('DOMContentLoaded', async() => { const hash = location.hash; const splitted = hash.split('?'); - const params = parseUriParamsLine(splitted[1] ?? splitted[0]); + const params = parseUriParamsLine(splitted[1] ?? splitted[0].slice(1)); if(params.tgWebAuthToken && authState._ !== 'authStateSignedIn') { const data: AuthState.signImport['data'] = { token: params.tgWebAuthToken,