@angular/compiler-cli 12.1.1 → 12.1.2

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 (445) hide show
  1. package/linker/src/file_linker/emit_scopes/iife_emit_scope.js +1 -1
  2. package/linker/src/file_linker/partial_linkers/partial_linker_selector.js +2 -2
  3. package/ngcc/src/dependencies/commonjs_dependency_host.js +1 -1
  4. package/ngcc/src/dependencies/dts_dependency_host.js +1 -1
  5. package/ngcc/src/dependencies/esm_dependency_host.js +1 -1
  6. package/ngcc/src/dependencies/umd_dependency_host.js +1 -1
  7. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.js +1 -1
  8. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.js +1 -1
  9. package/ngcc/src/execution/tasks/queues/parallel_task_queue.js +1 -1
  10. package/ngcc/src/execution/tasks/queues/serial_task_queue.js +1 -1
  11. package/ngcc/src/host/commonjs_host.js +1 -1
  12. package/ngcc/src/host/esm2015_host.js +1 -1
  13. package/ngcc/src/host/esm5_host.js +1 -1
  14. package/ngcc/src/host/umd_host.js +1 -1
  15. package/ngcc/src/packages/build_marker.d.ts +1 -1
  16. package/ngcc/src/packages/build_marker.js +1 -1
  17. package/ngcc/src/packages/entry_point_manifest.js +1 -1
  18. package/ngcc/src/packages/ngcc_compiler_host.js +1 -1
  19. package/ngcc/src/rendering/commonjs_rendering_formatter.js +1 -1
  20. package/ngcc/src/rendering/esm5_rendering_formatter.js +1 -1
  21. package/ngcc/src/rendering/umd_rendering_formatter.js +1 -1
  22. package/ngcc/src/writing/new_entry_point_file_writer.js +1 -1
  23. package/package.json +2 -2
  24. package/src/ngtsc/annotations/src/component.js +1 -1
  25. package/src/ngtsc/annotations/src/directive.js +1 -1
  26. package/src/ngtsc/annotations/src/ng_module.js +1 -1
  27. package/src/ngtsc/annotations/src/pipe.js +1 -1
  28. package/src/ngtsc/core/src/compiler.js +1 -1
  29. package/src/ngtsc/file_system/testing/src/mock_file_system_native.js +1 -1
  30. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.js +1 -1
  31. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.js +1 -1
  32. package/src/ngtsc/incremental/semantic_graph/src/graph.js +1 -1
  33. package/src/ngtsc/incremental/src/incremental.js +30 -4
  34. package/src/ngtsc/indexer/src/template.js +1 -1
  35. package/src/ngtsc/partial_evaluator/src/builtin.js +1 -1
  36. package/src/ngtsc/partial_evaluator/src/ts_helpers.js +1 -1
  37. package/src/ngtsc/program_driver/src/api.d.ts +20 -1
  38. package/src/ngtsc/program_driver/src/api.js +3 -2
  39. package/src/ngtsc/program_driver/src/ts_create_program_driver.d.ts +2 -2
  40. package/src/ngtsc/program_driver/src/ts_create_program_driver.js +7 -3
  41. package/src/ngtsc/reflection/src/typescript.js +4 -1
  42. package/src/ngtsc/transform/src/transform.js +1 -1
  43. package/src/ngtsc/typecheck/src/context.d.ts +2 -1
  44. package/src/ngtsc/typecheck/src/context.js +11 -3
  45. package/src/ngtsc/typecheck/src/template_semantics.js +1 -1
  46. package/src/ngtsc/typecheck/src/template_symbol_builder.js +21 -1
  47. package/src/ngtsc/typecheck/src/type_check_block.js +2 -2
  48. package/src/ngtsc/typecheck/src/type_check_file.js +1 -1
  49. package/src/ngtsc/typecheck/src/type_emitter.js +25 -6
  50. package/src/ngtsc/util/src/visitor.d.ts +1 -1
  51. package/src/ngtsc/util/src/visitor.js +1 -8
  52. package/src/version.js +1 -1
  53. package/compiler-cli.externs.js +0 -0
  54. package/index.mjs +0 -20
  55. package/linker/babel/babel.externs.js +0 -0
  56. package/linker/babel/index.mjs +0 -11
  57. package/linker/babel/src/ast/babel_ast_factory.mjs +0 -137
  58. package/linker/babel/src/ast/babel_ast_host.mjs +0 -154
  59. package/linker/babel/src/babel_declaration_scope.mjs +0 -52
  60. package/linker/babel/src/babel_plugin.mjs +0 -23
  61. package/linker/babel/src/es2015_linker_plugin.mjs +0 -158
  62. package/linker/babel/src/linker_plugin_options.mjs +0 -2
  63. package/linker/index.mjs +0 -7
  64. package/linker/linker.externs.js +0 -0
  65. package/linker/src/ast/ast_host.mjs +0 -9
  66. package/linker/src/ast/ast_value.mjs +0 -256
  67. package/linker/src/ast/typescript/typescript_ast_host.mjs +0 -156
  68. package/linker/src/ast/utils.mjs +0 -17
  69. package/linker/src/fatal_linker_error.mjs +0 -30
  70. package/linker/src/file_linker/declaration_scope.mjs +0 -9
  71. package/linker/src/file_linker/emit_scopes/emit_scope.mjs +0 -41
  72. package/linker/src/file_linker/emit_scopes/iife_emit_scope.mjs +0 -33
  73. package/linker/src/file_linker/file_linker.mjs +0 -70
  74. package/linker/src/file_linker/get_source_file.mjs +0 -28
  75. package/linker/src/file_linker/linker_environment.mjs +0 -23
  76. package/linker/src/file_linker/linker_options.mjs +0 -16
  77. package/linker/src/file_linker/needs_linking.mjs +0 -27
  78. package/linker/src/file_linker/partial_linkers/partial_class_metadata_linker_1.mjs +0 -29
  79. package/linker/src/file_linker/partial_linkers/partial_component_linker_1.mjs +0 -194
  80. package/linker/src/file_linker/partial_linkers/partial_directive_linker_1.mjs +0 -137
  81. package/linker/src/file_linker/partial_linkers/partial_factory_linker_1.mjs +0 -52
  82. package/linker/src/file_linker/partial_linkers/partial_injectable_linker_1.mjs +0 -56
  83. package/linker/src/file_linker/partial_linkers/partial_injector_linker_1.mjs +0 -38
  84. package/linker/src/file_linker/partial_linkers/partial_linker.mjs +0 -2
  85. package/linker/src/file_linker/partial_linkers/partial_linker_selector.mjs +0 -166
  86. package/linker/src/file_linker/partial_linkers/partial_ng_module_linker_1.mjs +0 -110
  87. package/linker/src/file_linker/partial_linkers/partial_pipe_linker_1.mjs +0 -42
  88. package/linker/src/file_linker/partial_linkers/util.mjs +0 -78
  89. package/linker/src/file_linker/translator.mjs +0 -23
  90. package/linker/src/linker_import_generator.mjs +0 -28
  91. package/ngcc/index.mjs +0 -16
  92. package/ngcc/main-ivy-ngcc.mjs +0 -12
  93. package/ngcc/main-ngcc.mjs +0 -32
  94. package/ngcc/ngcc.externs.js +0 -0
  95. package/ngcc/src/analysis/decoration_analyzer.mjs +0 -215
  96. package/ngcc/src/analysis/migration_host.mjs +0 -80
  97. package/ngcc/src/analysis/module_with_providers_analyzer.mjs +0 -178
  98. package/ngcc/src/analysis/ngcc_references_registry.mjs +0 -45
  99. package/ngcc/src/analysis/ngcc_trait_compiler.mjs +0 -70
  100. package/ngcc/src/analysis/private_declarations_analyzer.mjs +0 -47
  101. package/ngcc/src/analysis/switch_marker_analyzer.mjs +0 -34
  102. package/ngcc/src/analysis/types.mjs +0 -2
  103. package/ngcc/src/analysis/util.mjs +0 -19
  104. package/ngcc/src/command_line_options.mjs +0 -142
  105. package/ngcc/src/constants.mjs +0 -10
  106. package/ngcc/src/dependencies/commonjs_dependency_host.mjs +0 -87
  107. package/ngcc/src/dependencies/dependency_host.mjs +0 -102
  108. package/ngcc/src/dependencies/dependency_resolver.mjs +0 -151
  109. package/ngcc/src/dependencies/dts_dependency_host.mjs +0 -18
  110. package/ngcc/src/dependencies/esm_dependency_host.mjs +0 -286
  111. package/ngcc/src/dependencies/module_resolver.mjs +0 -233
  112. package/ngcc/src/dependencies/umd_dependency_host.mjs +0 -33
  113. package/ngcc/src/entry_point_finder/directory_walker_entry_point_finder.mjs +0 -42
  114. package/ngcc/src/entry_point_finder/entry_point_collector.mjs +0 -120
  115. package/ngcc/src/entry_point_finder/interface.mjs +0 -2
  116. package/ngcc/src/entry_point_finder/program_based_entry_point_finder.mjs +0 -91
  117. package/ngcc/src/entry_point_finder/targeted_entry_point_finder.mjs +0 -216
  118. package/ngcc/src/entry_point_finder/tracing_entry_point_finder.mjs +0 -63
  119. package/ngcc/src/entry_point_finder/utils.mjs +0 -176
  120. package/ngcc/src/execution/analyze_entry_points.mjs +0 -130
  121. package/ngcc/src/execution/api.mjs +0 -2
  122. package/ngcc/src/execution/cluster/api.mjs +0 -9
  123. package/ngcc/src/execution/cluster/executor.mjs +0 -27
  124. package/ngcc/src/execution/cluster/master.mjs +0 -261
  125. package/ngcc/src/execution/cluster/package_json_updater.mjs +0 -45
  126. package/ngcc/src/execution/cluster/utils.mjs +0 -59
  127. package/ngcc/src/execution/cluster/worker.mjs +0 -81
  128. package/ngcc/src/execution/create_compile_function.mjs +0 -62
  129. package/ngcc/src/execution/single_process_executor.mjs +0 -57
  130. package/ngcc/src/execution/tasks/api.mjs +0 -22
  131. package/ngcc/src/execution/tasks/completion.mjs +0 -61
  132. package/ngcc/src/execution/tasks/queues/base_task_queue.mjs +0 -78
  133. package/ngcc/src/execution/tasks/queues/parallel_task_queue.mjs +0 -53
  134. package/ngcc/src/execution/tasks/queues/serial_task_queue.mjs +0 -29
  135. package/ngcc/src/execution/tasks/utils.mjs +0 -114
  136. package/ngcc/src/host/commonjs_host.mjs +0 -220
  137. package/ngcc/src/host/commonjs_umd_utils.mjs +0 -186
  138. package/ngcc/src/host/delegating_host.mjs +0 -140
  139. package/ngcc/src/host/esm2015_host.mjs +0 -2293
  140. package/ngcc/src/host/esm5_host.mjs +0 -721
  141. package/ngcc/src/host/ngcc_host.mjs +0 -15
  142. package/ngcc/src/host/umd_host.mjs +0 -486
  143. package/ngcc/src/host/utils.mjs +0 -12
  144. package/ngcc/src/locking/async_locker.mjs +0 -76
  145. package/ngcc/src/locking/lock_file.mjs +0 -4
  146. package/ngcc/src/locking/lock_file_with_child_process/index.mjs +0 -78
  147. package/ngcc/src/locking/lock_file_with_child_process/unlocker.mjs +0 -34
  148. package/ngcc/src/locking/lock_file_with_child_process/util.mjs +0 -29
  149. package/ngcc/src/locking/sync_locker.mjs +0 -52
  150. package/ngcc/src/main.mjs +0 -134
  151. package/ngcc/src/migrations/migration.mjs +0 -2
  152. package/ngcc/src/migrations/missing_injectable_migration.mjs +0 -164
  153. package/ngcc/src/migrations/undecorated_child_migration.mjs +0 -61
  154. package/ngcc/src/migrations/undecorated_parent_migration.mjs +0 -86
  155. package/ngcc/src/migrations/utils.mjs +0 -117
  156. package/ngcc/src/ngcc_options.mjs +0 -119
  157. package/ngcc/src/packages/build_marker.mjs +0 -84
  158. package/ngcc/src/packages/bundle_program.mjs +0 -52
  159. package/ngcc/src/packages/configuration.mjs +0 -255
  160. package/ngcc/src/packages/entry_point.mjs +0 -239
  161. package/ngcc/src/packages/entry_point_bundle.mjs +0 -68
  162. package/ngcc/src/packages/entry_point_manifest.mjs +0 -162
  163. package/ngcc/src/packages/ngcc_compiler_host.mjs +0 -77
  164. package/ngcc/src/packages/patch_ts_expando_initializer.mjs +0 -166
  165. package/ngcc/src/packages/source_file_cache.mjs +0 -187
  166. package/ngcc/src/packages/transformer.mjs +0 -140
  167. package/ngcc/src/path_mappings.mjs +0 -13
  168. package/ngcc/src/rendering/commonjs_rendering_formatter.mjs +0 -65
  169. package/ngcc/src/rendering/dts_renderer.mjs +0 -139
  170. package/ngcc/src/rendering/esm5_rendering_formatter.mjs +0 -50
  171. package/ngcc/src/rendering/esm_rendering_formatter.mjs +0 -251
  172. package/ngcc/src/rendering/ngcc_import_rewriter.mjs +0 -32
  173. package/ngcc/src/rendering/renderer.mjs +0 -170
  174. package/ngcc/src/rendering/rendering_formatter.mjs +0 -2
  175. package/ngcc/src/rendering/source_maps.mjs +0 -54
  176. package/ngcc/src/rendering/umd_rendering_formatter.mjs +0 -292
  177. package/ngcc/src/rendering/utils.mjs +0 -20
  178. package/ngcc/src/utils.mjs +0 -144
  179. package/ngcc/src/writing/cleaning/cleaning_strategies.mjs +0 -61
  180. package/ngcc/src/writing/cleaning/package_cleaner.mjs +0 -67
  181. package/ngcc/src/writing/cleaning/utils.mjs +0 -16
  182. package/ngcc/src/writing/file_writer.mjs +0 -2
  183. package/ngcc/src/writing/in_place_file_writer.mjs +0 -62
  184. package/ngcc/src/writing/new_entry_point_file_writer.mjs +0 -161
  185. package/ngcc/src/writing/package_json_updater.mjs +0 -144
  186. package/src/diagnostics/translate_diagnostics.mjs +0 -47
  187. package/src/diagnostics/typescript_version.mjs +0 -79
  188. package/src/extract_i18n.mjs +0 -46
  189. package/src/language_services.mjs +0 -18
  190. package/src/main.mjs +0 -185
  191. package/src/metadata/bundle_index_host.mjs +0 -107
  192. package/src/metadata/bundler.mjs +0 -556
  193. package/src/metadata/collector.mjs +0 -701
  194. package/src/metadata/evaluator.mjs +0 -643
  195. package/src/metadata/index.mjs +0 -11
  196. package/src/metadata/index_writer.mjs +0 -44
  197. package/src/metadata/schema.mjs +0 -102
  198. package/src/metadata/symbols.mjs +0 -117
  199. package/src/ngtsc/annotations/annotations.externs.js +0 -0
  200. package/src/ngtsc/annotations/index.mjs +0 -15
  201. package/src/ngtsc/annotations/src/api.mjs +0 -9
  202. package/src/ngtsc/annotations/src/component.mjs +0 -1068
  203. package/src/ngtsc/annotations/src/diagnostics.mjs +0 -147
  204. package/src/ngtsc/annotations/src/directive.mjs +0 -692
  205. package/src/ngtsc/annotations/src/factory.mjs +0 -17
  206. package/src/ngtsc/annotations/src/injectable.mjs +0 -260
  207. package/src/ngtsc/annotations/src/metadata.mjs +0 -145
  208. package/src/ngtsc/annotations/src/ng_module.mjs +0 -565
  209. package/src/ngtsc/annotations/src/pipe.mjs +0 -151
  210. package/src/ngtsc/annotations/src/references_registry.mjs +0 -16
  211. package/src/ngtsc/annotations/src/util.mjs +0 -495
  212. package/src/ngtsc/core/api/index.mjs +0 -12
  213. package/src/ngtsc/core/api/src/adapter.mjs +0 -9
  214. package/src/ngtsc/core/api/src/interfaces.mjs +0 -9
  215. package/src/ngtsc/core/api/src/options.mjs +0 -9
  216. package/src/ngtsc/core/api/src/public_options.mjs +0 -9
  217. package/src/ngtsc/core/api.externs.js +0 -0
  218. package/src/ngtsc/core/core.externs.js +0 -0
  219. package/src/ngtsc/core/index.mjs +0 -10
  220. package/src/ngtsc/core/src/compiler.mjs +0 -917
  221. package/src/ngtsc/core/src/config.mjs +0 -15
  222. package/src/ngtsc/core/src/host.mjs +0 -229
  223. package/src/ngtsc/cycles/cycles.externs.js +0 -0
  224. package/src/ngtsc/cycles/index.mjs +0 -10
  225. package/src/ngtsc/cycles/src/analyzer.mjs +0 -60
  226. package/src/ngtsc/cycles/src/imports.mjs +0 -152
  227. package/src/ngtsc/diagnostics/diagnostics.externs.js +0 -0
  228. package/src/ngtsc/diagnostics/index.mjs +0 -11
  229. package/src/ngtsc/diagnostics/src/error.mjs +0 -51
  230. package/src/ngtsc/diagnostics/src/error_code.mjs +0 -198
  231. package/src/ngtsc/diagnostics/src/util.mjs +0 -21
  232. package/src/ngtsc/entry_point/entry_point.externs.js +0 -0
  233. package/src/ngtsc/entry_point/index.mjs +0 -12
  234. package/src/ngtsc/entry_point/src/generator.mjs +0 -35
  235. package/src/ngtsc/entry_point/src/logic.mjs +0 -35
  236. package/src/ngtsc/entry_point/src/private_export_checker.mjs +0 -122
  237. package/src/ngtsc/entry_point/src/reference_graph.mjs +0 -73
  238. package/src/ngtsc/file_system/file_system.externs.js +0 -0
  239. package/src/ngtsc/file_system/index.mjs +0 -13
  240. package/src/ngtsc/file_system/src/compiler_host.mjs +0 -64
  241. package/src/ngtsc/file_system/src/helpers.mjs +0 -99
  242. package/src/ngtsc/file_system/src/invalid_file_system.mjs +0 -95
  243. package/src/ngtsc/file_system/src/logical.mjs +0 -84
  244. package/src/ngtsc/file_system/src/node_js_file_system.mjs +0 -142
  245. package/src/ngtsc/file_system/src/types.mjs +0 -9
  246. package/src/ngtsc/file_system/src/util.mjs +0 -22
  247. package/src/ngtsc/file_system/testing/index.mjs +0 -13
  248. package/src/ngtsc/file_system/testing/src/mock_file_system.mjs +0 -293
  249. package/src/ngtsc/file_system/testing/src/mock_file_system_native.mjs +0 -57
  250. package/src/ngtsc/file_system/testing/src/mock_file_system_posix.mjs +0 -38
  251. package/src/ngtsc/file_system/testing/src/mock_file_system_windows.mjs +0 -38
  252. package/src/ngtsc/file_system/testing/src/test_helper.mjs +0 -108
  253. package/src/ngtsc/file_system/testing/testing.externs.js +0 -0
  254. package/src/ngtsc/imports/imports.externs.js +0 -0
  255. package/src/ngtsc/imports/index.mjs +0 -14
  256. package/src/ngtsc/imports/src/alias.mjs +0 -137
  257. package/src/ngtsc/imports/src/core.mjs +0 -78
  258. package/src/ngtsc/imports/src/default.mjs +0 -135
  259. package/src/ngtsc/imports/src/emitter.mjs +0 -266
  260. package/src/ngtsc/imports/src/find_export.mjs +0 -56
  261. package/src/ngtsc/imports/src/reexport.mjs +0 -9
  262. package/src/ngtsc/imports/src/references.mjs +0 -137
  263. package/src/ngtsc/imports/src/resolver.mjs +0 -24
  264. package/src/ngtsc/incremental/api.externs.js +0 -0
  265. package/src/ngtsc/incremental/api.mjs +0 -9
  266. package/src/ngtsc/incremental/incremental.externs.js +0 -0
  267. package/src/ngtsc/incremental/index.mjs +0 -12
  268. package/src/ngtsc/incremental/semantic_graph/index.mjs +0 -12
  269. package/src/ngtsc/incremental/semantic_graph/semantic_graph.externs.js +0 -0
  270. package/src/ngtsc/incremental/semantic_graph/src/api.mjs +0 -36
  271. package/src/ngtsc/incremental/semantic_graph/src/graph.mjs +0 -237
  272. package/src/ngtsc/incremental/semantic_graph/src/type_parameters.mjs +0 -40
  273. package/src/ngtsc/incremental/semantic_graph/src/util.mjs +0 -69
  274. package/src/ngtsc/incremental/src/dependency_tracking.mjs +0 -117
  275. package/src/ngtsc/incremental/src/incremental.mjs +0 -271
  276. package/src/ngtsc/incremental/src/noop.mjs +0 -13
  277. package/src/ngtsc/incremental/src/state.mjs +0 -17
  278. package/src/ngtsc/incremental/src/strategy.mjs +0 -76
  279. package/src/ngtsc/indexer/index.mjs +0 -11
  280. package/src/ngtsc/indexer/indexer.externs.js +0 -0
  281. package/src/ngtsc/indexer/src/api.mjs +0 -30
  282. package/src/ngtsc/indexer/src/context.mjs +0 -25
  283. package/src/ngtsc/indexer/src/template.mjs +0 -303
  284. package/src/ngtsc/indexer/src/transform.mjs +0 -51
  285. package/src/ngtsc/logging/index.mjs +0 -10
  286. package/src/ngtsc/logging/logging.externs.js +0 -0
  287. package/src/ngtsc/logging/src/console_logger.mjs +0 -43
  288. package/src/ngtsc/logging/src/logger.mjs +0 -15
  289. package/src/ngtsc/logging/testing/index.mjs +0 -9
  290. package/src/ngtsc/logging/testing/src/mock_logger.mjs +0 -32
  291. package/src/ngtsc/logging/testing/testing.externs.js +0 -0
  292. package/src/ngtsc/metadata/index.mjs +0 -15
  293. package/src/ngtsc/metadata/metadata.externs.js +0 -0
  294. package/src/ngtsc/metadata/src/api.mjs +0 -13
  295. package/src/ngtsc/metadata/src/dts.mjs +0 -143
  296. package/src/ngtsc/metadata/src/inheritance.mjs +0 -71
  297. package/src/ngtsc/metadata/src/property_mapping.mjs +0 -136
  298. package/src/ngtsc/metadata/src/registry.mjs +0 -80
  299. package/src/ngtsc/metadata/src/resource_registry.mjs +0 -81
  300. package/src/ngtsc/metadata/src/util.mjs +0 -200
  301. package/src/ngtsc/partial_evaluator/index.mjs +0 -12
  302. package/src/ngtsc/partial_evaluator/partial_evaluator.externs.js +0 -0
  303. package/src/ngtsc/partial_evaluator/src/builtin.mjs +0 -65
  304. package/src/ngtsc/partial_evaluator/src/diagnostics.mjs +0 -174
  305. package/src/ngtsc/partial_evaluator/src/dynamic.mjs +0 -94
  306. package/src/ngtsc/partial_evaluator/src/interface.mjs +0 -27
  307. package/src/ngtsc/partial_evaluator/src/interpreter.mjs +0 -719
  308. package/src/ngtsc/partial_evaluator/src/known_declaration.mjs +0 -43
  309. package/src/ngtsc/partial_evaluator/src/result.mjs +0 -50
  310. package/src/ngtsc/partial_evaluator/src/ts_helpers.mjs +0 -72
  311. package/src/ngtsc/perf/index.mjs +0 -11
  312. package/src/ngtsc/perf/perf.externs.js +0 -0
  313. package/src/ngtsc/perf/src/api.mjs +0 -278
  314. package/src/ngtsc/perf/src/clock.mjs +0 -15
  315. package/src/ngtsc/perf/src/noop.mjs +0 -21
  316. package/src/ngtsc/perf/src/recorder.mjs +0 -125
  317. package/src/ngtsc/program.mjs +0 -271
  318. package/src/ngtsc/program_driver/index.mjs +0 -10
  319. package/src/ngtsc/program_driver/program_driver.externs.js +0 -0
  320. package/src/ngtsc/program_driver/src/api.mjs +0 -22
  321. package/src/ngtsc/program_driver/src/ts_create_program_driver.mjs +0 -164
  322. package/src/ngtsc/reflection/index.mjs +0 -12
  323. package/src/ngtsc/reflection/reflection.externs.js +0 -0
  324. package/src/ngtsc/reflection/src/host.mjs +0 -73
  325. package/src/ngtsc/reflection/src/type_to_value.mjs +0 -243
  326. package/src/ngtsc/reflection/src/typescript.mjs +0 -608
  327. package/src/ngtsc/reflection/src/util.mjs +0 -21
  328. package/src/ngtsc/resource/index.mjs +0 -9
  329. package/src/ngtsc/resource/resource.externs.js +0 -0
  330. package/src/ngtsc/resource/src/loader.mjs +0 -242
  331. package/src/ngtsc/routing/index.mjs +0 -11
  332. package/src/ngtsc/routing/routing.externs.js +0 -0
  333. package/src/ngtsc/routing/src/analyzer.mjs +0 -69
  334. package/src/ngtsc/routing/src/lazy.mjs +0 -168
  335. package/src/ngtsc/routing/src/route.mjs +0 -51
  336. package/src/ngtsc/scope/index.mjs +0 -12
  337. package/src/ngtsc/scope/scope.externs.js +0 -0
  338. package/src/ngtsc/scope/src/api.mjs +0 -9
  339. package/src/ngtsc/scope/src/component_scope.mjs +0 -31
  340. package/src/ngtsc/scope/src/dependency.mjs +0 -134
  341. package/src/ngtsc/scope/src/local.mjs +0 -531
  342. package/src/ngtsc/scope/src/typecheck.mjs +0 -83
  343. package/src/ngtsc/shims/api.externs.js +0 -0
  344. package/src/ngtsc/shims/api.mjs +0 -2
  345. package/src/ngtsc/shims/index.mjs +0 -14
  346. package/src/ngtsc/shims/shims.externs.js +0 -0
  347. package/src/ngtsc/shims/src/adapter.mjs +0 -188
  348. package/src/ngtsc/shims/src/expando.mjs +0 -102
  349. package/src/ngtsc/shims/src/factory_generator.mjs +0 -265
  350. package/src/ngtsc/shims/src/reference_tagger.mjs +0 -67
  351. package/src/ngtsc/shims/src/summary_generator.mjs +0 -64
  352. package/src/ngtsc/shims/src/util.mjs +0 -26
  353. package/src/ngtsc/sourcemaps/index.mjs +0 -11
  354. package/src/ngtsc/sourcemaps/sourcemaps.externs.js +0 -0
  355. package/src/ngtsc/sourcemaps/src/content_origin.mjs +0 -35
  356. package/src/ngtsc/sourcemaps/src/raw_source_map.mjs +0 -2
  357. package/src/ngtsc/sourcemaps/src/segment_marker.mjs +0 -40
  358. package/src/ngtsc/sourcemaps/src/source_file.mjs +0 -459
  359. package/src/ngtsc/sourcemaps/src/source_file_loader.mjs +0 -213
  360. package/src/ngtsc/switch/index.mjs +0 -9
  361. package/src/ngtsc/switch/src/switch.mjs +0 -115
  362. package/src/ngtsc/switch/switch.externs.js +0 -0
  363. package/src/ngtsc/transform/index.mjs +0 -14
  364. package/src/ngtsc/transform/src/alias.mjs +0 -30
  365. package/src/ngtsc/transform/src/api.mjs +0 -63
  366. package/src/ngtsc/transform/src/compilation.mjs +0 -514
  367. package/src/ngtsc/transform/src/declaration.mjs +0 -182
  368. package/src/ngtsc/transform/src/trait.mjs +0 -95
  369. package/src/ngtsc/transform/src/transform.mjs +0 -298
  370. package/src/ngtsc/transform/src/utils.mjs +0 -57
  371. package/src/ngtsc/transform/transform.externs.js +0 -0
  372. package/src/ngtsc/translator/index.mjs +0 -14
  373. package/src/ngtsc/translator/src/api/ast_factory.mjs +0 -9
  374. package/src/ngtsc/translator/src/api/import_generator.mjs +0 -9
  375. package/src/ngtsc/translator/src/context.mjs +0 -24
  376. package/src/ngtsc/translator/src/import_manager.mjs +0 -48
  377. package/src/ngtsc/translator/src/translator.mjs +0 -317
  378. package/src/ngtsc/translator/src/type_translator.mjs +0 -204
  379. package/src/ngtsc/translator/src/typescript_ast_factory.mjs +0 -211
  380. package/src/ngtsc/translator/src/typescript_translator.mjs +0 -17
  381. package/src/ngtsc/translator/translator.externs.js +0 -0
  382. package/src/ngtsc/tsc_plugin.mjs +0 -98
  383. package/src/ngtsc/typecheck/api/api.externs.js +0 -0
  384. package/src/ngtsc/typecheck/api/api.mjs +0 -9
  385. package/src/ngtsc/typecheck/api/checker.mjs +0 -31
  386. package/src/ngtsc/typecheck/api/completion.mjs +0 -16
  387. package/src/ngtsc/typecheck/api/context.mjs +0 -9
  388. package/src/ngtsc/typecheck/api/index.mjs +0 -14
  389. package/src/ngtsc/typecheck/api/scope.mjs +0 -9
  390. package/src/ngtsc/typecheck/api/symbols.mjs +0 -22
  391. package/src/ngtsc/typecheck/diagnostics/diagnostics.externs.js +0 -0
  392. package/src/ngtsc/typecheck/diagnostics/index.mjs +0 -10
  393. package/src/ngtsc/typecheck/diagnostics/src/diagnostic.mjs +0 -99
  394. package/src/ngtsc/typecheck/diagnostics/src/id.mjs +0 -23
  395. package/src/ngtsc/typecheck/index.mjs +0 -12
  396. package/src/ngtsc/typecheck/src/checker.mjs +0 -591
  397. package/src/ngtsc/typecheck/src/comments.mjs +0 -159
  398. package/src/ngtsc/typecheck/src/completion.mjs +0 -155
  399. package/src/ngtsc/typecheck/src/context.mjs +0 -350
  400. package/src/ngtsc/typecheck/src/diagnostics.mjs +0 -95
  401. package/src/ngtsc/typecheck/src/dom.mjs +0 -68
  402. package/src/ngtsc/typecheck/src/environment.mjs +0 -146
  403. package/src/ngtsc/typecheck/src/expression.mjs +0 -412
  404. package/src/ngtsc/typecheck/src/line_mappings.mjs +0 -60
  405. package/src/ngtsc/typecheck/src/oob.mjs +0 -112
  406. package/src/ngtsc/typecheck/src/shim.mjs +0 -37
  407. package/src/ngtsc/typecheck/src/source.mjs +0 -74
  408. package/src/ngtsc/typecheck/src/tcb_util.mjs +0 -135
  409. package/src/ngtsc/typecheck/src/template_semantics.mjs +0 -34
  410. package/src/ngtsc/typecheck/src/template_symbol_builder.mjs +0 -485
  411. package/src/ngtsc/typecheck/src/ts_util.mjs +0 -157
  412. package/src/ngtsc/typecheck/src/type_check_block.mjs +0 -1770
  413. package/src/ngtsc/typecheck/src/type_check_file.mjs +0 -65
  414. package/src/ngtsc/typecheck/src/type_constructor.mjs +0 -227
  415. package/src/ngtsc/typecheck/src/type_emitter.mjs +0 -127
  416. package/src/ngtsc/typecheck/src/type_parameter_emitter.mjs +0 -93
  417. package/src/ngtsc/typecheck/typecheck.externs.js +0 -0
  418. package/src/ngtsc/util/src/path.mjs +0 -18
  419. package/src/ngtsc/util/src/typescript.mjs +0 -143
  420. package/src/ngtsc/util/src/visitor.mjs +0 -107
  421. package/src/ngtsc/util/util.externs.js +0 -0
  422. package/src/ngtsc/xi18n/index.mjs +0 -9
  423. package/src/ngtsc/xi18n/src/context.mjs +0 -9
  424. package/src/ngtsc/xi18n/xi18n.externs.js +0 -0
  425. package/src/perform_compile.mjs +0 -275
  426. package/src/perform_watch.mjs +0 -247
  427. package/src/tooling.mjs +0 -32
  428. package/src/transformers/api.mjs +0 -27
  429. package/src/transformers/compiler_host.mjs +0 -593
  430. package/src/transformers/downlevel_decorators_transform.mjs +0 -507
  431. package/src/transformers/entry_points.mjs +0 -10
  432. package/src/transformers/i18n.mjs +0 -59
  433. package/src/transformers/inline_resources.mjs +0 -269
  434. package/src/transformers/lower_expressions.mjs +0 -336
  435. package/src/transformers/metadata_cache.mjs +0 -53
  436. package/src/transformers/metadata_reader.mjs +0 -104
  437. package/src/transformers/node_emitter.mjs +0 -606
  438. package/src/transformers/node_emitter_transform.mjs +0 -78
  439. package/src/transformers/patch_alias_reference_resolution.mjs +0 -109
  440. package/src/transformers/program.mjs +0 -887
  441. package/src/transformers/r3_metadata_transform.mjs +0 -46
  442. package/src/transformers/r3_transform.mjs +0 -29
  443. package/src/transformers/util.mjs +0 -89
  444. package/src/typescript_support.mjs +0 -57
  445. package/src/version.mjs +0 -15
