velocious 1.0.562 → 1.0.563

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.
Files changed (44) hide show
  1. package/README.md +3 -1
  2. package/build/configuration-types.js +1 -0
  3. package/build/configuration.js +44 -3
  4. package/build/http-server/client/websocket-session.js +3 -3
  5. package/build/http-server/client-delivery-queue.js +168 -0
  6. package/build/http-server/server-client.js +9 -0
  7. package/build/http-server/websocket-events-host.js +42 -12
  8. package/build/http-server/worker-handler/in-process.js +53 -14
  9. package/build/http-server/worker-handler/index.js +88 -18
  10. package/build/http-server/worker-handler/worker-thread.js +2 -2
  11. package/build/src/configuration-types.d.ts +8 -0
  12. package/build/src/configuration-types.d.ts.map +1 -1
  13. package/build/src/configuration-types.js +2 -1
  14. package/build/src/configuration.d.ts +34 -1
  15. package/build/src/configuration.d.ts.map +1 -1
  16. package/build/src/configuration.js +40 -4
  17. package/build/src/http-server/client/websocket-session.js +4 -4
  18. package/build/src/http-server/client-delivery-queue.d.ts +121 -0
  19. package/build/src/http-server/client-delivery-queue.d.ts.map +1 -0
  20. package/build/src/http-server/client-delivery-queue.js +152 -0
  21. package/build/src/http-server/server-client.d.ts +6 -0
  22. package/build/src/http-server/server-client.d.ts.map +1 -1
  23. package/build/src/http-server/server-client.js +10 -1
  24. package/build/src/http-server/websocket-events-host.d.ts +15 -4
  25. package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
  26. package/build/src/http-server/websocket-events-host.js +39 -13
  27. package/build/src/http-server/worker-handler/in-process.d.ts +19 -1
  28. package/build/src/http-server/worker-handler/in-process.d.ts.map +1 -1
  29. package/build/src/http-server/worker-handler/in-process.js +50 -14
  30. package/build/src/http-server/worker-handler/index.d.ts +36 -4
  31. package/build/src/http-server/worker-handler/index.d.ts.map +1 -1
  32. package/build/src/http-server/worker-handler/index.js +82 -18
  33. package/build/src/http-server/worker-handler/worker-thread.js +3 -3
  34. package/build/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +2 -1
  36. package/src/configuration-types.js +1 -0
  37. package/src/configuration.js +44 -3
  38. package/src/http-server/client/websocket-session.js +3 -3
  39. package/src/http-server/client-delivery-queue.js +168 -0
  40. package/src/http-server/server-client.js +9 -0
  41. package/src/http-server/websocket-events-host.js +42 -12
  42. package/src/http-server/worker-handler/in-process.js +53 -14
  43. package/src/http-server/worker-handler/index.js +88 -18
  44. package/src/http-server/worker-handler/worker-thread.js +2 -2
