@dcl/sdk 7.4.4-8051963017.commit-35a11db → 7.4.5-8054791102.commit-f06a0a7

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,28 @@
1
+ /* istanbul ignore file */
2
+ /**
3
+ * A class serves as a medium between the observable and its observers
4
+ * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed
5
+ * @public
6
+ */
1
7
  export class ObserverEventState {
8
+ /**
9
+ * Create a new EventState
10
+ * @param mask - defines the mask associated with this state
11
+ * @param skipNextObservers - defines a flag which will instruct the observable to skip following observers when set to true
12
+ * @param target - defines the original target of the state
13
+ * @param currentTarget - defines the current target of the state
14
+ */
2
15
  constructor(mask, skipNextObservers = false, target, currentTarget) {
3
16
  this.initalize(mask, skipNextObservers, target, currentTarget);
4
17
  }
18
+ /**
19
+ * Initialize the current event state
20
+ * @param mask - defines the mask associated with this state
21
+ * @param skipNextObservers - defines a flag which will instruct the observable to skip following observers when set to true
22
+ * @param target - defines the original target of the state
23
+ * @param currentTarget - defines the current target of the state
24
+ * @returns the current event state
25
+ */
5
26
  initalize(mask, skipNextObservers = false, target, currentTarget) {
6
27
  this.mask = mask;
7
28
  this.skipNextObservers = skipNextObservers;
@@ -10,16 +31,58 @@ export class ObserverEventState {
10
31
  return this;
11
32
  }
12
33
  }
34
+ /**
35
+ * Represent an Observer registered to a given Observable object.
36
+ * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed
37
+ * @public
38
+ */
13
39
  export class Observer {
14
- constructor(callback, mask, scope = null) {
40
+ /**
41
+ * Creates a new observer
42
+ * @param callback - defines the callback to call when the observer is notified
43
+ * @param mask - defines the mask of the observer (used to filter notifications)
44
+ * @param scope - defines the current scope used to restore the JS context
45
+ */
46
+ constructor(
47
+ /**
48
+ * Defines the callback to call when the observer is notified
49
+ */
50
+ callback,
51
+ /**
52
+ * Defines the mask of the observer (used to filter notifications)
53
+ */
54
+ mask,
55
+ /**
56
+ * Defines the current scope used to restore the JS context
57
+ */
58
+ scope = null) {
15
59
  this.callback = callback;
16
60
  this.mask = mask;
17
61
  this.scope = scope;
62
+ /**
63
+ * Gets or sets a property defining that the observer as to be unregistered after the next notification
64
+ */
18
65
  this.unregisterOnNextCall = false;
66
+ /** For internal usage */
19
67
  this._willBeUnregistered = false;
20
68
  }
21
69
  }
70
+ /**
71
+ * The Observable class is a simple implementation of the Observable pattern.
72
+ *
73
+ * There's one slight particularity though: a given Observable can notify its observer using a particular mask value, only the Observers registered with this mask value will be notified.
74
+ * This enable a more fine grained execution without having to rely on multiple different Observable objects.
75
+ * For instance you may have a given Observable that have four different types of notifications: Move (mask = 0x01), Stop (mask = 0x02), Turn Right (mask = 0X04), Turn Left (mask = 0X08).
76
+ * A given observer can register itself with only Move and Stop (mask = 0x03), then it will only be notified when one of these two occurs and will never be for Turn Left/Right.
77
+ *
78
+ * @public
79
+ * @deprecated This function is an inheritance of ECS6, it's here temporary for the feature parity, please read the news and docs to know how handle when it's removed
80
+ */
22
81
  export class Observable {
82
+ /**
83
+ * Creates a new observable
84
+ * @param onObserverAdded - defines a callback to call when a new observer is added
85
+ */
23
86
  constructor(onObserverAdded) {
24
87
  this._observers = new Array();
25
88
  this._onObserverAdded = null;
@@ -28,6 +91,15 @@ export class Observable {
28
91
  this._onObserverAdded = onObserverAdded;
29
92
  }
30
93
  }
94
+ /**
95
+ * Create a new Observer with the specified callback
96
+ * @param callback - the callback that will be executed for that Observer
97
+ * @param mask - the mask used to filter observers
98
+ * @param insertFirst - if true the callback will be inserted at the first position, hence executed before the others ones. If false (default behavior) the callback will be inserted at the last position, executed after all the others already present.
99
+ * @param scope - optional scope for the callback to be called from
100
+ * @param unregisterOnFirstCall - defines if the observer as to be unregistered after the next notification
101
+ * @returns the new observer created for the callback
102
+ */
31
103
  add(callback, mask = -1, insertFirst = false, scope = null, unregisterOnFirstCall = false) {
32
104
  if (!callback) {
33
105
  return null;
@@ -45,9 +117,19 @@ export class Observable {
45
117
  }
46
118
  return observer;
47
119
  }
120
+ /**
121
+ * Create a new Observer with the specified callback and unregisters after the next notification
122
+ * @param callback - the callback that will be executed for that Observer
123
+ * @returns the new observer created for the callback
124
+ */
48
125
  addOnce(callback) {
49
126
  return this.add(callback, undefined, undefined, undefined, true);
50
127
  }
128
+ /**
129
+ * Remove an Observer from the Observable object
130
+ * @param observer - the instance of the Observer to remove
131
+ * @returns false if it doesn't belong to this Observable
132
+ */
51
133
  remove(observer) {
52
134
  if (!observer) {
53
135
  return false;
@@ -59,6 +141,12 @@ export class Observable {
59
141
  }
60
142
  return false;
61
143
  }
144
+ /**
145
+ * Remove a callback from the Observable object
146
+ * @param callback - the callback to remove
147
+ * @param scope - optional scope. If used only the callbacks with this scope will be removed
148
+ * @returns false if it doesn't belong to this Observable
149
+ */
62
150
  removeCallback(callback, scope) {
63
151
  for (let index = 0; index < this._observers.length; index++) {
64
152
  if (this._observers[index].callback === callback && (!scope || scope === this._observers[index].scope)) {
@@ -68,6 +156,15 @@ export class Observable {
68
156
  }
69
157
  return false;
70
158
  }
159
+ /**
160
+ * Notify all Observers by calling their respective callback with the given data
161
+ * Will return true if all observers were executed, false if an observer set skipNextObservers to true, then prevent the subsequent ones to execute
162
+ * @param eventData - defines the data to send to all observers
163
+ * @param mask - defines the mask of the current notification (observers with incompatible mask (ie mask & observer.mask === 0) will not be notified)
164
+ * @param target - defines the original target of the state
165
+ * @param currentTarget - defines the current target of the state
166
+ * @returns false if the complete observer chain was not processed (because one observer set the skipNextObservers to true)
167
+ */
71
168
  notifyObservers(eventData, mask = -1, target, currentTarget) {
72
169
  if (!this._observers.length) {
73
170
  return true;
@@ -99,8 +196,23 @@ export class Observable {
99
196
  }
100
197
  return true;
101
198
  }
199
+ /**
200
+ * Calling this will execute each callback, expecting it to be a promise or return a value.
201
+ * If at any point in the chain one function fails, the promise will fail and the execution will not continue.
202
+ * This is useful when a chain of events (sometimes async events) is needed to initialize a certain object
203
+ * and it is crucial that all callbacks will be executed.
204
+ * The order of the callbacks is kept, callbacks are not executed parallel.
205
+ *
206
+ * @param eventData - The data to be sent to each callback
207
+ * @param mask - is used to filter observers defaults to -1
208
+ * @param target - defines the callback target (see EventState)
209
+ * @param currentTarget - defines he current object in the bubbling phase
210
+ * @returns will return a Promise than resolves when all callbacks executed successfully.
211
+ */
102
212
  notifyObserversWithPromise(eventData, mask = -1, target, currentTarget) {
213
+ // create an empty promise
103
214
  let p = Promise.resolve(eventData);
215
+ // no observers? return this promise.
104
216
  if (!this._observers.length) {
105
217
  return p;
106
218
  }
@@ -109,6 +221,7 @@ export class Observable {
109
221
  state.target = target;
110
222
  state.currentTarget = currentTarget;
111
223
  state.skipNextObservers = false;
224
+ // execute one callback after another (not using Promise.all, the order is important)
112
225
  this._observers.forEach((obs) => {
113
226
  if (state.skipNextObservers) {
114
227
  return;
@@ -134,28 +247,51 @@ export class Observable {
134
247
  }
135
248
  }
136
249
  });
250
+ // return the eventData
137
251
  return p.then(() => {
138
252
  return eventData;
139
253
  });
140
254
  }
255
+ /**
256
+ * Notify a specific observer
257
+ * @param observer - defines the observer to notify
258
+ * @param eventData - defines the data to be sent to each callback
259
+ * @param mask - is used to filter observers defaults to -1
260
+ */
141
261
  notifyObserver(observer, eventData, mask = -1) {
142
262
  const state = this._eventState;
143
263
  state.mask = mask;
144
264
  state.skipNextObservers = false;
145
265
  observer.callback(eventData, state);
146
266
  }
267
+ /**
268
+ * Gets a boolean indicating if the observable has at least one observer
269
+ * @returns true is the Observable has at least one Observer registered
270
+ */
147
271
  hasObservers() {
148
272
  return this._observers.length > 0;
149
273
  }
274
+ /**
275
+ * Clear the list of observers
276
+ */
150
277
  clear() {
151
278
  this._observers = new Array();
152
279
  this._onObserverAdded = null;
153
280
  }
281
+ /**
282
+ * Clone the current observable
283
+ * @returns a new observable
284
+ */
154
285
  clone() {
155
286
  const result = new Observable();
156
287
  result._observers = this._observers.slice(0);
157
288
  return result;
158
289
  }
290
+ /**
291
+ * Does this observable handles observer registered with a given mask
292
+ * @param mask - defines the mask to be tested
293
+ * @returns whether or not one observer registered with the given mask is handeled
294
+ */
159
295
  hasSpecificMask(mask = -1) {
160
296
  for (const obs of this._observers) {
161
297
  if (obs.mask & mask || obs.mask === mask) {
@@ -171,6 +307,8 @@ export class Observable {
171
307
  .then.bind(Promise.resolve())(async () => this._remove(observer))
172
308
  .catch(console.error);
173
309
  }
310
+ // This should only be called when not iterating over _observers to avoid callback skipping.
311
+ // Removes an observer from the _observer Array.
174
312
  _remove(observer) {
175
313
  if (!observer) {
176
314
  return false;
@@ -183,4 +321,4 @@ export class Observable {
183
321
  return false;
184
322
  }
185
323
  }
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcm5hbC9PYnNlcnZhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUtBLE1BQU0sT0FBTyxrQkFBa0I7SUFrQzdCLFlBQVksSUFBWSxFQUFFLGlCQUFpQixHQUFHLEtBQUssRUFBRSxNQUFZLEVBQUUsYUFBbUI7UUFDcEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFVTSxTQUFTLENBQUMsSUFBWSxFQUFFLGlCQUFpQixHQUFHLEtBQUssRUFBRSxNQUFZLEVBQUUsYUFBbUI7UUFDekYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGO0FBTUQsTUFBTSxPQUFPLFFBQVE7SUFlbkIsWUFJUyxRQUFnRSxFQUloRSxJQUFZLEVBSVosUUFBYSxJQUFJO1FBUmpCLGFBQVEsR0FBUixRQUFRLENBQXdEO1FBSWhFLFNBQUksR0FBSixJQUFJLENBQVE7UUFJWixVQUFLLEdBQUwsS0FBSyxDQUFZO1FBdkJuQix5QkFBb0IsR0FBRyxLQUFLLENBQUE7UUFHNUIsd0JBQW1CLEdBQUcsS0FBSyxDQUFBO0lBcUIvQixDQUFDO0NBQ0w7QUFZRCxNQUFNLE9BQU8sVUFBVTtJQVdyQixZQUFZLGVBQWlEO1FBVnJELGVBQVUsR0FBRyxJQUFJLEtBQUssRUFBZSxDQUFBO1FBSXJDLHFCQUFnQixHQUE2QyxJQUFJLENBQUE7UUFPdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FB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QUMsQ0FBQzthQUNoRSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3pCLENBQUM7SUFJTyxPQUFPLENBQUMsUUFBNEI7UUFDMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUvQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDaEMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogQSBjbGFzcyBzZXJ2ZXMgYXMgYSBtZWRpdW0gYmV0d2VlbiB0aGUgb2JzZXJ2YWJsZSBhbmQgaXRzIG9ic2VydmVyc1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXJFdmVudFN0YXRlIHtcbiAgLyoqXG4gICAqIEFuIE9ic2VydmVyIGNhbiBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIHByZXZlbnQgc3Vic2VxdWVudCBvYnNlcnZlcnMgb2YgYmVpbmcgbm90aWZpZWRcbiAgICovXG4gIHB1YmxpYyBza2lwTmV4dE9ic2VydmVycyE6IGJvb2xlYW5cblxuICAvKipcbiAgICogR2V0IHRoZSBtYXNrIHZhbHVlIHRoYXQgd2VyZSB1c2VkIHRvIHRyaWdnZXIgdGhlIGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBFdmVudFN0YXRlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIG1hc2shOiBudW1iZXJcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0aGF0IG9yaWdpbmFsbHkgbm90aWZpZWQgdGhlIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgdGFyZ2V0PzogYW55XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IG9iamVjdCBpbiB0aGUgYnViYmxpbmcgcGhhc2VcbiAgICovXG4gIHB1YmxpYyBjdXJyZW50VGFyZ2V0PzogYW55XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYXN0IGZ1bmN0aW9uIHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgKiBJZiBpdCBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIGNhbGxiYWNrIGNoYWluIGl0IHdpbGwgYmUgdGhlIGV2ZW50IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgbGFzdFJldHVyblZhbHVlPzogYW55XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBFdmVudFN0YXRlXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdGF0ZVxuICAgKiBAcGFyYW0gc2tpcE5leHRPYnNlcnZlcnMgLSBkZWZpbmVzIGEgZmxhZyB3aGljaCB3aWxsIGluc3RydWN0IHRoZSBvYnNlcnZhYmxlIHRvIHNraXAgZm9sbG93aW5nIG9ic2VydmVycyB3aGVuIHNldCB0byB0cnVlXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IC0gZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXNrOiBudW1iZXIsIHNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2UsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSkge1xuICAgIHRoaXMuaW5pdGFsaXplKG1hc2ssIHNraXBOZXh0T2JzZXJ2ZXJzLCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQpXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKiBAcGFyYW0gbWFzayAtIGRlZmluZXMgdGhlIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RhdGVcbiAgICogQHBhcmFtIHNraXBOZXh0T2JzZXJ2ZXJzIC0gZGVmaW5lcyBhIGZsYWcgd2hpY2ggd2lsbCBpbnN0cnVjdCB0aGUgb2JzZXJ2YWJsZSB0byBza2lwIGZvbGxvd2luZyBvYnNlcnZlcnMgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCAtIGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGluaXRhbGl6ZShtYXNrOiBudW1iZXIsIHNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2UsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSk6IE9ic2VydmVyRXZlbnRTdGF0ZSB7XG4gICAgdGhpcy5tYXNrID0gbWFza1xuICAgIHRoaXMuc2tpcE5leHRPYnNlcnZlcnMgPSBza2lwTmV4dE9ic2VydmVyc1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYW4gT2JzZXJ2ZXIgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIE9ic2VydmFibGUgb2JqZWN0LlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXI8VD4ge1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgcHJvcGVydHkgZGVmaW5pbmcgdGhhdCB0aGUgb2JzZXJ2ZXIgYXMgdG8gYmUgdW5yZWdpc3RlcmVkIGFmdGVyIHRoZSBuZXh0IG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIHVucmVnaXN0ZXJPbk5leHRDYWxsID0gZmFsc2VcblxuICAvKiogRm9yIGludGVybmFsIHVzYWdlICovXG4gIHB1YmxpYyBfd2lsbEJlVW5yZWdpc3RlcmVkID0gZmFsc2VcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZlclxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAqIEBwYXJhbSBzY29wZSAtIGRlZmluZXMgdGhlIGN1cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0b3JlIHRoZSBKUyBjb250ZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAgICovXG4gICAgcHVibGljIG1hc2s6IG51bWJlcixcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjdXJyZW50IHNjb3BlIHVzZWQgdG8gcmVzdG9yZSB0aGUgSlMgY29udGV4dFxuICAgICAqL1xuICAgIHB1YmxpYyBzY29wZTogYW55ID0gbnVsbFxuICApIHt9XG59XG5cbi8qKlxuICogVGhlIE9ic2VydmFibGUgY2xhc3MgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9ic2VydmFibGUgcGF0dGVybi5cbiAqXG4gKiBUaGVyZSdzIG9uZSBzbGlnaHQgcGFydGljdWxhcml0eSB0aG91Z2g6IGEgZ2l2ZW4gT2JzZXJ2YWJsZSBjYW4gbm90aWZ5IGl0cyBvYnNlcnZlciB1c2luZyBhIHBhcnRpY3VsYXIgbWFzayB2YWx1ZSwgb25seSB0aGUgT2JzZXJ2ZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1hc2sgdmFsdWUgd2lsbCBiZSBub3RpZmllZC5cbiAqIFRoaXMgZW5hYmxlIGEgbW9yZSBmaW5lIGdyYWluZWQgZXhlY3V0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkgb24gbXVsdGlwbGUgZGlmZmVyZW50IE9ic2VydmFibGUgb2JqZWN0cy5cbiAqIEZvciBpbnN0YW5jZSB5b3UgbWF5IGhhdmUgYSBnaXZlbiBPYnNlcnZhYmxlIHRoYXQgaGF2ZSBmb3VyIGRpZmZlcmVudCB0eXBlcyBvZiBub3RpZmljYXRpb25zOiBNb3ZlIChtYXNrID0gMHgwMSksIFN0b3AgKG1hc2sgPSAweDAyKSwgVHVybiBSaWdodCAobWFzayA9IDBYMDQpLCBUdXJuIExlZnQgKG1hc2sgPSAwWDA4KS5cbiAqIEEgZ2l2ZW4gb2JzZXJ2ZXIgY2FuIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIG9ubHkgTW92ZSBhbmQgU3RvcCAobWFzayA9IDB4MDMpLCB0aGVuIGl0IHdpbGwgb25seSBiZSBub3RpZmllZCB3aGVuIG9uZSBvZiB0aGVzZSB0d28gb2NjdXJzIGFuZCB3aWxsIG5ldmVyIGJlIGZvciBUdXJuIExlZnQvUmlnaHQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZTxUPiB7XG4gIHByaXZhdGUgX29ic2VydmVycyA9IG5ldyBBcnJheTxPYnNlcnZlcjxUPj4oKVxuXG4gIHByaXZhdGUgX2V2ZW50U3RhdGU6IE9ic2VydmVyRXZlbnRTdGF0ZVxuXG4gIHByaXZhdGUgX29uT2JzZXJ2ZXJBZGRlZDogbnVsbCB8ICgob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSA9IG51bGxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZhYmxlXG4gICAqIEBwYXJhbSBvbk9ic2VydmVyQWRkZWQgLSBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgbmV3IG9ic2VydmVyIGlzIGFkZGVkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihvbk9ic2VydmVyQWRkZWQ/OiAob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZXZlbnRTdGF0ZSA9IG5ldyBPYnNlcnZlckV2ZW50U3RhdGUoMClcblxuICAgIGlmIChvbk9ic2VydmVyQWRkZWQpIHtcbiAgICAgIHRoaXMuX29uT2JzZXJ2ZXJBZGRlZCA9IG9uT2JzZXJ2ZXJBZGRlZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgT2JzZXJ2ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHBhcmFtIG1hc2sgLSB0aGUgbWFzayB1c2VkIHRvIGZpbHRlciBvYnNlcnZlcnNcbiAgICogQHBhcmFtIGluc2VydEZpcnN0IC0gaWYgdHJ1ZSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgZmlyc3QgcG9zaXRpb24sIGhlbmNlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgb3RoZXJzIG9uZXMuIElmIGZhbHNlIChkZWZhdWx0IGJlaGF2aW9yKSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiwgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBvdGhlcnMgYWxyZWFkeSBwcmVzZW50LlxuICAgKiBAcGFyYW0gc2NvcGUgLSBvcHRpb25hbCBzY29wZSBmb3IgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBmcm9tXG4gICAqIEBwYXJhbSB1bnJlZ2lzdGVyT25GaXJzdENhbGwgLSBkZWZpbmVzIGlmIHRoZSBvYnNlcnZlciBhcyB0byBiZSB1bnJlZ2lzdGVyZWQgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgYWRkKFxuICAgIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgbWFzazogbnVtYmVyID0gLTEsXG4gICAgaW5zZXJ0Rmlyc3QgPSBmYWxzZSxcbiAgICBzY29wZTogYW55ID0gbnVsbCxcbiAgICB1bnJlZ2lzdGVyT25GaXJzdENhbGwgPSBmYWxzZVxuICApOiBudWxsIHwgT2JzZXJ2ZXI8VD4ge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2ssIG1hc2ssIHNjb3BlKVxuICAgIG9ic2VydmVyLnVucmVnaXN0ZXJPbk5leHRDYWxsID0gdW5yZWdpc3Rlck9uRmlyc3RDYWxsXG5cbiAgICBpZiAoaW5zZXJ0Rmlyc3QpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy51bnNoaWZ0KG9ic2VydmVyKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChvYnNlcnZlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb25PYnNlcnZlckFkZGVkKSB7XG4gICAgICB0aGlzLl9vbk9ic2VydmVyQWRkZWQob2JzZXJ2ZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmVyXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9ic2VydmVyIHdpdGggdGhlIHNwZWNpZmllZCBjYWxsYmFjayBhbmQgdW5yZWdpc3RlcnMgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBjcmVhdGVkIGZvciB0aGUgY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyBhZGRPbmNlKGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQpOiBudWxsIHwgT2JzZXJ2ZXI8VD4ge1xuICAgIHJldHVybiB0aGlzLmFkZChjYWxsYmFjaywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gT2JzZXJ2ZXIgZnJvbSB0aGUgT2JzZXJ2YWJsZSBvYmplY3RcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gdGhlIGluc3RhbmNlIG9mIHRoZSBPYnNlcnZlciB0byByZW1vdmVcbiAgICogQHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKG9ic2VydmVyOiBudWxsIHwgT2JzZXJ2ZXI8VD4pOiBib29sZWFuIHtcbiAgICBpZiAoIW9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKVxuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKG9ic2VydmVyKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBPYnNlcnZhYmxlIG9iamVjdFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBzY29wZSAtIG9wdGlvbmFsIHNjb3BlLiBJZiB1c2VkIG9ubHkgdGhlIGNhbGxiYWNrcyB3aXRoIHRoaXMgc2NvcGUgd2lsbCBiZSByZW1vdmVkXG4gICAqIEByZXR1cm5zIGZhbHNlIGlmIGl0IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNhbGxiYWNrKGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsIHNjb3BlPzogYW55KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX29ic2VydmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmICh0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiAoIXNjb3BlIHx8IHNjb3BlID09PSB0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLnNjb3BlKSkge1xuICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIodGhpcy5fb2JzZXJ2ZXJzW2luZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgYWxsIE9ic2VydmVycyBieSBjYWxsaW5nIHRoZWlyIHJlc3BlY3RpdmUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxuICAgKiBXaWxsIHJldHVybiB0cnVlIGlmIGFsbCBvYnNlcnZlcnMgd2VyZSBleGVjdXRlZCwgZmFsc2UgaWYgYW4gb2JzZXJ2ZXIgc2V0IHNraXBOZXh0T2JzZXJ2ZXJzIHRvIHRydWUsIHRoZW4gcHJldmVudCB0aGUgc3Vic2VxdWVudCBvbmVzIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIGV2ZW50RGF0YSAtIGRlZmluZXMgdGhlIGRhdGEgdG8gc2VuZCB0byBhbGwgb2JzZXJ2ZXJzXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgY3VycmVudCBub3RpZmljYXRpb24gKG9ic2VydmVycyB3aXRoIGluY29tcGF0aWJsZSBtYXNrIChpZSBtYXNrICYgb2JzZXJ2ZXIubWFzayA9PT0gMCkgd2lsbCBub3QgYmUgbm90aWZpZWQpXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IC0gZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEByZXR1cm5zIGZhbHNlIGlmIHRoZSBjb21wbGV0ZSBvYnNlcnZlciBjaGFpbiB3YXMgbm90IHByb2Nlc3NlZCAoYmVjYXVzZSBvbmUgb2JzZXJ2ZXIgc2V0IHRoZSBza2lwTmV4dE9ic2VydmVycyB0byB0cnVlKVxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVycyhldmVudERhdGE6IFQsIG1hc2s6IG51bWJlciA9IC0xLCB0YXJnZXQ/OiBhbnksIGN1cnJlbnRUYXJnZXQ/OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX29ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9ldmVudFN0YXRlXG4gICAgc3RhdGUubWFzayA9IG1hc2tcbiAgICBzdGF0ZS50YXJnZXQgPSB0YXJnZXRcbiAgICBzdGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2VcbiAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBldmVudERhdGFcblxuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChvYnMubWFzayAmIG1hc2spIHtcbiAgICAgICAgaWYgKG9icy5zY29wZSkge1xuICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IG9icy5jYWxsYmFjay5hcHBseShvYnMuc2NvcGUsIFtldmVudERhdGEsIHN0YXRlXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBvYnMuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYnMudW5yZWdpc3Rlck9uTmV4dENhbGwpIHtcbiAgICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIHdpbGwgZXhlY3V0ZSBlYWNoIGNhbGxiYWNrLCBleHBlY3RpbmcgaXQgdG8gYmUgYSBwcm9taXNlIG9yIHJldHVybiBhIHZhbHVlLlxuICAgKiBJZiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNoYWluIG9uZSBmdW5jdGlvbiBmYWlscywgdGhlIHByb21pc2Ugd2lsbCBmYWlsIGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwgbm90IGNvbnRpbnVlLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2hhaW4gb2YgZXZlbnRzIChzb21ldGltZXMgYXN5bmMgZXZlbnRzKSBpcyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBhIGNlcnRhaW4gb2JqZWN0XG4gICAqIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIGNhbGxiYWNrcyB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNhbGxiYWNrcyBpcyBrZXB0LCBjYWxsYmFja3MgYXJlIG5vdCBleGVjdXRlZCBwYXJhbGxlbC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50RGF0YSAtIFRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgY2FsbGJhY2sgdGFyZ2V0IChzZWUgRXZlbnRTdGF0ZSlcbiAgICogQHBhcmFtIGN1cnJlbnRUYXJnZXQgLSBkZWZpbmVzIGhlIGN1cnJlbnQgb2JqZWN0IGluIHRoZSBidWJibGluZyBwaGFzZVxuICAgKiBAcmV0dXJucyB3aWxsIHJldHVybiBhIFByb21pc2UgdGhhbiByZXNvbHZlcyB3aGVuIGFsbCBjYWxsYmFja3MgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyc1dpdGhQcm9taXNlKGV2ZW50RGF0YTogVCwgbWFzazogbnVtYmVyID0gLTEsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSk6IFByb21pc2U8VD4ge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBwcm9taXNlXG4gICAgbGV0IHA6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZShldmVudERhdGEpXG5cbiAgICAvLyBubyBvYnNlcnZlcnM/IHJldHVybiB0aGlzIHByb21pc2UuXG4gICAgaWYgKCF0aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcFxuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUudGFyZ2V0ID0gdGFyZ2V0XG4gICAgc3RhdGUuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXRcbiAgICBzdGF0ZS5za2lwTmV4dE9ic2VydmVycyA9IGZhbHNlXG5cbiAgICAvLyBleGVjdXRlIG9uZSBjYWxsYmFjayBhZnRlciBhbm90aGVyIChub3QgdXNpbmcgUHJvbWlzZS5hbGwsIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQpXG4gICAgdGhpcy5fb2JzZXJ2ZXJzLmZvckVhY2goKG9icykgPT4ge1xuICAgICAgaWYgKHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5tYXNrICYgbWFzaykge1xuICAgICAgICBpZiAob2JzLnNjb3BlKSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwgW2V2ZW50RGF0YSwgc3RhdGVdKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JzLnVucmVnaXN0ZXJPbk5leHRDYWxsKSB7XG4gICAgICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKG9icylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyByZXR1cm4gdGhlIGV2ZW50RGF0YVxuICAgIHJldHVybiBwLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGV2ZW50RGF0YVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IGEgc3BlY2lmaWMgb2JzZXJ2ZXJcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gZGVmaW5lcyB0aGUgb2JzZXJ2ZXIgdG8gbm90aWZ5XG4gICAqIEBwYXJhbSBldmVudERhdGEgLSBkZWZpbmVzIHRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyKG9ic2VydmVyOiBPYnNlcnZlcjxUPiwgZXZlbnREYXRhOiBULCBtYXNrOiBudW1iZXIgPSAtMSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZVxuXG4gICAgb2JzZXJ2ZXIuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYnNlcnZhYmxlIGhhcyBhdCBsZWFzdCBvbmUgb2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdHJ1ZSBpcyB0aGUgT2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIE9ic2VydmVyIHJlZ2lzdGVyZWRcbiAgICovXG4gIHB1YmxpYyBoYXNPYnNlcnZlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29ic2VydmVycy5sZW5ndGggPiAwXG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGxpc3Qgb2Ygb2JzZXJ2ZXJzXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5PE9ic2VydmVyPFQ+PigpXG4gICAgdGhpcy5fb25PYnNlcnZlckFkZGVkID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIHRoZSBjdXJyZW50IG9ic2VydmFibGVcbiAgICogQHJldHVybnMgYSBuZXcgb2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIGNsb25lKCk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlPFQ+KClcblxuICAgIHJlc3VsdC5fb2JzZXJ2ZXJzID0gdGhpcy5fb2JzZXJ2ZXJzLnNsaWNlKDApXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogRG9lcyB0aGlzIG9ic2VydmFibGUgaGFuZGxlcyBvYnNlcnZlciByZWdpc3RlcmVkIHdpdGggYSBnaXZlbiBtYXNrXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybnMgd2hldGhlciBvciBub3Qgb25lIG9ic2VydmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBpcyBoYW5kZWxlZFxuICAgKi9cbiAgcHVibGljIGhhc1NwZWNpZmljTWFzayhtYXNrOiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5tYXNrICYgbWFzayB8fCBvYnMubWFzayA9PT0gbWFzaykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmVyVW5yZWdpc3RlcihvYnNlcnZlcjogT2JzZXJ2ZXI8VD4pOiB2b2lkIHtcbiAgICBvYnNlcnZlci51bnJlZ2lzdGVyT25OZXh0Q2FsbCA9IGZhbHNlXG4gICAgb2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCA9IHRydWVcbiAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSkoYXN5bmMgKCkgPT4gdGhpcy5fcmVtb3ZlKG9ic2VydmVyKSlcbiAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKVxuICB9XG5cbiAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBub3QgaXRlcmF0aW5nIG92ZXIgX29ic2VydmVycyB0byBhdm9pZCBjYWxsYmFjayBza2lwcGluZy5cbiAgLy8gUmVtb3ZlcyBhbiBvYnNlcnZlciBmcm9tIHRoZSBfb2JzZXJ2ZXIgQXJyYXkuXG4gIHByaXZhdGUgX3JlbW92ZShvYnNlcnZlcjogbnVsbCB8IE9ic2VydmVyPFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcilcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
324
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcm5hbC9PYnNlcnZhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQTJCN0I7Ozs7OztPQU1HO0lBQ0gsWUFBWSxJQUFZLEVBQUUsaUJBQWlCLEdBQUcsS0FBSyxFQUFFLE1BQVksRUFBRSxhQUFtQjtRQUNwRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxTQUFTLENBQUMsSUFBWSxFQUFFLGlCQUFpQixHQUFHLEtBQUssRUFBRSxNQUFZLEVBQUUsYUFBbUI7UUFDekYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBU25COzs7OztPQUtHO0lBQ0g7SUFDRTs7T0FFRztJQUNJLFFBQWdFO0lBQ3ZFOztPQUVHO0lBQ0ksSUFBWTtJQUNuQjs7T0FFRztJQUNJLFFBQWEsSUFBSTtRQVJqQixhQUFRLEdBQVIsUUFBUSxDQUF3RDtRQUloRSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBSVosVUFBSyxHQUFMLEtBQUssQ0FBWTtRQTFCMUI7O1dBRUc7UUFDSSx5QkFBb0IsR0FBRyxLQUFLLENBQUE7UUFFbkMseUJBQXlCO1FBQ2xCLHdCQUFtQixHQUFHLEtBQUssQ0FBQTtJQXFCL0IsQ0FBQztDQUNMO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBT3JCOzs7T0FHRztJQUNILFlBQVksZUFBaUQ7UUFWckQsZUFBVSxHQUFHLElBQUksS0FBSyxFQUFlLENBQUE7UUFJckMscUJBQWdCLEdBQTZDLElBQUksQ0FBQTtRQU92RSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFNUMsSUFBSSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGVBQWUsQ0FBQTtTQUN4QztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLEdBQUcsQ0FDUixRQUFnRSxFQUNoRSxPQUFlLENBQUMsQ0FBQyxFQUNqQixXQUFXLEdBQUcsS0FBSyxFQUNuQixRQUFhLElBQUksRUFDakIscUJBQXFCLEdBQUcsS0FBSztRQUU3QixJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDcEQsUUFBUSxDQUFDLG9CQUFvQixHQUFHLHFCQUFxQixDQUFBO1FBRXJELElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUE7U0FDbEM7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQy9CO1FBRUQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFBO1NBQ2hDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsUUFBZ0U7UUFDN0UsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxRQUE0QjtRQUN4QyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2IsT0FBTyxLQUFLLENBQUE7U0FDYjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRS9DLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUMvQixPQUFPLElBQUksQ0FBQTtTQUNaO1FBRUQsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxjQUFjLENBQUMsUUFBZ0UsRUFBRSxLQUFXO1FBQ2pHLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMzRCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN0RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2dCQUM3QyxPQUFPLElBQUksQ0FBQTthQUNaO1NBQ0Y7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGVBQWUsQ0FBQyxTQUFZLEVBQUUsT0FBZSxDQUFDLENBQUMsRUFBRSxNQUFZLEVBQUUsYUFBbUI7UUFDdkYsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFBO1FBQzlCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ25DLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7UUFDL0IsS0FBSyxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUE7UUFFakMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pDLElBQUksR0FBRyxDQUFDLG1CQUFtQixFQUFFO2dCQUMzQixTQUFRO2FBQ1Q7WUFFRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFO2dCQUNuQixJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7b0JBQ2IsS0FBSyxDQUFDLGVBQWUsR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7aUJBQzFFO3FCQUFNO29CQUNMLEtBQUssQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUE7aUJBQ3ZEO2dCQUVELElBQUksR0FBRyxDQUFDLG9CQUFvQixFQUFFO29CQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUE7aUJBQzNCO2FBQ0Y7WUFDRCxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtnQkFDM0IsT0FBTyxLQUFLLENBQUE7YUFDYjtTQUNGO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0ksMEJBQTBCLENBQUMsU0FBWSxFQUFFLE9BQWUsQ0FBQyxDQUFDLEVBQUUsTUFBWSxFQUFFLGFBQW1CO1FBQ2xHLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsR0FBaUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUVoRCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzNCLE9BQU8sQ0FBQyxDQUFBO1NBQ1Q7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFBO1FBQzlCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLEtBQUssQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3JCLEtBQUssQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ25DLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7UUFFL0IscUZBQXFGO1FBQ3JGLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDOUIsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzNCLE9BQU07YUFDUDtZQUNELElBQUksR0FBRyxDQUFDLG1CQUFtQixFQUFFO2dCQUMzQixPQUFNO2FBQ1A7WUFDRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxFQUFFO2dCQUNuQixJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7b0JBQ2IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO3dCQUMvQixLQUFLLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFBO3dCQUN6QyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtvQkFDMUQsQ0FBQyxDQUFDLENBQUE7aUJBQ0g7cUJBQU07b0JBQ0wsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFO3dCQUMvQixLQUFLLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFBO3dCQUN6QyxPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFBO29CQUN2QyxDQUFDLENBQUMsQ0FBQTtpQkFDSDtnQkFDRCxJQUFJLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRTtvQkFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFBO2lCQUMzQjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFFRix1QkFBdUI7UUFDdkIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNqQixPQUFPLFNBQVMsQ0FBQTtRQUNsQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGNBQWMsQ0FBQyxRQUFxQixFQUFFLFNBQVksRUFBRSxPQUFlLENBQUMsQ0FBQztRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFBO1FBQzlCLEtBQUssQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2pCLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUE7UUFFL0IsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDckMsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUE7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNWLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxLQUFLLEVBQWUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFBO0lBQzlCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLO1FBQ1YsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUssQ0FBQTtRQUVsQyxNQUFNLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTVDLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxlQUFlLENBQUMsT0FBZSxDQUFDLENBQUM7UUFDdEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFBO2FBQ1o7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQXFCO1FBQzVDLFFBQVEsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDckMsUUFBUSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQTtRQUNuQyxPQUFPLENBQUMsT0FBTyxFQUFFO2FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsNEZBQTRGO0lBQzVGLGdEQUFnRDtJQUN4QyxPQUFPLENBQUMsUUFBNEI7UUFDMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUvQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDaEMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogQSBjbGFzcyBzZXJ2ZXMgYXMgYSBtZWRpdW0gYmV0d2VlbiB0aGUgb2JzZXJ2YWJsZSBhbmQgaXRzIG9ic2VydmVyc1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXJFdmVudFN0YXRlIHtcbiAgLyoqXG4gICAqIEFuIE9ic2VydmVyIGNhbiBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIHByZXZlbnQgc3Vic2VxdWVudCBvYnNlcnZlcnMgb2YgYmVpbmcgbm90aWZpZWRcbiAgICovXG4gIHB1YmxpYyBza2lwTmV4dE9ic2VydmVycyE6IGJvb2xlYW5cblxuICAvKipcbiAgICogR2V0IHRoZSBtYXNrIHZhbHVlIHRoYXQgd2VyZSB1c2VkIHRvIHRyaWdnZXIgdGhlIGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBFdmVudFN0YXRlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIG1hc2shOiBudW1iZXJcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0aGF0IG9yaWdpbmFsbHkgbm90aWZpZWQgdGhlIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgdGFyZ2V0PzogYW55XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IG9iamVjdCBpbiB0aGUgYnViYmxpbmcgcGhhc2VcbiAgICovXG4gIHB1YmxpYyBjdXJyZW50VGFyZ2V0PzogYW55XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYXN0IGZ1bmN0aW9uIHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgKiBJZiBpdCBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIGNhbGxiYWNrIGNoYWluIGl0IHdpbGwgYmUgdGhlIGV2ZW50IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgbGFzdFJldHVyblZhbHVlPzogYW55XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBFdmVudFN0YXRlXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdGF0ZVxuICAgKiBAcGFyYW0gc2tpcE5leHRPYnNlcnZlcnMgLSBkZWZpbmVzIGEgZmxhZyB3aGljaCB3aWxsIGluc3RydWN0IHRoZSBvYnNlcnZhYmxlIHRvIHNraXAgZm9sbG93aW5nIG9ic2VydmVycyB3aGVuIHNldCB0byB0cnVlXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IC0gZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXNrOiBudW1iZXIsIHNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2UsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSkge1xuICAgIHRoaXMuaW5pdGFsaXplKG1hc2ssIHNraXBOZXh0T2JzZXJ2ZXJzLCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQpXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKiBAcGFyYW0gbWFzayAtIGRlZmluZXMgdGhlIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RhdGVcbiAgICogQHBhcmFtIHNraXBOZXh0T2JzZXJ2ZXJzIC0gZGVmaW5lcyBhIGZsYWcgd2hpY2ggd2lsbCBpbnN0cnVjdCB0aGUgb2JzZXJ2YWJsZSB0byBza2lwIGZvbGxvd2luZyBvYnNlcnZlcnMgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCAtIGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGluaXRhbGl6ZShtYXNrOiBudW1iZXIsIHNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2UsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSk6IE9ic2VydmVyRXZlbnRTdGF0ZSB7XG4gICAgdGhpcy5tYXNrID0gbWFza1xuICAgIHRoaXMuc2tpcE5leHRPYnNlcnZlcnMgPSBza2lwTmV4dE9ic2VydmVyc1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYW4gT2JzZXJ2ZXIgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIE9ic2VydmFibGUgb2JqZWN0LlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXI8VD4ge1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgcHJvcGVydHkgZGVmaW5pbmcgdGhhdCB0aGUgb2JzZXJ2ZXIgYXMgdG8gYmUgdW5yZWdpc3RlcmVkIGFmdGVyIHRoZSBuZXh0IG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIHVucmVnaXN0ZXJPbk5leHRDYWxsID0gZmFsc2VcblxuICAvKiogRm9yIGludGVybmFsIHVzYWdlICovXG4gIHB1YmxpYyBfd2lsbEJlVW5yZWdpc3RlcmVkID0gZmFsc2VcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZlclxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAqIEBwYXJhbSBzY29wZSAtIGRlZmluZXMgdGhlIGN1cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0b3JlIHRoZSBKUyBjb250ZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAgICovXG4gICAgcHVibGljIG1hc2s6IG51bWJlcixcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjdXJyZW50IHNjb3BlIHVzZWQgdG8gcmVzdG9yZSB0aGUgSlMgY29udGV4dFxuICAgICAqL1xuICAgIHB1YmxpYyBzY29wZTogYW55ID0gbnVsbFxuICApIHt9XG59XG5cbi8qKlxuICogVGhlIE9ic2VydmFibGUgY2xhc3MgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9ic2VydmFibGUgcGF0dGVybi5cbiAqXG4gKiBUaGVyZSdzIG9uZSBzbGlnaHQgcGFydGljdWxhcml0eSB0aG91Z2g6IGEgZ2l2ZW4gT2JzZXJ2YWJsZSBjYW4gbm90aWZ5IGl0cyBvYnNlcnZlciB1c2luZyBhIHBhcnRpY3VsYXIgbWFzayB2YWx1ZSwgb25seSB0aGUgT2JzZXJ2ZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1hc2sgdmFsdWUgd2lsbCBiZSBub3RpZmllZC5cbiAqIFRoaXMgZW5hYmxlIGEgbW9yZSBmaW5lIGdyYWluZWQgZXhlY3V0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkgb24gbXVsdGlwbGUgZGlmZmVyZW50IE9ic2VydmFibGUgb2JqZWN0cy5cbiAqIEZvciBpbnN0YW5jZSB5b3UgbWF5IGhhdmUgYSBnaXZlbiBPYnNlcnZhYmxlIHRoYXQgaGF2ZSBmb3VyIGRpZmZlcmVudCB0eXBlcyBvZiBub3RpZmljYXRpb25zOiBNb3ZlIChtYXNrID0gMHgwMSksIFN0b3AgKG1hc2sgPSAweDAyKSwgVHVybiBSaWdodCAobWFzayA9IDBYMDQpLCBUdXJuIExlZnQgKG1hc2sgPSAwWDA4KS5cbiAqIEEgZ2l2ZW4gb2JzZXJ2ZXIgY2FuIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIG9ubHkgTW92ZSBhbmQgU3RvcCAobWFzayA9IDB4MDMpLCB0aGVuIGl0IHdpbGwgb25seSBiZSBub3RpZmllZCB3aGVuIG9uZSBvZiB0aGVzZSB0d28gb2NjdXJzIGFuZCB3aWxsIG5ldmVyIGJlIGZvciBUdXJuIExlZnQvUmlnaHQuXG4gKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZTxUPiB7XG4gIHByaXZhdGUgX29ic2VydmVycyA9IG5ldyBBcnJheTxPYnNlcnZlcjxUPj4oKVxuXG4gIHByaXZhdGUgX2V2ZW50U3RhdGU6IE9ic2VydmVyRXZlbnRTdGF0ZVxuXG4gIHByaXZhdGUgX29uT2JzZXJ2ZXJBZGRlZDogbnVsbCB8ICgob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSA9IG51bGxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZhYmxlXG4gICAqIEBwYXJhbSBvbk9ic2VydmVyQWRkZWQgLSBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgbmV3IG9ic2VydmVyIGlzIGFkZGVkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihvbk9ic2VydmVyQWRkZWQ/OiAob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZXZlbnRTdGF0ZSA9IG5ldyBPYnNlcnZlckV2ZW50U3RhdGUoMClcblxuICAgIGlmIChvbk9ic2VydmVyQWRkZWQpIHtcbiAgICAgIHRoaXMuX29uT2JzZXJ2ZXJBZGRlZCA9IG9uT2JzZXJ2ZXJBZGRlZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgT2JzZXJ2ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHBhcmFtIG1hc2sgLSB0aGUgbWFzayB1c2VkIHRvIGZpbHRlciBvYnNlcnZlcnNcbiAgICogQHBhcmFtIGluc2VydEZpcnN0IC0gaWYgdHJ1ZSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgZmlyc3QgcG9zaXRpb24sIGhlbmNlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgb3RoZXJzIG9uZXMuIElmIGZhbHNlIChkZWZhdWx0IGJlaGF2aW9yKSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiwgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBvdGhlcnMgYWxyZWFkeSBwcmVzZW50LlxuICAgKiBAcGFyYW0gc2NvcGUgLSBvcHRpb25hbCBzY29wZSBmb3IgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBmcm9tXG4gICAqIEBwYXJhbSB1bnJlZ2lzdGVyT25GaXJzdENhbGwgLSBkZWZpbmVzIGlmIHRoZSBvYnNlcnZlciBhcyB0byBiZSB1bnJlZ2lzdGVyZWQgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgYWRkKFxuICAgIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgbWFzazogbnVtYmVyID0gLTEsXG4gICAgaW5zZXJ0Rmlyc3QgPSBmYWxzZSxcbiAgICBzY29wZTogYW55ID0gbnVsbCxcbiAgICB1bnJlZ2lzdGVyT25GaXJzdENhbGwgPSBmYWxzZVxuICApOiBudWxsIHwgT2JzZXJ2ZXI8VD4ge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2ssIG1hc2ssIHNjb3BlKVxuICAgIG9ic2VydmVyLnVucmVnaXN0ZXJPbk5leHRDYWxsID0gdW5yZWdpc3Rlck9uRmlyc3RDYWxsXG5cbiAgICBpZiAoaW5zZXJ0Rmlyc3QpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy51bnNoaWZ0KG9ic2VydmVyKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChvYnNlcnZlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb25PYnNlcnZlckFkZGVkKSB7XG4gICAgICB0aGlzLl9vbk9ic2VydmVyQWRkZWQob2JzZXJ2ZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmVyXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9ic2VydmVyIHdpdGggdGhlIHNwZWNpZmllZCBjYWxsYmFjayBhbmQgdW5yZWdpc3RlcnMgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBjcmVhdGVkIGZvciB0aGUgY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyBhZGRPbmNlKGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQpOiBudWxsIHwgT2JzZXJ2ZXI8VD4ge1xuICAgIHJldHVybiB0aGlzLmFkZChjYWxsYmFjaywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gT2JzZXJ2ZXIgZnJvbSB0aGUgT2JzZXJ2YWJsZSBvYmplY3RcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gdGhlIGluc3RhbmNlIG9mIHRoZSBPYnNlcnZlciB0byByZW1vdmVcbiAgICogQHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKG9ic2VydmVyOiBudWxsIHwgT2JzZXJ2ZXI8VD4pOiBib29sZWFuIHtcbiAgICBpZiAoIW9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKVxuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKG9ic2VydmVyKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBPYnNlcnZhYmxlIG9iamVjdFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBzY29wZSAtIG9wdGlvbmFsIHNjb3BlLiBJZiB1c2VkIG9ubHkgdGhlIGNhbGxiYWNrcyB3aXRoIHRoaXMgc2NvcGUgd2lsbCBiZSByZW1vdmVkXG4gICAqIEByZXR1cm5zIGZhbHNlIGlmIGl0IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNhbGxiYWNrKGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsIHNjb3BlPzogYW55KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX29ic2VydmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmICh0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiAoIXNjb3BlIHx8IHNjb3BlID09PSB0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLnNjb3BlKSkge1xuICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIodGhpcy5fb2JzZXJ2ZXJzW2luZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgYWxsIE9ic2VydmVycyBieSBjYWxsaW5nIHRoZWlyIHJlc3BlY3RpdmUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxuICAgKiBXaWxsIHJldHVybiB0cnVlIGlmIGFsbCBvYnNlcnZlcnMgd2VyZSBleGVjdXRlZCwgZmFsc2UgaWYgYW4gb2JzZXJ2ZXIgc2V0IHNraXBOZXh0T2JzZXJ2ZXJzIHRvIHRydWUsIHRoZW4gcHJldmVudCB0aGUgc3Vic2VxdWVudCBvbmVzIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIGV2ZW50RGF0YSAtIGRlZmluZXMgdGhlIGRhdGEgdG8gc2VuZCB0byBhbGwgb2JzZXJ2ZXJzXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgY3VycmVudCBub3RpZmljYXRpb24gKG9ic2VydmVycyB3aXRoIGluY29tcGF0aWJsZSBtYXNrIChpZSBtYXNrICYgb2JzZXJ2ZXIubWFzayA9PT0gMCkgd2lsbCBub3QgYmUgbm90aWZpZWQpXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IC0gZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEByZXR1cm5zIGZhbHNlIGlmIHRoZSBjb21wbGV0ZSBvYnNlcnZlciBjaGFpbiB3YXMgbm90IHByb2Nlc3NlZCAoYmVjYXVzZSBvbmUgb2JzZXJ2ZXIgc2V0IHRoZSBza2lwTmV4dE9ic2VydmVycyB0byB0cnVlKVxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVycyhldmVudERhdGE6IFQsIG1hc2s6IG51bWJlciA9IC0xLCB0YXJnZXQ/OiBhbnksIGN1cnJlbnRUYXJnZXQ/OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX29ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9ldmVudFN0YXRlXG4gICAgc3RhdGUubWFzayA9IG1hc2tcbiAgICBzdGF0ZS50YXJnZXQgPSB0YXJnZXRcbiAgICBzdGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2VcbiAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBldmVudERhdGFcblxuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChvYnMubWFzayAmIG1hc2spIHtcbiAgICAgICAgaWYgKG9icy5zY29wZSkge1xuICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IG9icy5jYWxsYmFjay5hcHBseShvYnMuc2NvcGUsIFtldmVudERhdGEsIHN0YXRlXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBvYnMuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYnMudW5yZWdpc3Rlck9uTmV4dENhbGwpIHtcbiAgICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIHdpbGwgZXhlY3V0ZSBlYWNoIGNhbGxiYWNrLCBleHBlY3RpbmcgaXQgdG8gYmUgYSBwcm9taXNlIG9yIHJldHVybiBhIHZhbHVlLlxuICAgKiBJZiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNoYWluIG9uZSBmdW5jdGlvbiBmYWlscywgdGhlIHByb21pc2Ugd2lsbCBmYWlsIGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwgbm90IGNvbnRpbnVlLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2hhaW4gb2YgZXZlbnRzIChzb21ldGltZXMgYXN5bmMgZXZlbnRzKSBpcyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBhIGNlcnRhaW4gb2JqZWN0XG4gICAqIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIGNhbGxiYWNrcyB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNhbGxiYWNrcyBpcyBrZXB0LCBjYWxsYmFja3MgYXJlIG5vdCBleGVjdXRlZCBwYXJhbGxlbC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50RGF0YSAtIFRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgY2FsbGJhY2sgdGFyZ2V0IChzZWUgRXZlbnRTdGF0ZSlcbiAgICogQHBhcmFtIGN1cnJlbnRUYXJnZXQgLSBkZWZpbmVzIGhlIGN1cnJlbnQgb2JqZWN0IGluIHRoZSBidWJibGluZyBwaGFzZVxuICAgKiBAcmV0dXJucyB3aWxsIHJldHVybiBhIFByb21pc2UgdGhhbiByZXNvbHZlcyB3aGVuIGFsbCBjYWxsYmFja3MgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyc1dpdGhQcm9taXNlKGV2ZW50RGF0YTogVCwgbWFzazogbnVtYmVyID0gLTEsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSk6IFByb21pc2U8VD4ge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBwcm9taXNlXG4gICAgbGV0IHA6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZShldmVudERhdGEpXG5cbiAgICAvLyBubyBvYnNlcnZlcnM/IHJldHVybiB0aGlzIHByb21pc2UuXG4gICAgaWYgKCF0aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcFxuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUudGFyZ2V0ID0gdGFyZ2V0XG4gICAgc3RhdGUuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXRcbiAgICBzdGF0ZS5za2lwTmV4dE9ic2VydmVycyA9IGZhbHNlXG5cbiAgICAvLyBleGVjdXRlIG9uZSBjYWxsYmFjayBhZnRlciBhbm90aGVyIChub3QgdXNpbmcgUHJvbWlzZS5hbGwsIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQpXG4gICAgdGhpcy5fb2JzZXJ2ZXJzLmZvckVhY2goKG9icykgPT4ge1xuICAgICAgaWYgKHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5tYXNrICYgbWFzaykge1xuICAgICAgICBpZiAob2JzLnNjb3BlKSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwgW2V2ZW50RGF0YSwgc3RhdGVdKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JzLnVucmVnaXN0ZXJPbk5leHRDYWxsKSB7XG4gICAgICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKG9icylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyByZXR1cm4gdGhlIGV2ZW50RGF0YVxuICAgIHJldHVybiBwLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGV2ZW50RGF0YVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IGEgc3BlY2lmaWMgb2JzZXJ2ZXJcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gZGVmaW5lcyB0aGUgb2JzZXJ2ZXIgdG8gbm90aWZ5XG4gICAqIEBwYXJhbSBldmVudERhdGEgLSBkZWZpbmVzIHRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyKG9ic2VydmVyOiBPYnNlcnZlcjxUPiwgZXZlbnREYXRhOiBULCBtYXNrOiBudW1iZXIgPSAtMSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZVxuXG4gICAgb2JzZXJ2ZXIuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYnNlcnZhYmxlIGhhcyBhdCBsZWFzdCBvbmUgb2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdHJ1ZSBpcyB0aGUgT2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIE9ic2VydmVyIHJlZ2lzdGVyZWRcbiAgICovXG4gIHB1YmxpYyBoYXNPYnNlcnZlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29ic2VydmVycy5sZW5ndGggPiAwXG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGxpc3Qgb2Ygb2JzZXJ2ZXJzXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5PE9ic2VydmVyPFQ+PigpXG4gICAgdGhpcy5fb25PYnNlcnZlckFkZGVkID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIHRoZSBjdXJyZW50IG9ic2VydmFibGVcbiAgICogQHJldHVybnMgYSBuZXcgb2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIGNsb25lKCk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlPFQ+KClcblxuICAgIHJlc3VsdC5fb2JzZXJ2ZXJzID0gdGhpcy5fb2JzZXJ2ZXJzLnNsaWNlKDApXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogRG9lcyB0aGlzIG9ic2VydmFibGUgaGFuZGxlcyBvYnNlcnZlciByZWdpc3RlcmVkIHdpdGggYSBnaXZlbiBtYXNrXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybnMgd2hldGhlciBvciBub3Qgb25lIG9ic2VydmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBpcyBoYW5kZWxlZFxuICAgKi9cbiAgcHVibGljIGhhc1NwZWNpZmljTWFzayhtYXNrOiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5tYXNrICYgbWFzayB8fCBvYnMubWFzayA9PT0gbWFzaykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmVyVW5yZWdpc3RlcihvYnNlcnZlcjogT2JzZXJ2ZXI8VD4pOiB2b2lkIHtcbiAgICBvYnNlcnZlci51bnJlZ2lzdGVyT25OZXh0Q2FsbCA9IGZhbHNlXG4gICAgb2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCA9IHRydWVcbiAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSkoYXN5bmMgKCkgPT4gdGhpcy5fcmVtb3ZlKG9ic2VydmVyKSlcbiAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKVxuICB9XG5cbiAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBub3QgaXRlcmF0aW5nIG92ZXIgX29ic2VydmVycyB0byBhdm9pZCBjYWxsYmFjayBza2lwcGluZy5cbiAgLy8gUmVtb3ZlcyBhbiBvYnNlcnZlciBmcm9tIHRoZSBfb2JzZXJ2ZXIgQXJyYXkuXG4gIHByaXZhdGUgX3JlbW92ZShvYnNlcnZlcjogbnVsbCB8IE9ic2VydmVyPFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcilcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
@@ -8,6 +8,7 @@ export function getEthereumProvider(sendAsync) {
8
8
  return JSON.parse(response.jsonAnyResponse);
9
9
  }
10
10
  return {
11
+ // @internal
11
12
  send(message, callback) {
12
13
  if (message && callback && callback instanceof Function) {
13
14
  request(message)
@@ -25,4 +26,4 @@ export function getEthereumProvider(sendAsync) {
25
26
  }
26
27
  };
27
28
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZXJuYWwvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUF3QjtJQUMxRCxLQUFLLFVBQVUsT0FBTyxDQUFDLE9BQTJCO1FBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDO1lBQy9CLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNkLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzNDLENBQUMsQ0FBQTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU87UUFFTCxJQUFJLENBQUMsT0FBMkIsRUFBRSxRQUFzRDtZQUN0RixJQUFJLE9BQU8sSUFBSSxRQUFRLElBQUksUUFBUSxZQUFZLFFBQVEsRUFBRTtnQkFDdkQsT0FBTyxDQUFDLE9BQU8sQ0FBQztxQkFDYixJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTthQUNuQjtpQkFBTTtnQkFDTCxNQUFNLElBQUksS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUE7YUFDakU7UUFDSCxDQUFDO1FBQ0QsU0FBUyxDQUFDLE9BQTJCLEVBQUUsUUFBcUQ7WUFDMUYsT0FBTyxDQUFDLE9BQU8sQ0FBQztpQkFDYixJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7aUJBQ25DLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNwQixDQUFDO0tBQ0YsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFNlbmRBc3luY1Jlc3BvbnNlIHtcbiAganNvbkFueVJlc3BvbnNlOiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kQXN5bmNSZXF1ZXN0IHtcbiAgaWQ6IG51bWJlclxuICBtZXRob2Q6IHN0cmluZ1xuICBqc29uUGFyYW1zOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgUlBDU2VuZGFibGVNZXNzYWdlID0ge1xuICBqc29ucnBjOiAnMi4wJ1xuICBpZDogbnVtYmVyXG4gIG1ldGhvZDogc3RyaW5nXG4gIHBhcmFtczogYW55W11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlRGljdCB7XG4gIFtrZXk6IHN0cmluZ106IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBTZW5kQXN5bmNUeXBlID0gKHBhcmFtczogU2VuZEFzeW5jUmVxdWVzdCkgPT4gUHJvbWlzZTxTZW5kQXN5bmNSZXNwb25zZT5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEV0aGVyZXVtUHJvdmlkZXIoc2VuZEFzeW5jOiBTZW5kQXN5bmNUeXBlKSB7XG4gIGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QobWVzc2FnZTogUlBDU2VuZGFibGVNZXNzYWdlKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZW5kQXN5bmMoe1xuICAgICAgaWQ6IG1lc3NhZ2UuaWQsXG4gICAgICBtZXRob2Q6IG1lc3NhZ2UubWV0aG9kLFxuICAgICAganNvblBhcmFtczogSlNPTi5zdHJpbmdpZnkobWVzc2FnZS5wYXJhbXMpXG4gICAgfSlcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXNwb25zZS5qc29uQW55UmVzcG9uc2UpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC8vIEBpbnRlcm5hbFxuICAgIHNlbmQobWVzc2FnZTogUlBDU2VuZGFibGVNZXNzYWdlLCBjYWxsYmFjaz86IChlcnJvcjogRXJyb3IgfCBudWxsLCByZXN1bHQ/OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgIGlmIChtZXNzYWdlICYmIGNhbGxiYWNrICYmIGNhbGxiYWNrIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgcmVxdWVzdChtZXNzYWdlKVxuICAgICAgICAgIC50aGVuKCh4OiBhbnkpID0+IGNhbGxiYWNrKG51bGwsIHgpKVxuICAgICAgICAgIC5jYXRjaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRGVjZW50cmFsYW5kIHByb3ZpZGVyIG9ubHkgYWxsb3dzIGFzeW5jIGNhbGxzJylcbiAgICAgIH1cbiAgICB9LFxuICAgIHNlbmRBc3luYyhtZXNzYWdlOiBSUENTZW5kYWJsZU1lc3NhZ2UsIGNhbGxiYWNrOiAoZXJyb3I6IEVycm9yIHwgbnVsbCwgcmVzdWx0PzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICByZXF1ZXN0KG1lc3NhZ2UpXG4gICAgICAgIC50aGVuKCh4OiBhbnkpID0+IGNhbGxiYWNrKG51bGwsIHgpKVxuICAgICAgICAuY2F0Y2goY2FsbGJhY2spXG4gICAgfVxuICB9XG59XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW50ZXJuYWwvcHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBLE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUF3QjtJQUMxRCxLQUFLLFVBQVUsT0FBTyxDQUFDLE9BQTJCO1FBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sU0FBUyxDQUFDO1lBQy9CLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNkLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN0QixVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzNDLENBQUMsQ0FBQTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUVELE9BQU87UUFDTCxZQUFZO1FBQ1osSUFBSSxDQUFDLE9BQTJCLEVBQUUsUUFBc0Q7WUFDdEYsSUFBSSxPQUFPLElBQUksUUFBUSxJQUFJLFFBQVEsWUFBWSxRQUFRLEVBQUU7Z0JBQ3ZELE9BQU8sQ0FBQyxPQUFPLENBQUM7cUJBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO3FCQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7YUFDbkI7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFBO2FBQ2pFO1FBQ0gsQ0FBQztRQUNELFNBQVMsQ0FBQyxPQUEyQixFQUFFLFFBQXFEO1lBQzFGLE9BQU8sQ0FBQyxPQUFPLENBQUM7aUJBQ2IsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUNuQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUE7UUFDcEIsQ0FBQztLQUNGLENBQUE7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBTZW5kQXN5bmNSZXNwb25zZSB7XG4gIGpzb25BbnlSZXNwb25zZTogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZEFzeW5jUmVxdWVzdCB7XG4gIGlkOiBudW1iZXJcbiAgbWV0aG9kOiBzdHJpbmdcbiAganNvblBhcmFtczogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFJQQ1NlbmRhYmxlTWVzc2FnZSA9IHtcbiAganNvbnJwYzogJzIuMCdcbiAgaWQ6IG51bWJlclxuICBtZXRob2Q6IHN0cmluZ1xuICBwYXJhbXM6IGFueVtdXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZURpY3Qge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgU2VuZEFzeW5jVHlwZSA9IChwYXJhbXM6IFNlbmRBc3luY1JlcXVlc3QpID0+IFByb21pc2U8U2VuZEFzeW5jUmVzcG9uc2U+XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFdGhlcmV1bVByb3ZpZGVyKHNlbmRBc3luYzogU2VuZEFzeW5jVHlwZSkge1xuICBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KG1lc3NhZ2U6IFJQQ1NlbmRhYmxlTWVzc2FnZSkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZEFzeW5jKHtcbiAgICAgIGlkOiBtZXNzYWdlLmlkLFxuICAgICAgbWV0aG9kOiBtZXNzYWdlLm1ldGhvZCxcbiAgICAgIGpzb25QYXJhbXM6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UucGFyYW1zKVxuICAgIH0pXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcG9uc2UuanNvbkFueVJlc3BvbnNlKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAvLyBAaW50ZXJuYWxcbiAgICBzZW5kKG1lc3NhZ2U6IFJQQ1NlbmRhYmxlTWVzc2FnZSwgY2FsbGJhY2s/OiAoZXJyb3I6IEVycm9yIHwgbnVsbCwgcmVzdWx0PzogYW55KSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICBpZiAobWVzc2FnZSAmJiBjYWxsYmFjayAmJiBjYWxsYmFjayBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgIHJlcXVlc3QobWVzc2FnZSlcbiAgICAgICAgICAudGhlbigoeDogYW55KSA9PiBjYWxsYmFjayhudWxsLCB4KSlcbiAgICAgICAgICAuY2F0Y2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RlY2VudHJhbGFuZCBwcm92aWRlciBvbmx5IGFsbG93cyBhc3luYyBjYWxscycpXG4gICAgICB9XG4gICAgfSxcbiAgICBzZW5kQXN5bmMobWVzc2FnZTogUlBDU2VuZGFibGVNZXNzYWdlLCBjYWxsYmFjazogKGVycm9yOiBFcnJvciB8IG51bGwsIHJlc3VsdD86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgcmVxdWVzdChtZXNzYWdlKVxuICAgICAgICAudGhlbigoeDogYW55KSA9PiBjYWxsYmFjayhudWxsLCB4KSlcbiAgICAgICAgLmNhdGNoKGNhbGxiYWNrKVxuICAgIH1cbiAgfVxufVxuIl19
@@ -18,12 +18,17 @@ export function createRendererTransport(engineApi) {
18
18
  await sendToRenderer(message);
19
19
  }
20
20
  catch (error) {
21
+ // this is the console.error of the scene
22
+ // eslint-disable-next-line no-console
21
23
  console.error(error);
22
24
  debugger;
23
25
  }
24
26
  },
25
27
  filter(message) {
26
- if (message.componentId > MAX_STATIC_COMPONENT) {
28
+ // Only send renderer components (Proto Generated)
29
+ if (
30
+ // filter out messages for non-core components
31
+ message.componentId > MAX_STATIC_COMPONENT) {
27
32
  return false;
28
33
  }
29
34
  return !!message;
@@ -32,4 +37,4 @@ export function createRendererTransport(engineApi) {
32
37
  };
33
38
  return rendererTransport;
34
39
  }
35
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXJUcmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQU9oRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBZ0M7SUFDdEUsS0FBSyxVQUFVLGNBQWMsQ0FBQyxPQUFtQjtRQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQTtRQUVGLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDckMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUN2QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBYztRQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDaEIsSUFBSTtnQkFDRixNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTthQUM5QjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUdkLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBQ3BCLFFBQVEsQ0FBQTthQUNUO1FBQ0gsQ0FBQztRQUNELE1BQU0sQ0FBQyxPQUF5QjtZQUU5QixJQUVHLE9BQWUsQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLEVBQ25EO2dCQUNBLE9BQU8sS0FBSyxDQUFBO2FBQ2I7WUFFRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDbEIsQ0FBQztRQUNELElBQUksRUFBRSxVQUFVO0tBQ2pCLENBQUE7SUFFRCxPQUFPLGlCQUFpQixDQUFBO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc3BvcnQsIFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IE1BWF9TVEFUSUNfQ09NUE9ORU5UIH0gZnJvbSAnQGRjbC9lY3MvZGlzdC9jb21wb25lbnRzL2NvbXBvbmVudC1udW1iZXInXG5pbXBvcnQgdHlwZSB7IENyZHRTZW5kVG9SZW5kZXJlclJlcXVlc3QsIENyZHRTZW5kVG9SZXNwb25zZSB9IGZyb20gJ35zeXN0ZW0vRW5naW5lQXBpJ1xuXG5leHBvcnQgdHlwZSBFbmdpbmVBcGlGb3JUcmFuc3BvcnQgPSB7XG4gIGNyZHRTZW5kVG9SZW5kZXJlcihib2R5OiBDcmR0U2VuZFRvUmVuZGVyZXJSZXF1ZXN0KTogUHJvbWlzZTxDcmR0U2VuZFRvUmVzcG9uc2U+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydChlbmdpbmVBcGk6IEVuZ2luZUFwaUZvclRyYW5zcG9ydCk6IFRyYW5zcG9ydCB7XG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUb1JlbmRlcmVyKG1lc3NhZ2U6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGVuZ2luZUFwaS5jcmR0U2VuZFRvUmVuZGVyZXIoe1xuICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSlcbiAgICB9KVxuXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGgpIHtcbiAgICAgIGlmIChyZW5kZXJlclRyYW5zcG9ydC5vbm1lc3NhZ2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBieXRlQXJyYXkgb2YgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZShieXRlQXJyYXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZW5kZXJlclRyYW5zcG9ydDogVHJhbnNwb3J0ID0ge1xuICAgIGFzeW5jIHNlbmQobWVzc2FnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2VuZFRvUmVuZGVyZXIobWVzc2FnZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIGNvbnNvbGUuZXJyb3Igb2YgdGhlIHNjZW5lXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGRlYnVnZ2VyXG4gICAgICB9XG4gICAgfSxcbiAgICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSkge1xuICAgICAgLy8gT25seSBzZW5kIHJlbmRlcmVyIGNvbXBvbmVudHMgKFByb3RvIEdlbmVyYXRlZClcbiAgICAgIGlmIChcbiAgICAgICAgLy8gZmlsdGVyIG91dCBtZXNzYWdlcyBmb3Igbm9uLWNvcmUgY29tcG9uZW50c1xuICAgICAgICAobWVzc2FnZSBhcyBhbnkpLmNvbXBvbmVudElkID4gTUFYX1NUQVRJQ19DT01QT05FTlRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICEhbWVzc2FnZVxuICAgIH0sXG4gICAgdHlwZTogJ3JlbmRlcmVyJ1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcmVyVHJhbnNwb3J0XG59XG4iXX0=
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXJUcmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW50ZXJuYWwvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQTtBQU9oRixNQUFNLFVBQVUsdUJBQXVCLENBQUMsU0FBZ0M7SUFDdEUsS0FBSyxVQUFVLGNBQWMsQ0FBQyxPQUFtQjtRQUMvQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztZQUNsRCxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDO1NBQzlCLENBQUMsQ0FBQTtRQUVGLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7Z0JBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtvQkFDckMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUN2QzthQUNGO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxpQkFBaUIsR0FBYztRQUNuQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDaEIsSUFBSTtnQkFDRixNQUFNLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQTthQUM5QjtZQUFDLE9BQU8sS0FBSyxFQUFFO2dCQUNkLHlDQUF5QztnQkFDekMsc0NBQXNDO2dCQUN0QyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUNwQixRQUFRLENBQUE7YUFDVDtRQUNILENBQUM7UUFDRCxNQUFNLENBQUMsT0FBeUI7WUFDOUIsa0RBQWtEO1lBQ2xEO1lBQ0UsOENBQThDO1lBQzdDLE9BQWUsQ0FBQyxXQUFXLEdBQUcsb0JBQW9CLEVBQ25EO2dCQUNBLE9BQU8sS0FBSyxDQUFBO2FBQ2I7WUFFRCxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDbEIsQ0FBQztRQUNELElBQUksRUFBRSxVQUFVO0tBQ2pCLENBQUE7SUFFRCxPQUFPLGlCQUFpQixDQUFBO0FBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc3BvcnQsIFRyYW5zcG9ydE1lc3NhZ2UgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IE1BWF9TVEFUSUNfQ09NUE9ORU5UIH0gZnJvbSAnQGRjbC9lY3MvZGlzdC9jb21wb25lbnRzL2NvbXBvbmVudC1udW1iZXInXG5pbXBvcnQgdHlwZSB7IENyZHRTZW5kVG9SZW5kZXJlclJlcXVlc3QsIENyZHRTZW5kVG9SZXNwb25zZSB9IGZyb20gJ35zeXN0ZW0vRW5naW5lQXBpJ1xuXG5leHBvcnQgdHlwZSBFbmdpbmVBcGlGb3JUcmFuc3BvcnQgPSB7XG4gIGNyZHRTZW5kVG9SZW5kZXJlcihib2R5OiBDcmR0U2VuZFRvUmVuZGVyZXJSZXF1ZXN0KTogUHJvbWlzZTxDcmR0U2VuZFRvUmVzcG9uc2U+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydChlbmdpbmVBcGk6IEVuZ2luZUFwaUZvclRyYW5zcG9ydCk6IFRyYW5zcG9ydCB7XG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRUb1JlbmRlcmVyKG1lc3NhZ2U6IFVpbnQ4QXJyYXkpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGVuZ2luZUFwaS5jcmR0U2VuZFRvUmVuZGVyZXIoe1xuICAgICAgZGF0YTogbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSlcbiAgICB9KVxuXG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGgpIHtcbiAgICAgIGlmIChyZW5kZXJlclRyYW5zcG9ydC5vbm1lc3NhZ2UpIHtcbiAgICAgICAgZm9yIChjb25zdCBieXRlQXJyYXkgb2YgcmVzcG9uc2UuZGF0YSkge1xuICAgICAgICAgIHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZShieXRlQXJyYXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZW5kZXJlclRyYW5zcG9ydDogVHJhbnNwb3J0ID0ge1xuICAgIGFzeW5jIHNlbmQobWVzc2FnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2VuZFRvUmVuZGVyZXIobWVzc2FnZSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIGNvbnNvbGUuZXJyb3Igb2YgdGhlIHNjZW5lXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGRlYnVnZ2VyXG4gICAgICB9XG4gICAgfSxcbiAgICBmaWx0ZXIobWVzc2FnZTogVHJhbnNwb3J0TWVzc2FnZSkge1xuICAgICAgLy8gT25seSBzZW5kIHJlbmRlcmVyIGNvbXBvbmVudHMgKFByb3RvIEdlbmVyYXRlZClcbiAgICAgIGlmIChcbiAgICAgICAgLy8gZmlsdGVyIG91dCBtZXNzYWdlcyBmb3Igbm9uLWNvcmUgY29tcG9uZW50c1xuICAgICAgICAobWVzc2FnZSBhcyBhbnkpLmNvbXBvbmVudElkID4gTUFYX1NUQVRJQ19DT01QT05FTlRcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICEhbWVzc2FnZVxuICAgIH0sXG4gICAgdHlwZTogJ3JlbmRlcmVyJ1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlcmVyVHJhbnNwb3J0XG59XG4iXX0=
package/math.d.ts CHANGED
@@ -1,3 +1,15 @@
1
+ /**
2
+ * This module is exposed by the sdk via `@dcl/sdk/math`
3
+ *
4
+
5
+ * @example
6
+ * ```tsx
7
+ * import { Color3, Vector3 } from '@dcl/sdk/math'
8
+ * ```
9
+ *
10
+ * @module Math & Colors
11
+ *
12
+ */
1
13
  export * from '@dcl/ecs-math';
2
14
  export * from '@dcl/ecs-math/dist/Matrix';
3
15
  export * from '@dcl/ecs-math/dist/Plane';
package/math.js CHANGED
@@ -1,5 +1,17 @@
1
+ /**
2
+ * This module is exposed by the sdk via `@dcl/sdk/math`
3
+ *
4
+
5
+ * @example
6
+ * ```tsx
7
+ * import { Color3, Vector3 } from '@dcl/sdk/math'
8
+ * ```
9
+ *
10
+ * @module Math & Colors
11
+ *
12
+ */
1
13
  export * from '@dcl/ecs-math';
2
14
  export * from '@dcl/ecs-math/dist/Matrix';
3
15
  export * from '@dcl/ecs-math/dist/Plane';
4
16
  export { Vector3 } from '@dcl/ecs-math';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYywwQkFBMEIsQ0FBQTtBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUaGlzIG1vZHVsZSBpcyBleHBvc2VkIGJ5IHRoZSBzZGsgdmlhIGBAZGNsL3Nkay9tYXRoYFxuICpcblxuKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBpbXBvcnQgeyBDb2xvcjMsIFZlY3RvcjMgfSBmcm9tICdAZGNsL3Nkay9tYXRoJ1xuICogYGBgXG4gKlxuICogQG1vZHVsZSBNYXRoICYgQ29sb3JzXG4gKlxuICovXG5cbmV4cG9ydCAqIGZyb20gJ0BkY2wvZWNzLW1hdGgnXG5leHBvcnQgKiBmcm9tICdAZGNsL2Vjcy1tYXRoL2Rpc3QvTWF0cml4J1xuZXhwb3J0ICogZnJvbSAnQGRjbC9lY3MtbWF0aC9kaXN0L1BsYW5lJ1xuZXhwb3J0IHsgVmVjdG9yMyB9IGZyb20gJ0BkY2wvZWNzLW1hdGgnXG4iXX0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgbW9kdWxlIGlzIGV4cG9zZWQgYnkgdGhlIHNkayB2aWEgYEBkY2wvc2RrL21hdGhgXG4gKlxuXG4qIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IENvbG9yMywgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlIE1hdGggJiBDb2xvcnNcbiAqXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnQGRjbC9lY3MtbWF0aCdcbmV4cG9ydCAqIGZyb20gJ0BkY2wvZWNzLW1hdGgvZGlzdC9NYXRyaXgnXG5leHBvcnQgKiBmcm9tICdAZGNsL2Vjcy1tYXRoL2Rpc3QvUGxhbmUnXG5leHBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGRjbC9lY3MtbWF0aCdcbiJdfQ==
package/message-bus.d.ts CHANGED
@@ -1,5 +1,9 @@
1
1
  import { Observer } from './internal/Observable';
2
2
  import { IEvents } from './observables';
3
+ /**
4
+ * @alpha
5
+ * @deprecated this will only exist for a few releases in ECS7
6
+ */
3
7
  export declare class MessageBus {
4
8
  private messageQueue;
5
9
  private flushing;
package/message-bus.js CHANGED
@@ -1,5 +1,9 @@
1
1
  import { onCommsMessage } from './observables';
2
2
  import * as communicationsController from '~system/CommunicationsController';
3
+ /**
4
+ * @alpha
5
+ * @deprecated this will only exist for a few releases in ECS7
6
+ */
3
7
  export class MessageBus {
4
8
  constructor() {
5
9
  this.messageQueue = [];
@@ -16,6 +20,7 @@ export class MessageBus {
16
20
  catch (_) { }
17
21
  });
18
22
  }
23
+ // @internal
19
24
  sendRaw(message) {
20
25
  this.messageQueue.push(message);
21
26
  this.flush();
@@ -39,4 +44,4 @@ export class MessageBus {
39
44
  });
40
45
  }
41
46
  }
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvbWVzc2FnZS1idXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFXLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN2RCxPQUFPLEtBQUssd0JBQXdCLE1BQU0sa0NBQWtDLENBQUE7QUFNNUUsTUFBTSxPQUFPLFVBQVU7SUFJckI7UUFIUSxpQkFBWSxHQUFhLEVBQUUsQ0FBQTtRQUMzQixhQUFRLEdBQUcsS0FBSyxDQUFBO0lBRVQsQ0FBQztJQUVoQixFQUFFLENBQUMsT0FBZSxFQUFFLFFBQThDO1FBQ2hFLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzlCLElBQUk7Z0JBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBRS9CLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7b0JBQ3pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtpQkFDOUI7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7UUFDaEIsQ0FBQyxDQUFFLENBQUE7SUFDTCxDQUFDO0lBR0QsT0FBTyxDQUFDLE9BQWU7UUFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFL0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO0lBQ2QsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFlLEVBQUUsT0FBeUI7UUFDN0MsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFBO1FBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDM0IsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDNUUsQ0FBQztJQUVPLEtBQUs7UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO1lBQUUsT0FBTTtRQUNyQyxJQUFJLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTTtRQUV6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRyxDQUFBO1FBQzFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM3QyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7WUFDckIsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFBO1FBQ2QsQ0FBQyxFQUNELENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDSixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQTtRQUN2QixDQUFDLENBQ0YsQ0FBQTtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmVyIH0gZnJvbSAnLi9pbnRlcm5hbC9PYnNlcnZhYmxlJ1xuaW1wb3J0IHsgSUV2ZW50cywgb25Db21tc01lc3NhZ2UgfSBmcm9tICcuL29ic2VydmFibGVzJ1xuaW1wb3J0ICogYXMgY29tbXVuaWNhdGlvbnNDb250cm9sbGVyIGZyb20gJ35zeXN0ZW0vQ29tbXVuaWNhdGlvbnNDb250cm9sbGVyJ1xuXG4vKipcbiAqIEBhbHBoYVxuICogQGRlcHJlY2F0ZWQgdGhpcyB3aWxsIG9ubHkgZXhpc3QgZm9yIGEgZmV3IHJlbGVhc2VzIGluIEVDUzdcbiAqL1xuZXhwb3J0IGNsYXNzIE1lc3NhZ2VCdXMge1xuICBwcml2YXRlIG1lc3NhZ2VRdWV1ZTogc3RyaW5nW10gPSBbXVxuICBwcml2YXRlIGZsdXNoaW5nID0gZmFsc2VcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgb24obWVzc2FnZTogc3RyaW5nLCBjYWxsYmFjazogKHZhbHVlOiBhbnksIHNlbmRlcjogc3RyaW5nKSA9PiB2b2lkKTogT2JzZXJ2ZXI8SUV2ZW50c1snY29tbXMnXT4ge1xuICAgIHJldHVybiBvbkNvbW1zTWVzc2FnZS5hZGQoKGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG0gPSBKU09OLnBhcnNlKGUubWVzc2FnZSlcblxuICAgICAgICBpZiAobS5tZXNzYWdlID09PSBtZXNzYWdlKSB7XG4gICAgICAgICAgY2FsbGJhY2sobS5wYXlsb2FkLCBlLnNlbmRlcilcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoXykge31cbiAgICB9KSFcbiAgfVxuXG4gIC8vIEBpbnRlcm5hbFxuICBzZW5kUmF3KG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMubWVzc2FnZVF1ZXVlLnB1c2gobWVzc2FnZSlcblxuICAgIHRoaXMuZmx1c2goKVxuICB9XG4gIGVtaXQobWVzc2FnZTogc3RyaW5nLCBwYXlsb2FkOiBSZWNvcmQ8YW55LCBhbnk+KSB7XG4gICAgY29uc3QgbWVzc2FnZVRvU2VuZCA9IEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZSwgcGF5bG9hZCB9KVxuICAgIHRoaXMuc2VuZFJhdyhtZXNzYWdlVG9TZW5kKVxuICAgIG9uQ29tbXNNZXNzYWdlLm5vdGlmeU9ic2VydmVycyh7IG1lc3NhZ2U6IG1lc3NhZ2VUb1NlbmQsIHNlbmRlcjogJ3NlbGYnIH0pXG4gIH1cblxuICBwcml2YXRlIGZsdXNoKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlUXVldWUubGVuZ3RoKSByZXR1cm5cbiAgICBpZiAodGhpcy5mbHVzaGluZykgcmV0dXJuXG5cbiAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5tZXNzYWdlUXVldWUuc2hpZnQoKSFcbiAgICBjb21tdW5pY2F0aW9uc0NvbnRyb2xsZXIuc2VuZCh7IG1lc3NhZ2UgfSkudGhlbihcbiAgICAgIChfKSA9PiB7XG4gICAgICAgIHRoaXMuZmx1c2hpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmZsdXNoKClcbiAgICAgIH0sXG4gICAgICAoXykgPT4ge1xuICAgICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2VcbiAgICAgIH1cbiAgICApXG4gIH1cbn1cbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvbWVzc2FnZS1idXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFXLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN2RCxPQUFPLEtBQUssd0JBQXdCLE1BQU0sa0NBQWtDLENBQUE7QUFFNUU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFJckI7UUFIUSxpQkFBWSxHQUFhLEVBQUUsQ0FBQTtRQUMzQixhQUFRLEdBQUcsS0FBSyxDQUFBO0lBRVQsQ0FBQztJQUVoQixFQUFFLENBQUMsT0FBZSxFQUFFLFFBQThDO1FBQ2hFLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzlCLElBQUk7Z0JBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBRS9CLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7b0JBQ3pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtpQkFDOUI7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7UUFDaEIsQ0FBQyxDQUFFLENBQUE7SUFDTCxDQUFDO0lBRUQsWUFBWTtJQUNaLE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRS9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNkLENBQUM7SUFDRCxJQUFJLENBQUMsT0FBZSxFQUFFLE9BQXlCO1FBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzNCLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUFFLE9BQU07UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU07UUFFekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUcsQ0FBQTtRQUMxQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDN0MsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNkLENBQUMsRUFDRCxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDdkIsQ0FBQyxDQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gJy4vaW50ZXJuYWwvT2JzZXJ2YWJsZSdcbmltcG9ydCB7IElFdmVudHMsIG9uQ29tbXNNZXNzYWdlIH0gZnJvbSAnLi9vYnNlcnZhYmxlcydcbmltcG9ydCAqIGFzIGNvbW11bmljYXRpb25zQ29udHJvbGxlciBmcm9tICd+c3lzdGVtL0NvbW11bmljYXRpb25zQ29udHJvbGxlcidcblxuLyoqXG4gKiBAYWxwaGFcbiAqIEBkZXByZWNhdGVkIHRoaXMgd2lsbCBvbmx5IGV4aXN0IGZvciBhIGZldyByZWxlYXNlcyBpbiBFQ1M3XG4gKi9cbmV4cG9ydCBjbGFzcyBNZXNzYWdlQnVzIHtcbiAgcHJpdmF0ZSBtZXNzYWdlUXVldWU6IHN0cmluZ1tdID0gW11cbiAgcHJpdmF0ZSBmbHVzaGluZyA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG9uKG1lc3NhZ2U6IHN0cmluZywgY2FsbGJhY2s6ICh2YWx1ZTogYW55LCBzZW5kZXI6IHN0cmluZykgPT4gdm9pZCk6IE9ic2VydmVyPElFdmVudHNbJ2NvbW1zJ10+IHtcbiAgICByZXR1cm4gb25Db21tc01lc3NhZ2UuYWRkKChlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpXG5cbiAgICAgICAgaWYgKG0ubWVzc2FnZSA9PT0gbWVzc2FnZSkge1xuICAgICAgICAgIGNhbGxiYWNrKG0ucGF5bG9hZCwgZS5zZW5kZXIpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSkhXG4gIH1cblxuICAvLyBAaW50ZXJuYWxcbiAgc2VuZFJhdyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VRdWV1ZS5wdXNoKG1lc3NhZ2UpXG5cbiAgICB0aGlzLmZsdXNoKClcbiAgfVxuICBlbWl0KG1lc3NhZ2U6IHN0cmluZywgcGF5bG9hZDogUmVjb3JkPGFueSwgYW55Pikge1xuICAgIGNvbnN0IG1lc3NhZ2VUb1NlbmQgPSBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2UsIHBheWxvYWQgfSlcbiAgICB0aGlzLnNlbmRSYXcobWVzc2FnZVRvU2VuZClcbiAgICBvbkNvbW1zTWVzc2FnZS5ub3RpZnlPYnNlcnZlcnMoeyBtZXNzYWdlOiBtZXNzYWdlVG9TZW5kLCBzZW5kZXI6ICdzZWxmJyB9KVxuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaCgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZVF1ZXVlLmxlbmd0aCkgcmV0dXJuXG4gICAgaWYgKHRoaXMuZmx1c2hpbmcpIHJldHVyblxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnNoaWZ0KCkhXG4gICAgY29tbXVuaWNhdGlvbnNDb250cm9sbGVyLnNlbmQoeyBtZXNzYWdlIH0pLnRoZW4oXG4gICAgICAoXykgPT4ge1xuICAgICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5mbHVzaCgpXG4gICAgICB9LFxuICAgICAgKF8pID0+IHtcbiAgICAgICAgdGhpcy5mbHVzaGluZyA9IGZhbHNlXG4gICAgICB9XG4gICAgKVxuICB9XG59XG4iXX0=