speechrecorderng 3.6.0 → 3.8.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 (220) hide show
  1. package/esm2022/lib/action/action.mjs +73 -0
  2. package/{esm2020 → esm2022}/lib/audio/array_audio_buffer.mjs +163 -163
  3. package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_input_stream.mjs +85 -85
  4. package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_random_access_stream.mjs +15 -15
  5. package/esm2022/lib/audio/audio_data_holder.mjs +264 -0
  6. package/{esm2020 → esm2022}/lib/audio/audio_display.mjs +93 -93
  7. package/{esm2020 → esm2022}/lib/audio/audio_player.mjs +213 -213
  8. package/esm2022/lib/audio/capture/capture.mjs +855 -0
  9. package/esm2022/lib/audio/context.mjs +79 -0
  10. package/{esm2020 → esm2022}/lib/audio/dsp/level_measure.mjs +515 -515
  11. package/{esm2020 → esm2022}/lib/audio/format.mjs +16 -16
  12. package/esm2022/lib/audio/impl/wavformat.mjs +6 -0
  13. package/{esm2020 → esm2022}/lib/audio/impl/wavreader.mjs +133 -133
  14. package/esm2022/lib/audio/impl/wavwriter.mjs +105 -0
  15. package/esm2022/lib/audio/inddb_audio_buffer.mjs +508 -0
  16. package/{esm2020 → esm2022}/lib/audio/io/stream.mjs +58 -58
  17. package/esm2022/lib/audio/net_audio_buffer.mjs +293 -0
  18. package/{esm2020 → esm2022}/lib/audio/persistor.mjs +80 -80
  19. package/{esm2020 → esm2022}/lib/audio/playback/array_audio_buffer_source_node.mjs +125 -125
  20. package/esm2022/lib/audio/playback/audio_source_node.mjs +18 -0
  21. package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
  22. package/{esm2020 → esm2022}/lib/audio/playback/inddb_audio_buffer_source_node.mjs +166 -166
  23. package/{esm2020 → esm2022}/lib/audio/playback/net_audio_buffer_source_node.mjs +217 -217
  24. package/esm2022/lib/audio/playback/player.mjs +402 -0
  25. package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +347 -0
  26. package/{esm2020 → esm2022}/lib/audio/ui/audio_display_control.mjs +65 -65
  27. package/{esm2020 → esm2022}/lib/audio/ui/audio_display_scroll_pane.mjs +139 -139
  28. package/{esm2020 → esm2022}/lib/audio/ui/audiosignal.mjs +524 -524
  29. package/{esm2020 → esm2022}/lib/audio/ui/common.mjs +18 -18
  30. package/esm2022/lib/audio/ui/container.mjs +414 -0
  31. package/{esm2020 → esm2022}/lib/audio/ui/livelevel.mjs +352 -352
  32. package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +11 -0
  33. package/esm2022/lib/audio/ui/sonagram.mjs +900 -0
  34. package/esm2022/lib/db/inddb.mjs +120 -0
  35. package/esm2022/lib/dsp/utils.mjs +48 -0
  36. package/{esm2020 → esm2022}/lib/io/BinaryReader.mjs +84 -84
  37. package/esm2022/lib/io/BinaryWriter.mjs +74 -0
  38. package/{esm2020 → esm2022}/lib/io/stream.mjs +258 -258
  39. package/{esm2020 → esm2022}/lib/math/2d/geometry.mjs +27 -27
  40. package/esm2022/lib/math/complex.mjs +58 -0
  41. package/{esm2020 → esm2022}/lib/math/dft.mjs +195 -195
  42. package/{esm2020 → esm2022}/lib/media/utils.mjs +13 -13
  43. package/esm2022/lib/net/uploader.mjs +367 -0
  44. package/{esm2020 → esm2022}/lib/recorder_component.mjs +64 -64
  45. package/esm2022/lib/speechrecorder/project/project.mjs +49 -0
  46. package/esm2022/lib/speechrecorder/project/project.service.mjs +64 -0
  47. package/{esm2020 → esm2022}/lib/speechrecorder/recording.mjs +123 -123
  48. package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +218 -0
  49. package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +1014 -0
  50. package/{esm2020 → esm2022}/lib/speechrecorder/script/script.mjs +114 -114
  51. package/{esm2020 → esm2022}/lib/speechrecorder/script/script.service.mjs +47 -47
  52. package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +1179 -0
  53. package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +668 -0
  54. package/esm2022/lib/speechrecorder/session/controlpanel.mjs +416 -0
  55. package/{esm2020 → esm2022}/lib/speechrecorder/session/item.mjs +29 -29
  56. package/{esm2020 → esm2022}/lib/speechrecorder/session/progress.mjs +69 -69
  57. package/{esm2020 → esm2022}/lib/speechrecorder/session/prompting.mjs +571 -571
  58. package/{esm2020 → esm2022}/lib/speechrecorder/session/recorder_combi_pane.mjs +65 -65
  59. package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +195 -0
  60. package/{esm2020 → esm2022}/lib/speechrecorder/session/recording_list.mjs +103 -103
  61. package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +63 -63
  62. package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +51 -51
  63. package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +104 -104
  64. package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +381 -381
  65. package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file.mjs +67 -67
  66. package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +288 -0
  67. package/{esm2020 → esm2022}/lib/speechrecorder/session/session.mjs +1 -1
  68. package/esm2022/lib/speechrecorder/session/session.service.mjs +69 -0
  69. package/{esm2020 → esm2022}/lib/speechrecorder/session/session_finished_dialog.mjs +29 -29
  70. package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +1386 -0
  71. package/{esm2020 → esm2022}/lib/speechrecorder/session/warning_bar.mjs +28 -28
  72. package/{esm2020 → esm2022}/lib/speechrecorder/spruploader.mjs +22 -22
  73. package/{esm2020 → esm2022}/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -1
  74. package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +57 -0
  75. package/{esm2020 → esm2022}/lib/speechrecorderng.component.mjs +388 -388
  76. package/{esm2020 → esm2022}/lib/speechrecorderng.module.mjs +100 -100
  77. package/{esm2020 → esm2022}/lib/spr.config.mjs +26 -26
  78. package/{esm2020 → esm2022}/lib/spr.module.version.mjs +2 -2
  79. package/{esm2020 → esm2022}/lib/ui/canvas_layer_comp.mjs +38 -38
  80. package/{esm2020 → esm2022}/lib/ui/message_dialog.mjs +30 -30
  81. package/esm2022/lib/ui/recordingitem_display.mjs +253 -0
  82. package/{esm2020 → esm2022}/lib/ui/responsive_component.mjs +24 -24
  83. package/{esm2020 → esm2022}/lib/utils/scrollIntoViewToBottom.mjs +23 -23
  84. package/esm2022/lib/utils/ua-parser.mjs +190 -0
  85. package/esm2022/lib/utils/utils.mjs +105 -0
  86. package/esm2022/lib/utils/wake_lock.mjs +114 -0
  87. package/{esm2020 → esm2022}/lib/utils/wake_lock_media.mjs +1 -1
  88. package/{esm2020 → esm2022}/public-api.mjs +33 -33
  89. package/{esm2020 → esm2022}/speechrecorderng.mjs +4 -4
  90. package/{fesm2020 → fesm2022}/speechrecorderng.mjs +16518 -16454
  91. package/fesm2022/speechrecorderng.mjs.map +1 -0
  92. package/index.d.ts +5 -5
  93. package/lib/action/action.d.ts +27 -27
  94. package/lib/audio/array_audio_buffer.d.ts +31 -31
  95. package/lib/audio/array_audio_buffer_input_stream.d.ts +14 -14
  96. package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -9
  97. package/lib/audio/audio_data_holder.d.ts +84 -84
  98. package/lib/audio/audio_display.d.ts +36 -36
  99. package/lib/audio/audio_player.d.ts +47 -47
  100. package/lib/audio/capture/capture.d.ts +67 -67
  101. package/lib/audio/context.d.ts +6 -6
  102. package/lib/audio/dsp/level_measure.d.ts +60 -60
  103. package/lib/audio/format.d.ts +11 -11
  104. package/lib/audio/impl/wavformat.d.ts +5 -5
  105. package/lib/audio/impl/wavreader.d.ts +16 -16
  106. package/lib/audio/impl/wavwriter.d.ts +13 -13
  107. package/lib/audio/inddb_audio_buffer.d.ts +68 -68
  108. package/lib/audio/io/stream.d.ts +28 -28
  109. package/lib/audio/net_audio_buffer.d.ts +57 -57
  110. package/lib/audio/persistor.d.ts +29 -29
  111. package/lib/audio/playback/array_audio_buffer_source_node.d.ts +18 -18
  112. package/lib/audio/playback/audio_source_node.d.ts +10 -10
  113. package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -4
  114. package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -21
  115. package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -27
  116. package/lib/audio/playback/player.d.ts +65 -65
  117. package/lib/audio/ui/audio_canvas_layer_comp.d.ts +68 -68
  118. package/lib/audio/ui/audio_display_control.d.ts +25 -25
  119. package/lib/audio/ui/audio_display_scroll_pane.d.ts +26 -26
  120. package/lib/audio/ui/audiosignal.d.ts +30 -30
  121. package/lib/audio/ui/common.d.ts +11 -11
  122. package/lib/audio/ui/container.d.ts +63 -63
  123. package/lib/audio/ui/livelevel.d.ts +60 -60
  124. package/lib/audio/ui/scroll_pane_horizontal.d.ts +5 -5
  125. package/lib/audio/ui/sonagram.d.ts +37 -37
  126. package/lib/db/inddb.d.ts +21 -21
  127. package/lib/dsp/utils.d.ts +19 -19
  128. package/lib/io/BinaryReader.d.ts +18 -18
  129. package/lib/io/BinaryWriter.d.ts +15 -15
  130. package/lib/io/stream.d.ts +59 -59
  131. package/lib/math/2d/geometry.d.ts +18 -18
  132. package/lib/math/complex.d.ts +17 -17
  133. package/lib/math/dft.d.ts +22 -22
  134. package/lib/media/utils.d.ts +3 -3
  135. package/lib/net/uploader.d.ts +81 -81
  136. package/lib/recorder_component.d.ts +16 -16
  137. package/lib/speechrecorder/project/project.d.ts +59 -59
  138. package/lib/speechrecorder/project/project.service.d.ts +21 -21
  139. package/lib/speechrecorder/recording.d.ts +51 -51
  140. package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -27
  141. package/lib/speechrecorder/recordings/recordings.service.d.ts +48 -48
  142. package/lib/speechrecorder/script/script.d.ts +80 -79
  143. package/lib/speechrecorder/script/script.service.d.ts +16 -16
  144. package/lib/speechrecorder/session/audiorecorder.d.ts +122 -122
  145. package/lib/speechrecorder/session/basicrecorder.d.ts +139 -139
  146. package/lib/speechrecorder/session/controlpanel.d.ts +109 -107
  147. package/lib/speechrecorder/session/item.d.ts +12 -12
  148. package/lib/speechrecorder/session/progress.d.ts +17 -17
  149. package/lib/speechrecorder/session/prompting.d.ts +121 -121
  150. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +32 -32
  151. package/lib/speechrecorder/session/recording_file_cache.d.ts +33 -33
  152. package/lib/speechrecorder/session/recording_list.d.ts +24 -24
  153. package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +15 -15
  154. package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +20 -20
  155. package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +31 -31
  156. package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +55 -55
  157. package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +7 -7
  158. package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +24 -24
  159. package/lib/speechrecorder/session/session.d.ts +15 -15
  160. package/lib/speechrecorder/session/session.service.d.ts +20 -20
  161. package/lib/speechrecorder/session/session_finished_dialog.d.ts +10 -10
  162. package/lib/speechrecorder/session/sessionmanager.d.ts +129 -123
  163. package/lib/speechrecorder/session/warning_bar.d.ts +8 -8
  164. package/lib/speechrecorder/spruploader.d.ts +11 -11
  165. package/lib/speechrecorder/startstopsignal/startstopsignal.d.ts +10 -10
  166. package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +11 -11
  167. package/lib/speechrecorderng.component.d.ts +61 -61
  168. package/lib/speechrecorderng.module.d.ts +56 -56
  169. package/lib/spr.config.d.ts +17 -17
  170. package/lib/spr.module.version.d.ts +1 -1
  171. package/lib/ui/canvas_layer_comp.d.ts +13 -13
  172. package/lib/ui/message_dialog.d.ts +10 -10
  173. package/lib/ui/recordingitem_display.d.ts +84 -84
  174. package/lib/ui/responsive_component.d.ts +9 -9
  175. package/lib/utils/scrollIntoViewToBottom.d.ts +9 -9
  176. package/lib/utils/ua-parser.d.ts +43 -43
  177. package/lib/utils/utils.d.ts +19 -19
  178. package/lib/utils/wake_lock.d.ts +23 -23
  179. package/lib/utils/wake_lock_media.d.ts +1 -1
  180. package/package.json +17 -23
  181. package/public-api.d.ts +33 -33
  182. package/esm2020/lib/action/action.mjs +0 -73
  183. package/esm2020/lib/audio/audio_data_holder.mjs +0 -264
  184. package/esm2020/lib/audio/capture/capture.mjs +0 -855
  185. package/esm2020/lib/audio/context.mjs +0 -79
  186. package/esm2020/lib/audio/impl/wavformat.mjs +0 -6
  187. package/esm2020/lib/audio/impl/wavwriter.mjs +0 -105
  188. package/esm2020/lib/audio/inddb_audio_buffer.mjs +0 -508
  189. package/esm2020/lib/audio/net_audio_buffer.mjs +0 -293
  190. package/esm2020/lib/audio/playback/audio_source_node.mjs +0 -18
  191. package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
  192. package/esm2020/lib/audio/playback/player.mjs +0 -402
  193. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
  194. package/esm2020/lib/audio/ui/container.mjs +0 -414
  195. package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
  196. package/esm2020/lib/audio/ui/sonagram.mjs +0 -900
  197. package/esm2020/lib/db/inddb.mjs +0 -120
  198. package/esm2020/lib/dsp/utils.mjs +0 -48
  199. package/esm2020/lib/io/BinaryWriter.mjs +0 -74
  200. package/esm2020/lib/math/complex.mjs +0 -58
  201. package/esm2020/lib/net/uploader.mjs +0 -367
  202. package/esm2020/lib/speechrecorder/project/project.mjs +0 -49
  203. package/esm2020/lib/speechrecorder/project/project.service.mjs +0 -64
  204. package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -216
  205. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
  206. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
  207. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +0 -666
  208. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +0 -409
  209. package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
  210. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
  211. package/esm2020/lib/speechrecorder/session/session.service.mjs +0 -69
  212. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +0 -1333
  213. package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
  214. package/esm2020/lib/ui/recordingitem_display.mjs +0 -253
  215. package/esm2020/lib/utils/ua-parser.mjs +0 -190
  216. package/esm2020/lib/utils/utils.mjs +0 -105
  217. package/esm2020/lib/utils/wake_lock.mjs +0 -114
  218. package/fesm2015/speechrecorderng.mjs +0 -17708
  219. package/fesm2015/speechrecorderng.mjs.map +0 -1
  220. package/fesm2020/speechrecorderng.mjs.map +0 -1
