kepler.gl 3.1.9 → 3.2.0

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 (98) hide show
  1. package/README.md +21 -21
  2. package/dist/src/components/src/common/link-renderer.d.ts +6 -2
  3. package/dist/src/components/src/index.d.ts +1 -0
  4. package/dist/src/components/src/map-container.d.ts +1 -0
  5. package/dist/src/components/src/plot-container.d.ts +1 -0
  6. package/dist/src/components/src/side-panel/layer-manager.d.ts +1 -0
  7. package/dist/src/duckdb/src/index.d.ts +1 -0
  8. package/dist/src/duckdb/src/processors/data-processor.d.ts +8 -0
  9. package/dist/src/utils/src/data-utils.d.ts +1 -0
  10. package/package.json +2 -2
  11. package/src/actions/package.json +8 -8
  12. package/src/ai-assistant/package.json +7 -7
  13. package/src/cloud-providers/package.json +2 -2
  14. package/src/common-utils/package.json +3 -3
  15. package/src/components/dist/common/link-renderer.d.ts +6 -2
  16. package/src/components/dist/common/link-renderer.js +1 -1
  17. package/src/components/dist/index.d.ts +1 -0
  18. package/src/components/dist/index.js +44 -1
  19. package/src/components/dist/map-container.d.ts +1 -0
  20. package/src/components/dist/map-container.js +2 -1
  21. package/src/components/dist/modal-container.js +3 -3
  22. package/src/components/dist/modals/tilesets-modals/tileset-raster-form.js +38 -9
  23. package/src/components/dist/plot-container.d.ts +1 -0
  24. package/src/components/dist/plot-container.js +7 -4
  25. package/src/components/dist/side-panel/layer-manager.d.ts +1 -0
  26. package/src/components/dist/side-panel/layer-manager.js +5 -3
  27. package/src/components/dist/side-panel/layer-panel/color-scale-selector.js +16 -9
  28. package/src/components/dist/side-panel/layer-panel/raster-tile-layer-configurator.js +3 -3
  29. package/src/components/package.json +16 -16
  30. package/src/components/src/common/link-renderer.tsx +7 -2
  31. package/src/components/src/index.ts +8 -0
  32. package/src/components/src/map-container.tsx +4 -0
  33. package/src/components/src/modal-container.tsx +6 -2
  34. package/src/components/src/modals/tilesets-modals/tileset-raster-form.tsx +60 -4
  35. package/src/components/src/plot-container.tsx +9 -3
  36. package/src/components/src/side-panel/layer-manager.tsx +4 -2
  37. package/src/components/src/side-panel/layer-panel/color-scale-selector.tsx +22 -9
  38. package/src/components/src/side-panel/layer-panel/raster-tile-layer-configurator.tsx +2 -1
  39. package/src/constants/dist/default-settings.js +1 -1
  40. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/56/48/71c2c5381c01c063c164e15fa04b4b1f3faae02e6727f2f2daf483e15205feca68334bad721af0c6f31abb20b56d60504623838127764aab6883912e7f71 +1 -0
  41. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e4/a7/04d0f645deb094cab21e70c2457f3b87750bee1dfea9b3ad1d4f746ae10ff013d960af8a46b1f87a10409989d6a352c21e29a8784a161a84f83a310955e2 +1 -0
  42. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b2/5f/6daa692cacd1234803d6a5abefef0c49aae2d1403e4d8e53140088950a04 +2 -0
  43. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/bf/88/ea60c7619185516464a4ae21f51394966047bfdf190a5463de651c61931c +2 -0
  44. package/src/constants/package.json +2 -2
  45. package/src/constants/umd/keplergl.min.js +1 -1
  46. package/src/deckgl-arrow-layers/package.json +2 -2
  47. package/src/deckgl-layers/package.json +4 -4
  48. package/src/duckdb/dist/index.d.ts +1 -0
  49. package/src/duckdb/dist/index.js +24 -2
  50. package/src/duckdb/dist/processors/data-processor.d.ts +8 -0
  51. package/src/duckdb/dist/processors/data-processor.js +23 -1
  52. package/src/duckdb/package.json +6 -6
  53. package/src/duckdb/src/index.ts +5 -0
  54. package/src/duckdb/src/processors/data-processor.ts +25 -1
  55. package/src/effects/package.json +5 -5
  56. package/src/layers/dist/raster-tile/gpu-utils.d.ts +11 -10
  57. package/src/layers/dist/raster-tile/gpu-utils.js +7 -6
  58. package/src/layers/dist/raster-tile/image.d.ts +4 -0
  59. package/src/layers/dist/raster-tile/image.js +30 -16
  60. package/src/layers/dist/raster-tile/raster-tile-layer.d.ts +4 -0
  61. package/src/layers/dist/raster-tile/raster-tile-layer.js +18 -6
  62. package/src/layers/dist/raster-tile/request-throttle.d.ts +1 -1
  63. package/src/layers/dist/raster-tile/request-throttle.js +17 -16
  64. package/src/layers/dist/raster-tile/types.d.ts +16 -0
  65. package/src/layers/dist/raster-tile/types.js +1 -1
  66. package/src/layers/dist/raster-tile/url.d.ts +1 -1
  67. package/src/layers/dist/raster-tile/url.js +5 -4
  68. package/src/layers/package.json +9 -9
  69. package/src/layers/src/raster-tile/gpu-utils.ts +96 -78
  70. package/src/layers/src/raster-tile/image.ts +35 -9
  71. package/src/layers/src/raster-tile/raster-tile-layer.ts +23 -5
  72. package/src/layers/src/raster-tile/request-throttle.ts +10 -5
  73. package/src/layers/src/raster-tile/types.ts +19 -1
  74. package/src/layers/src/raster-tile/url.ts +10 -3
  75. package/src/localization/package.json +1 -1
  76. package/src/processors/package.json +7 -7
  77. package/src/reducers/package.json +16 -16
  78. package/src/schemas/package.json +7 -7
  79. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/21/4a/50f77069dbf70c6792dd82d4e149375a888e25ddddd3209e2db013be62091f79082291fa06eb518cccb111b09a778e2946c1fb7a27bb6e32f72da0ccf250 +1 -0
  80. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/41/e3/d873c0efff87c4438d34d09be942ff6877947926c2309949e1eea8a58722c9ebf1e9451b44f62996d3590f398318e2fd17f19613445810226c8354b7d746 +1 -0
  81. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/9d/95/efc8c9f0bdd09b105646cf5e34b067e621726ceeb296771ff7da9e2e03b4 +2 -0
  82. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c5/b6/9c4bdb089acc30ac8a16a6b9b93898757537f7017b2f725ddb832b4614d6 +2 -0
  83. package/src/styles/package.json +2 -2
  84. package/src/styles/umd/keplergl.min.js +1 -1
  85. package/src/table/dist/tileset/vector-tile-utils.js +9 -5
  86. package/src/table/package.json +5 -5
  87. package/src/table/src/tileset/vector-tile-utils.ts +9 -6
  88. package/src/tasks/package.json +2 -2
  89. package/src/types/package.json +1 -1
  90. package/src/utils/dist/application-config.js +5 -5
  91. package/src/utils/dist/data-scale-utils.js +35 -16
  92. package/src/utils/dist/data-utils.d.ts +1 -0
  93. package/src/utils/dist/data-utils.js +2 -1
  94. package/src/utils/package.json +4 -4
  95. package/src/utils/src/application-config.ts +4 -6
  96. package/src/utils/src/data-scale-utils.ts +34 -21
  97. package/src/utils/src/data-utils.ts +1 -0
  98. package/umd/keplergl.min.js +1240 -1220
