kepler.gl 3.2.2 → 3.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/src/duckdb/src/components/index.d.ts +8 -1
  2. package/dist/src/duckdb/src/index.d.ts +3 -5
  3. package/dist/src/duckdb/src/table/index.d.ts +1 -0
  4. package/dist/src/processors/src/file-handler.d.ts +2 -7
  5. package/dist/src/utils/src/arrow-data-container.d.ts +38 -1
  6. package/dist/src/utils/src/data-container-interface.d.ts +3 -2
  7. package/dist/src/utils/src/index.d.ts +1 -1
  8. package/package.json +2 -2
  9. package/src/actions/package.json +8 -8
  10. package/src/ai-assistant/package.json +7 -7
  11. package/src/cloud-providers/package.json +2 -2
  12. package/src/common-utils/package.json +3 -3
  13. package/src/components/package.json +16 -16
  14. package/src/constants/dist/default-settings.js +1 -1
  15. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/c4/d0/bd16d41c708342b14f4c0aaa31136faccd8d411ae1d3962252433ac31d00ac57f49ecd4f6b4d682ccdab28858444adefb98aa54c83743d739b90698c03cf +1 -0
  16. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/da/54/b803dd69cea23939320d2d3aa0502638ac264cea8968854e5ccc4a71ddfbb0d6ce41a875ec1be176eb7d99815b3d6464bf60d0274b1175d7fcb131846d7d +1 -0
  17. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/10/75/d229810e58d38a1b61f7938bf1587615fbe97f4afa69493e595badd1f471 +2 -0
  18. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/9c/6d/1f90c56b793c944c2a9a393e837a46aef02e3b867e2bf28fcb0929c4ac5e +2 -0
  19. package/src/constants/package.json +2 -2
  20. package/src/constants/umd/keplergl.min.js +1 -1
  21. package/src/deckgl-arrow-layers/dist/utils/utils.js +5 -4
  22. package/src/deckgl-arrow-layers/dist/utils/validate.js +3 -2
  23. package/src/deckgl-arrow-layers/package.json +3 -2
  24. package/src/deckgl-arrow-layers/src/utils/utils.ts +4 -3
  25. package/src/deckgl-arrow-layers/src/utils/validate.ts +2 -1
  26. package/src/deckgl-layers/package.json +4 -4
  27. package/src/duckdb/dist/components/index.d.ts +8 -1
  28. package/src/duckdb/dist/components/index.js +54 -11
  29. package/src/duckdb/dist/index.d.ts +3 -5
  30. package/src/duckdb/dist/index.js +28 -40
  31. package/src/duckdb/dist/table/duckdb-table.js +3 -3
  32. package/src/duckdb/dist/table/index.d.ts +1 -0
  33. package/src/duckdb/dist/table/index.js +17 -0
  34. package/src/duckdb/package.json +25 -7
  35. package/src/duckdb/src/components/index.tsx +9 -1
  36. package/src/duckdb/src/index.ts +3 -9
  37. package/src/duckdb/src/table/duckdb-table.ts +11 -6
  38. package/src/duckdb/src/table/index.ts +5 -0
  39. package/src/effects/package.json +5 -5
  40. package/src/layers/dist/base-layer.js +2 -6
  41. package/src/layers/dist/icon-layer/icon-layer.d.ts +1 -0
  42. package/src/layers/dist/icon-layer/icon-layer.js +18 -3
  43. package/src/layers/dist/layer-text-label.js +3 -3
  44. package/src/layers/package.json +9 -9
  45. package/src/layers/src/base-layer.ts +3 -2
  46. package/src/layers/src/icon-layer/icon-layer.ts +13 -0
  47. package/src/layers/src/layer-text-label.ts +3 -3
  48. package/src/localization/package.json +1 -1
  49. package/src/processors/dist/file-handler.d.ts +2 -7
  50. package/src/processors/dist/file-handler.js +8 -16
  51. package/src/processors/package.json +7 -7
  52. package/src/processors/src/file-handler.ts +3 -10
  53. package/src/reducers/package.json +16 -16
  54. package/src/schemas/package.json +7 -7
  55. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/00/92/9b4a08e852e2f12e4702d7c41fe5299bcd72ee10d25072f6aa4bb473d4dbe8d2ea1992b32bf82ea9ad73efdacf9f4e228a18523c93042cc58d07a56115bf +1 -0
  56. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/fd/ef/551b4725615a0e609688e4b55cf4f617fab2a80dcb5e9efb288d77e62f25cd67f3525e372e109c35ef3b3508da4eb974cdf1a784ee3ff610942b93415cc7 +1 -0
  57. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/58/24/f9a517552c80acd6fe8c93f7ed4a3e8b24272284e6f2257ad18e152a8dbf +2 -0
  58. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/aa/b2/36c45c478923af2d1fd8b06c81f5aa622e67be3239349c2219ac4652d959 +2 -0
  59. package/src/styles/package.json +2 -2
  60. package/src/styles/umd/keplergl.min.js +1 -1
  61. package/src/table/dist/kepler-table.js +3 -3
  62. package/src/table/package.json +5 -5
  63. package/src/table/src/kepler-table.ts +1 -1
  64. package/src/tasks/package.json +2 -2
  65. package/src/types/package.json +1 -1
  66. package/src/utils/dist/arrow-data-container.d.ts +38 -1
  67. package/src/utils/dist/arrow-data-container.js +78 -11
  68. package/src/utils/dist/data-container-interface.d.ts +3 -2
  69. package/src/utils/dist/data-container-interface.js +1 -1
  70. package/src/utils/dist/data-utils.js +3 -6
  71. package/src/utils/dist/index.d.ts +1 -1
  72. package/src/utils/dist/index.js +29 -1
  73. package/src/utils/package.json +4 -4
  74. package/src/utils/src/arrow-data-container.ts +101 -13
  75. package/src/utils/src/data-container-interface.ts +3 -2
  76. package/src/utils/src/data-utils.ts +2 -2
  77. package/src/utils/src/index.ts +5 -1
  78. package/umd/keplergl.min.js +1370 -1370
@@ -160,7 +160,7 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
160
160
  _context3.prev = 2;
161
161
  // 1) data.rows contains an arrow table created by Add to Map data from DuckDb query.
162
162
  // 2) arrow table is in cols & fields when a file is dragged & dropped into Add Data To Map dialog.
163
- arrowTable = data.rows instanceof arrow.Table ? data.rows : (0, _duckdbTableUtils2.restoreArrowTable)(data.cols || [], data.fields, data.arrowSchema); // remove unsupported extensions from an arrow table that throw exceptions in DuckDB.
163
+ arrowTable = (0, _utils.isArrowTable)(data.rows) ? data.rows : (0, _duckdbTableUtils2.restoreArrowTable)(data.cols || [], data.fields, data.arrowSchema); // remove unsupported extensions from an arrow table that throw exceptions in DuckDB.
164
164
  adjustedMetadata = (0, _duckdbTableUtils2.removeUnsupportedExtensions)(arrowTable);
165
165
  setupSql = "\n install spatial;\n load spatial;\n ";
166
166
  _context3.next = 8;
@@ -241,7 +241,7 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
241
241
  format = _constants.DATASET_FORMATS.row;
242
242
  } else if (((_data$rows3 = data.rows) === null || _data$rows3 === void 0 ? void 0 : _data$rows3.type) === 'FeatureCollection') {
243
243
  format = _constants.DATASET_FORMATS.geojson;
244
- } else if (((_data$cols = data.cols) === null || _data$cols === void 0 ? void 0 : _data$cols[0]) instanceof arrow.Vector) {
244
+ } else if ((0, _utils.isArrowVector)((_data$cols = data.cols) === null || _data$cols === void 0 ? void 0 : _data$cols[0])) {
245
245
  format = _constants.DATASET_FORMATS.arrow;
246
246
  }
247
247
  }
@@ -477,4 +477,4 @@ var restoreGeoarrowMetadata = exports.restoreGeoarrowMetadata = function restore
477
477
  }
478
478
  });
479
479
  };
