@colijnit/configurator 261.1.1 → 261.20.1

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 (401) hide show
  1. package/{fesm2015/colijnit-configurator.js → fesm2022/colijnit-configurator.mjs} +19087 -18481
  2. package/fesm2022/colijnit-configurator.mjs.map +1 -0
  3. package/index.d.ts +3299 -0
  4. package/lib/components/answer-card/style/_layout.scss +3 -3
  5. package/lib/components/answers-slideout/style/_layout.scss +1 -0
  6. package/lib/style/configurator-globals.scss +1 -21
  7. package/package.json +24 -19
  8. package/bundles/colijnit-configurator.umd.js +0 -20167
  9. package/bundles/colijnit-configurator.umd.js.map +0 -1
  10. package/colijnit-configurator.d.ts +0 -5
  11. package/esm2015/colijnit-configurator.js +0 -5
  12. package/esm2015/lib/builder.js +0 -795
  13. package/esm2015/lib/components/answer-card/answer-card.component.js +0 -313
  14. package/esm2015/lib/components/answer-card/answer-card.module.js +0 -50
  15. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.component.js +0 -182
  16. package/esm2015/lib/components/answer-info-dialog/answer-info-dialog.module.js +0 -34
  17. package/esm2015/lib/components/answers-slideout/answers-slideout.component.js +0 -490
  18. package/esm2015/lib/components/answers-slideout/answers-slideout.module.js +0 -61
  19. package/esm2015/lib/components/color-filter/color-filter.component.js +0 -59
  20. package/esm2015/lib/components/color-filter/color-filter.module.js +0 -26
  21. package/esm2015/lib/components/configurator/configurator.component.js +0 -133
  22. package/esm2015/lib/components/configurator/configurator.module.js +0 -42
  23. package/esm2015/lib/components/configurator-dialog/configurator-camera-settings.component.js +0 -222
  24. package/esm2015/lib/components/configurator-dialog/configurator-dialog.module.js +0 -48
  25. package/esm2015/lib/components/configurator-dialog/configurator-error-dialog.component.js +0 -82
  26. package/esm2015/lib/components/configurator-dialog/configurator-export-dialog.component.js +0 -163
  27. package/esm2015/lib/components/configurator-loader/configurator-loader.component.js +0 -49
  28. package/esm2015/lib/components/configurator-loader/configurator-loader.module.js +0 -33
  29. package/esm2015/lib/components/configurator-scene/configurator-scene.component.js +0 -60
  30. package/esm2015/lib/components/configurator-scene/configurator-scene.module.js +0 -17
  31. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.component.js +0 -46
  32. package/esm2015/lib/components/configurator-scene-loader/configurator-scene-loader.module.js +0 -26
  33. package/esm2015/lib/components/element-buttons/element-buttons.component.js +0 -168
  34. package/esm2015/lib/components/element-buttons/element-buttons.module.js +0 -30
  35. package/esm2015/lib/components/element-toolbar/element-toolbar.component.js +0 -186
  36. package/esm2015/lib/components/element-toolbar/element-toolbar.module.js +0 -34
  37. package/esm2015/lib/components/image-zoom/image-zoom.component.js +0 -61
  38. package/esm2015/lib/components/image-zoom/image-zoom.module.js +0 -30
  39. package/esm2015/lib/components/lite-selector/lite-selector.component.js +0 -206
  40. package/esm2015/lib/components/lite-selector/lite-selector.module.js +0 -34
  41. package/esm2015/lib/components/product-configurator/product-configurator.component.js +0 -184
  42. package/esm2015/lib/components/product-configurator/product-configurator.module.js +0 -72
  43. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.component.js +0 -237
  44. package/esm2015/lib/components/product-configurator-selector/product-configurator-selector.module.js +0 -38
  45. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.js +0 -284
  46. package/esm2015/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.js +0 -42
  47. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.js +0 -72
  48. package/esm2015/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.js +0 -34
  49. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.js +0 -82
  50. package/esm2015/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.js +0 -30
  51. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.js +0 -80
  52. package/esm2015/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.js +0 -34
  53. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.js +0 -93
  54. package/esm2015/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.js +0 -34
  55. package/esm2015/lib/components/progress-bar/progress-bar.component.js +0 -55
  56. package/esm2015/lib/components/progress-bar/progress-bar.module.js +0 -29
  57. package/esm2015/lib/components/scene-options/scene-options.component.js +0 -164
  58. package/esm2015/lib/components/scene-options/scene-options.module.js +0 -38
  59. package/esm2015/lib/components/selections-summary/selections-summary.component.js +0 -163
  60. package/esm2015/lib/components/selections-summary/selections-summary.module.js +0 -45
  61. package/esm2015/lib/components/selections-summary-line/selections-summary-line.component.js +0 -171
  62. package/esm2015/lib/components/selections-summary-line/selections-summary-line.module.js +0 -34
  63. package/esm2015/lib/components/slideout/slideout.component.js +0 -83
  64. package/esm2015/lib/components/slideout/slideout.module.js +0 -17
  65. package/esm2015/lib/components/summary-line/summary-line.component.js +0 -273
  66. package/esm2015/lib/components/summary-line/summary-line.module.js +0 -44
  67. package/esm2015/lib/components/tag-filter/tag-filter.component.js +0 -39
  68. package/esm2015/lib/components/tag-filter/tag-filter.module.js +0 -21
  69. package/esm2015/lib/components/threedselector/threedselector.component.js +0 -155
  70. package/esm2015/lib/components/threedselector/threedselector.module.js +0 -34
  71. package/esm2015/lib/core/helper/variation-helper.js +0 -553
  72. package/esm2015/lib/core/shader/floor-fade.shader.js +0 -33
  73. package/esm2015/lib/core/textures/depth-data-texture.js +0 -19
  74. package/esm2015/lib/directives/directives.module.js +0 -26
  75. package/esm2015/lib/directives/visibility-observer-master.directive.js +0 -53
  76. package/esm2015/lib/directives/visibility-observer.directive.js +0 -54
  77. package/esm2015/lib/enum/ar-feature.enum.js +0 -14
  78. package/esm2015/lib/enum/configuration-key.enum.js +0 -41
  79. package/esm2015/lib/enum/configuration-template.enum.js +0 -6
  80. package/esm2015/lib/enum/device-size-type.js +0 -7
  81. package/esm2015/lib/enum/device-tier.enum.js +0 -7
  82. package/esm2015/lib/enum/icon.enum.js +0 -113
  83. package/esm2015/lib/enum/item-type.enum.js +0 -23
  84. package/esm2015/lib/enum/light.enum.js +0 -9
  85. package/esm2015/lib/enum/navigator-type.enum.js +0 -6
  86. package/esm2015/lib/enum/output-encoding.enum.js +0 -9
  87. package/esm2015/lib/enum/result-type.enum.js +0 -21
  88. package/esm2015/lib/enum/scene-event.enum.js +0 -12
  89. package/esm2015/lib/enum/shadow-map-type.enum.js +0 -8
  90. package/esm2015/lib/enum/texture-type.js +0 -9
  91. package/esm2015/lib/enum/tone-mapping-local.enum.js +0 -12
  92. package/esm2015/lib/enum/view-mode.enum.js +0 -7
  93. package/esm2015/lib/enum/xr-mode.enum.js +0 -6
  94. package/esm2015/lib/environments/environment.js +0 -8
  95. package/esm2015/lib/interfaces/aa-options.interface.js +0 -2
  96. package/esm2015/lib/interfaces/adjustable-element.interface.js +0 -2
  97. package/esm2015/lib/interfaces/ao-options.interface.js +0 -2
  98. package/esm2015/lib/interfaces/changes.interface.js +0 -2
  99. package/esm2015/lib/interfaces/configuration-data.interface.js +0 -2
  100. package/esm2015/lib/interfaces/light-preset.interface.js +0 -2
  101. package/esm2015/lib/interfaces/post-processing-setting.interface.js +0 -2
  102. package/esm2015/lib/interfaces/scene-option-button.interface.js +0 -6
  103. package/esm2015/lib/interfaces/screen-size-info.js +0 -2
  104. package/esm2015/lib/interfaces/setting.interface.js +0 -2
  105. package/esm2015/lib/interfaces/texture.interface.js +0 -2
  106. package/esm2015/lib/interfaces/vignette-options.interface.js +0 -2
  107. package/esm2015/lib/model/ar-position-indicator.js +0 -18
  108. package/esm2015/lib/model/camera-settings.js +0 -14
  109. package/esm2015/lib/model/configuration-result-object.js +0 -6
  110. package/esm2015/lib/model/configurator-error-message.js +0 -9
  111. package/esm2015/lib/model/configurator-settings.js +0 -25
  112. package/esm2015/lib/model/custom-button.js +0 -16
  113. package/esm2015/lib/model/factory.js +0 -28
  114. package/esm2015/lib/model/icon.js +0 -112
  115. package/esm2015/lib/model/intersected-objects.js +0 -7
  116. package/esm2015/lib/model/light-preset.js +0 -73
  117. package/esm2015/lib/model/light-properties.js +0 -45
  118. package/esm2015/lib/model/material.js +0 -11
  119. package/esm2015/lib/model/metadata.js +0 -2
  120. package/esm2015/lib/model/render-parameters.js +0 -16
  121. package/esm2015/lib/model/setting-options.js +0 -71
  122. package/esm2015/lib/model/settings.js +0 -16
  123. package/esm2015/lib/model/shadow-properties.js +0 -10
  124. package/esm2015/lib/model/skin.js +0 -3
  125. package/esm2015/lib/model/texture.js +0 -76
  126. package/esm2015/lib/model/variation-settings.js +0 -54
  127. package/esm2015/lib/model/variation.js +0 -3
  128. package/esm2015/lib/model/xr-reticle.js +0 -79
  129. package/esm2015/lib/modules/render/enum/scene-type.enum.js +0 -6
  130. package/esm2015/lib/modules/render/model/ar-parameters.js +0 -12
  131. package/esm2015/lib/modules/render/model/scene-setting.js +0 -6
  132. package/esm2015/lib/modules/render/model/scene-settings.js +0 -3
  133. package/esm2015/lib/pipes/append.pipe.js +0 -21
  134. package/esm2015/lib/pipes/google-translate.pipe.js +0 -21
  135. package/esm2015/lib/pipes/localize.pipe.js +0 -28
  136. package/esm2015/lib/pipes/pipes.module.js +0 -41
  137. package/esm2015/lib/pipes/prepend.pipe.js +0 -21
  138. package/esm2015/lib/pipes/strip-html.pipe.js +0 -17
  139. package/esm2015/lib/services/app-event.service.js +0 -36
  140. package/esm2015/lib/services/app-initializer.service.js +0 -27
  141. package/esm2015/lib/services/ar.service.js +0 -844
  142. package/esm2015/lib/services/build-furniture-base.service.js +0 -1181
  143. package/esm2015/lib/services/build-furniture-without-scene.service.js +0 -86
  144. package/esm2015/lib/services/build-furniture.service.js +0 -169
  145. package/esm2015/lib/services/bundle-initialzer.service.js +0 -113
  146. package/esm2015/lib/services/camera.service.js +0 -123
  147. package/esm2015/lib/services/configuration.service.js +0 -79
  148. package/esm2015/lib/services/configurator-connector.service.js +0 -830
  149. package/esm2015/lib/services/configurator.service.js +0 -285
  150. package/esm2015/lib/services/configuring.service.js +0 -119
  151. package/esm2015/lib/services/controls.js +0 -799
  152. package/esm2015/lib/services/debug.service.js +0 -43
  153. package/esm2015/lib/services/dictionary.service.js +0 -65
  154. package/esm2015/lib/services/dynamic-camera.service.js +0 -96
  155. package/esm2015/lib/services/floor-plane.service.js +0 -252
  156. package/esm2015/lib/services/font.service.js +0 -27
  157. package/esm2015/lib/services/google-translate.service.js +0 -79
  158. package/esm2015/lib/services/icon-cache.service.js +0 -44
  159. package/esm2015/lib/services/intersection.service.js +0 -47
  160. package/esm2015/lib/services/item.service.js +0 -75
  161. package/esm2015/lib/services/json-utils.service.js +0 -48
  162. package/esm2015/lib/services/light-creation.service.js +0 -35
  163. package/esm2015/lib/services/light-presets.service.js +0 -157
  164. package/esm2015/lib/services/lights.service.js +0 -146
  165. package/esm2015/lib/services/load-furniture-base.service.js +0 -164
  166. package/esm2015/lib/services/load-furniture-without-scene.service.js +0 -45
  167. package/esm2015/lib/services/load-furniture.service.js +0 -72
  168. package/esm2015/lib/services/loader.service.js +0 -32
  169. package/esm2015/lib/services/locator.service.js +0 -11
  170. package/esm2015/lib/services/message-board.service.js +0 -50
  171. package/esm2015/lib/services/post-processing.service.js +0 -378
  172. package/esm2015/lib/services/product-configurator.service.js +0 -16
  173. package/esm2015/lib/services/progress.service.js +0 -20
  174. package/esm2015/lib/services/scene-event.service.js +0 -246
  175. package/esm2015/lib/services/scene-options.service.js +0 -24
  176. package/esm2015/lib/services/scene.service.js +0 -313
  177. package/esm2015/lib/services/screen-size-analysis.service.js +0 -97
  178. package/esm2015/lib/services/settings.service.js +0 -142
  179. package/esm2015/lib/services/switch-build-furniture.service.js +0 -37
  180. package/esm2015/lib/services/switch-load-furniture.service.js +0 -35
  181. package/esm2015/lib/services/threedselector.service.js +0 -72
  182. package/esm2015/lib/services/utils.service.js +0 -207
  183. package/esm2015/lib/services/variation-cache.service.js +0 -143
  184. package/esm2015/lib/services/variation.service.js +0 -490
  185. package/esm2015/lib/services/view-mode.service.js +0 -37
  186. package/esm2015/lib/services/vr.service.js +0 -191
  187. package/esm2015/lib/services/xr.service.js +0 -294
  188. package/esm2015/lib/utils/asset.utils.js +0 -120
  189. package/esm2015/lib/utils/base-utils.js +0 -9
  190. package/esm2015/lib/utils/color.utils.js +0 -30
  191. package/esm2015/lib/utils/debug.utils.js +0 -9
  192. package/esm2015/lib/utils/device.utils.js +0 -25
  193. package/esm2015/lib/utils/file.utils.js +0 -167
  194. package/esm2015/lib/utils/image.utils.js +0 -61
  195. package/esm2015/lib/utils/json-parser.utils.js +0 -180
  196. package/esm2015/lib/utils/material.utils.js +0 -433
  197. package/esm2015/lib/utils/object.utils.js +0 -360
  198. package/esm2015/lib/utils/relative-position.utils.js +0 -75
  199. package/esm2015/lib/utils/rotation-helper.utils.js +0 -15
  200. package/esm2015/lib/utils/scene-3d.utils.js +0 -213
  201. package/esm2015/lib/utils/scene-utils.js +0 -191
  202. package/esm2015/lib/utils/text-utils.js +0 -68
  203. package/esm2015/lib/utils/threed.utils.js +0 -281
  204. package/esm2015/lib/utils/variation-utils.js +0 -459
  205. package/esm2015/public-api.js +0 -65
  206. package/fesm2015/colijnit-configurator.js.map +0 -1
  207. package/lib/builder.d.ts +0 -83
  208. package/lib/components/answer-card/answer-card.component.d.ts +0 -58
  209. package/lib/components/answer-card/answer-card.module.d.ts +0 -11
  210. package/lib/components/answer-info-dialog/answer-info-dialog.component.d.ts +0 -38
  211. package/lib/components/answer-info-dialog/answer-info-dialog.module.d.ts +0 -10
  212. package/lib/components/answers-slideout/answers-slideout.component.d.ts +0 -86
  213. package/lib/components/answers-slideout/answers-slideout.module.d.ts +0 -16
  214. package/lib/components/color-filter/color-filter.component.d.ts +0 -20
  215. package/lib/components/color-filter/color-filter.module.d.ts +0 -8
  216. package/lib/components/configurator/configurator.component.d.ts +0 -37
  217. package/lib/components/configurator/configurator.module.d.ts +0 -12
  218. package/lib/components/configurator-dialog/configurator-camera-settings.component.d.ts +0 -30
  219. package/lib/components/configurator-dialog/configurator-dialog.module.d.ts +0 -13
  220. package/lib/components/configurator-dialog/configurator-error-dialog.component.d.ts +0 -16
  221. package/lib/components/configurator-dialog/configurator-export-dialog.component.d.ts +0 -26
  222. package/lib/components/configurator-loader/configurator-loader.component.d.ts +0 -7
  223. package/lib/components/configurator-loader/configurator-loader.module.d.ts +0 -9
  224. package/lib/components/configurator-scene/configurator-scene.component.d.ts +0 -24
  225. package/lib/components/configurator-scene/configurator-scene.module.d.ts +0 -7
  226. package/lib/components/configurator-scene-loader/configurator-scene-loader.component.d.ts +0 -7
  227. package/lib/components/configurator-scene-loader/configurator-scene-loader.module.d.ts +0 -8
  228. package/lib/components/element-buttons/element-buttons.component.d.ts +0 -32
  229. package/lib/components/element-buttons/element-buttons.module.d.ts +0 -9
  230. package/lib/components/element-toolbar/element-toolbar.component.d.ts +0 -27
  231. package/lib/components/element-toolbar/element-toolbar.module.d.ts +0 -10
  232. package/lib/components/image-zoom/image-zoom.component.d.ts +0 -15
  233. package/lib/components/image-zoom/image-zoom.module.d.ts +0 -9
  234. package/lib/components/lite-selector/lite-selector.component.d.ts +0 -40
  235. package/lib/components/lite-selector/lite-selector.module.d.ts +0 -10
  236. package/lib/components/product-configurator/product-configurator.component.d.ts +0 -50
  237. package/lib/components/product-configurator/product-configurator.module.d.ts +0 -15
  238. package/lib/components/product-configurator-selector/product-configurator-selector.component.d.ts +0 -35
  239. package/lib/components/product-configurator-selector/product-configurator-selector.module.d.ts +0 -11
  240. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.component.d.ts +0 -31
  241. package/lib/components/product-configurator-selector-option/product-configurator-selector-option.module.d.ts +0 -13
  242. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.component.d.ts +0 -20
  243. package/lib/components/product-configurator-selector-option-button/product-configurator-selector-option-button.module.d.ts +0 -10
  244. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.component.d.ts +0 -20
  245. package/lib/components/product-configurator-selector-option-checkbox/product-configurator-selector-option-checkbox.module.d.ts +0 -10
  246. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.component.d.ts +0 -21
  247. package/lib/components/product-configurator-selector-option-dropdown/product-configurator-selector-option-dropdown.module.d.ts +0 -10
  248. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.component.d.ts +0 -21
  249. package/lib/components/product-configurator-selector-option-tile/product-configurator-selector-option-tile.module.d.ts +0 -10
  250. package/lib/components/progress-bar/progress-bar.component.d.ts +0 -10
  251. package/lib/components/progress-bar/progress-bar.module.d.ts +0 -8
  252. package/lib/components/scene-options/scene-options.component.d.ts +0 -24
  253. package/lib/components/scene-options/scene-options.module.d.ts +0 -11
  254. package/lib/components/selections-summary/selections-summary.component.d.ts +0 -38
  255. package/lib/components/selections-summary/selections-summary.module.d.ts +0 -12
  256. package/lib/components/selections-summary-line/selections-summary-line.component.d.ts +0 -27
  257. package/lib/components/selections-summary-line/selections-summary-line.module.d.ts +0 -10
  258. package/lib/components/slideout/slideout.component.d.ts +0 -22
  259. package/lib/components/slideout/slideout.module.d.ts +0 -7
  260. package/lib/components/summary-line/summary-line.component.d.ts +0 -50
  261. package/lib/components/summary-line/summary-line.module.d.ts +0 -11
  262. package/lib/components/tag-filter/tag-filter.component.d.ts +0 -9
  263. package/lib/components/tag-filter/tag-filter.module.d.ts +0 -7
  264. package/lib/components/threedselector/threedselector.component.d.ts +0 -38
  265. package/lib/components/threedselector/threedselector.module.d.ts +0 -10
  266. package/lib/core/helper/variation-helper.d.ts +0 -25
  267. package/lib/core/shader/floor-fade.shader.d.ts +0 -5
  268. package/lib/core/textures/depth-data-texture.d.ts +0 -5
  269. package/lib/directives/directives.module.d.ts +0 -8
  270. package/lib/directives/visibility-observer-master.directive.d.ts +0 -12
  271. package/lib/directives/visibility-observer.directive.d.ts +0 -16
  272. package/lib/enum/ar-feature.enum.d.ts +0 -12
  273. package/lib/enum/configuration-key.enum.d.ts +0 -39
  274. package/lib/enum/configuration-template.enum.d.ts +0 -4
  275. package/lib/enum/device-size-type.d.ts +0 -5
  276. package/lib/enum/device-tier.enum.d.ts +0 -5
  277. package/lib/enum/icon.enum.d.ts +0 -111
  278. package/lib/enum/item-type.enum.d.ts +0 -21
  279. package/lib/enum/light.enum.d.ts +0 -7
  280. package/lib/enum/navigator-type.enum.d.ts +0 -4
  281. package/lib/enum/output-encoding.enum.d.ts +0 -7
  282. package/lib/enum/result-type.enum.d.ts +0 -19
  283. package/lib/enum/scene-event.enum.d.ts +0 -10
  284. package/lib/enum/shadow-map-type.enum.d.ts +0 -6
  285. package/lib/enum/texture-type.d.ts +0 -7
  286. package/lib/enum/tone-mapping-local.enum.d.ts +0 -10
  287. package/lib/enum/view-mode.enum.d.ts +0 -5
  288. package/lib/enum/xr-mode.enum.d.ts +0 -4
  289. package/lib/environments/environment.d.ts +0 -4
  290. package/lib/interfaces/aa-options.interface.d.ts +0 -4
  291. package/lib/interfaces/adjustable-element.interface.d.ts +0 -5
  292. package/lib/interfaces/ao-options.interface.d.ts +0 -18
  293. package/lib/interfaces/changes.interface.d.ts +0 -9
  294. package/lib/interfaces/configuration-data.interface.d.ts +0 -40
  295. package/lib/interfaces/light-preset.interface.d.ts +0 -22
  296. package/lib/interfaces/post-processing-setting.interface.d.ts +0 -11
  297. package/lib/interfaces/scene-option-button.interface.d.ts +0 -19
  298. package/lib/interfaces/screen-size-info.d.ts +0 -10
  299. package/lib/interfaces/setting.interface.d.ts +0 -8
  300. package/lib/interfaces/texture.interface.d.ts +0 -44
  301. package/lib/interfaces/vignette-options.interface.d.ts +0 -4
  302. package/lib/model/ar-position-indicator.d.ts +0 -4
  303. package/lib/model/camera-settings.d.ts +0 -12
  304. package/lib/model/configuration-result-object.d.ts +0 -30
  305. package/lib/model/configurator-error-message.d.ts +0 -8
  306. package/lib/model/configurator-settings.d.ts +0 -62
  307. package/lib/model/custom-button.d.ts +0 -10
  308. package/lib/model/factory.d.ts +0 -5
  309. package/lib/model/icon.d.ts +0 -4
  310. package/lib/model/intersected-objects.d.ts +0 -6
  311. package/lib/model/light-preset.d.ts +0 -33
  312. package/lib/model/light-properties.d.ts +0 -25
  313. package/lib/model/material.d.ts +0 -41
  314. package/lib/model/metadata.d.ts +0 -78
  315. package/lib/model/render-parameters.d.ts +0 -12
  316. package/lib/model/setting-options.d.ts +0 -67
  317. package/lib/model/settings.d.ts +0 -10
  318. package/lib/model/shadow-properties.d.ts +0 -7
  319. package/lib/model/skin.d.ts +0 -15
  320. package/lib/model/texture.d.ts +0 -52
  321. package/lib/model/variation-settings.d.ts +0 -55
  322. package/lib/model/variation.d.ts +0 -11
  323. package/lib/model/xr-reticle.d.ts +0 -17
  324. package/lib/modules/render/enum/scene-type.enum.d.ts +0 -4
  325. package/lib/modules/render/model/ar-parameters.d.ts +0 -9
  326. package/lib/modules/render/model/scene-setting.d.ts +0 -13
  327. package/lib/modules/render/model/scene-settings.d.ts +0 -4
  328. package/lib/pipes/append.pipe.d.ts +0 -7
  329. package/lib/pipes/google-translate.pipe.d.ts +0 -11
  330. package/lib/pipes/localize.pipe.d.ts +0 -10
  331. package/lib/pipes/pipes.module.d.ts +0 -11
  332. package/lib/pipes/prepend.pipe.d.ts +0 -7
  333. package/lib/pipes/strip-html.pipe.d.ts +0 -7
  334. package/lib/services/app-event.service.d.ts +0 -32
  335. package/lib/services/app-initializer.service.d.ts +0 -14
  336. package/lib/services/ar.service.d.ts +0 -120
  337. package/lib/services/build-furniture-base.service.d.ts +0 -117
  338. package/lib/services/build-furniture-without-scene.service.d.ts +0 -14
  339. package/lib/services/build-furniture.service.d.ts +0 -14
  340. package/lib/services/bundle-initialzer.service.d.ts +0 -45
  341. package/lib/services/camera.service.d.ts +0 -44
  342. package/lib/services/configuration.service.d.ts +0 -18
  343. package/lib/services/configurator-connector.service.d.ts +0 -140
  344. package/lib/services/configurator.service.d.ts +0 -62
  345. package/lib/services/configuring.service.d.ts +0 -46
  346. package/lib/services/controls.d.ts +0 -11
  347. package/lib/services/debug.service.d.ts +0 -16
  348. package/lib/services/dictionary.service.d.ts +0 -15
  349. package/lib/services/dynamic-camera.service.d.ts +0 -21
  350. package/lib/services/floor-plane.service.d.ts +0 -47
  351. package/lib/services/font.service.d.ts +0 -10
  352. package/lib/services/google-translate.service.d.ts +0 -26
  353. package/lib/services/icon-cache.service.d.ts +0 -21
  354. package/lib/services/intersection.service.d.ts +0 -11
  355. package/lib/services/item.service.d.ts +0 -18
  356. package/lib/services/json-utils.service.d.ts +0 -7
  357. package/lib/services/light-creation.service.d.ts +0 -9
  358. package/lib/services/light-presets.service.d.ts +0 -34
  359. package/lib/services/lights.service.d.ts +0 -34
  360. package/lib/services/load-furniture-base.service.d.ts +0 -37
  361. package/lib/services/load-furniture-without-scene.service.d.ts +0 -9
  362. package/lib/services/load-furniture.service.d.ts +0 -9
  363. package/lib/services/loader.service.d.ts +0 -11
  364. package/lib/services/locator.service.d.ts +0 -7
  365. package/lib/services/message-board.service.d.ts +0 -18
  366. package/lib/services/post-processing.service.d.ts +0 -74
  367. package/lib/services/product-configurator.service.d.ts +0 -11
  368. package/lib/services/progress.service.d.ts +0 -9
  369. package/lib/services/scene-event.service.d.ts +0 -72
  370. package/lib/services/scene-options.service.d.ts +0 -11
  371. package/lib/services/scene.service.d.ts +0 -71
  372. package/lib/services/screen-size-analysis.service.d.ts +0 -32
  373. package/lib/services/settings.service.d.ts +0 -24
  374. package/lib/services/switch-build-furniture.service.d.ts +0 -21
  375. package/lib/services/switch-load-furniture.service.d.ts +0 -21
  376. package/lib/services/threedselector.service.d.ts +0 -17
  377. package/lib/services/utils.service.d.ts +0 -24
  378. package/lib/services/variation-cache.service.d.ts +0 -23
  379. package/lib/services/variation.service.d.ts +0 -26
  380. package/lib/services/view-mode.service.d.ts +0 -17
  381. package/lib/services/vr.service.d.ts +0 -42
  382. package/lib/services/xr.service.d.ts +0 -56
  383. package/lib/utils/asset.utils.d.ts +0 -19
  384. package/lib/utils/base-utils.d.ts +0 -4
  385. package/lib/utils/color.utils.d.ts +0 -8
  386. package/lib/utils/debug.utils.d.ts +0 -3
  387. package/lib/utils/device.utils.d.ts +0 -7
  388. package/lib/utils/file.utils.d.ts +0 -30
  389. package/lib/utils/image.utils.d.ts +0 -9
  390. package/lib/utils/json-parser.utils.d.ts +0 -9
  391. package/lib/utils/material.utils.d.ts +0 -34
  392. package/lib/utils/object.utils.d.ts +0 -32
  393. package/lib/utils/relative-position.utils.d.ts +0 -12
  394. package/lib/utils/rotation-helper.utils.d.ts +0 -6
  395. package/lib/utils/scene-3d.utils.d.ts +0 -8
  396. package/lib/utils/scene-utils.d.ts +0 -7
  397. package/lib/utils/text-utils.d.ts +0 -4
  398. package/lib/utils/threed.utils.d.ts +0 -20
  399. package/lib/utils/variation-utils.d.ts +0 -18
  400. package/public-api.d.ts +0 -60
  401. /package/lib/style/{template_variables.scss → _variables.scss} +0 -0
