@resolveio/client-lib-core 15.1.1 → 15.1.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.
@@ -26,6 +26,46 @@ export class SocketService {
26
26
  this.onconnecting = function () { };
27
27
  this.onmessage = function (event) { };
28
28
  this.onerror = function (event) { };
29
+ this.onOpenHandler = (event) => {
30
+ clearTimeout(this.timeout);
31
+ this.timeout = null;
32
+ this.log(new Date(), 'WS', 'onopen', this.url);
33
+ this.readyState = WebSocket.OPEN;
34
+ this.readyState$.next(this.readyState);
35
+ this.onopen(event);
36
+ this.startPinging();
37
+ };
38
+ this.onCloseHandler = (event) => {
39
+ if (this.timeout) {
40
+ clearTimeout(this.timeout);
41
+ }
42
+ this.timeout = null;
43
+ this.ws = null;
44
+ this.readyState = WebSocket.CLOSED;
45
+ this.readyState$.next(this.readyState);
46
+ this.log(new Date(), 'WS', 'onclose', this.url);
47
+ this.onclose(event);
48
+ setTimeout(() => {
49
+ this.connect();
50
+ }, this.reconnectInterval);
51
+ this.stopPinging();
52
+ };
53
+ this.onMessageHandler = (event) => {
54
+ if (event.data === 'pong') {
55
+ this.log(new Date(), 'WS', 'pong received');
56
+ clearTimeout(this.pongTimeout);
57
+ }
58
+ else {
59
+ let messageData = JSON.parse(event.data);
60
+ messageData = this.convertUTCDateToLocalDate(messageData);
61
+ this.onmessage(messageData);
62
+ }
63
+ };
64
+ this.onErrorHandler = (event) => {
65
+ this.log(new Date(), 'WS', 'onerror', this, event);
66
+ this.onerror(event);
67
+ this.close();
68
+ };
29
69
  document.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
30
70
  }
31
71
  openSocket(environment, protocols) {
@@ -47,46 +87,10 @@ export class SocketService {
47
87
  this.log(new Date(), 'WS', 'connection-timeout', this.url);
48
88
  this.close();
49
89
  }, this.timeoutInterval);
50
- this.ws.onopen = (event) => {
51
- clearTimeout(this.timeout);
52
- this.timeout = null;
53
- this.log(new Date(), 'WS', 'onopen', this.url);
54
- this.readyState = WebSocket.OPEN;
55
- this.readyState$.next(this.readyState);
56
- this.onopen(event);
57
- this.startPinging();
58
- };
59
- this.ws.onclose = (event) => {
60
- if (this.timeout) {
61
- clearTimeout(this.timeout);
62
- }
63
- this.timeout = null;
64
- this.ws = null;
65
- this.readyState = WebSocket.CLOSED;
66
- this.readyState$.next(this.readyState);
67
- this.log(new Date(), 'WS', 'onclose', this.url);
68
- this.onclose(event);
69
- setTimeout(() => {
70
- this.connect();
71
- }, this.reconnectInterval);
72
- this.stopPinging();
73
- };
74
- this.ws.onmessage = (event) => {
75
- if (event.data === 'pong') {
76
- this.log(new Date(), 'WS', 'pong received');
77
- clearTimeout(this.pongTimeout);
78
- }
79
- else {
80
- let messageData = JSON.parse(event.data);
81
- messageData = this.convertUTCDateToLocalDate(messageData);
82
- this.onmessage(messageData);
83
- }
84
- };
85
- this.ws.onerror = (event) => {
86
- this.log(new Date(), 'WS', 'onerror', this, event);
87
- this.onerror(event);
88
- this.reconnect();
89
- };
90
+ this.ws.onopen = this.onOpenHandler;
91
+ this.ws.onclose = this.onCloseHandler;
92
+ this.ws.onmessage = this.onMessageHandler;
93
+ this.ws.onerror = this.onErrorHandler;
90
94
  }
91
95
  }
92
96
  convertUTCDateToLocalDate(data) {
@@ -146,7 +150,7 @@ export class SocketService {
146
150
  }
147
151
  }