480
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl91dGlscyIsIl9kYXRhUHJvY2Vzc29yIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJfZHVja2RiVGFibGVVdGlsczIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiRFVDS0RCX0dFT01fQ09MVU1OIiwiRFVDS0RCX1dLQl9DT0xVTU4iLCJLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OIiwiU1VHR0VTVEVEX0dFT01fQ09MVU1OUyIsIkdFT0FSUk9XX0VYVEVOU0lPTlMiLCJXS0IiLCJLZXBsZXJHbER1Y2tEYlRhYmxlIiwiZXhwb3J0cyIsIl9LZXBsZXJUYWJsZSIsInByb3BzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfaW1wb3J0Um93RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZiIsImRhdGEiLCJkYiIsImMiLCJmaWVsZHMiLCJyb3dzIiwicm93c0ZvckRiIiwiY29sdW1ucyIsImNyZWF0ZVRhYmxlU3FsIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInJvdyIsIm5ld1JvdyIsImluZGV4IiwibmFtZSIsInJlZ2lzdGVyRmlsZVRleHQiLCJpZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsImNvbmNhdCIsImR1Y2tEQkNvbHVtblR5cGUiLCJsYWJlbCIsInF1ZXJ5IiwidDAiLCJjb25zb2xlIiwibG9nIiwic3RvcCIsImltcG9ydFJvd0RhdGEiLCJfeCIsIl9pbXBvcnRHZW9Kc29uRGF0YSIsIl9jYWxsZWUyIiwiX3JlZjIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJlcnJvciIsImFicnVwdCIsImdlb2Fycm93TWV0YWRhdGEiLCJpbXBvcnRHZW9Kc29uRGF0YSIsIl94MiIsIl9pbXBvcnRBcnJvd0RhdGEiLCJfY2FsbGVlMyIsIl9yZWYzIiwiYWRqdXN0ZWRNZXRhZGF0YSIsImFycm93VGFibGUiLCJzZXR1cFNxbCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlRhYmxlIiwicmVzdG9yZUFycm93VGFibGUiLCJjb2xzIiwiYXJyb3dTY2hlbWEiLCJyZW1vdmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpbnNlcnRBcnJvd1RhYmxlIiwicmVzdG9yZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsInVzZU5ld0ZpZWxkcyIsImltcG9ydEFycm93RGF0YSIsIl94MyIsIl9jcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX2NhbGxlZTQiLCJ0YWJsZU5hbWUiLCJmb3JtYXQiLCJfZGF0YSRyb3dzIiwiX2RhdGEkcm93czIiLCJfZGF0YSRyb3dzMyIsIl9kYXRhJGNvbHMiLCJpbXBvcnREZXRhaWxzIiwiX2RhdGEkZmllbGRzIiwiX3JlZjQiLCJfcmVmNCRnZW9hcnJvd01ldGFkYXQiLCJfcmVmNCR1c2VOZXdGaWVsZHMiLCJkdWNrRGJDb2x1bW5zIiwidGFibGVEdWNrREJUeXBlcyIsImFkanVzdGVkUXVlcnkiLCJhcnJvd1Jlc3VsdCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZGF0YWJhc2UiLCJzZW50IiwiY29ubmVjdCIsImRyb3BUYWJsZUlmRXhpc3RzIiwibWV0YWRhdGEiLCJfdHlwZW9mMiIsIkRBVEFTRVRfRk9STUFUUyIsInR5cGUiLCJnZW9qc29uIiwiVmVjdG9yIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXMiLCJnZXREdWNrREJDb2x1bW5UeXBlc01hcCIsImNhc3REdWNrREJUeXBlc0ZvcktlcGxlciIsInJlc3RvcmVHZW9hcnJvd01ldGFkYXRhIiwiYXJyb3dTY2hlbWFUb0ZpZWxkcyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJudW1Db2xzIiwiZ2V0Q2hpbGRBdCIsImNvbCIsImNsb3NlIiwiY3JlYXRlVGFibGVBbmRHZXRBcnJvdyIsIl94NCIsIl9pbXBvcnREYXRhIiwiX2NhbGxlZTUiLCJfcmVmNSIsIl95aWVsZCR0aGlzJGNyZWF0ZVRhYiIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsIkRhdGFzZXRUeXBlIiwiVkVDVE9SX1RJTEUiLCJpbXBvcnREYXRhIiwiX3g1IiwiX3VwZGF0ZSIsIl9jYWxsZWU2IiwiX3lpZWxkJHRoaXMkY3JlYXRlVGFiMiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsInVwZGF0ZSIsIl94NiIsIktlcGxlclRhYmxlIiwiaW5wdXRGb3JtYXQiLCJwcm9jZXNzb3IiLCJpc0Fycm93RGF0YSIsInByb2Nlc3NBcnJvd0JhdGNoZXMiLCJrZXBsZXJnbCIsImlzS2VwbGVyR2xNYXAiLCJwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiIiwiaXNSb3dPYmplY3QiLCJwcm9jZXNzQ3N2Um93T2JqZWN0IiwiaXNHZW9Kc29uIiwicHJvY2Vzc0dlb2pzb24iLCJkIiwic2NoZW1hIiwiZiIsIkRhdGFUeXBlIiwiaXNCaW5hcnkiLCJHRU9BUlJPV19NRVRBREFUQV9LRVkiLCJpc0dlb0Fycm93UG9pbnQiLCJQT0lOVCIsImlzR2VvQXJyb3dMaW5lU3RyaW5nIiwiTElORVNUUklORyIsImlzR2VvQXJyb3dQb2x5Z29uIiwiUE9MWUdPTiIsImlzR2VvQXJyb3dNdWx0aVBvaW50IiwiTVVMVElQT0lOVCIsImlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmciLCJNVUxUSUxJTkVTVFJJTkciLCJpc0dlb0Fycm93TXVsdGlQb2x5Z29uIiwiTVVMVElQT0xZR09OIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RhYmxlL2R1Y2tkYi10YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuXG5pbXBvcnQge1xuICBEYXRhc2V0VHlwZSxcbiAgREFUQVNFVF9GT1JNQVRTLFxuICBHRU9BUlJPV19FWFRFTlNJT05TLFxuICBHRU9BUlJPV19NRVRBREFUQV9LRVlcbn0gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgYXJyb3dTY2hlbWFUb0ZpZWxkcyxcbiAgaXNBcnJvd0RhdGEsXG4gIGlzR2VvSnNvbixcbiAgaXNLZXBsZXJHbE1hcCxcbiAgaXNSb3dPYmplY3QsXG4gIHByb2Nlc3NBcnJvd0JhdGNoZXNcbn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7S2VwbGVyVGFibGV9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHtGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2dldEFwcGxpY2F0aW9uQ29uZmlnLCBEYXRhYmFzZUFkYXB0ZXIsIERhdGFiYXNlQ29ubmVjdGlvbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7XG4gIHByb2Nlc3NDc3ZSb3dPYmplY3QsXG4gIHByb2Nlc3NHZW9qc29uLFxuICBwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiLFxuICBQcm9jZXNzb3JSZXN1bHRcbn0gZnJvbSAnLi4vcHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvcic7XG5cbmltcG9ydCB7XG4gIGlzR2VvQXJyb3dQb2ludCxcbiAgaXNHZW9BcnJvd0xpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dQb2x5Z29uLFxuICBpc0dlb0Fycm93TXVsdGlQb2ludCxcbiAgaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyxcbiAgaXNHZW9BcnJvd011bHRpUG9seWdvblxufSBmcm9tICcuL2R1Y2tkYi10YWJsZS11dGlscyc7XG5cbmltcG9ydCB7XG4gIGNhc3REdWNrREJUeXBlc0ZvcktlcGxlcixcbiAgZHJvcFRhYmxlSWZFeGlzdHMsXG4gIGdldER1Y2tEQkNvbHVtblR5cGVzLFxuICBnZXREdWNrREJDb2x1bW5UeXBlc01hcCxcbiAgcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zLFxuICByZXN0b3JlQXJyb3dUYWJsZSxcbiAgcmVzdG9yZVVuc3VwcG9ydGVkRXh0ZW5zaW9uc1xufSBmcm9tICcuLi90YWJsZS9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG4vLyBUT0RPIHVzZSBmaWxlcyBmcm9tIGRpc2sgb3IgdXJsIGRpcmVjdGx5LCB3aXRob3V0IHBhcnNpbmcgYnkgbG9hZGVycyBhbmQgdGhlbiBpbmdlY3Rpb24gaW50byBEZWNrRGJcblxuLyoqXG4gKiBEZWZhdWx0IER1Y2tEYiBnZW9tZXRyeSBjb2x1bW5zIGNyZWF0ZWQgYnkgU1RfUkVBRFxuICovXG5jb25zdCBEVUNLREJfR0VPTV9DT0xVTU4gPSAnZ2VvbSc7XG5jb25zdCBEVUNLREJfV0tCX0NPTFVNTiA9ICd3a2JfZ2VvbWV0cnknO1xuXG4vKipcbiBEZWZhdWx0IGNvbHVtbiBuYW1lIGZvciBwcm9jZXNzZWQgZ2VvanNvbiBpbiBLZXBsZXIuXG4gVXNlIHRoaXMgbmFtZSB0byByZW5hbWUgZGVmYXVsdCAnZ2VvbScgY29sdW1uIGZyb20gRHVja0RiXG4gaW4gb3JkZXIgdG8gc3VwcG9ydCBLZXBsZXIgbWFwcyBzYXZlZCBiZWZvcmUgaW50cm9kdWN0aW9uIG9mIER1Y2tEYiBwbHVnaW4uXG4gKi9cbmNvbnN0IEtFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU4gPSAnX2dlb2pzb24nO1xuXG4vKipcbiAqIE5hbWVzIG9mIGNvbHVtbnMgdGhhdCBtb3N0IGxpa2VseSBjb250YWluIGJpbmFyeSB3a2IgZ2VvbWV0cnlcbiAqL1xuY29uc3QgU1VHR0VTVEVEX0dFT01fQ09MVU1OUyA9IHtcbiAgW0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQixcbiAgW0RVQ0tEQl9HRU9NX0NPTFVNTl06IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCLFxuICBnZW9tZXRyeTogR0VPQVJST1dfRVhURU5TSU9OUy5XS0Jcbn07XG5cbnR5cGUgSW1wb3J0RGF0YVRvRHVja1Byb3BzID0ge1xuICBkYXRhOiBQcm9jZXNzb3JSZXN1bHQgJiB7YXJyb3dTY2hlbWE6IGFycm93LlNjaGVtYX07XG4gIGRiOiBEYXRhYmFzZUFkYXB0ZXI7XG4gIGM6IERhdGFiYXNlQ29ubmVjdGlvbjtcbn07XG5cbnR5cGUgSW1wb3J0RGF0YVRvRHVja1Jlc3VsdCA9IHtcbiAgLy8gRHVja0RiIGRyb3BzIGdlb2Fycm93IG1ldGFkYXRhLCBzbyB0cnkgdG8gcHJlc2VydmUgYW5kIHRoZW4gcmVzdG9yZSB0aGUgZXh0ZW5zaW9uIG5hbWVcbiAgZ2VvYXJyb3dNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8vIFVzZSBmaWVsZHMgZnJvbSBhcnJvdyB0YWJsZSBldmVuIGlmIGZpZWxkcyBhcmUgcHJvdmlkZWRcbiAgdXNlTmV3RmllbGRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBLZXBsZXJHbER1Y2tEYlRhYmxlIGV4dGVuZHMgS2VwbGVyVGFibGUge1xuICBkZWNsYXJlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIGRlY2xhcmUgbGFiZWw6IHN0cmluZztcbiAgZGVjbGFyZSB0eXBlOiBzdHJpbmc7XG4gIGRlY2xhcmUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBhc3luYyBpbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7ZmllbGRzLCByb3dzfSA9IGRhdGE7XG5cbiAgICAgIC8vIERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCBsb2FkcyBkYXRhIGFzIGFueVtdW10gaW5zdGVhZCBvZiBbe31dXG4gICAgICAvLyBUT0RPIHBvdGVudGlhbCBtZW1vcnkgdXNhZ2UgZXhwbG9zaW9uOiBvcmlnaW5hbCBkYXRhLCBuZXcgb2JqZWN0IGFuZCB0aGVuIER1Y2tEYiB0YWJsZVxuICAgICAgY29uc3Qgcm93c0ZvckRiID0gQXJyYXkuaXNBcnJheShyb3dzWzBdKVxuICAgICAgICA/IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7fTtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkc1tpbmRleF0ubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgICB9KVxuICAgICAgICA6IHJvd3M7XG5cbiAgICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQodGhpcy5pZCwgSlNPTi5zdHJpbmdpZnkocm93c0ZvckRiKSk7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE8gZXh0ZW5kIGZpZWxkcyB0byBjb250YWluIGR1Y2tEQkNvbHVtblR5cGVcbiAgICAgICAgcmV0dXJuIGAke2FjY30ke2luZGV4ID4gMCA/ICcsJyA6ICcnfSAnJHtmaWVsZC5uYW1lfSc6ICcke2ZpZWxkLmR1Y2tEQkNvbHVtblR5cGV9J2A7XG4gICAgICB9LCAnJyk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIEFTXG4gICAgICAgIFNFTEVDVCAqXG4gICAgICAgIEZST00gcmVhZF9qc29uKCcke3RoaXMuaWR9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IHske2NvbHVtbnN9fSk7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdpbXBvcnRSb3dEYXRhJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW1wb3J0R2VvSnNvbkRhdGEoe2RhdGEsIGRiLCBjfTogSW1wb3J0RGF0YVRvRHVja1Byb3BzKTogUHJvbWlzZTxJbXBvcnREYXRhVG9EdWNrUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtyb3dzfSA9IGRhdGE7XG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVUZXh0KHRoaXMuaWQsIEpTT04uc3RyaW5naWZ5KHJvd3MpKTtcblxuICAgICAgY29uc3QgY3JlYXRlVGFibGVTcWwgPSBgXG4gICAgICAgIGluc3RhbGwgc3BhdGlhbDtcbiAgICAgICAgbG9hZCBzcGF0aWFsO1xuICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIEFTIFxuICAgICAgICBTRUxFQ1QgKlxuICAgICAgICBGUk9NIFNUX1JFQUQoJyR7dGhpcy5pZH0nLCBrZWVwX3drYiA9IFRSVUUpO1xuICAgICAgICBBTFRFUiBUQUJMRSAnJHt0aGlzLmxhYmVsfScgUkVOQU1FICcke0RVQ0tEQl9XS0JfQ09MVU1OfScgVE8gJyR7S0VQTEVSX0dFT01fRlJPTV9HRU9KU09OX0NPTFVNTn0nO1xuICAgICAgYDtcblxuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ltcG9ydEdlb0pzb25EYXRhJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIF9nZW9qc29uIGNvbHVtbiBpcyBjcmVhdGVkIGZyb20gZ2VvbWV0cnkgd2l0aCBrZWVwX3drYiBmbGFnIGFuZCBjb250YWlucyB2YWxpZCBXS0IgZGF0YS5cbiAgICAgIGdlb2Fycm93TWV0YWRhdGE6IHtbS0VQTEVSX0dFT01fRlJPTV9HRU9KU09OX0NPTFVNTl06IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPEltcG9ydERhdGFUb0R1Y2tSZXN1bHQ+IHtcbiAgICBsZXQgYWRqdXN0ZWRNZXRhZGF0YSA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyAxKSBkYXRhLnJvd3MgY29udGFpbnMgYW4gYXJyb3cgdGFibGUgY3JlYXRlZCBieSBBZGQgdG8gTWFwIGRhdGEgZnJvbSBEdWNrRGIgcXVlcnkuXG4gICAgICAvLyAyKSBhcnJvdyB0YWJsZSBpcyBpbiBjb2xzICYgZmllbGRzIHdoZW4gYSBmaWxlIGlzIGRyYWdnZWQgJiBkcm9wcGVkIGludG8gQWRkIERhdGEgVG8gTWFwIGRpYWxvZy5cbiAgICAgIGNvbnN0IGFycm93VGFibGUgPVxuICAgICAgICBkYXRhLnJvd3MgaW5zdGFuY2VvZiBhcnJvdy5UYWJsZVxuICAgICAgICAgID8gZGF0YS5yb3dzXG4gICAgICAgICAgOiByZXN0b3JlQXJyb3dUYWJsZShkYXRhLmNvbHMgfHwgW10sIGRhdGEuZmllbGRzLCBkYXRhLmFycm93U2NoZW1hKTtcblxuICAgICAgLy8gcmVtb3ZlIHVuc3VwcG9ydGVkIGV4dGVuc2lvbnMgZnJvbSBhbiBhcnJvdyB0YWJsZSB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RCLlxuICAgICAgYWRqdXN0ZWRNZXRhZGF0YSA9IHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyhhcnJvd1RhYmxlKTtcblxuICAgICAgY29uc3Qgc2V0dXBTcWwgPSBgXG4gICAgICAgIGluc3RhbGwgc3BhdGlhbDtcbiAgICAgICAgbG9hZCBzcGF0aWFsO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoc2V0dXBTcWwpO1xuICAgICAgYXdhaXQgYy5pbnNlcnRBcnJvd1RhYmxlKGFycm93VGFibGUsIHtuYW1lOiB0aGlzLmxhYmVsfSk7XG5cbiAgICAgIC8vIHJlc3RvcmUgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RiXG4gICAgICByZXN0b3JlVW5zdXBwb3J0ZWRFeHRlbnNpb25zKGFycm93VGFibGUsIGFkanVzdGVkTWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBLbm93biBpc3N1ZXM6XG4gICAgICAvLyAxKSBBcnJvdyBUeXBlIHdpdGggZXh0ZW5zaW9uIG5hbWU6IGdlb2Fycm93LnBvaW50IGFuZCBmb3JtYXQ6ICt3OjIgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gRHVja0RCLlxuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0QXJyb3dEYXRhJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlb2Fycm93TWV0YWRhdGE6IHsuLi5TVUdHRVNURURfR0VPTV9DT0xVTU5TLCAuLi5hZGp1c3RlZE1ldGFkYXRhfSxcbiAgICAgIC8vIHVzZSBmaWVsZHMgZ2VuZXJhdGVkIGZyb20gdGhlIGNyZWF0ZWQgYXJyb3cgdGFibGVcbiAgICAgIHVzZU5ld0ZpZWxkczogdHJ1ZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIGZyb20gZGF0YSwgcmV0dXJucyBhbiBhcnJvdyB0YWJsZSB3aXRoIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtmaWVsZHM6IEZpZWxkW10sIGNvbHM6IGFueVtdfT59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTogUHJvbWlzZTx7ZmllbGRzOiBhbnlbXTsgY29sczogYXJyb3cuVmVjdG9yW119PiB7XG4gICAgY29uc3QgZGIgPSBhd2FpdCBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmRhdGFiYXNlO1xuICAgIGlmICghZGIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBkYXRhYmFzZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4nKTtcbiAgICAgIHJldHVybiB7ZmllbGRzOiBbXSwgY29sczogW119O1xuICAgIH1cbiAgICBjb25zdCBjID0gYXdhaXQgZGIuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGhpcy5sYWJlbDtcbiAgICBhd2FpdCBkcm9wVGFibGVJZkV4aXN0cyhjLCB0YWJsZU5hbWUpO1xuXG4gICAgbGV0IGZvcm1hdCA9IHRoaXMubWV0YWRhdGEuZm9ybWF0O1xuICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAvLyBmb3JtYXQgaXMgbWlzc2luZyB3aGVuIHdlIGxvYWQgS2VwbGVyLmdsIGV4YW1wbGVzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnJvd3M/LlswXSkgfHwgdHlwZW9mIGRhdGEucm93cz8uWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMucm93O1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnJvd3M/LnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb247XG4gICAgICB9IGVsc2UgaWYgKGRhdGEuY29scz8uWzBdIGluc3RhbmNlb2YgYXJyb3cuVmVjdG9yKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5hcnJvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaW1wb3J0RGV0YWlsczogSW1wb3J0RGF0YVRvRHVja1Jlc3VsdCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMucm93KSB7XG4gICAgICBhd2FpdCB0aGlzLmltcG9ydFJvd0RhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5nZW9qc29uKSB7XG4gICAgICBpbXBvcnREZXRhaWxzID0gYXdhaXQgdGhpcy5pbXBvcnRHZW9Kc29uRGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmFycm93KSB7XG4gICAgICBpbXBvcnREZXRhaWxzID0gYXdhaXQgdGhpcy5pbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VucmVjb2duaXplZCBmb3JtYXQnLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGxldCBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgICBsZXQgY29sczogYXJyb3cuVmVjdG9yW10gPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7Z2VvYXJyb3dNZXRhZGF0YSA9IHt9LCB1c2VOZXdGaWVsZHMgPSBmYWxzZX0gPSBpbXBvcnREZXRhaWxzIHx8IHt9O1xuXG4gICAgICBjb25zdCBkdWNrRGJDb2x1bW5zID0gYXdhaXQgZ2V0RHVja0RCQ29sdW1uVHlwZXMoYywgdGFibGVOYW1lKTtcbiAgICAgIGNvbnN0IHRhYmxlRHVja0RCVHlwZXMgPSBnZXREdWNrREJDb2x1bW5UeXBlc01hcChkdWNrRGJDb2x1bW5zKTtcbiAgICAgIGNvbnN0IGFkanVzdGVkUXVlcnkgPSBjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIodGFibGVOYW1lLCBkdWNrRGJDb2x1bW5zKTtcbiAgICAgIGNvbnN0IGFycm93UmVzdWx0ID0gYXdhaXQgYy5xdWVyeShhZGp1c3RlZFF1ZXJ5KTtcblxuICAgICAgLy8gVE9ETyBpZiBmb3JtYXQgaXMgYW4gYXJyb3cgdGFibGUgdGhlbiBqdXN0IHVzZSB0aGUgb3JpZ2luYWwgb25lLCBpbnN0ZWFkIG9mIHRoZSBuZXcgdGFibGUgZnJvbSB0aGUgcXVlcnk/XG5cbiAgICAgIHJlc3RvcmVHZW9hcnJvd01ldGFkYXRhKGFycm93UmVzdWx0LCBnZW9hcnJvd01ldGFkYXRhKTtcblxuICAgICAgZmllbGRzID0gdXNlTmV3RmllbGRzXG4gICAgICAgID8gYXJyb3dTY2hlbWFUb0ZpZWxkcyhhcnJvd1Jlc3VsdCwgdGFibGVEdWNrREJUeXBlcylcbiAgICAgICAgOiBkYXRhLmZpZWxkcyA/PyBhcnJvd1NjaGVtYVRvRmllbGRzKGFycm93UmVzdWx0LCB0YWJsZUR1Y2tEQlR5cGVzKTtcbiAgICAgIGNvbHMgPSBbLi4uQXJyYXkoYXJyb3dSZXN1bHQubnVtQ29scykua2V5cygpXVxuICAgICAgICAubWFwKGkgPT4gYXJyb3dSZXN1bHQuZ2V0Q2hpbGRBdChpKSlcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sKSBhcyBhcnJvdy5WZWN0b3JbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRHVja0RCIHRhYmxlOiBjcmVhdGVUYWJsZUFuZEdldEFycm93JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgYXdhaXQgYy5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHtmaWVsZHMsIGNvbHN9O1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0RGF0YSh7ZGF0YX06IHtkYXRhOiBQcm9jZXNzb3JSZXN1bHR9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVmVjdG9yVGlsZSBpcyBhIHNwZWNpYWwgY2FzZSwgaWdub3JlIGZvciBub3dcbiAgICBpZiAodGhpcy50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSkge1xuICAgICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YTogey4uLmRhdGEsIHJvd3M6IFtdfX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtmaWVsZHMsIGNvbHN9ID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpO1xuXG4gICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YToge2ZpZWxkcywgY29scywgcm93czogW119fSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoZGF0YSkge1xuICAgIC8vIFZlY3RvclRpbGUgaXMgYSBzcGVjaWFsIGNhc2UsIGlnbm9yZSBmb3Igbm93XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGF9KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IHtjb2xzfSA9IGF3YWl0IHRoaXMuY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTtcblxuICAgIHJldHVybiBzdXBlci51cGRhdGUoe2NvbHMsIHJvd3M6IFtdLCBmaWVsZHM6IFtdfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RmlsZVByb2Nlc3NvciA9IGZ1bmN0aW9uIChkYXRhOiBhbnksIGlucHV0Rm9ybWF0Pzogc3RyaW5nKSB7XG4gICAgbGV0IHByb2Nlc3NvcjtcbiAgICBsZXQgZm9ybWF0O1xuICAgIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmFycm93IHx8IGlzQXJyb3dEYXRhKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzQXJyb3dCYXRjaGVzO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCB8fCBpc0tlcGxlckdsTWFwKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2w7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5yb3cgfHwgaXNSb3dPYmplY3QoZGF0YSkpIHtcbiAgICAgIC8vIGNzdiBmaWxlIGdvZXMgaGVyZVxuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NDc3ZSb3dPYmplY3Q7IC8vIGRpcmVjdGx5IGltcG9ydCBqc29uIG9iamVjdCBpbnRvIGR1Y2tkYi13YXNtXG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb24gfHwgaXNHZW9Kc29uKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbjtcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NHZW9qc29uO1xuICAgIH1cbiAgICByZXR1cm4ge3Byb2Nlc3NvciwgZm9ybWF0fTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0SW5wdXREYXRhVmFsaWRhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIEluIER1Y2tEQiBtb2RlIGRhdGEgaXMgdmFsaWRhdGVkIGxhdGVyIGR1cmluZyBpbXBvcnQuXG4gICAgcmV0dXJuIGQgPT4gZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVzdG9yZSBnZW9hcnJvdyBtZXRhZGF0YSBsb3N0IGR1cmluZyBEdWNrRGIgaW5nZXN0aW9uLlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGdlbmVyYXRlIHdyb25nIGdlb21ldHJ5IHR5cGVzLlxuICogQHBhcmFtIGFycm93VGFibGUgQXJyb3cgdGFibGUgdG8gdXBkYXRlLlxuICogQHBhcmFtIGdlb2Fycm93TWV0YWRhdGEgQSBtYXAgd2l0aCBmaWVsZCBuYW1lcyB0aGF0IHVzdWFsbHkgdXNlZCB0byBzdG9yZSBnZW9hcnJvdyBnZW9tZXRyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc3RvcmVHZW9hcnJvd01ldGFkYXRhID0gKFxuICBhcnJvd1RhYmxlOiBhcnJvdy5UYWJsZSxcbiAgZ2VvYXJyb3dNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSA9PiB7XG4gIGFycm93VGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgIGlmIChhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShmLnR5cGUpICYmIGdlb2Fycm93TWV0YWRhdGFbZi5uYW1lXSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBnZW9hcnJvd01ldGFkYXRhW2YubmFtZV0pO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd1BvaW50KGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5QT0lOVCk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TGluZVN0cmluZyhmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTElORVNUUklORyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93UG9seWdvbihmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuUE9MWUdPTik7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2ludChmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElQT0lOVCk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5NVUxUSUxJTkVTVFJJTkcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpUG9seWdvbihmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElQT0xZR09OKTtcbiAgICB9XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQU1BLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQVFBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLGNBQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFTQSxJQUFBTyxrQkFBQSxHQUFBUCxPQUFBO0FBUXFDLFNBQUFRLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxD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
480
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl91dGlscyIsIl9kYXRhUHJvY2Vzc29yIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJfZHVja2RiVGFibGVVdGlsczIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiRFVDS0RCX0dFT01fQ09MVU1OIiwiRFVDS0RCX1dLQl9DT0xVTU4iLCJLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OIiwiU1VHR0VTVEVEX0dFT01fQ09MVU1OUyIsIkdFT0FSUk9XX0VYVEVOU0lPTlMiLCJXS0IiLCJLZXBsZXJHbER1Y2tEYlRhYmxlIiwiZXhwb3J0cyIsIl9LZXBsZXJUYWJsZSIsInByb3BzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfaW1wb3J0Um93RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZiIsImRhdGEiLCJkYiIsImMiLCJmaWVsZHMiLCJyb3dzIiwicm93c0ZvckRiIiwiY29sdW1ucyIsImNyZWF0ZVRhYmxlU3FsIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInJvdyIsIm5ld1JvdyIsImluZGV4IiwibmFtZSIsInJlZ2lzdGVyRmlsZVRleHQiLCJpZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsImNvbmNhdCIsImR1Y2tEQkNvbHVtblR5cGUiLCJsYWJlbCIsInF1ZXJ5IiwidDAiLCJjb25zb2xlIiwibG9nIiwic3RvcCIsImltcG9ydFJvd0RhdGEiLCJfeCIsIl9pbXBvcnRHZW9Kc29uRGF0YSIsIl9jYWxsZWUyIiwiX3JlZjIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJlcnJvciIsImFicnVwdCIsImdlb2Fycm93TWV0YWRhdGEiLCJpbXBvcnRHZW9Kc29uRGF0YSIsIl94MiIsIl9pbXBvcnRBcnJvd0RhdGEiLCJfY2FsbGVlMyIsIl9yZWYzIiwiYWRqdXN0ZWRNZXRhZGF0YSIsImFycm93VGFibGUiLCJzZXR1cFNxbCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImlzQXJyb3dUYWJsZSIsInJlc3RvcmVBcnJvd1RhYmxlIiwiY29scyIsImFycm93U2NoZW1hIiwicmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zIiwiaW5zZXJ0QXJyb3dUYWJsZSIsInJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMiLCJ1c2VOZXdGaWVsZHMiLCJpbXBvcnRBcnJvd0RhdGEiLCJfeDMiLCJfY3JlYXRlVGFibGVBbmRHZXRBcnJvdyIsIl9jYWxsZWU0IiwidGFibGVOYW1lIiwiZm9ybWF0IiwiX2RhdGEkcm93cyIsIl9kYXRhJHJvd3MyIiwiX2RhdGEkcm93czMiLCJfZGF0YSRjb2xzIiwiaW1wb3J0RGV0YWlscyIsIl9kYXRhJGZpZWxkcyIsIl9yZWY0IiwiX3JlZjQkZ2VvYXJyb3dNZXRhZGF0IiwiX3JlZjQkdXNlTmV3RmllbGRzIiwiZHVja0RiQ29sdW1ucyIsInRhYmxlRHVja0RCVHlwZXMiLCJhZGp1c3RlZFF1ZXJ5IiwiYXJyb3dSZXN1bHQiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImRhdGFiYXNlIiwic2VudCIsImNvbm5lY3QiLCJkcm9wVGFibGVJZkV4aXN0cyIsIm1ldGFkYXRhIiwiX3R5cGVvZjIiLCJEQVRBU0VUX0ZPUk1BVFMiLCJ0eXBlIiwiZ2VvanNvbiIsImlzQXJyb3dWZWN0b3IiLCJnZXREdWNrREJDb2x1bW5UeXBlcyIsImdldER1Y2tEQkNvbHVtblR5cGVzTWFwIiwiY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyIiwicmVzdG9yZUdlb2Fycm93TWV0YWRhdGEiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm51bUNvbHMiLCJnZXRDaGlsZEF0IiwiY29sIiwiY2xvc2UiLCJjcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX3g0IiwiX2ltcG9ydERhdGEiLCJfY2FsbGVlNSIsIl9yZWY1IiwiX3lpZWxkJHRoaXMkY3JlYXRlVGFiIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsImltcG9ydERhdGEiLCJfeDUiLCJfdXBkYXRlIiwiX2NhbGxlZTYiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIyIiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwidXBkYXRlIiwiX3g2IiwiS2VwbGVyVGFibGUiLCJpbnB1dEZvcm1hdCIsInByb2Nlc3NvciIsImlzQXJyb3dEYXRhIiwicHJvY2Vzc0Fycm93QmF0Y2hlcyIsImtlcGxlcmdsIiwiaXNLZXBsZXJHbE1hcCIsInByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIiLCJpc1Jvd09iamVjdCIsInByb2Nlc3NDc3ZSb3dPYmplY3QiLCJpc0dlb0pzb24iLCJwcm9jZXNzR2VvanNvbiIsImQiLCJzY2hlbWEiLCJmIiwiRGF0YVR5cGUiLCJpc0JpbmFyeSIsIkdFT0FSUk9XX01FVEFEQVRBX0tFWSIsImlzR2VvQXJyb3dQb2ludCIsIlBPSU5UIiwiaXNHZW9BcnJvd0xpbmVTdHJpbmciLCJMSU5FU1RSSU5HIiwiaXNHZW9BcnJvd1BvbHlnb24iLCJQT0xZR09OIiwiaXNHZW9BcnJvd011bHRpUG9pbnQiLCJNVUxUSVBPSU5UIiwiaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyIsIk1VTFRJTElORVNUUklORyIsImlzR2VvQXJyb3dNdWx0aVBvbHlnb24iLCJNVUxUSVBPTFlHT04iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvZHVja2RiLXRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRUeXBlLFxuICBEQVRBU0VUX0ZPUk1BVFMsXG4gIEdFT0FSUk9XX0VYVEVOU0lPTlMsXG4gIEdFT0FSUk9XX01FVEFEQVRBX0tFWVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBhcnJvd1NjaGVtYVRvRmllbGRzLFxuICBpc0Fycm93RGF0YSxcbiAgaXNHZW9Kc29uLFxuICBpc0tlcGxlckdsTWFwLFxuICBpc1Jvd09iamVjdCxcbiAgcHJvY2Vzc0Fycm93QmF0Y2hlc1xufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0ZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICBEYXRhYmFzZUFkYXB0ZXIsXG4gIERhdGFiYXNlQ29ubmVjdGlvbixcbiAgaXNBcnJvd1RhYmxlLFxuICBpc0Fycm93VmVjdG9yXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBwcm9jZXNzQ3N2Um93T2JqZWN0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYixcbiAgUHJvY2Vzc29yUmVzdWx0XG59IGZyb20gJy4uL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuXG5pbXBvcnQge1xuICBpc0dlb0Fycm93UG9pbnQsXG4gIGlzR2VvQXJyb3dMaW5lU3RyaW5nLFxuICBpc0dlb0Fycm93UG9seWdvbixcbiAgaXNHZW9BcnJvd011bHRpUG9pbnQsXG4gIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dNdWx0aVBvbHlnb25cbn0gZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG5pbXBvcnQge1xuICBjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIsXG4gIGRyb3BUYWJsZUlmRXhpc3RzLFxuICBnZXREdWNrREJDb2x1bW5UeXBlcyxcbiAgZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAsXG4gIHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyxcbiAgcmVzdG9yZUFycm93VGFibGUsXG4gIHJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuLy8gVE9ETyB1c2UgZmlsZXMgZnJvbSBkaXNrIG9yIHVybCBkaXJlY3RseSwgd2l0aG91dCBwYXJzaW5nIGJ5IGxvYWRlcnMgYW5kIHRoZW4gaW5nZWN0aW9uIGludG8gRGVja0RiXG5cbi8qKlxuICogRGVmYXVsdCBEdWNrRGIgZ2VvbWV0cnkgY29sdW1ucyBjcmVhdGVkIGJ5IFNUX1JFQURcbiAqL1xuY29uc3QgRFVDS0RCX0dFT01fQ09MVU1OID0gJ2dlb20nO1xuY29uc3QgRFVDS0RCX1dLQl9DT0xVTU4gPSAnd2tiX2dlb21ldHJ5JztcblxuLyoqXG4gRGVmYXVsdCBjb2x1bW4gbmFtZSBmb3IgcHJvY2Vzc2VkIGdlb2pzb24gaW4gS2VwbGVyLlxuIFVzZSB0aGlzIG5hbWUgdG8gcmVuYW1lIGRlZmF1bHQgJ2dlb20nIGNvbHVtbiBmcm9tIER1Y2tEYlxuIGluIG9yZGVyIHRvIHN1cHBvcnQgS2VwbGVyIG1hcHMgc2F2ZWQgYmVmb3JlIGludHJvZHVjdGlvbiBvZiBEdWNrRGIgcGx1Z2luLlxuICovXG5jb25zdCBLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OID0gJ19nZW9qc29uJztcblxuLyoqXG4gKiBOYW1lcyBvZiBjb2x1bW5zIHRoYXQgbW9zdCBsaWtlbHkgY29udGFpbiBiaW5hcnkgd2tiIGdlb21ldHJ5XG4gKi9cbmNvbnN0IFNVR0dFU1RFRF9HRU9NX0NPTFVNTlMgPSB7XG4gIFtLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OXTogR0VPQVJST1dfRVhURU5TSU9OUy5XS0IsXG4gIFtEVUNLREJfR0VPTV9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQixcbiAgZ2VvbWV0cnk6IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCXG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tQcm9wcyA9IHtcbiAgZGF0YTogUHJvY2Vzc29yUmVzdWx0ICYge2Fycm93U2NoZW1hOiBhcnJvdy5TY2hlbWF9O1xuICBkYjogRGF0YWJhc2VBZGFwdGVyO1xuICBjOiBEYXRhYmFzZUNvbm5lY3Rpb247XG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tSZXN1bHQgPSB7XG4gIC8vIER1Y2tEYiBkcm9wcyBnZW9hcnJvdyBtZXRhZGF0YSwgc28gdHJ5IHRvIHByZXNlcnZlIGFuZCB0aGVuIHJlc3RvcmUgdGhlIGV4dGVuc2lvbiBuYW1lXG4gIGdlb2Fycm93TWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvLyBVc2UgZmllbGRzIGZyb20gYXJyb3cgdGFibGUgZXZlbiBpZiBmaWVsZHMgYXJlIHByb3ZpZGVkXG4gIHVzZU5ld0ZpZWxkcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgS2VwbGVyR2xEdWNrRGJUYWJsZSBleHRlbmRzIEtlcGxlclRhYmxlIHtcbiAgZGVjbGFyZSByZWFkb25seSBpZDogc3RyaW5nO1xuICBkZWNsYXJlIGxhYmVsOiBzdHJpbmc7XG4gIGRlY2xhcmUgdHlwZTogc3RyaW5nO1xuICBkZWNsYXJlIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0Um93RGF0YSh7ZGF0YSwgZGIsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge2ZpZWxkcywgcm93c30gPSBkYXRhO1xuXG4gICAgICAvLyBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2wgbG9hZHMgZGF0YSBhcyBhbnlbXVtdIGluc3RlYWQgb2YgW3t9XVxuICAgICAgLy8gVE9ETyBwb3RlbnRpYWwgbWVtb3J5IHVzYWdlIGV4cGxvc2lvbjogb3JpZ2luYWwgZGF0YSwgbmV3IG9iamVjdCBhbmQgdGhlbiBEdWNrRGIgdGFibGVcbiAgICAgIGNvbnN0IHJvd3NGb3JEYiA9IEFycmF5LmlzQXJyYXkocm93c1swXSlcbiAgICAgICAgPyByb3dzLm1hcChyb3cgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0ge307XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZHNbaW5kZXhdLm5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICAgICAgfSlcbiAgICAgICAgOiByb3dzO1xuXG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVUZXh0KHRoaXMuaWQsIEpTT04uc3RyaW5naWZ5KHJvd3NGb3JEYikpO1xuXG4gICAgICBjb25zdCBjb2x1bW5zID0gZmllbGRzLnJlZHVjZSgoYWNjLCBmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPIGV4dGVuZCBmaWVsZHMgdG8gY29udGFpbiBkdWNrREJDb2x1bW5UeXBlXG4gICAgICAgIHJldHVybiBgJHthY2N9JHtpbmRleCA+IDAgPyAnLCcgOiAnJ30gJyR7ZmllbGQubmFtZX0nOiAnJHtmaWVsZC5kdWNrREJDb2x1bW5UeXBlfSdgO1xuICAgICAgfSwgJycpO1xuXG4gICAgICBjb25zdCBjcmVhdGVUYWJsZVNxbCA9IGBcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBU1xuICAgICAgICBTRUxFQ1QgKlxuICAgICAgICBGUk9NIHJlYWRfanNvbignJHt0aGlzLmlkfScsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSB7JHtjb2x1bW5zfX0pO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoY3JlYXRlVGFibGVTcWwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnaW1wb3J0Um93RGF0YScsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8SW1wb3J0RGF0YVRvRHVja1Jlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7cm93c30gPSBkYXRhO1xuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dCh0aGlzLmlkLCBKU09OLnN0cmluZ2lmeShyb3dzKSk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICAgIGxvYWQgc3BhdGlhbDtcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBUyBcbiAgICAgICAgU0VMRUNUICpcbiAgICAgICAgRlJPTSBTVF9SRUFEKCcke3RoaXMuaWR9Jywga2VlcF93a2IgPSBUUlVFKTtcbiAgICAgICAgQUxURVIgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIFJFTkFNRSAnJHtEVUNLREJfV0tCX0NPTFVNTn0nIFRPICcke0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU59JztcbiAgICAgIGA7XG5cbiAgICAgIGF3YWl0IGMucXVlcnkoY3JlYXRlVGFibGVTcWwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdpbXBvcnRHZW9Kc29uRGF0YScsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvLyBfZ2VvanNvbiBjb2x1bW4gaXMgY3JlYXRlZCBmcm9tIGdlb21ldHJ5IHdpdGgga2VlcF93a2IgZmxhZyBhbmQgY29udGFpbnMgdmFsaWQgV0tCIGRhdGEuXG4gICAgICBnZW9hcnJvd01ldGFkYXRhOiB7W0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQn1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0QXJyb3dEYXRhKHtkYXRhLCBjfTogSW1wb3J0RGF0YVRvRHVja1Byb3BzKTogUHJvbWlzZTxJbXBvcnREYXRhVG9EdWNrUmVzdWx0PiB7XG4gICAgbGV0IGFkanVzdGVkTWV0YWRhdGEgPSB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gMSkgZGF0YS5yb3dzIGNvbnRhaW5zIGFuIGFycm93IHRhYmxlIGNyZWF0ZWQgYnkgQWRkIHRvIE1hcCBkYXRhIGZyb20gRHVja0RiIHF1ZXJ5LlxuICAgICAgLy8gMikgYXJyb3cgdGFibGUgaXMgaW4gY29scyAmIGZpZWxkcyB3aGVuIGEgZmlsZSBpcyBkcmFnZ2VkICYgZHJvcHBlZCBpbnRvIEFkZCBEYXRhIFRvIE1hcCBkaWFsb2cuXG4gICAgICBjb25zdCBhcnJvd1RhYmxlID0gaXNBcnJvd1RhYmxlKGRhdGEucm93cylcbiAgICAgICAgPyBkYXRhLnJvd3NcbiAgICAgICAgOiByZXN0b3JlQXJyb3dUYWJsZShkYXRhLmNvbHMgfHwgW10sIGRhdGEuZmllbGRzLCBkYXRhLmFycm93U2NoZW1hKTtcblxuICAgICAgLy8gcmVtb3ZlIHVuc3VwcG9ydGVkIGV4dGVuc2lvbnMgZnJvbSBhbiBhcnJvdyB0YWJsZSB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RCLlxuICAgICAgYWRqdXN0ZWRNZXRhZGF0YSA9IHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyhhcnJvd1RhYmxlKTtcblxuICAgICAgY29uc3Qgc2V0dXBTcWwgPSBgXG4gICAgICAgIGluc3RhbGwgc3BhdGlhbDtcbiAgICAgICAgbG9hZCBzcGF0aWFsO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoc2V0dXBTcWwpO1xuICAgICAgYXdhaXQgYy5pbnNlcnRBcnJvd1RhYmxlKGFycm93VGFibGUsIHtuYW1lOiB0aGlzLmxhYmVsfSk7XG5cbiAgICAgIC8vIHJlc3RvcmUgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RiXG4gICAgICByZXN0b3JlVW5zdXBwb3J0ZWRFeHRlbnNpb25zKGFycm93VGFibGUsIGFkanVzdGVkTWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBLbm93biBpc3N1ZXM6XG4gICAgICAvLyAxKSBBcnJvdyBUeXBlIHdpdGggZXh0ZW5zaW9uIG5hbWU6IGdlb2Fycm93LnBvaW50IGFuZCBmb3JtYXQ6ICt3OjIgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gRHVja0RCLlxuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0QXJyb3dEYXRhJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdlb2Fycm93TWV0YWRhdGE6IHsuLi5TVUdHRVNURURfR0VPTV9DT0xVTU5TLCAuLi5hZGp1c3RlZE1ldGFkYXRhfSxcbiAgICAgIC8vIHVzZSBmaWVsZHMgZ2VuZXJhdGVkIGZyb20gdGhlIGNyZWF0ZWQgYXJyb3cgdGFibGVcbiAgICAgIHVzZU5ld0ZpZWxkczogdHJ1ZVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHRhYmxlIGZyb20gZGF0YSwgcmV0dXJucyBhbiBhcnJvdyB0YWJsZSB3aXRoIHRoZSBkYXRhXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtmaWVsZHM6IEZpZWxkW10sIGNvbHM6IGFueVtdfT59XG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTogUHJvbWlzZTx7ZmllbGRzOiBhbnlbXTsgY29sczogYXJyb3cuVmVjdG9yW119PiB7XG4gICAgY29uc3QgZGIgPSBhd2FpdCBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmRhdGFiYXNlO1xuICAgIGlmICghZGIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBkYXRhYmFzZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4nKTtcbiAgICAgIHJldHVybiB7ZmllbGRzOiBbXSwgY29sczogW119O1xuICAgIH1cbiAgICBjb25zdCBjID0gYXdhaXQgZGIuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgdGFibGVOYW1lID0gdGhpcy5sYWJlbDtcbiAgICBhd2FpdCBkcm9wVGFibGVJZkV4aXN0cyhjLCB0YWJsZU5hbWUpO1xuXG4gICAgbGV0IGZvcm1hdCA9IHRoaXMubWV0YWRhdGEuZm9ybWF0O1xuICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAvLyBmb3JtYXQgaXMgbWlzc2luZyB3aGVuIHdlIGxvYWQgS2VwbGVyLmdsIGV4YW1wbGVzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnJvd3M/LlswXSkgfHwgdHlwZW9mIGRhdGEucm93cz8uWzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMucm93O1xuICAgICAgfSBlbHNlIGlmIChkYXRhLnJvd3M/LnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb247XG4gICAgICB9IGVsc2UgaWYgKGlzQXJyb3dWZWN0b3IoZGF0YS5jb2xzPy5bMF0pKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5hcnJvdztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgaW1wb3J0RGV0YWlsczogSW1wb3J0RGF0YVRvRHVja1Jlc3VsdCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMucm93KSB7XG4gICAgICBhd2FpdCB0aGlzLmltcG9ydFJvd0RhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5nZW9qc29uKSB7XG4gICAgICBpbXBvcnREZXRhaWxzID0gYXdhaXQgdGhpcy5pbXBvcnRHZW9Kc29uRGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmFycm93KSB7XG4gICAgICBpbXBvcnREZXRhaWxzID0gYXdhaXQgdGhpcy5pbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1VucmVjb2duaXplZCBmb3JtYXQnLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGxldCBmaWVsZHM6IEZpZWxkW10gPSBbXTtcbiAgICBsZXQgY29sczogYXJyb3cuVmVjdG9yW10gPSBbXTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7Z2VvYXJyb3dNZXRhZGF0YSA9IHt9LCB1c2VOZXdGaWVsZHMgPSBmYWxzZX0gPSBpbXBvcnREZXRhaWxzIHx8IHt9O1xuXG4gICAgICBjb25zdCBkdWNrRGJDb2x1bW5zID0gYXdhaXQgZ2V0RHVja0RCQ29sdW1uVHlwZXMoYywgdGFibGVOYW1lKTtcbiAgICAgIGNvbnN0IHRhYmxlRHVja0RCVHlwZXMgPSBnZXREdWNrREJDb2x1bW5UeXBlc01hcChkdWNrRGJDb2x1bW5zKTtcbiAgICAgIGNvbnN0IGFkanVzdGVkUXVlcnkgPSBjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIodGFibGVOYW1lLCBkdWNrRGJDb2x1bW5zKTtcbiAgICAgIGNvbnN0IGFycm93UmVzdWx0ID0gYXdhaXQgYy5xdWVyeShhZGp1c3RlZFF1ZXJ5KTtcblxuICAgICAgLy8gVE9ETyBpZiBmb3JtYXQgaXMgYW4gYXJyb3cgdGFibGUgdGhlbiBqdXN0IHVzZSB0aGUgb3JpZ2luYWwgb25lLCBpbnN0ZWFkIG9mIHRoZSBuZXcgdGFibGUgZnJvbSB0aGUgcXVlcnk/XG5cbiAgICAgIHJlc3RvcmVHZW9hcnJvd01ldGFkYXRhKGFycm93UmVzdWx0LCBnZW9hcnJvd01ldGFkYXRhKTtcblxuICAgICAgZmllbGRzID0gdXNlTmV3RmllbGRzXG4gICAgICAgID8gYXJyb3dTY2hlbWFUb0ZpZWxkcyhhcnJvd1Jlc3VsdCwgdGFibGVEdWNrREJUeXBlcylcbiAgICAgICAgOiBkYXRhLmZpZWxkcyA/PyBhcnJvd1NjaGVtYVRvRmllbGRzKGFycm93UmVzdWx0LCB0YWJsZUR1Y2tEQlR5cGVzKTtcbiAgICAgIGNvbHMgPSBbLi4uQXJyYXkoYXJyb3dSZXN1bHQubnVtQ29scykua2V5cygpXVxuICAgICAgICAubWFwKGkgPT4gYXJyb3dSZXN1bHQuZ2V0Q2hpbGRBdChpKSlcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sKSBhcyBhcnJvdy5WZWN0b3JbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRHVja0RCIHRhYmxlOiBjcmVhdGVUYWJsZUFuZEdldEFycm93JywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgYXdhaXQgYy5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHtmaWVsZHMsIGNvbHN9O1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0RGF0YSh7ZGF0YX06IHtkYXRhOiBQcm9jZXNzb3JSZXN1bHR9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVmVjdG9yVGlsZSBpcyBhIHNwZWNpYWwgY2FzZSwgaWdub3JlIGZvciBub3dcbiAgICBpZiAodGhpcy50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSkge1xuICAgICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YTogey4uLmRhdGEsIHJvd3M6IFtdfX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtmaWVsZHMsIGNvbHN9ID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpO1xuXG4gICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YToge2ZpZWxkcywgY29scywgcm93czogW119fSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoZGF0YSkge1xuICAgIC8vIFZlY3RvclRpbGUgaXMgYSBzcGVjaWFsIGNhc2UsIGlnbm9yZSBmb3Igbm93XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGF9KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IHtjb2xzfSA9IGF3YWl0IHRoaXMuY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTtcblxuICAgIHJldHVybiBzdXBlci51cGRhdGUoe2NvbHMsIHJvd3M6IFtdLCBmaWVsZHM6IFtdfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RmlsZVByb2Nlc3NvciA9IGZ1bmN0aW9uIChkYXRhOiBhbnksIGlucHV0Rm9ybWF0Pzogc3RyaW5nKSB7XG4gICAgbGV0IHByb2Nlc3NvcjtcbiAgICBsZXQgZm9ybWF0O1xuICAgIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmFycm93IHx8IGlzQXJyb3dEYXRhKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzQXJyb3dCYXRjaGVzO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCB8fCBpc0tlcGxlckdsTWFwKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2w7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5yb3cgfHwgaXNSb3dPYmplY3QoZGF0YSkpIHtcbiAgICAgIC8vIGNzdiBmaWxlIGdvZXMgaGVyZVxuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NDc3ZSb3dPYmplY3Q7IC8vIGRpcmVjdGx5IGltcG9ydCBqc29uIG9iamVjdCBpbnRvIGR1Y2tkYi13YXNtXG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb24gfHwgaXNHZW9Kc29uKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbjtcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NHZW9qc29uO1xuICAgIH1cbiAgICByZXR1cm4ge3Byb2Nlc3NvciwgZm9ybWF0fTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0SW5wdXREYXRhVmFsaWRhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIEluIER1Y2tEQiBtb2RlIGRhdGEgaXMgdmFsaWRhdGVkIGxhdGVyIGR1cmluZyBpbXBvcnQuXG4gICAgcmV0dXJuIGQgPT4gZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVzdG9yZSBnZW9hcnJvdyBtZXRhZGF0YSBsb3N0IGR1cmluZyBEdWNrRGIgaW5nZXN0aW9uLlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGdlbmVyYXRlIHdyb25nIGdlb21ldHJ5IHR5cGVzLlxuICogQHBhcmFtIGFycm93VGFibGUgQXJyb3cgdGFibGUgdG8gdXBkYXRlLlxuICogQHBhcmFtIGdlb2Fycm93TWV0YWRhdGEgQSBtYXAgd2l0aCBmaWVsZCBuYW1lcyB0aGF0IHVzdWFsbHkgdXNlZCB0byBzdG9yZSBnZW9hcnJvdyBnZW9tZXRyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc3RvcmVHZW9hcnJvd01ldGFkYXRhID0gKFxuICBhcnJvd1RhYmxlOiBhcnJvdy5UYWJsZSxcbiAgZ2VvYXJyb3dNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSA9PiB7XG4gIGFycm93VGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgIGlmIChhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShmLnR5cGUpICYmIGdlb2Fycm93TWV0YWRhdGFbZi5uYW1lXSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBnZW9hcnJvd01ldGFkYXRhW2YubmFtZV0pO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd1BvaW50KGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5QT0lOVCk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TGluZVN0cmluZyhmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTElORVNUUklORyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93UG9seWdvbihmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuUE9MWUdPTik7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2ludChmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElQT0lOVCk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5NVUxUSUxJTkVTVFJJTkcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpUG9seWdvbihmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElQT0xZR09OKTtcbiAgICB9XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQU1BLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQVFBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQVFBLElBQUFLLGNBQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFTQSxJQUFBTyxrQkFBQSxHQUFBUCxPQUFBO0FBUXFDLFNBQUFRLHlC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
@@ -0,0 +1 @@
1
+ export * from './duckdb-table-utils';
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _duckdbTableUtils = require("./duckdb-table-utils");
7
+ Object.keys(_duckdbTableUtils).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _duckdbTableUtils[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function get() {
13
+ return _duckdbTableUtils[key];
14
+ }
15
+ });
16
+ });
17
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiVGFibGVVdGlscyIsInJlcXVpcmUiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0ICogZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBR0EsSUFBQUEsaUJBQUEsR0FBQUMsT0FBQTtBQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUgsaUJBQUEsRUFBQUksT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUMsT0FBQSxJQUFBQSxPQUFBLENBQUFELEdBQUEsTUFBQUwsaUJBQUEsQ0FBQUssR0FBQTtFQUFBSCxNQUFBLENBQUFLLGNBQUEsQ0FBQUQsT0FBQSxFQUFBRCxHQUFBO0lBQUFHLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQVQsaUJBQUEsQ0FBQUssR0FBQTtJQUFBO0VBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1,11 +1,28 @@
1
1
  {
2
2
  "name": "@kepler.gl/duckdb",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.2.2",
4
+ "version": "3.2.4",
5
5
  "description": "DuckDB plugin for Kepler.gl",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.js"
14
+ },
15
+ "./components": {
16
+ "types": "./dist/components/index.d.ts",
17
+ "import": "./dist/components/index.js",
18
+ "require": "./dist/components/index.js"
19
+ },
20
+ "./table": {
21
+ "types": "./dist/table/index.d.ts",
22
+ "import": "./dist/table/index.js",
23
+ "require": "./dist/table/index.js"
24
+ }
25
+ },
9
26
  "keywords": [
10
27
  "duckdb"
11
28
  ],