@@ -43,4 +43,4 @@ var BandCombination = exports.BandCombination = /*#__PURE__*/function (BandCombi
43
43
  /** Properties provided to getTileData by the deck.gl TileLayer */
44
44
  /** Properties passed into the deck.gl TileLayer getTileData callback */
45
45
  /** Required information on how to render each preset */
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYW5kQ29tYmluYXRpb24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7X1RpbGUyREhlYWRlcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycy90eXBlZCc7XG5pbXBvcnQge1R5cGVkQXJyYXl9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscy9zcmMvdHlwZXMnO1xuaW1wb3J0IHtUZXh0dXJlMkRQcm9wc30gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wnO1xuXG5pbXBvcnQge0tlcGxlclRhYmxlIGFzIEtlcGxlckRhdGFzZXR9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHR5cGUge0NvbG9yTWFwLCBTdGFjVHlwZXN9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBTVEFDT2JqZWN0ID0gU3RhY1R5cGVzLlNUQUNPYmplY3Q7XG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNJdGVtID0gU3RhY1R5cGVzLkNvbXBsZXRlU1RBQ0l0ZW07XG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNDb2xsZWN0aW9uID0gU3RhY1R5cGVzLkNvbXBsZXRlU1RBQ0NvbGxlY3Rpb247XG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNPYmplY3QgPSBTdGFjVHlwZXMuQ29tcGxldGVTVEFDT2JqZWN0O1xuXG50eXBlIERhdGFUeXBlT2ZUaGVCYW5kID0gU3RhY1R5cGVzLkRhdGFUeXBlT2ZUaGVCYW5kO1xuXG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNBc3NldExpbmtzID1cbiAgfCBDb21wbGV0ZVNUQUNJdGVtWydhc3NldHMnXVxuICB8IENvbXBsZXRlU1RBQ0NvbGxlY3Rpb25bJ2l0ZW1fYXNzZXRzJ107XG5cbmV4cG9ydCBlbnVtIEJhbmRDb21iaW5hdGlvbiB7XG4gIC8qKiBSZW5kZXIgYSBzaW5nbGUgcmFzdGVyIGJhbmQuICovXG4gIFNpbmdsZSA9ICdzaW5nbGUnLFxuXG4gIC8qKiBSZW5kZXIgdGhyZWUgYmFuZHMgdG9nZXRoZXIgb24gdGhlIEdQVS5cbiAgICogTm90ZSB0aGF0IHRoaXMgY291bGQgYmUgXCJ0cnVlIGNvbG9yXCIgaWYgdGhlIGZpcnN0IGJhbmQgaXMgcmVkLCB0aGUgc2Vjb25kIGlzIGdyZWVuLCBhbmQgdGhlXG4gICAqIHRoaXJkIGlzIGJsdWUuIEJ1dCBpdCBjb3VsZCBhbHNvIGJlIFwiZmFsc2UgY29sb3JcIiBpZiB0aGUgdGhyZWUgYmFuZHMgY2hvc2VuIGFyZSBub3QgUkdCLlxuICAgKi9cbiAgUmdiID0gJ3JnYicsXG5cbiAgLyoqIENhbGN1bGF0ZSB0aGUgTm9ybWFsaXplZCBEaWZmZXJlbmNlIFZlZ2V0YXRpb24gSW5kZXggKE5EVkkpIG9uIHR3byBiYW5kcy4gKi9cbiAgTm9ybWFsaXplZERpZmZlcmVuY2UgPSAnbm9ybWFsaXplZERpZmZlcmVuY2UnLFxuXG4gIC8qKiBDYWxjdWxhdGUgdGhlIEVWSSBvbiB0d28gYmFuZHMuICovXG4gIEVuaGFuY2VkVmVnZXRhdGlvbkluZGV4ID0gJ2VuaGFuY2VkVmVnZXRhdGlvbkluZGV4JyxcblxuICAvKiogQ2FsY3VsYXRlIFNBVkkgb24gdHdvIGJhbmRzLiAqL1xuICBTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXggPSAnc29pbEFkanVzdGVkVmVnZXRhdGlvbkluZGV4JyxcblxuICAvKiogQ2FsY3VsYXRlIE1TQVZJIG9uIHR3byBiYW5kcy4gKi9cbiAgTW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXggPSAnbW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgnXG59XG5cbi8qKlxuICogSWRlbnRpZmllcnMgb2YgU1RBQyBhc3NldHMgdG8gbG9hZFxuICpcbiAqIFRoZXNlIGlkZW50aWZpZXJzIHNob3VsZCBtYXRjaCB0aGUga2V5cyBvZiB0aGUgU1RBQyBhc3NldHMgb2JqZWN0LiBSZWZlciB0b1xuICogaHR0cHM6Ly9naXRodWIuY29tL3JhZGlhbnRlYXJ0aC9zdGFjLXNwZWMvYmxvYi9tYXN0ZXIvaXRlbS1zcGVjL2l0ZW0tc3BlYy5tZCNhc3NldHNcbiAqL1xuZXhwb3J0IHR5cGUgQXNzZXRJZHMgPSBzdHJpbmdbXTtcblxuLyoqXG4gKiBJbmRleGVzIG9mIGJhbmRzIHdpdGhpbiBlYWNoIGFzc2V0IHRoYXQgc2hvdWxkIGJlIGxvYWRlZC5cbiAqXG4gKiBFYWNoIGFzc2V0IHJlZmVycyB0byBhIHNpbmdsZSBDbG91ZC1PcHRpbWl6ZWQgR2VvVElGRiBmaWxlIG9uIGRpc2suIEVhY2ggQ09HIGhhcyBhIHdpZHRoLCBoZWlnaHQsXG4gKiBhbmQgb25lIG9yIG1vcmUgYmFuZHMuXG4gKlxuICogVGhpcyBhcnJheSBvZiBpbmRleGVzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBsaXN0IG9mIEFzc2V0SWRzLiBUaGUgbnRoIGJhbmQgaW5kZXhcbiAqIGRlc2NyaWJlcyB0aGUgd2hpY2ggaW5kZXggZnJvbSB0aGUgbnRoIGFzc2V0IGlkIHRvIGxvYWQuXG4gKi9cbmV4cG9ydCB0eXBlIEJhbmRJbmRleGVzID0gbnVtYmVyW107XG5cbi8qKlxuICogQW4gYXJyYXkgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIGhvdyBiYW5kcyBzaG91bGQgYmUgcmVvcmRlcmVkIG9uIHRoZSBHUFUuIFRoaXMgYWxsb3dzIGZvclxuICogZmFzdGVyIGNoYW5naW5nIG9mIGJhbmRzIGZvciBzaW5nbGUtYXNzZXQgcmFzdGVyIGRhdGEsIHN1Y2ggYXMgTkFJUC4gV2lsbCBiZSBudWxsIGZvciBtdWx0aS1hc3NldFxuICogU1RBQyBpdGVtcy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVuZGVyQmFuZEluZGV4ZXMgPSBCYW5kSW5kZXhlcyB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIEFzc2V0UmVxdWVzdEluZm8gPSB7XG4gIGxvYWRBc3NldElkczogQXNzZXRJZHM7XG4gIGxvYWRCYW5kSW5kZXhlczogQmFuZEluZGV4ZXM7XG4gIHJlbmRlckJhbmRJbmRleGVzOiBSZW5kZXJCYW5kSW5kZXhlcztcbn07XG5cbi8qKiBVc2VyLXByb3ZpZGVkIGluZm9ybWF0aW9uIGZvciBob3cgdG8gcmVuZGVyIGEgcHJlc2V0ICovXG5leHBvcnQgdHlwZSBQcmVzZXRPcHRpb24gPSB7XG4gIHNpbmdsZUJhbmQ/OiB7XG4gICAgYXNzZXRJZDogc3RyaW5nO1xuICAgIGJhbmRJbmRleD86IG51bWJlcjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFTb3VyY2VQYXJhbXMgPSBBc3NldFJlcXVlc3RJbmZvICYge1xuICBtaW5ab29tOiBudW1iZXI7XG4gIG1heFpvb206IG51bWJlcjtcbiAgbWluUGl4ZWxWYWx1ZTogbnVtYmVyO1xuICBtYXhQaXhlbFZhbHVlOiBudW1iZXI7XG4gIG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlPzogbnVtYmVyO1xuICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgZ2xvYmFsQm91bmRzOiBudW1iZXJbXSB8IG51bGw7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZU9mVGhlQmFuZDtcbn07XG5cbmV4cG9ydCB0eXBlIENhdGVnb3JpY2FsQ29sb3JtYXBPcHRpb25zID0ge1xuICBjb2xvck1hcD86IENvbG9yTWFwO1xuICBtaW5WYWx1ZT86IG51bWJlcjtcbiAgbWF4VmFsdWU/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZEtlcGxlclNUQUMgPSB7cmFzdGVyVGlsZVNlcnZlclVybHM/OiBbXX07XG5cbi8qKlxuICogQ3VzdG9tIGZpZWxkcyB3ZSBwYXNzIG9uIHRvIHRoZSBnZXRUaWxlRGF0YSBjYWxsYmFja1xuICogQW55dGhpbmcgcmVxdWlyZWQgdG8ga25vdyBfd2hhdCBkYXRhIHRvIGxvYWRfIHNob3VsZCBiZSBwYXNzZWQgaW4gaGVyZS5cbiAqL1xuZXhwb3J0IHR5cGUgR2V0VGlsZURhdGFDdXN0b21Qcm9wcyA9IFBpY2s8QXNzZXRSZXF1ZXN0SW5mbywgJ2xvYWRBc3NldElkcycgfCAnbG9hZEJhbmRJbmRleGVzJz4gJiB7XG4gIHN0YWM6IENvbXBsZXRlU1RBQ09iamVjdCAmIEV4dGVuZGVkS2VwbGVyU1RBQztcbiAgY29sb3JtYXBJZDogc3RyaW5nO1xuICBjYXRlZ29yaWNhbENvbG9yTWFwOiBDb2xvck1hcDtcbiAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWU/OiBudW1iZXI7XG4gIG1heENhdGVnb3JpY2FsQmFuZFZhbHVlPzogbnVtYmVyO1xuXG4gIC8qKiBJZiB0cnVlLCBmZXRjaCB0ZXJyYWluIGRhdGEgYXMgd2VsbCBhcyB0ZXh0dXJlIGRhdGEuICovXG4gIHNob3VsZExvYWRUZXJyYWluOiBib29sZWFuO1xuICBnbG9iYWxCb3VuZHM6IG51bWJlcltdIHwgbnVsbDtcbiAgdXNlU1RBQ1NlYXJjaGluZzogYm9vbGVhbjtcbiAgc3RhY1NlYXJjaFByb3ZpZGVyOiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xuICBlbmREYXRlOiBzdHJpbmc7XG5cbiAgLyogU3RyaW5naWZpZWQgSlNPTiByZXByZXNlbnRpbmcgYSBTVEFDIEFQSSBTZWFyY2ggUXVlcnkgdGhlIGJhY2tlbmQgc2hvdWxkIHJlcXVlc3QgZnJvbSBhIHNlcnZlci4gKi9cbiAgX3N0YWNRdWVyeT86IHN0cmluZztcbn07XG5cbi8qKiBQcm9wZXJ0aWVzIHByb3ZpZGVkIHRvIGdldFRpbGVEYXRhIGJ5IHRoZSBkZWNrLmdsIFRpbGVMYXllciAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRUaWxlRGF0YURlZmF1bHRQcm9wcyB7XG4gIGluZGV4OiB7eDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcn07XG4gIHVybD86IHN0cmluZztcblxuICAvKiogQm91bmRpbmcgYm94IG9mIHRoZSBjdXJyZW50IHdlYiBtZXJjYXRvciB0aWxlLiAqL1xuICBiYm94OiB7d2VzdDogbnVtYmVyOyBub3J0aDogbnVtYmVyOyBlYXN0OiBudW1iZXI7IHNvdXRoOiBudW1iZXJ9O1xuXG4gIC8qKiBBYm9ydFNpZ25hbCB1c2VkIGZvciBjYW5jZWxsaW5nIHJlcXVlc3RzICovXG4gIHNpZ25hbDogQWJvcnRTaWduYWw7XG59XG5cbi8qKiBQcm9wZXJ0aWVzIHBhc3NlZCBpbnRvIHRoZSBkZWNrLmdsIFRpbGVMYXllciBnZXRUaWxlRGF0YSBjYWxsYmFjayAqL1xuZXhwb3J0IHR5cGUgR2V0VGlsZURhdGFQcm9wcyA9IEdldFRpbGVEYXRhQ3VzdG9tUHJvcHMgJiBHZXRUaWxlRGF0YURlZmF1bHRQcm9wcztcblxuZXhwb3J0IHR5cGUgR2V0VGlsZURhdGFPdXRwdXQgPSBhbnkgfCBudWxsO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJTdWJMYXllcnNDdXN0b21Qcm9wcyA9IENvbG9yUmVzY2FsaW5nICZcbiAgUGljazxBc3NldFJlcXVlc3RJbmZvLCAncmVuZGVyQmFuZEluZGV4ZXMnPiAmIHtcbiAgICBvcGFjaXR5OiBudW1iZXI7XG4gICAgbGluZWFyUmVzY2FsaW5nOiBib29sZWFuO1xuICAgIGxpbmVhclJlc2NhbGluZ0ZhY3RvcjogW251bWJlciwgbnVtYmVyXTtcbiAgICBub25MaW5lYXJSZXNjYWxpbmc6IGJvb2xlYW47XG4gICAgbWluUGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIG1heFBpeGVsVmFsdWU6IG51bWJlcjtcbiAgICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbjtcbiAgICBmaWx0ZXJFbmFibGVkOiBib29sZWFuO1xuICAgIGZpbHRlclJhbmdlOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIGN1cnJlbnRUaW1lOiBudW1iZXI7XG4gICAgZGF0YVR5cGU6IERhdGFUeXBlT2ZUaGVCYW5kO1xuICAgIG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlPzogbnVtYmVyO1xuICAgIG1heENhdGVnb3JpY2FsQmFuZFZhbHVlPzogbnVtYmVyO1xuICAgIGhhc0NhdGVnb3JpY2FsQ29sb3JNYXA6IGJvb2xlYW47XG4gICAgaGFzU2hhZG93RWZmZWN0PzogYm9vbGVhbjtcbiAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJTdWJMYXllcnNEZWZhdWx0UHJvcHMge1xuICBpZDogc3RyaW5nO1xuICB0aWxlOiBfVGlsZTJESGVhZGVyPEdldFRpbGVEYXRhT3V0cHV0PjtcbiAgZGF0YTogR2V0VGlsZURhdGFPdXRwdXQ7XG59XG5cbmV4cG9ydCB0eXBlIFJlbmRlclN1YkxheWVyc1Byb3BzID0gUmVuZGVyU3ViTGF5ZXJzQ3VzdG9tUHJvcHMgJiBSZW5kZXJTdWJMYXllcnNEZWZhdWx0UHJvcHM7XG5cbi8qKiBSZXF1aXJlZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gcmVuZGVyIGVhY2ggcHJlc2V0ICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXNldERhdGEge1xuICBsYWJlbDogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICBiYW5kQ29tYmluYXRpb246IEJhbmRDb21iaW5hdGlvbjtcbiAgY29tbW9uTmFtZXM/OiBzdHJpbmdbXTtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGluZm9Vcmw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sb3JSZXNjYWxpbmcge1xuICBnYW1tYUNvbnRyYXN0RmFjdG9yOiBudW1iZXI7XG4gIHNpZ21vaWRhbENvbnRyYXN0RmFjdG9yOiBudW1iZXI7XG4gIHNpZ21vaWRhbEJpYXNGYWN0b3I6IG51bWJlcjtcbiAgc2F0dXJhdGlvblZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29uZmlnT3B0aW9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ29sb3JtYXBJbWFnZURhdGEgPSBUZXh0dXJlMkRQcm9wcztcblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZURhdGEge1xuICBpbWFnZUJhbmRzOiBUZXh0dXJlMkRQcm9wc1tdIHwgbnVsbDtcbiAgaW1hZ2VDb2xvcm1hcD86IFRleHR1cmUyRFByb3BzIHwgbnVsbDtcbiAgaW1hZ2VNYXNrPzogVGV4dHVyZTJEUHJvcHMgfCBudWxsO1xuICBpbWFnZVBhbj86IFRleHR1cmUyRFByb3BzIHwgbnVsbDtcbiAgaW1hZ2VSZ2JhPzogVGV4dHVyZTJEUHJvcHMgfCBudWxsO1xufVxuXG5leHBvcnQgdHlwZSBBc3NldFJlcXVlc3REYXRhID0ge1xuICB1cmw6IHN0cmluZztcbiAgcmFzdGVyU2VydmVyVXJsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IFJlcXVlc3RJbml0O1xuICB1c2VNYXNrOiBib29sZWFuO1xuICAvKiogUGFzcyB0aGlzIHByb3BlcnR5IHRocm91Z2ggdGhlIHJlcXVlc3QgdG8gcGljayBzcGVjaWZpYyBiYW5kcyBmcm9tIHRoZSByZXNwb25zZSAqL1xuICByZXNwb25zZVJlcXVpcmVkQmFuZEluZGljZXM/OiBudW1iZXJbXSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBOUFlMb2FkZXJEYXRhVHlwZXMgPVxuICB8IFVpbnQ4QXJyYXlcbiAgfCBVaW50OENsYW1wZWRBcnJheVxuICB8IEludDhBcnJheVxuICB8IFVpbnQxNkFycmF5XG4gIHwgSW50MTZBcnJheVxuICB8IFVpbnQzMkFycmF5XG4gIHwgSW50MzJBcnJheVxuICB8IEZsb2F0MzJBcnJheVxuICB8IEZsb2F0NjRBcnJheTtcblxuZXhwb3J0IGludGVyZmFjZSBOUFlMb2FkZXJSZXNwb25zZSB7XG4gIGRhdGE6IE5QWUxvYWRlckRhdGFUeXBlcztcbiAgaGVhZGVyOiB7XG4gICAgZGVzY3I6IHN0cmluZztcbiAgICBzaGFwZTogbnVtYmVyW107XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFpbkRhdGEge1xuICBoZWFkZXI6IHtcbiAgICB2ZXJ0ZXhDb3VudDogbnVtYmVyO1xuICAgIGJvdW5kaW5nQm94OiBbW251bWJlciwgbnVtYmVyLCBudW1iZXJdLCBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl1dO1xuICB9O1xuICBtb2RlOiA0O1xuICBpbmRpY2VzOiB7XG4gICAgdmFsdWU6IFR5cGVkQXJyYXk7XG4gICAgc2l6ZTogMTtcbiAgfTtcbiAgYXR0cmlidXRlczoge1xuICAgIFBPU0lUSU9OOiB7XG4gICAgICB2YWx1ZTogVHlwZWRBcnJheTtcbiAgICAgIHNpemU6IDM7XG4gICAgfTtcbiAgICBURVhDT09SRF8wOiB7XG4gICAgICB2YWx1ZTogVHlwZWRBcnJheTtcbiAgICAgIHNpemU6IDI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgS2VwbGVyUmFzdGVyRGF0YXNldCA9IEtlcGxlckRhdGFzZXQgJiB7XG4gIG1ldGFkYXRhOiBDb21wbGV0ZVNUQUNPYmplY3Q7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFRpbGUyREhlYWRlciB7XG4gIGNvbnRlbnQ/OiB7XG4gICAgdGVycmFpbj86IFRlcnJhaW5EYXRhO1xuICAgIGltYWdlczogR2V0VGlsZURhdGFPdXRwdXQ7XG4gIH0gfCBudWxsO1xuICBnZXQgZGF0YSgpOiBHZXRUaWxlRGF0YU91dHB1dDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUFBLElBb0JZQSxlQUFlLEdBQUFDLE9BQUEsQ0FBQUQsZUFBQSwwQkFBZkEsZUFBZTtFQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBZkEsZUFBZTtFQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBZkEsZUFBZTtFQUFBLE9BQWZBLGVBQWU7QUFBQTtBQXVCM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBb0JBO0FBWUE7QUFnQ0EiLCJpZ25vcmVMaXN0IjpbXX0=
46
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYW5kQ29tYmluYXRpb24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7X1RpbGUyREhlYWRlcn0gZnJvbSAnQGRlY2suZ2wvZ2VvLWxheWVycy90eXBlZCc7XG5pbXBvcnQge1R5cGVkQXJyYXl9IGZyb20gJ0Bsb2FkZXJzLmdsL2xvYWRlci11dGlscy9zcmMvdHlwZXMnO1xuaW1wb3J0IHtUZXh0dXJlMkRQcm9wc30gZnJvbSAnQGx1bWEuZ2wvd2ViZ2wnO1xuXG5pbXBvcnQge0tlcGxlclRhYmxlIGFzIEtlcGxlckRhdGFzZXR9IGZyb20gJ0BrZXBsZXIuZ2wvdGFibGUnO1xuaW1wb3J0IHR5cGUge0NvbG9yTWFwLCBTdGFjVHlwZXN9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBTVEFDT2JqZWN0ID0gU3RhY1R5cGVzLlNUQUNPYmplY3Q7XG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNJdGVtID0gU3RhY1R5cGVzLkNvbXBsZXRlU1RBQ0l0ZW07XG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNDb2xsZWN0aW9uID0gU3RhY1R5cGVzLkNvbXBsZXRlU1RBQ0NvbGxlY3Rpb247XG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNPYmplY3QgPSBTdGFjVHlwZXMuQ29tcGxldGVTVEFDT2JqZWN0O1xuXG50eXBlIERhdGFUeXBlT2ZUaGVCYW5kID0gU3RhY1R5cGVzLkRhdGFUeXBlT2ZUaGVCYW5kO1xuXG5leHBvcnQgdHlwZSBDb21wbGV0ZVNUQUNBc3NldExpbmtzID1cbiAgfCBDb21wbGV0ZVNUQUNJdGVtWydhc3NldHMnXVxuICB8IENvbXBsZXRlU1RBQ0NvbGxlY3Rpb25bJ2l0ZW1fYXNzZXRzJ107XG5cbmV4cG9ydCBlbnVtIEJhbmRDb21iaW5hdGlvbiB7XG4gIC8qKiBSZW5kZXIgYSBzaW5nbGUgcmFzdGVyIGJhbmQuICovXG4gIFNpbmdsZSA9ICdzaW5nbGUnLFxuXG4gIC8qKiBSZW5kZXIgdGhyZWUgYmFuZHMgdG9nZXRoZXIgb24gdGhlIEdQVS5cbiAgICogTm90ZSB0aGF0IHRoaXMgY291bGQgYmUgXCJ0cnVlIGNvbG9yXCIgaWYgdGhlIGZpcnN0IGJhbmQgaXMgcmVkLCB0aGUgc2Vjb25kIGlzIGdyZWVuLCBhbmQgdGhlXG4gICAqIHRoaXJkIGlzIGJsdWUuIEJ1dCBpdCBjb3VsZCBhbHNvIGJlIFwiZmFsc2UgY29sb3JcIiBpZiB0aGUgdGhyZWUgYmFuZHMgY2hvc2VuIGFyZSBub3QgUkdCLlxuICAgKi9cbiAgUmdiID0gJ3JnYicsXG5cbiAgLyoqIENhbGN1bGF0ZSB0aGUgTm9ybWFsaXplZCBEaWZmZXJlbmNlIFZlZ2V0YXRpb24gSW5kZXggKE5EVkkpIG9uIHR3byBiYW5kcy4gKi9cbiAgTm9ybWFsaXplZERpZmZlcmVuY2UgPSAnbm9ybWFsaXplZERpZmZlcmVuY2UnLFxuXG4gIC8qKiBDYWxjdWxhdGUgdGhlIEVWSSBvbiB0d28gYmFuZHMuICovXG4gIEVuaGFuY2VkVmVnZXRhdGlvbkluZGV4ID0gJ2VuaGFuY2VkVmVnZXRhdGlvbkluZGV4JyxcblxuICAvKiogQ2FsY3VsYXRlIFNBVkkgb24gdHdvIGJhbmRzLiAqL1xuICBTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXggPSAnc29pbEFkanVzdGVkVmVnZXRhdGlvbkluZGV4JyxcblxuICAvKiogQ2FsY3VsYXRlIE1TQVZJIG9uIHR3byBiYW5kcy4gKi9cbiAgTW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXggPSAnbW9kaWZpZWRTb2lsQWRqdXN0ZWRWZWdldGF0aW9uSW5kZXgnXG59XG5cbi8qKlxuICogSWRlbnRpZmllcnMgb2YgU1RBQyBhc3NldHMgdG8gbG9hZFxuICpcbiAqIFRoZXNlIGlkZW50aWZpZXJzIHNob3VsZCBtYXRjaCB0aGUga2V5cyBvZiB0aGUgU1RBQyBhc3NldHMgb2JqZWN0LiBSZWZlciB0b1xuICogaHR0cHM6Ly9naXRodWIuY29tL3JhZGlhbnRlYXJ0aC9zdGFjLXNwZWMvYmxvYi9tYXN0ZXIvaXRlbS1zcGVjL2l0ZW0tc3BlYy5tZCNhc3NldHNcbiAqL1xuZXhwb3J0IHR5cGUgQXNzZXRJZHMgPSBzdHJpbmdbXTtcblxuLyoqXG4gKiBJbmRleGVzIG9mIGJhbmRzIHdpdGhpbiBlYWNoIGFzc2V0IHRoYXQgc2hvdWxkIGJlIGxvYWRlZC5cbiAqXG4gKiBFYWNoIGFzc2V0IHJlZmVycyB0byBhIHNpbmdsZSBDbG91ZC1PcHRpbWl6ZWQgR2VvVElGRiBmaWxlIG9uIGRpc2suIEVhY2ggQ09HIGhhcyBhIHdpZHRoLCBoZWlnaHQsXG4gKiBhbmQgb25lIG9yIG1vcmUgYmFuZHMuXG4gKlxuICogVGhpcyBhcnJheSBvZiBpbmRleGVzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBsaXN0IG9mIEFzc2V0SWRzLiBUaGUgbnRoIGJhbmQgaW5kZXhcbiAqIGRlc2NyaWJlcyB0aGUgd2hpY2ggaW5kZXggZnJvbSB0aGUgbnRoIGFzc2V0IGlkIHRvIGxvYWQuXG4gKi9cbmV4cG9ydCB0eXBlIEJhbmRJbmRleGVzID0gbnVtYmVyW107XG5cbi8qKlxuICogQW4gYXJyYXkgb2YgaW50ZWdlcnMgcmVwcmVzZW50aW5nIGhvdyBiYW5kcyBzaG91bGQgYmUgcmVvcmRlcmVkIG9uIHRoZSBHUFUuIFRoaXMgYWxsb3dzIGZvclxuICogZmFzdGVyIGNoYW5naW5nIG9mIGJhbmRzIGZvciBzaW5nbGUtYXNzZXQgcmFzdGVyIGRhdGEsIHN1Y2ggYXMgTkFJUC4gV2lsbCBiZSBudWxsIGZvciBtdWx0aS1hc3NldFxuICogU1RBQyBpdGVtcy5cbiAqL1xuZXhwb3J0IHR5cGUgUmVuZGVyQmFuZEluZGV4ZXMgPSBCYW5kSW5kZXhlcyB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIEFzc2V0UmVxdWVzdEluZm8gPSB7XG4gIGxvYWRBc3NldElkczogQXNzZXRJZHM7XG4gIGxvYWRCYW5kSW5kZXhlczogQmFuZEluZGV4ZXM7XG4gIHJlbmRlckJhbmRJbmRleGVzOiBSZW5kZXJCYW5kSW5kZXhlcztcbn07XG5cbi8qKiBVc2VyLXByb3ZpZGVkIGluZm9ybWF0aW9uIGZvciBob3cgdG8gcmVuZGVyIGEgcHJlc2V0ICovXG5leHBvcnQgdHlwZSBQcmVzZXRPcHRpb24gPSB7XG4gIHNpbmdsZUJhbmQ/OiB7XG4gICAgYXNzZXRJZDogc3RyaW5nO1xuICAgIGJhbmRJbmRleD86IG51bWJlcjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIERhdGFTb3VyY2VQYXJhbXMgPSBBc3NldFJlcXVlc3RJbmZvICYge1xuICBtaW5ab29tOiBudW1iZXI7XG4gIG1heFpvb206IG51bWJlcjtcbiAgbWluUGl4ZWxWYWx1ZTogbnVtYmVyO1xuICBtYXhQaXhlbFZhbHVlOiBudW1iZXI7XG4gIG1pbkNhdGVnb3JpY2FsQmFuZFZhbHVlPzogbnVtYmVyO1xuICBtYXhDYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgZ2xvYmFsQm91bmRzOiBudW1iZXJbXSB8IG51bGw7XG4gIGRhdGFUeXBlOiBEYXRhVHlwZU9mVGhlQmFuZDtcbn07XG5cbmV4cG9ydCB0eXBlIENhdGVnb3JpY2FsQ29sb3JtYXBPcHRpb25zID0ge1xuICBjb2xvck1hcD86IENvbG9yTWFwO1xuICBtaW5WYWx1ZT86IG51bWJlcjtcbiAgbWF4VmFsdWU/OiBudW1iZXI7XG59O1xuXG5leHBvcnQgdHlwZSBFeHRlbmRlZEtlcGxlclNUQUMgPSB7XG4gIHJhc3RlclRpbGVTZXJ2ZXJVcmxzPzogW107XG4gIC8qKiBPcHRpb25hbCBwZXItbGF5ZXIgb3ZlcnJpZGUgZm9yIG1heCByZXRyaWVzIHdoZW4gZmV0Y2hpbmcgcmFzdGVyIGRhdGEgKi9cbiAgcmFzdGVyU2VydmVyTWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIHBlci1sYXllciBvdmVycmlkZSBmb3IgcmV0cnkgZGVsYXkgYmV0d2VlbiBhdHRlbXB0cyAobXMpICovXG4gIHJhc3RlclNlcnZlclJldHJ5RGVsYXk/OiBudW1iZXI7XG4gIC8qKiBPcHRpb25hbCBwZXItbGF5ZXIgb3ZlcnJpZGUgZm9yIHdoaWNoIHNlcnZlciBlcnJvcnMgYXJlIHJldHJpZWQgKi9cbiAgcmFzdGVyU2VydmVyU2VydmVyRXJyb3JzVG9SZXRyeT86IG51bWJlcltdO1xuICAvKiogT3B0aW9uYWwgcGVyLWxheWVyIG92ZXJyaWRlIGZvciBtYXggY29uY3VycmVudCByZXF1ZXN0cyBwZXIgc2VydmVyICovXG4gIHJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzPzogbnVtYmVyO1xufTtcblxuLyoqXG4gKiBDdXN0b20gZmllbGRzIHdlIHBhc3Mgb24gdG8gdGhlIGdldFRpbGVEYXRhIGNhbGxiYWNrXG4gKiBBbnl0aGluZyByZXF1aXJlZCB0byBrbm93IF93aGF0IGRhdGEgdG8gbG9hZF8gc2hvdWxkIGJlIHBhc3NlZCBpbiBoZXJlLlxuICovXG5leHBvcnQgdHlwZSBHZXRUaWxlRGF0YUN1c3RvbVByb3BzID0gUGljazxBc3NldFJlcXVlc3RJbmZvLCAnbG9hZEFzc2V0SWRzJyB8ICdsb2FkQmFuZEluZGV4ZXMnPiAmIHtcbiAgc3RhYzogQ29tcGxldGVTVEFDT2JqZWN0ICYgRXh0ZW5kZWRLZXBsZXJTVEFDO1xuICBjb2xvcm1hcElkOiBzdHJpbmc7XG4gIGNhdGVnb3JpY2FsQ29sb3JNYXA6IENvbG9yTWFwO1xuICBtaW5DYXRlZ29yaWNhbEJhbmRWYWx1ZT86IG51bWJlcjtcbiAgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWU/OiBudW1iZXI7XG5cbiAgLyoqIElmIHRydWUsIGZldGNoIHRlcnJhaW4gZGF0YSBhcyB3ZWxsIGFzIHRleHR1cmUgZGF0YS4gKi9cbiAgc2hvdWxkTG9hZFRlcnJhaW46IGJvb2xlYW47XG4gIGdsb2JhbEJvdW5kczogbnVtYmVyW10gfCBudWxsO1xuICB1c2VTVEFDU2VhcmNoaW5nOiBib29sZWFuO1xuICBzdGFjU2VhcmNoUHJvdmlkZXI6IHN0cmluZztcbiAgc3RhcnREYXRlOiBzdHJpbmc7XG4gIGVuZERhdGU6IHN0cmluZztcblxuICAvKiBTdHJpbmdpZmllZCBKU09OIHJlcHJlc2VudGluZyBhIFNUQUMgQVBJIFNlYXJjaCBRdWVyeSB0aGUgYmFja2VuZCBzaG91bGQgcmVxdWVzdCBmcm9tIGEgc2VydmVyLiAqL1xuICBfc3RhY1F1ZXJ5Pzogc3RyaW5nO1xufTtcblxuLyoqIFByb3BlcnRpZXMgcHJvdmlkZWQgdG8gZ2V0VGlsZURhdGEgYnkgdGhlIGRlY2suZ2wgVGlsZUxheWVyICovXG5leHBvcnQgaW50ZXJmYWNlIEdldFRpbGVEYXRhRGVmYXVsdFByb3BzIHtcbiAgaW5kZXg6IHt4OiBudW1iZXI7IHk6IG51bWJlcjsgejogbnVtYmVyfTtcbiAgdXJsPzogc3RyaW5nO1xuXG4gIC8qKiBCb3VuZGluZyBib3ggb2YgdGhlIGN1cnJlbnQgd2ViIG1lcmNhdG9yIHRpbGUuICovXG4gIGJib3g6IHt3ZXN0OiBudW1iZXI7IG5vcnRoOiBudW1iZXI7IGVhc3Q6IG51bWJlcjsgc291dGg6IG51bWJlcn07XG5cbiAgLyoqIEFib3J0U2lnbmFsIHVzZWQgZm9yIGNhbmNlbGxpbmcgcmVxdWVzdHMgKi9cbiAgc2lnbmFsOiBBYm9ydFNpZ25hbDtcbn1cblxuLyoqIFByb3BlcnRpZXMgcGFzc2VkIGludG8gdGhlIGRlY2suZ2wgVGlsZUxheWVyIGdldFRpbGVEYXRhIGNhbGxiYWNrICovXG5leHBvcnQgdHlwZSBHZXRUaWxlRGF0YVByb3BzID0gR2V0VGlsZURhdGFDdXN0b21Qcm9wcyAmIEdldFRpbGVEYXRhRGVmYXVsdFByb3BzO1xuXG5leHBvcnQgdHlwZSBHZXRUaWxlRGF0YU91dHB1dCA9IGFueSB8IG51bGw7XG5cbmV4cG9ydCB0eXBlIFJlbmRlclN1YkxheWVyc0N1c3RvbVByb3BzID0gQ29sb3JSZXNjYWxpbmcgJlxuICBQaWNrPEFzc2V0UmVxdWVzdEluZm8sICdyZW5kZXJCYW5kSW5kZXhlcyc+ICYge1xuICAgIG9wYWNpdHk6IG51bWJlcjtcbiAgICBsaW5lYXJSZXNjYWxpbmc6IGJvb2xlYW47XG4gICAgbGluZWFyUmVzY2FsaW5nRmFjdG9yOiBbbnVtYmVyLCBudW1iZXJdO1xuICAgIG5vbkxpbmVhclJlc2NhbGluZzogYm9vbGVhbjtcbiAgICBtaW5QaXhlbFZhbHVlOiBudW1iZXI7XG4gICAgbWF4UGl4ZWxWYWx1ZTogbnVtYmVyO1xuICAgIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uO1xuICAgIGZpbHRlckVuYWJsZWQ6IGJvb2xlYW47XG4gICAgZmlsdGVyUmFuZ2U6IFtudW1iZXIsIG51bWJlcl07XG4gICAgY3VycmVudFRpbWU6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogRGF0YVR5cGVPZlRoZUJhbmQ7XG4gICAgbWluQ2F0ZWdvcmljYWxCYW5kVmFsdWU/OiBudW1iZXI7XG4gICAgbWF4Q2F0ZWdvcmljYWxCYW5kVmFsdWU/OiBudW1iZXI7XG4gICAgaGFzQ2F0ZWdvcmljYWxDb2xvck1hcDogYm9vbGVhbjtcbiAgICBoYXNTaGFkb3dFZmZlY3Q/OiBib29sZWFuO1xuICB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlclN1YkxheWVyc0RlZmF1bHRQcm9wcyB7XG4gIGlkOiBzdHJpbmc7XG4gIHRpbGU6IF9UaWxlMkRIZWFkZXI8R2V0VGlsZURhdGFPdXRwdXQ+O1xuICBkYXRhOiBHZXRUaWxlRGF0YU91dHB1dDtcbn1cblxuZXhwb3J0IHR5cGUgUmVuZGVyU3ViTGF5ZXJzUHJvcHMgPSBSZW5kZXJTdWJMYXllcnNDdXN0b21Qcm9wcyAmIFJlbmRlclN1YkxheWVyc0RlZmF1bHRQcm9wcztcblxuLyoqIFJlcXVpcmVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byByZW5kZXIgZWFjaCBwcmVzZXQgKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJlc2V0RGF0YSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIGJhbmRDb21iaW5hdGlvbjogQmFuZENvbWJpbmF0aW9uO1xuICBjb21tb25OYW1lcz86IHN0cmluZ1tdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgaW5mb1VybD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xvclJlc2NhbGluZyB7XG4gIGdhbW1hQ29udHJhc3RGYWN0b3I6IG51bWJlcjtcbiAgc2lnbW9pZGFsQ29udHJhc3RGYWN0b3I6IG51bWJlcjtcbiAgc2lnbW9pZGFsQmlhc0ZhY3RvcjogbnVtYmVyO1xuICBzYXR1cmF0aW9uVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb25maWdPcHRpb24ge1xuICBsYWJlbDogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBDb2xvcm1hcEltYWdlRGF0YSA9IFRleHR1cmUyRFByb3BzO1xuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlRGF0YSB7XG4gIGltYWdlQmFuZHM6IFRleHR1cmUyRFByb3BzW10gfCBudWxsO1xuICBpbWFnZUNvbG9ybWFwPzogVGV4dHVyZTJEUHJvcHMgfCBudWxsO1xuICBpbWFnZU1hc2s/OiBUZXh0dXJlMkRQcm9wcyB8IG51bGw7XG4gIGltYWdlUGFuPzogVGV4dHVyZTJEUHJvcHMgfCBudWxsO1xuICBpbWFnZVJnYmE/OiBUZXh0dXJlMkRQcm9wcyB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIEFzc2V0UmVxdWVzdERhdGEgPSB7XG4gIHVybDogc3RyaW5nO1xuICByYXN0ZXJTZXJ2ZXJVcmw6IHN0cmluZztcbiAgb3B0aW9uczogUmVxdWVzdEluaXQ7XG4gIHVzZU1hc2s6IGJvb2xlYW47XG4gIC8qKiBQYXNzIHRoaXMgcHJvcGVydHkgdGhyb3VnaCB0aGUgcmVxdWVzdCB0byBwaWNrIHNwZWNpZmljIGJhbmRzIGZyb20gdGhlIHJlc3BvbnNlICovXG4gIHJlc3BvbnNlUmVxdWlyZWRCYW5kSW5kaWNlcz86IG51bWJlcltdIHwgbnVsbDtcbiAgLyoqIE9wdGlvbmFsIHBlci1yZXF1ZXN0IG92ZXJyaWRlIGZvciBtYXggcmV0cmllcyB3aGVuIGZldGNoaW5nIE5QWSBhcnJheXMgKi9cbiAgcmFzdGVyU2VydmVyTWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIHBlci1yZXF1ZXN0IG92ZXJyaWRlIGZvciByZXRyeSBkZWxheSBiZXR3ZWVuIGF0dGVtcHRzIChtcykgKi9cbiAgcmFzdGVyU2VydmVyUmV0cnlEZWxheT86IG51bWJlcjtcbiAgLyoqIE9wdGlvbmFsIHBlci1yZXF1ZXN0IG92ZXJyaWRlIGZvciB3aGljaCBzZXJ2ZXIgZXJyb3JzIGFyZSByZXRyaWVkICovXG4gIHJhc3RlclNlcnZlclNlcnZlckVycm9yc1RvUmV0cnk/OiBudW1iZXJbXTtcbiAgLyoqIE9wdGlvbmFsIHBlci1yZXF1ZXN0IG92ZXJyaWRlIGZvciBtYXggY29uY3VycmVudCByZXF1ZXN0cyBwZXIgc2VydmVyICovXG4gIHJhc3RlclNlcnZlck1heFBlclNlcnZlclJlcXVlc3RzPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTlBZTG9hZGVyRGF0YVR5cGVzID1cbiAgfCBVaW50OEFycmF5XG4gIHwgVWludDhDbGFtcGVkQXJyYXlcbiAgfCBJbnQ4QXJyYXlcbiAgfCBVaW50MTZBcnJheVxuICB8IEludDE2QXJyYXlcbiAgfCBVaW50MzJBcnJheVxuICB8IEludDMyQXJyYXlcbiAgfCBGbG9hdDMyQXJyYXlcbiAgfCBGbG9hdDY0QXJyYXk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTlBZTG9hZGVyUmVzcG9uc2Uge1xuICBkYXRhOiBOUFlMb2FkZXJEYXRhVHlwZXM7XG4gIGhlYWRlcjoge1xuICAgIGRlc2NyOiBzdHJpbmc7XG4gICAgc2hhcGU6IG51bWJlcltdO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRlcnJhaW5EYXRhIHtcbiAgaGVhZGVyOiB7XG4gICAgdmVydGV4Q291bnQ6IG51bWJlcjtcbiAgICBib3VuZGluZ0JveDogW1tudW1iZXIsIG51bWJlciwgbnVtYmVyXSwgW251bWJlciwgbnVtYmVyLCBudW1iZXJdXTtcbiAgfTtcbiAgbW9kZTogNDtcbiAgaW5kaWNlczoge1xuICAgIHZhbHVlOiBUeXBlZEFycmF5O1xuICAgIHNpemU6IDE7XG4gIH07XG4gIGF0dHJpYnV0ZXM6IHtcbiAgICBQT1NJVElPTjoge1xuICAgICAgdmFsdWU6IFR5cGVkQXJyYXk7XG4gICAgICBzaXplOiAzO1xuICAgIH07XG4gICAgVEVYQ09PUkRfMDoge1xuICAgICAgdmFsdWU6IFR5cGVkQXJyYXk7XG4gICAgICBzaXplOiAyO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIEtlcGxlclJhc3RlckRhdGFzZXQgPSBLZXBsZXJEYXRhc2V0ICYge1xuICBtZXRhZGF0YTogQ29tcGxldGVTVEFDT2JqZWN0O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUaWxlMkRIZWFkZXIge1xuICBjb250ZW50Pzoge1xuICAgIHRlcnJhaW4/OiBUZXJyYWluRGF0YTtcbiAgICBpbWFnZXM6IEdldFRpbGVEYXRhT3V0cHV0O1xuICB9IHwgbnVsbDtcbiAgZ2V0IGRhdGEoKTogR2V0VGlsZURhdGFPdXRwdXQ7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFBQSxJQW9CWUEsZUFBZSxHQUFBQyxPQUFBLENBQUFELGVBQUEsMEJBQWZBLGVBQWU7RUFBZkEsZUFBZTtFQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBZkEsZUFBZTtFQUFmQSxlQUFlO0VBQWZBLGVBQWU7RUFBQSxPQUFmQSxlQUFlO0FBQUE7QUF1QjNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQXFDQTtBQUNBO0FBQ0E7QUFDQTtBQW9CQTtBQVlBO0FBZ0NBIiwiaWdub3JlTGlzdCI6W119
@@ -8,7 +8,7 @@ export declare function getStacApiUrlParams(options: {
8
8
  loadAssetIds: AssetIds;
9
9
  _stacQuery?: string;
10
10
  }): URLSearchParams | null;
11
- export declare function bandIndexesToURLParams(urlParams: URLSearchParams, bandIndexes: BandIndexes): URLSearchParams;
11
+ export declare function bandIndexesToURLParams(urlParams: URLSearchParams, bandIndexes: BandIndexes, useNewFormat: boolean): URLSearchParams;
12
12
  export declare function getSingleCOGUrlParams(options: {
13
13
  stac: CompleteSTACItem;
14
14
  loadAssetId: string;
@@ -89,8 +89,8 @@ function getStacApiUrlParams(options) {
89
89
  query: query
90
90
  });
91
91
  }
92
- function bandIndexesToURLParams(urlParams, bandIndexes) {
93
- if ((0, _utils.getApplicationConfig)().rasterServerUseLatestTitiler) {
92
+ function bandIndexesToURLParams(urlParams, bandIndexes, useNewFormat) {
93
+ if (useNewFormat) {
94
94
  // for newer titiler versions
95
95
  bandIndexes.forEach(function (bandIndex) {
96
96
  urlParams.append('bidx', String(bandIndex + 1));
@@ -106,6 +106,7 @@ function bandIndexesToURLParams(urlParams, bandIndexes) {
106
106
  return urlParams;
107
107
  }
108
108
  function getSingleCOGUrlParams(options) {
109
+ var _stac$rasterServerUse;
109
110
  var stac = options.stac,
110
111
  loadAssetId = options.loadAssetId,
111
112
  loadBandIndexes = options.loadBandIndexes,
@@ -119,7 +120,7 @@ function getSingleCOGUrlParams(options) {
119
120
  return_mask: String(mask),
120
121
  url: url
121
122
  });
122
- return bandIndexesToURLParams(urlParams, loadBandIndexes);
123
+ return bandIndexesToURLParams(urlParams, loadBandIndexes, Boolean((_stac$rasterServerUse = stac.rasterServerUseLatestTitiler) !== null && _stac$rasterServerUse !== void 0 ? _stac$rasterServerUse : (0, _utils.getApplicationConfig)().rasterServerUseLatestTitiler));
123
124
  }
124
125
 
125
126
  /**
@@ -194,4 +195,4 @@ var RasterLayerResources = exports.RasterLayerResources = {
194
195
  return "".concat((0, _utils.getApplicationConfig)().cdnUrl, "/raster/colormaps/").concat(colormapId, ".png");
195
196
  }
196
197
  };
197
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX2NvbmZpZyIsIlRJTEVfU0laRSIsIlNUQUNfU0VBUkNIX0RBVEEiLCJzZW50aW5lbENvbGxlY3Rpb25OYW1lIiwic3RhY1NlYXJjaFVybCIsImNvbnN0cnVjdFN0YWNBcGlRdWVyeSIsIm9wdGlvbnMiLCJfU1RBQ19TRUFSQ0hfREFUQSRzdGEiLCJzdGFjIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsInN0YWNTZWFyY2hQcm92aWRlciIsImNvbGxlY3Rpb25zIiwiaWQiLCJkYXRldGltZSIsImNvbmNhdCIsImdldFN0YWNBcGlVcmwiLCJnZXRTdGFjQXBpVXJsUGFyYW1zIiwibG9hZEFzc2V0SWRzIiwiX29wdGlvbnMkbWFzayIsIm1hc2siLCJxdWVyeSIsIl9zdGFjUXVlcnkiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VhcmNoVXJsIiwiYmFuZEluZGV4QXNzZXRzIiwibWFwIiwiYXNzZXRJZCIsIm1hcHBpbmciLCJERUZBVUxUX0JBTkRfTUFQUElOR1MiLCJiYW5kSW5kZXgiLCJVUkxTZWFyY2hQYXJhbXMiLCJhc3NldHMiLCJqb2luIiwicmV0dXJuX21hc2siLCJTdHJpbmciLCJ1cmwiLCJiYW5kSW5kZXhlc1RvVVJMUGFyYW1zIiwidXJsUGFyYW1zIiwiYmFuZEluZGV4ZXMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsInJhc3RlclNlcnZlclVzZUxhdGVzdFRpdGlsZXIiLCJmb3JFYWNoIiwiYXBwZW5kIiwidmFsIiwiZ2V0U2luZ2xlQ09HVXJsUGFyYW1zIiwibG9hZEFzc2V0SWQiLCJsb2FkQmFuZEluZGV4ZXMiLCJfb3B0aW9ucyRtYXNrMiIsImhyZWYiLCJnZXRUaXRpbGVyVXJsIiwiX3N0YWMkcmFzdGVyVGlsZVNlcnZlIiwidXNlU1RBQ1NlYXJjaGluZyIsIngiLCJ5IiwieiIsInJhc3RlclRpbGVTZXJ2ZXJVcmxzIiwibGVuZ3RoIiwiRXJyb3IiLCJwYXRoU3RlbSIsImdldFRpdGlsZXJQYXRoTWFwcGluZyIsInNjYWxlIiwiZG9tYWluIiwiY2hvb3NlRG9tYWluIiwicmFzdGVyU2VydmVyVXJsIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiZG9tYWlucyIsImluZGV4IiwiTWF0aCIsImFicyIsImdldFRlcnJhaW5VcmwiLCJtZXNoTWF4RXJyb3IiLCJwYXJhbXMiLCJtZXNoX21heF9lcnJvciIsInRvRml4ZWQiLCJiYXNlVXJsIiwidG9TdHJpbmciLCJnZXRNZXNoTWF4RXJyb3IiLCJtdWx0aXBsaWVyIiwiUmFzdGVyTGF5ZXJSZXNvdXJjZXMiLCJleHBvcnRzIiwicmFzdGVyQ29sb3JNYXAiLCJjb2xvcm1hcElkIiwiY2RuVXJsIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jhc3Rlci10aWxlL3VybC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG4vKiBVdGlsaXRpZXMgZm9yIGNyZWF0aW5nIHJlcXVlc3QgdXJscyAqL1xuLyogZ2xvYmFsIFVSTFNlYXJjaFBhcmFtcyAqL1xuXG5pbXBvcnQge1N0YWNUeXBlc30gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2dldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtERUZBVUxUX0JBTkRfTUFQUElOR1N9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7XG4gIEFzc2V0SWRzLFxuICBCYW5kSW5kZXhlcyxcbiAgQ29tcGxldGVTVEFDSXRlbSxcbiAgQ29tcGxldGVTVEFDQ29sbGVjdGlvbixcbiAgR2V0VGlsZURhdGFQcm9wc1xufSBmcm9tICcuL3R5cGVzJztcblxudHlwZSBJdGVtID0gU3RhY1R5cGVzLlNUQUNJdGVtO1xudHlwZSBDb2xsZWN0aW9uID0gU3RhY1R5cGVzLlNUQUNDb2xsZWN0aW9uO1xuXG5jb25zdCBUSUxFX1NJWkU6IDI1NiB8IDUxMiA9IDI1NjtcblxuaW50ZXJmYWNlIFN0YWNTZWFyY2hJbmZvIHtcbiAgc2VudGluZWxDb2xsZWN0aW9uTmFtZTogc3RyaW5nW107XG4gIHN0YWNTZWFyY2hVcmw6IHN0cmluZztcbn1cblxuY29uc3QgU1RBQ19TRUFSQ0hfREFUQTogUmVjb3JkPHN0cmluZywgU3RhY1NlYXJjaEluZm8+ID0ge1xuICAvLyBDb21tZW50aW5nIG91dCBNaWNyb3NvZnQgZm9yIG5vd1xuICAvLyBtaWNyb3NvZnQ6IHtcbiAgLy8gICBzZW50aW5lbENvbGxlY3Rpb25OYW1lOiBbJ3NlbnRpbmVsLTItbDJhJ10sXG4gIC8vICAgc3RhY1NlYXJjaFVybDogJ2h0dHBzOi8vcGxhbmV0YXJ5Y29tcHV0ZXIubWljcm9zb2Z0LmNvbS9hcGkvc3RhYy92MS9zZWFyY2gnXG4gIC8vIH0sXG4gICdlYXJ0aC1zZWFyY2gnOiB7XG4gICAgc2VudGluZWxDb2xsZWN0aW9uTmFtZTogWydzZW50aW5lbC1zMi1sMmEtY29ncyddLFxuICAgIHN0YWNTZWFyY2hVcmw6ICdodHRwczovL2VhcnRoLXNlYXJjaC5hd3MuZWxlbWVudDg0LmNvbS92MC9zZWFyY2gnXG4gIH1cbn07XG5cbi8qKlxuICogQ29uc3RydWN0IHF1ZXJ5IHBhcmFtZXRlcnMgdG8gYmUgc2VudCB0byBTVEFDIEFQSSBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBjb25zdHJ1Y3RTdGFjQXBpUXVlcnkob3B0aW9uczoge1xuICBzdGFjOiBJdGVtIHwgQ29sbGVjdGlvbjtcbiAgc3RhcnREYXRlOiBzdHJpbmc7XG4gIGVuZERhdGU6IHN0cmluZztcbiAgc3RhY1NlYXJjaFByb3ZpZGVyOiBzdHJpbmc7XG59KToge2NvbGxlY3Rpb25zOiBzdHJpbmdbXTsgZGF0ZXRpbWU6IHN0cmluZ30ge1xuICBjb25zdCB7c3RhYywgc3RhcnREYXRlLCBlbmREYXRlLCBzdGFjU2VhcmNoUHJvdmlkZXJ9ID0gb3B0aW9ucztcblxuICAvLyBUaGlzIGlzIGEgcXVpY2sgaGFjayB0byBzdXBwb3J0IHRoZSBzYW1lIFNlbnRpbmVsIDIgU1RBQyBvYmplY3QgZm9yIHNlYXJjaGluZyBib3RoIG1pY3Jvc29mdFxuICAvLyBhbmQgQVdTXG4gIGNvbnN0IGNvbGxlY3Rpb25zID0gU1RBQ19TRUFSQ0hfREFUQVtzdGFjU2VhcmNoUHJvdmlkZXJdPy5zZW50aW5lbENvbGxlY3Rpb25OYW1lIHx8IFtzdGFjLmlkXTtcblxuICByZXR1cm4ge1xuICAgIGNvbGxlY3Rpb25zLFxuICAgIGRhdGV0aW1lOiBgJHtzdGFydERhdGV9VDAwOjAwOjAwWi8ke2VuZERhdGV9VDIzOjU5OjU5WmBcbiAgfTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtIGxvb2t1cCB0byBmaW5kIHVybCBvZiBkZXNpcmVkIFNUQUMgc2VhcmNoIHByb3ZpZGVyXG4gKi9cbmZ1bmN0aW9uIGdldFN0YWNBcGlVcmwoc3RhY1NlYXJjaFByb3ZpZGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gU1RBQ19TRUFSQ0hfREFUQVtzdGFjU2VhcmNoUHJvdmlkZXJdLnN0YWNTZWFyY2hVcmw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGFjQXBpVXJsUGFyYW1zKG9wdGlvbnM6IHtcbiAgc3RhYzogQ29tcGxldGVTVEFDQ29sbGVjdGlvbjtcbiAgc3RhY1NlYXJjaFByb3ZpZGVyOiBzdHJpbmc7XG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xuICBlbmREYXRlOiBzdHJpbmc7XG4gIG1hc2s/OiBib29sZWFuO1xuICBsb2FkQXNzZXRJZHM6IEFzc2V0SWRzO1xuICBfc3RhY1F1ZXJ5Pzogc3RyaW5nO1xufSk6IFVSTFNlYXJjaFBhcmFtcyB8IG51bGwge1xuICBjb25zdCB7c3RhYywgbG9hZEFzc2V0SWRzLCBzdGFjU2VhcmNoUHJvdmlkZXIsIG1hc2sgPSBmYWxzZX0gPSBvcHRpb25zO1xuICBjb25zdCBxdWVyeSA9IG9wdGlvbnMuX3N0YWNRdWVyeSB8fCBKU09OLnN0cmluZ2lmeShjb25zdHJ1Y3RTdGFjQXBpUXVlcnkob3B0aW9ucykpO1xuICBjb25zdCBzZWFyY2hVcmwgPSBnZXRTdGFjQXBpVXJsKHN0YWNTZWFyY2hQcm92aWRlcik7XG5cbiAgaWYgKCFzZWFyY2hVcmwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IGJhbmRJbmRleEFzc2V0cyA9IGxvYWRBc3NldElkcy5tYXAoYXNzZXRJZCA9PiB7XG4gICAgY29uc3QgbWFwcGluZyA9IERFRkFVTFRfQkFORF9NQVBQSU5HU1tzdGFjLmlkXTtcbiAgICBpZiAoIW1hcHBpbmcpIHtcbiAgICAgIC8vIFRPRE8gcHJvdmlkZSBhIFVJIHRvIHNldHVwIGN1c3RvbSBiYW5kIG1hcHBpbmdcbiAgICAgIHJldHVybiBhc3NldElkO1xuICAgIH1cblxuICAgIGNvbnN0IGJhbmRJbmRleCA9IG1hcHBpbmdbYXNzZXRJZF07XG4gICAgaWYgKGJhbmRJbmRleCkge1xuICAgICAgcmV0dXJuIGJhbmRJbmRleDtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIG1vc3QgbGlrZWx5IGluY29ycmVjdCBhcyBCWFggaXMgZXhwZWN0ZWQsIG5vdCBjb21tb24gbmFtZVxuICAgIHJldHVybiBhc3NldElkO1xuICB9KTtcblxuICByZXR1cm4gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgYXNzZXRzOiBiYW5kSW5kZXhBc3NldHMuam9pbignLCcpLFxuICAgIHJldHVybl9tYXNrOiBTdHJpbmcobWFzayksXG4gICAgdXJsOiBzZWFyY2hVcmwsXG4gICAgcXVlcnlcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYW5kSW5kZXhlc1RvVVJMUGFyYW1zKFxuICB1cmxQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyxcbiAgYmFuZEluZGV4ZXM6IEJhbmRJbmRleGVzXG4pOiBVUkxTZWFyY2hQYXJhbXMge1xuICBpZiAoZ2V0QXBwbGljYXRpb25Db25maWcoKS5yYXN0ZXJTZXJ2ZXJVc2VMYXRlc3RUaXRpbGVyKSB7XG4gICAgLy8gZm9yIG5ld2VyIHRpdGlsZXIgdmVyc2lvbnNcbiAgICBiYW5kSW5kZXhlcy5mb3JFYWNoKGJhbmRJbmRleCA9PiB7XG4gICAgICB1cmxQYXJhbXMuYXBwZW5kKCdiaWR4JywgU3RyaW5nKGJhbmRJbmRleCArIDEpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgcGFyYW1ldGVyIGluIHRpdGlsZXIgaXMgYGJhbmRzYCBmb3IgbGFuZHNhdC9zZW50aW5lbCBhbmQgYGJpZHhgIGZvciBDT0dcbiAgICAvLyBHREFML1Jhc3RlcmlvL3Jpby10aWxlciBzdGFydCBiYW5kIGluZGV4aW5nIGF0IG9uZVxuICAgIC8vIG9sZGVyIHRpdGlsZXIgdmVyc2lvbnNcbiAgICB1cmxQYXJhbXMuYXBwZW5kKCdiaWR4JywgYmFuZEluZGV4ZXMubWFwKHZhbCA9PiB2YWwgKyAxKS5qb2luKCcsJykpO1xuICB9XG5cbiAgcmV0dXJuIHVybFBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpbmdsZUNPR1VybFBhcmFtcyhvcHRpb25zOiB7XG4gIHN0YWM6IENvbXBsZXRlU1RBQ0l0ZW07XG4gIGxvYWRBc3NldElkOiBzdHJpbmc7XG4gIGxvYWRCYW5kSW5kZXhlczogQmFuZEluZGV4ZXM7XG4gIG1hc2s/OiBib29sZWFuO1xufSk6IFVSTFNlYXJjaFBhcmFtcyB8IG51bGwge1xuICBjb25zdCB7c3RhYywgbG9hZEFzc2V0SWQsIGxvYWRCYW5kSW5kZXhlcywgbWFzayA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHVybCA9IHN0YWMuYXNzZXRzW2xvYWRBc3NldElkXS5ocmVmO1xuXG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICByZXR1cm5fbWFzazogU3RyaW5nKG1hc2spLFxuICAgIHVybFxuICB9KTtcbiAgcmV0dXJuIGJhbmRJbmRleGVzVG9VUkxQYXJhbXModXJsUGFyYW1zLCBsb2FkQmFuZEluZGV4ZXMpO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdCBmdWxsIFVSTCB0byBsb2FkIHRpbGUgZnJvbSBhIFRpdGlsZXItYmFzZWQgYmFja2VuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGl0aWxlclVybChvcHRpb25zOiB7XG4gIHN0YWM6IEdldFRpbGVEYXRhUHJvcHNbJ3N0YWMnXTtcbiAgdXNlU1RBQ1NlYXJjaGluZzogYm9vbGVhbjtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG4gIHo6IG51bWJlcjtcbn0pOiB7dXJsOiBzdHJpbmc7IHJhc3RlclNlcnZlclVybDogc3RyaW5nfSB7XG4gIC8vIG1hc2sgU2V0IHRvIGZhbHNlIGZvciBtb3NhaWNzIGJlY2F1c2UgZW50aXJlIGltYWdlIGlzIGFzc3VtZWQgdG8gYmUgdmFsaWRcbiAgY29uc3Qge3N0YWMsIHVzZVNUQUNTZWFyY2hpbmcsIHgsIHksIHp9ID0gb3B0aW9ucztcblxuICBpZiAoIXN0YWMucmFzdGVyVGlsZVNlcnZlclVybHM/Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmFzdGVyIHRpbGUgc2VydmVycycpO1xuICB9XG5cbiAgY29uc3QgcGF0aFN0ZW0gPSBnZXRUaXRpbGVyUGF0aE1hcHBpbmcoc3RhYywgdXNlU1RBQ1NlYXJjaGluZyk7XG4gIGNvbnN0IHNjYWxlID0gVElMRV9TSVpFID09PSA1MTIgPyAnQDJ4JyA6ICcnO1xuICBjb25zdCBkb21haW4gPSBjaG9vc2VEb21haW4oc3RhYy5yYXN0ZXJUaWxlU2VydmVyVXJscywgeCwgeSk7XG4gIHJldHVybiB7XG4gICAgdXJsOiBgJHtkb21haW59LyR7cGF0aFN0ZW19L3RpbGVzL1dlYk1lcmNhdG9yUXVhZC8ke3p9LyR7eH0vJHt5fSR7c2NhbGV9Lm5weWAsXG4gICAgcmFzdGVyU2VydmVyVXJsOiBkb21haW5cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpdGlsZXJQYXRoTWFwcGluZyhcbiAgc3RhYzogR2V0VGlsZURhdGFQcm9wc1snc3RhYyddLFxuICB1c2VTVEFDU2VhcmNoaW5nID0gZmFsc2Vcbik6IHN0cmluZyB7XG4gIGlmICh1c2VTVEFDU2VhcmNoaW5nKSB7XG4gICAgcmV0dXJuICdzdGFjL21vc2FpYyc7XG4gIH1cblxuICByZXR1cm4gJ2NvZyc7XG59XG5cbi8qKlxuICogQ2hvb3NlIGZyb20gYXZhaWxhYmxlIGRvbWFpbnMgdG8gbG9hZCBpbWFnZXMgZnJvbVxuICpcbiAqIEBwYXJhbSB4ICB4IHRpbGUgaW5kZXhcbiAqIEBwYXJhbSB5ICB5IHRpbGUgaW5kZXhcbiAqXG4gKiBAcmV0dXJuIGRvbWFpblxuICovXG5mdW5jdGlvbiBjaG9vc2VEb21haW4oZG9tYWluczogc3RyaW5nW10sIHg6IG51bWJlciwgeTogbnVtYmVyKTogc3RyaW5nIHtcbiAgY29uc3QgaW5kZXggPSBNYXRoLmFicyh4ICsgeSkgJSBkb21haW5zLmxlbmd0aDtcbiAgcmV0dXJuIGRvbWFpbnNbaW5kZXhdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGVycmFpblVybChcbiAgcmFzdGVyVGlsZVNlcnZlclVybHM6IHN0cmluZ1tdLFxuICB4OiBudW1iZXIsXG4gIHk6IG51bWJlcixcbiAgejogbnVtYmVyLFxuICBtZXNoTWF4RXJyb3I6IG51bWJlclxuKToge3VybDogc3RyaW5nOyByYXN0ZXJTZXJ2ZXJVcmw6IHN0cmluZ30ge1xuICBjb25zdCBzY2FsZSA9IFRJTEVfU0laRSA9PT0gNTEyID8gJ0AyeCcgOiAnJztcblxuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICB1cmw6ICd0ZXJyYXJpdW0nLFxuICAgIG1lc2hfbWF4X2Vycm9yOiBtZXNoTWF4RXJyb3IudG9GaXhlZCgyKVxuICB9KTtcbiAgY29uc3QgZG9tYWluID0gY2hvb3NlRG9tYWluKHJhc3RlclRpbGVTZXJ2ZXJVcmxzLCB4LCB5KTtcbiAgY29uc3QgYmFzZVVybCA9IGAke2RvbWFpbn0vbWVzaC90aWxlcy8ke3p9LyR7eH0vJHt5fSR7c2NhbGV9LnRlcnJhaW4/YDtcbiAgcmV0dXJuIHt1cmw6IGJhc2VVcmwgKyBwYXJhbXMudG9TdHJpbmcoKSwgcmFzdGVyU2VydmVyVXJsOiBkb21haW59O1xufVxuXG4vKipcbiAqIGdldCBtZXNoIG1heCBlcnJvciBmb3IgeiB2YWx1ZVxuICogQHBhcmFtIHogbWVyY2F0b3IgdGlsZSB6IGNvb3JkXG4gKiBAcGFyYW0gbXVsdGlwbGllciBtdWx0aXBsZXIgYXBwbGllZCB0byBkZWZhdWx0IGVycm9yXG4gKlxuICogVXNlcyBzdWdnZXN0aW9uIGZyb20gaGVyZVxuICogaHR0cHM6Ly93d3cubGlua2VkaW4uY29tL3B1bHNlL2Zhc3QtY2VzaXVtLXRlcnJhaW4tcmVuZGVyaW5nLW5ldy1xdWFudGl6ZWQtbWVzaC1vdXRwdXQtYWx2YXJvLWh1YXJ0ZS9cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lc2hNYXhFcnJvcih6OiBudW1iZXIsIG11bHRpcGxpZXI6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiAoNzcwNjcuMzQgLyAoMSA8PCB6KSkgKiBtdWx0aXBsaWVyO1xufVxuXG5leHBvcnQgY29uc3QgUmFzdGVyTGF5ZXJSZXNvdXJjZXMgPSB7XG4gIHJhc3RlckNvbG9yTWFwOiAoY29sb3JtYXBJZDogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIGAke2dldEFwcGxpY2F0aW9uQ29uZmlnKCkuY2RuVXJsfS9yYXN0ZXIvY29sb3JtYXBzLyR7Y29sb3JtYXBJZH0ucG5nYDtcbiAgfVxufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQU9BLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQVRBO0FBQ0E7O0FBRUE7QUFDQTs7QUFpQkEsSUFBTUUsU0FBb0IsR0FBRyxHQUFHO0FBT2hDLElBQU1DLGdCQUFnRCxHQUFHO0VBQ3ZEO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxjQUFjLEVBQUU7SUFDZEMsc0JBQXNCLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztJQUNoREMsYUFBYSxFQUFFO0VBQ2pC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
198
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX2NvbmZpZyIsIlRJTEVfU0laRSIsIlNUQUNfU0VBUkNIX0RBVEEiLCJzZW50aW5lbENvbGxlY3Rpb25OYW1lIiwic3RhY1NlYXJjaFVybCIsImNvbnN0cnVjdFN0YWNBcGlRdWVyeSIsIm9wdGlvbnMiLCJfU1RBQ19TRUFSQ0hfREFUQSRzdGEiLCJzdGFjIiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsInN0YWNTZWFyY2hQcm92aWRlciIsImNvbGxlY3Rpb25zIiwiaWQiLCJkYXRldGltZSIsImNvbmNhdCIsImdldFN0YWNBcGlVcmwiLCJnZXRTdGFjQXBpVXJsUGFyYW1zIiwibG9hZEFzc2V0SWRzIiwiX29wdGlvbnMkbWFzayIsIm1hc2siLCJxdWVyeSIsIl9zdGFjUXVlcnkiLCJKU09OIiwic3RyaW5naWZ5Iiwic2VhcmNoVXJsIiwiYmFuZEluZGV4QXNzZXRzIiwibWFwIiwiYXNzZXRJZCIsIm1hcHBpbmciLCJERUZBVUxUX0JBTkRfTUFQUElOR1MiLCJiYW5kSW5kZXgiLCJVUkxTZWFyY2hQYXJhbXMiLCJhc3NldHMiLCJqb2luIiwicmV0dXJuX21hc2siLCJTdHJpbmciLCJ1cmwiLCJiYW5kSW5kZXhlc1RvVVJMUGFyYW1zIiwidXJsUGFyYW1zIiwiYmFuZEluZGV4ZXMiLCJ1c2VOZXdGb3JtYXQiLCJmb3JFYWNoIiwiYXBwZW5kIiwidmFsIiwiZ2V0U2luZ2xlQ09HVXJsUGFyYW1zIiwiX3N0YWMkcmFzdGVyU2VydmVyVXNlIiwibG9hZEFzc2V0SWQiLCJsb2FkQmFuZEluZGV4ZXMiLCJfb3B0aW9ucyRtYXNrMiIsImhyZWYiLCJCb29sZWFuIiwicmFzdGVyU2VydmVyVXNlTGF0ZXN0VGl0aWxlciIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZ2V0VGl0aWxlclVybCIsIl9zdGFjJHJhc3RlclRpbGVTZXJ2ZSIsInVzZVNUQUNTZWFyY2hpbmciLCJ4IiwieSIsInoiLCJyYXN0ZXJUaWxlU2VydmVyVXJscyIsImxlbmd0aCIsIkVycm9yIiwicGF0aFN0ZW0iLCJnZXRUaXRpbGVyUGF0aE1hcHBpbmciLCJzY2FsZSIsImRvbWFpbiIsImNob29zZURvbWFpbiIsInJhc3RlclNlcnZlclVybCIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImRvbWFpbnMiLCJpbmRleCIsIk1hdGgiLCJhYnMiLCJnZXRUZXJyYWluVXJsIiwibWVzaE1heEVycm9yIiwicGFyYW1zIiwibWVzaF9tYXhfZXJyb3IiLCJ0b0ZpeGVkIiwiYmFzZVVybCIsInRvU3RyaW5nIiwiZ2V0TWVzaE1heEVycm9yIiwibXVsdGlwbGllciIsIlJhc3RlckxheWVyUmVzb3VyY2VzIiwiZXhwb3J0cyIsInJhc3RlckNvbG9yTWFwIiwiY29sb3JtYXBJZCIsImNkblVybCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yYXN0ZXItdGlsZS91cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuLyogVXRpbGl0aWVzIGZvciBjcmVhdGluZyByZXF1ZXN0IHVybHMgKi9cbi8qIGdsb2JhbCBVUkxTZWFyY2hQYXJhbXMgKi9cblxuaW1wb3J0IHtTdGFjVHlwZXN9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7REVGQVVMVF9CQU5EX01BUFBJTkdTfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBBc3NldElkcyxcbiAgQmFuZEluZGV4ZXMsXG4gIENvbXBsZXRlU1RBQ0l0ZW0sXG4gIENvbXBsZXRlU1RBQ0NvbGxlY3Rpb24sXG4gIEdldFRpbGVEYXRhUHJvcHNcbn0gZnJvbSAnLi90eXBlcyc7XG5cbnR5cGUgSXRlbSA9IFN0YWNUeXBlcy5TVEFDSXRlbTtcbnR5cGUgQ29sbGVjdGlvbiA9IFN0YWNUeXBlcy5TVEFDQ29sbGVjdGlvbjtcblxuY29uc3QgVElMRV9TSVpFOiAyNTYgfCA1MTIgPSAyNTY7XG5cbmludGVyZmFjZSBTdGFjU2VhcmNoSW5mbyB7XG4gIHNlbnRpbmVsQ29sbGVjdGlvbk5hbWU6IHN0cmluZ1tdO1xuICBzdGFjU2VhcmNoVXJsOiBzdHJpbmc7XG59XG5cbmNvbnN0IFNUQUNfU0VBUkNIX0RBVEE6IFJlY29yZDxzdHJpbmcsIFN0YWNTZWFyY2hJbmZvPiA9IHtcbiAgLy8gQ29tbWVudGluZyBvdXQgTWljcm9zb2Z0IGZvciBub3dcbiAgLy8gbWljcm9zb2Z0OiB7XG4gIC8vICAgc2VudGluZWxDb2xsZWN0aW9uTmFtZTogWydzZW50aW5lbC0yLWwyYSddLFxuICAvLyAgIHN0YWNTZWFyY2hVcmw6ICdodHRwczovL3BsYW5ldGFyeWNvbXB1dGVyLm1pY3Jvc29mdC5jb20vYXBpL3N0YWMvdjEvc2VhcmNoJ1xuICAvLyB9LFxuICAnZWFydGgtc2VhcmNoJzoge1xuICAgIHNlbnRpbmVsQ29sbGVjdGlvbk5hbWU6IFsnc2VudGluZWwtczItbDJhLWNvZ3MnXSxcbiAgICBzdGFjU2VhcmNoVXJsOiAnaHR0cHM6Ly9lYXJ0aC1zZWFyY2guYXdzLmVsZW1lbnQ4NC5jb20vdjAvc2VhcmNoJ1xuICB9XG59O1xuXG4vKipcbiAqIENvbnN0cnVjdCBxdWVyeSBwYXJhbWV0ZXJzIHRvIGJlIHNlbnQgdG8gU1RBQyBBUEkgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gY29uc3RydWN0U3RhY0FwaVF1ZXJ5KG9wdGlvbnM6IHtcbiAgc3RhYzogSXRlbSB8IENvbGxlY3Rpb247XG4gIHN0YXJ0RGF0ZTogc3RyaW5nO1xuICBlbmREYXRlOiBzdHJpbmc7XG4gIHN0YWNTZWFyY2hQcm92aWRlcjogc3RyaW5nO1xufSk6IHtjb2xsZWN0aW9uczogc3RyaW5nW107IGRhdGV0aW1lOiBzdHJpbmd9IHtcbiAgY29uc3Qge3N0YWMsIHN0YXJ0RGF0ZSwgZW5kRGF0ZSwgc3RhY1NlYXJjaFByb3ZpZGVyfSA9IG9wdGlvbnM7XG5cbiAgLy8gVGhpcyBpcyBhIHF1aWNrIGhhY2sgdG8gc3VwcG9ydCB0aGUgc2FtZSBTZW50aW5lbCAyIFNUQUMgb2JqZWN0IGZvciBzZWFyY2hpbmcgYm90aCBtaWNyb3NvZnRcbiAgLy8gYW5kIEFXU1xuICBjb25zdCBjb2xsZWN0aW9ucyA9IFNUQUNfU0VBUkNIX0RBVEFbc3RhY1NlYXJjaFByb3ZpZGVyXT8uc2VudGluZWxDb2xsZWN0aW9uTmFtZSB8fCBbc3RhYy5pZF07XG5cbiAgcmV0dXJuIHtcbiAgICBjb2xsZWN0aW9ucyxcbiAgICBkYXRldGltZTogYCR7c3RhcnREYXRlfVQwMDowMDowMFovJHtlbmREYXRlfVQyMzo1OTo1OVpgXG4gIH07XG59XG5cbi8qKlxuICogUGVyZm9ybSBsb29rdXAgdG8gZmluZCB1cmwgb2YgZGVzaXJlZCBTVEFDIHNlYXJjaCBwcm92aWRlclxuICovXG5mdW5jdGlvbiBnZXRTdGFjQXBpVXJsKHN0YWNTZWFyY2hQcm92aWRlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIFNUQUNfU0VBUkNIX0RBVEFbc3RhY1NlYXJjaFByb3ZpZGVyXS5zdGFjU2VhcmNoVXJsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RhY0FwaVVybFBhcmFtcyhvcHRpb25zOiB7XG4gIHN0YWM6IENvbXBsZXRlU1RBQ0NvbGxlY3Rpb247XG4gIHN0YWNTZWFyY2hQcm92aWRlcjogc3RyaW5nO1xuICBzdGFydERhdGU6IHN0cmluZztcbiAgZW5kRGF0ZTogc3RyaW5nO1xuICBtYXNrPzogYm9vbGVhbjtcbiAgbG9hZEFzc2V0SWRzOiBBc3NldElkcztcbiAgX3N0YWNRdWVyeT86IHN0cmluZztcbn0pOiBVUkxTZWFyY2hQYXJhbXMgfCBudWxsIHtcbiAgY29uc3Qge3N0YWMsIGxvYWRBc3NldElkcywgc3RhY1NlYXJjaFByb3ZpZGVyLCBtYXNrID0gZmFsc2V9ID0gb3B0aW9ucztcbiAgY29uc3QgcXVlcnkgPSBvcHRpb25zLl9zdGFjUXVlcnkgfHwgSlNPTi5zdHJpbmdpZnkoY29uc3RydWN0U3RhY0FwaVF1ZXJ5KG9wdGlvbnMpKTtcbiAgY29uc3Qgc2VhcmNoVXJsID0gZ2V0U3RhY0FwaVVybChzdGFjU2VhcmNoUHJvdmlkZXIpO1xuXG4gIGlmICghc2VhcmNoVXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBiYW5kSW5kZXhBc3NldHMgPSBsb2FkQXNzZXRJZHMubWFwKGFzc2V0SWQgPT4ge1xuICAgIGNvbnN0IG1hcHBpbmcgPSBERUZBVUxUX0JBTkRfTUFQUElOR1Nbc3RhYy5pZF07XG4gICAgaWYgKCFtYXBwaW5nKSB7XG4gICAgICAvLyBUT0RPIHByb3ZpZGUgYSBVSSB0byBzZXR1cCBjdXN0b20gYmFuZCBtYXBwaW5nXG4gICAgICByZXR1cm4gYXNzZXRJZDtcbiAgICB9XG5cbiAgICBjb25zdCBiYW5kSW5kZXggPSBtYXBwaW5nW2Fzc2V0SWRdO1xuICAgIGlmIChiYW5kSW5kZXgpIHtcbiAgICAgIHJldHVybiBiYW5kSW5kZXg7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBtb3N0IGxpa2VseSBpbmNvcnJlY3QgYXMgQlhYIGlzIGV4cGVjdGVkLCBub3QgY29tbW9uIG5hbWVcbiAgICByZXR1cm4gYXNzZXRJZDtcbiAgfSk7XG5cbiAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGFzc2V0czogYmFuZEluZGV4QXNzZXRzLmpvaW4oJywnKSxcbiAgICByZXR1cm5fbWFzazogU3RyaW5nKG1hc2spLFxuICAgIHVybDogc2VhcmNoVXJsLFxuICAgIHF1ZXJ5XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFuZEluZGV4ZXNUb1VSTFBhcmFtcyhcbiAgdXJsUGFyYW1zOiBVUkxTZWFyY2hQYXJhbXMsXG4gIGJhbmRJbmRleGVzOiBCYW5kSW5kZXhlcyxcbiAgdXNlTmV3Rm9ybWF0OiBib29sZWFuXG4pOiBVUkxTZWFyY2hQYXJhbXMge1xuICBpZiAodXNlTmV3Rm9ybWF0KSB7XG4gICAgLy8gZm9yIG5ld2VyIHRpdGlsZXIgdmVyc2lvbnNcbiAgICBiYW5kSW5kZXhlcy5mb3JFYWNoKGJhbmRJbmRleCA9PiB7XG4gICAgICB1cmxQYXJhbXMuYXBwZW5kKCdiaWR4JywgU3RyaW5nKGJhbmRJbmRleCArIDEpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBUaGUgcGFyYW1ldGVyIGluIHRpdGlsZXIgaXMgYGJhbmRzYCBmb3IgbGFuZHNhdC9zZW50aW5lbCBhbmQgYGJpZHhgIGZvciBDT0dcbiAgICAvLyBHREFML1Jhc3RlcmlvL3Jpby10aWxlciBzdGFydCBiYW5kIGluZGV4aW5nIGF0IG9uZVxuICAgIC8vIG9sZGVyIHRpdGlsZXIgdmVyc2lvbnNcbiAgICB1cmxQYXJhbXMuYXBwZW5kKCdiaWR4JywgYmFuZEluZGV4ZXMubWFwKHZhbCA9PiB2YWwgKyAxKS5qb2luKCcsJykpO1xuICB9XG5cbiAgcmV0dXJuIHVybFBhcmFtcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpbmdsZUNPR1VybFBhcmFtcyhvcHRpb25zOiB7XG4gIHN0YWM6IENvbXBsZXRlU1RBQ0l0ZW07XG4gIGxvYWRBc3NldElkOiBzdHJpbmc7XG4gIGxvYWRCYW5kSW5kZXhlczogQmFuZEluZGV4ZXM7XG4gIG1hc2s/OiBib29sZWFuO1xufSk6IFVSTFNlYXJjaFBhcmFtcyB8IG51bGwge1xuICBjb25zdCB7c3RhYywgbG9hZEFzc2V0SWQsIGxvYWRCYW5kSW5kZXhlcywgbWFzayA9IGZhbHNlfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHVybCA9IHN0YWMuYXNzZXRzW2xvYWRBc3NldElkXS5ocmVmO1xuXG4gIGlmICghdXJsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICByZXR1cm5fbWFzazogU3RyaW5nKG1hc2spLFxuICAgIHVybFxuICB9KTtcbiAgcmV0dXJuIGJhbmRJbmRleGVzVG9VUkxQYXJhbXMoXG4gICAgdXJsUGFyYW1zLFxuICAgIGxvYWRCYW5kSW5kZXhlcyxcbiAgICBCb29sZWFuKFxuICAgICAgc3RhYy5yYXN0ZXJTZXJ2ZXJVc2VMYXRlc3RUaXRpbGVyID8/IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkucmFzdGVyU2VydmVyVXNlTGF0ZXN0VGl0aWxlclxuICAgIClcbiAgKTtcbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3QgZnVsbCBVUkwgdG8gbG9hZCB0aWxlIGZyb20gYSBUaXRpbGVyLWJhc2VkIGJhY2tlbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRpdGlsZXJVcmwob3B0aW9uczoge1xuICBzdGFjOiBHZXRUaWxlRGF0YVByb3BzWydzdGFjJ107XG4gIHVzZVNUQUNTZWFyY2hpbmc6IGJvb2xlYW47XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICB6OiBudW1iZXI7XG59KToge3VybDogc3RyaW5nOyByYXN0ZXJTZXJ2ZXJVcmw6IHN0cmluZ30ge1xuICAvLyBtYXNrIFNldCB0byBmYWxzZSBmb3IgbW9zYWljcyBiZWNhdXNlIGVudGlyZSBpbWFnZSBpcyBhc3N1bWVkIHRvIGJlIHZhbGlkXG4gIGNvbnN0IHtzdGFjLCB1c2VTVEFDU2VhcmNoaW5nLCB4LCB5LCB6fSA9IG9wdGlvbnM7XG5cbiAgaWYgKCFzdGFjLnJhc3RlclRpbGVTZXJ2ZXJVcmxzPy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJhc3RlciB0aWxlIHNlcnZlcnMnKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGhTdGVtID0gZ2V0VGl0aWxlclBhdGhNYXBwaW5nKHN0YWMsIHVzZVNUQUNTZWFyY2hpbmcpO1xuICBjb25zdCBzY2FsZSA9IFRJTEVfU0laRSA9PT0gNTEyID8gJ0AyeCcgOiAnJztcbiAgY29uc3QgZG9tYWluID0gY2hvb3NlRG9tYWluKHN0YWMucmFzdGVyVGlsZVNlcnZlclVybHMsIHgsIHkpO1xuICByZXR1cm4ge1xuICAgIHVybDogYCR7ZG9tYWlufS8ke3BhdGhTdGVtfS90aWxlcy9XZWJNZXJjYXRvclF1YWQvJHt6fS8ke3h9LyR7eX0ke3NjYWxlfS5ucHlgLFxuICAgIHJhc3RlclNlcnZlclVybDogZG9tYWluXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaXRpbGVyUGF0aE1hcHBpbmcoXG4gIHN0YWM6IEdldFRpbGVEYXRhUHJvcHNbJ3N0YWMnXSxcbiAgdXNlU1RBQ1NlYXJjaGluZyA9IGZhbHNlXG4pOiBzdHJpbmcge1xuICBpZiAodXNlU1RBQ1NlYXJjaGluZykge1xuICAgIHJldHVybiAnc3RhYy9tb3NhaWMnO1xuICB9XG5cbiAgcmV0dXJuICdjb2cnO1xufVxuXG4vKipcbiAqIENob29zZSBmcm9tIGF2YWlsYWJsZSBkb21haW5zIHRvIGxvYWQgaW1hZ2VzIGZyb21cbiAqXG4gKiBAcGFyYW0geCAgeCB0aWxlIGluZGV4XG4gKiBAcGFyYW0geSAgeSB0aWxlIGluZGV4XG4gKlxuICogQHJldHVybiBkb21haW5cbiAqL1xuZnVuY3Rpb24gY2hvb3NlRG9tYWluKGRvbWFpbnM6IHN0cmluZ1tdLCB4OiBudW1iZXIsIHk6IG51bWJlcik6IHN0cmluZyB7XG4gIGNvbnN0IGluZGV4ID0gTWF0aC5hYnMoeCArIHkpICUgZG9tYWlucy5sZW5ndGg7XG4gIHJldHVybiBkb21haW5zW2luZGV4XTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcnJhaW5VcmwoXG4gIHJhc3RlclRpbGVTZXJ2ZXJVcmxzOiBzdHJpbmdbXSxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHo6IG51bWJlcixcbiAgbWVzaE1heEVycm9yOiBudW1iZXJcbik6IHt1cmw6IHN0cmluZzsgcmFzdGVyU2VydmVyVXJsOiBzdHJpbmd9IHtcbiAgY29uc3Qgc2NhbGUgPSBUSUxFX1NJWkUgPT09IDUxMiA/ICdAMngnIDogJyc7XG5cbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgdXJsOiAndGVycmFyaXVtJyxcbiAgICBtZXNoX21heF9lcnJvcjogbWVzaE1heEVycm9yLnRvRml4ZWQoMilcbiAgfSk7XG4gIGNvbnN0IGRvbWFpbiA9IGNob29zZURvbWFpbihyYXN0ZXJUaWxlU2VydmVyVXJscywgeCwgeSk7XG4gIGNvbnN0IGJhc2VVcmwgPSBgJHtkb21haW59L21lc2gvdGlsZXMvJHt6fS8ke3h9LyR7eX0ke3NjYWxlfS50ZXJyYWluP2A7XG4gIHJldHVybiB7dXJsOiBiYXNlVXJsICsgcGFyYW1zLnRvU3RyaW5nKCksIHJhc3RlclNlcnZlclVybDogZG9tYWlufTtcbn1cblxuLyoqXG4gKiBnZXQgbWVzaCBtYXggZXJyb3IgZm9yIHogdmFsdWVcbiAqIEBwYXJhbSB6IG1lcmNhdG9yIHRpbGUgeiBjb29yZFxuICogQHBhcmFtIG11bHRpcGxpZXIgbXVsdGlwbGVyIGFwcGxpZWQgdG8gZGVmYXVsdCBlcnJvclxuICpcbiAqIFVzZXMgc3VnZ2VzdGlvbiBmcm9tIGhlcmVcbiAqIGh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9wdWxzZS9mYXN0LWNlc2l1bS10ZXJyYWluLXJlbmRlcmluZy1uZXctcXVhbnRpemVkLW1lc2gtb3V0cHV0LWFsdmFyby1odWFydGUvXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZXNoTWF4RXJyb3IoejogbnVtYmVyLCBtdWx0aXBsaWVyOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKDc3MDY3LjM0IC8gKDEgPDwgeikpICogbXVsdGlwbGllcjtcbn1cblxuZXhwb3J0IGNvbnN0IFJhc3RlckxheWVyUmVzb3VyY2VzID0ge1xuICByYXN0ZXJDb2xvck1hcDogKGNvbG9ybWFwSWQ6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBgJHtnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmNkblVybH0vcmFzdGVyL2NvbG9ybWFwcy8ke2NvbG9ybWFwSWR9LnBuZ2A7XG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFPQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFU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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/layers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.9",
4
+ "version": "3.2.0",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -36,14 +36,14 @@
36
36
  "@deck.gl/geo-layers": "^8.9.27",
37
37
  "@deck.gl/layers": "^8.9.27",
38
38
  "@deck.gl/mesh-layers": "^8.9.27",
39
- "@kepler.gl/common-utils": "3.1.9",
40
- "@kepler.gl/constants": "3.1.9",
41
- "@kepler.gl/deckgl-arrow-layers": "3.1.9",
42
- "@kepler.gl/deckgl-layers": "3.1.9",
43
- "@kepler.gl/localization": "3.1.9",
44
- "@kepler.gl/table": "3.1.9",
45
- "@kepler.gl/types": "3.1.9",
46
- "@kepler.gl/utils": "3.1.9",
39
+ "@kepler.gl/common-utils": "3.2.0",
40
+ "@kepler.gl/constants": "3.2.0",
41
+ "@kepler.gl/deckgl-arrow-layers": "3.2.0",
42
+ "@kepler.gl/deckgl-layers": "3.2.0",
43
+ "@kepler.gl/localization": "3.2.0",
44
+ "@kepler.gl/table": "3.2.0",
45
+ "@kepler.gl/types": "3.2.0",
46
+ "@kepler.gl/utils": "3.2.0",
47
47
  "@loaders.gl/arrow": "^4.3.2",
48
48
  "@loaders.gl/core": "^4.3.2",
49
49
  "@loaders.gl/gis": "^4.3.2",
@@ -251,6 +251,16 @@ type LoadingOptions = {
251
251
  fetch?: typeof fetch | FetchLike;
252
252
  };
253
253
 
254
+ type NpyRequest = {
255
+ url: string;
256
+ rasterServerUrl: string;
257
+ options: RequestInit;
258
+ rasterServerMaxRetries?: number;
259
+ rasterServerRetryDelay?: number;
260
+ rasterServerServerErrorsToRetry?: number[];
261
+ rasterServerMaxPerServerRequests?: number;
262
+ };
263
+
254
264
  /**
255
265
  * Load NPY Array
256
266
  *
@@ -263,98 +273,106 @@ type LoadingOptions = {
263
273
  * @return image object to pass to Texture2D constructor
264
274
  */
265
275
  export async function loadNpyArray(
266
- request: {url: string; rasterServerUrl: string; options: RequestInit},
276
+ request: NpyRequest,
267
277
  split: true,
268
278
  options?: LoadingOptions
269
279
  ): Promise<Texture2DProps[] | null>;
270
280
  export async function loadNpyArray(
271
- request: {url: string; rasterServerUrl: string; options: RequestInit},
281
+ request: NpyRequest,
272
282
  split: false,
273
283
  options?: LoadingOptions
274
284
  ): Promise<Texture2DProps | null>;
275
285
  export async function loadNpyArray(
276
- request: {url: string; rasterServerUrl: string; options: RequestInit},
286
+ request: NpyRequest,
277
287
  split: boolean,
278
288
  options?: LoadingOptions
279
289
  ): Promise<Texture2DProps | Texture2DProps[] | null> {
280
- const numAttempts = 1 + getApplicationConfig().rasterServerMaxRetries;
281
-
282
- const asset = await getRequestThrottle().throttleRequest(request.rasterServerUrl, async () => {
283
- for (let attempt = 0; attempt < numAttempts; attempt++) {
284
- try {
285
- const {npy: npyOptions} = getLoaderOptions();
286
- const response: NPYLoaderResponse = await load(request.url, NPYLoader, {
287
- npy: npyOptions,
288
- fetch: options?.fetch
289
- });
290
-
291
- if (!response || !response.data || request.options.signal?.aborted) {
292
- return null;
293
- }
294
-
295
- // Float64 data needs to be coerced to Float32 for the GPU
296
- if (response.data instanceof Float64Array) {
297
- response.data = Float32Array.from(response.data);
298
- }
299
-
300
- const {data, header} = response;
301
- const {shape} = header;
302
- const {format, dataFormat, type} = getWebGL2TextureParameters(data);
303
-
304
- // TODO: check height-width or width-height
305
- // Regardless, images usually square
306
- // TODO: handle cases of 256x256x1 instead of 1x256x256
307
- const [z, height, width] = shape;
308
-
309
- // Since we now use WebGL2 data types for 8-bit textures, we set the following for all textures
310
- const mipmaps = false;
311
- const parameters = DEFAULT_HIGH_BIT_TEXTURE_PARAMETERS;
312
-
313
- if (!split) {
314
- return {
315
- data,
316
- width,
317
- height,
318
- format,
319
- dataFormat,
320
- type,
321
- parameters,
322
- mipmaps
323
- };
324
- }
325
-
326
- // Split into individual arrays
327
- const channels: Texture2DProps[] = [];
328
- const channelSize = height * width;
329
- for (let i = 0; i < z; i++) {
330
- channels.push({
331
- data: data.subarray(i * channelSize, (i + 1) * channelSize),
332
- width,
333
- height,
334
- format,
335
- dataFormat,
336
- type,
337
- parameters,
338
- mipmaps
290
+ const numAttempts =
291
+ 1 + (request.rasterServerMaxRetries ?? getApplicationConfig().rasterServerMaxRetries);
292
+
293
+ const asset = await getRequestThrottle().throttleRequest(
294
+ request.rasterServerUrl,
295
+ async () => {
296
+ for (let attempt = 0; attempt < numAttempts; attempt++) {
297
+ try {
298
+ const {npy: npyOptions} = getLoaderOptions();
299
+ const response: NPYLoaderResponse = await load(request.url, NPYLoader, {
300
+ npy: npyOptions,
301
+ fetch: options?.fetch
339
302
  });
340
- }
341
- return channels;
342
- } catch (error) {
343
- // Retry if Service Temporarily Unavailable 503 error etc.
344
- if (
345
- attempt < numAttempts &&
346
- error instanceof FetchError &&
347
- getApplicationConfig().rasterServerServerErrorsToRetry?.includes(
348
- error.response?.status as number
349
- )
350
- ) {
351
- await sleep(getApplicationConfig().rasterServerRetryDelay);
352
- continue;
303
+
304
+ if (!response || !response.data || request.options.signal?.aborted) {
305
+ return null;
306
+ }
307
+
308
+ // Float64 data needs to be coerced to Float32 for the GPU
309
+ if (response.data instanceof Float64Array) {
310
+ response.data = Float32Array.from(response.data);
311
+ }
312
+
313
+ const {data, header} = response;
314
+ const {shape} = header;
315
+ const {format, dataFormat, type} = getWebGL2TextureParameters(data);
316
+
317
+ // TODO: check height-width or width-height
318
+ // Regardless, images usually square
319
+ // TODO: handle cases of 256x256x1 instead of 1x256x256
320
+ const [z, height, width] = shape;
321
+
322
+ // Since we now use WebGL2 data types for 8-bit textures, we set the following for all textures
323
+ const mipmaps = false;
324
+ const parameters = DEFAULT_HIGH_BIT_TEXTURE_PARAMETERS;
325
+
326
+ if (!split) {
327
+ return {
328
+ data,
329
+ width,
330
+ height,
331
+ format,
332
+ dataFormat,
333
+ type,
334
+ parameters,
335
+ mipmaps
336
+ };
337
+ }
338
+
339
+ // Split into individual arrays
340
+ const channels: Texture2DProps[] = [];
341
+ const channelSize = height * width;
342
+ for (let i = 0; i < z; i++) {
343
+ channels.push({
344
+ data: data.subarray(i * channelSize, (i + 1) * channelSize),
345
+ width,
346
+ height,
347
+ format,
348
+ dataFormat,
349
+ type,
350
+ parameters,
351
+ mipmaps
352
+ });
353
+ }
354
+ return channels;
355
+ } catch (error) {
356
+ // Retry if Service Temporarily Unavailable 503 error etc.
357
+ if (
358
+ attempt < numAttempts &&
359
+ error instanceof FetchError &&
360
+ (
361
+ request.rasterServerServerErrorsToRetry ??
362
+ getApplicationConfig().rasterServerServerErrorsToRetry
363
+ )?.includes(error.response?.status as number)
364
+ ) {
365
+ await sleep(
366
+ request.rasterServerRetryDelay ?? getApplicationConfig().rasterServerRetryDelay
367
+ );
368
+ continue;
369
+ }
353
370
  }
354
371
  }
355
- }
356
- return null;
357
- });
372
+ return null;
373
+ },
374
+ request.rasterServerMaxPerServerRequests
375
+ );
358
376
 
359
377
  return asset;
360
378
  }
@@ -263,13 +263,21 @@ async function getSingleAssetSTACRequest(
263
263
  return null;
264
264
  }
265
265
 
266
- return await getAssetRequest({
266
+ const asset = await getAssetRequest({
267
267
  ...urlInfo,
268
268
  params: urlParams,
269
269
  options: {signal},
270
270
  useMask,
271
271
  responseRequiredBandIndices
272
272
  });
273
+ // Pass per-layer override for retries if present on STAC metadata
274
+ return {
275
+ ...asset,
276
+ rasterServerMaxRetries: stac.rasterServerMaxRetries,
277
+ rasterServerRetryDelay: stac.rasterServerRetryDelay,
278
+ rasterServerServerErrorsToRetry: stac.rasterServerServerErrorsToRetry,
279
+ rasterServerMaxPerServerRequests: stac.rasterServerMaxPerServerRequests
280
+ };
273
281
  }
274
282
 
275
283
  /**
@@ -335,11 +343,19 @@ async function getMultiAssetSTACRequest(
335
343
  }
336
344
 
337
345
  if (isValidRequestData(requestData)) {
338
- return await Promise.all(
346
+ const assets = await Promise.all(
339
347
  requestData.map(request =>
340
348
  getAssetRequest({...request, options: request.options ?? {signal}})
341
349
  )
342
350
  );
351
+ // Propagate per-layer retry override
352
+ return assets.map(asset => ({
353
+ ...asset,
354
+ rasterServerMaxRetries: options.stac.rasterServerMaxRetries,
355
+ rasterServerRetryDelay: options.stac.rasterServerRetryDelay,
356
+ rasterServerServerErrorsToRetry: options.stac.rasterServerServerErrorsToRetry,
357
+ rasterServerMaxPerServerRequests: options.stac.rasterServerMaxPerServerRequests
358
+ }));
343
359
  }
344
360
 
345
361
  return null;
@@ -424,18 +440,24 @@ export async function loadTerrain(props: {
424
440
  signal: AbortSignal;
425
441
  rasterTileServerUrls: string[];
426
442
  boundsForGeometry?: [number, number, number, number];
443
+ rasterServerMaxRetries: number | undefined;
444
+ rasterServerRetryDelay: number | undefined;
445
+ rasterServerServerErrorsToRetry?: number[];
446
+ rasterServerMaxPerServerRequests?: number;
427
447
  }): Promise<TerrainData | null> {
428
448
  const {
429
449
  index: {x, y, z},
430
450
  boundsForGeometry,
431
451
  signal,
432
- rasterTileServerUrls
452
+ rasterTileServerUrls,
453
+ rasterServerMaxRetries,
454
+ rasterServerMaxPerServerRequests
433
455
  } = props;
434
456
 
435
457
  const meshMaxError = getMeshMaxError(z, MESH_MULTIPLIER);
436
458
  const terrainUrlInfo = getTerrainUrl(rasterTileServerUrls, x, y, z, meshMaxError);
437
459
  const loaderOptions = getLoaderOptions();
438
- const numAttempts = 1 + getApplicationConfig().rasterServerMaxRetries;
460
+ const numAttempts = 1 + (rasterServerMaxRetries ?? getApplicationConfig().rasterServerMaxRetries);
439
461
 
440
462
  const mesh = await getRequestThrottle().throttleRequest(
441
463
  terrainUrlInfo.rasterServerUrl,
@@ -455,17 +477,21 @@ export async function loadTerrain(props: {
455
477
  if (
456
478
  attempt < numAttempts &&
457
479
  error instanceof FetchError &&
458
- getApplicationConfig().rasterServerServerErrorsToRetry?.includes(
459
- error.response?.status as number
460
- )
480
+ (
481
+ props.rasterServerServerErrorsToRetry ??
482
+ getApplicationConfig().rasterServerServerErrorsToRetry
483
+ )?.includes(error.response?.status as number)
461
484
  ) {
462
- await sleep(getApplicationConfig().rasterServerRetryDelay);
485
+ await sleep(
486
+ props.rasterServerRetryDelay ?? getApplicationConfig().rasterServerRetryDelay
487
+ );
463
488
  continue;
464
489
  }
465
490
  }
466
491
  }
467
492
  return null;
468
- }
493
+ },
494
+ rasterServerMaxPerServerRequests
469
495
  );
470
496
 
471
497
  return mesh;
@@ -83,7 +83,7 @@ const getShouldLoadTerrain = (stac, mapState, visConfig) => {
83
83
  visConfig.enableTerrain &&
84
84
  // disabled in Top view by default
85
85
  (mapState.dragRotate || visConfig.enableTerrainTopView) &&
86
- getApplicationConfig().rasterServerSupportsElevation
86
+ (stac.rasterServerSupportsElevation ?? getApplicationConfig().rasterServerSupportsElevation)
87
87
  );
88
88
  };
89
89
 
@@ -633,7 +633,11 @@ export default class RasterTileLayer extends KeplerLayer {
633
633
  boundsForGeometry: [west, north, east, south],
634
634
  index: props.index,
635
635
  signal: props.signal,
636
- rasterTileServerUrls: props.stac.rasterTileServerUrls || []
636
+ rasterTileServerUrls: props.stac.rasterTileServerUrls || [],
637
+ rasterServerMaxRetries: props.stac.rasterServerMaxRetries,
638
+ rasterServerRetryDelay: props.stac.rasterServerRetryDelay,
639
+ rasterServerServerErrorsToRetry: props.stac.rasterServerServerErrorsToRetry,
640
+ rasterServerMaxPerServerRequests: props.stac.rasterServerMaxPerServerRequests
637
641
  }));
638
642
  return {images: null, ...(terrain ? {terrain} : {})};
639
643
  }
@@ -655,7 +659,11 @@ export default class RasterTileLayer extends KeplerLayer {
655
659
  boundsForGeometry: [west, north, east, south],
656
660
  index: props.index,
657
661
  signal: props.signal,
658
- rasterTileServerUrls: props.stac.rasterTileServerUrls || []
662
+ rasterTileServerUrls: props.stac.rasterTileServerUrls || [],
663
+ rasterServerMaxRetries: props.stac.rasterServerMaxRetries,
664
+ rasterServerRetryDelay: props.stac.rasterServerRetryDelay,
665
+ rasterServerServerErrorsToRetry: props.stac.rasterServerServerErrorsToRetry,
666
+ rasterServerMaxPerServerRequests: props.stac.rasterServerMaxPerServerRequests
659
667
  })
660
668
  : null
661
669
  ]);
@@ -685,7 +693,13 @@ export default class RasterTileLayer extends KeplerLayer {
685
693
  async getTileDataPMTiles(
686
694
  props: GetTileDataDefaultProps & {
687
695
  shouldLoadTerrain: boolean;
688
- metadata: {rasterTileServerUrls: string[]};
696
+ metadata: {
697
+ rasterTileServerUrls: string[];
698
+ rasterServerMaxRetries?: number;
699
+ rasterServerRetryDelay?: number;
700
+ rasterServerServerErrorsToRetry?: number[];
701
+ rasterServerMaxPerServerRequests?: number;
702
+ };
689
703
  globalBounds: DataSourceParams['globalBounds'];
690
704
  },
691
705
  tileSource
@@ -714,7 +728,11 @@ export default class RasterTileLayer extends KeplerLayer {
714
728
  boundsForGeometry: [west, north, east, south],
715
729
  index: props.index,
716
730
  signal: props.signal,
717
- rasterTileServerUrls: metadata.rasterTileServerUrls
731
+ rasterTileServerUrls: metadata.rasterTileServerUrls,
732
+ rasterServerMaxRetries: metadata.rasterServerMaxRetries,
733
+ rasterServerRetryDelay: metadata.rasterServerRetryDelay,
734
+ rasterServerServerErrorsToRetry: metadata.rasterServerServerErrorsToRetry,
735
+ rasterServerMaxPerServerRequests: metadata.rasterServerMaxPerServerRequests
718
736
  })
719
737
  : null;
720
738
 
@@ -39,13 +39,18 @@ class RequestThrottle {
39
39
  : 'No active server queues';
40
40
  }
41
41
 
42
- async throttleRequest<T>(serverKey: string, requestFunction: () => Promise<T>): Promise<T> {
42
+ async throttleRequest<T>(
43
+ serverKey: string,
44
+ requestFunction: () => Promise<T>,
45
+ maxConcurrentRequestsOverride?: number
46
+ ): Promise<T> {
43
47
  const serverQueue = this.getServerQueue(serverKey);
48
+ const maxConcurrentRequests =
49
+ typeof maxConcurrentRequestsOverride === 'number'
50
+ ? maxConcurrentRequestsOverride
51
+ : this.maxConcurrentRequests;
44
52
 
45
- if (
46
- serverQueue.activeRequests >= this.maxConcurrentRequests &&
47
- Boolean(this.maxConcurrentRequests)
48
- ) {
53
+ if (serverQueue.activeRequests >= maxConcurrentRequests && Boolean(maxConcurrentRequests)) {
49
54
  // Wait for a slot to become available
50
55
  await new Promise<void>(resolve => {
51
56
  serverQueue.queue.push(async () => {
@@ -99,7 +99,17 @@ export type CategoricalColormapOptions = {
99
99
  maxValue?: number;
100
100
  };
101
101
 
102
- export type ExtendedKeplerSTAC = {rasterTileServerUrls?: []};
102
+ export type ExtendedKeplerSTAC = {
103
+ rasterTileServerUrls?: [];
104
+ /** Optional per-layer override for max retries when fetching raster data */
105
+ rasterServerMaxRetries?: number;
106
+ /** Optional per-layer override for retry delay between attempts (ms) */
107
+ rasterServerRetryDelay?: number;
108
+ /** Optional per-layer override for which server errors are retried */
109
+ rasterServerServerErrorsToRetry?: number[];
110
+ /** Optional per-layer override for max concurrent requests per server */
111
+ rasterServerMaxPerServerRequests?: number;
112
+ };
103
113
 
104
114
  /**
105
115
  * Custom fields we pass on to the getTileData callback
@@ -207,6 +217,14 @@ export type AssetRequestData = {
207
217
  useMask: boolean;
208
218
  /** Pass this property through the request to pick specific bands from the response */
209
219
  responseRequiredBandIndices?: number[] | null;
220
+ /** Optional per-request override for max retries when fetching NPY arrays */
221
+ rasterServerMaxRetries?: number;
222
+ /** Optional per-request override for retry delay between attempts (ms) */
223
+ rasterServerRetryDelay?: number;
224
+ /** Optional per-request override for which server errors are retried */
225
+ rasterServerServerErrorsToRetry?: number[];
226
+ /** Optional per-request override for max concurrent requests per server */
227
+ rasterServerMaxPerServerRequests?: number;
210
228
  };
211
229
 
212
230
  export type NPYLoaderDataTypes =