148
152
  send(...data) {
149
- if (this.ws && this.ws.readyState === this.ws.OPEN) {
153
+ if (this.isWebSocketActive()) {
150
154
  data.forEach(item => this.convertDatesToUTC(item));
151
155
  this.ws.send(JSON.stringify(data));
152
156
  return true;
@@ -205,4 +209,4 @@ SocketService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", versio
205
209
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SocketService, decorators: [{
206
210
  type: Injectable
207
211
  }], ctorParameters: function () { return [{ type: i1.LocalStorageService }]; } });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFHdkMsTUFBTSxPQUFPLGFBQWE7SUFrQ3pCLFlBQW9CLFFBQTZCO1FBQTdCLGFBQVEsR0FBUixRQUFRLENBQXFCO1FBakNqRCxzQ0FBc0M7UUFDL0IsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVyQix3REFBd0Q7UUFDakQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWhDLG1FQUFtRTtRQUM1RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN0QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBSWhCLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsaUNBQWlDO1FBQ3pCLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFNekIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsNENBQTRDO1FBQ3RFLG9CQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMscUVBQXFFO1FBRXpHLDBDQUEwQztRQUNuQyxXQUFNLEdBQXdCLFVBQVUsS0FBWSxJQUFHLENBQUMsQ0FBQztRQUN6RCxZQUFPLEdBQTZCLFVBQVUsS0FBaUIsSUFBRyxDQUFDLENBQUM7UUFDcEUsaUJBQVksR0FBZSxjQUFhLENBQUMsQ0FBQztRQUMxQyxjQUFTLEdBQStCLFVBQVUsS0FBbUIsSUFBRyxDQUFDLENBQUM7UUFDMUUsWUFBTyxHQUE2QixVQUFVLEtBQWlCLElBQUcsQ0FBQyxDQUFDO1FBRzFFLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVNLFVBQVUsQ0FBQyxXQUFXLEVBQUUsU0FBUztRQUN2QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxPQUFPO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDakQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNqQixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzNCO1lBRUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUVsRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV4RCxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxDQUFDLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBRXpCLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBWSxFQUFFLEVBQUU7Z0JBQ2pDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO2dCQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztnQkFDakMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUVuQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDakIsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDM0I7Z0JBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBRXBCLElBQUksQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUVmLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUV2QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBRXBCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNoQixDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBRTNCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNwQixDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQW1CLEVBQUUsRUFBRTtnQkFDM0MsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtvQkFDMUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsQ0FBQztvQkFDNUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDL0I7cUJBQ0k7b0JBQ0osSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ3pDLFdBQVcsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQzVCO1lBQ0YsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2xCLENBQUMsQ0FBQztTQUNGO0lBQ0YsQ0FBQztJQUVPLHlCQUF5QixDQUFDLElBQUk7UUFDckMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO2FBQ0ksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksRUFBRTtZQUNuRCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN2RCxDQUFDLENBQUMsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Q7YUFDSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtZQUNsQyw0Q0FBNEM7WUFDNUMsTUFBTSxXQUFXLEdBQUcsa0RBQWtELENBQUM7WUFDdkUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzQixPQUFPLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3RCO1NBQ0Q7UUFFRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFTyxZQUFZO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO2dCQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUVsQixJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztvQkFDcEUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNkLENBQUMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDekI7aUJBQ0k7Z0JBQ0osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2pCO1FBQ0YsQ0FBQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxXQUFXO1FBQ2xCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN0QixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2pDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDL0I7SUFDRixDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBRztRQUM1QixLQUFLLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRTtZQUNwQixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQzVCLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRTtvQkFDN0IsaUNBQWlDO29CQUNqQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUNsQztxQkFDSSxJQUFJLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO29CQUMzRCxvRUFBb0U7b0JBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDakM7YUFDRDtTQUNEO0lBQ0YsQ0FBQztJQUVNLElBQUksQ0FBQyxHQUFHLElBQVc7UUFDekIsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFO1lBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDbkMsT0FBTyxJQUFJLENBQUM7U0FDWjthQUNJO1lBQ0osSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixPQUFPLEtBQUssQ0FBQztTQUNiO0lBQ0YsQ0FBQztJQUVNLEtBQUs7UUFDWCxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRWhCLE9BQU8sSUFBSSxDQUFDO1NBQ1o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNkLENBQUM7SUFFTSxTQUFTO1FBQ2YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNmO2FBQ0ksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBRU0sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO1NBQzlCO2FBQ0k7WUFDSixPQUFPLEtBQUssQ0FBQztTQUNiO0lBQ0YsQ0FBQztJQUVPLEdBQUcsQ0FBQyxHQUFHLElBQVc7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3JCO0lBQ0YsQ0FBQztJQUVPLHNCQUFzQjtRQUM3QixJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2pCO1NBQ0Q7SUFDRixDQUFDO0lBRU8saUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3pELENBQUM7OzJHQTlPVyxhQUFhOytHQUFiLGFBQWE7NEZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICduZ3gtbG9jYWxzdG9yYWdlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU29ja2V0U2VydmljZSB7XG5cdC8vVGhlc2UgY2FuIGJlIGFsdGVyZWQgYnkgY2FsbGluZyBjb2RlXG5cdHB1YmxpYyBkZWJ1ZyA9IGZhbHNlO1xuXG5cdC8vVGltZSB0byB3YWl0IGJlZm9yZSBhdHRlbXB0aW5nIHJlY29ubmVjdCAoYWZ0ZXIgY2xvc2UpXG5cdHB1YmxpYyByZWNvbm5lY3RJbnRlcnZhbCA9IDEwMDA7XG5cdFxuXHQvL1RpbWUgdG8gd2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4gKGJlZm9yZSBhYm9ydGluZyBhbmQgcmV0cnlpbmcpXG5cdHB1YmxpYyB0aW1lb3V0SW50ZXJ2YWwgPSA1MDAwO1xuXHRwcml2YXRlIHRpbWVvdXQgPSBudWxsO1xuXG5cdC8vU2hvdWxkIG9ubHkgYmUgdXNlZCB0byByZWFkIFdlYlNvY2tldCByZWFkeVN0YXRlXG5cdHB1YmxpYyByZWFkeVN0YXRlOiBudW1iZXI7XG5cdHB1YmxpYyByZWFkeVN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG5cblx0Ly9MaXN0IG9mIFdlYlNvY2tldCBzdWItcHJvdG9jb2xzXG5cdHByaXZhdGUgcHJvdG9jb2xzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8vVGhlIHVuZGVybHlpbmcgV2ViU29ja2V0XG5cdHB1YmxpYyB3czogV2ViU29ja2V0O1xuXHRwcml2YXRlIHVybDogc3RyaW5nO1xuXG5cdHByaXZhdGUgcGluZ0ludGVydmFsID0gbnVsbDtcbiAgICBwcml2YXRlIHBvbmdUaW1lb3V0ID0gbnVsbDtcbiAgICBwcml2YXRlIHBpbmdJbnRlcnZhbFRpbWUgPSAxNTAwMDsgLy8gVGltZSBiZXR3ZWVuIGVhY2ggcGluZyAoZS5nLiwgMzAgc2Vjb25kcylcbiAgICBwcml2YXRlIHBvbmdUaW1lb3V0VGltZSA9IDEyMDAwOyAvLyBUaW1lIHRvIHdhaXQgZm9yIHBvbmcgYmVmb3JlIGNsb3NpbmcgY29ubmVjdGlvbiAoZS5nLiwgMTAgc2Vjb25kcylcblxuXHQvL1NldCB1cCB0aGUgZGVmYXVsdCAnbm9vcCcgZXZlbnQgaGFuZGxlcnNcblx0cHVibGljIG9ub3BlbjogKGV2OiBFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogRXZlbnQpIHt9O1xuXHRwdWJsaWMgb25jbG9zZTogKGV2OiBDbG9zZUV2ZW50KSA9PiB2b2lkID0gZnVuY3Rpb24gKGV2ZW50OiBDbG9zZUV2ZW50KSB7fTtcblx0cHVibGljIG9uY29ubmVjdGluZzogKCkgPT4gdm9pZCA9IGZ1bmN0aW9uICgpIHt9O1xuXHRwdWJsaWMgb25tZXNzYWdlOiAoZXY6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogTWVzc2FnZUV2ZW50KSB7fTtcblx0cHVibGljIG9uZXJyb3I6IChldjogRXJyb3JFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogRXJyb3JFdmVudCkge307XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfc3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSkge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLmhhbmRsZVZpc2liaWxpdHlDaGFuZ2UuYmluZCh0aGlzKSk7XG5cdH1cblxuXHRwdWJsaWMgb3BlblNvY2tldChlbnZpcm9ubWVudCwgcHJvdG9jb2xzKSB7XG5cdFx0dGhpcy51cmwgPSBlbnZpcm9ubWVudC5XU19VUkw7XG5cdFx0dGhpcy5wcm90b2NvbHMgPSBwcm90b2NvbHM7XG5cdFx0dGhpcy5jb25uZWN0KCk7XG5cdH1cblxuXHRwcml2YXRlIGNvbm5lY3QoKSB7XG5cdFx0aWYgKCF0aGlzLndzICYmIHRoaXMuX3N0b3JhZ2UuZ2V0KCdhY2Nlc3NUb2tlbicpKSB7XG5cdFx0XHRpZiAodGhpcy50aW1lb3V0KSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLndzID0gbmV3IFdlYlNvY2tldCh0aGlzLnVybCwgdGhpcy5wcm90b2NvbHMpO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ09OTkVDVElORztcblx0XHRcdHRoaXMucmVhZHlTdGF0ZSQubmV4dCh0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFx0dGhpcy5vbmNvbm5lY3RpbmcoKTtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdhdHRlbXB0LWNvbm5lY3QnLCB0aGlzLnVybCk7XG5cblx0XHRcdHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnY29ubmVjdGlvbi10aW1lb3V0JywgdGhpcy51cmwpO1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9LCB0aGlzLnRpbWVvdXRJbnRlcnZhbCk7XG5cblx0XHRcdHRoaXMud3Mub25vcGVuID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuXHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcblx0XHRcdFx0dGhpcy50aW1lb3V0ID0gbnVsbDtcblx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ29ub3BlbicsIHRoaXMudXJsKTtcblx0XHRcdFx0dGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0Lk9QRU47XG5cdFx0XHRcdHRoaXMucmVhZHlTdGF0ZSQubmV4dCh0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFx0XHR0aGlzLm9ub3BlbihldmVudCk7XG5cblx0XHRcdFx0dGhpcy5zdGFydFBpbmdpbmcoKTtcblx0XHRcdH07XG5cblx0XHRcdHRoaXMud3Mub25jbG9zZSA9IChldmVudDogQ2xvc2VFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy50aW1lb3V0KSB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHRoaXMudGltZW91dCA9IG51bGw7XG5cblx0XHRcdFx0dGhpcy53cyA9IG51bGw7XG5cblx0XHRcdFx0dGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNMT1NFRDtcblx0XHRcdFx0dGhpcy5yZWFkeVN0YXRlJC5uZXh0KHRoaXMucmVhZHlTdGF0ZSk7XG5cdFx0XHRcdFxuXHRcdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnb25jbG9zZScsIHRoaXMudXJsKTtcblx0XHRcdFx0dGhpcy5vbmNsb3NlKGV2ZW50KTtcblxuXHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHR0aGlzLmNvbm5lY3QoKTtcblx0XHRcdFx0fSwgdGhpcy5yZWNvbm5lY3RJbnRlcnZhbCk7XG5cblx0XHRcdFx0dGhpcy5zdG9wUGluZ2luZygpO1xuXHRcdFx0fTtcblxuXHRcdFx0dGhpcy53cy5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZXZlbnQuZGF0YSA9PT0gJ3BvbmcnKSB7XG5cdFx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3BvbmcgcmVjZWl2ZWQnKTtcblx0XHRcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5wb25nVGltZW91dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0bGV0IG1lc3NhZ2VEYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblx0XHRcdFx0XHRtZXNzYWdlRGF0YSA9IHRoaXMuY29udmVydFVUQ0RhdGVUb0xvY2FsRGF0ZShtZXNzYWdlRGF0YSk7XG5cdFx0XHRcdFx0dGhpcy5vbm1lc3NhZ2UobWVzc2FnZURhdGEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0XHR0aGlzLndzLm9uZXJyb3IgPSAoZXZlbnQ6IEVycm9yRXZlbnQpID0+IHtcblx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ29uZXJyb3InLCB0aGlzLCBldmVudCk7XG5cdFx0XHRcdHRoaXMub25lcnJvcihldmVudCk7XG5cdFx0XHRcdHRoaXMucmVjb25uZWN0KCk7XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgY29udmVydFVUQ0RhdGVUb0xvY2FsRGF0ZShkYXRhKSB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcblx0XHQgIFx0cmV0dXJuIGRhdGEubWFwKGl0ZW0gPT4gdGhpcy5jb252ZXJ0VVRDRGF0ZVRvTG9jYWxEYXRlKGl0ZW0pKTtcblx0XHR9IFxuXHRcdGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiBkYXRhICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG5cdFx0XHRrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0XHRkYXRhW2tleV0gPSB0aGlzLmNvbnZlcnRVVENEYXRlVG9Mb2NhbERhdGUoZGF0YVtrZXldKTtcblx0XHRcdH0pO1xuXHRcdCAgXHRyZXR1cm4gZGF0YTtcblx0XHR9IFxuXHRcdGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIHN0cmluZyBpcyBhbiBJU08gZGF0ZSBmb3JtYXRcblx0XHRcdGNvbnN0IGRhdGVQYXR0ZXJuID0gL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZCspP1okLztcblx0XHRcdGlmIChkYXRlUGF0dGVybi50ZXN0KGRhdGEpKSB7XG5cdFx0XHRcdHJldHVybiBuZXcgRGF0ZShkYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YTtcblx0fVxuXG5cdHByaXZhdGUgc3RhcnRQaW5naW5nKCkge1xuXHRcdHRoaXMucGluZ0ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaXNXZWJTb2NrZXRBY3RpdmUoKSkge1xuXHRcdFx0XHR0aGlzLnNlbmQoJ3BpbmcnKTtcblxuXHRcdFx0XHR0aGlzLnBvbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3Bvbmcgbm90IHJlY2VpdmVkLCBjbG9zaW5nIGNvbm5lY3Rpb24nKTtcblx0XHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHRcdH0sIHRoaXMucG9uZ1RpbWVvdXRUaW1lKTtcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHR0aGlzLnJlY29ubmVjdCgpO1xuXHRcdFx0fVxuXHRcdH0sIHRoaXMucGluZ0ludGVydmFsVGltZSk7XG5cdH1cblxuXHRwcml2YXRlIHN0b3BQaW5naW5nKCkge1xuXHRcdGlmICh0aGlzLnBpbmdJbnRlcnZhbCkge1xuXHRcdFx0Y2xlYXJJbnRlcnZhbCh0aGlzLnBpbmdJbnRlcnZhbCk7XG5cdFx0fVxuXHRcdFxuXHRcdGlmICh0aGlzLnBvbmdUaW1lb3V0KSB7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5wb25nVGltZW91dCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjb252ZXJ0RGF0ZXNUb1VUQyhvYmopIHtcblx0XHRmb3IgKGxldCBrZXkgaW4gb2JqKSB7XG5cdFx0XHRpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0aWYgKG9ialtrZXldIGluc3RhbmNlb2YgRGF0ZSkge1xuXHRcdFx0XHRcdC8vIENvbnZlcnQgRGF0ZSB0byBVVEMgSVNPIFN0cmluZ1xuXHRcdFx0XHRcdG9ialtrZXldID0gb2JqW2tleV0udG9JU09TdHJpbmcoKTtcblx0XHRcdFx0fSBcblx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIG9ialtrZXldID09PSAnb2JqZWN0JyAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdC8vIFJlY3Vyc2l2ZWx5IGxvb2sgZm9yIERhdGUgb2JqZWN0cyB3aXRoaW4gYXJyYXlzIG9yIG5lc3RlZCBvYmplY3RzXG5cdFx0XHRcdFx0dGhpcy5jb252ZXJ0RGF0ZXNUb1VUQyhvYmpba2V5XSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2VuZCguLi5kYXRhOiBhbnlbXSkge1xuXHRcdGlmICh0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gdGhpcy53cy5PUEVOKSB7XG5cdFx0XHRkYXRhLmZvckVhY2goaXRlbSA9PiB0aGlzLmNvbnZlcnREYXRlc1RvVVRDKGl0ZW0pKTtcblx0XHRcdHRoaXMud3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IFxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3NlbmQgZXJyb3InLCB0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFx0dGhpcy5yZWNvbm5lY3QoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMud3MpIHtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdjbG9zaW5nIHNvY2tldCcpO1xuXHRcdFx0dGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNMT1NJTkc7XG5cdFx0XHR0aGlzLnJlYWR5U3RhdGUkLm5leHQodGhpcy5yZWFkeVN0YXRlKTtcblx0XHRcdHRoaXMud3MuY2xvc2UoKTtcblx0XHRcdFxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyByZWNvbm5lY3QoKSB7XG5cdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3JlY29ubmVjdCcsIHRoaXMucmVhZHlTdGF0ZSk7XG5cdFx0aWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNMT1NFRCkge1xuXHRcdFx0dGhpcy5jb25uZWN0KCk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0QnVmZmVyQW1vdW50KCkge1xuXHRcdGlmICh0aGlzLndzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy53cy5idWZmZXJlZEFtb3VudDtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZXR1cm4gMjA0ODA7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBsb2coLi4uYXJnczogYW55W10pIHtcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xuXHRcdFx0Y29uc29sZS5sb2coLi4uYXJncyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCk6IHZvaWQge1xuXHRcdGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xuXHRcdFx0aWYgKCF0aGlzLmlzV2ViU29ja2V0QWN0aXZlKCkpIHtcblx0XHRcdFx0dGhpcy5yZWNvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGlzV2ViU29ja2V0QWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU47XG5cdH1cbn1cbiJdfQ==
212
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ja2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy9saWIvc29ja2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7QUFHdkMsTUFBTSxPQUFPLGFBQWE7SUFrQ3pCLFlBQW9CLFFBQTZCO1FBQTdCLGFBQVEsR0FBUixRQUFRLENBQXFCO1FBakNqRCxzQ0FBc0M7UUFDL0IsVUFBSyxHQUFHLEtBQUssQ0FBQztRQUVyQix3REFBd0Q7UUFDakQsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBRWhDLG1FQUFtRTtRQUM1RCxvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN0QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBSWhCLGdCQUFXLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUMsaUNBQWlDO1FBQ3pCLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFNekIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDakIsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsNENBQTRDO1FBQ3RFLG9CQUFlLEdBQUcsS0FBSyxDQUFDLENBQUMscUVBQXFFO1FBRXpHLDBDQUEwQztRQUNuQyxXQUFNLEdBQXdCLFVBQVUsS0FBWSxJQUFHLENBQUMsQ0FBQztRQUN6RCxZQUFPLEdBQTZCLFVBQVUsS0FBaUIsSUFBRyxDQUFDLENBQUM7UUFDcEUsaUJBQVksR0FBZSxjQUFhLENBQUMsQ0FBQztRQUMxQyxjQUFTLEdBQStCLFVBQVUsS0FBbUIsSUFBRyxDQUFDLENBQUM7UUFDMUUsWUFBTyxHQUE2QixVQUFV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QUUsQ0FBQztTQUNmO2FBQ0ksSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDbEQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2I7SUFDRixDQUFDO0lBRU0sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDWixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDO1NBQzlCO2FBQ0k7WUFDSixPQUFPLEtBQUssQ0FBQztTQUNiO0lBQ0YsQ0FBQztJQUVPLEdBQUcsQ0FBQyxHQUFHLElBQVc7UUFDekIsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1NBQ3JCO0lBQ0YsQ0FBQztJQUVPLHNCQUFzQjtRQUM3QixJQUFJLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2FBQ2pCO1NBQ0Q7SUFDRixDQUFDO0lBRU8saUJBQWlCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsS0FBSyxTQUFTLENBQUMsSUFBSSxDQUFDO0lBQ3pELENBQUM7OzJHQWhQVyxhQUFhOytHQUFiLGFBQWE7NEZBQWIsYUFBYTtrQkFEekIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICduZ3gtbG9jYWxzdG9yYWdlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU29ja2V0U2VydmljZSB7XG5cdC8vVGhlc2UgY2FuIGJlIGFsdGVyZWQgYnkgY2FsbGluZyBjb2RlXG5cdHB1YmxpYyBkZWJ1ZyA9IGZhbHNlO1xuXG5cdC8vVGltZSB0byB3YWl0IGJlZm9yZSBhdHRlbXB0aW5nIHJlY29ubmVjdCAoYWZ0ZXIgY2xvc2UpXG5cdHB1YmxpYyByZWNvbm5lY3RJbnRlcnZhbCA9IDEwMDA7XG5cdFxuXHQvL1RpbWUgdG8gd2FpdCBmb3IgV2ViU29ja2V0IHRvIG9wZW4gKGJlZm9yZSBhYm9ydGluZyBhbmQgcmV0cnlpbmcpXG5cdHB1YmxpYyB0aW1lb3V0SW50ZXJ2YWwgPSA1MDAwO1xuXHRwcml2YXRlIHRpbWVvdXQgPSBudWxsO1xuXG5cdC8vU2hvdWxkIG9ubHkgYmUgdXNlZCB0byByZWFkIFdlYlNvY2tldCByZWFkeVN0YXRlXG5cdHB1YmxpYyByZWFkeVN0YXRlOiBudW1iZXI7XG5cdHB1YmxpYyByZWFkeVN0YXRlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMCk7XG5cblx0Ly9MaXN0IG9mIFdlYlNvY2tldCBzdWItcHJvdG9jb2xzXG5cdHByaXZhdGUgcHJvdG9jb2xzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdC8vVGhlIHVuZGVybHlpbmcgV2ViU29ja2V0XG5cdHB1YmxpYyB3czogV2ViU29ja2V0O1xuXHRwcml2YXRlIHVybDogc3RyaW5nO1xuXG5cdHByaXZhdGUgcGluZ0ludGVydmFsID0gbnVsbDtcbiAgICBwcml2YXRlIHBvbmdUaW1lb3V0ID0gbnVsbDtcbiAgICBwcml2YXRlIHBpbmdJbnRlcnZhbFRpbWUgPSAxNTAwMDsgLy8gVGltZSBiZXR3ZWVuIGVhY2ggcGluZyAoZS5nLiwgMzAgc2Vjb25kcylcbiAgICBwcml2YXRlIHBvbmdUaW1lb3V0VGltZSA9IDEyMDAwOyAvLyBUaW1lIHRvIHdhaXQgZm9yIHBvbmcgYmVmb3JlIGNsb3NpbmcgY29ubmVjdGlvbiAoZS5nLiwgMTAgc2Vjb25kcylcblxuXHQvL1NldCB1cCB0aGUgZGVmYXVsdCAnbm9vcCcgZXZlbnQgaGFuZGxlcnNcblx0cHVibGljIG9ub3BlbjogKGV2OiBFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogRXZlbnQpIHt9O1xuXHRwdWJsaWMgb25jbG9zZTogKGV2OiBDbG9zZUV2ZW50KSA9PiB2b2lkID0gZnVuY3Rpb24gKGV2ZW50OiBDbG9zZUV2ZW50KSB7fTtcblx0cHVibGljIG9uY29ubmVjdGluZzogKCkgPT4gdm9pZCA9IGZ1bmN0aW9uICgpIHt9O1xuXHRwdWJsaWMgb25tZXNzYWdlOiAoZXY6IE1lc3NhZ2VFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogTWVzc2FnZUV2ZW50KSB7fTtcblx0cHVibGljIG9uZXJyb3I6IChldjogRXJyb3JFdmVudCkgPT4gdm9pZCA9IGZ1bmN0aW9uIChldmVudDogRXJyb3JFdmVudCkge307XG5cblx0Y29uc3RydWN0b3IocHJpdmF0ZSBfc3RvcmFnZTogTG9jYWxTdG9yYWdlU2VydmljZSkge1xuXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCB0aGlzLmhhbmRsZVZpc2liaWxpdHlDaGFuZ2UuYmluZCh0aGlzKSk7XG5cdH1cblxuXHRwdWJsaWMgb3BlblNvY2tldChlbnZpcm9ubWVudCwgcHJvdG9jb2xzKSB7XG5cdFx0dGhpcy51cmwgPSBlbnZpcm9ubWVudC5XU19VUkw7XG5cdFx0dGhpcy5wcm90b2NvbHMgPSBwcm90b2NvbHM7XG5cdFx0dGhpcy5jb25uZWN0KCk7XG5cdH1cblxuXHRwcml2YXRlIG9uT3BlbkhhbmRsZXIgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7IFxuXHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHRcdHRoaXMudGltZW91dCA9IG51bGw7XG5cdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ29ub3BlbicsIHRoaXMudXJsKTtcblx0XHR0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuT1BFTjtcblx0XHR0aGlzLnJlYWR5U3RhdGUkLm5leHQodGhpcy5yZWFkeVN0YXRlKTtcblx0XHR0aGlzLm9ub3BlbihldmVudCk7XG5cblx0XHR0aGlzLnN0YXJ0UGluZ2luZygpO1xuXHR9O1xuXHRwcml2YXRlIG9uQ2xvc2VIYW5kbGVyID0gKGV2ZW50OiBDbG9zZUV2ZW50KSA9PiB7IFxuXHRcdGlmICh0aGlzLnRpbWVvdXQpIHtcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHRcdH1cblx0XHRcblx0XHR0aGlzLnRpbWVvdXQgPSBudWxsO1xuXG5cdFx0dGhpcy53cyA9IG51bGw7XG5cblx0XHR0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ0xPU0VEO1xuXHRcdHRoaXMucmVhZHlTdGF0ZSQubmV4dCh0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFxuXHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdvbmNsb3NlJywgdGhpcy51cmwpO1xuXHRcdHRoaXMub25jbG9zZShldmVudCk7XG5cblx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHRoaXMuY29ubmVjdCgpO1xuXHRcdH0sIHRoaXMucmVjb25uZWN0SW50ZXJ2YWwpO1xuXG5cdFx0dGhpcy5zdG9wUGluZ2luZygpO1xuXHR9O1xuXHRwcml2YXRlIG9uTWVzc2FnZUhhbmRsZXIgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuXHRcdGlmIChldmVudC5kYXRhID09PSAncG9uZycpIHtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdwb25nIHJlY2VpdmVkJyk7XG5cdFx0XHRjbGVhclRpbWVvdXQodGhpcy5wb25nVGltZW91dCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0bGV0IG1lc3NhZ2VEYXRhID0gSlNPTi5wYXJzZShldmVudC5kYXRhKTtcblx0XHRcdG1lc3NhZ2VEYXRhID0gdGhpcy5jb252ZXJ0VVRDRGF0ZVRvTG9jYWxEYXRlKG1lc3NhZ2VEYXRhKTtcblx0XHRcdHRoaXMub25tZXNzYWdlKG1lc3NhZ2VEYXRhKTtcblx0XHR9XG5cdH07XG5cdHByaXZhdGUgb25FcnJvckhhbmRsZXIgPSAoZXZlbnQ6IEVycm9yRXZlbnQpID0+IHtcblx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnb25lcnJvcicsIHRoaXMsIGV2ZW50KTtcblx0XHR0aGlzLm9uZXJyb3IoZXZlbnQpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fTtcblxuXHRwcml2YXRlIGNvbm5lY3QoKSB7XG5cdFx0aWYgKCF0aGlzLndzICYmIHRoaXMuX3N0b3JhZ2UuZ2V0KCdhY2Nlc3NUb2tlbicpKSB7XG5cdFx0XHRpZiAodGhpcy50aW1lb3V0KSB7XG5cdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLndzID0gbmV3IFdlYlNvY2tldCh0aGlzLnVybCwgdGhpcy5wcm90b2NvbHMpO1xuXHRcdFx0XG5cdFx0XHR0aGlzLnJlYWR5U3RhdGUgPSBXZWJTb2NrZXQuQ09OTkVDVElORztcblx0XHRcdHRoaXMucmVhZHlTdGF0ZSQubmV4dCh0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFx0dGhpcy5vbmNvbm5lY3RpbmcoKTtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdhdHRlbXB0LWNvbm5lY3QnLCB0aGlzLnVybCk7XG5cblx0XHRcdHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmxvZyhuZXcgRGF0ZSgpLCAnV1MnLCAnY29ubmVjdGlvbi10aW1lb3V0JywgdGhpcy51cmwpO1xuXHRcdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0XHR9LCB0aGlzLnRpbWVvdXRJbnRlcnZhbCk7XG5cblx0XHRcdHRoaXMud3Mub25vcGVuID0gdGhpcy5vbk9wZW5IYW5kbGVyO1xuXHRcdFx0dGhpcy53cy5vbmNsb3NlID0gdGhpcy5vbkNsb3NlSGFuZGxlcjtcblx0XHRcdHRoaXMud3Mub25tZXNzYWdlID0gdGhpcy5vbk1lc3NhZ2VIYW5kbGVyO1xuXHRcdFx0dGhpcy53cy5vbmVycm9yID0gdGhpcy5vbkVycm9ySGFuZGxlcjtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGNvbnZlcnRVVENEYXRlVG9Mb2NhbERhdGUoZGF0YSkge1xuXHRcdGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG5cdFx0ICBcdHJldHVybiBkYXRhLm1hcChpdGVtID0+IHRoaXMuY29udmVydFVUQ0RhdGVUb0xvY2FsRGF0ZShpdGVtKSk7XG5cdFx0fSBcblx0XHRlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgZGF0YSAhPT0gbnVsbCkge1xuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuXHRcdFx0a2V5cy5mb3JFYWNoKChrZXkpID0+IHtcblx0XHRcdFx0ZGF0YVtrZXldID0gdGhpcy5jb252ZXJ0VVRDRGF0ZVRvTG9jYWxEYXRlKGRhdGFba2V5XSk7XG5cdFx0XHR9KTtcblx0XHQgIFx0cmV0dXJuIGRhdGE7XG5cdFx0fSBcblx0XHRlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdC8vIENoZWNrIGlmIHRoZSBzdHJpbmcgaXMgYW4gSVNPIGRhdGUgZm9ybWF0XG5cdFx0XHRjb25zdCBkYXRlUGF0dGVybiA9IC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT9aJC87XG5cdFx0XHRpZiAoZGF0ZVBhdHRlcm4udGVzdChkYXRhKSkge1xuXHRcdFx0XHRyZXR1cm4gbmV3IERhdGUoZGF0YSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGE7XG5cdH1cblxuXHRwcml2YXRlIHN0YXJ0UGluZ2luZygpIHtcblx0XHR0aGlzLnBpbmdJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcblx0XHRcdGlmICh0aGlzLmlzV2ViU29ja2V0QWN0aXZlKCkpIHtcblx0XHRcdFx0dGhpcy5zZW5kKCdwaW5nJyk7XG5cblx0XHRcdFx0dGhpcy5wb25nVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdwb25nIG5vdCByZWNlaXZlZCwgY2xvc2luZyBjb25uZWN0aW9uJyk7XG5cdFx0XHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdFx0XHR9LCB0aGlzLnBvbmdUaW1lb3V0VGltZSk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0dGhpcy5yZWNvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9LCB0aGlzLnBpbmdJbnRlcnZhbFRpbWUpO1xuXHR9XG5cblx0cHJpdmF0ZSBzdG9wUGluZ2luZygpIHtcblx0XHRpZiAodGhpcy5waW5nSW50ZXJ2YWwpIHtcblx0XHRcdGNsZWFySW50ZXJ2YWwodGhpcy5waW5nSW50ZXJ2YWwpO1xuXHRcdH1cblx0XHRcblx0XHRpZiAodGhpcy5wb25nVGltZW91dCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMucG9uZ1RpbWVvdXQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgY29udmVydERhdGVzVG9VVEMob2JqKSB7XG5cdFx0Zm9yIChsZXQga2V5IGluIG9iaikge1xuXHRcdFx0aWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdGlmIChvYmpba2V5XSBpbnN0YW5jZW9mIERhdGUpIHtcblx0XHRcdFx0XHQvLyBDb252ZXJ0IERhdGUgdG8gVVRDIElTTyBTdHJpbmdcblx0XHRcdFx0XHRvYmpba2V5XSA9IG9ialtrZXldLnRvSVNPU3RyaW5nKCk7XG5cdFx0XHRcdH0gXG5cdFx0XHRcdGVsc2UgaWYgKHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcgJiYgb2JqW2tleV0gIT09IG51bGwpIHtcblx0XHRcdFx0XHQvLyBSZWN1cnNpdmVseSBsb29rIGZvciBEYXRlIG9iamVjdHMgd2l0aGluIGFycmF5cyBvciBuZXN0ZWQgb2JqZWN0c1xuXHRcdFx0XHRcdHRoaXMuY29udmVydERhdGVzVG9VVEMob2JqW2tleV0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNlbmQoLi4uZGF0YTogYW55W10pIHtcblx0XHRpZiAodGhpcy5pc1dlYlNvY2tldEFjdGl2ZSgpKSB7XG5cdFx0XHRkYXRhLmZvckVhY2goaXRlbSA9PiB0aGlzLmNvbnZlcnREYXRlc1RvVVRDKGl0ZW0pKTtcblx0XHRcdHRoaXMud3Muc2VuZChKU09OLnN0cmluZ2lmeShkYXRhKSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IFxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3NlbmQgZXJyb3InLCB0aGlzLnJlYWR5U3RhdGUpO1xuXHRcdFx0dGhpcy5yZWNvbm5lY3QoKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMud3MpIHtcblx0XHRcdHRoaXMubG9nKG5ldyBEYXRlKCksICdXUycsICdjbG9zaW5nIHNvY2tldCcpO1xuXHRcdFx0dGhpcy5yZWFkeVN0YXRlID0gV2ViU29ja2V0LkNMT1NJTkc7XG5cdFx0XHR0aGlzLnJlYWR5U3RhdGUkLm5leHQodGhpcy5yZWFkeVN0YXRlKTtcblx0XHRcdHRoaXMud3MuY2xvc2UoKTtcblx0XHRcdFxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHB1YmxpYyByZWNvbm5lY3QoKSB7XG5cdFx0dGhpcy5sb2cobmV3IERhdGUoKSwgJ1dTJywgJ3JlY29ubmVjdCcsIHRoaXMucmVhZHlTdGF0ZSk7XG5cdFx0aWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0LkNMT1NFRCkge1xuXHRcdFx0dGhpcy5jb25uZWN0KCk7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPT0gV2ViU29ja2V0LkNPTk5FQ1RJTkcpIHtcblx0XHRcdHRoaXMuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgZ2V0QnVmZmVyQW1vdW50KCkge1xuXHRcdGlmICh0aGlzLndzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy53cy5idWZmZXJlZEFtb3VudDtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRyZXR1cm4gMjA0ODA7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBsb2coLi4uYXJnczogYW55W10pIHtcblx0XHRpZiAodGhpcy5kZWJ1Zykge1xuXHRcdFx0Y29uc29sZS5sb2coLi4uYXJncyk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCk6IHZvaWQge1xuXHRcdGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xuXHRcdFx0aWYgKCF0aGlzLmlzV2ViU29ja2V0QWN0aXZlKCkpIHtcblx0XHRcdFx0dGhpcy5yZWNvbm5lY3QoKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGlzV2ViU29ja2V0QWN0aXZlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLndzICYmIHRoaXMud3MucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU47XG5cdH1cbn1cbiJdfQ==
@@ -299,6 +299,46 @@ class SocketService {
299
299
  this.onconnecting = function () { };
300
300
  this.onmessage = function (event) { };
301
301
  this.onerror = function (event) { };
302
+ this.onOpenHandler = (event) => {
303
+ clearTimeout(this.timeout);
304
+ this.timeout = null;
305
+ this.log(new Date(), 'WS', 'onopen', this.url);
306
+ this.readyState = WebSocket.OPEN;
307
+ this.readyState$.next(this.readyState);
308
+ this.onopen(event);
309
+ this.startPinging();
310
+ };
311
+ this.onCloseHandler = (event) => {
312
+ if (this.timeout) {
313
+ clearTimeout(this.timeout);
314
+ }
315
+ this.timeout = null;
316
+ this.ws = null;
317
+ this.readyState = WebSocket.CLOSED;
318
+ this.readyState$.next(this.readyState);
319
+ this.log(new Date(), 'WS', 'onclose', this.url);
320
+ this.onclose(event);
321
+ setTimeout(() => {
322
+ this.connect();
323
+ }, this.reconnectInterval);
324
+ this.stopPinging();
325
+ };
326
+ this.onMessageHandler = (event) => {
327
+ if (event.data === 'pong') {
328
+ this.log(new Date(), 'WS', 'pong received');
329
+ clearTimeout(this.pongTimeout);
330
+ }
331
+ else {
332
+ let messageData = JSON.parse(event.data);
333
+ messageData = this.convertUTCDateToLocalDate(messageData);
334
+ this.onmessage(messageData);
335
+ }
336
+ };
337
+ this.onErrorHandler = (event) => {
338
+ this.log(new Date(), 'WS', 'onerror', this, event);
339
+ this.onerror(event);
340
+ this.close();
341
+ };
302
342
  document.addEventListener('visibilitychange', this.handleVisibilityChange.bind(this));
303
343
  }
304
344
  openSocket(environment, protocols) {
@@ -320,46 +360,10 @@ class SocketService {
320
360
  this.log(new Date(), 'WS', 'connection-timeout', this.url);
321
361
  this.close();
322
362
  }, this.timeoutInterval);
323
- this.ws.onopen = (event) => {
324
- clearTimeout(this.timeout);
325
- this.timeout = null;
326
- this.log(new Date(), 'WS', 'onopen', this.url);
327
- this.readyState = WebSocket.OPEN;
328
- this.readyState$.next(this.readyState);
329
- this.onopen(event);
330
- this.startPinging();
331
- };
332
- this.ws.onclose = (event) => {
333
- if (this.timeout) {
334
- clearTimeout(this.timeout);
335
- }
336
- this.timeout = null;
337
- this.ws = null;
338
- this.readyState = WebSocket.CLOSED;
339
- this.readyState$.next(this.readyState);
340
- this.log(new Date(), 'WS', 'onclose', this.url);
341
- this.onclose(event);
342
- setTimeout(() => {
343
- this.connect();
344
- }, this.reconnectInterval);
345
- this.stopPinging();
346
- };
347
- this.ws.onmessage = (event) => {
348
- if (event.data === 'pong') {
349
- this.log(new Date(), 'WS', 'pong received');
350
- clearTimeout(this.pongTimeout);
351
- }
352
- else {
353
- let messageData = JSON.parse(event.data);
354
- messageData = this.convertUTCDateToLocalDate(messageData);
355
- this.onmessage(messageData);
356
- }
357
- };
358
- this.ws.onerror = (event) => {
359
- this.log(new Date(), 'WS', 'onerror', this, event);
360
- this.onerror(event);
361
- this.reconnect();
362
- };
363
+ this.ws.onopen = this.onOpenHandler;
364
+ this.ws.onclose = this.onCloseHandler;
365
+ this.ws.onmessage = this.onMessageHandler;
366
+ this.ws.onerror = this.onErrorHandler;
363
367
  }
364
368
  }
365
369
  convertUTCDateToLocalDate(data) {
@@ -419,7 +423,7 @@ class SocketService {
419
423
  }
420
424
  }
421
425
  send(...data) {
422
- if (this.ws && this.ws.readyState === this.ws.OPEN) {
426
+ if (this.isWebSocketActive()) {
423
427
  data.forEach(item => this.convertDatesToUTC(item));
424
428
  this.ws.send(JSON.stringify(data));
425
429
  return true;