@@ -1,336 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { createLoweredSymbol, isLoweredSymbol } from '@angular/compiler';
9
- import * as ts from 'typescript';
10
- import { isMetadataGlobalReferenceExpression } from '../metadata/index';
11
- function toMap(items, select) {
12
- return new Map(items.map(i => [select(i), i]));
13
- }
14
- // We will never lower expressions in a nested lexical scope so avoid entering them.
15
- // This also avoids a bug in TypeScript 2.3 where the lexical scopes get out of sync
16
- // when using visitEachChild.
17
- function isLexicalScope(node) {
18
- switch (node.kind) {
19
- case ts.SyntaxKind.ArrowFunction:
20
- case ts.SyntaxKind.FunctionExpression:
21
- case ts.SyntaxKind.FunctionDeclaration:
22
- case ts.SyntaxKind.ClassExpression:
23
- case ts.SyntaxKind.ClassDeclaration:
24
- case ts.SyntaxKind.FunctionType:
25
- case ts.SyntaxKind.TypeLiteral:
26
- case ts.SyntaxKind.ArrayType:
27
- return true;
28
- }
29
- return false;
30
- }
31
- function transformSourceFile(sourceFile, requests, context) {
32
- const inserts = [];
33
- // Calculate the range of interesting locations. The transform will only visit nodes in this
34
- // range to improve the performance on large files.
35
- const locations = Array.from(requests.keys());
36
- const min = Math.min(...locations);
37
- const max = Math.max(...locations);
38
- // Visit nodes matching the request and synthetic nodes added by tsickle
39
- function shouldVisit(pos, end) {
40
- return (pos <= max && end >= min) || pos == -1;
41
- }
42
- function visitSourceFile(sourceFile) {
43
- function topLevelStatement(node) {
44
- const declarations = [];
45
- function visitNode(node) {
46
- // Get the original node before tsickle
47
- const { pos, end, kind, parent: originalParent } = ts.getOriginalNode(node);
48
- const nodeRequest = requests.get(pos);
49
- if (nodeRequest && nodeRequest.kind == kind && nodeRequest.end == end) {
50
- // This node is requested to be rewritten as a reference to the exported name.
51
- if (originalParent && originalParent.kind === ts.SyntaxKind.VariableDeclaration) {
52
- // As the value represents the whole initializer of a variable declaration,
53
- // just refer to that variable. This e.g. helps to preserve closure comments
54
- // at the right place.
55
- const varParent = originalParent;
56
- if (varParent.name.kind === ts.SyntaxKind.Identifier) {
57
- const varName = varParent.name.text;
58
- const exportName = nodeRequest.name;
59
- declarations.push({
60
- name: exportName,
61
- node: ts.createIdentifier(varName),
62
- order: 1 /* AfterStmt */
63
- });
64
- return node;
65
- }
66
- }
67
- // Record that the node needs to be moved to an exported variable with the given name
68
- const exportName = nodeRequest.name;
69
- declarations.push({ name: exportName, node, order: 0 /* BeforeStmt */ });
70
- return ts.createIdentifier(exportName);
71
- }
72
- let result = node;
73
- if (shouldVisit(pos, end) && !isLexicalScope(node)) {
74
- result = ts.visitEachChild(node, visitNode, context);
75
- }
76
- return result;
77
- }
78
- // Get the original node before tsickle
79
- const { pos, end } = ts.getOriginalNode(node);
80
- let resultStmt;
81
- if (shouldVisit(pos, end)) {
82
- resultStmt = ts.visitEachChild(node, visitNode, context);
83
- }
84
- else {
85
- resultStmt = node;
86
- }
87
- if (declarations.length) {
88
- inserts.push({ relativeTo: resultStmt, declarations });
89
- }
90
- return resultStmt;
91
- }
92
- let newStatements = sourceFile.statements.map(topLevelStatement);
93
- if (inserts.length) {
94
- // Insert the declarations relative to the rewritten statement that references them.
95
- const insertMap = toMap(inserts, i => i.relativeTo);
96
- const tmpStatements = [];
97
- newStatements.forEach(statement => {
98
- const insert = insertMap.get(statement);
99
- if (insert) {
100
- const before = insert.declarations.filter(d => d.order === 0 /* BeforeStmt */);
101
- if (before.length) {
102
- tmpStatements.push(createVariableStatementForDeclarations(before));
103
- }
104
- tmpStatements.push(statement);
105
- const after = insert.declarations.filter(d => d.order === 1 /* AfterStmt */);
106
- if (after.length) {
107
- tmpStatements.push(createVariableStatementForDeclarations(after));
108
- }
109
- }
110
- else {
111
- tmpStatements.push(statement);
112
- }
113
- });
114
- // Insert an exports clause to export the declarations
115
- tmpStatements.push(ts.createExportDeclaration(
116
- /* decorators */ undefined,
117
- /* modifiers */ undefined, ts.createNamedExports(inserts
118
- .reduce((accumulator, insert) => [...accumulator, ...insert.declarations], [])
119
- .map(declaration => ts.createExportSpecifier(
120
- /* propertyName */ undefined, declaration.name)))));
121
- newStatements = tmpStatements;
122
- }
123
- const newSf = ts.updateSourceFileNode(sourceFile, ts.setTextRange(ts.createNodeArray(newStatements), sourceFile.statements));
124
- if (!(sourceFile.flags & ts.NodeFlags.Synthesized)) {
125
- newSf.flags &= ~ts.NodeFlags.Synthesized;
126
- }
127
- return newSf;
128
- }
129
- return visitSourceFile(sourceFile);
130
- }
131
- function createVariableStatementForDeclarations(declarations) {
132
- const varDecls = declarations.map(i => ts.createVariableDeclaration(i.name, /* type */ undefined, i.node));
133
- return ts.createVariableStatement(
134
- /* modifiers */ undefined, ts.createVariableDeclarationList(varDecls, ts.NodeFlags.Const));
135
- }
136
- export function getExpressionLoweringTransformFactory(requestsMap, program) {
137
- // Return the factory
138
- return (context) => (sourceFile) => {
139
- // We need to use the original SourceFile for reading metadata, and not the transformed one.
140
- const originalFile = program.getSourceFile(sourceFile.fileName);
141
- if (originalFile) {
142
- const requests = requestsMap.getRequests(originalFile);
143
- if (requests && requests.size) {
144
- return transformSourceFile(sourceFile, requests, context);
145
- }
146
- }
147
- return sourceFile;
148
- };
149
- }
150
- function isEligibleForLowering(node) {
151
- if (node) {
152
- switch (node.kind) {
153
- case ts.SyntaxKind.SourceFile:
154
- case ts.SyntaxKind.Decorator:
155
- // Lower expressions that are local to the module scope or
156
- // in a decorator.
157
- return true;
158
- case ts.SyntaxKind.ClassDeclaration:
159
- case ts.SyntaxKind.InterfaceDeclaration:
160
- case ts.SyntaxKind.EnumDeclaration:
161
- case ts.SyntaxKind.FunctionDeclaration:
162
- // Don't lower expressions in a declaration.
163
- return false;
164
- case ts.SyntaxKind.VariableDeclaration:
165
- const isExported = (ts.getCombinedModifierFlags(node) &
166
- ts.ModifierFlags.Export) == 0;
167
- // This might be unnecessary, as the variable might be exported and only used as a reference
168
- // in another expression. However, the variable also might be involved in provider
169
- // definitions. If that's the case, there is a specific token (`ROUTES`) which the compiler
170
- // attempts to understand deeply. Sub-expressions within that token (`loadChildren` for
171
- // example) might also require lowering even if the top-level declaration is already
172
- // properly exported.
173
- const varNode = node;
174
- return isExported ||
175
- (varNode.initializer !== undefined &&
176
- (ts.isObjectLiteralExpression(varNode.initializer) ||
177
- ts.isArrayLiteralExpression(varNode.initializer) ||
178
- ts.isCallExpression(varNode.initializer)));
179
- }
180
- return isEligibleForLowering(node.parent);
181
- }
182
- return true;
183
- }
184
- function isPrimitive(value) {
185
- return Object(value) !== value;
186
- }
187
- function isRewritten(value) {
188
- return isMetadataGlobalReferenceExpression(value) && isLoweredSymbol(value.name);
189
- }
190
- function isLiteralFieldNamed(node, names) {
191
- if (node.parent && node.parent.kind == ts.SyntaxKind.PropertyAssignment) {
192
- const property = node.parent;
193
- if (property.parent && property.parent.kind == ts.SyntaxKind.ObjectLiteralExpression &&
194
- property.name && property.name.kind == ts.SyntaxKind.Identifier) {
195
- const propertyName = property.name;
196
- return names.has(propertyName.text);
197
- }
198
- }
199
- return false;
200
- }
201
- export class LowerMetadataTransform {
202
- constructor(lowerableFieldNames) {
203
- this.requests = new Map();
204
- this.lowerableFieldNames = new Set(lowerableFieldNames);
205
- }
206
- // RequestMap
207
- getRequests(sourceFile) {
208
- let result = this.requests.get(sourceFile.fileName);
209
- if (!result) {
210
- // Force the metadata for this source file to be collected which
211
- // will recursively call start() populating the request map;
212
- this.cache.getMetadata(sourceFile);
213
- // If we still don't have the requested metadata, the file is not a module
214
- // or is a declaration file so return an empty map.
215
- result = this.requests.get(sourceFile.fileName) || new Map();
216
- }
217
- return result;
218
- }
219
- // MetadataTransformer
220
- connect(cache) {
221
- this.cache = cache;
222
- }
223
- start(sourceFile) {
224
- let identNumber = 0;
225
- const freshIdent = () => createLoweredSymbol(identNumber++);
226
- const requests = new Map();
227
- this.requests.set(sourceFile.fileName, requests);
228
- const replaceNode = (node) => {
229
- const name = freshIdent();
230
- requests.set(node.pos, { name, kind: node.kind, location: node.pos, end: node.end });
231
- return { __symbolic: 'reference', name };
232
- };
233
- const isExportedSymbol = (() => {
234
- let exportTable;
235
- return (node) => {
236
- if (node.kind == ts.SyntaxKind.Identifier) {
237
- const ident = node;
238
- if (!exportTable) {
239
- exportTable = createExportTableFor(sourceFile);
240
- }
241
- return exportTable.has(ident.text);
242
- }
243
- return false;
244
- };
245
- })();
246
- const isExportedPropertyAccess = (node) => {
247
- if (node.kind === ts.SyntaxKind.PropertyAccessExpression) {
248
- const pae = node;
249
- if (isExportedSymbol(pae.expression)) {
250
- return true;
251
- }
252
- }
253
- return false;
254
- };
255
- const hasLowerableParentCache = new Map();
256
- const shouldBeLowered = (node) => {
257
- if (node === undefined) {
258
- return false;
259
- }
260
- let lowerable = false;
261
- if ((node.kind === ts.SyntaxKind.ArrowFunction ||
262
- node.kind === ts.SyntaxKind.FunctionExpression) &&
263
- isEligibleForLowering(node)) {
264
- lowerable = true;
265
- }
266
- else if (isLiteralFieldNamed(node, this.lowerableFieldNames) && isEligibleForLowering(node) &&
267
- !isExportedSymbol(node) && !isExportedPropertyAccess(node)) {
268
- lowerable = true;
269
- }
270
- return lowerable;
271
- };
272
- const hasLowerableParent = (node) => {
273
- if (node === undefined) {
274
- return false;
275
- }
276
- if (!hasLowerableParentCache.has(node)) {
277
- hasLowerableParentCache.set(node, shouldBeLowered(node.parent) || hasLowerableParent(node.parent));
278
- }
279
- return hasLowerableParentCache.get(node);
280
- };
281
- const isLowerable = (node) => {
282
- if (node === undefined) {
283
- return false;
284
- }
285
- return shouldBeLowered(node) && !hasLowerableParent(node);
286
- };
287
- return (value, node) => {
288
- if (!isPrimitive(value) && !isRewritten(value) && isLowerable(node)) {
289
- return replaceNode(node);
290
- }
291
- return value;
292
- };
293
- }
294
- }
295
- function createExportTableFor(sourceFile) {
296
- const exportTable = new Set();
297
- // Lazily collect all the exports from the source file
298
- ts.forEachChild(sourceFile, function scan(node) {
299
- switch (node.kind) {
300
- case ts.SyntaxKind.ClassDeclaration:
301
- case ts.SyntaxKind.FunctionDeclaration:
302
- case ts.SyntaxKind.InterfaceDeclaration:
303
- if ((ts.getCombinedModifierFlags(node) & ts.ModifierFlags.Export) != 0) {
304
- const classDeclaration = node;
305
- const name = classDeclaration.name;
306
- if (name)
307
- exportTable.add(name.text);
308
- }
309
- break;
310
- case ts.SyntaxKind.VariableStatement:
311
- const variableStatement = node;
312
- for (const declaration of variableStatement.declarationList.declarations) {
313
- scan(declaration);
314
- }
315
- break;
316
- case ts.SyntaxKind.VariableDeclaration:
317
- const variableDeclaration = node;
318
- if ((ts.getCombinedModifierFlags(variableDeclaration) & ts.ModifierFlags.Export) != 0 &&
319
- variableDeclaration.name.kind == ts.SyntaxKind.Identifier) {
320
- const name = variableDeclaration.name;
321
- exportTable.add(name.text);
322
- }
323
- break;
324
- case ts.SyntaxKind.ExportDeclaration:
325
- const exportDeclaration = node;
326
- const { moduleSpecifier, exportClause } = exportDeclaration;
327
- if (!moduleSpecifier && exportClause && ts.isNamedExports(exportClause)) {
328
- exportClause.elements.forEach(spec => {
329
- exportTable.add(spec.name.text);
330
- });
331
- }
332
- }
333
- });
334
- return exportTable;
335
- }
336
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG93ZXJfZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL3RyYW5zZm9ybWVycy9sb3dlcl9leHByZXNzaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsbUJBQW1CLEVBQUUsZUFBZSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkUsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFakMsT0FBTyxFQUFtQixtQ0FBbUMsRUFBbUQsTUFBTSxtQkFBbUIsQ0FBQztBQTZCMUksU0FBUyxLQUFLLENBQU8sS0FBVSxFQUFFLE1BQXNCO0lBQ3JELE9BQU8sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsb0ZBQW9GO0FBQ3BGLG9GQUFvRjtBQUNwRiw2QkFBNkI7QUFDN0IsU0FBUyxjQUFjLENBQUMsSUFBYTtJQUNuQyxRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDakIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztRQUNqQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFDdEMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDO1FBQ3ZDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUM7UUFDbkMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1FBQ3BDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDaEMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUMvQixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUztZQUMxQixPQUFPLElBQUksQ0FBQztLQUNmO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FDeEIsVUFBeUIsRUFBRSxRQUE0QixFQUN2RCxPQUFpQztJQUNuQyxNQUFNLE9BQU8sR0FBd0IsRUFBRSxDQUFDO0lBRXhDLDRGQUE0RjtJQUM1RixtREFBbUQ7SUFDbkQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDbkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO0lBRW5DLHdFQUF3RTtJQUN4RSxTQUFTLFdBQVcsQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUMzQyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxTQUFTLGVBQWUsQ0FBQyxVQUF5QjtRQUNoRCxTQUFTLGlCQUFpQixDQUFDLElBQWtCO1lBQzNDLE1BQU0sWUFBWSxHQUFrQixFQUFFLENBQUM7WUFFdkMsU0FBUyxTQUFTLENBQUMsSUFBYTtnQkFDOUIsdUNBQXVDO2dCQUN2QyxNQUFNLEVBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFFLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3RDLElBQUksV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLFdBQVcsQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFO29CQUNyRSw4RUFBOEU7b0JBQzlFLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsRUFBRTt3QkFDL0UsMkVBQTJFO3dCQUMzRSw0RUFBNEU7d0JBQzVFLHNCQUFzQjt3QkFDdEIsTUFBTSxTQUFTLEdBQUcsY0FBd0MsQ0FBQzt3QkFDM0QsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTs0QkFDcEQsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7NEJBQ3BDLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7NEJBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0NBQ2hCLElBQUksRUFBRSxVQUFVO2dDQUNoQixJQUFJLEVBQUUsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztnQ0FDbEMsS0FBSyxtQkFBNEI7NkJBQ2xDLENBQUMsQ0FBQzs0QkFDSCxPQUFPLElBQUksQ0FBQzt5QkFDYjtxQkFDRjtvQkFDRCxxRkFBcUY7b0JBQ3JGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUM7b0JBQ3BDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxLQUFLLG9CQUE2QixFQUFDLENBQUMsQ0FBQztvQkFDaEYsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3hDO2dCQUNELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztnQkFDbEIsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsRCxNQUFNLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUN0RDtnQkFDRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBRUQsdUNBQXVDO1lBQ3ZDLE1BQU0sRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLFVBQXdCLENBQUM7WUFDN0IsSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO2dCQUN6QixVQUFVLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQzFEO2lCQUFNO2dCQUNMLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDbkI7WUFFRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBQyxDQUFDLENBQUM7YUFDdEQ7WUFDRCxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxhQUFhLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUVqRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbEIsb0ZBQW9GO1lBQ3BGLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQW1CLEVBQUUsQ0FBQztZQUN6QyxhQUFhLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNoQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLE1BQU0sRUFBRTtvQkFDVixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLHVCQUFnQyxDQUFDLENBQUM7b0JBQ3hGLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTt3QkFDakIsYUFBYSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO3FCQUNwRTtvQkFDRCxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUM5QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLHNCQUErQixDQUFDLENBQUM7b0JBQ3RGLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTt3QkFDaEIsYUFBYSxDQUFDLElBQUksQ0FBQyxzQ0FBc0MsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUNuRTtpQkFDRjtxQkFBTTtvQkFDTCxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUMvQjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsc0RBQXNEO1lBQ3RELGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLHVCQUF1QjtZQUN6QyxnQkFBZ0IsQ0FBQyxTQUFTO1lBQzFCLGVBQWUsQ0FBQyxTQUFTLEVBQ3pCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FDakIsT0FBTztpQkFDRixNQUFNLENBQ0gsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUNqRSxFQUFtQixDQUFDO2lCQUN2QixHQUFHLENBQ0EsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMscUJBQXFCO1lBQ25DLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV4RSxhQUFhLEdBQUcsYUFBYSxDQUFDO1NBQy9CO1FBRUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUNqQyxVQUFVLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNqRCxLQUFLLENBQUMsS0FBc0IsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1NBQzVEO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsT0FBTyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELFNBQVMsc0NBQXNDLENBQUMsWUFBMkI7SUFDekUsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FDN0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFxQixDQUFDLENBQUMsQ0FBQztJQUM5RixPQUFPLEVBQUUsQ0FBQyx1QkFBdUI7SUFDN0IsZUFBZSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsNkJBQTZCLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqRyxDQUFDO0FBRUQsTUFBTSxVQUFVLHFDQUFxQyxDQUNqRCxXQUF3QixFQUFFLE9BQW1CO0lBRS9DLHFCQUFxQjtJQUNyQixPQUFPLENBQUMsT0FBaUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxVQUF5QixFQUFpQixFQUFFO1FBQ3pGLDRGQUE0RjtRQUM1RixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxJQUFJLFlBQVksRUFBRTtZQUNoQixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3ZELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLE9BQU8sbUJBQW1CLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUMzRDtTQUNGO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQU1ELFNBQVMscUJBQXFCLENBQUMsSUFBdUI7SUFDcEQsSUFBSSxJQUFJLEVBQUU7UUFDUixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDakIsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztZQUM5QixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUztnQkFDMUIsMERBQTBEO2dCQUMxRCxrQkFBa0I7Z0JBQ2xCLE9BQU8sSUFBSSxDQUFDO1lBQ2QsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDO1lBQ3BDLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQztZQUN4QyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO1lBQ25DLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7Z0JBQ3BDLDRDQUE0QztnQkFDNUMsT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CO2dCQUNwQyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUE4QixDQUFDO29CQUMzRCxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEQsNEZBQTRGO2dCQUM1RixrRkFBa0Y7Z0JBQ2xGLDJGQUEyRjtnQkFDM0YsdUZBQXVGO2dCQUN2RixvRkFBb0Y7Z0JBQ3BGLHFCQUFxQjtnQkFDckIsTUFBTSxPQUFPLEdBQUcsSUFBOEIsQ0FBQztnQkFDL0MsT0FBTyxVQUFVO29CQUNiLENBQUMsT0FBTyxDQUFDLFdBQVcsS0FBSyxTQUFTO3dCQUNqQyxDQUFDLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDOzRCQUNqRCxFQUFFLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQzs0QkFDaEQsRUFBRSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQVU7SUFDN0IsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDO0FBQ2pDLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFVO0lBQzdCLE9BQU8sbUNBQW1DLENBQUMsS0FBSyxDQUFDLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxJQUFhLEVBQUUsS0FBa0I7SUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLEVBQUU7UUFDdkUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQStCLENBQUM7UUFDdEQsSUFBSSxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsdUJBQXVCO1lBQ2hGLFFBQVEsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7WUFDbkUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQXFCLENBQUM7WUFDcEQsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNyQztLQUNGO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxPQUFPLHNCQUFzQjtJQU1qQyxZQUFZLG1CQUE2QjtRQUhqQyxhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7UUFJdkQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksR0FBRyxDQUFTLG1CQUFtQixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELGFBQWE7SUFDYixXQUFXLENBQUMsVUFBeUI7UUFDbkMsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxnRUFBZ0U7WUFDaEUsNERBQTREO1lBQzVELElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBRW5DLDBFQUEwRTtZQUMxRSxtREFBbUQ7WUFDbkQsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsRUFBMkIsQ0FBQztTQUN2RjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxzQkFBc0I7SUFDdEIsT0FBTyxDQUFDLEtBQW9CO1FBQzFCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBeUI7UUFDN0IsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUVqRCxNQUFNLFdBQVcsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLFVBQVUsRUFBRSxDQUFDO1lBQzFCLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBQyxDQUFDLENBQUM7WUFDbkYsT0FBTyxFQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDekMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLFdBQXdCLENBQUM7WUFDN0IsT0FBTyxDQUFDLElBQWEsRUFBRSxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUU7b0JBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQXFCLENBQUM7b0JBRXBDLElBQUksQ0FBQyxXQUFXLEVBQUU7d0JBQ2hCLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztxQkFDaEQ7b0JBQ0QsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDcEM7Z0JBQ0QsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLElBQWEsRUFBRSxFQUFFO1lBQ2pELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLHdCQUF3QixFQUFFO2dCQUN4RCxNQUFNLEdBQUcsR0FBRyxJQUFtQyxDQUFDO2dCQUNoRCxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDcEMsT0FBTyxJQUFJLENBQUM7aUJBQ2I7YUFDRjtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUFDO1FBRUYsTUFBTSx1QkFBdUIsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztRQUU1RCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQXVCLEVBQVcsRUFBRTtZQUMzRCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLFNBQVMsR0FBWSxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxhQUFhO2dCQUN6QyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2hELHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMvQixTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ2xCO2lCQUFNLElBQ0gsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLElBQUksQ0FBQztnQkFDbEYsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5RCxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ2xCO1lBQ0QsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQyxDQUFDO1FBRUYsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLElBQXVCLEVBQVcsRUFBRTtZQUM5RCxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7Z0JBQ3RCLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0Qyx1QkFBdUIsQ0FBQyxHQUFHLENBQ3ZCLElBQUksRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2FBQzVFO1lBQ0QsT0FBTyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUF1QixFQUFXLEVBQUU7WUFDdkQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO2dCQUN0QixPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxDQUFDLENBQUM7UUFFRixPQUFPLENBQUMsS0FBb0IsRUFBRSxJQUFhLEVBQWlCLEVBQUU7WUFDNUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25FLE9BQU8sV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzFCO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFFRCxTQUFTLG9CQUFvQixDQUFDLFVBQXlCO0lBQ3JELE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDdEMsc0RBQXNEO0lBQ3RELEVBQUUsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLFNBQVMsSUFBSSxDQUFDLElBQUk7UUFDNUMsUUFBUSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztZQUNwQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUM7WUFDdkMsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLG9CQUFvQjtnQkFDckMsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFzQixDQUFDLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3hGLE1BQU0sZ0JBQWdCLEdBQ2xCLElBQWdGLENBQUM7b0JBQ3JGLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztvQkFDbkMsSUFBSSxJQUFJO3dCQUFFLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN0QztnQkFDRCxNQUFNO1lBQ1IsS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGlCQUFpQjtnQkFDbEMsTUFBTSxpQkFBaUIsR0FBRyxJQUE0QixDQUFDO2dCQUN2RCxLQUFLLE1BQU0sV0FBVyxJQUFJLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUU7b0JBQ3hFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDbkI7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7Z0JBQ3BDLE1BQU0sbUJBQW1CLEdBQUcsSUFBOEIsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDakYsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtvQkFDN0QsTUFBTSxJQUFJLEdBQUcsbUJBQW1CLENBQUMsSUFBcUIsQ0FBQztvQkFDdkQsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCO2dCQUNELE1BQU07WUFDUixLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCO2dCQUNsQyxNQUFNLGlCQUFpQixHQUFHLElBQTRCLENBQUM7Z0JBQ3ZELE1BQU0sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFDLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzFELElBQUksQ0FBQyxlQUFlLElBQUksWUFBWSxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQ3ZFLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUNuQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxDQUFDO2lCQUNKO1NBQ0o7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtjcmVhdGVMb3dlcmVkU3ltYm9sLCBpc0xvd2VyZWRTeW1ib2x9IGZyb20gJ0Bhbmd1bGFyL2NvbXBpbGVyJztcbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0NvbGxlY3Rvck9wdGlvbnMsIGlzTWV0YWRhdGFHbG9iYWxSZWZlcmVuY2VFeHByZXNzaW9uLCBNZXRhZGF0YUNvbGxlY3RvciwgTWV0YWRhdGFWYWx1ZSwgTW9kdWxlTWV0YWRhdGF9IGZyb20gJy4uL21ldGFkYXRhL2luZGV4JztcblxuaW1wb3J0IHtNZXRhZGF0YUNhY2hlLCBNZXRhZGF0YVRyYW5zZm9ybWVyLCBWYWx1ZVRyYW5zZm9ybX0gZnJvbSAnLi9tZXRhZGF0YV9jYWNoZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG93ZXJpbmdSZXF1ZXN0IHtcbiAga2luZDogdHMuU3ludGF4S2luZDtcbiAgbG9jYXRpb246IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgUmVxdWVzdExvY2F0aW9uTWFwID0gTWFwPG51bWJlciwgTG93ZXJpbmdSZXF1ZXN0PjtcblxuY29uc3QgZW51bSBEZWNsYXJhdGlvbk9yZGVyIHtcbiAgQmVmb3JlU3RtdCxcbiAgQWZ0ZXJTdG10XG59XG5cbmludGVyZmFjZSBEZWNsYXJhdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgbm9kZTogdHMuTm9kZTtcbiAgb3JkZXI6IERlY2xhcmF0aW9uT3JkZXI7XG59XG5cbmludGVyZmFjZSBEZWNsYXJhdGlvbkluc2VydCB7XG4gIGRlY2xhcmF0aW9uczogRGVjbGFyYXRpb25bXTtcbiAgcmVsYXRpdmVUbzogdHMuTm9kZTtcbn1cblxuZnVuY3Rpb24gdG9NYXA8VCwgSz4oaXRlbXM6IFRbXSwgc2VsZWN0OiAoaXRlbTogVCkgPT4gSyk6IE1hcDxLLCBUPiB7XG4gIHJldHVybiBuZXcgTWFwKGl0ZW1zLm1hcDxbSywgVF0+KGkgPT4gW3NlbGVjdChpKSwgaV0pKTtcbn1cblxuLy8gV2Ugd2lsbCBuZXZlciBsb3dlciBleHByZXNzaW9ucyBpbiBhIG5lc3RlZCBsZXhpY2FsIHNjb3BlIHNvIGF2b2lkIGVudGVyaW5nIHRoZW0uXG4vLyBUaGlzIGFsc28gYXZvaWRzIGEgYnVnIGluIFR5cGVTY3JpcHQgMi4zIHdoZXJlIHRoZSBsZXhpY2FsIHNjb3BlcyBnZXQgb3V0IG9mIHN5bmNcbi8vIHdoZW4gdXNpbmcgdmlzaXRFYWNoQ2hpbGQuXG5mdW5jdGlvbiBpc0xleGljYWxTY29wZShub2RlOiB0cy5Ob2RlKTogYm9vbGVhbiB7XG4gIHN3aXRjaCAobm9kZS5raW5kKSB7XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkFycm93RnVuY3Rpb246XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLkZ1bmN0aW9uRXhwcmVzc2lvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25EZWNsYXJhdGlvbjpcbiAgICBjYXNlIHRzLlN5bnRheEtpbmQuQ2xhc3NFeHByZXNzaW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0RlY2xhcmF0aW9uOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvblR5cGU6XG4gICAgY2FzZSB0cy5TeW50YXhLaW5kLlR5cGVMaXRlcmFsOlxuICAgIGNhc2UgdHMuU3ludGF4S2luZC5BcnJheVR5cGU6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVNvdXJjZUZpbGUoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgcmVxdWVzdHM6IFJlcXVlc3RMb2NhdGlvbk1hcCxcbiAgICBjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpOiB0cy5Tb3VyY2VGaWxlIHtcbiAgY29uc3QgaW5zZXJ0czogRGVjbGFyYXRpb25JbnNlcnRbXSA9IFtdO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgcmFuZ2Ugb2YgaW50ZXJlc3RpbmcgbG9jYXRpb25zLiBUaGUgdHJhbnNmb3JtIHdpbGwgb25seSB2aXNpdCBub2RlcyBpbiB0aGlzXG4gIC8vIHJhbmdlIHRvIGltcHJvdmUgdGhlIHBlcmZvcm1hbmNlIG9uIGxhcmdlIGZpbGVzLlxuICBjb25zdCBsb2NhdGlvbnMgPSBBcnJheS5mcm9tKHJlcXVlc3RzLmtleXMoKSk7XG4gIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLmxvY2F0aW9ucyk7XG4gIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmxvY2F0aW9ucyk7XG5cbiAgLy8gVmlzaXQgbm9kZXMgbWF0Y2hpbmcgdGhlIHJlcXVlc3QgYW5kIHN5bnRoZXRpYyBub2RlcyBhZGRlZCBieSB0c2lja2xlXG4gIGZ1bmN0aW9uIHNob3VsZFZpc2l0KHBvczogbnVtYmVyLCBlbmQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAocG9zIDw9IG1heCAmJiBlbmQgPj0gbWluKSB8fCBwb3MgPT0gLTE7XG4gIH1cblxuICBmdW5jdGlvbiB2aXNpdFNvdXJjZUZpbGUoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLlNvdXJjZUZpbGUge1xuICAgIGZ1bmN0aW9uIHRvcExldmVsU3RhdGVtZW50KG5vZGU6IHRzLlN0YXRlbWVudCk6IHRzLlN0YXRlbWVudCB7XG4gICAgICBjb25zdCBkZWNsYXJhdGlvbnM6IERlY2xhcmF0aW9uW10gPSBbXTtcblxuICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpOiB0cy5Ob2RlIHtcbiAgICAgICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBub2RlIGJlZm9yZSB0c2lja2xlXG4gICAgICAgIGNvbnN0IHtwb3MsIGVuZCwga2luZCwgcGFyZW50OiBvcmlnaW5hbFBhcmVudH0gPSB0cy5nZXRPcmlnaW5hbE5vZGUobm9kZSk7XG4gICAgICAgIGNvbnN0IG5vZGVSZXF1ZXN0ID0gcmVxdWVzdHMuZ2V0KHBvcyk7XG4gICAgICAgIGlmIChub2RlUmVxdWVzdCAmJiBub2RlUmVxdWVzdC5raW5kID09IGtpbmQgJiYgbm9kZVJlcXVlc3QuZW5kID09IGVuZCkge1xuICAgICAgICAgIC8vIFRoaXMgbm9kZSBpcyByZXF1ZXN0ZWQgdG8gYmUgcmV3cml0dGVuIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBleHBvcnRlZCBuYW1lLlxuICAgICAgICAgIGlmIChvcmlnaW5hbFBhcmVudCAmJiBvcmlnaW5hbFBhcmVudC5raW5kID09PSB0cy5TeW50YXhLaW5kLlZhcmlhYmxlRGVjbGFyYXRpb24pIHtcbiAgICAgICAgICAgIC8vIEFzIHRoZSB2YWx1ZSByZXByZXNlbnRzIHRoZSB3aG9sZSBpbml0aWFsaXplciBvZiBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLFxuICAgICAgICAgICAgLy8ganVzdCByZWZlciB0byB0aGF0IHZhcmlhYmxlLiBUaGlzIGUuZy4gaGVscHMgdG8gcHJlc2VydmUgY2xvc3VyZSBjb21tZW50c1xuICAgICAgICAgICAgLy8gYXQgdGhlIHJpZ2h0IHBsYWNlLlxuICAgICAgICAgICAgY29uc3QgdmFyUGFyZW50ID0gb3JpZ2luYWxQYXJlbnQgYXMgdHMuVmFyaWFibGVEZWNsYXJhdGlvbjtcbiAgICAgICAgICAgIGlmICh2YXJQYXJlbnQubmFtZS5raW5kID09PSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFyTmFtZSA9IHZhclBhcmVudC5uYW1lLnRleHQ7XG4gICAgICAgICAgICAgIGNvbnN0IGV4cG9ydE5hbWUgPSBub2RlUmVxdWVzdC5uYW1lO1xuICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTogZXhwb3J0TmFtZSxcbiAgICAgICAgICAgICAgICBub2RlOiB0cy5jcmVhdGVJZGVudGlmaWVyKHZhck5hbWUpLFxuICAgICAgICAgICAgICAgIG9yZGVyOiBEZWNsYXJhdGlvbk9yZGVyLkFmdGVyU3RtdFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFJlY29yZCB0aGF0IHRoZSBub2RlIG5lZWRzIHRvIGJlIG1vdmVkIHRvIGFuIGV4cG9ydGVkIHZhcmlhYmxlIHdpdGggdGhlIGdpdmVuIG5hbWVcbiAgICAgICAgICBjb25zdCBleHBvcnROYW1lID0gbm9kZVJlcXVlc3QubmFtZTtcbiAgICAgICAgICBkZWNsYXJhdGlvbnMucHVzaCh7bmFtZTogZXhwb3J0TmFtZSwgbm9kZSwgb3JkZXI6IERlY2xhcmF0aW9uT3JkZXIuQmVmb3JlU3RtdH0pO1xuICAgICAgICAgIHJldHVybiB0cy5jcmVhdGVJZGVudGlmaWVyKGV4cG9ydE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZXN1bHQgPSBub2RlO1xuICAgICAgICBpZiAoc2hvdWxkVmlzaXQocG9zLCBlbmQpICYmICFpc0xleGljYWxTY29wZShub2RlKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSwgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBvcmlnaW5hbCBub2RlIGJlZm9yZSB0c2lja2xlXG4gICAgICBjb25zdCB7cG9zLCBlbmR9ID0gdHMuZ2V0T3JpZ2luYWxOb2RlKG5vZGUpO1xuICAgICAgbGV0IHJlc3VsdFN0bXQ6IHRzLlN0YXRlbWVudDtcbiAgICAgIGlmIChzaG91bGRWaXNpdChwb3MsIGVuZCkpIHtcbiAgICAgICAgcmVzdWx0U3RtdCA9IHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIHZpc2l0Tm9kZSwgY29udGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHRTdG10ID0gbm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaW5zZXJ0cy5wdXNoKHtyZWxhdGl2ZVRvOiByZXN1bHRTdG10LCBkZWNsYXJhdGlvbnN9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHRTdG10O1xuICAgIH1cblxuICAgIGxldCBuZXdTdGF0ZW1lbnRzID0gc291cmNlRmlsZS5zdGF0ZW1lbnRzLm1hcCh0b3BMZXZlbFN0YXRlbWVudCk7XG5cbiAgICBpZiAoaW5zZXJ0cy5sZW5ndGgpIHtcbiAgICAgIC8vIEluc2VydCB0aGUgZGVjbGFyYXRpb25zIHJlbGF0aXZlIHRvIHRoZSByZXdyaXR0ZW4gc3RhdGVtZW50IHRoYXQgcmVmZXJlbmNlcyB0aGVtLlxuICAgICAgY29uc3QgaW5zZXJ0TWFwID0gdG9NYXAoaW5zZXJ0cywgaSA9PiBpLnJlbGF0aXZlVG8pO1xuICAgICAgY29uc3QgdG1wU3RhdGVtZW50czogdHMuU3RhdGVtZW50W10gPSBbXTtcbiAgICAgIG5ld1N0YXRlbWVudHMuZm9yRWFjaChzdGF0ZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBpbnNlcnQgPSBpbnNlcnRNYXAuZ2V0KHN0YXRlbWVudCk7XG4gICAgICAgIGlmIChpbnNlcnQpIHtcbiAgICAgICAgICBjb25zdCBiZWZvcmUgPSBpbnNlcnQuZGVjbGFyYXRpb25zLmZpbHRlcihkID0+IGQub3JkZXIgPT09IERlY2xhcmF0aW9uT3JkZXIuQmVmb3JlU3RtdCk7XG4gICAgICAgICAgaWYgKGJlZm9yZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcFN0YXRlbWVudHMucHVzaChjcmVhdGVWYXJpYWJsZVN0YXRlbWVudEZvckRlY2xhcmF0aW9ucyhiZWZvcmUpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdG1wU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgICAgY29uc3QgYWZ0ZXIgPSBpbnNlcnQuZGVjbGFyYXRpb25zLmZpbHRlcihkID0+IGQub3JkZXIgPT09IERlY2xhcmF0aW9uT3JkZXIuQWZ0ZXJTdG10KTtcbiAgICAgICAgICBpZiAoYWZ0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICB0bXBTdGF0ZW1lbnRzLnB1c2goY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnRGb3JEZWNsYXJhdGlvbnMoYWZ0ZXIpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdG1wU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJbnNlcnQgYW4gZXhwb3J0cyBjbGF1c2UgdG8gZXhwb3J0IHRoZSBkZWNsYXJhdGlvbnNcbiAgICAgIHRtcFN0YXRlbWVudHMucHVzaCh0cy5jcmVhdGVFeHBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgICAvKiBkZWNvcmF0b3JzICovIHVuZGVmaW5lZCxcbiAgICAgICAgICAvKiBtb2RpZmllcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgICAgIHRzLmNyZWF0ZU5hbWVkRXhwb3J0cyhcbiAgICAgICAgICAgICAgaW5zZXJ0c1xuICAgICAgICAgICAgICAgICAgLnJlZHVjZShcbiAgICAgICAgICAgICAgICAgICAgICAoYWNjdW11bGF0b3IsIGluc2VydCkgPT4gWy4uLmFjY3VtdWxhdG9yLCAuLi5pbnNlcnQuZGVjbGFyYXRpb25zXSxcbiAgICAgICAgICAgICAgICAgICAgICBbXSBhcyBEZWNsYXJhdGlvbltdKVxuICAgICAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbiA9PiB0cy5jcmVhdGVFeHBvcnRTcGVjaWZpZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByb3BlcnR5TmFtZSAqLyB1bmRlZmluZWQsIGRlY2xhcmF0aW9uLm5hbWUpKSkpKTtcblxuICAgICAgbmV3U3RhdGVtZW50cyA9IHRtcFN0YXRlbWVudHM7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2YgPSB0cy51cGRhdGVTb3VyY2VGaWxlTm9kZShcbiAgICAgICAgc291cmNlRmlsZSwgdHMuc2V0VGV4dFJhbmdlKHRzLmNyZWF0ZU5vZGVBcnJheShuZXdTdGF0ZW1lbnRzKSwgc291cmNlRmlsZS5zdGF0ZW1lbnRzKSk7XG4gICAgaWYgKCEoc291cmNlRmlsZS5mbGFncyAmIHRzLk5vZGVGbGFncy5TeW50aGVzaXplZCkpIHtcbiAgICAgIChuZXdTZi5mbGFncyBhcyB0cy5Ob2RlRmxhZ3MpICY9IH50cy5Ob2RlRmxhZ3MuU3ludGhlc2l6ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld1NmO1xuICB9XG5cbiAgcmV0dXJuIHZpc2l0U291cmNlRmlsZShzb3VyY2VGaWxlKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnRGb3JEZWNsYXJhdGlvbnMoZGVjbGFyYXRpb25zOiBEZWNsYXJhdGlvbltdKTogdHMuVmFyaWFibGVTdGF0ZW1lbnQge1xuICBjb25zdCB2YXJEZWNscyA9IGRlY2xhcmF0aW9ucy5tYXAoXG4gICAgICBpID0+IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oaS5uYW1lLCAvKiB0eXBlICovIHVuZGVmaW5lZCwgaS5ub2RlIGFzIHRzLkV4cHJlc3Npb24pKTtcbiAgcmV0dXJuIHRzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgLyogbW9kaWZpZXJzICovIHVuZGVmaW5lZCwgdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QodmFyRGVjbHMsIHRzLk5vZGVGbGFncy5Db25zdCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwcmVzc2lvbkxvd2VyaW5nVHJhbnNmb3JtRmFjdG9yeShcbiAgICByZXF1ZXN0c01hcDogUmVxdWVzdHNNYXAsIHByb2dyYW06IHRzLlByb2dyYW0pOiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PlxuICAgIChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB0cy5Tb3VyY2VGaWxlIHtcbiAgLy8gUmV0dXJuIHRoZSBmYWN0b3J5XG4gIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLlNvdXJjZUZpbGUgPT4ge1xuICAgIC8vIFdlIG5lZWQgdG8gdXNlIHRoZSBvcmlnaW5hbCBTb3VyY2VGaWxlIGZvciByZWFkaW5nIG1ldGFkYXRhLCBhbmQgbm90IHRoZSB0cmFuc2Zvcm1lZCBvbmUuXG4gICAgY29uc3Qgb3JpZ2luYWxGaWxlID0gcHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIGlmIChvcmlnaW5hbEZpbGUpIHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gcmVxdWVzdHNNYXAuZ2V0UmVxdWVzdHMob3JpZ2luYWxGaWxlKTtcbiAgICAgIGlmIChyZXF1ZXN0cyAmJiByZXF1ZXN0cy5zaXplKSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1Tb3VyY2VGaWxlKHNvdXJjZUZpbGUsIHJlcXVlc3RzLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZUZpbGU7XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdHNNYXAge1xuICBnZXRSZXF1ZXN0cyhzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogUmVxdWVzdExvY2F0aW9uTWFwO1xufVxuXG5mdW5jdGlvbiBpc0VsaWdpYmxlRm9yTG93ZXJpbmcobm9kZTogdHMuTm9kZXx1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgaWYgKG5vZGUpIHtcbiAgICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLlNvdXJjZUZpbGU6XG4gICAgICBjYXNlIHRzLlN5bnRheEtpbmQuRGVjb3JhdG9yOlxuICAgICAgICAvLyBMb3dlciBleHByZXNzaW9ucyB0aGF0IGFyZSBsb2NhbCB0byB0aGUgbW9kdWxlIHNjb3BlIG9yXG4gICAgICAgIC8vIGluIGEgZGVjb3JhdG9yLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5DbGFzc0RlY2xhcmF0aW9uOlxuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLkludGVyZmFjZURlY2xhcmF0aW9uOlxuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLkVudW1EZWNsYXJhdGlvbjpcbiAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5GdW5jdGlvbkRlY2xhcmF0aW9uOlxuICAgICAgICAvLyBEb24ndCBsb3dlciBleHByZXNzaW9ucyBpbiBhIGRlY2xhcmF0aW9uLlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlIHRzLlN5bnRheEtpbmQuVmFyaWFibGVEZWNsYXJhdGlvbjpcbiAgICAgICAgY29uc3QgaXNFeHBvcnRlZCA9ICh0cy5nZXRDb21iaW5lZE1vZGlmaWVyRmxhZ3Mobm9kZSBhcyB0cy5WYXJpYWJsZURlY2xhcmF0aW9uKSAmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHMuTW9kaWZpZXJGbGFncy5FeHBvcnQpID09IDA7XG4gICAgICAgIC8vIFRoaXMgbWlnaHQgYmUgdW5uZWNlc3NhcnksIGFzIHRoZSB2YXJpYWJsZSBtaWdodCBiZSBleHBvcnRlZCBhbmQgb25seSB1c2VkIGFzIGEgcmVmZXJlbmNlXG4gICAgICAgIC8vIGluIGFub3RoZXIgZXhwcmVzc2lvbi4gSG93ZXZlciwgdGhlIHZhcmlhYmxlIGFsc28gbWlnaHQgYmUgaW52b2x2ZWQgaW4gcHJvdmlkZXJcbiAgICAgICAgLy8gZGVmaW5pdGlvbnMuIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlcmUgaXMgYSBzcGVjaWZpYyB0b2tlbiAoYFJPVVRFU2ApIHdoaWNoIHRoZSBjb21waWxlclxuICAgICAgICAvLyBhdHRlbXB0cyB0byB1bmRlcnN0YW5kIGRlZXBseS4gU3ViLWV4cHJlc3Npb25zIHdpdGhpbiB0aGF0IHRva2VuIChgbG9hZENoaWxkcmVuYCBmb3JcbiAgICAgICAgLy8gZXhhbXBsZSkgbWlnaHQgYWxzbyByZXF1aXJlIGxvd2VyaW5nIGV2ZW4gaWYgdGhlIHRvcC1sZXZlbCBkZWNsYXJhdGlvbiBpcyBhbHJlYWR5XG4gICAgICAgIC8vIHByb3Blcmx5IGV4cG9ydGVkLlxuICAgICAgICBjb25zdCB2YXJOb2RlID0gbm9kZSBhcyB0cy5WYXJpYWJsZURlY2xhcmF0aW9uO1xuICAgICAgICByZXR1cm4gaXNFeHBvcnRlZCB8fFxuICAgICAgICAgICAgKHZhck5vZGUuaW5pdGlhbGl6ZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICh0cy5pc09iamVjdExpdGVyYWxFeHByZXNzaW9uKHZhck5vZGUuaW5pdGlhbGl6ZXIpIHx8XG4gICAgICAgICAgICAgIHRzLmlzQXJyYXlMaXRlcmFsRXhwcmVzc2lvbih2YXJOb2RlLmluaXRpYWxpemVyKSB8fFxuICAgICAgICAgICAgICB0cy5pc0NhbGxFeHByZXNzaW9uKHZhck5vZGUuaW5pdGlhbGl6ZXIpKSk7XG4gICAgfVxuICAgIHJldHVybiBpc0VsaWdpYmxlRm9yTG93ZXJpbmcobm9kZS5wYXJlbnQpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QodmFsdWUpICE9PSB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNSZXdyaXR0ZW4odmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNNZXRhZGF0YUdsb2JhbFJlZmVyZW5jZUV4cHJlc3Npb24odmFsdWUpICYmIGlzTG93ZXJlZFN5bWJvbCh2YWx1ZS5uYW1lKTtcbn1cblxuZnVuY3Rpb24gaXNMaXRlcmFsRmllbGROYW1lZChub2RlOiB0cy5Ob2RlLCBuYW1lczogU2V0PHN0cmluZz4pOiBib29sZWFuIHtcbiAgaWYgKG5vZGUucGFyZW50ICYmIG5vZGUucGFyZW50LmtpbmQgPT0gdHMuU3ludGF4S2luZC5Qcm9wZXJ0eUFzc2lnbm1lbnQpIHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IG5vZGUucGFyZW50IGFzIHRzLlByb3BlcnR5QXNzaWdubWVudDtcbiAgICBpZiAocHJvcGVydHkucGFyZW50ICYmIHByb3BlcnR5LnBhcmVudC5raW5kID09IHRzLlN5bnRheEtpbmQuT2JqZWN0TGl0ZXJhbEV4cHJlc3Npb24gJiZcbiAgICAgICAgcHJvcGVydHkubmFtZSAmJiBwcm9wZXJ0eS5uYW1lLmtpbmQgPT0gdHMuU3ludGF4S2luZC5JZGVudGlmaWVyKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eS5uYW1lIGFzIHRzLklkZW50aWZpZXI7XG4gICAgICByZXR1cm4gbmFtZXMuaGFzKHByb3BlcnR5TmFtZS50ZXh0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY2xhc3MgTG93ZXJNZXRhZGF0YVRyYW5zZm9ybSBpbXBsZW1lbnRzIFJlcXVlc3RzTWFwLCBNZXRhZGF0YVRyYW5zZm9ybWVyIHtcbiAgLy8gVE9ETyhpc3N1ZS8yNDU3MSk6IHJlbW92ZSAnIScuXG4gIHByaXZhdGUgY2FjaGUhOiBNZXRhZGF0YUNhY2hlO1xuICBwcml2YXRlIHJlcXVlc3RzID0gbmV3IE1hcDxzdHJpbmcsIFJlcXVlc3RMb2NhdGlvbk1hcD4oKTtcbiAgcHJpdmF0ZSBsb3dlcmFibGVGaWVsZE5hbWVzOiBTZXQ8c3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihsb3dlcmFibGVGaWVsZE5hbWVzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubG93ZXJhYmxlRmllbGROYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPihsb3dlcmFibGVGaWVsZE5hbWVzKTtcbiAgfVxuXG4gIC8vIFJlcXVlc3RNYXBcbiAgZ2V0UmVxdWVzdHMoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IFJlcXVlc3RMb2NhdGlvbk1hcCB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMucmVxdWVzdHMuZ2V0KHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAvLyBGb3JjZSB0aGUgbWV0YWRhdGEgZm9yIHRoaXMgc291cmNlIGZpbGUgdG8gYmUgY29sbGVjdGVkIHdoaWNoXG4gICAgICAvLyB3aWxsIHJlY3Vyc2l2ZWx5IGNhbGwgc3RhcnQoKSBwb3B1bGF0aW5nIHRoZSByZXF1ZXN0IG1hcDtcbiAgICAgIHRoaXMuY2FjaGUuZ2V0TWV0YWRhdGEoc291cmNlRmlsZSk7XG5cbiAgICAgIC8vIElmIHdlIHN0aWxsIGRvbid0IGhhdmUgdGhlIHJlcXVlc3RlZCBtZXRhZGF0YSwgdGhlIGZpbGUgaXMgbm90IGEgbW9kdWxlXG4gICAgICAvLyBvciBpcyBhIGRlY2xhcmF0aW9uIGZpbGUgc28gcmV0dXJuIGFuIGVtcHR5IG1hcC5cbiAgICAgIHJlc3VsdCA9IHRoaXMucmVxdWVzdHMuZ2V0KHNvdXJjZUZpbGUuZmlsZU5hbWUpIHx8IG5ldyBNYXA8bnVtYmVyLCBMb3dlcmluZ1JlcXVlc3Q+KCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBNZXRhZGF0YVRyYW5zZm9ybWVyXG4gIGNvbm5lY3QoY2FjaGU6IE1ldGFkYXRhQ2FjaGUpOiB2b2lkIHtcbiAgICB0aGlzLmNhY2hlID0gY2FjaGU7XG4gIH1cblxuICBzdGFydChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogVmFsdWVUcmFuc2Zvcm18dW5kZWZpbmVkIHtcbiAgICBsZXQgaWRlbnROdW1iZXIgPSAwO1xuICAgIGNvbnN0IGZyZXNoSWRlbnQgPSAoKSA9PiBjcmVhdGVMb3dlcmVkU3ltYm9sKGlkZW50TnVtYmVyKyspO1xuICAgIGNvbnN0IHJlcXVlc3RzID0gbmV3IE1hcDxudW1iZXIsIExvd2VyaW5nUmVxdWVzdD4oKTtcbiAgICB0aGlzLnJlcXVlc3RzLnNldChzb3VyY2VGaWxlLmZpbGVOYW1lLCByZXF1ZXN0cyk7XG5cbiAgICBjb25zdCByZXBsYWNlTm9kZSA9IChub2RlOiB0cy5Ob2RlKSA9PiB7XG4gICAgICBjb25zdCBuYW1lID0gZnJlc2hJZGVudCgpO1xuICAgICAgcmVxdWVzdHMuc2V0KG5vZGUucG9zLCB7bmFtZSwga2luZDogbm9kZS5raW5kLCBsb2NhdGlvbjogbm9kZS5wb3MsIGVuZDogbm9kZS5lbmR9KTtcbiAgICAgIHJldHVybiB7X19zeW1ib2xpYzogJ3JlZmVyZW5jZScsIG5hbWV9O1xuICAgIH07XG5cbiAgICBjb25zdCBpc0V4cG9ydGVkU3ltYm9sID0gKCgpID0+IHtcbiAgICAgIGxldCBleHBvcnRUYWJsZTogU2V0PHN0cmluZz47XG4gICAgICByZXR1cm4gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAgICAgaWYgKG5vZGUua2luZCA9PSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXIpIHtcbiAgICAgICAgICBjb25zdCBpZGVudCA9IG5vZGUgYXMgdHMuSWRlbnRpZmllcjtcblxuICAgICAgICAgIGlmICghZXhwb3J0VGFibGUpIHtcbiAgICAgICAgICAgIGV4cG9ydFRhYmxlID0gY3JlYXRlRXhwb3J0VGFibGVGb3Ioc291cmNlRmlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBleHBvcnRUYWJsZS5oYXMoaWRlbnQudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgaXNFeHBvcnRlZFByb3BlcnR5QWNjZXNzID0gKG5vZGU6IHRzLk5vZGUpID0+IHtcbiAgICAgIGlmIChub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IHBhZSA9IG5vZGUgYXMgdHMuUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uO1xuICAgICAgICBpZiAoaXNFeHBvcnRlZFN5bWJvbChwYWUuZXhwcmVzc2lvbikpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG5cbiAgICBjb25zdCBoYXNMb3dlcmFibGVQYXJlbnRDYWNoZSA9IG5ldyBNYXA8dHMuTm9kZSwgYm9vbGVhbj4oKTtcblxuICAgIGNvbnN0IHNob3VsZEJlTG93ZXJlZCA9IChub2RlOiB0cy5Ob2RlfHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBsZXQgbG93ZXJhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBpZiAoKG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5BcnJvd0Z1bmN0aW9uIHx8XG4gICAgICAgICAgIG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5GdW5jdGlvbkV4cHJlc3Npb24pICYmXG4gICAgICAgICAgaXNFbGlnaWJsZUZvckxvd2VyaW5nKG5vZGUpKSB7XG4gICAgICAgIGxvd2VyYWJsZSA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGlzTGl0ZXJhbEZpZWxkTmFtZWQobm9kZSwgdGhpcy5sb3dlcmFibGVGaWVsZE5hbWVzKSAmJiBpc0VsaWdpYmxlRm9yTG93ZXJpbmcobm9kZSkgJiZcbiAgICAgICAgICAhaXNFeHBvcnRlZFN5bWJvbChub2RlKSAmJiAhaXNFeHBvcnRlZFByb3BlcnR5QWNjZXNzKG5vZGUpKSB7XG4gICAgICAgIGxvd2VyYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG93ZXJhYmxlO1xuICAgIH07XG5cbiAgICBjb25zdCBoYXNMb3dlcmFibGVQYXJlbnQgPSAobm9kZTogdHMuTm9kZXx1bmRlZmluZWQpOiBib29sZWFuID0+IHtcbiAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCFoYXNMb3dlcmFibGVQYXJlbnRDYWNoZS5oYXMobm9kZSkpIHtcbiAgICAgICAgaGFzTG93ZXJhYmxlUGFyZW50Q2FjaGUuc2V0KFxuICAgICAgICAgICAgbm9kZSwgc2hvdWxkQmVMb3dlcmVkKG5vZGUucGFyZW50KSB8fCBoYXNMb3dlcmFibGVQYXJlbnQobm9kZS5wYXJlbnQpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBoYXNMb3dlcmFibGVQYXJlbnRDYWNoZS5nZXQobm9kZSkhO1xuICAgIH07XG5cbiAgICBjb25zdCBpc0xvd2VyYWJsZSA9IChub2RlOiB0cy5Ob2RlfHVuZGVmaW5lZCk6IGJvb2xlYW4gPT4ge1xuICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2hvdWxkQmVMb3dlcmVkKG5vZGUpICYmICFoYXNMb3dlcmFibGVQYXJlbnQobm9kZSk7XG4gICAgfTtcblxuICAgIHJldHVybiAodmFsdWU6IE1ldGFkYXRhVmFsdWUsIG5vZGU6IHRzLk5vZGUpOiBNZXRhZGF0YVZhbHVlID0+IHtcbiAgICAgIGlmICghaXNQcmltaXRpdmUodmFsdWUpICYmICFpc1Jld3JpdHRlbih2YWx1ZSkgJiYgaXNMb3dlcmFibGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VOb2RlKG5vZGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRXhwb3J0VGFibGVGb3Ioc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IFNldDxzdHJpbmc+IHtcbiAgY29uc3QgZXhwb3J0VGFibGUgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgLy8gTGF6aWx5IGNvbGxlY3QgYWxsIHRoZSBleHBvcnRzIGZyb20gdGhlIHNvdXJjZSBmaWxlXG4gIHRzLmZvckVhY2hDaGlsZChzb3VyY2VGaWxlLCBmdW5jdGlvbiBzY2FuKG5vZGUpIHtcbiAgICBzd2l0Y2ggKG5vZGUua2luZCkge1xuICAgICAgY2FzZSB0cy5TeW50YXhLaW5kLkNsYXNzRGVjbGFyYXRpb246XG4gICAgICBjYXNlIHRzLlN5bnRheEtpbmQuRnVuY3Rpb25EZWNsYXJhdGlvbjpcbiAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5JbnRlcmZhY2VEZWNsYXJhdGlvbjpcbiAgICAgICAgaWYgKCh0cy5nZXRDb21iaW5lZE1vZGlmaWVyRmxhZ3Mobm9kZSBhcyB0cy5EZWNsYXJhdGlvbikgJiB0cy5Nb2RpZmllckZsYWdzLkV4cG9ydCkgIT0gMCkge1xuICAgICAgICAgIGNvbnN0IGNsYXNzRGVjbGFyYXRpb24gPVxuICAgICAgICAgICAgICBub2RlIGFzICh0cy5DbGFzc0RlY2xhcmF0aW9uIHwgdHMuRnVuY3Rpb25EZWNsYXJhdGlvbiB8IHRzLkludGVyZmFjZURlY2xhcmF0aW9uKTtcbiAgICAgICAgICBjb25zdCBuYW1lID0gY2xhc3NEZWNsYXJhdGlvbi5uYW1lO1xuICAgICAgICAgIGlmIChuYW1lKSBleHBvcnRUYWJsZS5hZGQobmFtZS50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5WYXJpYWJsZVN0YXRlbWVudDpcbiAgICAgICAgY29uc3QgdmFyaWFibGVTdGF0ZW1lbnQgPSBub2RlIGFzIHRzLlZhcmlhYmxlU3RhdGVtZW50O1xuICAgICAgICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlU3RhdGVtZW50LmRlY2xhcmF0aW9uTGlzdC5kZWNsYXJhdGlvbnMpIHtcbiAgICAgICAgICBzY2FuKGRlY2xhcmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgdHMuU3ludGF4S2luZC5WYXJpYWJsZURlY2xhcmF0aW9uOlxuICAgICAgICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gbm9kZSBhcyB0cy5WYXJpYWJsZURlY2xhcmF0aW9uO1xuICAgICAgICBpZiAoKHRzLmdldENvbWJpbmVkTW9kaWZpZXJGbGFncyh2YXJpYWJsZURlY2xhcmF0aW9uKSAmIHRzLk1vZGlmaWVyRmxhZ3MuRXhwb3J0KSAhPSAwICYmXG4gICAgICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uLm5hbWUua2luZCA9PSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXIpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gdmFyaWFibGVEZWNsYXJhdGlvbi5uYW1lIGFzIHRzLklkZW50aWZpZXI7XG4gICAgICAgICAgZXhwb3J0VGFibGUuYWRkKG5hbWUudGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIHRzLlN5bnRheEtpbmQuRXhwb3J0RGVjbGFyYXRpb246XG4gICAgICAgIGNvbnN0IGV4cG9ydERlY2xhcmF0aW9uID0gbm9kZSBhcyB0cy5FeHBvcnREZWNsYXJhdGlvbjtcbiAgICAgICAgY29uc3Qge21vZHVsZVNwZWNpZmllciwgZXhwb3J0Q2xhdXNlfSA9IGV4cG9ydERlY2xhcmF0aW9uO1xuICAgICAgICBpZiAoIW1vZHVsZVNwZWNpZmllciAmJiBleHBvcnRDbGF1c2UgJiYgdHMuaXNOYW1lZEV4cG9ydHMoZXhwb3J0Q2xhdXNlKSkge1xuICAgICAgICAgIGV4cG9ydENsYXVzZS5lbGVtZW50cy5mb3JFYWNoKHNwZWMgPT4ge1xuICAgICAgICAgICAgZXhwb3J0VGFibGUuYWRkKHNwZWMubmFtZS50ZXh0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBleHBvcnRUYWJsZTtcbn1cbiJdfQ==
@@ -1,53 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import * as ts from 'typescript';
9
- import { TS } from './util';
10
- /**
11
- * Cache, and potentially transform, metadata as it is being collected.
12
- */
13
- export class MetadataCache {
14
- constructor(collector, strict, transformers) {
15
- this.collector = collector;
16
- this.strict = strict;
17
- this.transformers = transformers;
18
- this.metadataCache = new Map();
19
- for (let transformer of transformers) {
20
- if (transformer.connect) {
21
- transformer.connect(this);
22
- }
23
- }
24
- }
25
- getMetadata(sourceFile) {
26
- if (this.metadataCache.has(sourceFile.fileName)) {
27
- return this.metadataCache.get(sourceFile.fileName);
28
- }
29
- let substitute = undefined;
30
- // Only process transformers on modules that are not declaration files.
31
- const declarationFile = sourceFile.isDeclarationFile;
32
- const moduleFile = ts.isExternalModule(sourceFile);
33
- if (!declarationFile && moduleFile) {
34
- for (let transform of this.transformers) {
35
- const transformSubstitute = transform.start(sourceFile);
36
- if (transformSubstitute) {
37
- if (substitute) {
38
- const previous = substitute;
39
- substitute = (value, node) => transformSubstitute(previous(value, node), node);
40
- }
41
- else {
42
- substitute = transformSubstitute;
43
- }
44
- }
45
- }
46
- }
47
- const isTsFile = TS.test(sourceFile.fileName);
48
- const result = this.collector.getMetadata(sourceFile, this.strict && isTsFile, substitute);
49
- this.metadataCache.set(sourceFile.fileName, result);
50
- return result;
51
- }
52
- }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfY2FjaGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci1jbGkvc3JjL3RyYW5zZm9ybWVycy9tZXRhZGF0YV9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQztBQUtqQyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBUzFCOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQWE7SUFHeEIsWUFDWSxTQUE0QixFQUFtQixNQUFlLEVBQzlELFlBQW1DO1FBRG5DLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBQW1CLFdBQU0sR0FBTixNQUFNLENBQVM7UUFDOUQsaUJBQVksR0FBWixZQUFZLENBQXVCO1FBSnZDLGtCQUFhLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFLbEUsS0FBSyxJQUFJLFdBQVcsSUFBSSxZQUFZLEVBQUU7WUFDcEMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFO2dCQUN2QixXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzNCO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLFVBQXlCO1FBQ25DLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQy9DLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3BEO1FBQ0QsSUFBSSxVQUFVLEdBQTZCLFNBQVMsQ0FBQztRQUVyRCx1RUFBdUU7UUFDdkUsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQ3JELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxJQUFJLFVBQVUsRUFBRTtZQUNsQyxLQUFLLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3ZDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxtQkFBbUIsRUFBRTtvQkFDdkIsSUFBSSxVQUFVLEVBQUU7d0JBQ2QsTUFBTSxRQUFRLEdBQW1CLFVBQVUsQ0FBQzt3QkFDNUMsVUFBVSxHQUFHLENBQUMsS0FBb0IsRUFBRSxJQUFhLEVBQUUsRUFBRSxDQUNqRCxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUN0RDt5QkFBTTt3QkFDTCxVQUFVLEdBQUcsbUJBQW1CLENBQUM7cUJBQ2xDO2lCQUNGO2FBQ0Y7U0FDRjtRQUVELE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxJQUFJLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtNZXRhZGF0YUNvbGxlY3RvciwgTWV0YWRhdGFWYWx1ZSwgTW9kdWxlTWV0YWRhdGF9IGZyb20gJy4uL21ldGFkYXRhL2luZGV4JztcblxuaW1wb3J0IHtNZXRhZGF0YVByb3ZpZGVyfSBmcm9tICcuL2NvbXBpbGVyX2hvc3QnO1xuaW1wb3J0IHtUU30gZnJvbSAnLi91dGlsJztcblxuZXhwb3J0IHR5cGUgVmFsdWVUcmFuc2Zvcm0gPSAodmFsdWU6IE1ldGFkYXRhVmFsdWUsIG5vZGU6IHRzLk5vZGUpID0+IE1ldGFkYXRhVmFsdWU7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFUcmFuc2Zvcm1lciB7XG4gIGNvbm5lY3Q/KGNhY2hlOiBNZXRhZGF0YUNhY2hlKTogdm9pZDtcbiAgc3RhcnQoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IFZhbHVlVHJhbnNmb3JtfHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDYWNoZSwgYW5kIHBvdGVudGlhbGx5IHRyYW5zZm9ybSwgbWV0YWRhdGEgYXMgaXQgaXMgYmVpbmcgY29sbGVjdGVkLlxuICovXG5leHBvcnQgY2xhc3MgTWV0YWRhdGFDYWNoZSBpbXBsZW1lbnRzIE1ldGFkYXRhUHJvdmlkZXIge1xuICBwcml2YXRlIG1ldGFkYXRhQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgTW9kdWxlTWV0YWRhdGF8dW5kZWZpbmVkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgcHJpdmF0ZSBjb2xsZWN0b3I6IE1ldGFkYXRhQ29sbGVjdG9yLCBwcml2YXRlIHJlYWRvbmx5IHN0cmljdDogYm9vbGVhbixcbiAgICAgIHByaXZhdGUgdHJhbnNmb3JtZXJzOiBNZXRhZGF0YVRyYW5zZm9ybWVyW10pIHtcbiAgICBmb3IgKGxldCB0cmFuc2Zvcm1lciBvZiB0cmFuc2Zvcm1lcnMpIHtcbiAgICAgIGlmICh0cmFuc2Zvcm1lci5jb25uZWN0KSB7XG4gICAgICAgIHRyYW5zZm9ybWVyLmNvbm5lY3QodGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0TWV0YWRhdGEoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IE1vZHVsZU1ldGFkYXRhfHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMubWV0YWRhdGFDYWNoZS5oYXMoc291cmNlRmlsZS5maWxlTmFtZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhQ2FjaGUuZ2V0KHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgIH1cbiAgICBsZXQgc3Vic3RpdHV0ZTogVmFsdWVUcmFuc2Zvcm18dW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gT25seSBwcm9jZXNzIHRyYW5zZm9ybWVycyBvbiBtb2R1bGVzIHRoYXQgYXJlIG5vdCBkZWNsYXJhdGlvbiBmaWxlcy5cbiAgICBjb25zdCBkZWNsYXJhdGlvbkZpbGUgPSBzb3VyY2VGaWxlLmlzRGVjbGFyYXRpb25GaWxlO1xuICAgIGNvbnN0IG1vZHVsZUZpbGUgPSB0cy5pc0V4dGVybmFsTW9kdWxlKHNvdXJjZUZpbGUpO1xuICAgIGlmICghZGVjbGFyYXRpb25GaWxlICYmIG1vZHVsZUZpbGUpIHtcbiAgICAgIGZvciAobGV0IHRyYW5zZm9ybSBvZiB0aGlzLnRyYW5zZm9ybWVycykge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1TdWJzdGl0dXRlID0gdHJhbnNmb3JtLnN0YXJ0KHNvdXJjZUZpbGUpO1xuICAgICAgICBpZiAodHJhbnNmb3JtU3Vic3RpdHV0ZSkge1xuICAgICAgICAgIGlmIChzdWJzdGl0dXRlKSB7XG4gICAgICAgICAgICBjb25zdCBwcmV2aW91czogVmFsdWVUcmFuc2Zvcm0gPSBzdWJzdGl0dXRlO1xuICAgICAgICAgICAgc3Vic3RpdHV0ZSA9ICh2YWx1ZTogTWV0YWRhdGFWYWx1ZSwgbm9kZTogdHMuTm9kZSkgPT5cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1TdWJzdGl0dXRlKHByZXZpb3VzKHZhbHVlLCBub2RlKSwgbm9kZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1YnN0aXR1dGUgPSB0cmFuc2Zvcm1TdWJzdGl0dXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzVHNGaWxlID0gVFMudGVzdChzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmNvbGxlY3Rvci5nZXRNZXRhZGF0YShzb3VyY2VGaWxlLCB0aGlzLnN0cmljdCAmJiBpc1RzRmlsZSwgc3Vic3RpdHV0ZSk7XG4gICAgdGhpcy5tZXRhZGF0YUNhY2hlLnNldChzb3VyY2VGaWxlLmZpbGVOYW1lLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
@@ -1,104 +0,0 @@
1
- /**
2
- * @license
3
- * Copyright Google LLC All Rights Reserved.
4
- *
5
- * Use of this source code is governed by an MIT-style license that can be
6
- * found in the LICENSE file at https://angular.io/license
7
- */
8
- import { METADATA_VERSION } from '../metadata';
9
- import { DTS } from './util';
10
- export function createMetadataReaderCache() {
11
- const data = new Map();
12
- return { data };
13
- }
14
- export function readMetadata(filePath, host, cache) {
15
- let metadatas = cache && cache.data.get(filePath);
16
- if (metadatas) {
17
- return metadatas;
18
- }
19
- if (host.fileExists(filePath)) {
20
- // If the file doesn't exists then we cannot return metadata for the file.
21
- // This will occur if the user referenced a declared module for which no file
22
- // exists for the module (i.e. jQuery or angularjs).
23
- if (DTS.test(filePath)) {
24
- metadatas = readMetadataFile(host, filePath);
25
- if (!metadatas) {
26
- // If there is a .d.ts file but no metadata file we need to produce a
27
- // metadata from the .d.ts file as metadata files capture reexports
28
- // (starting with v3).
29
- metadatas = [upgradeMetadataWithDtsData(host, { '__symbolic': 'module', 'version': 1, 'metadata': {} }, filePath)];
30
- }
31
- }
32
- else {
33
- const metadata = host.getSourceFileMetadata(filePath);
34
- metadatas = metadata ? [metadata] : [];
35
- }
36
- }
37
- if (cache && (!host.cacheMetadata || host.cacheMetadata(filePath))) {
38
- cache.data.set(filePath, metadatas);
39
- }
40
- return metadatas;
41
- }
42
- function readMetadataFile(host, dtsFilePath) {
43
- const metadataPath = dtsFilePath.replace(DTS, '.metadata.json');
44
- if (!host.fileExists(metadataPath)) {
45
- return undefined;
46
- }
47
- try {
48
- const metadataOrMetadatas = JSON.parse(host.readFile(metadataPath));
49
- const metadatas = metadataOrMetadatas ?
50
- (Array.isArray(metadataOrMetadatas) ? metadataOrMetadatas : [metadataOrMetadatas]) :
51
- [];
52
- if (metadatas.length) {
53
- let maxMetadata = metadatas.reduce((p, c) => p.version > c.version ? p : c);
54
- if (maxMetadata.version < METADATA_VERSION) {
55
- metadatas.push(upgradeMetadataWithDtsData(host, maxMetadata, dtsFilePath));
56
- }
57
- }
58
- return metadatas;
59
- }
60
- catch (e) {
61
- console.error(`Failed to read JSON file ${metadataPath}`);
62
- throw e;
63
- }
64
- }
65
- function upgradeMetadataWithDtsData(host, oldMetadata, dtsFilePath) {
66
- // patch v1 to v3 by adding exports and the `extends` clause.
67
- // patch v3 to v4 by adding `interface` symbols for TypeAlias
68
- let newMetadata = {
69
- '__symbolic': 'module',
70
- 'version': METADATA_VERSION,
71
- 'metadata': Object.assign({}, oldMetadata.metadata),
72
- };
73
- if (oldMetadata.exports) {
74
- newMetadata.exports = oldMetadata.exports;
75
- }
76
- if (oldMetadata.importAs) {
77
- newMetadata.importAs = oldMetadata.importAs;
78
- }
79
- if (oldMetadata.origins) {
80
- newMetadata.origins = oldMetadata.origins;
81
- }
82
- const dtsMetadata = host.getSourceFileMetadata(dtsFilePath);
83
- if (dtsMetadata) {
84
- for (let prop in dtsMetadata.metadata) {
85
- if (!newMetadata.metadata[prop]) {
86
- newMetadata.metadata[prop] = dtsMetadata.metadata[prop];
87
- }
88
- }
89
- if (dtsMetadata['importAs'])
90
- newMetadata['importAs'] = dtsMetadata['importAs'];
91
- // Only copy exports from exports from metadata prior to version 3.
92
- // Starting with version 3 the collector began collecting exports and
93
- // this should be redundant. Also, with bundler will rewrite the exports
94
- // which will hoist the exports from modules referenced indirectly causing
95
- // the imports to be different than the .d.ts files and using the .d.ts file
96
- // exports would cause the StaticSymbolResolver to redirect symbols to the
97
- // incorrect location.
98
- if ((!oldMetadata.version || oldMetadata.version < 3) && dtsMetadata.exports) {
99
- newMetadata.exports = dtsMetadata.exports;
100
- }
101
- }
102
- return newMetadata;
103
- }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfcmVhZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXItY2xpL3NyYy90cmFuc2Zvcm1lcnMvbWV0YWRhdGFfcmVhZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUlILE9BQU8sRUFBQyxnQkFBZ0IsRUFBaUIsTUFBTSxhQUFhLENBQUM7QUFFN0QsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQWdCM0IsTUFBTSxVQUFVLHlCQUF5QjtJQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBc0MsQ0FBQztJQUMzRCxPQUFPLEVBQUMsSUFBSSxFQUFDLENBQUM7QUFDaEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQ3hCLFFBQWdCLEVBQUUsSUFBd0IsRUFBRSxLQUEyQjtJQUV6RSxJQUFJLFNBQVMsR0FBRyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsSUFBSSxTQUFTLEVBQUU7UUFDYixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUM3QiwwRUFBMEU7UUFDMUUsNkVBQTZFO1FBQzdFLG9EQUFvRDtRQUNwRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEIsU0FBUyxHQUFHLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNkLHFFQUFxRTtnQkFDckUsbUVBQW1FO2dCQUNuRSxzQkFBc0I7Z0JBQ3RCLFNBQVMsR0FBRyxDQUFDLDBCQUEwQixDQUNuQyxJQUFJLEVBQUUsRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFB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QVcsRUFBRTtRQUNmLEtBQUssSUFBSSxJQUFJLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRTtZQUNyQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0IsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pEO1NBQ0Y7UUFDRCxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFBRSxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRS9FLG1FQUFtRTtRQUNuRSxxRUFBcUU7UUFDckUsd0VBQXdFO1FBQ3hFLDBFQUEwRTtRQUMxRSw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLHNCQUFzQjtRQUN0QixJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtZQUM1RSxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7U0FDM0M7S0FDRjtJQUNELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7TUVUQURBVEFfVkVSU0lPTiwgTW9kdWxlTWV0YWRhdGF9IGZyb20gJy4uL21ldGFkYXRhJztcblxuaW1wb3J0IHtEVFN9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWV0YWRhdGFSZWFkZXJIb3N0IHtcbiAgZ2V0U291cmNlRmlsZU1ldGFkYXRhKGZpbGVQYXRoOiBzdHJpbmcpOiBNb2R1bGVNZXRhZGF0YXx1bmRlZmluZWQ7XG4gIGNhY2hlTWV0YWRhdGE/KGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuO1xuICBmaWxlRXhpc3RzKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuICByZWFkRmlsZShmaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhUmVhZGVyQ2FjaGUge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBkYXRhOiBNYXA8c3RyaW5nLCBNb2R1bGVNZXRhZGF0YVtdfHVuZGVmaW5lZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNZXRhZGF0YVJlYWRlckNhY2hlKCk6IE1ldGFkYXRhUmVhZGVyQ2FjaGUge1xuICBjb25zdCBkYXRhID0gbmV3IE1hcDxzdHJpbmcsIE1vZHVsZU1ldGFkYXRhW118dW5kZWZpbmVkPigpO1xuICByZXR1cm4ge2RhdGF9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVhZE1ldGFkYXRhKFxuICAgIGZpbGVQYXRoOiBzdHJpbmcsIGhvc3Q6IE1ldGFkYXRhUmVhZGVySG9zdCwgY2FjaGU/OiBNZXRhZGF0YVJlYWRlckNhY2hlKTogTW9kdWxlTWV0YWRhdGFbXXxcbiAgICB1bmRlZmluZWQge1xuICBsZXQgbWV0YWRhdGFzID0gY2FjaGUgJiYgY2FjaGUuZGF0YS5nZXQoZmlsZVBhdGgpO1xuICBpZiAobWV0YWRhdGFzKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhcztcbiAgfVxuICBpZiAoaG9zdC5maWxlRXhpc3RzKGZpbGVQYXRoKSkge1xuICAgIC8vIElmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3RzIHRoZW4gd2UgY2Fubm90IHJldHVybiBtZXRhZGF0YSBmb3IgdGhlIGZpbGUuXG4gICAgLy8gVGhpcyB3aWxsIG9jY3VyIGlmIHRoZSB1c2VyIHJlZmVyZW5jZWQgYSBkZWNsYXJlZCBtb2R1bGUgZm9yIHdoaWNoIG5vIGZpbGVcbiAgICAvLyBleGlzdHMgZm9yIHRoZSBtb2R1bGUgKGkuZS4galF1ZXJ5IG9yIGFuZ3VsYXJqcykuXG4gICAgaWYgKERUUy50ZXN0KGZpbGVQYXRoKSkge1xuICAgICAgbWV0YWRhdGFzID0gcmVhZE1ldGFkYXRhRmlsZShob3N0LCBmaWxlUGF0aCk7XG4gICAgICBpZiAoIW1ldGFkYXRhcykge1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIC5kLnRzIGZpbGUgYnV0IG5vIG1ldGFkYXRhIGZpbGUgd2UgbmVlZCB0byBwcm9kdWNlIGFcbiAgICAgICAgLy8gbWV0YWRhdGEgZnJvbSB0aGUgLmQudHMgZmlsZSBhcyBtZXRhZGF0YSBmaWxlcyBjYXB0dXJlIHJlZXhwb3J0c1xuICAgICAgICAvLyAoc3RhcnRpbmcgd2l0aCB2MykuXG4gICAgICAgIG1ldGFkYXRhcyA9IFt1cGdyYWRlTWV0YWRhdGFXaXRoRHRzRGF0YShcbiAgICAgICAgICAgIGhvc3QsIHsnX19zeW1ib2xpYyc6ICdtb2R1bGUnLCAndmVyc2lvbic6IDEsICdtZXRhZGF0YSc6IHt9fSwgZmlsZVBhdGgpXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSBob3N0LmdldFNvdXJjZUZpbGVNZXRhZGF0YShmaWxlUGF0aCk7XG4gICAgICBtZXRhZGF0YXMgPSBtZXRhZGF0YSA/IFttZXRhZGF0YV0gOiBbXTtcbiAgICB9XG4gIH1cbiAgaWYgKGNhY2hlICYmICghaG9zdC5jYWNoZU1ldGFkYXRhIHx8IGhvc3QuY2FjaGVNZXRhZGF0YShmaWxlUGF0aCkpKSB7XG4gICAgY2FjaGUuZGF0YS5zZXQoZmlsZVBhdGgsIG1ldGFkYXRhcyk7XG4gIH1cbiAgcmV0dXJuIG1ldGFkYXRhcztcbn1cblxuXG5mdW5jdGlvbiByZWFkTWV0YWRhdGFGaWxlKGhvc3Q6IE1ldGFkYXRhUmVhZGVySG9zdCwgZHRzRmlsZVBhdGg6IHN0cmluZyk6IE1vZHVsZU1ldGFkYXRhW118XG4gICAgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWV0YWRhdGFQYXRoID0gZHRzRmlsZVBhdGgucmVwbGFjZShEVFMsICcubWV0YWRhdGEuanNvbicpO1xuICBpZiAoIWhvc3QuZmlsZUV4aXN0cyhtZXRhZGF0YVBhdGgpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IG1ldGFkYXRhT3JNZXRhZGF0YXMgPVxuICAgICAgICBKU09OLnBhcnNlKGhvc3QucmVhZEZpbGUobWV0YWRhdGFQYXRoKSkgYXMgTW9kdWxlTWV0YWRhdGEgfCBNb2R1bGVNZXRhZGF0YVtdIHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1ldGFkYXRhcyA9IG1ldGFkYXRhT3JNZXRhZGF0YXMgP1xuICAgICAgICAoQXJyYXkuaXNBcnJheShtZXRhZGF0YU9yTWV0YWRhdGFzKSA/IG1ldGFkYXRhT3JNZXRhZGF0YXMgOiBbbWV0YWRhdGFPck1ldGFkYXRhc10pIDpcbiAgICAgICAgW107XG4gICAgaWYgKG1ldGFkYXRhcy5sZW5ndGgpIHtcbiAgICAgIGxldCBtYXhNZXRhZGF0YSA9IG1ldGFkYXRhcy5yZWR1Y2UoKHAsIGMpID0+IHAudmVyc2lvbiA+IGMudmVyc2lvbiA/IHAgOiBjKTtcbiAgICAgIGlmIChtYXhNZXRhZGF0YS52ZXJzaW9uIDwgTUVUQURBVEFfVkVSU0lPTikge1xuICAgICAgICBtZXRhZGF0YXMucHVzaCh1cGdyYWRlTWV0YWRhdGFXaXRoRHRzRGF0YShob3N0LCBtYXhNZXRhZGF0YSwgZHRzRmlsZVBhdGgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ldGFkYXRhcztcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byByZWFkIEpTT04gZmlsZSAke21ldGFkYXRhUGF0aH1gKTtcbiAgICB0aHJvdyBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGVNZXRhZGF0YVdpdGhEdHNEYXRhKFxuICAgIGhvc3Q6IE1ldGFkYXRhUmVhZGVySG9zdCwgb2xkTWV0YWRhdGE6IE1vZHVsZU1ldGFkYXRhLCBkdHNGaWxlUGF0aDogc3RyaW5nKTogTW9kdWxlTWV0YWRhdGEge1xuICAvLyBwYXRjaCB2MSB0byB2MyBieSBhZGRpbmcgZXhwb3J0cyBhbmQgdGhlIGBleHRlbmRzYCBjbGF1c2UuXG4gIC8vIHBhdGNoIHYzIHRvIHY0IGJ5IGFkZGluZyBgaW50ZXJmYWNlYCBzeW1ib2xzIGZvciBUeXBlQWxpYXNcbiAgbGV0IG5ld01ldGFkYXRhOiBNb2R1bGVNZXRhZGF0YSA9IHtcbiAgICAnX19zeW1ib2xpYyc6ICdtb2R1bGUnLFxuICAgICd2ZXJzaW9uJzogTUVUQURBVEFfVkVSU0lPTixcbiAgICAnbWV0YWRhdGEnOiB7Li4ub2xkTWV0YWRhdGEubWV0YWRhdGF9LFxuICB9O1xuICBpZiAob2xkTWV0YWRhdGEuZXhwb3J0cykge1xuICAgIG5ld01ldGFkYXRhLmV4cG9ydHMgPSBvbGRNZXRhZGF0YS5leHBvcnRzO1xuICB9XG4gIGlmIChvbGRNZXRhZGF0YS5pbXBvcnRBcykge1xuICAgIG5ld01ldGFkYXRhLmltcG9ydEFzID0gb2xkTWV0YWRhdGEuaW1wb3J0QXM7XG4gIH1cbiAgaWYgKG9sZE1ldGFkYXRhLm9yaWdpbnMpIHtcbiAgICBuZXdNZXRhZGF0YS5vcmlnaW5zID0gb2xkTWV0YWRhdGEub3JpZ2lucztcbiAgfVxuICBjb25zdCBkdHNNZXRhZGF0YSA9IGhvc3QuZ2V0U291cmNlRmlsZU1ldGFkYXRhKGR0c0ZpbGVQYXRoKTtcbiAgaWYgKGR0c01ldGFkYXRhKSB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBkdHNNZXRhZGF0YS5tZXRhZGF0YSkge1xuICAgICAgaWYgKCFuZXdNZXRhZGF0YS5tZXRhZGF0YVtwcm9wXSkge1xuICAgICAgICBuZXdNZXRhZGF0YS5tZXRhZGF0YVtwcm9wXSA9IGR0c01ldGFkYXRhLm1ldGFkYXRhW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZHRzTWV0YWRhdGFbJ2ltcG9ydEFzJ10pIG5ld01ldGFkYXRhWydpbXBvcnRBcyddID0gZHRzTWV0YWRhdGFbJ2ltcG9ydEFzJ107XG5cbiAgICAvLyBPbmx5IGNvcHkgZXhwb3J0cyBmcm9tIGV4cG9ydHMgZnJvbSBtZXRhZGF0YSBwcmlvciB0byB2ZXJzaW9uIDMuXG4gICAgLy8gU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDMgdGhlIGNvbGxlY3RvciBiZWdhbiBjb2xsZWN0aW5nIGV4cG9ydHMgYW5kXG4gICAgLy8gdGhpcyBzaG91bGQgYmUgcmVkdW5kYW50LiBBbHNvLCB3aXRoIGJ1bmRsZXIgd2lsbCByZXdyaXRlIHRoZSBleHBvcnRzXG4gICAgLy8gd2hpY2ggd2lsbCBob2lzdCB0aGUgZXhwb3J0cyBmcm9tIG1vZHVsZXMgcmVmZXJlbmNlZCBpbmRpcmVjdGx5IGNhdXNpbmdcbiAgICAvLyB0aGUgaW1wb3J0cyB0byBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgLmQudHMgZmlsZXMgYW5kIHVzaW5nIHRoZSAuZC50cyBmaWxlXG4gICAgLy8gZXhwb3J0cyB3b3VsZCBjYXVzZSB0aGUgU3RhdGljU3ltYm9sUmVzb2x2ZXIgdG8gcmVkaXJlY3Qgc3ltYm9scyB0byB0aGVcbiAgICAvLyBpbmNvcnJlY3QgbG9jYXRpb24uXG4gICAgaWYgKCghb2xkTWV0YWRhdGEudmVyc2lvbiB8fCBvbGRNZXRhZGF0YS52ZXJzaW9uIDwgMykgJiYgZHRzTWV0YWRhdGEuZXhwb3J0cykge1xuICAgICAgbmV3TWV0YWRhdGEuZXhwb3J0cyA9IGR0c01ldGFkYXRhLmV4cG9ydHM7XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdNZXRhZGF0YTtcbn1cbiJdfQ==