tcic-electron-sdk 1.5.245 → 1.5.248

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.
@@ -1,402 +1 @@
1
- /******/ (() => { // webpackBootstrap
2
- /******/ "use strict";
3
- /******/ var __webpack_modules__ = ({
4
-
5
- /***/ "./src/boardRenderer.ts":
6
- /*!******************************!*\
7
- !*** ./src/boardRenderer.ts ***!
8
- \******************************/
9
- /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
10
-
11
-
12
- // This file is required by the board.html file and will
13
- // be executed in the renderer process for that window.
14
- // No Node.js APIs are available in this process because
15
- // `nodeIntegration` is turned off. Use `preload.js` to
16
- // selectively enable features needed in the rendering
17
- // process.
18
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
19
- if (k2 === undefined) k2 = k;
20
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
21
- }) : (function(o, m, k, k2) {
22
- if (k2 === undefined) k2 = k;
23
- o[k2] = m[k];
24
- }));
25
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
26
- Object.defineProperty(o, "default", { enumerable: true, value: v });
27
- }) : function(o, v) {
28
- o["default"] = v;
29
- });
30
- var __importStar = (this && this.__importStar) || function (mod) {
31
- if (mod && mod.__esModule) return mod;
32
- var result = {};
33
- if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
34
- __setModuleDefault(result, mod);
35
- return result;
36
- };
37
- Object.defineProperty(exports, "__esModule", ({ value: true }));
38
- const electron_1 = __webpack_require__(/*! electron */ "electron");
39
- const rendererUtil = __importStar(__webpack_require__(/*! ./rendererUtil */ "./src/rendererUtil.ts"));
40
- // import { tcicSdkVersion } from './sentry'; // 用于初始化异常捕获,切勿删除
41
- // console.log('version', tcicSdkVersion);
42
- class BoardRender {
43
- static setVisibleRect(bounds) {
44
- if (bounds) {
45
- if (BoardRender.screenHeight === 0 || BoardRender.screenWidth === 0) {
46
- BoardRender.screenHeight = screen.height;
47
- BoardRender.screenWidth = screen.width;
48
- BoardRender.boardElement.style.width = `${screen.width}px`;
49
- BoardRender.boardElement.style.height = `${screen.height}px`;
50
- }
51
- BoardRender.boardWrapElement.style.width = `${bounds.width}px`;
52
- BoardRender.boardWrapElement.style.height = `${bounds.height}px`;
53
- BoardRender.boardWrapElement.style.left = `${bounds.x}px`;
54
- BoardRender.boardWrapElement.style.top = `${bounds.y}px`;
55
- BoardRender.boardWrapElement.style.position = 'absolute';
56
- }
57
- else {
58
- BoardRender.boardWrapElement.removeAttribute('style');
59
- BoardRender.boardElement.removeAttribute('style');
60
- }
61
- }
62
- ;
63
- static updateCursor() {
64
- if (!BoardRender.teduBoard)
65
- return;
66
- const toolType = BoardRender.teduBoard.getToolType();
67
- const brushColor = BoardRender.teduBoard.getBrushColor();
68
- if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_PEN) {
69
- const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?><svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>mouse_pen</title>
70
- <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
71
- <g id="光标及状态栏状态" transform="translate(-89.000000, -268.000000)">
72
- <g id="mouse_pen" transform="translate(89.000000, 268.000000)">
73
- <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
74
- <g id="编组-13" transform="translate(8.000000, 3.000000)" fill="${brushColor}" stroke="#182E25">
75
- <path d="M0.756984031,32.1383216 L3.68816089e-13,26.5292023 L17.8941729,7.81597009e-14 L24.5264735,4.47354323 L6.63230058,31.0027455 L0.756984031,32.1383216 Z" id="形状结合"></path>
76
- </g>
77
- </g>
78
- </g>
79
- </g>
80
- </svg>`;
81
- const cursorBase64 = `data:image/svg+xml;charset=utf-8,${escape(cursorSvg)}`;
82
- BoardRender.teduBoard.setCursorIcon(toolType, {
83
- cursor: 'url',
84
- url: cursorBase64,
85
- offsetX: 10,
86
- offsetY: 40,
87
- });
88
- }
89
- else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LINE) {
90
- const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
91
- <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
92
- <title>mouse_line</title>
93
- <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
94
- <g id="光标及状态栏状态" transform="translate(-785.000000, -272.000000)">
95
- <g id="mouse_line" transform="translate(785.000000, 272.000000)">
96
- <g id="编组-3">
97
- <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
98
- <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
99
- <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
100
- </g>
101
- </g>
102
- <line x1="28.5" y1="7.5" x2="36.5" y2="7.5" id="直线-6" stroke="${brushColor}" stroke-width="2" stroke-linecap="square"></line>
103
- </g>
104
- </g>
105
- </g>
106
- </svg>`;
107
- const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
108
- BoardRender.teduBoard.setCursorIcon(toolType, {
109
- cursor: 'url',
110
- url: cursorBase64,
111
- offsetX: 20,
112
- offsetY: 20,
113
- });
114
- }
115
- else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_RECT) {
116
- const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
117
- <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
118
- <title>mouse_rectangle</title>
119
- <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
120
- <g id="光标及状态栏状态" transform="translate(-551.000000, -272.000000)">
121
- <g id="mouse_rectangle" transform="translate(551.000000, 272.000000)">
122
- <g id="编组-3">
123
- <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
124
- <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
125
- <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
126
- </g>
127
- </g>
128
- <rect id="矩形" stroke="${brushColor}" stroke-width="2" x="28" y="3" width="8" height="8"></rect>
129
- </g>
130
- </g>
131
- </g>
132
- </svg>`;
133
- const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
134
- BoardRender.teduBoard.setCursorIcon(toolType, {
135
- cursor: 'url',
136
- url: cursorBase64,
137
- offsetX: 20,
138
- offsetY: 20,
139
- });
140
- // 矩形也设置一下(当按住shift键的时候,工具会切换为矩形)
141
- BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_SQUARE, {
142
- cursor: 'url',
143
- url: cursorBase64,
144
- offsetX: 20,
145
- offsetY: 20,
146
- });
147
- }
148
- else if (toolType === BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_OVAL) {
149
- const cursorSvg = `<?xml version="1.0" encoding="UTF-8"?>
150
- <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
151
- <title>mouse_circle</title>
152
- <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
153
- <g id="光标及状态栏状态" transform="translate(-323.000000, -272.000000)">
154
- <g id="mouse_circle" transform="translate(323.000000, 272.000000)">
155
- <g id="编组-3">
156
- <rect id="矩形" x="0" y="0" width="40" height="40"></rect>
157
- <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">
158
- <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>
159
- </g>
160
- </g>
161
- <circle id="椭圆形" stroke="${brushColor}" stroke-width="2" cx="32" cy="7" r="4"></circle>
162
- </g>
163
- </g>
164
- </g>
165
- </svg>`;
166
- const cursorBase64 = `data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(cursorSvg)))}`;
167
- BoardRender.teduBoard.setCursorIcon(toolType, {
168
- cursor: 'url',
169
- url: cursorBase64,
170
- offsetX: 20,
171
- offsetY: 20,
172
- });
173
- // 正圆也设置一下(当按住shift键的时候,工具会切换为正圆)
174
- BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_CIRCLE, {
175
- cursor: 'url',
176
- url: cursorBase64,
177
- offsetX: 20,
178
- offsetY: 20,
179
- });
180
- }
181
- BoardRender.teduBoard.setToolType(toolType); // 马上再更新一下工具,保证光标生效(白板bug)
182
- }
183
- ;
184
- static callBoardMethod(arg) {
185
- console.log('callBoardMethod', BoardRender.teduBoard, JSON.stringify(arg));
186
- if (BoardRender.teduBoard) {
187
- // eslint-disable-next-line prefer-spread
188
- BoardRender.teduBoard[arg.method].apply(BoardRender.teduBoard, arg.params);
189
- BoardRender.updateCursor();
190
- // if (arg.method === 'setToolType') {
191
- // const toolType = arg.params[0];
192
- // // 系统光标对阴影滤镜支持不好,激光笔渐变部分会出现黑色阴影,目前先将激光笔用模拟的方式来实现,其他工具继续使用系统光标(同时在touch设备下系统光标也不会出现)
193
- // if (toolType === BoardRender.teduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LASER) {
194
- // BoardRender.teduBoard.setSystemCursorEnable(false);
195
- // } else {
196
- // BoardRender.teduBoard.setSystemCursorEnable(true);
197
- // }
198
- // }
199
- }
200
- }
201
- ;
202
- }
203
- BoardRender.TEduBoard = window.TEduBoard;
204
- BoardRender.teduBoard = null;
205
- BoardRender.boardElement = null;
206
- BoardRender.boardWrapElement = null;
207
- BoardRender.screenWidth = 0;
208
- BoardRender.screenHeight = 0;
209
- BoardRender.callMethodCache = []; // 缓存白板初始化完成前的指令
210
- BoardRender.isBoardReady = false;
211
- ;
212
- window.BoardRender = BoardRender;
213
- electron_1.ipcRenderer.on('initBoard', (event, params) => {
214
- const BoardRender = window.BoardRender;
215
- if (BoardRender.teduBoard) {
216
- return;
217
- }
218
- const initParams = {
219
- id: 'board',
220
- sdkAppId: params.sdkAppId,
221
- classId: params.roomId,
222
- userId: params.userId,
223
- userSig: params.userSig,
224
- ratio: `${screen.width}:${screen.height}`,
225
- systemCursorEnable: false,
226
- enableLocalMode: true,
227
- styleConfig: {
228
- globalBackgroundColor: 'rgba(0, 0, 0, 0.01)',
229
- textColor: '#ff0000',
230
- selectBoxColor: '#727272',
231
- cursorSize: [40, 40],
232
- brushThin: 50,
233
- selectAnchorColor: '#006eff',
234
- },
235
- };
236
- BoardRender.teduBoard = new BoardRender.TEduBoard(initParams);
237
- // 监听白板错误事件
238
- BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_ERROR, (code, msg) => {
239
- });
240
- // 监听白板告警事件
241
- BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_WARNING, (code, msg) => {
242
- });
243
- BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_HISTROYDATA_SYNCCOMPLETED, () => {
244
- // 默认使用鼠标工具
245
- BoardRender.teduBoard.setToolType(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_MOUSE);
246
- // 启用笔锋特性
247
- BoardRender.teduBoard.setHandwritingEnable(true);
248
- // 设置橡皮擦自定义图标
249
- BoardRender.teduBoard.setCursorIcon(BoardRender.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_ERASER, {
250
- cursor: 'url',
251
- url: 'https://res.qcloudtiw.com/board/icons/xkt/eraser.svg',
252
- offsetX: 7,
253
- offsetY: 25,
254
- });
255
- BoardRender.updateCursor();
256
- if (BoardRender.callMethodCache.length === 0) {
257
- // 没有指令,则默认设置未鼠标工具
258
- BoardRender.teduBoard.setToolType(0);
259
- }
260
- else {
261
- // 执行缓存指令
262
- BoardRender.callMethodCache.forEach((arg) => {
263
- BoardRender.callBoardMethod(arg);
264
- });
265
- BoardRender.callMethodCache = [];
266
- }
267
- BoardRender.isBoardReady = true;
268
- });
269
- // 监听事件,image为截图内容的base64数据
270
- BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_SNAPSHOT, (data) => {
271
- electron_1.ipcRenderer.send('onScreenShareSnapshot', data);
272
- });
273
- BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_OPERATE_CANREDO_STATUS_CHANGED, (status) => {
274
- electron_1.ipcRenderer.send('onBoardCanRedoChange', status);
275
- });
276
- BoardRender.teduBoard.on(BoardRender.TEduBoard.EVENT.TEB_OPERATE_CANUNDO_STATUS_CHANGED, (status) => {
277
- electron_1.ipcRenderer.send('onBoardCanUndoChange', status);
278
- });
279
- BoardRender.setVisibleRect(params.shareWindowBounds);
280
- });
281
- electron_1.ipcRenderer.on('onShareWindowBoundsChanged', (event, bounds) => {
282
- const BoardRender = window.BoardRender;
283
- BoardRender.setVisibleRect(bounds);
284
- });
285
- electron_1.ipcRenderer.on('callMethod', (event, arg) => {
286
- const BoardRender = window.BoardRender;
287
- if (!BoardRender.isBoardReady) { // 白板为初始化完成,缓存白板指令
288
- BoardRender.callMethodCache.push(arg);
289
- return;
290
- }
291
- BoardRender.callBoardMethod(arg);
292
- });
293
- const events = ['touchstart', 'touchend'];
294
- electron_1.ipcRenderer.on('enableWatchMouseMoveEvent', (event, enabled) => {
295
- rendererUtil.watchEvents(document, events, enabled);
296
- });
297
- window.onload = () => {
298
- BoardRender.boardWrapElement = document.getElementById('board-wrap');
299
- BoardRender.boardElement = document.getElementById('board');
300
- };
301
-
302
-
303
- /***/ }),
304
-
305
- /***/ "./src/rendererUtil.ts":
306
- /*!*****************************!*\
307
- !*** ./src/rendererUtil.ts ***!
308
- \*****************************/
309
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
310
-
311
-
312
- Object.defineProperty(exports, "__esModule", ({ value: true }));
313
- exports.watchEvents = void 0;
314
- const electron_1 = __webpack_require__(/*! electron */ "electron");
315
- function createMouseMoveProcessor() {
316
- const lastX = 0;
317
- const lastY = 0;
318
- return (e) => {
319
- let x;
320
- let y;
321
- if (e instanceof TouchEvent) { // 触摸事件
322
- x = Math.round(e.changedTouches[0].screenX);
323
- y = Math.round(e.changedTouches[0].screenY);
324
- }
325
- else { // 鼠标事件
326
- x = e.screenX;
327
- y = e.screenY;
328
- }
329
- if (x !== lastX || y !== lastY) { // 只有位置发生变化时才发送消息,减少资源消耗
330
- const args = { type: e.type, x, y };
331
- electron_1.ipcRenderer.send('onMouseEvent', args);
332
- console.log('onMouseEvent', args);
333
- }
334
- };
335
- }
336
- const eventProcessor = createMouseMoveProcessor();
337
- function watchEvents(target, events, enabled) {
338
- events.forEach((event) => {
339
- if (enabled) {
340
- target.addEventListener(event, eventProcessor, {
341
- capture: true,
342
- passive: false,
343
- });
344
- }
345
- else {
346
- target.removeEventListener(event, eventProcessor, {
347
- capture: true,
348
- });
349
- }
350
- });
351
- }
352
- exports.watchEvents = watchEvents;
353
-
354
-
355
- /***/ }),
356
-
357
- /***/ "electron":
358
- /*!***************************!*\
359
- !*** external "electron" ***!
360
- \***************************/
361
- /***/ ((module) => {
362
-
363
- module.exports = require("electron");
364
-
365
- /***/ })
366
-
367
- /******/ });
368
- /************************************************************************/
369
- /******/ // The module cache
370
- /******/ var __webpack_module_cache__ = {};
371
- /******/
372
- /******/ // The require function
373
- /******/ function __webpack_require__(moduleId) {
374
- /******/ // Check if module is in cache
375
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
376
- /******/ if (cachedModule !== undefined) {
377
- /******/ return cachedModule.exports;
378
- /******/ }
379
- /******/ // Create a new module (and put it into the cache)
380
- /******/ var module = __webpack_module_cache__[moduleId] = {
381
- /******/ // no module.id needed
382
- /******/ // no module.loaded needed
383
- /******/ exports: {}
384
- /******/ };
385
- /******/
386
- /******/ // Execute the module function
387
- /******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
388
- /******/
389
- /******/ // Return the exports of the module
390
- /******/ return module.exports;
391
- /******/ }
392
- /******/
393
- /************************************************************************/
394
- /******/
395
- /******/ // startup
396
- /******/ // Load entry module and return exports
397
- /******/ // This entry module is referenced by other modules so it can't be inlined
398
- /******/ var __webpack_exports__ = __webpack_require__("./src/boardRenderer.ts");
399
- /******/
400
- /******/ })()
401
- ;
402
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay8uL3NyYy9ib2FyZFJlbmRlcmVyLnRzIiwid2VicGFjazovL3RjaWMtZWxlY3Ryb24tc2RrLy4vc3JjL3JlbmRlcmVyVXRpbC50cyIsIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9zdGFydHVwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsd0RBQXdEO0FBQ3hELHVEQUF1RDtBQUN2RCx3REFBd0Q7QUFDeEQsdURBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFWCxtRUFBdUM7QUFDdkMsc0dBQStDO0FBQy9DLCtEQUErRDtBQUUvRCwwQ0FBMEM7QUFFMUMsTUFBTSxXQUFXO0lBU1IsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFXO1FBQ3RDLElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxXQUFXLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxLQUFLLENBQUMsRUFBRTtnQkFDbkUsV0FBVyxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2dCQUN6QyxXQUFXLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZDLFdBQVcsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxHQUFHLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQztnQkFDM0QsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDO2FBQzlEO1lBQ0QsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxN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bkM7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxjQUFjLEdBQUcsd0JBQXdCLEVBQUUsQ0FBQztBQUVsRCxTQUFnQixXQUFXLENBQUMsTUFBbUIsRUFBRSxNQUFnQixFQUFFLE9BQWdCO0lBQ2pGLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN2QixJQUFJLE9BQU8sRUFBRTtZQUNYLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFO2dCQUM3QyxPQUFPLEVBQUUsSUFBSTtnQkFDYixPQUFPLEVBQUUsS0FBSzthQUNmLENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtnQkFDaEQsT0FBTyxFQUFFLElBQUk7YUFDZCxDQUFDLENBQUM7U0FDSjtJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWJELGtDQWFDOzs7Ozs7Ozs7OztBQ3JDRCxxQzs7Ozs7O1VDQUE7VUFDQTs7VUFFQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTs7VUFFQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7OztVQ3RCQTtVQUNBO1VBQ0E7VUFDQSIsImZpbGUiOiJib2FyZFJlbmRlcmVyLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgZmlsZSBpcyByZXF1aXJlZCBieSB0aGUgYm9hcmQuaHRtbCBmaWxlIGFuZCB3aWxsXG4vLyBiZSBleGVjdXRlZCBpbiB0aGUgcmVuZGVyZXIgcHJvY2VzcyBmb3IgdGhhdCB3aW5kb3cuXG4vLyBObyBOb2RlLmpzIEFQSXMgYXJlIGF2YWlsYWJsZSBpbiB0aGlzIHByb2Nlc3MgYmVjYXVzZVxuLy8gYG5vZGVJbnRlZ3JhdGlvbmAgaXMgdHVybmVkIG9mZi4gVXNlIGBwcmVsb2FkLmpzYCB0b1xuLy8gc2VsZWN0aXZlbHkgZW5hYmxlIGZlYXR1cmVzIG5lZWRlZCBpbiB0aGUgcmVuZGVyaW5nXG4vLyBwcm9jZXNzLlxuXG5pbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcbmltcG9ydCAqIGFzIHJlbmRlcmVyVXRpbCBmcm9tICcuL3JlbmRlcmVyVXRpbCc7XG4vLyBpbXBvcnQgeyB0Y2ljU2RrVmVyc2lvbiB9IGZyb20gJy4vc2VudHJ5JzsgLy8g55So5LqO5Yid5aeL5YyW5byC5bi45o2V6I6377yM5YiH5Yu/5Yig6ZmkXG5cbi8vIGNvbnNvbGUubG9nKCd2ZXJzaW9uJywgdGNpY1Nka1ZlcnNpb24pO1xuXG5jbGFzcyBCb2FyZFJlbmRlciB7XG4gIHB1YmxpYyBzdGF0aWMgVEVkdUJvYXJkOiBhbnkgPSAod2luZG93IGFzIGFueSkuVEVkdUJvYXJkO1xuICBwdWJsaWMgc3RhdGljIHRlZHVCb2FyZDogYW55ID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBib2FyZEVsZW1lbnQ6IGFueSA9IG51bGw7XG4gIHB1YmxpYyBzdGF0aWMgYm9hcmRXcmFwRWxlbWVudDogYW55ID0gbnVsbDtcbiAgcHVibGljIHN0YXRpYyBzY3JlZW5XaWR0aCA9IDA7XG4gIHB1YmxpYyBzdGF0aWMgc2NyZWVuSGVpZ2h0ID0gMDtcbiAgcHVibGljIHN0YXRpYyBjYWxsTWV0aG9kQ2FjaGU6IGFueSA9IFtdOyAvLyDnvJPlrZjnmb3mnb/liJ3lp4vljJblrozmiJDliY3nmoTmjIfku6RcbiAgcHVibGljIHN0YXRpYyBpc0JvYXJkUmVhZHkgPSBmYWxzZTtcbiAgcHVibGljIHN0YXRpYyBzZXRWaXNpYmxlUmVjdChib3VuZHM6IGFueSkge1xuICAgIGlmIChib3VuZHMpIHtcbiAgICAgIGlmIChCb2FyZFJlbmRlci5zY3JlZW5IZWlnaHQgPT09IDAgfHwgQm9hcmRSZW5kZXIuc2NyZWVuV2lkdGggPT09IDApIHtcbiAgICAgICAgQm9hcmRSZW5kZXIuc2NyZWVuSGVpZ2h0ID0gc2NyZWVuLmhlaWdodDtcbiAgICAgICAgQm9hcmRSZW5kZXIuc2NyZWVuV2lkdGggPSBzY3JlZW4ud2lkdGg7XG4gICAgICAgIEJvYXJkUmVuZGVyLmJvYXJkRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3NjcmVlbi53aWR0aH1weGA7XG4gICAgICAgIEJvYXJkUmVuZGVyLmJvYXJkRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtzY3JlZW4uaGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtib3VuZHMud2lkdGh9cHhgO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRXcmFwRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtib3VuZHMuaGVpZ2h0fXB4YDtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2JvdW5kcy54fXB4YDtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQuc3R5bGUudG9wID0gYCR7Ym91bmRzLnl9cHhgO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRXcmFwRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdzdHlsZScpO1xuICAgICAgQm9hcmRSZW5kZXIuYm9hcmRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICB9XG4gIH07XG4gIHB1YmxpYyBzdGF0aWMgdXBkYXRlQ3Vyc29yKCkge1xuICAgIGlmICghQm9hcmRSZW5kZXIudGVkdUJvYXJkKSByZXR1cm47XG4gICAgY29uc3QgdG9vbFR5cGUgPSBCb2FyZFJlbmRlci50ZWR1Qm9hcmQuZ2V0VG9vbFR5cGUoKTtcbiAgICBjb25zdCBicnVzaENvbG9yID0gQm9hcmRSZW5kZXIudGVkdUJvYXJkLmdldEJydXNoQ29sb3IoKTtcbiAgICBpZiAodG9vbFR5cGUgPT09IEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9QRU4pIHtcbiAgICAgIGNvbnN0IGN1cnNvclN2ZyA9IGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz48c3ZnIHdpZHRoPVwiNDBweFwiIGhlaWdodD1cIjQwcHhcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgdmVyc2lvbj1cIjEuMVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIj48dGl0bGU+bW91c2VfcGVuPC90aXRsZT5cbiAgICAgICAgICAgICAgPGcgaWQ9XCLpobXpnaItMVwiIHN0cm9rZT1cIm5vbmVcIiBzdHJva2Utd2lkdGg9XCIxXCIgZmlsbD1cIm5vbmVcIiBmaWxsLXJ1bGU9XCJldmVub2RkXCI+XG4gICAgICAgICAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtODkuMDAwMDAwLCAtMjY4LjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIm1vdXNlX3BlblwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg4OS4wMDAwMDAsIDI2OC4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPVwi55+p5b2iXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4QtMTNcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoOC4wMDAwMDAsIDMuMDAwMDAwKVwiIGZpbGw9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlPVwiIzE4MkUyNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wLjc1Njk4NDAzMSwzMi4xMzgzMjE2IEwzLjY4ODE2MDg5ZS0xMywyNi41MjkyMDIzIEwxNy44OTQxNzI5LDcuODE1OTcwMDllLTE0IEwyNC41MjY0NzM1LDQuNDczNTQzMjMgTDYuNjMyMzAwNTgsMzEuMDAyNzQ1NSBMMC43NTY5ODQwMzEsMzIuMTM4MzIxNiBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICA8L3N2Zz5gO1xuICAgICAgY29uc3QgY3Vyc29yQmFzZTY0ID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7ZXNjYXBlKGN1cnNvclN2Zyl9YDtcbiAgICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRDdXJzb3JJY29uKHRvb2xUeXBlLCB7XG4gICAgICAgIGN1cnNvcjogJ3VybCcsXG4gICAgICAgIHVybDogY3Vyc29yQmFzZTY0LFxuICAgICAgICBvZmZzZXRYOiAxMCxcbiAgICAgICAgb2Zmc2V0WTogNDAsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRvb2xUeXBlID09PSBCb2FyZFJlbmRlci5URWR1Qm9hcmQuVEVkdUJvYXJkVG9vbFR5cGUuVEVEVV9CT0FSRF9UT09MX1RZUEVfTElORSkge1xuICAgICAgY29uc3QgY3Vyc29yU3ZnID0gYDw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIlVURi04XCI/PlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwcHhcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XG4gICAgICAgICAgICAgICAgPHRpdGxlPm1vdXNlX2xpbmU8L3RpdGxlPlxuICAgICAgICAgICAgICAgIDxnIGlkPVwi6aG16Z2iLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNzg1LjAwMDAwMCwgLTI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIm1vdXNlX2xpbmVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNzg1LjAwMDAwMCwgMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBpZD1cIue8lue7hC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IGlkPVwi55+p5b2iXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4RcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi42MjgxNTcsIDIuNTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwiI0ZGRkZGRlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS42NTc0MDg5LDAgTDE5LjY1NywxNS41IEwzNC42MjU5NTM0LDE1LjUgTDM0LjYyNTk1MzQsMTkuNSBMMTkuNjU3LDE5LjUgTDE5LjY1NzQwODksMzUgTDE1LjY1NzQwODksMzUgTDE1LjY1NywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTkuNSBMLTEuMTM2ODY4MzhlLTEzLDE1LjUgTDE1LjY1NywxNS41IEwxNS42NTc0MDg5LDAgTDE5LjY1NzQwODksMCBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpbmUgeDE9XCIyOC41XCIgeTE9XCI3LjVcIiB4Mj1cIjM2LjVcIiB5Mj1cIjcuNVwiIGlkPVwi55u057q/LTZcIiBzdHJva2U9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwic3F1YXJlXCI+PC9saW5lPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodG9vbFR5cGUgPT09IEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9SRUNUKSB7XG4gICAgICBjb25zdCBjdXJzb3JTdmcgPSBgPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG4gIDxzdmcgd2lkdGg9XCI0MHB4XCIgaGVpZ2h0PVwiNDBweFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiB2ZXJzaW9uPVwiMS4xXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHhtbG5zOnhsaW5rPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGlua1wiPlxuICAgICAgPHRpdGxlPm1vdXNlX3JlY3RhbmdsZTwvdGl0bGU+XG4gICAgICA8ZyBpZD1cIumhtemdoi0xXCIgc3Ryb2tlPVwibm9uZVwiIHN0cm9rZS13aWR0aD1cIjFcIiBmaWxsPVwibm9uZVwiIGZpbGwtcnVsZT1cImV2ZW5vZGRcIj5cbiAgICAgICAgICA8ZyBpZD1cIuWFieagh+WPiueKtuaAgeagj+eKtuaAgVwiIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgtNTUxLjAwMDAwMCwgLTI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgIDxnIGlkPVwibW91c2VfcmVjdGFuZ2xlXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDU1MS4wMDAwMDAsIDI3Mi4wMDAwMDApXCI+XG4gICAgICAgICAgICAgICAgICA8ZyBpZD1cIue8lue7hC0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9XCLnn6nlvaJcIiB4PVwiMFwiIHk9XCIwXCIgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgIDxnIGlkPVwi57yW57uEXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKDIuNjI4MTU3LCAyLjUwMDAwMClcIiBmaWxsPVwiIzAwMDAwMFwiIHN0cm9rZT1cIiNGRkZGRkZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS42NTc0MDg5LDAgTDE5LjY1NywxNS41IEwzNC42MjU5NTM0LDE1LjUgTDM0LjYyNTk1MzQsMTkuNSBMMTkuNjU3LDE5LjUgTDE5LjY1NzQwODksMzUgTDE1LjY1NzQwODksMzUgTDE1LjY1NywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTkuNSBMLTEuMTM2ODY4MzhlLTEzLDE1LjUgTDE1LjY1NywxNS41IEwxNS42NTc0MDg5LDAgTDE5LjY1NzQwODksMCBaXCIgaWQ9XCLlvaLnirbnu5PlkIhcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgICAgICAgPHJlY3QgaWQ9XCLnn6nlvaJcIiBzdHJva2U9XCIke2JydXNoQ29sb3J9XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHg9XCIyOFwiIHk9XCIzXCIgd2lkdGg9XCI4XCIgaGVpZ2h0PVwiOFwiPjwvcmVjdD5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgIDwvZz5cbiAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgICAgLy8g55+p5b2i5Lmf6K6+572u5LiA5LiLKOW9k+aMieS9j3NoaWZ06ZSu55qE5pe25YCZ77yM5bel5YW35Lya5YiH5o2i5Li655+p5b2iKVxuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX1NRVUFSRSwge1xuICAgICAgICBjdXJzb3I6ICd1cmwnLFxuICAgICAgICB1cmw6IGN1cnNvckJhc2U2NCxcbiAgICAgICAgb2Zmc2V0WDogMjAsXG4gICAgICAgIG9mZnNldFk6IDIwLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0b29sVHlwZSA9PT0gQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX09WQUwpIHtcbiAgICAgIGNvbnN0IGN1cnNvclN2ZyA9IGA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtOFwiPz5cbiAgPHN2ZyB3aWR0aD1cIjQwcHhcIiBoZWlnaHQ9XCI0MHB4XCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+XG4gICAgICA8dGl0bGU+bW91c2VfY2lyY2xlPC90aXRsZT5cbiAgICAgIDxnIGlkPVwi6aG16Z2iLTFcIiBzdHJva2U9XCJub25lXCIgc3Ryb2tlLXdpZHRoPVwiMVwiIGZpbGw9XCJub25lXCIgZmlsbC1ydWxlPVwiZXZlbm9kZFwiPlxuICAgICAgICAgIDxnIGlkPVwi5YWJ5qCH5Y+K54q25oCB5qCP54q25oCBXCIgdHJhbnNmb3JtPVwidHJhbnNsYXRlKC0zMjMuMDAwMDAwLCAtMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgPGcgaWQ9XCJtb3VzZV9jaXJjbGVcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMzIzLjAwMDAwMCwgMjcyLjAwMDAwMClcIj5cbiAgICAgICAgICAgICAgICAgIDxnIGlkPVwi57yW57uELTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBpZD1cIuefqeW9olwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIj48L3JlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgPGcgaWQ9XCLnvJbnu4RcIiB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMi42MjgxNTcsIDIuNTAwMDAwKVwiIGZpbGw9XCIjMDAwMDAwXCIgc3Ryb2tlPVwiI0ZGRkZGRlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5LjY1NzQwODksMCBMMTkuNjU3LDE1LjUgTDM0LjYyNTk1MzQsMTUuNSBMMzQuNjI1OTUzNCwxOS41IEwxOS42NTcsMTkuNSBMMTkuNjU3NDA4OSwzNSBMMTUuNjU3NDA4OSwzNSBMMTUuNjU3LDE5LjUgTC0xLjEzNjg2ODM4ZS0xMywxOS41IEwtMS4xMzY4NjgzOGUtMTMsMTUuNSBMMTUuNjU3LDE1LjUgTDE1LjY1NzQwODksMCBMMTkuNjU3NDA4OSwwIFpcIiBpZD1cIuW9oueKtue7k+WQiFwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8L2c+XG4gICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPVwi5qSt5ZyG5b2iXCIgc3Ryb2tlPVwiJHticnVzaENvbG9yfVwiIHN0cm9rZS13aWR0aD1cIjJcIiBjeD1cIjMyXCIgY3k9XCI3XCIgcj1cIjRcIj48L2NpcmNsZT5cbiAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgIDwvZz5cbiAgICAgIDwvZz5cbiAgPC9zdmc+YDtcbiAgICAgIGNvbnN0IGN1cnNvckJhc2U2NCA9IGBkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCR7d2luZG93LmJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGN1cnNvclN2ZykpKX1gO1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24odG9vbFR5cGUsIHtcbiAgICAgICAgY3Vyc29yOiAndXJsJyxcbiAgICAgICAgdXJsOiBjdXJzb3JCYXNlNjQsXG4gICAgICAgIG9mZnNldFg6IDIwLFxuICAgICAgICBvZmZzZXRZOiAyMCxcbiAgICAgIH0pO1xuICAgICAgLy8g5q2j5ZyG5Lmf6K6+572u5LiA5LiLKOW9k+aMieS9j3NoaWZ06ZSu55qE5pe25YCZ77yM5bel5YW35Lya5YiH5o2i5Li65q2j5ZyGKVxuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldEN1cnNvckljb24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX0NJUkNMRSwge1xuICAgICAgICBjdXJzb3I6ICd1cmwnLFxuICAgICAgICB1cmw6IGN1cnNvckJhc2U2NCxcbiAgICAgICAgb2Zmc2V0WDogMjAsXG4gICAgICAgIG9mZnNldFk6IDIwLFxuICAgICAgfSk7XG4gICAgfVxuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRUb29sVHlwZSh0b29sVHlwZSk7ICAvLyDpqazkuIrlho3mm7TmlrDkuIDkuIvlt6XlhbfvvIzkv53or4HlhYnmoIfnlJ/mlYjvvIjnmb3mnb9idWfvvIlcbiAgfTtcblxuICBwdWJsaWMgc3RhdGljIGNhbGxCb2FyZE1ldGhvZChhcmc6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdjYWxsQm9hcmRNZXRob2QnLCBCb2FyZFJlbmRlci50ZWR1Qm9hcmQsIEpTT04uc3RyaW5naWZ5KGFyZykpO1xuICAgIGlmIChCb2FyZFJlbmRlci50ZWR1Qm9hcmQpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItc3ByZWFkXG4gICAgICBCb2FyZFJlbmRlci50ZWR1Qm9hcmRbYXJnLm1ldGhvZF0uYXBwbHkoQm9hcmRSZW5kZXIudGVkdUJvYXJkLCBhcmcucGFyYW1zKTtcbiAgICAgIEJvYXJkUmVuZGVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgLy8gaWYgKGFyZy5tZXRob2QgPT09ICdzZXRUb29sVHlwZScpIHtcbiAgICAgIC8vICAgY29uc3QgdG9vbFR5cGUgPSBhcmcucGFyYW1zWzBdO1xuICAgICAgLy8gICAvLyDns7vnu5/lhYnmoIflr7npmLTlvbHmu6TplZzmlK/mjIHkuI3lpb3vvIzmv4DlhYnnrJTmuJDlj5jpg6jliIbkvJrlh7rnjrDpu5HoibLpmLTlvbHvvIznm67liY3lhYjlsIbmv4DlhYnnrJTnlKjmqKHmi5/nmoTmlrnlvI/mnaXlrp7njrDvvIzlhbbku5blt6Xlhbfnu6fnu63kvb/nlKjns7vnu5/lhYnmoIco5ZCM5pe25ZyodG91Y2jorr7lpIfkuIvns7vnu5/lhYnmoIfkuZ/kuI3kvJrlh7rnjrApXG4gICAgICAvLyAgIGlmICh0b29sVHlwZSA9PT0gQm9hcmRSZW5kZXIudGVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX0xBU0VSKSB7XG4gICAgICAvLyAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFN5c3RlbUN1cnNvckVuYWJsZShmYWxzZSk7XG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFN5c3RlbUN1cnNvckVuYWJsZSh0cnVlKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgIH1cbiAgfTtcbn07XG5cbih3aW5kb3cgYXMgYW55KS5Cb2FyZFJlbmRlciA9IEJvYXJkUmVuZGVyO1xuXG5pcGNSZW5kZXJlci5vbignaW5pdEJvYXJkJywgKGV2ZW50OiBhbnksIHBhcmFtczogYW55KSA9PiB7XG4gIGNvbnN0IEJvYXJkUmVuZGVyID0gKHdpbmRvdyBhcyBhbnkpLkJvYXJkUmVuZGVyO1xuICBpZiAoQm9hcmRSZW5kZXIudGVkdUJvYXJkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5pdFBhcmFtcyA9IHtcbiAgICBpZDogJ2JvYXJkJywgLy8gZG9t6IqC54K5aWRcbiAgICBzZGtBcHBJZDogcGFyYW1zLnNka0FwcElkLCAvLyDmlbTmlbBcbiAgICBjbGFzc0lkOiBwYXJhbXMucm9vbUlkLCAvLyDor77loIIgSUTvvIwzMuS9jeaVtOWei++8jOWPluWAvOiMg+WbtFsxLCA0Mjk0OTY3Mjk0XVxuICAgIHVzZXJJZDogcGFyYW1zLnVzZXJJZCwgLy8g5a2X56ym5LiyXG4gICAgdXNlclNpZzogcGFyYW1zLnVzZXJTaWcsXG4gICAgcmF0aW86IGAke3NjcmVlbi53aWR0aH06JHtzY3JlZW4uaGVpZ2h0fWAsXG4gICAgc3lzdGVtQ3Vyc29yRW5hYmxlOiBmYWxzZSxcbiAgICBlbmFibGVMb2NhbE1vZGU6IHRydWUsXG4gICAgc3R5bGVDb25maWc6IHtcbiAgICAgIGdsb2JhbEJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4wMSknLFxuICAgICAgdGV4dENvbG9yOiAnI2ZmMDAwMCcsXG4gICAgICBzZWxlY3RCb3hDb2xvcjogJyM3MjcyNzInLFxuICAgICAgY3Vyc29yU2l6ZTogWzQwLCA0MF0sXG4gICAgICBicnVzaFRoaW46IDUwLFxuICAgICAgc2VsZWN0QW5jaG9yQ29sb3I6ICcjMDA2ZWZmJyxcbiAgICB9LFxuICB9O1xuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQgPSBuZXcgQm9hcmRSZW5kZXIuVEVkdUJvYXJkKGluaXRQYXJhbXMpO1xuXG4gIC8vIOebkeWQrOeZveadv+mUmeivr+S6i+S7tlxuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQub24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLkVWRU5ULlRFQl9FUlJPUiwgKGNvZGU6IG51bWJlciwgbXNnOiBzdHJpbmcpID0+IHtcbiAgfSk7XG5cbiAgLy8g55uR5ZCs55m95p2/5ZGK6K2m5LqL5Lu2XG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX1dBUk5JTkcsIChjb2RlOiBudW1iZXIsIG1zZzogc3RyaW5nKSA9PiB7XG4gIH0pO1xuXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX0hJU1RST1lEQVRBX1NZTkNDT01QTEVURUQsICgpID0+IHtcbiAgICAvLyDpu5jorqTkvb/nlKjpvKDmoIflt6XlhbdcbiAgICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQuc2V0VG9vbFR5cGUoQm9hcmRSZW5kZXIuVEVkdUJvYXJkLlRFZHVCb2FyZFRvb2xUeXBlLlRFRFVfQk9BUkRfVE9PTF9UWVBFX01PVVNFKTtcblxuICAgIC8vIOWQr+eUqOeslOmUi+eJueaAp1xuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRIYW5kd3JpdGluZ0VuYWJsZSh0cnVlKTtcblxuICAgIC8vIOiuvue9ruapoeearuaTpuiHquWumuS5ieWbvuagh1xuICAgIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5zZXRDdXJzb3JJY29uKEJvYXJkUmVuZGVyLlRFZHVCb2FyZC5URWR1Qm9hcmRUb29sVHlwZS5URURVX0JPQVJEX1RPT0xfVFlQRV9FUkFTRVIsIHtcbiAgICAgIGN1cnNvcjogJ3VybCcsXG4gICAgICB1cmw6ICdodHRwczovL3Jlcy5xY2xvdWR0aXcuY29tL2JvYXJkL2ljb25zL3hrdC9lcmFzZXIuc3ZnJyxcbiAgICAgIG9mZnNldFg6IDcsXG4gICAgICBvZmZzZXRZOiAyNSxcbiAgICB9KTtcblxuICAgIEJvYXJkUmVuZGVyLnVwZGF0ZUN1cnNvcigpO1xuXG4gICAgaWYgKEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIOayoeacieaMh+S7pO+8jOWImem7mOiupOiuvue9ruacqum8oOagh+W3peWFt1xuICAgICAgQm9hcmRSZW5kZXIudGVkdUJvYXJkLnNldFRvb2xUeXBlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDmiafooYznvJPlrZjmjIfku6RcbiAgICAgIEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5mb3JFYWNoKChhcmc6IGFueSkgPT4ge1xuICAgICAgICBCb2FyZFJlbmRlci5jYWxsQm9hcmRNZXRob2QoYXJnKTtcbiAgICAgIH0pO1xuICAgICAgQm9hcmRSZW5kZXIuY2FsbE1ldGhvZENhY2hlID0gW107XG4gICAgfVxuICAgIEJvYXJkUmVuZGVyLmlzQm9hcmRSZWFkeSA9IHRydWU7XG4gIH0pO1xuXG4gIC8vIOebkeWQrOS6i+S7tu+8jGltYWdl5Li65oiq5Zu+5YaF5a6555qEYmFzZTY05pWw5o2uXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX1NOQVBTSE9ULCAoZGF0YTogYW55KSA9PiB7XG4gICAgaXBjUmVuZGVyZXIuc2VuZCgnb25TY3JlZW5TaGFyZVNuYXBzaG90JywgZGF0YSk7XG4gIH0pO1xuXG4gIEJvYXJkUmVuZGVyLnRlZHVCb2FyZC5vbihCb2FyZFJlbmRlci5URWR1Qm9hcmQuRVZFTlQuVEVCX09QRVJBVEVfQ0FOUkVET19TVEFUVVNfQ0hBTkdFRCwgKHN0YXR1czogYW55KSA9PiB7XG4gICAgaXBjUmVuZGVyZXIuc2VuZCgnb25Cb2FyZENhblJlZG9DaGFuZ2UnLCBzdGF0dXMpO1xuICB9KTtcblxuICBCb2FyZFJlbmRlci50ZWR1Qm9hcmQub24oQm9hcmRSZW5kZXIuVEVkdUJvYXJkLkVWRU5ULlRFQl9PUEVSQVRFX0NBTlVORE9fU1RBVFVTX0NIQU5HRUQsIChzdGF0dXM6IGFueSkgPT4ge1xuICAgIGlwY1JlbmRlcmVyLnNlbmQoJ29uQm9hcmRDYW5VbmRvQ2hhbmdlJywgc3RhdHVzKTtcbiAgfSk7XG5cbiAgQm9hcmRSZW5kZXIuc2V0VmlzaWJsZVJlY3QocGFyYW1zLnNoYXJlV2luZG93Qm91bmRzKTtcbn0pO1xuXG5cbmlwY1JlbmRlcmVyLm9uKCdvblNoYXJlV2luZG93Qm91bmRzQ2hhbmdlZCcsIChldmVudCwgYm91bmRzKSA9PiB7XG4gIGNvbnN0IEJvYXJkUmVuZGVyID0gKHdpbmRvdyBhcyBhbnkpLkJvYXJkUmVuZGVyO1xuICBCb2FyZFJlbmRlci5zZXRWaXNpYmxlUmVjdChib3VuZHMpO1xufSk7XG5cbmlwY1JlbmRlcmVyLm9uKCdjYWxsTWV0aG9kJywgKGV2ZW50LCBhcmcpID0+IHtcbiAgY29uc3QgQm9hcmRSZW5kZXIgPSAod2luZG93IGFzIGFueSkuQm9hcmRSZW5kZXI7XG4gIGlmICghQm9hcmRSZW5kZXIuaXNCb2FyZFJlYWR5KSB7IC8vIOeZveadv+S4uuWIneWni+WMluWujOaIkO+8jOe8k+WtmOeZveadv+aMh+S7pFxuICAgIEJvYXJkUmVuZGVyLmNhbGxNZXRob2RDYWNoZS5wdXNoKGFyZyk7XG4gICAgcmV0dXJuO1xuICB9XG4gIEJvYXJkUmVuZGVyLmNhbGxCb2FyZE1ldGhvZChhcmcpO1xufSk7XG5cbmNvbnN0IGV2ZW50cyA9IFsndG91Y2hzdGFydCcsICd0b3VjaGVuZCddO1xuaXBjUmVuZGVyZXIub24oJ2VuYWJsZVdhdGNoTW91c2VNb3ZlRXZlbnQnLCAoZXZlbnQsIGVuYWJsZWQpID0+IHtcbiAgcmVuZGVyZXJVdGlsLndhdGNoRXZlbnRzKGRvY3VtZW50LCBldmVudHMsIGVuYWJsZWQpO1xufSk7XG5cbndpbmRvdy5vbmxvYWQgPSAoKSA9PiB7XG4gIEJvYXJkUmVuZGVyLmJvYXJkV3JhcEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9hcmQtd3JhcCcpO1xuICBCb2FyZFJlbmRlci5ib2FyZEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYm9hcmQnKTtcbn07XG4iLCJpbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcblxuZnVuY3Rpb24gY3JlYXRlTW91c2VNb3ZlUHJvY2Vzc29yKCkge1xuICBjb25zdCBsYXN0WCA9IDA7XG4gIGNvbnN0IGxhc3RZID0gMDtcbiAgcmV0dXJuIChlOiBhbnkpID0+IHtcbiAgICBsZXQgeDsgbGV0IHk7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBUb3VjaEV2ZW50KSB7ICAvLyDop6bmkbjkuovku7ZcbiAgICAgIHggPSBNYXRoLnJvdW5kKGUuY2hhbmdlZFRvdWNoZXNbMF0uc2NyZWVuWCk7XG4gICAgICB5ID0gTWF0aC5yb3VuZChlLmNoYW5nZWRUb3VjaGVzWzBdLnNjcmVlblkpO1xuICAgIH0gZWxzZSB7ICAvLyDpvKDmoIfkuovku7ZcbiAgICAgIHggPSBlLnNjcmVlblg7XG4gICAgICB5ID0gZS5zY3JlZW5ZO1xuICAgIH1cbiAgICBpZiAoeCAhPT0gbGFzdFggfHwgeSAhPT0gbGFzdFkpIHsgIC8vIOWPquacieS9jee9ruWPkeeUn+WPmOWMluaXtuaJjeWPkemAgea2iOaBr++8jOWHj+Wwkei1hOa6kOa2iOiAl1xuICAgICAgY29uc3QgYXJncyA9IHsgdHlwZTogZS50eXBlLCB4LCB5IH07XG4gICAgICBpcGNSZW5kZXJlci5zZW5kKCdvbk1vdXNlRXZlbnQnLCBhcmdzKTtcbiAgICAgIGNvbnNvbGUubG9nKCdvbk1vdXNlRXZlbnQnLCBhcmdzKTtcbiAgICB9XG4gIH07XG59XG5cbmNvbnN0IGV2ZW50UHJvY2Vzc29yID0gY3JlYXRlTW91c2VNb3ZlUHJvY2Vzc29yKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXRjaEV2ZW50cyh0YXJnZXQ6IEV2ZW50VGFyZ2V0LCBldmVudHM6IHN0cmluZ1tdLCBlbmFibGVkOiBib29sZWFuKSB7XG4gIGV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xuICAgIGlmIChlbmFibGVkKSB7XG4gICAgICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZXZlbnRQcm9jZXNzb3IsIHtcbiAgICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGV2ZW50UHJvY2Vzc29yLCB7XG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyhcIi4vc3JjL2JvYXJkUmVuZGVyZXIudHNcIik7XG4iXSwic291cmNlUm9vdCI6IiJ9
1
+ (()=>{"use strict";var e={761:function(e,t,o){var r=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[o]}})}:function(e,t,o,r){void 0===r&&(r=o),e[r]=t[o]}),n=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),d=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o in e)"default"!==o&&Object.hasOwnProperty.call(e,o)&&r(t,e,o);return n(t,e),t};Object.defineProperty(t,"__esModule",{value:!0});const s=o(933),a=d(o(280));class i{static setVisibleRect(e){e?(0!==i.screenHeight&&0!==i.screenWidth||(i.screenHeight=screen.height,i.screenWidth=screen.width,i.boardElement.style.width=`${screen.width}px`,i.boardElement.style.height=`${screen.height}px`),i.boardWrapElement.style.width=`${e.width}px`,i.boardWrapElement.style.height=`${e.height}px`,i.boardWrapElement.style.left=`${e.x}px`,i.boardWrapElement.style.top=`${e.y}px`,i.boardWrapElement.style.position="absolute"):(i.boardWrapElement.removeAttribute("style"),i.boardElement.removeAttribute("style"))}static updateCursor(){if(!i.teduBoard)return;const e=i.teduBoard.getToolType(),t=i.teduBoard.getBrushColor();if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_PEN){const o=`data:image/svg+xml;charset=utf-8,${escape(`<?xml version="1.0" encoding="UTF-8"?><svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><title>mouse_pen</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-89.000000, -268.000000)">\n <g id="mouse_pen" transform="translate(89.000000, 268.000000)">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组-13" transform="translate(8.000000, 3.000000)" fill="${t}" stroke="#182E25">\n <path d="M0.756984031,32.1383216 L3.68816089e-13,26.5292023 L17.8941729,7.81597009e-14 L24.5264735,4.47354323 L6.63230058,31.0027455 L0.756984031,32.1383216 Z" id="形状结合"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>`)}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:o,offsetX:10,offsetY:40})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_LINE){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_line</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-785.000000, -272.000000)">\n <g id="mouse_line" transform="translate(785.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <line x1="28.5" y1="7.5" x2="36.5" y2="7.5" id="直线-6" stroke="${t}" stroke-width="2" stroke-linecap="square"></line>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_RECT){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_rectangle</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-551.000000, -272.000000)">\n <g id="mouse_rectangle" transform="translate(551.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <rect id="矩形" stroke="${t}" stroke-width="2" x="28" y="3" width="8" height="8"></rect>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20}),i.teduBoard.setCursorIcon(i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_SQUARE,{cursor:"url",url:r,offsetX:20,offsetY:20})}else if(e===i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_OVAL){const o=`<?xml version="1.0" encoding="UTF-8"?>\n <svg width="40px" height="40px" viewBox="0 0 40 40" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">\n <title>mouse_circle</title>\n <g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">\n <g id="光标及状态栏状态" transform="translate(-323.000000, -272.000000)">\n <g id="mouse_circle" transform="translate(323.000000, 272.000000)">\n <g id="编组-3">\n <rect id="矩形" x="0" y="0" width="40" height="40"></rect>\n <g id="编组" transform="translate(2.628157, 2.500000)" fill="#000000" stroke="#FFFFFF">\n <path d="M19.6574089,0 L19.657,15.5 L34.6259534,15.5 L34.6259534,19.5 L19.657,19.5 L19.6574089,35 L15.6574089,35 L15.657,19.5 L-1.13686838e-13,19.5 L-1.13686838e-13,15.5 L15.657,15.5 L15.6574089,0 L19.6574089,0 Z" id="形状结合"></path>\n </g>\n </g>\n <circle id="椭圆形" stroke="${t}" stroke-width="2" cx="32" cy="7" r="4"></circle>\n </g>\n </g>\n </g>\n </svg>`,r=`data:image/svg+xml;base64,${window.btoa(unescape(encodeURIComponent(o)))}`;i.teduBoard.setCursorIcon(e,{cursor:"url",url:r,offsetX:20,offsetY:20}),i.teduBoard.setCursorIcon(i.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_CIRCLE,{cursor:"url",url:r,offsetX:20,offsetY:20})}i.teduBoard.setToolType(e)}static callBoardMethod(e){console.log("callBoardMethod",i.teduBoard,JSON.stringify(e)),i.teduBoard&&(i.teduBoard[e.method].apply(i.teduBoard,e.params),i.updateCursor())}}i.TEduBoard=window.TEduBoard,i.teduBoard=null,i.boardElement=null,i.boardWrapElement=null,i.screenWidth=0,i.screenHeight=0,i.callMethodCache=[],i.isBoardReady=!1,window.BoardRender=i,s.ipcRenderer.on("initBoard",((e,t)=>{const o=window.BoardRender;if(o.teduBoard)return;const r={id:"board",sdkAppId:t.sdkAppId,classId:t.roomId,userId:t.userId,userSig:t.userSig,ratio:`${screen.width}:${screen.height}`,systemCursorEnable:!1,enableLocalMode:!0,styleConfig:{globalBackgroundColor:"rgba(0, 0, 0, 0.01)",textColor:"#ff0000",selectBoxColor:"#727272",cursorSize:[40,40],brushThin:50,selectAnchorColor:"#006eff"}};o.teduBoard=new o.TEduBoard(r),o.teduBoard.on(o.TEduBoard.EVENT.TEB_ERROR,((e,t)=>{})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_WARNING,((e,t)=>{})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_HISTROYDATA_SYNCCOMPLETED,(()=>{o.teduBoard.setToolType(o.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_MOUSE),o.teduBoard.setHandwritingEnable(!0),o.teduBoard.setCursorIcon(o.TEduBoard.TEduBoardToolType.TEDU_BOARD_TOOL_TYPE_ERASER,{cursor:"url",url:"https://res.qcloudtiw.com/board/icons/xkt/eraser.svg",offsetX:7,offsetY:25}),o.updateCursor(),0===o.callMethodCache.length?o.teduBoard.setToolType(0):(o.callMethodCache.forEach((e=>{o.callBoardMethod(e)})),o.callMethodCache=[]),o.isBoardReady=!0})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_SNAPSHOT,(e=>{s.ipcRenderer.send("onScreenShareSnapshot",e)})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_OPERATE_CANREDO_STATUS_CHANGED,(e=>{s.ipcRenderer.send("onBoardCanRedoChange",e)})),o.teduBoard.on(o.TEduBoard.EVENT.TEB_OPERATE_CANUNDO_STATUS_CHANGED,(e=>{s.ipcRenderer.send("onBoardCanUndoChange",e)})),o.setVisibleRect(t.shareWindowBounds)})),s.ipcRenderer.on("onShareWindowBoundsChanged",((e,t)=>{window.BoardRender.setVisibleRect(t)})),s.ipcRenderer.on("callMethod",((e,t)=>{const o=window.BoardRender;o.isBoardReady?o.callBoardMethod(t):o.callMethodCache.push(t)}));const l=["touchstart","touchend"];s.ipcRenderer.on("enableWatchMouseMoveEvent",((e,t)=>{a.watchEvents(document,l,t)})),window.onload=()=>{i.boardWrapElement=document.getElementById("board-wrap"),i.boardElement=document.getElementById("board")}},280:(e,t,o)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.watchEvents=void 0;const r=o(933),n=e=>{let t,o;if(e instanceof TouchEvent?(t=Math.round(e.changedTouches[0].screenX),o=Math.round(e.changedTouches[0].screenY)):(t=e.screenX,o=e.screenY),0!==t||0!==o){const n={type:e.type,x:t,y:o};r.ipcRenderer.send("onMouseEvent",n),console.log("onMouseEvent",n)}};t.watchEvents=function(e,t,o){t.forEach((t=>{o?e.addEventListener(t,n,{capture:!0,passive:!1}):e.removeEventListener(t,n,{capture:!0})}))}},933:e=>{e.exports=require("electron")}},t={};!function o(r){var n=t[r];if(void 0!==n)return n.exports;var d=t[r]={exports:{}};return e[r].call(d.exports,d,d.exports,o),d.exports}(761)})();
@@ -1,112 +1 @@
1
- /******/ (() => { // webpackBootstrap
2
- /******/ "use strict";
3
- /******/ var __webpack_modules__ = ({
4
-
5
- /***/ "electron":
6
- /*!***************************!*\
7
- !*** external "electron" ***!
8
- \***************************/
9
- /***/ ((module) => {
10
-
11
- module.exports = require("electron");
12
-
13
- /***/ })
14
-
15
- /******/ });
16
- /************************************************************************/
17
- /******/ // The module cache
18
- /******/ var __webpack_module_cache__ = {};
19
- /******/
20
- /******/ // The require function
21
- /******/ function __webpack_require__(moduleId) {
22
- /******/ // Check if module is in cache
23
- /******/ var cachedModule = __webpack_module_cache__[moduleId];
24
- /******/ if (cachedModule !== undefined) {
25
- /******/ return cachedModule.exports;
26
- /******/ }
27
- /******/ // Create a new module (and put it into the cache)
28
- /******/ var module = __webpack_module_cache__[moduleId] = {
29
- /******/ // no module.id needed
30
- /******/ // no module.loaded needed
31
- /******/ exports: {}
32
- /******/ };
33
- /******/
34
- /******/ // Execute the module function
35
- /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
36
- /******/
37
- /******/ // Return the exports of the module
38
- /******/ return module.exports;
39
- /******/ }
40
- /******/
41
- /************************************************************************/
42
- var __webpack_exports__ = {};
43
- // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
44
- (() => {
45
- var exports = __webpack_exports__;
46
- /*!*******************************!*\
47
- !*** ./src/cameraRenderer.ts ***!
48
- \*******************************/
49
-
50
- Object.defineProperty(exports, "__esModule", ({ value: true }));
51
- const electron_1 = __webpack_require__(/*! electron */ "electron");
52
- class CameraController {
53
- constructor() {
54
- this._videoElement = document.getElementById('camera');
55
- this._videoElement.addEventListener('timeupdate', () => {
56
- });
57
- this._videoElement.addEventListener('durationchange', () => {
58
- });
59
- this._videoElement.addEventListener('seeked', () => {
60
- });
61
- this._videoElement.addEventListener('playing', () => {
62
- electron_1.ipcRenderer.send('playing', {
63
- width: this._params.width,
64
- height: this._params.height,
65
- });
66
- });
67
- }
68
- static get instance() {
69
- if (this._instance === null) {
70
- this._instance = new CameraController();
71
- }
72
- return this._instance;
73
- }
74
- start(params) {
75
- return new Promise((resolve, reject) => {
76
- this._params = params;
77
- navigator.mediaDevices.enumerateDevices()
78
- .then((devices) => {
79
- const cameraDevices = devices.filter(device => device.kind === 'videoinput');
80
- navigator.mediaDevices.getUserMedia({
81
- video: {
82
- deviceId: cameraDevices[params.deviceIndex].deviceId,
83
- aspectRatio: 1.7777777778,
84
- width: params.width,
85
- height: params.height,
86
- },
87
- audio: false,
88
- })
89
- .then((stream) => {
90
- this._videoElement.srcObject = stream;
91
- this._videoElement.play();
92
- })
93
- .catch((error) => {
94
- reject(error);
95
- });
96
- });
97
- });
98
- }
99
- stop() {
100
- this._videoElement.stop();
101
- }
102
- }
103
- CameraController._instance = null;
104
- electron_1.ipcRenderer.on('start', (event, params) => {
105
- CameraController.instance.start(params);
106
- });
107
-
108
- })();
109
-
110
- /******/ })()
111
- ;
112
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly90Y2ljLWVsZWN0cm9uLXNkay9leHRlcm5hbCBcImVsZWN0cm9uXCIiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vdGNpYy1lbGVjdHJvbi1zZGsvLi9zcmMvY2FtZXJhUmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLHFDOzs7Ozs7VUNBQTtVQUNBOztVQUVBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBO1VBQ0E7VUFDQTtVQUNBOztVQUVBO1VBQ0E7O1VBRUE7VUFDQTtVQUNBOzs7Ozs7Ozs7Ozs7QUN0QkEsbUVBQXVDO0FBRXZDLE1BQU0sZ0JBQWdCO0lBVXBCO1FBQ0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ25ELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsR0FBRyxFQUFFO1lBQ2xELHNCQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSztnQkFDekIsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUF2Qk0sTUFBTSxLQUFLLFFBQVE7UUFDeEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBbUJNLEtBQUssQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDckMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdEIsU0FBUyxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsRUFBRTtpQkFDdEMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7Z0JBQ2hCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUM3RSxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQztvQkFDbEMsS0FBSyxFQUFFO3dCQUNMLFFBQVEsRUFBRSxhQUFhLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVE7d0JBQ3BELFdBQVcsRUFBRSxZQUFZO3dCQUN6QixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUs7d0JBQ25CLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtxQkFDdEI7b0JBQ0QsS0FBSyxFQUFFLEtBQUs7aUJBQ2IsQ0FBQztxQkFDQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtvQkFDZixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUM7b0JBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVCLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtvQkFDZixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTSxJQUFJO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDOztBQTdDYywwQkFBUyxHQUFxQixJQUFJLENBQUM7QUFnRHBELHNCQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtJQUN4QyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzFDLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImNhbWVyYVJlbmRlcmVyLmJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcImVsZWN0cm9uXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCJpbXBvcnQgeyBpcGNSZW5kZXJlciB9IGZyb20gJ2VsZWN0cm9uJztcblxuY2xhc3MgQ2FtZXJhQ29udHJvbGxlciB7XG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGluc3RhbmNlKCk6IENhbWVyYUNvbnRyb2xsZXIge1xuICAgIGlmICh0aGlzLl9pbnN0YW5jZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgQ2FtZXJhQ29udHJvbGxlcigpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XG4gIH1cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBDYW1lcmFDb250cm9sbGVyID0gbnVsbDtcbiAgcHJpdmF0ZSBfdmlkZW9FbGVtZW50OiBhbnk7XG4gIHByaXZhdGUgX3BhcmFtczogYW55O1xuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhbWVyYScpO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgKCkgPT4ge1xuICAgIH0pO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdkdXJhdGlvbmNoYW5nZScsICgpID0+IHtcbiAgICB9KTtcbiAgICB0aGlzLl92aWRlb0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Vla2VkJywgKCkgPT4ge1xuICAgIH0pO1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdwbGF5aW5nJywgKCkgPT4ge1xuICAgICAgaXBjUmVuZGVyZXIuc2VuZCgncGxheWluZycsIHtcbiAgICAgICAgd2lkdGg6IHRoaXMuX3BhcmFtcy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiB0aGlzLl9wYXJhbXMuaGVpZ2h0LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgcHVibGljIHN0YXJ0KHBhcmFtczogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX3BhcmFtcyA9IHBhcmFtcztcbiAgICAgIG5hdmlnYXRvci5tZWRpYURldmljZXMuZW51bWVyYXRlRGV2aWNlcygpXG4gICAgICAgIC50aGVuKChkZXZpY2VzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FtZXJhRGV2aWNlcyA9IGRldmljZXMuZmlsdGVyKGRldmljZSA9PiBkZXZpY2Uua2luZCA9PT0gJ3ZpZGVvaW5wdXQnKTtcbiAgICAgICAgICBuYXZpZ2F0b3IubWVkaWFEZXZpY2VzLmdldFVzZXJNZWRpYSh7XG4gICAgICAgICAgICB2aWRlbzoge1xuICAgICAgICAgICAgICBkZXZpY2VJZDogY2FtZXJhRGV2aWNlc1twYXJhbXMuZGV2aWNlSW5kZXhdLmRldmljZUlkLFxuICAgICAgICAgICAgICBhc3BlY3RSYXRpbzogMS43Nzc3Nzc3Nzc4LFxuICAgICAgICAgICAgICB3aWR0aDogcGFyYW1zLndpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQ6IHBhcmFtcy5oZWlnaHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXVkaW86IGZhbHNlLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgICAudGhlbigoc3RyZWFtKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBzdHJlYW07XG4gICAgICAgICAgICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5wbGF5KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHB1YmxpYyBzdG9wKCkge1xuICAgIHRoaXMuX3ZpZGVvRWxlbWVudC5zdG9wKCk7XG4gIH1cbn1cblxuaXBjUmVuZGVyZXIub24oJ3N0YXJ0JywgKGV2ZW50LCBwYXJhbXMpID0+IHtcbiAgQ2FtZXJhQ29udHJvbGxlci5pbnN0YW5jZS5zdGFydChwYXJhbXMpO1xufSk7XG4iXSwic291cmNlUm9vdCI6IiJ9
1
+ (()=>{"use strict";var e={933:e=>{e.exports=require("electron")}},t={};function i(n){var s=t[n];if(void 0!==s)return s.exports;var r=t[n]={exports:{}};return e[n](r,r.exports,i),r.exports}(()=>{const e=i(933);class t{constructor(){this._videoElement=document.getElementById("camera"),this._videoElement.addEventListener("timeupdate",(()=>{})),this._videoElement.addEventListener("durationchange",(()=>{})),this._videoElement.addEventListener("seeked",(()=>{})),this._videoElement.addEventListener("playing",(()=>{e.ipcRenderer.send("playing",{width:this._params.width,height:this._params.height})}))}static get instance(){return null===this._instance&&(this._instance=new t),this._instance}start(e){return new Promise(((t,i)=>{this._params=e,navigator.mediaDevices.enumerateDevices().then((t=>{const n=t.filter((e=>"videoinput"===e.kind));navigator.mediaDevices.getUserMedia({video:{deviceId:n[e.deviceIndex].deviceId,aspectRatio:1.7777777778,width:e.width,height:e.height},audio:!1}).then((e=>{this._videoElement.srcObject=e,this._videoElement.play()})).catch((e=>{i(e)}))}))}))}stop(){this._videoElement.stop()}}t._instance=null,e.ipcRenderer.on("start",((e,i)=>{t.instance.start(i)}))})()})();
package/dist/config.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "resources": [
3
3
  {
4
- "version": "dc315e8af8eec26e1135b77b545a8a7586b911d5",
4
+ "version": "756187788c31c589c15e4c40bc1f2b601d09e7dc",
5
5
  "sdkAppId": "0",
6
6
  "schoolId": "0",
7
- "url": "https://class.qcloudclass.com/1.5.0/cache/offline_dc315e8af8eec26e1135b77b545a8a7586b911d5.zip",
7
+ "url": "https://class.qcloudclass.com/1.5.0/cache/offline_756187788c31c589c15e4c40bc1f2b601d09e7dc.zip",
8
8
  "files": {
9
9
  },
10
10
  "regexes": {
@@ -25,7 +25,7 @@
25
25
  "supportFomats": "mp4|rmvb|avi|mov|flv|wmv|m3u8|mpeg|mp3|wav|pcm|aac|ogg"
26
26
  },
27
27
  "expired": 200,
28
- "devBuildTime": 1638533502,
28
+ "devBuildTime": 1639550920,
29
29
  "domains": {
30
30
  "www.xxx.com": [
31
31
  "www.aaa.com"