tweb/public/mtproto.worker.adee7968d7e3fd74e9b4.bundle.worker.js.map
Eduard Kuzmenko 14597933ba Build
2021-06-14 16:53:09 +03:00

1 line
988 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/helpers/bytes.ts","webpack:///./src/vendor/leemon.ts","webpack:///./src/config/debug.ts","webpack:///./src/lib/crypto/cryptoworker.ts","webpack:///./src/lib/crypto/crypto_methods.ts","webpack:///./src/lib/logger.ts","webpack:///./src/config/modes.ts","webpack:///./src/helpers/random.ts","webpack:///./src/lib/mtproto/bin_utils.ts","webpack:///./src/lib/crypto/crypto_utils.ts","webpack:///./node_modules/@cryptography/aes/dist/es/aes.js","webpack:///./node_modules/pako/dist/pako_inflate.min.js","webpack:///./src/lib/polyfill.ts","webpack:///./src/config/databases/session.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/schedulers.ts","webpack:///./src/helpers/blob.ts","webpack:///./src/lib/idb.ts","webpack:///./src/helpers/object.ts","webpack:///./src/lib/storage.ts","webpack:///./src/lib/sessionStorage.ts","webpack:///./src/lib/mtproto/schema.ts","webpack:///./src/lib/mtproto/tl_utils.ts","webpack:///./src/lib/mtproto/timeManager.ts","webpack:///./src/config/app.ts","webpack:///./src/lib/mtproto/networker.ts","webpack:///./src/helpers/array.ts","webpack:///./src/lib/mtproto/networkerFactory.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/lib/mtproto/transports/websocket.ts","webpack:///./src/lib/mtproto/transports/obfuscation.ts","webpack:///./src/lib/mtproto/transports/intermediate.ts","webpack:///./src/lib/mtproto/transports/tcpObfuscated.ts","webpack:///./src/helpers/userAgent.ts","webpack:///./src/helpers/context.ts","webpack:///./src/lib/mtproto/dcConfigurator.ts","webpack:///./src/lib/mtproto/rsaKeysManager.ts","webpack:///./src/lib/mtproto/authorizer.ts","webpack:///./src/lib/mtproto/apiManager.ts","webpack:///./src/lib/filemanager.ts","webpack:///./src/lib/cacheStorage.ts","webpack:///./src/lib/mtproto/apiFileManager.ts","webpack:///./src/helpers/fileName.ts","webpack:///./src/lib/mtproto/mtproto.worker.ts"],"names":["self","chunkIds","moreModules","moduleId","modules","length","installedChunks","pop","installedModules","0","__webpack_require__","exports","module","i","l","call","e","chunkId","promises","push","Promise","resolve","then","importScripts","p","all","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","s","bytesToHex","bytes","arr","toString","join","bytesFromHex","hexString","len","start","parseInt","charAt","substr","bytesCmp","bytes1","bytes2","bytesXor","convertToArrayBuffer","ArrayBuffer","undefined","buffer","byteLength","BYTES_PER_ELEMENT","Uint8Array","convertToUint8Array","TextEncoder","encode","bytesFromArrayBuffer","byteView","bufferConcat","buffer1","buffer2","l1","l2","tmp","set","bufferConcats","args","forEach","b","lastLength","bytesFromWordss","input","bytesToWordss","words","Uint32Array","radix","bpe","mask","digitsStr","k","buff","one","int2bigInt","Array","ss","s0","s3","s4","s5","s6","s7","sa","eg_u","eg_A","eg_B","eg_C","eg_D","bitSize","x","j","z","w","expand","ans","copy_","mod","dup","mod_","trim","mult","y","mult_","powMod","powMod_","pow","sub","sub_","add","add_","inverseModInt","a","Math","floor","eGCD_","v","g","max","halve_","copyInt_","greater","equalsInt","negative","multInt_","leftShift_","greaterShift","shift","kx","ky","divide_","q","y1","y2","subShift_","linCombShift_","addShift_","rightShift_","modInt","bits","minSize","ceil","str2bigInt","base","kk","indexOf","substring","addInt_","equals","isZero","bigInt2str","divInt_","bigInt2bytes","littleEndian","out","reverse","cmp","ys","multMod_","squareMod_","k1","k2","kn","np","mont_","ui","ks","DEBUG","debug","MOUNT_CLASS_TO","window","cryptoWorker","this","performTaskWorker","salt","iterations","keyBytes","ivBytes","encryptedBytes","publicKey","password","state","isNew","super","webWorker","taskId","awaiting","pending","utils","console","log","assign","sha1HashSync","sha256HashSync","hash_pbkdf2","aesEncryptSync","aesDecryptSync","rsaEncrypt","pqPrimeFactorization","bytesModPow","gzipUncompress","srp","computeSRP","task","CryptoWorker","LogTypes","LOG_LEVELS","None","Error","Warn","Log","Debug","_logTimer","Date","now","dT","toFixed","logger","prefix","type","warn","info","error","trace","setPrefix","_prefix","setLevel","level","slice","reduce","acc","Modes","test","location","search","http","ssl","multipleConnections","asServiceWorker","nextRandomInt","maxValue","random","isObject","longFromInts","high","low","bigInt","sortLongsArray","map","long","sort","addPadding","blockSize","zeroes","full","prepend","needPadding","padding","concat","subtle","crypto","longToBytes","sLong","digest","encrypt","decryptedBytes","decrypt","N","modulus","E","exponent","X","encryptedBigInt","importKey","deriveKey","hash","deriveBits","pqBytes","result","pqPrimeLeemon","what","lim","P","Q","minLen","it","xBigInt","yBigInt","mBigInt","resBigInt","inflate","to","S","Si","T1","T2","T3","T4","T5","T6","T7","T8","getWords","buf","pos","str","charCodeAt","xor","left","right","x2","x4","tEnc","tDec","xInv","computeTables","AES","_key","encKey","decKey","rcon","_message","a2","b2","c2","message","rounds","AES_IGE","iv","cipher","text","cipherText","prevX","subarray","prevY","yXOR","counter","offset","incrementCounter","carry","f","h","u","_","R","A","next_in","avail_in","next_out","output","avail_out","dmax","wsize","whave","wnext","hold","lencode","distcode","lenbits","distbits","msg","sane","Uint16Array","Z","O","U","T","D","I","B","C","F","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","last","wrap","havedict","flags","check","total","head","wbits","extra","ncode","nlen","ndist","have","next","lens","work","lendyn","distdyn","back","was","total_in","total_out","adler","Int32Array","L","M","H","K","Y","G","W","done","time","xflags","os","extra_len","String","fromCharCode","comment","hcrc","data_type","apply","2","1","J","V","$","ee","te","ie","ne","options","arguments","TypeError","chunkSize","windowBits","raw","err","ended","chunks","strm","header","dictionary","ae","onEnd","onData","re","se","oe","le","de","fe","Inflate","inflateRaw","ungzip","constants","default","configurable","randomize","toJSON","findAndSplice","verify","index","findIndex","splice","toHHMMSS","leadZero","sec_num","hours","minutes","seconds","finally","fn","onFinally","callback","reason","reject","version","stores","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","listeners","addNotifyListener","deferred","cancel","throttle","ms","shouldRunFirst","isPending","interval","_args","setInterval","clearInterval","blobConstruct","blobParts","mimeType","blob","safeMimeType","blobSafeMimeType","Blob","bb","BlobBuilder","blobPart","append","getBlob","db","storeName","storageIsAvailable","fromObject","safeAssign","openDatabase","STORAGES","storage","onclose","close","closeDatabases","storages","from","Set","dbName","deleteRequest","indexedDB","deleteDatabase","onerror","onsuccess","createNew","openDbPromise","request","open","finished","setTimeout","event","calledNew","onabort","transaction","target","onversionchange","onupgradeneeded","oldVersion","newVersion","store","objectStoreNames","contains","createObjectStore","indexes","createIndex","indexName","keyPath","objectParameters","entryName","isArray","getObjectStore","objectStore","delete","clear","idx","put","fileName","save","perf","performance","clearTimeout","timeout","oncomplete","results","requests","getAll","noop","cache","useStorage","getPromises","Map","keysToSet","saveDeferred","keysToDelete","deleteDeferred","saveThrottled","size","keys","values","postMessage","payload","deleteThrottled","getThrottled","includes","useCache","getFromCache","catch","obj","onlyLocal","setToCache","saveLocal","deleteAll","enabled","localStorage","setItem","JSON","stringify","sessionStorage","appStorage","boolFalse","API","constructors","find","predicate","id","boolTrue","vector","gzipPacked","MTProto","maxLength","mtproto","startMaxLength","createBuffer","intView","resultBuffer","resultInt32","getArray","typed","resultArray","needBytes","previousBuffer","previousArray","field","checkLength","writeInt","iHigh","iLow","storeLongP","storeIntBytes","Float64Array","sUTF8","unescape","encodeURIComponent","methodName","params","methodData","methods","method","storeInt","pFlags","flagsOffsets","param","condType","split","fieldBit","storeObject","paramName","storeLong","storeString","storeBytes","storeDouble","storeBool","itemType","toLowerCase","schema","isBare","constructorData","override","hex","readInt","doubleView","fetchObject","decodeURIComponent","escape","fetchInt","fetchLong","fetchIntBytes","fetchString","fetchBytes","fetchDouble","fetchBool","constructor","constructorCmp","compressed","uncompressed","fallback","checkType","constructorsIndex","schemaFallback","int1","int2","overrideKey","isCond","TLDeserialization","TLSerialization","timeManager","lastMessageId","timeOffset","timeTicks","messageId","serverTime","localTime","newTimeOffset","changed","abs","server_time_offset","App","langPackVersion","langPack","langPackCode","domains","baseDcId","isMainDomain","hostname","suffix","invokeAfterMsgConstructor","dcId","authKey","authKeyId","serverSalt","transport","lastServerMessages","sentMessages","pendingMessages","pendingAcks","pendingResends","connectionInited","nextReq","seqNo","lastResendReq","isOnline","lastResponseTime","authKeyUint8","isFileUpload","fileUpload","isFileDownload","fileDownload","isFileNetworker","updateSession","networker","connected","setConnectionStatus","prevSessionId","sessionId","sentMessageId","sentMessage","container","array","forEachReverse","inner","innerSentMessageId","innerSentMessage","updateSentMessage","msg_id","generateId","seq_no","generateSeqNo","notContentRelated","serializer","storeMethod","body","getBytes","pushMessage","invokeWithLayer","layer","initConnection","navigator","userAgent","platform","language","afterMessageId","resultType","isAPI","promise","noSchedule","scheduleRequest","noResponse","online","willChange","onConnectionStatusChange","delay","innerMsgId","acked","dataWithPadding","isOut","msgKeyLargePlain","msgKeyLarge","sha256Hash","msgKey","sha2aText","sha2bText","aesKey","aesIv","sha2a","sha2b","akStopped","isStopped","ackMsgIds","wrapMtpMessage","msg_ids","resendMsgIds","resendOpts","req_msg_id","resend_msg_ids","outMessage","messages","messagesByteLen","lengthOverflow","messageByteLength","generateContainerMessage","messageWithBody","sendEncryptedRequest","cleanupSent","innerMessages","storeRawBytes","getMsgKey","keyIv","getAesKeyIv","aesEncrypt","encryptedData","aesDecrypt","data","dataBuffer","getBuffer","paddingLength","getEncryptedMessage","encryptedResult","getEncryptedOutput","requestData","send","responseBuffer","deserializer","fetchRawBytes","getOffset","getDecryptedMessage","calcMsgKey","totalLength","messageBodyLength","messageBody","mt_message","seqno","stack","mt_rpc_result","response","newServerSalt","nextReqTimeout","cb","performScheduledRequest","msgId","notEmpty","rawError","matches","error_message","match","error_code","code","description","originalError","pushResend","innerMessage","processMessage","applyServerSalt","new_server_salt","bad_msg_id","ackMessage","changedOffset","applyServerTime","badMessage","processMessageAck","first_msg_id","server_salt","updatesProcessor","answer_msg_id","reqResendMessage","badMsgId","processError","networkers","authKeyID","stoppedNetworkers","filter","EventListenerBase","reuseResults","_constructor","listenerResults","once","addEventListener","listener","removeEventListener","url","logSuffix","handleOpen","dispatchEvent","handleError","handleClose","removeListeners","handleMessage","ws","logTypes","connect","WebSocket","binaryType","Counter","initialValue","_counter","_remainingCounter","_remainingCounterIndex","_aes","encrypted","increment","Obfuscation","codec","initPayload","val","val2","reversedPayload","encIv","decIv","encNew","decNew","obfuscateTag","update","tag","Connection","retryTimeout","intermediate","obfuscation","onOpen","init","connection","resend","encoded","encodeBody","releasePending","onMessage","decode","readPacket","parseResponse","onClose","diff","lastCloseTime","needTimeout","isNaN","bodySent","toEncode","encodePacket","ctx","vendor","isSafari","maxTouchPoints","MSStream","isWebWorker","WorkerGlobalScope","isServiceWorker","ServiceWorkerGlobalScope","notifyServiceWorker","clients","matchAll","includeUncontrolled","notifyWorker","notifySomeone","socketId","TEST_SUFFIX","socketsProxied","sslSubdomains","dcOptions","host","port","chosenServers","transportSocket","connectionType","subdomain","transportType","reuse","client","download","upload","servers","transports","publisKeysHex","publicKeysParsed","prepared","preparePromise","keyParsed","RSAPublicKey","sha1Hash","fingerprintBytes","fingerprints","fingerprintHex","foundKey","prepare","fill","fingerprint","cached","requestArray","requestLength","headerArray","dcConfigurator","chooseServer","baseError","auth_key_id","msg_len","auth","nonce","rsaKeysManager","mtpSendPlainRequest","serverNonce","server_nonce","pq","server_public_key_fingerprints","select","pAndQ","factorize","mtpSendReqDhParams","newNonce","p_q_inner_data","new_nonce","uint8Data","dataWithHash","rsaEncrypted","req_DH_params","public_key_fingerprint","encrypted_data","requestBytes","newNonceHash","new_nonce_hash","mtpDecryptServerDhDataAnswer","encrypted_answer","mtpSendSetClientDhParams","encryptedAnswer","tmpAesKey","tmpAesIv","answerWithHash","answerWithPadding","dhPrime","dh_prime","gA","g_a","server_time","retry","mtpVerifyDhParams","dhPrimeHex","_gABigInt","_dhPrimeBigInt","_two","_twoPow","gBytes","gB","modPow","retry_id","g_b","authKeyHash","authKeyAux","newNonceHash1","new_nonce_hash1","newNonceHash2","new_nonce_hash2","newNonceHash3","new_nonce_hash3","mtpSendReqPQ","apiManager","cachedNetworkers","cachedExportPromise","gettingNetworkers","afterMessageTempIds","setBaseDcId","userAuth","dcID","getBaseDcId","user_auth","dc","storageKeys","storageResult","logoutPromises","invokeApi","ignoreErrors","handled","maxNetworkers","found","unshift","getKey","ak","authKeyHex","serverSaltHex","networkerFactory","getNetworker","authorizer","storeObj","afterMessageIdTemp","startTime","cachedNetworker","rejectPromise","logOut","noErrorBox","performRequest","wrapApiCall","prepareTempMessageId","exportResolve","exportReject","dc_id","exportedAuth","newDcId","stopTime","waitTime","min","floodMaxTimeout","blobSupported","fileWriter","fileReader","FileReader","onload","arrayBuffer","write","readAsArrayBuffer","saveFileCallback","part","truncate","finalize","saveToStorage","caches","timeoutOperation","Response","headers","rejected","res","fakeWriter","getFakeFileWriter","saveFile","apiFileManager","cacheStorage","cachedDownloadPromises","uploadPromises","downloadPulls","downloadActives","webpConvertPromises","tempId","queueId","uncompressTGS","convertWebp","convertPromise","activeDelta","downloadPull","downloadCheck","canceled","limit","checkCancel","downloadRequest","getDelta","isAvailable","process","isWebpSupported","ext","thumb_size","Boolean","photo_id","big","stickerset","short_name","emoticon","thumb_version","volume_id","local_id","getFileNameByLocation","cachedPromise","fileStorage","getFileStorage","deleteFile","downloadFile","cacheFileWriter","resolved","errorHandler","getFile","getFileWriter","limitPart","getLimitPart","writeFileDeferred","writeFilePromise","processDownloaded","delayed","superpuper","requestFilePart","isFinal","processedResult","Infinity","progress","file","fileSize","isBigFile","doneParts","partSize","totalParts","fileId","_part","resultInputFile","parts","md5_checksum","details","uploadResolve","uploadReject","reader","onloadend","readyState","DONE","file_id","file_part","file_total_parts","generator","webpSupported","setUpdatesProcessor","status","responseTask","originalPayload","socketTask","socketProxied","toggleStorage"],"mappings":"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","file":"mtproto.worker.adee7968d7e3fd74e9b4.bundle.worker.js","sourcesContent":[" \tself[\"webpackChunk\"] = function webpackChunkCallback(chunkIds, moreModules) {\n \t\tfor(var moduleId in moreModules) {\n \t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t}\n \t\twhile(chunkIds.length)\n \t\t\tinstalledChunks[chunkIds.pop()] = 1;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded chunks\n \t// \"1\" means \"already loaded\"\n \tvar installedChunks = {\n \t\t0: 1\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n \t\tpromises.push(Promise.resolve().then(function() {\n \t\t\t// \"1\" is the signal for \"already loaded\"\n \t\t\tif(!installedChunks[chunkId]) {\n \t\t\t\timportScripts(__webpack_require__.p + \"\" + ({}[chunkId]||chunkId) + \".\" + {\"1\":\"726f909dcf7aac6d7720\"}[chunkId] + \".chunk.worker.js\");\n \t\t\t}\n \t\t}));\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function bytesToHex(bytes: ArrayLike<number>) {\r\n bytes = bytes || [];\r\n let arr: string[] = [];\r\n for(let i = 0; i < bytes.length; ++i) {\r\n arr.push((bytes[i] < 16 ? '0' : '') + (bytes[i] || 0).toString(16));\r\n }\r\n return arr.join('');\r\n}\r\n\r\nexport function bytesFromHex(hexString: string) {\r\n const len = hexString.length;\r\n let start = 0;\r\n let bytes: number[] = [];\r\n\r\n if(len % 2) { // read 0x581 as 0x0581\r\n bytes.push(parseInt(hexString.charAt(0), 16));\r\n ++start;\r\n }\r\n\r\n for(let i = start; i < len; i += 2) {\r\n bytes.push(parseInt(hexString.substr(i, 2), 16));\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bytesToBase64(bytes: number[] | Uint8Array) {\r\n let mod3: number;\r\n let result = '';\r\n\r\n for(let nLen = bytes.length, nUint24 = 0, nIdx = 0; nIdx < nLen; ++nIdx) {\r\n mod3 = nIdx % 3;\r\n nUint24 |= bytes[nIdx] << (16 >>> mod3 & 24);\r\n if(mod3 === 2 || nLen - nIdx === 1) {\r\n result += String.fromCharCode(\r\n uint6ToBase64(nUint24 >>> 18 & 63),\r\n uint6ToBase64(nUint24 >>> 12 & 63),\r\n uint6ToBase64(nUint24 >>> 6 & 63),\r\n uint6ToBase64(nUint24 & 63)\r\n );\r\n nUint24 = 0;\r\n }\r\n }\r\n\r\n return result.replace(/A(?=A$|$)/g, '=');\r\n}\r\n\r\nexport function uint6ToBase64(nUint6: number) {\r\n return nUint6 < 26\r\n ? nUint6 + 65\r\n : nUint6 < 52\r\n ? nUint6 + 71\r\n : nUint6 < 62\r\n ? nUint6 - 4\r\n : nUint6 === 62\r\n ? 43\r\n : nUint6 === 63\r\n ? 47\r\n : 65\r\n}\r\n\r\nexport function bytesCmp(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\r\n const len = bytes1.length;\r\n if(len !== bytes2.length) {\r\n return false;\r\n }\r\n\r\n for(let i = 0; i < len; ++i) {\r\n if(bytes1[i] !== bytes2[i]) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nexport function bytesXor(bytes1: number[] | Uint8Array, bytes2: number[] | Uint8Array) {\r\n const len = bytes1.length;\r\n const bytes: number[] = [];\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = bytes1[i] ^ bytes2[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bytesToArrayBuffer(b: number[]) {\r\n return (new Uint8Array(b)).buffer;\r\n}\r\n\r\nexport function convertToArrayBuffer(bytes: any | ArrayBuffer | Uint8Array) {\r\n // Be careful with converting subarrays!!\r\n if(bytes instanceof ArrayBuffer) {\r\n return bytes;\r\n }\r\n if(bytes.buffer !== undefined &&\r\n bytes.buffer.byteLength === bytes.length * bytes.BYTES_PER_ELEMENT) {\r\n return bytes.buffer;\r\n }\r\n return bytesToArrayBuffer(bytes);\r\n}\r\n\r\nexport function convertToUint8Array(bytes: Uint8Array | ArrayBuffer | number[] | string): Uint8Array {\r\n if((bytes as Uint8Array).buffer !== undefined) {\r\n return bytes as Uint8Array;\r\n } else if(typeof(bytes) === 'string') {\r\n return new TextEncoder().encode(bytes);\r\n }\r\n\r\n return new Uint8Array(bytes);\r\n}\r\n\r\nexport function bytesFromArrayBuffer(buffer: ArrayBuffer) {\r\n const len = buffer.byteLength;\r\n const byteView = new Uint8Array(buffer);\r\n const bytes: number[] = [];\r\n\r\n for(let i = 0; i < len; ++i) {\r\n bytes[i] = byteView[i];\r\n }\r\n\r\n return bytes;\r\n}\r\n\r\nexport function bufferConcat(buffer1: any, buffer2: any) {\r\n const l1 = buffer1.byteLength || buffer1.length;\r\n const l2 = buffer2.byteLength || buffer2.length;\r\n const tmp = new Uint8Array(l1 + l2);\r\n tmp.set(buffer1 instanceof ArrayBuffer ? new Uint8Array(buffer1) : buffer1, 0);\r\n tmp.set(buffer2 instanceof ArrayBuffer ? new Uint8Array(buffer2) : buffer2, l1);\r\n\r\n return tmp.buffer;\r\n}\r\n\r\nexport function bufferConcats(...args: any[]) {\r\n let length = 0;\r\n args.forEach(b => length += b.byteLength || b.length);\r\n\r\n const tmp = new Uint8Array(length);\r\n \r\n let lastLength = 0;\r\n args.forEach(b => {\r\n tmp.set(b instanceof ArrayBuffer ? new Uint8Array(b) : b, lastLength);\r\n lastLength += b.byteLength || b.length;\r\n });\r\n\r\n return tmp/* .buffer */;\r\n}\r\n\r\nexport function bytesFromWordss(input: Uint32Array) {\r\n const o: number[] = [];\r\n for(let i = 0, length = input.length * 4; i < length; ++i) {\r\n o.push((input[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff);\r\n }\r\n\r\n return o;\r\n}\r\n\r\nexport function bytesToWordss(input: ArrayBuffer | Uint8Array) {\r\n let bytes: Uint8Array;\r\n if(input instanceof ArrayBuffer) bytes = new Uint8Array(input);\r\n else bytes = input;\r\n\r\n const words: number[] = [];\r\n for(let i = 0, len = bytes.length; i < len; ++i) {\r\n words[i >>> 2] |= bytes[i] << (24 - (i % 4) * 8);\r\n }\r\n\r\n return new Uint32Array(words);\r\n}\r\n\r\n// * https://stackoverflow.com/a/52827031\r\n/* export const isBigEndian = (() => {\r\n const array = new Uint8Array(4);\r\n const view = new Uint32Array(array.buffer);\r\n return !((view[0] = 1) & array[0]);\r\n})(); */\r\n","'use strict'\r\n//@flow\r\n\r\n/** * * * * * * * * * *\r\n * Big Integer Library *\r\n * Created 2000 *\r\n * Leemon Baird *\r\n * www.leemon.com *\r\n * * * * * * * * * * * */\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n// These functions are designed to avoid frequent dynamic memory allocation in the inner loop.\r\n// For most functions, if it needs a BigInt as a local variable it will actually use\r\n// a global, and will only allocate to it only when it's not the right size. This ensures\r\n// that when a function is called repeatedly with same-sized parameters, it only allocates\r\n// memory on the first call.\r\n//\r\n// Note that for cryptographic purposes, the calls to Math.random() must\r\n// be replaced with calls to a better pseudorandom number generator.\r\n//\r\n// In the following, \"bigInt\" means a bigInt with at least one leading zero element,\r\n// and \"integer\" means a nonnegative integer less than radix. In some cases, integer\r\n// can be negative. Negative bigInts are 2s complement.\r\n//\r\n// The following functions do not modify their inputs.\r\n// Those returning a bigInt, string, or Array will dynamically allocate memory for that value.\r\n// Those returning a boolean will return the integer 0 (false) or 1 (true).\r\n// Those returning boolean or int will not allocate memory except possibly on the first\r\n// time they're called with a given parameter size.\r\n//\r\n// bigInt add(x,y) //return (x+y) for bigInts x and y.\r\n// bigInt addInt(x,n) //return (x+n) where x is a bigInt and n is an integer.\r\n// string bigInt2str(x,base) //return a string form of bigInt x in a given base, with 2 <= base <= 95\r\n// int bitSize(x) //return how many bits long the bigInt x is, not counting leading zeros\r\n// bigInt dup(x) //return a copy of bigInt x\r\n// boolean equals(x,y) //is the bigInt x equal to the bigint y?\r\n// boolean equalsInt(x,y) //is bigint x equal to integer y?\r\n// bigInt expand(x,n) //return a copy of x with at least n elements, adding leading zeros if needed\r\n// Array findPrimes(n) //return array of all primes less than integer n\r\n// bigInt GCD(x,y) //return greatest common divisor of bigInts x and y (each with same number of elements).\r\n// boolean greater(x,y) //is x>y? (x and y are nonnegative bigInts)\r\n// boolean greaterShift(x,y,shift)//is (x <<(shift*bpe)) > y?\r\n// bigInt int2bigInt(t,n,m) //return a bigInt equal to integer t, with at least n bits and m array elements\r\n// bigInt inverseMod(x,n) //return (x**(-1) mod n) for bigInts x and n. If no inverse exists, it returns null\r\n// int inverseModInt(x,n) //return x**(-1) mod n, for integers x and n. Return 0 if there is no inverse\r\n// boolean isZero(x) //is the bigInt x equal to zero?\r\n// boolean millerRabin(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is bigInt, 1<b<x)\r\n// boolean millerRabinInt(x,b) //does one round of Miller-Rabin base integer b say that bigInt x is possibly prime? (b is int, 1<b<x)\r\n// bigInt mod(x,n) //return a new bigInt equal to (x mod n) for bigInts x and n.\r\n// int modInt(x,n) //return x mod n for bigInt x and integer n.\r\n// bigInt mult(x,y) //return x*y for bigInts x and y. This is faster when y<x.\r\n// bigInt multMod(x,y,n) //return (x*y mod n) for bigInts x,y,n. For greater speed, let y<x.\r\n// boolean negative(x) //is bigInt x negative?\r\n// bigInt powMod(x,y,n) //return (x**y mod n) where x,y,n are bigInts and ** is exponentiation. 0**0=1. Faster for odd n.\r\n// bigInt randBigInt(n,s) //return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\r\n// bigInt randTruePrime(k) //return a new, random, k-bit, true prime bigInt using Maurer's algorithm.\r\n// bigInt randProbPrime(k) //return a new, random, k-bit, probable prime bigInt (probability it's composite less than 2^-80).\r\n// bigInt str2bigInt(s,b,n,m) //return a bigInt for number represented in string s in base b with at least n bits and m array elements\r\n// bigInt sub(x,y) //return (x-y) for bigInts x and y. Negative answers will be 2s complement\r\n// bigInt trim(x,k) //return a copy of x with exactly k leading zero elements\r\n//\r\n//\r\n// The following functions each have a non-underscored version, which most users should call instead.\r\n// These functions each write to a single parameter, and the caller is responsible for ensuring the array\r\n// passed in is large enough to hold the result.\r\n//\r\n// void addInt_(x,n) //do x=x+n where x is a bigInt and n is an integer\r\n// void add_(x,y) //do x=x+y for bigInts x and y\r\n// void copy_(x,y) //do x=y on bigInts x and y\r\n// void copyInt_(x,n) //do x=n on bigInt x and integer n\r\n// void GCD_(x,y) //set x to the greatest common divisor of bigInts x and y, (y is destroyed). (This never overflows its array).\r\n// boolean inverseMod_(x,n) //do x=x**(-1) mod n, for bigInts x and n. Returns 1 (0) if inverse does (doesn't) exist\r\n// void mod_(x,n) //do x=x mod n for bigInts x and n. (This never overflows its array).\r\n// void mult_(x,y) //do x=x*y for bigInts x and y.\r\n// void multMod_(x,y,n) //do x=x*y mod n for bigInts x,y,n.\r\n// void powMod_(x,y,n) //do x=x**y mod n, where x,y,n are bigInts (n is odd) and ** is exponentiation. 0**0=1.\r\n// void randBigInt_(b,n,s) //do b = an n-bit random BigInt. if s=1, then nth bit (most significant bit) is set to 1. n>=1.\r\n// void randTruePrime_(ans,k) //do ans = a random k-bit true random prime (not just probable prime) with 1 in the msb.\r\n// void sub_(x,y) //do x=x-y for bigInts x and y. Negative answers will be 2s complement.\r\n//\r\n// The following functions do NOT have a non-underscored version.\r\n// They each write a bigInt result to one or more parameters. The caller is responsible for\r\n// ensuring the arrays passed in are large enough to hold the results.\r\n//\r\n// void addShift_(x,y,ys) //do x=x+(y<<(ys*bpe))\r\n// void carry_(x) //do carries and borrows so each element of the bigInt x fits in bpe bits.\r\n// void divide_(x,y,q,r) //divide x by y giving quotient q and remainder r\r\n// int divInt_(x,n) //do x=floor(x/n) for bigInt x and integer n, and return the remainder. (This never overflows its array).\r\n// void eGCD_(x,y,d,a,b) //sets a,b,d to positive bigInts such that d = GCD_(x,y) = a*x-b*y\r\n// void halve_(x) //do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement. (This never overflows its array).\r\n// void leftShift_(x,n) //left shift bigInt x by n bits. n<bpe.\r\n// void linComb_(x,y,a,b) //do x=a*x+b*y for bigInts x and y and integers a and b\r\n// void linCombShift_(x,y,b,ys) //do x=x+b*(y<<(ys*bpe)) for bigInts x and y, and integers b and ys\r\n// void mont_(x,y,n,np) //Montgomery multiplication (see comments where the function is defined)\r\n// void multInt_(x,n) //do x=x*n where x is a bigInt and n is an integer.\r\n// void rightShift_(x,n) //right shift bigInt x by n bits. 0 <= n < bpe. (This never overflows its array).\r\n// void squareMod_(x,n) //do x=x*x mod n for bigInts x,n\r\n// void subShift_(x,y,ys) //do x=x-(y<<(ys*bpe)). Negative answers will be 2s complement.\r\n//\r\n// The following functions are based on algorithms from the _Handbook of Applied Cryptography_\r\n// powMod_() = algorithm 14.94, Montgomery exponentiation\r\n// eGCD_,inverseMod_() = algorithm 14.61, Binary extended GCD_\r\n// GCD_() = algorothm 14.57, Lehmer's algorithm\r\n// mont_() = algorithm 14.36, Montgomery multiplication\r\n// divide_() = algorithm 14.20 Multiple-precision division\r\n// squareMod_() = algorithm 14.16 Multiple-precision squaring\r\n// randTruePrime_() = algorithm 4.62, Maurer's algorithm\r\n// millerRabin() = algorithm 4.24, Miller-Rabin algorithm\r\n//\r\n// Profiling shows:\r\n// randTruePrime_() spends:\r\n// 10% of its time in calls to powMod_()\r\n// 85% of its time in calls to millerRabin()\r\n// millerRabin() spends:\r\n// 99% of its time in calls to powMod_() (always with a base of 2)\r\n// powMod_() spends:\r\n// 94% of its time in calls to mont_() (almost always with x==y)\r\n//\r\n// This suggests there are several ways to speed up this library slightly:\r\n// - convert powMod_ to use a Montgomery form of k-ary window (or maybe a Montgomery form of sliding window)\r\n// -- this should especially focus on being fast when raising 2 to a power mod n\r\n// - convert randTruePrime_() to use a minimum r of 1/3 instead of 1/2 with the appropriate change to the test\r\n// - tune the parameters in randTruePrime_(), including c, m, and recLimit\r\n// - speed up the single loop in mont_() that takes 95% of the runtime, perhaps by reducing checking\r\n// within the loop when all the parameters are the same length.\r\n//\r\n// There are several ideas that look like they wouldn't help much at all:\r\n// - replacing trial division in randTruePrime_() with a sieve (that speeds up something taking almost no time anyway)\r\n// - increase bpe from 15 to 30 (that would help if we had a 32*32->64 multiplier, but not with JavaScript's 32*32->32)\r\n// - speeding up mont_(x,y,n,np) when x==y by doing a non-modular, non-Montgomery square\r\n// followed by a Montgomery reduction. The intermediate answer will be twice as long as x, so that\r\n// method would be slower. This is unfortunate because the code currently spends almost all of its time\r\n// doing mont_(x,x,...), both for randTruePrime_() and powMod_(). A faster method for Montgomery squaring\r\n// would have a large impact on the speed of randTruePrime_() and powMod_(). HAC has a couple of poorly-worded\r\n// sentences that seem to imply it's faster to do a non-modular square followed by a single\r\n// Montgomery reduction, but that's obviously wrong.\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nexport type Bool = 1 | 0\r\n\r\n//globals\r\nexport var bpe = 0 //bits stored per array element\r\nvar mask = 0 //AND this with an array element to chop it down to bpe bits\r\nvar radix = mask + 1 //equals 2^bpe. A single 1 bit to the left of the last bit of mask.\r\n\r\n//the digits for converting to different bases\r\nvar digitsStr =\r\n '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_=!@#$%^&*()[]{}|;:,.<>/?`~ \\\\\\'\"+-'\r\n\r\n//initialize the global variables\r\n\r\n//bpe=number of bits in the mantissa on this platform\r\nfor (bpe = 0; 1 << (bpe + 1) > 1 << bpe; bpe++);\r\nbpe >>= 1 //bpe=number of bits in one element of the array representing the bigInt\r\nmask = (1 << bpe) - 1 //AND the mask with an integer to get its bpe least significant bits\r\nradix = mask + 1 //2^bpe. a single 1 bit to the left of the first bit of mask\r\nexport var one = int2bigInt(1, 1, 1) //constant used in powMod_()\r\nexport var zero = int2bigInt(0, 1, 1)\r\n\r\n//the following global variables are scratchpad memory to\r\n//reduce dynamic memory allocation in the inner loop\r\nvar t: number[] | number = new Array(0)\r\nvar ss = t //used in mult_()\r\nvar s0 = t //used in multMod_(), squareMod_()\r\n// var s1=t; //used in powMod_(), multMod_(), squareMod_()\r\n// var s2=t; //used in powMod_(), multMod_()\r\nvar s3 = t //used in powMod_()\r\nvar s4 = t,\r\n s5 = t //used in mod_()\r\nvar s6 = t //used in bigInt2str()\r\nvar s7 = t //used in powMod_()\r\nvar T = t //used in GCD_()\r\nvar sa = t //used in mont_()\r\nvar mr_x1 = t,\r\n mr_r = t,\r\n mr_a = t, //used in millerRabin()\r\n eg_v = t,\r\n eg_u = t,\r\n eg_A = t,\r\n eg_B = t,\r\n eg_C = t,\r\n eg_D = t, //used in eGCD_(), inverseMod_()\r\n //, md_q1=t, md_q2=t, md_q3=t, md_r=t, md_r1=t, md_r2=t, md_tt=t, //used in mod_()\r\n\r\n primes = t,\r\n pows = t,\r\n s_i = t,\r\n s_i2 = t,\r\n s_R = t,\r\n s_rm = t,\r\n s_q = t,\r\n s_n1 = t,\r\n s_a = t,\r\n s_r2 = t,\r\n s_n = t,\r\n s_b = t,\r\n s_d = t,\r\n s_x1 = t,\r\n s_x2 = t,\r\n s_aa = t, //used in randTruePrime_()\r\n rpprb = t //used in randProbPrimeRounds() (which also uses \"primes\")\r\n\r\n////////////////////////////////////////////////////////////////////////////////////////\r\n\r\nvar k, buff\r\n\r\n/**\r\n * return array of all primes less than integer n\r\n *\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function findPrimes(n: number): number[] {\r\n var i, s, p, ans\r\n s = new Array(n)\r\n for (i = 0; i < n; i++) s[i] = 0\r\n s[0] = 2\r\n p = 0 //first p elements of s are primes, the rest are a sieve\r\n for (; s[p] < n; ) {\r\n //s[p] is the pth prime\r\n for (\r\n i = s[p] * s[p];\r\n i < n;\r\n i += s[p] //mark multiples of s[p]\r\n )\r\n s[i] = 1\r\n p++\r\n s[p] = s[p - 1] + 1\r\n for (; s[p] < n && s[s[p]]; s[p]++); //find next prime (where s[p]==0)\r\n }\r\n ans = new Array(p)\r\n for (i = 0; i < p; i++) ans[i] = s[i]\r\n return ans\r\n}\r\n\r\n/**\r\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\r\n *\r\n * x is a bigInt, and b is an integer, with b<x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} b\r\n * @returns {(0 | 1)}\r\n */\r\nexport function millerRabinInt(x: number[], b: number): Bool {\r\n if (mr_x1.length !== x.length) {\r\n mr_x1 = dup(x)\r\n mr_r = dup(x)\r\n mr_a = dup(x)\r\n }\r\n\r\n copyInt_(mr_a, b)\r\n return millerRabin(x, mr_a)\r\n}\r\n\r\n/**\r\n * does a single round of Miller-Rabin base b consider x to be a possible prime?\r\n *\r\n * x and b are bigInts with b<x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} b\r\n * @returns {(0 | 1)}\r\n */\r\nexport function millerRabin(x: number[], b: number[]): Bool {\r\n var i, j, k, s\r\n\r\n if (mr_x1.length !== x.length) {\r\n mr_x1 = dup(x)\r\n mr_r = dup(x)\r\n mr_a = dup(x)\r\n }\r\n\r\n copy_(mr_a, b)\r\n copy_(mr_r, x)\r\n copy_(mr_x1, x)\r\n\r\n addInt_(mr_r, -1)\r\n addInt_(mr_x1, -1)\r\n\r\n //s=the highest power of two that divides mr_r\r\n k = 0\r\n for (i = 0; i < mr_r.length; i++)\r\n for (j = 1; j < mask; j <<= 1)\r\n if (x[i] & j) {\r\n s = k < mr_r.length + bpe ? k : 0\r\n i = mr_r.length\r\n j = mask\r\n } else k++\r\n\r\n if (s) rightShift_(mr_r, s)\r\n\r\n powMod_(mr_a, mr_r, x)\r\n\r\n if (!equalsInt(mr_a, 1) && !equals(mr_a, mr_x1)) {\r\n j = 1\r\n //$off\r\n while (j <= s - 1 && !equals(mr_a, mr_x1)) {\r\n squareMod_(mr_a, x)\r\n if (equalsInt(mr_a, 1)) {\r\n return 0\r\n }\r\n j++\r\n }\r\n if (!equals(mr_a, mr_x1)) {\r\n return 0\r\n }\r\n }\r\n return 1\r\n}\r\n\r\n/**\r\n * returns how many bits long the bigInt is, not counting leading zeros.\r\n *\r\n * @param {number[]} x\r\n * @returns {number}\r\n */\r\nexport function bitSize(x: number[]): number {\r\n var j, z, w\r\n for (j = x.length - 1; x[j] == 0 && j > 0; j--);\r\n for (z = 0, w = x[j]; w; w >>= 1, z++);\r\n z += bpe * j\r\n return z\r\n}\r\n\r\n/**\r\n * return a copy of x with at least n elements, adding leading zeros if needed\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function expand(x: number[], n: number): number[] {\r\n var ans = int2bigInt(0, (x.length > n ? x.length : n) * bpe, 0)\r\n copy_(ans, x)\r\n return ans\r\n}\r\n\r\n/**\r\n * return a k-bit true random prime using Maurer's algorithm.\r\n *\r\n * @export\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function randTruePrime(k: number): number[] {\r\n var ans = int2bigInt(0, k, 0)\r\n randTruePrime_(ans, k)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return a k-bit random probable prime with probability of error < 2^-80\r\n *\r\n * @export\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function randProbPrime(k: number): number[] {\r\n if (k >= 600) return randProbPrimeRounds(k, 2) //numbers from HAC table 4.3\r\n if (k >= 550) return randProbPrimeRounds(k, 4)\r\n if (k >= 500) return randProbPrimeRounds(k, 5)\r\n if (k >= 400) return randProbPrimeRounds(k, 6)\r\n if (k >= 350) return randProbPrimeRounds(k, 7)\r\n if (k >= 300) return randProbPrimeRounds(k, 9)\r\n if (k >= 250) return randProbPrimeRounds(k, 12) //numbers from HAC table 4.4\r\n if (k >= 200) return randProbPrimeRounds(k, 15)\r\n if (k >= 150) return randProbPrimeRounds(k, 18)\r\n if (k >= 100) return randProbPrimeRounds(k, 27)\r\n return randProbPrimeRounds(k, 40) //number from HAC remark 4.26 (only an estimate)\r\n}\r\n\r\n/**\r\n * return a k-bit probable random prime using n rounds of Miller Rabin\r\n * (after trial division with small primes)\r\n *\r\n * @export\r\n * @param {number} k\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function randProbPrimeRounds(k: number, n: number): number[] {\r\n var ans, i, divisible, B\r\n B = 30000 //B is largest prime to use in trial division\r\n ans = int2bigInt(0, k, 0)\r\n\r\n //optimization: try larger and smaller B to find the best limit.\r\n\r\n if (primes.length === 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\r\n\r\n if (rpprb.length !== ans.length) rpprb = dup(ans)\r\n\r\n for (;;) {\r\n //keep trying random values for ans until one appears to be prime\r\n //optimization: pick a random number times L=2*3*5*...*p, plus a\r\n // random element of the list of all numbers in [0,L) not divisible by any prime up to p.\r\n // This can reduce the amount of random number generation.\r\n\r\n randBigInt_(ans, k, 0) //ans = a random odd number to check\r\n ans[0] |= 1\r\n divisible = 0\r\n\r\n //check ans for divisibility by small primes up to B\r\n for (i = 0; i < primes.length && primes[i] <= B; i++)\r\n if (modInt(ans, primes[i]) === 0 && !equalsInt(ans, primes[i])) {\r\n divisible = 1\r\n break\r\n }\r\n\r\n //optimization: change millerRabin so the base can be bigger than the number being checked, then eliminate the while here.\r\n\r\n //do n rounds of Miller Rabin, with random bases less than ans\r\n for (i = 0; i < n && !divisible; i++) {\r\n randBigInt_(rpprb, k, 0)\r\n while (\r\n !greater(ans, rpprb) //pick a random rpprb that's < ans\r\n )\r\n randBigInt_(rpprb, k, 0)\r\n if (!millerRabin(ans, rpprb)) divisible = 1\r\n }\r\n\r\n if (!divisible) return ans\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n/**\r\n * return a new bigInt equal to (x mod n) for bigInts x and n.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function mod(x: number[], n: number[]): number[] {\r\n var ans = dup(x)\r\n mod_(ans, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x+n) where x is a bigInt and n is an integer.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number[]}\r\n */\r\nexport function addInt(x: number[], n: number): number[] {\r\n var ans = expand(x, x.length + 1)\r\n addInt_(ans, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return x*y for bigInts x and y. This is faster when y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function mult(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length + y.length)\r\n mult_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x**y mod n) where x,y,n are bigInts and ** is exponentiation.\r\n *\r\n * 0**0=1.\r\n *\r\n * Faster for odd n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function powMod(x: number[], y: number[], n: number[]): number[] {\r\n var ans = expand(x, n.length)\r\n powMod_(\r\n //this should work without the trim, but doesn't\r\n ans,\r\n trim(y, 2),\r\n trim(n, 2),\r\n )\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * Simple pow with no optimizations (in 40x times slower than jsbn's pow)\r\n * @param x bigInt\r\n * @param e\r\n */\r\nexport function pow(x: number[], e: number) {\r\n let ans = dup(x);\r\n e -= 1;\r\n for(let i = 0; i < e; ++i) {\r\n ans = mult(ans, x);\r\n }\r\n return trim(ans, 1);\r\n}\r\n\r\n/**\r\n * return (x-y) for bigInts x and y\r\n *\r\n * Negative answers will be 2s complement\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function sub(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\r\n sub_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x+y) for bigInts x and y\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function add(x: number[], y: number[]): number[] {\r\n var ans = expand(x, x.length > y.length ? x.length + 1 : y.length + 1)\r\n add_(ans, y)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * return (x**(-1) mod n) for bigInts x and n.\r\n *\r\n * If no inverse exists, it returns null\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {(number[] | null)}\r\n */\r\nexport function inverseMod(x: number[], n: number[]): number[] | null {\r\n var ans = expand(x, n.length)\r\n var s = inverseMod_(ans, n)\r\n return s ? trim(ans, 1) : null\r\n}\r\n\r\n/**\r\n * return (x*y mod n) for bigInts x,y,n.\r\n *\r\n * For greater speed, let y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @returns {number[]}\r\n */\r\nexport function multMod(x: number[], y: number[], n: number[]): number[] {\r\n var ans = expand(x, n.length)\r\n multMod_(ans, y, n)\r\n return trim(ans, 1)\r\n}\r\n\r\n/**\r\n * generate a k-bit true random prime using Maurer's algorithm, and put it into ans.\r\n *\r\n * The bigInt ans must be large enough to hold it.\r\n *\r\n * @export\r\n * @param {number[]} ans\r\n * @param {number} k\r\n * @return {void}\r\n */\r\nexport function randTruePrime_(ans: number[], k: number): void {\r\n var c, m, pm, dd, j, r, B, divisible, z, zz, recSize\r\n var w\r\n if (primes.length == 0) primes = findPrimes(30000) //check for divisibility by primes <=30000\r\n\r\n if (pows.length == 0) {\r\n pows = new Array(512)\r\n for (j = 0; j < 512; j++) {\r\n pows[j] = Math.pow(2, j / 511 - 1)\r\n }\r\n }\r\n\r\n //c and m should be tuned for a particular machine and value of k, to maximize speed\r\n c = 0.1 //c=0.1 in HAC\r\n m = 20 //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\r\n var recLimit = 20 //stop recursion when k <=recLimit. Must have recLimit >= 2\r\n\r\n if (s_i2.length != ans.length) {\r\n s_i2 = dup(ans)\r\n s_R = dup(ans)\r\n s_n1 = dup(ans)\r\n s_r2 = dup(ans)\r\n s_d = dup(ans)\r\n s_x1 = dup(ans) //TODO Seems like a bug in eslint, reports as unused\r\n s_x2 = dup(ans)\r\n s_b = dup(ans)\r\n s_n = dup(ans)\r\n s_i = dup(ans)\r\n s_rm = dup(ans)\r\n s_q = dup(ans)\r\n s_a = dup(ans)\r\n s_aa = dup(ans)\r\n }\r\n\r\n if (k <= recLimit) {\r\n //generate small random primes by trial division up to its square root\r\n pm = (1 << ((k + 2) >> 1)) - 1 //pm is binary number with all ones, just over sqrt(2^k)\r\n copyInt_(ans, 0)\r\n for (dd = 1; dd; ) {\r\n dd = 0\r\n ans[0] = 1 | (1 << (k - 1)) | Math.floor(Math.random() * (1 << k)) //random, k-bit, odd integer, with msb 1\r\n for (j = 1; j < primes.length && (primes[j] & pm) == primes[j]; j++) {\r\n //trial division by all primes 3...sqrt(2^k)\r\n if (0 == ans[0] % primes[j]) {\r\n dd = 1\r\n break\r\n }\r\n }\r\n }\r\n carry_(ans)\r\n return\r\n }\r\n\r\n B = c * k * k //try small primes up to B (or all the primes[] array if the largest is less than B).\r\n if (k > 2 * m)\r\n //generate this k-bit number by first recursively generating a number that has between k/2 and k-m bits\r\n for (r = 1; k - k * r <= m; ) r = pows[Math.floor(Math.random() * 512)] //r=Math.pow(2,Math.random()-1);\r\n else r = 0.5\r\n\r\n //simulation suggests the more complex algorithm using r=.333 is only slightly faster.\r\n\r\n recSize = Math.floor(r * k) + 1\r\n\r\n randTruePrime_(s_q, recSize)\r\n copyInt_(s_i2, 0)\r\n s_i2[Math.floor((k - 2) / bpe)] |= 1 << ((k - 2) % bpe) //s_i2=2^(k-2)\r\n divide_(s_i2, s_q, s_i, s_rm) //s_i=floor((2^(k-1))/(2q))\r\n\r\n z = bitSize(s_i)\r\n\r\n for (;;) {\r\n for (;;) {\r\n //generate z-bit numbers until one falls in the range [0,s_i-1]\r\n randBigInt_(s_R, z, 0)\r\n if (greater(s_i, s_R)) break\r\n } //now s_R is in the range [0,s_i-1]\r\n addInt_(s_R, 1) //now s_R is in the range [1,s_i]\r\n add_(s_R, s_i) //now s_R is in the range [s_i+1,2*s_i]\r\n\r\n copy_(s_n, s_q)\r\n mult_(s_n, s_R)\r\n multInt_(s_n, 2)\r\n addInt_(s_n, 1) //s_n=2*s_R*s_q+1\r\n\r\n copy_(s_r2, s_R)\r\n multInt_(s_r2, 2) //s_r2=2*s_R\r\n\r\n //check s_n for divisibility by small primes up to B\r\n for (divisible = 0, j = 0; j < primes.length && primes[j] < B; j++)\r\n if (modInt(s_n, primes[j]) == 0 && !equalsInt(s_n, primes[j])) {\r\n divisible = 1\r\n break\r\n }\r\n\r\n if (!divisible)\r\n if (!millerRabinInt(s_n, 2))\r\n //if it passes small primes check, then try a single Miller-Rabin base 2\r\n //this line represents 75% of the total runtime for randTruePrime_\r\n divisible = 1\r\n\r\n if (!divisible) {\r\n //if it passes that test, continue checking s_n\r\n addInt_(s_n, -3)\r\n for (j = s_n.length - 1; s_n[j] == 0 && j > 0; j--); //strip leading zeros\r\n for (zz = 0, w = s_n[j]; w; w >>= 1, zz++);\r\n zz += bpe * j //zz=number of bits in s_n, ignoring leading zeros\r\n for (;;) {\r\n //generate z-bit numbers until one falls in the range [0,s_n-1]\r\n randBigInt_(s_a, zz, 0)\r\n if (greater(s_n, s_a)) break\r\n } //now s_a is in the range [0,s_n-1]\r\n addInt_(s_n, 3) //now s_a is in the range [0,s_n-4]\r\n addInt_(s_a, 2) //now s_a is in the range [2,s_n-2]\r\n copy_(s_b, s_a)\r\n copy_(s_n1, s_n)\r\n addInt_(s_n1, -1)\r\n powMod_(s_b, s_n1, s_n) //s_b=s_a^(s_n-1) modulo s_n\r\n addInt_(s_b, -1)\r\n if (isZero(s_b)) {\r\n copy_(s_b, s_a)\r\n powMod_(s_b, s_r2, s_n)\r\n addInt_(s_b, -1)\r\n copy_(s_aa, s_n)\r\n copy_(s_d, s_b)\r\n GCD_(s_d, s_n) //if s_b and s_n are relatively prime, then s_n is a prime\r\n if (equalsInt(s_d, 1)) {\r\n copy_(ans, s_aa)\r\n return //if we've made it this far, then s_n is absolutely guaranteed to be prime\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Return an n-bit random BigInt (n>=1). If s=1, then the most significant of those n bits is set to 1.\r\n *\r\n * @export\r\n * @param {number} n\r\n * @param {number} s\r\n * @returns {number[]}\r\n */\r\nexport function randBigInt(n: number, s: number): number[] {\r\n var a, b\r\n a = Math.floor((n - 1) / bpe) + 2 //# array elements to hold the BigInt with a leading 0 element\r\n b = int2bigInt(0, 0, a)\r\n randBigInt_(b, n, s)\r\n return b\r\n}\r\n\r\n/**\r\n * Set b to an n-bit random BigInt. If s=1, then the most significant of those n bits is set to 1.\r\n *\r\n * Array b must be big enough to hold the result. Must have n>=1\r\n *\r\n * @export\r\n * @param {number[]} b\r\n * @param {number} n\r\n * @param {number} s\r\n * @return {void}\r\n */\r\nexport function randBigInt_(b: number[], n: number, s: number): void {\r\n var i, a\r\n for (i = 0; i < b.length; i++) b[i] = 0\r\n a = Math.floor((n - 1) / bpe) + 1 //# array elements to hold the BigInt\r\n for (i = 0; i < a; i++) {\r\n b[i] = Math.floor(Math.random() * (1 << (bpe - 1)))\r\n }\r\n b[a - 1] &= (2 << ((n - 1) % bpe)) - 1\r\n if (s == 1) b[a - 1] |= 1 << ((n - 1) % bpe)\r\n}\r\n\r\n/**\r\n * Return the greatest common divisor of bigInts x and y (each with same number of elements).\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {number[]}\r\n */\r\nexport function GCD(x: number[], y: number[]): number[] {\r\n var xc, yc\r\n xc = dup(x)\r\n yc = dup(y)\r\n GCD_(xc, yc)\r\n return xc\r\n}\r\n\r\n/**\r\n * set x to the greatest common divisor of bigInts x and y (each with same number of elements).\r\n *\r\n * y is destroyed.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n */\r\nexport function GCD_(x: number[], y: number[]): void {\r\n var i: number, xp: number, yp: number, A: number, B, C: number, D: number, q, sing\r\n var qp\r\n if (T.length !== x.length) T = dup(x)\r\n\r\n sing = 1\r\n while (sing) {\r\n //while y has nonzero elements other than y[0]\r\n sing = 0\r\n for (\r\n i = 1;\r\n i < y.length;\r\n i++ //check if y has nonzero elements other than 0\r\n )\r\n if (y[i]) {\r\n sing = 1\r\n break\r\n }\r\n if (!sing) break //quit when y all zero elements except possibly y[0]\r\n\r\n for (i = x.length; !x[i] && i >= 0; i--); //find most significant element of x\r\n xp = x[i]\r\n yp = y[i]\r\n A = 1\r\n B = 0\r\n C = 0\r\n D = 1\r\n while (yp + C && yp + D) {\r\n q = Math.floor((xp + A) / (yp + C))\r\n qp = Math.floor((xp + B) / (yp + D))\r\n if (q != qp) break\r\n t = A - q * C\r\n A = C\r\n C = t // do (A,B,xp, C,D,yp) = (C,D,yp, A,B,xp) - q*(0,0,0, C,D,yp)\r\n t = B - q * D\r\n B = D\r\n D = t\r\n t = xp - q * yp\r\n xp = yp\r\n yp = t\r\n }\r\n if (B) {\r\n copy_(T, x)\r\n linComb_(x, y, A, B) //x=A*x+B*y\r\n linComb_(y, T, D, C) //y=D*y+C*T\r\n } else {\r\n mod_(x, y)\r\n copy_(T, x)\r\n copy_(x, y)\r\n copy_(y, T)\r\n }\r\n }\r\n if (y[0] === 0) return\r\n t = modInt(x, y[0])\r\n copyInt_(x, y[0])\r\n y[0] = t\r\n while (y[0]) {\r\n x[0] %= y[0]\r\n t = x[0]\r\n x[0] = y[0]\r\n y[0] = t\r\n }\r\n}\r\n\r\n/**\r\n * do x=x**(-1) mod n, for bigInts x and n.\r\n *\r\n * If no inverse exists, it sets x to zero and returns 0, else it returns 1.\r\n * The x array must be at least as large as the n array.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @returns {(0 | 1)}\r\n */\r\nexport function inverseMod_(x: number[], n: number[]): Bool {\r\n var k = 1 + 2 * Math.max(x.length, n.length)\r\n\r\n if (!(x[0] & 1) && !(n[0] & 1)) {\r\n //if both inputs are even, then inverse doesn't exist\r\n copyInt_(x, 0)\r\n return 0\r\n }\r\n\r\n if (eg_u.length != k) {\r\n eg_u = new Array(k)\r\n eg_v = new Array(k)\r\n eg_A = new Array(k)\r\n eg_B = new Array(k)\r\n eg_C = new Array(k)\r\n eg_D = new Array(k)\r\n }\r\n\r\n copy_(eg_u, x)\r\n copy_(eg_v, n)\r\n copyInt_(eg_A, 1)\r\n copyInt_(eg_B, 0)\r\n copyInt_(eg_C, 0)\r\n copyInt_(eg_D, 1)\r\n for (;;) {\r\n while (!(eg_u[0] & 1)) {\r\n //while eg_u is even\r\n halve_(eg_u)\r\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\r\n //if eg_A==eg_B==0 mod 2\r\n halve_(eg_A)\r\n halve_(eg_B)\r\n } else {\r\n add_(eg_A, n)\r\n halve_(eg_A)\r\n sub_(eg_B, x)\r\n halve_(eg_B)\r\n }\r\n }\r\n\r\n while (!(eg_v[0] & 1)) {\r\n //while eg_v is even\r\n halve_(eg_v)\r\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\r\n //if eg_C==eg_D==0 mod 2\r\n halve_(eg_C)\r\n halve_(eg_D)\r\n } else {\r\n add_(eg_C, n)\r\n halve_(eg_C)\r\n sub_(eg_D, x)\r\n halve_(eg_D)\r\n }\r\n }\r\n\r\n if (!greater(eg_v, eg_u)) {\r\n //eg_v <= eg_u\r\n sub_(eg_u, eg_v)\r\n sub_(eg_A, eg_C)\r\n sub_(eg_B, eg_D)\r\n } else {\r\n //eg_v > eg_u\r\n sub_(eg_v, eg_u)\r\n sub_(eg_C, eg_A)\r\n sub_(eg_D, eg_B)\r\n }\r\n\r\n if (equalsInt(eg_u, 0)) {\r\n while (\r\n negative(eg_C) //make sure answer is nonnegative\r\n )\r\n add_(eg_C, n)\r\n copy_(x, eg_C)\r\n\r\n if (!equalsInt(eg_v, 1)) {\r\n //if GCD_(x,n)!=1, then there is no inverse\r\n copyInt_(x, 0)\r\n return 0\r\n }\r\n return 1\r\n }\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n/**\r\n * return x**(-1) mod n, for integers x and n.\r\n *\r\n * Return 0 if there is no inverse\r\n *\r\n * @param {number} x\r\n * @param {number} n\r\n * @returns {number}\r\n */\r\nexport function inverseModInt(x: number, n: number): number {\r\n var a = 1,\r\n b = 0,\r\n t\r\n for (;;) {\r\n if (x === 1) return a\r\n if (x === 0) return 0\r\n b -= a * Math.floor(n / x)\r\n //$off\r\n n %= x\r\n\r\n if (n === 1) return b //to avoid negatives, change this b to n-b, and each -= to +=\r\n if (n === 0) return 0\r\n a -= b * Math.floor(x / n)\r\n //$off\r\n x %= n\r\n }\r\n /*::\r\n declare var never: empty\r\n return never\r\n */\r\n}\r\n\r\n//this deprecated function is for backward compatibility only.\r\nfunction inverseModInt_(x: number, n: number) {\r\n return inverseModInt(x, n)\r\n}\r\n\r\n/**\r\n * Given positive bigInts x and y, change the bigints v, a, and b to positive bigInts such that:\r\n *\r\n * v = GCD_(x,y) = a*x-b*y\r\n *\r\n * The bigInts v, a, b, must have exactly as many elements as the larger of x and y.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} v\r\n * @param {number[]} a\r\n * @param {number[]} b\r\n * @return {void}\r\n */\r\nexport function eGCD_(\r\n x: number[],\r\n y: number[],\r\n v: number[],\r\n a: number[],\r\n b: number[],\r\n): void {\r\n var g = 0\r\n var k = Math.max(x.length, y.length)\r\n if (eg_u.length != k) {\r\n eg_u = new Array(k)\r\n eg_A = new Array(k)\r\n eg_B = new Array(k)\r\n eg_C = new Array(k)\r\n eg_D = new Array(k)\r\n }\r\n while (!(x[0] & 1) && !(y[0] & 1)) {\r\n //while x and y both even\r\n halve_(x)\r\n halve_(y)\r\n g++\r\n }\r\n copy_(eg_u, x)\r\n copy_(v, y)\r\n copyInt_(eg_A, 1)\r\n copyInt_(eg_B, 0)\r\n copyInt_(eg_C, 0)\r\n copyInt_(eg_D, 1)\r\n for (;;) {\r\n while (!(eg_u[0] & 1)) {\r\n //while u is even\r\n halve_(eg_u)\r\n if (!(eg_A[0] & 1) && !(eg_B[0] & 1)) {\r\n //if A==B==0 mod 2\r\n halve_(eg_A)\r\n halve_(eg_B)\r\n } else {\r\n add_(eg_A, y)\r\n halve_(eg_A)\r\n sub_(eg_B, x)\r\n halve_(eg_B)\r\n }\r\n }\r\n\r\n while (!(v[0] & 1)) {\r\n //while v is even\r\n halve_(v)\r\n if (!(eg_C[0] & 1) && !(eg_D[0] & 1)) {\r\n //if C==D==0 mod 2\r\n halve_(eg_C)\r\n halve_(eg_D)\r\n } else {\r\n add_(eg_C, y)\r\n halve_(eg_C)\r\n sub_(eg_D, x)\r\n halve_(eg_D)\r\n }\r\n }\r\n\r\n if (!greater(v, eg_u)) {\r\n //v<=u\r\n sub_(eg_u, v)\r\n sub_(eg_A, eg_C)\r\n sub_(eg_B, eg_D)\r\n } else {\r\n //v>u\r\n sub_(v, eg_u)\r\n sub_(eg_C, eg_A)\r\n sub_(eg_D, eg_B)\r\n }\r\n if (equalsInt(eg_u, 0)) {\r\n while (negative(eg_C)) {\r\n //make sure a (C) is nonnegative\r\n add_(eg_C, y)\r\n sub_(eg_D, x)\r\n }\r\n multInt_(eg_D, -1) ///make sure b (D) is nonnegative\r\n copy_(a, eg_C)\r\n copy_(b, eg_D)\r\n leftShift_(v, g)\r\n return\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * is bigInt x negative?\r\n *\r\n * @param {number[]} x\r\n * @returns {(1 | 0)}\r\n */\r\nexport function negative(x: number[]) {\r\n //TODO Flow Bool type inference\r\n return (x[x.length - 1] >> (bpe - 1)) & 1\r\n}\r\n\r\n/**\r\n * is (x << (shift*bpe)) > y?\r\n *\r\n * x and y are nonnegative bigInts\r\n * shift is a nonnegative integer\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} shift\r\n * @returns {(1 | 0)}\r\n */\r\nexport function greaterShift(x: number[], y: number[], shift: number): Bool {\r\n var i,\r\n kx = x.length,\r\n ky = y.length\r\n k = kx + shift < ky ? kx + shift : ky\r\n for (i = ky - 1 - shift; i < kx && i >= 0; i++) if (x[i] > 0) return 1 //if there are nonzeros in x to the left of the first column of y, then x is bigger\r\n for (i = kx - 1 + shift; i < ky; i++) if (y[i] > 0) return 0 //if there are nonzeros in y to the left of the first column of x, then x is not bigger\r\n for (i = k - 1; i >= shift; i--)\r\n if (x[i - shift] > y[i]) return 1\r\n else if (x[i - shift] < y[i]) return 0\r\n return 0\r\n}\r\n\r\n/**\r\n * is x > y?\r\n *\r\n * x and y both nonnegative\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function greater(x: number[], y: number[]): Bool {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n\r\n for (i = x.length; i < y.length; i++) if (y[i]) return 0 //y has more digits\r\n\r\n for (i = y.length; i < x.length; i++) if (x[i]) return 1 //x has more digits\r\n\r\n for (i = k - 1; i >= 0; i--)\r\n if (x[i] > y[i]) return 1\r\n else if (x[i] < y[i]) return 0\r\n return 0\r\n}\r\n\r\n/**\r\n * divide x by y giving quotient q and remainder r.\r\n *\r\n * q = floor(x/y)\r\n * r = x mod y\r\n *\r\n * All 4 are bigints.\r\n *\r\n * * x must have at least one leading zero element.\r\n * * y must be nonzero.\r\n * * q and r must be arrays that are exactly the same length as x. (Or q can have more).\r\n * * Must have x.length >= y.length >= 2.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} q\r\n * @param {number[]} r\r\n * @return {void}\r\n */\r\nexport function divide_(\r\n x: number[],\r\n y: number[],\r\n q: number[],\r\n r: number[],\r\n): void {\r\n var kx, ky\r\n var i, j, y1, y2, c, a, b\r\n copy_(r, x)\r\n for (ky = y.length; y[ky - 1] === 0; ky--); //ky is number of elements in y, not including leading zeros\r\n\r\n //normalize: ensure the most significant element of y has its highest bit set\r\n b = y[ky - 1]\r\n for (a = 0; b; a++) b >>= 1\r\n a = bpe - a //a is how many bits to shift so that the high order bit of y is leftmost in its array element\r\n leftShift_(y, a) //multiply both by 1<<a now, then divide both by that at the end\r\n leftShift_(r, a)\r\n\r\n //Rob Visser discovered a bug: the following line was originally just before the normalization.\r\n for (kx = r.length; r[kx - 1] === 0 && kx > ky; kx--); //kx is number of elements in normalized x, not including leading zeros\r\n\r\n copyInt_(q, 0) // q=0\r\n while (!greaterShift(y, r, kx - ky)) {\r\n // while (leftShift_(y,kx-ky) <= r) {\r\n subShift_(r, y, kx - ky) // r=r-leftShift_(y,kx-ky)\r\n q[kx - ky]++ // q[kx-ky]++;\r\n } // }\r\n\r\n for (i = kx - 1; i >= ky; i--) {\r\n if (r[i] == y[ky - 1]) q[i - ky] = mask\r\n else q[i - ky] = Math.floor((r[i] * radix + r[i - 1]) / y[ky - 1])\r\n\r\n //The following for(;;) loop is equivalent to the commented while loop,\r\n //except that the uncommented version avoids overflow.\r\n //The commented loop comes from HAC, which assumes r[-1]==y[-1]==0\r\n // while (q[i-ky]*(y[ky-1]*radix+y[ky-2]) > r[i]*radix*radix+r[i-1]*radix+r[i-2])\r\n // q[i-ky]--;\r\n for (;;) {\r\n y2 = (ky > 1 ? y[ky - 2] : 0) * q[i - ky]\r\n c = y2 >> bpe\r\n y2 = y2 & mask\r\n y1 = c + q[i - ky] * y[ky - 1]\r\n c = y1 >> bpe\r\n y1 = y1 & mask\r\n\r\n if (\r\n c == r[i]\r\n ? y1 == r[i - 1] ? y2 > (i > 1 ? r[i - 2] : 0) : y1 > r[i - 1]\r\n : c > r[i]\r\n )\r\n q[i - ky]--\r\n else break\r\n }\r\n\r\n linCombShift_(r, y, -q[i - ky], i - ky) //r=r-q[i-ky]*leftShift_(y,i-ky)\r\n if (negative(r)) {\r\n addShift_(r, y, i - ky) //r=r+leftShift_(y,i-ky)\r\n q[i - ky]--\r\n }\r\n }\r\n\r\n rightShift_(y, a) //undo the normalization step\r\n rightShift_(r, a) //undo the normalization step\r\n}\r\n\r\n/**\r\n * do carries and borrows so each element of the bigInt x fits in bpe bits.\r\n *\r\n * @param {number[]} x\r\n */\r\nexport function carry_(x: number[]): void {\r\n var i, k, c, b\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i]\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n }\r\n}\r\n\r\n/**\r\n * return x mod n for bigInt x and integer n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number}\r\n */\r\nexport function modInt(x: number[], n: number): number {\r\n var i,\r\n c = 0\r\n for (i = x.length - 1; i >= 0; i--) c = (c * radix + x[i]) % n\r\n return c\r\n}\r\n\r\n/**\r\n * convert the integer t into a bigInt with at least the given number of bits.\r\n * the returned array stores the bigInt in bpe-bit chunks, little endian (buff[0] is least significant word)\r\n * Pad the array with leading zeros so that it has at least minSize elements.\r\n *\r\n * There will always be at least one leading 0 element.\r\n *\r\n * @export\r\n * @param {number} t\r\n * @param {number} bits\r\n * @param {number} minSize\r\n * @returns {number[]}\r\n */\r\nexport function int2bigInt(t: number, bits: number, minSize: number): number[] {\r\n var i, k\r\n k = Math.ceil(bits / bpe) + 1\r\n k = minSize > k ? minSize : k\r\n var buff = new Array(k)\r\n copyInt_(buff, t)\r\n return buff\r\n}\r\n\r\n/**\r\n * return the bigInt given a string representation in a given base.\r\n * Pad the array with leading zeros so that it has at least minSize elements.\r\n * If base=-1, then it reads in a space-separated list of array elements in decimal.\r\n *\r\n * The array will always have at least one leading zero, unless base=-1.\r\n *\r\n * @export\r\n * @param {string} s\r\n * @param {number} base\r\n * @param {number} [minSize]\r\n * @returns {number[]}\r\n */\r\nexport function str2bigInt(\r\n s: string,\r\n base: number,\r\n minSize?: number,\r\n): number[] {\r\n var d, i, x, y, kk\r\n var k = s.length\r\n if (base === -1) {\r\n //comma-separated list of array elements in decimal\r\n x = new Array(0)\r\n for (;;) {\r\n y = new Array(x.length + 1)\r\n for (i = 0; i < x.length; i++) y[i + 1] = x[i]\r\n y[0] = parseInt(s, 10) //TODO PERF Should we replace that with ~~ (not not)? https://jsperf.com/number-vs-parseint-vs-plus/7\r\n x = y\r\n d = s.indexOf(',', 0)\r\n if (d < 1) break\r\n //$off\r\n s = s.substring(d + 1)\r\n if (s.length == 0) break\r\n }\r\n //$off\r\n if (x.length < minSize) {\r\n //$off\r\n y = new Array(minSize)\r\n copy_(y, x)\r\n return y\r\n }\r\n return x\r\n }\r\n\r\n x = int2bigInt(0, base * k, 0)\r\n for (i = 0; i < k; i++) {\r\n d = digitsStr.indexOf(s.substring(i, i + 1), 0)\r\n if (base <= 36 && d >= 36)\r\n //convert lowercase to uppercase if base<=36\r\n d -= 26\r\n if (d >= base || d < 0) {\r\n //stop at first illegal character\r\n break\r\n }\r\n multInt_(x, base)\r\n addInt_(x, d)\r\n }\r\n\r\n for (k = x.length; k > 0 && !x[k - 1]; k--); //strip off leading zeros\r\n //$off\r\n k = minSize > k + 1 ? minSize : k + 1\r\n //$off\r\n y = new Array(k)\r\n //$off\r\n kk = k < x.length ? k : x.length\r\n //$off\r\n for (i = 0; i < kk; i++) y[i] = x[i]\r\n //$off\r\n for (; i < k; i++) y[i] = 0\r\n return y\r\n}\r\n\r\n//return the bigInt given a string representation in a given base.\r\n//Pad the array with leading zeros so that it has at least minSize elements.\r\n//If base=-1, then it reads in a space-separated list of array elements in decimal.\r\n//The array will always have at least one leading zero, unless base=-1.\r\n// function str2bigInt(s,b,minSize) {\r\n// var d, i, j, base, str, x, y, kk;\r\n// if (typeof b === 'string') {\r\n// base = b.length;\r\n// str = b;\r\n// } else {\r\n// base = b;\r\n// str = digitsStr;\r\n// }\r\n// var k=s.length;\r\n// if (base==-1) { //comma-separated list of array elements in decimal\r\n// x=new Array(0);\r\n// for (;;) {\r\n// y=new Array(x.length+1);\r\n// for (i=0;i<x.length;i++)\r\n// y[i+1]=x[i];\r\n// y[0]=parseInt(s,10);\r\n// x=y;\r\n// d=s.indexOf(',',0);\r\n// if (d<1)\r\n// break;\r\n// s=s.substring(d+1);\r\n// if (s.length==0)\r\n// break;\r\n// }\r\n// if (x.length<minSize) {\r\n// y=new Array(minSize);\r\n// copy_(y,x);\r\n// return y;\r\n// }\r\n// return x;\r\n// }\r\n\r\n// x=int2bigInt(0,base*k,0);\r\n// for (i=0;i<k;i++) {\r\n// d=str.indexOf(s.substring(i,i+1),0);\r\n// if (base<=36 && d>=36) { //convert lowercase to uppercase if base<=36\r\n// d-=26;\r\n// }\r\n// if (d>=base || d<0) { //ignore illegal characters\r\n// continue;\r\n// }\r\n// multInt_(x,base);\r\n// addInt_(x,d);\r\n// }\r\n\r\n// for (k=x.length;k>0 && !x[k-1];k--); //strip off leading zeros\r\n// k=minSize>k+1 ? minSize : k+1;\r\n// y=new Array(k);\r\n// kk=k<x.length ? k : x.length;\r\n// for (i=0;i<kk;i++)\r\n// y[i]=x[i];\r\n// for (;i<k;i++)\r\n// y[i]=0;\r\n// return y;\r\n// }\r\n\r\n/**\r\n * is bigint x equal to integer y?\r\n *\r\n * y must have less than bpe bits\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function equalsInt(x: number[], y: number): Bool {\r\n var i\r\n if (x[0] != y) return 0\r\n for (i = 1; i < x.length; i++) if (x[i]) return 0\r\n return 1\r\n}\r\n\r\n/**\r\n * are bigints x and y equal?\r\n *\r\n * this works even if x and y are different lengths and have arbitrarily many leading zeros\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {(1 | 0)}\r\n */\r\nexport function equals(x: number[], y: number[]): Bool {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n for (i = 0; i < k; i++) if (x[i] !== y[i]) return 0\r\n if (x.length > y.length) {\r\n for (; i < x.length; i++) if (x[i]) return 0\r\n } else {\r\n for (; i < y.length; i++) if (y[i]) return 0\r\n }\r\n return 1\r\n}\r\n\r\n/**\r\n * is the bigInt x equal to zero?\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @returns {(1 | 0)}\r\n */\r\nexport function isZero(x: number[]): Bool {\r\n var i\r\n for (i = 0; i < x.length; i++) if (x[i]) return 0\r\n return 1\r\n}\r\n\r\n/**\r\n * Convert a bigInt into a string in a given base, from base 2 up to base 95.\r\n *\r\n * Base -1 prints the contents of the array representing the number.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} base\r\n * @returns {string}\r\n */\r\nexport function bigInt2str(x: number[], base: number): string {\r\n var i,\r\n t,\r\n s = ''\r\n\r\n if (s6.length !== x.length) s6 = dup(x)\r\n else copy_(s6, x)\r\n\r\n if (base === -1) {\r\n //return the list of array contents\r\n for (i = x.length - 1; i > 0; i--) s += x[i] + ','\r\n s += x[0]\r\n } else {\r\n //return it in the given base\r\n while (!isZero(s6)) {\r\n t = divInt_(s6, base) //t=s6 % base; s6=floor(s6/base);\r\n s = digitsStr.substring(t, t + 1) + s\r\n }\r\n }\r\n if (s.length === 0) s = '0'\r\n return s\r\n}\r\n\r\n/**\r\n * Convert a bigInt into bytes\r\n * @param x bigInt\r\n * @param littleEndian byte order by default\r\n */\r\nexport function bigInt2bytes(x: number[], littleEndian = true) {\r\n if(s6.length !== x.length) s6 = dup(x);\r\n else copy_(s6, x);\r\n\r\n const out: number[] = [];\r\n\r\n //console.log('bigInt2bytes');\r\n while(!isZero(s6)) {\r\n t = divInt_(s6, 256); //t=s6 % base; s6=floor(s6/base);\r\n out.push(t);\r\n //console.log('bigInt2bytes', t);\r\n }\r\n\r\n if(littleEndian) {\r\n out.reverse();\r\n }\r\n\r\n //console.log('bigInt2bytes', out);\r\n\r\n return out;\r\n}\r\n\r\n/**\r\n * Compare two bigInts and return -1 if x is less, 0 if equals, 1 if greater\r\n * @param x bigInt\r\n * @param y bigInt\r\n */\r\nexport function cmp(x: number[], y: number[]) {\r\n return greater(x, y) ? 1 : (equals(x, y) ? 0 : -1);\r\n}\r\n\r\n/* Object.assign(self, {\r\n cmp,\r\n str2bigInt,\r\n int2bigInt,\r\n bigInt2str,\r\n one,\r\n divide_,\r\n divInt_,\r\n dup,\r\n negative\r\n}); */\r\n\r\n/**\r\n * Returns a duplicate of bigInt x\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @returns {number[]}\r\n */\r\nexport function dup(x: number[]): number[] {\r\n var i\r\n buff = Array(x.length)\r\n copy_(buff, x)\r\n return buff\r\n}\r\n\r\n/**\r\n * do x=y on bigInts x and y.\r\n *\r\n * x must be an array at least as big as y (not counting the leading zeros in y).\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @returns {void}\r\n */\r\nexport function copy_(x: number[], y: number[]): void {\r\n var i\r\n var k = x.length < y.length ? x.length : y.length\r\n for (i = 0; i < k; i++) x[i] = y[i]\r\n for (i = k; i < x.length; i++) x[i] = 0\r\n}\r\n\r\n/**\r\n * do x=y on bigInt x and integer y.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function copyInt_(x: number[], n: number): void {\r\n var i, c\r\n var len = x.length //TODO .length in for loop have perfomance costs. Bench this\r\n for (c = n, i = 0; i < len; i++) {\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+n where x is a bigInt and n is an integer.\r\n *\r\n * x must be large enough to hold the result.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function addInt_(x: number[], n: number): void {\r\n var i, k, c, b\r\n x[0] += n\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i]\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n if (!c) return //stop carrying as soon as the carry is zero\r\n }\r\n}\r\n\r\n/**\r\n * right shift bigInt x by n bits.\r\n *\r\n * 0 <= n < bpe.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n */\r\nexport function rightShift_(x: number[], n: number): void {\r\n var i\r\n var k = Math.floor(n / bpe)\r\n if (k) {\r\n for (\r\n i = 0;\r\n i < x.length - k;\r\n i++ //right shift x by k elements\r\n )\r\n x[i] = x[i + k]\r\n for (; i < x.length; i++) x[i] = 0\r\n //$off\r\n n %= bpe\r\n }\r\n for (i = 0; i < x.length - 1; i++) {\r\n x[i] = mask & ((x[i + 1] << (bpe - n)) | (x[i] >> n))\r\n }\r\n x[i] >>= n\r\n}\r\n\r\n/**\r\n * do x=floor(|x|/2)*sgn(x) for bigInt x in 2's complement\r\n *\r\n * @param {number[]} x\r\n * @returns {void}\r\n */\r\nexport function halve_(x: number[]): void {\r\n var i\r\n for (i = 0; i < x.length - 1; i++) {\r\n x[i] = mask & ((x[i + 1] << (bpe - 1)) | (x[i] >> 1))\r\n }\r\n x[i] = (x[i] >> 1) | (x[i] & (radix >> 1)) //most significant bit stays the same\r\n}\r\n\r\n/**\r\n * left shift bigInt x by n bits\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function leftShift_(x: number[], n: number): void {\r\n var i\r\n var k = Math.floor(n / bpe)\r\n if (k) {\r\n for (\r\n i = x.length;\r\n i >= k;\r\n i-- //left shift x by k elements\r\n )\r\n x[i] = x[i - k]\r\n for (; i >= 0; i--) x[i] = 0\r\n //$off\r\n n %= bpe\r\n }\r\n if (!n) return\r\n for (i = x.length - 1; i > 0; i--) {\r\n x[i] = mask & ((x[i] << n) | (x[i - 1] >> (bpe - n)))\r\n }\r\n x[i] = mask & (x[i] << n)\r\n}\r\n\r\n/**\r\n * do x=x*n where x is a bigInt and n is an integer.\r\n *\r\n * x must be large enough to hold the result.\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {void}\r\n */\r\nexport function multInt_(x: number[], n: number): void {\r\n var i, k, c, b\r\n if (!n) return\r\n k = x.length\r\n c = 0\r\n for (i = 0; i < k; i++) {\r\n c += x[i] * n\r\n b = 0\r\n if (c < 0) {\r\n b = -(c >> bpe)\r\n c += b * radix\r\n }\r\n x[i] = c & mask\r\n c = (c >> bpe) - b\r\n }\r\n}\r\n\r\n/**\r\n * do x=floor(x/n) for bigInt x and integer n, and return the remainder\r\n *\r\n * @param {number[]} x\r\n * @param {number} n\r\n * @returns {number} remainder\r\n */\r\nexport function divInt_(x: number[], n: number): number {\r\n var i,\r\n r = 0,\r\n s\r\n for (i = x.length - 1; i >= 0; i--) {\r\n s = r * radix + x[i]\r\n x[i] = Math.floor(s / n)\r\n r = s % n\r\n }\r\n return r\r\n}\r\n\r\n/**\r\n * do the linear combination x=a*x+b*y for bigInts x and y, and integers a and b.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} a\r\n * @param {number} b\r\n * @returns {void}\r\n */\r\nexport function linComb_(x: number[], y: number[], a: number, b: number): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n kk = x.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += a * x[i] + b * y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; i < kk; i++) {\r\n c += a * x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do the linear combination x=a*x+b*(y<<(ys*bpe)) for bigInts x and y, and integers a, b and ys.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} b\r\n * @param {number} ys\r\n * @returns {void}\r\n */\r\nexport function linCombShift_(\r\n x: number[],\r\n y: number[],\r\n b: number,\r\n ys: number,\r\n): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] + b * y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+(y<<(ys*bpe)) for bigInts x and y, and integer ys.\r\n *\r\n * x must be large enough to hold the answer.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} ys\r\n * @return {void}\r\n */\r\nexport function addShift_(x: number[], y: number[], ys: number): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] + y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x-(y<<(ys*bpe)) for bigInts x and y, and integer ys\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number} ys\r\n * @return {void}\r\n */\r\nexport function subShift_(x: number[], y: number[], ys: number): void {\r\n var i, c, k, kk\r\n k = x.length < ys + y.length ? x.length : ys + y.length\r\n kk = x.length\r\n for (c = 0, i = ys; i < k; i++) {\r\n c += x[i] - y[i - ys]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < kk; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x-y for bigInts x and y\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * negative answers will be 2s complement\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function sub_(x: number[], y: number[]): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += x[i] - y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < x.length; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x+y for bigInts x and y\r\n *\r\n * x must be large enough to hold the answer\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function add_(x: number[], y: number[]): void {\r\n var i, c, k, kk\r\n k = x.length < y.length ? x.length : y.length\r\n for (c = 0, i = 0; i < k; i++) {\r\n c += x[i] + y[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n for (i = k; c && i < x.length; i++) {\r\n c += x[i]\r\n x[i] = c & mask\r\n c >>= bpe\r\n }\r\n}\r\n\r\n/**\r\n * do x=x*y for bigInts x and y.\r\n *\r\n * This is faster when y<x.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @return {void}\r\n */\r\nexport function mult_(x: number[], y: number[]): void {\r\n var i\r\n if (ss.length != 2 * x.length) ss = new Array(2 * x.length)\r\n copyInt_(ss, 0)\r\n for (i = 0; i < y.length; i++) if (y[i]) linCombShift_(ss, x, y[i], i) //ss=1*ss+y[i]*(x<<(i*bpe))\r\n copy_(x, ss)\r\n}\r\n\r\n/**\r\n * do x=x mod n for bigInts x and n\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function mod_(x: number[], n: number[]): void {\r\n if (s4.length !== x.length) s4 = dup(x)\r\n else copy_(s4, x)\r\n if (s5.length !== x.length) s5 = dup(x)\r\n divide_(s4, n, s5, x) //x = remainder of s4 / n\r\n}\r\n\r\n/**\r\n * do x=x*y mod n for bigInts x,y,n.\r\n *\r\n * for greater speed, let y<x.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function multMod_(x: number[], y: number[], n: number[]): void {\r\n var i\r\n if (s0.length != 2 * x.length) s0 = new Array(2 * x.length)\r\n copyInt_(s0, 0)\r\n for (i = 0; i < y.length; i++) if (y[i]) linCombShift_(s0, x, y[i], i) //s0=1*s0+y[i]*(x<<(i*bpe))\r\n mod_(s0, n)\r\n copy_(x, s0)\r\n}\r\n\r\n/**\r\n * do x=x*x mod n for bigInts x,n.\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function squareMod_(x: number[], n: number[]): void {\r\n var i, j, d, c, kx, kn, k\r\n for (kx = x.length; kx > 0 && !x[kx - 1]; kx--); //ignore leading zeros in x\r\n k = kx > n.length ? 2 * kx : 2 * n.length //k=# elements in the product, which is twice the elements in the larger of x and n\r\n if (s0.length != k) s0 = new Array(k)\r\n copyInt_(s0, 0)\r\n for (i = 0; i < kx; i++) {\r\n c = s0[2 * i] + x[i] * x[i]\r\n s0[2 * i] = c & mask\r\n c >>= bpe\r\n for (j = i + 1; j < kx; j++) {\r\n c = s0[i + j] + 2 * x[i] * x[j] + c\r\n s0[i + j] = c & mask\r\n c >>= bpe\r\n }\r\n s0[i + kx] = c\r\n }\r\n mod_(s0, n)\r\n copy_(x, s0)\r\n}\r\n\r\n/**\r\n * return x with exactly k leading zero elements\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number} k\r\n * @returns {number[]}\r\n */\r\nexport function trim(x: number[], k: number): number[] {\r\n var i, y\r\n for (i = x.length; i > 0 && !x[i - 1]; i--);\r\n y = new Array(i + k)\r\n copy_(y, x)\r\n return y\r\n}\r\n\r\n/**\r\n * do `x=x**y mod n`, where x,y,n are bigInts and `**` is exponentiation. `0**0=1`.\r\n *\r\n * this is faster when n is odd.\r\n *\r\n * x usually needs to have as many elements as n.\r\n *\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @return {void}\r\n */\r\nexport function powMod_(x: number[], y: number[], n: number[]): void {\r\n var k1, k2, kn, np\r\n if (s7.length != n.length) s7 = dup(n)\r\n\r\n //for even modulus, use a simple square-and-multiply algorithm,\r\n //rather than using the more complex Montgomery algorithm.\r\n if ((n[0] & 1) == 0) {\r\n copy_(s7, x)\r\n copyInt_(x, 1)\r\n while (!equalsInt(y, 0)) {\r\n if (y[0] & 1) multMod_(x, s7, n)\r\n divInt_(y, 2)\r\n squareMod_(s7, n)\r\n }\r\n return\r\n }\r\n\r\n //calculate np from n for the Montgomery multiplications\r\n copyInt_(s7, 0)\r\n for (kn = n.length; kn > 0 && !n[kn - 1]; kn--);\r\n np = radix - inverseModInt(modInt(n, radix), radix)\r\n s7[kn] = 1\r\n multMod_(x, s7, n) // x = x * 2**(kn*bp) mod n\r\n\r\n if (s3.length != x.length) s3 = dup(x)\r\n else copy_(s3, x)\r\n //$off\r\n // @ts-ignore\r\n for (k1 = y.length - 1; (k1 > 0) & !y[k1]; k1--); //k1=first nonzero element of y\r\n if (y[k1] == 0) {\r\n //anything to the 0th power is 1\r\n copyInt_(x, 1)\r\n return\r\n }\r\n for (k2 = 1 << (bpe - 1); k2 && !(y[k1] & k2); k2 >>= 1); //k2=position of first 1 bit in y[k1]\r\n for (;;) {\r\n if (!(k2 >>= 1)) {\r\n //look at next bit of y\r\n k1--\r\n if (k1 < 0) {\r\n mont_(x, one, n, np)\r\n return\r\n }\r\n k2 = 1 << (bpe - 1)\r\n }\r\n mont_(x, x, n, np)\r\n\r\n if (k2 & y[k1])\r\n //if next bit is a 1\r\n mont_(x, s3, n, np)\r\n }\r\n}\r\n\r\n/**\r\n * do x=x*y*Ri mod n for bigInts x,y,n,\r\n * where Ri = 2**(-kn*bpe) mod n, and kn is the\r\n * number of elements in the n array, not\r\n * counting leading zeros.\r\n *\r\n * x array must have at least as many elemnts as the n array\r\n * It's OK if x and y are the same variable.\r\n *\r\n * must have:\r\n * * x,y < n\r\n * * n is odd\r\n * * np = -(n^(-1)) mod radix\r\n *\r\n * @export\r\n * @param {number[]} x\r\n * @param {number[]} y\r\n * @param {number[]} n\r\n * @param {number} np\r\n * @return {void}\r\n */\r\nexport function mont_(x: number[], y: number[], n: number[], np: number): void {\r\n var i, j, c, ui, t, ks\r\n var kn = n.length\r\n var ky = y.length\r\n\r\n if (sa.length != kn) sa = new Array(kn)\r\n\r\n copyInt_(sa, 0)\r\n\r\n for (; kn > 0 && n[kn - 1] == 0; kn--); //ignore leading zeros of n\r\n for (; ky > 0 && y[ky - 1] == 0; ky--); //ignore leading zeros of y\r\n ks = sa.length - 1 //sa will never have more than this many nonzero elements.\r\n\r\n //the following loop consumes 95% of the runtime for randTruePrime_() and powMod_() for large numbers\r\n for (i = 0; i < kn; i++) {\r\n t = sa[0] + x[i] * y[0]\r\n ui = ((t & mask) * np) & mask //the inner \"& mask\" was needed on Safari (but not MSIE) at one time\r\n c = (t + ui * n[0]) >> bpe\r\n t = x[i]\r\n\r\n //do sa=(sa+x[i]*y+ui*n)/b where b=2**bpe. Loop is unrolled 5-fold for speed\r\n j = 1\r\n for (; j < ky - 4; ) {\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < ky; ) {\r\n c += sa[j] + ui * n[j] + t * y[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < kn - 4; ) {\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < kn; ) {\r\n c += sa[j] + ui * n[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n for (; j < ks; ) {\r\n c += sa[j]\r\n sa[j - 1] = c & mask\r\n c >>= bpe\r\n j++\r\n }\r\n sa[j - 1] = c & mask\r\n }\r\n\r\n if (!greater(n, sa)) sub_(sa, n)\r\n copy_(x, sa)\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport CryptoWorkerMethods from './crypto_methods';\r\n\r\ntype Task = {\r\n taskId: number,\r\n task: string,\r\n args: any[]\r\n};\r\n\r\nclass CryptoWorker extends CryptoWorkerMethods {\r\n private webWorker: Worker | boolean = false;\r\n private taskId = 0;\r\n private awaiting: {\r\n [id: number]: {\r\n resolve: any,\r\n reject: any,\r\n taskName: string\r\n }\r\n } = {} as any;\r\n private pending: Array<Task> = [];\r\n private debug = false;\r\n\r\n private utils: {[name: string]: (...args: any[]) => any} = {};\r\n\r\n constructor() {\r\n super();\r\n console.log('CW constructor');\r\n\r\n \r\n Promise.all([\r\n import('./crypto_utils').then(utils => {\r\n Object.assign(this.utils, {\r\n 'sha1-hash': utils.sha1HashSync,\r\n 'sha256-hash': utils.sha256HashSync,\r\n 'pbkdf2': utils.hash_pbkdf2,\r\n 'aes-encrypt': utils.aesEncryptSync,\r\n 'aes-decrypt': utils.aesDecryptSync,\r\n 'rsa-encrypt': utils.rsaEncrypt,\r\n 'factorize': utils.pqPrimeFactorization,\r\n 'mod-pow': utils.bytesModPow,\r\n 'gzipUncompress': utils.gzipUncompress,\r\n });\r\n }),\r\n\r\n import('./srp').then(srp => {\r\n this.utils.computeSRP = srp.computeSRP;\r\n })/* ,\r\n\r\n import('../bin_utils').then(utils => {\r\n this.utils.unzip = utils.gzipUncompress;\r\n }) */\r\n ]);\r\n\r\n return;\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public performTaskWorker<T>(task: string, ...args: any[]) {\r\n this.debug && console.log('CW start', task, args);\r\n\r\n \r\n return Promise.resolve<T>(this.utils[task](...args));\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n}\r\n\r\nconst cryptoWorker = new CryptoWorker();\r\nMOUNT_CLASS_TO.CryptoWorker = cryptoWorker;\r\nexport default cryptoWorker;\r\n","import { convertToArrayBuffer } from \"../../helpers/bytes\";\r\nimport type { InputCheckPasswordSRP } from \"../../layer\";\r\nimport { aesEncryptSync, aesDecryptSync, sha256HashSync, sha1HashSync, bytesModPow } from \"./crypto_utils\";\r\n\r\nexport default abstract class CryptoWorkerMethods {\r\n abstract performTaskWorker<T>(task: string, ...args: any[]): Promise<T>;\r\n\r\n public sha1Hash(bytes: Parameters<typeof sha1HashSync>[0]): Promise<Uint8Array> {\r\n return this.performTaskWorker<Uint8Array>('sha1-hash', bytes);\r\n }\r\n\r\n public sha256Hash(bytes: Parameters<typeof sha256HashSync>[0]) {\r\n return this.performTaskWorker<number[]>('sha256-hash', bytes);\r\n }\r\n\r\n public pbkdf2(buffer: Uint8Array, salt: Uint8Array, iterations: number) {\r\n return this.performTaskWorker<ArrayBuffer>('pbkdf2', buffer, salt, iterations);\r\n }\r\n\r\n public aesEncrypt(bytes: Parameters<typeof aesEncryptSync>[0], \r\n keyBytes: Parameters<typeof aesEncryptSync>[1], \r\n ivBytes: Parameters<typeof aesEncryptSync>[2]) {\r\n return this.performTaskWorker<ReturnType<typeof aesEncryptSync>>('aes-encrypt', convertToArrayBuffer(bytes), \r\n convertToArrayBuffer(keyBytes), convertToArrayBuffer(ivBytes));\r\n }\r\n\r\n public aesDecrypt(encryptedBytes: Parameters<typeof aesDecryptSync>[0], \r\n keyBytes: Parameters<typeof aesDecryptSync>[1], \r\n ivBytes: Parameters<typeof aesDecryptSync>[2]): Promise<ArrayBuffer> {\r\n return this.performTaskWorker<ArrayBuffer>('aes-decrypt', \r\n encryptedBytes, keyBytes, ivBytes)\r\n .then(bytes => convertToArrayBuffer(bytes));\r\n }\r\n\r\n public rsaEncrypt(publicKey: {modulus: string, exponent: string}, bytes: any): Promise<number[]> {\r\n return this.performTaskWorker<number[]>('rsa-encrypt', publicKey, bytes);\r\n }\r\n\r\n public factorize(bytes: Uint8Array) {\r\n return this.performTaskWorker<[number[], number[], number]>('factorize', [...bytes]);\r\n }\r\n\r\n public modPow(x: Parameters<typeof bytesModPow>[0], y: Parameters<typeof bytesModPow>[1], m: Parameters<typeof bytesModPow>[2]) {\r\n return this.performTaskWorker<ReturnType<typeof bytesModPow>>('mod-pow', x, y, m);\r\n }\r\n\r\n public gzipUncompress<T>(bytes: ArrayBuffer, toString?: boolean) {\r\n return this.performTaskWorker<T>('gzipUncompress', bytes, toString);\r\n }\r\n\r\n public computeSRP(password: string, state: any, isNew = false): Promise<InputCheckPasswordSRP> {\r\n return this.performTaskWorker('computeSRP', password, state, isNew);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport DEBUG from \"../config/debug\";\r\n\r\nexport enum LogTypes {\r\n None = 0,\r\n Error = 1,\r\n Warn = 2,\r\n Log = 4,\r\n Debug = 8\r\n};\r\n\r\nexport const LOG_LEVELS = [LogTypes.None, LogTypes.Error, LogTypes.Warn, LogTypes.Log, LogTypes.Debug];\r\n\r\nconst _logTimer = Date.now();\r\nfunction dT() {\r\n return '[' + ((Date.now() - _logTimer) / 1000).toFixed(3) + ']';\r\n}\r\n\r\nexport function logger(prefix: string, type: LogTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error) {\r\n if(!DEBUG/* || true */) {\r\n type = LogTypes.Error;\r\n }\r\n\r\n //level = LogLevels.log | LogLevels.warn | LogLevels.error | LogLevels.debug\r\n\r\n function Log(...args: any[]) {\r\n return type & LogTypes.Log && console.log(dT(), prefix, ...args);\r\n }\r\n \r\n Log.warn = function(...args: any[]) {\r\n return type & LogTypes.Warn && console.warn(dT(), prefix, ...args);\r\n };\r\n \r\n Log.info = function(...args: any[]) {\r\n return type & LogTypes.Log && console.info(dT(), prefix, ...args);\r\n };\r\n \r\n Log.error = function(...args: any[]) {\r\n return type & LogTypes.Error && console.error(dT(), prefix, ...args);\r\n };\r\n \r\n Log.trace = function(...args: any[]) {\r\n return type & LogTypes.Log && console.trace(dT(), prefix, ...args);\r\n };\r\n\r\n /* Log.debug = function(...args: any[]) {\r\n return level & LogLevels.debug && console.log(dT(), prefix, ...args);\r\n }; */\r\n\r\n Log.debug = function(...args: any[]) {\r\n return type & LogTypes.Debug && console.debug(dT(), prefix, ...args);\r\n };\r\n\r\n Log.setPrefix = function(_prefix: string) {\r\n prefix = '[' + _prefix + ']:';\r\n };\r\n\r\n Log.setPrefix(prefix);\r\n\r\n Log.setLevel = function(level: 0 | 1 | 2 | 3 | 4) {\r\n type = LOG_LEVELS.slice(0, level + 1).reduce((acc, v) => acc | v, 0) as any;\r\n };\r\n \r\n return Log;\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n \r\n \r\n \r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport function nextRandomInt(maxValue: number) {\r\n return Math.floor(Math.random() * maxValue);\r\n}\r\n\r\nexport function randomLong() {\r\n return '' + nextRandomInt(0xFFFFFFFF) + nextRandomInt(0xFFFFFF);\r\n //return '' + parseInt(nextRandomInt(0xFFFFFFFF).toString(16) + nextRandomInt(0xFFFFFFFF).toString(16), 16);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { bufferConcats } from '../../helpers/bytes';\r\nimport { add_, bigInt2str, cmp, leftShift_, str2bigInt } from '../../vendor/leemon';\r\nimport { nextRandomInt } from '../../helpers/random';\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\n/* export function bigint(num: number) {\r\n return new BigInteger(num.toString(16), 16);\r\n} */\r\n\r\n/* export function bigStringInt(strNum: string) {\r\n return new BigInteger(strNum, 10);\r\n} */\r\n\r\n/* export function base64ToBlob(base64str: string, mimeType: string) {\r\n var sliceSize = 1024;\r\n var byteCharacters = atob(base64str);\r\n var bytesLength = byteCharacters.length;\r\n var slicesCount = Math.ceil(bytesLength / sliceSize);\r\n var byteArrays = new Array(slicesCount);\r\n\r\n for(var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\r\n var begin = sliceIndex * sliceSize;\r\n var end = Math.min(begin + sliceSize, bytesLength);\r\n\r\n var bytes = new Array(end - begin);\r\n for(var offset = begin, i = 0; offset < end; ++i, ++offset) {\r\n bytes[i] = byteCharacters[offset].charCodeAt(0);\r\n }\r\n byteArrays[sliceIndex] = new Uint8Array(bytes);\r\n }\r\n\r\n return blobConstruct(byteArrays, mimeType);\r\n}\r\n\r\nexport function dataUrlToBlob(url: string) {\r\n // var name = 'b64blob ' + url.length\r\n // console.time(name)\r\n var urlParts = url.split(',');\r\n var base64str = urlParts[1];\r\n var mimeType = urlParts[0].split(':')[1].split(';')[0];\r\n var blob = base64ToBlob(base64str, mimeType);\r\n // console.timeEnd(name)\r\n return blob;\r\n} */\r\n\r\n/* export function bytesFromBigInt(bigInt: BigInteger, len?: number) {\r\n var bytes = bigInt.toByteArray();\r\n\r\n if(len && bytes.length < len) {\r\n var padding = [];\r\n for(var i = 0, needPadding = len - bytes.length; i < needPadding; i++) {\r\n padding[i] = 0;\r\n }\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = bufferConcat(padding, bytes);\r\n } else {\r\n bytes = padding.concat(bytes);\r\n }\r\n } else {\r\n while (!bytes[0] && (!len || bytes.length > len)) {\r\n bytes = bytes.slice(1);\r\n }\r\n }\r\n\r\n return bytes;\r\n} */\r\n\r\nexport function longFromInts(high: number, low: number): string {\r\n //let perf = performance.now();\r\n //let str = bigint(high).shiftLeft(32).add(bigint(low)).toString(10);\r\n //console.log('longFromInts jsbn', performance.now() - perf);\r\n \r\n //perf = performance.now();\r\n const bigInt = str2bigInt(high.toString(16), 16, 32);//int2bigInt(high, 64, 64);\r\n //console.log('longFromInts construct high', bigint(high).toString(10), bigInt2str(bigInt, 10));\r\n leftShift_(bigInt, 32);\r\n //console.log('longFromInts shiftLeft', bigint(high).shiftLeft(32).toString(10), bigInt2str(bigInt, 10));\r\n add_(bigInt, str2bigInt(low.toString(16), 16, 32));\r\n const _str = bigInt2str(bigInt, 10);\r\n\r\n //console.log('longFromInts leemon', performance.now() - perf);\r\n\r\n //console.log('longFromInts', high, low, str, _str, str === _str);\r\n\r\n return _str;\r\n}\r\n\r\nexport function sortLongsArray(arr: string[]) {\r\n return arr.map(long => {\r\n return str2bigInt(long, 10);\r\n }).sort((a, b) => {\r\n return cmp(a, b);\r\n }).map(bigInt => {\r\n return bigInt2str(bigInt, 10);\r\n });\r\n}\r\n\r\nexport function addPadding(bytes: any, blockSize: number = 16, zeroes?: boolean, full = false, prepend = false) {\r\n let len = bytes.byteLength || bytes.length;\r\n let needPadding = blockSize - (len % blockSize);\r\n if(needPadding > 0 && (needPadding < blockSize || full)) {\r\n ////console.log('addPadding()', len, blockSize, needPadding);\r\n let padding = new Array(needPadding);\r\n if(zeroes) {\r\n for(let i = 0; i < needPadding; i++) {\r\n padding[i] = 0;\r\n }\r\n } else {\r\n for(let i = 0; i < padding.length; ++i) {\r\n padding[i] = nextRandomInt(255);\r\n }\r\n }\r\n\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = (prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding)).buffer;\r\n } else if(bytes instanceof Uint8Array) {\r\n bytes = prepend ? bufferConcats(padding, bytes) : bufferConcats(bytes, padding);\r\n } else {\r\n bytes = prepend ? padding.concat(bytes) : bytes.concat(padding);\r\n }\r\n }\r\n\r\n return bytes;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\n//import sha1 from '@cryptography/sha1';\r\n//import sha256 from '@cryptography/sha256';\r\nimport {IGE} from '@cryptography/aes';\r\n\r\n// @ts-ignore\r\nimport pako from 'pako/dist/pako_inflate.min.js';\r\n\r\nimport {str2bigInt, bpe, equalsInt, greater, \r\n copy_, eGCD_, add_, rightShift_, sub_, copyInt_, isZero,\r\n divide_, one, bigInt2str, powMod, bigInt2bytes} from '../../vendor/leemon';//from 'leemon';\r\n\r\nimport { addPadding } from '../mtproto/bin_utils';\r\nimport { bytesToWordss, bytesFromWordss, bytesToHex, bytesFromHex, convertToUint8Array } from '../../helpers/bytes';\r\nimport { nextRandomInt } from '../../helpers/random';\r\n\r\nconst subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\r\n\r\nexport function longToBytes(sLong: string): Array<number> {\r\n /* let perf = performance.now();\r\n for(let i = 0; i < 1000000; ++i) {\r\n bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\r\n }\r\n console.log('longToBytes JSBN', sLong, performance.now() - perf);\r\n \r\n //const bytes = bytesFromWords({words: longToInts(sLong), sigBytes: 8}).reverse();\r\n \r\n perf = performance.now();\r\n for(let i = 0; i < 1000000; ++i) {\r\n bigInt2bytes(str2bigInt(sLong, 10));\r\n }\r\n console.log('longToBytes LEEMON', sLong, performance.now() - perf); */\r\n\r\n const bytes = addPadding(bigInt2bytes(str2bigInt(sLong, 10), false), 8, true, false, false);\r\n //console.log('longToBytes', bytes, b);\r\n \r\n return bytes;\r\n}\r\n\r\nexport function sha1HashSync(bytes: Uint8Array | ArrayBuffer | string) {\r\n return subtle.digest('SHA-1', convertToUint8Array(bytes)).then(b => {\r\n return new Uint8Array(b);\r\n });\r\n /* //console.trace(dT(), 'SHA-1 hash start', bytes);\r\n\r\n const hashBytes: number[] = [];\r\n\r\n let hash = sha1(String.fromCharCode.apply(null, \r\n bytes instanceof Uint8Array ? [...bytes] : [...new Uint8Array(bytes)]));\r\n for(let i = 0; i < hash.length; ++i) {\r\n hashBytes.push(hash.charCodeAt(i));\r\n }\r\n\r\n //console.log(dT(), 'SHA-1 hash finish', hashBytes, bytesToHex(hashBytes));\r\n\r\n return new Uint8Array(hashBytes); */\r\n}\r\n\r\nexport function sha256HashSync(bytes: Uint8Array | ArrayBuffer | string) {\r\n return subtle.digest('SHA-256', convertToUint8Array(bytes)).then(b => {\r\n //console.log('legacy', performance.now() - perfS);\r\n return new Uint8Array(b);\r\n });\r\n /* //console.log('SHA-256 hash start');\r\n\r\n let perfS = performance.now();\r\n \r\n\r\n let perfD = performance.now();\r\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes as any);\r\n let hash = sha256(words);\r\n console.log('darutkin', performance.now() - perfD);\r\n\r\n //console.log('SHA-256 hash finish', hash, sha256(words, 'hex'));\r\n\r\n return bytesFromWordss(hash); */\r\n}\r\n\r\nexport function aesEncryptSync(bytes: ArrayBuffer, keyBytes: ArrayBuffer, ivBytes: ArrayBuffer) {\r\n //console.log(dT(), 'AES encrypt start', bytes, keyBytes, ivBytes);\r\n // console.log('aes before padding bytes:', bytesToHex(bytes));\r\n bytes = addPadding(bytes);\r\n // console.log('aes after padding bytes:', bytesToHex(bytes));\r\n\r\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\r\n const encryptedBytes = cipher.encrypt(bytesToWordss(bytes));\r\n //console.log(dT(), 'AES encrypt finish');\r\n\r\n return bytesFromWordss(encryptedBytes);\r\n}\r\n\r\nexport function aesDecryptSync(bytes: Uint8Array, keyBytes: Uint8Array, ivBytes: Uint8Array) {\r\n //console.log(dT(), 'AES decrypt start', bytes, keyBytes, ivBytes);\r\n\r\n const cipher = new IGE(bytesToWordss(keyBytes), bytesToWordss(ivBytes));\r\n const decryptedBytes = cipher.decrypt(bytesToWordss(bytes));\r\n\r\n //console.log(dT(), 'AES decrypt finish');\r\n\r\n return bytesFromWordss(decryptedBytes);\r\n}\r\n\r\nexport function rsaEncrypt(publicKey: {modulus: string, exponent: string}, bytes: any): number[] {\r\n //console.log(dT(), 'RSA encrypt start', publicKey, bytes);\r\n\r\n bytes = addPadding(bytes, 255);\r\n\r\n var N = str2bigInt(publicKey.modulus, 16);\r\n var E = str2bigInt(publicKey.exponent, 16);\r\n var X = str2bigInt(bytesToHex(bytes), 16);\r\n\r\n var encryptedBigInt = powMod(X, E, N);\r\n var encryptedBytes = bytesFromHex(bigInt2str(encryptedBigInt, 16));\r\n\r\n //console.log(dT(), 'RSA encrypt finish');\r\n\r\n return encryptedBytes;\r\n}\r\n\r\nexport async function hash_pbkdf2(/* hasher: 'string', */buffer: any, salt: any, iterations: number) {\r\n // @ts-ignore\r\n let importKey = await subtle.importKey(\r\n \"raw\", //only \"raw\" is allowed\r\n buffer, //your password\r\n {\r\n name: \"PBKDF2\",\r\n },\r\n false, //whether the key is extractable (i.e. can be used in exportKey)\r\n [\"deriveKey\", \"deriveBits\"] //can be any combination of \"deriveKey\" and \"deriveBits\"\r\n );\r\n \r\n /* let deriveKey = */await subtle.deriveKey(\r\n {\r\n \"name\": \"PBKDF2\",\r\n salt: salt,\r\n iterations: iterations,\r\n hash: {name: \"SHA-512\"}, //can be \"SHA-1\", \"SHA-256\", \"SHA-384\", or \"SHA-512\"\r\n },\r\n importKey, //your key from generateKey or importKey\r\n { //the key type you want to create based on the derived bits\r\n name: \"AES-CTR\", //can be any AES algorithm (\"AES-CTR\", \"AES-CBC\", \"AES-CMAC\", \"AES-GCM\", \"AES-CFB\", \"AES-KW\", \"ECDH\", \"DH\", or \"HMAC\")\r\n //the generateKey parameters for that type of algorithm\r\n length: 256, //can be 128, 192, or 256\r\n },\r\n false, //whether the derived key is extractable (i.e. can be used in exportKey)\r\n [\"encrypt\", \"decrypt\"] //limited to the options in that algorithm's importKey\r\n );\r\n\r\n let bits = subtle.deriveBits({\r\n \"name\": \"PBKDF2\",\r\n salt: salt,\r\n iterations: iterations,\r\n hash: {name: \"SHA-512\"}, //can be \"SHA-1\", \"SHA-256\", \"SHA-384\", or \"SHA-512\"\r\n },\r\n importKey, //your key from generateKey or importKey\r\n 512 //the number of bits you want to derive\r\n );\r\n\r\n return bits;\r\n}\r\n\r\nexport function pqPrimeFactorization(pqBytes: number[]) {\r\n let result: ReturnType<typeof pqPrimeLeemon>;\r\n\r\n //console.log('PQ start', pqBytes, bytesToHex(pqBytes));\r\n\r\n try {\r\n //console.time('PQ leemon');\r\n result = pqPrimeLeemon(str2bigInt(bytesToHex(pqBytes), 16, Math.ceil(64 / bpe) + 1));\r\n //console.timeEnd('PQ leemon');\r\n } catch (e) {\r\n console.error('Pq leemon Exception', e);\r\n }\r\n\r\n //console.log('PQ finish', result);\r\n\r\n return result;\r\n}\r\n\r\nexport function pqPrimeLeemon(what: any) {\r\n var minBits = 64;\r\n var minLen = Math.ceil(minBits / bpe) + 1;\r\n var it = 0;\r\n var i, q;\r\n var j, lim;\r\n var P;\r\n var Q;\r\n var a = new Array(minLen);\r\n var b = new Array(minLen);\r\n var c = new Array(minLen);\r\n var g = new Array(minLen);\r\n var z = new Array(minLen);\r\n var x = new Array(minLen);\r\n var y = new Array(minLen);\r\n\r\n for(i = 0; i < 3; ++i) {\r\n q = (nextRandomInt(128) & 15) + 17;\r\n copyInt_(x, nextRandomInt(1000000000) + 1);\r\n copy_(y, x);\r\n lim = 1 << (i + 18);\r\n\r\n for (j = 1; j < lim; ++j) {\r\n ++it;\r\n copy_(a, x);\r\n copy_(b, x);\r\n copyInt_(c, q);\r\n\r\n while(!isZero(b)) {\r\n if(b[0] & 1) {\r\n add_(c, a);\r\n if(greater(c, what)) {\r\n sub_(c, what);\r\n }\r\n }\r\n add_(a, a);\r\n if(greater(a, what)) {\r\n sub_(a, what);\r\n }\r\n rightShift_(b, 1);\r\n }\r\n\r\n copy_(x, c);\r\n if(greater(x, y)) {\r\n copy_(z, x);\r\n sub_(z, y);\r\n } else {\r\n copy_(z, y);\r\n sub_(z, x);\r\n }\r\n eGCD_(z, what, g, a, b);\r\n if(!equalsInt(g, 1)) {\r\n break;\r\n }\r\n if((j & (j - 1)) === 0) {\r\n copy_(y, x);\r\n }\r\n }\r\n if(greater(g, one)) {\r\n break;\r\n }\r\n }\r\n\r\n divide_(what, g, x, y);\r\n\r\n if(greater(g, x)) {\r\n P = x;\r\n Q = g;\r\n } else {\r\n P = g;\r\n Q = x;\r\n }\r\n\r\n // console.log(dT(), 'done', bigInt2str(what, 10), bigInt2str(P, 10), bigInt2str(Q, 10))\r\n\r\n return [bigInt2bytes(P), bigInt2bytes(Q), it];\r\n}\r\n\r\nexport function bytesModPow(x: number[] | Uint8Array, y: number[] | Uint8Array, m: number[] | Uint8Array) {\r\n try {\r\n var xBigInt = str2bigInt(bytesToHex(x), 16);\r\n var yBigInt = str2bigInt(bytesToHex(y), 16);\r\n var mBigInt = str2bigInt(bytesToHex(m), 16);\r\n var resBigInt = powMod(xBigInt, yBigInt, mBigInt);\r\n\r\n return bytesFromHex(bigInt2str(resBigInt, 16));\r\n } catch(e) {\r\n console.error('mod pow error', e);\r\n }\r\n\r\n //return bytesFromBigInt(new BigInteger(x).modPow(new BigInteger(y), new BigInteger(m)), 256);\r\n}\r\n\r\nexport function gzipUncompress(bytes: ArrayBuffer, toString: true): string;\r\nexport function gzipUncompress(bytes: ArrayBuffer, toString?: false): Uint8Array;\r\nexport function gzipUncompress(bytes: ArrayBuffer, toString?: boolean): string | Uint8Array {\r\n //console.log(dT(), 'Gzip uncompress start');\r\n var result = pako.inflate(bytes, toString ? {to: 'string'} : undefined);\r\n //console.log(dT(), 'Gzip uncompress finish'/* , result */);\r\n return result;\r\n}\r\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","/*! pako 2.0.3 https://github.com/nodeca/pako @license (MIT AND Zlib) */\n!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?t(exports):\"function\"==typeof define&&define.amd?define([\"exports\"],t):t((e=\"undefined\"!=typeof globalThis?globalThis:e||self).pako={})}(this,(function(e){\"use strict\";var t=(e,t,i,n)=>{let a=65535&e|0,r=e>>>16&65535|0,s=0;for(;0!==i;){s=i>2e3?2e3:i,i-=s;do{a=a+t[n++]|0,r=r+a|0}while(--s);a%=65521,r%=65521}return a|r<<16|0};const i=new Uint32Array((()=>{let e,t=[];for(var i=0;i<256;i++){e=i;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[i]=e}return t})());var n=(e,t,n,a)=>{const r=i,s=a+n;e^=-1;for(let i=a;i<s;i++)e=e>>>8^r[255&(e^t[i])];return-1^e};var a=function(e,t){let i,n,a,r,s,o,l,d,f,h,c,u,w,b,k,m,_,g,v,p,y,x,E,R;const A=e.state;i=e.next_in,E=e.input,n=i+(e.avail_in-5),a=e.next_out,R=e.output,r=a-(t-e.avail_out),s=a+(e.avail_out-257),o=A.dmax,l=A.wsize,d=A.whave,f=A.wnext,h=A.window,c=A.hold,u=A.bits,w=A.lencode,b=A.distcode,k=(1<<A.lenbits)-1,m=(1<<A.distbits)-1;e:do{u<15&&(c+=E[i++]<<u,u+=8,c+=E[i++]<<u,u+=8),_=w[c&k];t:for(;;){if(g=_>>>24,c>>>=g,u-=g,g=_>>>16&255,0===g)R[a++]=65535&_;else{if(!(16&g)){if(0==(64&g)){_=w[(65535&_)+(c&(1<<g)-1)];continue t}if(32&g){A.mode=12;break e}e.msg=\"invalid literal/length code\",A.mode=30;break e}v=65535&_,g&=15,g&&(u<g&&(c+=E[i++]<<u,u+=8),v+=c&(1<<g)-1,c>>>=g,u-=g),u<15&&(c+=E[i++]<<u,u+=8,c+=E[i++]<<u,u+=8),_=b[c&m];i:for(;;){if(g=_>>>24,c>>>=g,u-=g,g=_>>>16&255,!(16&g)){if(0==(64&g)){_=b[(65535&_)+(c&(1<<g)-1)];continue i}e.msg=\"invalid distance code\",A.mode=30;break e}if(p=65535&_,g&=15,u<g&&(c+=E[i++]<<u,u+=8,u<g&&(c+=E[i++]<<u,u+=8)),p+=c&(1<<g)-1,p>o){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(c>>>=g,u-=g,g=a-r,p>g){if(g=p-g,g>d&&A.sane){e.msg=\"invalid distance too far back\",A.mode=30;break e}if(y=0,x=h,0===f){if(y+=l-g,g<v){v-=g;do{R[a++]=h[y++]}while(--g);y=a-p,x=R}}else if(f<g){if(y+=l+f-g,g-=f,g<v){v-=g;do{R[a++]=h[y++]}while(--g);if(y=0,f<v){g=f,v-=g;do{R[a++]=h[y++]}while(--g);y=a-p,x=R}}}else if(y+=f-g,g<v){v-=g;do{R[a++]=h[y++]}while(--g);y=a-p,x=R}for(;v>2;)R[a++]=x[y++],R[a++]=x[y++],R[a++]=x[y++],v-=3;v&&(R[a++]=x[y++],v>1&&(R[a++]=x[y++]))}else{y=a-p;do{R[a++]=R[y++],R[a++]=R[y++],R[a++]=R[y++],v-=3}while(v>2);v&&(R[a++]=R[y++],v>1&&(R[a++]=R[y++]))}break}}break}}while(i<n&&a<s);v=u>>3,i-=v,u-=v<<3,c&=(1<<u)-1,e.next_in=i,e.next_out=a,e.avail_in=i<n?n-i+5:5-(i-n),e.avail_out=a<s?s-a+257:257-(a-s),A.hold=c,A.bits=u};const r=15,s=new Uint16Array([3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0]),o=new Uint8Array([16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78]),l=new Uint16Array([1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0]),d=new Uint8Array([16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64]);var f=(e,t,i,n,a,f,h,c)=>{const u=c.bits;let w,b,k,m,_,g,v=0,p=0,y=0,x=0,E=0,R=0,A=0,Z=0,S=0,O=0,U=null,T=0;const D=new Uint16Array(16),I=new Uint16Array(16);let B,N,C,z=null,F=0;for(v=0;v<=r;v++)D[v]=0;for(p=0;p<n;p++)D[t[i+p]]++;for(E=u,x=r;x>=1&&0===D[x];x--);if(E>x&&(E=x),0===x)return a[f++]=20971520,a[f++]=20971520,c.bits=1,0;for(y=1;y<x&&0===D[y];y++);for(E<y&&(E=y),Z=1,v=1;v<=r;v++)if(Z<<=1,Z-=D[v],Z<0)return-1;if(Z>0&&(0===e||1!==x))return-1;for(I[1]=0,v=1;v<r;v++)I[v+1]=I[v]+D[v];for(p=0;p<n;p++)0!==t[i+p]&&(h[I[t[i+p]]++]=p);if(0===e?(U=z=h,g=19):1===e?(U=s,T-=257,z=o,F-=257,g=256):(U=l,z=d,g=-1),O=0,p=0,v=y,_=f,R=E,A=0,k=-1,S=1<<E,m=S-1,1===e&&S>852||2===e&&S>592)return 1;for(;;){B=v-A,h[p]<g?(N=0,C=h[p]):h[p]>g?(N=z[F+h[p]],C=U[T+h[p]]):(N=96,C=0),w=1<<v-A,b=1<<R,y=b;do{b-=w,a[_+(O>>A)+b]=B<<24|N<<16|C|0}while(0!==b);for(w=1<<v-1;O&w;)w>>=1;if(0!==w?(O&=w-1,O+=w):O=0,p++,0==--D[v]){if(v===x)break;v=t[i+h[p]]}if(v>E&&(O&m)!==k){for(0===A&&(A=E),_+=y,R=v-A,Z=1<<R;R+A<x&&(Z-=D[R+A],!(Z<=0));)R++,Z<<=1;if(S+=1<<R,1===e&&S>852||2===e&&S>592)return 1;k=O&m,a[k]=E<<24|R<<16|_-f|0}}return 0!==O&&(a[_+O]=v-A<<24|64<<16|0),c.bits=E,0},h={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};const{Z_FINISH:c,Z_BLOCK:u,Z_TREES:w,Z_OK:b,Z_STREAM_END:k,Z_NEED_DICT:m,Z_STREAM_ERROR:_,Z_DATA_ERROR:g,Z_MEM_ERROR:v,Z_BUF_ERROR:p,Z_DEFLATED:y}=h,x=12,E=30,R=e=>(e>>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24);function A(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}const Z=e=>{if(!e||!e.state)return _;const t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(852),t.distcode=t.distdyn=new Int32Array(592),t.sane=1,t.back=-1,b},S=e=>{if(!e||!e.state)return _;const t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,Z(e)},O=(e,t)=>{let i;if(!e||!e.state)return _;const n=e.state;return t<0?(i=0,t=-t):(i=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?_:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=i,n.wbits=t,S(e))},U=(e,t)=>{if(!e)return _;const i=new A;e.state=i,i.window=null;const n=O(e,t);return n!==b&&(e.state=null),n};let T,D,I=!0;const B=e=>{if(I){T=new Int32Array(512),D=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(f(1,e.lens,0,288,T,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;f(2,e.lens,0,32,D,0,e.work,{bits:5}),I=!1}e.lencode=T,e.lenbits=9,e.distcode=D,e.distbits=5},N=(e,t,i,n)=>{let a;const r=e.state;return null===r.window&&(r.wsize=1<<r.wbits,r.wnext=0,r.whave=0,r.window=new Uint8Array(r.wsize)),n>=r.wsize?(r.window.set(t.subarray(i-r.wsize,i),0),r.wnext=0,r.whave=r.wsize):(a=r.wsize-r.wnext,a>n&&(a=n),r.window.set(t.subarray(i-n,i-n+a),r.wnext),(n-=a)?(r.window.set(t.subarray(i-n,i),0),r.wnext=n,r.whave=r.wsize):(r.wnext+=a,r.wnext===r.wsize&&(r.wnext=0),r.whave<r.wsize&&(r.whave+=a))),0};var C={inflateReset:S,inflateReset2:O,inflateResetKeep:Z,inflateInit:e=>U(e,15),inflateInit2:U,inflate:(e,i)=>{let r,s,o,l,d,h,A,Z,S,O,U,T,D,I,C,z,F,L,M,H,j,K,P=0;const Y=new Uint8Array(4);let G,X;const W=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(!e||!e.state||!e.output||!e.input&&0!==e.avail_in)return _;r=e.state,r.mode===x&&(r.mode=13),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,O=h,U=A,K=b;e:for(;;)switch(r.mode){case 1:if(0===r.wrap){r.mode=13;break}for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(2&r.wrap&&35615===Z){r.check=0,Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0),Z=0,S=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&Z)<<8)+(Z>>8))%31){e.msg=\"incorrect header check\",r.mode=E;break}if((15&Z)!==y){e.msg=\"unknown compression method\",r.mode=E;break}if(Z>>>=4,S-=4,j=8+(15&Z),0===r.wbits)r.wbits=j;else if(j>r.wbits){e.msg=\"invalid window size\",r.mode=E;break}r.dmax=1<<r.wbits,e.adler=r.check=1,r.mode=512&Z?10:x,Z=0,S=0;break;case 2:for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(r.flags=Z,(255&r.flags)!==y){e.msg=\"unknown compression method\",r.mode=E;break}if(57344&r.flags){e.msg=\"unknown header flags set\",r.mode=E;break}r.head&&(r.head.text=Z>>8&1),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=3;case 3:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.head&&(r.head.time=Z),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,Y[2]=Z>>>16&255,Y[3]=Z>>>24&255,r.check=n(r.check,Y,4,0)),Z=0,S=0,r.mode=4;case 4:for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.head&&(r.head.xflags=255&Z,r.head.os=Z>>8),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0,r.mode=5;case 5:if(1024&r.flags){for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.length=Z,r.head&&(r.head.extra_len=Z),512&r.flags&&(Y[0]=255&Z,Y[1]=Z>>>8&255,r.check=n(r.check,Y,2,0)),Z=0,S=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&(T=r.length,T>h&&(T=h),T&&(r.head&&(j=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Uint8Array(r.head.extra_len)),r.head.extra.set(s.subarray(l,l+T),j)),512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,r.length-=T),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===h)break e;T=0;do{j=s[l+T++],r.head&&j&&r.length<65536&&(r.head.name+=String.fromCharCode(j))}while(j&&T<h);if(512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,j)break e}else r.head&&(r.head.name=null);r.length=0,r.mode=8;case 8:if(4096&r.flags){if(0===h)break e;T=0;do{j=s[l+T++],r.head&&j&&r.length<65536&&(r.head.comment+=String.fromCharCode(j))}while(j&&T<h);if(512&r.flags&&(r.check=n(r.check,s,T,l)),h-=T,l+=T,j)break e}else r.head&&(r.head.comment=null);r.mode=9;case 9:if(512&r.flags){for(;S<16;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(Z!==(65535&r.check)){e.msg=\"header crc mismatch\",r.mode=E;break}Z=0,S=0}r.head&&(r.head.hcrc=r.flags>>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=x;break;case 10:for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}e.adler=r.check=R(Z),Z=0,S=0,r.mode=11;case 11:if(0===r.havedict)return e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,m;e.adler=r.check=1,r.mode=x;case x:if(i===u||i===w)break e;case 13:if(r.last){Z>>>=7&S,S-=7&S,r.mode=27;break}for(;S<3;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}switch(r.last=1&Z,Z>>>=1,S-=1,3&Z){case 0:r.mode=14;break;case 1:if(B(r),r.mode=20,i===w){Z>>>=2,S-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=E}Z>>>=2,S-=2;break;case 14:for(Z>>>=7&S,S-=7&S;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if((65535&Z)!=(Z>>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=E;break}if(r.length=65535&Z,Z=0,S=0,r.mode=15,i===w)break e;case 15:r.mode=16;case 16:if(T=r.length,T){if(T>h&&(T=h),T>A&&(T=A),0===T)break e;o.set(s.subarray(l,l+T),d),h-=T,l+=T,A-=T,d+=T,r.length-=T;break}r.mode=x;break;case 17:for(;S<14;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(r.nlen=257+(31&Z),Z>>>=5,S-=5,r.ndist=1+(31&Z),Z>>>=5,S-=5,r.ncode=4+(15&Z),Z>>>=4,S-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=E;break}r.have=0,r.mode=18;case 18:for(;r.have<r.ncode;){for(;S<3;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.lens[W[r.have++]]=7&Z,Z>>>=3,S-=3}for(;r.have<19;)r.lens[W[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,G={bits:r.lenbits},K=f(0,r.lens,0,19,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid code lengths set\",r.mode=E;break}r.have=0,r.mode=19;case 19:for(;r.have<r.nlen+r.ndist;){for(;P=r.lencode[Z&(1<<r.lenbits)-1],C=P>>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(F<16)Z>>>=C,S-=C,r.lens[r.have++]=F;else{if(16===F){for(X=C+2;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(Z>>>=C,S-=C,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=E;break}j=r.lens[r.have-1],T=3+(3&Z),Z>>>=2,S-=2}else if(17===F){for(X=C+3;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=C,S-=C,j=0,T=3+(7&Z),Z>>>=3,S-=3}else{for(X=C+7;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=C,S-=C,j=0,T=11+(127&Z),Z>>>=7,S-=7}if(r.have+T>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=E;break}for(;T--;)r.lens[r.have++]=j}}if(r.mode===E)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=E;break}if(r.lenbits=9,G={bits:r.lenbits},K=f(1,r.lens,0,r.nlen,r.lencode,0,r.work,G),r.lenbits=G.bits,K){e.msg=\"invalid literal/lengths set\",r.mode=E;break}if(r.distbits=6,r.distcode=r.distdyn,G={bits:r.distbits},K=f(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,G),r.distbits=G.bits,K){e.msg=\"invalid distances set\",r.mode=E;break}if(r.mode=20,i===w)break e;case 20:r.mode=21;case 21:if(h>=6&&A>=258){e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,a(e,U),d=e.next_out,o=e.output,A=e.avail_out,l=e.next_in,s=e.input,h=e.avail_in,Z=r.hold,S=r.bits,r.mode===x&&(r.back=-1);break}for(r.back=0;P=r.lencode[Z&(1<<r.lenbits)-1],C=P>>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(z&&0==(240&z)){for(L=C,M=z,H=F;P=r.lencode[H+((Z&(1<<L+M)-1)>>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,r.length=F,0===z){r.mode=26;break}if(32&z){r.back=-1,r.mode=x;break}if(64&z){e.msg=\"invalid literal/length code\",r.mode=E;break}r.extra=15&z,r.mode=22;case 22:if(r.extra){for(X=r.extra;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.length+=Z&(1<<r.extra)-1,Z>>>=r.extra,S-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;P=r.distcode[Z&(1<<r.distbits)-1],C=P>>>24,z=P>>>16&255,F=65535&P,!(C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(0==(240&z)){for(L=C,M=z,H=F;P=r.distcode[H+((Z&(1<<L+M)-1)>>L)],C=P>>>24,z=P>>>16&255,F=65535&P,!(L+C<=S);){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}Z>>>=L,S-=L,r.back+=L}if(Z>>>=C,S-=C,r.back+=C,64&z){e.msg=\"invalid distance code\",r.mode=E;break}r.offset=F,r.extra=15&z,r.mode=24;case 24:if(r.extra){for(X=r.extra;S<X;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}r.offset+=Z&(1<<r.extra)-1,Z>>>=r.extra,S-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=E;break}r.mode=25;case 25:if(0===A)break e;if(T=U-A,r.offset>T){if(T=r.offset-T,T>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=E;break}T>r.wnext?(T-=r.wnext,D=r.wsize-T):D=r.wnext-T,T>r.length&&(T=r.length),I=r.window}else I=o,D=d-r.offset,T=r.length;T>A&&(T=A),A-=T,r.length-=T;do{o[d++]=I[D++]}while(--T);0===r.length&&(r.mode=21);break;case 26:if(0===A)break e;o[d++]=r.length,A--,r.mode=21;break;case 27:if(r.wrap){for(;S<32;){if(0===h)break e;h--,Z|=s[l++]<<S,S+=8}if(U-=A,e.total_out+=U,r.total+=U,U&&(e.adler=r.check=r.flags?n(r.check,o,U,d-U):t(r.check,o,U,d-U)),U=A,(r.flags?Z:R(Z))!==r.check){e.msg=\"incorrect data check\",r.mode=E;break}Z=0,S=0}r.mode=28;case 28:if(r.wrap&&r.flags){for(;S<32;){if(0===h)break e;h--,Z+=s[l++]<<S,S+=8}if(Z!==(4294967295&r.total)){e.msg=\"incorrect length check\",r.mode=E;break}Z=0,S=0}r.mode=29;case 29:K=k;break e;case E:K=g;break e;case 31:return v;case 32:default:return _}return e.next_out=d,e.avail_out=A,e.next_in=l,e.avail_in=h,r.hold=Z,r.bits=S,(r.wsize||U!==e.avail_out&&r.mode<E&&(r.mode<27||i!==c))&&N(e,e.output,e.next_out,U-e.avail_out),O-=e.avail_in,U-=e.avail_out,e.total_in+=O,e.total_out+=U,r.total+=U,r.wrap&&U&&(e.adler=r.check=r.flags?n(r.check,o,U,e.next_out-U):t(r.check,o,U,e.next_out-U)),e.data_type=r.bits+(r.last?64:0)+(r.mode===x?128:0)+(20===r.mode||15===r.mode?256:0),(0===O&&0===U||i===c)&&K===b&&(K=p),K},inflateEnd:e=>{if(!e||!e.state)return _;let t=e.state;return t.window&&(t.window=null),e.state=null,b},inflateGetHeader:(e,t)=>{if(!e||!e.state)return _;const i=e.state;return 0==(2&i.wrap)?_:(i.head=t,t.done=!1,b)},inflateSetDictionary:(e,i)=>{const n=i.length;let a,r,s;return e&&e.state?(a=e.state,0!==a.wrap&&11!==a.mode?_:11===a.mode&&(r=1,r=t(r,i,n,0),r!==a.check)?g:(s=N(e,i,n,n),s?(a.mode=31,v):(a.havedict=1,b))):_},inflateInfo:\"pako inflate (from Nodeca project)\"};const z=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);var F=function(e){const t=Array.prototype.slice.call(arguments,1);for(;t.length;){const i=t.shift();if(i){if(\"object\"!=typeof i)throw new TypeError(i+\"must be non-object\");for(const t in i)z(i,t)&&(e[t]=i[t])}}return e},L=e=>{let t=0;for(let i=0,n=e.length;i<n;i++)t+=e[i].length;const i=new Uint8Array(t);for(let t=0,n=0,a=e.length;t<a;t++){let a=e[t];i.set(a,n),n+=a.length}return i};let M=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch(e){M=!1}const H=new Uint8Array(256);for(let e=0;e<256;e++)H[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;H[254]=H[254]=1;var j=e=>{let t,i,n,a,r,s=e.length,o=0;for(a=0;a<s;a++)i=e.charCodeAt(a),55296==(64512&i)&&a+1<s&&(n=e.charCodeAt(a+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),a++)),o+=i<128?1:i<2048?2:i<65536?3:4;for(t=new Uint8Array(o),r=0,a=0;r<o;a++)i=e.charCodeAt(a),55296==(64512&i)&&a+1<s&&(n=e.charCodeAt(a+1),56320==(64512&n)&&(i=65536+(i-55296<<10)+(n-56320),a++)),i<128?t[r++]=i:i<2048?(t[r++]=192|i>>>6,t[r++]=128|63&i):i<65536?(t[r++]=224|i>>>12,t[r++]=128|i>>>6&63,t[r++]=128|63&i):(t[r++]=240|i>>>18,t[r++]=128|i>>>12&63,t[r++]=128|i>>>6&63,t[r++]=128|63&i);return t},K=(e,t)=>{let i,n;const a=t||e.length,r=new Array(2*a);for(n=0,i=0;i<a;){let t=e[i++];if(t<128){r[n++]=t;continue}let s=H[t];if(s>4)r[n++]=65533,i+=s-1;else{for(t&=2===s?31:3===s?15:7;s>1&&i<a;)t=t<<6|63&e[i++],s--;s>1?r[n++]=65533:t<65536?r[n++]=t:(t-=65536,r[n++]=55296|t>>10&1023,r[n++]=56320|1023&t)}}return((e,t)=>{if(t<65534&&e.subarray&&M)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let i=\"\";for(let n=0;n<t;n++)i+=String.fromCharCode(e[n]);return i})(r,n)},P=(e,t)=>{(t=t||e.length)>e.length&&(t=e.length);let i=t-1;for(;i>=0&&128==(192&e[i]);)i--;return i<0||0===i?t:i+H[e[i]]>t?i:t},Y={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"};var G=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0};var X=function(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=\"\",this.comment=\"\",this.hcrc=0,this.done=!1};const W=Object.prototype.toString,{Z_NO_FLUSH:q,Z_FINISH:J,Z_OK:Q,Z_STREAM_END:V,Z_NEED_DICT:$,Z_STREAM_ERROR:ee,Z_DATA_ERROR:te,Z_MEM_ERROR:ie}=h;function ne(e){this.options=F({chunkSize:65536,windowBits:15,to:\"\"},e||{});const t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new G,this.strm.avail_out=0;let i=C.inflateInit2(this.strm,t.windowBits);if(i!==Q)throw new Error(Y[i]);if(this.header=new X,C.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=j(t.dictionary):\"[object ArrayBuffer]\"===W.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(i=C.inflateSetDictionary(this.strm,t.dictionary),i!==Q)))throw new Error(Y[i])}function ae(e,t){const i=new ne(t);if(i.push(e),i.err)throw i.msg||Y[i.err];return i.result}ne.prototype.push=function(e,t){const i=this.strm,n=this.options.chunkSize,a=this.options.dictionary;let r,s,o;if(this.ended)return!1;for(s=t===~~t?t:!0===t?J:q,\"[object ArrayBuffer]\"===W.call(e)?i.input=new Uint8Array(e):i.input=e,i.next_in=0,i.avail_in=i.input.length;;){for(0===i.avail_out&&(i.output=new Uint8Array(n),i.next_out=0,i.avail_out=n),r=C.inflate(i,s),r===$&&a&&(r=C.inflateSetDictionary(i,a),r===Q?r=C.inflate(i,s):r===te&&(r=$));i.avail_in>0&&r===V&&i.state.wrap>0&&0!==e[i.next_in];)C.inflateReset(i),r=C.inflate(i,s);switch(r){case ee:case te:case $:case ie:return this.onEnd(r),this.ended=!0,!1}if(o=i.avail_out,i.next_out&&(0===i.avail_out||r===V))if(\"string\"===this.options.to){let e=P(i.output,i.next_out),t=i.next_out-e,a=K(i.output,e);i.next_out=t,i.avail_out=n-t,t&&i.output.set(i.output.subarray(e,e+t),0),this.onData(a)}else this.onData(i.output.length===i.next_out?i.output:i.output.subarray(0,i.next_out));if(r!==Q||0!==o){if(r===V)return r=C.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,!0;if(0===i.avail_in)break}}return!0},ne.prototype.onData=function(e){this.chunks.push(e)},ne.prototype.onEnd=function(e){e===Q&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=L(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};var re=ne,se=ae,oe=function(e,t){return(t=t||{}).raw=!0,ae(e,t)},le=ae,de=h,fe={Inflate:re,inflate:se,inflateRaw:oe,ungzip:le,constants:de};e.Inflate=re,e.constants=de,e.default=fe,e.inflate=se,e.inflateRaw=oe,e.ungzip=le,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { bytesToHex, bytesFromHex, bufferConcats } from '../helpers/bytes';\r\nimport { nextRandomInt } from '../helpers/random';\r\n\r\n//export const secureRandom = new SecureRandom();\r\n\r\nObject.defineProperty(Uint8Array.prototype, 'hex', {\r\n get: function(): string {\r\n return bytesToHex([...this]);\r\n },\r\n \r\n set: function(str: string) {\r\n this.set(bytesFromHex(str));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n});\r\n\r\nUint8Array.prototype.randomize = function() {\r\n //secureRandom.nextBytes(this);\r\n for(let i = 0; i < this.length; ++i) {\r\n this[i] = nextRandomInt(255);\r\n }\r\n return this;\r\n};\r\n\r\nUint8Array.prototype.concat = function(...args: Array<Uint8Array | ArrayBuffer | number[]>) {\r\n return bufferConcats(this, ...args);\r\n};\r\n\r\n/* Uint8Array.prototype.toString = function() {\r\n return String.fromCharCode.apply(null, [...this]);\r\n}; */\r\n\r\nUint8Array.prototype.toJSON = function() {\r\n return [...this];\r\n //return {type: 'bytes', value: [...this]};\r\n};\r\n\r\nArray.prototype.findAndSplice = function<T>(verify: (value: T, index?: number, array?: Array<T>) => boolean) {\r\n let index = this.findIndex(verify);\r\n return index !== -1 ? this.splice(index, 1)[0] : undefined;\r\n};\r\n\r\nString.prototype.toHHMMSS = function(leadZero = false) {\r\n const sec_num = parseInt(this + '', 10);\r\n const hours = Math.floor(sec_num / 3600);\r\n let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60);\r\n let seconds: any = sec_num - (hours * 3600) - (minutes * 60);\r\n \r\n if(hours) leadZero = true;\r\n if(minutes < 10) minutes = leadZero ? \"0\" + minutes : minutes;\r\n if(seconds < 10) seconds = \"0\" + seconds;\r\n return (hours ? /* ('0' + hours).slice(-2) */hours + ':' : '') + minutes + ':' + seconds;\r\n};\r\n\r\n/* Promise.prototype.finally = Promise.prototype.finally || {\r\n finally(fn: () => any) {\r\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\r\n return this.then(\r\n result => onFinally(() => result),\r\n reason => onFinally(() => Promise.reject(reason))\r\n );\r\n }\r\n}.finally; */\r\nPromise.prototype.finally = Promise.prototype.finally || function<T>(this: Promise<T>, fn: () => any) {\r\n const onFinally = (callback: typeof fn) => Promise.resolve(fn()).then(callback);\r\n return this.then(\r\n result => onFinally(() => result),\r\n reason => onFinally(() => Promise.reject(reason))\r\n );\r\n};\r\n\r\ndeclare global {\r\n interface Uint8Array {\r\n hex: string;\r\n randomize: () => Uint8Array,\r\n concat: (...args: Array<Uint8Array | ArrayBuffer | number[]>) => Uint8Array,\r\n //toString: () => string,\r\n toJSON: () => number[],\r\n //toJSON: () => {type: 'bytes', value: number[]},\r\n }\r\n \r\n interface Array<T> {\r\n findAndSplice(verify: (value: T, index?: number, array?: Array<T>) => boolean): T;\r\n }\r\n \r\n interface String {\r\n toHHMMSS(leadZero?: boolean): string;\r\n }\r\n\r\n interface Promise<T> {\r\n finally: (onfinally?: () => void) => Promise<T>;\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '.';\r\n\r\nconst DATABASE_SESSION: Database<'session'> = {\r\n name: 'telegram',\r\n version: 1,\r\n stores: [{\r\n name: 'session'\r\n }]\r\n};\r\n\r\nexport default DATABASE_SESSION;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport interface CancellablePromise<T> extends Promise<T> {\r\n resolve?: (...args: any[]) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise<T>() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n lastNotify: undefined,\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise<T> = new Promise<T>((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise<ReturnType<typeof resolve>>();\r\n \r\n }; */\r\n\r\n deferred.finally(() => {\r\n deferred.notify = null;\r\n deferred.listeners.length = 0;\r\n deferred.lastNotify = null;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// * Jolly Cobra's schedulers\r\nimport { AnyToVoidFunction, NoneToVoidFunction } from \"../types\";\r\n\r\n//type Scheduler = typeof requestAnimationFrame | typeof onTickEnd | typeof runNow;\r\n\r\nexport function debounce<F extends AnyToVoidFunction>(\r\n fn: F,\r\n ms: number,\r\n shouldRunFirst = true,\r\n shouldRunLast = true,\r\n) {\r\n let waitingTimeout: number | null = null;\r\n\r\n return (...args: Parameters<F>) => {\r\n if(waitingTimeout) {\r\n clearTimeout(waitingTimeout);\r\n waitingTimeout = null;\r\n } else if(shouldRunFirst) {\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n waitingTimeout = setTimeout(() => {\r\n if(shouldRunLast) {\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n waitingTimeout = null;\r\n }, ms) as any;\r\n };\r\n}\r\n\r\nexport function throttle<F extends AnyToVoidFunction>(\r\n fn: F,\r\n ms: number,\r\n shouldRunFirst = true,\r\n) {\r\n let interval: number | null = null;\r\n let isPending: boolean;\r\n let args: Parameters<F>;\r\n\r\n return (..._args: Parameters<F>) => {\r\n isPending = true;\r\n args = _args;\r\n\r\n if(!interval) {\r\n if(shouldRunFirst) {\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n interval = setInterval(() => {\r\n if (!isPending) {\r\n clearInterval(interval!);\r\n interval = null;\r\n return;\r\n }\r\n\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }, ms) as any;\r\n }\r\n };\r\n}\r\n\r\n/* export function throttleWithRaf<F extends AnyToVoidFunction>(fn: F) {\r\n return throttleWith(fastRaf, fn);\r\n}\r\n\r\nexport function throttleWithTickEnd<F extends AnyToVoidFunction>(fn: F) {\r\n return throttleWith(onTickEnd, fn);\r\n}\r\n\r\nexport function throttleWithNow<F extends AnyToVoidFunction>(fn: F) {\r\n return throttleWith(runNow, fn);\r\n}\r\n\r\nexport function throttleWith<F extends AnyToVoidFunction>(schedulerFn: Scheduler, fn: F) {\r\n let waiting = false;\r\n let args: Parameters<F>;\r\n\r\n return (..._args: Parameters<F>) => {\r\n args = _args;\r\n\r\n if (!waiting) {\r\n waiting = true;\r\n\r\n schedulerFn(() => {\r\n waiting = false;\r\n // @ts-ignore\r\n fn(...args);\r\n });\r\n }\r\n };\r\n}\r\n\r\nexport function onTickEnd(cb: NoneToVoidFunction) {\r\n Promise.resolve().then(cb);\r\n}\r\n\r\nfunction runNow(fn: NoneToVoidFunction) {\r\n fn();\r\n} */\r\n\r\nexport const pause = (ms: number) => new Promise<void>((resolve) => {\r\n setTimeout(resolve, ms);\r\n});\r\n\r\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\r\nexport function fastRaf(callback: NoneToVoidFunction) {\r\n if(!fastRafCallbacks) {\r\n fastRafCallbacks = [callback];\r\n\r\n requestAnimationFrame(() => {\r\n const currentCallbacks = fastRafCallbacks!;\r\n fastRafCallbacks = undefined;\r\n currentCallbacks.forEach((cb) => cb());\r\n });\r\n } else {\r\n fastRafCallbacks.push(callback);\r\n }\r\n}\r\n\r\nexport function doubleRaf() {\r\n return new Promise<void>((resolve) => {\r\n fastRaf(() => {\r\n fastRaf(resolve);\r\n });\r\n });\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport const readBlobAsText = (blob: Blob) => {\r\n return new Promise<string>(resolve => {\r\n const reader = new FileReader();\r\n reader.addEventListener('loadend', (e) => {\r\n // @ts-ignore\r\n resolve(e.srcElement.result);\r\n });\r\n reader.readAsText(blob);\r\n });\r\n};\r\n\r\nexport function blobConstruct(blobParts: any, mimeType: string = ''): Blob {\r\n let blob;\r\n const safeMimeType = blobSafeMimeType(mimeType);\r\n try {\r\n blob = new Blob(blobParts, {type: safeMimeType});\r\n } catch(e) {\r\n // @ts-ignore\r\n let bb = new BlobBuilder;\r\n blobParts.forEach((blobPart: any) => {\r\n bb.append(blobPart);\r\n });\r\n blob = bb.getBlob(safeMimeType);\r\n }\r\n return blob;\r\n}\r\n\r\n// https://www.iana.org/assignments/media-types/media-types.xhtml\r\nexport function blobSafeMimeType(mimeType: string) {\r\n if([\r\n 'image/jpeg',\r\n 'image/png',\r\n 'image/gif',\r\n 'image/webp',\r\n 'image/bmp',\r\n 'video/mp4',\r\n 'video/webm',\r\n 'video/quicktime',\r\n 'audio/ogg',\r\n 'audio/mpeg',\r\n 'audio/mp4',\r\n 'application/json',\r\n 'application/pdf'\r\n ].indexOf(mimeType) === -1) {\r\n return 'application/octet-stream';\r\n }\r\n\r\n return mimeType;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from '../config/databases';\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport { safeAssign } from '../helpers/object';\r\nimport { logger } from './logger';\r\n\r\n/**\r\n * https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex\r\n */\r\nexport type IDBIndex = {\r\n indexName: string,\r\n keyPath: string,\r\n objectParameters: IDBIndexParameters\r\n};\r\n\r\nexport type IDBStore = {\r\n name: string, \r\n indexes?: IDBIndex[]\r\n};\r\n\r\nexport type IDBOptions = {\r\n name?: string,\r\n storeName: string,\r\n stores?: IDBStore[],\r\n version?: number\r\n};\r\n\r\nconst DEBUG = false;\r\n\r\nexport default class IDBStorage<T extends Database<any>> {\r\n private static STORAGES: IDBStorage<Database<any>>[] = [];\r\n private openDbPromise: Promise<IDBDatabase>;\r\n private db: IDBDatabase;\r\n private storageIsAvailable = true;\r\n\r\n private log: ReturnType<typeof logger>;\r\n \r\n private name: string;\r\n private version: number;\r\n private stores: IDBStore[];\r\n private storeName: string;\r\n\r\n constructor(db: T, storeName: typeof db['stores'][0]['name']) {\r\n safeAssign(this, db);\r\n\r\n if(Modes.test) {\r\n this.name += '_test';\r\n }\r\n\r\n this.storeName = storeName;\r\n\r\n this.log = logger('IDB-' + this.storeName);\r\n\r\n this.openDatabase(true);\r\n\r\n IDBStorage.STORAGES.push(this);\r\n }\r\n\r\n public static closeDatabases() {\r\n this.STORAGES.forEach(storage => {\r\n const db = storage.db;\r\n if(db) {\r\n db.onclose = () => {};\r\n db.close();\r\n }\r\n });\r\n }\r\n\r\n public static deleteDatabase() {\r\n this.closeDatabases();\r\n\r\n const storages = this.STORAGES;\r\n const dbNames = Array.from(new Set(storages.map(storage => storage.name)));\r\n const promises = dbNames.map(dbName => {\r\n return new Promise<void>((resolve, reject) => {\r\n const deleteRequest = indexedDB.deleteDatabase(dbName);\r\n \r\n deleteRequest.onerror = () => {\r\n reject();\r\n };\r\n \r\n deleteRequest.onsuccess = () => {\r\n resolve();\r\n };\r\n });\r\n });\r\n\r\n return Promise.all(promises);\r\n }\r\n\r\n public isAvailable() {\r\n return this.storageIsAvailable;\r\n }\r\n\r\n public openDatabase(createNew = false): Promise<IDBDatabase> {\r\n if(this.openDbPromise && !createNew) {\r\n return this.openDbPromise;\r\n }\r\n\r\n const createObjectStore = (db: IDBDatabase, store: IDBStore) => {\r\n const os = db.createObjectStore(store.name);\r\n\r\n if(store.indexes?.length) {\r\n for(const index of store.indexes) {\r\n os.createIndex(index.indexName, index.keyPath, index.objectParameters);\r\n }\r\n }\r\n };\r\n\r\n try {\r\n var request = indexedDB.open(this.name, this.version);\r\n\r\n if(!request) {\r\n return Promise.reject();\r\n }\r\n } catch(error) {\r\n this.log.error('error opening db', error.message)\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n let finished = false;\r\n setTimeout(() => {\r\n if(!finished) {\r\n request.onerror({type: 'IDB_CREATE_TIMEOUT'} as Event);\r\n }\r\n }, 3000);\r\n\r\n return this.openDbPromise = new Promise<IDBDatabase>((resolve, reject) => {\r\n request.onsuccess = (event) => {\r\n finished = true;\r\n const db = request.result;\r\n let calledNew = false;\r\n\r\n this.log('Opened');\r\n \r\n db.onerror = (error) => {\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', error);\r\n reject(error);\r\n };\r\n\r\n db.onclose = (e) => {\r\n this.log.error('closed:', e);\r\n !calledNew && this.openDatabase();\r\n };\r\n\r\n db.onabort = (e) => {\r\n this.log.error('abort:', e);\r\n const transaction = e.target as IDBTransaction;\r\n \r\n this.openDatabase(calledNew = true);\r\n\r\n if(transaction.onerror) {\r\n transaction.onerror(e);\r\n }\r\n\r\n db.close();\r\n };\r\n\r\n db.onversionchange = (e) => {\r\n this.log.error('onversionchange, lol?');\r\n };\r\n\r\n resolve(this.db = db);\r\n };\r\n \r\n request.onerror = (event) => {\r\n finished = true;\r\n this.storageIsAvailable = false;\r\n this.log.error('Error creating/accessing IndexedDB database', event);\r\n reject(event);\r\n };\r\n \r\n request.onupgradeneeded = (event) => {\r\n finished = true;\r\n this.log.warn('performing idb upgrade from', event.oldVersion, 'to', event.newVersion);\r\n\r\n // @ts-ignore\r\n var db = event.target.result as IDBDatabase;\r\n this.stores.forEach((store) => {\r\n /* if(db.objectStoreNames.contains(store.name)) {\r\n //if(event.oldVersion === 1) {\r\n db.deleteObjectStore(store.name);\r\n //}\r\n } */\r\n \r\n if(!db.objectStoreNames.contains(store.name)) {\r\n createObjectStore(db, store);\r\n }\r\n });\r\n };\r\n });\r\n }\r\n\r\n public delete(entryName: string | string[]): Promise<void> {\r\n //return Promise.resolve();\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.delete(entryName));\r\n }, DEBUG ? 'delete: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public deleteAll() {\r\n return this.getObjectStore('readwrite', (objectStore) => objectStore.clear(), DEBUG ? 'deleteAll' : '');\r\n }\r\n\r\n public save(entryName: string | string[], value: any | any[]) {\r\n // const handleError = (error: Error) => {\r\n // this.log.error('save: transaction error:', entryName, value, db, error, error && error.name);\r\n // if((!error || error.name === 'InvalidStateError')/* && false */) {\r\n // setTimeout(() => {\r\n // this.save(entryName, value);\r\n // }, 2e3);\r\n // } else {\r\n // //console.error('IndexedDB saveFile transaction error:', error, error && error.name);\r\n // }\r\n // };\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n value = [].concat(value);\r\n }\r\n \r\n return this.getObjectStore('readwrite', (objectStore) => {\r\n return (entryName as string[]).map((entryName, idx) => objectStore.put(value[idx], entryName));\r\n }, DEBUG ? 'save: ' + entryName.join(', ') : '');\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct([blob]) as Blob;\r\n }\r\n\r\n return this.save(fileName, blob);\r\n }\r\n\r\n /* public saveFileBase64(db: IDBDatabase, fileName: string, blob: Blob | any): Promise<Blob> {\r\n if(this.getBlobSize(blob) > 10 * 1024 * 1024) {\r\n return Promise.reject();\r\n }\r\n\r\n if(!(blob instanceof Blob)) {\r\n var safeMimeType = blobSafeMimeType(blob.type || 'image/jpeg');\r\n var address = 'data:' + safeMimeType + ';base64,' + bytesToBase64(blob);\r\n return this.storagePutB64String(db, fileName, address).then(() => {\r\n return blob;\r\n });\r\n }\r\n\r\n try {\r\n var reader = new FileReader();\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n let promise = new Promise<Blob>((resolve, reject) => {\r\n reader.onloadend = () => {\r\n this.storagePutB64String(db, fileName, reader.result as string).then(() => {\r\n resolve(blob);\r\n }, reject);\r\n }\r\n \r\n reader.onerror = reject;\r\n });\r\n \r\n\r\n try {\r\n reader.readAsDataURL(blob);\r\n } catch (e) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject();\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public storagePutB64String(db: IDBDatabase, fileName: string, b64string: string) {\r\n try {\r\n var objectStore = db.transaction([this.storeName], 'readwrite')\r\n .objectStore(this.storeName);\r\n var request = objectStore.put(b64string, fileName);\r\n } catch(error) {\r\n this.storageIsAvailable = false;\r\n return Promise.reject(error);\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n resolve();\r\n };\r\n \r\n request.onerror = reject;\r\n });\r\n }\r\n\r\n public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public get<T>(entryName: string[]): Promise<T[]>;\r\n public get<T>(entryName: string): Promise<T>;\r\n public get<T>(entryName: string | string[]): Promise<T> | Promise<T[]> {\r\n //return Promise.reject();\r\n\r\n if(!Array.isArray(entryName)) {\r\n entryName = [].concat(entryName);\r\n }\r\n\r\n return this.getObjectStore<T>('readonly', (objectStore) => {\r\n return (entryName as string[]).map((entryName) => objectStore.get(entryName));\r\n }, DEBUG ? 'get: ' + entryName.join(', ') : '');\r\n }\r\n\r\n private getObjectStore<T>(mode: IDBTransactionMode, objectStore: (objectStore: IDBObjectStore) => IDBRequest | IDBRequest[], log?: string) {\r\n let perf: number;\r\n\r\n if(log) {\r\n perf = performance.now();\r\n this.log(log + ': start');\r\n }\r\n\r\n return this.openDatabase().then((db) => {\r\n return new Promise<T>((resolve, reject) => {\r\n const transaction = db.transaction([this.storeName], mode);\r\n\r\n transaction.onerror = (e) => {\r\n clearTimeout(timeout);\r\n reject(transaction.error);\r\n };\r\n \r\n transaction.oncomplete = (e) => {\r\n clearTimeout(timeout);\r\n\r\n if(log) {\r\n this.log(log + ': end', performance.now() - perf);\r\n }\r\n\r\n const results = r.map(r => r.result);\r\n resolve(isArray ? results : results[0]);\r\n };\r\n \r\n const timeout = setTimeout(() => {\r\n this.log.error('transaction not finished', transaction);\r\n }, 10000);\r\n \r\n /* transaction.addEventListener('abort', (e) => {\r\n //handleError();\r\n this.log.error('IndexedDB: transaction abort!', transaction.error);\r\n }); */\r\n \r\n const requests = objectStore(transaction.objectStore(this.storeName));\r\n\r\n const isArray = Array.isArray(requests);\r\n const r: IDBRequest[] = isArray ? requests : [].concat(requests) as any;\r\n\r\n // const length = r.length;\r\n // /* let left = length;\r\n\r\n // const onRequestFinished = (error?: Error) => {\r\n // if(!--left) {\r\n // resolve(result);\r\n // clearTimeout(timeout);\r\n // }\r\n // }; */\r\n\r\n // for(let i = 0; i < length; ++i) {\r\n // const request = r[i];\r\n // request.onsuccess = () => {\r\n // onRequestFinished();\r\n // };\r\n\r\n // request.onerror = (e) => {\r\n // onRequestFinished(transaction.error);\r\n // };\r\n // }\r\n });\r\n });\r\n }\r\n\r\n public getAll<T>(): Promise<T[]> {\r\n return this.getObjectStore<T[]>('readonly', (objectStore) => objectStore.getAll(), DEBUG ? 'getAll' : '');\r\n }\r\n\r\n /* public getAllKeys(): Promise<Array<string>> {\r\n console.time('getAllEntries');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.getAllKeys();\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var result = event.target.result;\r\n resolve(result);\r\n console.timeEnd('getAllEntries');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public isFileExists(fileName: string): Promise<boolean> {\r\n console.time('isFileExists');\r\n return this.openDatabase().then((db) => {\r\n var objectStore = db.transaction([this.storeName], 'readonly')\r\n .objectStore(this.storeName);\r\n var request = objectStore.openCursor(fileName);\r\n\r\n return new Promise((resolve, reject) => {\r\n request.onsuccess = function(event) {\r\n // @ts-ignore\r\n var cursor = event.target.result;\r\n resolve(!!cursor);\r\n console.timeEnd('isFileExists');\r\n }\r\n \r\n request.onerror = reject;\r\n });\r\n });\r\n } */\r\n\r\n /* public getFileWriter(fileName: string, mimeType: string) {\r\n var fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n } */\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nexport function copy<T>(obj: T): T {\r\n //in case of premitives\r\n if(obj === null || typeof(obj) !== \"object\") {\r\n return obj;\r\n }\r\n \r\n //date objects should be \r\n if(obj instanceof Date) {\r\n return new Date(obj.getTime()) as any;\r\n }\r\n \r\n //handle Array\r\n if(Array.isArray(obj)) {\r\n // @ts-ignore\r\n const clonedArr: T = obj.map(el => copy(el)) as any as T;\r\n return clonedArr;\r\n }\r\n \r\n //lastly, handle objects\r\n // @ts-ignore\r\n let clonedObj = new obj.constructor();\r\n for(var prop in obj){\r\n if(obj.hasOwnProperty(prop)) {\r\n clonedObj[prop] = copy(obj[prop]);\r\n }\r\n }\r\n return clonedObj;\r\n}\r\n\r\nexport function deepEqual(x: any, y: any): boolean {\r\n const ok = Object.keys, tx = typeof x, ty = typeof y;\r\n return x && y && tx === 'object' && tx === ty ? (\r\n ok(x).length === ok(y).length &&\r\n ok(x).every(key => deepEqual(x[key], y[key]))\r\n ) : (x === y);\r\n}\r\n\r\nexport function defineNotNumerableProperties(obj: {[key: string]: any}, names: string[]) {\r\n //const perf = performance.now();\r\n const props = {writable: true, configurable: true};\r\n const out: {[name: string]: typeof props} = {};\r\n names.forEach(name => {\r\n if(obj[name] === undefined) {\r\n out[name] = props;\r\n }\r\n });\r\n Object.defineProperties(obj, out);\r\n //console.log('defineNotNumerableProperties time:', performance.now() - perf);\r\n}\r\n\r\nexport function getObjectKeysAndSort(object: any, sort: 'asc' | 'desc' = 'asc') {\r\n if(!object) return [];\r\n const ids = Object.keys(object).map(i => +i);\r\n if(sort === 'asc') return ids.sort((a, b) => a - b);\r\n else return ids.sort((a, b) => b - a);\r\n}\r\n\r\nexport function safeReplaceObject(wasObject: any, newObject: any) {\r\n if(!wasObject) {\r\n return newObject;\r\n }\r\n\r\n for(var key in wasObject) {\r\n if(!newObject.hasOwnProperty(key)) {\r\n delete wasObject[key];\r\n }\r\n }\r\n\r\n for(var key in newObject) {\r\n //if (newObject.hasOwnProperty(key)) { // useless\r\n wasObject[key] = newObject[key];\r\n //}\r\n }\r\n \r\n return wasObject;\r\n}\r\n\r\n/**\r\n * Will be used for FILE_REFERENCE_EXPIRED\r\n * @param key \r\n * @param wasObject \r\n * @param newObject \r\n */\r\nexport function safeReplaceArrayInObject<K>(key: K, wasObject: any, newObject: any) {\r\n if('byteLength' in newObject[key]) { // Uint8Array\r\n newObject[key] = [...newObject[key]];\r\n }\r\n\r\n if(wasObject && wasObject[key] !== newObject[key]) {\r\n wasObject[key].length = newObject[key].length;\r\n (newObject[key] as any[]).forEach((v, i) => {\r\n wasObject[key][i] = v;\r\n });\r\n\r\n /* wasObject[key].set(newObject[key]); */\r\n newObject[key] = wasObject[key];\r\n }\r\n}\r\n\r\nexport function isObject(object: any) {\r\n return typeof(object) === 'object' && object !== null;\r\n}\r\n\r\nexport function getDeepProperty(object: any, key: string) {\r\n const splitted = key.split('.');\r\n let o: any = object;\r\n splitted.forEach(key => {\r\n if(!key) {\r\n return;\r\n }\r\n \r\n // @ts-ignore\r\n o = o[key];\r\n });\r\n \r\n return o;\r\n}\r\n\r\nexport function setDeepProperty(object: any, key: string, value: any) {\r\n const splitted = key.split('.');\r\n getDeepProperty(object, splitted.slice(0, -1).join('.'))[splitted.pop()] = value;\r\n}\r\n\r\nexport function validateInitObject(initObject: any, currentObject: any, onReplace?: (key: string) => void, previousKey?: string) {\r\n for(const key in initObject) {\r\n if(typeof(currentObject[key]) !== typeof(initObject[key])) {\r\n currentObject[key] = copy(initObject[key]);\r\n onReplace && onReplace(previousKey || key);\r\n } else if(isObject(initObject[key])) {\r\n validateInitObject(initObject[key], currentObject[key], onReplace, previousKey || key);\r\n }\r\n }\r\n}\r\n\r\nexport function safeAssign(object: any, fromObject: any) {\r\n if(!fromObject) return;\r\n \r\n for(let i in fromObject) {\r\n if(fromObject[i] !== undefined) {\r\n object[i] = fromObject[i];\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { Database } from \"../config/databases\";\r\nimport DATABASE_SESSION from \"../config/databases/session\";\r\nimport { CancellablePromise, deferredPromise } from \"../helpers/cancellablePromise\";\r\nimport { throttle } from \"../helpers/schedulers\";\r\nimport { WorkerTaskTemplate } from \"../types\";\r\nimport IDBStorage from \"./idb\";\r\n\r\nfunction noop() {}\r\n\r\nexport interface LocalStorageProxySetTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'set',\r\n keys: string[],\r\n values: any[]\r\n }\r\n};\r\n\r\nexport interface LocalStorageProxyDeleteTask extends WorkerTaskTemplate {\r\n type: 'localStorageProxy',\r\n payload: {\r\n type: 'delete',\r\n keys: string[]\r\n }\r\n};\r\n\r\nexport default class AppStorage<Storage extends Record<string, any>, T extends Database<any>/* Storage extends {[name: string]: any} *//* Storage extends Record<string, any> */> {\r\n private static STORAGES: AppStorage<any, Database<any>>[] = [];\r\n private storage: IDBStorage<T>;//new CacheStorageController('session');\r\n\r\n //private cache: Partial<{[key: string]: Storage[typeof key]}> = {};\r\n private cache: Partial<Storage> = {};\r\n private useStorage = true;\r\n\r\n private getPromises: Map<keyof Storage, CancellablePromise<Storage[keyof Storage]>> = new Map();\r\n private getThrottled: () => void;\r\n\r\n private keysToSet: Set<keyof Storage> = new Set();\r\n private saveThrottled: () => void;\r\n private saveDeferred = deferredPromise<void>();\r\n\r\n private keysToDelete: Set<keyof Storage> = new Set();\r\n private deleteThrottled: () => void;\r\n private deleteDeferred = deferredPromise<void>();\r\n\r\n constructor(private db: T, storeName: typeof db['stores'][number]['name']) {\r\n this.storage = new IDBStorage<T>(db, storeName);\r\n\r\n AppStorage.STORAGES.push(this);\r\n\r\n this.saveThrottled = throttle(async() => {\r\n const deferred = this.saveDeferred;\r\n this.saveDeferred = deferredPromise<void>();\r\n\r\n const set = this.keysToSet;\r\n if(set.size) {\r\n const keys = Array.from(set.values()) as string[];\r\n set.clear();\r\n\r\n try {\r\n //console.log('setItem: will set', key/* , value */);\r\n //await this.cacheStorage.delete(key); // * try to prevent memory leak in Chrome leading to 'Unexpected internal error.'\r\n //await this.storage.save(key, new Response(value, {headers: {'Content-Type': 'application/json'}}));\r\n\r\n const values = keys.map(key => this.cache[key]);\r\n if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\r\n self.postMessage({\r\n type: 'localStorageProxy', \r\n payload: {\r\n type: 'set',\r\n keys,\r\n values\r\n }\r\n } as LocalStorageProxySetTask);\r\n }\r\n\r\n await this.storage.save(keys, values);\r\n //console.log('setItem: have set', key/* , value */);\r\n } catch(e) {\r\n //this.useCS = false;\r\n console.error('[AS]: set error:', e, keys/* , value */);\r\n }\r\n }\r\n\r\n deferred.resolve();\r\n\r\n if(set.size) {\r\n this.saveThrottled();\r\n }\r\n }, 16, false);\r\n\r\n this.deleteThrottled = throttle(async() => {\r\n const deferred = this.deleteDeferred;\r\n this.deleteDeferred = deferredPromise<void>();\r\n\r\n const set = this.keysToDelete;\r\n if(set.size) {\r\n const keys = Array.from(set.values()) as string[];\r\n set.clear();\r\n\r\n try {\r\n if(db === DATABASE_SESSION && !('localStorage' in self)) { // * support legacy Webogram's localStorage\r\n self.postMessage({\r\n type: 'localStorageProxy', \r\n payload: {\r\n type: 'delete',\r\n keys\r\n }\r\n } as LocalStorageProxyDeleteTask);\r\n }\r\n\r\n await this.storage.delete(keys);\r\n } catch(e) {\r\n console.error('[AS]: delete error:', e, keys);\r\n }\r\n }\r\n\r\n deferred.resolve();\r\n\r\n if(set.size) {\r\n this.deleteThrottled();\r\n }\r\n }, 16, false);\r\n\r\n this.getThrottled = throttle(async() => {\r\n const keys = Array.from(this.getPromises.keys());\r\n\r\n this.storage.get(keys as string[]).then(values => {\r\n for(let i = 0, length = keys.length; i < length; ++i) {\r\n const key = keys[i];\r\n const deferred = this.getPromises.get(key);\r\n if(deferred) {\r\n // @ts-ignore\r\n deferred.resolve(this.cache[key] = values[i]);\r\n this.getPromises.delete(key);\r\n }\r\n }\r\n }, (error) => {\r\n if(!['NO_ENTRY_FOUND', 'STORAGE_OFFLINE'].includes(error)) {\r\n this.useStorage = false;\r\n console.error('[AS]: get error:', error, keys, storeName);\r\n }\r\n\r\n for(let i = 0, length = keys.length; i < length; ++i) {\r\n const key = keys[i];\r\n const deferred = this.getPromises.get(key);\r\n if(deferred) {\r\n //deferred.reject(error);\r\n deferred.resolve();\r\n this.getPromises.delete(key);\r\n }\r\n }\r\n }).finally(() => {\r\n if(this.getPromises.size) {\r\n this.getThrottled();\r\n }\r\n });\r\n }, 16, false);\r\n }\r\n\r\n public isAvailable() {\r\n return this.useStorage;\r\n }\r\n\r\n public getCache() {\r\n return this.cache;\r\n }\r\n\r\n public getFromCache<T extends keyof Storage>(key: T) {\r\n return this.cache[key];\r\n }\r\n\r\n public setToCache(key: keyof Storage, value: Storage[typeof key]) {\r\n return this.cache[key] = value;\r\n }\r\n\r\n public async get<T extends keyof Storage>(key: T, useCache = true): Promise<Storage[T]> {\r\n if(this.cache.hasOwnProperty(key) && useCache) {\r\n return this.getFromCache(key);\r\n } else if(this.useStorage) {\r\n const r = this.getPromises.get(key);\r\n if(r) return r as any;\r\n\r\n const p = deferredPromise<Storage[typeof key]>();\r\n this.getPromises.set(key, p);\r\n\r\n this.getThrottled();\r\n\r\n return p;\r\n }/* else {\r\n throw 'something went wrong';\r\n } */\r\n }\r\n\r\n public getAll() {\r\n return this.storage.getAll().catch(() => []);\r\n }\r\n\r\n public set(obj: Partial<Storage>, onlyLocal = false) {\r\n //console.log('storageSetValue', obj, callback, arguments);\r\n\r\n for(const key in obj) {\r\n if(obj.hasOwnProperty(key)) {\r\n const value = obj[key];\r\n this.setToCache(key, value);\r\n\r\n // let perf = /* DEBUG */false ? performance.now() : 0;\r\n // value = JSON.stringify(value);\r\n\r\n // if(perf) {\r\n // let elapsedTime = performance.now() - perf;\r\n // if(elapsedTime > 10) {\r\n // console.warn('LocalStorage set: stringify time by JSON.stringify:', elapsedTime, key);\r\n // }\r\n // }\r\n \r\n /* perf = performance.now();\r\n value = stringify(value);\r\n console.log('LocalStorage set: stringify time by own stringify:', performance.now() - perf); */\r\n\r\n if(this.useStorage && !onlyLocal) {\r\n this.keysToSet.add(key);\r\n this.keysToDelete.delete(key);\r\n this.saveThrottled();\r\n }\r\n }\r\n }\r\n\r\n return this.useStorage ? this.saveDeferred : Promise.resolve();\r\n }\r\n\r\n public delete(key: keyof Storage, saveLocal = false) {\r\n /* if(!this.cache.hasOwnProperty(key)) {\r\n return;\r\n } */\r\n\r\n // ! it is needed here\r\n key = '' + key;\r\n\r\n if(!saveLocal) {\r\n delete this.cache[key];\r\n }\r\n \r\n if(this.useStorage) {\r\n this.keysToSet.delete(key);\r\n this.keysToDelete.add(key);\r\n this.deleteThrottled();\r\n }\r\n\r\n return this.useStorage ? this.deleteDeferred : Promise.resolve();\r\n }\r\n\r\n public clear() {\r\n return this.storage.deleteAll().catch(noop);\r\n }\r\n\r\n public static toggleStorage(enabled: boolean) {\r\n return Promise.all(this.STORAGES.map(storage => {\r\n storage.useStorage = enabled;\r\n \r\n if(!enabled) {\r\n storage.keysToSet.clear();\r\n storage.keysToDelete.clear();\r\n storage.getPromises.forEach((deferred) => deferred.resolve());\r\n storage.getPromises.clear();\r\n\r\n if(storage.db === DATABASE_SESSION && 'localStorage' in self) { // * support legacy Webogram's localStorage\r\n localStorage.clear();\r\n }\r\n\r\n return storage.clear();\r\n } else {\r\n if(storage.db === DATABASE_SESSION && 'localStorage' in self) { // * support legacy Webogram's localStorage\r\n for(const i in storage.cache) {\r\n if(storage.cache[i] !== undefined) {\r\n localStorage.setItem(i, JSON.stringify(storage.cache[i]));\r\n }\r\n }\r\n }\r\n\r\n return storage.set(storage.cache);\r\n }\r\n })).catch(noop);\r\n }\r\n\r\n public deleteDatabase() {\r\n return IDBStorage.deleteDatabase().catch(noop);\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { AppInstance } from './mtproto/singleInstance';\r\nimport type { UserAuth } from './mtproto/mtproto_config';\r\nimport { MOUNT_CLASS_TO } from '../config/debug';\r\nimport AppStorage from './storage';\r\nimport DATABASE_SESSION from '../config/databases/session';\r\n\r\nconst sessionStorage = new AppStorage<{\r\n dc: number,\r\n user_auth: UserAuth,\r\n dc1_auth_key: string,\r\n dc2_auth_key: string,\r\n dc3_auth_key: string,\r\n dc4_auth_key: string,\r\n dc5_auth_key: string,\r\n dc1_server_salt: string,\r\n dc2_server_salt: string,\r\n dc3_server_salt: string,\r\n dc4_server_salt: string,\r\n dc5_server_salt: string,\r\n server_time_offset: number,\r\n xt_instance: AppInstance\r\n}, typeof DATABASE_SESSION>(DATABASE_SESSION, 'session');\r\nMOUNT_CLASS_TO.appStorage = sessionStorage;\r\nexport default sessionStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport type MTProtoConstructor = {\r\n id: number,\r\n predicate: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\nexport type MTProtoMethod = {\r\n id: number,\r\n method: string,\r\n params: Array<{\r\n name: string,\r\n type: string\r\n }>,\r\n type: string\r\n};\r\n\r\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<long>\"}],\"type\":\"ResPQ\"},{\"id\":2211011308,\"predicate\":\"p_q_inner_data\",\"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\"}],\"type\":\"P_Q_inner_data\"},{\"id\":2851430293,\"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\":\"1013613780\",\"predicate\":\"p_q_inner_data_temp\",\"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\":\"expires_in\",\"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_d\"},{\"id\":\"2043348061\",\"predicate\":\"server_DH_params_fail\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"},{\"name\":\"server_nonce\",\"type\":\"int128\"},{\"name\":\"new_nonce_hash\",\"type\":\"int128\"}],\"type\":\"Server_DH_Params\"},{\"id\":3504867164,\"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\":3045658042,\"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\":2795351554,\"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\":4082920705,\"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\":3447252358,\"predicate\":\"rpc_answer_dropped_running\",\"params\":[],\"type\":\"RpcDropAnswer\"},{\"id\":2755319991,\"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\":2924480661,\"predicate\":\"future_salts\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"now\",\"type\":\"int\"},{\"name\":\"salts\",\"type\":\"vector<future_salt>\"}],\"type\":\"FutureSalts\"},{\"id\":\"880243653\",\"predicate\":\"pong\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":2663516424,\"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\":3764405938,\"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<long>\"}],\"type\":\"MsgsAck\"},{\"id\":2817521681,\"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\":3987424379,\"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<long>\"}],\"type\":\"MsgResendReq\"},{\"id\":2249243371,\"predicate\":\"msg_resend_ans_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgResendReq\"},{\"id\":3664378706,\"predicate\":\"msgs_state_req\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"}],\"type\":\"MsgsStateReq\"},{\"id\":\"81704317\",\"predicate\":\"msgs_state_info\",\"params\":[{\"name\":\"req_msg_id\",\"type\":\"long\"},{\"name\":\"info\",\"type\":\"bytes\"}],\"type\":\"MsgsStateInfo\"},{\"id\":2361446705,\"predicate\":\"msgs_all_info\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"},{\"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\":2157819615,\"predicate\":\"msg_new_detailed_info\",\"params\":[{\"name\":\"answer_msg_id\",\"type\":\"long\"},{\"name\":\"bytes\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"int\"}],\"type\":\"MsgDetailedInfo\"},{\"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\":4133544404,\"predicate\":\"destroy_auth_key_ok\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":\"178201177\",\"predicate\":\"destroy_auth_key_none\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":3926956819,\"predicate\":\"destroy_auth_key_fail\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":3793765884,\"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\"}],\"methods\":[{\"id\":\"1615239032\",\"method\":\"req_pq\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":3195965169,\"method\":\"req_pq_multi\",\"params\":[{\"name\":\"nonce\",\"type\":\"int128\"}],\"type\":\"ResPQ\"},{\"id\":3608339646,\"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\":4110704415,\"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\":3105996036,\"method\":\"get_future_salts\",\"params\":[{\"name\":\"num\",\"type\":\"int\"}],\"type\":\"FutureSalts\"},{\"id\":\"2059302892\",\"method\":\"ping\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"}],\"type\":\"Pong\"},{\"id\":4081220492,\"method\":\"ping_delay_disconnect\",\"params\":[{\"name\":\"ping_id\",\"type\":\"long\"},{\"name\":\"disconnect_delay\",\"type\":\"int\"}],\"type\":\"Pong\"},{\"id\":2459514271,\"method\":\"http_wait\",\"params\":[{\"name\":\"max_delay\",\"type\":\"int\"},{\"name\":\"wait_after\",\"type\":\"int\"},{\"name\":\"max_wait\",\"type\":\"int\"}],\"type\":\"HttpWait\"},{\"id\":3510849888,\"method\":\"destroy_auth_key\",\"params\":[],\"type\":\"DestroyAuthKeyRes\"},{\"id\":3880853798,\"method\":\"destroy_session\",\"params\":[{\"name\":\"session_id\",\"type\":\"long\"}],\"type\":\"DestroySessionRes\"}]},\"API\":{\"constructors\":[{\"id\":3162085175,\"predicate\":\"boolFalse\",\"params\":[],\"type\":\"Bool\"},{\"id\":2574415285,\"predicate\":\"boolTrue\",\"params\":[],\"type\":\"Bool\"},{\"id\":1072550713,\"predicate\":\"true\",\"params\":[],\"type\":\"True\"},{\"id\":481674261,\"predicate\":\"vector\",\"params\":[],\"type\":\"Vector t\"},{\"id\":3300522427,\"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\":396093539,\"predicate\":\"inputPeerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":2072935910,\"predicate\":\"inputPeerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":548253432,\"predicate\":\"inputPeerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputPeer\"},{\"id\":398123750,\"predicate\":\"inputPeerUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":2627073979,\"predicate\":\"inputPeerChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputPeer\"},{\"id\":3112732367,\"predicate\":\"inputUserEmpty\",\"params\":[],\"type\":\"InputUser\"},{\"id\":4156666175,\"predicate\":\"inputUserSelf\",\"params\":[],\"type\":\"InputUser\"},{\"id\":3626575894,\"predicate\":\"inputUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputUser\"},{\"id\":756118935,\"predicate\":\"inputUserFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"InputUser\"},{\"id\":4086478836,\"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\":4113560191,\"predicate\":\"inputFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"md5_checksum\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":4199484341,\"predicate\":\"inputFileBig\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"InputFile\"},{\"id\":2523198847,\"predicate\":\"inputMediaEmpty\",\"params\":[],\"type\":\"InputMedia\"},{\"id\":505969924,\"predicate\":\"inputMediaUploadedPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector<InputDocument>\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":3015312949,\"predicate\":\"inputMediaPhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputPhoto\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":4190388548,\"predicate\":\"inputMediaGeoPoint\",\"params\":[{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"}],\"type\":\"InputMedia\"},{\"id\":4171988475,\"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\":1530447553,\"predicate\":\"inputMediaUploadedDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"nosound_video\",\"type\":\"flags.3?true\"},{\"name\":\"force_file\",\"type\":\"flags.4?true\"},{\"name\":\"file\",\"type\":\"InputFile\"},{\"name\":\"thumb\",\"type\":\"flags.2?InputFile\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"},{\"name\":\"stickers\",\"type\":\"flags.0?Vector<InputDocument>\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.1?int\"}],\"type\":\"InputMedia\"},{\"id\":860303448,\"predicate\":\"inputMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"},{\"name\":\"query\",\"type\":\"flags.1?string\"}],\"type\":\"InputMedia\"},{\"id\":3242007569,\"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\":3854302746,\"predicate\":\"inputMediaPhotoExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":4216511641,\"predicate\":\"inputMediaDocumentExternal\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.0?int\"}],\"type\":\"InputMedia\"},{\"id\":3544138739,\"predicate\":\"inputMediaGame\",\"params\":[{\"name\":\"id\",\"type\":\"InputGame\"}],\"type\":\"InputMedia\"},{\"id\":4108359363,\"predicate\":\"inputMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"multiple_allowed\",\"type\":\"flags.1?true\"},{\"name\":\"can_forward\",\"type\":\"flags.2?true\"},{\"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\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":2535434307,\"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\":261416433,\"predicate\":\"inputMediaPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"correct_answers\",\"type\":\"flags.0?Vector<bytes>\"},{\"name\":\"solution\",\"type\":\"flags.1?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.1?Vector<MessageEntity>\"}],\"type\":\"InputMedia\"},{\"id\":3866083195,\"predicate\":\"inputMediaDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputMedia\"},{\"id\":480546647,\"predicate\":\"inputChatPhotoEmpty\",\"params\":[],\"type\":\"InputChatPhoto\"},{\"id\":3326243406,\"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\"}],\"type\":\"InputChatPhoto\"},{\"id\":2303962423,\"predicate\":\"inputChatPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputChatPhoto\"},{\"id\":3837862870,\"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\":3755650017,\"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\":4112735573,\"predicate\":\"inputEncryptedFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":3134223748,\"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\":3418877480,\"predicate\":\"inputSecureFileLocation\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputFileLocation\"},{\"id\":700340377,\"predicate\":\"inputTakeoutFileLocation\",\"params\":[],\"type\":\"InputFileLocation\"},{\"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\":3627312883,\"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\":2642736091,\"predicate\":\"inputStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb_version\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":3148158521,\"predicate\":\"inputGroupCallStream\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"time_ms\",\"type\":\"long\"},{\"name\":\"scale\",\"type\":\"int\"}],\"type\":\"InputFileLocation\"},{\"id\":2645671021,\"predicate\":\"peerUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":3134252475,\"predicate\":\"peerChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":3185435954,\"predicate\":\"peerChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Peer\"},{\"id\":2861972229,\"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\":3403786975,\"predicate\":\"storage.fileGif\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":172975040,\"predicate\":\"storage.filePng\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":2921222285,\"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\":3016663268,\"predicate\":\"storage.fileMp4\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":276907596,\"predicate\":\"storage.fileWebp\",\"params\":[],\"type\":\"storage.FileType\"},{\"id\":537022650,\"predicate\":\"userEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"User\"},{\"id\":2474924225,\"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\":\"id\",\"type\":\"int\"},{\"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<RestrictionReason>\"},{\"name\":\"bot_inline_placeholder\",\"type\":\"flags.19?string\"},{\"name\":\"lang_code\",\"type\":\"flags.22?string\"}],\"type\":\"User\"},{\"id\":1326562017,\"predicate\":\"userProfilePhotoEmpty\",\"params\":[],\"type\":\"UserProfilePhoto\"},{\"id\":2194798342,\"predicate\":\"userProfilePhoto\",\"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\":\"UserProfilePhoto\"},{\"id\":164646985,\"predicate\":\"userStatusEmpty\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":3988339017,\"predicate\":\"userStatusOnline\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":9203775,\"predicate\":\"userStatusOffline\",\"params\":[{\"name\":\"was_online\",\"type\":\"int\"}],\"type\":\"UserStatus\"},{\"id\":3798942449,\"predicate\":\"userStatusRecently\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":129960444,\"predicate\":\"userStatusLastWeek\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":2011940674,\"predicate\":\"userStatusLastMonth\",\"params\":[],\"type\":\"UserStatus\"},{\"id\":2611140608,\"predicate\":\"chatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"Chat\"},{\"id\":1004149726,\"predicate\":\"chat\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"kicked\",\"type\":\"flags.1?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\":\"id\",\"type\":\"int\"},{\"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\":120753115,\"predicate\":\"chatForbidden\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Chat\"},{\"id\":3541734942,\"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\":\"id\",\"type\":\"int\"},{\"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\":\"version\",\"type\":\"int\"},{\"name\":\"restriction_reason\",\"type\":\"flags.9?Vector<RestrictionReason>\"},{\"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\"}],\"type\":\"Chat\"},{\"id\":681420594,\"predicate\":\"channelForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"broadcast\",\"type\":\"flags.5?true\"},{\"name\":\"megagroup\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"until_date\",\"type\":\"flags.16?int\"}],\"type\":\"Chat\"},{\"id\":2317232515,\"predicate\":\"chatFull\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_set_username\",\"type\":\"flags.7?true\"},{\"name\":\"has_scheduled\",\"type\":\"flags.8?true\"},{\"name\":\"id\",\"type\":\"int\"},{\"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<BotInfo>\"},{\"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\"}],\"type\":\"ChatFull\"},{\"id\":1418477459,\"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\":\"id\",\"type\":\"int\"},{\"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<BotInfo>\"},{\"name\":\"migrated_from_chat_id\",\"type\":\"flags.4?int\"},{\"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?int\"},{\"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<string>\"},{\"name\":\"groupcall_default_join_as\",\"type\":\"flags.26?Peer\"}],\"type\":\"ChatFull\"},{\"id\":3369552190,\"predicate\":\"chatParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":3658699658,\"predicate\":\"chatParticipantCreator\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":3805733942,\"predicate\":\"chatParticipantAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatParticipant\"},{\"id\":4237298731,\"predicate\":\"chatParticipantsForbidden\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"self_participant\",\"type\":\"flags.0?ChatParticipant\"}],\"type\":\"ChatParticipants\"},{\"id\":1061556205,\"predicate\":\"chatParticipants\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<ChatParticipant>\"},{\"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\":2426849924,\"predicate\":\"messageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"peer_id\",\"type\":\"flags.0?Peer\"}],\"type\":\"Message\"},{\"id\":3169027026,\"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\":\"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?int\"},{\"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<MessageEntity>\"},{\"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\":\"restriction_reason\",\"type\":\"flags.22?Vector<RestrictionReason>\"},{\"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\":\"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\":3421653312,\"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\":\"int\"}],\"type\":\"MessageMedia\"},{\"id\":2676290718,\"predicate\":\"messageMediaUnsupported\",\"params\":[],\"type\":\"MessageMedia\"},{\"id\":2628808919,\"predicate\":\"messageMediaDocument\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"flags.0?Document\"},{\"name\":\"ttl_seconds\",\"type\":\"flags.2?int\"}],\"type\":\"MessageMedia\"},{\"id\":2737690112,\"predicate\":\"messageMediaWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"}],\"type\":\"MessageMedia\"},{\"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\":4256272392,\"predicate\":\"messageMediaGame\",\"params\":[{\"name\":\"game\",\"type\":\"Game\"}],\"type\":\"MessageMedia\"},{\"id\":2220168007,\"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\"}],\"type\":\"MessageMedia\"},{\"id\":3108030054,\"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\":1272375192,\"predicate\":\"messageMediaPoll\",\"params\":[{\"name\":\"poll\",\"type\":\"Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"MessageMedia\"},{\"id\":1065280907,\"predicate\":\"messageMediaDice\",\"params\":[{\"name\":\"value\",\"type\":\"int\"},{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"MessageMedia\"},{\"id\":3064919984,\"predicate\":\"messageActionEmpty\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2791541658,\"predicate\":\"messageActionChatCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":3047280218,\"predicate\":\"messageActionChatEditTitle\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2144015272,\"predicate\":\"messageActionChatEditPhoto\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"}],\"type\":\"MessageAction\"},{\"id\":2514746351,\"predicate\":\"messageActionChatDeletePhoto\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":1217033015,\"predicate\":\"messageActionChatAddUser\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":2997787404,\"predicate\":\"messageActionChatDeleteUser\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":4171036136,\"predicate\":\"messageActionChatJoinedByLink\",\"params\":[{\"name\":\"inviter_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":2513611922,\"predicate\":\"messageActionChannelCreate\",\"params\":[{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":1371385889,\"predicate\":\"messageActionChatMigrateTo\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":2958420718,\"predicate\":\"messageActionChannelMigrateFrom\",\"params\":[{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":2495428845,\"predicate\":\"messageActionPinMessage\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2679813636,\"predicate\":\"messageActionHistoryClear\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2460428406,\"predicate\":\"messageActionGameScore\",\"params\":[{\"name\":\"game_id\",\"type\":\"long\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":2402399015,\"predicate\":\"messageActionPaymentSentMe\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"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\":1080663248,\"predicate\":\"messageActionPaymentSent\",\"params\":[{\"name\":\"currency\",\"type\":\"string\"},{\"name\":\"total_amount\",\"type\":\"long\"}],\"type\":\"MessageAction\"},{\"id\":2162236031,\"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\":1200788123,\"predicate\":\"messageActionScreenshotTaken\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":4209418070,\"predicate\":\"messageActionCustomAction\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":2884218878,\"predicate\":\"messageActionBotAllowed\",\"params\":[{\"name\":\"domain\",\"type\":\"string\"}],\"type\":\"MessageAction\"},{\"id\":455635795,\"predicate\":\"messageActionSecureValuesSentMe\",\"params\":[{\"name\":\"values\",\"type\":\"Vector<SecureValue>\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"MessageAction\"},{\"id\":3646710100,\"predicate\":\"messageActionSecureValuesSent\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"MessageAction\"},{\"id\":4092747638,\"predicate\":\"messageActionContactSignUp\",\"params\":[],\"type\":\"MessageAction\"},{\"id\":2564871831,\"predicate\":\"messageActionGeoProximityReached\",\"params\":[{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"to_id\",\"type\":\"Peer\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":2047704898,\"predicate\":\"messageActionGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"duration\",\"type\":\"flags.0?int\"}],\"type\":\"MessageAction\"},{\"id\":1991897370,\"predicate\":\"messageActionInviteToGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"MessageAction\"},{\"id\":2853895165,\"predicate\":\"messageActionSetMessagesTTL\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":3013637729,\"predicate\":\"messageActionGroupCallScheduled\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"schedule_date\",\"type\":\"int\"}],\"type\":\"MessageAction\"},{\"id\":739712882,\"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\":\"notify_settings\",\"type\":\"PeerNotifySettings\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"},{\"name\":\"draft\",\"type\":\"flags.1?DraftMessage\"},{\"name\":\"folder_id\",\"type\":\"flags.4?int\"}],\"type\":\"Dialog\"},{\"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\":590459437,\"predicate\":\"photoEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Photo\"},{\"id\":4212750949,\"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<PhotoSize>\"},{\"name\":\"video_sizes\",\"type\":\"flags.1?Vector<VideoSize>\"},{\"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\":3769678894,\"predicate\":\"photoStrippedSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":4198431637,\"predicate\":\"photoSizeProgressive\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"w\",\"type\":\"int\"},{\"name\":\"h\",\"type\":\"int\"},{\"name\":\"sizes\",\"type\":\"Vector<int>\"}],\"type\":\"PhotoSize\"},{\"id\":3626061121,\"predicate\":\"photoPathSize\",\"params\":[{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"PhotoSize\"},{\"id\":286776671,\"predicate\":\"geoPointEmpty\",\"params\":[],\"type\":\"GeoPoint\"},{\"id\":2997024355,\"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\":3439659286,\"predicate\":\"auth.authorization\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"tmp_sessions\",\"type\":\"flags.0?int\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"auth.Authorization\"},{\"id\":1148485274,\"predicate\":\"auth.authorizationSignUpRequired\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"terms_of_service\",\"type\":\"flags.0?help.TermsOfService\"}],\"type\":\"auth.Authorization\"},{\"id\":3751189549,\"predicate\":\"auth.exportedAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":3099351820,\"predicate\":\"inputNotifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputNotifyPeer\"},{\"id\":423314455,\"predicate\":\"inputNotifyUsers\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":1251338318,\"predicate\":\"inputNotifyChats\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":2983951486,\"predicate\":\"inputNotifyBroadcasts\",\"params\":[],\"type\":\"InputNotifyPeer\"},{\"id\":2621249934,\"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?string\"}],\"type\":\"InputPeerNotifySettings\"},{\"id\":2941295904,\"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\":\"sound\",\"type\":\"flags.3?string\"}],\"type\":\"PeerNotifySettings\"},{\"id\":1933519201,\"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\":\"geo_distance\",\"type\":\"flags.6?int\"}],\"type\":\"PeerSettings\"},{\"id\":2755118061,\"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\":2331249445,\"predicate\":\"wallPaperNoFile\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"default\",\"type\":\"flags.1?true\"},{\"name\":\"dark\",\"type\":\"flags.4?true\"},{\"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\":2918469347,\"predicate\":\"inputReportReasonChildAbuse\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":3252986545,\"predicate\":\"inputReportReasonOther\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":2609510714,\"predicate\":\"inputReportReasonCopyright\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":3688169197,\"predicate\":\"inputReportReasonGeoIrrelevant\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":4124956391,\"predicate\":\"inputReportReasonFake\",\"params\":[],\"type\":\"ReportReason\"},{\"id\":328899191,\"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\":\"user\",\"type\":\"User\"},{\"name\":\"about\",\"type\":\"flags.1?string\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"},{\"name\":\"profile_photo\",\"type\":\"flags.2?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\"}],\"type\":\"UserFull\"},{\"id\":4178692500,\"predicate\":\"contact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"mutual\",\"type\":\"Bool\"}],\"type\":\"Contact\"},{\"id\":3489825848,\"predicate\":\"importedContact\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"client_id\",\"type\":\"long\"}],\"type\":\"ImportedContact\"},{\"id\":3546811489,\"predicate\":\"contactStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"ContactStatus\"},{\"id\":3075189202,\"predicate\":\"contacts.contactsNotModified\",\"params\":[],\"type\":\"contacts.Contacts\"},{\"id\":3941105218,\"predicate\":\"contacts.contacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector<Contact>\"},{\"name\":\"saved_count\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Contacts\"},{\"id\":2010127419,\"predicate\":\"contacts.importedContacts\",\"params\":[{\"name\":\"imported\",\"type\":\"Vector<ImportedContact>\"},{\"name\":\"popular_invites\",\"type\":\"Vector<PopularContact>\"},{\"name\":\"retry_contacts\",\"type\":\"Vector<long>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":182326673,\"predicate\":\"contacts.blocked\",\"params\":[{\"name\":\"blocked\",\"type\":\"Vector<PeerBlocked>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Blocked\"},{\"id\":3781575060,\"predicate\":\"contacts.blockedSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"blocked\",\"type\":\"Vector<PeerBlocked>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Blocked\"},{\"id\":364538944,\"predicate\":\"messages.dialogs\",\"params\":[{\"name\":\"dialogs\",\"type\":\"Vector<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Dialogs\"},{\"id\":1910543603,\"predicate\":\"messages.dialogsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"dialogs\",\"type\":\"Vector<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Dialogs\"},{\"id\":4041467286,\"predicate\":\"messages.dialogsNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":2356252295,\"predicate\":\"messages.messages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"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<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":1682413576,\"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<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.Messages\"},{\"id\":1951620897,\"predicate\":\"messages.messagesNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1694474197,\"predicate\":\"messages.chats\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<Chat>\"}],\"type\":\"messages.Chats\"},{\"id\":2631405892,\"predicate\":\"messages.chatsSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"}],\"type\":\"messages.Chats\"},{\"id\":3856126364,\"predicate\":\"messages.chatFull\",\"params\":[{\"name\":\"full_chat\",\"type\":\"ChatFull\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatFull\"},{\"id\":3025955281,\"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\":2517214492,\"predicate\":\"inputMessagesFilterPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2680163941,\"predicate\":\"inputMessagesFilterVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1458172132,\"predicate\":\"inputMessagesFilterPhotoVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2665345416,\"predicate\":\"inputMessagesFilterDocument\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2129714567,\"predicate\":\"inputMessagesFilterUrl\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":4291323271,\"predicate\":\"inputMessagesFilterGif\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":1358283666,\"predicate\":\"inputMessagesFilterVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":928101534,\"predicate\":\"inputMessagesFilterMusic\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":975236280,\"predicate\":\"inputMessagesFilterChatPhotos\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":2160695144,\"predicate\":\"inputMessagesFilterPhoneCalls\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"missed\",\"type\":\"flags.0?true\"}],\"type\":\"MessagesFilter\"},{\"id\":2054952868,\"predicate\":\"inputMessagesFilterRoundVoice\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":3041516115,\"predicate\":\"inputMessagesFilterRoundVideo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":3254314650,\"predicate\":\"inputMessagesFilterMyMentions\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":3875695885,\"predicate\":\"inputMessagesFilterGeo\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":3764575107,\"predicate\":\"inputMessagesFilterContacts\",\"params\":[],\"type\":\"MessagesFilter\"},{\"id\":464520273,\"predicate\":\"inputMessagesFilterPinned\",\"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\":2718806245,\"predicate\":\"updateDeleteMessages\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1548249383,\"predicate\":\"updateUserTyping\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":2261441388,\"predicate\":\"updateChatUserTyping\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":125178264,\"predicate\":\"updateChatParticipants\",\"params\":[{\"name\":\"participants\",\"type\":\"ChatParticipants\"}],\"type\":\"Update\"},{\"id\":469489699,\"predicate\":\"updateUserStatus\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"status\",\"type\":\"UserStatus\"}],\"type\":\"Update\"},{\"id\":2805148531,\"predicate\":\"updateUserName\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"first_name\",\"type\":\"string\"},{\"name\":\"last_name\",\"type\":\"string\"},{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":2503031564,\"predicate\":\"updateUserPhoto\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"UserProfilePhoto\"},{\"name\":\"previous\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"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\":3030575245,\"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\":3930787420,\"predicate\":\"updateChatParticipantAdd\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1851755554,\"predicate\":\"updateChatParticipantDelete\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2388564083,\"predicate\":\"updateDcOptions\",\"params\":[{\"name\":\"dc_options\",\"type\":\"Vector<DcOption>\"}],\"type\":\"Update\"},{\"id\":3200411887,\"predicate\":\"updateNotifySettings\",\"params\":[{\"name\":\"peer\",\"type\":\"NotifyPeer\"},{\"name\":\"notify_settings\",\"type\":\"PeerNotifySettings\"}],\"type\":\"Update\"},{\"id\":3957614617,\"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<MessageEntity>\"}],\"type\":\"Update\"},{\"id\":3996854058,\"predicate\":\"updatePrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"PrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector<PrivacyRule>\"}],\"type\":\"Update\"},{\"id\":314130811,\"predicate\":\"updateUserPhone\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"phone\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":2627162079,\"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\":2139689491,\"predicate\":\"updateWebPage\",\"params\":[{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1757493555,\"predicate\":\"updateReadMessagesContents\",\"params\":[{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3942934523,\"predicate\":\"updateChannelTooLong\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":3067369046,\"predicate\":\"updateChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1656358105,\"predicate\":\"updateNewChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":856380452,\"predicate\":\"updateReadChannelInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.0?int\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"still_unread_count\",\"type\":\"int\"},{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3279233481,\"predicate\":\"updateDeleteChannelMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2560699211,\"predicate\":\"updateChannelMessageViews\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3062896985,\"predicate\":\"updateChatParticipantAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"is_admin\",\"type\":\"Bool\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"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\":\"order\",\"type\":\"Vector<long>\"}],\"type\":\"Update\"},{\"id\":1135492588,\"predicate\":\"updateStickerSets\",\"params\":[],\"type\":\"Update\"},{\"id\":2473931806,\"predicate\":\"updateSavedGifs\",\"params\":[],\"type\":\"Update\"},{\"id\":1059076315,\"predicate\":\"updateBotInlineQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"peer_type\",\"type\":\"flags.1?InlineQueryPeerType\"},{\"name\":\"offset\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":239663460,\"predicate\":\"updateBotInlineSend\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"string\"},{\"name\":\"geo\",\"type\":\"flags.0?GeoPoint\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"msg_id\",\"type\":\"flags.1?InputBotInlineMessageID\"}],\"type\":\"Update\"},{\"id\":457133559,\"predicate\":\"updateEditChannelMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3879028705,\"predicate\":\"updateBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"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\":3825430691,\"predicate\":\"updateEditMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":4191320666,\"predicate\":\"updateInlineBotCallbackQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"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\":634833351,\"predicate\":\"updateReadChannelOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3995842921,\"predicate\":\"updateDraftMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"draft\",\"type\":\"DraftMessage\"}],\"type\":\"Update\"},{\"id\":1461528386,\"predicate\":\"updateReadFeaturedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":2588027936,\"predicate\":\"updateRecentStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":2720652550,\"predicate\":\"updateConfig\",\"params\":[],\"type\":\"Update\"},{\"id\":861169551,\"predicate\":\"updatePtsChanged\",\"params\":[],\"type\":\"Update\"},{\"id\":1081547008,\"predicate\":\"updateChannelWebPage\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"webpage\",\"type\":\"WebPage\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"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\":4195302562,\"predicate\":\"updatePinnedDialogs\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"folder_id\",\"type\":\"flags.1?int\"},{\"name\":\"order\",\"type\":\"flags.0?Vector<DialogPeer>\"}],\"type\":\"Update\"},{\"id\":2199371971,\"predicate\":\"updateBotWebhookJSON\",\"params\":[{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Update\"},{\"id\":2610053286,\"predicate\":\"updateBotWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"},{\"name\":\"timeout\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3771582784,\"predicate\":\"updateBotShippingQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"payload\",\"type\":\"bytes\"},{\"name\":\"shipping_address\",\"type\":\"PostAddress\"}],\"type\":\"Update\"},{\"id\":1563376297,\"predicate\":\"updateBotPrecheckoutQuery\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"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\":2869914398,\"predicate\":\"updatePhoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"}],\"type\":\"Update\"},{\"id\":1180041828,\"predicate\":\"updateLangPackTooLong\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"Update\"},{\"id\":1442983757,\"predicate\":\"updateLangPack\",\"params\":[{\"name\":\"difference\",\"type\":\"LangPackDifference\"}],\"type\":\"Update\"},{\"id\":3843135853,\"predicate\":\"updateFavedStickers\",\"params\":[],\"type\":\"Update\"},{\"id\":2307472197,\"predicate\":\"updateChannelReadMessagesContents\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":1887741886,\"predicate\":\"updateContactsReset\",\"params\":[],\"type\":\"Update\"},{\"id\":1893427255,\"predicate\":\"updateChannelAvailableMessages\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"available_min_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":3781450179,\"predicate\":\"updateDialogUnreadMark\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"unread\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"DialogPeer\"}],\"type\":\"Update\"},{\"id\":2896258427,\"predicate\":\"updateMessagePoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"poll\",\"type\":\"flags.0?Poll\"},{\"name\":\"results\",\"type\":\"PollResults\"}],\"type\":\"Update\"},{\"id\":1421875280,\"predicate\":\"updateChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"default_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":422972864,\"predicate\":\"updateFolderPeers\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector<FolderPeer>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1786671974,\"predicate\":\"updatePeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"settings\",\"type\":\"PeerSettings\"}],\"type\":\"Update\"},{\"id\":3031420848,\"predicate\":\"updatePeerLocated\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<PeerLocated>\"}],\"type\":\"Update\"},{\"id\":967122427,\"predicate\":\"updateNewScheduledMessage\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"Update\"},{\"id\":2424728814,\"predicate\":\"updateDeleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":2182544291,\"predicate\":\"updateTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"Theme\"}],\"type\":\"Update\"},{\"id\":2267003193,\"predicate\":\"updateGeoLiveViewed\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":1448076945,\"predicate\":\"updateLoginToken\",\"params\":[],\"type\":\"Update\"},{\"id\":1123585836,\"predicate\":\"updateMessagePollVote\",\"params\":[{\"name\":\"poll_id\",\"type\":\"long\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"}],\"type\":\"Update\"},{\"id\":654302845,\"predicate\":\"updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Update\"},{\"id\":2782339333,\"predicate\":\"updateDialogFilterOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector<int>\"}],\"type\":\"Update\"},{\"id\":889491791,\"predicate\":\"updateDialogFilters\",\"params\":[],\"type\":\"Update\"},{\"id\":643940105,\"predicate\":\"updatePhoneCallSignalingData\",\"params\":[{\"name\":\"phone_call_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Update\"},{\"id\":1854571743,\"predicate\":\"updateChannelMessageForwards\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":482860628,\"predicate\":\"updateReadChannelDiscussionInbox\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"},{\"name\":\"broadcast_id\",\"type\":\"flags.0?int\"},{\"name\":\"broadcast_post\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":1178116716,\"predicate\":\"updateReadChannelDiscussionOutbox\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":610945826,\"predicate\":\"updatePeerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"blocked\",\"type\":\"Bool\"}],\"type\":\"Update\"},{\"id\":1796675352,\"predicate\":\"updateChannelUserTyping\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"top_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"from_id\",\"type\":\"Peer\"},{\"name\":\"action\",\"type\":\"SendMessageAction\"}],\"type\":\"Update\"},{\"id\":3984976565,\"predicate\":\"updatePinnedMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2240317323,\"predicate\":\"updatePinnedChannelMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"pinned\",\"type\":\"flags.0?true\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"},{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":321954198,\"predicate\":\"updateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":4075543374,\"predicate\":\"updateGroupCallParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2757671323,\"predicate\":\"updateGroupCall\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"call\",\"type\":\"GroupCall\"}],\"type\":\"Update\"},{\"id\":3147544997,\"predicate\":\"updatePeerHistoryTTL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"ttl_period\",\"type\":\"flags.0?int\"}],\"type\":\"Update\"},{\"id\":4088625183,\"predicate\":\"updateChatParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"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\":2146218476,\"predicate\":\"updateChannelParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"actor_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"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\":133777546,\"predicate\":\"updateBotStopped\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"stopped\",\"type\":\"Bool\"},{\"name\":\"qts\",\"type\":\"int\"}],\"type\":\"Update\"},{\"id\":2775329342,\"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<Message>\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector<EncryptedMessage>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":2835028353,\"predicate\":\"updates.differenceSlice\",\"params\":[{\"name\":\"new_messages\",\"type\":\"Vector<Message>\"},{\"name\":\"new_encrypted_messages\",\"type\":\"Vector<EncryptedMessage>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"intermediate_state\",\"type\":\"updates.State\"}],\"type\":\"updates.Difference\"},{\"id\":1258196845,\"predicate\":\"updates.differenceTooLong\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"}],\"type\":\"updates.Difference\"},{\"id\":3809980286,\"predicate\":\"updatesTooLong\",\"params\":[],\"type\":\"Updates\"},{\"id\":4210030643,\"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\":\"int\"},{\"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?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":290961496,\"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\":\"int\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"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?int\"},{\"name\":\"reply_to\",\"type\":\"flags.3?MessageReplyHeader\"},{\"name\":\"entities\",\"type\":\"flags.7?Vector<MessageEntity>\"},{\"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<Update>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq_start\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1957577280,\"predicate\":\"updates\",\"params\":[{\"name\":\"updates\",\"type\":\"Vector<Update>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"seq\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2417352961,\"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<MessageEntity>\"},{\"name\":\"ttl_period\",\"type\":\"flags.25?int\"}],\"type\":\"Updates\"},{\"id\":2378853029,\"predicate\":\"photos.photos\",\"params\":[{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photos\"},{\"id\":352657236,\"predicate\":\"photos.photosSlice\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"photos.Photos\"},{\"id\":539045032,\"predicate\":\"photos.photo\",\"params\":[{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"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\":4052539972,\"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<FileHash>\"}],\"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\":\"id\",\"type\":\"int\"},{\"name\":\"ip_address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"secret\",\"type\":\"flags.10?bytes\"}],\"type\":\"DcOption\"},{\"id\":856375399,\"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\":\"date\",\"type\":\"int\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"test_mode\",\"type\":\"Bool\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"dc_options\",\"type\":\"Vector<DcOption>\"},{\"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\"}],\"type\":\"Config\"},{\"id\":2384074613,\"predicate\":\"nearestDc\",\"params\":[{\"name\":\"country\",\"type\":\"string\"},{\"name\":\"this_dc\",\"type\":\"int\"},{\"name\":\"nearest_dc\",\"type\":\"int\"}],\"type\":\"NearestDc\"},{\"id\":497489295,\"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<MessageEntity>\"},{\"name\":\"document\",\"type\":\"flags.1?Document\"},{\"name\":\"url\",\"type\":\"flags.2?string\"}],\"type\":\"help.AppUpdate\"},{\"id\":3294258486,\"predicate\":\"help.noAppUpdate\",\"params\":[],\"type\":\"help.AppUpdate\"},{\"id\":415997816,\"predicate\":\"help.inviteText\",\"params\":[{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"help.InviteText\"},{\"id\":2877210784,\"predicate\":\"encryptedChatEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1006044124,\"predicate\":\"encryptedChatWaiting\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"}],\"type\":\"EncryptedChat\"},{\"id\":1651608194,\"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\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a\",\"type\":\"bytes\"}],\"type\":\"EncryptedChat\"},{\"id\":4199992886,\"predicate\":\"encryptedChat\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"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\":4047615457,\"predicate\":\"inputEncryptedChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputEncryptedChat\"},{\"id\":3256830334,\"predicate\":\"encryptedFileEmpty\",\"params\":[],\"type\":\"EncryptedFile\"},{\"id\":1248893260,\"predicate\":\"encryptedFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"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\":767652808,\"predicate\":\"inputEncryptedFileBigUploaded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"parts\",\"type\":\"int\"},{\"name\":\"key_fingerprint\",\"type\":\"int\"}],\"type\":\"InputEncryptedFile\"},{\"id\":3977822488,\"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\":3236054581,\"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\":2492727090,\"predicate\":\"messages.sentEncryptedFile\",\"params\":[{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file\",\"type\":\"EncryptedFile\"}],\"type\":\"messages.SentEncryptedMessage\"},{\"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\":922273905,\"predicate\":\"documentEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"Document\"},{\"id\":512177195,\"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\":\"int\"},{\"name\":\"thumbs\",\"type\":\"flags.0?Vector<PhotoSize>\"},{\"name\":\"video_thumbs\",\"type\":\"flags.1?Vector<VideoSize>\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"Document\"},{\"id\":398898678,\"predicate\":\"help.support\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"user\",\"type\":\"User\"}],\"type\":\"help.Support\"},{\"id\":2681474008,\"predicate\":\"notifyPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"NotifyPeer\"},{\"id\":3033021260,\"predicate\":\"notifyUsers\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":3221737155,\"predicate\":\"notifyChats\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":3591563503,\"predicate\":\"notifyBroadcasts\",\"params\":[],\"type\":\"NotifyPeer\"},{\"id\":381645902,\"predicate\":\"sendMessageTypingAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":4250847477,\"predicate\":\"sendMessageCancelAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2710034031,\"predicate\":\"sendMessageRecordVideoAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":3916839660,\"predicate\":\"sendMessageUploadVideoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":3576656887,\"predicate\":\"sendMessageRecordAudioAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":4082227115,\"predicate\":\"sendMessageUploadAudioAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":3520285222,\"predicate\":\"sendMessageUploadPhotoAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":2852968932,\"predicate\":\"sendMessageUploadDocumentAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":393186209,\"predicate\":\"sendMessageGeoLocationAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":1653390447,\"predicate\":\"sendMessageChooseContactAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":3714748232,\"predicate\":\"sendMessageGamePlayAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":2297593788,\"predicate\":\"sendMessageRecordRoundAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":608050278,\"predicate\":\"sendMessageUploadRoundAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":3643548293,\"predicate\":\"speakingInGroupCallAction\",\"params\":[],\"type\":\"SendMessageAction\"},{\"id\":3688534598,\"predicate\":\"sendMessageHistoryImportAction\",\"params\":[{\"name\":\"progress\",\"type\":\"int\"}],\"type\":\"SendMessageAction\"},{\"id\":3004386717,\"predicate\":\"contacts.found\",\"params\":[{\"name\":\"my_results\",\"type\":\"Vector<Peer>\"},{\"name\":\"results\",\"type\":\"Vector<Peer>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.Found\"},{\"id\":1335282456,\"predicate\":\"inputPrivacyKeyStatusTimestamp\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":3187344422,\"predicate\":\"inputPrivacyKeyChatInvite\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":4206550111,\"predicate\":\"inputPrivacyKeyPhoneCall\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":3684593874,\"predicate\":\"inputPrivacyKeyPhoneP2P\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":2765966344,\"predicate\":\"inputPrivacyKeyForwards\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":1461304012,\"predicate\":\"inputPrivacyKeyProfilePhoto\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":55761658,\"predicate\":\"inputPrivacyKeyPhoneNumber\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":3508640733,\"predicate\":\"inputPrivacyKeyAddedByPhone\",\"params\":[],\"type\":\"InputPrivacyKey\"},{\"id\":3157175088,\"predicate\":\"privacyKeyStatusTimestamp\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1343122938,\"predicate\":\"privacyKeyChatInvite\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1030105979,\"predicate\":\"privacyKeyPhoneCall\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":961092808,\"predicate\":\"privacyKeyPhoneP2P\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1777096355,\"predicate\":\"privacyKeyForwards\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":2517966829,\"predicate\":\"privacyKeyProfilePhoto\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":3516589165,\"predicate\":\"privacyKeyPhoneNumber\",\"params\":[],\"type\":\"PrivacyKey\"},{\"id\":1124062251,\"predicate\":\"privacyKeyAddedByPhone\",\"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<InputUser>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":195371015,\"predicate\":\"inputPrivacyValueDisallowContacts\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":3597362889,\"predicate\":\"inputPrivacyValueDisallowAll\",\"params\":[],\"type\":\"InputPrivacyRule\"},{\"id\":2417034343,\"predicate\":\"inputPrivacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":1283572154,\"predicate\":\"inputPrivacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":3626197935,\"predicate\":\"inputPrivacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"InputPrivacyRule\"},{\"id\":4294843308,\"predicate\":\"privacyValueAllowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1698855810,\"predicate\":\"privacyValueAllowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":1297858060,\"predicate\":\"privacyValueAllowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":4169726490,\"predicate\":\"privacyValueDisallowContacts\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":2339628899,\"predicate\":\"privacyValueDisallowAll\",\"params\":[],\"type\":\"PrivacyRule\"},{\"id\":209668535,\"predicate\":\"privacyValueDisallowUsers\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":415136107,\"predicate\":\"privacyValueAllowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":2897086096,\"predicate\":\"privacyValueDisallowChatParticipants\",\"params\":[{\"name\":\"chats\",\"type\":\"Vector<int>\"}],\"type\":\"PrivacyRule\"},{\"id\":1352683077,\"predicate\":\"account.privacyRules\",\"params\":[{\"name\":\"rules\",\"type\":\"Vector<PrivacyRule>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"account.PrivacyRules\"},{\"id\":3100684255,\"predicate\":\"accountDaysTTL\",\"params\":[{\"name\":\"days\",\"type\":\"int\"}],\"type\":\"AccountDaysTTL\"},{\"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\":2555574726,\"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\":2550256375,\"predicate\":\"documentAttributeHasStickers\",\"params\":[],\"type\":\"DocumentAttribute\"},{\"id\":4050950690,\"predicate\":\"messages.stickersNotModified\",\"params\":[],\"type\":\"messages.Stickers\"},{\"id\":3831077821,\"predicate\":\"messages.stickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.Stickers\"},{\"id\":313694676,\"predicate\":\"stickerPack\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"documents\",\"type\":\"Vector<long>\"}],\"type\":\"StickerPack\"},{\"id\":3898999491,\"predicate\":\"messages.allStickersNotModified\",\"params\":[],\"type\":\"messages.AllStickers\"},{\"id\":3992797279,\"predicate\":\"messages.allStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSet>\"}],\"type\":\"messages.AllStickers\"},{\"id\":2228326789,\"predicate\":\"messages.affectedMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":3943987176,\"predicate\":\"webPageEmpty\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"WebPage\"},{\"id\":3313949212,\"predicate\":\"webPagePending\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":3902555570,\"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<WebPageAttribute>\"}],\"type\":\"WebPage\"},{\"id\":1930545681,\"predicate\":\"webPageNotModified\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"cached_page_views\",\"type\":\"flags.0?int\"}],\"type\":\"WebPage\"},{\"id\":2902578717,\"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\":\"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\":307276766,\"predicate\":\"account.authorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector<Authorization>\"}],\"type\":\"account.Authorizations\"},{\"id\":2904965624,\"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\"}],\"type\":\"account.Password\"},{\"id\":2589733861,\"predicate\":\"account.passwordSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"email\",\"type\":\"flags.0?string\"},{\"name\":\"secure_settings\",\"type\":\"flags.1?SecureSecretSettings\"}],\"type\":\"account.PasswordSettings\"},{\"id\":3258394569,\"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\":2743383929,\"predicate\":\"receivedNotifyMessage\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"flags\",\"type\":\"int\"}],\"type\":\"ReceivedNotifyMessage\"},{\"id\":1847917725,\"predicate\":\"chatInviteExported\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoked\",\"type\":\"flags.0?true\"},{\"name\":\"permanent\",\"type\":\"flags.5?true\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"admin_id\",\"type\":\"int\"},{\"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\"}],\"type\":\"ExportedChatInvite\"},{\"id\":1516793212,\"predicate\":\"chatInviteAlready\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"}],\"type\":\"ChatInvite\"},{\"id\":3754096014,\"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\":\"title\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"Photo\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"flags.4?Vector<User>\"}],\"type\":\"ChatInvite\"},{\"id\":1634294960,\"predicate\":\"chatInvitePeek\",\"params\":[{\"name\":\"chat\",\"type\":\"Chat\"},{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"ChatInvite\"},{\"id\":4290128789,\"predicate\":\"inputStickerSetEmpty\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":2649203305,\"predicate\":\"inputStickerSetID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputStickerSet\"},{\"id\":2250033312,\"predicate\":\"inputStickerSetShortName\",\"params\":[{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":42402760,\"predicate\":\"inputStickerSetAnimatedEmoji\",\"params\":[],\"type\":\"InputStickerSet\"},{\"id\":3867103758,\"predicate\":\"inputStickerSetDice\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"}],\"type\":\"InputStickerSet\"},{\"id\":3621724538,\"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\":\"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<PhotoSize>\"},{\"name\":\"thumb_dc_id\",\"type\":\"flags.4?int\"},{\"name\":\"thumb_version\",\"type\":\"flags.4?int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"StickerSet\"},{\"id\":3054118054,\"predicate\":\"messages.stickerSet\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"documents\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.StickerSet\"},{\"id\":3262826695,\"predicate\":\"botCommand\",\"params\":[{\"name\":\"command\",\"type\":\"string\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"BotCommand\"},{\"id\":2565348666,\"predicate\":\"botInfo\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"commands\",\"type\":\"Vector<BotCommand>\"}],\"type\":\"BotInfo\"},{\"id\":2734311552,\"predicate\":\"keyboardButton\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"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\":2976541737,\"predicate\":\"keyboardButtonRequestPhone\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":4235815743,\"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\":1358175439,\"predicate\":\"keyboardButtonGame\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2950250427,\"predicate\":\"keyboardButtonBuy\",\"params\":[{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"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\":3492708308,\"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\":3150401885,\"predicate\":\"keyboardButtonRequestPoll\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"quiz\",\"type\":\"flags.0?Bool\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"KeyboardButton\"},{\"id\":2002815875,\"predicate\":\"keyboardButtonRow\",\"params\":[{\"name\":\"buttons\",\"type\":\"Vector<KeyboardButton>\"}],\"type\":\"KeyboardButtonRow\"},{\"id\":2688441221,\"predicate\":\"replyKeyboardHide\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":4094724768,\"predicate\":\"replyKeyboardForceReply\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"single_use\",\"type\":\"flags.1?true\"},{\"name\":\"selective\",\"type\":\"flags.2?true\"}],\"type\":\"ReplyMarkup\"},{\"id\":889353612,\"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\":\"rows\",\"type\":\"Vector<KeyboardButtonRow>\"}],\"type\":\"ReplyMarkup\"},{\"id\":1218642516,\"predicate\":\"replyInlineMarkup\",\"params\":[{\"name\":\"rows\",\"type\":\"Vector<KeyboardButtonRow>\"}],\"type\":\"ReplyMarkup\"},{\"id\":3146955413,\"predicate\":\"messageEntityUnknown\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":4194588573,\"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\":3177253833,\"predicate\":\"messageEntityBold\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":2188348256,\"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\":892193368,\"predicate\":\"messageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":546203849,\"predicate\":\"inputMessageEntityMentionName\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"MessageEntity\"},{\"id\":2607407947,\"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\":2622389899,\"predicate\":\"messageEntityUnderline\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":3204879316,\"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\":1981704948,\"predicate\":\"messageEntityBankCard\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"MessageEntity\"},{\"id\":4002160262,\"predicate\":\"inputChannelEmpty\",\"params\":[],\"type\":\"InputChannel\"},{\"id\":2951442734,\"predicate\":\"inputChannel\",\"params\":[{\"name\":\"channel_id\",\"type\":\"int\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputChannel\"},{\"id\":707290417,\"predicate\":\"inputChannelFromMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"channel_id\",\"type\":\"int\"}],\"type\":\"InputChannel\"},{\"id\":2131196633,\"predicate\":\"contacts.resolvedPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":182649427,\"predicate\":\"messageRange\",\"params\":[{\"name\":\"min_id\",\"type\":\"int\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"MessageRange\"},{\"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\":2763835134,\"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<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"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<Message>\"},{\"name\":\"other_updates\",\"type\":\"Vector<Update>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"updates.ChannelDifference\"},{\"id\":2496933607,\"predicate\":\"channelMessagesFilterEmpty\",\"params\":[],\"type\":\"ChannelMessagesFilter\"},{\"id\":3447183703,\"predicate\":\"channelMessagesFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_new_messages\",\"type\":\"flags.1?true\"},{\"name\":\"ranges\",\"type\":\"Vector<MessageRange>\"}],\"type\":\"ChannelMessagesFilter\"},{\"id\":367766557,\"predicate\":\"channelParticipant\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":2737347181,\"predicate\":\"channelParticipantSelf\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChannelParticipant\"},{\"id\":1149094475,\"predicate\":\"channelParticipantCreator\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.0?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":3435051951,\"predicate\":\"channelParticipantAdmin\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"can_edit\",\"type\":\"flags.0?true\"},{\"name\":\"self\",\"type\":\"flags.1?true\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"inviter_id\",\"type\":\"flags.1?int\"},{\"name\":\"promoted_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"admin_rights\",\"type\":\"ChatAdminRights\"},{\"name\":\"rank\",\"type\":\"flags.2?string\"}],\"type\":\"ChannelParticipant\"},{\"id\":1352785878,\"predicate\":\"channelParticipantBanned\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"left\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"kicked_by\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelParticipant\"},{\"id\":453242886,\"predicate\":\"channelParticipantLeft\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"ChannelParticipant\"},{\"id\":3728686201,\"predicate\":\"channelParticipantsRecent\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":3026225513,\"predicate\":\"channelParticipantsAdmins\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2746567045,\"predicate\":\"channelParticipantsKicked\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2966521435,\"predicate\":\"channelParticipantsBots\",\"params\":[],\"type\":\"ChannelParticipantsFilter\"},{\"id\":338142689,\"predicate\":\"channelParticipantsBanned\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":106343499,\"predicate\":\"channelParticipantsSearch\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":3144345741,\"predicate\":\"channelParticipantsContacts\",\"params\":[{\"name\":\"q\",\"type\":\"string\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":3763035371,\"predicate\":\"channelParticipantsMentions\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"q\",\"type\":\"flags.0?string\"},{\"name\":\"top_msg_id\",\"type\":\"flags.1?int\"}],\"type\":\"ChannelParticipantsFilter\"},{\"id\":2595290799,\"predicate\":\"channels.channelParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<ChannelParticipant>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":4028055529,\"predicate\":\"channels.channelParticipantsNotModified\",\"params\":[],\"type\":\"channels.ChannelParticipants\"},{\"id\":3753378583,\"predicate\":\"channels.channelParticipant\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.ChannelParticipant\"},{\"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<MessageEntity>\"},{\"name\":\"min_age_confirm\",\"type\":\"flags.1?int\"}],\"type\":\"help.TermsOfService\"},{\"id\":3892468898,\"predicate\":\"messages.savedGifsNotModified\",\"params\":[],\"type\":\"messages.SavedGifs\"},{\"id\":772213157,\"predicate\":\"messages.savedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"gifs\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.SavedGifs\"},{\"id\":864077702,\"predicate\":\"inputBotInlineMessageMediaAuto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"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<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":2526190213,\"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\":2800599037,\"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\":1262639204,\"predicate\":\"inputBotInlineMessageGame\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":3576991109,\"predicate\":\"inputBotInlineMessageMediaInvoice\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"multiple_allowed\",\"type\":\"flags.1?true\"},{\"name\":\"can_forward\",\"type\":\"flags.3?true\"},{\"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\":\"string\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"InputBotInlineMessage\"},{\"id\":2294256409,\"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\":2832753831,\"predicate\":\"inputBotInlineResultPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"type\",\"type\":\"string\"},{\"name\":\"photo\",\"type\":\"InputPhoto\"},{\"name\":\"send_message\",\"type\":\"InputBotInlineMessage\"}],\"type\":\"InputBotInlineResult\"},{\"id\":4294507972,\"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\":1336154098,\"predicate\":\"inputBotInlineResultGame\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"short_name\",\"type\":\"string\"},{\"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<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"id\":2357159394,\"predicate\":\"botInlineMessageText\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.0?true\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.1?Vector<MessageEntity>\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"}],\"type\":\"BotInlineMessage\"},{\"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\":2324063644,\"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\":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\":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\":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\":2491197512,\"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<BotInlineResult>\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.BotResults\"},{\"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\":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\":3221273506,\"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\":2869151449,\"predicate\":\"auth.sentCodeTypeFlashCall\",\"params\":[{\"name\":\"pattern\",\"type\":\"string\"}],\"type\":\"auth.SentCodeType\"},{\"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\":649453030,\"predicate\":\"messages.messageEditData\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"caption\",\"type\":\"flags.0?true\"}],\"type\":\"messages.MessageEditData\"},{\"id\":2299280777,\"predicate\":\"inputBotInlineMessageID\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputBotInlineMessageID\"},{\"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<Dialog>\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"state\",\"type\":\"updates.State\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":3989684315,\"predicate\":\"topPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"rating\",\"type\":\"double\"}],\"type\":\"TopPeer\"},{\"id\":2875595611,\"predicate\":\"topPeerCategoryBotsPM\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":344356834,\"predicate\":\"topPeerCategoryBotsInline\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":104314861,\"predicate\":\"topPeerCategoryCorrespondents\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":3172442442,\"predicate\":\"topPeerCategoryGroups\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":371037736,\"predicate\":\"topPeerCategoryChannels\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":511092620,\"predicate\":\"topPeerCategoryPhoneCalls\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":2822794409,\"predicate\":\"topPeerCategoryForwardUsers\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":4226728176,\"predicate\":\"topPeerCategoryForwardChats\",\"params\":[],\"type\":\"TopPeerCategory\"},{\"id\":4219683473,\"predicate\":\"topPeerCategoryPeers\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"peers\",\"type\":\"Vector<TopPeer>\"}],\"type\":\"TopPeerCategoryPeers\"},{\"id\":3727060725,\"predicate\":\"contacts.topPeersNotModified\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":1891070632,\"predicate\":\"contacts.topPeers\",\"params\":[{\"name\":\"categories\",\"type\":\"Vector<TopPeerCategoryPeers>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"contacts.TopPeers\"},{\"id\":3039597469,\"predicate\":\"contacts.topPeersDisabled\",\"params\":[],\"type\":\"contacts.TopPeers\"},{\"id\":453805082,\"predicate\":\"draftMessageEmpty\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"flags.0?int\"}],\"type\":\"DraftMessage\"},{\"id\":4253970719,\"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<MessageEntity>\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"DraftMessage\"},{\"id\":3336309862,\"predicate\":\"messages.featuredStickersNotModified\",\"params\":[{\"name\":\"count\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":3064709953,\"predicate\":\"messages.featuredStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"},{\"name\":\"unread\",\"type\":\"Vector<long>\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":186120336,\"predicate\":\"messages.recentStickersNotModified\",\"params\":[],\"type\":\"messages.RecentStickers\"},{\"id\":586395571,\"predicate\":\"messages.recentStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"},{\"name\":\"dates\",\"type\":\"Vector<int>\"}],\"type\":\"messages.RecentStickers\"},{\"id\":1338747336,\"predicate\":\"messages.archivedStickers\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":946083368,\"predicate\":\"messages.stickerSetInstallResultSuccess\",\"params\":[],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":904138920,\"predicate\":\"messages.stickerSetInstallResultArchive\",\"params\":[{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":1678812626,\"predicate\":\"stickerSetCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"cover\",\"type\":\"Document\"}],\"type\":\"StickerSetCovered\"},{\"id\":872932635,\"predicate\":\"stickerSetMultiCovered\",\"params\":[{\"name\":\"set\",\"type\":\"StickerSet\"},{\"name\":\"covers\",\"type\":\"Vector<Document>\"}],\"type\":\"StickerSetCovered\"},{\"id\":2933316530,\"predicate\":\"maskCoords\",\"params\":[{\"name\":\"n\",\"type\":\"int\"},{\"name\":\"x\",\"type\":\"double\"},{\"name\":\"y\",\"type\":\"double\"},{\"name\":\"zoom\",\"type\":\"double\"}],\"type\":\"MaskCoords\"},{\"id\":1251549527,\"predicate\":\"inputStickeredMediaPhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"InputStickeredMedia\"},{\"id\":70813275,\"predicate\":\"inputStickeredMediaDocument\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"}],\"type\":\"InputStickeredMedia\"},{\"id\":3187238203,\"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\":53231223,\"predicate\":\"inputGameID\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGame\"},{\"id\":3274827786,\"predicate\":\"inputGameShortName\",\"params\":[{\"name\":\"bot_id\",\"type\":\"InputUser\"},{\"name\":\"short_name\",\"type\":\"string\"}],\"type\":\"InputGame\"},{\"id\":1493171408,\"predicate\":\"highScore\",\"params\":[{\"name\":\"pos\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"score\",\"type\":\"int\"}],\"type\":\"HighScore\"},{\"id\":2587622809,\"predicate\":\"messages.highScores\",\"params\":[{\"name\":\"scores\",\"type\":\"Vector<HighScore>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.HighScores\"},{\"id\":3695018575,\"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\":3641877916,\"predicate\":\"textItalic\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":3240501956,\"predicate\":\"textUnderline\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":2616769429,\"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\":3730443734,\"predicate\":\"textEmail\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":2120376535,\"predicate\":\"textConcat\",\"params\":[{\"name\":\"texts\",\"type\":\"Vector<RichText>\"}],\"type\":\"RichText\"},{\"id\":3983181060,\"predicate\":\"textSubscript\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"RichText\"},{\"id\":3355139585,\"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\":894777186,\"predicate\":\"textAnchor\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"RichText\"},{\"id\":324435594,\"predicate\":\"pageBlockUnsupported\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":1890305021,\"predicate\":\"pageBlockTitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":2415565343,\"predicate\":\"pageBlockSubtitle\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":3132089824,\"predicate\":\"pageBlockAuthorDate\",\"params\":[{\"name\":\"author\",\"type\":\"RichText\"},{\"name\":\"published_date\",\"type\":\"int\"}],\"type\":\"PageBlock\"},{\"id\":3218105580,\"predicate\":\"pageBlockHeader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":4046173921,\"predicate\":\"pageBlockSubheader\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":1182402406,\"predicate\":\"pageBlockParagraph\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":3228621118,\"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\":3676352904,\"predicate\":\"pageBlockDivider\",\"params\":[],\"type\":\"PageBlock\"},{\"id\":3456972720,\"predicate\":\"pageBlockAnchor\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"PageBlock\"},{\"id\":3840442385,\"predicate\":\"pageBlockList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageListItem>\"}],\"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\":2826014149,\"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\":4065961995,\"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<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":1705048653,\"predicate\":\"pageBlockCollage\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":52401552,\"predicate\":\"pageBlockSlideshow\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":4011282869,\"predicate\":\"pageBlockChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"Chat\"}],\"type\":\"PageBlock\"},{\"id\":2151899626,\"predicate\":\"pageBlockAudio\",\"params\":[{\"name\":\"audio_id\",\"type\":\"long\"},{\"name\":\"caption\",\"type\":\"PageCaption\"}],\"type\":\"PageBlock\"},{\"id\":504660880,\"predicate\":\"pageBlockKicker\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":3209554562,\"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<PageTableRow>\"}],\"type\":\"PageBlock\"},{\"id\":2592793057,\"predicate\":\"pageBlockOrderedList\",\"params\":[{\"name\":\"items\",\"type\":\"Vector<PageListOrderedItem>\"}],\"type\":\"PageBlock\"},{\"id\":1987480557,\"predicate\":\"pageBlockDetails\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"open\",\"type\":\"flags.0?true\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"},{\"name\":\"title\",\"type\":\"RichText\"}],\"type\":\"PageBlock\"},{\"id\":370236054,\"predicate\":\"pageBlockRelatedArticles\",\"params\":[{\"name\":\"title\",\"type\":\"RichText\"},{\"name\":\"articles\",\"type\":\"Vector<PageRelatedArticle>\"}],\"type\":\"PageBlock\"},{\"id\":2756656886,\"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\":2246320897,\"predicate\":\"phoneCallDiscardReasonMissed\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":3767910816,\"predicate\":\"phoneCallDiscardReasonDisconnect\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":1471006352,\"predicate\":\"phoneCallDiscardReasonHangup\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":4210550985,\"predicate\":\"phoneCallDiscardReasonBusy\",\"params\":[],\"type\":\"PhoneCallDiscardReason\"},{\"id\":2104790276,\"predicate\":\"dataJSON\",\"params\":[{\"name\":\"data\",\"type\":\"string\"}],\"type\":\"DataJSON\"},{\"id\":3408489464,\"predicate\":\"labeledPrice\",\"params\":[{\"name\":\"label\",\"type\":\"string\"},{\"name\":\"amount\",\"type\":\"long\"}],\"type\":\"LabeledPrice\"},{\"id\":215516896,\"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\":\"currency\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector<LabeledPrice>\"},{\"name\":\"max_tip_amount\",\"type\":\"flags.8?long\"},{\"name\":\"suggested_tip_amounts\",\"type\":\"flags.8?Vector<long>\"}],\"type\":\"Invoice\"},{\"id\":3926049406,\"predicate\":\"paymentCharge\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"provider_charge_id\",\"type\":\"string\"}],\"type\":\"PaymentCharge\"},{\"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\":2426158996,\"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\":3452074527,\"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<DocumentAttribute>\"}],\"type\":\"WebDocument\"},{\"id\":4190682310,\"predicate\":\"webDocumentNoProxy\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"WebDocument\"},{\"id\":2616017741,\"predicate\":\"inputWebDocument\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"},{\"name\":\"attributes\",\"type\":\"Vector<DocumentAttribute>\"}],\"type\":\"InputWebDocument\"},{\"id\":3258570374,\"predicate\":\"inputWebFileLocation\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputWebFileLocation\"},{\"id\":2669814217,\"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\":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\":2366317589,\"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\":\"int\"},{\"name\":\"invoice\",\"type\":\"Invoice\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"native_provider\",\"type\":\"flags.4?string\"},{\"name\":\"native_params\",\"type\":\"flags.4?DataJSON\"},{\"name\":\"saved_info\",\"type\":\"flags.0?PaymentRequestedInfo\"},{\"name\":\"saved_credentials\",\"type\":\"flags.1?PaymentSavedCredentials\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"payments.PaymentForm\"},{\"id\":3510966403,\"predicate\":\"payments.validatedRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"flags.0?string\"},{\"name\":\"shipping_options\",\"type\":\"flags.1?Vector<ShippingOption>\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":1314881805,\"predicate\":\"payments.paymentResult\",\"params\":[{\"name\":\"updates\",\"type\":\"Updates\"}],\"type\":\"payments.PaymentResult\"},{\"id\":3628142905,\"predicate\":\"payments.paymentVerificationNeeded\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"payments.PaymentResult\"},{\"id\":280319440,\"predicate\":\"payments.paymentReceipt\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"provider_id\",\"type\":\"int\"},{\"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<User>\"}],\"type\":\"payments.PaymentReceipt\"},{\"id\":4220511292,\"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\":3238965967,\"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\":178373535,\"predicate\":\"inputPaymentCredentialsApplePay\",\"params\":[{\"name\":\"payment_data\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":2328045569,\"predicate\":\"inputPaymentCredentialsGooglePay\",\"params\":[{\"name\":\"payment_token\",\"type\":\"DataJSON\"}],\"type\":\"InputPaymentCredentials\"},{\"id\":3680828724,\"predicate\":\"account.tmpPassword\",\"params\":[{\"name\":\"tmp_password\",\"type\":\"bytes\"},{\"name\":\"valid_until\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"id\":3055631583,\"predicate\":\"shippingOption\",\"params\":[{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"title\",\"type\":\"string\"},{\"name\":\"prices\",\"type\":\"Vector<LabeledPrice>\"}],\"type\":\"ShippingOption\"},{\"id\":4288717974,\"predicate\":\"inputStickerSetItem\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"document\",\"type\":\"InputDocument\"},{\"name\":\"emoji\",\"type\":\"string\"},{\"name\":\"mask_coords\",\"type\":\"flags.0?MaskCoords\"}],\"type\":\"InputStickerSetItem\"},{\"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\":462375633,\"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\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"receive_date\",\"type\":\"flags.0?int\"}],\"type\":\"PhoneCall\"},{\"id\":2280307539,\"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\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_hash\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":2575058250,\"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\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_b\",\"type\":\"bytes\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"}],\"type\":\"PhoneCall\"},{\"id\":2269294207,\"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\":\"int\"},{\"name\":\"participant_id\",\"type\":\"int\"},{\"name\":\"g_a_or_b\",\"type\":\"bytes\"},{\"name\":\"key_fingerprint\",\"type\":\"long\"},{\"name\":\"protocol\",\"type\":\"PhoneCallProtocol\"},{\"name\":\"connections\",\"type\":\"Vector<PhoneConnection>\"},{\"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\":2639009728,\"predicate\":\"phoneConnection\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"ip\",\"type\":\"string\"},{\"name\":\"ipv6\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"},{\"name\":\"peer_tag\",\"type\":\"bytes\"}],\"type\":\"PhoneConnection\"},{\"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\":4236742600,\"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<string>\"}],\"type\":\"PhoneCallProtocol\"},{\"id\":3968000320,\"predicate\":\"phone.phoneCall\",\"params\":[{\"name\":\"phone_call\",\"type\":\"PhoneCall\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.PhoneCall\"},{\"id\":4004045934,\"predicate\":\"upload.cdnFileReuploadNeeded\",\"params\":[{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":2845821519,\"predicate\":\"upload.cdnFile\",\"params\":[{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"upload.CdnFile\"},{\"id\":3380800186,\"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<CdnPublicKey>\"}],\"type\":\"CdnConfig\"},{\"id\":3402727926,\"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\":4085629430,\"predicate\":\"langPackDifference\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"from_version\",\"type\":\"int\"},{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"strings\",\"type\":\"Vector<LangPackString>\"}],\"type\":\"LangPackDifference\"},{\"id\":4006239459,\"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\":3873421349,\"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\":3924306968,\"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\":4170676210,\"predicate\":\"channelAdminLogEventActionParticipantLeave\",\"params\":[],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3810276568,\"predicate\":\"channelAdminLogEventActionParticipantInvite\",\"params\":[{\"name\":\"participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3872931198,\"predicate\":\"channelAdminLogEventActionParticipantToggleBan\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3580323600,\"predicate\":\"channelAdminLogEventActionParticipantToggleAdmin\",\"params\":[{\"name\":\"prev_participant\",\"type\":\"ChannelParticipant\"},{\"name\":\"new_participant\",\"type\":\"ChannelParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":2982398631,\"predicate\":\"channelAdminLogEventActionChangeStickerSet\",\"params\":[{\"name\":\"prev_stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"new_stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1599903217,\"predicate\":\"channelAdminLogEventActionTogglePreHistoryHidden\",\"params\":[{\"name\":\"new_value\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":771095562,\"predicate\":\"channelAdminLogEventActionDefaultBannedRights\",\"params\":[{\"name\":\"prev_banned_rights\",\"type\":\"ChatBannedRights\"},{\"name\":\"new_banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":2399639107,\"predicate\":\"channelAdminLogEventActionStopPoll\",\"params\":[{\"name\":\"message\",\"type\":\"Message\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":2725218331,\"predicate\":\"channelAdminLogEventActionChangeLinkedChat\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":241923758,\"predicate\":\"channelAdminLogEventActionChangeLocation\",\"params\":[{\"name\":\"prev_value\",\"type\":\"ChannelLocation\"},{\"name\":\"new_value\",\"type\":\"ChannelLocation\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1401984889,\"predicate\":\"channelAdminLogEventActionToggleSlowMode\",\"params\":[{\"name\":\"prev_value\",\"type\":\"int\"},{\"name\":\"new_value\",\"type\":\"int\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":589338437,\"predicate\":\"channelAdminLogEventActionStartGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3684667712,\"predicate\":\"channelAdminLogEventActionDiscardGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":4179895506,\"predicate\":\"channelAdminLogEventActionParticipantMute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":3863226816,\"predicate\":\"channelAdminLogEventActionParticipantUnmute\",\"params\":[{\"name\":\"participant\",\"type\":\"GroupCallParticipant\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"id\":1456906823,\"predicate\":\"channelAdminLogEventActionToggleGroupCallSetting\",\"params\":[{\"name\":\"join_muted\",\"type\":\"Bool\"}],\"type\":\"ChannelAdminLogEventAction\"},{\"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\":3910056793,\"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\":995769920,\"predicate\":\"channelAdminLogEvent\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"action\",\"type\":\"ChannelAdminLogEventAction\"}],\"type\":\"ChannelAdminLogEvent\"},{\"id\":3985307469,\"predicate\":\"channels.adminLogResults\",\"params\":[{\"name\":\"events\",\"type\":\"Vector<ChannelAdminLogEvent>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":3926948580,\"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\"}],\"type\":\"ChannelAdminLogEventsFilter\"},{\"id\":1558266229,\"predicate\":\"popularContact\",\"params\":[{\"name\":\"client_id\",\"type\":\"long\"},{\"name\":\"importers\",\"type\":\"int\"}],\"type\":\"PopularContact\"},{\"id\":2660214483,\"predicate\":\"messages.favedStickersNotModified\",\"params\":[],\"type\":\"messages.FavedStickers\"},{\"id\":4085198614,\"predicate\":\"messages.favedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"packs\",\"type\":\"Vector<StickerPack>\"},{\"name\":\"stickers\",\"type\":\"Vector<Document>\"}],\"type\":\"messages.FavedStickers\"},{\"id\":1189204285,\"predicate\":\"recentMeUrlUnknown\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"RecentMeUrl\"},{\"id\":2377921334,\"predicate\":\"recentMeUrlUser\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"user_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":2686132985,\"predicate\":\"recentMeUrlChat\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"RecentMeUrl\"},{\"id\":3947431965,\"predicate\":\"recentMeUrlChatInvite\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"chat_invite\",\"type\":\"ChatInvite\"}],\"type\":\"RecentMeUrl\"},{\"id\":3154794460,\"predicate\":\"recentMeUrlStickerSet\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"set\",\"type\":\"StickerSetCovered\"}],\"type\":\"RecentMeUrl\"},{\"id\":235081943,\"predicate\":\"help.recentMeUrls\",\"params\":[{\"name\":\"urls\",\"type\":\"Vector<RecentMeUrl>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"help.RecentMeUrls\"},{\"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<MessageEntity>\"}],\"type\":\"InputSingleMedia\"},{\"id\":3402187762,\"predicate\":\"webAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"},{\"name\":\"bot_id\",\"type\":\"int\"},{\"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\":3981887996,\"predicate\":\"account.webAuthorizations\",\"params\":[{\"name\":\"authorizations\",\"type\":\"Vector<WebAuthorization>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"account.WebAuthorizations\"},{\"id\":2792792866,\"predicate\":\"inputMessageID\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":3134751637,\"predicate\":\"inputMessageReplyTo\",\"params\":[{\"name\":\"id\",\"type\":\"int\"}],\"type\":\"InputMessage\"},{\"id\":2257003832,\"predicate\":\"inputMessagePinned\",\"params\":[],\"type\":\"InputMessage\"},{\"id\":2902071934,\"predicate\":\"inputMessageCallbackQuery\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"query_id\",\"type\":\"long\"}],\"type\":\"InputMessage\"},{\"id\":4239064759,\"predicate\":\"inputDialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"InputDialogPeer\"},{\"id\":1684014375,\"predicate\":\"inputDialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputDialogPeer\"},{\"id\":3849174789,\"predicate\":\"dialogPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"}],\"type\":\"DialogPeer\"},{\"id\":1363483106,\"predicate\":\"dialogPeerFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"DialogPeer\"},{\"id\":223655517,\"predicate\":\"messages.foundStickerSetsNotModified\",\"params\":[],\"type\":\"messages.FoundStickerSets\"},{\"id\":1359533640,\"predicate\":\"messages.foundStickerSets\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"sets\",\"type\":\"Vector<StickerSetCovered>\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":1648543603,\"predicate\":\"fileHash\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"FileHash\"},{\"id\":1968737087,\"predicate\":\"inputClientProxy\",\"params\":[{\"name\":\"address\",\"type\":\"string\"},{\"name\":\"port\",\"type\":\"int\"}],\"type\":\"InputClientProxy\"},{\"id\":3811614591,\"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\":1679398724,\"predicate\":\"secureFileEmpty\",\"params\":[],\"type\":\"SecureFile\"},{\"id\":3760683618,\"predicate\":\"secureFile\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"dc_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"secret\",\"type\":\"bytes\"}],\"type\":\"SecureFile\"},{\"id\":2330640067,\"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\":2636808675,\"predicate\":\"secureValueTypePersonalDetails\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":1034709504,\"predicate\":\"secureValueTypePassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":115615172,\"predicate\":\"secureValueTypeDriverLicense\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2698015819,\"predicate\":\"secureValueTypeIdentityCard\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2577698595,\"predicate\":\"secureValueTypeInternalPassport\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":3420659238,\"predicate\":\"secureValueTypeAddress\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":4231435598,\"predicate\":\"secureValueTypeUtilityBill\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2299755533,\"predicate\":\"secureValueTypeBankStatement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2340959368,\"predicate\":\"secureValueTypeRentalAgreement\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2581823594,\"predicate\":\"secureValueTypePassportRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":3926060083,\"predicate\":\"secureValueTypeTemporaryRegistration\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":3005262555,\"predicate\":\"secureValueTypePhone\",\"params\":[],\"type\":\"SecureValueType\"},{\"id\":2386339822,\"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<SecureFile>\"},{\"name\":\"files\",\"type\":\"flags.4?Vector<SecureFile>\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValue\"},{\"id\":3676426407,\"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<InputSecureFile>\"},{\"name\":\"files\",\"type\":\"flags.4?Vector<InputSecureFile>\"},{\"name\":\"plain_data\",\"type\":\"flags.5?SecurePlainData\"}],\"type\":\"InputSecureValue\"},{\"id\":3978218928,\"predicate\":\"secureValueHash\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"type\":\"SecureValueHash\"},{\"id\":3903065049,\"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\":2257201829,\"predicate\":\"secureValueErrorReverseSide\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"file_hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":3845639894,\"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<bytes>\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2258466191,\"predicate\":\"secureValueError\",\"params\":[{\"name\":\"type\",\"type\":\"SecureValueType\"},{\"name\":\"hash\",\"type\":\"bytes\"},{\"name\":\"text\",\"type\":\"string\"}],\"type\":\"SecureValueError\"},{\"id\":2702460784,\"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<bytes>\"},{\"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\":2905480408,\"predicate\":\"account.authorizationForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"required_types\",\"type\":\"Vector<SecureRequiredType>\"},{\"name\":\"values\",\"type\":\"Vector<SecureValue>\"},{\"name\":\"errors\",\"type\":\"Vector<SecureValueError>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"privacy_policy_url\",\"type\":\"flags.0?string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":2166326607,\"predicate\":\"account.sentEmailCode\",\"params\":[{\"name\":\"email_pattern\",\"type\":\"string\"},{\"name\":\"length\",\"type\":\"int\"}],\"type\":\"account.SentEmailCode\"},{\"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<MessageEntity>\"}],\"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\":3562713238,\"predicate\":\"passwordKdfAlgoUnknown\",\"params\":[],\"type\":\"PasswordKdfAlgo\"},{\"id\":982592842,\"predicate\":\"passwordKdfAlgoSHA256SHA256PBKDF2HMACSHA512iter100000SHA256ModPow\",\"params\":[{\"name\":\"salt1\",\"type\":\"bytes\"},{\"name\":\"salt2\",\"type\":\"bytes\"},{\"name\":\"g\",\"type\":\"int\"},{\"name\":\"p\",\"type\":\"bytes\"}],\"type\":\"PasswordKdfAlgo\"},{\"id\":4883767,\"predicate\":\"securePasswordKdfAlgoUnknown\",\"params\":[],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":3153255840,\"predicate\":\"securePasswordKdfAlgoPBKDF2HMACSHA512iter100000\",\"params\":[{\"name\":\"salt\",\"type\":\"bytes\"}],\"type\":\"SecurePasswordKdfAlgo\"},{\"id\":2252807570,\"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\":2558588504,\"predicate\":\"inputCheckPasswordEmpty\",\"params\":[],\"type\":\"InputCheckPasswordSRP\"},{\"id\":3531600002,\"predicate\":\"inputCheckPasswordSRP\",\"params\":[{\"name\":\"srp_id\",\"type\":\"long\"},{\"name\":\"A\",\"type\":\"bytes\"},{\"name\":\"M1\",\"type\":\"bytes\"}],\"type\":\"InputCheckPasswordSRP\"},{\"id\":2191366618,\"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<SecureRequiredType>\"}],\"type\":\"SecureRequiredType\"},{\"id\":3216634967,\"predicate\":\"help.passportConfigNotModified\",\"params\":[],\"type\":\"help.PassportConfig\"},{\"id\":2694370991,\"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\":3235781593,\"predicate\":\"jsonObjectValue\",\"params\":[{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"JSONValue\"}],\"type\":\"JSONObjectValue\"},{\"id\":1064139624,\"predicate\":\"jsonNull\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":3342098026,\"predicate\":\"jsonBool\",\"params\":[{\"name\":\"value\",\"type\":\"Bool\"}],\"type\":\"JSONValue\"},{\"id\":736157604,\"predicate\":\"jsonNumber\",\"params\":[{\"name\":\"value\",\"type\":\"double\"}],\"type\":\"JSONValue\"},{\"id\":3072226938,\"predicate\":\"jsonString\",\"params\":[{\"name\":\"value\",\"type\":\"string\"}],\"type\":\"JSONValue\"},{\"id\":4148447075,\"predicate\":\"jsonArray\",\"params\":[{\"name\":\"value\",\"type\":\"Vector<JSONValue>\"}],\"type\":\"JSONValue\"},{\"id\":2579616925,\"predicate\":\"jsonObject\",\"params\":[{\"name\":\"value\",\"type\":\"Vector<JSONObjectValue>\"}],\"type\":\"JSONValue\"},{\"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\":3770729957,\"predicate\":\"pageTableRow\",\"params\":[{\"name\":\"cells\",\"type\":\"Vector<PageTableCell>\"}],\"type\":\"PageTableRow\"},{\"id\":1869903447,\"predicate\":\"pageCaption\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"},{\"name\":\"credit\",\"type\":\"RichText\"}],\"type\":\"PageCaption\"},{\"id\":3106911949,\"predicate\":\"pageListItemText\",\"params\":[{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListItem\"},{\"id\":635466748,\"predicate\":\"pageListItemBlocks\",\"params\":[{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"}],\"type\":\"PageListItem\"},{\"id\":1577484359,\"predicate\":\"pageListOrderedItemText\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"text\",\"type\":\"RichText\"}],\"type\":\"PageListOrderedItem\"},{\"id\":2564655414,\"predicate\":\"pageListOrderedItemBlocks\",\"params\":[{\"name\":\"num\",\"type\":\"string\"},{\"name\":\"blocks\",\"type\":\"Vector<PageBlock>\"}],\"type\":\"PageListOrderedItem\"},{\"id\":3012615176,\"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\":2556788493,\"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<PageBlock>\"},{\"name\":\"photos\",\"type\":\"Vector<Photo>\"},{\"name\":\"documents\",\"type\":\"Vector<Document>\"},{\"name\":\"views\",\"type\":\"flags.3?int\"}],\"type\":\"Page\"},{\"id\":2349199817,\"predicate\":\"help.supportName\",\"params\":[{\"name\":\"name\",\"type\":\"string\"}],\"type\":\"help.SupportName\"},{\"id\":4088278765,\"predicate\":\"help.userInfoEmpty\",\"params\":[],\"type\":\"help.UserInfo\"},{\"id\":32192344,\"predicate\":\"help.userInfo\",\"params\":[{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"Vector<MessageEntity>\"},{\"name\":\"author\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"help.UserInfo\"},{\"id\":1823064809,\"predicate\":\"pollAnswer\",\"params\":[{\"name\":\"text\",\"type\":\"string\"},{\"name\":\"option\",\"type\":\"bytes\"}],\"type\":\"PollAnswer\"},{\"id\":2262925665,\"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<PollAnswer>\"},{\"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\":3135029667,\"predicate\":\"pollResults\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"min\",\"type\":\"flags.0?true\"},{\"name\":\"results\",\"type\":\"flags.1?Vector<PollAnswerVoters>\"},{\"name\":\"total_voters\",\"type\":\"flags.2?int\"},{\"name\":\"recent_voters\",\"type\":\"flags.3?Vector<int>\"},{\"name\":\"solution\",\"type\":\"flags.4?string\"},{\"name\":\"solution_entities\",\"type\":\"flags.4?Vector<MessageEntity>\"}],\"type\":\"PollResults\"},{\"id\":4030849616,\"predicate\":\"chatOnlines\",\"params\":[{\"name\":\"onlines\",\"type\":\"int\"}],\"type\":\"ChatOnlines\"},{\"id\":1202287072,\"predicate\":\"statsURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"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\"}],\"type\":\"ChatAdminRights\"},{\"id\":2668758040,\"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\":\"until_date\",\"type\":\"int\"}],\"type\":\"ChatBannedRights\"},{\"id\":3861952889,\"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\":2217196460,\"predicate\":\"inputWallPaperNoFile\",\"params\":[],\"type\":\"InputWallPaper\"},{\"id\":471437699,\"predicate\":\"account.wallPapersNotModified\",\"params\":[],\"type\":\"account.WallPapers\"},{\"id\":1881892265,\"predicate\":\"account.wallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"wallpapers\",\"type\":\"Vector<WallPaper>\"}],\"type\":\"account.WallPapers\"},{\"id\":3737042563,\"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\"}],\"type\":\"CodeSettings\"},{\"id\":84438264,\"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\":\"intensity\",\"type\":\"flags.3?int\"},{\"name\":\"rotation\",\"type\":\"flags.4?int\"}],\"type\":\"WallPaperSettings\"},{\"id\":3762434803,\"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\":\"int\"},{\"name\":\"file_size_max\",\"type\":\"int\"},{\"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\":3585325561,\"predicate\":\"emojiKeyword\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector<string>\"}],\"type\":\"EmojiKeyword\"},{\"id\":594408994,\"predicate\":\"emojiKeywordDeleted\",\"params\":[{\"name\":\"keyword\",\"type\":\"string\"},{\"name\":\"emoticons\",\"type\":\"Vector<string>\"}],\"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<EmojiKeyword>\"}],\"type\":\"EmojiKeywordsDifference\"},{\"id\":2775937949,\"predicate\":\"emojiURL\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":3019592545,\"predicate\":\"emojiLanguage\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiLanguage\"},{\"id\":4283715173,\"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\":4224893590,\"predicate\":\"inputFolderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"InputFolderPeer\"},{\"id\":3921323624,\"predicate\":\"folderPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"FolderPeer\"},{\"id\":3896830975,\"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\":2463316494,\"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\":2408320590,\"predicate\":\"urlAuthResultAccepted\",\"params\":[{\"name\":\"url\",\"type\":\"string\"}],\"type\":\"UrlAuthResult\"},{\"id\":2849430303,\"predicate\":\"urlAuthResultDefault\",\"params\":[],\"type\":\"UrlAuthResult\"},{\"id\":3216354699,\"predicate\":\"channelLocationEmpty\",\"params\":[],\"type\":\"ChannelLocation\"},{\"id\":547062491,\"predicate\":\"channelLocation\",\"params\":[{\"name\":\"geo_point\",\"type\":\"GeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"ChannelLocation\"},{\"id\":3393592157,\"predicate\":\"peerLocated\",\"params\":[{\"name\":\"peer\",\"type\":\"Peer\"},{\"name\":\"expires\",\"type\":\"int\"},{\"name\":\"distance\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":4176226379,\"predicate\":\"peerSelfLocated\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"PeerLocated\"},{\"id\":3497176244,\"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\":4119399921,\"predicate\":\"inputThemeSlug\",\"params\":[{\"name\":\"slug\",\"type\":\"string\"}],\"type\":\"InputTheme\"},{\"id\":42930452,\"predicate\":\"theme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"creator\",\"type\":\"flags.0?true\"},{\"name\":\"default\",\"type\":\"flags.1?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?ThemeSettings\"},{\"name\":\"installs_count\",\"type\":\"int\"}],\"type\":\"Theme\"},{\"id\":4095653410,\"predicate\":\"account.themesNotModified\",\"params\":[],\"type\":\"account.Themes\"},{\"id\":2137482273,\"predicate\":\"account.themes\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"},{\"name\":\"themes\",\"type\":\"Vector<Theme>\"}],\"type\":\"account.Themes\"},{\"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\":2837970629,\"predicate\":\"messages.inactiveChats\",\"params\":[{\"name\":\"dates\",\"type\":\"Vector<int>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.InactiveChats\"},{\"id\":3282117730,\"predicate\":\"baseThemeClassic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":4225242760,\"predicate\":\"baseThemeDay\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":3081969320,\"predicate\":\"baseThemeNight\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1834973166,\"predicate\":\"baseThemeTinted\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":1527845466,\"predicate\":\"baseThemeArctic\",\"params\":[],\"type\":\"BaseTheme\"},{\"id\":3176168657,\"predicate\":\"inputThemeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?InputWallPaper\"},{\"name\":\"wallpaper_settings\",\"type\":\"flags.1?WallPaperSettings\"}],\"type\":\"InputThemeSettings\"},{\"id\":2618595402,\"predicate\":\"themeSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"base_theme\",\"type\":\"BaseTheme\"},{\"name\":\"accent_color\",\"type\":\"int\"},{\"name\":\"message_top_color\",\"type\":\"flags.0?int\"},{\"name\":\"message_bottom_color\",\"type\":\"flags.0?int\"},{\"name\":\"wallpaper\",\"type\":\"flags.1?WallPaper\"}],\"type\":\"ThemeSettings\"},{\"id\":1421174295,\"predicate\":\"webPageAttributeTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"documents\",\"type\":\"flags.0?Vector<Document>\"},{\"name\":\"settings\",\"type\":\"flags.1?ThemeSettings\"}],\"type\":\"WebPageAttribute\"},{\"id\":2727236953,\"predicate\":\"messageUserVote\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"option\",\"type\":\"bytes\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":909603888,\"predicate\":\"messageUserVoteInputOption\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":244310238,\"predicate\":\"messageUserVoteMultiple\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"MessageUserVote\"},{\"id\":136574537,\"predicate\":\"messages.votesList\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"votes\",\"type\":\"Vector<MessageUserVote>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"next_offset\",\"type\":\"flags.0?string\"}],\"type\":\"messages.VotesList\"},{\"id\":4117234314,\"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<BankCardOpenUrl>\"}],\"type\":\"payments.BankCardData\"},{\"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<InputPeer>\"},{\"name\":\"include_peers\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"exclude_peers\",\"type\":\"Vector<InputPeer>\"}],\"type\":\"DialogFilter\"},{\"id\":2004110666,\"predicate\":\"dialogFilterSuggested\",\"params\":[{\"name\":\"filter\",\"type\":\"DialogFilter\"},{\"name\":\"description\",\"type\":\"string\"}],\"type\":\"DialogFilterSuggested\"},{\"id\":3057118639,\"predicate\":\"statsDateRangeDays\",\"params\":[{\"name\":\"min_date\",\"type\":\"int\"},{\"name\":\"max_date\",\"type\":\"int\"}],\"type\":\"StatsDateRangeDays\"},{\"id\":3410210014,\"predicate\":\"statsAbsValueAndPrev\",\"params\":[{\"name\":\"current\",\"type\":\"double\"},{\"name\":\"previous\",\"type\":\"double\"}],\"type\":\"StatsAbsValueAndPrev\"},{\"id\":3419287520,\"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\":3202127906,\"predicate\":\"statsGraphError\",\"params\":[{\"name\":\"error\",\"type\":\"string\"}],\"type\":\"StatsGraph\"},{\"id\":2393138358,\"predicate\":\"statsGraph\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"json\",\"type\":\"DataJSON\"},{\"name\":\"zoom_token\",\"type\":\"flags.0?string\"}],\"type\":\"StatsGraph\"},{\"id\":2907687357,\"predicate\":\"messageInteractionCounters\",\"params\":[{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"views\",\"type\":\"int\"},{\"name\":\"forwards\",\"type\":\"int\"}],\"type\":\"MessageInteractionCounters\"},{\"id\":3187114900,\"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<MessageInteractionCounters>\"}],\"type\":\"stats.BroadcastStats\"},{\"id\":2566302837,\"predicate\":\"help.promoDataEmpty\",\"params\":[{\"name\":\"expires\",\"type\":\"int\"}],\"type\":\"help.PromoData\"},{\"id\":2352576831,\"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<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"psa_type\",\"type\":\"flags.1?string\"},{\"name\":\"psa_message\",\"type\":\"flags.2?string\"}],\"type\":\"help.PromoData\"},{\"id\":3727929492,\"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\":418631927,\"predicate\":\"statsGroupTopPoster\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"int\"},{\"name\":\"avg_chars\",\"type\":\"int\"}],\"type\":\"StatsGroupTopPoster\"},{\"id\":1611985938,\"predicate\":\"statsGroupTopAdmin\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"deleted\",\"type\":\"int\"},{\"name\":\"kicked\",\"type\":\"int\"},{\"name\":\"banned\",\"type\":\"int\"}],\"type\":\"StatsGroupTopAdmin\"},{\"id\":831924812,\"predicate\":\"statsGroupTopInviter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"invitations\",\"type\":\"int\"}],\"type\":\"StatsGroupTopInviter\"},{\"id\":4018141462,\"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<StatsGroupTopPoster>\"},{\"name\":\"top_admins\",\"type\":\"Vector<StatsGroupTopAdmin>\"},{\"name\":\"top_inviters\",\"type\":\"Vector<StatsGroupTopInviter>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"stats.MegagroupStats\"},{\"id\":3198350372,\"predicate\":\"globalPrivacySettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"archive_and_mute_new_noncontact_peers\",\"type\":\"flags.0?Bool\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":1107543535,\"predicate\":\"help.countryCode\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"country_code\",\"type\":\"string\"},{\"name\":\"prefixes\",\"type\":\"flags.0?Vector<string>\"},{\"name\":\"patterns\",\"type\":\"flags.1?Vector<string>\"}],\"type\":\"help.CountryCode\"},{\"id\":3280440867,\"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<help.CountryCode>\"}],\"type\":\"help.Country\"},{\"id\":2479628082,\"predicate\":\"help.countriesListNotModified\",\"params\":[],\"type\":\"help.CountriesList\"},{\"id\":2278585758,\"predicate\":\"help.countriesList\",\"params\":[{\"name\":\"countries\",\"type\":\"Vector<help.Country>\"},{\"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\":3066361155,\"predicate\":\"messages.messageViews\",\"params\":[{\"name\":\"views\",\"type\":\"Vector<MessageViews>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.MessageViews\"},{\"id\":4124938141,\"predicate\":\"messages.discussionMessage\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"messages\",\"type\":\"Vector<Message>\"},{\"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\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":2799007587,\"predicate\":\"messageReplyHeader\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"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\":1093204652,\"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<Peer>\"},{\"name\":\"channel_id\",\"type\":\"flags.0?int\"},{\"name\":\"max_id\",\"type\":\"flags.2?int\"},{\"name\":\"read_max_id\",\"type\":\"flags.3?int\"}],\"type\":\"MessageReplies\"},{\"id\":3908927508,\"predicate\":\"peerBlocked\",\"params\":[{\"name\":\"peer_id\",\"type\":\"Peer\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"PeerBlocked\"},{\"id\":2308567701,\"predicate\":\"stats.messageStats\",\"params\":[{\"name\":\"views_graph\",\"type\":\"StatsGraph\"}],\"type\":\"stats.MessageStats\"},{\"id\":2004925620,\"predicate\":\"groupCallDiscarded\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"duration\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":3378275924,\"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\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"},{\"name\":\"participants_count\",\"type\":\"int\"},{\"name\":\"params\",\"type\":\"flags.0?DataJSON\"},{\"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\":\"version\",\"type\":\"int\"}],\"type\":\"GroupCall\"},{\"id\":3635053583,\"predicate\":\"inputGroupCall\",\"params\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"access_hash\",\"type\":\"long\"}],\"type\":\"InputGroupCall\"},{\"id\":3110807022,\"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\":\"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\":\"params\",\"type\":\"flags.6?DataJSON\"}],\"type\":\"GroupCallParticipant\"},{\"id\":2658302637,\"predicate\":\"phone.groupCall\",\"params\":[{\"name\":\"call\",\"type\":\"GroupCall\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"participants_next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.GroupCall\"},{\"id\":4101460406,\"predicate\":\"phone.groupParticipants\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"participants\",\"type\":\"Vector<GroupCallParticipant>\"},{\"name\":\"next_offset\",\"type\":\"string\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"},{\"name\":\"version\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":813821341,\"predicate\":\"inlineQueryPeerTypeSameBotPM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":2201751468,\"predicate\":\"inlineQueryPeerTypePM\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":3613836554,\"predicate\":\"inlineQueryPeerTypeChat\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1589952067,\"predicate\":\"inlineQueryPeerTypeMegagroup\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":1664413338,\"predicate\":\"inlineQueryPeerTypeBroadcast\",\"params\":[],\"type\":\"InlineQueryPeerType\"},{\"id\":375566091,\"predicate\":\"messages.historyImport\",\"params\":[{\"name\":\"id\",\"type\":\"long\"}],\"type\":\"messages.HistoryImport\"},{\"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\":4019011180,\"predicate\":\"messages.affectedFoundMessages\",\"params\":[{\"name\":\"pts\",\"type\":\"int\"},{\"name\":\"pts_count\",\"type\":\"int\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"messages\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedFoundMessages\"},{\"id\":507405952,\"predicate\":\"chatInviteImporter\",\"params\":[{\"name\":\"user_id\",\"type\":\"int\"},{\"name\":\"date\",\"type\":\"int\"}],\"type\":\"ChatInviteImporter\"},{\"id\":3183881676,\"predicate\":\"messages.exportedChatInvites\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"invites\",\"type\":\"Vector<ExportedChatInvite>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvites\"},{\"id\":410107472,\"predicate\":\"messages.exportedChatInvite\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":572915951,\"predicate\":\"messages.exportedChatInviteReplaced\",\"params\":[{\"name\":\"invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"new_invite\",\"type\":\"ExportedChatInvite\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":2176233482,\"predicate\":\"messages.chatInviteImporters\",\"params\":[{\"name\":\"count\",\"type\":\"int\"},{\"name\":\"importers\",\"type\":\"Vector<ChatInviteImporter>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":3755094799,\"predicate\":\"chatAdminWithInvites\",\"params\":[{\"name\":\"admin_id\",\"type\":\"int\"},{\"name\":\"invites_count\",\"type\":\"int\"},{\"name\":\"revoked_invites_count\",\"type\":\"int\"}],\"type\":\"ChatAdminWithInvites\"},{\"id\":3063640791,\"predicate\":\"messages.chatAdminsWithInvites\",\"params\":[{\"name\":\"admins\",\"type\":\"Vector<ChatAdminWithInvites>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"messages.ChatAdminsWithInvites\"},{\"id\":2723014423,\"predicate\":\"messages.checkedHistoryImportPeer\",\"params\":[{\"name\":\"confirm_text\",\"type\":\"string\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":2951045695,\"predicate\":\"phone.joinAsPeers\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<Peer>\"},{\"name\":\"chats\",\"type\":\"Vector<Chat>\"},{\"name\":\"users\",\"type\":\"Vector<User>\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":541839704,\"predicate\":\"phone.exportedGroupCallInvite\",\"params\":[{\"name\":\"link\",\"type\":\"string\"}],\"type\":\"phone.ExportedGroupCallInvite\"}],\"methods\":[{\"id\":3416209197,\"method\":\"invokeAfterMsg\",\"params\":[{\"name\":\"msg_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":1036301552,\"method\":\"invokeAfterMsgs\",\"params\":[{\"name\":\"msg_ids\",\"type\":\"Vector<long>\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":3251461801,\"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\":3667594509,\"method\":\"invokeWithLayer\",\"params\":[{\"name\":\"layer\",\"type\":\"int\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":3214170551,\"method\":\"invokeWithoutUpdates\",\"params\":[{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":911373810,\"method\":\"invokeWithMessagesRange\",\"params\":[{\"name\":\"range\",\"type\":\"MessageRange\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":2896821550,\"method\":\"invokeWithTakeout\",\"params\":[{\"name\":\"takeout_id\",\"type\":\"long\"},{\"name\":\"query\",\"type\":\"!X\"}],\"type\":\"X\"},{\"id\":2792825935,\"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\":2163139623,\"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\":3168081281,\"method\":\"auth.signIn\",\"params\":[{\"name\":\"phone_number\",\"type\":\"string\"},{\"name\":\"phone_code_hash\",\"type\":\"string\"},{\"name\":\"phone_code\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"id\":1461180992,\"method\":\"auth.logOut\",\"params\":[],\"type\":\"Bool\"},{\"id\":2678787354,\"method\":\"auth.resetAuthorizations\",\"params\":[],\"type\":\"Bool\"},{\"id\":3854565325,\"method\":\"auth.exportAuthorization\",\"params\":[{\"name\":\"dc_id\",\"type\":\"int\"}],\"type\":\"auth.ExportedAuthorization\"},{\"id\":3824129555,\"method\":\"auth.importAuthorization\",\"params\":[{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"auth.Authorization\"},{\"id\":3453233669,\"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\":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\":3515567382,\"method\":\"auth.checkPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"auth.Authorization\"},{\"id\":3633822822,\"method\":\"auth.requestPasswordRecovery\",\"params\":[],\"type\":\"auth.PasswordRecovery\"},{\"id\":1319464594,\"method\":\"auth.recoverPassword\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"auth.Authorization\"},{\"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\":2387124616,\"method\":\"auth.dropTempAuthKeys\",\"params\":[{\"name\":\"except_auth_keys\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":2981369111,\"method\":\"auth.exportLoginToken\",\"params\":[{\"name\":\"api_id\",\"type\":\"int\"},{\"name\":\"api_hash\",\"type\":\"string\"},{\"name\":\"except_ids\",\"type\":\"Vector<int>\"}],\"type\":\"auth.LoginToken\"},{\"id\":2511101156,\"method\":\"auth.importLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"auth.LoginToken\"},{\"id\":3902057805,\"method\":\"auth.acceptLoginToken\",\"params\":[{\"name\":\"token\",\"type\":\"bytes\"}],\"type\":\"Authorization\"},{\"id\":1754754159,\"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<int>\"}],\"type\":\"Bool\"},{\"id\":813089983,\"method\":\"account.unregisterDevice\",\"params\":[{\"name\":\"token_type\",\"type\":\"int\"},{\"name\":\"token\",\"type\":\"string\"},{\"name\":\"other_uids\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":2227067795,\"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\":3682473799,\"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\":2864387939,\"method\":\"account.getWallPapers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.WallPapers\"},{\"id\":3317316998,\"method\":\"account.reportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"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\":3671837008,\"method\":\"account.getPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"}],\"type\":\"account.PrivacyRules\"},{\"id\":3388480744,\"method\":\"account.setPrivacy\",\"params\":[{\"name\":\"key\",\"type\":\"InputPrivacyKey\"},{\"name\":\"rules\",\"type\":\"Vector<InputPrivacyRule>\"}],\"type\":\"account.PrivacyRules\"},{\"id\":1099779595,\"method\":\"account.deleteAccount\",\"params\":[{\"name\":\"reason\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":150761757,\"method\":\"account.getAccountTTL\",\"params\":[],\"type\":\"AccountDaysTTL\"},{\"id\":608323678,\"method\":\"account.setAccountTTL\",\"params\":[{\"name\":\"ttl\",\"type\":\"AccountDaysTTL\"}],\"type\":\"Bool\"},{\"id\":2186758885,\"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\":954152242,\"method\":\"account.updateDeviceLocked\",\"params\":[{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":3810574680,\"method\":\"account.getAuthorizations\",\"params\":[],\"type\":\"account.Authorizations\"},{\"id\":3749180348,\"method\":\"account.resetAuthorization\",\"params\":[{\"name\":\"hash\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":1418342645,\"method\":\"account.getPassword\",\"params\":[],\"type\":\"account.Password\"},{\"id\":2631199481,\"method\":\"account.getPasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"account.PasswordSettings\"},{\"id\":2778402863,\"method\":\"account.updatePasswordSettings\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"new_settings\",\"type\":\"account.PasswordInputSettings\"}],\"type\":\"Bool\"},{\"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\":1151208273,\"method\":\"account.getTmpPassword\",\"params\":[{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"account.TmpPassword\"},{\"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\":2995305597,\"method\":\"account.getAllSecureValues\",\"params\":[],\"type\":\"Vector<SecureValue>\"},{\"id\":1936088002,\"method\":\"account.getSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"Vector<SecureValue>\"},{\"id\":2308956957,\"method\":\"account.saveSecureValue\",\"params\":[{\"name\":\"value\",\"type\":\"InputSecureValue\"},{\"name\":\"secure_secret_id\",\"type\":\"long\"}],\"type\":\"SecureValue\"},{\"id\":3095444555,\"method\":\"account.deleteSecureValue\",\"params\":[{\"name\":\"types\",\"type\":\"Vector<SecureValueType>\"}],\"type\":\"Bool\"},{\"id\":3094063329,\"method\":\"account.getAuthorizationForm\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"}],\"type\":\"account.AuthorizationForm\"},{\"id\":3875699860,\"method\":\"account.acceptAuthorization\",\"params\":[{\"name\":\"bot_id\",\"type\":\"int\"},{\"name\":\"scope\",\"type\":\"string\"},{\"name\":\"public_key\",\"type\":\"string\"},{\"name\":\"value_hashes\",\"type\":\"Vector<SecureValueHash>\"},{\"name\":\"credentials\",\"type\":\"SecureCredentialsEncrypted\"}],\"type\":\"Bool\"},{\"id\":2778945273,\"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\":1880182943,\"method\":\"account.sendVerifyEmailCode\",\"params\":[{\"name\":\"email\",\"type\":\"string\"}],\"type\":\"account.SentEmailCode\"},{\"id\":3971627483,\"method\":\"account.verifyEmail\",\"params\":[{\"name\":\"email\",\"type\":\"string\"},{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":4032514052,\"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?int\"}],\"type\":\"account.Takeout\"},{\"id\":489050862,\"method\":\"account.finishTakeoutSession\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"success\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":2413762848,\"method\":\"account.confirmPasswordEmail\",\"params\":[{\"name\":\"code\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2055154197,\"method\":\"account.resendPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":3251361206,\"method\":\"account.cancelPasswordEmail\",\"params\":[],\"type\":\"Bool\"},{\"id\":2668087080,\"method\":\"account.getContactSignUpNotification\",\"params\":[],\"type\":\"Bool\"},{\"id\":3488890721,\"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\":4237155306,\"method\":\"account.getWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"}],\"type\":\"WallPaper\"},{\"id\":3716494945,\"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\":4276967273,\"method\":\"account.installWallPaper\",\"params\":[{\"name\":\"wallpaper\",\"type\":\"InputWallPaper\"},{\"name\":\"settings\",\"type\":\"WallPaperSettings\"}],\"type\":\"Bool\"},{\"id\":3141244932,\"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\":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\":2217919007,\"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?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":1555261397,\"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?InputThemeSettings\"}],\"type\":\"Theme\"},{\"id\":4065792108,\"method\":\"account.saveTheme\",\"params\":[{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"unsave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":2061776695,\"method\":\"account.installTheme\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"format\",\"type\":\"flags.1?string\"},{\"name\":\"theme\",\"type\":\"flags.1?InputTheme\"}],\"type\":\"Bool\"},{\"id\":2375906347,\"method\":\"account.getTheme\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"theme\",\"type\":\"InputTheme\"},{\"name\":\"document_id\",\"type\":\"long\"}],\"type\":\"Theme\"},{\"id\":676939512,\"method\":\"account.getThemes\",\"params\":[{\"name\":\"format\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"account.Themes\"},{\"id\":3044323691,\"method\":\"account.setContentSettings\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"sensitive_enabled\",\"type\":\"flags.0?true\"}],\"type\":\"Bool\"},{\"id\":2342210990,\"method\":\"account.getContentSettings\",\"params\":[],\"type\":\"account.ContentSettings\"},{\"id\":1705865692,\"method\":\"account.getMultiWallPapers\",\"params\":[{\"name\":\"wallpapers\",\"type\":\"Vector<InputWallPaper>\"}],\"type\":\"Vector<WallPaper>\"},{\"id\":3945483510,\"method\":\"account.getGlobalPrivacySettings\",\"params\":[],\"type\":\"GlobalPrivacySettings\"},{\"id\":517647042,\"method\":\"account.setGlobalPrivacySettings\",\"params\":[{\"name\":\"settings\",\"type\":\"GlobalPrivacySettings\"}],\"type\":\"GlobalPrivacySettings\"},{\"id\":4203529973,\"method\":\"account.reportProfilePhoto\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"photo_id\",\"type\":\"InputPhoto\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":227648840,\"method\":\"users.getUsers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Vector<User>\"},{\"id\":3392185777,\"method\":\"users.getFullUser\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"UserFull\"},{\"id\":2429064373,\"method\":\"users.setSecureValueErrors\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"},{\"name\":\"errors\",\"type\":\"Vector<SecureValueError>\"}],\"type\":\"Bool\"},{\"id\":749357634,\"method\":\"contacts.getContactIDs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"Vector<int>\"},{\"id\":3299038190,\"method\":\"contacts.getStatuses\",\"params\":[],\"type\":\"Vector<ContactStatus>\"},{\"id\":3223553183,\"method\":\"contacts.getContacts\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"contacts.Contacts\"},{\"id\":746589157,\"method\":\"contacts.importContacts\",\"params\":[{\"name\":\"contacts\",\"type\":\"Vector<InputContact>\"}],\"type\":\"contacts.ImportedContacts\"},{\"id\":157945344,\"method\":\"contacts.deleteContacts\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":269745566,\"method\":\"contacts.deleteByPhones\",\"params\":[{\"name\":\"phones\",\"type\":\"Vector<string>\"}],\"type\":\"Bool\"},{\"id\":1758204945,\"method\":\"contacts.block\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":3198573904,\"method\":\"contacts.unblock\",\"params\":[{\"name\":\"id\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":4118557967,\"method\":\"contacts.getBlocked\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Blocked\"},{\"id\":301470424,\"method\":\"contacts.search\",\"params\":[{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"contacts.Found\"},{\"id\":4181511075,\"method\":\"contacts.resolveUsername\",\"params\":[{\"name\":\"username\",\"type\":\"string\"}],\"type\":\"contacts.ResolvedPeer\"},{\"id\":3566742965,\"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\":\"int\"}],\"type\":\"contacts.TopPeers\"},{\"id\":451113900,\"method\":\"contacts.resetTopPeerRating\",\"params\":[{\"name\":\"category\",\"type\":\"TopPeerCategory\"},{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":2274703345,\"method\":\"contacts.resetSaved\",\"params\":[],\"type\":\"Bool\"},{\"id\":2196890527,\"method\":\"contacts.getSaved\",\"params\":[],\"type\":\"Vector<SavedContact>\"},{\"id\":2232729050,\"method\":\"contacts.toggleTopPeers\",\"params\":[{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":3908330448,\"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\":4164002319,\"method\":\"contacts.acceptContact\",\"params\":[{\"name\":\"id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":3544759364,\"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\":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\":1673946374,\"method\":\"messages.getMessages\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputMessage>\"}],\"type\":\"messages.Messages\"},{\"id\":2699967347,\"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\":\"int\"}],\"type\":\"messages.Dialogs\"},{\"id\":3703276128,\"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\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":204812012,\"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\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":238054714,\"method\":\"messages.readHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":469850889,\"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\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":3851326930,\"method\":\"messages.deleteMessages\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke\",\"type\":\"flags.0?true\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":94983360,\"method\":\"messages.receivedMessages\",\"params\":[{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Vector<ReceivedNotifyMessage>\"},{\"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\":1376532592,\"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\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"random_id\",\"type\":\"long\"},{\"name\":\"reply_markup\",\"type\":\"flags.2?ReplyMarkup\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":881978281,\"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\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?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<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":3657360910,\"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\":\"from_peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"random_id\",\"type\":\"Vector<long>\"},{\"name\":\"to_peer\",\"type\":\"InputPeer\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":3474297563,\"method\":\"messages.reportSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":913498268,\"method\":\"messages.getPeerSettings\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"PeerSettings\"},{\"id\":2303961934,\"method\":\"messages.report\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"reason\",\"type\":\"ReportReason\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1013621127,\"method\":\"messages.getChats\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Chats\"},{\"id\":998448230,\"method\":\"messages.getFullChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"messages.ChatFull\"},{\"id\":3695519829,\"method\":\"messages.editChatTitle\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":3394009560,\"method\":\"messages.editChatPhoto\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"photo\",\"type\":\"InputChatPhoto\"}],\"type\":\"Updates\"},{\"id\":4188056073,\"method\":\"messages.addChatUser\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"fwd_limit\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":3308537242,\"method\":\"messages.deleteChatUser\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"revoke_history\",\"type\":\"flags.0?true\"},{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"Updates\"},{\"id\":164303470,\"method\":\"messages.createChat\",\"params\":[{\"name\":\"users\",\"type\":\"Vector<InputUser>\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":651135312,\"method\":\"messages.getDhConfig\",\"params\":[{\"name\":\"version\",\"type\":\"int\"},{\"name\":\"random_length\",\"type\":\"int\"}],\"type\":\"messages.DhConfig\"},{\"id\":4132286275,\"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\":4086541984,\"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<long>\"},{\"id\":1259113487,\"method\":\"messages.reportEncryptedSpam\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"}],\"type\":\"Bool\"},{\"id\":916930423,\"method\":\"messages.readMessageContents\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":71126828,\"method\":\"messages.getStickers\",\"params\":[{\"name\":\"emoticon\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Stickers\"},{\"id\":479598769,\"method\":\"messages.getAllStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":2338894028,\"method\":\"messages.getWebPagePreview\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"}],\"type\":\"MessageMedia\"},{\"id\":347716823,\"method\":\"messages.exportChatInvite\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"legacy_revoke_permanent\",\"type\":\"flags.2?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"expire_date\",\"type\":\"flags.0?int\"},{\"name\":\"usage_limit\",\"type\":\"flags.1?int\"}],\"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\":639215886,\"method\":\"messages.getStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"messages.StickerSet\"},{\"id\":3348096096,\"method\":\"messages.installStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"archived\",\"type\":\"Bool\"}],\"type\":\"messages.StickerSetInstallResult\"},{\"id\":4184757726,\"method\":\"messages.uninstallStickerSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":3873403768,\"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\":1468322785,\"method\":\"messages.getMessagesViews\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"},{\"name\":\"increment\",\"type\":\"Bool\"}],\"type\":\"messages.MessageViews\"},{\"id\":2850463534,\"method\":\"messages.editChatAdmin\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"is_admin\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":363051235,\"method\":\"messages.migrateChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"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\":\"order\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":864953444,\"method\":\"messages.getDocumentByHash\",\"params\":[{\"name\":\"sha256\",\"type\":\"bytes\"},{\"name\":\"size\",\"type\":\"int\"},{\"name\":\"mime_type\",\"type\":\"string\"}],\"type\":\"Document\"},{\"id\":2210348370,\"method\":\"messages.getSavedGifs\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"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\":3948847622,\"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<InputBotInlineResult>\"},{\"name\":\"cache_time\",\"type\":\"int\"},{\"name\":\"next_offset\",\"type\":\"flags.2?string\"},{\"name\":\"switch_pm\",\"type\":\"flags.3?InlineBotSwitchPM\"}],\"type\":\"Bool\"},{\"id\":570955184,\"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\":\"random_id\",\"type\":\"long\"},{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"id\",\"type\":\"string\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":4255550774,\"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<MessageEntity>\"},{\"name\":\"schedule_date\",\"type\":\"flags.15?int\"}],\"type\":\"Updates\"},{\"id\":2203418042,\"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<MessageEntity>\"}],\"type\":\"Bool\"},{\"id\":2470627847,\"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\":3582923530,\"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\":3832593661,\"method\":\"messages.getPeerDialogs\",\"params\":[{\"name\":\"peers\",\"type\":\"Vector<InputDialogPeer>\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":3157909835,\"method\":\"messages.saveDraft\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"no_webpage\",\"type\":\"flags.1?true\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"entities\",\"type\":\"flags.3?Vector<MessageEntity>\"}],\"type\":\"Bool\"},{\"id\":1782549861,\"method\":\"messages.getAllDrafts\",\"params\":[],\"type\":\"Updates\"},{\"id\":766298703,\"method\":\"messages.getFeaturedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":1527873830,\"method\":\"messages.readFeaturedStickers\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<long>\"}],\"type\":\"Bool\"},{\"id\":1587647177,\"method\":\"messages.getRecentStickers\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"attached\",\"type\":\"flags.0?true\"},{\"name\":\"hash\",\"type\":\"int\"}],\"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\":2308530221,\"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\":\"offset_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ArchivedStickers\"},{\"id\":1706608543,\"method\":\"messages.getMaskStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.AllStickers\"},{\"id\":3428542412,\"method\":\"messages.getAttachedStickers\",\"params\":[{\"name\":\"media\",\"type\":\"InputStickeredMedia\"}],\"type\":\"Vector<StickerSetCovered>\"},{\"id\":2398678208,\"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\":3894568093,\"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\":218777796,\"method\":\"messages.getCommonChats\",\"params\":[{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"max_id\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":3953659888,\"method\":\"messages.getAllChats\",\"params\":[{\"name\":\"except_ids\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Chats\"},{\"id\":852135825,\"method\":\"messages.getWebPage\",\"params\":[{\"name\":\"url\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"WebPage\"},{\"id\":2805064279,\"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<InputDialogPeer>\"}],\"type\":\"Bool\"},{\"id\":3602468338,\"method\":\"messages.getPinnedDialogs\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"messages.PeerDialogs\"},{\"id\":3858133754,\"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<ShippingOption>\"}],\"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\":1369162417,\"method\":\"messages.uploadMedia\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"media\",\"type\":\"InputMedia\"}],\"type\":\"MessageMedia\"},{\"id\":3380473888,\"method\":\"messages.sendScreenshotNotification\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"int\"},{\"name\":\"random_id\",\"type\":\"long\"}],\"type\":\"Updates\"},{\"id\":567151374,\"method\":\"messages.getFavedStickers\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FavedStickers\"},{\"id\":3120547163,\"method\":\"messages.faveSticker\",\"params\":[{\"name\":\"id\",\"type\":\"InputDocument\"},{\"name\":\"unfave\",\"type\":\"Bool\"}],\"type\":\"Bool\"},{\"id\":1180140658,\"method\":\"messages.getUnreadMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"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\":251759059,\"method\":\"messages.readMentions\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":3150207753,\"method\":\"messages.getRecentLocations\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":3422621899,\"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\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"reply_to_msg_id\",\"type\":\"flags.0?int\"},{\"name\":\"multi_media\",\"type\":\"Vector<InputSingleMedia>\"},{\"name\":\"schedule_date\",\"type\":\"flags.10?int\"}],\"type\":\"Updates\"},{\"id\":1347929239,\"method\":\"messages.uploadEncryptedFile\",\"params\":[{\"name\":\"peer\",\"type\":\"InputEncryptedChat\"},{\"name\":\"file\",\"type\":\"InputEncryptedFile\"}],\"type\":\"EncryptedFile\"},{\"id\":3266826379,\"method\":\"messages.searchStickerSets\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"exclude_featured\",\"type\":\"flags.0?true\"},{\"name\":\"q\",\"type\":\"string\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FoundStickerSets\"},{\"id\":486505992,\"method\":\"messages.getSplitRanges\",\"params\":[],\"type\":\"Vector<MessageRange>\"},{\"id\":3263617423,\"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<DialogPeer>\"},{\"id\":2119757468,\"method\":\"messages.clearAllDrafts\",\"params\":[],\"type\":\"Bool\"},{\"id\":3534419948,\"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\":283795844,\"method\":\"messages.sendVote\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"options\",\"type\":\"Vector<bytes>\"}],\"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\":2167155430,\"method\":\"messages.getStatsURL\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"params\",\"type\":\"string\"}],\"type\":\"StatsURL\"},{\"id\":3740665751,\"method\":\"messages.editChatAbout\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"about\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":2777049921,\"method\":\"messages.editChatDefaultBannedRights\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"banned_rights\",\"type\":\"ChatBannedRights\"}],\"type\":\"Updates\"},{\"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<string>\"}],\"type\":\"Vector<EmojiLanguage>\"},{\"id\":3585149990,\"method\":\"messages.getEmojiURL\",\"params\":[{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"EmojiURL\"},{\"id\":1932455680,\"method\":\"messages.getSearchCounters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"filters\",\"type\":\"Vector<MessagesFilter>\"}],\"type\":\"Vector<messages.SearchCounter>\"},{\"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\":2972479781,\"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\":3804391515,\"method\":\"messages.getScheduledHistory\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":3183150180,\"method\":\"messages.getScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.Messages\"},{\"id\":3174597898,\"method\":\"messages.sendScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Updates\"},{\"id\":1504586518,\"method\":\"messages.deleteScheduledMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Updates\"},{\"id\":3094231054,\"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\":3037016042,\"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<InputStickerSet>\"}],\"type\":\"Bool\"},{\"id\":4053719405,\"method\":\"messages.getDialogFilters\",\"params\":[],\"type\":\"Vector<DialogFilter>\"},{\"id\":2728186924,\"method\":\"messages.getSuggestedDialogFilters\",\"params\":[],\"type\":\"Vector<DialogFilterSuggested>\"},{\"id\":450142282,\"method\":\"messages.updateDialogFilter\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"id\",\"type\":\"int\"},{\"name\":\"filter\",\"type\":\"flags.0?DialogFilter\"}],\"type\":\"Bool\"},{\"id\":3311649252,\"method\":\"messages.updateDialogFiltersOrder\",\"params\":[{\"name\":\"order\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":1608974939,\"method\":\"messages.getOldFeaturedStickers\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"messages.FeaturedStickers\"},{\"id\":615875002,\"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\":\"int\"}],\"type\":\"messages.Messages\"},{\"id\":1147761405,\"method\":\"messages.getDiscussionMessage\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"}],\"type\":\"messages.DiscussionMessage\"},{\"id\":4147227124,\"method\":\"messages.readDiscussion\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"read_max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":4029004939,\"method\":\"messages.unpinAllMessages\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":2200206609,\"method\":\"messages.deleteChat\",\"params\":[{\"name\":\"chat_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":4190888969,\"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\":3023958852,\"method\":\"messages.startHistoryImport\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"import_id\",\"type\":\"long\"}],\"type\":\"Bool\"},{\"id\":2729812982,\"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\":48562110,\"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\"}],\"type\":\"messages.ExportedChatInvite\"},{\"id\":1452833749,\"method\":\"messages.deleteRevokedExportedChatInvites\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"admin_id\",\"type\":\"InputUser\"}],\"type\":\"Bool\"},{\"id\":3563365419,\"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\":654013065,\"method\":\"messages.getChatInviteImporters\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"link\",\"type\":\"string\"},{\"name\":\"offset_date\",\"type\":\"int\"},{\"name\":\"offset_user\",\"type\":\"InputUser\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"messages.ChatInviteImporters\"},{\"id\":3087949796,\"method\":\"messages.setHistoryTTL\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"period\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":1573261059,\"method\":\"messages.checkHistoryImportPeer\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"messages.CheckedHistoryImportPeer\"},{\"id\":3990128682,\"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\":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\":1926525996,\"method\":\"photos.updateProfilePhoto\",\"params\":[{\"name\":\"id\",\"type\":\"InputPhoto\"}],\"type\":\"photos.Photo\"},{\"id\":2314407785,\"method\":\"photos.uploadProfilePhoto\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"file\",\"type\":\"flags.0?InputFile\"},{\"name\":\"video\",\"type\":\"flags.1?InputFile\"},{\"name\":\"video_start_ts\",\"type\":\"flags.2?double\"}],\"type\":\"photos.Photo\"},{\"id\":2278522671,\"method\":\"photos.deletePhotos\",\"params\":[{\"name\":\"id\",\"type\":\"Vector<InputPhoto>\"}],\"type\":\"Vector<long>\"},{\"id\":2446144168,\"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\":3003426337,\"method\":\"upload.saveFilePart\",\"params\":[{\"name\":\"file_id\",\"type\":\"long\"},{\"name\":\"file_part\",\"type\":\"int\"},{\"name\":\"bytes\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":2975505148,\"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\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.File\"},{\"id\":3732629309,\"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\":619086221,\"method\":\"upload.getWebFile\",\"params\":[{\"name\":\"location\",\"type\":\"InputWebFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.WebFile\"},{\"id\":536919235,\"method\":\"upload.getCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"upload.CdnFile\"},{\"id\":2603046056,\"method\":\"upload.reuploadCdnFile\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"request_token\",\"type\":\"bytes\"}],\"type\":\"Vector<FileHash>\"},{\"id\":1302676017,\"method\":\"upload.getCdnFileHashes\",\"params\":[{\"name\":\"file_token\",\"type\":\"bytes\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector<FileHash>\"},{\"id\":3338819889,\"method\":\"upload.getFileHashes\",\"params\":[{\"name\":\"location\",\"type\":\"InputFileLocation\"},{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"Vector<FileHash>\"},{\"id\":3304659051,\"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\":2631862477,\"method\":\"help.getSupport\",\"params\":[],\"type\":\"help.Support\"},{\"id\":2417028975,\"method\":\"help.getAppChangelog\",\"params\":[{\"name\":\"prev_app_version\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":3961704397,\"method\":\"help.setBotUpdatesStatus\",\"params\":[{\"name\":\"pending_updates_count\",\"type\":\"int\"},{\"name\":\"message\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":1375900482,\"method\":\"help.getCdnConfig\",\"params\":[],\"type\":\"CdnConfig\"},{\"id\":1036054804,\"method\":\"help.getRecentMeUrls\",\"params\":[{\"name\":\"referer\",\"type\":\"string\"}],\"type\":\"help.RecentMeUrls\"},{\"id\":749019089,\"method\":\"help.getTermsOfServiceUpdate\",\"params\":[],\"type\":\"help.TermsOfServiceUpdate\"},{\"id\":4000511898,\"method\":\"help.acceptTermsOfService\",\"params\":[{\"name\":\"id\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":1072547679,\"method\":\"help.getDeepLinkInfo\",\"params\":[{\"name\":\"path\",\"type\":\"string\"}],\"type\":\"help.DeepLinkInfo\"},{\"id\":2559656208,\"method\":\"help.getAppConfig\",\"params\":[],\"type\":\"JSONValue\"},{\"id\":1862465352,\"method\":\"help.saveAppLog\",\"params\":[{\"name\":\"events\",\"type\":\"Vector<InputAppEvent>\"}],\"type\":\"Bool\"},{\"id\":3328290056,\"method\":\"help.getPassportConfig\",\"params\":[{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"help.PassportConfig\"},{\"id\":3546343212,\"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<MessageEntity>\"}],\"type\":\"help.UserInfo\"},{\"id\":3231151137,\"method\":\"help.getPromoData\",\"params\":[],\"type\":\"help.PromoData\"},{\"id\":505748629,\"method\":\"help.hidePromoData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"Bool\"},{\"id\":4111317665,\"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\":3423619383,\"method\":\"channels.readHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":2227305806,\"method\":\"channels.deleteMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"messages.AffectedMessages\"},{\"id\":3507345179,\"method\":\"channels.deleteUserHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"}],\"type\":\"messages.AffectedHistory\"},{\"id\":4261967888,\"method\":\"channels.reportSpam\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":2911672867,\"method\":\"channels.getMessages\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<InputMessage>\"}],\"type\":\"messages.Messages\"},{\"id\":306054633,\"method\":\"channels.getParticipants\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"filter\",\"type\":\"ChannelParticipantsFilter\"},{\"name\":\"offset\",\"type\":\"int\"},{\"name\":\"limit\",\"type\":\"int\"},{\"name\":\"hash\",\"type\":\"int\"}],\"type\":\"channels.ChannelParticipants\"},{\"id\":2695589062,\"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<InputChannel>\"}],\"type\":\"messages.Chats\"},{\"id\":141781513,\"method\":\"channels.getFullChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"messages.ChatFull\"},{\"id\":1029681423,\"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\":\"title\",\"type\":\"string\"},{\"name\":\"about\",\"type\":\"string\"},{\"name\":\"geo_point\",\"type\":\"flags.2?InputGeoPoint\"},{\"name\":\"address\",\"type\":\"flags.2?string\"}],\"type\":\"Updates\"},{\"id\":3543959810,\"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\":4046346185,\"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\":4164332181,\"method\":\"channels.leaveChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":429865580,\"method\":\"channels.inviteToChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"users\",\"type\":\"Vector<InputUser>\"}],\"type\":\"Updates\"},{\"id\":3222347747,\"method\":\"channels.deleteChannel\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":3862932971,\"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\":4172297903,\"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\":2531708289,\"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<InputUser>\"},{\"name\":\"max_id\",\"type\":\"long\"},{\"name\":\"min_id\",\"type\":\"long\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"channels.AdminLogResults\"},{\"id\":3935085817,\"method\":\"channels.setStickers\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"}],\"type\":\"Bool\"},{\"id\":3937786936,\"method\":\"channels.readMessageContents\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"id\",\"type\":\"Vector<int>\"}],\"type\":\"Bool\"},{\"id\":2939592002,\"method\":\"channels.deleteHistory\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"max_id\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":3938171212,\"method\":\"channels.togglePreHistoryHidden\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"enabled\",\"type\":\"Bool\"}],\"type\":\"Updates\"},{\"id\":2202135744,\"method\":\"channels.getLeftChannels\",\"params\":[{\"name\":\"offset\",\"type\":\"int\"}],\"type\":\"messages.Chats\"},{\"id\":4124758904,\"method\":\"channels.getGroupsForDiscussion\",\"params\":[],\"type\":\"messages.Chats\"},{\"id\":1079520178,\"method\":\"channels.setDiscussionGroup\",\"params\":[{\"name\":\"broadcast\",\"type\":\"InputChannel\"},{\"name\":\"group\",\"type\":\"InputChannel\"}],\"type\":\"Bool\"},{\"id\":2402864415,\"method\":\"channels.editCreator\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"user_id\",\"type\":\"InputUser\"},{\"name\":\"password\",\"type\":\"InputCheckPasswordSRP\"}],\"type\":\"Updates\"},{\"id\":1491484525,\"method\":\"channels.editLocation\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"geo_point\",\"type\":\"InputGeoPoint\"},{\"name\":\"address\",\"type\":\"string\"}],\"type\":\"Bool\"},{\"id\":3990134512,\"method\":\"channels.toggleSlowMode\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"},{\"name\":\"seconds\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":300429806,\"method\":\"channels.getInactiveChannels\",\"params\":[],\"type\":\"messages.InactiveChats\"},{\"id\":187239529,\"method\":\"channels.convertToGigagroup\",\"params\":[{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"Updates\"},{\"id\":2854709741,\"method\":\"bots.sendCustomRequest\",\"params\":[{\"name\":\"custom_method\",\"type\":\"string\"},{\"name\":\"params\",\"type\":\"DataJSON\"}],\"type\":\"DataJSON\"},{\"id\":3860938573,\"method\":\"bots.answerWebhookJSONQuery\",\"params\":[{\"name\":\"query_id\",\"type\":\"long\"},{\"name\":\"data\",\"type\":\"DataJSON\"}],\"type\":\"Bool\"},{\"id\":2153596662,\"method\":\"bots.setBotCommands\",\"params\":[{\"name\":\"commands\",\"type\":\"Vector<BotCommand>\"}],\"type\":\"Bool\"},{\"id\":2318613645,\"method\":\"payments.getPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"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\":3675271536,\"method\":\"payments.validateRequestedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"save\",\"type\":\"flags.0?true\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"name\":\"info\",\"type\":\"PaymentRequestedInfo\"}],\"type\":\"payments.ValidatedRequestedInfo\"},{\"id\":818134173,\"method\":\"payments.sendPaymentForm\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"form_id\",\"type\":\"long\"},{\"name\":\"peer\",\"type\":\"InputPeer\"},{\"name\":\"msg_id\",\"type\":\"int\"},{\"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\":578650699,\"method\":\"payments.getSavedInfo\",\"params\":[],\"type\":\"payments.SavedInfo\"},{\"id\":3627905217,\"method\":\"payments.clearSavedInfo\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"credentials\",\"type\":\"flags.0?true\"},{\"name\":\"info\",\"type\":\"flags.1?true\"}],\"type\":\"Bool\"},{\"id\":779736953,\"method\":\"payments.getBankCardData\",\"params\":[{\"name\":\"number\",\"type\":\"string\"}],\"type\":\"payments.BankCardData\"},{\"id\":4043532160,\"method\":\"stickers.createStickerSet\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"masks\",\"type\":\"flags.0?true\"},{\"name\":\"animated\",\"type\":\"flags.1?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<InputStickerSetItem>\"}],\"type\":\"messages.StickerSet\"},{\"id\":4151709521,\"method\":\"stickers.removeStickerFromSet\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"id\":4290172106,\"method\":\"stickers.changeStickerPosition\",\"params\":[{\"name\":\"sticker\",\"type\":\"InputDocument\"},{\"name\":\"position\",\"type\":\"int\"}],\"type\":\"messages.StickerSet\"},{\"id\":2253651646,\"method\":\"stickers.addStickerToSet\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"sticker\",\"type\":\"InputStickerSetItem\"}],\"type\":\"messages.StickerSet\"},{\"id\":2587250224,\"method\":\"stickers.setStickerSetThumb\",\"params\":[{\"name\":\"stickerset\",\"type\":\"InputStickerSet\"},{\"name\":\"thumb\",\"type\":\"InputDocument\"}],\"type\":\"messages.StickerSet\"},{\"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\":2999697856,\"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\":4286223235,\"method\":\"phone.sendSignalingData\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPhoneCall\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"type\":\"Bool\"},{\"id\":1221445336,\"method\":\"phone.createGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"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\":2972909435,\"method\":\"phone.joinGroupCall\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?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<InputUser>\"}],\"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\":209498135,\"method\":\"phone.getGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"}],\"type\":\"phone.GroupCall\"},{\"id\":3310934187,\"method\":\"phone.getGroupParticipants\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"ids\",\"type\":\"Vector<InputPeer>\"},{\"name\":\"sources\",\"type\":\"Vector<int>\"},{\"name\":\"offset\",\"type\":\"string\"},{\"name\":\"limit\",\"type\":\"int\"}],\"type\":\"phone.GroupParticipants\"},{\"id\":3075111914,\"method\":\"phone.checkGroupCall\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"source\",\"type\":\"int\"}],\"type\":\"Bool\"},{\"id\":3224004311,\"method\":\"phone.toggleGroupCallRecord\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"start\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"flags.1?string\"}],\"type\":\"Updates\"},{\"id\":3648383872,\"method\":\"phone.editGroupCallParticipant\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"muted\",\"type\":\"flags.0?true\"},{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"participant\",\"type\":\"InputPeer\"},{\"name\":\"volume\",\"type\":\"flags.1?int\"},{\"name\":\"raise_hand\",\"type\":\"flags.2?Bool\"}],\"type\":\"Updates\"},{\"id\":480685066,\"method\":\"phone.editGroupCallTitle\",\"params\":[{\"name\":\"call\",\"type\":\"InputGroupCall\"},{\"name\":\"title\",\"type\":\"string\"}],\"type\":\"Updates\"},{\"id\":4017889594,\"method\":\"phone.getGroupCallJoinAs\",\"params\":[{\"name\":\"peer\",\"type\":\"InputPeer\"}],\"type\":\"phone.JoinAsPeers\"},{\"id\":3869926527,\"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\":4075959050,\"method\":\"langpack.getLangPack\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackDifference\"},{\"id\":4025104387,\"method\":\"langpack.getStrings\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"},{\"name\":\"keys\",\"type\":\"Vector<string>\"}],\"type\":\"Vector<LangPackString>\"},{\"id\":3449309861,\"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<LangPackLanguage>\"},{\"id\":1784243458,\"method\":\"langpack.getLanguage\",\"params\":[{\"name\":\"lang_pack\",\"type\":\"string\"},{\"name\":\"lang_code\",\"type\":\"string\"}],\"type\":\"LangPackLanguage\"},{\"id\":1749536939,\"method\":\"folders.editPeerFolders\",\"params\":[{\"name\":\"folder_peers\",\"type\":\"Vector<InputFolderPeer>\"}],\"type\":\"Updates\"},{\"id\":472471681,\"method\":\"folders.deleteFolder\",\"params\":[{\"name\":\"folder_id\",\"type\":\"int\"}],\"type\":\"Updates\"},{\"id\":2873246746,\"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\":3705636359,\"method\":\"stats.getMegagroupStats\",\"params\":[{\"name\":\"flags\",\"type\":\"#\"},{\"name\":\"dark\",\"type\":\"flags.0?true\"},{\"name\":\"channel\",\"type\":\"InputChannel\"}],\"type\":\"stats.MegagroupStats\"},{\"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\":3068175349,\"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\"}]},\"layer\":128} as {\r\n MTProto: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n API: {\r\n constructors: MTProtoConstructor[],\r\n methods: MTProtoMethod[],\r\n constructorsIndex?: {[id: number]: number}\r\n },\r\n layer: number,\r\n};\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { bytesToHex } from '../../helpers/bytes';\r\nimport { isObject, longFromInts } from './bin_utils';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport { str2bigInt, dup, divide_, bigInt2str } from '../../vendor/leemon';\r\nimport Schema, { MTProtoConstructor } from './schema';\r\n\r\n \r\n// @ts-ignore\r\nimport { gzipUncompress } from '../crypto/crypto_utils';\r\n \r\n\r\nconst boolFalse = +Schema.API.constructors.find(c => c.predicate === 'boolFalse').id >>> 0;\r\nconst boolTrue = +Schema.API.constructors.find(c => c.predicate === 'boolTrue').id >>> 0;\r\nconst vector = +Schema.API.constructors.find(c => c.predicate === 'vector').id >>> 0;\r\nconst gzipPacked = +Schema.MTProto.constructors.find(c => c.predicate === 'gzip_packed').id >>> 0;\r\n\r\n//console.log('boolFalse', boolFalse === 0xbc799737);\r\n\r\nclass TLSerialization {\r\n public maxLength = 2048; // 2Kb\r\n public offset = 0; // in bytes\r\n public mtproto = false;\r\n private debug = false;//Modes.debug;\r\n\r\n public buffer: ArrayBuffer;\r\n public intView: Int32Array;\r\n public byteView: Uint8Array;\r\n\r\n constructor(options: Partial<{startMaxLength: number, mtproto: true}> = {}) {\r\n this.maxLength = options.startMaxLength || 2048; // 2Kb\r\n this.mtproto = options.mtproto || false;\r\n this.createBuffer();\r\n }\r\n\r\n public createBuffer() {\r\n this.buffer = new ArrayBuffer(this.maxLength);\r\n this.intView = new Int32Array(this.buffer);\r\n this.byteView = new Uint8Array(this.buffer);\r\n }\r\n\r\n public getArray() {\r\n const resultBuffer = new ArrayBuffer(this.offset);\r\n\r\n //let perf = performance.now();\r\n /* const resultUint8: any = new Uint8Array(resultBuffer);\r\n resultUint8.set(this.byteView.subarray(0, this.offset)); */\r\n //console.log('perf uint8', performance.now() - perf);\r\n\r\n //perf = performance.now();\r\n const resultInt32 = new Int32Array(resultBuffer);\r\n resultInt32.set(this.intView.subarray(0, this.offset / 4));\r\n //console.log('perf int32', performance.now() - perf);\r\n\r\n /* if(resultUint8.buffer.byteLength !== resultInt32.buffer.byteLength) {\r\n console.error(resultUint8, resultInt32);\r\n } */\r\n \r\n return resultInt32;\r\n }\r\n\r\n public getBuffer() {\r\n return this.getArray().buffer;\r\n }\r\n\r\n public getBytes(typed: true): Uint8Array;\r\n public getBytes(typed?: false): number[];\r\n public getBytes(typed?: boolean): number[] | Uint8Array {\r\n if(typed) {\r\n const resultBuffer = new ArrayBuffer(this.offset);\r\n const resultArray = new Uint8Array(resultBuffer);\r\n \r\n resultArray.set(this.byteView.subarray(0, this.offset));\r\n \r\n return resultArray;\r\n }\r\n \r\n const bytes: number[] = [];\r\n for(let i = 0; i < this.offset; i++) {\r\n bytes.push(this.byteView[i]);\r\n }\r\n return bytes;\r\n }\r\n\r\n public checkLength(needBytes: number) {\r\n if(this.offset + needBytes < this.maxLength) {\r\n return;\r\n }\r\n \r\n //console.log('Increase buffer start', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32));\r\n this.maxLength = Math.ceil(Math.max(this.maxLength * 2, this.offset + needBytes + 16) / 4) * 4;\r\n const previousBuffer = this.buffer;\r\n //const previousByteView = this.byteView;\r\n const previousArray = new Int32Array(previousBuffer);\r\n \r\n this.createBuffer();\r\n \r\n new Int32Array(this.buffer).set(previousArray);\r\n /* console.log('Increase buffer end', this.offset, needBytes, this.maxLength, this.byteView.slice(0, 32), \r\n bytesCmp(previousByteView, this.byteView.slice(0, previousByteView.length))); */\r\n }\r\n\r\n public writeInt(i: number, field: string) {\r\n this.debug && console.log('>>>', i.toString(16), i, field);\r\n \r\n const offset = this.offset / 4;\r\n this.checkLength(4);\r\n this.intView[offset] = i;\r\n this.offset += 4;\r\n\r\n return offset;\r\n }\r\n \r\n public storeInt(i: number, field?: string) {\r\n return this.writeInt(i, (field || '') + ':int');\r\n }\r\n \r\n public storeBool(i: boolean, field?: string) {\r\n if(i) {\r\n this.writeInt(boolTrue, (field || '') + ':bool');\r\n } else {\r\n this.writeInt(boolFalse, (field || '') + ':bool');\r\n }\r\n }\r\n \r\n public storeLongP(iHigh: number, iLow: number, field?: string) {\r\n this.writeInt(iLow, (field || '') + ':long[low]');\r\n this.writeInt(iHigh, (field || '') + ':long[high]');\r\n }\r\n\r\n public storeLong(sLong: Array<number> | string | number, field?: string) {\r\n if(Array.isArray(sLong)) {\r\n if(sLong.length === 2) {\r\n return this.storeLongP(sLong[0], sLong[1], field);\r\n } else {\r\n return this.storeIntBytes(sLong, 64, field);\r\n }\r\n }\r\n \r\n if(typeof sLong !== 'string') {\r\n sLong = sLong ? sLong.toString() : '0';\r\n }\r\n\r\n const R = 0x100000000;\r\n //const divRem = bigStringInt(sLong).divideAndRemainder(bigint(R));\r\n\r\n const a = str2bigInt(sLong, 10, 64);\r\n const q = dup(a);\r\n const r = dup(a);\r\n divide_(a, str2bigInt((R).toString(16), 16, 64), q, r);\r\n //divInt_(a, R);\r\n\r\n const high = +bigInt2str(q, 10);\r\n let low = +bigInt2str(r, 10);\r\n\r\n if(high < low) {\r\n low -= R; \r\n }\r\n\r\n //console.log('storeLong', sLong, divRem[0].intValue(), divRem[1].intValue(), high, low);\r\n \r\n //this.writeInt(divRem[1].intValue(), (field || '') + ':long[low]');\r\n //this.writeInt(divRem[0].intValue(), (field || '') + ':long[high]');\r\n this.writeInt(low, (field || '') + ':long[low]');\r\n this.writeInt(high, (field || '') + ':long[high]');\r\n }\r\n \r\n public storeDouble(f: any, field?: string) {\r\n const buffer = new ArrayBuffer(8);\r\n const intView = new Int32Array(buffer);\r\n const doubleView = new Float64Array(buffer);\r\n \r\n doubleView[0] = f;\r\n \r\n this.writeInt(intView[0], (field || '') + ':double[low]');\r\n this.writeInt(intView[1], (field || '') + ':double[high]');\r\n }\r\n \r\n public storeString(s: string, field?: string) {\r\n this.debug && console.log('>>>', s, (field || '') + ':string');\r\n \r\n if(s === undefined) {\r\n s = '';\r\n }\r\n const sUTF8 = unescape(encodeURIComponent(s));\r\n \r\n this.checkLength(sUTF8.length + 8);\r\n \r\n const len = sUTF8.length;\r\n if(len <= 253) {\r\n this.byteView[this.offset++] = len;\r\n } else {\r\n this.byteView[this.offset++] = 254;\r\n this.byteView[this.offset++] = len & 0xFF;\r\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\r\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\r\n }\r\n for(let i = 0; i < len; i++) {\r\n this.byteView[this.offset++] = sUTF8.charCodeAt(i);\r\n }\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.byteView[this.offset++] = 0;\r\n }\r\n }\r\n \r\n public storeBytes(bytes: ArrayBuffer | Uint8Array | number[], field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n } else if(bytes === undefined) {\r\n bytes = [];\r\n }\r\n this.debug && console.log('>>>', bytesToHex(bytes as number[]), (field || '') + ':bytes');\r\n \r\n // if uint8array were json.stringified, then will be: {'0': 123, '1': 123}\r\n const len = (bytes as ArrayBuffer).byteLength || (bytes as Uint8Array).length;\r\n this.checkLength(len + 8);\r\n if(len <= 253) {\r\n this.byteView[this.offset++] = len;\r\n } else {\r\n this.byteView[this.offset++] = 254;\r\n this.byteView[this.offset++] = len & 0xFF;\r\n this.byteView[this.offset++] = (len & 0xFF00) >> 8;\r\n this.byteView[this.offset++] = (len & 0xFF0000) >> 16;\r\n }\r\n \r\n this.byteView.set(bytes as Uint8Array, this.offset);\r\n this.offset += len;\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.byteView[this.offset++] = 0;\r\n }\r\n }\r\n \r\n public storeIntBytes(bytes: any, bits: any, field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n }\r\n\r\n const len = bytes.length;\r\n if((bits % 32) || (len * 8) !== bits) {\r\n const error = new Error('Invalid bits: ' + bits + ', ' + bytes.length);\r\n console.error(error, bytes, field);\r\n throw error;\r\n }\r\n \r\n this.debug && console.log('>>>', bytesToHex(bytes), (field || '') + ':int' + bits);\r\n this.checkLength(len);\r\n \r\n this.byteView.set(bytes, this.offset);\r\n this.offset += len;\r\n }\r\n \r\n public storeRawBytes(bytes: ArrayLike<number>, field?: string) {\r\n if(bytes instanceof ArrayBuffer) {\r\n bytes = new Uint8Array(bytes);\r\n }\r\n\r\n const len = bytes.length;\r\n \r\n this.debug && console.log('>>>', bytesToHex(bytes), (field || ''));\r\n this.checkLength(len);\r\n \r\n this.byteView.set(bytes, this.offset);\r\n this.offset += len;\r\n }\r\n \r\n public storeMethod(methodName: string, params: any) {\r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n const methodData = schema.methods.find(m => m.method === methodName);\r\n\r\n if(!methodData) {\r\n throw new Error('No method ' + methodName + ' found');\r\n }\r\n \r\n this.storeInt(methodData.id, methodName + '[id]');\r\n\r\n const pFlags = params.pFlags || params; // * support pFlags, though am not expecting it to be there\r\n const flagsOffsets: {[paramName: string]: number} = {};\r\n //console.log('storeMethod', len, methodData);\r\n for(const param of methodData.params) {\r\n let type = param.type;\r\n\r\n if(type.indexOf('?') !== -1) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n if(!(params[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n if(condType[1] === 'true' ? pFlags[param.name] : params[param.name] !== undefined) {\r\n //console.log('storeMethod autocompleting', methodName, param.name, params[param.name], type);\r\n params[fieldBit[0]] |= 1 << +fieldBit[1];\r\n } else {\r\n continue;\r\n }\r\n }\r\n \r\n //console.log('storeMethod', methodName, fieldBit, params[fieldBit[0]], params, param, condType, !!(params[fieldBit[0]] & (1 << +fieldBit[1])));\r\n type = condType[1];\r\n }\r\n \r\n //console.log('storeMethod', methodName, param.name, params[param.name], type);\r\n const result = this.storeObject(params[param.name], type, methodName + '[' + param.name + ']');\r\n\r\n if(type === '#') {\r\n params[param.name] = params[param.name] || 0;\r\n flagsOffsets[param.name] = result as number;\r\n }\r\n }\r\n\r\n for(let paramName in flagsOffsets) {\r\n this.intView[flagsOffsets[paramName]] = params[paramName];\r\n }\r\n\r\n return methodData.type;\r\n }\r\n \r\n public storeObject(obj: any, type: string, field?: string) {\r\n //console.log('storeObject', obj, type, field, this.offset, this.getBytes(true).hex);\r\n switch(type) {\r\n case '#':\r\n obj = obj || 0;\r\n case 'int':\r\n return this.storeInt(obj, field);\r\n case 'long':\r\n return this.storeLong(obj, field);\r\n case 'int128':\r\n return this.storeIntBytes(obj, 128, field);\r\n case 'int256':\r\n return this.storeIntBytes(obj, 256, field);\r\n case 'int512':\r\n return this.storeIntBytes(obj, 512, field);\r\n case 'string':\r\n return this.storeString(obj, field);\r\n case 'bytes':\r\n return this.storeBytes(obj, field);\r\n case 'double':\r\n return this.storeDouble(obj, field);\r\n case 'Bool':\r\n return this.storeBool(obj, field);\r\n case 'true':\r\n return\r\n }\r\n \r\n if(Array.isArray(obj)) {\r\n if(type.substr(0, 6) === 'Vector') {\r\n this.writeInt(vector, field + '[id]');\r\n } else if (type.substr(0, 6) !== 'vector') {\r\n throw new Error('Invalid vector type ' + type);\r\n }\r\n\r\n const itemType = type.substr(7, type.length - 8); // for \"Vector<itemType>\"\r\n this.writeInt(obj.length, field + '[count]');\r\n for(let i = 0; i < obj.length; i++) {\r\n this.storeObject(obj[i], itemType, field + '[' + i + ']');\r\n }\r\n\r\n return true;\r\n } else if (type.substr(0, 6).toLowerCase() === 'vector') {\r\n throw new Error('Invalid vector object');\r\n }\r\n \r\n if(!isObject(obj)) {\r\n throw new Error('Invalid object for type ' + type);\r\n }\r\n \r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n const predicate = obj['_'];\r\n let isBare = false;\r\n const constructorData: MTProtoConstructor = schema.constructors.find(c => c.predicate === predicate);\r\n \r\n if(isBare = (type.charAt(0) === '%')) {\r\n type = type.substr(1);\r\n }\r\n\r\n if(!constructorData) {\r\n throw new Error('No predicate ' + predicate + ' found');\r\n }\r\n \r\n if(predicate === type) {\r\n isBare = true;\r\n }\r\n \r\n if(!isBare) {\r\n this.writeInt(constructorData.id, field + '[' + predicate + '][id]');\r\n }\r\n\r\n const pFlags = obj.pFlags;\r\n const flagsOffsets: {[paramName: string]: number} = {};\r\n //console.log('storeObject', len, constructorData);\r\n for(const param of constructorData.params) {\r\n let type = param.type;\r\n\r\n //console.log('storeObject', param, type);\r\n if(type.indexOf('?') !== -1) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n //console.log('storeObject fieldBit', fieldBit, obj[fieldBit[0]]);\r\n\r\n if(!(obj[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n if(condType[1] === 'true' ? pFlags && pFlags[param.name] : obj[param.name] !== undefined) {\r\n //console.log('storeObject autocompleting', param.name, obj[param.name], type);\r\n obj[fieldBit[0]] |= 1 << +fieldBit[1];\r\n } else {\r\n continue;\r\n }\r\n }\r\n\r\n type = condType[1];\r\n }\r\n //console.log('storeObject', param, type);\r\n \r\n const result = this.storeObject(obj[param.name], type, field + '[' + predicate + '][' + param.name + ']');\r\n\r\n if(type === '#') {\r\n obj[param.name] = obj[param.name] || 0;\r\n flagsOffsets[param.name] = result as number;\r\n }\r\n }\r\n\r\n for(let paramName in flagsOffsets) {\r\n this.intView[flagsOffsets[paramName]] = obj[paramName];\r\n }\r\n \r\n return constructorData.type;\r\n }\r\n}\r\n\r\nclass TLDeserialization {\r\n public offset = 0; // in bytes\r\n public override: {[key: string]: (result: any, field: string) => void};\r\n\r\n public buffer: ArrayBuffer;\r\n //public intView: Uint32Array;\r\n public byteView: Uint8Array;\r\n\r\n // this.debug = \r\n public mtproto: boolean = false;\r\n private debug: boolean;\r\n\r\n constructor(buffer: ArrayBuffer | Uint8Array, options: Partial<{override: any, mtproto: true, debug: true}> = {}) {\r\n //buffer = addPadding(buffer, 4, true); // fix 21.01.2020 for wss\r\n if(buffer instanceof ArrayBuffer) {\r\n this.buffer = buffer;\r\n this.byteView = new Uint8Array(this.buffer);\r\n } else {\r\n this.buffer = buffer.buffer;\r\n this.byteView = buffer;\r\n }\r\n \r\n //console.log(\"TCL: TLDeserialization -> constructor -> buffer\", buffer, this.byteView, this.byteView.hex);\r\n /* this.buffer = buffer;\r\n //this.intView = new Uint32Array(this.buffer);\r\n this.byteView = new Uint8Array(this.buffer); */\r\n\r\n //console.log(this.intView);\r\n\r\n this.override = 'override' in options ? options.override : {};\r\n this.mtproto = 'mtproto' in options ? options.mtproto : false;\r\n this.debug = options.debug !== undefined ? options.debug : /* Modes.debug */false;\r\n }\r\n\r\n public readInt(field: string) {\r\n //if(this.offset >= this.intView.length * 4) {\r\n if((this.byteView.length - this.offset) < 4) {\r\n console.error(this.byteView, this.offset);\r\n throw new Error('Nothing to fetch: ' + field);\r\n }\r\n \r\n //var i = this.intView[this.offset / 4];\r\n const i = new Uint32Array(this.byteView.buffer.slice(this.offset, this.offset + 4))[0];\r\n \r\n this.debug/* || field.includes('[dialog][read_outbox_max_id]') */ \r\n && console.log('<<<', i.toString(16), i, field, \r\n this.byteView.slice(this.offset - 16, this.offset + 16), \r\n this.byteView.slice(this.offset - 16, this.offset + 16).hex);\r\n \r\n this.offset += 4;\r\n \r\n return i;\r\n }\r\n \r\n public fetchInt(field?: string) {\r\n return this.readInt((field || '') + ':int');\r\n }\r\n \r\n public fetchDouble(field?: string) {\r\n const buffer = new ArrayBuffer(8);\r\n const intView = new Int32Array(buffer);\r\n const doubleView = new Float64Array(buffer);\r\n \r\n intView[0] = this.readInt((field || '') + ':double[low]'),\r\n intView[1] = this.readInt((field || '') + ':double[high]');\r\n \r\n return doubleView[0];\r\n }\r\n \r\n public fetchLong(field?: string): string {\r\n const iLow = this.readInt((field || '') + ':long[low]');\r\n const iHigh = this.readInt((field || '') + ':long[high]');\r\n \r\n //const longDec = bigint(iHigh).shiftLeft(32).add(bigint(iLow)).toString();\r\n const longDec = longFromInts(iHigh, iLow);\r\n \r\n return longDec;\r\n }\r\n \r\n public fetchBool(field?: string): boolean {\r\n const i = this.readInt((field || '') + ':bool');\r\n if(i === boolTrue) {\r\n return true;\r\n } else if(i === boolFalse) {\r\n return false;\r\n }\r\n\r\n this.offset -= 4;\r\n return this.fetchObject('Object', field);\r\n }\r\n \r\n public fetchString(field?: string): string {\r\n let len = this.byteView[this.offset++];\r\n \r\n if(len === 254) {\r\n len = this.byteView[this.offset++] |\r\n (this.byteView[this.offset++] << 8) |\r\n (this.byteView[this.offset++] << 16);\r\n }\r\n \r\n let sUTF8 = '';\r\n for(let i = 0; i < len; i++) {\r\n sUTF8 += String.fromCharCode(this.byteView[this.offset++]);\r\n }\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.offset++;\r\n }\r\n \r\n let s: string;\r\n try {\r\n s = decodeURIComponent(escape(sUTF8));\r\n } catch (e) {\r\n s = sUTF8;\r\n }\r\n \r\n this.debug && console.log('<<<', s, (field || '') + ':string');\r\n \r\n return s;\r\n }\r\n \r\n public fetchBytes(field?: string): Uint8Array {\r\n let len = this.byteView[this.offset++];\r\n \r\n if(len === 254) {\r\n len = this.byteView[this.offset++] |\r\n (this.byteView[this.offset++] << 8) |\r\n (this.byteView[this.offset++] << 16);\r\n }\r\n \r\n const bytes = this.byteView.subarray(this.offset, this.offset + len);\r\n this.offset += len;\r\n \r\n // Padding\r\n while(this.offset % 4) {\r\n this.offset++;\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':bytes');\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchIntBytes(bits: number, typed: true, field?: string): Uint8Array;\r\n public fetchIntBytes(bits: number, typed?: false, field?: string): number[];\r\n public fetchIntBytes(bits: number, typed?: boolean, field?: string) {\r\n if(bits % 32) {\r\n throw new Error('Invalid bits: ' + bits);\r\n }\r\n \r\n const len = bits / 8;\r\n if(typed) {\r\n const result = this.byteView.subarray(this.offset, this.offset + len);\r\n this.offset += len;\r\n return result;\r\n }\r\n \r\n const bytes: number[] = [];\r\n for(let i = 0; i < len; i++) {\r\n bytes.push(this.byteView[this.offset++]);\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || '') + ':int' + bits);\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchRawBytes(len: any, typed: true, field: string): Uint8Array;\r\n public fetchRawBytes(len: any, typed: false, field: string): number[];\r\n public fetchRawBytes(len: any, typed: boolean, field: string) {\r\n if(len === false) {\r\n len = this.readInt((field || '') + '_length');\r\n if(len > this.byteView.byteLength) {\r\n throw new Error('Invalid raw bytes length: ' + len + ', buffer len: ' + this.byteView.byteLength);\r\n }\r\n }\r\n \r\n if(typed) {\r\n const bytes = new Uint8Array(len);\r\n bytes.set(this.byteView.subarray(this.offset, this.offset + len));\r\n this.offset += len;\r\n return bytes;\r\n }\r\n \r\n const bytes: number[] = [];\r\n for(let i = 0; i < len; i++) {\r\n bytes.push(this.byteView[this.offset++]);\r\n }\r\n \r\n this.debug && console.log('<<<', bytesToHex(bytes), (field || ''));\r\n \r\n return bytes;\r\n }\r\n \r\n public fetchObject(type: any, field?: string): any {\r\n switch(type) {\r\n case '#':\r\n case 'int':\r\n return this.fetchInt(field);\r\n case 'long':\r\n return this.fetchLong(field);\r\n case 'int128':\r\n return this.fetchIntBytes(128, false, field);\r\n case 'int256':\r\n return this.fetchIntBytes(256, false, field);\r\n case 'int512':\r\n return this.fetchIntBytes(512, false, field);\r\n case 'string':\r\n return this.fetchString(field);\r\n case 'bytes':\r\n return this.fetchBytes(field);\r\n case 'double':\r\n return this.fetchDouble(field);\r\n case 'Bool':\r\n return this.fetchBool(field);\r\n case 'true':\r\n return true;\r\n }\r\n \r\n field = field || type || 'Object';\r\n \r\n if(type.substr(0, 6) === 'Vector' || type.substr(0, 6) === 'vector') {\r\n if(type.charAt(0) === 'V') {\r\n const constructor = this.readInt(field + '[id]');\r\n const constructorCmp = constructor;\r\n \r\n if(constructorCmp === gzipPacked) { // Gzip packed\r\n const compressed = this.fetchBytes(field + '[packed_string]');\r\n const uncompressed = gzipUncompress(compressed);\r\n const newDeserializer = new TLDeserialization(uncompressed);\r\n \r\n return newDeserializer.fetchObject(type, field);\r\n }\r\n\r\n if(constructorCmp !== vector) {\r\n throw new Error('Invalid vector constructor ' + constructor);\r\n }\r\n }\r\n\r\n const len = this.readInt(field + '[count]');\r\n const result: any = [];\r\n if(len > 0) {\r\n const itemType = type.substr(7, type.length - 8); // for \"Vector<itemType>\"\r\n for(let i = 0; i < len; i++) {\r\n result.push(this.fetchObject(itemType, field + '[' + i + ']'));\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n \r\n const schema = this.mtproto ? Schema.MTProto : Schema.API;\r\n let constructorData: MTProtoConstructor = null;\r\n let fallback = false;\r\n \r\n if(type.charAt(0) === '%') {\r\n const checkType = type.substr(1);\r\n constructorData = schema.constructors.find(c => c.type === checkType);\r\n if(!constructorData) {\r\n throw new Error('Constructor not found for type: ' + type);\r\n }\r\n } else if(type.charAt(0) >= 97 && type.charAt(0) <= 122) {\r\n constructorData = schema.constructors.find(c => c.predicate === type);\r\n if(!constructorData) {\r\n throw new Error('Constructor not found for predicate: ' + type);\r\n }\r\n } else {\r\n const constructor = this.readInt(field + '[id]');\r\n const constructorCmp = constructor;\r\n \r\n if(constructorCmp === gzipPacked) { // Gzip packed\r\n const compressed = this.fetchBytes(field + '[packed_string]');\r\n const uncompressed = gzipUncompress(compressed);\r\n const newDeserializer = new TLDeserialization(uncompressed);\r\n \r\n return newDeserializer.fetchObject(type, field);\r\n }\r\n \r\n let index = schema.constructorsIndex;\r\n if(!index) {\r\n schema.constructorsIndex = index = {};\r\n for(let i = 0, len = schema.constructors.length; i < len; i++) {\r\n index[schema.constructors[i].id] = i;\r\n }\r\n }\r\n\r\n const i = index[constructorCmp];\r\n if(i) {\r\n constructorData = schema.constructors[i];\r\n }\r\n \r\n if(!constructorData && this.mtproto) {\r\n const schemaFallback = Schema.API;\r\n for(let i = 0, len = schemaFallback.constructors.length; i < len; i++) {\r\n if(+schemaFallback.constructors[i].id === constructorCmp) {\r\n constructorData = schemaFallback.constructors[i];\r\n \r\n delete this.mtproto;\r\n fallback = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if(!constructorData) {\r\n console.error('Constructor not found:', constructor);\r\n \r\n let int1: number, int2: number;\r\n try {\r\n int1 = this.fetchInt(field);\r\n int2 = this.fetchInt(field);\r\n } catch(err) {\r\n\r\n }\r\n\r\n throw new Error('Constructor not found: ' + constructor + ' ' + int1 + ' ' + int2 + ' ' + field);\r\n }\r\n }\r\n \r\n const predicate = constructorData.predicate;\r\n \r\n const result: any = {'_': predicate};\r\n const overrideKey = (this.mtproto ? 'mt_' : '') + predicate;\r\n if(this.override[overrideKey]) {\r\n this.override[overrideKey](result, field + '[' + predicate + ']');\r\n } else {\r\n for(let i = 0, len = constructorData.params.length; i < len; i++) {\r\n const param = constructorData.params[i];\r\n let type = param.type;\r\n\r\n if(type === '#' && result.pFlags === undefined) {\r\n result.pFlags = {};\r\n }\r\n\r\n const isCond = (type.indexOf('?') !== -1);\r\n if(isCond) {\r\n const condType = type.split('?');\r\n const fieldBit = condType[0].split('.');\r\n\r\n if(!(result[fieldBit[0]] & (1 << +fieldBit[1]))) {\r\n //console.log('fetchObject bad', constructorData, result[fieldBit[0]], fieldBit);\r\n continue;\r\n }\r\n\r\n //console.log('fetchObject good', constructorData, result[fieldBit[0]], fieldBit);\r\n\r\n type = condType[1];\r\n }\r\n \r\n const value = this.fetchObject(type, field + '[' + predicate + '][' + param.name + ']');\r\n \r\n if(isCond && type === 'true') {\r\n result.pFlags[param.name] = value;\r\n } else {\r\n /* if(param.name === 'read_outbox_max_id') {\r\n console.log(result, param.name, value, field + '[' + predicate + '][' + param.name + ']');\r\n } */\r\n \r\n result[param.name] = value;\r\n }\r\n }\r\n }\r\n \r\n if(fallback) {\r\n this.mtproto = true;\r\n }\r\n \r\n return result;\r\n }\r\n \r\n public getOffset() {\r\n return this.offset;\r\n }\r\n \r\n public fetchEnd() {\r\n if(this.offset !== this.byteView.length) {\r\n throw new Error('Fetch end with non-empty buffer');\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nMOUNT_CLASS_TO.TLDeserialization = TLDeserialization;\r\nMOUNT_CLASS_TO.TLSerialization = TLSerialization;\r\nexport { TLDeserialization, TLSerialization };\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport sessionStorage from '../sessionStorage';\r\nimport { longFromInts } from './bin_utils';\r\nimport { nextRandomInt } from '../../helpers/random';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\n\r\n/*\r\nlet lol: any = {};\r\nfor(var i = 0; i < 100; i++) {\r\n timeManager.generateId();\r\n}\r\n*/\r\n\r\nexport class TimeManager {\r\n private lastMessageId = [0, 0];\r\n private timeOffset = 0;\r\n\r\n constructor() {\r\n sessionStorage.get('server_time_offset').then((to) => {\r\n if(to) {\r\n this.timeOffset = to;\r\n }\r\n });\r\n }\r\n\r\n public generateId(): string {\r\n const timeTicks = Date.now(),\r\n timeSec = Math.floor(timeTicks / 1000) + this.timeOffset,\r\n timeMSec = timeTicks % 1000,\r\n random = nextRandomInt(0xFFFF);\r\n\r\n let messageId = [timeSec, (timeMSec << 21) | (random << 3) | 4];\r\n if(this.lastMessageId[0] > messageId[0] ||\r\n this.lastMessageId[0] === messageId[0] && this.lastMessageId[1] >= messageId[1]) {\r\n messageId = [this.lastMessageId[0], this.lastMessageId[1] + 4];\r\n }\r\n\r\n this.lastMessageId = messageId;\r\n\r\n const ret = longFromInts(messageId[0], messageId[1]);\r\n\r\n /* if(lol[ret]) {\r\n console.error('[TimeManager]: Generated SAME msg id', messageId, this.timeOffset, ret);\r\n }\r\n lol[ret] = true;\r\n\r\n console.log('[TimeManager]: Generated msg id', messageId, this.timeOffset, ret); */\r\n\r\n return ret\r\n }\r\n\r\n public applyServerTime(serverTime: number, localTime?: number) {\r\n localTime = (localTime || Date.now()) / 1000 | 0;\r\n const newTimeOffset = serverTime - localTime;\r\n const changed = Math.abs(this.timeOffset - newTimeOffset) > 10;\r\n sessionStorage.set({\r\n server_time_offset: newTimeOffset\r\n });\r\n\r\n this.lastMessageId = [0, 0];\r\n this.timeOffset = newTimeOffset;\r\n \r\n //console.log('[TimeManager]: Apply server time', serverTime, localTime, newTimeOffset, changed);\r\n\r\n return changed;\r\n }\r\n}\r\n\r\nconst timeManager = new TimeManager();\r\nMOUNT_CLASS_TO.timeManager = timeManager;\r\nexport default timeManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst App = {\r\n id: 1025907,\r\n hash: '452b0359b988148995f22ff0f4229750',\r\n version: '0.5.6',\r\n langPackVersion: '0.2.1',\r\n langPack: 'macos',\r\n langPackCode: 'en',\r\n domains: [] as string[],\r\n baseDcId: 2,\r\n isMainDomain: location.hostname === 'web.telegram.org',\r\n suffix: 'K'\r\n};\r\n\r\nif(App.isMainDomain) { // use Webogram credentials then\r\n App.id = 2496;\r\n App.hash = '8da85b0d5bfe62527e5b244c209159c3';\r\n}\r\n\r\nexport default App;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport {isObject, sortLongsArray} from './bin_utils';\r\nimport {TLDeserialization, TLSerialization} from './tl_utils';\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport sessionStorage from '../sessionStorage';\r\nimport Schema from './schema';\r\nimport timeManager from './timeManager';\r\nimport NetworkerFactory from './networkerFactory';\r\nimport { logger, LogTypes } from '../logger';\r\nimport { InvokeApiOptions } from '../../types';\r\nimport { longToBytes } from '../crypto/crypto_utils';\r\nimport MTTransport from './transports/transport';\r\nimport { convertToUint8Array, bufferConcat, bytesCmp, bytesToHex } from '../../helpers/bytes';\r\nimport { nextRandomInt } from '../../helpers/random';\r\nimport App from '../../config/app';\r\nimport DEBUG from '../../config/debug';\r\nimport Modes from '../../config/modes';\r\n\r\n \r\n \r\n \r\n\r\nimport type TcpObfuscated from './transports/tcpObfuscated';\r\nimport { bigInt2str, cmp, rightShift_, str2bigInt } from '../../vendor/leemon';\r\nimport { forEachReverse } from '../../helpers/array';\r\n\r\n//console.error('networker included!', new Error().stack);\r\n\r\nexport type MTMessageOptions = InvokeApiOptions & Partial<{\r\n noResponse: true, // http_wait\r\n longPoll: true,\r\n \r\n notContentRelated: true, // ACK\r\n noSchedule: true,\r\n messageId: string,\r\n}>;\r\n\r\nexport type MTMessage = InvokeApiOptions & MTMessageOptions & {\r\n msg_id: string,\r\n seq_no: number,\r\n body?: Uint8Array | number[],\r\n isAPI?: boolean,\r\n // only these four are important\r\n\r\n acked?: boolean,\r\n\r\n deferred?: {\r\n resolve: any,\r\n reject: any\r\n },\r\n\r\n container?: boolean,\r\n inner?: string[],\r\n\r\n // below - options\r\n\r\n notContentRelated?: true,\r\n noSchedule?: true,\r\n\r\n resultType?: string,\r\n\r\n longPoll?: true,\r\n noResponse?: true, // only with http (http_wait for longPoll)\r\n};\r\n\r\nconst CONNECTION_TIMEOUT = 5000;\r\nlet invokeAfterMsgConstructor: number;\r\n\r\nexport default class MTPNetworker {\r\n private authKeyUint8: Uint8Array;\r\n\r\n private isFileNetworker: boolean;\r\n private isFileUpload: boolean;\r\n private isFileDownload: boolean;\r\n\r\n private lastServerMessages: Array<string> = [];\r\n\r\n private sentMessages: {\r\n [msgId: string]: MTMessage\r\n } = {};\r\n\r\n private pendingMessages: {[msgId: string]: number} = {};\r\n private pendingAcks: Array<string> = [];\r\n private pendingResends: Array<string> = [];\r\n private connectionInited = false;\r\n\r\n private nextReqTimeout: number;\r\n private nextReq: number = 0;\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n private seqNo: number = 0;\r\n private prevSessionId: Uint8Array;\r\n private sessionId: Uint8Array;\r\n private serverSalt: Uint8Array;\r\n\r\n private lastResendReq: {\r\n req_msg_id: string,\r\n resend_msg_ids: Array<string>\r\n } | null = null;\r\n\r\n private name: string;\r\n private log: ReturnType<typeof logger>;\r\n \r\n public isOnline = false;\r\n private lastResponseTime = 0;\r\n\r\n private debug = DEBUG /* && false */ || Modes.debug;\r\n\r\n //private disconnectDelay: number;\r\n //private pingPromise: CancellablePromise<any>;\r\n //public onConnectionStatusChange: (online: boolean) => void;\r\n\r\n //private debugRequests: Array<{before: Uint8Array, after: Uint8Array}> = [];\r\n\r\n constructor(public dcId: number, private authKey: number[], private authKeyId: Uint8Array,\r\n serverSalt: number[], private transport: MTTransport, options: InvokeApiOptions = {}) {\r\n this.authKeyUint8 = convertToUint8Array(this.authKey);\r\n this.serverSalt = convertToUint8Array(serverSalt);\r\n\r\n this.isFileUpload = !!options.fileUpload;\r\n this.isFileDownload = !!options.fileDownload;\r\n this.isFileNetworker = this.isFileUpload || this.isFileDownload;\r\n\r\n const suffix = this.isFileUpload ? '-U' : this.isFileDownload ? '-D' : '';\r\n this.name = 'NET-' + dcId + suffix;\r\n //this.log = logger(this.name, this.upload && this.dcId === 2 ? LogLevels.debug | LogLevels.warn | LogLevels.log | LogLevels.error : LogLevels.error);\r\n this.log = logger(this.name, LogTypes.Log | /* LogTypes.Debug | */LogTypes.Error | LogTypes.Warn);\r\n this.log('constructor'/* , this.authKey, this.authKeyID, this.serverSalt */);\r\n\r\n // Test resend after bad_server_salt\r\n /* if(this.dcId === 2 && this.upload) {\r\n //timeManager.applyServerTime((Date.now() / 1000 - 86400) | 0);\r\n this.serverSalt[0] = 0;\r\n } */\r\n\r\n this.updateSession();\r\n\r\n // if(!NetworkerFactory.offlineInited) {\r\n // NetworkerFactory.offlineInited = true;\r\n // /* rootScope.offline = true\r\n // rootScope.offlineConnecting = true */\r\n // }\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n //} else {\r\n (this.transport as TcpObfuscated).networker = this;\r\n //}\r\n \r\n\r\n // * handle outcoming dead socket, server will close the connection\r\n // if((this.transport as TcpObfuscated).networker) {\r\n // this.disconnectDelay = /* (this.transport as TcpObfuscated).retryTimeout */75;\r\n // //setInterval(this.sendPingDelayDisconnect, (this.disconnectDelay - 5) * 1000);\r\n // this.sendPingDelayDisconnect();\r\n // }\r\n\r\n if((this.transport as TcpObfuscated).connected) {\r\n this.setConnectionStatus(true);\r\n }\r\n }\r\n\r\n private updateSession() {\r\n this.seqNo = 0;\r\n this.prevSessionId = this.sessionId;\r\n this.sessionId = new Uint8Array(8).randomize();\r\n }\r\n\r\n /* private clearContainers() {\r\n for(const messageId in this.sentMessages) {\r\n const message = this.sentMessages[messageId];\r\n if(message.container) {\r\n delete this.sentMessages[messageId];\r\n }\r\n }\r\n } */\r\n\r\n private updateSentMessage(sentMessageId: string) {\r\n const sentMessage = this.sentMessages[sentMessageId];\r\n if(!sentMessage) {\r\n return false;\r\n }\r\n\r\n if(sentMessage.container) {\r\n forEachReverse(sentMessage.inner, (innerSentMessageId, idx) => {\r\n const innerSentMessage = this.updateSentMessage(innerSentMessageId);\r\n if(!innerSentMessage) {\r\n sentMessage.inner.splice(idx, 1);\r\n } else {\r\n sentMessage.inner[idx] = innerSentMessage.msg_id;\r\n }\r\n });\r\n }\r\n \r\n sentMessage.msg_id = timeManager.generateId();\r\n sentMessage.seq_no = this.generateSeqNo(sentMessage.notContentRelated || sentMessage.container);\r\n\r\n /* if(DEBUG) {\r\n this.log('updateSentMessage', sentMessage.msg_id, sentMessageId);\r\n } */\r\n\r\n this.sentMessages[sentMessage.msg_id] = sentMessage;\r\n delete this.sentMessages[sentMessageId];\r\n \r\n return sentMessage;\r\n }\r\n\r\n private generateSeqNo(notContentRelated?: boolean) {\r\n let seqNo = this.seqNo * 2;\r\n \r\n if(!notContentRelated) {\r\n seqNo++;\r\n this.seqNo++;\r\n }\r\n \r\n return seqNo;\r\n }\r\n\r\n public wrapMtpCall(method: string, params: any, options: MTMessageOptions) {\r\n const serializer = new TLSerialization({mtproto: true});\r\n \r\n serializer.storeMethod(method, params);\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo();\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true)\r\n };\r\n \r\n if(Modes.debug) {\r\n this.log('MT call', method, params, messageId, seqNo);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n \r\n public wrapMtpMessage(object: any, options: MTMessageOptions) {\r\n const serializer = new TLSerialization({mtproto: true});\r\n serializer.storeObject(object, 'Object');\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo(options.notContentRelated);\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true)\r\n };\r\n \r\n if(Modes.debug) {\r\n this.log('MT message', object, messageId, seqNo);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n\r\n public wrapApiCall(method: string, params: any = {}, options: InvokeApiOptions = {}) {\r\n const serializer = new TLSerialization(options);\r\n \r\n if(!this.connectionInited) { // this will call once for each new session\r\n ///////this.log('Wrap api call !this.connectionInited');\r\n \r\n const invokeWithLayer = Schema.API.methods.find(m => m.method === 'invokeWithLayer');\r\n if(!invokeWithLayer) throw new Error('no invokeWithLayer!');\r\n serializer.storeInt(+invokeWithLayer.id >>> 0, 'invokeWithLayer');\r\n\r\n // @ts-ignore\r\n serializer.storeInt(Schema.layer, 'layer');\r\n \r\n const initConnection = Schema.API.methods.find(m => m.method === 'initConnection');\r\n if(!initConnection) throw new Error('no initConnection!');\r\n \r\n serializer.storeInt(+initConnection.id >>> 0, 'initConnection');\r\n serializer.storeInt(0x0, 'flags');\r\n serializer.storeInt(App.id, 'api_id');\r\n serializer.storeString(navigator.userAgent || 'Unknown UserAgent', 'device_model');\r\n serializer.storeString(navigator.platform || 'Unknown Platform', 'system_version');\r\n serializer.storeString(App.version + (App.isMainDomain ? ' ' + App.suffix : ''), 'app_version');\r\n serializer.storeString(navigator.language || 'en', 'system_lang_code');\r\n serializer.storeString(App.langPack, 'lang_pack');\r\n serializer.storeString(navigator.language || 'en', 'lang_code');\r\n //serializer.storeInt(0x0, 'proxy');\r\n /* serializer.storeMethod('initConnection', {\r\n 'flags': 0,\r\n 'api_id': App.id,\r\n 'device_model': navigator.userAgent || 'Unknown UserAgent',\r\n 'system_version': navigator.platform || 'Unknown Platform',\r\n 'app_version': App.version,\r\n 'system_lang_code': navigator.language || 'en',\r\n 'lang_pack': '',\r\n 'lang_code': navigator.language || 'en'\r\n }); */\r\n }\r\n \r\n if(options.afterMessageId) {\r\n if(invokeAfterMsgConstructor === undefined) {\r\n const m = Schema.API.methods.find(m => m.method === 'invokeAfterMsg');\r\n invokeAfterMsgConstructor = m ? +m.id >>> 0 : 0;\r\n }\r\n \r\n if(invokeAfterMsgConstructor) {\r\n //if(this.debug) {\r\n //this.log('Api call options.afterMessageId!');\r\n //}\r\n \r\n serializer.storeInt(invokeAfterMsgConstructor, 'invokeAfterMsg');\r\n serializer.storeLong(options.afterMessageId, 'msg_id');\r\n } else {\r\n this.log.error('no invokeAfterMsg!');\r\n }\r\n }\r\n \r\n options.resultType = serializer.storeMethod(method, params);\r\n\r\n /* if(method === 'account.updateNotifySettings') {\r\n this.log('api call body:', serializer.getBytes(true));\r\n } */\r\n \r\n const messageId = timeManager.generateId();\r\n const seqNo = this.generateSeqNo();\r\n const message = {\r\n msg_id: messageId,\r\n seq_no: seqNo,\r\n body: serializer.getBytes(true),\r\n isAPI: true\r\n };\r\n \r\n if(Modes.debug/* || true */) {\r\n this.log('Api call', method, message, params, options);\r\n } else if(this.debug) {\r\n this.log('Api call', method, params, options);\r\n }\r\n \r\n return this.pushMessage(message, options);\r\n }\r\n\r\n // private sendPingDelayDisconnect = () => {\r\n // if(this.pingPromise || true) return;\r\n\r\n // if(!this.isOnline) {\r\n // if((this.transport as TcpObfuscated).connected) {\r\n // (this.transport as TcpObfuscated).handleClose();\r\n // }\r\n\r\n // return;\r\n // }\r\n\r\n // this.log('sendPingDelayDisconnect', this.sentPingTimes);\r\n\r\n // /* if(this.tt) clearTimeout(this.tt);\r\n // this.tt = self.setTimeout(() => { \r\n // (this.transport as any).ws.close(1000);\r\n // this.tt = 0;\r\n // }, this.disconnectDelay * 1000); */\r\n // /* this.wrapMtpCall('ping_delay_disconnect', {\r\n // ping_id: randomLong(),\r\n // disconnect_delay: this.disconnectDelay\r\n // }, {\r\n // noResponse: true,\r\n // notContentRelated: true\r\n // }); */\r\n // const deferred = this.pingPromise = deferredPromise<void>();\r\n\r\n // const timeoutTime = this.disconnectDelay * 1000;\r\n\r\n // /* if(!this.sentPingTimes || true) {\r\n // ++this.sentPingTimes; */\r\n // const startTime = Date.now();\r\n // this.wrapMtpCall('ping', {\r\n // ping_id: randomLong()\r\n // }, {}).then(pong => {\r\n // const elapsedTime = Date.now() - startTime;\r\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\r\n\r\n // if(elapsedTime > timeoutTime) {\r\n // deferred.reject();\r\n // } else {\r\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\r\n // }\r\n // }, deferred.reject).finally(() => {\r\n // clearTimeout(rejectTimeout);\r\n // //--this.sentPingTimes;\r\n // });\r\n // //}\r\n\r\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\r\n\r\n // deferred.catch(() => {\r\n // (this.transport as Socket).handleClose();\r\n // });\r\n\r\n // deferred.finally(() => {\r\n // this.pingPromise = null;\r\n // this.sendPingDelayDisconnect();\r\n // });\r\n // };\r\n\r\n // private sendPingDelayDisconnect = () => {\r\n // if(this.pingPromise || true) return;\r\n\r\n // /* if(!this.isOnline) {\r\n // if((this.transport as TcpObfuscated).connected) {\r\n // (this.transport as TcpObfuscated).connection.close();\r\n // }\r\n\r\n // return;\r\n // } */\r\n\r\n // const deferred = this.pingPromise = deferredPromise<void>();\r\n\r\n // const timeoutTime = this.disconnectDelay * 1000;\r\n\r\n // const startTime = Date.now();\r\n // this.wrapMtpCall('ping_delay_disconnect', {\r\n // ping_id: randomLong(),\r\n // disconnect_delay: this.disconnectDelay\r\n // }, {}).then(pong => {\r\n // const elapsedTime = Date.now() - startTime;\r\n // this.log('sendPingDelayDisconnect: response', pong, elapsedTime > timeoutTime);\r\n\r\n // if(elapsedTime > timeoutTime) {\r\n // deferred.reject();\r\n // } else {\r\n // setTimeout(deferred.resolve, timeoutTime - elapsedTime);\r\n // }\r\n // }, deferred.reject).finally(() => {\r\n // clearTimeout(rejectTimeout);\r\n // //--this.sentPingTimes;\r\n // });\r\n\r\n // const rejectTimeout = self.setTimeout(deferred.reject, timeoutTime);\r\n\r\n // deferred.catch(() => {\r\n // this.log.error('sendPingDelayDisconnect: catch, closing connection if exists');\r\n // (this.transport as TcpObfuscated).connection.close();\r\n // });\r\n\r\n // deferred.finally(() => {\r\n // this.pingPromise = null;\r\n // this.sendPingDelayDisconnect();\r\n // });\r\n // };\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n // тут можно сделать таймаут и выводить дисконнект\r\n private pushMessage(message: {\r\n msg_id: string,\r\n seq_no: number,\r\n body: Uint8Array | number[],\r\n isAPI?: boolean\r\n }, options: MTMessageOptions) {\r\n const promise = new Promise((resolve, reject) => {\r\n this.sentMessages[message.msg_id] = Object.assign(message, options, options.notContentRelated \r\n ? undefined \r\n : {\r\n deferred: {resolve, reject}\r\n }\r\n );\r\n\r\n //this.log.error('Networker pushMessage:', this.sentMessages[message.msg_id]);\r\n\r\n this.pendingMessages[message.msg_id] = 0;\r\n \r\n if(!options.noSchedule) {\r\n this.scheduleRequest();\r\n }\r\n\r\n if(isObject(options)) {\r\n options.messageId = message.msg_id;\r\n }\r\n });\r\n\r\n if(!options.notContentRelated && !options.noResponse) {\r\n const timeout = setTimeout(() => {\r\n if(this.lastResponseTime && (Date.now() - this.lastResponseTime) < CONNECTION_TIMEOUT) {\r\n return;\r\n }\r\n\r\n this.log.error('timeout', message);\r\n this.setConnectionStatus(false);\r\n\r\n /* this.getEncryptedOutput(message).then(bytes => {\r\n this.log.error('timeout encrypted', bytes);\r\n }); */\r\n }, CONNECTION_TIMEOUT);\r\n \r\n promise.finally(() => {\r\n clearTimeout(timeout);\r\n this.setConnectionStatus(true);\r\n });\r\n }\r\n\r\n return promise;\r\n }\r\n\r\n public setConnectionStatus(online: boolean, timeout?: number) {\r\n const willChange = this.isOnline !== online;\r\n this.isOnline = online;\r\n\r\n if(willChange) {\r\n if(NetworkerFactory.onConnectionStatusChange) {\r\n NetworkerFactory.onConnectionStatusChange({\r\n _: 'networkerStatus', \r\n online: this.isOnline, \r\n dcId: this.dcId,\r\n name: this.name,\r\n isFileNetworker: this.isFileNetworker,\r\n isFileDownload: this.isFileDownload,\r\n isFileUpload: this.isFileUpload,\r\n timeout\r\n });\r\n }\r\n\r\n if(this.isOnline) {\r\n this.scheduleRequest();\r\n }\r\n\r\n // if((this.transport as TcpObfuscated).networker) {\r\n // this.sendPingDelayDisconnect();\r\n // }\r\n /* this.sentPingTimes = 0;\r\n this.sendPingDelayDisconnect(); */\r\n }\r\n /* if(this.onConnectionStatusChange) {\r\n this.onConnectionStatusChange(this.isOnline);\r\n } */\r\n }\r\n\r\n private pushResend(messageId: string, delay = 100) {\r\n const value = delay ? Date.now() + delay : 0;\r\n const sentMessage = this.sentMessages[messageId];\r\n if(sentMessage.container) {\r\n for(const innerMsgId of sentMessage.inner) {\r\n this.pendingMessages[innerMsgId] = value;\r\n }\r\n } else {\r\n this.pendingMessages[messageId] = value;\r\n }\r\n\r\n if(sentMessage.acked) {\r\n this.log.error('pushResend: acked message?', sentMessage);\r\n }\r\n \r\n if(this.debug) {\r\n this.log.debug('pushResend:', messageId, sentMessage, this.pendingMessages, delay);\r\n }\r\n \r\n this.scheduleRequest(delay);\r\n }\r\n\r\n // * correct, fully checked\r\n private async getMsgKey(dataWithPadding: ArrayBuffer, isOut: boolean) {\r\n const x = isOut ? 0 : 8;\r\n const msgKeyLargePlain = bufferConcat(this.authKeyUint8.subarray(88 + x, 88 + x + 32), dataWithPadding);\r\n\r\n const msgKeyLarge = await CryptoWorker.sha256Hash(msgKeyLargePlain);\r\n const msgKey = new Uint8Array(msgKeyLarge).subarray(8, 24);\r\n return msgKey;\r\n };\r\n\r\n // * correct, fully checked\r\n private getAesKeyIv(msgKey: Uint8Array | number[], isOut: boolean): Promise<[Uint8Array, Uint8Array]> {\r\n const x = isOut ? 0 : 8;\r\n const sha2aText = new Uint8Array(52);\r\n const sha2bText = new Uint8Array(52);\r\n const promises: Array<Promise<number[]>> = [];\r\n \r\n sha2aText.set(msgKey, 0);\r\n sha2aText.set(this.authKeyUint8.subarray(x, x + 36), 16);\r\n promises.push(CryptoWorker.sha256Hash(sha2aText));\r\n \r\n sha2bText.set(this.authKeyUint8.subarray(40 + x, 40 + x + 36), 0);\r\n sha2bText.set(msgKey, 36);\r\n promises.push(CryptoWorker.sha256Hash(sha2bText));\r\n\r\n return Promise.all(promises).then((results) => {\r\n const aesKey = new Uint8Array(32);\r\n const aesIv = new Uint8Array(32);\r\n const sha2a = new Uint8Array(results[0]);\r\n const sha2b = new Uint8Array(results[1]);\r\n \r\n aesKey.set(sha2a.subarray(0, 8));\r\n aesKey.set(sha2b.subarray(8, 24), 8);\r\n aesKey.set(sha2a.subarray(24, 32), 24);\r\n \r\n aesIv.set(sha2b.subarray(0, 8));\r\n aesIv.set(sha2a.subarray(8, 24), 8);\r\n aesIv.set(sha2b.subarray(24, 32), 24);\r\n \r\n return [aesKey, aesIv];\r\n });\r\n }\r\n\r\n public isStopped() {\r\n return NetworkerFactory.akStopped && !this.isFileNetworker;\r\n }\r\n\r\n private performScheduledRequest() {\r\n // this.log('scheduled', this.dcId, this.iii)\r\n\r\n if(this.isStopped()) {\r\n return false;\r\n }\r\n\r\n if(this.pendingAcks.length) {\r\n const ackMsgIds: Array<string> = this.pendingAcks.slice();\r\n\r\n // this.log('acking messages', ackMsgIDs)\r\n this.wrapMtpMessage({\r\n _: 'msgs_ack',\r\n msg_ids: ackMsgIds\r\n }, {\r\n notContentRelated: true,\r\n noSchedule: true\r\n });\r\n }\r\n \r\n if(this.pendingResends.length) {\r\n const resendMsgIds: Array<string> = this.pendingResends.slice();\r\n const resendOpts: MTMessageOptions = {\r\n noSchedule: true,\r\n notContentRelated: true,\r\n messageId: '' // will set in wrapMtpMessage->pushMessage\r\n };\r\n\r\n //this.log('resendReq messages', resendMsgIds);\r\n this.wrapMtpMessage({\r\n _: 'msg_resend_req',\r\n msg_ids: resendMsgIds\r\n }, resendOpts);\r\n\r\n this.lastResendReq = {\r\n req_msg_id: resendOpts.messageId,\r\n resend_msg_ids: resendMsgIds\r\n };\r\n }\r\n \r\n let outMessage: MTPNetworker['sentMessages'][keyof MTPNetworker['sentMessages']];\r\n const messages: typeof outMessage[] = [];\r\n \r\n //const currentTime = Date.now();\r\n let messagesByteLen = 0;\r\n\r\n \r\n \r\n \r\n \r\n\r\n let lengthOverflow = false;\r\n\r\n // * Сюда никогда не попадут контейнеры, так как их не будет в pendingMessages\r\n const keys = sortLongsArray(Object.keys(this.pendingMessages));\r\n for(const messageId of keys) {\r\n //const value = this.pendingMessages[messageId];\r\n\r\n //if(!value || value <= currentTime) {\r\n const message = this.sentMessages[messageId];\r\n if(message && message.body) {\r\n /* if(message.fileUpload) {\r\n this.log('performScheduledRequest message:', message, message.body.length, (message.body as Uint8Array).byteLength, (message.body as Uint8Array).buffer.byteLength);\r\n } */\r\n\r\n const messageByteLength = message.body.length + 32;\r\n\r\n if((messagesByteLen + messageByteLength) > 655360) { // 640 Kb\r\n this.log.warn('lengthOverflow', message, messages);\r\n lengthOverflow = true;\r\n\r\n if(outMessage) { // if it's not a first message\r\n break;\r\n }\r\n }\r\n\r\n messages.push(message);\r\n messagesByteLen += messageByteLength;\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n outMessage = message;\r\n } else {\r\n // this.log(message, messageId)\r\n }\r\n\r\n delete this.pendingMessages[messageId];\r\n //}\r\n }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n if(!messages.length) {\r\n // this.log('no scheduled messages')\r\n return;\r\n }\r\n \r\n \r\n \r\n \r\n \r\n if(messages.length > 1) {\r\n const container = this.generateContainerMessage(messagesByteLen, messages);\r\n outMessage = container.messageWithBody;\r\n \r\n this.sentMessages[outMessage.msg_id] = container.message;\r\n } else {\r\n this.sentMessages[outMessage.msg_id] = outMessage;\r\n }\r\n \r\n this.pendingAcks = [];\r\n\r\n const promise = this.sendEncryptedRequest(outMessage);\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.cleanupSent(); // ! WARNING\r\n \r\n \r\n \r\n \r\n \r\n if(lengthOverflow) {\r\n this.scheduleRequest();\r\n }\r\n }\r\n\r\n private generateContainerMessage(messagesByteLen: number, messages: MTMessage[]) {\r\n const container = new TLSerialization({\r\n mtproto: true,\r\n startMaxLength: messagesByteLen + 64\r\n });\r\n\r\n container.storeInt(0x73f1f8dc, 'CONTAINER[id]');\r\n container.storeInt(messages.length, 'CONTAINER[count]');\r\n\r\n const innerMessages: string[] = [];\r\n messages.forEach((message, i) => {\r\n innerMessages.push(message.msg_id);\r\n container.storeLong(message.msg_id, 'CONTAINER[' + i + '][msg_id]');\r\n container.storeInt(message.seq_no, 'CONTAINER[' + i + '][seq_no]');\r\n container.storeInt(message.body.length, 'CONTAINER[' + i + '][bytes]');\r\n container.storeRawBytes(message.body, 'CONTAINER[' + i + '][body]');\r\n });\r\n\r\n const message: MTMessage = {\r\n msg_id: timeManager.generateId(),\r\n seq_no: this.generateSeqNo(true),\r\n container: true,\r\n inner: innerMessages\r\n };\r\n\r\n if(Modes.debug/* || true */) {\r\n this.log.warn('Container', innerMessages, message.msg_id, message.seq_no);\r\n }\r\n\r\n return {\r\n message,\r\n messageWithBody: Object.assign({body: container.getBytes(true)}, message),\r\n };\r\n }\r\n\r\n private async getEncryptedMessage(dataWithPadding: ArrayBuffer) {\r\n const msgKey = await this.getMsgKey(dataWithPadding, true);\r\n const keyIv = await this.getAesKeyIv(msgKey, true);\r\n // this.log('after msg key iv')\r\n\r\n const encryptedBytes = await CryptoWorker.aesEncrypt(dataWithPadding, keyIv[0], keyIv[1]);\r\n // this.log('Finish encrypt')\r\n\r\n return {\r\n bytes: encryptedBytes,\r\n msgKey\r\n };\r\n }\r\n\r\n private getDecryptedMessage(msgKey: Uint8Array, encryptedData: Uint8Array): Promise<ArrayBuffer> {\r\n // this.log('get decrypted start')\r\n return this.getAesKeyIv(msgKey, false).then((keyIv) => {\r\n // this.log('after msg key iv')\r\n return CryptoWorker.aesDecrypt(encryptedData, keyIv[0], keyIv[1]);\r\n });\r\n }\r\n\r\n private getEncryptedOutput(message: MTMessage) {\r\n /* if(DEBUG) {\r\n this.log.debug('Send encrypted', message, this.authKeyId);\r\n } */\r\n /* if(!this.isOnline) {\r\n this.log('trying to send message when offline:', Object.assign({}, message));\r\n //debugger;\r\n } */\r\n\r\n const data = new TLSerialization({\r\n startMaxLength: message.body.length + 2048\r\n });\r\n\r\n data.storeIntBytes(this.serverSalt, 64, 'salt');\r\n data.storeIntBytes(this.sessionId, 64, 'session_id');\r\n \r\n data.storeLong(message.msg_id, 'message_id');\r\n data.storeInt(message.seq_no, 'seq_no');\r\n\r\n data.storeInt(message.body.length, 'message_data_length');\r\n data.storeRawBytes(message.body, 'message_data');\r\n\r\n /* const des = new TLDeserialization(data.getBuffer().slice(16));\r\n const desSalt = des.fetchLong();\r\n const desSessionId = des.fetchLong();\r\n\r\n if(!this.isOnline) {\r\n this.log.error('trying to send message when offline', message, new Uint8Array(des.buffer), desSalt, desSessionId);\r\n } */\r\n\r\n /* const messageDataLength = message.body.length;\r\n let canBeLength = 0; // bytes\r\n canBeLength += 8;\r\n canBeLength += 8;\r\n canBeLength += 8;\r\n canBeLength += 4;\r\n canBeLength += 4;\r\n canBeLength += message.body.length; */\r\n \r\n const dataBuffer = data.getBuffer();\r\n\r\n /* if(dataBuffer.byteLength !== canBeLength || !bytesCmp(new Uint8Array(dataBuffer.slice(dataBuffer.byteLength - message.body.length)), new Uint8Array(message.body))) {\r\n this.log.error('wrong length', dataBuffer, canBeLength, message.msg_id);\r\n } */\r\n\r\n const paddingLength = (16 - (data.offset % 16)) + 16 * (1 + nextRandomInt(5));\r\n const padding = /* (message as any).padding || */new Uint8Array(paddingLength).randomize()/* .fill(0) */;\r\n /* const padding = [167, 148, 207, 226, 86, 192, 193, 57, 124, 153, 174, 145, 159, 1, 5, 70, 127, 157, \r\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \r\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, \r\n 51, 241, 46, 85, 141, 212, 139, 234, 213, 164, 197, 116, 245, 70, 184, 40, 40, 201, 233, 211, 150, \r\n 94, 57, 84, 1, 135, 108, 253, 34, 139, 222, 208, 71, 214, 90, 67, 36, 28].slice(0, paddingLength); */\r\n\r\n //(message as any).padding = padding;\r\n\r\n const dataWithPadding = bufferConcat(dataBuffer, padding);\r\n // this.log('Adding padding', dataBuffer, padding, dataWithPadding)\r\n // this.log('auth_key_id', bytesToHex(self.authKeyID))\r\n\r\n /* if(dataWithPadding.byteLength % 16) {\r\n this.log.error('aaa', dataWithPadding, paddingLength);\r\n }\r\n\r\n if(message.fileUpload) {\r\n this.log('Send encrypted: body length:', (message.body as ArrayBuffer).byteLength, paddingLength, dataWithPadding);\r\n } */\r\n\r\n // * full next block is correct\r\n return this.getEncryptedMessage(dataWithPadding).then((encryptedResult) => {\r\n /* if(DEBUG) {\r\n this.log('Got encrypted out message', encryptedResult);\r\n } */\r\n\r\n const request = new TLSerialization({\r\n startMaxLength: encryptedResult.bytes.length + 256\r\n });\r\n request.storeIntBytes(this.authKeyId, 64, 'auth_key_id');\r\n request.storeIntBytes(encryptedResult.msgKey, 128, 'msg_key');\r\n request.storeRawBytes(encryptedResult.bytes, 'encrypted_data');\r\n \r\n const requestData = request.getBytes(true);\r\n\r\n // if(this.isFileNetworker) {\r\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);\r\n // //this.log('Send encrypted: messageId:', message.msg_id, requestData.length);\r\n // //this.log('Send encrypted:', message, new Uint8Array(bufferConcat(des.buffer, padding)), requestData, this.serverSalt.hex, this.sessionId.hex/* new Uint8Array(des.buffer) */);\r\n // this.debugRequests.push({before: new Uint8Array(bufferConcat(des.buffer, padding)), after: requestData});\r\n // }\r\n\r\n return requestData;\r\n });\r\n }\r\n\r\n private sendEncryptedRequest(message: MTMessage) {\r\n return this.getEncryptedOutput(message).then(requestData => {\r\n this.debug && this.log.debug('sendEncryptedRequest: launching message into space:', message, [message.msg_id].concat(message.inner || []));\r\n\r\n const promise: Promise<Uint8Array> = this.transport.send(requestData) as any;\r\n \r\n return promise;\r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n });\r\n }\r\n\r\n public parseResponse(responseBuffer: Uint8Array) {\r\n //const perf = performance.now();\r\n /* if(this.debug) {\r\n this.log.debug('Start parsing response', responseBuffer);\r\n } */\r\n\r\n this.lastResponseTime = Date.now();\r\n\r\n const deserializer = new TLDeserialization(responseBuffer);\r\n \r\n const authKeyId = deserializer.fetchIntBytes(64, true, 'auth_key_id');\r\n if(!bytesCmp(authKeyId, this.authKeyId)) {\r\n throw new Error('[MT] Invalid server auth_key_id: ' + authKeyId.hex);\r\n }\r\n\r\n const msgKey = deserializer.fetchIntBytes(128, true, 'msg_key');\r\n const encryptedData = deserializer.fetchRawBytes(responseBuffer.byteLength - deserializer.getOffset(), true, 'encrypted_data');\r\n \r\n return this.getDecryptedMessage(msgKey, encryptedData).then((dataWithPadding) => {\r\n // this.log('after decrypt')\r\n return this.getMsgKey(dataWithPadding, false).then((calcMsgKey) => {\r\n if(!bytesCmp(msgKey, calcMsgKey)) {\r\n this.log.warn('[MT] msg_keys', msgKey, calcMsgKey);\r\n this.updateSession(); // fix 28.01.2020\r\n throw new Error('[MT] server msgKey mismatch, updating session');\r\n }\r\n // this.log('after msgKey check')\r\n \r\n let deserializer = new TLDeserialization(dataWithPadding, {mtproto: true});\r\n \r\n /* const salt = */deserializer.fetchIntBytes(64, false, 'salt'); // need\r\n const sessionId = deserializer.fetchIntBytes(64, false, 'session_id');\r\n const messageId = deserializer.fetchLong('message_id');\r\n \r\n if(!bytesCmp(sessionId, this.sessionId) &&\r\n (!this.prevSessionId || !bytesCmp(sessionId, this.prevSessionId))) {\r\n this.log.warn('Sessions', sessionId, this.sessionId, this.prevSessionId, dataWithPadding);\r\n //this.updateSession();\r\n //this.sessionID = sessionID;\r\n throw new Error('[MT] Invalid server session_id: ' + bytesToHex(sessionId));\r\n }\r\n \r\n const seqNo = deserializer.fetchInt('seq_no');\r\n \r\n const totalLength = dataWithPadding.byteLength;\r\n \r\n const messageBodyLength = deserializer.fetchInt('message_data[length]');\r\n let offset = deserializer.getOffset();\r\n \r\n if((messageBodyLength % 4) ||\r\n messageBodyLength > totalLength - offset) {\r\n throw new Error('[MT] Invalid body length: ' + messageBodyLength);\r\n }\r\n const messageBody = deserializer.fetchRawBytes(messageBodyLength, true, 'message_data');\r\n \r\n offset = deserializer.getOffset();\r\n const paddingLength = totalLength - offset;\r\n if(paddingLength < 12 || paddingLength > 1024) {\r\n throw new Error('[MT] Invalid padding length: ' + paddingLength);\r\n }\r\n \r\n //let buffer = bytesToArrayBuffer(messageBody);\r\n deserializer = new TLDeserialization(/* buffer */messageBody, {\r\n mtproto: true, \r\n override: {\r\n mt_message: (result: any, field: string) => {\r\n result.msg_id = deserializer.fetchLong(field + '[msg_id]');\r\n result.seqno = deserializer.fetchInt(field + '[seqno]');\r\n result.bytes = deserializer.fetchInt(field + '[bytes]');\r\n \r\n const offset = deserializer.getOffset();\r\n \r\n //self.log('mt_message!!!!!', result, field);\r\n \r\n try {\r\n result.body = deserializer.fetchObject('Object', field + '[body]');\r\n } catch(e) {\r\n this.log.error('parse error', e.message, e.stack);\r\n result.body = {\r\n _: 'parse_error',\r\n error: e\r\n };\r\n }\r\n\r\n if(deserializer.offset !== offset + result.bytes) {\r\n // console.warn(dT(), 'set offset', this.offset, offset, result.bytes)\r\n // this.log(result)\r\n deserializer.offset = offset + result.bytes;\r\n }\r\n // this.log('override message', result)\r\n },\r\n mt_rpc_result: (result: any, field: any) => {\r\n result.req_msg_id = deserializer.fetchLong(field + '[req_msg_id]');\r\n \r\n const sentMessage = this.sentMessages[result.req_msg_id];\r\n const type = sentMessage && sentMessage.resultType || 'Object';\r\n \r\n if(result.req_msg_id && !sentMessage) {\r\n // console.warn(dT(), 'Result for unknown message', result);\r\n return;\r\n }\r\n \r\n result.result = deserializer.fetchObject(type, field + '[result]');\r\n // self.log(dT(), 'override rpc_result', sentMessage, type, result);\r\n }\r\n }\r\n });\r\n\r\n const response = deserializer.fetchObject('', 'INPUT');\r\n //this.log.error('Parse response time:', performance.now() - perf);\r\n return {\r\n response,\r\n messageId,\r\n sessionId,\r\n seqNo\r\n };\r\n });\r\n });\r\n }\r\n\r\n private applyServerSalt(newServerSalt: string) {\r\n const serverSalt = longToBytes(newServerSalt);\r\n \r\n sessionStorage.set({\r\n ['dc' + this.dcId + '_server_salt']: bytesToHex(serverSalt)\r\n });\r\n \r\n this.serverSalt = new Uint8Array(serverSalt);\r\n }\r\n\r\n // ! таймаут очень сильно тормозит скорость работы сокета (даже нулевой) \r\n public scheduleRequest(delay?: number) {\r\n /* if(!this.isOnline) {\r\n return;\r\n } */\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n const nextReq = Date.now() + (delay || 0);\r\n if(this.nextReq && (delay === undefined || this.nextReq <= nextReq)) {\r\n //this.debug && this.log('scheduleRequest: nextReq', this.nextReq, nextReq);\r\n return;\r\n }\r\n \r\n //this.debug && this.log('scheduleRequest: delay', delay);\r\n\r\n /* if(this.nextReqTimeout) {\r\n return;\r\n } */\r\n \r\n //const perf = performance.now();\r\n if(this.nextReqTimeout) {\r\n clearTimeout(this.nextReqTimeout);\r\n }\r\n\r\n const cb = () => {\r\n //this.debug && this.log('scheduleRequest: timeout delay was:', performance.now() - perf);\r\n\r\n this.nextReqTimeout = 0;\r\n this.nextReq = 0;\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n /* if(!this.isOnline) {\r\n return;\r\n } */\r\n\r\n this.performScheduledRequest();\r\n \r\n };\r\n\r\n this.nextReq = nextReq;\r\n\r\n if(delay) {\r\n this.nextReqTimeout = self.setTimeout(cb, delay);\r\n } else {\r\n cb();\r\n }\r\n }\r\n\r\n private ackMessage(msgId: string) {\r\n // this.log('ack message', msgID)\r\n this.pendingAcks.push(msgId);\r\n\r\n \r\n \r\n \r\n this.scheduleRequest();\r\n \r\n }\r\n \r\n private reqResendMessage(msgId: string) {\r\n if(this.debug) {\r\n this.log.debug('Req resend', msgId);\r\n }\r\n\r\n this.pendingResends.push(msgId);\r\n this.scheduleRequest(100);\r\n }\r\n\r\n public cleanupSent() {\r\n let notEmpty = false;\r\n // this.log('clean start', this.dcId/*, this.sentMessages*/)\r\n Object.keys(this.sentMessages).forEach((msgId) => {\r\n const message = this.sentMessages[msgId];\r\n \r\n // this.log('clean iter', msgID, message)\r\n if(message.notContentRelated && this.pendingMessages[msgId] === undefined) {\r\n // this.log('clean notContentRelated', msgID)\r\n delete this.sentMessages[msgId];\r\n } else if(message.container) {\r\n for(const innerMsgId of message.inner) {\r\n if(this.sentMessages[innerMsgId] !== undefined) {\r\n // this.log('clean failed, found', msgID, message.inner[i], this.sentMessages[message.inner[i]].seq_no)\r\n notEmpty = true;\r\n return;\r\n }\r\n }\r\n // this.log('clean container', msgID)\r\n delete this.sentMessages[msgId];\r\n } else {\r\n notEmpty = true;\r\n }\r\n });\r\n \r\n return !notEmpty;\r\n }\r\n\r\n private processMessageAck(messageId: string) {\r\n const sentMessage = this.sentMessages[messageId];\r\n if(sentMessage && !sentMessage.acked) {\r\n //delete sentMessage.body;\r\n sentMessage.acked = true;\r\n }\r\n }\r\n\r\n private processError(rawError: {error_message: string, error_code: number}) {\r\n const matches = (rawError.error_message || '').match(/^([A-Z_0-9]+\\b)(: (.+))?/) || [];\r\n rawError.error_code = rawError.error_code;\r\n \r\n return {\r\n code: !rawError.error_code || rawError.error_code <= 0 ? 500 : rawError.error_code,\r\n type: matches[1] || 'UNKNOWN',\r\n description: matches[3] || ('CODE#' + rawError.error_code + ' ' + rawError.error_message),\r\n originalError: rawError\r\n };\r\n }\r\n\r\n /**\r\n * * только для сокета\r\n * TODO: consider about containers resend\r\n */\r\n public resend() {\r\n for(const id in this.sentMessages) {\r\n const msg = this.sentMessages[id];\r\n if(msg.body || msg.container) {\r\n this.pushResend(id);\r\n }\r\n }\r\n }\r\n\r\n /* public requestMessageStatus() {\r\n const ids: string[] = [];\r\n for(const id in this.sentMessages) {\r\n const message = this.sentMessages[id];\r\n if(message.isAPI && message.fileUpload) {\r\n ids.push(message.msg_id);\r\n }\r\n }\r\n\r\n this.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: ids\r\n }, {\r\n notContentRelated: true\r\n }).then(res => {\r\n this.log('status', res);\r\n });\r\n } */\r\n\r\n // * https://core.telegram.org/mtproto/service_messages_about_messages#notice-of-ignored-error-message\r\n public processMessage(message: any, messageId: string, sessionId: Uint8Array | number[]) {\r\n if(message._ === 'messageEmpty') {\r\n this.log.warn('processMessage: messageEmpty', message, messageId);\r\n return;\r\n }\r\n\r\n const msgidInt = parseInt(messageId.substr(0, -10), 10);\r\n if(msgidInt % 2) {\r\n this.log.warn('Server even message id: ', messageId, message);\r\n return;\r\n }\r\n\r\n /* if(this.debug) {\r\n this.log('process message', message, messageId, sessionId);\r\n } */\r\n\r\n switch(message._) {\r\n case 'msg_container': {\r\n for(const innerMessage of message.messages) {\r\n this.processMessage(innerMessage, innerMessage.msg_id, sessionId);\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'bad_server_salt': {\r\n this.log('Bad server salt', message);\r\n\r\n this.applyServerSalt(message.new_server_salt);\r\n\r\n if(this.sentMessages[message.bad_msg_id]) {\r\n this.pushResend(message.bad_msg_id);\r\n }\r\n \r\n this.ackMessage(messageId);\r\n \r\n // simulate disconnect\r\n /* try {\r\n this.log('networker state:', this);\r\n // @ts-ignore\r\n this.transport.ws.close(1000);\r\n } catch(err) {\r\n this.log.error('transport', this.transport, err);\r\n } */\r\n\r\n break;\r\n }\r\n \r\n case 'bad_msg_notification': {\r\n this.log.error('Bad msg notification', message);\r\n\r\n switch(message.error_code) {\r\n case 16: // * msg_id too low\r\n case 17: // * msg_id too high\r\n case 32: // * msg_seqno too low\r\n case 33: // * msg_seqno too high\r\n case 64: { // * invalid container\r\n //const changedOffset = timeManager.applyServerTime(bigStringInt(messageId).shiftRight(32).toString(10));\r\n const bigInt = str2bigInt(messageId, 10);\r\n rightShift_(bigInt, 32);\r\n const changedOffset = timeManager.applyServerTime(+bigInt2str(bigInt, 10));\r\n if(message.error_code === 17 || changedOffset) {\r\n this.log('Update session');\r\n this.updateSession();\r\n }\r\n\r\n const badMessage = this.updateSentMessage(message.bad_msg_id);\r\n if(badMessage) this.pushResend(badMessage.msg_id); // fix 23.01.2020\r\n //this.ackMessage(messageId);\r\n }\r\n\r\n // * invalid container\r\n /* case 64: {\r\n const badMessage = this.sentMessages[message.bad_msg_id];\r\n if(badMessage) {\r\n for(const msgId of badMessage.inner) {\r\n if(this.sentMessages[msgId] !== undefined) {\r\n this.updateSentMessage\r\n }\r\n }\r\n const inner = badMessage.inner;\r\n }\r\n } */\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'message': {\r\n if(this.lastServerMessages.indexOf(messageId) !== -1) {\r\n // console.warn('[MT] Server same messageId: ', messageId)\r\n this.ackMessage(messageId);\r\n return;\r\n }\r\n\r\n this.lastServerMessages.push(messageId);\r\n if(this.lastServerMessages.length > 100) {\r\n this.lastServerMessages.shift();\r\n }\r\n\r\n this.processMessage(message.body, message.msg_id, sessionId);\r\n break;\r\n }\r\n \r\n case 'new_session_created': {\r\n this.ackMessage(messageId);\r\n\r\n if(this.debug) {\r\n this.log.debug('new_session_created', message);\r\n }\r\n //this.updateSession();\r\n \r\n this.processMessageAck(message.first_msg_id);\r\n this.applyServerSalt(message.server_salt);\r\n \r\n sessionStorage.get('dc').then((baseDcId) => {\r\n if(baseDcId === this.dcId && !this.isFileNetworker && NetworkerFactory.updatesProcessor) {\r\n NetworkerFactory.updatesProcessor(message);\r\n }\r\n });\r\n break;\r\n }\r\n \r\n case 'msgs_ack': {\r\n for(const msgId of message.msg_ids) {\r\n this.processMessageAck(msgId);\r\n }\r\n\r\n break;\r\n }\r\n \r\n case 'msg_detailed_info':\r\n if(!this.sentMessages[message.msg_id]) {\r\n this.ackMessage(message.answer_msg_id);\r\n break;\r\n }\r\n case 'msg_new_detailed_info':\r\n if(this.pendingAcks.indexOf(message.answer_msg_id)) {\r\n break;\r\n }\r\n this.reqResendMessage(message.answer_msg_id);\r\n break;\r\n \r\n case 'msgs_state_info': {\r\n this.ackMessage(message.answer_msg_id);\r\n if(this.lastResendReq && \r\n this.lastResendReq.req_msg_id === message.req_msg_id && \r\n this.pendingResends.length\r\n ) {\r\n for(const badMsgId of this.lastResendReq.resend_msg_ids) {\r\n const pos = this.pendingResends.indexOf(badMsgId);\r\n if(pos !== -1) {\r\n this.pendingResends.splice(pos, 1);\r\n }\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'rpc_result': {\r\n this.ackMessage(messageId);\r\n \r\n const sentMessageId = message.req_msg_id;\r\n const sentMessage = this.sentMessages[sentMessageId];\r\n\r\n this.processMessageAck(sentMessageId);\r\n if(sentMessage) {\r\n const deferred = sentMessage.deferred;\r\n if(message.result._ === 'rpc_error') {\r\n const error = this.processError(message.result);\r\n this.log('Rpc error', error);\r\n if(deferred) {\r\n deferred.reject(error);\r\n }\r\n } else {\r\n if(deferred) {\r\n /* if(DEBUG) {\r\n this.log.debug('Rpc response', message.result, sentMessage);\r\n } */\r\n\r\n deferred.resolve(message.result);\r\n }\r\n\r\n if(sentMessage.isAPI && !this.connectionInited) {\r\n this.connectionInited = true;\r\n ////this.log('Rpc set connectionInited to:', this.connectionInited);\r\n }\r\n }\r\n \r\n delete this.sentMessages[sentMessageId];\r\n } else {\r\n if(this.debug) {\r\n this.log('Rpc result for unknown message:', sentMessageId, message);\r\n }\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'pong': { // * https://core.telegram.org/mtproto/service_messages#ping-messages-pingpong - These messages doesn't require acknowledgments\r\n if((this.transport as TcpObfuscated).networker) {\r\n const sentMessageId = message.msg_id;\r\n const sentMessage = this.sentMessages[sentMessageId]; \r\n\r\n if(sentMessage) {\r\n sentMessage.deferred.resolve(message);\r\n delete this.sentMessages[sentMessageId];\r\n }\r\n }\r\n\r\n break;\r\n }\r\n \r\n default:\r\n this.ackMessage(messageId);\r\n\r\n /* if(this.debug) {\r\n this.log.debug('Update', message);\r\n } */\r\n \r\n if(NetworkerFactory.updatesProcessor !== null) {\r\n NetworkerFactory.updatesProcessor(message);\r\n }\r\n break;\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n/* import { copy } from \"./object\";\r\n\r\nexport function listMergeSorted(list1: any[] = [], list2: any[] = []) {\r\n const result = copy(list1);\r\n\r\n const minId = list1.length ? list1[list1.length - 1] : 0xFFFFFFFF;\r\n for(let i = 0; i < list2.length; i++) {\r\n if(list2[i] < minId) {\r\n result.push(list2[i]);\r\n }\r\n }\r\n\r\n return result;\r\n} */\r\n\r\nexport const accumulate = (arr: number[], initialValue: number) => arr.reduce((acc, value) => acc + value, initialValue);\r\n\r\nexport function findAndSpliceAll<T>(array: Array<T>, verify: (value: T, index: number, arr: typeof array) => boolean) {\r\n const out: typeof array = [];\r\n let idx = -1;\r\n while((idx = array.findIndex(verify)) !== -1) {\r\n out.push(array.splice(idx, 1)[0]);\r\n }\r\n\r\n return out;\r\n}\r\n\r\nexport function forEachReverse<T>(array: Array<T>, callback: (value: T, index?: number, array?: Array<T>) => void) {\r\n for(let length = array.length, i = length - 1; i >= 0; --i) {\r\n callback(array[i], i, array);\r\n }\r\n};\r\n\r\nexport function insertInDescendSortedArray<T extends {[smth in K]?: number}, K extends keyof T>(array: Array<T>, element: T, property: K, pos?: number) {\r\n if(pos === undefined) {\r\n pos = array.indexOf(element);\r\n if(pos !== -1) {\r\n array.splice(pos, 1);\r\n }\r\n }\r\n\r\n const sortProperty: number = element[property];\r\n const len = array.length;\r\n if(!len || sortProperty <= array[len - 1][property]) {\r\n return array.push(element) - 1;\r\n } else if(sortProperty >= array[0][property]) {\r\n array.unshift(element);\r\n return 0;\r\n } else {\r\n for(let i = 0; i < len; i++) {\r\n if(sortProperty > array[i][property]) {\r\n array.splice(i, 0, element);\r\n return i;\r\n }\r\n }\r\n }\r\n\r\n console.error('wtf', array, element);\r\n return array.indexOf(element);\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport MTPNetworker from \"./networker\";\r\nimport { ConnectionStatusChange, InvokeApiOptions } from \"../../types\";\r\nimport MTTransport from \"./transports/transport\";\r\n\r\nexport class NetworkerFactory {\r\n private networkers: MTPNetworker[] = [];\r\n public updatesProcessor: (obj: any) => void = null;\r\n public onConnectionStatusChange: (info: ConnectionStatusChange) => void = null;\r\n public akStopped = false;\r\n\r\n public setUpdatesProcessor(callback: (obj: any) => void) {\r\n this.updatesProcessor = callback;\r\n }\r\n\r\n public getNetworker(dcId: number, authKey: number[], authKeyID: Uint8Array, serverSalt: number[], transport: MTTransport, options: InvokeApiOptions) {\r\n //console.log('NetworkerFactory: creating new instance of MTPNetworker:', dcId, options);\r\n const networker = new MTPNetworker(dcId, authKey, authKeyID, serverSalt, transport, options);\r\n this.networkers.push(networker);\r\n return networker;\r\n }\r\n\r\n public startAll() {\r\n if(this.akStopped) {\r\n const stoppedNetworkers = this.networkers.filter(networker => networker.isStopped());\r\n\r\n this.akStopped = false;\r\n this.updatesProcessor && this.updatesProcessor({_: 'new_session_created'});\r\n \r\n for(const networker of stoppedNetworkers) {\r\n networker.scheduleRequest();\r\n }\r\n }\r\n }\r\n\r\n public stopAll() {\r\n this.akStopped = true;\r\n }\r\n}\r\n\r\nexport default new NetworkerFactory();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap<any, Record<any, Set<any>>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\nexport default class EventListenerBase<Listeners extends {[name: string]: Function}> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], once?: boolean}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes<Listeners[k]>\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener<T extends keyof Listeners>(name: T, callback: Listeners[T], once?: boolean) {\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if(once) {\r\n return;\r\n }\r\n }\r\n \r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, once});\r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener<T extends keyof Listeners>(name: T, callback: Listeners[T]) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent<T extends keyof Listeners>(name: T, ...args: ArgumentTypes<Listeners[T]>) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array<SuperReturnType<Listeners[typeof name]>> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener: any) => {\r\n const index = listeners.findIndex((l: any) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { logger, LogTypes } from '../../logger';\r\nimport Modes from '../../../config/modes';\r\nimport EventListenerBase from '../../../helpers/eventListenerBase';\r\nimport { MTConnection } from './transport';\r\n\r\nexport default class Socket extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private ws: WebSocket;\r\n private log: ReturnType<typeof logger>;\r\n private debug = Modes.debug && false;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n\r\n let logTypes = LogTypes.Error | LogTypes.Log;\r\n if(this.debug) logTypes |= LogTypes.Debug;\r\n this.log = logger(`WS-${dcId}` + logSuffix, logTypes);\r\n this.log('constructor');\r\n this.connect();\r\n\r\n return this;\r\n }\r\n\r\n private removeListeners() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.ws.removeEventListener('open', this.handleOpen);\r\n this.ws.removeEventListener('close', this.handleClose);\r\n this.ws.removeEventListener('error', this.handleError);\r\n this.ws.removeEventListener('message', this.handleMessage);\r\n this.ws = undefined;\r\n }\r\n \r\n private connect() {\r\n this.ws = new WebSocket(this.url, 'binary');\r\n this.ws.binaryType = 'arraybuffer';\r\n this.ws.addEventListener('open', this.handleOpen);\r\n this.ws.addEventListener('close', this.handleClose);\r\n this.ws.addEventListener('error', this.handleError);\r\n this.ws.addEventListener('message', this.handleMessage);\r\n }\r\n\r\n public close() {\r\n if(!this.ws) {\r\n return;\r\n }\r\n\r\n this.log.error('close execution');\r\n\r\n try {\r\n this.ws.close();\r\n } catch(err) {\r\n\r\n }\r\n this.handleClose();\r\n }\r\n \r\n private handleOpen = () => {\r\n this.log('opened');\r\n\r\n this.debug && this.log.debug('sending init packet');\r\n this.dispatchEvent('open');\r\n };\r\n\r\n private handleError = (e: Event) => {\r\n this.log.error('handleError', e);\r\n this.close();\r\n };\r\n\r\n private handleClose = () => {\r\n this.log('closed'/* , event, this.pending, this.ws.bufferedAmount */);\r\n\r\n this.removeListeners();\r\n this.dispatchEvent('close');\r\n };\r\n\r\n private handleMessage = (event: MessageEvent) => {\r\n this.debug && this.log.debug('<-', 'handleMessage', /* event, */event.data.byteLength);\r\n\r\n this.dispatchEvent('message', event.data as ArrayBuffer);\r\n };\r\n\r\n public send = (body: Uint8Array) => {\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n\r\n this.ws.send(body);\r\n };\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import aesjs from 'aes-js';\r\nimport AES from \"@cryptography/aes\";\r\nimport { bytesFromWordss } from \"../../../helpers/bytes\";\r\nimport { Codec } from \"./codec\";\r\n\r\nclass Counter {\r\n _counter: Uint8Array;\r\n\r\n constructor(initialValue: Uint8Array) {\r\n this._counter = initialValue;\r\n }\r\n\r\n increment() {\r\n for(let i = 15; i >= 0; i--) {\r\n if(this._counter[i] === 255) {\r\n this._counter[i] = 0;\r\n } else {\r\n this._counter[i]++;\r\n break;\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass CTR {\r\n _counter: Counter;\r\n _remainingCounter: Uint8Array = null;\r\n _remainingCounterIndex = 16;\r\n _aes: AES;\r\n\r\n constructor(key: Uint8Array, counter: Uint8Array) {\r\n this._counter = new Counter(counter);\r\n this._aes = new AES(key);\r\n }\r\n\r\n update(payload: Uint8Array) {\r\n const encrypted = payload.slice();\r\n\r\n for(let i = 0; i < encrypted.length; i++) {\r\n if(this._remainingCounterIndex === 16) {\r\n this._remainingCounter = new Uint8Array(bytesFromWordss(this._aes.encrypt(this._counter._counter)));\r\n this._remainingCounterIndex = 0;\r\n this._counter.increment();\r\n }\r\n\r\n encrypted[i] ^= this._remainingCounter[this._remainingCounterIndex++];\r\n }\r\n\r\n return encrypted;\r\n }\r\n}\r\n\r\n/* \r\n@cryptography/aes не работает с массивами которые не кратны 4, поэтому использую intermediate а не abridged\r\n*/\r\nexport default class Obfuscation {\r\n /* public enc: aesjs.ModeOfOperation.ModeOfOperationCTR;\r\n public dec: aesjs.ModeOfOperation.ModeOfOperationCTR; */\r\n\r\n public encNew: CTR;\r\n public decNew: CTR;\r\n\r\n public init(codec: Codec) {\r\n const initPayload = new Uint8Array(64);\r\n initPayload.randomize();\r\n \r\n while(true) {\r\n let val = (initPayload[3] << 24) | (initPayload[2] << 16) | (initPayload[1] << 8) | (initPayload[0]);\r\n let val2 = (initPayload[7] << 24) | (initPayload[6] << 16) | (initPayload[5] << 8) | (initPayload[4]);\r\n if(initPayload[0] !== 0xef &&\r\n val !== 0x44414548 &&\r\n val !== 0x54534f50 &&\r\n val !== 0x20544547 &&\r\n val !== 0x4954504f &&\r\n val !== 0xeeeeeeee &&\r\n val !== 0xdddddddd &&\r\n val2 !== 0x00000000) {\r\n //initPayload[56] = initPayload[57] = initPayload[58] = initPayload[59] = transport;\r\n break;\r\n }\r\n initPayload.randomize();\r\n }\r\n\r\n ////////////////////////initPayload.subarray(60, 62).hex = dcId;\r\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]));\r\n console.log('initPayload', initPayload); */\r\n\r\n const reversedPayload = initPayload.slice().reverse();\r\n\r\n const encKey = initPayload.slice(8, 40);\r\n const encIv = initPayload.slice(40, 56);\r\n const decKey = reversedPayload.slice(8, 40);\r\n const decIv = reversedPayload.slice(40, 56);\r\n\r\n /* this.enc = new aesjs.ModeOfOperation.ctr(encKey, new aesjs.Counter(encIv as any));\r\n this.dec = new aesjs.ModeOfOperation.ctr(decKey, new aesjs.Counter(decIv as any)); */\r\n\r\n // console.log('encKey', encKey.hex, encIv.hex);\r\n // console.log('decKey', decKey.hex, decIv.hex);\r\n\r\n this.encNew = new CTR(encKey, encIv);\r\n this.decNew = new CTR(decKey, decIv);\r\n\r\n initPayload.set(codec.obfuscateTag, 56);\r\n const encrypted = this.encode(initPayload);\r\n\r\n //console.log('encrypted', encrypted);\r\n\r\n initPayload.set(encrypted.slice(56, 64), 56);\r\n\r\n return initPayload;\r\n }\r\n\r\n /* public encode(payload: Uint8Array) {\r\n let startTime = performance.now();\r\n let res = this.enc.encrypt(payload);\r\n let time = performance.now() - startTime;\r\n\r\n try {\r\n startTime = performance.now();\r\n let arr = this.encNew.encrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n let time2 = performance.now() - startTime;\r\n console.log('Obfuscation: encode comparison:', res, arr, resNew, res.hex === resNew.hex, time2 < time);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.dec.encrypt(payload);\r\n\r\n try {\r\n let arr = this.decNew.decrypt(payload);\r\n //let resNew = bytesFromWords({words: arr, sigBytes: arr.length});\r\n let resNew = new Uint8Array(bytesFromWordss(arr));\r\n console.log('Obfuscation: decode comparison:', res, arr, resNew, res.hex === resNew.hex);\r\n } catch(err) {\r\n console.error('Obfuscation: error:', err);\r\n }\r\n \r\n return res;\r\n } */\r\n public encode(payload: Uint8Array) {\r\n return this.encNew.update(payload);\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n return this.decNew.update(payload);\r\n }\r\n /* public encode(payload: Uint8Array) {\r\n let res = this.encNew.encrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n }\r\n\r\n public decode(payload: Uint8Array) {\r\n let res = this.decNew.decrypt(payload);\r\n let bytes = new Uint8Array(bytesFromWordss(res));\r\n \r\n return bytes;\r\n } */\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport { Codec } from \"./codec\";\r\n\r\nexport class IntermediatePacketCodec implements Codec {\r\n public tag = 0xee;\r\n public obfuscateTag = new Uint8Array([this.tag, this.tag, this.tag, this.tag]);\r\n\r\n //private lol = 0;\r\n\r\n public encodePacket(data: Uint8Array) {\r\n if((data.length % 4) !== 0) {\r\n console.error('Encode error!', data.length, data);\r\n }\r\n\r\n const len = data.length;\r\n const header = new Uint8Array(new Int32Array([/* ++this.lol >= 25 ? 0x80000001 : */len]).buffer);\r\n\r\n //console.log('got nobody cause im braindead', header, len, /* data, */data.buffer.byteLength === data.length);\r\n return header.concat(data);\r\n }\r\n\r\n public readPacket(data: Uint8Array) {\r\n const length = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24);\r\n\r\n return data.slice(4, 4 + length);\r\n }\r\n}\r\n\r\nexport default new IntermediatePacketCodec();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"../../../config/modes\";\r\nimport { logger, LogTypes } from \"../../logger\";\r\nimport MTPNetworker from \"../networker\";\r\nimport Obfuscation from \"./obfuscation\";\r\nimport MTTransport, { MTConnection, MTConnectionConstructable } from \"./transport\";\r\nimport intermediatePacketCodec from './intermediate';\r\n\r\nexport default class TcpObfuscated implements MTTransport {\r\n private codec = intermediatePacketCodec;\r\n private obfuscation = new Obfuscation();\r\n public networker: MTPNetworker;\r\n\r\n private pending: Array<Partial<{\r\n resolve: any, \r\n reject: any, \r\n body: Uint8Array, \r\n encoded?: Uint8Array,\r\n bodySent: boolean\r\n }>> = [];\r\n\r\n private debug = Modes.debug && false/* true */;\r\n private log: ReturnType<typeof logger>;\r\n public connected = false;\r\n private lastCloseTime: number;\r\n private connection: MTConnection;\r\n\r\n //private debugPayloads: MTPNetworker['debugRequests'] = [];\r\n\r\n constructor(private Connection: MTConnectionConstructable, \r\n private dcId: number, \r\n private url: string, \r\n private logSuffix: string, \r\n private retryTimeout: number\r\n ) {\r\n let logTypes = LogTypes.Error | LogTypes.Log;\r\n if(this.debug) logTypes |= LogTypes.Debug;\r\n this.log = logger(`TCP-${dcId}` + logSuffix, logTypes);\r\n this.log('constructor');\r\n \r\n this.connect();\r\n }\r\n\r\n private onOpen = () => {\r\n this.connected = true;\r\n\r\n const initPayload = this.obfuscation.init(this.codec);\r\n\r\n this.connection.send(initPayload);\r\n\r\n if(this.networker) {\r\n this.pending.length = 0; // ! clear queue and reformat messages to container, because if sending simultaneously 10+ messages, connection will die\r\n this.networker.setConnectionStatus(true);\r\n this.networker.cleanupSent();\r\n this.networker.resend();\r\n } else {\r\n for(const pending of this.pending) {\r\n if(pending.encoded && pending.body) {\r\n pending.encoded = this.encodeBody(pending.body);\r\n }\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n this.releasePending();\r\n }, 0);\r\n };\r\n\r\n private onMessage = (buffer: ArrayBuffer) => {\r\n let data = this.obfuscation.decode(new Uint8Array(buffer));\r\n data = this.codec.readPacket(data);\r\n\r\n if(this.networker) { // authenticated!\r\n //this.pending = this.pending.filter(p => p.body); // clear pending\r\n\r\n this.debug && this.log.debug('redirecting to networker', data.length);\r\n this.networker.parseResponse(data).then(response => {\r\n this.debug && this.log.debug('redirecting to networker response:', response);\r\n\r\n try {\r\n this.networker.processMessage(response.response, response.messageId, response.sessionId);\r\n } catch(err) {\r\n this.log.error('handleMessage networker processMessage error', err);\r\n }\r\n\r\n //this.releasePending();\r\n }).catch(err => {\r\n this.log.error('handleMessage networker parseResponse error', err);\r\n });\r\n\r\n //this.dd();\r\n return;\r\n }\r\n\r\n //console.log('got hex:', data.hex);\r\n const pending = this.pending.shift();\r\n if(!pending) {\r\n this.debug && this.log.debug('no pending for res:', data.hex);\r\n return;\r\n }\r\n\r\n pending.resolve(data);\r\n };\r\n\r\n private onClose = () => {\r\n this.connected = false;\r\n\r\n this.connection.removeEventListener('open', this.onOpen);\r\n this.connection.removeEventListener('close', this.onClose);\r\n this.connection.removeEventListener('message', this.onMessage);\r\n this.connection = undefined;\r\n \r\n const time = Date.now();\r\n const diff = time - this.lastCloseTime;\r\n const needTimeout = !isNaN(diff) && diff < this.retryTimeout ? this.retryTimeout - diff : 0;\r\n \r\n if(this.networker) {\r\n this.networker.setConnectionStatus(false, needTimeout);\r\n this.pending.length = 0;\r\n }\r\n \r\n this.log('will try to reconnect after timeout:', needTimeout / 1000);\r\n setTimeout(() => {\r\n this.log('trying to reconnect...');\r\n this.lastCloseTime = Date.now();\r\n \r\n if(!this.networker) {\r\n for(const pending of this.pending) {\r\n if(pending.bodySent) {\r\n pending.bodySent = false;\r\n }\r\n }\r\n }\r\n \r\n this.connect();\r\n }, needTimeout);\r\n };\r\n\r\n private connect() {\r\n this.connection = new this.Connection(this.dcId, this.url, this.logSuffix);\r\n this.connection.addEventListener('open', this.onOpen);\r\n this.connection.addEventListener('close', this.onClose);\r\n this.connection.addEventListener('message', this.onMessage);\r\n }\r\n\r\n private encodeBody(body: Uint8Array) {\r\n const toEncode = this.codec.encodePacket(body);\r\n\r\n //this.log('send before obf:', /* body.hex, nonce.hex, */ toEncode.hex);\r\n const encoded = this.obfuscation.encode(toEncode);\r\n //this.log('send after obf:', enc.hex);\r\n\r\n return encoded;\r\n }\r\n\r\n public send(body: Uint8Array) {\r\n this.debug && this.log.debug('-> body length to pending:', body.length);\r\n\r\n const encoded: typeof body = this.connected ? this.encodeBody(body) : undefined;\r\n\r\n //return;\r\n\r\n if(this.networker) {\r\n this.pending.push({body, encoded});\r\n this.releasePending();\r\n } else {\r\n const promise = new Promise<typeof body>((resolve, reject) => {\r\n this.pending.push({resolve, reject, body, encoded});\r\n });\r\n\r\n this.releasePending();\r\n\r\n return promise;\r\n }\r\n }\r\n\r\n private releasePending(/* tt = false */) {\r\n if(!this.connected) {\r\n //this.connect();\r\n return;\r\n }\r\n\r\n /* if(!tt) {\r\n this.releasePendingDebounced();\r\n return;\r\n } */\r\n\r\n //this.log('-> messages to send:', this.pending.length);\r\n let length = this.pending.length;\r\n //for(let i = length - 1; i >= 0; --i) {\r\n for(let i = 0; i < length; ++i) {\r\n /* if(this.ws.bufferedAmount) {\r\n break;\r\n } */\r\n\r\n const pending = this.pending[i];\r\n const {body, bodySent} = pending;\r\n let encoded = pending.encoded;\r\n if(body && !bodySent) {\r\n\r\n //this.debugPayloads.push({before: body.slice(), after: enc});\r\n\r\n this.debug && this.log.debug('-> body length to send:', body.length);\r\n /* if(this.ws.bufferedAmount) {\r\n this.log.error('bufferedAmount:', this.ws.bufferedAmount);\r\n } */\r\n\r\n /* if(this.ws.readyState !== this.ws.OPEN) {\r\n this.log.error('ws is closed?');\r\n this.connected = false;\r\n break;\r\n } */\r\n\r\n if(!encoded) {\r\n encoded = pending.encoded = this.encodeBody(body);\r\n }\r\n\r\n //this.lol.push(body);\r\n //setTimeout(() => {\r\n this.connection.send(encoded);\r\n //}, 100);\r\n //this.dd();\r\n \r\n if(!pending.resolve) { // remove if no response needed\r\n this.pending.splice(i--, 1);\r\n length--;\r\n } else {\r\n pending.bodySent = true;\r\n }\r\n\r\n //delete pending.body;\r\n }\r\n }\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const userAgent = navigator ? navigator.userAgent : null;\r\nexport const isApple = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const isAndroid = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const isChromium = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\n/**\r\n * Returns true when run in WebKit derived browsers.\r\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\r\n * transfer data between WebWorkers and the main thread.\r\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\r\n *\r\n * This should be removed once the underlying Safari issue is fixed.\r\n */\r\nexport const ctx = typeof(window) !== 'undefined' ? window : self;\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const isAppleMobile = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !ctx.MSStream;\r\n\r\nexport const isSafari = !!('safari' in ctx) || !!(userAgent && (/\\b(iPad|iPhone|iPod)\\b/.test(userAgent) || (!!userAgent.match('Safari') && !userAgent.match('Chrome'))))/* || true */;\r\nexport const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\r\nexport const isMobileSafari = isSafari && isAppleMobile;\r\n\r\nexport const isMobile = /* screen.width && screen.width < 480 || */navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport const isWebWorker = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope;\r\nexport const isServiceWorker = typeof ServiceWorkerGlobalScope !== 'undefined' && self instanceof ServiceWorkerGlobalScope;\r\nexport const isWorker = isWebWorker || isServiceWorker;\r\n\r\n// в SW может быть сразу две переменных TRUE, поэтому проверяю по последней\r\n\r\nconst notifyServiceWorker = (all: boolean, ...args: any[]) => {\r\n (self as any as ServiceWorkerGlobalScope)\r\n .clients\r\n .matchAll({ includeUncontrolled: false, type: 'window' })\r\n .then((listeners) => {\r\n if(!listeners.length) {\r\n //console.trace('no listeners?', self, listeners);\r\n return;\r\n }\r\n\r\n listeners.slice(all ? 0 : -1).forEach(listener => {\r\n // @ts-ignore\r\n listener.postMessage(...args);\r\n });\r\n });\r\n};\r\n\r\nconst notifyWorker = (...args: any[]) => {\r\n // @ts-ignore\r\n (self as any as DedicatedWorkerGlobalScope).postMessage(...args);\r\n};\r\n\r\nconst noop = () => {};\r\n\r\nexport const notifySomeone = isServiceWorker ? notifyServiceWorker.bind(null, false) : (isWebWorker ? notifyWorker : noop);\r\nexport const notifyAll = isServiceWorker ? notifyServiceWorker.bind(null, true) : (isWebWorker ? notifyWorker : noop);\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport MTTransport, { MTConnection, MTConnectionConstructable } from './transports/transport';\r\nimport Modes from '../../config/modes';\r\n\r\n \r\n \r\n \r\n\r\n \r\nimport Socket from './transports/websocket';\r\nimport TcpObfuscated from './transports/tcpObfuscated';\r\nimport EventListenerBase from '../../helpers/eventListenerBase';\r\nimport { isSafari } from '../../helpers/userAgent';\r\nimport { notifyAll, isWebWorker } from '../../helpers/context';\r\n \r\n\r\nexport type TransportType = 'websocket' | 'https' | 'http';\r\nexport type ConnectionType = 'client' | 'download' | 'upload';\r\ntype Servers = {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTTransport[]\r\n }\r\n }\r\n};\r\n\r\nlet socketId = 0;\r\nconst TEST_SUFFIX = Modes.test ? '_test' : '';\r\n\r\n \r\nclass SocketProxied extends EventListenerBase<{\r\n open: () => void,\r\n message: (buffer: ArrayBuffer) => any,\r\n close: () => void,\r\n}> implements MTConnection {\r\n private id: number;\r\n\r\n constructor(protected dcId: number, protected url: string, logSuffix: string) {\r\n super();\r\n this.id = ++socketId;\r\n socketsProxied.set(this.id, this);\r\n\r\n notifyAll({\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'setup', \r\n payload: {\r\n dcId, \r\n url,\r\n logSuffix\r\n },\r\n id: this.id\r\n }\r\n });\r\n }\r\n\r\n public send(payload: Uint8Array) {\r\n const task: any = {\r\n type: 'socketProxy', \r\n payload: {\r\n type: 'send',\r\n payload,\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n\r\n public close() {\r\n const task: any = {\r\n type: 'socketProxy',\r\n payload: {\r\n type: 'close',\r\n id: this.id\r\n }\r\n };\r\n\r\n notifyAll(task);\r\n }\r\n}\r\n \r\n\r\nexport const socketsProxied: Map<number, SocketProxied> = new Map();\r\n\r\nexport class DcConfigurator {\r\n private sslSubdomains = ['pluto', 'venus', 'aurora', 'vesta', 'flora'];\r\n\r\n private dcOptions = Modes.test\r\n ? [\r\n {id: 1, host: '149.154.175.10', port: 80},\r\n {id: 2, host: '149.154.167.40', port: 80},\r\n {id: 3, host: '149.154.175.117', port: 80}\r\n ]\r\n : [\r\n {id: 1, host: '149.154.175.50', port: 80},\r\n {id: 2, host: '149.154.167.50', port: 80},\r\n {id: 3, host: '149.154.175.100', port: 80},\r\n {id: 4, host: '149.154.167.91', port: 80},\r\n {id: 5, host: '149.154.171.5', port: 80}\r\n ];\r\n\r\n private chosenServers: Servers = {} as any;\r\n\r\n \r\n private transportSocket = (dcId: number, connectionType: ConnectionType) => {\r\n const subdomain = this.sslSubdomains[dcId - 1];\r\n const path = 'apiws' + TEST_SUFFIX;\r\n const chosenServer = 'wss://' + subdomain + '.web.telegram.org/' + path;\r\n const logSuffix = connectionType === 'upload' ? '-U' : connectionType === 'download' ? '-D' : '';\r\n\r\n const retryTimeout = connectionType === 'client' ? 10000 : 10000;\r\n\r\n const oooohLetMeLive: MTConnectionConstructable = (isSafari && isWebWorker && typeof(SocketProxied) !== 'undefined') /* || true */ ? SocketProxied : Socket;\r\n\r\n return new TcpObfuscated(oooohLetMeLive, dcId, chosenServer, logSuffix, retryTimeout);\r\n };\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n public chooseServer(dcId: number, connectionType: ConnectionType = 'client', transportType: TransportType = 'websocket', reuse = true) {\r\n /* if(transportType === 'websocket' && !Modes.multipleConnections) {\r\n connectionType = 'client';\r\n } */\r\n\r\n if(!this.chosenServers.hasOwnProperty(transportType)) {\r\n this.chosenServers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const servers = this.chosenServers[transportType][connectionType];\r\n\r\n if(!(dcId in servers)) {\r\n servers[dcId] = [];\r\n }\r\n\r\n const transports = servers[dcId];\r\n\r\n if(!transports.length || !reuse/* || (upload && transports.length < 1) */) {\r\n let transport: MTTransport;\r\n\r\n \r\n \r\n \r\n transport = this.transportSocket(dcId, connectionType);\r\n \r\n \r\n \r\n \r\n if(!transport) {\r\n console.error('No chosenServer!', dcId);\r\n return null;\r\n }\r\n \r\n if(reuse) {\r\n transports.push(transport);\r\n }\r\n \r\n return transport;\r\n }\r\n \r\n return transports[0];\r\n }\r\n}\r\n\r\nexport default new DcConfigurator();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization } from \"./tl_utils\";\r\nimport CryptoWorker from '../crypto/cryptoworker';\r\nimport { bytesFromArrayBuffer, bytesFromHex, bytesToHex } from \"../../helpers/bytes\";\r\nimport { bigInt2str, str2bigInt } from \"../../vendor/leemon\";\r\n\r\nexport class RSAKeysManager {\r\n\r\n /**\r\n * Server public key, obtained from here: https://core.telegram.org/api/obtaining_api_id\r\n * \r\n * \r\n * -----BEGIN RSA PUBLIC KEY-----\r\n * MIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6\r\n * lyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS\r\n * an9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw\r\n * Efzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+\r\n * 8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n\r\n * Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB\r\n * -----END RSA PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAruw2yP/BCcsJliRoW5eB\r\n * VBVle9dtjJw+OYED160Wybum9SXtBBLXriwt4rROd9csv0t0OHCaTmRqBcQ0J8fx\r\n * hN6/cpR1GWgOZRUAiQxoMnlt0R93LCX/j1dnVa/gVbCjdSxpbrfY2g2L4frzjJvd\r\n * l84Kd9ORYjDEAyFnEA7dD556OptgLQQ2e2iVNq8NZLYTzLp5YpOdO1doK+ttrltg\r\n * gTCy5SrKeLoCPPbOgGsdxJxyz5KKcZnSLj16yE5HvJQn0CNpRdENvRUXe6tBP78O\r\n * 39oJ8BTHp9oIjd6XWXAsp2CvK45Ol8wFXGF710w9lwCGNbmNxNYhtIkdqfsEcwR5\r\n * JwIDAQAB\r\n * -----END PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvfLHfYH2r9R70w8prHbl\r\n * Wt/nDkh+XkgpflqQVcnAfSuTtO05lNPspQmL8Y2XjVT4t8cT6xAkdgfmmvnvRPOO\r\n * KPi0OfJXoRVylFzAQG/j83u5K3kRLbae7fLccVhKZhY46lvsueI1hQdLgNV9n1cQ\r\n * 3TDS2pQOCtovG4eDl9wacrXOJTG2990VjgnIKNA0UMoP+KF03qzryqIt3oTvZq03\r\n * DyWdGK+AZjgBLaDKSnC6qD2cFY81UryRWOab8zKkWAnhw2kFpcqhI0jdV5QaSCEx\r\n * vnsjVaX0Y1N0870931/5Jb9ICe4nweZ9kSDF/gip3kWLG0o8XQpChDfyvsqB9OLV\r\n * /wIDAQAB\r\n * -----END PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAs/ditzm+mPND6xkhzwFI\r\n * z6J/968CtkcSE/7Z2qAJiXbmZ3UDJPGrzqTDHkO30R8VeRM/Kz2f4nR05GIFiITl\r\n * 4bEjvpy7xqRDspJcCFIOcyXm8abVDhF+th6knSU0yLtNKuQVP6voMrnt9MV1X92L\r\n * GZQLgdHZbPQz0Z5qIpaKhdyA8DEvWWvSUwwc+yi1/gGaybwlzZwqXYoPOhwMebzK\r\n * Uk0xW14htcJrRrq+PXXQbRzTMynseCoPIoke0dtCodbA3qQxQovE16q9zz4Otv2k\r\n * 4j63cz53J+mhkVWAeWxVGI0lltJmWtEYK6er8VqqWot3nqmWMXogrgRLggv/Nbbo\r\n * oQIDAQAB\r\n * -----END PUBLIC KEY-----\r\n * \r\n * -----BEGIN PUBLIC KEY-----\r\n * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvmpxVY7ld/8DAjz6F6q0\r\n * 5shjg8/4p6047bn6/m8yPy1RBsvIyvuDuGnP/RzPEhzXQ9UJ5Ynmh2XJZgHoE9xb\r\n * nfxL5BXHplJhMtADXKM9bWB11PU1Eioc3+AXBB8QiNFBn2XI5UkO5hPhbb9mJpjA\r\n * 9Uhw8EdfqJP8QetVsI/xrCEbwEXe0xvifRLJbY08/Gp66KpQvy7g8w7VB8wlgePe\r\n * xW3pT13Ap6vuC+mQuJPyiHvSxjEKHgqePji9NP3tJUFQjcECqcm0yV7/2d0t/pbC\r\n * m+ZH1sadZspQCEPPrtbkQBlvHb4OLiIWPGHKSMeRFvp3IWcmdJqXahxLCUS1Eh6M\r\n * AQIDAQAB\r\n * -----END PUBLIC KEY-----\r\n *\r\n * Bytes can be got via \r\n * $ openssl rsa -pubin -in key.pub -text -noout\r\n */\r\n\r\n private publisKeysHex = [{\r\n modulus: 'c150023e2f70db7985ded064759cfecf0af328e69a41daf4d6f01b538135a6f91f8f8b2a0ec9ba9720ce352efcf6c5680ffc424bd634864902de0b4bd6d49f4e580230e3ae97d95c8b19442b3c0a10d8f5633fecedd6926a7f6dab0ddb7d457f9ea81b8465fcd6fffeed114011df91c059caedaf97625f6c96ecc74725556934ef781d866b34f011fce4d835a090196e9a5f0e4449af7eb697ddb9076494ca5f81104a305b6dd27665722c46b60e5df680fb16b210607ef217652e60236c255f6a28315f4083a96791d7214bf64c1df4fd0db1944fb26a2a57031b32eee64ad15a8ba68885cde74a5bfc920f6abf59ba5c75506373e7130f9042da922179251f',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'aeec36c8ffc109cb099624685b97815415657bd76d8c9c3e398103d7ad16c9bba6f525ed0412d7ae2c2de2b44e77d72cbf4b7438709a4e646a05c43427c7f184debf72947519680e651500890c6832796dd11f772c25ff8f576755afe055b0a3752c696eb7d8da0d8be1faf38c9bdd97ce0a77d3916230c4032167100edd0f9e7a3a9b602d04367b689536af0d64b613ccba7962939d3b57682beb6dae5b608130b2e52aca78ba023cf6ce806b1dc49c72cf928a7199d22e3d7ac84e47bc9427d0236945d10dbd15177bab413fbf0edfda09f014c7a7da088dde9759702ca760af2b8e4e97cc055c617bd74c3d97008635b98dc4d621b4891da9fb0473047927',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'bdf2c77d81f6afd47bd30f29ac76e55adfe70e487e5e48297e5a9055c9c07d2b93b4ed3994d3eca5098bf18d978d54f8b7c713eb10247607e69af9ef44f38e28f8b439f257a11572945cc0406fe3f37bb92b79112db69eedf2dc71584a661638ea5becb9e23585074b80d57d9f5710dd30d2da940e0ada2f1b878397dc1a72b5ce2531b6f7dd158e09c828d03450ca0ff8a174deacebcaa22dde84ef66ad370f259d18af806638012da0ca4a70baa83d9c158f3552bc9158e69bf332a45809e1c36905a5caa12348dd57941a482131be7b2355a5f4635374f3bd3ddf5ff925bf4809ee27c1e67d9120c5fe08a9de458b1b4a3c5d0a428437f2beca81f4e2d5ff',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'b3f762b739be98f343eb1921cf0148cfa27ff7af02b6471213fed9daa0098976e667750324f1abcea4c31e43b7d11f1579133f2b3d9fe27474e462058884e5e1b123be9cbbc6a443b2925c08520e7325e6f1a6d50e117eb61ea49d2534c8bb4d2ae4153fabe832b9edf4c5755fdd8b19940b81d1d96cf433d19e6a22968a85dc80f0312f596bd2530c1cfb28b5fe019ac9bc25cd9c2a5d8a0f3a1c0c79bcca524d315b5e21b5c26b46babe3d75d06d1cd33329ec782a0f22891ed1db42a1d6c0dea431428bc4d7aabdcf3e0eb6fda4e23eb7733e7727e9a1915580796c55188d2596d2665ad1182ba7abf15aaa5a8b779ea996317a20ae044b820bff35b6e8a1',\r\n exponent: '010001'\r\n }, {\r\n modulus: 'be6a71558ee577ff03023cfa17aab4e6c86383cff8a7ad38edb9fafe6f323f2d5106cbc8cafb83b869cffd1ccf121cd743d509e589e68765c96601e813dc5b9dfc4be415c7a6526132d0035ca33d6d6075d4f535122a1cdfe017041f1088d1419f65c8e5490ee613e16dbf662698c0f54870f0475fa893fc41eb55b08ff1ac211bc045ded31be27d12c96d8d3cfc6a7ae8aa50bf2ee0f30ed507cc2581e3dec56de94f5dc0a7abee0be990b893f2887bd2c6310a1e0a9e3e38bd34fded2541508dc102a9c9b4c95effd9dd2dfe96c29be647d6c69d66ca500843cfaed6e440196f1dbe0e2e22163c61ca48c79116fa77216726749a976a1c4b0944b5121e8c01',\r\n exponent: '010001'\r\n }];\r\n\r\n private publicKeysParsed: {\r\n [hex: string]: {\r\n modulus: string,\r\n exponent: string\r\n }\r\n } = {};\r\n private prepared = false;\r\n private preparePromise: Promise<void> = null;\r\n\r\n // prepareRsaKeys\r\n public prepare(): Promise<void> {\r\n if(this.preparePromise) return this.preparePromise;\r\n else if(this.prepared) {\r\n return Promise.resolve();\r\n }\r\n\r\n return this.preparePromise = Promise.all(this.publisKeysHex.map(keyParsed => {\r\n let RSAPublicKey = new TLSerialization();\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.modulus), 'n');\r\n RSAPublicKey.storeBytes(bytesFromHex(keyParsed.exponent), 'e');\r\n\r\n let buffer = RSAPublicKey.getBuffer();\r\n\r\n return CryptoWorker.sha1Hash(buffer).then(hash => {\r\n let fingerprintBytes = bytesFromArrayBuffer(hash).slice(-8);\r\n fingerprintBytes.reverse();\r\n \r\n this.publicKeysParsed[bytesToHex(fingerprintBytes).toLowerCase()] = {\r\n modulus: keyParsed.modulus,\r\n exponent: keyParsed.exponent\r\n };\r\n });\r\n })).then(() => {\r\n this.prepared = true;\r\n\r\n //console.log('[MT] Prepared keys');\r\n this.preparePromise = null;\r\n });\r\n }\r\n\r\n // selectRsaKeyByFingerPrint\r\n public async select(fingerprints: Array<any>) {\r\n await this.prepare();\r\n\r\n var fingerprintHex, foundKey, i;\r\n for(i = 0; i < fingerprints.length; i++) {\r\n //fingerprintHex = bigStringInt(fingerprints[i]).toString(16);\r\n fingerprintHex = bigInt2str(str2bigInt(fingerprints[i], 10), 16).toLowerCase();\r\n\r\n if(fingerprintHex.length < 16) {\r\n fingerprintHex = new Array(16 - fingerprintHex.length).fill('0').join('') + fingerprintHex;\r\n }\r\n\r\n //console.log(fingerprintHex, this.publicKeysParsed);\r\n if(foundKey = this.publicKeysParsed[fingerprintHex]) {\r\n return Object.assign({\r\n fingerprint: fingerprints[i]\r\n }, foundKey);\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n}\r\n\r\nexport default new RSAKeysManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { TLSerialization, TLDeserialization } from \"./tl_utils\";\r\nimport dcConfigurator from \"./dcConfigurator\";\r\nimport rsaKeysManager from \"./rsaKeysManager\";\r\nimport timeManager from \"./timeManager\";\r\n\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\n\r\nimport { logger, LogTypes } from \"../logger\";\r\nimport { bytesCmp, bytesToHex, bytesFromHex, bytesXor } from \"../../helpers/bytes\";\r\nimport DEBUG from \"../../config/debug\";\r\nimport { cmp, int2bigInt, one, pow, str2bigInt, sub } from \"../../vendor/leemon\";\r\n\r\n/* let fNewNonce: any = bytesFromHex('8761970c24cb2329b5b2459752c502f3057cb7e8dbab200e526e8767fdc73b3c').reverse();\r\nlet fNonce: any = bytesFromHex('b597720d11faa5914ef485c529cde414').reverse();\r\nlet fResult: any = new Uint8Array(bytesFromHex('000000000000000001b473a0661b285e480000006324160514e4cd29c585f44e91a5fa110d7297b5c0c4134c84893db5715ecd56af5ed618082182053cc5de91cd00000015c4b51c02000000a5b7f709355fc30b216be86c022bb4c3'));\r\n\r\nfNewNonce = false;\r\nfNonce = false;\r\nfResult = false; */\r\n\r\ntype AuthOptions = {\r\n dcId: number,\r\n nonce: Uint8Array,\r\n \r\n serverNonce?: Uint8Array,\r\n pq?: Uint8Array,\r\n fingerprints?: string[],\r\n publicKey?: {\r\n modulus: string,\r\n exponent: string,\r\n fingerprint: string\r\n },\r\n \r\n // good\r\n p?: number[],\r\n q?: number[],\r\n \r\n newNonce?: Uint8Array,\r\n \r\n retry?: number,\r\n \r\n b?: number[],\r\n g?: number,\r\n gA?: Uint8Array,\r\n dhPrime?: Uint8Array,\r\n \r\n tmpAesKey?: Uint8Array,\r\n tmpAesIv?: Uint8Array,\r\n \r\n authKeyId?: Uint8Array,\r\n authKey?: number[],\r\n serverSalt?: number[],\r\n\r\n localTime?: number,\r\n serverTime?: any\r\n};\r\n\r\nexport class Authorizer {\r\n private cached: {\r\n [dcId: number]: Promise<AuthOptions>\r\n } = {};\r\n \r\n private log: ReturnType<typeof logger>;\r\n \r\n constructor() {\r\n this.log = logger(`AUTHORIZER`, LogTypes.Error | LogTypes.Log);\r\n }\r\n \r\n public mtpSendPlainRequest(dcId: number, requestArray: Uint8Array) {\r\n const requestLength = requestArray.byteLength;\r\n //requestArray = new /* Int32Array */Uint8Array(requestBuffer);\r\n \r\n const header = new TLSerialization();\r\n header.storeLongP(0, 0, 'auth_key_id'); // Auth key\r\n header.storeLong(timeManager.generateId(), 'msg_id'); // Msg_id\r\n header.storeInt(requestLength, 'request_length');\r\n \r\n const headerArray = header.getBytes(true) as Uint8Array;\r\n const resultArray = new Uint8Array(headerArray.byteLength + requestLength);\r\n resultArray.set(headerArray);\r\n resultArray.set(requestArray, headerArray.length);\r\n \r\n /* var headerBuffer = header.getBuffer(),\r\n headerArray = new Int32Array(headerBuffer);\r\n var headerLength = headerBuffer.byteLength;\r\n \r\n var resultBuffer = new ArrayBuffer(headerLength + requestLength),\r\n resultArray = new Int32Array(resultBuffer);\r\n \r\n resultArray.set(headerArray);\r\n resultArray.set(requestArray, headerArray.length);\r\n \r\n const requestData = xhrSendBuffer ? resultBuffer : resultArray; */\r\n const transport = dcConfigurator.chooseServer(dcId);\r\n const baseError = {\r\n code: 406,\r\n type: 'NETWORK_BAD_RESPONSE',\r\n transport: transport\r\n };\r\n \r\n if(DEBUG) {\r\n this.log('mtpSendPlainRequest: creating requestPromise');\r\n }\r\n \r\n const promise = transport.send(resultArray) as any as Promise<Uint8Array>;\r\n return promise.then(result => {\r\n if(DEBUG) {\r\n this.log('mtpSendPlainRequest: in good sector', result);\r\n }\r\n \r\n if(!result || !result.byteLength) {\r\n return Promise.reject(baseError);\r\n }\r\n \r\n try {\r\n /* result = fResult ? fResult : result;\r\n fResult = new Uint8Array(0); */\r\n \r\n const deserializer = new TLDeserialization(result, {mtproto: true});\r\n const auth_key_id = deserializer.fetchLong('auth_key_id');\r\n if(auth_key_id !== '0') this.log.error('auth_key_id !== 0', auth_key_id);\r\n \r\n const msg_id = deserializer.fetchLong('msg_id');\r\n if(msg_id === '0') this.log.error('msg_id === 0', msg_id);\r\n \r\n const msg_len = deserializer.fetchInt('msg_len');\r\n if(!msg_len) this.log.error('no msg_len', msg_len);\r\n \r\n return deserializer;\r\n } catch(e) {\r\n this.log.error('mtpSendPlainRequest: deserialization went bad', e);\r\n const error = Object.assign(baseError, {originalError: e});\r\n throw error;\r\n }\r\n }, error => {\r\n if(!error.message && !error.type) {\r\n error = Object.assign(baseError, {\r\n originalError: error\r\n });\r\n }\r\n \r\n return Promise.reject(error);\r\n });\r\n }\r\n \r\n public async mtpSendReqPQ(auth: AuthOptions) {\r\n var request = new TLSerialization({mtproto: true});\r\n \r\n request.storeMethod('req_pq_multi', {nonce: auth.nonce});\r\n \r\n // need\r\n rsaKeysManager.prepare().then(() => {});\r\n \r\n if(DEBUG) {\r\n this.log('Send req_pq', auth.nonce.hex);\r\n }\r\n try {\r\n var deserializer = await this.mtpSendPlainRequest(auth.dcId, request.getBytes(true));\r\n } catch(error) {\r\n this.log.error('req_pq error', error.message);\r\n throw error;\r\n }\r\n \r\n var response = deserializer.fetchObject('ResPQ');\r\n \r\n if(response._ !== 'resPQ') {\r\n throw new Error('[MT] resPQ response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n this.log.error(auth.nonce, response.nonce);\r\n throw new Error('[MT] resPQ nonce mismatch');\r\n }\r\n \r\n //auth.serverNonce = response.server_nonce;\r\n auth.serverNonce = new Uint8Array(response.server_nonce); // need\r\n auth.pq = response.pq;\r\n auth.fingerprints = response.server_public_key_fingerprints;\r\n \r\n if(DEBUG) {\r\n this.log('Got ResPQ', bytesToHex(auth.serverNonce), bytesToHex(auth.pq), auth.fingerprints);\r\n }\r\n \r\n let publicKey = await rsaKeysManager.select(auth.fingerprints);\r\n if(!publicKey) {\r\n throw new Error('[MT] No public key found');\r\n }\r\n \r\n auth.publicKey = publicKey;\r\n \r\n if(DEBUG) {\r\n this.log('PQ factorization start', auth.pq);\r\n }\r\n \r\n try {\r\n var pAndQ = await CryptoWorker.factorize(auth.pq);\r\n } catch(error) {\r\n this.log.error('worker error factorize', error);\r\n throw error;\r\n }\r\n \r\n auth.p = pAndQ[0];\r\n auth.q = pAndQ[1];\r\n \r\n if(DEBUG) {\r\n this.log('PQ factorization done', pAndQ);\r\n }\r\n /* let p = new Uint32Array(new Uint8Array(auth.p).buffer)[0];\r\n let q = new Uint32Array(new Uint8Array(auth.q).buffer)[0];\r\n console.log(dT(), 'PQ factorization done', pAndQ, p.toString(16), q.toString(16)); */\r\n \r\n return this.mtpSendReqDhParams(auth);\r\n }\r\n \r\n public async mtpSendReqDhParams(auth: AuthOptions) {\r\n auth.newNonce = new Uint8Array(32).randomize();\r\n /* auth.newNonce = new Array(32); // need array, not uint8array!\r\n MTProto.secureRandom.nextBytes(auth.newNonce); */\r\n \r\n //console.log(\"TCL: Authorizer -> mtpSendReqDhParams -> auth.newNonce\", auth.newNonce)\r\n \r\n // remove\r\n // auth.newNonce = fNewNonce ? fNewNonce : auth.newNonce;\r\n // console.log(\"TCL: Authorizer -> mtpSendReqDhParams -> auth.newNonce\", auth.newNonce);\r\n \r\n let p_q_inner_data = {\r\n _: 'p_q_inner_data',\r\n pq: auth.pq,\r\n p: auth.p,\r\n q: auth.q,\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n new_nonce: auth.newNonce\r\n };\r\n \r\n let data = new TLSerialization({mtproto: true});\r\n data.storeObject(p_q_inner_data, 'P_Q_inner_data', 'DECRYPTED_DATA');\r\n /* console.log('p_q_inner_data', p_q_inner_data, \r\n bytesToHex(bytesFromArrayBuffer(data.getBuffer())), \r\n sha1BytesSync(data.getBuffer()),\r\n bytesFromArrayBuffer(await CryptoWorker.sha1Hash(data.getBuffer()))); */\r\n \r\n let uint8Data = data.getBytes(true);\r\n let sha1Hashed = await CryptoWorker.sha1Hash(uint8Data);\r\n \r\n //var dataWithHash = sha1BytesSync(data.getBuffer()).concat(data.getBytes() as number[]);\r\n let dataWithHash = sha1Hashed.concat(uint8Data);\r\n \r\n //dataWithHash = addPadding(dataWithHash, 255);\r\n //dataWithHash = dataWithHash.concat(bytesFromHex('96228ea7790e71caaabc2ab67f4412e9aa224c664d232cc08617a32ce1796aa052da4a737083211689858f461e4473fd6394afd3aa0c8014840dc13f47beaf4fc3b9229aea9cfa83f9f6e676e50ee7676542fb75606879ee7e65cf3a2295b4ba0934ceec1011560c62395a6e9593bfb117cd0da75ba56723672d100ac17ec4d805aa59f7852e3a25a79ee4'));\r\n //console.log('sha1Hashed', bytesToHex(sha1Hashed), 'dataWithHash', bytesToHex(dataWithHash), dataWithHash.length);\r\n \r\n let rsaEncrypted = await CryptoWorker.rsaEncrypt(auth.publicKey, dataWithHash);\r\n //let rsaEncrypted = await CryptoWorker.rsaEncrypt(auth.publicKey, dataWithHash);\r\n \r\n //console.log('rsaEncrypted', rsaEncrypted, new Uint8Array(rsaEncrypted).hex);\r\n \r\n let req_DH_params = {\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n p: auth.p,\r\n q: auth.q,\r\n public_key_fingerprint: auth.publicKey.fingerprint,\r\n encrypted_data: rsaEncrypted\r\n };\r\n \r\n var request = new TLSerialization({mtproto: true});\r\n request.storeMethod('req_DH_params', req_DH_params);\r\n \r\n let requestBytes = request.getBytes(true);\r\n \r\n if(DEBUG) {\r\n this.log('Send req_DH_params', req_DH_params/* , requestBytes.hex */);\r\n }\r\n \r\n try {\r\n var deserializer = await this.mtpSendPlainRequest(auth.dcId, requestBytes);\r\n } catch(error) {\r\n this.log.error('Send req_DH_params FAIL!', error);\r\n throw error;\r\n }\r\n \r\n var response = deserializer.fetchObject('Server_DH_Params', 'RESPONSE');\r\n \r\n if(DEBUG) {\r\n this.log('Sent req_DH_params, response:', response);\r\n }\r\n \r\n if(response._ !== 'server_DH_params_fail' && response._ !== 'server_DH_params_ok') {\r\n throw new Error('[MT] Server_DH_Params response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] Server_DH_Params nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] Server_DH_Params server_nonce mismatch');\r\n }\r\n \r\n if(response._ === 'server_DH_params_fail') {\r\n //var newNonceHash = sha1BytesSync(auth.newNonce).slice(-16);\r\n var newNonceHash = (await CryptoWorker.sha1Hash(auth.newNonce)).slice(-16);\r\n if(!bytesCmp(newNonceHash, response.new_nonce_hash)) {\r\n throw new Error('[MT] server_DH_params_fail new_nonce_hash mismatch');\r\n }\r\n \r\n throw new Error('[MT] server_DH_params_fail');\r\n }\r\n \r\n // fill auth object\r\n try {\r\n await this.mtpDecryptServerDhDataAnswer(auth, response.encrypted_answer);\r\n } catch(e) {\r\n this.log.error('mtpDecryptServerDhDataAnswer FAILED!', e);\r\n throw e;\r\n }\r\n \r\n //console.log(dT(), 'mtpSendReqDhParams: executing mtpSendSetClientDhParams...');\r\n \r\n return this.mtpSendSetClientDhParams(auth as any); // костыль\r\n }\r\n \r\n public async mtpDecryptServerDhDataAnswer(auth: AuthOptions, encryptedAnswer: any) {\r\n auth.localTime = Date.now();\r\n \r\n // can't concat Array with Uint8Array!\r\n //auth.tmpAesKey = sha1BytesSync(auth.newNonce.concat(auth.serverNonce)).concat(sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(0, 12));\r\n //auth.tmpAesIv = sha1BytesSync(auth.serverNonce.concat(auth.newNonce)).slice(12).concat(sha1BytesSync([].concat(auth.newNonce, auth.newNonce)), auth.newNonce.slice(0, 4));\r\n auth.tmpAesKey = (await CryptoWorker.sha1Hash(auth.newNonce.concat(auth.serverNonce)))\r\n .concat((await CryptoWorker.sha1Hash(auth.serverNonce.concat(auth.newNonce))).slice(0, 12));\r\n \r\n auth.tmpAesIv = (await CryptoWorker.sha1Hash(auth.serverNonce.concat(auth.newNonce))).slice(12)\r\n .concat(await CryptoWorker.sha1Hash(auth.newNonce.concat(auth.newNonce)), auth.newNonce.slice(0, 4));\r\n \r\n \r\n /* console.log(auth.serverNonce.concat(auth.newNonce));\r\n console.log(auth.newNonce.concat(auth.serverNonce));\r\n console.log(auth.newNonce.concat(auth.newNonce)); */\r\n \r\n \r\n //var answerWithHash = aesDecryptSync(encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv);\r\n var answerWithHash = new Uint8Array(await CryptoWorker.aesDecrypt(encryptedAnswer, auth.tmpAesKey, auth.tmpAesIv));\r\n \r\n var hash = answerWithHash.slice(0, 20);\r\n var answerWithPadding = answerWithHash.slice(20);\r\n \r\n // console.log('hash', hash);\r\n \r\n var deserializer = new TLDeserialization(answerWithPadding, {mtproto: true});\r\n var response = deserializer.fetchObject('Server_DH_inner_data');\r\n \r\n if(response._ !== 'server_DH_inner_data') {\r\n throw new Error('[MT] server_DH_inner_data response invalid: ' + response);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] server_DH_inner_data nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] server_DH_inner_data serverNonce mismatch');\r\n }\r\n \r\n if(DEBUG) {\r\n this.log('Done decrypting answer');\r\n }\r\n auth.g = response.g;\r\n auth.dhPrime = response.dh_prime;\r\n auth.gA = response.g_a;\r\n auth.serverTime = response.server_time;\r\n auth.retry = 0;\r\n \r\n this.mtpVerifyDhParams(auth.g, auth.dhPrime, auth.gA);\r\n \r\n var offset = deserializer.getOffset();\r\n \r\n //if(!bytesCmp(hash, sha1BytesSync(answerWithPadding.slice(0, offset)))) {\r\n if(!bytesCmp(hash, await CryptoWorker.sha1Hash(answerWithPadding.slice(0, offset)))) {\r\n throw new Error('[MT] server_DH_inner_data SHA1-hash mismatch');\r\n }\r\n \r\n timeManager.applyServerTime(auth.serverTime, auth.localTime);\r\n }\r\n \r\n public mtpVerifyDhParams(g: number, dhPrime: Uint8Array, gA: Uint8Array) {\r\n if(DEBUG) {\r\n this.log('Verifying DH params', g, dhPrime, gA);\r\n }\r\n\r\n var dhPrimeHex = bytesToHex(dhPrime);\r\n if(g !== 3 || dhPrimeHex !== 'c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b') {\r\n // The verified value is from https://core.telegram.org/mtproto/security_guidelines\r\n throw new Error('[MT] DH params are not verified: unknown dhPrime');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('dhPrime cmp OK');\r\n }\r\n \r\n //var gABigInt = new BigInteger(bytesToHex(gA), 16);\r\n const _gABigInt = str2bigInt(bytesToHex(gA), 16);\r\n //var dhPrimeBigInt = new BigInteger(dhPrimeHex, 16);\r\n const _dhPrimeBigInt = str2bigInt(dhPrimeHex, 16);\r\n \r\n //this.log('gABigInt.compareTo(BigInteger.ONE) <= 0', gABigInt.compareTo(BigInteger.ONE), BigInteger.ONE.compareTo(BigInteger.ONE), greater(_gABigInt, one));\r\n //if(gABigInt.compareTo(BigInteger.ONE) <= 0) {\r\n if(cmp(_gABigInt, one) <= 0) {\r\n throw new Error('[MT] DH params are not verified: gA <= 1');\r\n }\r\n \r\n /* this.log('gABigInt.compareTo(dhPrimeBigInt.subtract(BigInteger.ONE)) >= 0', gABigInt.compareTo(dhPrimeBigInt.subtract(BigInteger.ONE)),\r\n greater(gABigInt, sub(_dhPrimeBigInt, one))); */\r\n //if(gABigInt.compareTo(dhPrimeBigInt.subtract(BigInteger.ONE)) >= 0) {\r\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, one)) >= 0) {\r\n throw new Error('[MT] DH params are not verified: gA >= dhPrime - 1');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('1 < gA < dhPrime-1 OK');\r\n }\r\n \r\n \r\n //var two = new BigInteger(/* null */'');\r\n //two.fromInt(2);\r\n const _two = int2bigInt(2, 32, 0);\r\n //this.log('_two:', bigInt2str(_two, 16), two.toString(16));\r\n let perf = performance.now();\r\n //var twoPow = two.pow(2048 - 64);\r\n //console.log('jsbn pow', performance.now() - perf);\r\n perf = performance.now();\r\n const _twoPow = pow(_two, 2048 - 64);\r\n //console.log('leemon pow', performance.now() - perf);\r\n //this.log('twoPow:', twoPow.toString(16), bigInt2str(_twoPow, 16));\r\n \r\n // this.log('gABigInt.compareTo(twoPow) < 0');\r\n //if(gABigInt.compareTo(twoPow) < 0) {\r\n if(cmp(_gABigInt, _twoPow) < 0) {\r\n throw new Error('[MT] DH params are not verified: gA < 2^{2048-64}');\r\n }\r\n //if(gABigInt.compareTo(dhPrimeBigInt.subtract(twoPow)) >= 0) {\r\n if(cmp(_gABigInt, sub(_dhPrimeBigInt, _twoPow)) >= 0) {\r\n throw new Error('[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}');\r\n }\r\n\r\n if(DEBUG) {\r\n this.log('2^{2048-64} < gA < dhPrime-2^{2048-64} OK');\r\n }\r\n \r\n return true;\r\n }\r\n \r\n public async mtpSendSetClientDhParams(auth: AuthOptions): Promise<AuthOptions> {\r\n var gBytes = bytesFromHex(auth.g.toString(16));\r\n \r\n auth.b = new Array(256);\r\n auth.b = [...new Uint8Array(auth.b.length).randomize()];\r\n //MTProto.secureRandom.nextBytes(auth.b);\r\n \r\n try {\r\n var gB = await CryptoWorker.modPow(gBytes, auth.b, auth.dhPrime);\r\n } catch(error) {\r\n throw error;\r\n }\r\n \r\n var data = new TLSerialization({mtproto: true});\r\n data.storeObject({\r\n _: 'client_DH_inner_data',\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n retry_id: [0, auth.retry++],\r\n g_b: gB\r\n }, 'Client_DH_Inner_Data');\r\n \r\n //var dataWithHash = sha1BytesSync(data.getBuffer()).concat(data.getBytes());\r\n var dataWithHash = (await CryptoWorker.sha1Hash(data.getBuffer())).concat(data.getBytes());\r\n \r\n //var encryptedData = aesEncryptSync(dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\r\n var encryptedData = await CryptoWorker.aesEncrypt(dataWithHash, auth.tmpAesKey, auth.tmpAesIv);\r\n \r\n var request = new TLSerialization({mtproto: true});\r\n request.storeMethod('set_client_DH_params', {\r\n nonce: auth.nonce,\r\n server_nonce: auth.serverNonce,\r\n encrypted_data: encryptedData\r\n });\r\n \r\n if(DEBUG) {\r\n this.log('Send set_client_DH_params');\r\n }\r\n \r\n try {\r\n var deserializer = await this.mtpSendPlainRequest(auth.dcId, request.getBytes(true));\r\n } catch(err) {\r\n throw err;\r\n }\r\n \r\n let response = deserializer.fetchObject('Set_client_DH_params_answer');\r\n \r\n if(response._ !== 'dh_gen_ok' && response._ !== 'dh_gen_retry' && response._ !== 'dh_gen_fail') {\r\n throw new Error('[MT] Set_client_DH_params_answer response invalid: ' + response._);\r\n }\r\n \r\n if(!bytesCmp(auth.nonce, response.nonce)) {\r\n throw new Error('[MT] Set_client_DH_params_answer nonce mismatch');\r\n }\r\n \r\n if(!bytesCmp(auth.serverNonce, response.server_nonce)) {\r\n throw new Error('[MT] Set_client_DH_params_answer server_nonce mismatch');\r\n }\r\n \r\n try {\r\n var authKey = await CryptoWorker.modPow(auth.gA, auth.b, auth.dhPrime);\r\n } catch(err) {\r\n throw authKey;\r\n }\r\n \r\n //var authKeyHash = sha1BytesSync(authKey),\r\n let authKeyHash = await CryptoWorker.sha1Hash(new Uint8Array(authKey)),\r\n authKeyAux = authKeyHash.slice(0, 8),\r\n authKeyId = authKeyHash.slice(-8);\r\n \r\n if(DEBUG) {\r\n this.log('Got Set_client_DH_params_answer', response._, authKey);\r\n }\r\n switch(response._) {\r\n case 'dh_gen_ok':\r\n var newNonceHash1 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([1], authKeyAux))).slice(-16);\r\n //var newNonceHash1 = sha1BytesSync(auth.newNonce.concat([1], authKeyAux)).slice(-16);\r\n \r\n if(!bytesCmp(newNonceHash1, response.new_nonce_hash1)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch');\r\n }\r\n \r\n var serverSalt = bytesXor(auth.newNonce.slice(0, 8), auth.serverNonce.slice(0, 8));\r\n if(DEBUG) {\r\n this.log('Auth successfull!', authKeyId, authKey, serverSalt);\r\n }\r\n \r\n auth.authKeyId = authKeyId;\r\n auth.authKey = authKey;\r\n auth.serverSalt = serverSalt;\r\n \r\n return auth;\r\n break;\r\n \r\n case 'dh_gen_retry':\r\n //var newNonceHash2 = sha1BytesSync(auth.newNonce.concat([2], authKeyAux)).slice(-16);\r\n var newNonceHash2 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([2], authKeyAux))).slice(-16);\r\n if(!bytesCmp(newNonceHash2, response.new_nonce_hash2)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch');\r\n }\r\n \r\n return this.mtpSendSetClientDhParams(auth);\r\n \r\n case 'dh_gen_fail':\r\n //var newNonceHash3 = sha1BytesSync(auth.newNonce.concat([3], authKeyAux)).slice(-16);\r\n var newNonceHash3 = (await CryptoWorker.sha1Hash(auth.newNonce.concat([3], authKeyAux))).slice(-16);\r\n if(!bytesCmp(newNonceHash3, response.new_nonce_hash3)) {\r\n throw new Error('[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch');\r\n }\r\n \r\n throw new Error('[MT] Set_client_DH_params_answer fail');\r\n }\r\n }\r\n \r\n // mtpAuth\r\n public async auth(dcId: number): Promise<AuthOptions> {\r\n if(dcId in this.cached) {\r\n return this.cached[dcId];\r\n }\r\n \r\n let nonce = /* fNonce ? fNonce : */new Uint8Array(16).randomize();\r\n /* var nonce = new Array(16);\r\n MTProto.secureRandom.nextBytes(nonce); */\r\n \r\n if(!dcConfigurator.chooseServer(dcId)) {\r\n return Promise.reject(new Error('[MT] No server found for dc ' + dcId));\r\n }\r\n\r\n try {\r\n let promise = this.mtpSendReqPQ({dcId, nonce});\r\n this.cached[dcId] = promise;\r\n return await promise;\r\n } catch(err) {\r\n delete this.cached[dcId];\r\n throw err;\r\n }\r\n }\r\n}\r\n\r\nexport default new Authorizer();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport type { UserAuth } from './mtproto_config';\r\nimport sessionStorage from '../sessionStorage';\r\nimport MTPNetworker, { MTMessage } from './networker';\r\nimport { isObject } from './bin_utils';\r\nimport networkerFactory from './networkerFactory';\r\n//import { telegramMeWebService } from './mtproto';\r\nimport authorizer from './authorizer';\r\nimport dcConfigurator, { ConnectionType, TransportType } from './dcConfigurator';\r\nimport { logger } from '../logger';\r\nimport type { InvokeApiOptions } from '../../types';\r\nimport type { MethodDeclMap } from '../../layer';\r\nimport { CancellablePromise, deferredPromise } from '../../helpers/cancellablePromise';\r\nimport { bytesFromHex, bytesToHex } from '../../helpers/bytes';\r\n//import { clamp } from '../../helpers/number';\r\nimport { ctx, isSafari } from '../../helpers/userAgent';\r\nimport App from '../../config/app';\r\nimport { MOUNT_CLASS_TO } from '../../config/debug';\r\nimport IDBStorage from '../idb';\r\nimport CryptoWorker from \"../crypto/cryptoworker\";\r\n\r\n \r\n \r\n \r\n\r\n/* var networker = apiManager.cachedNetworkers.websocket.upload[2];\r\nnetworker.wrapMtpMessage({\r\n _: 'msgs_state_req',\r\n msg_ids: [\"6888292542796810828\"]\r\n}, {\r\n notContentRelated: true\r\n}).then(res => {\r\n console.log('status', res);\r\n}); */\r\n\r\n//console.error('apiManager included!');\r\n// TODO: если запрос словил флуд, нужно сохранять его параметры и возвращать тот же промис на новый такой же запрос, например - загрузка истории\r\n\r\nexport type ApiError = Partial<{\r\n code: number,\r\n type: string,\r\n description: string,\r\n originalError: any,\r\n stack: string,\r\n handled: boolean,\r\n input: string,\r\n message: ApiError\r\n}>;\r\n\r\n/* class RotatableArray<T> {\r\n public array: Array<T> = [];\r\n private lastIndex = -1;\r\n\r\n public get() {\r\n this.lastIndex = clamp(this.lastIndex + 1, 0, this.array.length - 1);\r\n return this.array[this.lastIndex];\r\n }\r\n} */\r\n\r\nexport class ApiManager {\r\n private cachedNetworkers: {\r\n [transportType in TransportType]: {\r\n [connectionType in ConnectionType]: {\r\n [dcId: number]: MTPNetworker[]\r\n }\r\n }\r\n } = {} as any;\r\n \r\n private cachedExportPromise: {[x: number]: Promise<unknown>} = {};\r\n private gettingNetworkers: {[dcIdAndType: string]: Promise<MTPNetworker>} = {};\r\n private baseDcId = 0;\r\n \r\n //public telegramMeNotified = false;\r\n\r\n private log: ReturnType<typeof logger> = logger('API');\r\n\r\n private afterMessageTempIds: {[tempId: string]: string} = {};\r\n\r\n //private lol = false;\r\n \r\n constructor() {\r\n //MtpSingleInstanceService.start();\r\n \r\n /* AppStorage.get<number>('dc').then((dcId) => {\r\n if(dcId) {\r\n this.baseDcId = dcId;\r\n }\r\n }); */\r\n }\r\n \r\n /* public telegramMeNotify(newValue: boolean) {\r\n if(this.telegramMeNotified !== newValue) {\r\n this.telegramMeNotified = newValue;\r\n //telegramMeWebService.setAuthorized(this.telegramMeNotified);\r\n }\r\n } */\r\n\r\n public async getBaseDcId() {\r\n if(this.baseDcId) {\r\n return this.baseDcId;\r\n }\r\n\r\n const baseDcId = await sessionStorage.get('dc');\r\n if(!this.baseDcId) {\r\n if(!baseDcId) {\r\n this.setBaseDcId(App.baseDcId);\r\n } else {\r\n this.baseDcId = baseDcId;\r\n }\r\n }\r\n\r\n return this.baseDcId;\r\n }\r\n \r\n // mtpSetUserAuth\r\n public async setUserAuth(userAuth: UserAuth) {\r\n if(!userAuth.dcID) {\r\n const baseDcId = await this.getBaseDcId();\r\n userAuth.dcID = baseDcId;\r\n }\r\n\r\n sessionStorage.set({\r\n user_auth: userAuth\r\n });\r\n \r\n //this.telegramMeNotify(true);\r\n\r\n \r\n \r\n \r\n }\r\n\r\n public setBaseDcId(dcId: number) {\r\n this.baseDcId = dcId;\r\n\r\n sessionStorage.set({\r\n dc: this.baseDcId\r\n });\r\n }\r\n \r\n // mtpLogOut\r\n public async logOut() {\r\n const storageKeys: Array<string> = [];\r\n \r\n const prefix = 'dc';\r\n for(let dcId = 1; dcId <= 5; dcId++) {\r\n storageKeys.push(prefix + dcId + '_auth_key');\r\n }\r\n \r\n // WebPushApiManager.forceUnsubscribe(); // WARNING\r\n const storageResult = await Promise.all(storageKeys.map(key => sessionStorage.get(key as any)));\r\n \r\n const logoutPromises: Promise<any>[] = [];\r\n for(let i = 0; i < storageResult.length; i++) {\r\n if(storageResult[i]) {\r\n logoutPromises.push(this.invokeApi('auth.logOut', {}, {dcId: i + 1, ignoreErrors: true}));\r\n }\r\n }\r\n\r\n const clear = () => {\r\n //console.error('apiManager: logOut clear');\r\n \r\n this.baseDcId = 0;\r\n //this.telegramMeNotify(false);\r\n IDBStorage.closeDatabases();\r\n self.postMessage({type: 'clear'});\r\n };\r\n\r\n setTimeout(clear, 1e3);\r\n\r\n //return;\r\n \r\n return Promise.all(logoutPromises).then(() => {\r\n }, (error) => {\r\n error.handled = true;\r\n }).finally(clear)/* .then(() => {\r\n location.pathname = '/';\r\n }) */;\r\n }\r\n \r\n // mtpGetNetworker\r\n public getNetworker(dcId: number, options: InvokeApiOptions = {}): Promise<MTPNetworker> {\r\n const connectionType: ConnectionType = options.fileDownload ? 'download' : (options.fileUpload ? 'upload' : 'client');\r\n //const connectionType: ConnectionType = 'client';\r\n\r\n \r\n \r\n \r\n \r\n \r\n // @ts-ignore\r\n const transportType = 'websocket';\r\n \r\n\r\n if(!this.cachedNetworkers.hasOwnProperty(transportType)) {\r\n this.cachedNetworkers[transportType] = {\r\n client: {},\r\n download: {},\r\n upload: {}\r\n };\r\n }\r\n\r\n const cache = this.cachedNetworkers[transportType][connectionType];\r\n if(!(dcId in cache)) {\r\n cache[dcId] = [];\r\n }\r\n \r\n const networkers = cache[dcId];\r\n // @ts-ignore\r\n const maxNetworkers = connectionType === 'client' || transportType === 'https' ? 1 : (connectionType === 'download' ? 3 : 3);\r\n if(networkers.length >= maxNetworkers) {\r\n let i = networkers.length - 1, found = false;\r\n for(; i >= 0; --i) {\r\n if(networkers[i].isOnline) {\r\n found = true;\r\n break;\r\n }\r\n }\r\n \r\n const networker = found ? networkers.splice(i, 1)[0] : networkers.pop();\r\n networkers.unshift(networker);\r\n return Promise.resolve(networker);\r\n }\r\n \r\n const getKey = [dcId, transportType, connectionType].join('-');\r\n if(this.gettingNetworkers[getKey]) {\r\n return this.gettingNetworkers[getKey];\r\n }\r\n\r\n const ak = 'dc' + dcId + '_auth_key';\r\n const ss = 'dc' + dcId + '_server_salt';\r\n \r\n return this.gettingNetworkers[getKey] = Promise.all([ak, ss].map(key => sessionStorage.get(key as any)))\r\n .then(async([authKeyHex, serverSaltHex]) => {\r\n const transport = dcConfigurator.chooseServer(dcId, connectionType, transportType, false);\r\n let networker: MTPNetworker;\r\n if(authKeyHex && authKeyHex.length === 512) {\r\n if(!serverSaltHex || serverSaltHex.length !== 16) {\r\n serverSaltHex = 'AAAAAAAAAAAAAAAA';\r\n }\r\n \r\n const authKey = bytesFromHex(authKeyHex);\r\n const authKeyId = (await CryptoWorker.sha1Hash(new Uint8Array(authKey))).slice(-8);\r\n const serverSalt = bytesFromHex(serverSaltHex);\r\n \r\n networker = networkerFactory.getNetworker(dcId, authKey, authKeyId, serverSalt, transport, options);\r\n } else {\r\n try { // if no saved state\r\n const auth = await authorizer.auth(dcId);\r\n \r\n const storeObj = {\r\n [ak]: bytesToHex(auth.authKey),\r\n [ss]: bytesToHex(auth.serverSalt)\r\n };\r\n \r\n sessionStorage.set(storeObj);\r\n \r\n networker = networkerFactory.getNetworker(dcId, auth.authKey, auth.authKeyId, auth.serverSalt, transport, options);\r\n } catch(error) {\r\n this.log('Get networker error', error, error.stack);\r\n delete this.gettingNetworkers[getKey];\r\n throw error;\r\n }\r\n }\r\n\r\n /* networker.onConnectionStatusChange = (online) => {\r\n console.log('status:', online);\r\n }; */\r\n\r\n delete this.gettingNetworkers[getKey];\r\n networkers.unshift(networker);\r\n return networker;\r\n });\r\n }\r\n \r\n // mtpInvokeApi\r\n public invokeApi<T extends keyof MethodDeclMap>(method: T, params: MethodDeclMap[T]['req'] = {}, options: InvokeApiOptions = {}): CancellablePromise<MethodDeclMap[T][\"res\"]> {\r\n ///////this.log('Invoke api', method, params, options);\r\n\r\n /* if(!this.lol) {\r\n networkerFactory.updatesProcessor({_: 'new_session_created'}, true);\r\n this.lol = true;\r\n } */\r\n\r\n const deferred = deferredPromise<MethodDeclMap[T]['res']>();\r\n\r\n let afterMessageIdTemp = options.afterMessageId;\r\n if(afterMessageIdTemp) {\r\n deferred.finally(() => {\r\n delete this.afterMessageTempIds[afterMessageIdTemp];\r\n });\r\n }\r\n\r\n if(MOUNT_CLASS_TO) {\r\n deferred.finally(() => {\r\n clearInterval(interval);\r\n });\r\n \r\n const startTime = Date.now();\r\n const interval = ctx.setInterval(() => {\r\n if(!cachedNetworker || !cachedNetworker.isStopped()) {\r\n this.log.error('Request is still processing:', method, params, options, 'time:', (Date.now() - startTime) / 1000);\r\n }\r\n //this.cachedUploadNetworkers[2].requestMessageStatus();\r\n }, 5e3);\r\n }\r\n\r\n const rejectPromise = (error: ApiError) => {\r\n if(!error) {\r\n error = {type: 'ERROR_EMPTY'};\r\n } else if(!isObject(error)) {\r\n error = {message: error};\r\n }\r\n \r\n deferred.reject(error);\r\n\r\n if((error.code === 401 && error.type === 'SESSION_REVOKED') || \r\n (error.code === 406 && error.type === 'AUTH_KEY_DUPLICATED')) {\r\n this.logOut();\r\n }\r\n\r\n if(options.ignoreErrors) {\r\n return;\r\n }\r\n \r\n if(error.code === 406) {\r\n error.handled = true;\r\n }\r\n \r\n if(!options.noErrorBox) {\r\n error.input = method;\r\n error.stack = stack || (error.originalError && error.originalError.stack) || error.stack || (new Error()).stack;\r\n setTimeout(() => {\r\n if(!error.handled) {\r\n if(error.code === 401) {\r\n this.logOut();\r\n } else {\r\n // ErrorService.show({error: error}); // WARNING\r\n }\r\n \r\n error.handled = true;\r\n }\r\n }, 100);\r\n }\r\n };\r\n \r\n let dcId: number;\r\n \r\n let cachedNetworker: MTPNetworker;\r\n let stack = (new Error()).stack || 'empty stack';\r\n const performRequest = (networker: MTPNetworker) => {\r\n if(afterMessageIdTemp) {\r\n options.afterMessageId = this.afterMessageTempIds[afterMessageIdTemp];\r\n }\r\n const promise = (cachedNetworker = networker).wrapApiCall(method, params, options);\r\n if(options.prepareTempMessageId) {\r\n this.afterMessageTempIds[options.prepareTempMessageId] = (options as MTMessage).messageId;\r\n }\r\n\r\n return promise.then(deferred.resolve, (error: ApiError) => {\r\n //if(!options.ignoreErrors) {\r\n if(error.type !== 'FILE_REFERENCE_EXPIRED' && error.type !== 'MSG_WAIT_FAILED') {\r\n this.log.error('Error', error.code, error.type, this.baseDcId, dcId, method, params);\r\n }\r\n \r\n if(error.code === 401 && this.baseDcId === dcId) {\r\n if(error.type !== 'SESSION_PASSWORD_NEEDED') {\r\n sessionStorage.delete('dc')\r\n sessionStorage.delete('user_auth'); // ! возможно тут вообще не нужно это делать, но нужно проверить случай с USER_DEACTIVATED (https://core.telegram.org/api/errors)\r\n //this.telegramMeNotify(false);\r\n }\r\n \r\n rejectPromise(error);\r\n } else if(error.code === 401 && this.baseDcId && dcId !== this.baseDcId) {\r\n if(this.cachedExportPromise[dcId] === undefined) {\r\n const promise = new Promise((exportResolve, exportReject) => {\r\n this.invokeApi('auth.exportAuthorization', {dc_id: dcId}, {noErrorBox: true}).then((exportedAuth) => {\r\n this.invokeApi('auth.importAuthorization', {\r\n id: exportedAuth.id,\r\n bytes: exportedAuth.bytes\r\n }, {dcId, noErrorBox: true}).then(exportResolve, exportReject);\r\n }, exportReject);\r\n });\r\n \r\n this.cachedExportPromise[dcId] = promise;\r\n }\r\n \r\n this.cachedExportPromise[dcId].then(() => {\r\n //(cachedNetworker = networker).wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n this.invokeApi(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n } else if(error.code === 303) {\r\n const newDcId = +error.type.match(/^(PHONE_MIGRATE_|NETWORK_MIGRATE_|USER_MIGRATE_|FILE_MIGRATE_)(\\d+)/)[2];\r\n if(newDcId !== dcId) {\r\n if(options.dcId) {\r\n options.dcId = newDcId;\r\n } else {\r\n this.setBaseDcId(newDcId);\r\n }\r\n \r\n this.getNetworker(newDcId, options).then((networker) => {\r\n networker.wrapApiCall(method, params, options).then(deferred.resolve, rejectPromise);\r\n }, rejectPromise);\r\n }\r\n } else if(!options.rawError && error.code === 420) {\r\n const waitTime = +error.type.match(/^FLOOD_WAIT_(\\d+)/)[1] || 10;\r\n \r\n if(waitTime > (options.floodMaxTimeout !== undefined ? options.floodMaxTimeout : 60)) {\r\n return rejectPromise(error);\r\n }\r\n \r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, waitTime/* (waitTime + 5) */ * 1000); // 03.02.2020\r\n } else if(!options.rawError && error.code === 500) {\r\n if(error.type === 'MSG_WAIT_FAILED') {\r\n afterMessageIdTemp = undefined;\r\n delete options.afterMessageId;\r\n delete this.afterMessageTempIds[options.prepareTempMessageId];\r\n performRequest(cachedNetworker);\r\n return;\r\n }\r\n\r\n const now = Date.now();\r\n if(options.stopTime) {\r\n if(now >= options.stopTime) {\r\n return rejectPromise(error);\r\n }\r\n }\r\n \r\n options.waitTime = options.waitTime ? Math.min(60, options.waitTime * 1.5) : 1;\r\n setTimeout(() => {\r\n performRequest(cachedNetworker);\r\n }, options.waitTime * 1000);\r\n } else {\r\n rejectPromise(error);\r\n }\r\n });\r\n }\r\n \r\n if(dcId = (options.dcId || this.baseDcId)) {\r\n this.getNetworker(dcId, options).then(performRequest, rejectPromise);\r\n } else {\r\n this.getBaseDcId().then(baseDcId => {\r\n this.getNetworker(dcId = baseDcId, options).then(performRequest, rejectPromise);\r\n });\r\n }\r\n\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiManager = new ApiManager();\r\nMOUNT_CLASS_TO.apiManager = apiManager;\r\nexport default apiManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { blobConstruct } from \"../helpers/blob\";\r\n\r\nexport class FileManager {\r\n public blobSupported = true;\r\n \r\n constructor() {\r\n try {\r\n blobConstruct([], '');\r\n } catch(e) {\r\n this.blobSupported = false;\r\n }\r\n }\r\n \r\n public isAvailable() {\r\n return this.blobSupported;\r\n }\r\n \r\n public write(fileWriter: ReturnType<FileManager['getFakeFileWriter']>, bytes: Uint8Array | Blob | string): Promise<void> {\r\n if(bytes instanceof Blob) { // is file bytes\r\n return new Promise((resolve, reject) => {\r\n let fileReader = new FileReader();\r\n fileReader.onload = function(event) {\r\n let arrayBuffer = event.target.result as ArrayBuffer;\r\n \r\n let arr = new Uint8Array(arrayBuffer);\r\n \r\n fileWriter.write(arr).then(resolve, reject);\r\n };\r\n \r\n fileReader.readAsArrayBuffer(bytes);\r\n });\r\n } else {\r\n return fileWriter.write(bytes);\r\n }\r\n }\r\n\r\n public getFakeFileWriter(mimeType: string, saveFileCallback?: (blob: Blob) => Promise<Blob>) {\r\n const blobParts: Array<Uint8Array | string> = [];\r\n const fakeFileWriter = {\r\n write: async(part: Uint8Array | string) => {\r\n if(!this.blobSupported) {\r\n throw false;\r\n }\r\n \r\n blobParts.push(part);\r\n },\r\n truncate: () => {\r\n blobParts.length = 0;\r\n },\r\n finalize: (saveToStorage = true) => {\r\n const blob = blobConstruct(blobParts, mimeType);\r\n\r\n if(saveToStorage && saveFileCallback) {\r\n saveFileCallback(blob);\r\n }\r\n \r\n return blob;\r\n }\r\n };\r\n \r\n return fakeFileWriter;\r\n }\r\n}\r\n\r\nexport default new FileManager();\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from '../config/modes';\r\nimport { blobConstruct } from '../helpers/blob';\r\nimport FileManager from './filemanager';\r\n//import { MOUNT_CLASS_TO } from './mtproto/mtproto_config';\r\n//import { logger } from './polyfill';\r\n\r\nexport default class CacheStorageController {\r\n private static STORAGES: CacheStorageController[] = [];\r\n //public dbName = 'cachedFiles';\r\n private openDbPromise: Promise<Cache>;\r\n\r\n private useStorage = true;\r\n\r\n //private log: ReturnType<typeof logger> = logger('CS');\r\n\r\n constructor(private dbName: string) {\r\n if(Modes.test) {\r\n this.dbName += '_test';\r\n }\r\n \r\n this.openDatabase();\r\n CacheStorageController.STORAGES.push(this);\r\n }\r\n\r\n private openDatabase(): Promise<Cache> {\r\n if(this.openDbPromise) {\r\n return this.openDbPromise;\r\n }\r\n\r\n return this.openDbPromise = caches.open(this.dbName);\r\n }\r\n\r\n public delete(entryName: string) {\r\n return this.timeoutOperation((cache) => {\r\n return cache.delete('/' + entryName);\r\n });\r\n }\r\n\r\n public deleteAll() {\r\n return caches.delete(this.dbName);\r\n }\r\n\r\n public save(entryName: string, response: Response) {\r\n if(!this.useStorage) return Promise.reject('STORAGE_OFFLINE');\r\n\r\n return this.timeoutOperation((cache) => {\r\n return cache.put('/' + entryName, response);\r\n });\r\n }\r\n\r\n public saveFile(fileName: string, blob: Blob | Uint8Array) {\r\n if(!this.useStorage) return Promise.reject('STORAGE_OFFLINE');\r\n\r\n //return Promise.resolve(blobConstruct([blob]));\r\n if(!(blob instanceof Blob)) {\r\n blob = blobConstruct(blob) as Blob;\r\n }\r\n\r\n const response = new Response(blob, {\r\n headers: {\r\n 'Content-Length': '' + blob.size\r\n }\r\n });\r\n \r\n return this.save(fileName, response).then(() => {\r\n return blob as Blob;\r\n });\r\n }\r\n\r\n /* public getBlobSize(blob: any) {\r\n return blob.size || blob.byteLength || blob.length;\r\n } */\r\n\r\n public getFile(fileName: string, method: 'blob' | 'json' | 'text' = 'blob'): Promise<any> {\r\n if(!this.useStorage) return Promise.reject('STORAGE_OFFLINE');\r\n\r\n /* if(method === 'blob') {\r\n return Promise.reject();\r\n } */\r\n\r\n // const str = `get fileName: ${fileName}`;\r\n // console.time(str);\r\n return this.timeoutOperation(async(cache) => {\r\n const response = await cache.match('/' + fileName);\r\n\r\n if(!response || !cache) {\r\n //console.warn('getFile:', response, fileName);\r\n throw 'NO_ENTRY_FOUND';\r\n }\r\n \r\n const promise = response[method]();\r\n // promise.then(() => {\r\n // console.timeEnd(str);\r\n // });\r\n return promise;\r\n });\r\n }\r\n\r\n private timeoutOperation<T>(callback: (cache: Cache) => Promise<T>) {\r\n return new Promise<T>(async(resolve, reject) => {\r\n let rejected = false;\r\n const timeout = setTimeout(() => {\r\n reject();\r\n //console.warn('CACHESTORAGE TIMEOUT');\r\n rejected = true;\r\n }, 15e3);\r\n\r\n try {\r\n const cache = await this.openDatabase();\r\n if(!cache) {\r\n throw 'no cache?';\r\n }\r\n\r\n const res = await callback(cache);\r\n\r\n if(rejected) return;\r\n resolve(res);\r\n } catch(err) {\r\n reject(err);\r\n }\r\n\r\n clearTimeout(timeout);\r\n });\r\n }\r\n\r\n public getFileWriter(fileName: string, mimeType: string) {\r\n const fakeWriter = FileManager.getFakeFileWriter(mimeType, (blob) => {\r\n return this.saveFile(fileName, blob);\r\n });\r\n\r\n return Promise.resolve(fakeWriter);\r\n }\r\n\r\n public static toggleStorage(enabled: boolean) {\r\n return Promise.all(this.STORAGES.map(storage => {\r\n storage.useStorage = enabled;\r\n \r\n if(!enabled) {\r\n return storage.deleteAll();\r\n }\r\n }));\r\n }\r\n}\r\n\r\n//const cacheStorage = new CacheStorageController(); \r\n//MOUNT_CLASS_TO.cacheStorage = cacheStorage;\r\n//export default cacheStorage;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nimport { MOUNT_CLASS_TO } from \"../../config/debug\";\r\nimport Modes from \"../../config/modes\";\r\nimport { CancellablePromise, deferredPromise } from \"../../helpers/cancellablePromise\";\r\nimport { notifyAll, notifySomeone } from \"../../helpers/context\";\r\nimport { getFileNameByLocation } from \"../../helpers/fileName\";\r\nimport { nextRandomInt } from \"../../helpers/random\";\r\nimport { InputFile, InputFileLocation, UploadFile } from \"../../layer\";\r\nimport CacheStorageController from \"../cacheStorage\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport FileManager from \"../filemanager\";\r\nimport { logger, LogTypes } from \"../logger\";\r\nimport apiManager from \"./apiManager\";\r\nimport { isWebpSupported } from \"./mtproto.worker\";\r\n\r\ntype Delayed = {\r\n offset: number, \r\n writeFilePromise: CancellablePromise<unknown>, \r\n writeFileDeferred: CancellablePromise<unknown>\r\n};\r\n\r\nexport type DownloadOptions = {\r\n dcId: number, \r\n location: InputFileLocation, \r\n size?: number,\r\n fileName?: string,\r\n mimeType?: string,\r\n limitPart?: number,\r\n queueId?: number,\r\n onlyCache?: boolean,\r\n};\r\n\r\ntype MyUploadFile = UploadFile.uploadFile;\r\n\r\nconst MAX_FILE_SAVE_SIZE = 20e6;\r\n\r\nexport class ApiFileManager {\r\n private cacheStorage = new CacheStorageController('cachedFiles');\r\n\r\n private cachedDownloadPromises: {\r\n [fileName: string]: CancellablePromise<Blob>\r\n } = {};\r\n\r\n private uploadPromises: {\r\n [fileName: string]: Set<CancellablePromise<InputFile>>\r\n } = {};\r\n\r\n private downloadPulls: {\r\n [dcId: string]: Array<{\r\n id: number,\r\n queueId: number,\r\n cb: () => Promise<MyUploadFile | void>,\r\n deferred: {\r\n resolve: (...args: any[]) => void,\r\n reject: (...args: any[]) => void\r\n },\r\n activeDelta: number\r\n }>\r\n } = {};\r\n private downloadActives: {[dcId: string]: number} = {};\r\n\r\n public webpConvertPromises: {[fileName: string]: CancellablePromise<Uint8Array>} = {};\r\n\r\n private log: ReturnType<typeof logger> = logger('AFM', LogTypes.Error | LogTypes.Log);\r\n private tempId = 0;\r\n private queueId = 0;\r\n private debug = Modes.debug;\r\n\r\n private downloadRequest(dcId: 'upload', id: number, cb: () => Promise<void>, activeDelta: number, queueId?: number): Promise<void>;\r\n private downloadRequest(dcId: number, id: number, cb: () => Promise<MyUploadFile>, activeDelta: number, queueId?: number): Promise<MyUploadFile>;\r\n private downloadRequest(dcId: number | string, id: number, cb: () => Promise<MyUploadFile | void>, activeDelta: number, queueId: number = 0) {\r\n if(this.downloadPulls[dcId] === undefined) {\r\n this.downloadPulls[dcId] = [];\r\n this.downloadActives[dcId] = 0;\r\n }\r\n\r\n const downloadPull = this.downloadPulls[dcId];\r\n\r\n const promise = new Promise<MyUploadFile | void>((resolve, reject) => {\r\n downloadPull.push({id, queueId, cb, deferred: {resolve, reject}, activeDelta});\r\n });\r\n\r\n setTimeout(() => {\r\n this.downloadCheck(dcId);\r\n }, 0);\r\n\r\n return promise;\r\n }\r\n\r\n private downloadCheck(dcId: string | number) {\r\n const downloadPull = this.downloadPulls[dcId];\r\n const downloadLimit = dcId === 'upload' ? 24 : 24;\r\n //const downloadLimit = Infinity;\r\n\r\n if(this.downloadActives[dcId] >= downloadLimit || !downloadPull || !downloadPull.length) {\r\n return false;\r\n }\r\n\r\n //const data = downloadPull.shift();\r\n const data = downloadPull.findAndSplice(d => d.queueId === 0) || downloadPull.findAndSplice(d => d.queueId === this.queueId) || downloadPull.shift();\r\n const activeDelta = data.activeDelta || 1;\r\n\r\n this.downloadActives[dcId] += activeDelta;\r\n\r\n data.cb()\r\n .then((result) => {\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.resolve(result);\r\n }, (error: Error) => {\r\n // @ts-ignore\r\n if(!error || !error.type || (error.type !== 'DOWNLOAD_CANCELED' && error.type !== 'UPLOAD_CANCELED')) {\r\n this.log.error('downloadCheck error:', error);\r\n }\r\n\r\n this.downloadActives[dcId] -= activeDelta;\r\n this.downloadCheck(dcId);\r\n\r\n data.deferred.reject(error);\r\n });\r\n }\r\n\r\n public setQueueId(queueId: number) {\r\n //this.log.error('setQueueId', queueId);\r\n this.queueId = queueId;\r\n }\r\n\r\n private getFileStorage() {\r\n return this.cacheStorage;\r\n }\r\n\r\n public cancelDownload(fileName: string) {\r\n const promises = (this.cachedDownloadPromises[fileName] ? [this.cachedDownloadPromises[fileName]] : []) || \r\n (this.uploadPromises[fileName] ? Array.from(this.uploadPromises[fileName]) : []);\r\n let canceled = false;\r\n for(let i = 0, length = promises.length; i < length; ++i) {\r\n const promise = promises[i];\r\n if(promise && !promise.isRejected && !promise.isFulfilled) {\r\n promise.cancel();\r\n canceled = true;\r\n }\r\n }\r\n\r\n return canceled;\r\n }\r\n\r\n public requestFilePart(dcId: number, location: InputFileLocation, offset: number, limit: number, id = 0, queueId = 0, checkCancel?: () => void) {\r\n return this.downloadRequest(dcId, id, async() => {\r\n checkCancel && checkCancel();\r\n\r\n return apiManager.invokeApi('upload.getFile', {\r\n location,\r\n offset,\r\n limit\r\n } as any, {\r\n dcId,\r\n fileDownload: true\r\n }) as Promise<MyUploadFile>;\r\n }, this.getDelta(limit), queueId);\r\n }\r\n\r\n /* private convertBlobToBytes(blob: Blob) {\r\n return blob.arrayBuffer().then(buffer => new Uint8Array(buffer));\r\n } */\r\n\r\n private getDelta(bytes: number) {\r\n return bytes / 1024 / 128;\r\n }\r\n\r\n private getLimitPart(size: number): number {\r\n let bytes: number;\r\n\r\n bytes = 512;\r\n /* if(size < 1e6 || !size) bytes = 512;\r\n else if(size < 3e6) bytes = 256;\r\n else bytes = 128; */\r\n\r\n return bytes * 1024;\r\n }\r\n\r\n private uncompressTGS = (bytes: Uint8Array, fileName: string) => {\r\n //this.log('uncompressTGS', bytes, bytes.slice().buffer);\r\n // slice нужен потому что в uint8array - 5053 length, в arraybuffer - 5084\r\n return cryptoWorker.gzipUncompress<string>(bytes.slice().buffer, true);\r\n };\r\n\r\n private convertWebp = (bytes: Uint8Array, fileName: string) => {\r\n const convertPromise = deferredPromise<Uint8Array>();\r\n\r\n const task = {type: 'convertWebp', payload: {fileName, bytes}};\r\n notifySomeone(task);\r\n return this.webpConvertPromises[fileName] = convertPromise;\r\n };\r\n\r\n public downloadFile(options: DownloadOptions): CancellablePromise<Blob> {\r\n if(!FileManager.isAvailable()) {\r\n return Promise.reject({type: 'BROWSER_BLOB_NOT_SUPPORTED'});\r\n }\r\n\r\n const size = options.size ?? 0;\r\n const {dcId, location} = options;\r\n\r\n let process: ApiFileManager['uncompressTGS'] | ApiFileManager['convertWebp'];\r\n\r\n if(options.mimeType === 'image/webp' && !isWebpSupported()) {\r\n process = this.convertWebp;\r\n options.mimeType = 'image/png';\r\n } else if(options.mimeType === 'application/x-tgsticker') {\r\n process = this.uncompressTGS;\r\n options.mimeType = 'application/json';\r\n }\r\n\r\n const fileName = getFileNameByLocation(location, {fileName: options.fileName});\r\n const cachedPromise = this.cachedDownloadPromises[fileName];\r\n const fileStorage = this.getFileStorage();\r\n\r\n this.debug && this.log('downloadFile', fileName, size, location, options.mimeType);\r\n\r\n /* if(options.queueId) {\r\n this.log.error('downloadFile queueId:', fileName, options.queueId);\r\n } */\r\n\r\n if(cachedPromise) {\r\n //this.log('downloadFile cachedPromise');\r\n\r\n if(size) {\r\n return cachedPromise.then((blob: Blob) => {\r\n if(blob.size < size) {\r\n this.debug && this.log('downloadFile need to deleteFile, wrong size:', blob.size, size);\r\n\r\n return this.deleteFile(fileName).then(() => {\r\n return this.downloadFile(options);\r\n }).catch(() => {\r\n return this.downloadFile(options);\r\n });\r\n } else {\r\n return blob;\r\n }\r\n });\r\n } else {\r\n return cachedPromise;\r\n }\r\n }\r\n\r\n const deferred = deferredPromise<Blob>();\r\n const mimeType = options.mimeType || 'image/jpeg';\r\n\r\n let canceled = false;\r\n let resolved = false;\r\n let cacheFileWriter: ReturnType<typeof FileManager['getFakeFileWriter']>;\r\n let errorHandler = (error: any) => {\r\n delete this.cachedDownloadPromises[fileName];\r\n deferred.reject(error);\r\n errorHandler = () => {};\r\n\r\n if(cacheFileWriter && (!error || error.type !== 'DOWNLOAD_CANCELED')) {\r\n cacheFileWriter.truncate();\r\n }\r\n };\r\n\r\n const id = this.tempId++;\r\n\r\n fileStorage.getFile(fileName).then(async(blob: Blob) => {\r\n //this.log('maybe cached', fileName);\r\n //throw '';\r\n\r\n if(blob.size < size) {\r\n //this.log('downloadFile need to deleteFile 2, wrong size:', blob.size, size);\r\n await this.deleteFile(fileName);\r\n throw false;\r\n }\r\n\r\n deferred.resolve(blob);\r\n }).catch(() => {\r\n //this.log('not cached', fileName);\r\n const fileWriterPromise = fileStorage.getFileWriter(fileName, mimeType);\r\n\r\n fileWriterPromise.then((fileWriter) => {\r\n cacheFileWriter = fileWriter;\r\n const limit = options.limitPart || this.getLimitPart(size);\r\n let offset: number;\r\n let startOffset = 0;\r\n let writeFilePromise: CancellablePromise<unknown> = Promise.resolve(),\r\n writeFileDeferred: CancellablePromise<unknown>;\r\n //const maxRequests = 13107200 / limit; // * 100 Mb speed\r\n const maxRequests = Infinity;\r\n\r\n //console.error('maxRequests', maxRequests);\r\n\r\n const processDownloaded = async(bytes: Uint8Array, offset: number) => {\r\n if(process) {\r\n //const perf = performance.now();\r\n const processed = await process(bytes, fileName);\r\n //this.log('downloadFile process downloaded time', performance.now() - perf, mimeType, process);\r\n return processed;\r\n }\r\n \r\n return bytes;\r\n };\r\n\r\n const delayed: Delayed[] = [];\r\n offset = startOffset;\r\n do {\r\n ////this.log('offset:', startOffset);\r\n writeFileDeferred = deferredPromise<void>();\r\n delayed.push({offset, writeFilePromise, writeFileDeferred});\r\n writeFilePromise = writeFileDeferred;\r\n offset += limit;\r\n } while(offset < size);\r\n\r\n let done = 0;\r\n const superpuper = async() => {\r\n //if(!delayed.length) return;\r\n\r\n const {offset, writeFilePromise, writeFileDeferred} = delayed.shift();\r\n try {\r\n const result = await this.requestFilePart(dcId, location, offset, limit, id, options.queueId, checkCancel);\r\n\r\n const bytes: Uint8Array = result.bytes as any;\r\n\r\n if(delayed.length) {\r\n superpuper();\r\n }\r\n\r\n this.debug && this.log('downloadFile requestFilePart result:', fileName, result);\r\n const isFinal = offset + limit >= size || !bytes.byteLength;\r\n if(bytes.byteLength) {\r\n //done += limit;\r\n done += bytes.byteLength;\r\n\r\n //if(!isFinal) {\r\n ////this.log('deferred notify 2:', {done: offset + limit, total: size}, deferred);\r\n deferred.notify({done, offset, total: size});\r\n //}\r\n\r\n const processedResult = await processDownloaded(bytes, offset);\r\n checkCancel();\r\n\r\n await writeFilePromise;\r\n checkCancel();\r\n\r\n await FileManager.write(fileWriter, processedResult);\r\n }\r\n\r\n writeFileDeferred.resolve();\r\n\r\n if(isFinal) {\r\n resolved = true;\r\n\r\n deferred.resolve(fileWriter.finalize(size < MAX_FILE_SAVE_SIZE));\r\n }\r\n } catch(err) {\r\n errorHandler(err);\r\n }\r\n };\r\n\r\n for(let i = 0, length = Math.min(maxRequests, delayed.length); i < length; ++i) {\r\n superpuper();\r\n }\r\n }).catch((err) => {\r\n if(!['STORAGE_OFFLINE'].includes(err)) {\r\n this.log.error('saveFile error:', err);\r\n }\r\n });\r\n });\r\n\r\n const checkCancel = () => {\r\n if(canceled) {\r\n const error = new Error('Canceled');\r\n // @ts-ignore\r\n error.type = 'DOWNLOAD_CANCELED';\r\n throw error;\r\n }\r\n };\r\n\r\n deferred.cancel = () => {\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n delete this.cachedDownloadPromises[fileName];\r\n errorHandler({type: 'DOWNLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number, offset: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n this.cachedDownloadPromises[fileName] = deferred;\r\n\r\n deferred.finally(() => {\r\n delete this.cachedDownloadPromises[fileName];\r\n });\r\n\r\n return deferred;\r\n }\r\n\r\n private deleteFile(fileName: string) {\r\n //this.log('will delete file:', fileName);\r\n delete this.cachedDownloadPromises[fileName];\r\n return this.getFileStorage().delete(fileName);\r\n }\r\n\r\n public uploadFile({file, fileName}: {file: Blob | File, fileName: string}) {\r\n const fileSize = file.size, \r\n isBigFile = fileSize >= 10485760;\r\n\r\n let canceled = false,\r\n resolved = false,\r\n doneParts = 0,\r\n partSize = 262144; // 256 Kb\r\n\r\n /* if(fileSize > (524288 * 3000)) {\r\n partSize = 1024 * 1024;\r\n activeDelta = 8;\r\n } else */if(fileSize > 67108864) {\r\n partSize = 524288;\r\n } else if(fileSize < 102400) {\r\n partSize = 32768;\r\n }\r\n\r\n const activeDelta = this.getDelta(partSize);\r\n\r\n const totalParts = Math.ceil(fileSize / partSize);\r\n const fileId: [number, number] = [nextRandomInt(0xFFFFFFFF), nextRandomInt(0xFFFFFFFF)];\r\n\r\n let _part = 0;\r\n\r\n const resultInputFile: InputFile = {\r\n _: isBigFile ? 'inputFileBig' : 'inputFile',\r\n id: fileId as any,\r\n parts: totalParts,\r\n name: fileName,\r\n md5_checksum: ''\r\n };\r\n\r\n const deferredHelper: {\r\n resolve?: (input: typeof resultInputFile) => void,\r\n reject?: (error: any) => void,\r\n notify?: (details: {done: number, total: number}) => void\r\n } = {\r\n notify: (details: {done: number, total: number}) => {}\r\n };\r\n const deferred: CancellablePromise<typeof resultInputFile> = new Promise((resolve, reject) => {\r\n if(totalParts > 4000) {\r\n return reject({type: 'FILE_TOO_BIG'});\r\n }\r\n\r\n deferredHelper.resolve = resolve;\r\n deferredHelper.reject = reject;\r\n });\r\n Object.assign(deferred, deferredHelper);\r\n\r\n if(totalParts > 4000) {\r\n return deferred;\r\n }\r\n \r\n let errorHandler = (error: any) => {\r\n if(error?.type !== 'UPLOAD_CANCELED') {\r\n this.log.error('Up Error', error);\r\n }\r\n\r\n deferred.reject(error);\r\n canceled = true;\r\n errorHandler = () => {};\r\n };\r\n\r\n const method = isBigFile ? 'upload.saveBigFilePart' : 'upload.saveFilePart';\r\n\r\n const id = this.tempId++;\r\n\r\n /* setInterval(() => {\r\n console.log(file);\r\n }, 1e3); */\r\n\r\n const self = this;\r\n function* generator() {\r\n for(let offset = 0; offset < fileSize; offset += partSize) {\r\n const part = _part++; // 0, 1\r\n yield self.downloadRequest('upload', id, () => {\r\n return new Promise<void>((uploadResolve, uploadReject) => {\r\n const reader = new FileReader();\r\n const blob = file.slice(offset, offset + partSize);\r\n \r\n reader.onloadend = (e) => {\r\n if(canceled) {\r\n uploadReject({type: 'UPLOAD_CANCELED'});\r\n return;\r\n }\r\n \r\n if(e.target.readyState !== FileReader.DONE) {\r\n self.log.error('wrong readyState!');\r\n uploadReject({type: 'WRONG_READY_STATE'});\r\n return;\r\n }\r\n \r\n let buffer = e.target.result as ArrayBuffer;\r\n self.debug && self.log('Upload file part, isBig:', isBigFile, part, buffer.byteLength, new Uint8Array(buffer).length, new Uint8Array(buffer).slice().length);\r\n\r\n /* const u = new Uint8Array(buffer.byteLength);\r\n for(let i = 0; i < u.length; ++i) {\r\n //u[i] = Math.random() * 255 | 0;\r\n u[i] = 0;\r\n }\r\n buffer = u.buffer; */\r\n \r\n /* setTimeout(() => {\r\n doneParts++;\r\n uploadResolve();\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n\r\n self.log('done part', part, doneParts);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, 1250);\r\n return; */\r\n\r\n apiManager.invokeApi(method, {\r\n file_id: fileId,\r\n file_part: part,\r\n file_total_parts: totalParts,\r\n bytes: buffer/* new Uint8Array(buffer) */\r\n } as any, {\r\n //startMaxLength: partSize + 256,\r\n fileUpload: true\r\n }).then((result) => {\r\n doneParts++;\r\n uploadResolve();\r\n \r\n //////this.log('Progress', doneParts * partSize / fileSize);\r\n \r\n deferred.notify({done: doneParts * partSize, total: fileSize});\r\n \r\n if(doneParts >= totalParts) {\r\n deferred.resolve(resultInputFile);\r\n resolved = true;\r\n }\r\n }, errorHandler);\r\n };\r\n \r\n reader.readAsArrayBuffer(blob);\r\n });\r\n }, activeDelta).catch(errorHandler);\r\n }\r\n }\r\n\r\n const it = generator();\r\n const process = () => {\r\n if(canceled) return;\r\n const r = it.next();\r\n if(r.done || canceled) return;\r\n (r.value as Promise<void>).then(process);\r\n };\r\n\r\n const maxRequests = Infinity;\r\n //const maxRequests = 10;\r\n /* for(let i = 0; i < 10; ++i) {\r\n process();\r\n } */\r\n for(let i = 0, length = Math.min(maxRequests, totalParts); i < length; ++i) {\r\n process();\r\n }\r\n\r\n deferred.cancel = () => {\r\n //this.log('cancel upload', canceled, resolved);\r\n if(!canceled && !resolved) {\r\n canceled = true;\r\n errorHandler({type: 'UPLOAD_CANCELED'});\r\n }\r\n };\r\n\r\n deferred.notify = (progress: {done: number, total: number}) => {\r\n notifyAll({progress: {fileName, ...progress}});\r\n };\r\n\r\n deferred.finally(() => {\r\n set.delete(deferred);\r\n if(!set.size) {\r\n delete this.uploadPromises[fileName];\r\n }\r\n });\r\n\r\n const set = this.uploadPromises[fileName] ?? (this.uploadPromises[fileName] = new Set());\r\n set.add(deferred);\r\n return deferred;\r\n }\r\n}\r\n\r\nconst apiFileManager = new ApiFileManager();\r\nMOUNT_CLASS_TO.apiFileManager = apiFileManager;\r\nexport default apiFileManager;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { InputFileLocation, InputStickerSet } from \"../layer\";\r\nimport type { DownloadOptions } from \"../lib/mtproto/apiFileManager\";\r\n\r\nconst FILENAME_JOINER = '_';\r\n\r\nexport function getFileNameByLocation(location: InputFileLocation, options?: Partial<{\r\n fileName: string\r\n}>) {\r\n const fileName = '';//(options?.fileName || '').split('.');\r\n const ext = fileName[fileName.length - 1] || '';\r\n\r\n let str: string;\r\n switch(location._) {\r\n case 'inputPhotoFileLocation': {\r\n str = ['photo', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputDocumentFileLocation': {\r\n str = ['document', fileName[0], location.id, location.thumb_size].filter(Boolean).join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputPeerPhotoFileLocation':\r\n str = ['peerPhoto', location.photo_id, location.pFlags.big ? 'big' : 'small'].join(FILENAME_JOINER);\r\n break;\r\n \r\n case 'inputStickerSetThumb': {\r\n const id = (location.stickerset as InputStickerSet.inputStickerSetID).id || \r\n (location.stickerset as InputStickerSet.inputStickerSetShortName).short_name || \r\n (location.stickerset as InputStickerSet.inputStickerSetDice).emoticon || \r\n location.stickerset._;\r\n str = ['stickerSetThumb', id, location.thumb_version].join(FILENAME_JOINER);\r\n break;\r\n }\r\n\r\n case 'inputFileLocation': {\r\n str = location.volume_id + '_' + location.local_id;\r\n break;\r\n }\r\n\r\n default: {\r\n console.error('Unrecognized location:', location);\r\n str = '';\r\n break;\r\n }\r\n }\r\n\r\n return str + (ext ? '.' + ext : ext);\r\n}\r\n\r\nexport type FileURLType = 'photo' | 'thumb' | 'document' | 'stream' | 'download';\r\nexport function getFileURL(type: FileURLType, options: DownloadOptions) {\r\n //console.log('getFileURL', location);\r\n //const perf = performance.now();\r\n const encoded = encodeURIComponent(JSON.stringify(options));\r\n //console.log('getFileURL encode:', performance.now() - perf, encoded);\r\n\r\n return '/' + type + '/' + encoded;\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// just to include\r\nimport '../polyfill';\r\n\r\nimport apiManager from \"./apiManager\";\r\nimport cryptoWorker from \"../crypto/cryptoworker\";\r\nimport networkerFactory from \"./networkerFactory\";\r\nimport apiFileManager from './apiFileManager';\r\nimport type { ServiceWorkerTask, ServiceWorkerTaskResponse } from './mtproto.service';\r\nimport { ctx } from '../../helpers/userAgent';\r\nimport { socketsProxied } from './dcConfigurator';\r\nimport { notifyAll } from '../../helpers/context';\r\nimport AppStorage from '../storage';\r\nimport CacheStorageController from '../cacheStorage';\r\n\r\nlet webpSupported = false;\r\nexport const isWebpSupported = () => {\r\n return webpSupported;\r\n};\r\n\r\nnetworkerFactory.setUpdatesProcessor((obj) => {\r\n notifyAll({update: obj});\r\n});\r\n\r\nnetworkerFactory.onConnectionStatusChange = (status) => {\r\n notifyAll({type: 'connectionStatusChange', payload: status});\r\n};\r\n\r\nconst onMessage = async(e: any) => {\r\n try {\r\n const task = e.data;\r\n const taskId = task.taskId;\r\n\r\n if(task.type === 'convertWebp') {\r\n const {fileName, bytes} = task.payload;\r\n const deferred = apiFileManager.webpConvertPromises[fileName];\r\n if(deferred) {\r\n deferred.resolve(bytes);\r\n delete apiFileManager.webpConvertPromises[fileName];\r\n }\r\n\r\n return;\r\n } else if((task as ServiceWorkerTask).type === 'requestFilePart') {\r\n const task = e.data as ServiceWorkerTask;\r\n const responseTask: ServiceWorkerTaskResponse = {\r\n type: task.type,\r\n id: task.id\r\n };\r\n\r\n try {\r\n const res = await apiFileManager.requestFilePart(...task.payload);\r\n responseTask.payload = res;\r\n } catch(err) {\r\n responseTask.originalPayload = task.payload;\r\n responseTask.error = err;\r\n }\r\n\r\n notifyAll(responseTask);\r\n return;\r\n } else if(task.type === 'webpSupport') {\r\n webpSupported = task.payload;\r\n return;\r\n } else if(task.type === 'socketProxy') {\r\n const socketTask = task.payload;\r\n const id = socketTask.id;\r\n \r\n const socketProxied = socketsProxied.get(id);\r\n if(socketTask.type === 'message') {\r\n socketProxied.dispatchEvent('message', socketTask.payload);\r\n } else if(socketTask.type === 'open') {\r\n socketProxied.dispatchEvent('open');\r\n } else if(socketTask.type === 'close') {\r\n socketProxied.dispatchEvent('close');\r\n socketsProxied.delete(id);\r\n }\r\n }\r\n\r\n if(!task.task) {\r\n return;\r\n }\r\n \r\n switch(task.task) {\r\n case 'computeSRP':\r\n case 'gzipUncompress':\r\n // @ts-ignore\r\n return cryptoWorker[task.task].apply(cryptoWorker, task.args).then(result => {\r\n notifyAll({taskId, result});\r\n });\r\n \r\n case 'setQueueId':\r\n case 'cancelDownload':\r\n case 'uploadFile':\r\n case 'downloadFile': {\r\n try {\r\n // @ts-ignore\r\n let result = apiFileManager[task.task].apply(apiFileManager, task.args);\r\n \r\n if(result instanceof Promise) {\r\n /* (result as ReturnType<ApiFileManager['downloadFile']>).notify = (progress: {done: number, total: number, offset: number}) => {\r\n notify({progress: {fileName, ...progress}});\r\n }; */\r\n result = await result;\r\n }\r\n \r\n notifyAll({taskId, result});\r\n } catch(error) {\r\n notifyAll({taskId, error});\r\n }\r\n\r\n break;\r\n }\r\n\r\n case 'getNetworker': {\r\n // @ts-ignore\r\n apiManager[task.task].apply(apiManager, task.args).finally(() => {\r\n notifyAll({taskId, result: null});\r\n });\r\n \r\n break;\r\n }\r\n\r\n case 'toggleStorage': {\r\n const enabled = task.args[0];\r\n AppStorage.toggleStorage(enabled);\r\n CacheStorageController.toggleStorage(enabled);\r\n break;\r\n }\r\n\r\n case 'startAll':\r\n case 'stopAll': {\r\n // @ts-ignore\r\n networkerFactory[task.task].apply(networkerFactory);\r\n break;\r\n }\r\n \r\n default: {\r\n try {\r\n // @ts-ignore\r\n let result = apiManager[task.task].apply(apiManager, task.args);\r\n \r\n if(result instanceof Promise) {\r\n result = await result;\r\n }\r\n\r\n //console.log(notifyAll);\r\n \r\n notifyAll({taskId, result});\r\n } catch(error) {\r\n notifyAll({taskId, error});\r\n }\r\n \r\n //throw new Error('Unknown task: ' + task.task);\r\n break;\r\n }\r\n }\r\n } catch(err) {\r\n\r\n }\r\n};\r\n\r\n//console.log('[WORKER] Will send ready', Date.now() / 1000);\r\nctx.addEventListener('message', onMessage);\r\nnotifyAll('ready');\r\n"],"sourceRoot":""}