@dcl/sdk 7.0.6-4009020955.commit-08722f5 → 7.0.6-4055981423.commit-60b7f6f

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.
@@ -303,43 +303,29 @@ function getSceneJson({ baseFolders, pointers, customHashMaker }) {
303
303
  }
304
304
  return resultEntities;
305
305
  }
306
- function getEcsPath(workingDir) {
307
- try {
308
- return require.resolve('decentraland-ecs/package.json', {
309
- paths: [workingDir]
310
- });
311
- }
312
- catch (e) {
313
- return require.resolve('@dcl/sdk/package.json', {
314
- paths: [workingDir]
315
- });
316
- }
317
- }
318
306
  function serveStatic(dir, router) {
319
- const ecsPath = path.dirname(getEcsPath(dir));
320
- const dclKernelPath = path.dirname(require.resolve('@dcl/kernel/package.json', {
321
- paths: [dir, ecsPath]
307
+ const sdkPath = path.dirname(require.resolve('@dcl/sdk/package.json', {
308
+ paths: [dir]
322
309
  }));
323
- const dclKernelDefaultProfilePath = path.resolve(dclKernelPath, 'default-profile');
324
- const dclKernelImagesDecentralandConnect = path.resolve(dclKernelPath, 'images', 'decentraland-connect');
325
- const dclKernelLoaderPath = path.resolve(dclKernelPath, 'loader');
326
- const dclUnityRenderer = path.dirname(require.resolve('@dcl/unity-renderer/package.json', {
327
- paths: [dir, ecsPath]
310
+ const dclExplorerJsonPath = path.dirname(require.resolve('@dcl/explorer/package.json', {
311
+ paths: [dir, sdkPath]
328
312
  }));
313
+ const dclKernelDefaultProfilePath = path.resolve(dclExplorerJsonPath, 'default-profile');
314
+ const dclKernelImagesDecentralandConnect = path.resolve(dclExplorerJsonPath, 'images', 'decentraland-connect');
329
315
  const routes = [
330
316
  {
331
317
  route: '/',
332
- path: path.resolve(dclKernelPath, 'preview.html'),
318
+ path: path.resolve(dclExplorerJsonPath, 'preview.html'),
333
319
  type: 'text/html'
334
320
  },
335
321
  {
336
322
  route: '/favicon.ico',
337
- path: path.resolve(dclKernelPath, 'favicon.ico'),
323
+ path: path.resolve(dclExplorerJsonPath, 'favicon.ico'),
338
324
  type: 'text/html'
339
325
  },
340
326
  {
341
- route: '/@/artifacts/index.js',
342
- path: path.resolve(dclKernelPath, 'index.js'),
327
+ route: '/@/explorer/index.js',
328
+ path: path.resolve(dclExplorerJsonPath, 'index.js'),
343
329
  type: 'text/javascript'
344
330
  }
345
331
  ];
@@ -373,9 +359,8 @@ function serveStatic(dir, router) {
373
359
  });
374
360
  }
375
361
  createStaticRoutes('/images/decentraland-connect/:path+', dclKernelImagesDecentralandConnect);
376
- createStaticRoutes('/@/artifacts/unity-renderer/:path+', dclUnityRenderer, (filePath) => filePath.replace(/.br+$/, ''));
377
- createStaticRoutes('/@/artifacts/loader/:path+', dclKernelLoaderPath);
378
362
  createStaticRoutes('/default-profile/:path+', dclKernelDefaultProfilePath);
363
+ createStaticRoutes('/@/explorer/:path+', dclExplorerJsonPath, (filePath) => filePath.replace(/.br+$/, ''));
379
364
  router.get('/feature-flags/:file', async (ctx) => {
380
365
  const res = await (0, node_fetch_1.default)(`https://feature-flags.decentraland.zone/${ctx.params.file}`, {
381
366
  headers: {
@@ -497,4 +482,4 @@ function getFilesFromFolder({ folder, addOriginalPath, ignorePattern, customHash
497
482
  return ret;
498
483
  }
499
484
  exports.getFilesFromFolder = getFilesFromFolder;
500
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZW5kcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsMkNBQTRCO0FBQzVCLHVDQUF3QjtBQUN4QiwrQkFBdUM7QUFDdkMsK0NBQW9EO0FBQ3BELDBDQUFpRTtBQUNqRSxvREFBMkI7QUFDM0IseURBQTJDO0FBQzNDLHlDQUFpRDtBQUVqRCxTQUFTLGNBQWM7SUFDckIsT0FBTyxJQUFJLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0FBQ2pELENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLElBQVk7SUFDekMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFXLEVBQUUsTUFBaUM7SUFDL0UsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6QixNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNuQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1lBQy9DLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDeEQsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbEQsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSjtvQkFDRSxVQUFVLEVBQUUsV0FBVztvQkFDdkIsR0FBRyxFQUFFLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7b0JBQzdCLEtBQUssRUFBRSxNQUFNO29CQUNiLFVBQVUsRUFBRSxDQUFDO29CQUNiLFFBQVEsRUFBRSxHQUFHO29CQUNiLFdBQVcsRUFBRSxFQUFFO2lCQUNoQjthQUNGO1NBQ0YsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDckQsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSjtvQkFDRSxPQUFPLEVBQUUsVUFBVSxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRTtvQkFDakMsS0FBSyxFQUFFLDRDQUE0QztvQkFDbkQsRUFBRSxFQUFFLG9FQUFvRTtpQkFDekU7YUFDRjtTQUNGLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNsRCxNQUFNLE9BQU8sR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxtQkFBbUIsQ0FBQTtRQUV2RSxJQUFJO1lBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxzQkFBc0IsQ0FBQztnQkFDOUMsV0FBVztnQkFDWCxPQUFPO2FBQ1IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRWpDLElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDakMsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUE7Z0JBRXBDLE1BQU0sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtnQkFDckMsQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFBO2dCQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUE7Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQTtnQkFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLG9CQUFLLEVBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUNwQyxPQUFPLEVBQUU7d0JBQ1AsVUFBVSxFQUFFLE9BQU87cUJBQ3BCO29CQUNELE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU07b0JBQzFCLElBQUksRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJO2lCQUNsRSxDQUFDLENBQUE7Z0JBRUYsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBVSxDQUFBO2dCQUVuRCxJQUFJLENBQUEsZUFBZSxhQUFmLGVBQWUsdUJBQWYsZUFBZSxDQUFFLE1BQU0sTUFBSyxDQUFDLEVBQUU7b0JBQ2pDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFBO29CQUN4RSxPQUFPO3dCQUNMLE9BQU8sRUFBRTs0QkFDUCxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksb0JBQW9CO3lCQUN4RTt3QkFDRCxJQUFJLEVBQUUsZUFBZTtxQkFDdEIsQ0FBQTtpQkFDRjthQUNGO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsMERBQTBELEVBQUUsR0FBRyxDQUFDLENBQUE7U0FDOUU7UUFFRCxPQUFPLElBQUksRUFBRSxDQUFBO0lBQ2YsQ0FBQyxDQUFDLENBQUE7SUFFRixNQUFNLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUMxQyxNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQTtRQUNwQyxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDckMsQ0FBQyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFBO1FBQ3pCLENBQUMsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLFFBQVEsQ0FBQTtRQUNqQyxDQUFDLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUE7UUFDekIsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLG9CQUFLLEVBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3BDLE9BQU8sRUFBRTtnQkFDUCxVQUFVLEVBQUUsT0FBTzthQUNwQjtZQUNELE1BQU0sRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDMUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUk7U0FDbEUsQ0FBQyxDQUFBO1FBRUYsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUCxjQUFjLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksb0JBQW9CO2FBQ3hFO1lBQ0QsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1NBQ2YsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUE7UUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxvQkFBTyxFQUFFLENBQUE7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQ2hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxvQkFBSyxFQUFDLEdBQUcsV0FBVyxDQUFDLFFBQVEsRUFBRSxtQkFBbUIsRUFBRTtZQUNwRSxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU87WUFDUCxJQUFJLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJO1NBQ3ZCLENBQUMsQ0FBQTtRQUVGLE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQyxDQUFDLENBQUE7SUFFRixXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBSXhCLFlBQVksQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUE7QUFDbkMsQ0FBQztBQXhIRCxnREF3SEM7QUFFRCxTQUFTLFlBQVksQ0FBQyxNQUFpQyxFQUFFLFdBQXFCO0lBQzVFLE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsS0FBSyxFQUFFLEdBQVEsRUFBRSxJQUFTLEVBQUUsRUFBRTtRQUNsRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUczRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQWMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUN0RSxPQUFPLElBQUksRUFBRSxDQUFBO2FBQ2Q7WUFFRCxPQUFPO2dCQUNMLE9BQU8sRUFBRTtvQkFDUCxhQUFhLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtvQkFDekIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsZUFBZSxFQUFFLDRCQUE0QjtpQkFDOUM7Z0JBQ0QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7YUFDcEMsQ0FBQTtTQUNGO1FBRUQsT0FBTyxJQUFJLEVBQUUsQ0FBQTtJQUNmLENBQUMsQ0FBQyxDQUFBO0lBRUYsS0FBSyxVQUFVLHFCQUFxQixDQUFDLFFBQWtCO1FBQ3JELElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEMsT0FBTyxFQUFFLENBQUE7U0FDVjtRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxHQUFHLENBQy9CLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBRSxRQUFxQixDQUN6RixDQUFBO1FBRUQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDO1lBQ2xDLFdBQVc7WUFDWCxRQUFRLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztTQUN4QyxDQUFDLENBQUE7UUFDRixNQUFNLFdBQVcsR0FBRyxjQUFjLEVBQUUsQ0FBQTtRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFBLCtCQUFvQixFQUNqQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQ3RCLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUN4RCxDQUFBO1FBRUQsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFMUQsT0FBTyxDQUFDLEdBQUcsY0FBYyxFQUFFLEdBQUcsY0FBYyxDQUFDLENBQUE7SUFDL0MsQ0FBQztJQUdELE1BQU0sQ0FBQyxHQUFHLENBQUMseUJBQXlCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2xELE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUUsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBR0YsTUFBTSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ3JDLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ2pELENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pELE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixDQUFBO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLHNCQUFzQixDQUFDO1lBQ3ZDLE9BQU87WUFDUCxXQUFXO1NBQ1osQ0FBQyxDQUFBO1FBQ0YsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUE7UUFDaEMsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSixFQUFFLEVBQUUsSUFBSTtnQkFDUixJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMscUJBQXFCLENBQUMsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLElBQUksQ0FBQyxLQUFLLFVBQVUsQ0FBQzthQUMzRjtTQUNGLENBQUE7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUVGLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzdDLE1BQU0sT0FBTyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLG1CQUFtQixDQUFBO1FBQ3ZFLE9BQU87WUFDTCxJQUFJLEVBQUU7Z0JBQ0osRUFBRSxFQUFFLElBQUk7Z0JBQ1IsSUFBSSxFQUFFLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDO2FBQ3ZEO1NBQ0YsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsRUFBRSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtBQUV0RixTQUFTLHNCQUFzQixDQUFDLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBOEM7SUFDbEcsTUFBTSxpQkFBaUIsR0FBYSxFQUFFLENBQUE7SUFDdEMsS0FBSyxNQUFNLFdBQVcsSUFBSSxXQUFXLEVBQUU7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQTtRQUNuRSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUNuQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtTQUN6QztLQUNGO0lBRUQsTUFBTSxHQUFHLEdBQXVDLEVBQUUsQ0FBQTtJQUNsRCxLQUFLLE1BQU0sZ0JBQWdCLElBQUksaUJBQWlCLEVBQUU7UUFDaEQsSUFBSTtZQUNGLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFBO1NBQ3ZEO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLDhCQUE4QixnQkFBZ0IsZ0RBQWdELEVBQUUsR0FBRyxDQUFDLENBQUE7U0FDbkg7S0FDRjtJQUNELE9BQU8sR0FBRyxDQUFBO0FBQ1osQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxFQUFpRDs7SUFDakcsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ2xELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFFN0UsSUFBSSxDQUFDLGtCQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLENBQUMsa0JBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUVqRyxPQUFPLENBQUMsS0FBSyxDQUFDLDZEQUE2RCxFQUFFLE1BQU0sQ0FBQyxDQUFBO1FBQ3BGLE1BQU0sSUFBSSxLQUFLLENBQUMsMEJBQTBCLGdCQUFnQixHQUFHLENBQUMsQ0FBQTtLQUMvRDtJQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxDQUFBO0lBQzdELElBQUksaUJBQWlCLEdBQUcsRUFBRSxDQUFBO0lBQzFCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUNoQyxpQkFBaUIsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFlBQVksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0tBQ3RGO0lBRUQsTUFBTSxXQUFXLEdBQUcsa0JBQWtCLENBQUM7UUFDckMsTUFBTSxFQUFFLFdBQVc7UUFDbkIsZUFBZSxFQUFFLEtBQUs7UUFDdEIsYUFBYSxFQUFFLGlCQUFpQjtLQUNqQyxDQUFDLENBQUE7SUFFRixNQUFNLGlCQUFpQixHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUEsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLElBQUksTUFBSyxlQUFlLENBQUMsQ0FBQTtJQUNoRixNQUFNLFNBQVMsR0FDYixpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxLQUFJLE1BQUEsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLDBDQUFFLElBQUksQ0FBQSxJQUFJLEdBQUcsT0FBTyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0lBRXpHLE1BQU0sVUFBVSxHQUFHLDBDQUEwQyxDQUFBO0lBRTdELE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsaUNBQzdFLGNBQWMsS0FDakIsUUFBUSxFQUFFLFFBQVEsY0FBYyxDQUFDLFFBQVEsRUFBRSxFQUMzQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNoQyxHQUFHLEVBQUUsUUFBUSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsSUFBSSxFQUFFO1lBQ3RCLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsSUFBSSxFQUFFO1lBQzVCLElBQUksRUFBRSxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQyxJQUNILENBQUMsQ0FBQTtJQUVILE9BQU87UUFDTCxFQUFFLEVBQUUsVUFBVTtRQUNkLE1BQU0sRUFBRSxZQUFZLENBQUMsTUFBTTtRQUMzQixJQUFJLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMvQyxXQUFXLEVBQUUsWUFBWSxDQUFDLFdBQVc7UUFDckMsU0FBUyxFQUFFLFNBQVMsSUFBSSxFQUFFO1FBQzFCLE9BQU8sRUFBRSxHQUFHLE9BQU8sR0FBRztRQUN0QixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksSUFBSSxFQUFFO1FBQzdCLElBQUksRUFBRTtZQUNKLFFBQVEsRUFBRSxZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVE7WUFDcEMsUUFBUSxFQUFFLEVBQUU7WUFDWixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLFdBQVc7WUFDbEIsZUFBZSxFQUFFLGVBQXNCO1NBQ3hDO0tBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxFQUNwQixXQUFXLEVBQ1gsUUFBUSxFQUNSLGVBQWUsRUFLaEI7SUFDQyxNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxDQUFTLFFBQVEsQ0FBQyxDQUFBO0lBQ25ELE1BQU0sY0FBYyxHQUFhLEVBQUUsQ0FBQTtJQUVuQyxNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDaEQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLENBQUE7UUFDeEQsSUFBSSxpQkFBaUIsR0FBRyxFQUFFLENBQUE7UUFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2hDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUE7U0FDakY7UUFFRCxPQUFPLGtCQUFrQixDQUFDO1lBQ3hCLE1BQU07WUFDTixlQUFlLEVBQUUsS0FBSztZQUN0QixhQUFhLEVBQUUsaUJBQWlCO1lBQ2hDLGVBQWU7U0FDaEIsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7SUFFRixLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRTtRQUVuRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUNuRixJQUFJLGFBQWEsRUFBRTtZQUdqQixhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFHbEUsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQTtTQUNuQztLQUNGO0lBRUQsT0FBTyxjQUFjLENBQUE7QUFDdkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLFVBQWtCO0lBQ3BDLElBQUk7UUFDRixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsK0JBQStCLEVBQUU7WUFDdEQsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDO1NBQ3BCLENBQUMsQ0FBQTtLQUNIO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUU7WUFDOUMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDO1NBQ3BCLENBQUMsQ0FBQTtLQUNIO0FBQ0gsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEdBQVcsRUFBRSxNQUFpQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO0lBQzdDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQ2hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsMEJBQTBCLEVBQUU7UUFDMUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQztLQUN0QixDQUFDLENBQ0gsQ0FBQTtJQUNELE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtJQUNsRixNQUFNLGtDQUFrQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLFFBQVEsRUFBRSxzQkFBc0IsQ0FBQyxDQUFBO0lBQ3hHLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUNuQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxFQUFFO1FBQ2xELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUM7S0FDdEIsQ0FBQyxDQUNILENBQUE7SUFFRCxNQUFNLE1BQU0sR0FBRztRQUNiO1lBQ0UsS0FBSyxFQUFFLEdBQUc7WUFDVixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDO1lBQ2pELElBQUksRUFBRSxXQUFXO1NBQ2xCO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsY0FBYztZQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDO1lBQ2hELElBQUksRUFBRSxXQUFXO1NBQ2xCO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsdUJBQXVCO1lBQzlCLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUM7WUFDN0MsSUFBSSxFQUFFLGlCQUFpQjtTQUN4QjtLQUNGLENBQUE7SUFFRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ3JDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUU7Z0JBQ3ZDLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzthQUN0QyxDQUFBO1FBQ0gsQ0FBQyxDQUFDLENBQUE7S0FDSDtJQUVELFNBQVMsa0JBQWtCLENBQUMsS0FBYSxFQUFFLE1BQWMsRUFBRSxZQUFZLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxHQUFHO1FBQ3pGLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUE7WUFDNUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7WUFHdEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzVCLE9BQU8sSUFBSSxFQUFFLENBQUE7YUFDZDtZQUVELE1BQU0sT0FBTyxHQUF3QjtnQkFDbkMsYUFBYSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJO2dCQUNkLGVBQWUsRUFBRSw0QkFBNEI7YUFDOUMsQ0FBQTtZQUVELElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQixDQUFBO2FBQzdDO1lBRUQsT0FBTztnQkFDTCxPQUFPO2dCQUNQLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDO2FBQ3BDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxxQ0FBcUMsRUFBRSxrQ0FBa0MsQ0FBQyxDQUFBO0lBQzdGLGtCQUFrQixDQUFDLG9DQUFvQyxFQUFFLGdCQUFnQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FDdEYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQzlCLENBQUE7SUFDRCxrQkFBa0IsQ0FBQyw0QkFBNEIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO0lBQ3JFLGtCQUFrQixDQUFDLHlCQUF5QixFQUFFLDJCQUEyQixDQUFDLENBQUE7SUFFMUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDL0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFBLG9CQUFLLEVBQUMsMkNBQTJDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDcEYsT0FBTyxFQUFFO2dCQUNQLFVBQVUsRUFBRSxPQUFPO2FBQ3BCO1NBQ0YsQ0FBQyxDQUFBO1FBQ0YsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxXQUFXLEVBQUU7U0FDOUIsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsRUFDMUIsTUFBTSxFQUNOLGVBQWUsRUFDZixhQUFhLEVBQ2IsZUFBZSxFQU1oQjtJQUNDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFBO0lBQzFELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQTtJQUV4QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUE7SUFDaEUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7UUFDbkMsSUFBSTtZQUNGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7WUFDN0UsSUFBSSxDQUFDLGtCQUFZLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN4QyxNQUFNLE1BQU0sR0FBRyxDQUFDLGtCQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUE7Z0JBRWpHLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkRBQTZELEVBQUUsTUFBTSxDQUFDLENBQUE7Z0JBQ3BGLE9BQU8sQ0FBQyxLQUFLLENBQUMsMEJBQTBCLGdCQUFnQixHQUFHLENBQUMsQ0FBQTthQUM3RDtpQkFBTTtnQkFDTCxhQUFhLEdBQUcsS0FBSyxDQUFBO2FBQ3RCO1NBQ0Y7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsR0FBRyxDQUFDLENBQUE7U0FDNUQ7S0FDRjtJQUVELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQTtJQUV0RSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxFQUFFO1FBQ2pELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQXdDLFNBQVMsQ0FBQyxLQUFLLENBQUE7UUFDOUUsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQTtRQUNsQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUV2QyxNQUFNLFdBQVcsR0FBRyxrQkFBa0IsQ0FBQztZQUNyQyxNQUFNO1lBQ04sZUFBZTtZQUNmLGFBQWE7WUFDYixlQUFlO1NBQ2hCLENBQUMsQ0FBQTtRQUVGLE9BQU87WUFDTCxPQUFPLEVBQUUsSUFBSTtZQUNiLElBQUksRUFBRSxvQkFBVSxDQUFDLEtBQUs7WUFDdEIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDckIsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzlCLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxTQUFTO1lBQ25CLE9BQU8sRUFBRSxXQUFXO1NBQ3JCLENBQUE7S0FDRjtJQUVELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxFQUFFLENBQzVCO0lBQ0UsSUFBSTtJQUNKLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCLFlBQVk7SUFDWixRQUFRO0lBQ1IsZUFBZTtJQUNmLGFBQWE7SUFDYixjQUFjO0lBQ2QsTUFBTTtJQUNOLE9BQU87SUFDUCxZQUFZO0lBQ1osTUFBTTtJQUNOLFdBQVc7SUFDWCxTQUFTO0lBQ1QsT0FBTztJQUNQLE9BQU87SUFDUCxPQUFPO0NBQ1IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7QUFFZCxTQUFnQixrQkFBa0IsQ0FBQyxFQUNqQyxNQUFNLEVBQ04sZUFBZSxFQUNmLGFBQWEsRUFDYixlQUFlLEVBTWhCO0lBQ0MsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFBO0lBRXRFLE1BQU0sUUFBUSxHQUFHLElBQUEsV0FBUSxFQUFDLE1BQU0sRUFBRTtRQUNoQyxHQUFHLEVBQUUsTUFBTTtRQUNYLEdBQUcsRUFBRSxLQUFLO1FBQ1YsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDO1NBQ0MsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDWixJQUFJO1lBQ0YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFO2dCQUFFLE9BQU07U0FDeEM7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE9BQU07U0FDUDtRQUNELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDekQsT0FBTyxHQUFHLENBQUE7SUFDWixDQUFDLENBQUM7U0FDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWEsQ0FBQTtJQUVqQyxNQUFNLG1CQUFtQixHQUFHLGFBQWEsSUFBSSxhQUFhLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUE7SUFDdEcsTUFBTSxFQUFFLEdBQUcsSUFBQSxnQkFBTSxHQUFFLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUE7SUFDNUMsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUV6QyxNQUFNLEdBQUcsR0FBK0QsRUFBRSxDQUFBO0lBRTFFLEtBQUssTUFBTSxJQUFJLElBQUksYUFBYSxFQUFFO1FBQ2hDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFBO1FBQy9DLElBQUk7WUFDRixJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEVBQUU7Z0JBQUUsU0FBUTtTQUNsRDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUNoQixTQUFRO1NBQ1Q7UUFFRCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUVsRCxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFFckYsR0FBRyxDQUFDLElBQUksQ0FBQztZQUNQLElBQUksRUFBRSx3QkFBd0IsQ0FBQyxXQUFXLEVBQUU7WUFDNUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTO1lBQ3pELElBQUksRUFBRSxTQUFTLENBQUMsWUFBWSxDQUFDO1NBQzlCLENBQUMsQ0FBQTtLQUNIO0lBRUQsT0FBTyxHQUFHLENBQUE7QUFDWixDQUFDO0FBekRELGdEQXlEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvaHR0cC1zZXJ2ZXInXG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcydcbmltcG9ydCB7IHN5bmMgYXMgZ2xvYlN5bmMgfSBmcm9tICdnbG9iJ1xuaW1wb3J0IHsgV2VhcmFibGVKc29uIH0gZnJvbSAnQGRjbC9zY2hlbWFzL2Rpc3Qvc2RrJ1xuaW1wb3J0IHsgQ29udGVudE1hcHBpbmcsIEVudGl0eSwgRW50aXR5VHlwZSB9IGZyb20gJ0BkY2wvc2NoZW1hcydcbmltcG9ydCBpZ25vcmUgZnJvbSAnaWdub3JlJ1xuaW1wb3J0IGZldGNoLCB7IEhlYWRlcnMgfSBmcm9tICdub2RlLWZldGNoJ1xuaW1wb3J0IHsgZmV0Y2hFbnRpdHlCeVBvaW50ZXIgfSBmcm9tICcuL2NhdGFseXN0J1xuXG5mdW5jdGlvbiBnZXRDYXRhbHlzdFVybCgpOiBVUkwge1xuICByZXR1cm4gbmV3IFVSTCgnaHR0cHM6Ly9wZWVyLmRlY2VudHJhbGFuZC5vcmcnKVxufVxuXG5mdW5jdGlvbiBzbWFydFdlYXJhYmxlTmFtZVRvSWQobmFtZTogc3RyaW5nKSB7XG4gIHJldHVybiBuYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkucmVwbGFjZSgvIC9nLCAnLScpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEVjczZFbmRwb2ludHMoZGlyOiBzdHJpbmcsIHJvdXRlcjogUm91dGVyPFByZXZpZXdDb21wb25lbnRzPikge1xuICBjb25zdCBiYXNlRm9sZGVycyA9IFtkaXJdXG4gIC8vIGhhbmRsZSBvbGQgcHJldmlldyBzY2VuZS5qc29uXG4gIHJvdXRlci5nZXQoJy9zY2VuZS5qc29uJywgYXN5bmMgKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBoZWFkZXJzOiB7ICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24vanNvbicgfSxcbiAgICAgIGJvZHk6IGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aC5qb2luKGRpciwgJ3NjZW5lLmpzb24nKSlcbiAgICB9XG4gIH0pXG5cbiAgcm91dGVyLmdldCgnL2xhbWJkYXMvZXhwbG9yZS9yZWFsbXMnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvZHk6IFtcbiAgICAgICAge1xuICAgICAgICAgIHNlcnZlck5hbWU6ICdsb2NhbGhvc3QnLFxuICAgICAgICAgIHVybDogYGh0dHA6Ly8ke2N0eC51cmwuaG9zdH1gLFxuICAgICAgICAgIGxheWVyOiAnc3R1YicsXG4gICAgICAgICAgdXNlcnNDb3VudDogMCxcbiAgICAgICAgICBtYXhVc2VyczogMTAwLFxuICAgICAgICAgIHVzZXJQYXJjZWxzOiBbXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9KVxuXG4gIHJvdXRlci5nZXQoJy9sYW1iZGFzL2NvbnRyYWN0cy9zZXJ2ZXJzJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib2R5OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBhZGRyZXNzOiBgaHR0cDovLyR7Y3R4LnVybC5ob3N0fWAsXG4gICAgICAgICAgb3duZXI6ICcweDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAnLFxuICAgICAgICAgIGlkOiAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJ1xuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9KVxuXG4gIHJvdXRlci5nZXQoJy9sYW1iZGFzL3Byb2ZpbGVzJywgYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBgJHtjdHgudXJsLnByb3RvY29sfS8vJHtjdHgudXJsLmhvc3R9L2NvbnRlbnQvY29udGVudHNgXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJldmlld1dlYXJhYmxlcyA9IGdldEFsbFByZXZpZXdXZWFyYWJsZXMoe1xuICAgICAgICBiYXNlRm9sZGVycyxcbiAgICAgICAgYmFzZVVybFxuICAgICAgfSkubWFwKCh3ZWFyYWJsZSkgPT4gd2VhcmFibGUuaWQpXG5cbiAgICAgIGlmIChwcmV2aWV3V2VhcmFibGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBjYXRhbHlzdFVybCA9IGdldENhdGFseXN0VXJsKClcblxuICAgICAgICBjb25zdCB1ID0gbmV3IFVSTChjdHgudXJsLnRvU3RyaW5nKCkpXG4gICAgICAgIHUuaG9zdCA9IGNhdGFseXN0VXJsLmhvc3RcbiAgICAgICAgdS5wcm90b2NvbCA9IGNhdGFseXN0VXJsLnByb3RvY29sXG4gICAgICAgIHUucG9ydCA9IGNhdGFseXN0VXJsLnBvcnRcbiAgICAgICAgY29uc3QgcmVxID0gYXdhaXQgZmV0Y2godS50b1N0cmluZygpLCB7XG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgY29ubmVjdGlvbjogJ2Nsb3NlJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWV0aG9kOiBjdHgucmVxdWVzdC5tZXRob2QsXG4gICAgICAgICAgYm9keTogY3R4LnJlcXVlc3QubWV0aG9kID09PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGN0eC5yZXF1ZXN0LmJvZHlcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBkZXBsb3llZFByb2ZpbGUgPSAoYXdhaXQgcmVxLmpzb24oKSkgYXMgYW55W11cblxuICAgICAgICBpZiAoZGVwbG95ZWRQcm9maWxlPy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBkZXBsb3llZFByb2ZpbGVbMF0uYXZhdGFyc1swXS5hdmF0YXIud2VhcmFibGVzLnB1c2goLi4ucHJldmlld1dlYXJhYmxlcylcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgICAnY29udGVudC10eXBlJzogcmVxLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnYXBwbGljYXRpb24vYmluYXJ5J1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6IGRlcGxveWVkUHJvZmlsZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gY2F0Y2ggcHJvZmlsZSBhbmQgZmlsbCB3aXRoIHByZXZpZXcgd2VhcmFibGVzLmAsIGVycilcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dCgpXG4gIH0pXG5cbiAgcm91dGVyLmFsbCgnL2xhbWJkYXMvOnBhdGgrJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGNhdGFseXN0VXJsID0gZ2V0Q2F0YWx5c3RVcmwoKVxuICAgIGNvbnN0IHUgPSBuZXcgVVJMKGN0eC51cmwudG9TdHJpbmcoKSlcbiAgICB1Lmhvc3QgPSBjYXRhbHlzdFVybC5ob3N0XG4gICAgdS5wcm90b2NvbCA9IGNhdGFseXN0VXJsLnByb3RvY29sXG4gICAgdS5wb3J0ID0gY2F0YWx5c3RVcmwucG9ydFxuICAgIGNvbnN0IHJlcSA9IGF3YWl0IGZldGNoKHUudG9TdHJpbmcoKSwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBjb25uZWN0aW9uOiAnY2xvc2UnXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiBjdHgucmVxdWVzdC5tZXRob2QsXG4gICAgICBib2R5OiBjdHgucmVxdWVzdC5tZXRob2QgPT09ICdnZXQnID8gdW5kZWZpbmVkIDogY3R4LnJlcXVlc3QuYm9keVxuICAgIH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnY29udGVudC10eXBlJzogcmVxLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSB8fCAnYXBwbGljYXRpb24vYmluYXJ5J1xuICAgICAgfSxcbiAgICAgIGJvZHk6IHJlcS5ib2R5XG4gICAgfVxuICB9KVxuXG4gIHJvdXRlci5wb3N0KCcvY29udGVudC9lbnRpdGllcycsIGFzeW5jIChjdHgpID0+IHtcbiAgICBjb25zdCBjYXRhbHlzdFVybCA9IGdldENhdGFseXN0VXJsKClcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAgIGNvbnNvbGUubG9nKGN0eC5yZXF1ZXN0LmhlYWRlcnMpXG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYCR7Y2F0YWx5c3RVcmwudG9TdHJpbmcoKX0vY29udGVudC9lbnRpdGllc2AsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IGN0eC5yZXF1ZXN0LmJvZHlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHJlc1xuICB9KVxuXG4gIHNlcnZlU3RhdGljKGRpciwgcm91dGVyKVxuXG4gIC8vIFRPRE86IGdldCB3b3Jrc3BhY2Ugc2NlbmVzICYgd2VhcmFibGVzLi4uXG5cbiAgc2VydmVGb2xkZXJzKHJvdXRlciwgYmFzZUZvbGRlcnMpXG59XG5cbmZ1bmN0aW9uIHNlcnZlRm9sZGVycyhyb3V0ZXI6IFJvdXRlcjxQcmV2aWV3Q29tcG9uZW50cz4sIGJhc2VGb2xkZXJzOiBzdHJpbmdbXSkge1xuICByb3V0ZXIuZ2V0KCcvY29udGVudC9jb250ZW50cy86aGFzaCcsIGFzeW5jIChjdHg6IGFueSwgbmV4dDogYW55KSA9PiB7XG4gICAgaWYgKGN0eC5wYXJhbXMuaGFzaCAmJiBjdHgucGFyYW1zLmhhc2guc3RhcnRzV2l0aCgnYjY0LScpKSB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShCdWZmZXIuZnJvbShjdHgucGFyYW1zLmhhc2gucmVwbGFjZSgvXmI2NC0vLCAnJyksICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpKVxuXG4gICAgICAvLyBvbmx5IHJldHVybiBmaWxlcyBJRiB0aGUgZmlsZSBpcyB3aXRoaW4gYSBiYXNlRm9sZGVyXG4gICAgICBpZiAoIWJhc2VGb2xkZXJzLmZpbmQoKGZvbGRlcjogc3RyaW5nKSA9PiBmdWxsUGF0aC5zdGFydHNXaXRoKGZvbGRlcikpKSB7XG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICd4LXRpbWVzdGFtcCc6IERhdGUubm93KCksXG4gICAgICAgICAgJ3gtc2VudCc6IHRydWUsXG4gICAgICAgICAgJ2NhY2hlLWNvbnRyb2wnOiAnbm8tY2FjaGUscHJpdmF0ZSxtYXgtYWdlPTEnXG4gICAgICAgIH0sXG4gICAgICAgIGJvZHk6IGZzLmNyZWF0ZVJlYWRTdHJlYW0oZnVsbFBhdGgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQoKVxuICB9KVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHBvaW50ZXJSZXF1ZXN0SGFuZGxlcihwb2ludGVyczogc3RyaW5nW10pIHtcbiAgICBpZiAoIXBvaW50ZXJzIHx8IHBvaW50ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdGVkUG9pbnRlcnMgPSBuZXcgU2V0PHN0cmluZz4oXG4gICAgICBwb2ludGVycyAmJiB0eXBlb2YgcG9pbnRlcnMgPT09ICdzdHJpbmcnID8gW3BvaW50ZXJzIGFzIHN0cmluZ10gOiAocG9pbnRlcnMgYXMgc3RyaW5nW10pXG4gICAgKVxuXG4gICAgY29uc3QgcmVzdWx0RW50aXRpZXMgPSBnZXRTY2VuZUpzb24oe1xuICAgICAgYmFzZUZvbGRlcnMsXG4gICAgICBwb2ludGVyczogQXJyYXkuZnJvbShyZXF1ZXN0ZWRQb2ludGVycylcbiAgICB9KVxuICAgIGNvbnN0IGNhdGFseXN0VXJsID0gZ2V0Q2F0YWx5c3RVcmwoKVxuICAgIGNvbnN0IHJlbW90ZSA9IGZldGNoRW50aXR5QnlQb2ludGVyKFxuICAgICAgY2F0YWx5c3RVcmwudG9TdHJpbmcoKSxcbiAgICAgIHBvaW50ZXJzLmZpbHRlcigoJDogc3RyaW5nKSA9PiAhJC5tYXRjaCgvLT9cXGQrLC0/XFxkKy8pKVxuICAgIClcblxuICAgIGNvbnN0IHNlcnZlckVudGl0aWVzID0gQXJyYXkuaXNBcnJheShyZW1vdGUpID8gcmVtb3RlIDogW11cblxuICAgIHJldHVybiBbLi4ucmVzdWx0RW50aXRpZXMsIC4uLnNlcnZlckVudGl0aWVzXVxuICB9XG5cbiAgLy8gUkVWSUVXIFJFU1BPTlNFIEZPUk1BVFxuICByb3V0ZXIuZ2V0KCcvY29udGVudC9lbnRpdGllcy9zY2VuZScsIGFzeW5jIChjdHgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9keTogYXdhaXQgcG9pbnRlclJlcXVlc3RIYW5kbGVyKGN0eC51cmwuc2VhcmNoUGFyYW1zLmdldEFsbCgncG9pbnRlcicpKVxuICAgIH1cbiAgfSlcblxuICAvLyBSRVZJRVcgUkVTUE9OU0UgRk9STUFUXG4gIHJvdXRlci5wb3N0KCcvY29udGVudC9lbnRpdGllcy9hY3RpdmUnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IGN0eC5yZXF1ZXN0Lmpzb24oKVxuICAgIHJldHVybiB7XG4gICAgICBib2R5OiBhd2FpdCBwb2ludGVyUmVxdWVzdEhhbmRsZXIoYm9keS5wb2ludGVycylcbiAgICB9XG4gIH0pXG5cbiAgcm91dGVyLmdldCgnL3ByZXZpZXctd2VhcmFibGVzLzppZCcsIGFzeW5jIChjdHgpID0+IHtcbiAgICBjb25zdCBiYXNlVXJsID0gYCR7Y3R4LnVybC5wcm90b2NvbH0vLyR7Y3R4LnVybC5ob3N0fS9jb250ZW50L2NvbnRlbnRzYFxuICAgIGNvbnN0IHdlYXJhYmxlcyA9IGdldEFsbFByZXZpZXdXZWFyYWJsZXMoe1xuICAgICAgYmFzZVVybCxcbiAgICAgIGJhc2VGb2xkZXJzXG4gICAgfSlcbiAgICBjb25zdCB3ZWFyYWJsZUlkID0gY3R4LnBhcmFtcy5pZFxuICAgIHJldHVybiB7XG4gICAgICBib2R5OiB7XG4gICAgICAgIG9rOiB0cnVlLFxuICAgICAgICBkYXRhOiB3ZWFyYWJsZXMuZmlsdGVyKCh3ZWFyYWJsZSkgPT4gc21hcnRXZWFyYWJsZU5hbWVUb0lkKHdlYXJhYmxlPy5uYW1lKSA9PT0gd2VhcmFibGVJZClcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgcm91dGVyLmdldCgnL3ByZXZpZXctd2VhcmFibGVzJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGJhc2VVcmwgPSBgJHtjdHgudXJsLnByb3RvY29sfS8vJHtjdHgudXJsLmhvc3R9L2NvbnRlbnQvY29udGVudHNgXG4gICAgcmV0dXJuIHtcbiAgICAgIGJvZHk6IHtcbiAgICAgICAgb2s6IHRydWUsXG4gICAgICAgIGRhdGE6IGdldEFsbFByZXZpZXdXZWFyYWJsZXMoeyBiYXNlVXJsLCBiYXNlRm9sZGVycyB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgZGVmYXVsdEhhc2hNYWtlciA9IChzdHI6IHN0cmluZykgPT4gJ2I2NC0nICsgQnVmZmVyLmZyb20oc3RyKS50b1N0cmluZygnYmFzZTY0JylcblxuZnVuY3Rpb24gZ2V0QWxsUHJldmlld1dlYXJhYmxlcyh7IGJhc2VGb2xkZXJzLCBiYXNlVXJsIH06IHsgYmFzZUZvbGRlcnM6IHN0cmluZ1tdOyBiYXNlVXJsOiBzdHJpbmcgfSkge1xuICBjb25zdCB3ZWFyYWJsZVBhdGhBcnJheTogc3RyaW5nW10gPSBbXVxuICBmb3IgKGNvbnN0IHdlYXJhYmxlRGlyIG9mIGJhc2VGb2xkZXJzKSB7XG4gICAgY29uc3Qgd2VhcmFibGVKc29uUGF0aCA9IHBhdGgucmVzb2x2ZSh3ZWFyYWJsZURpciwgJ3dlYXJhYmxlLmpzb24nKVxuICAgIGlmIChmcy5leGlzdHNTeW5jKHdlYXJhYmxlSnNvblBhdGgpKSB7XG4gICAgICB3ZWFyYWJsZVBhdGhBcnJheS5wdXNoKHdlYXJhYmxlSnNvblBhdGgpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXJ2ZVdlYXJhYmxlPltdID0gW11cbiAgZm9yIChjb25zdCB3ZWFyYWJsZUpzb25QYXRoIG9mIHdlYXJhYmxlUGF0aEFycmF5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldC5wdXNoKHNlcnZlV2VhcmFibGUoeyB3ZWFyYWJsZUpzb25QYXRoLCBiYXNlVXJsIH0pKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihgQ291bGRuJ3QgbW9jayB0aGUgd2VhcmFibGUgJHt3ZWFyYWJsZUpzb25QYXRofS4gUGxlYXNlIHZlcmlmeSB0aGUgY29ycmVjdCBmb3JtYXQgYW5kIHNjaGVtZS5gLCBlcnIpXG4gICAgfVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gc2VydmVXZWFyYWJsZSh7IHdlYXJhYmxlSnNvblBhdGgsIGJhc2VVcmwgfTogeyB3ZWFyYWJsZUpzb25QYXRoOiBzdHJpbmc7IGJhc2VVcmw6IHN0cmluZyB9KSB7XG4gIGNvbnN0IHdlYXJhYmxlRGlyID0gcGF0aC5kaXJuYW1lKHdlYXJhYmxlSnNvblBhdGgpXG4gIGNvbnN0IHdlYXJhYmxlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHdlYXJhYmxlSnNvblBhdGgpLnRvU3RyaW5nKCkpXG5cbiAgaWYgKCFXZWFyYWJsZUpzb24udmFsaWRhdGUod2VhcmFibGVKc29uKSkge1xuICAgIGNvbnN0IGVycm9ycyA9IChXZWFyYWJsZUpzb24udmFsaWRhdGUuZXJyb3JzIHx8IFtdKS5tYXAoKGEpID0+IGAke2EuZGF0YX0gJHthLm1lc3NhZ2V9YCkuam9pbignJylcblxuICAgIGNvbnNvbGUuZXJyb3IoYFVuYWJsZSB0byB2YWxpZGF0ZSB3ZWFyYWJsZS5qc29uIHByb3Blcmx5LCBwbGVhc2UgY2hlY2sgaXQuYCwgZXJyb3JzKVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3ZWFyYWJsZS5qc29uICgke3dlYXJhYmxlSnNvblBhdGh9KWApXG4gIH1cblxuICBjb25zdCBkY2xJZ25vcmVQYXRoID0gcGF0aC5yZXNvbHZlKHdlYXJhYmxlRGlyLCAnLmRjbGlnbm9yZScpXG4gIGxldCBpZ25vcmVGaWxlQ29udGVudCA9ICcnXG4gIGlmIChmcy5leGlzdHNTeW5jKGRjbElnbm9yZVBhdGgpKSB7XG4gICAgaWdub3JlRmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMocGF0aC5yZXNvbHZlKHdlYXJhYmxlRGlyLCAnLmRjbGlnbm9yZScpLCAndXRmLTgnKVxuICB9XG5cbiAgY29uc3QgaGFzaGVkRmlsZXMgPSBnZXRGaWxlc0Zyb21Gb2xkZXIoe1xuICAgIGZvbGRlcjogd2VhcmFibGVEaXIsXG4gICAgYWRkT3JpZ2luYWxQYXRoOiBmYWxzZSxcbiAgICBpZ25vcmVQYXR0ZXJuOiBpZ25vcmVGaWxlQ29udGVudFxuICB9KVxuXG4gIGNvbnN0IHRodW1ibmFpbEZpbHRlcmVkID0gaGFzaGVkRmlsZXMuZmlsdGVyKCgkKSA9PiAkPy5maWxlID09PSAndGh1bWJuYWlsLnBuZycpXG4gIGNvbnN0IHRodW1ibmFpbCA9XG4gICAgdGh1bWJuYWlsRmlsdGVyZWQubGVuZ3RoID4gMCAmJiB0aHVtYm5haWxGaWx0ZXJlZFswXT8uaGFzaCAmJiBgJHtiYXNlVXJsfS8ke3RodW1ibmFpbEZpbHRlcmVkWzBdLmhhc2h9YFxuXG4gIGNvbnN0IHdlYXJhYmxlSWQgPSAndXJuOjhkYzJkN2FkLTk3ZTMtNDRkMC1iYTg5LWU4MzA1ZDc5NWE2YSdcblxuICBjb25zdCByZXByZXNlbnRhdGlvbnMgPSB3ZWFyYWJsZUpzb24uZGF0YS5yZXByZXNlbnRhdGlvbnMubWFwKChyZXByZXNlbnRhdGlvbikgPT4gKHtcbiAgICAuLi5yZXByZXNlbnRhdGlvbixcbiAgICBtYWluRmlsZTogYG1hbGUvJHtyZXByZXNlbnRhdGlvbi5tYWluRmlsZX1gLFxuICAgIGNvbnRlbnRzOiBoYXNoZWRGaWxlcy5tYXAoKCQpID0+ICh7XG4gICAgICBrZXk6IGBtYWxlLyR7JD8uZmlsZX1gLFxuICAgICAgdXJsOiBgJHtiYXNlVXJsfS8keyQ/Lmhhc2h9YCxcbiAgICAgIGhhc2g6ICQ/Lmhhc2hcbiAgICB9KSlcbiAgfSkpXG5cbiAgcmV0dXJuIHtcbiAgICBpZDogd2VhcmFibGVJZCxcbiAgICByYXJpdHk6IHdlYXJhYmxlSnNvbi5yYXJpdHksXG4gICAgaTE4bjogW3sgY29kZTogJ2VuJywgdGV4dDogd2VhcmFibGVKc29uLm5hbWUgfV0sXG4gICAgZGVzY3JpcHRpb246IHdlYXJhYmxlSnNvbi5kZXNjcmlwdGlvbixcbiAgICB0aHVtYm5haWw6IHRodW1ibmFpbCB8fCAnJyxcbiAgICBiYXNlVXJsOiBgJHtiYXNlVXJsfS9gLFxuICAgIG5hbWU6IHdlYXJhYmxlSnNvbi5uYW1lIHx8ICcnLFxuICAgIGRhdGE6IHtcbiAgICAgIGNhdGVnb3J5OiB3ZWFyYWJsZUpzb24uZGF0YS5jYXRlZ29yeSxcbiAgICAgIHJlcGxhY2VzOiBbXSxcbiAgICAgIGhpZGVzOiBbXSxcbiAgICAgIHRhZ3M6IFtdLFxuICAgICAgc2NlbmU6IGhhc2hlZEZpbGVzLFxuICAgICAgcmVwcmVzZW50YXRpb25zOiByZXByZXNlbnRhdGlvbnMgYXMgYW55XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFNjZW5lSnNvbih7XG4gIGJhc2VGb2xkZXJzLFxuICBwb2ludGVycyxcbiAgY3VzdG9tSGFzaE1ha2VyXG59OiB7XG4gIGJhc2VGb2xkZXJzOiBzdHJpbmdbXVxuICBwb2ludGVyczogc3RyaW5nW11cbiAgY3VzdG9tSGFzaE1ha2VyPzogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmdcbn0pOiBFbnRpdHlbXSB7XG4gIGNvbnN0IHJlcXVlc3RlZFBvaW50ZXJzID0gbmV3IFNldDxzdHJpbmc+KHBvaW50ZXJzKVxuICBjb25zdCByZXN1bHRFbnRpdGllczogRW50aXR5W10gPSBbXVxuXG4gIGNvbnN0IGFsbERlcGxveW1lbnRzID0gYmFzZUZvbGRlcnMubWFwKChmb2xkZXIpID0+IHtcbiAgICBjb25zdCBkY2xJZ25vcmVQYXRoID0gcGF0aC5yZXNvbHZlKGZvbGRlciwgJy5kY2xpZ25vcmUnKVxuICAgIGxldCBpZ25vcmVGaWxlQ29udGVudCA9ICcnXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZGNsSWdub3JlUGF0aCkpIHtcbiAgICAgIGlnbm9yZUZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZShmb2xkZXIsICcuZGNsaWdub3JlJyksICd1dGYtOCcpXG4gICAgfVxuXG4gICAgcmV0dXJuIGVudGl0eVYzRnJvbUZvbGRlcih7XG4gICAgICBmb2xkZXIsXG4gICAgICBhZGRPcmlnaW5hbFBhdGg6IGZhbHNlLFxuICAgICAgaWdub3JlUGF0dGVybjogaWdub3JlRmlsZUNvbnRlbnQsXG4gICAgICBjdXN0b21IYXNoTWFrZXJcbiAgICB9KVxuICB9KVxuXG4gIGZvciAoY29uc3QgcG9pbnRlciBvZiBBcnJheS5mcm9tKHJlcXVlc3RlZFBvaW50ZXJzKSkge1xuICAgIC8vIGdldCBkZXBsb3ltZW50IGJ5IHBvaW50ZXJcbiAgICBjb25zdCB0aGVEZXBsb3ltZW50ID0gYWxsRGVwbG95bWVudHMuZmluZCgoJCkgPT4gJCAmJiAkLnBvaW50ZXJzLmluY2x1ZGVzKHBvaW50ZXIpKVxuICAgIGlmICh0aGVEZXBsb3ltZW50KSB7XG4gICAgICAvLyByZW1vdmUgYWxsIHRoZSByZXF1aXJlZCBwb2ludGVycyBmcm9tIHRoZSByZXF1ZXN0ZWRQb2ludGVycyBzZXRcbiAgICAgIC8vIHRvIHByZXZlbnQgc2VuZGluZyBkdXBsaWNhdGVkIGVudGl0aWVzXG4gICAgICB0aGVEZXBsb3ltZW50LnBvaW50ZXJzLmZvckVhY2goKCQpID0+IHJlcXVlc3RlZFBvaW50ZXJzLmRlbGV0ZSgkKSlcblxuICAgICAgLy8gYWRkIHRoZSBkZXBsb3ltZW50IHRvIHRoZSByZXN1bHRzXG4gICAgICByZXN1bHRFbnRpdGllcy5wdXNoKHRoZURlcGxveW1lbnQpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdEVudGl0aWVzXG59XG5cbmZ1bmN0aW9uIGdldEVjc1BhdGgod29ya2luZ0Rpcjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHJlcXVpcmUucmVzb2x2ZSgnZGVjZW50cmFsYW5kLWVjcy9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW3dvcmtpbmdEaXJdXG4gICAgfSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiByZXF1aXJlLnJlc29sdmUoJ0BkY2wvc2RrL3BhY2thZ2UuanNvbicsIHtcbiAgICAgIHBhdGhzOiBbd29ya2luZ0Rpcl1cbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHNlcnZlU3RhdGljKGRpcjogc3RyaW5nLCByb3V0ZXI6IFJvdXRlcjxQcmV2aWV3Q29tcG9uZW50cz4pIHtcbiAgY29uc3QgZWNzUGF0aCA9IHBhdGguZGlybmFtZShnZXRFY3NQYXRoKGRpcikpXG4gIGNvbnN0IGRjbEtlcm5lbFBhdGggPSBwYXRoLmRpcm5hbWUoXG4gICAgcmVxdWlyZS5yZXNvbHZlKCdAZGNsL2tlcm5lbC9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW2RpciwgZWNzUGF0aF1cbiAgICB9KVxuICApXG4gIGNvbnN0IGRjbEtlcm5lbERlZmF1bHRQcm9maWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkY2xLZXJuZWxQYXRoLCAnZGVmYXVsdC1wcm9maWxlJylcbiAgY29uc3QgZGNsS2VybmVsSW1hZ2VzRGVjZW50cmFsYW5kQ29ubmVjdCA9IHBhdGgucmVzb2x2ZShkY2xLZXJuZWxQYXRoLCAnaW1hZ2VzJywgJ2RlY2VudHJhbGFuZC1jb25uZWN0JylcbiAgY29uc3QgZGNsS2VybmVsTG9hZGVyUGF0aCA9IHBhdGgucmVzb2x2ZShkY2xLZXJuZWxQYXRoLCAnbG9hZGVyJylcbiAgY29uc3QgZGNsVW5pdHlSZW5kZXJlciA9IHBhdGguZGlybmFtZShcbiAgICByZXF1aXJlLnJlc29sdmUoJ0BkY2wvdW5pdHktcmVuZGVyZXIvcGFja2FnZS5qc29uJywge1xuICAgICAgcGF0aHM6IFtkaXIsIGVjc1BhdGhdXG4gICAgfSlcbiAgKVxuXG4gIGNvbnN0IHJvdXRlcyA9IFtcbiAgICB7XG4gICAgICByb3V0ZTogJy8nLFxuICAgICAgcGF0aDogcGF0aC5yZXNvbHZlKGRjbEtlcm5lbFBhdGgsICdwcmV2aWV3Lmh0bWwnKSxcbiAgICAgIHR5cGU6ICd0ZXh0L2h0bWwnXG4gICAgfSxcbiAgICB7XG4gICAgICByb3V0ZTogJy9mYXZpY29uLmljbycsXG4gICAgICBwYXRoOiBwYXRoLnJlc29sdmUoZGNsS2VybmVsUGF0aCwgJ2Zhdmljb24uaWNvJyksXG4gICAgICB0eXBlOiAndGV4dC9odG1sJ1xuICAgIH0sXG4gICAge1xuICAgICAgcm91dGU6ICcvQC9hcnRpZmFjdHMvaW5kZXguanMnLFxuICAgICAgcGF0aDogcGF0aC5yZXNvbHZlKGRjbEtlcm5lbFBhdGgsICdpbmRleC5qcycpLFxuICAgICAgdHlwZTogJ3RleHQvamF2YXNjcmlwdCdcbiAgICB9XG4gIF1cblxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIHJvdXRlci5nZXQocm91dGUucm91dGUsIGFzeW5jIChfY3R4KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiByb3V0ZS50eXBlIH0sXG4gICAgICAgIGJvZHk6IGZzLmNyZWF0ZVJlYWRTdHJlYW0ocm91dGUucGF0aClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RhdGljUm91dGVzKHJvdXRlOiBzdHJpbmcsIGZvbGRlcjogc3RyaW5nLCB0cmFuc2Zvcm0gPSAoc3RyOiBzdHJpbmcpID0+IHN0cikge1xuICAgIHJvdXRlci5nZXQocm91dGUsIGFzeW5jIChjdHgsIG5leHQpID0+IHtcbiAgICAgIGNvbnN0IGZpbGUgPSBjdHgucGFyYW1zLnBhdGhcbiAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKGZvbGRlciwgdHJhbnNmb3JtKGZpbGUpKVxuXG4gICAgICAvLyBvbmx5IHJldHVybiBmaWxlcyBJRiB0aGUgZmlsZSBpcyB3aXRoaW4gYSBiYXNlRm9sZGVyXG4gICAgICBpZiAoIWZzLmV4aXN0c1N5bmMoZnVsbFBhdGgpKSB7XG4gICAgICAgIHJldHVybiBuZXh0KClcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgICAgJ3gtdGltZXN0YW1wJzogRGF0ZS5ub3coKSxcbiAgICAgICAgJ3gtc2VudCc6IHRydWUsXG4gICAgICAgICdjYWNoZS1jb250cm9sJzogJ25vLWNhY2hlLHByaXZhdGUsbWF4LWFnZT0xJ1xuICAgICAgfVxuXG4gICAgICBpZiAoZnVsbFBhdGguZW5kc1dpdGgoJy53YXNtJykpIHtcbiAgICAgICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSAnYXBwbGljYXRpb24vd2FzbSdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgYm9keTogZnMuY3JlYXRlUmVhZFN0cmVhbShmdWxsUGF0aClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgY3JlYXRlU3RhdGljUm91dGVzKCcvaW1hZ2VzL2RlY2VudHJhbGFuZC1jb25uZWN0LzpwYXRoKycsIGRjbEtlcm5lbEltYWdlc0RlY2VudHJhbGFuZENvbm5lY3QpXG4gIGNyZWF0ZVN0YXRpY1JvdXRlcygnL0AvYXJ0aWZhY3RzL3VuaXR5LXJlbmRlcmVyLzpwYXRoKycsIGRjbFVuaXR5UmVuZGVyZXIsIChmaWxlUGF0aCkgPT5cbiAgICBmaWxlUGF0aC5yZXBsYWNlKC8uYnIrJC8sICcnKVxuICApXG4gIGNyZWF0ZVN0YXRpY1JvdXRlcygnL0AvYXJ0aWZhY3RzL2xvYWRlci86cGF0aCsnLCBkY2xLZXJuZWxMb2FkZXJQYXRoKVxuICBjcmVhdGVTdGF0aWNSb3V0ZXMoJy9kZWZhdWx0LXByb2ZpbGUvOnBhdGgrJywgZGNsS2VybmVsRGVmYXVsdFByb2ZpbGVQYXRoKVxuXG4gIHJvdXRlci5nZXQoJy9mZWF0dXJlLWZsYWdzLzpmaWxlJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGBodHRwczovL2ZlYXR1cmUtZmxhZ3MuZGVjZW50cmFsYW5kLnpvbmUvJHtjdHgucGFyYW1zLmZpbGV9YCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICBjb25uZWN0aW9uOiAnY2xvc2UnXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4ge1xuICAgICAgYm9keTogYXdhaXQgcmVzLmFycmF5QnVmZmVyKClcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGVudGl0eVYzRnJvbUZvbGRlcih7XG4gIGZvbGRlcixcbiAgYWRkT3JpZ2luYWxQYXRoLFxuICBpZ25vcmVQYXR0ZXJuLFxuICBjdXN0b21IYXNoTWFrZXJcbn06IHtcbiAgZm9sZGVyOiBzdHJpbmdcbiAgYWRkT3JpZ2luYWxQYXRoPzogYm9vbGVhblxuICBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nXG4gIGN1c3RvbUhhc2hNYWtlcj86IChzdHI6IHN0cmluZykgPT4gc3RyaW5nXG59KTogRW50aXR5IHwgbnVsbCB7XG4gIGNvbnN0IHNjZW5lSnNvblBhdGggPSBwYXRoLnJlc29sdmUoZm9sZGVyLCAnLi9zY2VuZS5qc29uJylcbiAgbGV0IGlzUGFyY2VsU2NlbmUgPSB0cnVlXG5cbiAgY29uc3Qgd2VhcmFibGVKc29uUGF0aCA9IHBhdGgucmVzb2x2ZShmb2xkZXIsICcuL3dlYXJhYmxlLmpzb24nKVxuICBpZiAoZnMuZXhpc3RzU3luYyh3ZWFyYWJsZUpzb25QYXRoKSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB3ZWFyYWJsZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh3ZWFyYWJsZUpzb25QYXRoKS50b1N0cmluZygpKVxuICAgICAgaWYgKCFXZWFyYWJsZUpzb24udmFsaWRhdGUod2VhcmFibGVKc29uKSkge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSAoV2VhcmFibGVKc29uLnZhbGlkYXRlLmVycm9ycyB8fCBbXSkubWFwKChhKSA9PiBgJHthLmRhdGF9ICR7YS5tZXNzYWdlfWApLmpvaW4oJycpXG5cbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5hYmxlIHRvIHZhbGlkYXRlIHdlYXJhYmxlLmpzb24gcHJvcGVybHksIHBsZWFzZSBjaGVjayBpdC5gLCBlcnJvcnMpXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgd2VhcmFibGUuanNvbiAoJHt3ZWFyYWJsZUpzb25QYXRofSlgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNQYXJjZWxTY2VuZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gbG9hZCB3ZWFyYWJsZS5qc29uIHByb3Blcmx5YCwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhc2hNYWtlciA9IGN1c3RvbUhhc2hNYWtlciA/IGN1c3RvbUhhc2hNYWtlciA6IGRlZmF1bHRIYXNoTWFrZXJcblxuICBpZiAoZnMuZXhpc3RzU3luYyhzY2VuZUpzb25QYXRoKSAmJiBpc1BhcmNlbFNjZW5lKSB7XG4gICAgY29uc3Qgc2NlbmVKc29uID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoc2NlbmVKc29uUGF0aCkudG9TdHJpbmcoKSlcbiAgICBjb25zdCB7IGJhc2UsIHBhcmNlbHMgfTogeyBiYXNlOiBzdHJpbmc7IHBhcmNlbHM6IHN0cmluZ1tdIH0gPSBzY2VuZUpzb24uc2NlbmVcbiAgICBjb25zdCBwb2ludGVycyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gICAgcG9pbnRlcnMuYWRkKGJhc2UpXG4gICAgcGFyY2Vscy5mb3JFYWNoKCgkKSA9PiBwb2ludGVycy5hZGQoJCkpXG5cbiAgICBjb25zdCBtYXBwZWRGaWxlcyA9IGdldEZpbGVzRnJvbUZvbGRlcih7XG4gICAgICBmb2xkZXIsXG4gICAgICBhZGRPcmlnaW5hbFBhdGgsXG4gICAgICBpZ25vcmVQYXR0ZXJuLFxuICAgICAgY3VzdG9tSGFzaE1ha2VyXG4gICAgfSlcblxuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAndjMnLFxuICAgICAgdHlwZTogRW50aXR5VHlwZS5TQ0VORSxcbiAgICAgIGlkOiBoYXNoTWFrZXIoZm9sZGVyKSxcbiAgICAgIHBvaW50ZXJzOiBBcnJheS5mcm9tKHBvaW50ZXJzKSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIG1ldGFkYXRhOiBzY2VuZUpzb24sXG4gICAgICBjb250ZW50OiBtYXBwZWRGaWxlc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGRlZmF1bHREY2xJZ25vcmUgPSAoKSA9PlxuICBbXG4gICAgJy4qJyxcbiAgICAncGFja2FnZS5qc29uJyxcbiAgICAncGFja2FnZS1sb2NrLmpzb24nLFxuICAgICd5YXJuLWxvY2suanNvbicsXG4gICAgJ2J1aWxkLmpzb24nLFxuICAgICdleHBvcnQnLFxuICAgICd0c2NvbmZpZy5qc29uJyxcbiAgICAndHNsaW50Lmpzb24nLFxuICAgICdub2RlX21vZHVsZXMnLFxuICAgICcqLnRzJyxcbiAgICAnKi50c3gnLFxuICAgICdEb2NrZXJmaWxlJyxcbiAgICAnZGlzdCcsXG4gICAgJ1JFQURNRS5tZCcsXG4gICAgJyouYmxlbmQnLFxuICAgICcqLmZieCcsXG4gICAgJyouemlwJyxcbiAgICAnKi5yYXInXG4gIF0uam9pbignXFxuJylcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVzRnJvbUZvbGRlcih7XG4gIGZvbGRlcixcbiAgYWRkT3JpZ2luYWxQYXRoLFxuICBpZ25vcmVQYXR0ZXJuLFxuICBjdXN0b21IYXNoTWFrZXJcbn06IHtcbiAgZm9sZGVyOiBzdHJpbmdcbiAgYWRkT3JpZ2luYWxQYXRoPzogYm9vbGVhblxuICBpZ25vcmVQYXR0ZXJuPzogc3RyaW5nXG4gIGN1c3RvbUhhc2hNYWtlcj86IChzdHI6IHN0cmluZykgPT4gc3RyaW5nXG59KTogQ29udGVudE1hcHBpbmdbXSB7XG4gIGNvbnN0IGhhc2hNYWtlciA9IGN1c3RvbUhhc2hNYWtlciA/IGN1c3RvbUhhc2hNYWtlciA6IGRlZmF1bHRIYXNoTWFrZXJcblxuICBjb25zdCBhbGxGaWxlcyA9IGdsb2JTeW5jKCcqKi8qJywge1xuICAgIGN3ZDogZm9sZGVyLFxuICAgIGRvdDogZmFsc2UsXG4gICAgYWJzb2x1dGU6IHRydWVcbiAgfSlcbiAgICAubWFwKChmaWxlKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKGZpbGUpLmlzRmlsZSgpKSByZXR1cm5cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IF9mb2xkZXIgPSBmb2xkZXIucmVwbGFjZSgvXFxcXC9naSwgJy8nKVxuICAgICAgY29uc3Qga2V5ID0gZmlsZS5yZXBsYWNlKF9mb2xkZXIsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgICAgcmV0dXJuIGtleVxuICAgIH0pXG4gICAgLmZpbHRlcigoJCkgPT4gISEkKSBhcyBzdHJpbmdbXVxuXG4gIGNvbnN0IGVuc3VyZUlnbm9yZVBhdHRlcm4gPSBpZ25vcmVQYXR0ZXJuICYmIGlnbm9yZVBhdHRlcm4gIT09ICcnID8gaWdub3JlUGF0dGVybiA6IGRlZmF1bHREY2xJZ25vcmUoKVxuICBjb25zdCBpZyA9IGlnbm9yZSgpLmFkZChlbnN1cmVJZ25vcmVQYXR0ZXJuKVxuICBjb25zdCBmaWx0ZXJlZEZpbGVzID0gaWcuZmlsdGVyKGFsbEZpbGVzKVxuXG4gIGNvbnN0IHJldDogKENvbnRlbnRNYXBwaW5nICYgeyBvcmlnaW5hbF9wYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQgfSlbXSA9IFtdXG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbHRlcmVkRmlsZXMpIHtcbiAgICBjb25zdCBhYnNvbHV0ZVBhdGggPSBwYXRoLnJlc29sdmUoZm9sZGVyLCBmaWxlKVxuICAgIHRyeSB7XG4gICAgICBpZiAoIWZzLnN0YXRTeW5jKGFic29sdXRlUGF0aCkuaXNGaWxlKCkpIGNvbnRpbnVlXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnIpXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGFic29sdXRlRm9sZGVyID0gZm9sZGVyLnJlcGxhY2UoL1xcXFwvZ2ksICcvJylcblxuICAgIGNvbnN0IHJlbGF0aXZlRmlsZVBhdGhUb0ZvbGRlciA9IGZpbGUucmVwbGFjZShhYnNvbHV0ZUZvbGRlciwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpXG5cbiAgICByZXQucHVzaCh7XG4gICAgICBmaWxlOiByZWxhdGl2ZUZpbGVQYXRoVG9Gb2xkZXIudG9Mb3dlckNhc2UoKSxcbiAgICAgIG9yaWdpbmFsX3BhdGg6IGFkZE9yaWdpbmFsUGF0aCA/IGFic29sdXRlUGF0aCA6IHVuZGVmaW5lZCxcbiAgICAgIGhhc2g6IGhhc2hNYWtlcihhYnNvbHV0ZVBhdGgpXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiByZXRcbn1cbiJdfQ==
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZW5kcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsMkNBQTRCO0FBQzVCLHVDQUF3QjtBQUN4QiwrQkFBdUM7QUFDdkMsK0NBQW9EO0FBQ3BELDBDQUFpRTtBQUNqRSxvREFBMkI7QUFDM0IseURBQTJDO0FBQzNDLHlDQUFpRDtBQUVqRCxTQUFTLGNBQWM7SUFDckIsT0FBTyxJQUFJLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0FBQ2pELENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLElBQVk7SUFDekMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBQ3BELENBQUM7QUFFRCxTQUFnQixrQkFBa0IsQ0FBQyxHQUFXLEVBQUUsTUFBaUM7SUFDL0UsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6QixNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxLQUFLLElBQUksRUFBRTtRQUNuQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFO1lBQy9DLElBQUksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDeEQsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDbEQsT0FBTztZQUNMLElBQUksRUFBRTtnQkFDSjtvQkFDRSxVQUFVLEVBQUUsV0FBVztvQkFDdkIsR0FBRyxFQUFFLFVBQVUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7b0JBQzdCLEtBQUssRUFBRSxNQUFN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bnRzL2h0dHAtc2VydmVyJ1xuaW1wb3J0IHsgUHJldmlld0NvbXBvbmVudHMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnXG5pbXBvcnQgeyBzeW5jIGFzIGdsb2JTeW5jIH0gZnJvbSAnZ2xvYidcbmltcG9ydCB7IFdlYXJhYmxlSnNvbiB9IGZyb20gJ0BkY2wvc2NoZW1hcy9kaXN0L3NkaydcbmltcG9ydCB7IENvbnRlbnRNYXBwaW5nLCBFbnRpdHksIEVudGl0eVR5cGUgfSBmcm9tICdAZGNsL3NjaGVtYXMnXG5pbXBvcnQgaWdub3JlIGZyb20gJ2lnbm9yZSdcbmltcG9ydCBmZXRjaCwgeyBIZWFkZXJzIH0gZnJvbSAnbm9kZS1mZXRjaCdcbmltcG9ydCB7IGZldGNoRW50aXR5QnlQb2ludGVyIH0gZnJvbSAnLi9jYXRhbHlzdCdcblxuZnVuY3Rpb24gZ2V0Q2F0YWx5c3RVcmwoKTogVVJMIHtcbiAgcmV0dXJuIG5ldyBVUkwoJ2h0dHBzOi8vcGVlci5kZWNlbnRyYWxhbmQub3JnJylcbn1cblxuZnVuY3Rpb24gc21hcnRXZWFyYWJsZU5hbWVUb0lkKG5hbWU6IHN0cmluZykge1xuICByZXR1cm4gbmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLnJlcGxhY2UoLyAvZywgJy0nKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBFY3M2RW5kcG9pbnRzKGRpcjogc3RyaW5nLCByb3V0ZXI6IFJvdXRlcjxQcmV2aWV3Q29tcG9uZW50cz4pIHtcbiAgY29uc3QgYmFzZUZvbGRlcnMgPSBbZGlyXVxuICAvLyBoYW5kbGUgb2xkIHByZXZpZXcgc2NlbmUuanNvblxuICByb3V0ZXIuZ2V0KCcvc2NlbmUuanNvbicsIGFzeW5jICgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICBib2R5OiBmcy5jcmVhdGVSZWFkU3RyZWFtKHBhdGguam9pbihkaXIsICdzY2VuZS5qc29uJykpXG4gICAgfVxuICB9KVxuXG4gIHJvdXRlci5nZXQoJy9sYW1iZGFzL2V4cGxvcmUvcmVhbG1zJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib2R5OiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzZXJ2ZXJOYW1lOiAnbG9jYWxob3N0JyxcbiAgICAgICAgICB1cmw6IGBodHRwOi8vJHtjdHgudXJsLmhvc3R9YCxcbiAgICAgICAgICBsYXllcjogJ3N0dWInLFxuICAgICAgICAgIHVzZXJzQ291bnQ6IDAsXG4gICAgICAgICAgbWF4VXNlcnM6IDEwMCxcbiAgICAgICAgICB1c2VyUGFyY2VsczogW11cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSlcblxuICByb3V0ZXIuZ2V0KCcvbGFtYmRhcy9jb250cmFjdHMvc2VydmVycycsIGFzeW5jIChjdHgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9keTogW1xuICAgICAgICB7XG4gICAgICAgICAgYWRkcmVzczogYGh0dHA6Ly8ke2N0eC51cmwuaG9zdH1gLFxuICAgICAgICAgIG93bmVyOiAnMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgICBpZDogJzB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCdcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSlcblxuICByb3V0ZXIuZ2V0KCcvbGFtYmRhcy9wcm9maWxlcycsIGFzeW5jIChjdHgsIG5leHQpID0+IHtcbiAgICBjb25zdCBiYXNlVXJsID0gYCR7Y3R4LnVybC5wcm90b2NvbH0vLyR7Y3R4LnVybC5ob3N0fS9jb250ZW50L2NvbnRlbnRzYFxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByZXZpZXdXZWFyYWJsZXMgPSBnZXRBbGxQcmV2aWV3V2VhcmFibGVzKHtcbiAgICAgICAgYmFzZUZvbGRlcnMsXG4gICAgICAgIGJhc2VVcmxcbiAgICAgIH0pLm1hcCgod2VhcmFibGUpID0+IHdlYXJhYmxlLmlkKVxuXG4gICAgICBpZiAocHJldmlld1dlYXJhYmxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgY29uc3QgY2F0YWx5c3RVcmwgPSBnZXRDYXRhbHlzdFVybCgpXG5cbiAgICAgICAgY29uc3QgdSA9IG5ldyBVUkwoY3R4LnVybC50b1N0cmluZygpKVxuICAgICAgICB1Lmhvc3QgPSBjYXRhbHlzdFVybC5ob3N0XG4gICAgICAgIHUucHJvdG9jb2wgPSBjYXRhbHlzdFVybC5wcm90b2NvbFxuICAgICAgICB1LnBvcnQgPSBjYXRhbHlzdFVybC5wb3J0XG4gICAgICAgIGNvbnN0IHJlcSA9IGF3YWl0IGZldGNoKHUudG9TdHJpbmcoKSwge1xuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb246ICdjbG9zZSdcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1ldGhvZDogY3R4LnJlcXVlc3QubWV0aG9kLFxuICAgICAgICAgIGJvZHk6IGN0eC5yZXF1ZXN0Lm1ldGhvZCA9PT0gJ2dldCcgPyB1bmRlZmluZWQgOiBjdHgucmVxdWVzdC5ib2R5XG4gICAgICAgIH0pXG5cbiAgICAgICAgY29uc3QgZGVwbG95ZWRQcm9maWxlID0gKGF3YWl0IHJlcS5qc29uKCkpIGFzIGFueVtdXG5cbiAgICAgICAgaWYgKGRlcGxveWVkUHJvZmlsZT8ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgZGVwbG95ZWRQcm9maWxlWzBdLmF2YXRhcnNbMF0uYXZhdGFyLndlYXJhYmxlcy5wdXNoKC4uLnByZXZpZXdXZWFyYWJsZXMpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgJ2NvbnRlbnQtdHlwZSc6IHJlcS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJ2FwcGxpY2F0aW9uL2JpbmFyeSdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBib2R5OiBkZXBsb3llZFByb2ZpbGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIGNhdGNoIHByb2ZpbGUgYW5kIGZpbGwgd2l0aCBwcmV2aWV3IHdlYXJhYmxlcy5gLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG5leHQoKVxuICB9KVxuXG4gIHJvdXRlci5hbGwoJy9sYW1iZGFzLzpwYXRoKycsIGFzeW5jIChjdHgpID0+IHtcbiAgICBjb25zdCBjYXRhbHlzdFVybCA9IGdldENhdGFseXN0VXJsKClcbiAgICBjb25zdCB1ID0gbmV3IFVSTChjdHgudXJsLnRvU3RyaW5nKCkpXG4gICAgdS5ob3N0ID0gY2F0YWx5c3RVcmwuaG9zdFxuICAgIHUucHJvdG9jb2wgPSBjYXRhbHlzdFVybC5wcm90b2NvbFxuICAgIHUucG9ydCA9IGNhdGFseXN0VXJsLnBvcnRcbiAgICBjb25zdCByZXEgPSBhd2FpdCBmZXRjaCh1LnRvU3RyaW5nKCksIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgY29ubmVjdGlvbjogJ2Nsb3NlJ1xuICAgICAgfSxcbiAgICAgIG1ldGhvZDogY3R4LnJlcXVlc3QubWV0aG9kLFxuICAgICAgYm9keTogY3R4LnJlcXVlc3QubWV0aG9kID09PSAnZ2V0JyA/IHVuZGVmaW5lZCA6IGN0eC5yZXF1ZXN0LmJvZHlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgJ2NvbnRlbnQtdHlwZSc6IHJlcS5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJykgfHwgJ2FwcGxpY2F0aW9uL2JpbmFyeSdcbiAgICAgIH0sXG4gICAgICBib2R5OiByZXEuYm9keVxuICAgIH1cbiAgfSlcblxuICByb3V0ZXIucG9zdCgnL2NvbnRlbnQvZW50aXRpZXMnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgY2F0YWx5c3RVcmwgPSBnZXRDYXRhbHlzdFVybCgpXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKClcbiAgICBjb25zb2xlLmxvZyhjdHgucmVxdWVzdC5oZWFkZXJzKVxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke2NhdGFseXN0VXJsLnRvU3RyaW5nKCl9L2NvbnRlbnQvZW50aXRpZXNgLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5OiBjdHgucmVxdWVzdC5ib2R5XG4gICAgfSlcblxuICAgIHJldHVybiByZXNcbiAgfSlcblxuICBzZXJ2ZVN0YXRpYyhkaXIsIHJvdXRlcilcblxuICAvLyBUT0RPOiBnZXQgd29ya3NwYWNlIHNjZW5lcyAmIHdlYXJhYmxlcy4uLlxuXG4gIHNlcnZlRm9sZGVycyhyb3V0ZXIsIGJhc2VGb2xkZXJzKVxufVxuXG5mdW5jdGlvbiBzZXJ2ZUZvbGRlcnMocm91dGVyOiBSb3V0ZXI8UHJldmlld0NvbXBvbmVudHM+LCBiYXNlRm9sZGVyczogc3RyaW5nW10pIHtcbiAgcm91dGVyLmdldCgnL2NvbnRlbnQvY29udGVudHMvOmhhc2gnLCBhc3luYyAoY3R4OiBhbnksIG5leHQ6IGFueSkgPT4ge1xuICAgIGlmIChjdHgucGFyYW1zLmhhc2ggJiYgY3R4LnBhcmFtcy5oYXNoLnN0YXJ0c1dpdGgoJ2I2NC0nKSkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLnJlc29sdmUoQnVmZmVyLmZyb20oY3R4LnBhcmFtcy5oYXNoLnJlcGxhY2UoL15iNjQtLywgJycpLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0ZjgnKSlcblxuICAgICAgLy8gb25seSByZXR1cm4gZmlsZXMgSUYgdGhlIGZpbGUgaXMgd2l0aGluIGEgYmFzZUZvbGRlclxuICAgICAgaWYgKCFiYXNlRm9sZGVycy5maW5kKChmb2xkZXI6IHN0cmluZykgPT4gZnVsbFBhdGguc3RhcnRzV2l0aChmb2xkZXIpKSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAneC10aW1lc3RhbXAnOiBEYXRlLm5vdygpLFxuICAgICAgICAgICd4LXNlbnQnOiB0cnVlLFxuICAgICAgICAgICdjYWNoZS1jb250cm9sJzogJ25vLWNhY2hlLHByaXZhdGUsbWF4LWFnZT0xJ1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBmcy5jcmVhdGVSZWFkU3RyZWFtKGZ1bGxQYXRoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXh0KClcbiAgfSlcblxuICBhc3luYyBmdW5jdGlvbiBwb2ludGVyUmVxdWVzdEhhbmRsZXIocG9pbnRlcnM6IHN0cmluZ1tdKSB7XG4gICAgaWYgKCFwb2ludGVycyB8fCBwb2ludGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RlZFBvaW50ZXJzID0gbmV3IFNldDxzdHJpbmc+KFxuICAgICAgcG9pbnRlcnMgJiYgdHlwZW9mIHBvaW50ZXJzID09PSAnc3RyaW5nJyA/IFtwb2ludGVycyBhcyBzdHJpbmddIDogKHBvaW50ZXJzIGFzIHN0cmluZ1tdKVxuICAgIClcblxuICAgIGNvbnN0IHJlc3VsdEVudGl0aWVzID0gZ2V0U2NlbmVKc29uKHtcbiAgICAgIGJhc2VGb2xkZXJzLFxuICAgICAgcG9pbnRlcnM6IEFycmF5LmZyb20ocmVxdWVzdGVkUG9pbnRlcnMpXG4gICAgfSlcbiAgICBjb25zdCBjYXRhbHlzdFVybCA9IGdldENhdGFseXN0VXJsKClcbiAgICBjb25zdCByZW1vdGUgPSBmZXRjaEVudGl0eUJ5UG9pbnRlcihcbiAgICAgIGNhdGFseXN0VXJsLnRvU3RyaW5nKCksXG4gICAgICBwb2ludGVycy5maWx0ZXIoKCQ6IHN0cmluZykgPT4gISQubWF0Y2goLy0/XFxkKywtP1xcZCsvKSlcbiAgICApXG5cbiAgICBjb25zdCBzZXJ2ZXJFbnRpdGllcyA9IEFycmF5LmlzQXJyYXkocmVtb3RlKSA/IHJlbW90ZSA6IFtdXG5cbiAgICByZXR1cm4gWy4uLnJlc3VsdEVudGl0aWVzLCAuLi5zZXJ2ZXJFbnRpdGllc11cbiAgfVxuXG4gIC8vIFJFVklFVyBSRVNQT05TRSBGT1JNQVRcbiAgcm91dGVyLmdldCgnL2NvbnRlbnQvZW50aXRpZXMvc2NlbmUnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvZHk6IGF3YWl0IHBvaW50ZXJSZXF1ZXN0SGFuZGxlcihjdHgudXJsLnNlYXJjaFBhcmFtcy5nZXRBbGwoJ3BvaW50ZXInKSlcbiAgICB9XG4gIH0pXG5cbiAgLy8gUkVWSUVXIFJFU1BPTlNFIEZPUk1BVFxuICByb3V0ZXIucG9zdCgnL2NvbnRlbnQvZW50aXRpZXMvYWN0aXZlJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCBjdHgucmVxdWVzdC5qc29uKClcbiAgICByZXR1cm4ge1xuICAgICAgYm9keTogYXdhaXQgcG9pbnRlclJlcXVlc3RIYW5kbGVyKGJvZHkucG9pbnRlcnMpXG4gICAgfVxuICB9KVxuXG4gIHJvdXRlci5nZXQoJy9wcmV2aWV3LXdlYXJhYmxlcy86aWQnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgYmFzZVVybCA9IGAke2N0eC51cmwucHJvdG9jb2x9Ly8ke2N0eC51cmwuaG9zdH0vY29udGVudC9jb250ZW50c2BcbiAgICBjb25zdCB3ZWFyYWJsZXMgPSBnZXRBbGxQcmV2aWV3V2VhcmFibGVzKHtcbiAgICAgIGJhc2VVcmwsXG4gICAgICBiYXNlRm9sZGVyc1xuICAgIH0pXG4gICAgY29uc3Qgd2VhcmFibGVJZCA9IGN0eC5wYXJhbXMuaWRcbiAgICByZXR1cm4ge1xuICAgICAgYm9keToge1xuICAgICAgICBvazogdHJ1ZSxcbiAgICAgICAgZGF0YTogd2VhcmFibGVzLmZpbHRlcigod2VhcmFibGUpID0+IHNtYXJ0V2VhcmFibGVOYW1lVG9JZCh3ZWFyYWJsZT8ubmFtZSkgPT09IHdlYXJhYmxlSWQpXG4gICAgICB9XG4gICAgfVxuICB9KVxuXG4gIHJvdXRlci5nZXQoJy9wcmV2aWV3LXdlYXJhYmxlcycsIGFzeW5jIChjdHgpID0+IHtcbiAgICBjb25zdCBiYXNlVXJsID0gYCR7Y3R4LnVybC5wcm90b2NvbH0vLyR7Y3R4LnVybC5ob3N0fS9jb250ZW50L2NvbnRlbnRzYFxuICAgIHJldHVybiB7XG4gICAgICBib2R5OiB7XG4gICAgICAgIG9rOiB0cnVlLFxuICAgICAgICBkYXRhOiBnZXRBbGxQcmV2aWV3V2VhcmFibGVzKHsgYmFzZVVybCwgYmFzZUZvbGRlcnMgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmNvbnN0IGRlZmF1bHRIYXNoTWFrZXIgPSAoc3RyOiBzdHJpbmcpID0+ICdiNjQtJyArIEJ1ZmZlci5mcm9tKHN0cikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbmZ1bmN0aW9uIGdldEFsbFByZXZpZXdXZWFyYWJsZXMoeyBiYXNlRm9sZGVycywgYmFzZVVybCB9OiB7IGJhc2VGb2xkZXJzOiBzdHJpbmdbXTsgYmFzZVVybDogc3RyaW5nIH0pIHtcbiAgY29uc3Qgd2VhcmFibGVQYXRoQXJyYXk6IHN0cmluZ1tdID0gW11cbiAgZm9yIChjb25zdCB3ZWFyYWJsZURpciBvZiBiYXNlRm9sZGVycykge1xuICAgIGNvbnN0IHdlYXJhYmxlSnNvblBhdGggPSBwYXRoLnJlc29sdmUod2VhcmFibGVEaXIsICd3ZWFyYWJsZS5qc29uJylcbiAgICBpZiAoZnMuZXhpc3RzU3luYyh3ZWFyYWJsZUpzb25QYXRoKSkge1xuICAgICAgd2VhcmFibGVQYXRoQXJyYXkucHVzaCh3ZWFyYWJsZUpzb25QYXRoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJldDogUmV0dXJuVHlwZTx0eXBlb2Ygc2VydmVXZWFyYWJsZT5bXSA9IFtdXG4gIGZvciAoY29uc3Qgd2VhcmFibGVKc29uUGF0aCBvZiB3ZWFyYWJsZVBhdGhBcnJheSkge1xuICAgIHRyeSB7XG4gICAgICByZXQucHVzaChzZXJ2ZVdlYXJhYmxlKHsgd2VhcmFibGVKc29uUGF0aCwgYmFzZVVybCB9KSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYENvdWxkbid0IG1vY2sgdGhlIHdlYXJhYmxlICR7d2VhcmFibGVKc29uUGF0aH0uIFBsZWFzZSB2ZXJpZnkgdGhlIGNvcnJlY3QgZm9ybWF0IGFuZCBzY2hlbWUuYCwgZXJyKVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIHNlcnZlV2VhcmFibGUoeyB3ZWFyYWJsZUpzb25QYXRoLCBiYXNlVXJsIH06IHsgd2VhcmFibGVKc29uUGF0aDogc3RyaW5nOyBiYXNlVXJsOiBzdHJpbmcgfSkge1xuICBjb25zdCB3ZWFyYWJsZURpciA9IHBhdGguZGlybmFtZSh3ZWFyYWJsZUpzb25QYXRoKVxuICBjb25zdCB3ZWFyYWJsZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyh3ZWFyYWJsZUpzb25QYXRoKS50b1N0cmluZygpKVxuXG4gIGlmICghV2VhcmFibGVKc29uLnZhbGlkYXRlKHdlYXJhYmxlSnNvbikpIHtcbiAgICBjb25zdCBlcnJvcnMgPSAoV2VhcmFibGVKc29uLnZhbGlkYXRlLmVycm9ycyB8fCBbXSkubWFwKChhKSA9PiBgJHthLmRhdGF9ICR7YS5tZXNzYWdlfWApLmpvaW4oJycpXG5cbiAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gdmFsaWRhdGUgd2VhcmFibGUuanNvbiBwcm9wZXJseSwgcGxlYXNlIGNoZWNrIGl0LmAsIGVycm9ycylcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgd2VhcmFibGUuanNvbiAoJHt3ZWFyYWJsZUpzb25QYXRofSlgKVxuICB9XG5cbiAgY29uc3QgZGNsSWdub3JlUGF0aCA9IHBhdGgucmVzb2x2ZSh3ZWFyYWJsZURpciwgJy5kY2xpZ25vcmUnKVxuICBsZXQgaWdub3JlRmlsZUNvbnRlbnQgPSAnJ1xuICBpZiAoZnMuZXhpc3RzU3luYyhkY2xJZ25vcmVQYXRoKSkge1xuICAgIGlnbm9yZUZpbGVDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKHBhdGgucmVzb2x2ZSh3ZWFyYWJsZURpciwgJy5kY2xpZ25vcmUnKSwgJ3V0Zi04JylcbiAgfVxuXG4gIGNvbnN0IGhhc2hlZEZpbGVzID0gZ2V0RmlsZXNGcm9tRm9sZGVyKHtcbiAgICBmb2xkZXI6IHdlYXJhYmxlRGlyLFxuICAgIGFkZE9yaWdpbmFsUGF0aDogZmFsc2UsXG4gICAgaWdub3JlUGF0dGVybjogaWdub3JlRmlsZUNvbnRlbnRcbiAgfSlcblxuICBjb25zdCB0aHVtYm5haWxGaWx0ZXJlZCA9IGhhc2hlZEZpbGVzLmZpbHRlcigoJCkgPT4gJD8uZmlsZSA9PT0gJ3RodW1ibmFpbC5wbmcnKVxuICBjb25zdCB0aHVtYm5haWwgPVxuICAgIHRodW1ibmFpbEZpbHRlcmVkLmxlbmd0aCA+IDAgJiYgdGh1bWJuYWlsRmlsdGVyZWRbMF0/Lmhhc2ggJiYgYCR7YmFzZVVybH0vJHt0aHVtYm5haWxGaWx0ZXJlZFswXS5oYXNofWBcblxuICBjb25zdCB3ZWFyYWJsZUlkID0gJ3Vybjo4ZGMyZDdhZC05N2UzLTQ0ZDAtYmE4OS1lODMwNWQ3OTVhNmEnXG5cbiAgY29uc3QgcmVwcmVzZW50YXRpb25zID0gd2VhcmFibGVKc29uLmRhdGEucmVwcmVzZW50YXRpb25zLm1hcCgocmVwcmVzZW50YXRpb24pID0+ICh7XG4gICAgLi4ucmVwcmVzZW50YXRpb24sXG4gICAgbWFpbkZpbGU6IGBtYWxlLyR7cmVwcmVzZW50YXRpb24ubWFpbkZpbGV9YCxcbiAgICBjb250ZW50czogaGFzaGVkRmlsZXMubWFwKCgkKSA9PiAoe1xuICAgICAga2V5OiBgbWFsZS8keyQ/LmZpbGV9YCxcbiAgICAgIHVybDogYCR7YmFzZVVybH0vJHskPy5oYXNofWAsXG4gICAgICBoYXNoOiAkPy5oYXNoXG4gICAgfSkpXG4gIH0pKVxuXG4gIHJldHVybiB7XG4gICAgaWQ6IHdlYXJhYmxlSWQsXG4gICAgcmFyaXR5OiB3ZWFyYWJsZUpzb24ucmFyaXR5LFxuICAgIGkxOG46IFt7IGNvZGU6ICdlbicsIHRleHQ6IHdlYXJhYmxlSnNvbi5uYW1lIH1dLFxuICAgIGRlc2NyaXB0aW9uOiB3ZWFyYWJsZUpzb24uZGVzY3JpcHRpb24sXG4gICAgdGh1bWJuYWlsOiB0aHVtYm5haWwgfHwgJycsXG4gICAgYmFzZVVybDogYCR7YmFzZVVybH0vYCxcbiAgICBuYW1lOiB3ZWFyYWJsZUpzb24ubmFtZSB8fCAnJyxcbiAgICBkYXRhOiB7XG4gICAgICBjYXRlZ29yeTogd2VhcmFibGVKc29uLmRhdGEuY2F0ZWdvcnksXG4gICAgICByZXBsYWNlczogW10sXG4gICAgICBoaWRlczogW10sXG4gICAgICB0YWdzOiBbXSxcbiAgICAgIHNjZW5lOiBoYXNoZWRGaWxlcyxcbiAgICAgIHJlcHJlc2VudGF0aW9uczogcmVwcmVzZW50YXRpb25zIGFzIGFueVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTY2VuZUpzb24oe1xuICBiYXNlRm9sZGVycyxcbiAgcG9pbnRlcnMsXG4gIGN1c3RvbUhhc2hNYWtlclxufToge1xuICBiYXNlRm9sZGVyczogc3RyaW5nW11cbiAgcG9pbnRlcnM6IHN0cmluZ1tdXG4gIGN1c3RvbUhhc2hNYWtlcj86IChzdHI6IHN0cmluZykgPT4gc3RyaW5nXG59KTogRW50aXR5W10ge1xuICBjb25zdCByZXF1ZXN0ZWRQb2ludGVycyA9IG5ldyBTZXQ8c3RyaW5nPihwb2ludGVycylcbiAgY29uc3QgcmVzdWx0RW50aXRpZXM6IEVudGl0eVtdID0gW11cblxuICBjb25zdCBhbGxEZXBsb3ltZW50cyA9IGJhc2VGb2xkZXJzLm1hcCgoZm9sZGVyKSA9PiB7XG4gICAgY29uc3QgZGNsSWdub3JlUGF0aCA9IHBhdGgucmVzb2x2ZShmb2xkZXIsICcuZGNsaWdub3JlJylcbiAgICBsZXQgaWdub3JlRmlsZUNvbnRlbnQgPSAnJ1xuICAgIGlmIChmcy5leGlzdHNTeW5jKGRjbElnbm9yZVBhdGgpKSB7XG4gICAgICBpZ25vcmVGaWxlQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhwYXRoLnJlc29sdmUoZm9sZGVyLCAnLmRjbGlnbm9yZScpLCAndXRmLTgnKVxuICAgIH1cblxuICAgIHJldHVybiBlbnRpdHlWM0Zyb21Gb2xkZXIoe1xuICAgICAgZm9sZGVyLFxuICAgICAgYWRkT3JpZ2luYWxQYXRoOiBmYWxzZSxcbiAgICAgIGlnbm9yZVBhdHRlcm46IGlnbm9yZUZpbGVDb250ZW50LFxuICAgICAgY3VzdG9tSGFzaE1ha2VyXG4gICAgfSlcbiAgfSlcblxuICBmb3IgKGNvbnN0IHBvaW50ZXIgb2YgQXJyYXkuZnJvbShyZXF1ZXN0ZWRQb2ludGVycykpIHtcbiAgICAvLyBnZXQgZGVwbG95bWVudCBieSBwb2ludGVyXG4gICAgY29uc3QgdGhlRGVwbG95bWVudCA9IGFsbERlcGxveW1lbnRzLmZpbmQoKCQpID0+ICQgJiYgJC5wb2ludGVycy5pbmNsdWRlcyhwb2ludGVyKSlcbiAgICBpZiAodGhlRGVwbG95bWVudCkge1xuICAgICAgLy8gcmVtb3ZlIGFsbCB0aGUgcmVxdWlyZWQgcG9pbnRlcnMgZnJvbSB0aGUgcmVxdWVzdGVkUG9pbnRlcnMgc2V0XG4gICAgICAvLyB0byBwcmV2ZW50IHNlbmRpbmcgZHVwbGljYXRlZCBlbnRpdGllc1xuICAgICAgdGhlRGVwbG95bWVudC5wb2ludGVycy5mb3JFYWNoKCgkKSA9PiByZXF1ZXN0ZWRQb2ludGVycy5kZWxldGUoJCkpXG5cbiAgICAgIC8vIGFkZCB0aGUgZGVwbG95bWVudCB0byB0aGUgcmVzdWx0c1xuICAgICAgcmVzdWx0RW50aXRpZXMucHVzaCh0aGVEZXBsb3ltZW50KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRFbnRpdGllc1xufVxuXG5mdW5jdGlvbiBzZXJ2ZVN0YXRpYyhkaXI6IHN0cmluZywgcm91dGVyOiBSb3V0ZXI8UHJldmlld0NvbXBvbmVudHM+KSB7XG4gIGNvbnN0IHNka1BhdGggPSBwYXRoLmRpcm5hbWUoXG4gICAgcmVxdWlyZS5yZXNvbHZlKCdAZGNsL3Nkay9wYWNrYWdlLmpzb24nLCB7XG4gICAgICBwYXRoczogW2Rpcl1cbiAgICB9KVxuICApXG4gIGNvbnN0IGRjbEV4cGxvcmVySnNvblBhdGggPSBwYXRoLmRpcm5hbWUoXG4gICAgcmVxdWlyZS5yZXNvbHZlKCdAZGNsL2V4cGxvcmVyL3BhY2thZ2UuanNvbicsIHtcbiAgICAgIHBhdGhzOiBbZGlyLCBzZGtQYXRoXVxuICAgIH0pXG4gIClcblxuICBjb25zdCBkY2xLZXJuZWxEZWZhdWx0UHJvZmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZGNsRXhwbG9yZXJKc29uUGF0aCwgJ2RlZmF1bHQtcHJvZmlsZScpXG4gIGNvbnN0IGRjbEtlcm5lbEltYWdlc0RlY2VudHJhbGFuZENvbm5lY3QgPSBwYXRoLnJlc29sdmUoZGNsRXhwbG9yZXJKc29uUGF0aCwgJ2ltYWdlcycsICdkZWNlbnRyYWxhbmQtY29ubmVjdCcpXG5cbiAgY29uc3Qgcm91dGVzID0gW1xuICAgIHtcbiAgICAgIHJvdXRlOiAnLycsXG4gICAgICBwYXRoOiBwYXRoLnJlc29sdmUoZGNsRXhwbG9yZXJKc29uUGF0aCwgJ3ByZXZpZXcuaHRtbCcpLFxuICAgICAgdHlwZTogJ3RleHQvaHRtbCdcbiAgICB9LFxuICAgIHtcbiAgICAgIHJvdXRlOiAnL2Zhdmljb24uaWNvJyxcbiAgICAgIHBhdGg6IHBhdGgucmVzb2x2ZShkY2xFeHBsb3Jlckpzb25QYXRoLCAnZmF2aWNvbi5pY28nKSxcbiAgICAgIHR5cGU6ICd0ZXh0L2h0bWwnXG4gICAgfSxcbiAgICB7XG4gICAgICByb3V0ZTogJy9AL2V4cGxvcmVyL2luZGV4LmpzJyxcbiAgICAgIHBhdGg6IHBhdGgucmVzb2x2ZShkY2xFeHBsb3Jlckpzb25QYXRoLCAnaW5kZXguanMnKSxcbiAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgfVxuICBdXG5cbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICByb3V0ZXIuZ2V0KHJvdXRlLnJvdXRlLCBhc3luYyAoX2N0eCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVyczogeyAnQ29udGVudC1UeXBlJzogcm91dGUudHlwZSB9LFxuICAgICAgICBib2R5OiBmcy5jcmVhdGVSZWFkU3RyZWFtKHJvdXRlLnBhdGgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN0YXRpY1JvdXRlcyhyb3V0ZTogc3RyaW5nLCBmb2xkZXI6IHN0cmluZywgdHJhbnNmb3JtID0gKHN0cjogc3RyaW5nKSA9PiBzdHIpIHtcbiAgICByb3V0ZXIuZ2V0KHJvdXRlLCBhc3luYyAoY3R4LCBuZXh0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlID0gY3R4LnBhcmFtcy5wYXRoXG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGgucmVzb2x2ZShmb2xkZXIsIHRyYW5zZm9ybShmaWxlKSlcblxuICAgICAgLy8gb25seSByZXR1cm4gZmlsZXMgSUYgdGhlIGZpbGUgaXMgd2l0aGluIGEgYmFzZUZvbGRlclxuICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKGZ1bGxQYXRoKSkge1xuICAgICAgICByZXR1cm4gbmV4dCgpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICAgICd4LXRpbWVzdGFtcCc6IERhdGUubm93KCksXG4gICAgICAgICd4LXNlbnQnOiB0cnVlLFxuICAgICAgICAnY2FjaGUtY29udHJvbCc6ICduby1jYWNoZSxwcml2YXRlLG1heC1hZ2U9MSdcbiAgICAgIH1cblxuICAgICAgaWYgKGZ1bGxQYXRoLmVuZHNXaXRoKCcud2FzbScpKSB7XG4gICAgICAgIGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddID0gJ2FwcGxpY2F0aW9uL3dhc20nXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIGJvZHk6IGZzLmNyZWF0ZVJlYWRTdHJlYW0oZnVsbFBhdGgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGNyZWF0ZVN0YXRpY1JvdXRlcygnL2ltYWdlcy9kZWNlbnRyYWxhbmQtY29ubmVjdC86cGF0aCsnLCBkY2xLZXJuZWxJbWFnZXNEZWNlbnRyYWxhbmRDb25uZWN0KVxuICBjcmVhdGVTdGF0aWNSb3V0ZXMoJy9kZWZhdWx0LXByb2ZpbGUvOnBhdGgrJywgZGNsS2VybmVsRGVmYXVsdFByb2ZpbGVQYXRoKVxuICBjcmVhdGVTdGF0aWNSb3V0ZXMoJy9AL2V4cGxvcmVyLzpwYXRoKycsIGRjbEV4cGxvcmVySnNvblBhdGgsIChmaWxlUGF0aCkgPT4gZmlsZVBhdGgucmVwbGFjZSgvLmJyKyQvLCAnJykpXG5cbiAgcm91dGVyLmdldCgnL2ZlYXR1cmUtZmxhZ3MvOmZpbGUnLCBhc3luYyAoY3R4KSA9PiB7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2goYGh0dHBzOi8vZmVhdHVyZS1mbGFncy5kZWNlbnRyYWxhbmQuem9uZS8ke2N0eC5wYXJhbXMuZmlsZX1gLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIGNvbm5lY3Rpb246ICdjbG9zZSdcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB7XG4gICAgICBib2R5OiBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZW50aXR5VjNGcm9tRm9sZGVyKHtcbiAgZm9sZGVyLFxuICBhZGRPcmlnaW5hbFBhdGgsXG4gIGlnbm9yZVBhdHRlcm4sXG4gIGN1c3RvbUhhc2hNYWtlclxufToge1xuICBmb2xkZXI6IHN0cmluZ1xuICBhZGRPcmlnaW5hbFBhdGg/OiBib29sZWFuXG4gIGlnbm9yZVBhdHRlcm4/OiBzdHJpbmdcbiAgY3VzdG9tSGFzaE1ha2VyPzogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmdcbn0pOiBFbnRpdHkgfCBudWxsIHtcbiAgY29uc3Qgc2NlbmVKc29uUGF0aCA9IHBhdGgucmVzb2x2ZShmb2xkZXIsICcuL3NjZW5lLmpzb24nKVxuICBsZXQgaXNQYXJjZWxTY2VuZSA9IHRydWVcblxuICBjb25zdCB3ZWFyYWJsZUpzb25QYXRoID0gcGF0aC5yZXNvbHZlKGZvbGRlciwgJy4vd2VhcmFibGUuanNvbicpXG4gIGlmIChmcy5leGlzdHNTeW5jKHdlYXJhYmxlSnNvblBhdGgpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHdlYXJhYmxlSnNvbiA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHdlYXJhYmxlSnNvblBhdGgpLnRvU3RyaW5nKCkpXG4gICAgICBpZiAoIVdlYXJhYmxlSnNvbi52YWxpZGF0ZSh3ZWFyYWJsZUpzb24pKSB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IChXZWFyYWJsZUpzb24udmFsaWRhdGUuZXJyb3JzIHx8IFtdKS5tYXAoKGEpID0+IGAke2EuZGF0YX0gJHthLm1lc3NhZ2V9YCkuam9pbignJylcblxuICAgICAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gdmFsaWRhdGUgd2VhcmFibGUuanNvbiBwcm9wZXJseSwgcGxlYXNlIGNoZWNrIGl0LmAsIGVycm9ycylcbiAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCB3ZWFyYWJsZS5qc29uICgke3dlYXJhYmxlSnNvblBhdGh9KWApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc1BhcmNlbFNjZW5lID0gZmFsc2VcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFVuYWJsZSB0byBsb2FkIHdlYXJhYmxlLmpzb24gcHJvcGVybHlgLCBlcnIpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFzaE1ha2VyID0gY3VzdG9tSGFzaE1ha2VyID8gY3VzdG9tSGFzaE1ha2VyIDogZGVmYXVsdEhhc2hNYWtlclxuXG4gIGlmIChmcy5leGlzdHNTeW5jKHNjZW5lSnNvblBhdGgpICYmIGlzUGFyY2VsU2NlbmUpIHtcbiAgICBjb25zdCBzY2VuZUpzb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYyhzY2VuZUpzb25QYXRoKS50b1N0cmluZygpKVxuICAgIGNvbnN0IHsgYmFzZSwgcGFyY2VscyB9OiB7IGJhc2U6IHN0cmluZzsgcGFyY2Vsczogc3RyaW5nW10gfSA9IHNjZW5lSnNvbi5zY2VuZVxuICAgIGNvbnN0IHBvaW50ZXJzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgICBwb2ludGVycy5hZGQoYmFzZSlcbiAgICBwYXJjZWxzLmZvckVhY2goKCQpID0+IHBvaW50ZXJzLmFkZCgkKSlcblxuICAgIGNvbnN0IG1hcHBlZEZpbGVzID0gZ2V0RmlsZXNGcm9tRm9sZGVyKHtcbiAgICAgIGZvbGRlcixcbiAgICAgIGFkZE9yaWdpbmFsUGF0aCxcbiAgICAgIGlnbm9yZVBhdHRlcm4sXG4gICAgICBjdXN0b21IYXNoTWFrZXJcbiAgICB9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246ICd2MycsXG4gICAgICB0eXBlOiBFbnRpdHlUeXBlLlNDRU5FLFxuICAgICAgaWQ6IGhhc2hNYWtlcihmb2xkZXIpLFxuICAgICAgcG9pbnRlcnM6IEFycmF5LmZyb20ocG9pbnRlcnMpLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgbWV0YWRhdGE6IHNjZW5lSnNvbixcbiAgICAgIGNvbnRlbnQ6IG1hcHBlZEZpbGVzXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgZGVmYXVsdERjbElnbm9yZSA9ICgpID0+XG4gIFtcbiAgICAnLionLFxuICAgICdwYWNrYWdlLmpzb24nLFxuICAgICdwYWNrYWdlLWxvY2suanNvbicsXG4gICAgJ3lhcm4tbG9jay5qc29uJyxcbiAgICAnYnVpbGQuanNvbicsXG4gICAgJ2V4cG9ydCcsXG4gICAgJ3RzY29uZmlnLmpzb24nLFxuICAgICd0c2xpbnQuanNvbicsXG4gICAgJ25vZGVfbW9kdWxlcycsXG4gICAgJyoudHMnLFxuICAgICcqLnRzeCcsXG4gICAgJ0RvY2tlcmZpbGUnLFxuICAgICdkaXN0JyxcbiAgICAnUkVBRE1FLm1kJyxcbiAgICAnKi5ibGVuZCcsXG4gICAgJyouZmJ4JyxcbiAgICAnKi56aXAnLFxuICAgICcqLnJhcidcbiAgXS5qb2luKCdcXG4nKVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZXNGcm9tRm9sZGVyKHtcbiAgZm9sZGVyLFxuICBhZGRPcmlnaW5hbFBhdGgsXG4gIGlnbm9yZVBhdHRlcm4sXG4gIGN1c3RvbUhhc2hNYWtlclxufToge1xuICBmb2xkZXI6IHN0cmluZ1xuICBhZGRPcmlnaW5hbFBhdGg/OiBib29sZWFuXG4gIGlnbm9yZVBhdHRlcm4/OiBzdHJpbmdcbiAgY3VzdG9tSGFzaE1ha2VyPzogKHN0cjogc3RyaW5nKSA9PiBzdHJpbmdcbn0pOiBDb250ZW50TWFwcGluZ1tdIHtcbiAgY29uc3QgaGFzaE1ha2VyID0gY3VzdG9tSGFzaE1ha2VyID8gY3VzdG9tSGFzaE1ha2VyIDogZGVmYXVsdEhhc2hNYWtlclxuXG4gIGNvbnN0IGFsbEZpbGVzID0gZ2xvYlN5bmMoJyoqLyonLCB7XG4gICAgY3dkOiBmb2xkZXIsXG4gICAgZG90OiBmYWxzZSxcbiAgICBhYnNvbHV0ZTogdHJ1ZVxuICB9KVxuICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZnMuc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCkpIHJldHVyblxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgX2ZvbGRlciA9IGZvbGRlci5yZXBsYWNlKC9cXFxcL2dpLCAnLycpXG4gICAgICBjb25zdCBrZXkgPSBmaWxlLnJlcGxhY2UoX2ZvbGRlciwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgICByZXR1cm4ga2V5XG4gICAgfSlcbiAgICAuZmlsdGVyKCgkKSA9PiAhISQpIGFzIHN0cmluZ1tdXG5cbiAgY29uc3QgZW5zdXJlSWdub3JlUGF0dGVybiA9IGlnbm9yZVBhdHRlcm4gJiYgaWdub3JlUGF0dGVybiAhPT0gJycgPyBpZ25vcmVQYXR0ZXJuIDogZGVmYXVsdERjbElnbm9yZSgpXG4gIGNvbnN0IGlnID0gaWdub3JlKCkuYWRkKGVuc3VyZUlnbm9yZVBhdHRlcm4pXG4gIGNvbnN0IGZpbHRlcmVkRmlsZXMgPSBpZy5maWx0ZXIoYWxsRmlsZXMpXG5cbiAgY29uc3QgcmV0OiAoQ29udGVudE1hcHBpbmcgJiB7IG9yaWdpbmFsX3BhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCB9KVtdID0gW11cblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsdGVyZWRGaWxlcykge1xuICAgIGNvbnN0IGFic29sdXRlUGF0aCA9IHBhdGgucmVzb2x2ZShmb2xkZXIsIGZpbGUpXG4gICAgdHJ5IHtcbiAgICAgIGlmICghZnMuc3RhdFN5bmMoYWJzb2x1dGVQYXRoKS5pc0ZpbGUoKSkgY29udGludWVcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycilcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYWJzb2x1dGVGb2xkZXIgPSBmb2xkZXIucmVwbGFjZSgvXFxcXC9naSwgJy8nKVxuXG4gICAgY29uc3QgcmVsYXRpdmVGaWxlUGF0aFRvRm9sZGVyID0gZmlsZS5yZXBsYWNlKGFic29sdXRlRm9sZGVyLCAnJykucmVwbGFjZSgvXlxcLysvLCAnJylcblxuICAgIHJldC5wdXNoKHtcbiAgICAgIGZpbGU6IHJlbGF0aXZlRmlsZVBhdGhUb0ZvbGRlci50b0xvd2VyQ2FzZSgpLFxuICAgICAgb3JpZ2luYWxfcGF0aDogYWRkT3JpZ2luYWxQYXRoID8gYWJzb2x1dGVQYXRoIDogdW5kZWZpbmVkLFxuICAgICAgaGFzaDogaGFzaE1ha2VyKGFic29sdXRlUGF0aClcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIHJldFxufVxuIl19
@@ -350,48 +350,35 @@ function getSceneJson({
350
350
  return resultEntities
351
351
  }
352
352
 
353
- function getEcsPath(workingDir: string) {
354
- try {
355
- return require.resolve('decentraland-ecs/package.json', {
356
- paths: [workingDir]
357
- })
358
- } catch (e) {
359
- return require.resolve('@dcl/sdk/package.json', {
360
- paths: [workingDir]
361
- })
362
- }
363
- }
364
-
365
353
  function serveStatic(dir: string, router: Router<PreviewComponents>) {
366
- const ecsPath = path.dirname(getEcsPath(dir))
367
- const dclKernelPath = path.dirname(
368
- require.resolve('@dcl/kernel/package.json', {
369
- paths: [dir, ecsPath]
354
+ const sdkPath = path.dirname(
355
+ require.resolve('@dcl/sdk/package.json', {
356
+ paths: [dir]
370
357
  })
371
358
  )
372
- const dclKernelDefaultProfilePath = path.resolve(dclKernelPath, 'default-profile')
373
- const dclKernelImagesDecentralandConnect = path.resolve(dclKernelPath, 'images', 'decentraland-connect')
374
- const dclKernelLoaderPath = path.resolve(dclKernelPath, 'loader')
375
- const dclUnityRenderer = path.dirname(
376
- require.resolve('@dcl/unity-renderer/package.json', {
377
- paths: [dir, ecsPath]
359
+ const dclExplorerJsonPath = path.dirname(
360
+ require.resolve('@dcl/explorer/package.json', {
361
+ paths: [dir, sdkPath]
378
362
  })
379
363
  )
380
364
 
365
+ const dclKernelDefaultProfilePath = path.resolve(dclExplorerJsonPath, 'default-profile')
366
+ const dclKernelImagesDecentralandConnect = path.resolve(dclExplorerJsonPath, 'images', 'decentraland-connect')
367
+
381
368
  const routes = [
382
369
  {
383
370
  route: '/',
384
- path: path.resolve(dclKernelPath, 'preview.html'),
371
+ path: path.resolve(dclExplorerJsonPath, 'preview.html'),
385
372
  type: 'text/html'
386
373
  },
387
374
  {
388
375
  route: '/favicon.ico',
389
- path: path.resolve(dclKernelPath, 'favicon.ico'),
376
+ path: path.resolve(dclExplorerJsonPath, 'favicon.ico'),
390
377
  type: 'text/html'
391
378
  },
392
379
  {
393
- route: '/@/artifacts/index.js',
394
- path: path.resolve(dclKernelPath, 'index.js'),
380
+ route: '/@/explorer/index.js',
381
+ path: path.resolve(dclExplorerJsonPath, 'index.js'),
395
382
  type: 'text/javascript'
396
383
  }
397
384
  ]
@@ -433,11 +420,8 @@ function serveStatic(dir: string, router: Router<PreviewComponents>) {
433
420
  }
434
421
 
435
422
  createStaticRoutes('/images/decentraland-connect/:path+', dclKernelImagesDecentralandConnect)
436
- createStaticRoutes('/@/artifacts/unity-renderer/:path+', dclUnityRenderer, (filePath) =>
437
- filePath.replace(/.br+$/, '')
438
- )
439
- createStaticRoutes('/@/artifacts/loader/:path+', dclKernelLoaderPath)
440
423
  createStaticRoutes('/default-profile/:path+', dclKernelDefaultProfilePath)
424
+ createStaticRoutes('/@/explorer/:path+', dclExplorerJsonPath, (filePath) => filePath.replace(/.br+$/, ''))
441
425
 
442
426
  router.get('/feature-flags/:file', async (ctx) => {
443
427
  const res = await fetch(`https://feature-flags.decentraland.zone/${ctx.params.file}`, {
package/index.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export declare function onUpdate(deltaTime: number): Promise<void>;
2
- export declare function onStart(): Promise<void>;
package/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { engine } from '@dcl/ecs';
2
2
  import { pollEvents, setSubscribeFunction } from './observables';
3
- import { subscribe, sendBatch, crdtSendToRenderer } from '~system/EngineApi';
3
+ import { subscribe, sendBatch, crdtSendToRenderer, crdtGetState } from '~system/EngineApi';
4
4
  import { createRendererTransport } from './internal/transports/rendererTransport';
5
- engine.addTransport(createRendererTransport({ crdtSendToRenderer }));
5
+ const rendererTransport = createRendererTransport({ crdtSendToRenderer });
6
+ engine.addTransport(rendererTransport);
6
7
  setSubscribeFunction(subscribe);
7
8
  export async function onUpdate(deltaTime) {
8
9
  await engine.update(deltaTime);
@@ -10,5 +11,13 @@ export async function onUpdate(deltaTime) {
10
11
  }
11
12
  export async function onStart() {
12
13
  await engine.seal();
14
+ const response = await crdtGetState({ data: new Uint8Array() });
15
+ if (!!rendererTransport.onmessage) {
16
+ if (response && response.data && response.data.length) {
17
+ for (const byteArray of response.data) {
18
+ rendererTransport.onmessage(byteArray);
19
+ }
20
+ }
21
+ }
13
22
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDNUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFHakYsTUFBTSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxDQUFBO0FBSXBFLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRS9CLE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLFNBQWlCO0lBQzlDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM5QixNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUM3QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPO0lBQzNCLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGFscGhhIFRISVMgRklMRSBJTklUSUFMSVpFUyBUSEUgREVDRU5UUkFMQU5EIFJVTlRJTUUuIFdJTEwgQ0hBTkdFIFNPT04gKi9cblxuaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgeyBwb2xsRXZlbnRzLCBzZXRTdWJzY3JpYmVGdW5jdGlvbiB9IGZyb20gJy4vb2JzZXJ2YWJsZXMnXG5pbXBvcnQgeyBzdWJzY3JpYmUsIHNlbmRCYXRjaCwgY3JkdFNlbmRUb1JlbmRlcmVyIH0gZnJvbSAnfnN5c3RlbS9FbmdpbmVBcGknXG5pbXBvcnQgeyBjcmVhdGVSZW5kZXJlclRyYW5zcG9ydCB9IGZyb20gJy4vaW50ZXJuYWwvdHJhbnNwb3J0cy9yZW5kZXJlclRyYW5zcG9ydCdcblxuLy8gQXR0YWNoIENSRFQgdHJhbnNwb3J0XG5lbmdpbmUuYWRkVHJhbnNwb3J0KGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0KHsgY3JkdFNlbmRUb1JlbmRlcmVyIH0pKVxuXG4vLyBhdHRhY2ggZW5naW5lQXBpLnN1YnNjcmliZSBmdW5jdGlvbiBmb3IgZXZlbnRzLiBUaGlzIGlzIG9ubHkgYSB0cmFuc2l0aW9uXG4vLyBwYXRjaCB1bnRpbCBldmVudHMgYXJlIGNvbXBsZXRlbHkgbWlncmF0ZWQgdG8gQ1JEVCBtZXNzYWdlc1xuc2V0U3Vic2NyaWJlRnVuY3Rpb24oc3Vic2NyaWJlKVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25VcGRhdGUoZGVsdGFUaW1lOiBudW1iZXIpIHtcbiAgYXdhaXQgZW5naW5lLnVwZGF0ZShkZWx0YVRpbWUpXG4gIGF3YWl0IHBvbGxFdmVudHMoc2VuZEJhdGNoKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25TdGFydCgpIHtcbiAgYXdhaXQgZW5naW5lLnNlYWwoKVxufVxuIl19
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBQzFGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFBO0FBR2pGLE1BQU0saUJBQWlCLEdBQUcsdUJBQXVCLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLENBQUE7QUFDekUsTUFBTSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO0FBSXRDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBRS9CLE1BQU0sQ0FBQyxLQUFLLFVBQVUsUUFBUSxDQUFDLFNBQWlCO0lBQzlDLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM5QixNQUFNLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUM3QixDQUFDO0FBTUQsTUFBTSxDQUFDLEtBQUssVUFBVSxPQUFPO0lBQzNCLE1BQU0sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBRW5CLE1BQU0sUUFBUSxHQUFHLE1BQU0sWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQy9ELElBQUksQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRTtRQUNqQyxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JELEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxDQUFDLElBQUksRUFBRTtnQkFDckMsaUJBQWlCLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2FBQ3ZDO1NBQ0Y7S0FDRjtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiogQGFscGhhIFRISVMgRklMRSBJTklUSUFMSVpFUyBUSEUgREVDRU5UUkFMQU5EIFJVTlRJTUUuIFdJTEwgQ0hBTkdFIFNPT04gKi9cblxuaW1wb3J0IHsgZW5naW5lIH0gZnJvbSAnQGRjbC9lY3MnXG5pbXBvcnQgeyBwb2xsRXZlbnRzLCBzZXRTdWJzY3JpYmVGdW5jdGlvbiB9IGZyb20gJy4vb2JzZXJ2YWJsZXMnXG5pbXBvcnQgeyBzdWJzY3JpYmUsIHNlbmRCYXRjaCwgY3JkdFNlbmRUb1JlbmRlcmVyLCBjcmR0R2V0U3RhdGUgfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcbmltcG9ydCB7IGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IH0gZnJvbSAnLi9pbnRlcm5hbC90cmFuc3BvcnRzL3JlbmRlcmVyVHJhbnNwb3J0J1xuXG4vLyBBdHRhY2ggQ1JEVCB0cmFuc3BvcnRcbmNvbnN0IHJlbmRlcmVyVHJhbnNwb3J0ID0gY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQoeyBjcmR0U2VuZFRvUmVuZGVyZXIgfSlcbmVuZ2luZS5hZGRUcmFuc3BvcnQocmVuZGVyZXJUcmFuc3BvcnQpXG5cbi8vIGF0dGFjaCBlbmdpbmVBcGkuc3Vic2NyaWJlIGZ1bmN0aW9uIGZvciBldmVudHMuIFRoaXMgaXMgb25seSBhIHRyYW5zaXRpb25cbi8vIHBhdGNoIHVudGlsIGV2ZW50cyBhcmUgY29tcGxldGVseSBtaWdyYXRlZCB0byBDUkRUIG1lc3NhZ2VzXG5zZXRTdWJzY3JpYmVGdW5jdGlvbihzdWJzY3JpYmUpXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvblVwZGF0ZShkZWx0YVRpbWU6IG51bWJlcikge1xuICBhd2FpdCBlbmdpbmUudXBkYXRlKGRlbHRhVGltZSlcbiAgYXdhaXQgcG9sbEV2ZW50cyhzZW5kQmF0Y2gpXG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKiBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IHVwZGF0ZSBhbmQgYWZ0ZXIgdGhlIGV2YWx1YXRpb24gb2YgdGhlIGNvZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvblN0YXJ0KCkge1xuICBhd2FpdCBlbmdpbmUuc2VhbCgpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjcmR0R2V0U3RhdGUoeyBkYXRhOiBuZXcgVWludDhBcnJheSgpIH0pXG4gIGlmICghIXJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZSkge1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGJ5dGVBcnJheSBvZiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgIHJlbmRlcmVyVHJhbnNwb3J0Lm9ubWVzc2FnZShieXRlQXJyYXkpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/sdk",
3
- "version": "7.0.6-4009020955.commit-08722f5",
3
+ "version": "7.0.6-4055981423.commit-60b7f6f",
4
4
  "description": "",
5
5
  "main": "./index.js",
6
6
  "typings": "./index.d.ts",
@@ -20,15 +20,14 @@
20
20
  "author": "Decentraland",
21
21
  "license": "Apache-2.0",
22
22
  "dependencies": {
23
- "@dcl/dcl-rollup": "7.0.6-4009020955.commit-08722f5",
24
- "@dcl/ecs": "7.0.6-4009020955.commit-08722f5",
23
+ "@dcl/dcl-rollup": "7.0.6-4055981423.commit-60b7f6f",
24
+ "@dcl/ecs": "7.0.6-4055981423.commit-60b7f6f",
25
25
  "@dcl/ecs-math": "2.0.1-20221129185242.commit-40495c1",
26
- "@dcl/js-runtime": "7.0.6-4009020955.commit-08722f5",
27
- "@dcl/kernel": "2.0.0-3766760530.commit-239d2a9",
26
+ "@dcl/explorer": "1.0.74928-20230130201703.commit-6da8317",
27
+ "@dcl/js-runtime": "7.0.6-4055981423.commit-60b7f6f",
28
28
  "@dcl/mini-comms": "1.0.0",
29
- "@dcl/react-ecs": "7.0.6-4009020955.commit-08722f5",
29
+ "@dcl/react-ecs": "7.0.6-4055981423.commit-60b7f6f",
30
30
  "@dcl/schemas": "5.14.0",
31
- "@dcl/unity-renderer": "1.0.68557-20221221195847.commit-f743b85",
32
31
  "@types/inquirer": "^8.2.5",
33
32
  "@well-known-components/env-config-provider": "^1.1.2-20220801195549.commit-101c273",
34
33
  "@well-known-components/http-server": "^1.1.6-20220927190058.commit-2dfb235",
@@ -54,5 +53,5 @@
54
53
  "displayName": "SDK",
55
54
  "tsconfig": "./tsconfig.json"
56
55
  },
57
- "commit": "08722f5fb9539e46f90cc94b5f9634ef0ef314ea"
56
+ "commit": "60b7f6f3a572170a2b51d57aba8a34c27f396add"
58
57
  }
package/src/index.ts CHANGED
@@ -2,11 +2,12 @@
2
2
 
3
3
  import { engine } from '@dcl/ecs'
4
4
  import { pollEvents, setSubscribeFunction } from './observables'
5
- import { subscribe, sendBatch, crdtSendToRenderer } from '~system/EngineApi'
5
+ import { subscribe, sendBatch, crdtSendToRenderer, crdtGetState } from '~system/EngineApi'
6
6
  import { createRendererTransport } from './internal/transports/rendererTransport'
7
7
 
8
8
  // Attach CRDT transport
9
- engine.addTransport(createRendererTransport({ crdtSendToRenderer }))
9
+ const rendererTransport = createRendererTransport({ crdtSendToRenderer })
10
+ engine.addTransport(rendererTransport)
10
11
 
11
12
  // attach engineApi.subscribe function for events. This is only a transition
12
13
  // patch until events are completely migrated to CRDT messages
@@ -17,6 +18,19 @@ export async function onUpdate(deltaTime: number) {
17
18
  await pollEvents(sendBatch)
18
19
  }
19
20
 
21
+ /**
22
+ * @internal
23
+ * Function that is called before the first update and after the evaluation of the code.
24
+ */
20
25
  export async function onStart() {
21
26
  await engine.seal()
27
+
28
+ const response = await crdtGetState({ data: new Uint8Array() })
29
+ if (!!rendererTransport.onmessage) {
30
+ if (response && response.data && response.data.length) {
31
+ for (const byteArray of response.data) {
32
+ rendererTransport.onmessage(byteArray)
33
+ }
34
+ }
35
+ }
22
36
  }