@@ -0,0 +1,121 @@
1
+ export class ClientDeliveryQueueOverflowError extends Error {
2
+ /**
3
+ * Builds an outbound queue overflow error.
4
+ * @param {object} args - Overflow details.
5
+ * @param {number} args.clientCount - Client identifier.
6
+ * @param {number} args.maxBytes - Configured byte high-water mark.
7
+ * @param {number} args.maxFrames - Configured frame high-water mark.
8
+ * @param {number} args.pendingBytes - Bytes retained before rejecting the frame.
9
+ * @param {number} args.pendingFrames - Frames retained before rejecting the frame.
10
+ * @param {number} args.rejectedBytes - Rejected frame size.
11
+ */
12
+ constructor({ clientCount, maxBytes, maxFrames, pendingBytes, pendingFrames, rejectedBytes }: {
13
+ clientCount: number;
14
+ maxBytes: number;
15
+ maxFrames: number;
16
+ pendingBytes: number;
17
+ pendingFrames: number;
18
+ rejectedBytes: number;
19
+ });
20
+ }
21
+ /**
22
+ * @typedef {object} DeliveryTask
23
+ * @property {number} byteLength - Retained complete-buffer bytes.
24
+ * @property {boolean} countedFrame - Whether this task is an outbound frame.
25
+ * @property {() => Promise<void>} delivery - Delivery operation.
26
+ * @property {(error?: Error) => void} settle - Settles the enqueue promise.
27
+ */
28
+ export default class ClientDeliveryQueue {
29
+ /**
30
+ * Builds a per-client delivery queue.
31
+ * @param {object} args - Queue options.
32
+ * @param {number} args.clientCount - Client identifier.
33
+ * @param {number} args.maxBytes - Byte high-water mark.
34
+ * @param {number} args.maxFrames - Frame high-water mark.
35
+ * @param {(error: ClientDeliveryQueueOverflowError) => void} args.onOverflow - Overflow handler.
36
+ */
37
+ constructor({ clientCount, maxBytes, maxFrames, onOverflow }: {
38
+ clientCount: number;
39
+ maxBytes: number;
40
+ maxFrames: number;
41
+ onOverflow: (error: ClientDeliveryQueueOverflowError) => void;
42
+ });
43
+ clientCount: number;
44
+ maxBytes: number;
45
+ maxFrames: number;
46
+ onOverflow: (error: ClientDeliveryQueueOverflowError) => void;
47
+ /** @type {DeliveryTask[]} */
48
+ tasks: DeliveryTask[];
49
+ /** @type {DeliveryTask | undefined} */
50
+ activeTask: DeliveryTask | undefined;
51
+ pendingBytes: number;
52
+ pendingFrames: number;
53
+ destroyed: boolean;
54
+ /**
55
+ * Enqueues one complete output buffer.
56
+ * @param {object} args - Delivery details.
57
+ * @param {number} args.byteLength - Exact buffer byte length.
58
+ * @param {() => Promise<void>} args.delivery - Delivery operation.
59
+ * @returns {Promise<void>} - Settles after delivery or teardown.
60
+ */
61
+ enqueueFrame({ byteLength, delivery }: {
62
+ byteLength: number;
63
+ delivery: () => Promise<void>;
64
+ }): Promise<void>;
65
+ /**
66
+ * Enqueues an ordering-only operation that retains no complete output frame.
67
+ * @param {() => Promise<void>} delivery - Delivery operation.
68
+ * @returns {Promise<void>} - Settles after delivery or teardown.
69
+ */
70
+ enqueueControl(delivery: () => Promise<void>): Promise<void>;
71
+ /**
72
+ * Releases queued and active accounting during explicit client teardown.
73
+ * @returns {void}
74
+ */
75
+ destroy(): void;
76
+ /**
77
+ * Gets current retained-buffer accounting.
78
+ * @returns {{pendingBytes: number, pendingFrames: number}} - Current retained-buffer accounting.
79
+ */
80
+ snapshot(): {
81
+ pendingBytes: number;
82
+ pendingFrames: number;
83
+ };
84
+ /**
85
+ * Enqueues a delivery task.
86
+ * @param {Omit<DeliveryTask, "settle">} task - Task to enqueue.
87
+ * @returns {Promise<void>} - Task completion.
88
+ */
89
+ _enqueue(task: Omit<DeliveryTask, "settle">): Promise<void>;
90
+ /**
91
+ * Starts the next task when idle.
92
+ * @returns {void} - No return value.
93
+ */
94
+ _drain(): void;
95
+ /**
96
+ * Finishes the active delivery task.
97
+ * @param {DeliveryTask} task - Completed task.
98
+ * @param {Error} [error] - Delivery error.
99
+ * @returns {void}
100
+ */
101
+ _finish(task: DeliveryTask, error?: Error): void;
102
+ }
103
+ export type DeliveryTask = {
104
+ /**
105
+ * - Retained complete-buffer bytes.
106
+ */
107
+ byteLength: number;
108
+ /**
109
+ * - Whether this task is an outbound frame.
110
+ */
111
+ countedFrame: boolean;
112
+ /**
113
+ * - Delivery operation.
114
+ */
115
+ delivery: () => Promise<void>;
116
+ /**
117
+ * - Settles the enqueue promise.
118
+ */
119
+ settle: (error?: Error) => void;
120
+ };
121
+ //# sourceMappingURL=client-delivery-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-delivery-queue.d.ts","sourceRoot":"","sources":["../../../src/http-server/client-delivery-queue.js"],"names":[],"mappings":"AAEA;IACE;;;;;;;;;OASG;IACH,8FAPG;QAAqB,WAAW,EAAxB,MAAM;QACO,QAAQ,EAArB,MAAM;QACO,SAAS,EAAtB,MAAM;QACO,YAAY,EAAzB,MAAM;QACO,aAAa,EAA1B,MAAM;QACO,aAAa,EAA1B,MAAM;KAChB,EAIA;CACF;AAED;;;;;;GAMG;AAEH;IACE;;;;;;;OAOG;IACH,8DALG;QAAqB,WAAW,EAAxB,MAAM;QACO,QAAQ,EAArB,MAAM;QACO,SAAS,EAAtB,MAAM;QACkD,UAAU,EAAlE,CAAC,KAAK,EAAE,gCAAgC,KAAK,IAAI;KAC3D,EAaA;IAXC,oBAA8B;IAC9B,iBAAwB;IACxB,kBAA0B;IAC1B,oBANiB,gCAAgC,KAAK,IAAI,CAM9B;IAC5B,6BAA6B;IAC7B,OADW,YAAY,EAAE,CACV;IACf,uCAAuC;IACvC,YADW,YAAY,GAAG,SAAS,CACR;IAC3B,qBAAqB;IACrB,sBAAsB;IACtB,mBAAsB;IAGxB;;;;;;OAMG;IACH,uCAJG;QAAqB,UAAU,EAAvB,MAAM;QACoB,QAAQ,EAAlC,MAAM,OAAO,CAAC,IAAI,CAAC;KAC3B,GAAU,OAAO,CAAC,IAAI,CAAC,CAsBzB;IAED;;;;OAIG;IACH,yBAHW,MAAM,OAAO,CAAC,IAAI,CAAC,GACjB,OAAO,CAAC,IAAI,CAAC,CAMzB;IAED;;;OAGG;IACH,WAFa,IAAI,CAchB;IAED;;;OAGG;IACH,YAFa;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAC,CAIzD;IAED;;;;OAIG;IACH,eAHW,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;OAGG;IACH,UAFa,IAAI,CAahB;IAED;;;;;OAKG;IACH,cAJW,YAAY,UACZ,KAAK,GACH,IAAI,CAYhB;CACF;;;;;gBAlJa,MAAM;;;;kBACN,OAAO;;;;cACP,MAAM,OAAO,CAAC,IAAI,CAAC;;;;YACnB,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI"}
@@ -0,0 +1,152 @@
1
+ // @ts-check
2
+ export class ClientDeliveryQueueOverflowError extends Error {
3
+ /**
4
+ * Builds an outbound queue overflow error.
5
+ * @param {object} args - Overflow details.
6
+ * @param {number} args.clientCount - Client identifier.
7
+ * @param {number} args.maxBytes - Configured byte high-water mark.
8
+ * @param {number} args.maxFrames - Configured frame high-water mark.
9
+ * @param {number} args.pendingBytes - Bytes retained before rejecting the frame.
10
+ * @param {number} args.pendingFrames - Frames retained before rejecting the frame.
11
+ * @param {number} args.rejectedBytes - Rejected frame size.
12
+ */
13
+ constructor({ clientCount, maxBytes, maxFrames, pendingBytes, pendingFrames, rejectedBytes }) {
14
+ super(`WebSocket client ${clientCount} exceeded its outbound queue limit (${pendingFrames}/${maxFrames} frames, ${pendingBytes}/${maxBytes} bytes; rejected ${rejectedBytes} bytes)`);
15
+ this.name = "ClientDeliveryQueueOverflowError";
16
+ }
17
+ }
18
+ /**
19
+ * @typedef {object} DeliveryTask
20
+ * @property {number} byteLength - Retained complete-buffer bytes.
21
+ * @property {boolean} countedFrame - Whether this task is an outbound frame.
22
+ * @property {() => Promise<void>} delivery - Delivery operation.
23
+ * @property {(error?: Error) => void} settle - Settles the enqueue promise.
24
+ */
25
+ export default class ClientDeliveryQueue {
26
+ /**
27
+ * Builds a per-client delivery queue.
28
+ * @param {object} args - Queue options.
29
+ * @param {number} args.clientCount - Client identifier.
30
+ * @param {number} args.maxBytes - Byte high-water mark.
31
+ * @param {number} args.maxFrames - Frame high-water mark.
32
+ * @param {(error: ClientDeliveryQueueOverflowError) => void} args.onOverflow - Overflow handler.
33
+ */
34
+ constructor({ clientCount, maxBytes, maxFrames, onOverflow }) {
35
+ this.clientCount = clientCount;
36
+ this.maxBytes = maxBytes;
37
+ this.maxFrames = maxFrames;
38
+ this.onOverflow = onOverflow;
39
+ /** @type {DeliveryTask[]} */
40
+ this.tasks = [];
41
+ /** @type {DeliveryTask | undefined} */
42
+ this.activeTask = undefined;
43
+ this.pendingBytes = 0;
44
+ this.pendingFrames = 0;
45
+ this.destroyed = false;
46
+ }
47
+ /**
48
+ * Enqueues one complete output buffer.
49
+ * @param {object} args - Delivery details.
50
+ * @param {number} args.byteLength - Exact buffer byte length.
51
+ * @param {() => Promise<void>} args.delivery - Delivery operation.
52
+ * @returns {Promise<void>} - Settles after delivery or teardown.
53
+ */
54
+ enqueueFrame({ byteLength, delivery }) {
55
+ if (this.destroyed)
56
+ return Promise.resolve();
57
+ if (this.pendingFrames + 1 > this.maxFrames || this.pendingBytes + byteLength > this.maxBytes) {
58
+ const error = new ClientDeliveryQueueOverflowError({
59
+ clientCount: this.clientCount,
60
+ maxBytes: this.maxBytes,
61
+ maxFrames: this.maxFrames,
62
+ pendingBytes: this.pendingBytes,
63
+ pendingFrames: this.pendingFrames,
64
+ rejectedBytes: byteLength
65
+ });
66
+ this.onOverflow(error);
67
+ return Promise.reject(error);
68
+ }
69
+ this.pendingFrames += 1;
70
+ this.pendingBytes += byteLength;
71
+ return this._enqueue({ byteLength, countedFrame: true, delivery });
72
+ }
73
+ /**
74
+ * Enqueues an ordering-only operation that retains no complete output frame.
75
+ * @param {() => Promise<void>} delivery - Delivery operation.
76
+ * @returns {Promise<void>} - Settles after delivery or teardown.
77
+ */
78
+ enqueueControl(delivery) {
79
+ if (this.destroyed)
80
+ return Promise.resolve();
81
+ return this._enqueue({ byteLength: 0, countedFrame: false, delivery });
82
+ }
83
+ /**
84
+ * Releases queued and active accounting during explicit client teardown.
85
+ * @returns {void}
86
+ */
87
+ destroy() {
88
+ if (this.destroyed)
89
+ return;
90
+ this.destroyed = true;
91
+ const tasks = this.activeTask ? [this.activeTask, ...this.tasks] : this.tasks;
92
+ this.activeTask = undefined;
93
+ this.tasks = [];
94
+ this.pendingBytes = 0;
95
+ this.pendingFrames = 0;
96
+ for (const task of tasks)
97
+ task.settle();
98
+ }
99
+ /**
100
+ * Gets current retained-buffer accounting.
101
+ * @returns {{pendingBytes: number, pendingFrames: number}} - Current retained-buffer accounting.
102
+ */
103
+ snapshot() {
104
+ return { pendingBytes: this.pendingBytes, pendingFrames: this.pendingFrames };
105
+ }
106
+ /**
107
+ * Enqueues a delivery task.
108
+ * @param {Omit<DeliveryTask, "settle">} task - Task to enqueue.
109
+ * @returns {Promise<void>} - Task completion.
110
+ */
111
+ _enqueue(task) {
112
+ const promise = new Promise((resolve, reject) => {
113
+ this.tasks.push({
114
+ ...task,
115
+ settle: (error) => error ? reject(error) : resolve(undefined)
116
+ });
117
+ });
118
+ this._drain();
119
+ return promise;
120
+ }
121
+ /**
122
+ * Starts the next task when idle.
123
+ * @returns {void} - No return value.
124
+ */
125
+ _drain() {
126
+ if (this.destroyed || this.activeTask)
127
+ return;
128
+ const task = this.tasks.shift();
129
+ if (!task)
130
+ return;
131
+ this.activeTask = task;
132
+ void task.delivery().then(() => this._finish(task), (error) => this._finish(task, error));
133
+ }
134
+ /**
135
+ * Finishes the active delivery task.
136
+ * @param {DeliveryTask} task - Completed task.
137
+ * @param {Error} [error] - Delivery error.
138
+ * @returns {void}
139
+ */
140
+ _finish(task, error) {
141
+ if (this.destroyed || this.activeTask !== task)
142
+ return;
143
+ this.activeTask = undefined;
144
+ if (task.countedFrame) {
145
+ this.pendingBytes -= task.byteLength;
146
+ this.pendingFrames -= 1;
147
+ }
148
+ task.settle(error);
149
+ this._drain();
150
+ }
151
+ }
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LWRlbGl2ZXJ5LXF1ZXVlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2h0dHAtc2VydmVyL2NsaWVudC1kZWxpdmVyeS1xdWV1ZS5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosTUFBTSxPQUFPLGdDQUFpQyxTQUFRLEtBQUs7SUFDekQ7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFDO1FBQ3hGLEtBQUssQ0FBQyxvQkFBb0IsV0FBVyx1Q0FBdUMsYUFBYSxJQUFJLFNBQVMsWUFBWSxZQUFZLElBQUksUUFBUSxvQkFBb0IsYUFBYSxTQUFTLENBQUMsQ0FBQTtRQUNyTCxJQUFJLENBQUMsSUFBSSxHQUFHLGtDQUFrQyxDQUFBO0lBQ2hELENBQUM7Q0FDRjtBQUVEOzs7Ozs7R0FNRztBQUVILE1BQU0sQ0FBQyxPQUFPLE9BQU8sbUJBQW1CO0lBQ3RDOzs7Ozs7O09BT0c7SUFDSCxZQUFZLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFDO1FBQ3hELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFBO1FBQ3hCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQzVCLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQTtRQUNmLHVDQUF1QztRQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQTtRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQTtRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUss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QUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUE7UUFDYixPQUFPLE9BQU8sQ0FBQTtJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU07UUFFN0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUMvQixJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU07UUFFakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDdEIsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUN2QixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUN4QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQ3JDLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUs7UUFDakIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSTtZQUFFLE9BQU07UUFFdEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUE7UUFDM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFBO1lBQ3BDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxDQUFBO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQ2xCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQTtJQUNmLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgY2xhc3MgQ2xpZW50RGVsaXZlcnlRdWV1ZU92ZXJmbG93RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBCdWlsZHMgYW4gb3V0Ym91bmQgcXVldWUgb3ZlcmZsb3cgZXJyb3IuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3ZlcmZsb3cgZGV0YWlscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuY2xpZW50Q291bnQgLSBDbGllbnQgaWRlbnRpZmllci5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MubWF4Qnl0ZXMgLSBDb25maWd1cmVkIGJ5dGUgaGlnaC13YXRlciBtYXJrLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5tYXhGcmFtZXMgLSBDb25maWd1cmVkIGZyYW1lIGhpZ2gtd2F0ZXIgbWFyay5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MucGVuZGluZ0J5dGVzIC0gQnl0ZXMgcmV0YWluZWQgYmVmb3JlIHJlamVjdGluZyB0aGUgZnJhbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLnBlbmRpbmdGcmFtZXMgLSBGcmFtZXMgcmV0YWluZWQgYmVmb3JlIHJlamVjdGluZyB0aGUgZnJhbWUuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLnJlamVjdGVkQnl0ZXMgLSBSZWplY3RlZCBmcmFtZSBzaXplLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NsaWVudENvdW50LCBtYXhCeXRlcywgbWF4RnJhbWVzLCBwZW5kaW5nQnl0ZXMsIHBlbmRpbmdGcmFtZXMsIHJlamVjdGVkQnl0ZXN9KSB7XG4gICAgc3VwZXIoYFdlYlNvY2tldCBjbGllbnQgJHtjbGllbnRDb3VudH0gZXhjZWVkZWQgaXRzIG91dGJvdW5kIHF1ZXVlIGxpbWl0ICgke3BlbmRpbmdGcmFtZXN9LyR7bWF4RnJhbWVzfSBmcmFtZXMsICR7cGVuZGluZ0J5dGVzfS8ke21heEJ5dGVzfSBieXRlczsgcmVqZWN0ZWQgJHtyZWplY3RlZEJ5dGVzfSBieXRlcylgKVxuICAgIHRoaXMubmFtZSA9IFwiQ2xpZW50RGVsaXZlcnlRdWV1ZU92ZXJmbG93RXJyb3JcIlxuICB9XG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gRGVsaXZlcnlUYXNrXG4gKiBAcHJvcGVydHkge251bWJlcn0gYnl0ZUxlbmd0aCAtIFJldGFpbmVkIGNvbXBsZXRlLWJ1ZmZlciBieXRlcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gY291bnRlZEZyYW1lIC0gV2hldGhlciB0aGlzIHRhc2sgaXMgYW4gb3V0Ym91bmQgZnJhbWUuXG4gKiBAcHJvcGVydHkgeygpID0+IFByb21pc2U8dm9pZD59IGRlbGl2ZXJ5IC0gRGVsaXZlcnkgb3BlcmF0aW9uLlxuICogQHByb3BlcnR5IHsoZXJyb3I/OiBFcnJvcikgPT4gdm9pZH0gc2V0dGxlIC0gU2V0dGxlcyB0aGUgZW5xdWV1ZSBwcm9taXNlLlxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENsaWVudERlbGl2ZXJ5UXVldWUge1xuICAvKipcbiAgICogQnVpbGRzIGEgcGVyLWNsaWVudCBkZWxpdmVyeSBxdWV1ZS5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBRdWV1ZSBvcHRpb25zLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5jbGllbnRDb3VudCAtIENsaWVudCBpZGVudGlmaWVyLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5tYXhCeXRlcyAtIEJ5dGUgaGlnaC13YXRlciBtYXJrLlxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5tYXhGcmFtZXMgLSBGcmFtZSBoaWdoLXdhdGVyIG1hcmsuXG4gICAqIEBwYXJhbSB7KGVycm9yOiBDbGllbnREZWxpdmVyeVF1ZXVlT3ZlcmZsb3dFcnJvcikgPT4gdm9pZH0gYXJncy5vbk92ZXJmbG93IC0gT3ZlcmZsb3cgaGFuZGxlci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjbGllbnRDb3VudCwgbWF4Qnl0ZXMsIG1heEZyYW1lcywgb25PdmVyZmxvd30pIHtcbiAgICB0aGlzLmNsaWVudENvdW50ID0gY2xpZW50Q291bnRcbiAgICB0aGlzLm1heEJ5dGVzID0gbWF4Qnl0ZXNcbiAgICB0aGlzLm1heEZyYW1lcyA9IG1heEZyYW1lc1xuICAgIHRoaXMub25PdmVyZmxvdyA9IG9uT3ZlcmZsb3dcbiAgICAvKiogQHR5cGUge0RlbGl2ZXJ5VGFza1tdfSAqL1xuICAgIHRoaXMudGFza3MgPSBbXVxuICAgIC8qKiBAdHlwZSB7RGVsaXZlcnlUYXNrIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuYWN0aXZlVGFzayA9IHVuZGVmaW5lZFxuICAgIHRoaXMucGVuZGluZ0J5dGVzID0gMFxuICAgIHRoaXMucGVuZGluZ0ZyYW1lcyA9IDBcbiAgICB0aGlzLmRlc3Ryb3llZCA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICogRW5xdWV1ZXMgb25lIGNvbXBsZXRlIG91dHB1dCBidWZmZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gRGVsaXZlcnkgZGV0YWlscy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuYnl0ZUxlbmd0aCAtIEV4YWN0IGJ1ZmZlciBieXRlIGxlbmd0aC5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBhcmdzLmRlbGl2ZXJ5IC0gRGVsaXZlcnkgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBTZXR0bGVzIGFmdGVyIGRlbGl2ZXJ5IG9yIHRlYXJkb3duLlxuICAgKi9cbiAgZW5xdWV1ZUZyYW1lKHtieXRlTGVuZ3RoLCBkZWxpdmVyeX0pIHtcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuXG4gICAgaWYgKHRoaXMucGVuZGluZ0ZyYW1lcyArIDEgPiB0aGlzLm1heEZyYW1lcyB8fCB0aGlzLnBlbmRpbmdCeXRlcyArIGJ5dGVMZW5ndGggPiB0aGlzLm1heEJ5dGVzKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBDbGllbnREZWxpdmVyeVF1ZXVlT3ZlcmZsb3dFcnJvcih7XG4gICAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgICBtYXhCeXRlczogdGhpcy5tYXhCeXRlcyxcbiAgICAgICAgbWF4RnJhbWVzOiB0aGlzLm1heEZyYW1lcyxcbiAgICAgICAgcGVuZGluZ0J5dGVzOiB0aGlzLnBlbmRpbmdCeXRlcyxcbiAgICAgICAgcGVuZGluZ0ZyYW1lczogdGhpcy5wZW5kaW5nRnJhbWVzLFxuICAgICAgICByZWplY3RlZEJ5dGVzOiBieXRlTGVuZ3RoXG4gICAgICB9KVxuXG4gICAgICB0aGlzLm9uT3ZlcmZsb3coZXJyb3IpXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpXG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nRnJhbWVzICs9IDFcbiAgICB0aGlzLnBlbmRpbmdCeXRlcyArPSBieXRlTGVuZ3RoXG4gICAgcmV0dXJuIHRoaXMuX2VucXVldWUoe2J5dGVMZW5ndGgsIGNvdW50ZWRGcmFtZTogdHJ1ZSwgZGVsaXZlcnl9KVxuICB9XG5cbiAgLyoqXG4gICAqIEVucXVldWVzIGFuIG9yZGVyaW5nLW9ubHkgb3BlcmF0aW9uIHRoYXQgcmV0YWlucyBubyBjb21wbGV0ZSBvdXRwdXQgZnJhbWUuXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTx2b2lkPn0gZGVsaXZlcnkgLSBEZWxpdmVyeSBvcGVyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFNldHRsZXMgYWZ0ZXIgZGVsaXZlcnkgb3IgdGVhcmRvd24uXG4gICAqL1xuICBlbnF1ZXVlQ29udHJvbChkZWxpdmVyeSkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICByZXR1cm4gdGhpcy5fZW5xdWV1ZSh7Ynl0ZUxlbmd0aDogMCwgY291bnRlZEZyYW1lOiBmYWxzZSwgZGVsaXZlcnl9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbGVhc2VzIHF1ZXVlZCBhbmQgYWN0aXZlIGFjY291bnRpbmcgZHVyaW5nIGV4cGxpY2l0IGNsaWVudCB0ZWFyZG93bi5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkgcmV0dXJuXG5cbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICBjb25zdCB0YXNrcyA9IHRoaXMuYWN0aXZlVGFzayA/IFt0aGlzLmFjdGl2ZVRhc2ssIC4uLnRoaXMudGFza3NdIDogdGhpcy50YXNrc1xuXG4gICAgdGhpcy5hY3RpdmVUYXNrID0gdW5kZWZpbmVkXG4gICAgdGhpcy50YXNrcyA9IFtdXG4gICAgdGhpcy5wZW5kaW5nQnl0ZXMgPSAwXG4gICAgdGhpcy5wZW5kaW5nRnJhbWVzID0gMFxuXG4gICAgZm9yIChjb25zdCB0YXNrIG9mIHRhc2tzKSB0YXNrLnNldHRsZSgpXG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjdXJyZW50IHJldGFpbmVkLWJ1ZmZlciBhY2NvdW50aW5nLlxuICAgKiBAcmV0dXJucyB7e3BlbmRpbmdCeXRlczogbnVtYmVyLCBwZW5kaW5nRnJhbWVzOiBudW1iZXJ9fSAtIEN1cnJlbnQgcmV0YWluZWQtYnVmZmVyIGFjY291bnRpbmcuXG4gICAqL1xuICBzbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge3BlbmRpbmdCeXRlczogdGhpcy5wZW5kaW5nQnl0ZXMsIHBlbmRpbmdGcmFtZXM6IHRoaXMucGVuZGluZ0ZyYW1lc31cbiAgfVxuXG4gIC8qKlxuICAgKiBFbnF1ZXVlcyBhIGRlbGl2ZXJ5IHRhc2suXG4gICAqIEBwYXJhbSB7T21pdDxEZWxpdmVyeVRhc2ssIFwic2V0dGxlXCI+fSB0YXNrIC0gVGFzayB0byBlbnF1ZXVlLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBUYXNrIGNvbXBsZXRpb24uXG4gICAqL1xuICBfZW5xdWV1ZSh0YXNrKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMudGFza3MucHVzaCh7XG4gICAgICAgIC4uLnRhc2ssXG4gICAgICAgIHNldHRsZTogKGVycm9yKSA9PiBlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHRoaXMuX2RyYWluKClcbiAgICByZXR1cm4gcHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgbmV4dCB0YXNrIHdoZW4gaWRsZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgX2RyYWluKCkge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCB8fCB0aGlzLmFjdGl2ZVRhc2spIHJldHVyblxuXG4gICAgY29uc3QgdGFzayA9IHRoaXMudGFza3Muc2hpZnQoKVxuICAgIGlmICghdGFzaykgcmV0dXJuXG5cbiAgICB0aGlzLmFjdGl2ZVRhc2sgPSB0YXNrXG4gICAgdm9pZCB0YXNrLmRlbGl2ZXJ5KCkudGhlbihcbiAgICAgICgpID0+IHRoaXMuX2ZpbmlzaCh0YXNrKSxcbiAgICAgIChlcnJvcikgPT4gdGhpcy5fZmluaXNoKHRhc2ssIGVycm9yKVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5pc2hlcyB0aGUgYWN0aXZlIGRlbGl2ZXJ5IHRhc2suXG4gICAqIEBwYXJhbSB7RGVsaXZlcnlUYXNrfSB0YXNrIC0gQ29tcGxldGVkIHRhc2suXG4gICAqIEBwYXJhbSB7RXJyb3J9IFtlcnJvcl0gLSBEZWxpdmVyeSBlcnJvci5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfZmluaXNoKHRhc2ssIGVycm9yKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkIHx8IHRoaXMuYWN0aXZlVGFzayAhPT0gdGFzaykgcmV0dXJuXG5cbiAgICB0aGlzLmFjdGl2ZVRhc2sgPSB1bmRlZmluZWRcbiAgICBpZiAodGFzay5jb3VudGVkRnJhbWUpIHtcbiAgICAgIHRoaXMucGVuZGluZ0J5dGVzIC09IHRhc2suYnl0ZUxlbmd0aFxuICAgICAgdGhpcy5wZW5kaW5nRnJhbWVzIC09IDFcbiAgICB9XG4gICAgdGFzay5zZXR0bGUoZXJyb3IpXG4gICAgdGhpcy5fZHJhaW4oKVxuICB9XG59XG4iXX0=
@@ -28,6 +28,12 @@ export default class ServerClient {
28
28
  * @returns {Promise<void>} - Resolves when complete.
29
29
  */
30
30
  end(): Promise<void>;
31
+ /**
32
+ * Immediately destroys the socket and all transport-owned write buffers.
33
+ * @param {Error} error - Destruction reason.
34
+ * @returns {void}
35
+ */
36
+ destroy(error: Error): void;
31
37
  /**
32
38
  * On socket data.
33
39
  * @param {Buffer} chunk - Chunk.
@@ -1 +1 @@
1
- {"version":3,"file":"server-client.d.ts","sourceRoot":"","sources":["../../../src/http-server/server-client.js"],"names":[],"mappings":"AAoBA;IAGE;;;;;;OAMG;IACH,oDAJG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACV,MAAM,EAAjC,OAAO,KAAK,EAAE,MAAM;QACP,WAAW,EAAxB,MAAM;KAChB,EAiBA;IAzBD,mEAA2B;IAYzB,qDAAkC;IAClC,eAA8B;IAC9B,kCAAoB;IACpB,oBAA8B;IAC9B,kCAAyC;IACzC,sBAAyB;IAU3B;;;OAGG;IACH,UAFa,IAAI,CAUhB;IAED;;;OAGG;IACH,OAFa,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACH,eAAgB,OAHL,MAGU,KAFR,IAAI,CAahB;IAED;;;OAGG;IACH,mBAFa,IAAI,CAKhB;IAED;;;OAGG;IACH,qBAFa,IAAI,CAKhB;IAED;;;OAGG;IACH,uBAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,qBAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,sBAFa,IAAI,CAIhB;IAGD;;;;OAIG;IACH,gBAAiB,OAHN,KAGW,KAFT,IAAI,CAWhB;IAED;;;OAGG;IACH,aAFa,IAAI,CAOhB;IAED;;;;OAIG;IACH,WAHW,MAAM,GAAG,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC,CAqCzB;IAED;;;;;OAKG;IACH,mBAJW,MAAM,aACN,OAAO,GACL,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAgC5C;IAED;;;;OAIG;IACH,sBAHW,MAAM,GAAG,UAAU,GACjB,OAAO,CAAC,OAAO,CAAC,CAoD5B;IAED;;;;OAIG;IACH,qBAHW,OAAO,gBAAgB,EAAE,MAAM,GAC7B,IAAI,CAIhB;IADC,yDAAuB;CAE1B;mBAnTkB,cAAc"}
1
+ {"version":3,"file":"server-client.d.ts","sourceRoot":"","sources":["../../../src/http-server/server-client.js"],"names":[],"mappings":"AAoBA;IAGE;;;;;;OAMG;IACH,oDAJG;QAAoD,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;QACV,MAAM,EAAjC,OAAO,KAAK,EAAE,MAAM;QACP,WAAW,EAAxB,MAAM;KAChB,EAiBA;IAzBD,mEAA2B;IAYzB,qDAAkC;IAClC,eAA8B;IAC9B,kCAAoB;IACpB,oBAA8B;IAC9B,kCAAyC;IACzC,sBAAyB;IAU3B;;;OAGG;IACH,UAFa,IAAI,CAUhB;IAED;;;OAGG;IACH,OAFa,OAAO,CAAC,IAAI,CAAC,CAYzB;IAED;;;;OAIG;IACH,eAHW,KAAK,GACH,IAAI,CAIhB;IAED;;;;OAIG;IACH,eAAgB,OAHL,MAGU,KAFR,IAAI,CAahB;IAED;;;OAGG;IACH,mBAFa,IAAI,CAKhB;IAED;;;OAGG;IACH,qBAFa,IAAI,CAKhB;IAED;;;OAGG;IACH,uBAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,qBAFa,IAAI,CAIhB;IAED;;;OAGG;IACH,sBAFa,IAAI,CAIhB;IAGD;;;;OAIG;IACH,gBAAiB,OAHN,KAGW,KAFT,IAAI,CAWhB;IAED;;;OAGG;IACH,aAFa,IAAI,CAOhB;IAED;;;;OAIG;IACH,WAHW,MAAM,GAAG,UAAU,GACjB,OAAO,CAAC,IAAI,CAAC,CAqCzB;IAED;;;;;OAKG;IACH,mBAJW,MAAM,aACN,OAAO,GACL,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAgC5C;IAED;;;;OAIG;IACH,sBAHW,MAAM,GAAG,UAAU,GACjB,OAAO,CAAC,OAAO,CAAC,CAoD5B;IAED;;;;OAIG;IACH,qBAHW,OAAO,gBAAgB,EAAE,MAAM,GAC7B,IAAI,CAIhB;IADC,yDAAuB;CAE1B;mBA5TkB,cAAc"}
@@ -66,6 +66,15 @@ export default class ServerClient {
66
66
  this.socket.end();
67
67
  });
68
68
  }
69
+ /**
70
+ * Immediately destroys the socket and all transport-owned write buffers.
71
+ * @param {Error} error - Destruction reason.
72
+ * @returns {void}
73
+ */
74
+ destroy(error) {
75
+ if (!this.socket.destroyed)
76
+ this.socket.destroy(error);
77
+ }
69
78
  /**
70
79
  * On socket data.
71
80
  * @param {Buffer} chunk - Chunk.
@@ -279,4 +288,4 @@ export default class ServerClient {
279
288
  this.worker = newWorker;
280
289
  }
281
290
  }
282
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9zZXJ2ZXItY2xpZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFlBQVksTUFBTSwyQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFDeEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBRWpDOzs7O0dBSUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLEtBQUs7SUFDakMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUV4SCxPQUFPO1FBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLE9BQU87S0FDUixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBWTtJQUMvQixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUUzQjs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLFdB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ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQgRXZlbnRFbWl0dGVyIGZyb20gXCIuLi91dGlscy9ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCB7Y3JlYXRlUmVhZFN0cmVhbX0gZnJvbSBcIm5vZGU6ZnNcIlxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi4vbG9nZ2VyLmpzXCJcblxuLyoqXG4gKiBSdW5zIHN1bW1hcml6ZSBzb2NrZXQgY2h1bmsuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmsgLSBJbmNvbWluZyBzb2NrZXQgZGF0YS5cbiAqIEByZXR1cm5zIHtvYmplY3R9IC0gQ2h1bmsgZGVidWcgbWV0YWRhdGEuXG4gKi9cbmZ1bmN0aW9uIHN1bW1hcml6ZVNvY2tldENodW5rKGNodW5rKSB7XG4gIGNvbnN0IHByZXZpZXcgPSBjaHVuay50b1N0cmluZyhcImxhdGluMVwiLCAwLCBNYXRoLm1pbihjaHVuay5sZW5ndGgsIDE2MCkpLnJlcGxhY2VBbGwoXCJcXHJcIiwgXCJcXFxcclwiKS5yZXBsYWNlQWxsKFwiXFxuXCIsIFwiXFxcXG5cIilcblxuICByZXR1cm4ge1xuICAgIGxlbmd0aDogY2h1bmsubGVuZ3RoLFxuICAgIHByZXZpZXdcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXJ2ZXJDbGllbnQge1xuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcblxuICAvKipcbiAgICogUnVucyBjb25zdHJ1Y3Rvci5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIENvbmZpZ3VyYXRpb24gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwibmV0XCIpLlNvY2tldH0gYXJncy5zb2NrZXQgLSBTb2NrZXQgaW5zdGFuY2UuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLmNsaWVudENvdW50IC0gQ2xpZW50IGNvdW50LlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NvbmZpZ3VyYXRpb24sIHNvY2tldCwgY2xpZW50Q291bnR9KSB7XG4gICAgaWYgKCFjb25maWd1cmF0aW9uKSB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25maWd1cmF0aW9uIGdpdmVuXCIpXG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgTG9nZ2VyKHRoaXMpXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLmNsaWVudENvdW50ID0gY2xpZW50Q291bnRcbiAgICB0aGlzLnJlbW90ZUFkZHJlc3MgPSBzb2NrZXQucmVtb3RlQWRkcmVzc1xuICAgIHRoaXMuY2xvc2VFbWl0dGVkID0gZmFsc2VcblxuICAgIHNvY2tldC5vbihcImVuZFwiLCB0aGlzLm9uU29ja2V0RW5kKVxuICAgIHNvY2tldC5vbihcImVycm9yXCIsIHRoaXMub25Tb2NrZXRFcnJvcilcbiAgICBzb2NrZXQub24oXCJjbG9zZVwiLCB0aGlzLm9uU29ja2V0Q2xvc2UpXG4gICAgc29ja2V0Lm9uKFwidGltZW91dFwiLCB0aGlzLm9uU29ja2V0VGltZW91dClcbiAgICBzb2NrZXQub24oXCJkcmFpblwiLCB0aGlzLm9uU29ja2V0RHJhaW4pXG4gICAgc29ja2V0Lm9uKFwiZmluaXNoXCIsIHRoaXMub25Tb2NrZXRGaW5pc2gpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBsaXN0ZW4uXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGxpc3RlbigpIHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJTb2NrZXQgbGlzdGVuXCIsIHtcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50LFxuICAgICAgcmVtb3RlQWRkcmVzczogdGhpcy5zb2NrZXQucmVtb3RlQWRkcmVzcyxcbiAgICAgIHJlbW90ZUZhbWlseTogdGhpcy5zb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgICAgcmVtb3RlUG9ydDogdGhpcy5zb2NrZXQucmVtb3RlUG9ydFxuICAgIH1dKVxuICAgIHRoaXMuc29ja2V0Lm9uKFwiZGF0YVwiLCB0aGlzLm9uU29ja2V0RGF0YSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGVuZCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgdGhpcy5zb2NrZXQud3JpdGFibGVFbmRlZCB8fCB0aGlzLnNvY2tldC53cml0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLnNvY2tldC5vbmNlKFwiY2xvc2VcIiwgKCkgPT4gcmVzb2x2ZSh1bmRlZmluZWQpKVxuICAgICAgdGhpcy5zb2NrZXQuZW5kKClcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIHNvY2tldCBkYXRhLlxuICAgKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmsgLSBDaHVuay5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Tb2NrZXREYXRhID0gKGNodW5rKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBgU29ja2V0ICR7dGhpcy5jbGllbnRDb3VudH06ICR7Y2h1bmt9YClcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJTb2NrZXQgZGF0YSByZWNlaXZlZFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsIC4uLnN1bW1hcml6ZVNvY2tldENodW5rKGNodW5rKX1dKVxuXG4gICAgaWYgKCF0aGlzLndvcmtlcikgdGhyb3cgbmV3IEVycm9yKFwiTm8gd29ya2VyXCIpXG5cbiAgICB0aGlzLndvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICBjb21tYW5kOiBcImNsaWVudFdyaXRlXCIsXG4gICAgICBjaHVuayxcbiAgICAgIGNsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBzb2NrZXQgZW5kLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvblNvY2tldEVuZCA9ICgpID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1Z0xvd0xldmVsKCgpID0+IGBTb2NrZXQgJHt0aGlzLmNsaWVudENvdW50fSBlbmRgKVxuICAgIHRoaXMuZW1pdENsb3NlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBzb2NrZXQgY2xvc2UuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uU29ja2V0Q2xvc2UgPSAoKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBgU29ja2V0ICR7dGhpcy5jbGllbnRDb3VudH0gY2xvc2VgKVxuICAgIHRoaXMuZW1pdENsb3NlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBzb2NrZXQgdGltZW91dC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Tb2NrZXRUaW1lb3V0ID0gKCkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlNvY2tldCB0aW1lb3V0XCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudH1dKVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIHNvY2tldCBkcmFpbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Tb2NrZXREcmFpbiA9ICgpID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJTb2NrZXQgZHJhaW5cIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50fV0pXG4gIH1cblxuICAvKipcbiAgICogT24gc29ja2V0IGZpbmlzaC5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Tb2NrZXRGaW5pc2ggPSAoKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiU29ja2V0IGZpbmlzaFwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnR9XSlcbiAgfVxuXG5cbiAgLyoqXG4gICAqIE9uIHNvY2tldCBlcnJvci5cbiAgICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBTb2NrZXQgZXJyb3IuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uU29ja2V0RXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSAvKiogQHR5cGUge3tjb2RlPzogc3RyaW5nfX0gKi8gKGVycm9yKS5jb2RlXG5cbiAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbYFNvY2tldCAke3RoaXMuY2xpZW50Q291bnR9IGVycm9yYCwgZXJyb3JDb2RlIHx8IGVycm9yLm1lc3NhZ2VdKVxuICAgIHRoaXMuZW1pdENsb3NlKClcblxuICAgIGlmICghdGhpcy5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICB0aGlzLnNvY2tldC5kZXN0cm95KGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGVtaXQgY2xvc2UuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIGVtaXRDbG9zZSgpIHtcbiAgICBpZiAodGhpcy5jbG9zZUVtaXR0ZWQpIHJldHVyblxuXG4gICAgdGhpcy5jbG9zZUVtaXR0ZWQgPSB0cnVlXG4gICAgdGhpcy5ldmVudHMuZW1pdChcImNsb3NlXCIsIHRoaXMpXG4gIH1cblxuICAvKipcbiAgICogUnVucyBzZW5kLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVpbnQ4QXJyYXl9IGRhdGEgLSBEYXRhIHBheWxvYWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSAtIFJlc29sdmVzIHdoZW4gY29tcGxldGUuXG4gICAqL1xuICBhc3luYyBzZW5kKGRhdGEpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNlbmQgJHtkYXRhfWApXG4gICAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8IHRoaXMuc29ja2V0LndyaXRhYmxlRW5kZWQgfHwgdGhpcy5zb2NrZXQud3JpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gXCJTa2lwcGluZyBzZW5kIGJlY2F1c2Ugc29ja2V0IGlzIGNsb3NlZFwiKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGxldCBkb25lID0gZmFsc2VcblxuICAgICAgY29uc3QgZmluaXNoID0gKCkgPT4ge1xuICAgICAgICBpZiAoZG9uZSkgcmV0dXJuXG5cbiAgICAgICAgZG9uZSA9IHRydWVcbiAgICAgICAgdGhpcy5zb2NrZXQub2ZmKFwiZXJyb3JcIiwgb25Xcml0ZUVycm9yKVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9uV3JpdGVFcnJvciA9ICgvKiogQHR5cGUge0Vycm9yfSAqLyBlcnJvcikgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckNvZGUgPSAvKiogQHR5cGUge3tjb2RlPzogc3RyaW5nfX0gKi8gKGVycm9yKS5jb2RlXG5cbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BTb2NrZXQgJHt0aGlzLmNsaWVudENvdW50fSB3cml0ZSBlcnJvcmAsIGVycm9yQ29kZSB8fCBlcnJvci5tZXNzYWdlXSlcbiAgICAgICAgZmluaXNoKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5zb2NrZXQub25jZShcImVycm9yXCIsIG9uV3JpdGVFcnJvcilcbiAgICAgIHRoaXMuc29ja2V0LndyaXRlKGRhdGEsIChlcnJvcikgPT4ge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBvbldyaXRlRXJyb3IoZXJyb3IpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBmaW5pc2goKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbXMgYSBmaWxlIHRvIHRoZSBzb2NrZXQgd2hpbGUgcmVzcGVjdGluZyBzb2NrZXQgd3JpdGUgYmFja3ByZXNzdXJlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGggLSBGaWxlIHBhdGguXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlbmRCb2R5XSAtIFdoZXRoZXIgdG8gcmVhZCBhbmQgc2VuZCB0aGUgZmlsZSBib2R5LlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxcImNvbXBsZXRlZFwiIHwgXCJhYm9ydGVkXCI+fSAtIFRyYW5zZmVyIHJlc3VsdC5cbiAgICovXG4gIGFzeW5jIHNlbmRGaWxlKGZpbGVQYXRoLCBzZW5kQm9keSA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8IHRoaXMuc29ja2V0LndyaXRhYmxlRW5kZWQgfHwgdGhpcy5zb2NrZXQud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gXCJhYm9ydGVkXCJcbiAgICBpZiAoIXNlbmRCb2R5KSByZXR1cm4gXCJjb21wbGV0ZWRcIlxuXG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IGNyZWF0ZVJlYWRTdHJlYW0oZmlsZVBhdGgpXG4gICAgbGV0IGFib3J0ZWQgPSBmYWxzZVxuICAgIGNvbnN0IGFib3J0ID0gKCkgPT4ge1xuICAgICAgYWJvcnRlZCA9IHRydWVcbiAgICAgIHJlYWRTdHJlYW0uZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5zb2NrZXQub25jZShcImNsb3NlXCIsIGFib3J0KVxuICAgIHRoaXMuc29ja2V0Lm9uY2UoXCJlcnJvclwiLCBhYm9ydClcblxuICAgIHRyeSB7XG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0pIHtcbiAgICAgICAgaWYgKGFib3J0ZWQgfHwgIWF3YWl0IHRoaXMud3JpdGVGaWxlQ2h1bmsoY2h1bmspKSByZXR1cm4gXCJhYm9ydGVkXCJcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFib3J0ZWQgPyBcImFib3J0ZWRcIiA6IFwiY29tcGxldGVkXCJcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoKCkgPT4gW2BTb2NrZXQgJHt0aGlzLmNsaWVudENvdW50fSBmaWxlIHJlc3BvbnNlIGZhaWxlZGAsIGZpbGVQYXRoLCBlcnJvcl0pXG4gICAgICBpZiAoIXRoaXMuc29ja2V0LmRlc3Ryb3llZCkgdGhpcy5zb2NrZXQuZGVzdHJveSgpXG5cbiAgICAgIHJldHVybiBcImFib3J0ZWRcIlxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnNvY2tldC5vZmYoXCJjbG9zZVwiLCBhYm9ydClcbiAgICAgIHRoaXMuc29ja2V0Lm9mZihcImVycm9yXCIsIGFib3J0KVxuICAgICAgcmVhZFN0cmVhbS5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV3JpdGVzIG9uZSBmaWxlIGNodW5rIGFuZCB3YWl0cyBmb3IgYm90aCB3cml0ZSBhY2NlcHRhbmNlIGFuZCBkcmFpbiB3aGVuIHJlcXVpcmVkLlxuICAgKiBAcGFyYW0ge0J1ZmZlciB8IFVpbnQ4QXJyYXl9IGNodW5rIC0gRmlsZSBjaHVuay5cbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59IC0gV2hldGhlciB0aGUgY2h1bmsgd2FzIGFjY2VwdGVkIGJlZm9yZSB0aGUgc29ja2V0IGFib3J0ZWQuXG4gICAqL1xuICB3cml0ZUZpbGVDaHVuayhjaHVuaykge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgbGV0IGNhbGxiYWNrQ29tcGxldGVkID0gZmFsc2VcbiAgICAgIGxldCBkcmFpbmVkID0gZmFsc2VcbiAgICAgIGxldCBzZXR0bGVkID0gZmFsc2VcblxuICAgICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5zb2NrZXQub2ZmKFwiY2xvc2VcIiwgb25BYm9ydClcbiAgICAgICAgdGhpcy5zb2NrZXQub2ZmKFwiZXJyb3JcIiwgb25BYm9ydClcbiAgICAgICAgdGhpcy5zb2NrZXQub2ZmKFwiZHJhaW5cIiwgb25EcmFpbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZpbmlzaCA9ICgvKiogQHR5cGUge2Jvb2xlYW59ICovIHJlc3VsdCkgPT4ge1xuICAgICAgICBpZiAoc2V0dGxlZCkgcmV0dXJuXG5cbiAgICAgICAgc2V0dGxlZCA9IHRydWVcbiAgICAgICAgY2xlYW51cCgpXG4gICAgICAgIHJlc29sdmUocmVzdWx0KVxuICAgICAgfVxuICAgICAgY29uc3QgZmluaXNoSWZSZWFkeSA9ICgpID0+IHtcbiAgICAgICAgaWYgKGNhbGxiYWNrQ29tcGxldGVkICYmIGRyYWluZWQpIGZpbmlzaCh0cnVlKVxuICAgICAgfVxuICAgICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IGZpbmlzaChmYWxzZSlcbiAgICAgIGNvbnN0IG9uRHJhaW4gPSAoKSA9PiB7XG4gICAgICAgIGRyYWluZWQgPSB0cnVlXG4gICAgICAgIGZpbmlzaElmUmVhZHkoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNvY2tldC5vbmNlKFwiY2xvc2VcIiwgb25BYm9ydClcbiAgICAgIHRoaXMuc29ja2V0Lm9uY2UoXCJlcnJvclwiLCBvbkFib3J0KVxuICAgICAgdGhpcy5zb2NrZXQub25jZShcImRyYWluXCIsIG9uRHJhaW4pXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGFjY2VwdGVkID0gdGhpcy5zb2NrZXQud3JpdGUoY2h1bmssIChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgZmluaXNoKGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2FsbGJhY2tDb21wbGV0ZWQgPSB0cnVlXG4gICAgICAgICAgZmluaXNoSWZSZWFkeSgpXG4gICAgICAgIH0pXG5cbiAgICAgICAgZHJhaW5lZCA9IGFjY2VwdGVkXG4gICAgICAgIGlmIChhY2NlcHRlZCkgdGhpcy5zb2NrZXQub2ZmKFwiZHJhaW5cIiwgb25EcmFpbilcbiAgICAgICAgZmluaXNoSWZSZWFkeSgpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbYFNvY2tldCAke3RoaXMuY2xpZW50Q291bnR9IGZpbGUgd3JpdGUgZmFpbGVkYCwgZXJyb3JdKVxuICAgICAgICBmaW5pc2goZmFsc2UpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNldCB3b3JrZXIuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwid29ya2VyX3RocmVhZHNcIikuV29ya2VyfSBuZXdXb3JrZXIgLSBOZXcgd29ya2VyLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBzZXRXb3JrZXIobmV3V29ya2VyKSB7XG4gICAgdGhpcy53b3JrZXIgPSBuZXdXb3JrZXJcbiAgfVxufVxuIl19
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9odHRwLXNlcnZlci9zZXJ2ZXItY2xpZW50LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLFlBQVksTUFBTSwyQkFBMkIsQ0FBQTtBQUNwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxTQUFTLENBQUE7QUFDeEMsT0FBTyxNQUFNLE1BQU0sY0FBYyxDQUFBO0FBRWpDOzs7O0dBSUc7QUFDSCxTQUFTLG9CQUFvQixDQUFDLEtBQUs7SUFDakMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUV4SCxPQUFPO1FBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1FBQ3BCLE9BQU87S0FDUixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBWTtJQUMvQixNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQTtJQUUzQjs7Ozs7O09BTUc7SUFDSCxZQUFZLEVBQUMsYUFBYSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUM7UUFDOUMsSUFBSSxDQUFDLGFBQWE7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUE7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUE7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7UUFFekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2xDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUN0QyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDdEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFBO1FBQzFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUN0QyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU07UUFDSixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRTtnQkFDeEMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUM3QixhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhO2dCQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZO2dCQUN0QyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVO2FBQ25DLENBQUMsQ0FBQyxDQUFBO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsR0FBRztRQUNELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN6RixPQUFPLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ2xCLE9BQU07WUFDUixDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFBO1lBQ25ELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUE7UUFDbkIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyxLQUFLO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztZQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDLENBQUE7UUFDdkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUE7UUFFbEgsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUU5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUN0QixPQUFPLEVBQUUsYUFBYTtZQUN0QixLQUFLO1lBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQzlCLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQTtJQUVEOzs7T0FHRztJQUNILFdBQVcsR0FBRyxHQUFHLEVBQUU7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxJQUFJLENBQUMsV0FBVyxNQUFNLENBQUMsQ0FBQTtRQUNqRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7SUFDbEIsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYSxHQUFHLEdBQUcsRUFBRTtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLFFBQVEsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUNsQixDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxlQUFlLEdBQUcsR0FBRyxFQUFFO1FBQ3JCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBQTtJQUM5RSxDQUFDLENBQUE7SUFFRDs7O09BR0c7SUFDSCxhQUFhLEdBQUcsR0FBRyxFQUFFO1FBQ25CLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQyxDQUFBO0lBRUQ7OztPQUdHO0lBQ0gsY0FBYyxHQUFHLEdBQUcsRUFBRTtRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLGVBQWUsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdFLENBQUMsQ0FBQTtJQUdEOzs7O09BSUc7SUFDSCxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUN4QixNQUFNLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQTtRQUU3RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsUUFBUSxFQUFFLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUN6RixJQUFJLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDNUIsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQUUsT0FBTTtRQUU3QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQTtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUE7SUFDakMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUk7UUFDYixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQy9DLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ3pGLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdDQUF3QyxDQUFDLENBQUE7Z0JBQ3pFLE9BQU8sRUFBRSxDQUFBO2dCQUNULE9BQU07WUFDUixDQUFDO1lBRUQsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFBO1lBRWhCLE1BQU0sTUFBTSxHQUFHLEdBQUcsRUFBRTtnQkFDbEIsSUFBSSxJQUFJO29CQUFFLE9BQU07Z0JBRWhCLElBQUksR0FBRyxJQUFJLENBQUE7Z0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFBO2dCQUN0QyxPQUFPLEVBQUUsQ0FBQTtZQUNYLENBQUMsQ0FBQTtZQUNELE1BQU0sWUFBWSxHQUFHLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLDhCQUE4QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFBO2dCQUU3RCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsY0FBYyxFQUFFLFNBQVMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtnQkFDL0YsTUFBTSxFQUFFLENBQUE7WUFDVixDQUFDLENBQUE7WUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUE7WUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksS0FBSyxFQUFFLENBQUM7b0JBQ1YsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUNuQixPQUFNO2dCQUNSLENBQUM7Z0JBRUQsTUFBTSxFQUFFLENBQUE7WUFDVixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxHQUFHLElBQUk7UUFDdEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsS0FBSyxLQUFLO1lBQUUsT0FBTyxTQUFTLENBQUE7UUFDMUcsSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLFdBQVcsQ0FBQTtRQUVqQyxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUM3QyxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUE7UUFDbkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO1lBQ2pCLE9BQU8sR0FBRyxJQUFJLENBQUE7WUFDZCxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDdEIsQ0FBQyxDQUFBO1FBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2hDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtRQUVoQyxJQUFJLENBQUM7WUFDSCxJQUFJLEtBQUssRUFBRSxNQUFNLEtBQUssSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxPQUFPLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO29CQUFFLE9BQU8sU0FBUyxDQUFBO1lBQ3BFLENBQUM7WUFFRCxPQUFPLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUE7UUFDMUMsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsdUJBQXVCLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7WUFDN0YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUztnQkFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBRWpELE9BQU8sU0FBUyxDQUFBO1FBQ2xCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7WUFDL0IsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFLO1FBQ2xCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM3QixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQTtZQUM3QixJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUE7WUFDbkIsSUFBSSxPQUFPLEdBQUcsS0FBSyxDQUFBO1lBRW5CLE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNuQyxDQUFDLENBQUE7WUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUMvQyxJQUFJLE9BQU87b0JBQUUsT0FBTTtnQkFFbkIsT0FBTyxHQUFHLElBQUksQ0FBQTtnQkFDZCxPQUFPLEVBQUUsQ0FBQTtnQkFDVCxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDakIsQ0FBQyxDQUFBO1lBQ0QsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFO2dCQUN6QixJQUFJLGlCQUFpQixJQUFJLE9BQU87b0JBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO1lBQ2hELENBQUMsQ0FBQTtZQUNELE1BQU0sT0FBTyxHQUFHLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNuQyxNQUFNLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQ2QsYUFBYSxFQUFFLENBQUE7WUFDakIsQ0FBQyxDQUFBO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUE7WUFFbEMsSUFBSSxDQUFDO2dCQUNILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO29CQUNsRCxJQUFJLEtBQUssRUFBRSxDQUFDO3dCQUNWLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTt3QkFDYixPQUFNO29CQUNSLENBQUM7b0JBRUQsaUJBQWlCLEdBQUcsSUFBSSxDQUFBO29CQUN4QixhQUFhLEVBQUUsQ0FBQTtnQkFDakIsQ0FBQyxDQUFDLENBQUE7Z0JBRUYsT0FBTyxHQUFHLFFBQVEsQ0FBQTtnQkFDbEIsSUFBSSxRQUFRO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQTtnQkFDL0MsYUFBYSxFQUFFLENBQUE7WUFDakIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7Z0JBQ2hGLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUNmLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLFNBQVM7UUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUE7SUFDekIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCBFdmVudEVtaXR0ZXIgZnJvbSBcIi4uL3V0aWxzL2V2ZW50LWVtaXR0ZXIuanNcIlxuaW1wb3J0IHtjcmVhdGVSZWFkU3RyZWFtfSBmcm9tIFwibm9kZTpmc1wiXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuLi9sb2dnZXIuanNcIlxuXG4vKipcbiAqIFJ1bnMgc3VtbWFyaXplIHNvY2tldCBjaHVuay5cbiAqIEBwYXJhbSB7QnVmZmVyfSBjaHVuayAtIEluY29taW5nIHNvY2tldCBkYXRhLlxuICogQHJldHVybnMge29iamVjdH0gLSBDaHVuayBkZWJ1ZyBtZXRhZGF0YS5cbiAqL1xuZnVuY3Rpb24gc3VtbWFyaXplU29ja2V0Q2h1bmsoY2h1bmspIHtcbiAgY29uc3QgcHJldmlldyA9IGNodW5rLnRvU3RyaW5nKFwibGF0aW4xXCIsIDAsIE1hdGgubWluKGNodW5rLmxlbmd0aCwgMTYwKSkucmVwbGFjZUFsbChcIlxcclwiLCBcIlxcXFxyXCIpLnJlcGxhY2VBbGwoXCJcXG5cIiwgXCJcXFxcblwiKVxuXG4gIHJldHVybiB7XG4gICAgbGVuZ3RoOiBjaHVuay5sZW5ndGgsXG4gICAgcHJldmlld1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNlcnZlckNsaWVudCB7XG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuXG4gIC8qKlxuICAgKiBSdW5zIGNvbnN0cnVjdG9yLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gQ29uZmlndXJhdGlvbiBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJuZXRcIikuU29ja2V0fSBhcmdzLnNvY2tldCAtIFNvY2tldCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuY2xpZW50Q291bnQgLSBDbGllbnQgY291bnQuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcih7Y29uZmlndXJhdGlvbiwgc29ja2V0LCBjbGllbnRDb3VudH0pIHtcbiAgICBpZiAoIWNvbmZpZ3VyYXRpb24pIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbmZpZ3VyYXRpb24gZ2l2ZW5cIilcblxuICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb25cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBMb2dnZXIodGhpcylcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMuY2xpZW50Q291bnQgPSBjbGllbnRDb3VudFxuICAgIHRoaXMucmVtb3RlQWRkcmVzcyA9IHNvY2tldC5yZW1vdGVBZGRyZXNzXG4gICAgdGhpcy5jbG9zZUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgc29ja2V0Lm9uKFwiZW5kXCIsIHRoaXMub25Tb2NrZXRFbmQpXG4gICAgc29ja2V0Lm9uKFwiZXJyb3JcIiwgdGhpcy5vblNvY2tldEVycm9yKVxuICAgIHNvY2tldC5vbihcImNsb3NlXCIsIHRoaXMub25Tb2NrZXRDbG9zZSlcbiAgICBzb2NrZXQub24oXCJ0aW1lb3V0XCIsIHRoaXMub25Tb2NrZXRUaW1lb3V0KVxuICAgIHNvY2tldC5vbihcImRyYWluXCIsIHRoaXMub25Tb2NrZXREcmFpbilcbiAgICBzb2NrZXQub24oXCJmaW5pc2hcIiwgdGhpcy5vblNvY2tldEZpbmlzaClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIGxpc3Rlbi5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgbGlzdGVuKCkge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlNvY2tldCBsaXN0ZW5cIiwge1xuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnQsXG4gICAgICByZW1vdGVBZGRyZXNzOiB0aGlzLnNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgICAgcmVtb3RlRmFtaWx5OiB0aGlzLnNvY2tldC5yZW1vdGVGYW1pbHksXG4gICAgICByZW1vdGVQb3J0OiB0aGlzLnNvY2tldC5yZW1vdGVQb3J0XG4gICAgfV0pXG4gICAgdGhpcy5zb2NrZXQub24oXCJkYXRhXCIsIHRoaXMub25Tb2NrZXREYXRhKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gLSBSZXNvbHZlcyB3aGVuIGNvbXBsZXRlLlxuICAgKi9cbiAgZW5kKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuc29ja2V0LmRlc3Ryb3llZCB8fCB0aGlzLnNvY2tldC53cml0YWJsZUVuZGVkIHx8IHRoaXMuc29ja2V0LndyaXRhYmxlID09PSBmYWxzZSkge1xuICAgICAgICByZXNvbHZlKHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uY2UoXCJjbG9zZVwiLCAoKSA9PiByZXNvbHZlKHVuZGVmaW5lZCkpXG4gICAgICB0aGlzLnNvY2tldC5lbmQoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSW1tZWRpYXRlbHkgZGVzdHJveXMgdGhlIHNvY2tldCBhbmQgYWxsIHRyYW5zcG9ydC1vd25lZCB3cml0ZSBidWZmZXJzLlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIERlc3RydWN0aW9uIHJlYXNvbi5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBkZXN0cm95KGVycm9yKSB7XG4gICAgaWYgKCF0aGlzLnNvY2tldC5kZXN0cm95ZWQpIHRoaXMuc29ja2V0LmRlc3Ryb3koZXJyb3IpXG4gIH1cblxuICAvKipcbiAgICogT24gc29ja2V0IGRhdGEuXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBjaHVuayAtIENodW5rLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvblNvY2tldERhdGEgPSAoY2h1bmspID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1Z0xvd0xldmVsKCgpID0+IGBTb2NrZXQgJHt0aGlzLmNsaWVudENvdW50fTogJHtjaHVua31gKVxuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlNvY2tldCBkYXRhIHJlY2VpdmVkXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudCwgLi4uc3VtbWFyaXplU29ja2V0Q2h1bmsoY2h1bmspfV0pXG5cbiAgICBpZiAoIXRoaXMud29ya2VyKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB3b3JrZXJcIilcblxuICAgIHRoaXMud29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgIGNvbW1hbmQ6IFwiY2xpZW50V3JpdGVcIixcbiAgICAgIGNodW5rLFxuICAgICAgY2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnRcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIHNvY2tldCBlbmQuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIG9uU29ja2V0RW5kID0gKCkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnTG93TGV2ZWwoKCkgPT4gYFNvY2tldCAke3RoaXMuY2xpZW50Q291bnR9IGVuZGApXG4gICAgdGhpcy5lbWl0Q2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIHNvY2tldCBjbG9zZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Tb2NrZXRDbG9zZSA9ICgpID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1Z0xvd0xldmVsKCgpID0+IGBTb2NrZXQgJHt0aGlzLmNsaWVudENvdW50fSBjbG9zZWApXG4gICAgdGhpcy5lbWl0Q2xvc2UoKVxuICB9XG5cbiAgLyoqXG4gICAqIE9uIHNvY2tldCB0aW1lb3V0LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvblNvY2tldFRpbWVvdXQgPSAoKSA9PiB7XG4gICAgdGhpcy5sb2dnZXIuZGVidWcoKCkgPT4gW1wiU29ja2V0IHRpbWVvdXRcIiwge2NsaWVudENvdW50OiB0aGlzLmNsaWVudENvdW50fV0pXG4gIH1cblxuICAvKipcbiAgICogT24gc29ja2V0IGRyYWluLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvblNvY2tldERyYWluID0gKCkgPT4ge1xuICAgIHRoaXMubG9nZ2VyLmRlYnVnKCgpID0+IFtcIlNvY2tldCBkcmFpblwiLCB7Y2xpZW50Q291bnQ6IHRoaXMuY2xpZW50Q291bnR9XSlcbiAgfVxuXG4gIC8qKlxuICAgKiBPbiBzb2NrZXQgZmluaXNoLlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBvblNvY2tldEZpbmlzaCA9ICgpID0+IHtcbiAgICB0aGlzLmxvZ2dlci5kZWJ1ZygoKSA9PiBbXCJTb2NrZXQgZmluaXNoXCIsIHtjbGllbnRDb3VudDogdGhpcy5jbGllbnRDb3VudH1dKVxuICB9XG5cblxuICAvKipcbiAgICogT24gc29ja2V0IGVycm9yLlxuICAgKiBAcGFyYW0ge0Vycm9yfSBlcnJvciAtIFNvY2tldCBlcnJvci5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgb25Tb2NrZXRFcnJvciA9IChlcnJvcikgPT4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IC8qKiBAdHlwZSB7e2NvZGU/OiBzdHJpbmd9fSAqLyAoZXJyb3IpLmNvZGVcblxuICAgIHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IFtgU29ja2V0ICR7dGhpcy5jbGllbnRDb3VudH0gZXJyb3JgLCBlcnJvckNvZGUgfHwgZXJyb3IubWVzc2FnZV0pXG4gICAgdGhpcy5lbWl0Q2xvc2UoKVxuXG4gICAgaWYgKCF0aGlzLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHRoaXMuc29ja2V0LmRlc3Ryb3koZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgZW1pdCBjbG9zZS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgZW1pdENsb3NlKCkge1xuICAgIGlmICh0aGlzLmNsb3NlRW1pdHRlZCkgcmV0dXJuXG5cbiAgICB0aGlzLmNsb3NlRW1pdHRlZCA9IHRydWVcbiAgICB0aGlzLmV2ZW50cy5lbWl0KFwiY2xvc2VcIiwgdGhpcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHNlbmQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gZGF0YSAtIERhdGEgcGF5bG9hZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IC0gUmVzb2x2ZXMgd2hlbiBjb21wbGV0ZS5cbiAgICovXG4gIGFzeW5jIHNlbmQoZGF0YSkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBgU2VuZCAke2RhdGF9YClcbiAgICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgdGhpcy5zb2NrZXQud3JpdGFibGVFbmRlZCB8fCB0aGlzLnNvY2tldC53cml0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZGVidWdMb3dMZXZlbCgoKSA9PiBcIlNraXBwaW5nIHNlbmQgYmVjYXVzZSBzb2NrZXQgaXMgY2xvc2VkXCIpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IGRvbmUgPSBmYWxzZVxuXG4gICAgICBjb25zdCBmaW5pc2ggPSAoKSA9PiB7XG4gICAgICAgIGlmIChkb25lKSByZXR1cm5cblxuICAgICAgICBkb25lID0gdHJ1ZVxuICAgICAgICB0aGlzLnNvY2tldC5vZmYoXCJlcnJvclwiLCBvbldyaXRlRXJyb3IpXG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfVxuICAgICAgY29uc3Qgb25Xcml0ZUVycm9yID0gKC8qKiBAdHlwZSB7RXJyb3J9ICovIGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IC8qKiBAdHlwZSB7e2NvZGU/OiBzdHJpbmd9fSAqLyAoZXJyb3IpLmNvZGVcblxuICAgICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbYFNvY2tldCAke3RoaXMuY2xpZW50Q291bnR9IHdyaXRlIGVycm9yYCwgZXJyb3JDb2RlIHx8IGVycm9yLm1lc3NhZ2VdKVxuICAgICAgICBmaW5pc2goKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNvY2tldC5vbmNlKFwiZXJyb3JcIiwgb25Xcml0ZUVycm9yKVxuICAgICAgdGhpcy5zb2NrZXQud3JpdGUoZGF0YSwgKGVycm9yKSA9PiB7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIG9uV3JpdGVFcnJvcihlcnJvcilcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGZpbmlzaCgpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtcyBhIGZpbGUgdG8gdGhlIHNvY2tldCB3aGlsZSByZXNwZWN0aW5nIHNvY2tldCB3cml0ZSBiYWNrcHJlc3N1cmUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aCAtIEZpbGUgcGF0aC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2VuZEJvZHldIC0gV2hldGhlciB0byByZWFkIGFuZCBzZW5kIHRoZSBmaWxlIGJvZHkuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFwiY29tcGxldGVkXCIgfCBcImFib3J0ZWRcIj59IC0gVHJhbnNmZXIgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgc2VuZEZpbGUoZmlsZVBhdGgsIHNlbmRCb2R5ID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgdGhpcy5zb2NrZXQud3JpdGFibGVFbmRlZCB8fCB0aGlzLnNvY2tldC53cml0YWJsZSA9PT0gZmFsc2UpIHJldHVybiBcImFib3J0ZWRcIlxuICAgIGlmICghc2VuZEJvZHkpIHJldHVybiBcImNvbXBsZXRlZFwiXG5cbiAgICBjb25zdCByZWFkU3RyZWFtID0gY3JlYXRlUmVhZFN0cmVhbShmaWxlUGF0aClcbiAgICBsZXQgYWJvcnRlZCA9IGZhbHNlXG4gICAgY29uc3QgYWJvcnQgPSAoKSA9PiB7XG4gICAgICBhYm9ydGVkID0gdHJ1ZVxuICAgICAgcmVhZFN0cmVhbS5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLnNvY2tldC5vbmNlKFwiY2xvc2VcIiwgYWJvcnQpXG4gICAgdGhpcy5zb2NrZXQub25jZShcImVycm9yXCIsIGFib3J0KVxuXG4gICAgdHJ5IHtcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbSkge1xuICAgICAgICBpZiAoYWJvcnRlZCB8fCAhYXdhaXQgdGhpcy53cml0ZUZpbGVDaHVuayhjaHVuaykpIHJldHVybiBcImFib3J0ZWRcIlxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWJvcnRlZCA/IFwiYWJvcnRlZFwiIDogXCJjb21wbGV0ZWRcIlxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmxvZ2dlci5lcnJvcigoKSA9PiBbYFNvY2tldCAke3RoaXMuY2xpZW50Q291bnR9IGZpbGUgcmVzcG9uc2UgZmFpbGVkYCwgZmlsZVBhdGgsIGVycm9yXSlcbiAgICAgIGlmICghdGhpcy5zb2NrZXQuZGVzdHJveWVkKSB0aGlzLnNvY2tldC5kZXN0cm95KClcblxuICAgICAgcmV0dXJuIFwiYWJvcnRlZFwiXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuc29ja2V0Lm9mZihcImNsb3NlXCIsIGFib3J0KVxuICAgICAgdGhpcy5zb2NrZXQub2ZmKFwiZXJyb3JcIiwgYWJvcnQpXG4gICAgICByZWFkU3RyZWFtLmRlc3Ryb3koKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXcml0ZXMgb25lIGZpbGUgY2h1bmsgYW5kIHdhaXRzIGZvciBib3RoIHdyaXRlIGFjY2VwdGFuY2UgYW5kIGRyYWluIHdoZW4gcmVxdWlyZWQuXG4gICAqIEBwYXJhbSB7QnVmZmVyIHwgVWludDhBcnJheX0gY2h1bmsgLSBGaWxlIGNodW5rLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn0gLSBXaGV0aGVyIHRoZSBjaHVuayB3YXMgYWNjZXB0ZWQgYmVmb3JlIHRoZSBzb2NrZXQgYWJvcnRlZC5cbiAgICovXG4gIHdyaXRlRmlsZUNodW5rKGNodW5rKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBsZXQgY2FsbGJhY2tDb21wbGV0ZWQgPSBmYWxzZVxuICAgICAgbGV0IGRyYWluZWQgPSBmYWxzZVxuICAgICAgbGV0IHNldHRsZWQgPSBmYWxzZVxuXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnNvY2tldC5vZmYoXCJjbG9zZVwiLCBvbkFib3J0KVxuICAgICAgICB0aGlzLnNvY2tldC5vZmYoXCJlcnJvclwiLCBvbkFib3J0KVxuICAgICAgICB0aGlzLnNvY2tldC5vZmYoXCJkcmFpblwiLCBvbkRyYWluKVxuICAgICAgfVxuICAgICAgY29uc3QgZmluaXNoID0gKC8qKiBAdHlwZSB7Ym9vbGVhbn0gKi8gcmVzdWx0KSA9PiB7XG4gICAgICAgIGlmIChzZXR0bGVkKSByZXR1cm5cblxuICAgICAgICBzZXR0bGVkID0gdHJ1ZVxuICAgICAgICBjbGVhbnVwKClcbiAgICAgICAgcmVzb2x2ZShyZXN1bHQpXG4gICAgICB9XG4gICAgICBjb25zdCBmaW5pc2hJZlJlYWR5ID0gKCkgPT4ge1xuICAgICAgICBpZiAoY2FsbGJhY2tDb21wbGV0ZWQgJiYgZHJhaW5lZCkgZmluaXNoKHRydWUpXG4gICAgICB9XG4gICAgICBjb25zdCBvbkFib3J0ID0gKCkgPT4gZmluaXNoKGZhbHNlKVxuICAgICAgY29uc3Qgb25EcmFpbiA9ICgpID0+IHtcbiAgICAgICAgZHJhaW5lZCA9IHRydWVcbiAgICAgICAgZmluaXNoSWZSZWFkeSgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuc29ja2V0Lm9uY2UoXCJjbG9zZVwiLCBvbkFib3J0KVxuICAgICAgdGhpcy5zb2NrZXQub25jZShcImVycm9yXCIsIG9uQWJvcnQpXG4gICAgICB0aGlzLnNvY2tldC5vbmNlKFwiZHJhaW5cIiwgb25EcmFpbilcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYWNjZXB0ZWQgPSB0aGlzLnNvY2tldC53cml0ZShjaHVuaywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBmaW5pc2goZmFsc2UpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjYWxsYmFja0NvbXBsZXRlZCA9IHRydWVcbiAgICAgICAgICBmaW5pc2hJZlJlYWR5KClcbiAgICAgICAgfSlcblxuICAgICAgICBkcmFpbmVkID0gYWNjZXB0ZWRcbiAgICAgICAgaWYgKGFjY2VwdGVkKSB0aGlzLnNvY2tldC5vZmYoXCJkcmFpblwiLCBvbkRyYWluKVxuICAgICAgICBmaW5pc2hJZlJlYWR5KClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCgpID0+IFtgU29ja2V0ICR7dGhpcy5jbGllbnRDb3VudH0gZmlsZSB3cml0ZSBmYWlsZWRgLCBlcnJvcl0pXG4gICAgICAgIGZpbmlzaChmYWxzZSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgc2V0IHdvcmtlci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCJ3b3JrZXJfdGhyZWFkc1wiKS5Xb3JrZXJ9IG5ld1dvcmtlciAtIE5ldyB3b3JrZXIuXG4gICAqIEByZXR1cm5zIHt2b2lkfSAtIE5vIHJldHVybiB2YWx1ZS5cbiAgICovXG4gIHNldFdvcmtlcihuZXdXb3JrZXIpIHtcbiAgICB0aGlzLndvcmtlciA9IG5ld1dvcmtlclxuICB9XG59XG4iXX0=
@@ -3,6 +3,10 @@ export class VelociousHttpServerWebsocketEventsHost {
3
3
  * Narrows the runtime value to the documented type.
4
4
  * @type {Set<import("./worker-handler/index.js").default>} */
5
5
  handlers: Set<import("./worker-handler/index.js").default>;
6
+ /**
7
+ * Broadcast handlers grouped by the configuration that owns them.
8
+ * @type {Map<import("../configuration.js").default, Set<import("./worker-handler/index.js").default>>} */
9
+ broadcastHandlersByConfiguration: Map<import("../configuration.js").default, Set<import("./worker-handler/index.js").default>>;
6
10
  publishQueue: Promise<void>;
7
11
  /**
8
12
  * Returns a promise that resolves when all pending publish/broadcast
@@ -34,30 +38,35 @@ export class VelociousHttpServerWebsocketEventsHost {
34
38
  * @param {string} args.channel - Channel name.
35
39
  * @param {Record<string, ?>} args.broadcastParams - Routing filter params.
36
40
  * @param {?} args.body - Message body.
41
+ * @param {import("../configuration.js").default} args.configuration - Originating configuration.
37
42
  * @returns {void}
38
43
  */
39
- broadcastV2({ body, broadcastParams, channel }: {
44
+ broadcastV2({ body, broadcastParams, channel, configuration }: {
40
45
  channel: string;
41
46
  broadcastParams: Record<string, unknown>;
42
47
  body: unknown;
48
+ configuration: import("../configuration.js").default;
43
49
  }): void;
44
50
  /**
45
51
  * Runs queue publish.
46
52
  * @param {() => Promise<void>} callback - Publish work to run in order.
47
53
  * @param {string} errorMessage - Message logged when publish work fails.
54
+ * @param {import("../configuration.js").default} [originatingConfiguration] - Configuration whose context owns the work.
48
55
  * @returns {void}
49
56
  */
50
- _queuePublish(callback: () => Promise<void>, errorMessage: string): void;
57
+ _queuePublish(callback: () => Promise<void>, errorMessage: string, originatingConfiguration?: import("../configuration.js").default): void;
51
58
  /**
52
59
  * Runs persist v2 event if needed.
53
60
  * @param {object} args - Options.
54
61
  * @param {?} args.body - Event body.
55
62
  * @param {string} args.channel - Channel name.
63
+ * @param {import("../configuration.js").default} args.configuration - Originating configuration.
56
64
  * @returns {Promise<{createdAt: string, id: string} | null>} - Persisted event metadata when storage is enabled.
57
65
  */
58
- _persistV2EventIfNeeded({ body, channel }: {
66
+ _persistV2EventIfNeeded({ body, channel, configuration }: {
59
67
  body: unknown;
60
68
  channel: string;
69
+ configuration: import("../configuration.js").default;
61
70
  }): Promise<{
62
71
  createdAt: string;
63
72
  id: string;
@@ -81,11 +90,13 @@ export class VelociousHttpServerWebsocketEventsHost {
81
90
  * @param {object} args - Options object.
82
91
  * @param {string} args.channel - Channel name.
83
92
  * @param {?} args.payload - Payload data.
93
+ * @param {import("../configuration.js").default} [args.configuration] - Configuration owning the event store.
84
94
  * @returns {Promise<{createdAt: string, id: string} | null>} - Persisted event metadata.
85
95
  */
86
- _persistChannelEventIfNeeded({ channel, payload }: {
96
+ _persistChannelEventIfNeeded({ channel, payload, configuration }: {
87
97
  channel: string;
88
98
  payload: unknown;
99
+ configuration?: import("../configuration.js").default | undefined;
89
100
  }): Promise<{
90
101
  createdAt: string;
91
102
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-events-host.d.ts","sourceRoot":"","sources":["../../../src/http-server/websocket-events-host.js"],"names":[],"mappings":"AAIA;IAEI;;kEAE8D;IAC9D,UADU,GAAG,CAAC,OAAO,2BAA2B,EAAE,OAAO,CAAC,CACjC;IACzB,4BAAqC;IAGvC;;;;;;;OAOG;IACH,0BAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,kBAHW,OAAO,2BAA2B,EAAE,OAAO,GACzC,MAAM,IAAI,CAMtB;IAED;;;;;OAKG;IACH,uBAJW,MAAM,GAAG,MAAM,eACf,OAAC,GACC,IAAI,CAqBhB;IAED;;;;;;;;;OASG;IACH,gDALG;QAAqB,OAAO,EAApB,MAAM;QACkB,eAAe,EAAvC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC;QACT,IAAI,EAAZ,OAAC;KACT,GAAU,IAAI,CAoBhB;IAED;;;;;OAKG;IACH,wBAJW,MAAM,OAAO,CAAC,IAAI,CAAC,gBACnB,MAAM,GACJ,IAAI,CAkBhB;IAED;;;;;;OAMG;IACH,2CAJG;QAAgB,IAAI,EAAZ,OAAC;QACY,OAAO,EAApB,MAAM;KACd,GAAU,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAI3D;IAED;;;;;;OAMG;IACH,4CAJG;QAAqB,OAAO,EAApB,MAAM;QACE,OAAO,EAAf,OAAC;KACT,GAAU,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAI3D;IAED;;;;;;OAMG;IACH,mDAJG;QAAqB,OAAO,EAApB,MAAM;QACE,OAAO,EAAf,OAAC;KACT,GAAU,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAkB3D;CACF;;AAED,0EAAwE"}
1
+ {"version":3,"file":"websocket-events-host.d.ts","sourceRoot":"","sources":["../../../src/http-server/websocket-events-host.js"],"names":[],"mappings":"AAIA;IAEI;;kEAE8D;IAC9D,UADU,GAAG,CAAC,OAAO,2BAA2B,EAAE,OAAO,CAAC,CACjC;IACzB;;8GAE0G;IAC1G,kCADU,GAAG,CAAC,OAAO,qBAAqB,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,2BAA2B,EAAE,OAAO,CAAC,CAAC,CACrD;IACjD,4BAAqC;IAGvC;;;;;;;OAOG;IACH,0BAFa,OAAO,CAAC,IAAI,CAAC,CAIzB;IAED;;;;OAIG;IACH,kBAHW,OAAO,2BAA2B,EAAE,OAAO,GACzC,MAAM,IAAI,CAqBtB;IAED;;;;;OAKG;IACH,uBAJW,MAAM,GAAG,MAAM,eACf,OAAC,GACC,IAAI,CAqBhB;IAED;;;;;;;;;;OAUG;IACH,+DANG;QAAqB,OAAO,EAApB,MAAM;QACkB,eAAe,EAAvC,MAAM,CAAC,MAAM,EAAE,OAAC,CAAC;QACT,IAAI,EAAZ,OAAC;QAC2C,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;KAC7C,GAAU,IAAI,CA0BhB;IAED;;;;;;OAMG;IACH,wBALW,MAAM,OAAO,CAAC,IAAI,CAAC,gBACnB,MAAM,6BACN,OAAO,qBAAqB,EAAE,OAAO,GACnC,IAAI,CAkBhB;IAED;;;;;;;OAOG;IACH,0DALG;QAAgB,IAAI,EAAZ,OAAC;QACY,OAAO,EAApB,MAAM;QACsC,aAAa,EAAzD,OAAO,qBAAqB,EAAE,OAAO;KAC7C,GAAU,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAI3D;IAED;;;;;;OAMG;IACH,4CAJG;QAAqB,OAAO,EAApB,MAAM;QACE,OAAO,EAAf,OAAC;KACT,GAAU,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAI3D;IAED;;;;;;;OAOG;IACH,kEALG;QAAqB,OAAO,EAApB,MAAM;QACE,OAAO,EAAf,OAAC;QAC4C,aAAa;KAClE,GAAU,OAAO,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC,CAmB3D;CACF;;AAED,0EAAwE"}