@dcl/sdk 7.29.1-36041177279.commit-502e633 → 7.29.1-36624944101.commit-bb81ac6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -90,6 +90,9 @@ export function addSyncTransport(engine, sendBinary, getUserData, isServerFn, na
90
90
  // End add sync transport
91
91
  // Receive & Process CRDT_STATE
92
92
  binaryMessageBus.on(CommsMessage.REQ_CRDT_STATE, async (data, sender) => {
93
+ // Requests arriving before role resolution are recovered by the requester's retry.
94
+ if (!isServerAtom.getOrNull())
95
+ return;
93
96
  DEBUG_NETWORK_MESSAGES() && console.log('[REQ_CRDT_STATE]', sender, Date.now());
94
97
  const chunks = engineToCrdt(engine);
95
98
  if (chunks.length === 0) {
@@ -229,4 +232,4 @@ export function addSyncTransport(engine, sendBinary, getUserData, isServerFn, na
229
232
  isRoomReadyAtom
230
233
  };
231
234
  }
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idXMtc3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXR3b3JrL21lc3NhZ2UtYnVzLXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFHeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRWhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHN0QsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFBO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFFLFVBQWtCLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFBO0FBRS9GLDhDQUE4QztBQUM5QyxNQUFNLGlCQUFpQixHQUFHLEdBQVksRUFBRTtJQUN0QyxJQUFJO1FBQ0YsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDbkQsTUFBTSxpQkFBaUIsR0FBRyxVQUFzRSxDQUFBO1FBQ2hHLE9BQU8saUJBQWlCLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEtBQUssTUFBTSxDQUFBO0tBQzNEO0lBQUMsTUFBTTtRQUNOLE9BQU8sS0FBSyxDQUFBO0tBQ2I7QUFDSCxDQUFDLENBQUE7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE1BQWUsRUFDZixVQUFtRSxFQUNuRSxXQUF3RSxFQUN4RSxVQUFtRSxFQUNuRSxJQUFZO0lBRVosZUFBZTtJQUNmLE1BQU0sU0FBUyxHQUFhLEVBQWMsQ0FBQTtJQUMxQyxZQUFZLENBQUMsU0FBVSxFQUFFLFdBQVcsQ0FBQyxDQUFBO0lBRXJDLE1BQU0sWUFBWSxHQUFHLElBQUksRUFBVyxDQUFBO0lBQ3BDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBVSxLQUFLLENBQUMsQ0FBQTtJQUU1QyxLQUFLLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFtQixFQUFFLEVBQUU7UUFDL0MsT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDeEMsQ0FBQyxDQUFDLENBQUE7SUFFRixlQUFlO0lBQ2YsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRXhELG1FQUFtRTtJQUNuRSxNQUFNLCtCQUErQixHQUFnRCxFQUFFLENBQUE7SUFFdkYsTUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRTtRQUMxRCwrQkFBK0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDaEYsQ0FBQyxDQUFDLENBQUE7SUFFRixTQUFTLGlCQUFpQjtRQUN4QixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQTtRQUNyRCwrQkFBK0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFBO1FBQzFDLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUUxQyxJQUFJLGtCQUFrQixHQUFHLEtBQUssQ0FBQTtJQUU5Qjs7Ozs7T0FLRztJQUNILElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNaLE1BQU0sNEJBQTRCLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEUscUJBQXFCO0lBQ3JCLE1BQU0sU0FBUyxHQUFjO1FBQzNCLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQzFCLElBQUksRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxJQUFJLElBQUksNEJBQTRCO2dCQUFFLElBQUksRUFBRSxDQUFBO1lBQ2hELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxHQUFHLDRCQUE0QixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2xGLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtvQkFDdEIsc0JBQXNCLEVBQUU7d0JBQ3RCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7b0JBRTlGLDhFQUE4RTtvQkFDOUUsS0FBSyxNQUFNLEtBQUssSUFBSSxlQUFlLENBQUMsOEJBQThCLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzNFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFBO3FCQUNoRDtpQkFDRjthQUNGO1lBQ0QsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQTtZQUN4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7WUFDdkUsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ25ELENBQUM7UUFDRCxJQUFJLEVBQUUsSUFBSTtLQUNYLENBQUE7SUFFRCwwQkFBMEI7SUFDMUIsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUM7UUFDNUMsTUFBTTtRQUNOLGdCQUFnQjtLQUNqQixDQUFDLENBQUE7SUFFRiwrQ0FBK0M7SUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUVsRiwrQkFBK0I7SUFDL0IsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXZCLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDOUIseUJBQXlCO0lBRXpCLCtCQUErQjtJQUMvQixnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3RFLHNCQUFzQixFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDL0UsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ25DLElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdkIsc0JBQXNCLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQTtZQUNyRixnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLFVBQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtTQUMvRTthQUFNO1lBQ0wsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLEVBQUU7Z0JBQzFCLHNCQUFzQixFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO2dCQUN6RSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO2FBQ3BFO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNGLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDdEUsZUFBZSxHQUFHLEtBQUssQ0FBQTtRQUN2Qix1QkFBdUIsR0FBRyxDQUFDLENBQUE7UUFDM0IsSUFBSSxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksTUFBTSxLQUFLLG1CQUFtQjtZQUFFLE9BQU07UUFDdEUsc0JBQXNCLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHlCQUF5QixFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQ2hHLElBQUksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDdkIsU0FBUyxDQUFDLFNBQVUsQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7U0FDMUU7UUFDRCxrQkFBa0IsR0FBRyxJQUFJLENBQUE7UUFFekIsaUVBQWlFO1FBQ2pFLG9EQUFvRDtRQUNwRCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQTtRQUN4RCxJQUFJLFNBQVMsRUFBRTtZQUNiLHNCQUFzQixFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxzREFBc0QsQ0FBQyxDQUFBO1lBQy9GLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDM0I7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLG9DQUFvQztJQUNwQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUN2RCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUE7UUFDekMsc0JBQXNCLEVBQUU7WUFDdEIsT0FBTyxDQUFDLEdBQUcsQ0FDVCxTQUFTLENBQUMsSUFBSSxFQUNkLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsRUFDakYsUUFBUSxDQUNULENBQUE7UUFDSCxJQUFJLFFBQVEsRUFBRTtZQUNaLFNBQVMsQ0FBQyxTQUFVLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1NBQzNFO2FBQU0sSUFBSSxNQUFNLEtBQUssbUJBQW1CLEVBQUU7WUFDekMsdUVBQXVFO1lBQ3ZFLFNBQVMsQ0FBQyxTQUFVLENBQUMsZUFBZSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1NBQzNFO0lBQ0gsQ0FBQyxDQUFDLENBQUE7SUFFRixzRkFBc0Y7SUFDdEYsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUNyRSwrREFBK0Q7UUFDL0QsSUFBSSxNQUFNLEtBQUssbUJBQW1CO1lBQUUsT0FBTTtRQUUxQyw4QkFBOEI7UUFDOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw2REFBNkQsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBRXJHLGdGQUFnRjtRQUNoRix3REFBd0Q7UUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUN0RixJQUFJLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxDQUFDLEVBQUU7WUFDdEMsa0ZBQWtGO1lBQ2xGLHVFQUF1RTtZQUN2RSxTQUFTLENBQUMsU0FBVSxDQUFDLG1CQUFtQixDQUFDLENBQUE7WUFFekMsc0JBQXNCLEVBQUUsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLHFFQUFxRSxDQUFDLENBQUE7U0FDL0c7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM5QixzQkFBc0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3hFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxFQUFFO1lBQ25FLFlBQVksRUFBRSxDQUFBO1NBQ2Y7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLDBEQUEwRDtJQUMxRCxTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM5QyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsU0FBUyxFQUFFLENBQUE7UUFFekMsSUFBSSxDQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRTtZQUNoQyxpRUFBaUU7WUFDakUsSUFBSSxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUN4QyxzQkFBc0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMseUJBQXlCLENBQUMsQ0FBQTtnQkFDbEUsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDYixrQkFBa0IsR0FBRyxLQUFLLENBQUE7aUJBQzNCO2FBQ0Y7U0FDRjtRQUVELElBQUksS0FBSyxFQUFFLG9CQUFvQixFQUFFO1lBQy9CLFlBQVksRUFBRSxDQUFBO1lBRWQsd0RBQXdEO1lBQ3hELGlEQUFpRDtZQUNqRCxJQUFJLFFBQVEsSUFBSSxlQUFlLENBQUMsU0FBUyxFQUFFLEtBQUssS0FBSyxFQUFFO2dCQUNyRCxzQkFBc0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsNENBQTRDLENBQUMsQ0FBQTtnQkFDckYsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTthQUMzQjtZQUNELDRFQUE0RTtTQUM3RTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFBO0lBQzNCLElBQUksdUJBQXVCLEdBQUcsQ0FBQyxDQUFBO0lBQy9CLE1BQU0sNEJBQTRCLEdBQUcsR0FBRyxDQUFBLENBQUMsVUFBVTtJQUVuRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxZQUFZO1FBQ25CLElBQUksWUFBWSxDQUFDLFNBQVMsRUFBRTtZQUFFLE9BQU07UUFDcEMsSUFBSSxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxvQkFBb0IsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUNwRixlQUFlLEdBQUcsSUFBSSxDQUFBO1lBQ3RCLHVCQUF1QixHQUFHLENBQUMsQ0FBQTtZQUMzQixzQkFBc0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQTtZQUM5RCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxJQUFJLFVBQVUsRUFBRSxDQUFDLENBQUE7U0FDckU7SUFDSCxDQUFDO0lBRUQscUZBQXFGO0lBQ3JGLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRTtRQUM5QixJQUFJLGVBQWUsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzFDLHVCQUF1QixJQUFJLEVBQUUsQ0FBQTtZQUM3QixJQUFJLHVCQUF1QixJQUFJLDRCQUE0QixFQUFFO2dCQUMzRCxzQkFBc0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtnQkFDL0UsdUJBQXVCLEdBQUcsQ0FBQyxDQUFBO2dCQUMzQixlQUFlLEdBQUcsS0FBSyxDQUFBO2dCQUN2QixZQUFZLEVBQUUsQ0FBQTthQUNmO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUM5QixzQkFBc0IsRUFBRSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDbkUsQ0FBQyxDQUFDLENBQUE7SUFFRixTQUFTLGtCQUFrQjtRQUN6QixPQUFPLGtCQUFrQixDQUFBO0lBQzNCLENBQUM7SUFFRCxPQUFPO1FBQ0wsR0FBRyxpQkFBaUI7UUFDcEIsU0FBUztRQUNULGtCQUFrQjtRQUNsQixnQkFBZ0I7UUFDaEIsUUFBUTtRQUNSLGVBQWU7S0FDaEIsQ0FBQTtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRW5naW5lLCBUcmFuc3BvcnQsIFJlYWxtSW5mbyB9IGZyb20gJ0BkY2wvZWNzJ1xuaW1wb3J0IHR5cGUgeyBTZW5kQmluYXJ5UmVxdWVzdCwgU2VuZEJpbmFyeVJlc3BvbnNlIH0gZnJvbSAnfnN5c3RlbS9Db21tdW5pY2F0aW9uc0NvbnRyb2xsZXInXG5cbmltcG9ydCB7IHN5bmNGaWx0ZXIgfSBmcm9tICcuL2ZpbHRlcidcbmltcG9ydCB7IGVuZ2luZVRvQ3JkdCB9IGZyb20gJy4vc3RhdGUnXG5pbXBvcnQgeyBCaW5hcnlNZXNzYWdlQnVzLCBDb21tc01lc3NhZ2UgfSBmcm9tICcuL2JpbmFyeS1tZXNzYWdlLWJ1cydcbmltcG9ydCB7IGZldGNoUHJvZmlsZSB9IGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgeyBlbnRpdHlVdGlscyB9IGZyb20gJy4vZW50aXRpZXMnXG5pbXBvcnQgeyBjcmVhdGVTZXJ2ZXJWYWxpZGF0b3IgfSBmcm9tICcuL3NlcnZlcidcbmltcG9ydCB0eXBlIHsgR2V0VXNlckRhdGFSZXF1ZXN0LCBHZXRVc2VyRGF0YVJlc3BvbnNlIH0gZnJvbSAnfnN5c3RlbS9Vc2VySWRlbnRpdHknXG5pbXBvcnQgeyBkZWZpbmVQbGF5ZXJIZWxwZXIgfSBmcm9tICcuLi9wbGF5ZXJzJ1xuaW1wb3J0IHsgc2VyaWFsaXplQ3JkdE1lc3NhZ2VzIH0gZnJvbSAnLi4vaW50ZXJuYWwvdHJhbnNwb3J0cy9sb2dnZXInXG5pbXBvcnQgeyBJc1NlcnZlclJlcXVlc3QsIElzU2VydmVyUmVzcG9uc2UgfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcbmltcG9ydCB7IEF0b20gfSBmcm9tICcuLi9hdG9tJ1xuaW1wb3J0IHsgc2V0R2xvYmFsUm9vbSwgUm9vbSB9IGZyb20gJy4vZXZlbnRzL2ltcGxlbWVudGF0aW9uJ1xuXG5leHBvcnQgdHlwZSBJUHJvZmlsZSA9IHsgbmV0d29ya0lkOiBudW1iZXI7IHVzZXJJZDogc3RyaW5nIH1cbi8vIHVzZXIgdGhhdCB3ZSBhc2tlZCBmb3IgdGhlIGluaXRhbCBjcmR0IHN0YXRlXG5leHBvcnQgY29uc3QgQVVUSF9TRVJWRVJfUEVFUl9JRCA9ICdhdXRob3JpdGF0aXZlLXNlcnZlcidcbmV4cG9ydCBjb25zdCBERUJVR19ORVRXT1JLX01FU1NBR0VTID0gKCkgPT4gKGdsb2JhbFRoaXMgYXMgYW55KS5ERUJVR19ORVRXT1JLX01FU1NBR0VTID8/IGZhbHNlXG5cbi8vIFRlc3QgZW52aXJvbm1lbnQgZGV0ZWN0aW9uIHdpdGhvdXQgJ2FzIGFueSdcbmNvbnN0IGlzVGVzdEVudmlyb25tZW50ID0gKCk6IGJvb2xlYW4gPT4ge1xuICB0cnkge1xuICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiBmYWxzZVxuICAgIGNvbnN0IGdsb2JhbFdpdGhQcm9jZXNzID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIHsgcHJvY2Vzcz86IHsgZW52PzogeyBOT0RFX0VOVj86IHN0cmluZyB9IH0gfVxuICAgIHJldHVybiBnbG9iYWxXaXRoUHJvY2Vzcy5wcm9jZXNzPy5lbnY/Lk5PREVfRU5WID09PSAndGVzdCdcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFkZFN5bmNUcmFuc3BvcnQoXG4gIGVuZ2luZTogSUVuZ2luZSxcbiAgc2VuZEJpbmFyeTogKG1zZzogU2VuZEJpbmFyeVJlcXVlc3QpID0+IFByb21pc2U8U2VuZEJpbmFyeVJlc3BvbnNlPixcbiAgZ2V0VXNlckRhdGE6ICh2YWx1ZTogR2V0VXNlckRhdGFSZXF1ZXN0KSA9PiBQcm9taXNlPEdldFVzZXJEYXRhUmVzcG9uc2U+LFxuICBpc1NlcnZlckZuOiAocmVxdWVzdDogSXNTZXJ2ZXJSZXF1ZXN0KSA9PiBQcm9taXNlPElzU2VydmVyUmVzcG9uc2U+LFxuICBuYW1lOiBzdHJpbmdcbikge1xuICAvLyBQcm9maWxlIEluZm9cbiAgY29uc3QgbXlQcm9maWxlOiBJUHJvZmlsZSA9IHt9IGFzIElQcm9maWxlXG4gIGZldGNoUHJvZmlsZShteVByb2ZpbGUhLCBnZXRVc2VyRGF0YSlcblxuICBjb25zdCBpc1NlcnZlckF0b20gPSBBdG9tPGJvb2xlYW4+KClcbiAgY29uc3QgaXNSb29tUmVhZHlBdG9tID0gQXRvbTxib29sZWFuPihmYWxzZSlcblxuICB2b2lkIGlzU2VydmVyRm4oe30pLnRoZW4oKCQ6IElzU2VydmVyUmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gaXNTZXJ2ZXJBdG9tLnN3YXAoISEkLmlzU2VydmVyKVxuICB9KVxuXG4gIC8vIEVudGl0eSB1dGlsc1xuICBjb25zdCBlbnRpdHlEZWZpbml0aW9ucyA9IGVudGl0eVV0aWxzKGVuZ2luZSwgbXlQcm9maWxlKVxuXG4gIC8vIExpc3Qgb2YgTWVzc2FnZUJ1c3MgbWVzc3NhZ2VzIHRvIGJlIHNlbnQgb24gZXZlcnkgZnJhbWUgdG8gY29tbXNcbiAgY29uc3QgcGVuZGluZ01lc3NhZ2VCdXNNZXNzYWdlc1RvU2VuZDogeyBkYXRhOiBVaW50OEFycmF5W107IGFkZHJlc3M6IHN0cmluZ1tdIH1bXSA9IFtdXG5cbiAgY29uc3QgYmluYXJ5TWVzc2FnZUJ1cyA9IEJpbmFyeU1lc3NhZ2VCdXMoKGRhdGEsIGFkZHJlc3MpID0+IHtcbiAgICBwZW5kaW5nTWVzc2FnZUJ1c01lc3NhZ2VzVG9TZW5kLnB1c2goeyBkYXRhOiBbZGF0YV0sIGFkZHJlc3M6IGFkZHJlc3MgPz8gW10gfSlcbiAgfSlcblxuICBmdW5jdGlvbiBnZXRNZXNzYWdlc1RvU2VuZCgpOiB0eXBlb2YgcGVuZGluZ01lc3NhZ2VCdXNNZXNzYWdlc1RvU2VuZCB7XG4gICAgY29uc3QgbWVzc2FnZXMgPSBbLi4ucGVuZGluZ01lc3NhZ2VCdXNNZXNzYWdlc1RvU2VuZF1cbiAgICBwZW5kaW5nTWVzc2FnZUJ1c01lc3NhZ2VzVG9TZW5kLmxlbmd0aCA9IDBcbiAgICByZXR1cm4gbWVzc2FnZXNcbiAgfVxuICBjb25zdCBwbGF5ZXJzID0gZGVmaW5lUGxheWVySGVscGVyKGVuZ2luZSlcblxuICBsZXQgc3RhdGVJc1N5bmNyb25pemVkID0gZmFsc2VcblxuICAvKipcbiAgICogV2UgbmVlZCB0byB3YWl0IHRpbGwgMiB0aWNrcyB0aGF0IGlzIHdoZW4gdGhlIGVuZ2luZSBpcyByZWFkeSB0byBzZW5kIG5ldyBtZXNzYWdlcy5cbiAgICogVGhlIGZpcnN0IHRpY2sgaXMgZm9yIHRoZSBjbGllbnQgZW5naW5lIHByb2Nlc3NpbmcgdGhlIENSRFQgbWVzc2FnZXMsXG4gICAqIGFuZCB0aGUgc2Vjb25kIG9uZSBhcmUgdGhlIG1lc3NhZ2VzIGNyZWF0ZWQgYnkgdGhlIG1haW4oKSBmdW5jdGlvbi5cbiAgICogU28gdG8gYXZvaWQgc2VuZGluZyB0aG9zZSBtZXNzYWdlcywgdGhhdCBhbGwgdGhlIGNsaWVudHMgaGF2ZSwgdGhyb3VnaCB0aGUgbmV0d29yayB3ZSBwdXQgdGhpcyB2YWxpZGF0aW9uIGhlcmUuXG4gICAqL1xuICBsZXQgdGljayA9IDBcbiAgY29uc3QgVFJBTlNQT1JUX0lOSVRJQUxJWkVEX05VTUJFUiA9IGlzVGVzdEVudmlyb25tZW50KCkgPyAwIDogMlxuICAvLyBBZGQgU3luYyBUcmFuc3BvcnRcbiAgY29uc3QgdHJhbnNwb3J0OiBUcmFuc3BvcnQgPSB7XG4gICAgZmlsdGVyOiBzeW5jRmlsdGVyKGVuZ2luZSksXG4gICAgc2VuZDogYXN5bmMgKG1lc3NhZ2VzKSA9PiB7XG4gICAgICBpZiAodGljayA8PSBUUkFOU1BPUlRfSU5JVElBTElaRURfTlVNQkVSKSB0aWNrKytcbiAgICAgIGZvciAoY29uc3QgbWVzc2FnZSBvZiB0aWNrID4gVFJBTlNQT1JUX0lOSVRJQUxJWkVEX05VTUJFUiA/IFttZXNzYWdlc10uZmxhdCgpIDogW10pIHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuYnl0ZUxlbmd0aCkge1xuICAgICAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJlxuICAgICAgICAgICAgY29uc29sZS5sb2coLi4uQXJyYXkuZnJvbShzZXJpYWxpemVDcmR0TWVzc2FnZXMoJ1tOZXR3b3JrTWVzc2FnZSBzZW50XTonLCBtZXNzYWdlLCBlbmdpbmUpKSlcblxuICAgICAgICAgIC8vIENvbnZlcnQgcmVndWxhciBtZXNzYWdlcyB0byBuZXR3b3JrIG1lc3NhZ2VzIGZvciBicm9hZGNhc3Rpbmcgd2l0aCBjaHVua2luZ1xuICAgICAgICAgIGZvciAoY29uc3QgY2h1bmsgb2Ygc2VydmVyVmFsaWRhdG9yLmNvbnZlcnRSZWd1bGFyVG9OZXR3b3JrTWVzc2FnZShtZXNzYWdlKSkge1xuICAgICAgICAgICAgYmluYXJ5TWVzc2FnZUJ1cy5lbWl0KENvbW1zTWVzc2FnZS5DUkRULCBjaHVuaylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHBlZXJNZXNzYWdlcyA9IGdldE1lc3NhZ2VzVG9TZW5kKClcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZEJpbmFyeSh7IGRhdGE6IFtdLCBwZWVyRGF0YTogcGVlck1lc3NhZ2VzIH0pXG4gICAgICBiaW5hcnlNZXNzYWdlQnVzLl9fcHJvY2Vzc01lc3NhZ2VzKHJlc3BvbnNlLmRhdGEpXG4gICAgfSxcbiAgICB0eXBlOiBuYW1lXG4gIH1cblxuICAvLyBTZXJ2ZXIgdmFsaWRhdGlvbiBzZXR1cFxuICBjb25zdCBzZXJ2ZXJWYWxpZGF0b3IgPSBjcmVhdGVTZXJ2ZXJWYWxpZGF0b3Ioe1xuICAgIGVuZ2luZSxcbiAgICBiaW5hcnlNZXNzYWdlQnVzXG4gIH0pXG5cbiAgLy8gSW5pdGlhbGl6ZSBFdmVudCBCdXMgd2l0aCByZWdpc3RlcmVkIHNjaGVtYXNcbiAgY29uc3QgZXZlbnRCdXMgPSBuZXcgUm9vbShlbmdpbmUsIGJpbmFyeU1lc3NhZ2VCdXMsIGlzU2VydmVyQXRvbSwgaXNSb29tUmVhZHlBdG9tKVxuXG4gIC8vIFNldCBnbG9iYWwgZXZlbnRCdXMgaW5zdGFuY2VcbiAgc2V0R2xvYmFsUm9vbShldmVudEJ1cylcblxuICBlbmdpbmUuYWRkVHJhbnNwb3J0KHRyYW5zcG9ydClcbiAgLy8gRW5kIGFkZCBzeW5jIHRyYW5zcG9ydFxuXG4gIC8vIFJlY2VpdmUgJiBQcm9jZXNzIENSRFRfU1RBVEVcbiAgYmluYXJ5TWVzc2FnZUJ1cy5vbihDb21tc01lc3NhZ2UuUkVRX0NSRFRfU1RBVEUsIGFzeW5jIChkYXRhLCBzZW5kZXIpID0+IHtcbiAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiYgY29uc29sZS5sb2coJ1tSRVFfQ1JEVF9TVEFURV0nLCBzZW5kZXIsIERhdGUubm93KCkpXG4gICAgY29uc3QgY2h1bmtzID0gZW5naW5lVG9DcmR0KGVuZ2luZSlcbiAgICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmIGNvbnNvbGUubG9nKCdbRW1pdGluZyBlbXB0eSBzdGF0ZTpdJywgc2VuZGVyLCBEYXRlLm5vdygpKVxuICAgICAgYmluYXJ5TWVzc2FnZUJ1cy5lbWl0KENvbW1zTWVzc2FnZS5SRVNfQ1JEVF9TVEFURSwgbmV3IFVpbnQ4QXJyYXkoKSwgW3NlbmRlcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgY2h1bmtzKSB7XG4gICAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnW0VtaXRpbmc6XScsIHNlbmRlciwgRGF0ZS5ub3coKSlcbiAgICAgICAgYmluYXJ5TWVzc2FnZUJ1cy5lbWl0KENvbW1zTWVzc2FnZS5SRVNfQ1JEVF9TVEFURSwgY2h1bmssIFtzZW5kZXJdKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgYmluYXJ5TWVzc2FnZUJ1cy5vbihDb21tc01lc3NhZ2UuUkVTX0NSRFRfU1RBVEUsIGFzeW5jIChkYXRhLCBzZW5kZXIpID0+IHtcbiAgICByZXF1ZXN0aW5nU3RhdGUgPSBmYWxzZVxuICAgIGVsYXBzZWRUaW1lU2luY2VSZXF1ZXN0ID0gMFxuICAgIGlmIChpc1NlcnZlckF0b20uZ2V0T3JOdWxsKCkgfHwgc2VuZGVyICE9PSBBVVRIX1NFUlZFUl9QRUVSX0lEKSByZXR1cm5cbiAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiYgY29uc29sZS5sb2coJ1tQcm9jZXNzaW5nIENSRFQgU3RhdGVdJywgZGF0YS5ieXRlTGVuZ3RoIC8gMTAyNCwgJ0tCJylcbiAgICBpZiAoZGF0YS5ieXRlTGVuZ3RoID4gMCkge1xuICAgICAgdHJhbnNwb3J0Lm9ubWVzc2FnZSEoc2VydmVyVmFsaWRhdG9yLnByb2Nlc3NDbGllbnRNZXNzYWdlcyhkYXRhLCBzZW5kZXIpKVxuICAgIH1cbiAgICBzdGF0ZUlzU3luY3Jvbml6ZWQgPSB0cnVlXG5cbiAgICAvLyBJTVBPUlRBTlQ6IE9ubHkgbWFyayByb29tIGFzIHJlYWR5IEFGVEVSIHN0YXRlIGlzIHN5bmNocm9uaXplZFxuICAgIC8vIFRoaXMgZW5zdXJlcyBjb21tcyBpcyB0cnVseSBjb25uZWN0ZWQgYW5kIHdvcmtpbmdcbiAgICBjb25zdCByZWFsbUluZm8gPSBSZWFsbUluZm8uZ2V0T3JOdWxsKGVuZ2luZS5Sb290RW50aXR5KVxuICAgIGlmIChyZWFsbUluZm8pIHtcbiAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnW2lzUm9vbVJlYWR5XSBNYXJraW5nIHJvb20gYXMgcmVhZHkgYWZ0ZXIgc3RhdGUgc3luYycpXG4gICAgICBpc1Jvb21SZWFkeUF0b20uc3dhcCh0cnVlKVxuICAgIH1cbiAgfSlcblxuICAvLyByZWNlaXZlZCBtZXNzYWdlIGZyb20gdGhlIG5ldHdvcmtcbiAgYmluYXJ5TWVzc2FnZUJ1cy5vbihDb21tc01lc3NhZ2UuQ1JEVCwgKHZhbHVlLCBzZW5kZXIpID0+IHtcbiAgICBjb25zdCBpc1NlcnZlciA9IGlzU2VydmVyQXRvbS5nZXRPck51bGwoKVxuICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJlxuICAgICAgY29uc29sZS5sb2coXG4gICAgICAgIHRyYW5zcG9ydC50eXBlLFxuICAgICAgICAuLi5BcnJheS5mcm9tKHNlcmlhbGl6ZUNyZHRNZXNzYWdlcygnW05ldHdvcmtNZXNzYWdlIHJlY2VpdmVkXTonLCB2YWx1ZSwgZW5naW5lKSksXG4gICAgICAgIGlzU2VydmVyXG4gICAgICApXG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICB0cmFuc3BvcnQub25tZXNzYWdlIShzZXJ2ZXJWYWxpZGF0b3IucHJvY2Vzc1NlcnZlck1lc3NhZ2VzKHZhbHVlLCBzZW5kZXIpKVxuICAgIH0gZWxzZSBpZiAoc2VuZGVyID09PSBBVVRIX1NFUlZFUl9QRUVSX0lEKSB7XG4gICAgICAvLyBQcm9jZXNzIG5ldHdvcmsgbWVzc2FnZXMgZnJvbSBzZXJ2ZXIgYW5kIGNvbnZlcnQgdG8gcmVndWxhciBtZXNzYWdlc1xuICAgICAgdHJhbnNwb3J0Lm9ubWVzc2FnZSEoc2VydmVyVmFsaWRhdG9yLnByb2Nlc3NDbGllbnRNZXNzYWdlcyh2YWx1ZSwgc2VuZGVyKSlcbiAgICB9XG4gIH0pXG5cbiAgLy8gcmVjZWl2ZWQgYXV0aG9yaXRhdGl2ZSBtZXNzYWdlIGZyb20gc2VydmVyIC0gZm9yY2UgYXBwbHkgdG8gZml4IGludmFsaWQgbG9jYWwgc3RhdGVcbiAgYmluYXJ5TWVzc2FnZUJ1cy5vbihDb21tc01lc3NhZ2UuQ1JEVF9BVVRIT1JJVEFUSVZFLCAodmFsdWUsIHNlbmRlcikgPT4ge1xuICAgIC8vIE9ubHkgYWNjZXB0IGF1dGhvcml0YXRpdmUgbWVzc2FnZXMgZnJvbSBhdXRob3JpdGF0aXZlIHNlcnZlclxuICAgIGlmIChzZW5kZXIgIT09IEFVVEhfU0VSVkVSX1BFRVJfSUQpIHJldHVyblxuXG4gICAgLy8gREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmXG4gICAgY29uc29sZS5sb2coJ1tBVVRIT1JJVEFUSVZFXSBSZWNlaXZlZCBhdXRob3JpdGF0aXZlIG1lc3NhZ2UgZnJvbSBzZXJ2ZXI6JywgdmFsdWUuYnl0ZUxlbmd0aCwgJ2J5dGVzJylcblxuICAgIC8vIFByb2Nlc3MgYXV0aG9yaXRhdGl2ZSBtZXNzYWdlcyBieSBmb3JjaW5nIHRoZW0gdGhyb3VnaCBub3JtYWwgQ1JEVCBwcm9jZXNzaW5nXG4gICAgLy8gYnV0IHdpdGggYSB0aW1lc3RhbXAgdGhhdCdzIGd1YXJhbnRlZWQgdG8gYmUgYWNjZXB0ZWRcbiAgICBjb25zdCBhdXRob3JpdGF0aXZlQnVmZmVyID0gc2VydmVyVmFsaWRhdG9yLnByb2Nlc3NDbGllbnRNZXNzYWdlcyh2YWx1ZSwgc2VuZGVyLCB0cnVlKVxuICAgIGlmIChhdXRob3JpdGF0aXZlQnVmZmVyLmJ5dGVMZW5ndGggPiAwKSB7XG4gICAgICAvLyBBcHBseSBhdXRob3JpdGF0aXZlIG1lc3NhZ2UgdGhyb3VnaCBub3JtYWwgdHJhbnNwb3J0LCBidXQgdGhlIHNlcnZlcidzIG1lc3NhZ2VzXG4gICAgICAvLyBzaG91bGQgYmUgcHJvY2Vzc2VkIGFzIGF1dGhvcml0YXRpdmUgd2l0aCBzcGVjaWFsIHRpbWVzdGFtcCBoYW5kbGluZ1xuICAgICAgdHJhbnNwb3J0Lm9ubWVzc2FnZSEoYXV0aG9yaXRhdGl2ZUJ1ZmZlcilcblxuICAgICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmIGNvbnNvbGUubG9nKCdbQVVUSE9SSVRBVElWRV0gQXBwbGllZCBzZXJ2ZXIgYXV0aG9yaXRhdGl2ZSBtZXNzYWdlIHRvIGxvY2FsIHN0YXRlJylcbiAgICB9XG4gIH0pXG5cbiAgcGxheWVycy5vbkVudGVyU2NlbmUoKHBsYXllcikgPT4ge1xuICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnW29uRW50ZXJTY2VuZV0nLCBwbGF5ZXIudXNlcklkKVxuICAgIGlmICghaXNTZXJ2ZXJBdG9tLmdldE9yTnVsbCgpICYmIG15UHJvZmlsZS51c2VySWQgPT09IHBsYXllci51c2VySWQpIHtcbiAgICAgIHJlcXVlc3RTdGF0ZSgpXG4gICAgfVxuICB9KVxuXG4gIC8vIEFza3MgZm9yIHRoZSBSRVFfQ1JEVF9TVEFURSB3aGVuIGl0cyBjb25uZWN0ZWQgdG8gY29tbXNcbiAgUmVhbG1JbmZvLm9uQ2hhbmdlKGVuZ2luZS5Sb290RW50aXR5LCAodmFsdWUpID0+IHtcbiAgICBjb25zdCBpc1NlcnZlciA9IGlzU2VydmVyQXRvbS5nZXRPck51bGwoKVxuXG4gICAgaWYgKCF2YWx1ZT8uaXNDb25uZWN0ZWRTY2VuZVJvb20pIHtcbiAgICAgIC8vIE9ubHkgcmVhY3Qgd2hlbiBhY3R1YWxseSB0cmFuc2l0aW9uaW5nIGZyb20gcmVhZHkgdG8gbm90IHJlYWR5XG4gICAgICBpZiAoaXNSb29tUmVhZHlBdG9tLmdldE9yTnVsbCgpID09PSB0cnVlKSB7XG4gICAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnRGlzY29ubmVjdGVkIGZyb20gY29tbXMnKVxuICAgICAgICBpc1Jvb21SZWFkeUF0b20uc3dhcChmYWxzZSlcbiAgICAgICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgICAgIHN0YXRlSXNTeW5jcm9uaXplZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmFsdWU/LmlzQ29ubmVjdGVkU2NlbmVSb29tKSB7XG4gICAgICByZXF1ZXN0U3RhdGUoKVxuXG4gICAgICAvLyBGb3Igc2VydmVycywgbWFyayBhcyByZWFkeSBpbW1lZGlhdGVseSB3aGVuIGNvbm5lY3RlZFxuICAgICAgLy8gKHNlcnZlcnMgZG9uJ3QgbmVlZCB0byBzeW5jIHN0YXRlIGZyb20gYW55b25lKVxuICAgICAgaWYgKGlzU2VydmVyICYmIGlzUm9vbVJlYWR5QXRvbS5nZXRPck51bGwoKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmIGNvbnNvbGUubG9nKCdbaXNSb29tUmVhZHldIFNlcnZlciBtYXJraW5nIHJvb20gYXMgcmVhZHknKVxuICAgICAgICBpc1Jvb21SZWFkeUF0b20uc3dhcCh0cnVlKVxuICAgICAgfVxuICAgICAgLy8gRm9yIGNsaWVudHMsIHJvb20gd2lsbCBiZSBtYXJrZWQgcmVhZHkgYWZ0ZXIgcmVjZWl2aW5nIENSRFQgc3RhdGUgKGFib3ZlKVxuICAgIH1cbiAgfSlcblxuICBsZXQgcmVxdWVzdGluZ1N0YXRlID0gZmFsc2VcbiAgbGV0IGVsYXBzZWRUaW1lU2luY2VSZXF1ZXN0ID0gMFxuICBjb25zdCBTVEFURV9SRVFVRVNUX1JFVFJZX0lOVEVSVkFMID0gMi4wIC8vIHNlY29uZHNcblxuICAvKipcbiAgICogV2h5IHdlIGhhdmUgdG8gcmVxdWVzdCB0aGUgc3RhdGUgaWYgd2UgaGF2ZSBhIHNlcnZlciB0aGF0IGNhbiBzZW5kIHVzIHRoZSBzdGF0ZSB3aGVuIHdlIGpvaW5lZD9cbiAgICogVGhlIHRoaW5nIGlzIHRoYXQgd2hlbiB0aGUgc2VydmVyIGRldGVjdHMgYSBuZXcgSk9JTl9QQVJUSUNJUEFOVCBvbiBsaXZla2l0IHJvb20sIGl0IHNlbmRzIGF1dG9tYXRpY2FsbHkgdGhlIHN0YXRlIHRvIHRoYXQgcGVlci5cbiAgICogQnV0IGluIHVuaXR5LCBpdCB0YWtlcyBtb3JlIHRpbWUsIHNvIHRoYXQgbWVzc2FnZSBpcyBub3QgYmVpbmcgZGVsaXZlcmVkIHRvIHRoZSBjbGllbnQuXG4gICAqIFNvIGluc3RlYWQsIHdoZW4gd2UgYXJlIGZpbmFsbHkgY29ubmVjdGVkIHRvIHRoZSByb29tLCB3ZSByZXF1ZXN0IHRoZSBzdGF0ZSwgYW5kIHRoZW4gdGhlIHNlcnZlciBhbnN3ZXJzIHdpdGggdGhlIHN0YXRlIDopXG4gICAqXG4gICAqIElmIG5vIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHdpdGhpbiAyIHNlY29uZHMsIHRoZSByZXF1ZXN0IGlzIGF1dG9tYXRpY2FsbHkgcmV0cmllZC5cbiAgICovXG4gIGZ1bmN0aW9uIHJlcXVlc3RTdGF0ZSgpIHtcbiAgICBpZiAoaXNTZXJ2ZXJBdG9tLmdldE9yTnVsbCgpKSByZXR1cm5cbiAgICBpZiAoUmVhbG1JbmZvLmdldE9yTnVsbChlbmdpbmUuUm9vdEVudGl0eSk/LmlzQ29ubmVjdGVkU2NlbmVSb29tICYmICFyZXF1ZXN0aW5nU3RhdGUpIHtcbiAgICAgIHJlcXVlc3RpbmdTdGF0ZSA9IHRydWVcbiAgICAgIGVsYXBzZWRUaW1lU2luY2VSZXF1ZXN0ID0gMFxuICAgICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmIGNvbnNvbGUubG9nKCdSZXF1ZXN0aW5nIHN0YXRlLi4uJylcbiAgICAgIGJpbmFyeU1lc3NhZ2VCdXMuZW1pdChDb21tc01lc3NhZ2UuUkVRX0NSRFRfU1RBVEUsIG5ldyBVaW50OEFycmF5KCkpXG4gICAgfVxuICB9XG5cbiAgLy8gU3lzdGVtIHRvIHJldHJ5IHN0YXRlIHJlcXVlc3QgaWYgbm8gcmVzcG9uc2UgaXMgcmVjZWl2ZWQgd2l0aGluIHRoZSByZXRyeSBpbnRlcnZhbFxuICBlbmdpbmUuYWRkU3lzdGVtKChkdDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKHJlcXVlc3RpbmdTdGF0ZSAmJiAhc3RhdGVJc1N5bmNyb25pemVkKSB7XG4gICAgICBlbGFwc2VkVGltZVNpbmNlUmVxdWVzdCArPSBkdFxuICAgICAgaWYgKGVsYXBzZWRUaW1lU2luY2VSZXF1ZXN0ID49IFNUQVRFX1JFUVVFU1RfUkVUUllfSU5URVJWQUwpIHtcbiAgICAgICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmIGNvbnNvbGUubG9nKCdTdGF0ZSByZXF1ZXN0IHRpbWVkIG91dCwgcmV0cnlpbmcuLi4nKVxuICAgICAgICBlbGFwc2VkVGltZVNpbmNlUmVxdWVzdCA9IDBcbiAgICAgICAgcmVxdWVzdGluZ1N0YXRlID0gZmFsc2VcbiAgICAgICAgcmVxdWVzdFN0YXRlKClcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcGxheWVycy5vbkxlYXZlU2NlbmUoKHVzZXJJZCkgPT4ge1xuICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnW29uTGVhdmVTY2VuZV0nLCB1c2VySWQpXG4gIH0pXG5cbiAgZnVuY3Rpb24gaXNTdGF0ZVN5bmNyb25pemVkKCkge1xuICAgIHJldHVybiBzdGF0ZUlzU3luY3Jvbml6ZWRcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uZW50aXR5RGVmaW5pdGlvbnMsXG4gICAgbXlQcm9maWxlLFxuICAgIGlzU3RhdGVTeW5jcm9uaXplZCxcbiAgICBiaW5hcnlNZXNzYWdlQnVzLFxuICAgIGV2ZW50QnVzLFxuICAgIGlzUm9vbVJlYWR5QXRvbVxuICB9XG59XG4iXX0=
235
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1idXMtc3luYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXR3b3JrL21lc3NhZ2UtYnVzLXN5bmMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFHeEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDeEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBRWhELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUVyRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQzlCLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHN0QsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLHNCQUFzQixDQUFBO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsRUFBRSxDQUFFLFVBQWtCLENBQUMsc0JBQXNCLElBQUksS0FBSyxDQUFBO0FBRS9GLDhDQUE4QztBQUM5QyxNQUFNLGlCQUFpQixHQUFHLEdBQVksRUFBRTtJQUN0QyxJQUFJO1FBQ0YsSUFBSSxPQUFPLFVBQVUsS0FBSyxXQUFXO1lBQUUsT0FBTyxLQUFLLENBQUE7UUFDbkQsTUFBTSxpQkFBaUIsR0FBRyxVQUFzRSxDQUFBO1FBQ2hH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LElBQUksRUFBRSxDQUFBO1lBQzdCLElBQUksdUJBQXVCLElBQUksNEJBQTRCLEVBQUU7Z0JBQzNELHNCQUFzQixFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO2dCQUMvRSx1QkFBdUIsR0FBRyxDQUFDLENBQUE7Z0JBQzNCLGVBQWUsR0FBRyxLQUFLLENBQUE7Z0JBQ3ZCLFlBQVksRUFBRSxDQUFBO2FBQ2Y7U0FDRjtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQzlCLHNCQUFzQixFQUFFLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUNuRSxDQUFDLENBQUMsQ0FBQTtJQUVGLFNBQVMsa0JBQWtCO1FBQ3pCLE9BQU8sa0JBQWtCLENBQUE7SUFDM0IsQ0FBQztJQUVELE9BQU87UUFDTCxHQUFHLGlCQUFpQjtRQUNwQixTQUFTO1FBQ1Qsa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUNoQixRQUFRO1FBQ1IsZUFBZTtLQUNoQixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFbmdpbmUsIFRyYW5zcG9ydCwgUmVhbG1JbmZvIH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgdHlwZSB7IFNlbmRCaW5hcnlSZXF1ZXN0LCBTZW5kQmluYXJ5UmVzcG9uc2UgfSBmcm9tICd+c3lzdGVtL0NvbW11bmljYXRpb25zQ29udHJvbGxlcidcblxuaW1wb3J0IHsgc3luY0ZpbHRlciB9IGZyb20gJy4vZmlsdGVyJ1xuaW1wb3J0IHsgZW5naW5lVG9DcmR0IH0gZnJvbSAnLi9zdGF0ZSdcbmltcG9ydCB7IEJpbmFyeU1lc3NhZ2VCdXMsIENvbW1zTWVzc2FnZSB9IGZyb20gJy4vYmluYXJ5LW1lc3NhZ2UtYnVzJ1xuaW1wb3J0IHsgZmV0Y2hQcm9maWxlIH0gZnJvbSAnLi91dGlscydcbmltcG9ydCB7IGVudGl0eVV0aWxzIH0gZnJvbSAnLi9lbnRpdGllcydcbmltcG9ydCB7IGNyZWF0ZVNlcnZlclZhbGlkYXRvciB9IGZyb20gJy4vc2VydmVyJ1xuaW1wb3J0IHR5cGUgeyBHZXRVc2VyRGF0YVJlcXVlc3QsIEdldFVzZXJEYXRhUmVzcG9uc2UgfSBmcm9tICd+c3lzdGVtL1VzZXJJZGVudGl0eSdcbmltcG9ydCB7IGRlZmluZVBsYXllckhlbHBlciB9IGZyb20gJy4uL3BsYXllcnMnXG5pbXBvcnQgeyBzZXJpYWxpemVDcmR0TWVzc2FnZXMgfSBmcm9tICcuLi9pbnRlcm5hbC90cmFuc3BvcnRzL2xvZ2dlcidcbmltcG9ydCB7IElzU2VydmVyUmVxdWVzdCwgSXNTZXJ2ZXJSZXNwb25zZSB9IGZyb20gJ35zeXN0ZW0vRW5naW5lQXBpJ1xuaW1wb3J0IHsgQXRvbSB9IGZyb20gJy4uL2F0b20nXG5pbXBvcnQgeyBzZXRHbG9iYWxSb29tLCBSb29tIH0gZnJvbSAnLi9ldmVudHMvaW1wbGVtZW50YXRpb24nXG5cbmV4cG9ydCB0eXBlIElQcm9maWxlID0geyBuZXR3b3JrSWQ6IG51bWJlcjsgdXNlcklkOiBzdHJpbmcgfVxuLy8gdXNlciB0aGF0IHdlIGFza2VkIGZvciB0aGUgaW5pdGFsIGNyZHQgc3RhdGVcbmV4cG9ydCBjb25zdCBBVVRIX1NFUlZFUl9QRUVSX0lEID0gJ2F1dGhvcml0YXRpdmUtc2VydmVyJ1xuZXhwb3J0IGNvbnN0IERFQlVHX05FVFdPUktfTUVTU0FHRVMgPSAoKSA9PiAoZ2xvYmFsVGhpcyBhcyBhbnkpLkRFQlVHX05FVFdPUktfTUVTU0FHRVMgPz8gZmFsc2VcblxuLy8gVGVzdCBlbnZpcm9ubWVudCBkZXRlY3Rpb24gd2l0aG91dCAnYXMgYW55J1xuY29uc3QgaXNUZXN0RW52aXJvbm1lbnQgPSAoKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSAndW5kZWZpbmVkJykgcmV0dXJuIGZhbHNlXG4gICAgY29uc3QgZ2xvYmFsV2l0aFByb2Nlc3MgPSBnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgeyBwcm9jZXNzPzogeyBlbnY/OiB7IE5PREVfRU5WPzogc3RyaW5nIH0gfSB9XG4gICAgcmV0dXJuIGdsb2JhbFdpdGhQcm9jZXNzLnByb2Nlc3M/LmVudj8uTk9ERV9FTlYgPT09ICd0ZXN0J1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYWRkU3luY1RyYW5zcG9ydChcbiAgZW5naW5lOiBJRW5naW5lLFxuICBzZW5kQmluYXJ5OiAobXNnOiBTZW5kQmluYXJ5UmVxdWVzdCkgPT4gUHJvbWlzZTxTZW5kQmluYXJ5UmVzcG9uc2U+LFxuICBnZXRVc2VyRGF0YTogKHZhbHVlOiBHZXRVc2VyRGF0YVJlcXVlc3QpID0+IFByb21pc2U8R2V0VXNlckRhdGFSZXNwb25zZT4sXG4gIGlzU2VydmVyRm46IChyZXF1ZXN0OiBJc1NlcnZlclJlcXVlc3QpID0+IFByb21pc2U8SXNTZXJ2ZXJSZXNwb25zZT4sXG4gIG5hbWU6IHN0cmluZ1xuKSB7XG4gIC8vIFByb2ZpbGUgSW5mb1xuICBjb25zdCBteVByb2ZpbGU6IElQcm9maWxlID0ge30gYXMgSVByb2ZpbGVcbiAgZmV0Y2hQcm9maWxlKG15UHJvZmlsZSEsIGdldFVzZXJEYXRhKVxuXG4gIGNvbnN0IGlzU2VydmVyQXRvbSA9IEF0b208Ym9vbGVhbj4oKVxuICBjb25zdCBpc1Jvb21SZWFkeUF0b20gPSBBdG9tPGJvb2xlYW4+KGZhbHNlKVxuXG4gIHZvaWQgaXNTZXJ2ZXJGbih7fSkudGhlbigoJDogSXNTZXJ2ZXJSZXNwb25zZSkgPT4ge1xuICAgIHJldHVybiBpc1NlcnZlckF0b20uc3dhcCghISQuaXNTZXJ2ZXIpXG4gIH0pXG5cbiAgLy8gRW50aXR5IHV0aWxzXG4gIGNvbnN0IGVudGl0eURlZmluaXRpb25zID0gZW50aXR5VXRpbHMoZW5naW5lLCBteVByb2ZpbGUpXG5cbiAgLy8gTGlzdCBvZiBNZXNzYWdlQnVzcyBtZXNzc2FnZXMgdG8gYmUgc2VudCBvbiBldmVyeSBmcmFtZSB0byBjb21tc1xuICBjb25zdCBwZW5kaW5nTWVzc2FnZUJ1c01lc3NhZ2VzVG9TZW5kOiB7IGRhdGE6IFVpbnQ4QXJyYXlbXTsgYWRkcmVzczogc3RyaW5nW10gfVtdID0gW11cblxuICBjb25zdCBiaW5hcnlNZXNzYWdlQnVzID0gQmluYXJ5TWVzc2FnZUJ1cygoZGF0YSwgYWRkcmVzcykgPT4ge1xuICAgIHBlbmRpbmdNZXNzYWdlQnVzTWVzc2FnZXNUb1NlbmQucHVzaCh7IGRhdGE6IFtkYXRhXSwgYWRkcmVzczogYWRkcmVzcyA/PyBbXSB9KVxuICB9KVxuXG4gIGZ1bmN0aW9uIGdldE1lc3NhZ2VzVG9TZW5kKCk6IHR5cGVvZiBwZW5kaW5nTWVzc2FnZUJ1c01lc3NhZ2VzVG9TZW5kIHtcbiAgICBjb25zdCBtZXNzYWdlcyA9IFsuLi5wZW5kaW5nTWVzc2FnZUJ1c01lc3NhZ2VzVG9TZW5kXVxuICAgIHBlbmRpbmdNZXNzYWdlQnVzTWVzc2FnZXNUb1NlbmQubGVuZ3RoID0gMFxuICAgIHJldHVybiBtZXNzYWdlc1xuICB9XG4gIGNvbnN0IHBsYXllcnMgPSBkZWZpbmVQbGF5ZXJIZWxwZXIoZW5naW5lKVxuXG4gIGxldCBzdGF0ZUlzU3luY3Jvbml6ZWQgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBXZSBuZWVkIHRvIHdhaXQgdGlsbCAyIHRpY2tzIHRoYXQgaXMgd2hlbiB0aGUgZW5naW5lIGlzIHJlYWR5IHRvIHNlbmQgbmV3IG1lc3NhZ2VzLlxuICAgKiBUaGUgZmlyc3QgdGljayBpcyBmb3IgdGhlIGNsaWVudCBlbmdpbmUgcHJvY2Vzc2luZyB0aGUgQ1JEVCBtZXNzYWdlcyxcbiAgICogYW5kIHRoZSBzZWNvbmQgb25lIGFyZSB0aGUgbWVzc2FnZXMgY3JlYXRlZCBieSB0aGUgbWFpbigpIGZ1bmN0aW9uLlxuICAgKiBTbyB0byBhdm9pZCBzZW5kaW5nIHRob3NlIG1lc3NhZ2VzLCB0aGF0IGFsbCB0aGUgY2xpZW50cyBoYXZlLCB0aHJvdWdoIHRoZSBuZXR3b3JrIHdlIHB1dCB0aGlzIHZhbGlkYXRpb24gaGVyZS5cbiAgICovXG4gIGxldCB0aWNrID0gMFxuICBjb25zdCBUUkFOU1BPUlRfSU5JVElBTElaRURfTlVNQkVSID0gaXNUZXN0RW52aXJvbm1lbnQoKSA/IDAgOiAyXG4gIC8vIEFkZCBTeW5jIFRyYW5zcG9ydFxuICBjb25zdCB0cmFuc3BvcnQ6IFRyYW5zcG9ydCA9IHtcbiAgICBmaWx0ZXI6IHN5bmNGaWx0ZXIoZW5naW5lKSxcbiAgICBzZW5kOiBhc3luYyAobWVzc2FnZXMpID0+IHtcbiAgICAgIGlmICh0aWNrIDw9IFRSQU5TUE9SVF9JTklUSUFMSVpFRF9OVU1CRVIpIHRpY2srK1xuICAgICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIHRpY2sgPiBUUkFOU1BPUlRfSU5JVElBTElaRURfTlVNQkVSID8gW21lc3NhZ2VzXS5mbGF0KCkgOiBbXSkge1xuICAgICAgICBpZiAobWVzc2FnZS5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmXG4gICAgICAgICAgICBjb25zb2xlLmxvZyguLi5BcnJheS5mcm9tKHNlcmlhbGl6ZUNyZHRNZXNzYWdlcygnW05ldHdvcmtNZXNzYWdlIHNlbnRdOicsIG1lc3NhZ2UsIGVuZ2luZSkpKVxuXG4gICAgICAgICAgLy8gQ29udmVydCByZWd1bGFyIG1lc3NhZ2VzIHRvIG5ldHdvcmsgbWVzc2FnZXMgZm9yIGJyb2FkY2FzdGluZyB3aXRoIGNodW5raW5nXG4gICAgICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBzZXJ2ZXJWYWxpZGF0b3IuY29udmVydFJlZ3VsYXJUb05ldHdvcmtNZXNzYWdlKG1lc3NhZ2UpKSB7XG4gICAgICAgICAgICBiaW5hcnlNZXNzYWdlQnVzLmVtaXQoQ29tbXNNZXNzYWdlLkNSRFQsIGNodW5rKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcGVlck1lc3NhZ2VzID0gZ2V0TWVzc2FnZXNUb1NlbmQoKVxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzZW5kQmluYXJ5KHsgZGF0YTogW10sIHBlZXJEYXRhOiBwZWVyTWVzc2FnZXMgfSlcbiAgICAgIGJpbmFyeU1lc3NhZ2VCdXMuX19wcm9jZXNzTWVzc2FnZXMocmVzcG9uc2UuZGF0YSlcbiAgICB9LFxuICAgIHR5cGU6IG5hbWVcbiAgfVxuXG4gIC8vIFNlcnZlciB2YWxpZGF0aW9uIHNldHVwXG4gIGNvbnN0IHNlcnZlclZhbGlkYXRvciA9IGNyZWF0ZVNlcnZlclZhbGlkYXRvcih7XG4gICAgZW5naW5lLFxuICAgIGJpbmFyeU1lc3NhZ2VCdXNcbiAgfSlcblxuICAvLyBJbml0aWFsaXplIEV2ZW50IEJ1cyB3aXRoIHJlZ2lzdGVyZWQgc2NoZW1hc1xuICBjb25zdCBldmVudEJ1cyA9IG5ldyBSb29tKGVuZ2luZSwgYmluYXJ5TWVzc2FnZUJ1cywgaXNTZXJ2ZXJBdG9tLCBpc1Jvb21SZWFkeUF0b20pXG5cbiAgLy8gU2V0IGdsb2JhbCBldmVudEJ1cyBpbnN0YW5jZVxuICBzZXRHbG9iYWxSb29tKGV2ZW50QnVzKVxuXG4gIGVuZ2luZS5hZGRUcmFuc3BvcnQodHJhbnNwb3J0KVxuICAvLyBFbmQgYWRkIHN5bmMgdHJhbnNwb3J0XG5cbiAgLy8gUmVjZWl2ZSAmIFByb2Nlc3MgQ1JEVF9TVEFURVxuICBiaW5hcnlNZXNzYWdlQnVzLm9uKENvbW1zTWVzc2FnZS5SRVFfQ1JEVF9TVEFURSwgYXN5bmMgKGRhdGEsIHNlbmRlcikgPT4ge1xuICAgIC8vIFJlcXVlc3RzIGFycml2aW5nIGJlZm9yZSByb2xlIHJlc29sdXRpb24gYXJlIHJlY292ZXJlZCBieSB0aGUgcmVxdWVzdGVyJ3MgcmV0cnkuXG4gICAgaWYgKCFpc1NlcnZlckF0b20uZ2V0T3JOdWxsKCkpIHJldHVyblxuXG4gICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmIGNvbnNvbGUubG9nKCdbUkVRX0NSRFRfU1RBVEVdJywgc2VuZGVyLCBEYXRlLm5vdygpKVxuICAgIGNvbnN0IGNodW5rcyA9IGVuZ2luZVRvQ3JkdChlbmdpbmUpXG4gICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDApIHtcbiAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnW0VtaXRpbmcgZW1wdHkgc3RhdGU6XScsIHNlbmRlciwgRGF0ZS5ub3coKSlcbiAgICAgIGJpbmFyeU1lc3NhZ2VCdXMuZW1pdChDb21tc01lc3NhZ2UuUkVTX0NSRFRfU1RBVEUsIG5ldyBVaW50OEFycmF5KCksIFtzZW5kZXJdKVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgICAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiYgY29uc29sZS5sb2coJ1tFbWl0aW5nOl0nLCBzZW5kZXIsIERhdGUubm93KCkpXG4gICAgICAgIGJpbmFyeU1lc3NhZ2VCdXMuZW1pdChDb21tc01lc3NhZ2UuUkVTX0NSRFRfU1RBVEUsIGNodW5rLCBbc2VuZGVyXSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIGJpbmFyeU1lc3NhZ2VCdXMub24oQ29tbXNNZXNzYWdlLlJFU19DUkRUX1NUQVRFLCBhc3luYyAoZGF0YSwgc2VuZGVyKSA9PiB7XG4gICAgcmVxdWVzdGluZ1N0YXRlID0gZmFsc2VcbiAgICBlbGFwc2VkVGltZVNpbmNlUmVxdWVzdCA9IDBcbiAgICBpZiAoaXNTZXJ2ZXJBdG9tLmdldE9yTnVsbCgpIHx8IHNlbmRlciAhPT0gQVVUSF9TRVJWRVJfUEVFUl9JRCkgcmV0dXJuXG4gICAgREVCVUdfTkVUV09SS19NRVNTQUdFUygpICYmIGNvbnNvbGUubG9nKCdbUHJvY2Vzc2luZyBDUkRUIFN0YXRlXScsIGRhdGEuYnl0ZUxlbmd0aCAvIDEwMjQsICdLQicpXG4gICAgaWYgKGRhdGEuYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgIHRyYW5zcG9ydC5vbm1lc3NhZ2UhKHNlcnZlclZhbGlkYXRvci5wcm9jZXNzQ2xpZW50TWVzc2FnZXMoZGF0YSwgc2VuZGVyKSlcbiAgICB9XG4gICAgc3RhdGVJc1N5bmNyb25pemVkID0gdHJ1ZVxuXG4gICAgLy8gSU1QT1JUQU5UOiBPbmx5IG1hcmsgcm9vbSBhcyByZWFkeSBBRlRFUiBzdGF0ZSBpcyBzeW5jaHJvbml6ZWRcbiAgICAvLyBUaGlzIGVuc3VyZXMgY29tbXMgaXMgdHJ1bHkgY29ubmVjdGVkIGFuZCB3b3JraW5nXG4gICAgY29uc3QgcmVhbG1JbmZvID0gUmVhbG1JbmZvLmdldE9yTnVsbChlbmdpbmUuUm9vdEVudGl0eSlcbiAgICBpZiAocmVhbG1JbmZvKSB7XG4gICAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiYgY29uc29sZS5sb2coJ1tpc1Jvb21SZWFkeV0gTWFya2luZyByb29tIGFzIHJlYWR5IGFmdGVyIHN0YXRlIHN5bmMnKVxuICAgICAgaXNSb29tUmVhZHlBdG9tLnN3YXAodHJ1ZSlcbiAgICB9XG4gIH0pXG5cbiAgLy8gcmVjZWl2ZWQgbWVzc2FnZSBmcm9tIHRoZSBuZXR3b3JrXG4gIGJpbmFyeU1lc3NhZ2VCdXMub24oQ29tbXNNZXNzYWdlLkNSRFQsICh2YWx1ZSwgc2VuZGVyKSA9PiB7XG4gICAgY29uc3QgaXNTZXJ2ZXIgPSBpc1NlcnZlckF0b20uZ2V0T3JOdWxsKClcbiAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiZcbiAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICB0cmFuc3BvcnQudHlwZSxcbiAgICAgICAgLi4uQXJyYXkuZnJvbShzZXJpYWxpemVDcmR0TWVzc2FnZXMoJ1tOZXR3b3JrTWVzc2FnZSByZWNlaXZlZF06JywgdmFsdWUsIGVuZ2luZSkpLFxuICAgICAgICBpc1NlcnZlclxuICAgICAgKVxuICAgIGlmIChpc1NlcnZlcikge1xuICAgICAgdHJhbnNwb3J0Lm9ubWVzc2FnZSEoc2VydmVyVmFsaWRhdG9yLnByb2Nlc3NTZXJ2ZXJNZXNzYWdlcyh2YWx1ZSwgc2VuZGVyKSlcbiAgICB9IGVsc2UgaWYgKHNlbmRlciA9PT0gQVVUSF9TRVJWRVJfUEVFUl9JRCkge1xuICAgICAgLy8gUHJvY2VzcyBuZXR3b3JrIG1lc3NhZ2VzIGZyb20gc2VydmVyIGFuZCBjb252ZXJ0IHRvIHJlZ3VsYXIgbWVzc2FnZXNcbiAgICAgIHRyYW5zcG9ydC5vbm1lc3NhZ2UhKHNlcnZlclZhbGlkYXRvci5wcm9jZXNzQ2xpZW50TWVzc2FnZXModmFsdWUsIHNlbmRlcikpXG4gICAgfVxuICB9KVxuXG4gIC8vIHJlY2VpdmVkIGF1dGhvcml0YXRpdmUgbWVzc2FnZSBmcm9tIHNlcnZlciAtIGZvcmNlIGFwcGx5IHRvIGZpeCBpbnZhbGlkIGxvY2FsIHN0YXRlXG4gIGJpbmFyeU1lc3NhZ2VCdXMub24oQ29tbXNNZXNzYWdlLkNSRFRfQVVUSE9SSVRBVElWRSwgKHZhbHVlLCBzZW5kZXIpID0+IHtcbiAgICAvLyBPbmx5IGFjY2VwdCBhdXRob3JpdGF0aXZlIG1lc3NhZ2VzIGZyb20gYXV0aG9yaXRhdGl2ZSBzZXJ2ZXJcbiAgICBpZiAoc2VuZGVyICE9PSBBVVRIX1NFUlZFUl9QRUVSX0lEKSByZXR1cm5cblxuICAgIC8vIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJlxuICAgIGNvbnNvbGUubG9nKCdbQVVUSE9SSVRBVElWRV0gUmVjZWl2ZWQgYXV0aG9yaXRhdGl2ZSBtZXNzYWdlIGZyb20gc2VydmVyOicsIHZhbHVlLmJ5dGVMZW5ndGgsICdieXRlcycpXG5cbiAgICAvLyBQcm9jZXNzIGF1dGhvcml0YXRpdmUgbWVzc2FnZXMgYnkgZm9yY2luZyB0aGVtIHRocm91Z2ggbm9ybWFsIENSRFQgcHJvY2Vzc2luZ1xuICAgIC8vIGJ1dCB3aXRoIGEgdGltZXN0YW1wIHRoYXQncyBndWFyYW50ZWVkIHRvIGJlIGFjY2VwdGVkXG4gICAgY29uc3QgYXV0aG9yaXRhdGl2ZUJ1ZmZlciA9IHNlcnZlclZhbGlkYXRvci5wcm9jZXNzQ2xpZW50TWVzc2FnZXModmFsdWUsIHNlbmRlciwgdHJ1ZSlcbiAgICBpZiAoYXV0aG9yaXRhdGl2ZUJ1ZmZlci5ieXRlTGVuZ3RoID4gMCkge1xuICAgICAgLy8gQXBwbHkgYXV0aG9yaXRhdGl2ZSBtZXNzYWdlIHRocm91Z2ggbm9ybWFsIHRyYW5zcG9ydCwgYnV0IHRoZSBzZXJ2ZXIncyBtZXNzYWdlc1xuICAgICAgLy8gc2hvdWxkIGJlIHByb2Nlc3NlZCBhcyBhdXRob3JpdGF0aXZlIHdpdGggc3BlY2lhbCB0aW1lc3RhbXAgaGFuZGxpbmdcbiAgICAgIHRyYW5zcG9ydC5vbm1lc3NhZ2UhKGF1dGhvcml0YXRpdmVCdWZmZXIpXG5cbiAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnW0FVVEhPUklUQVRJVkVdIEFwcGxpZWQgc2VydmVyIGF1dGhvcml0YXRpdmUgbWVzc2FnZSB0byBsb2NhbCBzdGF0ZScpXG4gICAgfVxuICB9KVxuXG4gIHBsYXllcnMub25FbnRlclNjZW5lKChwbGF5ZXIpID0+IHtcbiAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiYgY29uc29sZS5sb2coJ1tvbkVudGVyU2NlbmVdJywgcGxheWVyLnVzZXJJZClcbiAgICBpZiAoIWlzU2VydmVyQXRvbS5nZXRPck51bGwoKSAmJiBteVByb2ZpbGUudXNlcklkID09PSBwbGF5ZXIudXNlcklkKSB7XG4gICAgICByZXF1ZXN0U3RhdGUoKVxuICAgIH1cbiAgfSlcblxuICAvLyBBc2tzIGZvciB0aGUgUkVRX0NSRFRfU1RBVEUgd2hlbiBpdHMgY29ubmVjdGVkIHRvIGNvbW1zXG4gIFJlYWxtSW5mby5vbkNoYW5nZShlbmdpbmUuUm9vdEVudGl0eSwgKHZhbHVlKSA9PiB7XG4gICAgY29uc3QgaXNTZXJ2ZXIgPSBpc1NlcnZlckF0b20uZ2V0T3JOdWxsKClcblxuICAgIGlmICghdmFsdWU/LmlzQ29ubmVjdGVkU2NlbmVSb29tKSB7XG4gICAgICAvLyBPbmx5IHJlYWN0IHdoZW4gYWN0dWFsbHkgdHJhbnNpdGlvbmluZyBmcm9tIHJlYWR5IHRvIG5vdCByZWFkeVxuICAgICAgaWYgKGlzUm9vbVJlYWR5QXRvbS5nZXRPck51bGwoKSA9PT0gdHJ1ZSkge1xuICAgICAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiYgY29uc29sZS5sb2coJ0Rpc2Nvbm5lY3RlZCBmcm9tIGNvbW1zJylcbiAgICAgICAgaXNSb29tUmVhZHlBdG9tLnN3YXAoZmFsc2UpXG4gICAgICAgIGlmICghaXNTZXJ2ZXIpIHtcbiAgICAgICAgICBzdGF0ZUlzU3luY3Jvbml6ZWQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlPy5pc0Nvbm5lY3RlZFNjZW5lUm9vbSkge1xuICAgICAgcmVxdWVzdFN0YXRlKClcblxuICAgICAgLy8gRm9yIHNlcnZlcnMsIG1hcmsgYXMgcmVhZHkgaW1tZWRpYXRlbHkgd2hlbiBjb25uZWN0ZWRcbiAgICAgIC8vIChzZXJ2ZXJzIGRvbid0IG5lZWQgdG8gc3luYyBzdGF0ZSBmcm9tIGFueW9uZSlcbiAgICAgIGlmIChpc1NlcnZlciAmJiBpc1Jvb21SZWFkeUF0b20uZ2V0T3JOdWxsKCkgPT09IGZhbHNlKSB7XG4gICAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnW2lzUm9vbVJlYWR5XSBTZXJ2ZXIgbWFya2luZyByb29tIGFzIHJlYWR5JylcbiAgICAgICAgaXNSb29tUmVhZHlBdG9tLnN3YXAodHJ1ZSlcbiAgICAgIH1cbiAgICAgIC8vIEZvciBjbGllbnRzLCByb29tIHdpbGwgYmUgbWFya2VkIHJlYWR5IGFmdGVyIHJlY2VpdmluZyBDUkRUIHN0YXRlIChhYm92ZSlcbiAgICB9XG4gIH0pXG5cbiAgbGV0IHJlcXVlc3RpbmdTdGF0ZSA9IGZhbHNlXG4gIGxldCBlbGFwc2VkVGltZVNpbmNlUmVxdWVzdCA9IDBcbiAgY29uc3QgU1RBVEVfUkVRVUVTVF9SRVRSWV9JTlRFUlZBTCA9IDIuMCAvLyBzZWNvbmRzXG5cbiAgLyoqXG4gICAqIFdoeSB3ZSBoYXZlIHRvIHJlcXVlc3QgdGhlIHN0YXRlIGlmIHdlIGhhdmUgYSBzZXJ2ZXIgdGhhdCBjYW4gc2VuZCB1cyB0aGUgc3RhdGUgd2hlbiB3ZSBqb2luZWQ/XG4gICAqIFRoZSB0aGluZyBpcyB0aGF0IHdoZW4gdGhlIHNlcnZlciBkZXRlY3RzIGEgbmV3IEpPSU5fUEFSVElDSVBBTlQgb24gbGl2ZWtpdCByb29tLCBpdCBzZW5kcyBhdXRvbWF0aWNhbGx5IHRoZSBzdGF0ZSB0byB0aGF0IHBlZXIuXG4gICAqIEJ1dCBpbiB1bml0eSwgaXQgdGFrZXMgbW9yZSB0aW1lLCBzbyB0aGF0IG1lc3NhZ2UgaXMgbm90IGJlaW5nIGRlbGl2ZXJlZCB0byB0aGUgY2xpZW50LlxuICAgKiBTbyBpbnN0ZWFkLCB3aGVuIHdlIGFyZSBmaW5hbGx5IGNvbm5lY3RlZCB0byB0aGUgcm9vbSwgd2UgcmVxdWVzdCB0aGUgc3RhdGUsIGFuZCB0aGVuIHRoZSBzZXJ2ZXIgYW5zd2VycyB3aXRoIHRoZSBzdGF0ZSA6KVxuICAgKlxuICAgKiBJZiBubyByZXNwb25zZSBpcyByZWNlaXZlZCB3aXRoaW4gMiBzZWNvbmRzLCB0aGUgcmVxdWVzdCBpcyBhdXRvbWF0aWNhbGx5IHJldHJpZWQuXG4gICAqL1xuICBmdW5jdGlvbiByZXF1ZXN0U3RhdGUoKSB7XG4gICAgaWYgKGlzU2VydmVyQXRvbS5nZXRPck51bGwoKSkgcmV0dXJuXG4gICAgaWYgKFJlYWxtSW5mby5nZXRPck51bGwoZW5naW5lLlJvb3RFbnRpdHkpPy5pc0Nvbm5lY3RlZFNjZW5lUm9vbSAmJiAhcmVxdWVzdGluZ1N0YXRlKSB7XG4gICAgICByZXF1ZXN0aW5nU3RhdGUgPSB0cnVlXG4gICAgICBlbGFwc2VkVGltZVNpbmNlUmVxdWVzdCA9IDBcbiAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnUmVxdWVzdGluZyBzdGF0ZS4uLicpXG4gICAgICBiaW5hcnlNZXNzYWdlQnVzLmVtaXQoQ29tbXNNZXNzYWdlLlJFUV9DUkRUX1NUQVRFLCBuZXcgVWludDhBcnJheSgpKVxuICAgIH1cbiAgfVxuXG4gIC8vIFN5c3RlbSB0byByZXRyeSBzdGF0ZSByZXF1ZXN0IGlmIG5vIHJlc3BvbnNlIGlzIHJlY2VpdmVkIHdpdGhpbiB0aGUgcmV0cnkgaW50ZXJ2YWxcbiAgZW5naW5lLmFkZFN5c3RlbSgoZHQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChyZXF1ZXN0aW5nU3RhdGUgJiYgIXN0YXRlSXNTeW5jcm9uaXplZCkge1xuICAgICAgZWxhcHNlZFRpbWVTaW5jZVJlcXVlc3QgKz0gZHRcbiAgICAgIGlmIChlbGFwc2VkVGltZVNpbmNlUmVxdWVzdCA+PSBTVEFURV9SRVFVRVNUX1JFVFJZX0lOVEVSVkFMKSB7XG4gICAgICAgIERFQlVHX05FVFdPUktfTUVTU0FHRVMoKSAmJiBjb25zb2xlLmxvZygnU3RhdGUgcmVxdWVzdCB0aW1lZCBvdXQsIHJldHJ5aW5nLi4uJylcbiAgICAgICAgZWxhcHNlZFRpbWVTaW5jZVJlcXVlc3QgPSAwXG4gICAgICAgIHJlcXVlc3RpbmdTdGF0ZSA9IGZhbHNlXG4gICAgICAgIHJlcXVlc3RTdGF0ZSgpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHBsYXllcnMub25MZWF2ZVNjZW5lKCh1c2VySWQpID0+IHtcbiAgICBERUJVR19ORVRXT1JLX01FU1NBR0VTKCkgJiYgY29uc29sZS5sb2coJ1tvbkxlYXZlU2NlbmVdJywgdXNlcklkKVxuICB9KVxuXG4gIGZ1bmN0aW9uIGlzU3RhdGVTeW5jcm9uaXplZCgpIHtcbiAgICByZXR1cm4gc3RhdGVJc1N5bmNyb25pemVkXG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLmVudGl0eURlZmluaXRpb25zLFxuICAgIG15UHJvZmlsZSxcbiAgICBpc1N0YXRlU3luY3Jvbml6ZWQsXG4gICAgYmluYXJ5TWVzc2FnZUJ1cyxcbiAgICBldmVudEJ1cyxcbiAgICBpc1Jvb21SZWFkeUF0b21cbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@dcl/sdk",
3
3
  "description": "",
4
- "version": "7.29.1-36041177279.commit-502e633",
4
+ "version": "7.29.1-36624944101.commit-bb81ac6",
5
5
  "author": "Decentraland",
6
6
  "dependencies": {
7
- "@dcl/ecs": "7.29.1-36041177279.commit-502e633",
7
+ "@dcl/ecs": "7.29.1-36624944101.commit-bb81ac6",
8
8
  "@dcl/ecs-math": "2.1.0",
9
- "@dcl/js-runtime": "7.29.1-36041177279.commit-502e633",
10
- "@dcl/react-ecs": "7.29.1-36041177279.commit-502e633",
11
- "@dcl/sdk-commands": "7.29.1-36041177279.commit-502e633"
9
+ "@dcl/js-runtime": "7.29.1-36624944101.commit-bb81ac6",
10
+ "@dcl/react-ecs": "7.29.1-36624944101.commit-bb81ac6",
11
+ "@dcl/sdk-commands": "7.29.1-36624944101.commit-bb81ac6"
12
12
  },
13
13
  "keywords": [],
14
14
  "license": "Apache-2.0",
@@ -33,5 +33,5 @@
33
33
  },
34
34
  "types": "./index.d.ts",
35
35
  "typings": "./index.d.ts",
36
- "commit": "502e633b9f3f81eb8e0924783e0b5a7a62a4c087"
36
+ "commit": "bb81ac6fd3848c762bfa79b2402ca66860586ce6"
37
37
  }
@@ -115,6 +115,9 @@ export function addSyncTransport(
115
115
 
116
116
  // Receive & Process CRDT_STATE
117
117
  binaryMessageBus.on(CommsMessage.REQ_CRDT_STATE, async (data, sender) => {
118
+ // Requests arriving before role resolution are recovered by the requester's retry.
119
+ if (!isServerAtom.getOrNull()) return
120
+
118
121
  DEBUG_NETWORK_MESSAGES() && console.log('[REQ_CRDT_STATE]', sender, Date.now())
119
122
  const chunks = engineToCrdt(engine)
120
123
  if (chunks.length === 0) {