gamelet-cli 0.6.2 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +0 -0
- package/README.md +0 -0
- package/assets/common.d.ts +4 -4
- package/assets/gitignore.txt +65 -65
- package/assets/launch.json +21 -21
- package/assets/package.json.twig +22 -22
- package/assets/server/greenlock.d/config.json +25 -25
- package/assets/server/static/css/style.css +0 -0
- package/assets/server/static/js/monitor.js +0 -0
- package/assets/server/static/js/test.js +0 -0
- package/assets/server/views/error.twig +0 -0
- package/assets/server/views/index.twig +0 -0
- package/assets/server/views/monitor.twig +0 -0
- package/assets/server/views/test.twig +0 -0
- package/assets/tsconfig.json.twig +42 -42
- package/build/package.json +67 -67
- package/build/src/gamelet/download.js +736 -736
- package/build/src/gamelet/merges.js +143 -143
- package/build/src/gamelet/prepare.js +274 -274
- package/build/src/gamelet/upload.js +278 -278
- package/build/src/index.js +85 -85
- package/build/src/server/Constant.js +9 -9
- package/build/src/server/entities/Client.js +77 -77
- package/build/src/server/entities/ClientOwner.js +66 -66
- package/build/src/server/entities/ClientProject.js +83 -83
- package/build/src/server/entities/Gameroom.js +88 -88
- package/build/src/server/entities/GameroomBase.js +275 -275
- package/build/src/server/entities/Gamezone.js +72 -72
- package/build/src/server/entities/ListFilter.js +192 -192
- package/build/src/server/entities/Monitor.js +80 -80
- package/build/src/server/entities/Player.js +131 -131
- package/build/src/server/managers/ApiManager.js +74 -74
- package/build/src/server/managers/ClientManager.js +63 -63
- package/build/src/server/managers/Database.js +593 -593
- package/build/src/server/managers/GameroomManager.js +391 -391
- package/build/src/server/managers/ManagerBase.js +16 -16
- package/build/src/server/managers/MonitorManager.js +72 -72
- package/build/src/server/managers/PlayerManager.js +103 -103
- package/build/src/server/managers/SocketManager.js +55 -55
- package/build/src/server/managers/UserManager.js +57 -57
- package/build/src/server/messages/Message.js +141 -141
- package/build/src/server/server.js +109 -109
- package/build/src/server/services/ServiceBase.js +24 -24
- package/build/src/server/services/clientService.js +23 -23
- package/build/src/server/services/gameroomService.js +121 -121
- package/build/src/server/services/gltserver.service.js +23 -23
- package/build/src/server/services/playerService.js +29 -29
- package/build/src/server/startServer.js +32 -32
- package/build/src/server/types/BadgeStatus.js +24 -24
- package/build/src/server/types/OrderType.js +37 -37
- package/build/src/server/types/SubmitType.js +23 -23
- package/build/src/server/types/TimeRange.js +25 -25
- package/build/src/server/utils/ArrayUtil.js +125 -125
- package/build/src/server/utils/IntUtil.js +9 -9
- package/build/src/server/utils/ObjectUtil.js +190 -190
- package/build/src/server/utils/StringUtil.js +36 -36
- package/build/src/server/vo/Database.js +0 -0
- package/build/src/server/vo/Gameroom.js +0 -0
- package/build/src/server/vo/Gamezone.js +0 -0
- package/build/src/server/vo/Player.js +0 -0
- package/build/src/server/vo/Response.js +0 -0
- package/build/src/server/vo/System.js +0 -0
- package/build/src/utils/cli.js +48 -48
- package/build/src/utils/file.js +326 -326
- package/build/src/utils/init.js +41 -41
- package/build/src/utils/log.js +16 -16
- package/build/src/utils/net.js +38 -38
- package/package.json +2 -2
|
@@ -1,142 +1,142 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MessageType = exports.Message = void 0;
|
|
4
|
-
let messagePool = [];
|
|
5
|
-
function getMessage(type, params) {
|
|
6
|
-
if (messagePool.length) {
|
|
7
|
-
let msg = messagePool.pop();
|
|
8
|
-
msg.type = type;
|
|
9
|
-
msg.params = params;
|
|
10
|
-
return msg;
|
|
11
|
-
}
|
|
12
|
-
else {
|
|
13
|
-
return new Message(type, params);
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
class Message {
|
|
17
|
-
constructor(type, params) {
|
|
18
|
-
this.type = type;
|
|
19
|
-
this.params = params;
|
|
20
|
-
}
|
|
21
|
-
static forMonitorLog(projectCode, channel, prefix, data, color, player) {
|
|
22
|
-
return getMessage(exports.MessageType.MONITOR_LOG, [projectCode, channel, prefix, data, color, player ? {
|
|
23
|
-
code: player.code,
|
|
24
|
-
lastMsgTime: player.lastMsgTime
|
|
25
|
-
} : 0]);
|
|
26
|
-
}
|
|
27
|
-
static forMonitorEvent(projectCode, event, data) {
|
|
28
|
-
return getMessage(exports.MessageType.MONITOR_EVENT, [projectCode, event, data]);
|
|
29
|
-
}
|
|
30
|
-
static forBroadcast(type, playerCode, roomCode, data) {
|
|
31
|
-
return getMessage(type, [playerCode, roomCode, data]);
|
|
32
|
-
}
|
|
33
|
-
static forDataToPlayer(sender, data) {
|
|
34
|
-
return getMessage(exports.MessageType.DATA_TO_PLAYER, [sender.code, sender.client.project.code, sender.client.msgVersion, data]);
|
|
35
|
-
}
|
|
36
|
-
static forMonitorDataToPlayer(sender, data) {
|
|
37
|
-
return getMessage(exports.MessageType.MONITOR_DATA_TO_PLAYER, [sender.code, data]);
|
|
38
|
-
}
|
|
39
|
-
static forDataToRoommate(sender, data) {
|
|
40
|
-
return getMessage(exports.MessageType.DATA_TO_ROOMMATE, [sender.code, sender.getGameroom().code, data]);
|
|
41
|
-
}
|
|
42
|
-
static forDataToRoomDecisionmaker(sender, senderGameroomCode, roomCode, data) {
|
|
43
|
-
return getMessage(exports.MessageType.DATA_TO_ROOM_DECISIONMAKER, [sender.code, senderGameroomCode, roomCode, data]);
|
|
44
|
-
}
|
|
45
|
-
static forRoomCreated(room) {
|
|
46
|
-
return getMessage(exports.MessageType.ROOM_CREATED, [room.toAndStatusVo()]);
|
|
47
|
-
}
|
|
48
|
-
static forRoomClosed(room) {
|
|
49
|
-
return getMessage(exports.MessageType.ROOM_CLOSED, [room.gamezone.code, room.code]);
|
|
50
|
-
}
|
|
51
|
-
static forRoomStatusChanged(room) {
|
|
52
|
-
return getMessage(exports.MessageType.ROOM_STATUS_CHANGED, [room.gamezone.code, room.code, room.toStatusVo()]);
|
|
53
|
-
}
|
|
54
|
-
static forRoomBrainerChanged(room) {
|
|
55
|
-
return getMessage(exports.MessageType.ROOM_BRAINER_CHANGED, [room.code, room.getBrainer().code]);
|
|
56
|
-
}
|
|
57
|
-
static forRoomBrainerSet(roomCode) {
|
|
58
|
-
return getMessage(exports.MessageType.ROOM_BRAINER_SET, [roomCode]);
|
|
59
|
-
}
|
|
60
|
-
static forRoomPlayerStateChanged(roomCode, playerCode, key, value) {
|
|
61
|
-
return getMessage(exports.MessageType.ROOM_PLAYER_STATE_CHANGED, [roomCode, playerCode, key, value]);
|
|
62
|
-
}
|
|
63
|
-
static forRoomPlayerStatesChanged(roomCode, playerCode, states) {
|
|
64
|
-
return getMessage(exports.MessageType.ROOM_PLAYER_STATES_CHANGED, [roomCode, playerCode, states]);
|
|
65
|
-
}
|
|
66
|
-
static forRoomPlayerSyncedChanged(roomCode, playerCode, value, brainerCode) {
|
|
67
|
-
return getMessage(exports.MessageType.ROOM_PLAYER_SYNCED_CHANGED, [roomCode, playerCode, value, brainerCode]);
|
|
68
|
-
}
|
|
69
|
-
static forZoneStatusChanged(zone) {
|
|
70
|
-
return getMessage(exports.MessageType.ZONE_STATUS_CHANGED, [zone.code, zone.toStatusVo()]);
|
|
71
|
-
}
|
|
72
|
-
static forZonePlayerStateChanged(zoneCode, playerCode, key, value, brainerCode) {
|
|
73
|
-
return getMessage(exports.MessageType.ZONE_PLAYER_STATE_CHANGED, [zoneCode, playerCode, key, value, brainerCode]);
|
|
74
|
-
}
|
|
75
|
-
static forZonePlayerStatesChanged(zoneCode, playerCode, states, brainerCode) {
|
|
76
|
-
return getMessage(exports.MessageType.ZONE_PLAYER_STATES_CHANGED, [zoneCode, playerCode, states, brainerCode]);
|
|
77
|
-
}
|
|
78
|
-
static forZonePlayerSyncedChanged(zoneCode, playerCode, value, brainerCode) {
|
|
79
|
-
return getMessage(exports.MessageType.ZONE_PLAYER_SYNCED_CHANGED, [zoneCode, playerCode, value, brainerCode]);
|
|
80
|
-
}
|
|
81
|
-
static forPlayerJoinedRoom(roomCode, player) {
|
|
82
|
-
return getMessage(exports.MessageType.PLAYER_JOINED_ROOM, [roomCode, player.toVo()]);
|
|
83
|
-
}
|
|
84
|
-
static forPlayerLeftRoom(roomCode, playerCode) {
|
|
85
|
-
return getMessage(exports.MessageType.PLAYER_LEFT_ROOM, [roomCode, playerCode]);
|
|
86
|
-
}
|
|
87
|
-
static forPlayerLeftZone(zoneCode, playerCode) {
|
|
88
|
-
return getMessage(exports.MessageType.PLAYER_LEFT_ZONE, [zoneCode, playerCode]);
|
|
89
|
-
}
|
|
90
|
-
static forPlayerCheated(playerCode) {
|
|
91
|
-
return getMessage(exports.MessageType.PLAYER_CHEATED, [playerCode]);
|
|
92
|
-
}
|
|
93
|
-
recycle() {
|
|
94
|
-
messagePool.push(this);
|
|
95
|
-
}
|
|
96
|
-
send(socket, respond) {
|
|
97
|
-
if (respond) {
|
|
98
|
-
return socket.emit('gltmsg', this.type, this.params, respond);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
return socket.emit('gltmsg', this.type, this.params);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
exports.Message = Message;
|
|
106
|
-
exports.MessageType = {
|
|
107
|
-
// receiving
|
|
108
|
-
LOGIN: 'login',
|
|
109
|
-
LOGIN2: 'login2',
|
|
110
|
-
LOGIN_ADMIN: 'loginAdmin',
|
|
111
|
-
ECHO: 'echo',
|
|
112
|
-
CLIENT_MONITOR_API: 'clientMonitorApi',
|
|
113
|
-
// outgoing
|
|
114
|
-
MONITOR_LOG: 'monitorLog',
|
|
115
|
-
MONITOR_EVENT: 'monitorEvent',
|
|
116
|
-
ROOM_CREATED: 'roomCreated',
|
|
117
|
-
ROOM_CLOSED: 'roomClosed',
|
|
118
|
-
ROOM_STATUS_CHANGED: 'roomStatusChanged',
|
|
119
|
-
ROOM_BRAINER_CHANGED: 'roomBrainerChanged',
|
|
120
|
-
ROOM_BRAINER_SET: 'roomBrainerSet',
|
|
121
|
-
ROOM_PLAYER_STATE_CHANGED: 'roomPlayerStateChanged',
|
|
122
|
-
ROOM_PLAYER_STATES_CHANGED: 'roomPlayerStatesChanged',
|
|
123
|
-
ROOM_PLAYER_SYNCED_CHANGED: 'roomPlayerSyncedChanged',
|
|
124
|
-
ZONE_STATUS_CHANGED: 'zoneStatusChanged',
|
|
125
|
-
ZONE_PLAYER_STATE_CHANGED: 'zonePlayerStateChanged',
|
|
126
|
-
ZONE_PLAYER_STATES_CHANGED: 'zonePlayerStatesChanged',
|
|
127
|
-
ZONE_PLAYER_SYNCED_CHANGED: 'zonePlayerSyncedChanged',
|
|
128
|
-
BROADCAST_IN_ROOM: 'broadcastInRoom',
|
|
129
|
-
BROADCAST_TO_ROOM: 'broadcastToRoom',
|
|
130
|
-
BROADCAST_TO_ZONE: 'broadcastToZone',
|
|
131
|
-
BROADCAST_IN_PROJECT: 'broadcastInProject',
|
|
132
|
-
BROADCAST_IN_GAMELET: 'broadcastInGamelet',
|
|
133
|
-
PLAYER_JOINED_ROOM: 'playerJoinedRoom',
|
|
134
|
-
PLAYER_LEFT_ROOM: 'playerLeftRoom',
|
|
135
|
-
PLAYER_LEFT_ZONE: 'playerLeftZone',
|
|
136
|
-
PLAYER_CHEATED: 'playerCheated',
|
|
137
|
-
DATA_TO_PLAYER: 'dataToPlayer',
|
|
138
|
-
DATA_TO_ROOMMATE: 'dataToRoommate',
|
|
139
|
-
DATA_TO_ROOM_DECISIONMAKER: 'dataToRoomDecisionmaker',
|
|
140
|
-
MONITOR_DATA_TO_PLAYER: 'monitorDataToPlayer',
|
|
141
|
-
};
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MessageType = exports.Message = void 0;
|
|
4
|
+
let messagePool = [];
|
|
5
|
+
function getMessage(type, params) {
|
|
6
|
+
if (messagePool.length) {
|
|
7
|
+
let msg = messagePool.pop();
|
|
8
|
+
msg.type = type;
|
|
9
|
+
msg.params = params;
|
|
10
|
+
return msg;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
return new Message(type, params);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
class Message {
|
|
17
|
+
constructor(type, params) {
|
|
18
|
+
this.type = type;
|
|
19
|
+
this.params = params;
|
|
20
|
+
}
|
|
21
|
+
static forMonitorLog(projectCode, channel, prefix, data, color, player) {
|
|
22
|
+
return getMessage(exports.MessageType.MONITOR_LOG, [projectCode, channel, prefix, data, color, player ? {
|
|
23
|
+
code: player.code,
|
|
24
|
+
lastMsgTime: player.lastMsgTime
|
|
25
|
+
} : 0]);
|
|
26
|
+
}
|
|
27
|
+
static forMonitorEvent(projectCode, event, data) {
|
|
28
|
+
return getMessage(exports.MessageType.MONITOR_EVENT, [projectCode, event, data]);
|
|
29
|
+
}
|
|
30
|
+
static forBroadcast(type, playerCode, roomCode, data) {
|
|
31
|
+
return getMessage(type, [playerCode, roomCode, data]);
|
|
32
|
+
}
|
|
33
|
+
static forDataToPlayer(sender, data) {
|
|
34
|
+
return getMessage(exports.MessageType.DATA_TO_PLAYER, [sender.code, sender.client.project.code, sender.client.msgVersion, data]);
|
|
35
|
+
}
|
|
36
|
+
static forMonitorDataToPlayer(sender, data) {
|
|
37
|
+
return getMessage(exports.MessageType.MONITOR_DATA_TO_PLAYER, [sender.code, data]);
|
|
38
|
+
}
|
|
39
|
+
static forDataToRoommate(sender, data) {
|
|
40
|
+
return getMessage(exports.MessageType.DATA_TO_ROOMMATE, [sender.code, sender.getGameroom().code, data]);
|
|
41
|
+
}
|
|
42
|
+
static forDataToRoomDecisionmaker(sender, senderGameroomCode, roomCode, data) {
|
|
43
|
+
return getMessage(exports.MessageType.DATA_TO_ROOM_DECISIONMAKER, [sender.code, senderGameroomCode, roomCode, data]);
|
|
44
|
+
}
|
|
45
|
+
static forRoomCreated(room) {
|
|
46
|
+
return getMessage(exports.MessageType.ROOM_CREATED, [room.toAndStatusVo()]);
|
|
47
|
+
}
|
|
48
|
+
static forRoomClosed(room) {
|
|
49
|
+
return getMessage(exports.MessageType.ROOM_CLOSED, [room.gamezone.code, room.code]);
|
|
50
|
+
}
|
|
51
|
+
static forRoomStatusChanged(room) {
|
|
52
|
+
return getMessage(exports.MessageType.ROOM_STATUS_CHANGED, [room.gamezone.code, room.code, room.toStatusVo()]);
|
|
53
|
+
}
|
|
54
|
+
static forRoomBrainerChanged(room) {
|
|
55
|
+
return getMessage(exports.MessageType.ROOM_BRAINER_CHANGED, [room.code, room.getBrainer().code]);
|
|
56
|
+
}
|
|
57
|
+
static forRoomBrainerSet(roomCode) {
|
|
58
|
+
return getMessage(exports.MessageType.ROOM_BRAINER_SET, [roomCode]);
|
|
59
|
+
}
|
|
60
|
+
static forRoomPlayerStateChanged(roomCode, playerCode, key, value) {
|
|
61
|
+
return getMessage(exports.MessageType.ROOM_PLAYER_STATE_CHANGED, [roomCode, playerCode, key, value]);
|
|
62
|
+
}
|
|
63
|
+
static forRoomPlayerStatesChanged(roomCode, playerCode, states) {
|
|
64
|
+
return getMessage(exports.MessageType.ROOM_PLAYER_STATES_CHANGED, [roomCode, playerCode, states]);
|
|
65
|
+
}
|
|
66
|
+
static forRoomPlayerSyncedChanged(roomCode, playerCode, value, brainerCode) {
|
|
67
|
+
return getMessage(exports.MessageType.ROOM_PLAYER_SYNCED_CHANGED, [roomCode, playerCode, value, brainerCode]);
|
|
68
|
+
}
|
|
69
|
+
static forZoneStatusChanged(zone) {
|
|
70
|
+
return getMessage(exports.MessageType.ZONE_STATUS_CHANGED, [zone.code, zone.toStatusVo()]);
|
|
71
|
+
}
|
|
72
|
+
static forZonePlayerStateChanged(zoneCode, playerCode, key, value, brainerCode) {
|
|
73
|
+
return getMessage(exports.MessageType.ZONE_PLAYER_STATE_CHANGED, [zoneCode, playerCode, key, value, brainerCode]);
|
|
74
|
+
}
|
|
75
|
+
static forZonePlayerStatesChanged(zoneCode, playerCode, states, brainerCode) {
|
|
76
|
+
return getMessage(exports.MessageType.ZONE_PLAYER_STATES_CHANGED, [zoneCode, playerCode, states, brainerCode]);
|
|
77
|
+
}
|
|
78
|
+
static forZonePlayerSyncedChanged(zoneCode, playerCode, value, brainerCode) {
|
|
79
|
+
return getMessage(exports.MessageType.ZONE_PLAYER_SYNCED_CHANGED, [zoneCode, playerCode, value, brainerCode]);
|
|
80
|
+
}
|
|
81
|
+
static forPlayerJoinedRoom(roomCode, player) {
|
|
82
|
+
return getMessage(exports.MessageType.PLAYER_JOINED_ROOM, [roomCode, player.toVo()]);
|
|
83
|
+
}
|
|
84
|
+
static forPlayerLeftRoom(roomCode, playerCode) {
|
|
85
|
+
return getMessage(exports.MessageType.PLAYER_LEFT_ROOM, [roomCode, playerCode]);
|
|
86
|
+
}
|
|
87
|
+
static forPlayerLeftZone(zoneCode, playerCode) {
|
|
88
|
+
return getMessage(exports.MessageType.PLAYER_LEFT_ZONE, [zoneCode, playerCode]);
|
|
89
|
+
}
|
|
90
|
+
static forPlayerCheated(playerCode) {
|
|
91
|
+
return getMessage(exports.MessageType.PLAYER_CHEATED, [playerCode]);
|
|
92
|
+
}
|
|
93
|
+
recycle() {
|
|
94
|
+
messagePool.push(this);
|
|
95
|
+
}
|
|
96
|
+
send(socket, respond) {
|
|
97
|
+
if (respond) {
|
|
98
|
+
return socket.emit('gltmsg', this.type, this.params, respond);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
return socket.emit('gltmsg', this.type, this.params);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.Message = Message;
|
|
106
|
+
exports.MessageType = {
|
|
107
|
+
// receiving
|
|
108
|
+
LOGIN: 'login',
|
|
109
|
+
LOGIN2: 'login2',
|
|
110
|
+
LOGIN_ADMIN: 'loginAdmin',
|
|
111
|
+
ECHO: 'echo',
|
|
112
|
+
CLIENT_MONITOR_API: 'clientMonitorApi',
|
|
113
|
+
// outgoing
|
|
114
|
+
MONITOR_LOG: 'monitorLog',
|
|
115
|
+
MONITOR_EVENT: 'monitorEvent',
|
|
116
|
+
ROOM_CREATED: 'roomCreated',
|
|
117
|
+
ROOM_CLOSED: 'roomClosed',
|
|
118
|
+
ROOM_STATUS_CHANGED: 'roomStatusChanged',
|
|
119
|
+
ROOM_BRAINER_CHANGED: 'roomBrainerChanged',
|
|
120
|
+
ROOM_BRAINER_SET: 'roomBrainerSet',
|
|
121
|
+
ROOM_PLAYER_STATE_CHANGED: 'roomPlayerStateChanged',
|
|
122
|
+
ROOM_PLAYER_STATES_CHANGED: 'roomPlayerStatesChanged',
|
|
123
|
+
ROOM_PLAYER_SYNCED_CHANGED: 'roomPlayerSyncedChanged',
|
|
124
|
+
ZONE_STATUS_CHANGED: 'zoneStatusChanged',
|
|
125
|
+
ZONE_PLAYER_STATE_CHANGED: 'zonePlayerStateChanged',
|
|
126
|
+
ZONE_PLAYER_STATES_CHANGED: 'zonePlayerStatesChanged',
|
|
127
|
+
ZONE_PLAYER_SYNCED_CHANGED: 'zonePlayerSyncedChanged',
|
|
128
|
+
BROADCAST_IN_ROOM: 'broadcastInRoom',
|
|
129
|
+
BROADCAST_TO_ROOM: 'broadcastToRoom',
|
|
130
|
+
BROADCAST_TO_ZONE: 'broadcastToZone',
|
|
131
|
+
BROADCAST_IN_PROJECT: 'broadcastInProject',
|
|
132
|
+
BROADCAST_IN_GAMELET: 'broadcastInGamelet',
|
|
133
|
+
PLAYER_JOINED_ROOM: 'playerJoinedRoom',
|
|
134
|
+
PLAYER_LEFT_ROOM: 'playerLeftRoom',
|
|
135
|
+
PLAYER_LEFT_ZONE: 'playerLeftZone',
|
|
136
|
+
PLAYER_CHEATED: 'playerCheated',
|
|
137
|
+
DATA_TO_PLAYER: 'dataToPlayer',
|
|
138
|
+
DATA_TO_ROOMMATE: 'dataToRoommate',
|
|
139
|
+
DATA_TO_ROOM_DECISIONMAKER: 'dataToRoomDecisionmaker',
|
|
140
|
+
MONITOR_DATA_TO_PLAYER: 'monitorDataToPlayer',
|
|
141
|
+
};
|
|
142
142
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2ZXIvbWVzc2FnZXMvTWVzc2FnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxJQUFJLFdBQVcsR0FBYyxFQUFFLENBQUM7QUFFaEMsU0FBUyxVQUFVLENBQUMsSUFBWSxFQUFFLE1BQWE7SUFDM0MsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFO1FBQ3BCLElBQUksR0FBRyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM1QixHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixHQUFHLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNwQixPQUFPLEdBQUcsQ0FBQztLQUNkO1NBQU07UUFDSCxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNwQztBQUNMLENBQUM7QUFFRCxNQUFhLE9BQU87SUE4RmhCLFlBQW1CLElBQVksRUFBUyxNQUFhO1FBQWxDLFNBQUksR0FBSixJQUFJLENBQVE7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFPO0lBRXJELENBQUM7SUE5RkQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFtQixFQUFFLE9BQWUsRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLEtBQWEsRUFBRSxNQUFlO1FBQ25ILE9BQU8sVUFBVSxDQUFDLG1CQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM1RixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVzthQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsV0FBbUIsRUFBRSxL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
|
|
@@ -1,110 +1,110 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.initServer = void 0;
|
|
7
|
-
const express_1 = __importDefault(require("express"));
|
|
8
|
-
const http_1 = __importDefault(require("http"));
|
|
9
|
-
const socket_io_1 = __importDefault(require("socket.io"));
|
|
10
|
-
const cors_1 = __importDefault(require("cors"));
|
|
11
|
-
const UserManager_1 = require("./managers/UserManager");
|
|
12
|
-
const Database_1 = require("./managers/Database");
|
|
13
|
-
//
|
|
14
|
-
let app = express_1.default();
|
|
15
|
-
let packageRoot = __dirname + '/../../..';
|
|
16
|
-
let res = packageRoot + '/assets/server';
|
|
17
|
-
app.use(express_1.default.static(res + '/static'));
|
|
18
|
-
app.use(express_1.default.json());
|
|
19
|
-
app.use(express_1.default.urlencoded());
|
|
20
|
-
app.set('views', res + '/views');
|
|
21
|
-
app.set('view engine', 'twig');
|
|
22
|
-
app.set('twig options', {
|
|
23
|
-
strict_variables: false
|
|
24
|
-
});
|
|
25
|
-
app.get('/', (_req, res) => {
|
|
26
|
-
res.render('index.twig');
|
|
27
|
-
});
|
|
28
|
-
app.get('/monitor', (_req, res) => {
|
|
29
|
-
res.render('monitor.twig');
|
|
30
|
-
});
|
|
31
|
-
function getServerTimeCode(add = 0) {
|
|
32
|
-
return Math.floor((Date.now() + add) / 1000).toString(36);
|
|
33
|
-
}
|
|
34
|
-
function createServer(clientCode, port) {
|
|
35
|
-
app.get('/client', cors_1.default(), (_req, res) => {
|
|
36
|
-
res.json({
|
|
37
|
-
client: {
|
|
38
|
-
code: clientCode,
|
|
39
|
-
},
|
|
40
|
-
time: Math.floor(Date.now() / 1000),
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
app.get('/login', cors_1.default(), (_req, res) => {
|
|
44
|
-
let user = UserManager_1.userManager.login(clientCode, false);
|
|
45
|
-
res.json({
|
|
46
|
-
user: user,
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
app.get('/timecode', cors_1.default(), (_req, res) => {
|
|
50
|
-
res.send(Math.floor(Date.now() / 1000).toString(36));
|
|
51
|
-
});
|
|
52
|
-
app.get('/requestGuestToken', cors_1.default(), (_req, res) => {
|
|
53
|
-
let user = UserManager_1.userManager.login(clientCode, true);
|
|
54
|
-
res.json({
|
|
55
|
-
user: user,
|
|
56
|
-
ip: user.ip,
|
|
57
|
-
token: user.token,
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
app.post('/jsonrpc/cmd', cors_1.default(), (_req, res) => {
|
|
61
|
-
let command = _req.body.command;
|
|
62
|
-
let user = UserManager_1.userManager.getByToken(_req.body.token);
|
|
63
|
-
Database_1.database.executeCommand(user, command)
|
|
64
|
-
.then(result => {
|
|
65
|
-
res.json({
|
|
66
|
-
result: result,
|
|
67
|
-
time: getServerTimeCode(),
|
|
68
|
-
});
|
|
69
|
-
})
|
|
70
|
-
.catch(err => {
|
|
71
|
-
res.status(400);
|
|
72
|
-
res.send(err);
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
|
-
app.post('/jsonrpc/cmds', cors_1.default(), (_req, res) => {
|
|
76
|
-
let commands = _req.body.commands;
|
|
77
|
-
let user = UserManager_1.userManager.getByToken(_req.body.token);
|
|
78
|
-
return Promise.all(commands.map(command => Database_1.database.executeCommand(user, command)))
|
|
79
|
-
.then(results => {
|
|
80
|
-
res.json({
|
|
81
|
-
results: results,
|
|
82
|
-
time: getServerTimeCode(),
|
|
83
|
-
});
|
|
84
|
-
})
|
|
85
|
-
.catch(err => {
|
|
86
|
-
res.status(400);
|
|
87
|
-
res.send(err);
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
return new Promise(resolve => {
|
|
91
|
-
let server = http_1.default.createServer(app);
|
|
92
|
-
server.listen(port, () => resolve(server));
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
function initServer(clientCode, port) {
|
|
96
|
-
return createServer(clientCode, port)
|
|
97
|
-
.then(server => {
|
|
98
|
-
const io = socket_io_1.default(server);
|
|
99
|
-
const gameIO = io.of('/game');
|
|
100
|
-
return {
|
|
101
|
-
app: app,
|
|
102
|
-
server: server,
|
|
103
|
-
io: io,
|
|
104
|
-
gameIO: gameIO,
|
|
105
|
-
port: port,
|
|
106
|
-
};
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
exports.initServer = initServer;
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.initServer = void 0;
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const http_1 = __importDefault(require("http"));
|
|
9
|
+
const socket_io_1 = __importDefault(require("socket.io"));
|
|
10
|
+
const cors_1 = __importDefault(require("cors"));
|
|
11
|
+
const UserManager_1 = require("./managers/UserManager");
|
|
12
|
+
const Database_1 = require("./managers/Database");
|
|
13
|
+
//
|
|
14
|
+
let app = express_1.default();
|
|
15
|
+
let packageRoot = __dirname + '/../../..';
|
|
16
|
+
let res = packageRoot + '/assets/server';
|
|
17
|
+
app.use(express_1.default.static(res + '/static'));
|
|
18
|
+
app.use(express_1.default.json());
|
|
19
|
+
app.use(express_1.default.urlencoded());
|
|
20
|
+
app.set('views', res + '/views');
|
|
21
|
+
app.set('view engine', 'twig');
|
|
22
|
+
app.set('twig options', {
|
|
23
|
+
strict_variables: false
|
|
24
|
+
});
|
|
25
|
+
app.get('/', (_req, res) => {
|
|
26
|
+
res.render('index.twig');
|
|
27
|
+
});
|
|
28
|
+
app.get('/monitor', (_req, res) => {
|
|
29
|
+
res.render('monitor.twig');
|
|
30
|
+
});
|
|
31
|
+
function getServerTimeCode(add = 0) {
|
|
32
|
+
return Math.floor((Date.now() + add) / 1000).toString(36);
|
|
33
|
+
}
|
|
34
|
+
function createServer(clientCode, port) {
|
|
35
|
+
app.get('/client', cors_1.default(), (_req, res) => {
|
|
36
|
+
res.json({
|
|
37
|
+
client: {
|
|
38
|
+
code: clientCode,
|
|
39
|
+
},
|
|
40
|
+
time: Math.floor(Date.now() / 1000),
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
app.get('/login', cors_1.default(), (_req, res) => {
|
|
44
|
+
let user = UserManager_1.userManager.login(clientCode, false);
|
|
45
|
+
res.json({
|
|
46
|
+
user: user,
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
app.get('/timecode', cors_1.default(), (_req, res) => {
|
|
50
|
+
res.send(Math.floor(Date.now() / 1000).toString(36));
|
|
51
|
+
});
|
|
52
|
+
app.get('/requestGuestToken', cors_1.default(), (_req, res) => {
|
|
53
|
+
let user = UserManager_1.userManager.login(clientCode, true);
|
|
54
|
+
res.json({
|
|
55
|
+
user: user,
|
|
56
|
+
ip: user.ip,
|
|
57
|
+
token: user.token,
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
app.post('/jsonrpc/cmd', cors_1.default(), (_req, res) => {
|
|
61
|
+
let command = _req.body.command;
|
|
62
|
+
let user = UserManager_1.userManager.getByToken(_req.body.token);
|
|
63
|
+
Database_1.database.executeCommand(user, command)
|
|
64
|
+
.then(result => {
|
|
65
|
+
res.json({
|
|
66
|
+
result: result,
|
|
67
|
+
time: getServerTimeCode(),
|
|
68
|
+
});
|
|
69
|
+
})
|
|
70
|
+
.catch(err => {
|
|
71
|
+
res.status(400);
|
|
72
|
+
res.send(err);
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
app.post('/jsonrpc/cmds', cors_1.default(), (_req, res) => {
|
|
76
|
+
let commands = _req.body.commands;
|
|
77
|
+
let user = UserManager_1.userManager.getByToken(_req.body.token);
|
|
78
|
+
return Promise.all(commands.map(command => Database_1.database.executeCommand(user, command)))
|
|
79
|
+
.then(results => {
|
|
80
|
+
res.json({
|
|
81
|
+
results: results,
|
|
82
|
+
time: getServerTimeCode(),
|
|
83
|
+
});
|
|
84
|
+
})
|
|
85
|
+
.catch(err => {
|
|
86
|
+
res.status(400);
|
|
87
|
+
res.send(err);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
return new Promise(resolve => {
|
|
91
|
+
let server = http_1.default.createServer(app);
|
|
92
|
+
server.listen(port, () => resolve(server));
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function initServer(clientCode, port) {
|
|
96
|
+
return createServer(clientCode, port)
|
|
97
|
+
.then(server => {
|
|
98
|
+
const io = socket_io_1.default(server);
|
|
99
|
+
const gameIO = io.of('/game');
|
|
100
|
+
return {
|
|
101
|
+
app: app,
|
|
102
|
+
server: server,
|
|
103
|
+
io: io,
|
|
104
|
+
gameIO: gameIO,
|
|
105
|
+
port: port,
|
|
106
|
+
};
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
exports.initServer = initServer;
|
|
110
110
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZlci9zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsc0RBQThCO0FBQzlCLGdEQUF3QjtBQUN4QiwwREFBaUM7QUFDakMsZ0RBQXdCO0FBQ3hCLHdEQUFxRDtBQUNyRCxrREFBK0M7QUFTL0MsRUFBRTtBQUNGLElBQUksR0FBRyxHQUFHLGlCQUFPLEVBQUUsQ0FBQztBQUNwQixJQUFJLFdBQVcsR0FBRyxTQUFTLEdBQUcsV0FBVyxDQUFDO0FBQzFDLElBQUksR0FBRyxHQUFHLFdBQVcsR0FBRyxnQkFBZ0IsQ0FBQztBQUV6QyxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3pDLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsaUJBQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBQzlCLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQztBQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQixHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRTtJQUNwQixnQkFBZ0IsRUFBRSxLQUFLO0NBQzFCLENBQUMsQ0FBQztBQUVILEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQ3ZCLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDN0IsQ0FBQyxDQUFDLENBQUM7QUFDSCxHQUFHLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtJ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
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ServiceBase = void 0;
|
|
4
|
-
const MonitorManager_1 = require("../managers/MonitorManager");
|
|
5
|
-
class ServiceBase {
|
|
6
|
-
constructor(name) {
|
|
7
|
-
this.name = name;
|
|
8
|
-
}
|
|
9
|
-
_execute(player, method, params) {
|
|
10
|
-
try {
|
|
11
|
-
MonitorManager_1.monitorManager.logIncoming(player.client.project.code, 'player', this.name + 'Service.' + method, params, player);
|
|
12
|
-
if (method.startsWith('_')) {
|
|
13
|
-
throw new Error('method not supported: ' + method);
|
|
14
|
-
}
|
|
15
|
-
params.unshift(player);
|
|
16
|
-
let func = this[method];
|
|
17
|
-
return func.apply(this, params);
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
return Promise.reject(err);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.ServiceBase = ServiceBase;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServiceBase = void 0;
|
|
4
|
+
const MonitorManager_1 = require("../managers/MonitorManager");
|
|
5
|
+
class ServiceBase {
|
|
6
|
+
constructor(name) {
|
|
7
|
+
this.name = name;
|
|
8
|
+
}
|
|
9
|
+
_execute(player, method, params) {
|
|
10
|
+
try {
|
|
11
|
+
MonitorManager_1.monitorManager.logIncoming(player.client.project.code, 'player', this.name + 'Service.' + method, params, player);
|
|
12
|
+
if (method.startsWith('_')) {
|
|
13
|
+
throw new Error('method not supported: ' + method);
|
|
14
|
+
}
|
|
15
|
+
params.unshift(player);
|
|
16
|
+
let func = this[method];
|
|
17
|
+
return func.apply(this, params);
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return Promise.reject(err);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.ServiceBase = ServiceBase;
|
|
25
25
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VydmljZUJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmVyL3NlcnZpY2VzL1NlcnZpY2VCYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtEQUE0RDtBQUU1RCxNQUFhLFdBQVc7SUFFcEIsWUFBbUIsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7SUFFL0IsQ0FBQztJQUVELFFBQVEsQ0FBQyxNQUFjLEVBQUUsTUFBYyxFQUFFLE1BQWE7UUFDbEQsSUFBSTtZQUNBLCtCQUFjLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxVQUFVLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVsSCxJQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0JBQXdCLEdBQUcsTUFBTSxDQUFDLENBQUM7YUFDdEQ7WUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZCLElBQUksSUFBSSxHQUFhLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ25DO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDOUI7SUFDTCxDQUFDO0NBQ0o7QUFwQkQsa0NBb0JDIn0=
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clientService = void 0;
|
|
4
|
-
const ServiceBase_1 = require("./ServiceBase");
|
|
5
|
-
const ClientManager_1 = require("./../managers/ClientManager");
|
|
6
|
-
class ClientService extends ServiceBase_1.ServiceBase {
|
|
7
|
-
constructor() {
|
|
8
|
-
super('client');
|
|
9
|
-
}
|
|
10
|
-
_initialize() {
|
|
11
|
-
}
|
|
12
|
-
getPlayersCount(player, options) {
|
|
13
|
-
return Promise.resolve(player.client.getPlayersCount(options));
|
|
14
|
-
}
|
|
15
|
-
getPlayersCountByClients(_player, clientCodes) {
|
|
16
|
-
let counts = clientCodes.map((code) => {
|
|
17
|
-
let project = ClientManager_1.clientManager.getCachedClientProject(code);
|
|
18
|
-
return project ? project.playersCount : 0;
|
|
19
|
-
});
|
|
20
|
-
return Promise.resolve(counts);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
exports.clientService = new ClientService();
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.clientService = void 0;
|
|
4
|
+
const ServiceBase_1 = require("./ServiceBase");
|
|
5
|
+
const ClientManager_1 = require("./../managers/ClientManager");
|
|
6
|
+
class ClientService extends ServiceBase_1.ServiceBase {
|
|
7
|
+
constructor() {
|
|
8
|
+
super('client');
|
|
9
|
+
}
|
|
10
|
+
_initialize() {
|
|
11
|
+
}
|
|
12
|
+
getPlayersCount(player, options) {
|
|
13
|
+
return Promise.resolve(player.client.getPlayersCount(options));
|
|
14
|
+
}
|
|
15
|
+
getPlayersCountByClients(_player, clientCodes) {
|
|
16
|
+
let counts = clientCodes.map((code) => {
|
|
17
|
+
let project = ClientManager_1.clientManager.getCachedClientProject(code);
|
|
18
|
+
return project ? project.playersCount : 0;
|
|
19
|
+
});
|
|
20
|
+
return Promise.resolve(counts);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.clientService = new ClientService();
|
|
24
24
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50U2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2ZXIvc2VydmljZXMvY2xpZW50U2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrQ0FBNEM7QUFDNUMsK0RBQTREO0FBRzVELE1BQU0sYUFBYyxTQUFRLHlCQUFXO0lBR25DO1FBQ0ksS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXO0lBRVgsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFjLEVBQUUsT0FBc0M7UUFDbEUsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELHdCQUF3QixDQUFDLE9BQWUsRUFBRSxXQUFxQjtRQUMzRCxJQUFJLE1BQU0sR0FBYSxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxPQUFPLEdBQUcsNkJBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6RCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7Q0FFSjtBQUVZLFFBQUEsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUMifQ==
|