@@ -1,281 +0,0 @@
1
- import { __awaiter } from "tslib";
2
- import * as THREE from 'three';
3
- import { Box3, Camera, Group, Mesh, Object3D, Vector3 } from 'three';
4
- import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader';
5
- import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
6
- import { ObjectUtils } from './object.utils';
7
- export class ThreedUtils {
8
- constructor() {
9
- this.clips = [];
10
- this._objectCache = new Map();
11
- }
12
- clearCache() {
13
- const objs = Array.from(this._objectCache.values());
14
- objs.forEach(o => ObjectUtils.DisposeObject(o));
15
- this._objectCache.clear();
16
- }
17
- download3DSource(fileName, setVisibleFalse = true) {
18
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
19
- fileName = fileName.replace('.unity3d', '');
20
- let lookupFileName = fileName + (fileName.indexOf('.glb') < 0 ? '.glb' : '');
21
- if (this._objectCache.has(lookupFileName)) {
22
- resolve(this._objectCache.get(lookupFileName));
23
- return;
24
- }
25
- this.loadGlbSource(lookupFileName, setVisibleFalse)
26
- .then((obj) => {
27
- this._objectCache.set(lookupFileName, obj);
28
- resolve(obj);
29
- })
30
- .catch(() => {
31
- reject(`GLB source not found! (${lookupFileName})`);
32
- });
33
- }));
34
- }
35
- readFileAsText(file) {
36
- const fileReader = new FileReader();
37
- return new Promise((resolve, reject) => {
38
- fileReader.onload = (e) => resolve(e.target.result);
39
- fileReader.onerror = error => reject(error);
40
- fileReader.readAsText(file);
41
- });
42
- }
43
- loadJsonModel(filePath) {
44
- return __awaiter(this, void 0, void 0, function* () {
45
- if (this._objectCache.has(filePath)) {
46
- return Promise.resolve(this._objectCache.get(filePath));
47
- }
48
- const json = yield this._readJsonFile(filePath);
49
- const loader = new THREE.ObjectLoader();
50
- loader.crossOrigin = 'Anonymous';
51
- return new Promise((resolve, reject) => {
52
- try {
53
- const obj = loader.parse(json);
54
- this._objectCache.set(filePath, obj);
55
- resolve(obj);
56
- }
57
- catch (e) {
58
- reject(null);
59
- }
60
- });
61
- });
62
- }
63
- loadJsonObjectModel(filePath) {
64
- return __awaiter(this, void 0, void 0, function* () {
65
- if (this._objectCache.has(filePath)) {
66
- return Promise.resolve(this._objectCache.get(filePath));
67
- }
68
- const loader = new THREE.ObjectLoader();
69
- loader.setCrossOrigin('Anonymous');
70
- loader.setResourcePath('');
71
- return new Promise((resolve, reject) => {
72
- loader.load(filePath, (object) => {
73
- const obj = (object.type === 'Scene' && object.children[0].type === 'Object3D') ? object.children[0] : object;
74
- this._objectCache.set(filePath, obj);
75
- resolve(obj);
76
- }, xhr => null, error => reject(error));
77
- });
78
- });
79
- }
80
- loadGlbModel(file, cleanUp = true, dracoPath) {
81
- return __awaiter(this, void 0, void 0, function* () {
82
- if (this._objectCache.has(file)) {
83
- return Promise.resolve(this._objectCache.get(file));
84
- }
85
- if (!window.hasOwnProperty('loadGLTF')) {
86
- return new Promise((resolve, reject) => {
87
- const loader = new GLTFLoader();
88
- loader.setDRACOLoader(new DRACOLoader());
89
- loader.dracoLoader.setDecoderPath(dracoPath);
90
- loader.dracoLoader.setDecoderConfig({ type: 'js' });
91
- loader.load(file, (object) => __awaiter(this, void 0, void 0, function* () {
92
- this.clips = object.animations || [];
93
- const obj = this.cleanedUpObjects(object.scene, false);
94
- this._objectCache.set(file, obj);
95
- resolve(obj);
96
- }), xhr => this._handleUpdateProgressBar(xhr.loaded / xhr.total * 100), error => {
97
- console.log('Error! ', error);
98
- reject(error);
99
- });
100
- });
101
- }
102
- else {
103
- const obj = yield window.loadGLTF(file);
104
- if (obj) {
105
- this._cleanedUpObjects(obj, cleanUp);
106
- this._objectCache.set(file, obj);
107
- return obj;
108
- }
109
- else {
110
- return null;
111
- }
112
- }
113
- });
114
- }
115
- cleanedUpObjects(object, cleanUp = true) {
116
- let obj = new Object3D();
117
- // console.log(this.clips);
118
- object.children.forEach((c) => {
119
- if (!(c instanceof Camera)) {
120
- if (cleanUp && c instanceof Group || (c.children.length === 1 && c.children[0] instanceof Group)) {
121
- this._addGroupChildrenToObject(c, obj);
122
- }
123
- else if ((cleanUp && !(c instanceof Mesh)) || (!(c instanceof Mesh) && !c.name && c.children.length > 0)) {
124
- c.children.forEach((child) => {
125
- child.translateY(c.position.y);
126
- });
127
- c.translateY(-c.position.y);
128
- if (obj.children.length > 0) {
129
- obj.add(c.clone());
130
- }
131
- else {
132
- obj = c.clone();
133
- }
134
- }
135
- else {
136
- obj.add(c.clone());
137
- }
138
- }
139
- });
140
- const boundingBox = new Box3().setFromObject(obj);
141
- const bbCenterPivot = new Vector3();
142
- boundingBox.getCenter(bbCenterPivot);
143
- const delta = new Vector3().add(bbCenterPivot).negate();
144
- obj.children.forEach((cc) => {
145
- cc.position.add(delta);
146
- });
147
- return obj;
148
- }
149
- loadGlbSource(file, setVisibleFalse = true, dracoPath) {
150
- return __awaiter(this, void 0, void 0, function* () {
151
- const obj = yield this.loadGlbModel(file, false, dracoPath);
152
- if (obj) {
153
- obj.children = obj.children.filter(c => !(c instanceof THREE.Camera || (c.constructor.name && c.constructor.name.toLowerCase().indexOf('camera') > -1)));
154
- obj.children.sort((a, b) => a['name'] < b['name'] ? 1 : -1);
155
- obj.children.forEach((c) => {
156
- c.traverse((t) => {
157
- t.visible = !t.name.toLowerCase().startsWith('c_');
158
- });
159
- if (setVisibleFalse) {
160
- c.visible = false;
161
- }
162
- });
163
- if (obj.children.length === 1 && (obj.children[0] instanceof THREE.Group || obj.children[0].constructor.name === 'Group')) { // flatten children
164
- const children = obj.children[0].children.slice();
165
- const name = obj.children[0].name;
166
- obj.children.length = 0;
167
- const parent = new THREE.Object3D();
168
- parent.name = name;
169
- parent.children = children;
170
- obj.add(parent);
171
- }
172
- }
173
- return obj;
174
- });
175
- }
176
- textureFromUrl(url) {
177
- return __awaiter(this, void 0, void 0, function* () {
178
- // url = this._includeBaseUrl(url);
179
- return new Promise((resolve, reject) => {
180
- const textureLoader = new THREE.TextureLoader();
181
- // textureLoader.setBaseU(this._settingsService.settings.assetPath);
182
- textureLoader.load(url, (texture) => {
183
- texture.wrapT = THREE.RepeatWrapping;
184
- texture.wrapS = THREE.RepeatWrapping;
185
- texture.repeat.set(1, 1);
186
- texture.needsUpdate = true;
187
- return resolve(texture);
188
- }, null, reject);
189
- });
190
- });
191
- }
192
- _cleanedUpObjects(object, cleanUp = true) {
193
- let obj = new THREE.Object3D();
194
- object.children.forEach((c) => {
195
- if (!(c instanceof THREE.Camera || (c.constructor.name && c.constructor.name.toLowerCase().indexOf('camera') > -1))) {
196
- if (cleanUp && (c instanceof THREE.Group || c.constructor.name === 'Group') || (c.children.length === 1 && (c.children[0] instanceof THREE.Group || c.children[0].constructor.name === 'Group'))) {
197
- this._addGroupChildrenToObject(c, obj);
198
- }
199
- else if ((cleanUp && !(c instanceof THREE.Mesh || c.constructor.name === 'Mesh')) || (!(c instanceof THREE.Mesh || c.constructor.name === 'Mesh') && !c.name && c.children.length > 0)) {
200
- c.children.forEach((child) => {
201
- child.translateY(c.position.y);
202
- });
203
- c.translateY(-c.position.y);
204
- if (obj.children.length > 0) {
205
- obj.add(c.clone());
206
- }
207
- else {
208
- obj = c.clone();
209
- }
210
- }
211
- else {
212
- // if (c.position.y > 0 || c.position.y < 0) {
213
- // c.children.forEach((child) => {
214
- // child.translateY(c.position.y);
215
- // });
216
- // c.translateY(-c.position.y);
217
- // }
218
- obj.add(c.clone());
219
- }
220
- }
221
- });
222
- const boundingBox = new THREE.Box3().setFromObject(obj);
223
- const bbCenterPivot = new THREE.Vector3();
224
- boundingBox.getCenter(bbCenterPivot);
225
- const delta = new THREE.Vector3().add(bbCenterPivot).negate();
226
- obj.children.forEach((cc) => {
227
- cc.position.add(delta);
228
- });
229
- return obj;
230
- }
231
- _addGroupChildrenToObject(group, obj, cleanUp = true) {
232
- group.children.forEach((gc) => {
233
- if (cleanUp && (gc instanceof THREE.Group || gc.constructor.name === 'Group')) {
234
- this._addGroupChildrenToObject(gc, obj);
235
- }
236
- else {
237
- // gc.translateX(-group.position.x);
238
- gc.translateY(group.position.y);
239
- // gc.translateZ(-group.position.z);
240
- obj.add(gc.clone());
241
- }
242
- });
243
- }
244
- _iterateChildren(children, callback) {
245
- for (let i = 0; i < children.length; i++) {
246
- const child = children[i];
247
- if (child instanceof THREE.Mesh || child.constructor.name === 'Mesh') {
248
- callback(child);
249
- }
250
- else {
251
- this._iterateChildren(child.children, callback);
252
- }
253
- }
254
- }
255
- _readJsonFile(filePath) {
256
- return __awaiter(this, void 0, void 0, function* () {
257
- try {
258
- const response = yield fetch(filePath);
259
- if (!response.ok) {
260
- return '';
261
- }
262
- else {
263
- let empty = false;
264
- yield response.clone().text().then((value) => {
265
- if (value === '') {
266
- empty = true;
267
- }
268
- });
269
- return empty ? {} : response.json();
270
- }
271
- }
272
- catch (e) {
273
- return '';
274
- }
275
- });
276
- }
277
- _handleUpdateProgressBar(loaded) {
278
- // this._progressService.progress = loaded;
279
- }
280
- }
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhyZWVkLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29uZmlndXJhdG9yL3NyYy9saWIvdXRpbHMvdGhyZWVkLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUM7QUFDbkUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsTUFBTSxPQUFPLFdBQVc7SUFBeEI7UUFDUyxVQUFLLEdBQVEsRUFBRSxDQUFDO1FBQ2YsaUJBQVksR0FBZ0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQThRaEUsQ0FBQztJQTVRUSxVQUFVO1FBQ2YsTUFBTSxJQUFJLEdBQXFCLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRU0sZ0JBQWdCLENBQUMsUUFBZ0IsRUFBRSxrQkFBMkIsSUFBSTtRQUN2RSxPQUFPLElBQUksT0FBTyxDQUFDLENBQU8sT0FBaUIsRUFBRSxNQUFnQixFQUFFLEVBQUU7WUFDL0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxD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LEVBQUUsUUFBUSxDQUFDLENBQUM7YUFDakQ7U0FDRjtJQUNILENBQUM7SUFFYSxhQUFhLENBQUMsUUFBZ0I7O1lBQzFDLElBQUk7Z0JBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFO29CQUNoQixPQUFPLEVBQUUsQ0FBQztpQkFDWDtxQkFBTTtvQkFDTCxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7b0JBQ2xCLE1BQU0sUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO3dCQUMzQyxJQUFJLEtBQUssS0FBSyxFQUFFLEVBQUU7NEJBQ2hCLEtBQUssR0FBRyxJQUFJLENBQUM7eUJBQ2Q7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNyQzthQUNGO1lBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ1YsT0FBTyxFQUFFLENBQUM7YUFDWDtRQUNILENBQUM7S0FBQTtJQUVPLHdCQUF3QixDQUFDLE1BQWM7UUFDN0MsMkNBQTJDO0lBQzdDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtCb3gzLCBDYW1lcmEsIEdyb3VwLCBNZXNoLCBPYmplY3QzRCwgVmVjdG9yM30gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0dMVEZMb2FkZXJ9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9sb2FkZXJzL0dMVEZMb2FkZXInO1xyXG5pbXBvcnQge0RSQUNPTG9hZGVyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9EUkFDT0xvYWRlcic7XHJcbmltcG9ydCB7T2JqZWN0VXRpbHN9IGZyb20gJy4vb2JqZWN0LnV0aWxzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBUaHJlZWRVdGlscyB7XHJcbiAgcHVibGljIGNsaXBzOiBhbnkgPSBbXTtcclxuICBwcml2YXRlIF9vYmplY3RDYWNoZTogTWFwPHN0cmluZywgVEhSRUUuT2JqZWN0M0Q+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBwdWJsaWMgY2xlYXJDYWNoZSgpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9ianM6IFRIUkVFLk9iamVjdDNEW10gPSBBcnJheS5mcm9tKHRoaXMuX29iamVjdENhY2hlLnZhbHVlcygpKTtcclxuICAgIG9ianMuZm9yRWFjaChvID0+IE9iamVjdFV0aWxzLkRpc3Bvc2VPYmplY3QobykpO1xyXG4gICAgdGhpcy5fb2JqZWN0Q2FjaGUuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkb3dubG9hZDNEU291cmNlKGZpbGVOYW1lOiBzdHJpbmcsIHNldFZpc2libGVGYWxzZTogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRIUkVFLk9iamVjdDNEPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgnLnVuaXR5M2QnLCAnJyk7XHJcbiAgICAgIGxldCBsb29rdXBGaWxlTmFtZTogc3RyaW5nID0gZmlsZU5hbWUgKyAoZmlsZU5hbWUuaW5kZXhPZignLmdsYicpIDwgMCA/ICcuZ2xiJyA6ICcnKTtcclxuICAgICAgaWYgKHRoaXMuX29iamVjdENhY2hlLmhhcyhsb29rdXBGaWxlTmFtZSkpIHtcclxuICAgICAgICByZXNvbHZlKHRoaXMuX29iamVjdENhY2hlLmdldChsb29rdXBGaWxlTmFtZSkpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxvYWRHbGJTb3VyY2UobG9va3VwRmlsZU5hbWUsIHNldFZpc2libGVGYWxzZSlcclxuICAgICAgICAudGhlbigob2JqOiBUSFJFRS5PYmplY3QzRCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fb2JqZWN0Q2FjaGUuc2V0KGxvb2t1cEZpbGVOYW1lLCBvYmopO1xyXG4gICAgICAgICAgcmVzb2x2ZShvYmopO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgIHJlamVjdChgR0xCIHNvdXJjZSBub3QgZm91bmQhICgke2xvb2t1cEZpbGVOYW1lfSlgKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlYWRGaWxlQXNUZXh0KGZpbGU6IEZpbGUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlOiBhbnkpID0+IHJlc29sdmUoZS50YXJnZXQucmVzdWx0KTtcclxuICAgICAgZmlsZVJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4gcmVqZWN0KGVycm9yKTtcclxuICAgICAgZmlsZVJlYWRlci5yZWFkQXNUZXh0KGZpbGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgbG9hZEpzb25Nb2RlbChmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLl9vYmplY3RDYWNoZS5oYXMoZmlsZVBhdGgpKSB7XHJcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fb2JqZWN0Q2FjaGUuZ2V0KGZpbGVQYXRoKSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLl9yZWFkSnNvbkZpbGUoZmlsZVBhdGgpO1xyXG4gICAgY29uc3QgbG9hZGVyID0gbmV3IFRIUkVFLk9iamVjdExvYWRlcigpO1xyXG4gICAgbG9hZGVyLmNyb3NzT3JpZ2luID0gJ0Fub255bW91cyc7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IGxvYWRlci5wYXJzZShqc29uKTtcclxuICAgICAgICB0aGlzLl9vYmplY3RDYWNoZS5zZXQoZmlsZVBhdGgsIG9iaik7XHJcbiAgICAgICAgcmVzb2x2ZShvYmopO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgcmVqZWN0KG51bGwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkSnNvbk9iamVjdE1vZGVsKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuX29iamVjdENhY2hlLmhhcyhmaWxlUGF0aCkpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9vYmplY3RDYWNoZS5nZXQoZmlsZVBhdGgpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGxvYWRlciA9IG5ldyBUSFJFRS5PYmplY3RMb2FkZXIoKTtcclxuICAgIGxvYWRlci5zZXRDcm9zc09yaWdpbignQW5vbnltb3VzJyk7XHJcbiAgICBsb2FkZXIuc2V0UmVzb3VyY2VQYXRoKCcnKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGxvYWRlci5sb2FkKGZpbGVQYXRoLFxyXG4gICAgICAgIChvYmplY3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb2JqOiBUSFJFRS5PYmplY3QzRCA9IChvYmplY3QudHlwZSA9PT0gJ1NjZW5lJyAmJiBvYmplY3QuY2hpbGRyZW5bMF0udHlwZSA9PT0gJ09iamVjdDNEJykgPyBvYmplY3QuY2hpbGRyZW5bMF0gOiBvYmplY3Q7XHJcbiAgICAgICAgICB0aGlzLl9vYmplY3RDYWNoZS5zZXQoZmlsZVBhdGgsIG9iaik7XHJcbiAgICAgICAgICByZXNvbHZlKG9iaiBhcyBUSFJFRS5PYmplY3QzRCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB4aHIgPT4gbnVsbCxcclxuICAgICAgICBlcnJvciA9PiByZWplY3QoZXJyb3IpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBsb2FkR2xiTW9kZWwoZmlsZTogc3RyaW5nLCBjbGVhblVwOiBib29sZWFuID0gdHJ1ZSwgZHJhY29QYXRoPzogc3RyaW5nKTogUHJvbWlzZTxUSFJFRS5PYmplY3QzRD4ge1xyXG4gICAgaWYgKHRoaXMuX29iamVjdENhY2hlLmhhcyhmaWxlKSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX29iamVjdENhY2hlLmdldChmaWxlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnbG9hZEdMVEYnKSkge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbG9hZGVyID0gbmV3IEdMVEZMb2FkZXIoKTtcclxuICAgICAgICBsb2FkZXIuc2V0RFJBQ09Mb2FkZXIobmV3IERSQUNPTG9hZGVyKCkpO1xyXG4gICAgICAgIGxvYWRlci5kcmFjb0xvYWRlci5zZXREZWNvZGVyUGF0aChkcmFjb1BhdGgpO1xyXG4gICAgICAgIGxvYWRlci5kcmFjb0xvYWRlci5zZXREZWNvZGVyQ29uZmlnKHt0eXBlOiAnanMnfSk7XHJcbiAgICAgICAgbG9hZGVyLmxvYWQoZmlsZSxcclxuICAgICAgICAgIGFzeW5jIG9iamVjdCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xpcHMgPSBvYmplY3QuYW5pbWF0aW9ucyB8fCBbXTtcclxuICAgICAgICAgICAgY29uc3Qgb2JqOiBPYmplY3QzRCA9IHRoaXMuY2xlYW5lZFVwT2JqZWN0cyhvYmplY3Quc2NlbmUsIGZhbHNlKTtcclxuICAgICAgICAgICAgdGhpcy5fb2JqZWN0Q2FjaGUuc2V0KGZpbGUsIG9iaik7XHJcbiAgICAgICAgICAgIHJlc29sdmUob2JqKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICB4aHIgPT4gdGhpcy5faGFuZGxlVXBkYXRlUHJvZ3Jlc3NCYXIoeGhyLmxvYWRlZCAvIHhoci50b3RhbCAqIDEwMCksXHJcbiAgICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdFcnJvciEgJywgZXJyb3IpO1xyXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgb2JqOiBUSFJFRS5PYmplY3QzRCA9IGF3YWl0ICh3aW5kb3cgYXMgYW55KS5sb2FkR0xURihmaWxlKTtcclxuICAgICAgaWYgKG9iaikge1xyXG4gICAgICAgIHRoaXMuX2NsZWFuZWRVcE9iamVjdHMob2JqLCBjbGVhblVwKTtcclxuICAgICAgICB0aGlzLl9vYmplY3RDYWNoZS5zZXQoZmlsZSwgb2JqKTtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYW5lZFVwT2JqZWN0cyhvYmplY3Q6IE9iamVjdDNELCBjbGVhblVwOiBib29sZWFuID0gdHJ1ZSk6IE9iamVjdDNEIHtcclxuICAgIGxldCBvYmo6IE9iamVjdDNEID0gbmV3IE9iamVjdDNEKCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmNsaXBzKTtcclxuICAgIG9iamVjdC5jaGlsZHJlbi5mb3JFYWNoKChjOiBPYmplY3QzRCkgPT4ge1xyXG4gICAgICBpZiAoIShjIGluc3RhbmNlb2YgQ2FtZXJhKSkge1xyXG4gICAgICAgIGlmIChjbGVhblVwICYmIGMgaW5zdGFuY2VvZiBHcm91cCB8fCAoYy5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgYy5jaGlsZHJlblswXSBpbnN0YW5jZW9mIEdyb3VwKSkge1xyXG4gICAgICAgICAgdGhpcy5fYWRkR3JvdXBDaGlsZHJlblRvT2JqZWN0KGMsIG9iaik7XHJcbiAgICAgICAgfSBlbHNlIGlmICgoY2xlYW5VcCAmJiAhKGMgaW5zdGFuY2VvZiBNZXNoKSkgfHwgKCEoYyBpbnN0YW5jZW9mIE1lc2gpICYmICFjLm5hbWUgJiYgYy5jaGlsZHJlbi5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgYy5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xyXG4gICAgICAgICAgICBjaGlsZC50cmFuc2xhdGVZKGMucG9zaXRpb24ueSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGMudHJhbnNsYXRlWSgtYy5wb3NpdGlvbi55KTtcclxuICAgICAgICAgIGlmIChvYmouY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBvYmouYWRkKGMuY2xvbmUoKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvYmogPSBjLmNsb25lKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG9iai5hZGQoYy5jbG9uZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgYm91bmRpbmdCb3ggPSBuZXcgQm94MygpLnNldEZyb21PYmplY3Qob2JqKTtcclxuICAgIGNvbnN0IGJiQ2VudGVyUGl2b3QgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgYm91bmRpbmdCb3guZ2V0Q2VudGVyKGJiQ2VudGVyUGl2b3QpO1xyXG4gICAgY29uc3QgZGVsdGE6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpLmFkZChiYkNlbnRlclBpdm90KS5uZWdhdGUoKTtcclxuICAgIG9iai5jaGlsZHJlbi5mb3JFYWNoKChjYykgPT4ge1xyXG4gICAgICBjYy5wb3NpdGlvbi5hZGQoZGVsdGEpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGxvYWRHbGJTb3VyY2UoZmlsZTogc3RyaW5nLCBzZXRWaXNpYmxlRmFsc2U6IGJvb2xlYW4gPSB0cnVlLCBkcmFjb1BhdGg/OiBzdHJpbmcpOiBQcm9taXNlPFRIUkVFLk9iamVjdDNEPiB7XHJcbiAgICBjb25zdCBvYmogPSBhd2FpdCB0aGlzLmxvYWRHbGJNb2RlbChmaWxlLCBmYWxzZSwgZHJhY29QYXRoKTtcclxuICAgIGlmIChvYmopIHtcclxuICAgICAgb2JqLmNoaWxkcmVuID0gb2JqLmNoaWxkcmVuLmZpbHRlcihjID0+ICEoYyBpbnN0YW5jZW9mIFRIUkVFLkNhbWVyYSB8fCAoYy5jb25zdHJ1Y3Rvci5uYW1lICYmIGMuY29uc3RydWN0b3IubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2NhbWVyYScpID4gLTEpKSk7XHJcbiAgICAgIG9iai5jaGlsZHJlbi5zb3J0KChhLCBiKSA9PiBhWyduYW1lJ10gPCBiWyduYW1lJ10gPyAxIDogLTEpO1xyXG4gICAgICBvYmouY2hpbGRyZW4uZm9yRWFjaCgoYzogVEhSRUUuT2JqZWN0M0QpID0+IHtcclxuICAgICAgICBjLnRyYXZlcnNlKCh0OiBUSFJFRS5PYmplY3QzRCkgPT4ge1xyXG4gICAgICAgICAgdC52aXNpYmxlID0gIXQubmFtZS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ2NfJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHNldFZpc2libGVGYWxzZSkge1xyXG4gICAgICAgICAgYy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgaWYgKG9iai5jaGlsZHJlbi5sZW5ndGggPT09IDEgJiYgKG9iai5jaGlsZHJlblswXSBpbnN0YW5jZW9mIFRIUkVFLkdyb3VwIHx8IG9iai5jaGlsZHJlblswXS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnR3JvdXAnKSkgeyAvLyBmbGF0dGVuIGNoaWxkcmVuXHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW46IGFueSA9IG9iai5jaGlsZHJlblswXS5jaGlsZHJlbi5zbGljZSgpO1xyXG4gICAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IG9iai5jaGlsZHJlblswXS5uYW1lO1xyXG4gICAgICAgIG9iai5jaGlsZHJlbi5sZW5ndGggPSAwO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcclxuICAgICAgICBwYXJlbnQubmFtZSA9IG5hbWU7XHJcbiAgICAgICAgcGFyZW50LmNoaWxkcmVuID0gY2hpbGRyZW47XHJcbiAgICAgICAgb2JqLmFkZChwYXJlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHRleHR1cmVGcm9tVXJsKHVybDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIHVybCA9IHRoaXMuX2luY2x1ZGVCYXNlVXJsKHVybCk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBjb25zdCB0ZXh0dXJlTG9hZGVyID0gbmV3IFRIUkVFLlRleHR1cmVMb2FkZXIoKTtcclxuICAgICAgLy8gdGV4dHVyZUxvYWRlci5zZXRCYXNlVSh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MuYXNzZXRQYXRoKTtcclxuICAgICAgdGV4dHVyZUxvYWRlci5sb2FkKHVybCxcclxuICAgICAgICAodGV4dHVyZTogVEhSRUUuVGV4dHVyZSkgPT4ge1xyXG4gICAgICAgICAgdGV4dHVyZS53cmFwVCA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xyXG4gICAgICAgICAgdGV4dHVyZS53cmFwUyA9IFRIUkVFLlJlcGVhdFdyYXBwaW5nO1xyXG4gICAgICAgICAgdGV4dHVyZS5yZXBlYXQuc2V0KDEsIDEpO1xyXG4gICAgICAgICAgdGV4dHVyZS5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0ZXh0dXJlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgcmVqZWN0XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NsZWFuZWRVcE9iamVjdHMob2JqZWN0OiBUSFJFRS5PYmplY3QzRCwgY2xlYW5VcDogYm9vbGVhbiA9IHRydWUpOiBUSFJFRS5PYmplY3QzRCB7XHJcbiAgICBsZXQgb2JqOiBUSFJFRS5PYmplY3QzRCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xyXG4gICAgb2JqZWN0LmNoaWxkcmVuLmZvckVhY2goKGM6IFRIUkVFLk9iamVjdDNEKSA9PiB7XHJcbiAgICAgIGlmICghKGMgaW5zdGFuY2VvZiBUSFJFRS5DYW1lcmEgfHwgKGMuY29uc3RydWN0b3IubmFtZSAmJiBjLmNvbnN0cnVjdG9yLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdjYW1lcmEnKSA+IC0xKSkpIHtcclxuICAgICAgICBpZiAoY2xlYW5VcCAmJiAoYyBpbnN0YW5jZW9mIFRIUkVFLkdyb3VwIHx8IGMuY29uc3RydWN0b3IubmFtZSA9PT0gJ0dyb3VwJykgfHwgKGMuY2hpbGRyZW4ubGVuZ3RoID09PSAxICYmIChjLmNoaWxkcmVuWzBdIGluc3RhbmNlb2YgVEhSRUUuR3JvdXAgfHwgYy5jaGlsZHJlblswXS5jb25zdHJ1Y3Rvci5uYW1lID09PSAnR3JvdXAnKSkpIHtcclxuICAgICAgICAgIHRoaXMuX2FkZEdyb3VwQ2hpbGRyZW5Ub09iamVjdChjLCBvYmopO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoKGNsZWFuVXAgJiYgIShjIGluc3RhbmNlb2YgVEhSRUUuTWVzaCB8fCBjLmNvbnN0cnVjdG9yLm5hbWUgPT09ICdNZXNoJykpIHx8ICghKGMgaW5zdGFuY2VvZiBUSFJFRS5NZXNoIHx8IGMuY29uc3RydWN0b3IubmFtZSA9PT0gJ01lc2gnKSAmJiAhYy5uYW1lICYmIGMuY2hpbGRyZW4ubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgIGMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgICAgY2hpbGQudHJhbnNsYXRlWShjLnBvc2l0aW9uLnkpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBjLnRyYW5zbGF0ZVkoLWMucG9zaXRpb24ueSk7XHJcbiAgICAgICAgICBpZiAob2JqLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgb2JqLmFkZChjLmNsb25lKCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgb2JqID0gYy5jbG9uZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBpZiAoYy5wb3NpdGlvbi55ID4gMCB8fCBjLnBvc2l0aW9uLnkgPCAwKSB7XHJcbiAgICAgICAgICAvLyAgIGMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuICAgICAgICAgIC8vICAgICBjaGlsZC50cmFuc2xhdGVZKGMucG9zaXRpb24ueSk7XHJcbiAgICAgICAgICAvLyAgIH0pO1xyXG4gICAgICAgICAgLy8gICBjLnRyYW5zbGF0ZVkoLWMucG9zaXRpb24ueSk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICBvYmouYWRkKGMuY2xvbmUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IGJvdW5kaW5nQm94ID0gbmV3IFRIUkVFLkJveDMoKS5zZXRGcm9tT2JqZWN0KG9iaik7XHJcbiAgICBjb25zdCBiYkNlbnRlclBpdm90ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcclxuICAgIGJvdW5kaW5nQm94LmdldENlbnRlcihiYkNlbnRlclBpdm90KTtcclxuICAgIGNvbnN0IGRlbHRhOiBUSFJFRS5WZWN0b3IzID0gbmV3IFRIUkVFLlZlY3RvcjMoKS5hZGQoYmJDZW50ZXJQaXZvdCkubmVnYXRlKCk7XHJcbiAgICBvYmouY2hpbGRyZW4uZm9yRWFjaCgoY2MpID0+IHtcclxuICAgICAgY2MucG9zaXRpb24uYWRkKGRlbHRhKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2FkZEdyb3VwQ2hpbGRyZW5Ub09iamVjdChncm91cDogVEhSRUUuT2JqZWN0M0QsIG9iajogVEhSRUUuT2JqZWN0M0QsIGNsZWFuVXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICBncm91cC5jaGlsZHJlbi5mb3JFYWNoKChnYzogVEhSRUUuT2JqZWN0M0QpID0+IHtcclxuICAgICAgaWYgKGNsZWFuVXAgJiYgKGdjIGluc3RhbmNlb2YgVEhSRUUuR3JvdXAgfHwgZ2MuY29uc3RydWN0b3IubmFtZSA9PT0gJ0dyb3VwJykpIHtcclxuICAgICAgICB0aGlzLl9hZGRHcm91cENoaWxkcmVuVG9PYmplY3QoZ2MsIG9iaik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gZ2MudHJhbnNsYXRlWCgtZ3JvdXAucG9zaXRpb24ueCk7XHJcbiAgICAgICAgZ2MudHJhbnNsYXRlWShncm91cC5wb3NpdGlvbi55KTtcclxuICAgICAgICAvLyBnYy50cmFuc2xhdGVaKC1ncm91cC5wb3NpdGlvbi56KTtcclxuICAgICAgICBvYmouYWRkKGdjLmNsb25lKCkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2l0ZXJhdGVDaGlsZHJlbihjaGlsZHJlbjogVEhSRUUuT2JqZWN0M0RbXSwgY2FsbGJhY2s6IChjaGlsZDogVEhSRUUuTWVzaCkgPT4ge30pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgY2hpbGQ6IFRIUkVFLk9iamVjdDNEID0gY2hpbGRyZW5baV07XHJcbiAgICAgIGlmIChjaGlsZCBpbnN0YW5jZW9mIFRIUkVFLk1lc2ggfHwgY2hpbGQuY29uc3RydWN0b3IubmFtZSA9PT0gJ01lc2gnKSB7XHJcbiAgICAgICAgY2FsbGJhY2soY2hpbGQgYXMgVEhSRUUuTWVzaCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5faXRlcmF0ZUNoaWxkcmVuKGNoaWxkLmNoaWxkcmVuLCBjYWxsYmFjayk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX3JlYWRKc29uRmlsZShmaWxlUGF0aDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goZmlsZVBhdGgpO1xyXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBlbXB0eSA9IGZhbHNlO1xyXG4gICAgICAgIGF3YWl0IHJlc3BvbnNlLmNsb25lKCkudGV4dCgpLnRoZW4oKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnKSB7XHJcbiAgICAgICAgICAgIGVtcHR5ID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZW1wdHkgPyB7fSA6IHJlc3BvbnNlLmpzb24oKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9oYW5kbGVVcGRhdGVQcm9ncmVzc0Jhcihsb2FkZWQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5fcHJvZ3Jlc3NTZXJ2aWNlLnByb2dyZXNzID0gbG9hZGVkO1xyXG4gIH1cclxufVxyXG4iXX0=