@@ -18,7 +35,7 @@
18
35
  "build:umd": "NODE_OPTIONS=--openssl-legacy-provider webpack --config ./webpack/umd.js --progress --env.prod",
19
36
  "build:types": "tsc --project ./tsconfig.production.json",
20
37
  "prepublishOnly": "babel-node ../../scripts/license-header/bin --license ../../FILE-HEADER && yarn build && yarn build:types",
21
- "stab": "mkdir -p dist && touch dist/index.js"
38
+ "stab": "mkdir -p dist/components dist/table && echo \"export * from '../src';\" > dist/index.js && echo \"export * from '../../src/components';\" > dist/components/index.js && echo \"export * from '../../src/table';\" > dist/table/index.js"
22
39
  },
23
40
  "files": [
24
41
  "dist",
@@ -26,11 +43,12 @@
26
43
  ],
27
44
  "dependencies": {
28
45
  "@duckdb/duckdb-wasm": "^1.28.0",
29
- "@kepler.gl/common-utils": "3.2.2",
30
- "@kepler.gl/constants": "3.2.2",
31
- "@kepler.gl/processors": "3.2.2",
32
- "@kepler.gl/table": "3.2.2",
33
- "@kepler.gl/types": "3.2.2",
46
+ "@kepler.gl/common-utils": "3.2.4",
47
+ "@kepler.gl/constants": "3.2.4",
48
+ "@kepler.gl/processors": "3.2.4",
49
+ "@kepler.gl/table": "3.2.4",
50
+ "@kepler.gl/types": "3.2.4",
51
+ "@kepler.gl/utils": "3.2.4",
34
52
  "@monaco-editor/react": "^4.6.0",
35
53
  "@radix-ui/react-collapsible": "^1.1.0",
36
54
  "apache-arrow": ">=15.0.0",
@@ -1,4 +1,12 @@
1
1
  // SPDX-License-Identifier: MIT
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
- export * from './sql-panel';
4
+ export {SqlPanel} from './sql-panel';
5
+ export {SchemaPanel, SchemaPanelDropMessage} from './schema-panel';
6
+ export {PreviewDataPanel} from './preview-data-panel';
7
+ export {Tree, DatasetNode, ColumnNode} from './tree';
8
+ export {default as MonacoEditor} from './monaco-editor';
9
+
10
+ export type {SchemaSuggestion} from './schema-panel';
11
+ export type {PreviewDataPanelProps, QueryResult, DataTableStyle} from './preview-data-panel';
12
+ export type {TreeNodeData, TreeNodeProps, TreeProps} from './tree';
@@ -2,13 +2,7 @@
2
2
  // Copyright contributors to the kepler.gl project
3
3
 
4
4
  export {DuckDBWasmAdapter} from './adapters/duckdb-wasm-adapter';
5
- export {SqlPanel} from './components';
6
- import {keplerGlDuckDBPlugin} from './plugin';
7
- export {restoreGeoarrowMetadata, KeplerGlDuckDbTable} from './table/duckdb-table';
5
+ export {keplerGlDuckDBPlugin, keplerGlDuckDBPlugin as default} from './plugin';
6
+ export * from './table/duckdb-table';
8
7
  export * from './table/duckdb-table-utils';
9
- export default keplerGlDuckDBPlugin;
10
- export {
11
- consolidateFieldTypes,
12
- extendFieldsWithDuckDBColumnType,
13
- fieldTypeToColumnType
14
- } from './processors/data-processor';
8
+ export * from './processors/data-processor';
@@ -19,7 +19,13 @@ import {
19
19
  } from '@kepler.gl/processors';
20
20
  import {KeplerTable} from '@kepler.gl/table';
21
21
  import {Field} from '@kepler.gl/types';
22
- import {getApplicationConfig, DatabaseAdapter, DatabaseConnection} from '@kepler.gl/utils';
22
+ import {
23
+ getApplicationConfig,
24
+ DatabaseAdapter,
25
+ DatabaseConnection,
26
+ isArrowTable,
27
+ isArrowVector
28
+ } from '@kepler.gl/utils';
23
29
 
24
30
  import {
25
31
  processCsvRowObject,
@@ -161,10 +167,9 @@ export class KeplerGlDuckDbTable extends KeplerTable {
161
167
  try {
162
168
  // 1) data.rows contains an arrow table created by Add to Map data from DuckDb query.
163
169
  // 2) arrow table is in cols & fields when a file is dragged & dropped into Add Data To Map dialog.
164
- const arrowTable =
165
- data.rows instanceof arrow.Table
166
- ? data.rows
167
- : restoreArrowTable(data.cols || [], data.fields, data.arrowSchema);
170
+ const arrowTable = isArrowTable(data.rows)
171
+ ? data.rows
172
+ : restoreArrowTable(data.cols || [], data.fields, data.arrowSchema);
168
173
 
169
174
  // remove unsupported extensions from an arrow table that throw exceptions in DuckDB.
170
175
  adjustedMetadata = removeUnsupportedExtensions(arrowTable);
@@ -215,7 +220,7 @@ export class KeplerGlDuckDbTable extends KeplerTable {
215
220
  format = DATASET_FORMATS.row;
216
221
  } else if (data.rows?.type === 'FeatureCollection') {
217
222
  format = DATASET_FORMATS.geojson;
218
- } else if (data.cols?.[0] instanceof arrow.Vector) {
223
+ } else if (isArrowVector(data.cols?.[0])) {
219
224
  format = DATASET_FORMATS.arrow;
220
225
  }
221
226
  }
@@ -0,0 +1,5 @@
1
+ // SPDX-License-Identifier: MIT
2
+ // Copyright contributors to the kepler.gl project
3
+
4
+ export * from './duckdb-table-utils';
5
+
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/effects",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.2.2",
4
+ "version": "3.2.4",
5
5
  "description": "kepler.gl viaual effects",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,10 +31,10 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@deck.gl/core": "^8.9.27",
34
- "@kepler.gl/common-utils": "3.2.2",
35
- "@kepler.gl/constants": "3.2.2",
36
- "@kepler.gl/types": "3.2.2",
37
- "@kepler.gl/utils": "3.2.2",
34
+ "@kepler.gl/common-utils": "3.2.4",
35
+ "@kepler.gl/constants": "3.2.4",
36
+ "@kepler.gl/types": "3.2.4",
37
+ "@kepler.gl/utils": "3.2.4",
38
38
  "@luma.gl/core": "^8.5.20",
39
39
  "@luma.gl/shadertools": "^8.5.20",
40
40
  "moment-timezone": "^0.5.35",