@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.
- package/composite-provider.js +3 -1
- package/ecs.d.ts +15 -0
- package/ecs.js +16 -1
- package/ethereum-provider/index.d.ts +19 -0
- package/ethereum-provider/index.js +20 -1
- package/ethereum-provider/text-encoder.js +2 -1
- package/index.js +9 -1
- package/internal/Observable.d.ts +157 -1
- package/internal/Observable.js +140 -2
- package/internal/provider.js +2 -1
- package/internal/transports/rendererTransport.js +7 -2
- package/math.d.ts +12 -0
- package/math.js +13 -1
- package/message-bus.d.ts +4 -0
- package/message-bus.js +6 -1
- package/network/entities.js +29 -1
- package/network/filter.js +5 -1
- package/network/index.js +2 -1
- package/network/message-bus-sync.js +18 -1
- package/network/state.js +2 -1
- package/network/utils.d.ts +15 -0
- package/network/utils.js +49 -1
- package/observables.d.ts +205 -0
- package/observables.js +68 -1
- package/package.json +6 -6
- package/players/index.d.ts +3 -0
- package/players/index.js +6 -1
- package/react-ecs.d.ts +18 -0
- package/react-ecs.js +19 -1
- package/src/ethereum-provider/index.ts +4 -0
- package/src/internal/Observable.ts +3 -0
- package/testing/assert.js +21 -1
- package/testing/index.d.ts +5 -0
- package/testing/index.js +9 -3
- package/testing/runtime.d.ts +3 -0
- package/testing/runtime.js +30 -1
- package/testing/types.d.ts +5 -0
- package/tsconfig.json +2 -1
package/internal/Observable.js
CHANGED
@@ -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
|
-
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT2JzZXJ2YWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbnRlcm5hbC9PYnNlcnZhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQjs7OztHQUlHO0FBQ0gsTUFBTSxPQUFPLGtCQUFrQjtJQTJCN0I7Ozs7OztPQU1HO0lBQ0gsWUFBWSxJQUFZLEVBQUUsaUJBQWlCLEdBQUcsS0FBSyxFQUFFLE1BQVksRUFBRSxhQUFtQjtRQUNwRixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxTQUFTLENBQUMsSUFBWSxFQUFFLGlCQUFpQixHQUFHLEtBQUssRUFBRSxNQUFZLEVBQUUsYUFBbUI7UUFDekYsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUE7UUFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLGlCQUFpQixDQUFBO1FBQzFDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFBO1FBQ2xDLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztDQUNGO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sT0FBTyxRQUFRO0lBU25COzs7OztPQUtHO0lBQ0g7SUFDRTs7T0FFRztJQUNJLFFBQWdFO0lBQ3ZFOztPQUVHO0lBQ0ksSUFBWTtJQUNuQjs7T0FFRztJQUNJLFFBQWEsSUFBSTtRQVJqQixhQUFRLEdBQVIsUUFBUSxDQUF3RDtRQUloRSxTQUFJLEdBQUosSUFBSSxDQUFRO1FBSVosVUFBSyxHQUFMLEtBQUssQ0FBWTtRQTFCMUI7O1dBRUc7UUFDSSx5QkFBb0IsR0FBRyxLQUFLLENBQUE7UUFFbkMseUJBQXlCO1FBQ2xCLHdCQUFtQixHQUFHLEtBQUssQ0FBQTtJQXFCL0IsQ0FBQztDQUNMO0FBRUQ7Ozs7Ozs7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SSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pDLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQ3hDLE9BQU8sSUFBSSxDQUFBO2FBQ1o7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQXFCO1FBQzVDLFFBQVEsQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDckMsUUFBUSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQTtRQUNuQyxPQUFPLENBQUMsT0FBTyxFQUFFO2FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDaEUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN6QixDQUFDO0lBRUQsNEZBQTRGO0lBQzVGLGdEQUFnRDtJQUN4QyxPQUFPLENBQUMsUUFBNEI7UUFDMUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLE9BQU8sS0FBSyxDQUFBO1NBQ2I7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUUvQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDaEMsT0FBTyxJQUFJLENBQUE7U0FDWjtRQUVELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyogaXN0YW5idWwgaWdub3JlIGZpbGUgKi9cbi8qKlxuICogQSBjbGFzcyBzZXJ2ZXMgYXMgYSBtZWRpdW0gYmV0d2VlbiB0aGUgb2JzZXJ2YWJsZSBhbmQgaXRzIG9ic2VydmVyc1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXJFdmVudFN0YXRlIHtcbiAgLyoqXG4gICAqIEFuIE9ic2VydmVyIGNhbiBzZXQgdGhpcyBwcm9wZXJ0eSB0byB0cnVlIHRvIHByZXZlbnQgc3Vic2VxdWVudCBvYnNlcnZlcnMgb2YgYmVpbmcgbm90aWZpZWRcbiAgICovXG4gIHB1YmxpYyBza2lwTmV4dE9ic2VydmVycyE6IGJvb2xlYW5cblxuICAvKipcbiAgICogR2V0IHRoZSBtYXNrIHZhbHVlIHRoYXQgd2VyZSB1c2VkIHRvIHRyaWdnZXIgdGhlIGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBFdmVudFN0YXRlIG9iamVjdFxuICAgKi9cbiAgcHVibGljIG1hc2shOiBudW1iZXJcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB0aGF0IG9yaWdpbmFsbHkgbm90aWZpZWQgdGhlIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgdGFyZ2V0PzogYW55XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IG9iamVjdCBpbiB0aGUgYnViYmxpbmcgcGhhc2VcbiAgICovXG4gIHB1YmxpYyBjdXJyZW50VGFyZ2V0PzogYW55XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBwb3B1bGF0ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBsYXN0IGZ1bmN0aW9uIHRoYXQgd2FzIGV4ZWN1dGVkLlxuICAgKiBJZiBpdCBpcyB0aGUgZmlyc3QgZnVuY3Rpb24gaW4gdGhlIGNhbGxiYWNrIGNoYWluIGl0IHdpbGwgYmUgdGhlIGV2ZW50IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgbGFzdFJldHVyblZhbHVlPzogYW55XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBFdmVudFN0YXRlXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBhc3NvY2lhdGVkIHdpdGggdGhpcyBzdGF0ZVxuICAgKiBAcGFyYW0gc2tpcE5leHRPYnNlcnZlcnMgLSBkZWZpbmVzIGEgZmxhZyB3aGljaCB3aWxsIGluc3RydWN0IHRoZSBvYnNlcnZhYmxlIHRvIHNraXAgZm9sbG93aW5nIG9ic2VydmVycyB3aGVuIHNldCB0byB0cnVlXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IC0gZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihtYXNrOiBudW1iZXIsIHNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2UsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSkge1xuICAgIHRoaXMuaW5pdGFsaXplKG1hc2ssIHNraXBOZXh0T2JzZXJ2ZXJzLCB0YXJnZXQsIGN1cnJlbnRUYXJnZXQpXG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKiBAcGFyYW0gbWFzayAtIGRlZmluZXMgdGhlIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3RhdGVcbiAgICogQHBhcmFtIHNraXBOZXh0T2JzZXJ2ZXJzIC0gZGVmaW5lcyBhIGZsYWcgd2hpY2ggd2lsbCBpbnN0cnVjdCB0aGUgb2JzZXJ2YWJsZSB0byBza2lwIGZvbGxvd2luZyBvYnNlcnZlcnMgd2hlbiBzZXQgdG8gdHJ1ZVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgb3JpZ2luYWwgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcGFyYW0gY3VycmVudFRhcmdldCAtIGRlZmluZXMgdGhlIGN1cnJlbnQgdGFyZ2V0IG9mIHRoZSBzdGF0ZVxuICAgKiBAcmV0dXJucyB0aGUgY3VycmVudCBldmVudCBzdGF0ZVxuICAgKi9cbiAgcHVibGljIGluaXRhbGl6ZShtYXNrOiBudW1iZXIsIHNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2UsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSk6IE9ic2VydmVyRXZlbnRTdGF0ZSB7XG4gICAgdGhpcy5tYXNrID0gbWFza1xuICAgIHRoaXMuc2tpcE5leHRPYnNlcnZlcnMgPSBza2lwTmV4dE9ic2VydmVyc1xuICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHJldHVybiB0aGlzXG4gIH1cbn1cblxuLyoqXG4gKiBSZXByZXNlbnQgYW4gT2JzZXJ2ZXIgcmVnaXN0ZXJlZCB0byBhIGdpdmVuIE9ic2VydmFibGUgb2JqZWN0LlxuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2ZXI8VD4ge1xuICAvKipcbiAgICogR2V0cyBvciBzZXRzIGEgcHJvcGVydHkgZGVmaW5pbmcgdGhhdCB0aGUgb2JzZXJ2ZXIgYXMgdG8gYmUgdW5yZWdpc3RlcmVkIGFmdGVyIHRoZSBuZXh0IG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIHVucmVnaXN0ZXJPbk5leHRDYWxsID0gZmFsc2VcblxuICAvKiogRm9yIGludGVybmFsIHVzYWdlICovXG4gIHB1YmxpYyBfd2lsbEJlVW5yZWdpc3RlcmVkID0gZmFsc2VcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZlclxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSBkZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAqIEBwYXJhbSBzY29wZSAtIGRlZmluZXMgdGhlIGN1cnJlbnQgc2NvcGUgdXNlZCB0byByZXN0b3JlIHRoZSBKUyBjb250ZXh0XG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIG9ic2VydmVyIGlzIG5vdGlmaWVkXG4gICAgICovXG4gICAgcHVibGljIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgb2JzZXJ2ZXIgKHVzZWQgdG8gZmlsdGVyIG5vdGlmaWNhdGlvbnMpXG4gICAgICovXG4gICAgcHVibGljIG1hc2s6IG51bWJlcixcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBjdXJyZW50IHNjb3BlIHVzZWQgdG8gcmVzdG9yZSB0aGUgSlMgY29udGV4dFxuICAgICAqL1xuICAgIHB1YmxpYyBzY29wZTogYW55ID0gbnVsbFxuICApIHt9XG59XG5cbi8qKlxuICogVGhlIE9ic2VydmFibGUgY2xhc3MgaXMgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIE9ic2VydmFibGUgcGF0dGVybi5cbiAqXG4gKiBUaGVyZSdzIG9uZSBzbGlnaHQgcGFydGljdWxhcml0eSB0aG91Z2g6IGEgZ2l2ZW4gT2JzZXJ2YWJsZSBjYW4gbm90aWZ5IGl0cyBvYnNlcnZlciB1c2luZyBhIHBhcnRpY3VsYXIgbWFzayB2YWx1ZSwgb25seSB0aGUgT2JzZXJ2ZXJzIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIG1hc2sgdmFsdWUgd2lsbCBiZSBub3RpZmllZC5cbiAqIFRoaXMgZW5hYmxlIGEgbW9yZSBmaW5lIGdyYWluZWQgZXhlY3V0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIHJlbHkgb24gbXVsdGlwbGUgZGlmZmVyZW50IE9ic2VydmFibGUgb2JqZWN0cy5cbiAqIEZvciBpbnN0YW5jZSB5b3UgbWF5IGhhdmUgYSBnaXZlbiBPYnNlcnZhYmxlIHRoYXQgaGF2ZSBmb3VyIGRpZmZlcmVudCB0eXBlcyBvZiBub3RpZmljYXRpb25zOiBNb3ZlIChtYXNrID0gMHgwMSksIFN0b3AgKG1hc2sgPSAweDAyKSwgVHVybiBSaWdodCAobWFzayA9IDBYMDQpLCBUdXJuIExlZnQgKG1hc2sgPSAwWDA4KS5cbiAqIEEgZ2l2ZW4gb2JzZXJ2ZXIgY2FuIHJlZ2lzdGVyIGl0c2VsZiB3aXRoIG9ubHkgTW92ZSBhbmQgU3RvcCAobWFzayA9IDB4MDMpLCB0aGVuIGl0IHdpbGwgb25seSBiZSBub3RpZmllZCB3aGVuIG9uZSBvZiB0aGVzZSB0d28gb2NjdXJzIGFuZCB3aWxsIG5ldmVyIGJlIGZvciBUdXJuIExlZnQvUmlnaHQuXG4gKlxuICogQHB1YmxpY1xuICogQGRlcHJlY2F0ZWQgVGhpcyBmdW5jdGlvbiBpcyBhbiBpbmhlcml0YW5jZSBvZiBFQ1M2LCBpdCdzIGhlcmUgdGVtcG9yYXJ5IGZvciB0aGUgZmVhdHVyZSBwYXJpdHksIHBsZWFzZSByZWFkIHRoZSBuZXdzIGFuZCBkb2NzIHRvIGtub3cgaG93IGhhbmRsZSB3aGVuIGl0J3MgcmVtb3ZlZFxuICovXG5leHBvcnQgY2xhc3MgT2JzZXJ2YWJsZTxUPiB7XG4gIHByaXZhdGUgX29ic2VydmVycyA9IG5ldyBBcnJheTxPYnNlcnZlcjxUPj4oKVxuXG4gIHByaXZhdGUgX2V2ZW50U3RhdGU6IE9ic2VydmVyRXZlbnRTdGF0ZVxuXG4gIHByaXZhdGUgX29uT2JzZXJ2ZXJBZGRlZDogbnVsbCB8ICgob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSA9IG51bGxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBvYnNlcnZhYmxlXG4gICAqIEBwYXJhbSBvbk9ic2VydmVyQWRkZWQgLSBkZWZpbmVzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGEgbmV3IG9ic2VydmVyIGlzIGFkZGVkXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihvbk9ic2VydmVyQWRkZWQ/OiAob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB2b2lkKSB7XG4gICAgdGhpcy5fZXZlbnRTdGF0ZSA9IG5ldyBPYnNlcnZlckV2ZW50U3RhdGUoMClcblxuICAgIGlmIChvbk9ic2VydmVyQWRkZWQpIHtcbiAgICAgIHRoaXMuX29uT2JzZXJ2ZXJBZGRlZCA9IG9uT2JzZXJ2ZXJBZGRlZFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgT2JzZXJ2ZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHBhcmFtIG1hc2sgLSB0aGUgbWFzayB1c2VkIHRvIGZpbHRlciBvYnNlcnZlcnNcbiAgICogQHBhcmFtIGluc2VydEZpcnN0IC0gaWYgdHJ1ZSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgZmlyc3QgcG9zaXRpb24sIGhlbmNlIGV4ZWN1dGVkIGJlZm9yZSB0aGUgb3RoZXJzIG9uZXMuIElmIGZhbHNlIChkZWZhdWx0IGJlaGF2aW9yKSB0aGUgY2FsbGJhY2sgd2lsbCBiZSBpbnNlcnRlZCBhdCB0aGUgbGFzdCBwb3NpdGlvbiwgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHRoZSBvdGhlcnMgYWxyZWFkeSBwcmVzZW50LlxuICAgKiBAcGFyYW0gc2NvcGUgLSBvcHRpb25hbCBzY29wZSBmb3IgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBmcm9tXG4gICAqIEBwYXJhbSB1bnJlZ2lzdGVyT25GaXJzdENhbGwgLSBkZWZpbmVzIGlmIHRoZSBvYnNlcnZlciBhcyB0byBiZSB1bnJlZ2lzdGVyZWQgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrXG4gICAqL1xuICBwdWJsaWMgYWRkKFxuICAgIGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsXG4gICAgbWFzazogbnVtYmVyID0gLTEsXG4gICAgaW5zZXJ0Rmlyc3QgPSBmYWxzZSxcbiAgICBzY29wZTogYW55ID0gbnVsbCxcbiAgICB1bnJlZ2lzdGVyT25GaXJzdENhbGwgPSBmYWxzZVxuICApOiBudWxsIHwgT2JzZXJ2ZXI8VD4ge1xuICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgT2JzZXJ2ZXIoY2FsbGJhY2ssIG1hc2ssIHNjb3BlKVxuICAgIG9ic2VydmVyLnVucmVnaXN0ZXJPbk5leHRDYWxsID0gdW5yZWdpc3Rlck9uRmlyc3RDYWxsXG5cbiAgICBpZiAoaW5zZXJ0Rmlyc3QpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy51bnNoaWZ0KG9ic2VydmVyKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlcnMucHVzaChvYnNlcnZlcilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb25PYnNlcnZlckFkZGVkKSB7XG4gICAgICB0aGlzLl9vbk9ic2VydmVyQWRkZWQob2JzZXJ2ZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9ic2VydmVyXG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9ic2VydmVyIHdpdGggdGhlIHNwZWNpZmllZCBjYWxsYmFjayBhbmQgdW5yZWdpc3RlcnMgYWZ0ZXIgdGhlIG5leHQgbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIHRoZSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZm9yIHRoYXQgT2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdGhlIG5ldyBvYnNlcnZlciBjcmVhdGVkIGZvciB0aGUgY2FsbGJhY2tcbiAgICovXG4gIHB1YmxpYyBhZGRPbmNlKGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQpOiBudWxsIHwgT2JzZXJ2ZXI8VD4ge1xuICAgIHJldHVybiB0aGlzLmFkZChjYWxsYmFjaywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdHJ1ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gT2JzZXJ2ZXIgZnJvbSB0aGUgT2JzZXJ2YWJsZSBvYmplY3RcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gdGhlIGluc3RhbmNlIG9mIHRoZSBPYnNlcnZlciB0byByZW1vdmVcbiAgICogQHJldHVybnMgZmFsc2UgaWYgaXQgZG9lc24ndCBiZWxvbmcgdG8gdGhpcyBPYnNlcnZhYmxlXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKG9ic2VydmVyOiBudWxsIHwgT2JzZXJ2ZXI8VD4pOiBib29sZWFuIHtcbiAgICBpZiAoIW9ic2VydmVyKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX29ic2VydmVycy5pbmRleE9mKG9ic2VydmVyKVxuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKG9ic2VydmVyKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBPYnNlcnZhYmxlIG9iamVjdFxuICAgKiBAcGFyYW0gY2FsbGJhY2sgLSB0aGUgY2FsbGJhY2sgdG8gcmVtb3ZlXG4gICAqIEBwYXJhbSBzY29wZSAtIG9wdGlvbmFsIHNjb3BlLiBJZiB1c2VkIG9ubHkgdGhlIGNhbGxiYWNrcyB3aXRoIHRoaXMgc2NvcGUgd2lsbCBiZSByZW1vdmVkXG4gICAqIEByZXR1cm5zIGZhbHNlIGlmIGl0IGRvZXNuJ3QgYmVsb25nIHRvIHRoaXMgT2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIHJlbW92ZUNhbGxiYWNrKGNhbGxiYWNrOiAoZXZlbnREYXRhOiBULCBldmVudFN0YXRlOiBPYnNlcnZlckV2ZW50U3RhdGUpID0+IHZvaWQsIHNjb3BlPzogYW55KTogYm9vbGVhbiB7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX29ic2VydmVycy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmICh0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLmNhbGxiYWNrID09PSBjYWxsYmFjayAmJiAoIXNjb3BlIHx8IHNjb3BlID09PSB0aGlzLl9vYnNlcnZlcnNbaW5kZXhdLnNjb3BlKSkge1xuICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIodGhpcy5fb2JzZXJ2ZXJzW2luZGV4XSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZnkgYWxsIE9ic2VydmVycyBieSBjYWxsaW5nIHRoZWlyIHJlc3BlY3RpdmUgY2FsbGJhY2sgd2l0aCB0aGUgZ2l2ZW4gZGF0YVxuICAgKiBXaWxsIHJldHVybiB0cnVlIGlmIGFsbCBvYnNlcnZlcnMgd2VyZSBleGVjdXRlZCwgZmFsc2UgaWYgYW4gb2JzZXJ2ZXIgc2V0IHNraXBOZXh0T2JzZXJ2ZXJzIHRvIHRydWUsIHRoZW4gcHJldmVudCB0aGUgc3Vic2VxdWVudCBvbmVzIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIGV2ZW50RGF0YSAtIGRlZmluZXMgdGhlIGRhdGEgdG8gc2VuZCB0byBhbGwgb2JzZXJ2ZXJzXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayBvZiB0aGUgY3VycmVudCBub3RpZmljYXRpb24gKG9ic2VydmVycyB3aXRoIGluY29tcGF0aWJsZSBtYXNrIChpZSBtYXNrICYgb2JzZXJ2ZXIubWFzayA9PT0gMCkgd2lsbCBub3QgYmUgbm90aWZpZWQpXG4gICAqIEBwYXJhbSB0YXJnZXQgLSBkZWZpbmVzIHRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEBwYXJhbSBjdXJyZW50VGFyZ2V0IC0gZGVmaW5lcyB0aGUgY3VycmVudCB0YXJnZXQgb2YgdGhlIHN0YXRlXG4gICAqIEByZXR1cm5zIGZhbHNlIGlmIHRoZSBjb21wbGV0ZSBvYnNlcnZlciBjaGFpbiB3YXMgbm90IHByb2Nlc3NlZCAoYmVjYXVzZSBvbmUgb2JzZXJ2ZXIgc2V0IHRoZSBza2lwTmV4dE9ic2VydmVycyB0byB0cnVlKVxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVycyhldmVudERhdGE6IFQsIG1hc2s6IG51bWJlciA9IC0xLCB0YXJnZXQ/OiBhbnksIGN1cnJlbnRUYXJnZXQ/OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX29ic2VydmVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLl9ldmVudFN0YXRlXG4gICAgc3RhdGUubWFzayA9IG1hc2tcbiAgICBzdGF0ZS50YXJnZXQgPSB0YXJnZXRcbiAgICBzdGF0ZS5jdXJyZW50VGFyZ2V0ID0gY3VycmVudFRhcmdldFxuICAgIHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzID0gZmFsc2VcbiAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBldmVudERhdGFcblxuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChvYnMubWFzayAmIG1hc2spIHtcbiAgICAgICAgaWYgKG9icy5zY29wZSkge1xuICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IG9icy5jYWxsYmFjay5hcHBseShvYnMuc2NvcGUsIFtldmVudERhdGEsIHN0YXRlXSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdGF0ZS5sYXN0UmV0dXJuVmFsdWUgPSBvYnMuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvYnMudW5yZWdpc3Rlck9uTmV4dENhbGwpIHtcbiAgICAgICAgICB0aGlzLl9kZWZlclVucmVnaXN0ZXIob2JzKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQ2FsbGluZyB0aGlzIHdpbGwgZXhlY3V0ZSBlYWNoIGNhbGxiYWNrLCBleHBlY3RpbmcgaXQgdG8gYmUgYSBwcm9taXNlIG9yIHJldHVybiBhIHZhbHVlLlxuICAgKiBJZiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNoYWluIG9uZSBmdW5jdGlvbiBmYWlscywgdGhlIHByb21pc2Ugd2lsbCBmYWlsIGFuZCB0aGUgZXhlY3V0aW9uIHdpbGwgbm90IGNvbnRpbnVlLlxuICAgKiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgY2hhaW4gb2YgZXZlbnRzIChzb21ldGltZXMgYXN5bmMgZXZlbnRzKSBpcyBuZWVkZWQgdG8gaW5pdGlhbGl6ZSBhIGNlcnRhaW4gb2JqZWN0XG4gICAqIGFuZCBpdCBpcyBjcnVjaWFsIHRoYXQgYWxsIGNhbGxiYWNrcyB3aWxsIGJlIGV4ZWN1dGVkLlxuICAgKiBUaGUgb3JkZXIgb2YgdGhlIGNhbGxiYWNrcyBpcyBrZXB0LCBjYWxsYmFja3MgYXJlIG5vdCBleGVjdXRlZCBwYXJhbGxlbC5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50RGF0YSAtIFRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKiBAcGFyYW0gdGFyZ2V0IC0gZGVmaW5lcyB0aGUgY2FsbGJhY2sgdGFyZ2V0IChzZWUgRXZlbnRTdGF0ZSlcbiAgICogQHBhcmFtIGN1cnJlbnRUYXJnZXQgLSBkZWZpbmVzIGhlIGN1cnJlbnQgb2JqZWN0IGluIHRoZSBidWJibGluZyBwaGFzZVxuICAgKiBAcmV0dXJucyB3aWxsIHJldHVybiBhIFByb21pc2UgdGhhbiByZXNvbHZlcyB3aGVuIGFsbCBjYWxsYmFja3MgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyc1dpdGhQcm9taXNlKGV2ZW50RGF0YTogVCwgbWFzazogbnVtYmVyID0gLTEsIHRhcmdldD86IGFueSwgY3VycmVudFRhcmdldD86IGFueSk6IFByb21pc2U8VD4ge1xuICAgIC8vIGNyZWF0ZSBhbiBlbXB0eSBwcm9taXNlXG4gICAgbGV0IHA6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZShldmVudERhdGEpXG5cbiAgICAvLyBubyBvYnNlcnZlcnM/IHJldHVybiB0aGlzIHByb21pc2UuXG4gICAgaWYgKCF0aGlzLl9vYnNlcnZlcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gcFxuICAgIH1cblxuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUudGFyZ2V0ID0gdGFyZ2V0XG4gICAgc3RhdGUuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXRcbiAgICBzdGF0ZS5za2lwTmV4dE9ic2VydmVycyA9IGZhbHNlXG5cbiAgICAvLyBleGVjdXRlIG9uZSBjYWxsYmFjayBhZnRlciBhbm90aGVyIChub3QgdXNpbmcgUHJvbWlzZS5hbGwsIHRoZSBvcmRlciBpcyBpbXBvcnRhbnQpXG4gICAgdGhpcy5fb2JzZXJ2ZXJzLmZvckVhY2goKG9icykgPT4ge1xuICAgICAgaWYgKHN0YXRlLnNraXBOZXh0T2JzZXJ2ZXJzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5fd2lsbEJlVW5yZWdpc3RlcmVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKG9icy5tYXNrICYgbWFzaykge1xuICAgICAgICBpZiAob2JzLnNjb3BlKSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrLmFwcGx5KG9icy5zY29wZSwgW2V2ZW50RGF0YSwgc3RhdGVdKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcCA9IHAudGhlbigobGFzdFJldHVybmVkVmFsdWUpID0+IHtcbiAgICAgICAgICAgIHN0YXRlLmxhc3RSZXR1cm5WYWx1ZSA9IGxhc3RSZXR1cm5lZFZhbHVlXG4gICAgICAgICAgICByZXR1cm4gb2JzLmNhbGxiYWNrKGV2ZW50RGF0YSwgc3RhdGUpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBpZiAob2JzLnVucmVnaXN0ZXJPbk5leHRDYWxsKSB7XG4gICAgICAgICAgdGhpcy5fZGVmZXJVbnJlZ2lzdGVyKG9icylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyByZXR1cm4gdGhlIGV2ZW50RGF0YVxuICAgIHJldHVybiBwLnRoZW4oKCkgPT4ge1xuICAgICAgcmV0dXJuIGV2ZW50RGF0YVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogTm90aWZ5IGEgc3BlY2lmaWMgb2JzZXJ2ZXJcbiAgICogQHBhcmFtIG9ic2VydmVyIC0gZGVmaW5lcyB0aGUgb2JzZXJ2ZXIgdG8gbm90aWZ5XG4gICAqIEBwYXJhbSBldmVudERhdGEgLSBkZWZpbmVzIHRoZSBkYXRhIHRvIGJlIHNlbnQgdG8gZWFjaCBjYWxsYmFja1xuICAgKiBAcGFyYW0gbWFzayAtIGlzIHVzZWQgdG8gZmlsdGVyIG9ic2VydmVycyBkZWZhdWx0cyB0byAtMVxuICAgKi9cbiAgcHVibGljIG5vdGlmeU9ic2VydmVyKG9ic2VydmVyOiBPYnNlcnZlcjxUPiwgZXZlbnREYXRhOiBULCBtYXNrOiBudW1iZXIgPSAtMSk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5fZXZlbnRTdGF0ZVxuICAgIHN0YXRlLm1hc2sgPSBtYXNrXG4gICAgc3RhdGUuc2tpcE5leHRPYnNlcnZlcnMgPSBmYWxzZVxuXG4gICAgb2JzZXJ2ZXIuY2FsbGJhY2soZXZlbnREYXRhLCBzdGF0ZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIGlmIHRoZSBvYnNlcnZhYmxlIGhhcyBhdCBsZWFzdCBvbmUgb2JzZXJ2ZXJcbiAgICogQHJldHVybnMgdHJ1ZSBpcyB0aGUgT2JzZXJ2YWJsZSBoYXMgYXQgbGVhc3Qgb25lIE9ic2VydmVyIHJlZ2lzdGVyZWRcbiAgICovXG4gIHB1YmxpYyBoYXNPYnNlcnZlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29ic2VydmVycy5sZW5ndGggPiAwXG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgdGhlIGxpc3Qgb2Ygb2JzZXJ2ZXJzXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5fb2JzZXJ2ZXJzID0gbmV3IEFycmF5PE9ic2VydmVyPFQ+PigpXG4gICAgdGhpcy5fb25PYnNlcnZlckFkZGVkID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIENsb25lIHRoZSBjdXJyZW50IG9ic2VydmFibGVcbiAgICogQHJldHVybnMgYSBuZXcgb2JzZXJ2YWJsZVxuICAgKi9cbiAgcHVibGljIGNsb25lKCk6IE9ic2VydmFibGU8VD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlPFQ+KClcblxuICAgIHJlc3VsdC5fb2JzZXJ2ZXJzID0gdGhpcy5fb2JzZXJ2ZXJzLnNsaWNlKDApXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICAvKipcbiAgICogRG9lcyB0aGlzIG9ic2VydmFibGUgaGFuZGxlcyBvYnNlcnZlciByZWdpc3RlcmVkIHdpdGggYSBnaXZlbiBtYXNrXG4gICAqIEBwYXJhbSBtYXNrIC0gZGVmaW5lcyB0aGUgbWFzayB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybnMgd2hldGhlciBvciBub3Qgb25lIG9ic2VydmVyIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZ2l2ZW4gbWFzayBpcyBoYW5kZWxlZFxuICAgKi9cbiAgcHVibGljIGhhc1NwZWNpZmljTWFzayhtYXNrOiBudW1iZXIgPSAtMSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3Qgb2JzIG9mIHRoaXMuX29ic2VydmVycykge1xuICAgICAgaWYgKG9icy5tYXNrICYgbWFzayB8fCBvYnMubWFzayA9PT0gbWFzaykge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHByaXZhdGUgX2RlZmVyVW5yZWdpc3RlcihvYnNlcnZlcjogT2JzZXJ2ZXI8VD4pOiB2b2lkIHtcbiAgICBvYnNlcnZlci51bnJlZ2lzdGVyT25OZXh0Q2FsbCA9IGZhbHNlXG4gICAgb2JzZXJ2ZXIuX3dpbGxCZVVucmVnaXN0ZXJlZCA9IHRydWVcbiAgICBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgLnRoZW4uYmluZChQcm9taXNlLnJlc29sdmUoKSkoYXN5bmMgKCkgPT4gdGhpcy5fcmVtb3ZlKG9ic2VydmVyKSlcbiAgICAgIC5jYXRjaChjb25zb2xlLmVycm9yKVxuICB9XG5cbiAgLy8gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBub3QgaXRlcmF0aW5nIG92ZXIgX29ic2VydmVycyB0byBhdm9pZCBjYWxsYmFjayBza2lwcGluZy5cbiAgLy8gUmVtb3ZlcyBhbiBvYnNlcnZlciBmcm9tIHRoZSBfb2JzZXJ2ZXIgQXJyYXkuXG4gIHByaXZhdGUgX3JlbW92ZShvYnNlcnZlcjogbnVsbCB8IE9ic2VydmVyPFQ+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYnNlcnZlcikge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9vYnNlcnZlcnMuaW5kZXhPZihvYnNlcnZlcilcblxuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX29ic2VydmVycy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG4iXX0=
|
package/internal/provider.js
CHANGED
@@ -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,
|
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
|
-
|
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,
|
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,
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy9tYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztHQVdHO0FBRUgsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLDBCQUEwQixDQUFBO0FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoaXMgbW9kdWxlIGlzIGV4cG9zZWQgYnkgdGhlIHNkayB2aWEgYEBkY2wvc2RrL21hdGhgXG4gKlxuXG4qIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGltcG9ydCB7IENvbG9yMywgVmVjdG9yMyB9IGZyb20gJ0BkY2wvc2RrL21hdGgnXG4gKiBgYGBcbiAqXG4gKiBAbW9kdWxlIE1hdGggJiBDb2xvcnNcbiAqXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnQGRjbC9lY3MtbWF0aCdcbmV4cG9ydCAqIGZyb20gJ0BkY2wvZWNzLW1hdGgvZGlzdC9NYXRyaXgnXG5leHBvcnQgKiBmcm9tICdAZGNsL2Vjcy1tYXRoL2Rpc3QvUGxhbmUnXG5leHBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnQGRjbC9lY3MtbWF0aCdcbiJdfQ==
|
package/message-bus.d.ts
CHANGED
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,
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvbWVzc2FnZS1idXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFXLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUN2RCxPQUFPLEtBQUssd0JBQXdCLE1BQU0sa0NBQWtDLENBQUE7QUFFNUU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLFVBQVU7SUFJckI7UUFIUSxpQkFBWSxHQUFhLEVBQUUsQ0FBQTtRQUMzQixhQUFRLEdBQUcsS0FBSyxDQUFBO0lBRVQsQ0FBQztJQUVoQixFQUFFLENBQUMsT0FBZSxFQUFFLFFBQThDO1FBQ2hFLE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzlCLElBQUk7Z0JBQ0YsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBRS9CLElBQUksQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUU7b0JBQ3pCLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtpQkFDOUI7YUFDRjtZQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUU7UUFDaEIsQ0FBQyxDQUFFLENBQUE7SUFDTCxDQUFDO0lBRUQsWUFBWTtJQUNaLE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRS9CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtJQUNkLENBQUM7SUFDRCxJQUFJLENBQUMsT0FBZSxFQUFFLE9BQXlCO1FBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQzNCLGNBQWMsQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFTyxLQUFLO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTTtZQUFFLE9BQU07UUFDckMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU07UUFFekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUcsQ0FBQTtRQUMxQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDN0MsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFBO1lBQ3JCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQTtRQUNkLENBQUMsRUFDRCxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7UUFDdkIsQ0FBQyxDQUNGLENBQUE7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZlciB9IGZyb20gJy4vaW50ZXJuYWwvT2JzZXJ2YWJsZSdcbmltcG9ydCB7IElFdmVudHMsIG9uQ29tbXNNZXNzYWdlIH0gZnJvbSAnLi9vYnNlcnZhYmxlcydcbmltcG9ydCAqIGFzIGNvbW11bmljYXRpb25zQ29udHJvbGxlciBmcm9tICd+c3lzdGVtL0NvbW11bmljYXRpb25zQ29udHJvbGxlcidcblxuLyoqXG4gKiBAYWxwaGFcbiAqIEBkZXByZWNhdGVkIHRoaXMgd2lsbCBvbmx5IGV4aXN0IGZvciBhIGZldyByZWxlYXNlcyBpbiBFQ1M3XG4gKi9cbmV4cG9ydCBjbGFzcyBNZXNzYWdlQnVzIHtcbiAgcHJpdmF0ZSBtZXNzYWdlUXVldWU6IHN0cmluZ1tdID0gW11cbiAgcHJpdmF0ZSBmbHVzaGluZyA9IGZhbHNlXG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIG9uKG1lc3NhZ2U6IHN0cmluZywgY2FsbGJhY2s6ICh2YWx1ZTogYW55LCBzZW5kZXI6IHN0cmluZykgPT4gdm9pZCk6IE9ic2VydmVyPElFdmVudHNbJ2NvbW1zJ10+IHtcbiAgICByZXR1cm4gb25Db21tc01lc3NhZ2UuYWRkKChlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtID0gSlNPTi5wYXJzZShlLm1lc3NhZ2UpXG5cbiAgICAgICAgaWYgKG0ubWVzc2FnZSA9PT0gbWVzc2FnZSkge1xuICAgICAgICAgIGNhbGxiYWNrKG0ucGF5bG9hZCwgZS5zZW5kZXIpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgfSkhXG4gIH1cblxuICAvLyBAaW50ZXJuYWxcbiAgc2VuZFJhdyhtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLm1lc3NhZ2VRdWV1ZS5wdXNoKG1lc3NhZ2UpXG5cbiAgICB0aGlzLmZsdXNoKClcbiAgfVxuICBlbWl0KG1lc3NhZ2U6IHN0cmluZywgcGF5bG9hZDogUmVjb3JkPGFueSwgYW55Pikge1xuICAgIGNvbnN0IG1lc3NhZ2VUb1NlbmQgPSBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2UsIHBheWxvYWQgfSlcbiAgICB0aGlzLnNlbmRSYXcobWVzc2FnZVRvU2VuZClcbiAgICBvbkNvbW1zTWVzc2FnZS5ub3RpZnlPYnNlcnZlcnMoeyBtZXNzYWdlOiBtZXNzYWdlVG9TZW5kLCBzZW5kZXI6ICdzZWxmJyB9KVxuICB9XG5cbiAgcHJpdmF0ZSBmbHVzaCgpIHtcbiAgICBpZiAoIXRoaXMubWVzc2FnZVF1ZXVlLmxlbmd0aCkgcmV0dXJuXG4gICAgaWYgKHRoaXMuZmx1c2hpbmcpIHJldHVyblxuXG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMubWVzc2FnZVF1ZXVlLnNoaWZ0KCkhXG4gICAgY29tbXVuaWNhdGlvbnNDb250cm9sbGVyLnNlbmQoeyBtZXNzYWdlIH0pLnRoZW4oXG4gICAgICAoXykgPT4ge1xuICAgICAgICB0aGlzLmZsdXNoaW5nID0gZmFsc2VcbiAgICAgICAgdGhpcy5mbHVzaCgpXG4gICAgICB9LFxuICAgICAgKF8pID0+IHtcbiAgICAgICAgdGhpcy5mbHVzaGluZyA9IGZhbHNlXG4gICAgICB9XG4gICAgKVxuICB9XG59XG4iXX0=
|