package/public-api.d.ts CHANGED
@@ -1,33 +1,33 @@
1
- export { SpeechrecorderngModule } from './lib/speechrecorderng.module';
2
- export { VERSION } from './lib/spr.module.version';
3
- export { SPEECHRECORDER_CONFIG } from './lib/spr.config';
4
- export { UUID } from "./lib/utils/utils";
5
- export { Action } from "./lib/action/action";
6
- export { ResponsiveComponent } from './lib/ui/responsive_component';
7
- export { MessageDialog } from "./lib/ui/message_dialog";
8
- export { ReadyStateProvider } from "./lib/recorder_component";
9
- export { AudioClip, Selection } from './lib/audio/persistor';
10
- export { WavWriter } from './lib/audio/impl/wavwriter';
11
- export { RecorderComponent } from './lib/recorder_component';
12
- export { AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType } from './lib/audio/playback/player';
13
- export { AudioRecorder, AudioRecorderComponent } from './lib/speechrecorder/session/audiorecorder';
14
- export { AudioDisplay } from './lib/audio/audio_display';
15
- export { AudioDisplayPlayer } from './lib/audio/audio_player';
16
- export { AudioClipUIContainer } from './lib/audio/ui/container';
17
- export { ScrollPaneHorizontal } from './lib/audio/ui/scroll_pane_horizontal';
18
- export { AudioDisplayScrollPane } from "./lib/audio/ui/audio_display_scroll_pane";
19
- export { AudioContextProvider } from "./lib/audio/context";
20
- export { AudioDisplayControl } from "./lib/audio/ui/audio_display_control";
21
- export { LevelBar } from './lib/audio/ui/livelevel';
22
- export { ProjectService } from './lib/speechrecorder/project/project.service';
23
- export { Session } from './lib/speechrecorder/session/session';
24
- export { SessionService } from './lib/speechrecorder/session/session.service';
25
- export { ScriptService } from './lib/speechrecorder/script/script.service';
26
- export { Script, Section, Group, PromptItem, Mediaitem, PromptPhase, Mode } from './lib/speechrecorder/script/script';
27
- export { RecordingService } from './lib/speechrecorder/recordings/recordings.service';
28
- export { SprRecordingFile } from './lib/speechrecorder/recording';
29
- export { RecordingFileService } from './lib/speechrecorder/session/recordingfile/recordingfile-service';
30
- export { RecordingFileViewComponent } from './lib/speechrecorder/session/recordingfile/recording-file-view.component';
31
- export { RecordingFileUI } from './lib/speechrecorder/session/recordingfile/recording-file-u-i.component';
32
- export { SpeechRecorderConfig, ApiType } from './lib/spr.config';
33
- export { SpeechrecorderngComponent } from './lib/speechrecorderng.component';
1
+ export { SpeechrecorderngModule } from './lib/speechrecorderng.module';
2
+ export { VERSION } from './lib/spr.module.version';
3
+ export { SPEECHRECORDER_CONFIG } from './lib/spr.config';
4
+ export { UUID } from "./lib/utils/utils";
5
+ export { Action } from "./lib/action/action";
6
+ export { ResponsiveComponent } from './lib/ui/responsive_component';
7
+ export { MessageDialog } from "./lib/ui/message_dialog";
8
+ export { ReadyStateProvider } from "./lib/recorder_component";
9
+ export { AudioClip, Selection } from './lib/audio/persistor';
10
+ export { WavWriter } from './lib/audio/impl/wavwriter';
11
+ export { RecorderComponent } from './lib/recorder_component';
12
+ export { AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType } from './lib/audio/playback/player';
13
+ export { AudioRecorder, AudioRecorderComponent } from './lib/speechrecorder/session/audiorecorder';
14
+ export { AudioDisplay } from './lib/audio/audio_display';
15
+ export { AudioDisplayPlayer } from './lib/audio/audio_player';
16
+ export { AudioClipUIContainer } from './lib/audio/ui/container';
17
+ export { ScrollPaneHorizontal } from './lib/audio/ui/scroll_pane_horizontal';
18
+ export { AudioDisplayScrollPane } from "./lib/audio/ui/audio_display_scroll_pane";
19
+ export { AudioContextProvider } from "./lib/audio/context";
20
+ export { AudioDisplayControl } from "./lib/audio/ui/audio_display_control";
21
+ export { LevelBar } from './lib/audio/ui/livelevel';
22
+ export { ProjectService } from './lib/speechrecorder/project/project.service';
23
+ export { Session } from './lib/speechrecorder/session/session';
24
+ export { SessionService } from './lib/speechrecorder/session/session.service';
25
+ export { ScriptService } from './lib/speechrecorder/script/script.service';
26
+ export { Script, Section, Group, PromptItem, Mediaitem, PromptPhase, Mode } from './lib/speechrecorder/script/script';
27
+ export { RecordingService } from './lib/speechrecorder/recordings/recordings.service';
28
+ export { SprRecordingFile } from './lib/speechrecorder/recording';
29
+ export { RecordingFileService } from './lib/speechrecorder/session/recordingfile/recordingfile-service';
30
+ export { RecordingFileViewComponent } from './lib/speechrecorder/session/recordingfile/recording-file-view.component';
31
+ export { RecordingFileUI } from './lib/speechrecorder/session/recordingfile/recording-file-u-i.component';
32
+ export { SpeechRecorderConfig, ApiType } from './lib/spr.config';
33
+ export { SpeechrecorderngComponent } from './lib/speechrecorderng.component';
@@ -1,73 +0,0 @@
1
- export class ActionEvent {
2
- constructor(_value = null) {
3
- this._value = _value;
4
- }
5
- get value() {
6
- return this._value;
7
- }
8
- }
9
- export class Action {
10
- constructor(name, value = null) {
11
- this._disabled = true;
12
- this._onAction = null;
13
- this._name = name;
14
- this._value = value;
15
- this.listeners = new Array();
16
- this.controls = [];
17
- }
18
- get value() {
19
- return this._value;
20
- }
21
- get name() {
22
- return this._name;
23
- }
24
- get onAction() {
25
- return this._onAction;
26
- }
27
- set onAction(value) {
28
- this._onAction = value;
29
- }
30
- createActionEvent(value = null) {
31
- // default:
32
- return new ActionEvent(value);
33
- }
34
- perform(value = null) {
35
- this._value = value;
36
- if (!this.disabled && this._onAction) {
37
- let ae = this.createActionEvent(value);
38
- this._onAction(ae);
39
- }
40
- }
41
- set disabled(disabled) {
42
- //console.debug("Action: "+this._name+" disabled: "+disabled)
43
- this._disabled = disabled;
44
- for (let c of this.controls) {
45
- c.disabled = this._disabled;
46
- }
47
- //let disStr=this.disabled?"disabled":"enabled";
48
- //console.log(this._name+": "+disStr);
49
- }
50
- get disabled() {
51
- return this._disabled;
52
- }
53
- addControl(ctrl, actionEventName) {
54
- if (ctrl) {
55
- if (this.controls.indexOf(ctrl) < 0) {
56
- ctrl.disabled = this.disabled;
57
- this.controls.push(ctrl);
58
- if (actionEventName) {
59
- ctrl.addEventListener(actionEventName, () => {
60
- this.perform();
61
- });
62
- }
63
- }
64
- }
65
- }
66
- removeControl(ctrl) {
67
- const i = this.controls.indexOf(ctrl);
68
- if (i >= 0) {
69
- this.controls = this.controls.splice(i, 1);
70
- }
71
- }
72
- }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2FjdGlvbi9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFdBQVc7SUFJcEIsWUFBb0IsU0FBYyxJQUFJO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7SUFFdEMsQ0FBQztJQUxELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0NBSUo7QUFNRCxNQUFNLE9BQU8sTUFBTTtJQVlmLFlBQVksSUFBVyxFQUFDLFFBQWEsSUFBSTtRQUx6QyxjQUFTLEdBQUMsSUFBSSxDQUFDO1FBQ1AsY0FBUyxHQUE2QixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUE7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBMEIsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBaEJELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBZ0JELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFpQztRQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRVUsaUJBQWlCLENBQUMsUUFBYyxJQUFJO1FBQzNDLFdBQVc7UUFDWCxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBYyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUMsS0FBSyxDQUFBO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBZ0I7UUFDMUIsNkRBQTZEO1FBQzVELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDL0I7UUFDRCxnREFBZ0Q7UUFDaEQsc0NBQXNDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFzQixFQUFFLGVBQXdCO1FBQ3ZELElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLElBQUksZUFBZSxFQUFFO29CQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztpQkFDTjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQXFCO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbiAgICBleHBvcnQgY2xhc3MgQWN0aW9uRXZlbnQ8VD4ge1xyXG4gICAgICAgIGdldCB2YWx1ZSgpOiBUfG51bGwge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3ZhbHVlOlR8bnVsbD1udWxsKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIEFjdGlvbkV2ZW50TGlzdGVuZXI8VD57XHJcbiAgICAgICAgKGFlOkFjdGlvbkV2ZW50PFQ+KTp2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBBY3Rpb248VD4ge1xyXG4gICAgICAgIGdldCB2YWx1ZSgpOiBUfG51bGwge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9uYW1lOnN0cmluZztcclxuICAgICAgICBwcml2YXRlIF92YWx1ZTpUfG51bGw7XHJcbiAgICAgICAgX2Rpc2FibGVkPXRydWU7XHJcbiAgICAgICAgcHJpdmF0ZSBfb25BY3Rpb246QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsPW51bGw7XHJcbiAgICAgICAgbGlzdGVuZXJzOkFycmF5PEFjdGlvbkV2ZW50TGlzdGVuZXI8VD4+O1xyXG4gICAgICAgIHByaXZhdGUgY29udHJvbHM6SFRNTElucHV0RWxlbWVudFtdO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihuYW1lOnN0cmluZyx2YWx1ZTpUfG51bGw9bnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWU9dmFsdWVcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSBuZXcgQXJyYXk8QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPj4oKTtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9scyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IG5hbWUoKTpzdHJpbmcge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBnZXQgb25BY3Rpb24oKTpBY3Rpb25FdmVudExpc3RlbmVyPFQ+fG51bGwge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb25BY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXQgb25BY3Rpb24odmFsdWU6QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uQWN0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcm90ZWN0ZWQgIGNyZWF0ZUFjdGlvbkV2ZW50KHZhbHVlOiBUfG51bGw9bnVsbCk6QWN0aW9uRXZlbnQ8VD4ge1xyXG4gICAgICAgICAgICAvLyBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV2ZW50KHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBlcmZvcm0odmFsdWU6IFR8bnVsbD1udWxsKTp2b2lkIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWU9dmFsdWVcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuX29uQWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWU9dGhpcy5jcmVhdGVBY3Rpb25FdmVudCh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uQWN0aW9uKGFlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkOmJvb2xlYW4pIHtcclxuICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBY3Rpb246IFwiK3RoaXMuX25hbWUrXCIgZGlzYWJsZWQ6IFwiK2Rpc2FibGVkKVxyXG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjIG9mIHRoaXMuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgIGMuZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2xldCBkaXNTdHI9dGhpcy5kaXNhYmxlZD9cImRpc2FibGVkXCI6XCJlbmFibGVkXCI7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5fbmFtZStcIjogXCIrZGlzU3RyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBkaXNhYmxlZCgpOmJvb2xlYW4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGRDb250cm9sKGN0cmw6IEhUTUxJbnB1dEVsZW1lbnQsIGFjdGlvbkV2ZW50TmFtZT86IHN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAoY3RybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbHMuaW5kZXhPZihjdHJsKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHJsLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzLnB1c2goY3RybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkV2ZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHJsLmFkZEV2ZW50TGlzdGVuZXIoYWN0aW9uRXZlbnROYW1lLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW1vdmVDb250cm9sKGN0cmw6SFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5jb250cm9scy5pbmRleE9mKGN0cmwpO1xyXG4gICAgICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzID0gdGhpcy5jb250cm9scy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4iXX0=
@@ -1,264 +0,0 @@
1
- import { Observable } from "rxjs";
2
- export class BasicAudioSource {
3
- constructor() {
4
- this._ready = false;
5
- this.onReadyListeners = new Array();
6
- }
7
- addOnReadyListener(onReady) {
8
- // let alreadyAdded=false;
9
- // for(let or of this.onReadyListeners){
10
- // if(or===onReady){
11
- // alreadyAdded=true;
12
- // break;
13
- // }
14
- // }
15
- // if(!alreadyAdded) {
16
- // this.onReadyListeners.push(onReady);
17
- // }
18
- if (!(this.onReadyListeners.find((or) => or === onReady))) {
19
- this.onReadyListeners.push(onReady);
20
- }
21
- if (this._ready) {
22
- onReady();
23
- }
24
- }
25
- removeOnReadyListener(onReady) {
26
- this.onReadyListeners = this.onReadyListeners.filter((or) => or !== onReady);
27
- }
28
- ready() {
29
- this._ready = true;
30
- for (let onReady of this.onReadyListeners) {
31
- onReady.call(this);
32
- }
33
- }
34
- }
35
- export class AudioBufferSource extends BasicAudioSource {
36
- constructor(_audioBuffer) {
37
- super();
38
- this._audioBuffer = _audioBuffer;
39
- this._duration = this._audioBuffer.length / this._audioBuffer.sampleRate;
40
- this.ready();
41
- }
42
- get audioBuffer() {
43
- return this._audioBuffer;
44
- }
45
- get duration() {
46
- return this._duration;
47
- }
48
- get sampleRate() {
49
- return this._audioBuffer.sampleRate;
50
- }
51
- get numberOfChannels() {
52
- return this._audioBuffer.numberOfChannels;
53
- }
54
- get frameLen() {
55
- return this._audioBuffer.length;
56
- }
57
- sampleCounts() {
58
- return this._audioBuffer.numberOfChannels * this._audioBuffer.length;
59
- }
60
- audioInputStream() {
61
- return new AudioBufferInputStream(this._audioBuffer);
62
- }
63
- asyncAudioInputStream() {
64
- return null;
65
- }
66
- releaseAudioData() {
67
- return new Observable(subscriber => {
68
- subscriber.next();
69
- subscriber.complete();
70
- });
71
- }
72
- randomAccessAudioStream() {
73
- return new RandomAccessAudioBufferStream(this._audioBuffer);
74
- }
75
- }
76
- export class AudioDataHolder {
77
- constructor(_audioSource) {
78
- this._audioSource = _audioSource;
79
- this._numberOfChannels = 0;
80
- this._sampleRate = 0;
81
- this._frameLen = 0;
82
- this._duration = 0;
83
- if (this._audioSource) {
84
- this._numberOfChannels = this._audioSource.numberOfChannels;
85
- this._sampleRate = this._audioSource.sampleRate;
86
- this._frameLen = this._audioSource.frameLen;
87
- this._duration = this._frameLen / this._sampleRate;
88
- }
89
- }
90
- get audioSource() {
91
- return this._audioSource;
92
- }
93
- get duration() {
94
- return this._duration;
95
- }
96
- addOnReadyListener(onReady) {
97
- this._audioSource?.addOnReadyListener(onReady);
98
- }
99
- get sampleRate() {
100
- return this._sampleRate;
101
- }
102
- get numberOfChannels() {
103
- return this._numberOfChannels;
104
- }
105
- get frameLen() {
106
- return this._frameLen;
107
- }
108
- sampleCounts() {
109
- return this._numberOfChannels * this._frameLen;
110
- }
111
- randomAccessAudioStream() {
112
- if (this._audioSource) {
113
- return this._audioSource.randomAccessAudioStream();
114
- }
115
- else {
116
- throw Error('No audio source set');
117
- }
118
- }
119
- // private frames(framePos:number,frameLen:number,bufs:Float32Array[]):number{
120
- // let read=0;
121
- // if(this._buffer){
122
- // let toRead=frameLen;
123
- // if(this._buffer.length<framePos+frameLen){
124
- // toRead=this._buffer.length-framePos;
125
- // }
126
- // for(let ch=0;ch<bufs.length;ch++){
127
- // let chData=this._buffer.getChannelData(ch);
128
- // for(let i=0;i<toRead;i++){
129
- // bufs[ch][i]=chData[framePos+i];
130
- // }
131
- // }
132
- // read=toRead;
133
- // }else if(this._arrayBuffer){
134
- // read=this._arrayBuffer.frames(framePos,frameLen,bufs);
135
- // }
136
- // return read;
137
- // }
138
- audioInputStream() {
139
- // if(this._buffer){
140
- // return new AudioBufferInputStream(this._buffer);
141
- // }
142
- // if(this._arrayBuffer){
143
- // return new ArrayAudioBufferInputStream(this._arrayBuffer);
144
- // }
145
- // return null;
146
- if (this._audioSource) {
147
- return this._audioSource.audioInputStream();
148
- }
149
- else {
150
- return null;
151
- }
152
- }
153
- asyncAudioInputStream() {
154
- // if(this._inddbAudioBuffer){
155
- // return new IndexedDbAudioInputStream(this._inddbAudioBuffer);
156
- // }else if(this._netAudioBuffer){
157
- // return new NetAudioInputStream(this._netAudioBuffer);
158
- // }
159
- // return null;
160
- if (this._audioSource) {
161
- return this._audioSource.asyncAudioInputStream();
162
- }
163
- else {
164
- return null;
165
- }
166
- }
167
- // get buffer(): AudioBuffer | null {
168
- // return this._buffer;
169
- // }
170
- //
171
- // get arrayBuffer(): ArrayAudioBuffer | null {
172
- // return this._arrayBuffer;
173
- // }
174
- //
175
- // get inddbBuffer():IndexedDbAudioBuffer|null{
176
- // return this._inddbAudioBuffer;
177
- // }
178
- //
179
- // get netBuffer():NetAudioBuffer|null{
180
- // return this._netAudioBuffer;
181
- // }
182
- releaseAudioData() {
183
- return new Observable(subscriber => {
184
- //if (this._audioSource instanceof IndexedDbAudioBuffer) {
185
- if (this._audioSource) {
186
- this._audioSource.releaseAudioData().subscribe({
187
- next: () => {
188
- subscriber.next();
189
- },
190
- complete: () => {
191
- this._audioSource = null;
192
- subscriber.complete();
193
- }, error: (err) => {
194
- subscriber.error(err);
195
- }
196
- });
197
- }
198
- else {
199
- subscriber.next();
200
- subscriber.complete();
201
- }
202
- // }else{
203
- // // Others have no persistent respectively async deletable storage, they should be finally removed by the GC
204
- // //this._buffer=null;
205
- // //this._arrayBuffer=null;
206
- // this._audioSource=null;
207
- // subscriber.next();
208
- // subscriber.complete();
209
- // }
210
- });
211
- }
212
- }
213
- export class RandomAccessAudioBufferStream {
214
- constructor(_buffer) {
215
- this._buffer = _buffer;
216
- }
217
- close() {
218
- }
219
- framesObs(framePos, frameLen, bufs) {
220
- return new Observable(subscriber => {
221
- let read = 0;
222
- let toRead = frameLen;
223
- if (this._buffer.length < framePos + frameLen) {
224
- toRead = this._buffer.length - framePos;
225
- }
226
- for (let ch = 0; ch < bufs.length; ch++) {
227
- let chData = this._buffer.getChannelData(ch);
228
- for (let i = 0; i < toRead; i++) {
229
- bufs[ch][i] = chData[framePos + i];
230
- }
231
- }
232
- read = toRead;
233
- subscriber.next(read);
234
- subscriber.complete();
235
- });
236
- }
237
- }
238
- export class AudioBufferInputStream {
239
- constructor(audioBuffer) {
240
- this.audioBuffer = audioBuffer;
241
- this.framePos = 0;
242
- }
243
- close() {
244
- }
245
- skipFrames(n) {
246
- this.framePos += n;
247
- }
248
- read(buffers) {
249
- let read = 0;
250
- let toRead = buffers[0].length;
251
- if (this.framePos + toRead > this.audioBuffer.length) {
252
- toRead = this.audioBuffer.length - this.framePos;
253
- }
254
- for (let ch = 0; ch < buffers.length; ch++) {
255
- for (let i = 0; i < toRead; i++) {
256
- buffers[ch][i] = this.audioBuffer.getChannelData(ch)[this.framePos + i];
257
- }
258
- }
259
- read = toRead;
260
- this.framePos += toRead;
261
- return read;
262
- }
263
- }
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGF0YV9ob2xkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQWlCaEMsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUFDWSxXQUFNLEdBQVMsS0FBSyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFxQixJQUFJLEtBQUssRUFBYyxDQUFDO0lBbUR6RSxDQUFDO0lBakRDLGtCQUFrQixDQUFDLE9BQXFCO1FBQ3RDLDBCQUEwQjtRQUMxQix3Q0FBd0M7UUFDeEMsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6QixhQUFhO1FBQ2IsTUFBTTtRQUNOLElBQUk7UUFDSixzQkFBc0I7UUFDdEIseUNBQXlDO1FBQ3pDLElBQUk7UUFFSixJQUFHLENBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLEtBQUcsT0FBTyxDQUFDLENBQUMsRUFBQztZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQ2IsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFxQjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUEsRUFBRSxLQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUM7UUFDakIsS0FBSSxJQUFJLE9B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QUMsQ0FBQyxDQUFDO0lBR25CLENBQUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFTO1FBQ2xCLElBQUksQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBNEI7UUFDL0IsSUFBSSxJQUFJLEdBQUMsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxNQUFNLEdBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFDO1lBQzlDLE1BQU0sR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQzlDO1FBQ0QsS0FBSSxJQUFJLEVBQUUsR0FBQyxDQUFDLEVBQUMsRUFBRSxHQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUU7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDRjtRQUNELElBQUksR0FBQyxNQUFNLENBQUM7UUFDWixJQUFJLENBQUMsUUFBUSxJQUFFLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSwgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb1NvdXJjZSB7XHJcbiAgZ2V0IGR1cmF0aW9uKCk6bnVtYmVyO1xyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlcjtcclxuICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXI7XHJcbiAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlcjtcclxuICBzYW1wbGVDb3VudHMoKTogbnVtYmVyO1xyXG4gIGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG4gIGFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpOiBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbDtcclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOlJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtO1xyXG4gIHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICBhZGRPblJlYWR5TGlzdGVuZXIob25SZWFkeTooKCk9PnZvaWQpfG51bGwpOnZvaWQ7XHJcbiAgcmVtb3ZlT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6KCgpPT52b2lkKXxudWxsKTp2b2lkO1xyXG4gIHJlYWR5KCk6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljQXVkaW9Tb3VyY2UgaW1wbGVtZW50cyBBdWRpb1NvdXJjZXtcclxuICBwcm90ZWN0ZWQgX3JlYWR5OmJvb2xlYW49ZmFsc2U7XHJcbiAgcHJvdGVjdGVkIG9uUmVhZHlMaXN0ZW5lcnM6QXJyYXk8KCgpID0+IHZvaWQpPj1uZXcgQXJyYXk8KCkgPT4gdm9pZD4oKTtcclxuXHJcbiAgYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6ICgoKSA9PiB2b2lkKSk6IHZvaWQge1xyXG4gICAgLy8gbGV0IGFscmVhZHlBZGRlZD1mYWxzZTtcclxuICAgIC8vIGZvcihsZXQgb3Igb2YgdGhpcy5vblJlYWR5TGlzdGVuZXJzKXtcclxuICAgIC8vICAgaWYob3I9PT1vblJlYWR5KXtcclxuICAgIC8vICAgICBhbHJlYWR5QWRkZWQ9dHJ1ZTtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYoIWFscmVhZHlBZGRlZCkge1xyXG4gICAgLy8gICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMucHVzaChvblJlYWR5KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZighICh0aGlzLm9uUmVhZHlMaXN0ZW5lcnMuZmluZCgob3IpPT5vcj09PW9uUmVhZHkpKSl7XHJcbiAgICAgIHRoaXMub25SZWFkeUxpc3RlbmVycy5wdXNoKG9uUmVhZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuX3JlYWR5KXtcclxuICAgICAgb25SZWFkeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6ICgoKSA9PiB2b2lkKSk6dm9pZCB7XHJcbiAgICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnM9dGhpcy5vblJlYWR5TGlzdGVuZXJzLmZpbHRlcigob3IpPT5vciE9PW9uUmVhZHkpO1xyXG4gIH1cclxuXHJcbiAgcmVhZHkoKTp2b2lke1xyXG4gICAgdGhpcy5fcmVhZHk9dHJ1ZTtcclxuICAgIGZvcihsZXQgb25SZWFkeSBvZiB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMpe1xyXG4gICAgICBvblJlYWR5LmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBhc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTogQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGw7XHJcblxyXG4gIGFic3RyYWN0IGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG5cclxuICBhYnN0cmFjdCAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IGZyYW1lTGVuKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyO1xyXG5cclxuICBhYnN0cmFjdCByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSA7XHJcblxyXG4gIGFic3RyYWN0IHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPiA7XHJcblxyXG4gIGFic3RyYWN0IHNhbXBsZUNvdW50cygpOiBudW1iZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldCBzYW1wbGVSYXRlKCk6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvQnVmZmVyU291cmNlIGV4dGVuZHMgQmFzaWNBdWRpb1NvdXJjZXtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjpudW1iZXI7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9kdXJhdGlvbj10aGlzLl9hdWRpb0J1ZmZlci5sZW5ndGgvdGhpcy5fYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIHRoaXMucmVhZHkoKTtcclxuICB9XHJcblxyXG4gIGdldCBhdWRpb0J1ZmZlcigpOiBBdWRpb0J1ZmZlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgZHVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIH1cclxuICAgIGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICB9XHJcbiAgICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgc2FtcGxlQ291bnRzKCk6IG51bWJlciB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzKnRoaXMuX2F1ZGlvQnVmZmVyLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYXVkaW9CdWZmZXIpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFjY2Vzc0F1ZGlvQnVmZmVyU3RyZWFtKHRoaXMuX2F1ZGlvQnVmZmVyKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcbiAgZnJhbWVzT2JzKGZyYW1lUG9zOm51bWJlcixmcmFtZUxlbjpudW1iZXIsYnVmczpGbG9hdDMyQXJyYXlbXSk6T2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gIGNsb3NlKCk6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvRGF0YUhvbGRlcntcclxuICBnZXQgYXVkaW9Tb3VyY2UoKTogQXVkaW9Tb3VyY2UgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICB9XHJcbiAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9udW1iZXJPZkNoYW5uZWxzOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhbXBsZVJhdGU6bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVMZW46bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246bnVtYmVyPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1ZGlvU291cmNlOkF1ZGlvU291cmNlfG51bGwpIHtcclxuICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKSB7XHJcbiAgICAgIHRoaXMuX251bWJlck9mQ2hhbm5lbHMgPSB0aGlzLl9hdWRpb1NvdXJjZS5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICB0aGlzLl9zYW1wbGVSYXRlID0gdGhpcy5fYXVkaW9Tb3VyY2Uuc2FtcGxlUmF0ZTtcclxuICAgICAgdGhpcy5fZnJhbWVMZW4gPSB0aGlzLl9hdWRpb1NvdXJjZS5mcmFtZUxlbjtcclxuICAgICAgdGhpcy5fZHVyYXRpb24gPSB0aGlzLl9mcmFtZUxlbiAvIHRoaXMuX3NhbXBsZVJhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRPblJlYWR5TGlzdGVuZXIob25SZWFkeTooKCk9PnZvaWQpfG51bGwpOnZvaWR7XHJcbiAgICB0aGlzLl9hdWRpb1NvdXJjZT8uYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zYW1wbGVSYXRlO1xyXG4gIH1cclxuICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX251bWJlck9mQ2hhbm5lbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIHNhbXBsZUNvdW50cygpOm51bWJlcntcclxuICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkNoYW5uZWxzKnRoaXMuX2ZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTpSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbXtcclxuXHJcbiAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UucmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdObyBhdWRpbyBzb3VyY2Ugc2V0Jyk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBwcml2YXRlIGZyYW1lcyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOm51bWJlcntcclxuICAvLyAgIGxldCByZWFkPTA7XHJcbiAgLy8gICBpZih0aGlzLl9idWZmZXIpe1xyXG4gIC8vICAgICBsZXQgdG9SZWFkPWZyYW1lTGVuO1xyXG4gIC8vICAgICBpZih0aGlzLl9idWZmZXIubGVuZ3RoPGZyYW1lUG9zK2ZyYW1lTGVuKXtcclxuICAvLyAgICAgICB0b1JlYWQ9dGhpcy5fYnVmZmVyLmxlbmd0aC1mcmFtZVBvcztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBmb3IobGV0IGNoPTA7Y2g8YnVmcy5sZW5ndGg7Y2grKyl7XHJcbiAgLy8gICAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gIC8vICAgICAgIGZvcihsZXQgaT0wO2k8dG9SZWFkO2krKyl7XHJcbiAgLy8gICAgICAgICBidWZzW2NoXVtpXT1jaERhdGFbZnJhbWVQb3MraV07XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIHJlYWQ9dG9SZWFkO1xyXG4gIC8vICAgfWVsc2UgaWYodGhpcy5fYXJyYXlCdWZmZXIpe1xyXG4gIC8vICAgICByZWFkPXRoaXMuX2FycmF5QnVmZmVyLmZyYW1lcyhmcmFtZVBvcyxmcmFtZUxlbixidWZzKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiByZWFkO1xyXG4gIC8vIH1cclxuXHJcbiAgYXVkaW9JbnB1dFN0cmVhbSgpOkZsb2F0MzJBcnJheUlucHV0U3RyZWFtfG51bGx7XHJcbiAgICAvLyBpZih0aGlzLl9idWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYnVmZmVyKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGlmKHRoaXMuX2FycmF5QnVmZmVyKXtcclxuICAgIC8vICAgcmV0dXJuIG5ldyBBcnJheUF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYXJyYXlCdWZmZXIpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIG51bGw7XHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UuYXVkaW9JbnB1dFN0cmVhbSgpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW18bnVsbHtcclxuICAgIC8vIGlmKHRoaXMuX2luZGRiQXVkaW9CdWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IEluZGV4ZWREYkF1ZGlvSW5wdXRTdHJlYW0odGhpcy5faW5kZGJBdWRpb0J1ZmZlcik7XHJcbiAgICAvLyB9ZWxzZSBpZih0aGlzLl9uZXRBdWRpb0J1ZmZlcil7XHJcbiAgICAvLyAgIHJldHVybiBuZXcgTmV0QXVkaW9JbnB1dFN0cmVhbSh0aGlzLl9uZXRBdWRpb0J1ZmZlcik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UuYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgYnVmZmVyKCk6IEF1ZGlvQnVmZmVyIHwgbnVsbCB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBhcnJheUJ1ZmZlcigpOiBBcnJheUF1ZGlvQnVmZmVyIHwgbnVsbCB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYXJyYXlCdWZmZXI7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gZ2V0IGluZGRiQnVmZmVyKCk6SW5kZXhlZERiQXVkaW9CdWZmZXJ8bnVsbHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBuZXRCdWZmZXIoKTpOZXRBdWRpb0J1ZmZlcnxudWxse1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX25ldEF1ZGlvQnVmZmVyO1xyXG4gIC8vIH1cclxuXHJcbiAgcmVsZWFzZUF1ZGlvRGF0YSgpOk9ic2VydmFibGU8dm9pZD57XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgIC8vaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgIEluZGV4ZWREYkF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9Tb3VyY2UucmVsZWFzZUF1ZGlvRGF0YSgpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2F1ZGlvU291cmNlID0gbnVsbDtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSwgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gfWVsc2V7XHJcbiAgICAgIC8vICAgLy8gT3RoZXJzIGhhdmUgbm8gcGVyc2lzdGVudCByZXNwZWN0aXZlbHkgYXN5bmMgZGVsZXRhYmxlIHN0b3JhZ2UsIHRoZXkgc2hvdWxkIGJlIGZpbmFsbHkgcmVtb3ZlZCBieSB0aGUgR0NcclxuICAgICAgLy8gICAvL3RoaXMuX2J1ZmZlcj1udWxsO1xyXG4gICAgICAvLyAgIC8vdGhpcy5fYXJyYXlCdWZmZXI9bnVsbDtcclxuICAgICAgLy8gICB0aGlzLl9hdWRpb1NvdXJjZT1udWxsO1xyXG4gICAgICAvLyAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAvLyAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgLy8gfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhbmRvbUFjY2Vzc0F1ZGlvQnVmZmVyU3RyZWFtIGltcGxlbWVudHMgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2J1ZmZlcjpBdWRpb0J1ZmZlcikge1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBmcmFtZXNPYnMoZnJhbWVQb3M6IG51bWJlciwgZnJhbWVMZW46IG51bWJlciwgYnVmczogRmxvYXQzMkFycmF5W10pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxudW1iZXI+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICBsZXQgcmVhZD0wO1xyXG4gICAgICAgIGxldCB0b1JlYWQ9ZnJhbWVMZW47XHJcbiAgICAgICAgaWYodGhpcy5fYnVmZmVyLmxlbmd0aDxmcmFtZVBvcytmcmFtZUxlbil7XHJcbiAgICAgICAgICB0b1JlYWQ9dGhpcy5fYnVmZmVyLmxlbmd0aC1mcmFtZVBvcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGxldCBjaD0wO2NoPGJ1ZnMubGVuZ3RoO2NoKyspe1xyXG4gICAgICAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgICAgZm9yKGxldCBpPTA7aTx0b1JlYWQ7aSsrKXtcclxuICAgICAgICAgICAgYnVmc1tjaF1baV09Y2hEYXRhW2ZyYW1lUG9zK2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZWFkPXRvUmVhZDtcclxuXHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlYWQpO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0gaW1wbGVtZW50cyBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICBwcml2YXRlIGZyYW1lUG9zPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgc2tpcEZyYW1lcyhuOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZnJhbWVQb3MrPW47XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuICAgIGxldCB0b1JlYWQ9YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICBpZih0aGlzLmZyYW1lUG9zK3RvUmVhZD50aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aCl7XHJcbiAgICAgIHRvUmVhZD10aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aC10aGlzLmZyYW1lUG9zO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBjaD0wO2NoPGJ1ZmZlcnMubGVuZ3RoO2NoKyspIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b1JlYWQ7IGkrKykge1xyXG4gICAgICAgIGJ1ZmZlcnNbY2hdW2ldPXRoaXMuYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpW3RoaXMuZnJhbWVQb3MraV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlYWQ9dG9SZWFkO1xyXG4gICAgdGhpcy5mcmFtZVBvcys9dG9SZWFkO1xyXG4gICAgcmV0dXJuIHJlYWQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=