@angular/compiler 19.0.0-next.1 → 19.0.0-next.10
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.
- package/LICENSE +21 -0
- package/fesm2022/compiler.mjs +5465 -4675
- package/fesm2022/compiler.mjs.map +1 -1
- package/index.d.ts +115 -15
- package/package.json +2 -4
- package/esm2022/compiler.mjs +0 -13
- package/esm2022/index.mjs +0 -13
- package/esm2022/public_api.mjs +0 -15
- package/esm2022/src/assertions.mjs +0 -31
- package/esm2022/src/chars.mjs +0 -90
- package/esm2022/src/compiler.mjs +0 -88
- package/esm2022/src/compiler_facade_interface.mjs +0 -29
- package/esm2022/src/config.mjs +0 -20
- package/esm2022/src/constant_pool.mjs +0 -285
- package/esm2022/src/core.mjs +0 -96
- package/esm2022/src/expression_parser/ast.mjs +0 -755
- package/esm2022/src/expression_parser/lexer.mjs +0 -421
- package/esm2022/src/expression_parser/parser.mjs +0 -1222
- package/esm2022/src/i18n/digest.mjs +0 -322
- package/esm2022/src/i18n/extractor_merger.mjs +0 -409
- package/esm2022/src/i18n/i18n_ast.mjs +0 -212
- package/esm2022/src/i18n/i18n_html_parser.mjs +0 -54
- package/esm2022/src/i18n/i18n_parser.mjs +0 -247
- package/esm2022/src/i18n/index.mjs +0 -16
- package/esm2022/src/i18n/message_bundle.mjs +0 -93
- package/esm2022/src/i18n/parse_util.mjs +0 -17
- package/esm2022/src/i18n/serializers/placeholder.mjs +0 -139
- package/esm2022/src/i18n/serializers/serializer.mjs +0 -77
- package/esm2022/src/i18n/serializers/xliff.mjs +0 -300
- package/esm2022/src/i18n/serializers/xliff2.mjs +0 -349
- package/esm2022/src/i18n/serializers/xmb.mjs +0 -188
- package/esm2022/src/i18n/serializers/xml_helper.mjs +0 -94
- package/esm2022/src/i18n/serializers/xtb.mjs +0 -186
- package/esm2022/src/i18n/translation_bundle.mjs +0 -164
- package/esm2022/src/injectable_compiler_2.mjs +0 -138
- package/esm2022/src/jit_compiler_facade.mjs +0 -681
- package/esm2022/src/ml_parser/ast.mjs +0 -167
- package/esm2022/src/ml_parser/defaults.mjs +0 -24
- package/esm2022/src/ml_parser/entities.mjs +0 -2144
- package/esm2022/src/ml_parser/html_parser.mjs +0 -18
- package/esm2022/src/ml_parser/html_tags.mjs +0 -156
- package/esm2022/src/ml_parser/html_whitespaces.mjs +0 -107
- package/esm2022/src/ml_parser/icu_ast_expander.mjs +0 -125
- package/esm2022/src/ml_parser/lexer.mjs +0 -1210
- package/esm2022/src/ml_parser/parser.mjs +0 -539
- package/esm2022/src/ml_parser/tags.mjs +0 -47
- package/esm2022/src/ml_parser/tokens.mjs +0 -9
- package/esm2022/src/ml_parser/xml_parser.mjs +0 -19
- package/esm2022/src/ml_parser/xml_tags.mjs +0 -32
- package/esm2022/src/output/abstract_emitter.mjs +0 -524
- package/esm2022/src/output/abstract_js_emitter.mjs +0 -130
- package/esm2022/src/output/map_util.mjs +0 -19
- package/esm2022/src/output/output_ast.mjs +0 -1301
- package/esm2022/src/output/output_jit.mjs +0 -138
- package/esm2022/src/output/output_jit_trusted_types.mjs +0 -100
- package/esm2022/src/output/source_map.mjs +0 -150
- package/esm2022/src/parse_util.mjs +0 -198
- package/esm2022/src/render3/partial/api.mjs +0 -9
- package/esm2022/src/render3/partial/class_metadata.mjs +0 -52
- package/esm2022/src/render3/partial/component.mjs +0 -197
- package/esm2022/src/render3/partial/directive.mjs +0 -264
- package/esm2022/src/render3/partial/factory.mjs +0 -35
- package/esm2022/src/render3/partial/injectable.mjs +0 -67
- package/esm2022/src/render3/partial/injector.mjs +0 -41
- package/esm2022/src/render3/partial/ng_module.mjs +0 -63
- package/esm2022/src/render3/partial/pipe.mjs +0 -50
- package/esm2022/src/render3/partial/util.mjs +0 -79
- package/esm2022/src/render3/r3_ast.mjs +0 -493
- package/esm2022/src/render3/r3_class_debug_info_compiler.mjs +0 -35
- package/esm2022/src/render3/r3_class_metadata_compiler.mjs +0 -92
- package/esm2022/src/render3/r3_control_flow.mjs +0 -421
- package/esm2022/src/render3/r3_deferred_blocks.mjs +0 -170
- package/esm2022/src/render3/r3_deferred_triggers.mjs +0 -316
- package/esm2022/src/render3/r3_factory.mjs +0 -200
- package/esm2022/src/render3/r3_identifiers.mjs +0 -480
- package/esm2022/src/render3/r3_injector_compiler.mjs +0 -28
- package/esm2022/src/render3/r3_jit.mjs +0 -29
- package/esm2022/src/render3/r3_module_compiler.mjs +0 -211
- package/esm2022/src/render3/r3_pipe_compiler.mjs +0 -35
- package/esm2022/src/render3/r3_template_transform.mjs +0 -560
- package/esm2022/src/render3/util.mjs +0 -90
- package/esm2022/src/render3/view/api.mjs +0 -14
- package/esm2022/src/render3/view/compiler.mjs +0 -546
- package/esm2022/src/render3/view/i18n/get_msg_utils.mjs +0 -113
- package/esm2022/src/render3/view/i18n/icu_serializer.mjs +0 -43
- package/esm2022/src/render3/view/i18n/localize_utils.mjs +0 -118
- package/esm2022/src/render3/view/i18n/meta.mjs +0 -259
- package/esm2022/src/render3/view/i18n/util.mjs +0 -70
- package/esm2022/src/render3/view/query_generation.mjs +0 -182
- package/esm2022/src/render3/view/t2_api.mjs +0 -9
- package/esm2022/src/render3/view/t2_binder.mjs +0 -823
- package/esm2022/src/render3/view/template.mjs +0 -113
- package/esm2022/src/render3/view/util.mjs +0 -192
- package/esm2022/src/resource_loader.mjs +0 -17
- package/esm2022/src/schema/dom_element_schema_registry.mjs +0 -471
- package/esm2022/src/schema/dom_security_schema.mjs +0 -96
- package/esm2022/src/schema/element_schema_registry.mjs +0 -10
- package/esm2022/src/schema/trusted_types_sinks.mjs +0 -41
- package/esm2022/src/selector.mjs +0 -400
- package/esm2022/src/shadow_css.mjs +0 -1053
- package/esm2022/src/style_url_resolver.mjs +0 -17
- package/esm2022/src/template/pipeline/ir/index.mjs +0 -18
- package/esm2022/src/template/pipeline/ir/src/enums.mjs +0 -503
- package/esm2022/src/template/pipeline/ir/src/expression.mjs +0 -997
- package/esm2022/src/template/pipeline/ir/src/handle.mjs +0 -13
- package/esm2022/src/template/pipeline/ir/src/operations.mjs +0 -261
- package/esm2022/src/template/pipeline/ir/src/ops/create.mjs +0 -405
- package/esm2022/src/template/pipeline/ir/src/ops/host.mjs +0 -25
- package/esm2022/src/template/pipeline/ir/src/ops/shared.mjs +0 -43
- package/esm2022/src/template/pipeline/ir/src/ops/update.mjs +0 -277
- package/esm2022/src/template/pipeline/ir/src/traits.mjs +0 -64
- package/esm2022/src/template/pipeline/ir/src/variable.mjs +0 -13
- package/esm2022/src/template/pipeline/src/compilation.mjs +0 -194
- package/esm2022/src/template/pipeline/src/conversion.mjs +0 -64
- package/esm2022/src/template/pipeline/src/emit.mjs +0 -238
- package/esm2022/src/template/pipeline/src/ingest.mjs +0 -1058
- package/esm2022/src/template/pipeline/src/instruction.mjs +0 -564
- package/esm2022/src/template/pipeline/src/phases/any_cast.mjs +0 -32
- package/esm2022/src/template/pipeline/src/phases/apply_i18n_expressions.mjs +0 -63
- package/esm2022/src/template/pipeline/src/phases/assign_i18n_slot_dependencies.mjs +0 -63
- package/esm2022/src/template/pipeline/src/phases/attribute_extraction.mjs +0 -138
- package/esm2022/src/template/pipeline/src/phases/binding_specialization.mjs +0 -75
- package/esm2022/src/template/pipeline/src/phases/chaining.mjs +0 -112
- package/esm2022/src/template/pipeline/src/phases/collapse_singleton_interpolations.mjs +0 -32
- package/esm2022/src/template/pipeline/src/phases/conditionals.mjs +0 -58
- package/esm2022/src/template/pipeline/src/phases/const_collection.mjs +0 -214
- package/esm2022/src/template/pipeline/src/phases/convert_i18n_bindings.mjs +0 -52
- package/esm2022/src/template/pipeline/src/phases/create_i18n_contexts.mjs +0 -105
- package/esm2022/src/template/pipeline/src/phases/deduplicate_text_bindings.mjs +0 -40
- package/esm2022/src/template/pipeline/src/phases/defer_configs.mjs +0 -29
- package/esm2022/src/template/pipeline/src/phases/defer_resolve_targets.mjs +0 -113
- package/esm2022/src/template/pipeline/src/phases/empty_elements.mjs +0 -47
- package/esm2022/src/template/pipeline/src/phases/expand_safe_reads.mjs +0 -192
- package/esm2022/src/template/pipeline/src/phases/extract_i18n_messages.mjs +0 -218
- package/esm2022/src/template/pipeline/src/phases/generate_advance.mjs +0 -66
- package/esm2022/src/template/pipeline/src/phases/generate_local_let_references.mjs +0 -29
- package/esm2022/src/template/pipeline/src/phases/generate_projection_def.mjs +0 -46
- package/esm2022/src/template/pipeline/src/phases/generate_variables.mjs +0 -170
- package/esm2022/src/template/pipeline/src/phases/has_const_expression_collection.mjs +0 -28
- package/esm2022/src/template/pipeline/src/phases/host_style_property_parsing.mjs +0 -81
- package/esm2022/src/template/pipeline/src/phases/i18n_const_collection.mjs +0 -309
- package/esm2022/src/template/pipeline/src/phases/i18n_text_extraction.mjs +0 -97
- package/esm2022/src/template/pipeline/src/phases/local_refs.mjs +0 -43
- package/esm2022/src/template/pipeline/src/phases/namespace.mjs +0 -26
- package/esm2022/src/template/pipeline/src/phases/naming.mjs +0 -179
- package/esm2022/src/template/pipeline/src/phases/next_context_merging.mjs +0 -75
- package/esm2022/src/template/pipeline/src/phases/ng_container.mjs +0 -29
- package/esm2022/src/template/pipeline/src/phases/nonbindable.mjs +0 -47
- package/esm2022/src/template/pipeline/src/phases/nullish_coalescing.mjs +0 -33
- package/esm2022/src/template/pipeline/src/phases/ordering.mjs +0 -140
- package/esm2022/src/template/pipeline/src/phases/parse_extracted_styles.mjs +0 -137
- package/esm2022/src/template/pipeline/src/phases/phase_remove_content_selectors.mjs +0 -42
- package/esm2022/src/template/pipeline/src/phases/pipe_creation.mjs +0 -74
- package/esm2022/src/template/pipeline/src/phases/pipe_variadic.mjs +0 -30
- package/esm2022/src/template/pipeline/src/phases/propagate_i18n_blocks.mjs +0 -81
- package/esm2022/src/template/pipeline/src/phases/pure_function_extraction.mjs +0 -55
- package/esm2022/src/template/pipeline/src/phases/pure_literal_structures.mjs +0 -58
- package/esm2022/src/template/pipeline/src/phases/reify.mjs +0 -433
- package/esm2022/src/template/pipeline/src/phases/remove_empty_bindings.mjs +0 -31
- package/esm2022/src/template/pipeline/src/phases/remove_i18n_contexts.mjs +0 -27
- package/esm2022/src/template/pipeline/src/phases/remove_illegal_let_references.mjs +0 -36
- package/esm2022/src/template/pipeline/src/phases/remove_unused_i18n_attrs.mjs +0 -33
- package/esm2022/src/template/pipeline/src/phases/resolve_contexts.mjs +0 -60
- package/esm2022/src/template/pipeline/src/phases/resolve_defer_deps_fns.mjs +0 -31
- package/esm2022/src/template/pipeline/src/phases/resolve_dollar_event.mjs +0 -36
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_element_placeholders.mjs +0 -266
- package/esm2022/src/template/pipeline/src/phases/resolve_i18n_expression_placeholders.mjs +0 -70
- package/esm2022/src/template/pipeline/src/phases/resolve_names.mjs +0 -124
- package/esm2022/src/template/pipeline/src/phases/resolve_sanitizers.mjs +0 -123
- package/esm2022/src/template/pipeline/src/phases/save_restore_view.mjs +0 -64
- package/esm2022/src/template/pipeline/src/phases/slot_allocation.mjs +0 -62
- package/esm2022/src/template/pipeline/src/phases/store_let_optimization.mjs +0 -35
- package/esm2022/src/template/pipeline/src/phases/style_binding_specialization.mjs +0 -42
- package/esm2022/src/template/pipeline/src/phases/temporary_variables.mjs +0 -87
- package/esm2022/src/template/pipeline/src/phases/track_fn_generation.mjs +0 -52
- package/esm2022/src/template/pipeline/src/phases/track_fn_optimization.mjs +0 -88
- package/esm2022/src/template/pipeline/src/phases/track_variables.mjs +0 -36
- package/esm2022/src/template/pipeline/src/phases/transform_two_way_binding_set.mjs +0 -43
- package/esm2022/src/template/pipeline/src/phases/var_counting.mjs +0 -155
- package/esm2022/src/template/pipeline/src/phases/variable_optimization.mjs +0 -423
- package/esm2022/src/template/pipeline/src/phases/wrap_icus.mjs +0 -41
- package/esm2022/src/template/pipeline/src/util/elements.mjs +0 -29
- package/esm2022/src/template_parser/binding_parser.mjs +0 -465
- package/esm2022/src/template_parser/template_preparser.mjs +0 -84
- package/esm2022/src/util.mjs +0 -124
- package/esm2022/src/version.mjs +0 -15
package/esm2022/src/compiler.mjs
DELETED
|
@@ -1,88 +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
|
-
//////////////////////////////////////
|
|
9
|
-
// THIS FILE HAS GLOBAL SIDE EFFECT //
|
|
10
|
-
// (see bottom of file) //
|
|
11
|
-
//////////////////////////////////////
|
|
12
|
-
/**
|
|
13
|
-
* @module
|
|
14
|
-
* @description
|
|
15
|
-
* Entry point for all APIs of the compiler package.
|
|
16
|
-
*
|
|
17
|
-
* <div class="callout is-critical">
|
|
18
|
-
* <header>Unstable APIs</header>
|
|
19
|
-
* <p>
|
|
20
|
-
* All compiler apis are currently considered experimental and private!
|
|
21
|
-
* </p>
|
|
22
|
-
* <p>
|
|
23
|
-
* We expect the APIs in this package to keep on changing. Do not rely on them.
|
|
24
|
-
* </p>
|
|
25
|
-
* </div>
|
|
26
|
-
*/
|
|
27
|
-
import * as core from './core';
|
|
28
|
-
import { publishFacade } from './jit_compiler_facade';
|
|
29
|
-
import { global } from './util';
|
|
30
|
-
export { CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA } from './core';
|
|
31
|
-
export { core };
|
|
32
|
-
export * from './version';
|
|
33
|
-
export { CompilerConfig, preserveWhitespacesDefault } from './config';
|
|
34
|
-
export * from './resource_loader';
|
|
35
|
-
export { ConstantPool } from './constant_pool';
|
|
36
|
-
export { DEFAULT_INTERPOLATION_CONFIG, InterpolationConfig } from './ml_parser/defaults';
|
|
37
|
-
export * from './schema/element_schema_registry';
|
|
38
|
-
export * from './i18n/index';
|
|
39
|
-
export * from './expression_parser/ast';
|
|
40
|
-
export * from './expression_parser/lexer';
|
|
41
|
-
export * from './expression_parser/parser';
|
|
42
|
-
export * from './ml_parser/ast';
|
|
43
|
-
export * from './ml_parser/html_parser';
|
|
44
|
-
export * from './ml_parser/html_tags';
|
|
45
|
-
export * from './ml_parser/tags';
|
|
46
|
-
export { ParseTreeResult, TreeError } from './ml_parser/parser';
|
|
47
|
-
export * from './ml_parser/xml_parser';
|
|
48
|
-
export { ArrayType, DYNAMIC_TYPE, BinaryOperator, BinaryOperatorExpr, BuiltinType, BuiltinTypeName, CommaExpr, ConditionalExpr, DeclareFunctionStmt, DeclareVarStmt, Expression, ExpressionStatement, ExpressionType, ExternalExpr, ExternalReference, literalMap, FunctionExpr, IfStmt, InstantiateExpr, InvokeFunctionExpr, ArrowFunctionExpr, LiteralArrayExpr, LiteralExpr, LiteralMapExpr, MapType, NotExpr, NONE_TYPE, ReadKeyExpr, ReadPropExpr, ReadVarExpr, ReturnStatement, TaggedTemplateExpr, TemplateLiteral, TemplateLiteralElement, Type, TypeModifier, WrappedNodeExpr, literal, WriteKeyExpr, WritePropExpr, WriteVarExpr, StmtModifier, Statement, STRING_TYPE, TypeofExpr, jsDocComment, leadingComment, LeadingComment, JSDocComment, UnaryOperator, UnaryOperatorExpr, LocalizedString, TransplantedType, DynamicImportExpr, } from './output/output_ast';
|
|
49
|
-
export { EmitterVisitorContext } from './output/abstract_emitter';
|
|
50
|
-
export { JitEvaluator } from './output/output_jit';
|
|
51
|
-
export * from './parse_util';
|
|
52
|
-
export * from './schema/dom_element_schema_registry';
|
|
53
|
-
export * from './selector';
|
|
54
|
-
export { Version } from './util';
|
|
55
|
-
export * from './injectable_compiler_2';
|
|
56
|
-
export * from './render3/partial/api';
|
|
57
|
-
export * from './render3/view/api';
|
|
58
|
-
export { visitAll as tmplAstVisitAll, BlockNode as TmplAstBlockNode, BoundAttribute as TmplAstBoundAttribute, BoundEvent as TmplAstBoundEvent, BoundText as TmplAstBoundText, Content as TmplAstContent, Element as TmplAstElement, Icu as TmplAstIcu, RecursiveVisitor as TmplAstRecursiveVisitor, Reference as TmplAstReference, Template as TmplAstTemplate, Text as TmplAstText, TextAttribute as TmplAstTextAttribute, Variable as TmplAstVariable, DeferredBlock as TmplAstDeferredBlock, DeferredBlockPlaceholder as TmplAstDeferredBlockPlaceholder, DeferredBlockLoading as TmplAstDeferredBlockLoading, DeferredBlockError as TmplAstDeferredBlockError, DeferredTrigger as TmplAstDeferredTrigger, BoundDeferredTrigger as TmplAstBoundDeferredTrigger, IdleDeferredTrigger as TmplAstIdleDeferredTrigger, ImmediateDeferredTrigger as TmplAstImmediateDeferredTrigger, HoverDeferredTrigger as TmplAstHoverDeferredTrigger, TimerDeferredTrigger as TmplAstTimerDeferredTrigger, InteractionDeferredTrigger as TmplAstInteractionDeferredTrigger, ViewportDeferredTrigger as TmplAstViewportDeferredTrigger, SwitchBlock as TmplAstSwitchBlock, SwitchBlockCase as TmplAstSwitchBlockCase, ForLoopBlock as TmplAstForLoopBlock, ForLoopBlockEmpty as TmplAstForLoopBlockEmpty, IfBlock as TmplAstIfBlock, IfBlockBranch as TmplAstIfBlockBranch, UnknownBlock as TmplAstUnknownBlock, LetDeclaration as TmplAstLetDeclaration, } from './render3/r3_ast';
|
|
59
|
-
export * from './render3/view/t2_api';
|
|
60
|
-
export * from './render3/view/t2_binder';
|
|
61
|
-
export { createCssSelectorFromNode } from './render3/view/util';
|
|
62
|
-
export { Identifiers as R3Identifiers } from './render3/r3_identifiers';
|
|
63
|
-
export { compileClassMetadata, compileComponentClassMetadata, compileOpaqueAsyncClassMetadata, } from './render3/r3_class_metadata_compiler';
|
|
64
|
-
export { compileClassDebugInfo } from './render3/r3_class_debug_info_compiler';
|
|
65
|
-
export { compileFactoryFunction, FactoryTarget, } from './render3/r3_factory';
|
|
66
|
-
export { compileNgModule, R3SelectorScopeMode, R3NgModuleMetadataKind, } from './render3/r3_module_compiler';
|
|
67
|
-
export { compileInjector } from './render3/r3_injector_compiler';
|
|
68
|
-
export { compilePipeFromMetadata } from './render3/r3_pipe_compiler';
|
|
69
|
-
export { makeBindingParser, parseTemplate, } from './render3/view/template';
|
|
70
|
-
export { createMayBeForwardRefExpression, devOnlyGuardedExpression, getSafePropertyAccessString, } from './render3/util';
|
|
71
|
-
export { compileComponentFromMetadata, compileDirectiveFromMetadata, parseHostBindings, verifyHostBindings, encapsulateStyle, compileDeferResolverFunction, } from './render3/view/compiler';
|
|
72
|
-
export { compileDeclareClassMetadata, compileComponentDeclareClassMetadata, } from './render3/partial/class_metadata';
|
|
73
|
-
export { compileDeclareComponentFromMetadata, } from './render3/partial/component';
|
|
74
|
-
export { compileDeclareDirectiveFromMetadata } from './render3/partial/directive';
|
|
75
|
-
export { compileDeclareFactoryFunction } from './render3/partial/factory';
|
|
76
|
-
export { compileDeclareInjectableFromMetadata } from './render3/partial/injectable';
|
|
77
|
-
export { compileDeclareInjectorFromMetadata } from './render3/partial/injector';
|
|
78
|
-
export { compileDeclareNgModuleFromMetadata } from './render3/partial/ng_module';
|
|
79
|
-
export { compileDeclarePipeFromMetadata } from './render3/partial/pipe';
|
|
80
|
-
export { publishFacade } from './jit_compiler_facade';
|
|
81
|
-
export { emitDistinctChangesOnlyDefaultValue, ChangeDetectionStrategy, ViewEncapsulation, } from './core';
|
|
82
|
-
import * as outputAst from './output/output_ast';
|
|
83
|
-
export { outputAst };
|
|
84
|
-
// This file only reexports content of the `src` folder. Keep it that way.
|
|
85
|
-
// This function call has a global side effects and publishes the compiler into global namespace for
|
|
86
|
-
// the late binding of the Compiler to the @angular/core for jit compilation.
|
|
87
|
-
publishFacade(global);
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21waWxlci9zcmMvY29tcGlsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsc0NBQXNDO0FBQ3RDLHNDQUFzQztBQUN0QyxzQ0FBc0M7QUFDdEMsc0NBQXNDO0FBRXRDOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxLQUFLLElBQUksTUFBTSxRQUFRLENBQUM7QUFDL0IsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFOUIsT0FBTyxFQUFDLHNCQUFzQixFQUFFLGdCQUFnQixFQUFpQixNQUFNLFFBQVEsQ0FBQztBQUNoRixPQUFPLEVBQUMsSUFBSSxFQUFDLENBQUM7QUFFZCxjQUFjLFdBQVcsQ0FBQztBQUMxQixPQUFPLEVBQUMsY0FBYyxFQUFFLDBCQUEwQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3BFLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzdDLE9BQU8sRUFBQyw0QkFBNEIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZGLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxPQUFPLEVBQUMsZUFBZSxFQUFFLFNBQVMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBRTlELGNBQWMs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NEIsQ0FBQztBQUM5RSxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUMvRSxPQUFPLEVBQUMsOEJBQThCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUNMLG1DQUFtQyxFQUNuQyx1QkFBdUIsRUFDdkIsaUJBQWlCLEdBQ2xCLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sS0FBSyxTQUFTLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFDLFNBQVMsRUFBQyxDQUFDO0FBQ25CLDBFQUEwRTtBQUUxRSxvR0FBb0c7QUFDcEcsNkVBQTZFO0FBQzdFLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gVEhJUyBGSUxFIEhBUyBHTE9CQUwgU0lERSBFRkZFQ1QgLy9cbi8vICAgICAgIChzZWUgYm90dG9tIG9mIGZpbGUpICAgICAgIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4vKipcbiAqIEBtb2R1bGVcbiAqIEBkZXNjcmlwdGlvblxuICogRW50cnkgcG9pbnQgZm9yIGFsbCBBUElzIG9mIHRoZSBjb21waWxlciBwYWNrYWdlLlxuICpcbiAqIDxkaXYgY2xhc3M9XCJjYWxsb3V0IGlzLWNyaXRpY2FsXCI+XG4gKiAgIDxoZWFkZXI+VW5zdGFibGUgQVBJczwvaGVhZGVyPlxuICogICA8cD5cbiAqICAgICBBbGwgY29tcGlsZXIgYXBpcyBhcmUgY3VycmVudGx5IGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsIGFuZCBwcml2YXRlIVxuICogICA8L3A+XG4gKiAgIDxwPlxuICogICAgIFdlIGV4cGVjdCB0aGUgQVBJcyBpbiB0aGlzIHBhY2thZ2UgdG8ga2VlcCBvbiBjaGFuZ2luZy4gRG8gbm90IHJlbHkgb24gdGhlbS5cbiAqICAgPC9wPlxuICogPC9kaXY+XG4gKi9cblxuaW1wb3J0ICogYXMgY29yZSBmcm9tICcuL2NvcmUnO1xuaW1wb3J0IHtwdWJsaXNoRmFjYWRlfSBmcm9tICcuL2ppdF9jb21waWxlcl9mYWNhZGUnO1xuaW1wb3J0IHtnbG9iYWx9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTk9fRVJST1JTX1NDSEVNQSwgU2NoZW1hTWV0YWRhdGF9IGZyb20gJy4vY29yZSc7XG5leHBvcnQge2NvcmV9O1xuXG5leHBvcnQgKiBmcm9tICcuL3ZlcnNpb24nO1xuZXhwb3J0IHtDb21waWxlckNvbmZpZywgcHJlc2VydmVXaGl0ZXNwYWNlc0RlZmF1bHR9IGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vcmVzb3VyY2VfbG9hZGVyJztcbmV4cG9ydCB7Q29uc3RhbnRQb29sfSBmcm9tICcuL2NvbnN0YW50X3Bvb2wnO1xuZXhwb3J0IHtERUZBVUxUX0lOVEVSUE9MQVRJT05fQ09ORklHLCBJbnRlcnBvbGF0aW9uQ29uZmlnfSBmcm9tICcuL21sX3BhcnNlci9kZWZhdWx0cyc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9lbGVtZW50X3NjaGVtYV9yZWdpc3RyeSc7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4vaW5kZXgnO1xuZXhwb3J0ICogZnJvbSAnLi9leHByZXNzaW9uX3BhcnNlci9hc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9leHByZXNzaW9uX3BhcnNlci9sZXhlcic7XG5leHBvcnQgKiBmcm9tICcuL2V4cHJlc3Npb25fcGFyc2VyL3BhcnNlcic7XG5leHBvcnQgKiBmcm9tICcuL21sX3BhcnNlci9hc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9tbF9wYXJzZXIvaHRtbF9wYXJzZXInO1xuZXhwb3J0ICogZnJvbSAnLi9tbF9wYXJzZXIvaHRtbF90YWdzJztcbmV4cG9ydCAqIGZyb20gJy4vbWxfcGFyc2VyL3RhZ3MnO1xuZXhwb3J0IHtQYXJzZVRyZWVSZXN1bHQsIFRyZWVFcnJvcn0gZnJvbSAnLi9tbF9wYXJzZXIvcGFyc2VyJztcbmV4cG9ydCB7TGV4ZXJSYW5nZX0gZnJvbSAnLi9tbF9wYXJzZXIvbGV4ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9tbF9wYXJzZXIveG1sX3BhcnNlcic7XG5leHBvcnQge1Rva2VuVHlwZSBhcyBMZXhlclRva2VuVHlwZX0gZnJvbSAnLi9tbF9wYXJzZXIvdG9rZW5zJztcbmV4cG9ydCB7XG4gIEFycmF5VHlwZSxcbiAgRFlOQU1JQ19UWVBFLFxuICBCaW5hcnlPcGVyYXRvcixcbiAgQmluYXJ5T3BlcmF0b3JFeHByLFxuICBCdWlsdGluVHlwZSxcbiAgQnVpbHRpblR5cGVOYW1lLFxuICBDb21tYUV4cHIsXG4gIENvbmRpdGlvbmFsRXhwcixcbiAgRGVjbGFyZUZ1bmN0aW9uU3RtdCxcbiAgRGVjbGFyZVZhclN0bXQsXG4gIEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb25TdGF0ZW1lbnQsXG4gIEV4cHJlc3Npb25UeXBlLFxuICBFeHByZXNzaW9uVmlzaXRvcixcbiAgRXh0ZXJuYWxFeHByLFxuICBFeHRlcm5hbFJlZmVyZW5jZSxcbiAgbGl0ZXJhbE1hcCxcbiAgRnVuY3Rpb25FeHByLFxuICBJZlN0bXQsXG4gIEluc3RhbnRpYXRlRXhwcixcbiAgSW52b2tlRnVuY3Rpb25FeHByLFxuICBBcnJvd0Z1bmN0aW9uRXhwcixcbiAgTGl0ZXJhbEFycmF5RXhwcixcbiAgTGl0ZXJhbEV4cHIsXG4gIExpdGVyYWxNYXBFeHByLFxuICBNYXBUeXBlLFxuICBOb3RFeHByLFxuICBOT05FX1RZUEUsXG4gIFJlYWRLZXlFeHByLFxuICBSZWFkUHJvcEV4cHIsXG4gIFJlYWRWYXJFeHByLFxuICBSZXR1cm5TdGF0ZW1lbnQsXG4gIFN0YXRlbWVudFZpc2l0b3IsXG4gIFRhZ2dlZFRlbXBsYXRlRXhwcixcbiAgVGVtcGxhdGVMaXRlcmFsLFxuICBUZW1wbGF0ZUxpdGVyYWxFbGVtZW50LFxuICBUeXBlLFxuICBUeXBlTW9kaWZpZXIsXG4gIFR5cGVWaXNpdG9yLFxuICBXcmFwcGVkTm9kZUV4cHIsXG4gIGxpdGVyYWwsXG4gIFdyaXRlS2V5RXhwcixcbiAgV3JpdGVQcm9wRXhwcixcbiAgV3JpdGVWYXJFeHByLFxuICBTdG10TW9kaWZpZXIsXG4gIFN0YXRlbWVudCxcbiAgU1RSSU5HX1RZUEUsXG4gIFR5cGVvZkV4cHIsXG4gIGpzRG9jQ29tbWVudCxcbiAgbGVhZGluZ0NvbW1lbnQsXG4gIExlYWRpbmdDb21tZW50LFxuICBKU0RvY0NvbW1lbnQsXG4gIFVuYXJ5T3BlcmF0b3IsXG4gIFVuYXJ5T3BlcmF0b3JFeHByLFxuICBMb2NhbGl6ZWRTdHJpbmcsXG4gIFRyYW5zcGxhbnRlZFR5cGUsXG4gIER5bmFtaWNJbXBvcnRFeHByLFxufSBmcm9tICcuL291dHB1dC9vdXRwdXRfYXN0JztcbmV4cG9ydCB7RW1pdHRlclZpc2l0b3JDb250ZXh0fSBmcm9tICcuL291dHB1dC9hYnN0cmFjdF9lbWl0dGVyJztcbmV4cG9ydCB7Sml0RXZhbHVhdG9yfSBmcm9tICcuL291dHB1dC9vdXRwdXRfaml0JztcbmV4cG9ydCAqIGZyb20gJy4vcGFyc2VfdXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3NjaGVtYS9kb21fZWxlbWVudF9zY2hlbWFfcmVnaXN0cnknO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3Rvcic7XG5leHBvcnQge1ZlcnNpb259IGZyb20gJy4vdXRpbCc7XG5leHBvcnQge1NvdXJjZU1hcH0gZnJvbSAnLi9vdXRwdXQvc291cmNlX21hcCc7XG5leHBvcnQgKiBmcm9tICcuL2luamVjdGFibGVfY29tcGlsZXJfMic7XG5leHBvcnQgKiBmcm9tICcuL3JlbmRlcjMvcGFydGlhbC9hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9yZW5kZXIzL3ZpZXcvYXBpJztcbmV4cG9ydCB7XG4gIHZpc2l0QWxsIGFzIHRtcGxBc3RWaXNpdEFsbCxcbiAgQmxvY2tOb2RlIGFzIFRtcGxBc3RCbG9ja05vZGUsXG4gIEJvdW5kQXR0cmlidXRlIGFzIFRtcGxBc3RCb3VuZEF0dHJpYnV0ZSxcbiAgQm91bmRFdmVudCBhcyBUbXBsQXN0Qm91bmRFdmVudCxcbiAgQm91bmRUZXh0IGFzIFRtcGxBc3RCb3VuZFRleHQsXG4gIENvbnRlbnQgYXMgVG1wbEFzdENvbnRlbnQsXG4gIEVsZW1lbnQgYXMgVG1wbEFzdEVsZW1lbnQsXG4gIEljdSBhcyBUbXBsQXN0SWN1LFxuICBOb2RlIGFzIFRtcGxBc3ROb2RlLFxuICBWaXNpdG9yIGFzIFRtcGxBc3RWaXNpdG9yLFxuICBSZWN1cnNpdmVWaXNpdG9yIGFzIFRtcGxBc3RSZWN1cnNpdmVWaXNpdG9yLFxuICBSZWZlcmVuY2UgYXMgVG1wbEFzdFJlZmVyZW5jZSxcbiAgVGVtcGxhdGUgYXMgVG1wbEFzdFRlbXBsYXRlLFxuICBUZXh0IGFzIFRtcGxBc3RUZXh0LFxuICBUZXh0QXR0cmlidXRlIGFzIFRtcGxBc3RUZXh0QXR0cmlidXRlLFxuICBWYXJpYWJsZSBhcyBUbXBsQXN0VmFyaWFibGUsXG4gIERlZmVycmVkQmxvY2sgYXMgVG1wbEFzdERlZmVycmVkQmxvY2ssXG4gIERlZmVycmVkQmxvY2tQbGFjZWhvbGRlciBhcyBUbXBsQXN0RGVmZXJyZWRCbG9ja1BsYWNlaG9sZGVyLFxuICBEZWZlcnJlZEJsb2NrTG9hZGluZyBhcyBUbXBsQXN0RGVmZXJyZWRCbG9ja0xvYWRpbmcsXG4gIERlZmVycmVkQmxvY2tFcnJvciBhcyBUbXBsQXN0RGVmZXJyZWRCbG9ja0Vycm9yLFxuICBEZWZlcnJlZFRyaWdnZXIgYXMgVG1wbEFzdERlZmVycmVkVHJpZ2dlcixcbiAgQm91bmREZWZlcnJlZFRyaWdnZXIgYXMgVG1wbEFzdEJvdW5kRGVmZXJyZWRUcmlnZ2VyLFxuICBJZGxlRGVmZXJyZWRUcmlnZ2VyIGFzIFRtcGxBc3RJZGxlRGVmZXJyZWRUcmlnZ2VyLFxuICBJbW1lZGlhdGVEZWZlcnJlZFRyaWdnZXIgYXMgVG1wbEFzdEltbWVkaWF0ZURlZmVycmVkVHJpZ2dlcixcbiAgSG92ZXJEZWZlcnJlZFRyaWdnZXIgYXMgVG1wbEFzdEhvdmVyRGVmZXJyZWRUcmlnZ2VyLFxuICBUaW1lckRlZmVycmVkVHJpZ2dlciBhcyBUbXBsQXN0VGltZXJEZWZlcnJlZFRyaWdnZXIsXG4gIEludGVyYWN0aW9uRGVmZXJyZWRUcmlnZ2VyIGFzIFRtcGxBc3RJbnRlcmFjdGlvbkRlZmVycmVkVHJpZ2dlcixcbiAgVmlld3BvcnREZWZlcnJlZFRyaWdnZXIgYXMgVG1wbEFzdFZpZXdwb3J0RGVmZXJyZWRUcmlnZ2VyLFxuICBTd2l0Y2hCbG9jayBhcyBUbXBsQXN0U3dpdGNoQmxvY2ssXG4gIFN3aXRjaEJsb2NrQ2FzZSBhcyBUbXBsQXN0U3dpdGNoQmxvY2tDYXNlLFxuICBGb3JMb29wQmxvY2sgYXMgVG1wbEFzdEZvckxvb3BCbG9jayxcbiAgRm9yTG9vcEJsb2NrRW1wdHkgYXMgVG1wbEFzdEZvckxvb3BCbG9ja0VtcHR5LFxuICBJZkJsb2NrIGFzIFRtcGxBc3RJZkJsb2NrLFxuICBJZkJsb2NrQnJhbmNoIGFzIFRtcGxBc3RJZkJsb2NrQnJhbmNoLFxuICBEZWZlcnJlZEJsb2NrVHJpZ2dlcnMgYXMgVG1wbEFzdERlZmVycmVkQmxvY2tUcmlnZ2VycyxcbiAgVW5rbm93bkJsb2NrIGFzIFRtcGxBc3RVbmtub3duQmxvY2ssXG4gIExldERlY2xhcmF0aW9uIGFzIFRtcGxBc3RMZXREZWNsYXJhdGlvbixcbn0gZnJvbSAnLi9yZW5kZXIzL3IzX2FzdCc7XG5leHBvcnQgKiBmcm9tICcuL3JlbmRlcjMvdmlldy90Ml9hcGknO1xuZXhwb3J0ICogZnJvbSAnLi9yZW5kZXIzL3ZpZXcvdDJfYmluZGVyJztcbmV4cG9ydCB7Y3JlYXRlQ3NzU2VsZWN0b3JGcm9tTm9kZX0gZnJvbSAnLi9yZW5kZXIzL3ZpZXcvdXRpbCc7XG5leHBvcnQge0lkZW50aWZpZXJzIGFzIFIzSWRlbnRpZmllcnN9IGZyb20gJy4vcmVuZGVyMy9yM19pZGVudGlmaWVycyc7XG5leHBvcnQge1xuICBSM0NsYXNzTWV0YWRhdGEsXG4gIENvbXBpbGVDbGFzc01ldGFkYXRhRm4sXG4gIGNvbXBpbGVDbGFzc01ldGFkYXRhLFxuICBjb21waWxlQ29tcG9uZW50Q2xhc3NNZXRhZGF0YSxcbiAgY29tcGlsZU9wYXF1ZUFzeW5jQ2xhc3NNZXRhZGF0YSxcbn0gZnJvbSAnLi9yZW5kZXIzL3IzX2NsYXNzX21ldGFkYXRhX2NvbXBpbGVyJztcbmV4cG9ydCB7Y29tcGlsZUNsYXNzRGVidWdJbmZvLCBSM0NsYXNzRGVidWdJbmZvfSBmcm9tICcuL3JlbmRlcjMvcjNfY2xhc3NfZGVidWdfaW5mb19jb21waWxlcic7XG5leHBvcnQge1xuICBjb21waWxlRmFjdG9yeUZ1bmN0aW9uLFxuICBSM0RlcGVuZGVuY3lNZXRhZGF0YSxcbiAgUjNGYWN0b3J5TWV0YWRhdGEsXG4gIEZhY3RvcnlUYXJnZXQsXG59IGZyb20gJy4vcmVuZGVyMy9yM19mYWN0b3J5JztcbmV4cG9ydCB7XG4gIGNvbXBpbGVOZ01vZHVsZSxcbiAgUjNOZ01vZHVsZU1ldGFkYXRhLFxuICBSM1NlbGVjdG9yU2NvcGVNb2RlLFxuICBSM05nTW9kdWxlTWV0YWRhdGFLaW5kLFxuICBSM05nTW9kdWxlTWV0YWRhdGFHbG9iYWwsXG59IGZyb20gJy4vcmVuZGVyMy9yM19tb2R1bGVfY29tcGlsZXInO1xuZXhwb3J0IHtjb21waWxlSW5qZWN0b3IsIFIzSW5qZWN0b3JNZXRhZGF0YX0gZnJvbSAnLi9yZW5kZXIzL3IzX2luamVjdG9yX2NvbXBpbGVyJztcbmV4cG9ydCB7Y29tcGlsZVBpcGVGcm9tTWV0YWRhdGEsIFIzUGlwZU1ldGFkYXRhfSBmcm9tICcuL3JlbmRlcjMvcjNfcGlwZV9jb21waWxlcic7XG5leHBvcnQge1xuICBtYWtlQmluZGluZ1BhcnNlcixcbiAgUGFyc2VkVGVtcGxhdGUsXG4gIHBhcnNlVGVtcGxhdGUsXG4gIFBhcnNlVGVtcGxhdGVPcHRpb25zLFxufSBmcm9tICcuL3JlbmRlcjMvdmlldy90ZW1wbGF0ZSc7XG5leHBvcnQge1xuICBGb3J3YXJkUmVmSGFuZGxpbmcsXG4gIE1heWJlRm9yd2FyZFJlZkV4cHJlc3Npb24sXG4gIFIzQ29tcGlsZWRFeHByZXNzaW9uLFxuICBSM1JlZmVyZW5jZSxcbiAgY3JlYXRlTWF5QmVGb3J3YXJkUmVmRXhwcmVzc2lvbixcbiAgZGV2T25seUd1YXJkZWRFeHByZXNzaW9uLFxuICBnZXRTYWZlUHJvcGVydHlBY2Nlc3NTdHJpbmcsXG59IGZyb20gJy4vcmVuZGVyMy91dGlsJztcbmV4cG9ydCB7XG4gIGNvbXBpbGVDb21wb25lbnRGcm9tTWV0YWRhdGEsXG4gIGNvbXBpbGVEaXJlY3RpdmVGcm9tTWV0YWRhdGEsXG4gIHBhcnNlSG9zdEJpbmRpbmdzLFxuICBQYXJzZWRIb3N0QmluZGluZ3MsXG4gIHZlcmlmeUhvc3RCaW5kaW5ncyxcbiAgZW5jYXBzdWxhdGVTdHlsZSxcbiAgY29tcGlsZURlZmVyUmVzb2x2ZXJGdW5jdGlvbixcbn0gZnJvbSAnLi9yZW5kZXIzL3ZpZXcvY29tcGlsZXInO1xuZXhwb3J0IHtcbiAgY29tcGlsZURlY2xhcmVDbGFzc01ldGFkYXRhLFxuICBjb21waWxlQ29tcG9uZW50RGVjbGFyZUNsYXNzTWV0YWRhdGEsXG59IGZyb20gJy4vcmVuZGVyMy9wYXJ0aWFsL2NsYXNzX21ldGFkYXRhJztcbmV4cG9ydCB7XG4gIGNvbXBpbGVEZWNsYXJlQ29tcG9uZW50RnJvbU1ldGFkYXRhLFxuICBEZWNsYXJlQ29tcG9uZW50VGVtcGxhdGVJbmZvLFxufSBmcm9tICcuL3JlbmRlcjMvcGFydGlhbC9jb21wb25lbnQnO1xuZXhwb3J0IHtjb21waWxlRGVjbGFyZURpcmVjdGl2ZUZyb21NZXRhZGF0YX0gZnJvbSAnLi9yZW5kZXIzL3BhcnRpYWwvZGlyZWN0aXZlJztcbmV4cG9ydCB7Y29tcGlsZURlY2xhcmVGYWN0b3J5RnVuY3Rpb259IGZyb20gJy4vcmVuZGVyMy9wYXJ0aWFsL2ZhY3RvcnknO1xuZXhwb3J0IHtjb21waWxlRGVjbGFyZUluamVjdGFibGVGcm9tTWV0YWRhdGF9IGZyb20gJy4vcmVuZGVyMy9wYXJ0aWFsL2luamVjdGFibGUnO1xuZXhwb3J0IHtjb21waWxlRGVjbGFyZUluamVjdG9yRnJvbU1ldGFkYXRhfSBmcm9tICcuL3JlbmRlcjMvcGFydGlhbC9pbmplY3Rvcic7XG5leHBvcnQge2NvbXBpbGVEZWNsYXJlTmdNb2R1bGVGcm9tTWV0YWRhdGF9IGZyb20gJy4vcmVuZGVyMy9wYXJ0aWFsL25nX21vZHVsZSc7XG5leHBvcnQge2NvbXBpbGVEZWNsYXJlUGlwZUZyb21NZXRhZGF0YX0gZnJvbSAnLi9yZW5kZXIzL3BhcnRpYWwvcGlwZSc7XG5leHBvcnQge3B1Ymxpc2hGYWNhZGV9IGZyb20gJy4vaml0X2NvbXBpbGVyX2ZhY2FkZSc7XG5leHBvcnQge1xuICBlbWl0RGlzdGluY3RDaGFuZ2VzT25seURlZmF1bHRWYWx1ZSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICcuL2NvcmUnO1xuaW1wb3J0ICogYXMgb3V0cHV0QXN0IGZyb20gJy4vb3V0cHV0L291dHB1dF9hc3QnO1xuZXhwb3J0IHtvdXRwdXRBc3R9O1xuLy8gVGhpcyBmaWxlIG9ubHkgcmVleHBvcnRzIGNvbnRlbnQgb2YgdGhlIGBzcmNgIGZvbGRlci4gS2VlcCBpdCB0aGF0IHdheS5cblxuLy8gVGhpcyBmdW5jdGlvbiBjYWxsIGhhcyBhIGdsb2JhbCBzaWRlIGVmZmVjdHMgYW5kIHB1Ymxpc2hlcyB0aGUgY29tcGlsZXIgaW50byBnbG9iYWwgbmFtZXNwYWNlIGZvclxuLy8gdGhlIGxhdGUgYmluZGluZyBvZiB0aGUgQ29tcGlsZXIgdG8gdGhlIEBhbmd1bGFyL2NvcmUgZm9yIGppdCBjb21waWxhdGlvbi5cbnB1Ymxpc2hGYWNhZGUoZ2xvYmFsKTtcbiJdfQ==
|
|
@@ -1,29 +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
|
-
export var FactoryTarget;
|
|
9
|
-
(function (FactoryTarget) {
|
|
10
|
-
FactoryTarget[FactoryTarget["Directive"] = 0] = "Directive";
|
|
11
|
-
FactoryTarget[FactoryTarget["Component"] = 1] = "Component";
|
|
12
|
-
FactoryTarget[FactoryTarget["Injectable"] = 2] = "Injectable";
|
|
13
|
-
FactoryTarget[FactoryTarget["Pipe"] = 3] = "Pipe";
|
|
14
|
-
FactoryTarget[FactoryTarget["NgModule"] = 4] = "NgModule";
|
|
15
|
-
})(FactoryTarget || (FactoryTarget = {}));
|
|
16
|
-
export var R3TemplateDependencyKind;
|
|
17
|
-
(function (R3TemplateDependencyKind) {
|
|
18
|
-
R3TemplateDependencyKind[R3TemplateDependencyKind["Directive"] = 0] = "Directive";
|
|
19
|
-
R3TemplateDependencyKind[R3TemplateDependencyKind["Pipe"] = 1] = "Pipe";
|
|
20
|
-
R3TemplateDependencyKind[R3TemplateDependencyKind["NgModule"] = 2] = "NgModule";
|
|
21
|
-
})(R3TemplateDependencyKind || (R3TemplateDependencyKind = {}));
|
|
22
|
-
export var ViewEncapsulation;
|
|
23
|
-
(function (ViewEncapsulation) {
|
|
24
|
-
ViewEncapsulation[ViewEncapsulation["Emulated"] = 0] = "Emulated";
|
|
25
|
-
// Historically the 1 value was for `Native` encapsulation which has been removed as of v11.
|
|
26
|
-
ViewEncapsulation[ViewEncapsulation["None"] = 2] = "None";
|
|
27
|
-
ViewEncapsulation[ViewEncapsulation["ShadowDom"] = 3] = "ShadowDom";
|
|
28
|
-
})(ViewEncapsulation || (ViewEncapsulation = {}));
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGlsZXJfZmFjYWRlX2ludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy9jb21waWxlcl9mYWNhZGVfaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQWlISCxNQUFNLENBQU4sSUFBWSxhQU1YO0FBTkQsV0FBWSxhQUFhO0lBQ3ZCLDJEQUFhLENBQUE7SUFDYiwyREFBYSxDQUFBO0lBQ2IsNkRBQWMsQ0FBQTtJQUNkLGlEQUFRLENBQUE7SUFDUix5REFBWSxDQUFBO0FBQ2QsQ0FBQyxFQU5XLGFBQWEsS0FBYixhQUFhLFFBTXhCO0FBd0xELE1BQU0sQ0FBTixJQUFZLHdCQUlYO0FBSkQsV0FBWSx3QkFBd0I7SUFDbEMsaUZBQWEsQ0FBQTtJQUNiLHVFQUFRLENBQUE7SUFDUiwrRUFBWSxDQUFBO0FBQ2QsQ0FBQyxFQUpXLHdCQUF3QixLQUF4Qix3QkFBd0IsUUFJbkM7QUE4QkQsTUFBTSxDQUFOLElBQVksaUJBS1g7QUFMRCxXQUFZLGlCQUFpQjtJQUMzQixpRUFBWSxDQUFBO0lBQ1osNEZBQTRGO0lBQzVGLHlEQUFRLENBQUE7SUFDUixtRUFBYSxDQUFBO0FBQ2YsQ0FBQyxFQUxXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFLNUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBBIHNldCBvZiBpbnRlcmZhY2VzIHdoaWNoIGFyZSBzaGFyZWQgYmV0d2VlbiBgQGFuZ3VsYXIvY29yZWAgYW5kIGBAYW5ndWxhci9jb21waWxlcmAgdG8gYWxsb3dcbiAqIGZvciBsYXRlIGJpbmRpbmcgb2YgYEBhbmd1bGFyL2NvbXBpbGVyYCBmb3IgSklUIHB1cnBvc2VzLlxuICpcbiAqIFRoaXMgZmlsZSBoYXMgdHdvIGNvcGllcy4gUGxlYXNlIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGluIHN5bmM6XG4gKiAgLSBwYWNrYWdlcy9jb21waWxlci9zcmMvY29tcGlsZXJfZmFjYWRlX2ludGVyZmFjZS50cyAgICAgICAgICAobWFpbilcbiAqICAtIHBhY2thZ2VzL2NvcmUvc3JjL2NvbXBpbGVyL2NvbXBpbGVyX2ZhY2FkZV9pbnRlcmZhY2UudHMgICAgIChyZXBsaWNhKVxuICpcbiAqIFBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgdHdvIGZpbGVzIGFyZSBpbiBzeW5jIHVzaW5nIHRoaXMgY29tbWFuZDpcbiAqIGBgYFxuICogY3AgcGFja2FnZXMvY29tcGlsZXIvc3JjL2NvbXBpbGVyX2ZhY2FkZV9pbnRlcmZhY2UudHMgXFxcbiAqICAgIHBhY2thZ2VzL2NvcmUvc3JjL2NvbXBpbGVyL2NvbXBpbGVyX2ZhY2FkZV9pbnRlcmZhY2UudHNcbiAqIGBgYFxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhwb3J0ZWRDb21waWxlckZhY2FkZSB7XG4gIMm1Y29tcGlsZXJGYWNhZGU6IENvbXBpbGVyRmFjYWRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBpbGVyRmFjYWRlIHtcbiAgY29tcGlsZVBpcGUoXG4gICAgYW5ndWxhckNvcmVFbnY6IENvcmVFbnZpcm9ubWVudCxcbiAgICBzb3VyY2VNYXBVcmw6IHN0cmluZyxcbiAgICBtZXRhOiBSM1BpcGVNZXRhZGF0YUZhY2FkZSxcbiAgKTogYW55O1xuICBjb21waWxlUGlwZURlY2xhcmF0aW9uKFxuICAgIGFuZ3VsYXJDb3JlRW52OiBDb3JlRW52aXJvbm1lbnQsXG4gICAgc291cmNlTWFwVXJsOiBzdHJpbmcsXG4gICAgZGVjbGFyYXRpb246IFIzRGVjbGFyZVBpcGVGYWNhZGUsXG4gICk6IGFueTtcbiAgY29tcGlsZUluamVjdGFibGUoXG4gICAgYW5ndWxhckNvcmVFbnY6IENvcmVFbnZpcm9ubWVudCxcbiAgICBzb3VyY2VNYXBVcmw6IHN0cmluZyxcbiAgICBtZXRhOiBSM0luamVjdGFibGVNZXRhZGF0YUZhY2FkZSxcbiAgKTogYW55O1xuICBjb21waWxlSW5qZWN0YWJsZURlY2xhcmF0aW9uKFxuICAgIGFuZ3VsYXJDb3JlRW52OiBDb3JlRW52aXJvbm1lbnQsXG4gICAgc291cmNlTWFwVXJsOiBzdHJpbmcsXG4gICAgbWV0YTogUjNEZWNsYXJlSW5qZWN0YWJsZUZhY2FkZSxcbiAgKTogYW55O1xuICBjb21waWxlSW5qZWN0b3IoXG4gICAgYW5ndWxhckNvcmVFbnY6IENvcmVFbnZpcm9ubWVudCxcbiAgICBzb3VyY2VNYXBVcmw6IHN0cmluZyxcbiAgICBtZXRhOiBSM0luamVjdG9yTWV0YWRhdGFGYWNhZGUsXG4gICk6IGFueTtcbiAgY29tcGlsZUluamVjdG9yRGVjbGFyYXRpb24oXG4gICAgYW5ndWxhckNvcmVFbnY6IENvcmVFbnZpcm9ubWVudCxcbiAgICBzb3VyY2VNYXBVcmw6IHN0cmluZyxcbiAgICBkZWNsYXJhdGlvbjogUjNEZWNsYXJlSW5qZWN0b3JGYWNhZGUsXG4gICk6IGFueTtcbiAgY29tcGlsZU5nTW9kdWxlKFxuICAgIGFuZ3VsYXJDb3JlRW52OiBDb3JlRW52aXJvbm1lbnQsXG4gICAgc291cmNlTWFwVXJsOiBzdHJpbmcsXG4gICAgbWV0YTogUjNOZ01vZHVsZU1ldGFkYXRhRmFjYWRlLFxuICApOiBhbnk7XG4gIGNvbXBpbGVOZ01vZHVsZURlY2xhcmF0aW9uKFxuICAgIGFuZ3VsYXJDb3JlRW52OiBDb3JlRW52aXJvbm1lbnQsXG4gICAgc291cmNlTWFwVXJsOiBzdHJpbmcsXG4gICAgZGVjbGFyYXRpb246IFIzRGVjbGFyZU5nTW9kdWxlRmFjYWRlLFxuICApOiBhbnk7XG4gIGNvbXBpbGVEaXJlY3RpdmUoXG4gICAgYW5ndWxhckNvcmVFbnY6IENvcmVFbnZpcm9ubWVudCxcbiAgICBzb3VyY2VNYXBVcmw6IHN0cmluZyxcbiAgICBtZXRhOiBSM0RpcmVjdGl2ZU1ldGFkYXRhRmFjYWRlLFxuICApOiBhbnk7XG4gIGNvbXBpbGVEaXJlY3RpdmVEZWNsYXJhdGlvbihcbiAgICBhbmd1bGFyQ29yZUVudjogQ29yZUVudmlyb25tZW50LFxuICAgIHNvdXJjZU1hcFVybDogc3RyaW5nLFxuICAgIGRlY2xhcmF0aW9uOiBSM0RlY2xhcmVEaXJlY3RpdmVGYWNhZGUsXG4gICk6IGFueTtcbiAgY29tcGlsZUNvbXBvbmVudChcbiAgICBhbmd1bGFyQ29yZUVudjogQ29yZUVudmlyb25tZW50LFxuICAgIHNvdXJjZU1hcFVybDogc3RyaW5nLFxuICAgIG1ldGE6IFIzQ29tcG9uZW50TWV0YWRhdGFGYWNhZGUsXG4gICk6IGFueTtcbiAgY29tcGlsZUNvbXBvbmVudERlY2xhcmF0aW9uKFxuICAgIGFuZ3VsYXJDb3JlRW52OiBDb3JlRW52aXJvbm1lbnQsXG4gICAgc291cmNlTWFwVXJsOiBzdHJpbmcsXG4gICAgZGVjbGFyYXRpb246IFIzRGVjbGFyZUNvbXBvbmVudEZhY2FkZSxcbiAgKTogYW55O1xuICBjb21waWxlRmFjdG9yeShcbiAgICBhbmd1bGFyQ29yZUVudjogQ29yZUVudmlyb25tZW50LFxuICAgIHNvdXJjZU1hcFVybDogc3RyaW5nLFxuICAgIG1ldGE6IFIzRmFjdG9yeURlZk1ldGFkYXRhRmFjYWRlLFxuICApOiBhbnk7XG4gIGNvbXBpbGVGYWN0b3J5RGVjbGFyYXRpb24oXG4gICAgYW5ndWxhckNvcmVFbnY6IENvcmVFbnZpcm9ubWVudCxcbiAgICBzb3VyY2VNYXBVcmw6IHN0cmluZyxcbiAgICBtZXRhOiBSM0RlY2xhcmVGYWN0b3J5RmFjYWRlLFxuICApOiBhbnk7XG5cbiAgY3JlYXRlUGFyc2VTb3VyY2VTcGFuKGtpbmQ6IHN0cmluZywgdHlwZU5hbWU6IHN0cmluZywgc291cmNlVXJsOiBzdHJpbmcpOiBQYXJzZVNvdXJjZVNwYW47XG5cbiAgRmFjdG9yeVRhcmdldDogdHlwZW9mIEZhY3RvcnlUYXJnZXQ7XG4gIC8vIE5vdGUgdGhhdCB3ZSBkbyBub3QgdXNlIGB7bmV3KCk6IFJlc291cmNlTG9hZGVyfWAgaGVyZSBiZWNhdXNlXG4gIC8vIHRoZSByZXNvdXJjZSBsb2FkZXIgY2xhc3MgaXMgYWJzdHJhY3QgYW5kIG5vdCBjb25zdHJ1Y3RhYmxlLlxuICBSZXNvdXJjZUxvYWRlcjogRnVuY3Rpb24gJiB7cHJvdG90eXBlOiBSZXNvdXJjZUxvYWRlcn07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29yZUVudmlyb25tZW50IHtcbiAgW25hbWU6IHN0cmluZ106IHVua25vd247XG59XG5cbmV4cG9ydCB0eXBlIFJlc291cmNlTG9hZGVyID0ge1xuICBnZXQodXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gfCBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQcm92aWRlciA9IHVua25vd247XG5leHBvcnQgdHlwZSBUeXBlID0gRnVuY3Rpb247XG5leHBvcnQgdHlwZSBPcGFxdWVWYWx1ZSA9IHVua25vd247XG5cbmV4cG9ydCBlbnVtIEZhY3RvcnlUYXJnZXQge1xuICBEaXJlY3RpdmUgPSAwLFxuICBDb21wb25lbnQgPSAxLFxuICBJbmplY3RhYmxlID0gMixcbiAgUGlwZSA9IDMsXG4gIE5nTW9kdWxlID0gNCxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM0RlcGVuZGVuY3lNZXRhZGF0YUZhY2FkZSB7XG4gIHRva2VuOiBPcGFxdWVWYWx1ZTtcbiAgYXR0cmlidXRlOiBzdHJpbmcgfCBudWxsO1xuICBob3N0OiBib29sZWFuO1xuICBvcHRpb25hbDogYm9vbGVhbjtcbiAgc2VsZjogYm9vbGVhbjtcbiAgc2tpcFNlbGY6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUjNEZWNsYXJlRGVwZW5kZW5jeU1ldGFkYXRhRmFjYWRlIHtcbiAgdG9rZW46IE9wYXF1ZVZhbHVlO1xuICBhdHRyaWJ1dGU/OiBib29sZWFuO1xuICBob3N0PzogYm9vbGVhbjtcbiAgb3B0aW9uYWw/OiBib29sZWFuO1xuICBzZWxmPzogYm9vbGVhbjtcbiAgc2tpcFNlbGY/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzUGlwZU1ldGFkYXRhRmFjYWRlIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBUeXBlO1xuICBwaXBlTmFtZTogc3RyaW5nO1xuICBwdXJlOiBib29sZWFuO1xuICBpc1N0YW5kYWxvbmU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUjNJbmplY3RhYmxlTWV0YWRhdGFGYWNhZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFR5cGU7XG4gIHR5cGVBcmd1bWVudENvdW50OiBudW1iZXI7XG4gIHByb3ZpZGVkSW4/OiBUeXBlIHwgJ3Jvb3QnIHwgJ3BsYXRmb3JtJyB8ICdhbnknIHwgbnVsbDtcbiAgdXNlQ2xhc3M/OiBPcGFxdWVWYWx1ZTtcbiAgdXNlRmFjdG9yeT86IE9wYXF1ZVZhbHVlO1xuICB1c2VFeGlzdGluZz86IE9wYXF1ZVZhbHVlO1xuICB1c2VWYWx1ZT86IE9wYXF1ZVZhbHVlO1xuICBkZXBzPzogUjNEZXBlbmRlbmN5TWV0YWRhdGFGYWNhZGVbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM05nTW9kdWxlTWV0YWRhdGFGYWNhZGUge1xuICB0eXBlOiBUeXBlO1xuICBib290c3RyYXA6IEZ1bmN0aW9uW107XG4gIGRlY2xhcmF0aW9uczogRnVuY3Rpb25bXTtcbiAgaW1wb3J0czogRnVuY3Rpb25bXTtcbiAgZXhwb3J0czogRnVuY3Rpb25bXTtcbiAgc2NoZW1hczoge25hbWU6IHN0cmluZ31bXSB8IG51bGw7XG4gIGlkOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzSW5qZWN0b3JNZXRhZGF0YUZhY2FkZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogVHlwZTtcbiAgcHJvdmlkZXJzOiBQcm92aWRlcltdO1xuICBpbXBvcnRzOiBPcGFxdWVWYWx1ZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzSG9zdERpcmVjdGl2ZU1ldGFkYXRhRmFjYWRlIHtcbiAgZGlyZWN0aXZlOiBUeXBlO1xuICBpbnB1dHM/OiBzdHJpbmdbXTtcbiAgb3V0cHV0cz86IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzRGlyZWN0aXZlTWV0YWRhdGFGYWNhZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IFR5cGU7XG4gIHR5cGVTb3VyY2VTcGFuOiBQYXJzZVNvdXJjZVNwYW47XG4gIHNlbGVjdG9yOiBzdHJpbmcgfCBudWxsO1xuICBxdWVyaWVzOiBSM1F1ZXJ5TWV0YWRhdGFGYWNhZGVbXTtcbiAgaG9zdDoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gIHByb3BNZXRhZGF0YToge1trZXk6IHN0cmluZ106IE9wYXF1ZVZhbHVlW119O1xuICBsaWZlY3ljbGU6IHt1c2VzT25DaGFuZ2VzOiBib29sZWFufTtcbiAgaW5wdXRzOiAoc3RyaW5nIHwge25hbWU6IHN0cmluZzsgYWxpYXM/OiBzdHJpbmc7IHJlcXVpcmVkPzogYm9vbGVhbn0pW107XG4gIG91dHB1dHM6IHN0cmluZ1tdO1xuICB1c2VzSW5oZXJpdGFuY2U6IGJvb2xlYW47XG4gIGV4cG9ydEFzOiBzdHJpbmdbXSB8IG51bGw7XG4gIHByb3ZpZGVyczogUHJvdmlkZXJbXSB8IG51bGw7XG4gIHZpZXdRdWVyaWVzOiBSM1F1ZXJ5TWV0YWRhdGFGYWNhZGVbXTtcbiAgaXNTdGFuZGFsb25lOiBib29sZWFuO1xuICBob3N0RGlyZWN0aXZlczogUjNIb3N0RGlyZWN0aXZlTWV0YWRhdGFGYWNhZGVbXSB8IG51bGw7XG4gIGlzU2lnbmFsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzQ29tcG9uZW50TWV0YWRhdGFGYWNhZGUgZXh0ZW5kcyBSM0RpcmVjdGl2ZU1ldGFkYXRhRmFjYWRlIHtcbiAgdGVtcGxhdGU6IHN0cmluZztcbiAgcHJlc2VydmVXaGl0ZXNwYWNlczogYm9vbGVhbjtcbiAgYW5pbWF0aW9uczogT3BhcXVlVmFsdWVbXSB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyYXRpb25zOiBSM1RlbXBsYXRlRGVwZW5kZW5jeUZhY2FkZVtdO1xuICBzdHlsZXM6IHN0cmluZ1tdO1xuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbjtcbiAgdmlld1Byb3ZpZGVyczogUHJvdmlkZXJbXSB8IG51bGw7XG4gIGludGVycG9sYXRpb24/OiBbc3RyaW5nLCBzdHJpbmddO1xuICBjaGFuZ2VEZXRlY3Rpb24/OiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneTtcbn1cblxuLy8gVE9ETyhsZWdhY3ktcGFydGlhbC1vdXRwdXQtaW5wdXRzKTogUmVtb3ZlIGluIHYxOC5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi9kNGI0MjM2OTAyMTA4NzJiNWMzMmEzMjJhNjA5MGJlZGEzMGIwNWEzL3BhY2thZ2VzL2NvcmUvc3JjL2NvbXBpbGVyL2NvbXBpbGVyX2ZhY2FkZV9pbnRlcmZhY2UudHMjTDE5Ny1MMTk5XG5leHBvcnQgdHlwZSBMZWdhY3lJbnB1dFBhcnRpYWxNYXBwaW5nID1cbiAgfCBzdHJpbmdcbiAgfCBbYmluZGluZ1Byb3BlcnR5TmFtZTogc3RyaW5nLCBjbGFzc1Byb3BlcnR5TmFtZTogc3RyaW5nLCB0cmFuc2Zvcm1GdW5jdGlvbj86IEZ1bmN0aW9uXTtcblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVEaXJlY3RpdmVGYWNhZGUge1xuICBzZWxlY3Rvcj86IHN0cmluZztcbiAgdHlwZTogVHlwZTtcbiAgaW5wdXRzPzoge1xuICAgIFtmaWVsZE5hbWU6IHN0cmluZ106XG4gICAgICB8IHtcbiAgICAgICAgICBjbGFzc1Byb3BlcnR5TmFtZTogc3RyaW5nO1xuICAgICAgICAgIHB1YmxpY05hbWU6IHN0cmluZztcbiAgICAgICAgICBpc1NpZ25hbDogYm9vbGVhbjtcbiAgICAgICAgICBpc1JlcXVpcmVkOiBib29sZWFuO1xuICAgICAgICAgIHRyYW5zZm9ybUZ1bmN0aW9uOiBGdW5jdGlvbiB8IG51bGw7XG4gICAgICAgIH1cbiAgICAgIHwgTGVnYWN5SW5wdXRQYXJ0aWFsTWFwcGluZztcbiAgfTtcbiAgb3V0cHV0cz86IHtbY2xhc3NQcm9wZXJ0eU5hbWU6IHN0cmluZ106IHN0cmluZ307XG4gIGhvc3Q/OiB7XG4gICAgYXR0cmlidXRlcz86IHtba2V5OiBzdHJpbmddOiBPcGFxdWVWYWx1ZX07XG4gICAgbGlzdGVuZXJzPzoge1trZXk6IHN0cmluZ106IHN0cmluZ307XG4gICAgcHJvcGVydGllcz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9O1xuICAgIGNsYXNzQXR0cmlidXRlPzogc3RyaW5nO1xuICAgIHN0eWxlQXR0cmlidXRlPzogc3RyaW5nO1xuICB9O1xuICBxdWVyaWVzPzogUjNEZWNsYXJlUXVlcnlNZXRhZGF0YUZhY2FkZVtdO1xuICB2aWV3UXVlcmllcz86IFIzRGVjbGFyZVF1ZXJ5TWV0YWRhdGFGYWNhZGVbXTtcbiAgcHJvdmlkZXJzPzogT3BhcXVlVmFsdWU7XG4gIGV4cG9ydEFzPzogc3RyaW5nW107XG4gIHVzZXNJbmhlcml0YW5jZT86IGJvb2xlYW47XG4gIHVzZXNPbkNoYW5nZXM/OiBib29sZWFuO1xuICBpc1N0YW5kYWxvbmU/OiBib29sZWFuO1xuICBpc1NpZ25hbD86IGJvb2xlYW47XG4gIGhvc3REaXJlY3RpdmVzPzogUjNIb3N0RGlyZWN0aXZlTWV0YWRhdGFGYWNhZGVbXSB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUjNEZWNsYXJlQ29tcG9uZW50RmFjYWRlIGV4dGVuZHMgUjNEZWNsYXJlRGlyZWN0aXZlRmFjYWRlIHtcbiAgdGVtcGxhdGU6IHN0cmluZztcbiAgaXNJbmxpbmU/OiBib29sZWFuO1xuICBzdHlsZXM/OiBzdHJpbmdbXTtcblxuICAvLyBQb3N0LXN0YW5kYWxvbmUgbGlicmFyaWVzIHVzZSBhIHVuaWZpZWQgZGVwZW5kZW5jaWVzIGZpZWxkLlxuICBkZXBlbmRlbmNpZXM/OiBSM0RlY2xhcmVUZW1wbGF0ZURlcGVuZGVuY3lGYWNhZGVbXTtcblxuICAvLyBQcmUtc3RhbmRhbG9uZSBsaWJyYXJpZXMgaGF2ZSBzZXBhcmF0ZSBjb21wb25lbnQvZGlyZWN0aXZlL3BpcGUgZmllbGRzOlxuICBjb21wb25lbnRzPzogUjNEZWNsYXJlRGlyZWN0aXZlRGVwZW5kZW5jeUZhY2FkZVtdO1xuICBkaXJlY3RpdmVzPzogUjNEZWNsYXJlRGlyZWN0aXZlRGVwZW5kZW5jeUZhY2FkZVtdO1xuICBwaXBlcz86IHtbcGlwZU5hbWU6IHN0cmluZ106IE9wYXF1ZVZhbHVlIHwgKCgpID0+IE9wYXF1ZVZhbHVlKX07XG5cbiAgZGVmZXJCbG9ja0RlcGVuZGVuY2llcz86ICgoKSA9PiBQcm9taXNlPFR5cGU+IHwgbnVsbClbXTtcbiAgdmlld1Byb3ZpZGVycz86IE9wYXF1ZVZhbHVlO1xuICBhbmltYXRpb25zPzogT3BhcXVlVmFsdWU7XG4gIGNoYW5nZURldGVjdGlvbj86IENoYW5nZURldGVjdGlvblN0cmF0ZWd5O1xuICBlbmNhcHN1bGF0aW9uPzogVmlld0VuY2Fwc3VsYXRpb247XG4gIGludGVycG9sYXRpb24/OiBbc3RyaW5nLCBzdHJpbmddO1xuICBwcmVzZXJ2ZVdoaXRlc3BhY2VzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgUjNEZWNsYXJlVGVtcGxhdGVEZXBlbmRlbmN5RmFjYWRlID0ge1xuICBraW5kOiBzdHJpbmc7XG59ICYgKFxuICB8IFIzRGVjbGFyZURpcmVjdGl2ZURlcGVuZGVuY3lGYWNhZGVcbiAgfCBSM0RlY2xhcmVQaXBlRGVwZW5kZW5jeUZhY2FkZVxuICB8IFIzRGVjbGFyZU5nTW9kdWxlRGVwZW5kZW5jeUZhY2FkZVxuKTtcblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVEaXJlY3RpdmVEZXBlbmRlbmN5RmFjYWRlIHtcbiAga2luZD86ICdkaXJlY3RpdmUnIHwgJ2NvbXBvbmVudCc7XG4gIHNlbGVjdG9yOiBzdHJpbmc7XG4gIHR5cGU6IE9wYXF1ZVZhbHVlIHwgKCgpID0+IE9wYXF1ZVZhbHVlKTtcbiAgaW5wdXRzPzogc3RyaW5nW107XG4gIG91dHB1dHM/OiBzdHJpbmdbXTtcbiAgZXhwb3J0QXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVQaXBlRGVwZW5kZW5jeUZhY2FkZSB7XG4gIGtpbmQ/OiAncGlwZSc7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogT3BhcXVlVmFsdWUgfCAoKCkgPT4gT3BhcXVlVmFsdWUpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzRGVjbGFyZU5nTW9kdWxlRGVwZW5kZW5jeUZhY2FkZSB7XG4gIGtpbmQ6ICduZ21vZHVsZSc7XG4gIHR5cGU6IE9wYXF1ZVZhbHVlIHwgKCgpID0+IE9wYXF1ZVZhbHVlKTtcbn1cblxuZXhwb3J0IGVudW0gUjNUZW1wbGF0ZURlcGVuZGVuY3lLaW5kIHtcbiAgRGlyZWN0aXZlID0gMCxcbiAgUGlwZSA9IDEsXG4gIE5nTW9kdWxlID0gMixcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM1RlbXBsYXRlRGVwZW5kZW5jeUZhY2FkZSB7XG4gIGtpbmQ6IFIzVGVtcGxhdGVEZXBlbmRlbmN5S2luZDtcbiAgdHlwZTogT3BhcXVlVmFsdWUgfCAoKCkgPT4gT3BhcXVlVmFsdWUpO1xufVxuZXhwb3J0IGludGVyZmFjZSBSM0ZhY3RvcnlEZWZNZXRhZGF0YUZhY2FkZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogVHlwZTtcbiAgdHlwZUFyZ3VtZW50Q291bnQ6IG51bWJlcjtcbiAgZGVwczogUjNEZXBlbmRlbmN5TWV0YWRhdGFGYWNhZGVbXSB8IG51bGw7XG4gIHRhcmdldDogRmFjdG9yeVRhcmdldDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVGYWN0b3J5RmFjYWRlIHtcbiAgdHlwZTogVHlwZTtcbiAgZGVwczogUjNEZWNsYXJlRGVwZW5kZW5jeU1ldGFkYXRhRmFjYWRlW10gfCAnaW52YWxpZCcgfCBudWxsO1xuICB0YXJnZXQ6IEZhY3RvcnlUYXJnZXQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUjNEZWNsYXJlSW5qZWN0YWJsZUZhY2FkZSB7XG4gIHR5cGU6IFR5cGU7XG4gIHByb3ZpZGVkSW4/OiBUeXBlIHwgJ3Jvb3QnIHwgJ3BsYXRmb3JtJyB8ICdhbnknIHwgbnVsbDtcbiAgdXNlQ2xhc3M/OiBPcGFxdWVWYWx1ZTtcbiAgdXNlRmFjdG9yeT86IE9wYXF1ZVZhbHVlO1xuICB1c2VFeGlzdGluZz86IE9wYXF1ZVZhbHVlO1xuICB1c2VWYWx1ZT86IE9wYXF1ZVZhbHVlO1xuICBkZXBzPzogUjNEZWNsYXJlRGVwZW5kZW5jeU1ldGFkYXRhRmFjYWRlW107XG59XG5cbmV4cG9ydCBlbnVtIFZpZXdFbmNhcHN1bGF0aW9uIHtcbiAgRW11bGF0ZWQgPSAwLFxuICAvLyBIaXN0b3JpY2FsbHkgdGhlIDEgdmFsdWUgd2FzIGZvciBgTmF0aXZlYCBlbmNhcHN1bGF0aW9uIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgYXMgb2YgdjExLlxuICBOb25lID0gMixcbiAgU2hhZG93RG9tID0gMyxcbn1cblxuZXhwb3J0IHR5cGUgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kgPSBudW1iZXI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUjNRdWVyeU1ldGFkYXRhRmFjYWRlIHtcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XG4gIGZpcnN0OiBib29sZWFuO1xuICBwcmVkaWNhdGU6IE9wYXF1ZVZhbHVlIHwgc3RyaW5nW107XG4gIGRlc2NlbmRhbnRzOiBib29sZWFuO1xuICBlbWl0RGlzdGluY3RDaGFuZ2VzT25seTogYm9vbGVhbjtcbiAgcmVhZDogT3BhcXVlVmFsdWUgfCBudWxsO1xuICBzdGF0aWM6IGJvb2xlYW47XG4gIGlzU2lnbmFsOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzRGVjbGFyZVF1ZXJ5TWV0YWRhdGFGYWNhZGUge1xuICBwcm9wZXJ0eU5hbWU6IHN0cmluZztcbiAgZmlyc3Q/OiBib29sZWFuO1xuICBwcmVkaWNhdGU6IE9wYXF1ZVZhbHVlIHwgc3RyaW5nW107XG4gIGRlc2NlbmRhbnRzPzogYm9vbGVhbjtcbiAgcmVhZD86IE9wYXF1ZVZhbHVlO1xuICBzdGF0aWM/OiBib29sZWFuO1xuICBlbWl0RGlzdGluY3RDaGFuZ2VzT25seT86IGJvb2xlYW47XG4gIGlzU2lnbmFsPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVJbmplY3RvckZhY2FkZSB7XG4gIHR5cGU6IFR5cGU7XG4gIGltcG9ydHM/OiBPcGFxdWVWYWx1ZVtdO1xuICBwcm92aWRlcnM/OiBPcGFxdWVWYWx1ZVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFIzRGVjbGFyZU5nTW9kdWxlRmFjYWRlIHtcbiAgdHlwZTogVHlwZTtcbiAgYm9vdHN0cmFwPzogT3BhcXVlVmFsdWVbXSB8ICgoKSA9PiBPcGFxdWVWYWx1ZVtdKTtcbiAgZGVjbGFyYXRpb25zPzogT3BhcXVlVmFsdWVbXSB8ICgoKSA9PiBPcGFxdWVWYWx1ZVtdKTtcbiAgaW1wb3J0cz86IE9wYXF1ZVZhbHVlW10gfCAoKCkgPT4gT3BhcXVlVmFsdWVbXSk7XG4gIGV4cG9ydHM/OiBPcGFxdWVWYWx1ZVtdIHwgKCgpID0+IE9wYXF1ZVZhbHVlW10pO1xuICBzY2hlbWFzPzogT3BhcXVlVmFsdWVbXTtcbiAgaWQ/OiBPcGFxdWVWYWx1ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSM0RlY2xhcmVQaXBlRmFjYWRlIHtcbiAgdHlwZTogVHlwZTtcbiAgbmFtZTogc3RyaW5nO1xuICBwdXJlPzogYm9vbGVhbjtcbiAgaXNTdGFuZGFsb25lPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQYXJzZVNvdXJjZVNwYW4ge1xuICBzdGFydDogYW55O1xuICBlbmQ6IGFueTtcbiAgZGV0YWlsczogYW55O1xuICBmdWxsU3RhcnQ6IGFueTtcbn1cbiJdfQ==
|
package/esm2022/src/config.mjs
DELETED
|
@@ -1,20 +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 { ViewEncapsulation } from './core';
|
|
9
|
-
import { noUndefined } from './util';
|
|
10
|
-
export class CompilerConfig {
|
|
11
|
-
constructor({ defaultEncapsulation = ViewEncapsulation.Emulated, preserveWhitespaces, strictInjectionParameters, } = {}) {
|
|
12
|
-
this.defaultEncapsulation = defaultEncapsulation;
|
|
13
|
-
this.preserveWhitespaces = preserveWhitespacesDefault(noUndefined(preserveWhitespaces));
|
|
14
|
-
this.strictInjectionParameters = strictInjectionParameters === true;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
export function preserveWhitespacesDefault(preserveWhitespacesOption, defaultSetting = false) {
|
|
18
|
-
return preserveWhitespacesOption === null ? defaultSetting : preserveWhitespacesOption;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcGlsZXIvc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQTZCLGlCQUFpQixFQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3JFLE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxRQUFRLENBQUM7QUFFbkMsTUFBTSxPQUFPLGNBQWM7SUFLekIsWUFBWSxFQUNWLG9CQUFvQixHQUFHLGlCQUFpQixDQUFDLFFBQVEsRUFDakQsbUJBQW1CLEVBQ25CLHlCQUF5QixNQUt2QixFQUFFO1FBQ0osSUFBSSxDQUFDLG9CQUFvQixHQUFHLG9CQUFvQixDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsR0FBRywwQkFBMEIsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsS0FBSyxJQUFJLENBQUM7SUFDdEUsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUN4Qyx5QkFBeUMsRUFDekMsY0FBYyxHQUFHLEtBQUs7SUFFdEIsT0FBTyx5QkFBeUIsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUM7QUFDekYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge01pc3NpbmdUcmFuc2xhdGlvblN0cmF0ZWd5LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7bm9VbmRlZmluZWR9IGZyb20gJy4vdXRpbCc7XG5cbmV4cG9ydCBjbGFzcyBDb21waWxlckNvbmZpZyB7XG4gIHB1YmxpYyBkZWZhdWx0RW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24gfCBudWxsO1xuICBwdWJsaWMgcHJlc2VydmVXaGl0ZXNwYWNlczogYm9vbGVhbjtcbiAgcHVibGljIHN0cmljdEluamVjdGlvblBhcmFtZXRlcnM6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3Ioe1xuICAgIGRlZmF1bHRFbmNhcHN1bGF0aW9uID0gVmlld0VuY2Fwc3VsYXRpb24uRW11bGF0ZWQsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlcyxcbiAgICBzdHJpY3RJbmplY3Rpb25QYXJhbWV0ZXJzLFxuICB9OiB7XG4gICAgZGVmYXVsdEVuY2Fwc3VsYXRpb24/OiBWaWV3RW5jYXBzdWxhdGlvbjtcbiAgICBwcmVzZXJ2ZVdoaXRlc3BhY2VzPzogYm9vbGVhbjtcbiAgICBzdHJpY3RJbmplY3Rpb25QYXJhbWV0ZXJzPzogYm9vbGVhbjtcbiAgfSA9IHt9KSB7XG4gICAgdGhpcy5kZWZhdWx0RW5jYXBzdWxhdGlvbiA9IGRlZmF1bHRFbmNhcHN1bGF0aW9uO1xuICAgIHRoaXMucHJlc2VydmVXaGl0ZXNwYWNlcyA9IHByZXNlcnZlV2hpdGVzcGFjZXNEZWZhdWx0KG5vVW5kZWZpbmVkKHByZXNlcnZlV2hpdGVzcGFjZXMpKTtcbiAgICB0aGlzLnN0cmljdEluamVjdGlvblBhcmFtZXRlcnMgPSBzdHJpY3RJbmplY3Rpb25QYXJhbWV0ZXJzID09PSB0cnVlO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVzZXJ2ZVdoaXRlc3BhY2VzRGVmYXVsdChcbiAgcHJlc2VydmVXaGl0ZXNwYWNlc09wdGlvbjogYm9vbGVhbiB8IG51bGwsXG4gIGRlZmF1bHRTZXR0aW5nID0gZmFsc2UsXG4pOiBib29sZWFuIHtcbiAgcmV0dXJuIHByZXNlcnZlV2hpdGVzcGFjZXNPcHRpb24gPT09IG51bGwgPyBkZWZhdWx0U2V0dGluZyA6IHByZXNlcnZlV2hpdGVzcGFjZXNPcHRpb247XG59XG4iXX0=
|
|
@@ -1,285 +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 o from './output/output_ast';
|
|
9
|
-
const CONSTANT_PREFIX = '_c';
|
|
10
|
-
/**
|
|
11
|
-
* `ConstantPool` tries to reuse literal factories when two or more literals are identical.
|
|
12
|
-
* We determine whether literals are identical by creating a key out of their AST using the
|
|
13
|
-
* `KeyVisitor`. This constant is used to replace dynamic expressions which can't be safely
|
|
14
|
-
* converted into a key. E.g. given an expression `{foo: bar()}`, since we don't know what
|
|
15
|
-
* the result of `bar` will be, we create a key that looks like `{foo: <unknown>}`. Note
|
|
16
|
-
* that we use a variable, rather than something like `null` in order to avoid collisions.
|
|
17
|
-
*/
|
|
18
|
-
const UNKNOWN_VALUE_KEY = o.variable('<unknown>');
|
|
19
|
-
/**
|
|
20
|
-
* Context to use when producing a key.
|
|
21
|
-
*
|
|
22
|
-
* This ensures we see the constant not the reference variable when producing
|
|
23
|
-
* a key.
|
|
24
|
-
*/
|
|
25
|
-
const KEY_CONTEXT = {};
|
|
26
|
-
/**
|
|
27
|
-
* Generally all primitive values are excluded from the `ConstantPool`, but there is an exclusion
|
|
28
|
-
* for strings that reach a certain length threshold. This constant defines the length threshold for
|
|
29
|
-
* strings.
|
|
30
|
-
*/
|
|
31
|
-
const POOL_INCLUSION_LENGTH_THRESHOLD_FOR_STRINGS = 50;
|
|
32
|
-
/**
|
|
33
|
-
* A node that is a place-holder that allows the node to be replaced when the actual
|
|
34
|
-
* node is known.
|
|
35
|
-
*
|
|
36
|
-
* This allows the constant pool to change an expression from a direct reference to
|
|
37
|
-
* a constant to a shared constant. It returns a fix-up node that is later allowed to
|
|
38
|
-
* change the referenced expression.
|
|
39
|
-
*/
|
|
40
|
-
class FixupExpression extends o.Expression {
|
|
41
|
-
constructor(resolved) {
|
|
42
|
-
super(resolved.type);
|
|
43
|
-
this.resolved = resolved;
|
|
44
|
-
this.shared = false;
|
|
45
|
-
this.original = resolved;
|
|
46
|
-
}
|
|
47
|
-
visitExpression(visitor, context) {
|
|
48
|
-
if (context === KEY_CONTEXT) {
|
|
49
|
-
// When producing a key we want to traverse the constant not the
|
|
50
|
-
// variable used to refer to it.
|
|
51
|
-
return this.original.visitExpression(visitor, context);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
return this.resolved.visitExpression(visitor, context);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
isEquivalent(e) {
|
|
58
|
-
return e instanceof FixupExpression && this.resolved.isEquivalent(e.resolved);
|
|
59
|
-
}
|
|
60
|
-
isConstant() {
|
|
61
|
-
return true;
|
|
62
|
-
}
|
|
63
|
-
clone() {
|
|
64
|
-
throw new Error(`Not supported.`);
|
|
65
|
-
}
|
|
66
|
-
fixup(expression) {
|
|
67
|
-
this.resolved = expression;
|
|
68
|
-
this.shared = true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* A constant pool allows a code emitter to share constant in an output context.
|
|
73
|
-
*
|
|
74
|
-
* The constant pool also supports sharing access to ivy definitions references.
|
|
75
|
-
*/
|
|
76
|
-
export class ConstantPool {
|
|
77
|
-
constructor(isClosureCompilerEnabled = false) {
|
|
78
|
-
this.isClosureCompilerEnabled = isClosureCompilerEnabled;
|
|
79
|
-
this.statements = [];
|
|
80
|
-
this.literals = new Map();
|
|
81
|
-
this.literalFactories = new Map();
|
|
82
|
-
this.sharedConstants = new Map();
|
|
83
|
-
/**
|
|
84
|
-
* Constant pool also tracks claimed names from {@link uniqueName}.
|
|
85
|
-
* This is useful to avoid collisions if variables are intended to be
|
|
86
|
-
* named a certain way- but may conflict. We wouldn't want to always suffix
|
|
87
|
-
* them with unique numbers.
|
|
88
|
-
*/
|
|
89
|
-
this._claimedNames = new Map();
|
|
90
|
-
this.nextNameIndex = 0;
|
|
91
|
-
}
|
|
92
|
-
getConstLiteral(literal, forceShared) {
|
|
93
|
-
if ((literal instanceof o.LiteralExpr && !isLongStringLiteral(literal)) ||
|
|
94
|
-
literal instanceof FixupExpression) {
|
|
95
|
-
// Do no put simple literals into the constant pool or try to produce a constant for a
|
|
96
|
-
// reference to a constant.
|
|
97
|
-
return literal;
|
|
98
|
-
}
|
|
99
|
-
const key = GenericKeyFn.INSTANCE.keyOf(literal);
|
|
100
|
-
let fixup = this.literals.get(key);
|
|
101
|
-
let newValue = false;
|
|
102
|
-
if (!fixup) {
|
|
103
|
-
fixup = new FixupExpression(literal);
|
|
104
|
-
this.literals.set(key, fixup);
|
|
105
|
-
newValue = true;
|
|
106
|
-
}
|
|
107
|
-
if ((!newValue && !fixup.shared) || (newValue && forceShared)) {
|
|
108
|
-
// Replace the expression with a variable
|
|
109
|
-
const name = this.freshName();
|
|
110
|
-
let definition;
|
|
111
|
-
let usage;
|
|
112
|
-
if (this.isClosureCompilerEnabled && isLongStringLiteral(literal)) {
|
|
113
|
-
// For string literals, Closure will **always** inline the string at
|
|
114
|
-
// **all** usages, duplicating it each time. For large strings, this
|
|
115
|
-
// unnecessarily bloats bundle size. To work around this restriction, we
|
|
116
|
-
// wrap the string in a function, and call that function for each usage.
|
|
117
|
-
// This tricks Closure into using inline logic for functions instead of
|
|
118
|
-
// string literals. Function calls are only inlined if the body is small
|
|
119
|
-
// enough to be worth it. By doing this, very large strings will be
|
|
120
|
-
// shared across multiple usages, rather than duplicating the string at
|
|
121
|
-
// each usage site.
|
|
122
|
-
//
|
|
123
|
-
// const myStr = function() { return "very very very long string"; };
|
|
124
|
-
// const usage1 = myStr();
|
|
125
|
-
// const usage2 = myStr();
|
|
126
|
-
definition = o.variable(name).set(new o.FunctionExpr([], // Params.
|
|
127
|
-
[
|
|
128
|
-
// Statements.
|
|
129
|
-
new o.ReturnStatement(literal),
|
|
130
|
-
]));
|
|
131
|
-
usage = o.variable(name).callFn([]);
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
// Just declare and use the variable directly, without a function call
|
|
135
|
-
// indirection. This saves a few bytes and avoids an unnecessary call.
|
|
136
|
-
definition = o.variable(name).set(literal);
|
|
137
|
-
usage = o.variable(name);
|
|
138
|
-
}
|
|
139
|
-
this.statements.push(definition.toDeclStmt(o.INFERRED_TYPE, o.StmtModifier.Final));
|
|
140
|
-
fixup.fixup(usage);
|
|
141
|
-
}
|
|
142
|
-
return fixup;
|
|
143
|
-
}
|
|
144
|
-
getSharedConstant(def, expr) {
|
|
145
|
-
const key = def.keyOf(expr);
|
|
146
|
-
if (!this.sharedConstants.has(key)) {
|
|
147
|
-
const id = this.freshName();
|
|
148
|
-
this.sharedConstants.set(key, o.variable(id));
|
|
149
|
-
this.statements.push(def.toSharedConstantDeclaration(id, expr));
|
|
150
|
-
}
|
|
151
|
-
return this.sharedConstants.get(key);
|
|
152
|
-
}
|
|
153
|
-
getLiteralFactory(literal) {
|
|
154
|
-
// Create a pure function that builds an array of a mix of constant and variable expressions
|
|
155
|
-
if (literal instanceof o.LiteralArrayExpr) {
|
|
156
|
-
const argumentsForKey = literal.entries.map((e) => (e.isConstant() ? e : UNKNOWN_VALUE_KEY));
|
|
157
|
-
const key = GenericKeyFn.INSTANCE.keyOf(o.literalArr(argumentsForKey));
|
|
158
|
-
return this._getLiteralFactory(key, literal.entries, (entries) => o.literalArr(entries));
|
|
159
|
-
}
|
|
160
|
-
else {
|
|
161
|
-
const expressionForKey = o.literalMap(literal.entries.map((e) => ({
|
|
162
|
-
key: e.key,
|
|
163
|
-
value: e.value.isConstant() ? e.value : UNKNOWN_VALUE_KEY,
|
|
164
|
-
quoted: e.quoted,
|
|
165
|
-
})));
|
|
166
|
-
const key = GenericKeyFn.INSTANCE.keyOf(expressionForKey);
|
|
167
|
-
return this._getLiteralFactory(key, literal.entries.map((e) => e.value), (entries) => o.literalMap(entries.map((value, index) => ({
|
|
168
|
-
key: literal.entries[index].key,
|
|
169
|
-
value,
|
|
170
|
-
quoted: literal.entries[index].quoted,
|
|
171
|
-
}))));
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
// TODO: useUniqueName(false) is necessary for naming compatibility with
|
|
175
|
-
// TemplateDefinitionBuilder, but should be removed once Template Pipeline is the default.
|
|
176
|
-
getSharedFunctionReference(fn, prefix, useUniqueName = true) {
|
|
177
|
-
const isArrow = fn instanceof o.ArrowFunctionExpr;
|
|
178
|
-
for (const current of this.statements) {
|
|
179
|
-
// Arrow functions are saved as variables so we check if the
|
|
180
|
-
// value of the variable is the same as the arrow function.
|
|
181
|
-
if (isArrow && current instanceof o.DeclareVarStmt && current.value?.isEquivalent(fn)) {
|
|
182
|
-
return o.variable(current.name);
|
|
183
|
-
}
|
|
184
|
-
// Function declarations are saved as function statements
|
|
185
|
-
// so we compare them directly to the passed-in function.
|
|
186
|
-
if (!isArrow &&
|
|
187
|
-
current instanceof o.DeclareFunctionStmt &&
|
|
188
|
-
fn instanceof o.FunctionExpr &&
|
|
189
|
-
fn.isEquivalent(current)) {
|
|
190
|
-
return o.variable(current.name);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// Otherwise declare the function.
|
|
194
|
-
const name = useUniqueName ? this.uniqueName(prefix) : prefix;
|
|
195
|
-
this.statements.push(fn instanceof o.FunctionExpr
|
|
196
|
-
? fn.toDeclStmt(name, o.StmtModifier.Final)
|
|
197
|
-
: new o.DeclareVarStmt(name, fn, o.INFERRED_TYPE, o.StmtModifier.Final, fn.sourceSpan));
|
|
198
|
-
return o.variable(name);
|
|
199
|
-
}
|
|
200
|
-
_getLiteralFactory(key, values, resultMap) {
|
|
201
|
-
let literalFactory = this.literalFactories.get(key);
|
|
202
|
-
const literalFactoryArguments = values.filter((e) => !e.isConstant());
|
|
203
|
-
if (!literalFactory) {
|
|
204
|
-
const resultExpressions = values.map((e, index) => e.isConstant() ? this.getConstLiteral(e, true) : o.variable(`a${index}`));
|
|
205
|
-
const parameters = resultExpressions
|
|
206
|
-
.filter(isVariable)
|
|
207
|
-
.map((e) => new o.FnParam(e.name, o.DYNAMIC_TYPE));
|
|
208
|
-
const pureFunctionDeclaration = o.arrowFn(parameters, resultMap(resultExpressions), o.INFERRED_TYPE);
|
|
209
|
-
const name = this.freshName();
|
|
210
|
-
this.statements.push(o
|
|
211
|
-
.variable(name)
|
|
212
|
-
.set(pureFunctionDeclaration)
|
|
213
|
-
.toDeclStmt(o.INFERRED_TYPE, o.StmtModifier.Final));
|
|
214
|
-
literalFactory = o.variable(name);
|
|
215
|
-
this.literalFactories.set(key, literalFactory);
|
|
216
|
-
}
|
|
217
|
-
return { literalFactory, literalFactoryArguments };
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Produce a unique name in the context of this pool.
|
|
221
|
-
*
|
|
222
|
-
* The name might be unique among different prefixes if any of the prefixes end in
|
|
223
|
-
* a digit so the prefix should be a constant string (not based on user input) and
|
|
224
|
-
* must not end in a digit.
|
|
225
|
-
*/
|
|
226
|
-
uniqueName(name, alwaysIncludeSuffix = true) {
|
|
227
|
-
const count = this._claimedNames.get(name) ?? 0;
|
|
228
|
-
const result = count === 0 && !alwaysIncludeSuffix ? `${name}` : `${name}${count}`;
|
|
229
|
-
this._claimedNames.set(name, count + 1);
|
|
230
|
-
return result;
|
|
231
|
-
}
|
|
232
|
-
freshName() {
|
|
233
|
-
return this.uniqueName(CONSTANT_PREFIX);
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
export class GenericKeyFn {
|
|
237
|
-
static { this.INSTANCE = new GenericKeyFn(); }
|
|
238
|
-
keyOf(expr) {
|
|
239
|
-
if (expr instanceof o.LiteralExpr && typeof expr.value === 'string') {
|
|
240
|
-
return `"${expr.value}"`;
|
|
241
|
-
}
|
|
242
|
-
else if (expr instanceof o.LiteralExpr) {
|
|
243
|
-
return String(expr.value);
|
|
244
|
-
}
|
|
245
|
-
else if (expr instanceof o.LiteralArrayExpr) {
|
|
246
|
-
const entries = [];
|
|
247
|
-
for (const entry of expr.entries) {
|
|
248
|
-
entries.push(this.keyOf(entry));
|
|
249
|
-
}
|
|
250
|
-
return `[${entries.join(',')}]`;
|
|
251
|
-
}
|
|
252
|
-
else if (expr instanceof o.LiteralMapExpr) {
|
|
253
|
-
const entries = [];
|
|
254
|
-
for (const entry of expr.entries) {
|
|
255
|
-
let key = entry.key;
|
|
256
|
-
if (entry.quoted) {
|
|
257
|
-
key = `"${key}"`;
|
|
258
|
-
}
|
|
259
|
-
entries.push(key + ':' + this.keyOf(entry.value));
|
|
260
|
-
}
|
|
261
|
-
return `{${entries.join(',')}}`;
|
|
262
|
-
}
|
|
263
|
-
else if (expr instanceof o.ExternalExpr) {
|
|
264
|
-
return `import("${expr.value.moduleName}", ${expr.value.name})`;
|
|
265
|
-
}
|
|
266
|
-
else if (expr instanceof o.ReadVarExpr) {
|
|
267
|
-
return `read(${expr.name})`;
|
|
268
|
-
}
|
|
269
|
-
else if (expr instanceof o.TypeofExpr) {
|
|
270
|
-
return `typeof(${this.keyOf(expr.expr)})`;
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
throw new Error(`${this.constructor.name} does not handle expressions of type ${expr.constructor.name}`);
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
function isVariable(e) {
|
|
278
|
-
return e instanceof o.ReadVarExpr;
|
|
279
|
-
}
|
|
280
|
-
function isLongStringLiteral(expr) {
|
|
281
|
-
return (expr instanceof o.LiteralExpr &&
|
|
282
|
-
typeof expr.value === 'string' &&
|
|
283
|
-
expr.value.length >= POOL_INCLUSION_LENGTH_THRESHOLD_FOR_STRINGS);
|
|
284
|
-
}
|
|
285
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRfcG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBpbGVyL3NyYy9jb25zdGFudF9wb29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sS0FBSyxDQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFekMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBRTdCOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7QUFFbEQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFdBQVcsR0FBRyxFQUFFLENBQUM7QUFFdkI7Ozs7R0FJRztBQUNILE1BQU0sMkNBQTJDLEdBQUcsRUFBRSxDQUFDO0FBRXZEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLGVBQWdCLFNBQVEsQ0FBQyxDQUFDLFVBQVU7SUFLeEMsWUFBbUIsUUFBc0I7UUFDdkMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQURKLGFBQVEsR0FBUixRQUFRLENBQWM7UUFGekMsV0FBTSxHQUFHLEtBQUssQ0FBQztRQUliLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFUSxlQUFlLENBQUMsT0FBNEIsRUFBRSxPQUFZO1FBQ2pFLElBQUksT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzVCLGdFQUFnRTtZQUNoRSxnQ0FBZ0M7WUFDaEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDekQsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN6RCxDQUFDO0lBQ0gsQ0FBQztJQUVRLFlBQVksQ0FBQyxDQUFlO1FBQ25DLE9B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QUFDLENBQWU7SUFDakMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsQ0FBQztBQUNwQyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxJQUFrQjtJQUM3QyxPQUFPLENBQ0wsSUFBSSxZQUFZLENBQUMsQ0FBQyxXQUFXO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssS0FBSyxRQUFRO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLDJDQUEyQyxDQUNqRSxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBvIGZyb20gJy4vb3V0cHV0L291dHB1dF9hc3QnO1xuXG5jb25zdCBDT05TVEFOVF9QUkVGSVggPSAnX2MnO1xuXG4vKipcbiAqIGBDb25zdGFudFBvb2xgIHRyaWVzIHRvIHJldXNlIGxpdGVyYWwgZmFjdG9yaWVzIHdoZW4gdHdvIG9yIG1vcmUgbGl0ZXJhbHMgYXJlIGlkZW50aWNhbC5cbiAqIFdlIGRldGVybWluZSB3aGV0aGVyIGxpdGVyYWxzIGFyZSBpZGVudGljYWwgYnkgY3JlYXRpbmcgYSBrZXkgb3V0IG9mIHRoZWlyIEFTVCB1c2luZyB0aGVcbiAqIGBLZXlWaXNpdG9yYC4gVGhpcyBjb25zdGFudCBpcyB1c2VkIHRvIHJlcGxhY2UgZHluYW1pYyBleHByZXNzaW9ucyB3aGljaCBjYW4ndCBiZSBzYWZlbHlcbiAqIGNvbnZlcnRlZCBpbnRvIGEga2V5LiBFLmcuIGdpdmVuIGFuIGV4cHJlc3Npb24gYHtmb286IGJhcigpfWAsIHNpbmNlIHdlIGRvbid0IGtub3cgd2hhdFxuICogdGhlIHJlc3VsdCBvZiBgYmFyYCB3aWxsIGJlLCB3ZSBjcmVhdGUgYSBrZXkgdGhhdCBsb29rcyBsaWtlIGB7Zm9vOiA8dW5rbm93bj59YC4gTm90ZVxuICogdGhhdCB3ZSB1c2UgYSB2YXJpYWJsZSwgcmF0aGVyIHRoYW4gc29tZXRoaW5nIGxpa2UgYG51bGxgIGluIG9yZGVyIHRvIGF2b2lkIGNvbGxpc2lvbnMuXG4gKi9cbmNvbnN0IFVOS05PV05fVkFMVUVfS0VZID0gby52YXJpYWJsZSgnPHVua25vd24+Jyk7XG5cbi8qKlxuICogQ29udGV4dCB0byB1c2Ugd2hlbiBwcm9kdWNpbmcgYSBrZXkuXG4gKlxuICogVGhpcyBlbnN1cmVzIHdlIHNlZSB0aGUgY29uc3RhbnQgbm90IHRoZSByZWZlcmVuY2UgdmFyaWFibGUgd2hlbiBwcm9kdWNpbmdcbiAqIGEga2V5LlxuICovXG5jb25zdCBLRVlfQ09OVEVYVCA9IHt9O1xuXG4vKipcbiAqIEdlbmVyYWxseSBhbGwgcHJpbWl0aXZlIHZhbHVlcyBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgYENvbnN0YW50UG9vbGAsIGJ1dCB0aGVyZSBpcyBhbiBleGNsdXNpb25cbiAqIGZvciBzdHJpbmdzIHRoYXQgcmVhY2ggYSBjZXJ0YWluIGxlbmd0aCB0aHJlc2hvbGQuIFRoaXMgY29uc3RhbnQgZGVmaW5lcyB0aGUgbGVuZ3RoIHRocmVzaG9sZCBmb3JcbiAqIHN0cmluZ3MuXG4gKi9cbmNvbnN0IFBPT0xfSU5DTFVTSU9OX0xFTkdUSF9USFJFU0hPTERfRk9SX1NUUklOR1MgPSA1MDtcblxuLyoqXG4gKiBBIG5vZGUgdGhhdCBpcyBhIHBsYWNlLWhvbGRlciB0aGF0IGFsbG93cyB0aGUgbm9kZSB0byBiZSByZXBsYWNlZCB3aGVuIHRoZSBhY3R1YWxcbiAqIG5vZGUgaXMga25vd24uXG4gKlxuICogVGhpcyBhbGxvd3MgdGhlIGNvbnN0YW50IHBvb2wgdG8gY2hhbmdlIGFuIGV4cHJlc3Npb24gZnJvbSBhIGRpcmVjdCByZWZlcmVuY2UgdG9cbiAqIGEgY29uc3RhbnQgdG8gYSBzaGFyZWQgY29uc3RhbnQuIEl0IHJldHVybnMgYSBmaXgtdXAgbm9kZSB0aGF0IGlzIGxhdGVyIGFsbG93ZWQgdG9cbiAqIGNoYW5nZSB0aGUgcmVmZXJlbmNlZCBleHByZXNzaW9uLlxuICovXG5jbGFzcyBGaXh1cEV4cHJlc3Npb24gZXh0ZW5kcyBvLkV4cHJlc3Npb24ge1xuICBwcml2YXRlIG9yaWdpbmFsOiBvLkV4cHJlc3Npb247XG5cbiAgc2hhcmVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJlc29sdmVkOiBvLkV4cHJlc3Npb24pIHtcbiAgICBzdXBlcihyZXNvbHZlZC50eXBlKTtcbiAgICB0aGlzLm9yaWdpbmFsID0gcmVzb2x2ZWQ7XG4gIH1cblxuICBvdmVycmlkZSB2aXNpdEV4cHJlc3Npb24odmlzaXRvcjogby5FeHByZXNzaW9uVmlzaXRvciwgY29udGV4dDogYW55KTogYW55IHtcbiAgICBpZiAoY29udGV4dCA9PT0gS0VZX0NPTlRFWFQpIHtcbiAgICAgIC8vIFdoZW4gcHJvZHVjaW5nIGEga2V5IHdlIHdhbnQgdG8gdHJhdmVyc2UgdGhlIGNvbnN0YW50IG5vdCB0aGVcbiAgICAgIC8vIHZhcmlhYmxlIHVzZWQgdG8gcmVmZXIgdG8gaXQuXG4gICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbC52aXNpdEV4cHJlc3Npb24odmlzaXRvciwgY29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc29sdmVkLnZpc2l0RXhwcmVzc2lvbih2aXNpdG9yLCBjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICBvdmVycmlkZSBpc0VxdWl2YWxlbnQoZTogby5FeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGUgaW5zdGFuY2VvZiBGaXh1cEV4cHJlc3Npb24gJiYgdGhpcy5yZXNvbHZlZC5pc0VxdWl2YWxlbnQoZS5yZXNvbHZlZCk7XG4gIH1cblxuICBvdmVycmlkZSBpc0NvbnN0YW50KCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb3ZlcnJpZGUgY2xvbmUoKTogRml4dXBFeHByZXNzaW9uIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBzdXBwb3J0ZWQuYCk7XG4gIH1cblxuICBmaXh1cChleHByZXNzaW9uOiBvLkV4cHJlc3Npb24pIHtcbiAgICB0aGlzLnJlc29sdmVkID0gZXhwcmVzc2lvbjtcbiAgICB0aGlzLnNoYXJlZCA9IHRydWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGNvbnN0YW50IHBvb2wgYWxsb3dzIGEgY29kZSBlbWl0dGVyIHRvIHNoYXJlIGNvbnN0YW50IGluIGFuIG91dHB1dCBjb250ZXh0LlxuICpcbiAqIFRoZSBjb25zdGFudCBwb29sIGFsc28gc3VwcG9ydHMgc2hhcmluZyBhY2Nlc3MgdG8gaXZ5IGRlZmluaXRpb25zIHJlZmVyZW5jZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25zdGFudFBvb2wge1xuICBzdGF0ZW1lbnRzOiBvLlN0YXRlbWVudFtdID0gW107XG4gIHByaXZhdGUgbGl0ZXJhbHMgPSBuZXcgTWFwPHN0cmluZywgRml4dXBFeHByZXNzaW9uPigpO1xuICBwcml2YXRlIGxpdGVyYWxGYWN0b3JpZXMgPSBuZXcgTWFwPHN0cmluZywgby5FeHByZXNzaW9uPigpO1xuICBwcml2YXRlIHNoYXJlZENvbnN0YW50cyA9IG5ldyBNYXA8c3RyaW5nLCBvLkV4cHJlc3Npb24+KCk7XG5cbiAgLyoqXG4gICAqIENvbnN0YW50IHBvb2wgYWxzbyB0cmFja3MgY2xhaW1lZCBuYW1lcyBmcm9tIHtAbGluayB1bmlxdWVOYW1lfS5cbiAgICogVGhpcyBpcyB1c2VmdWwgdG8gYXZvaWQgY29sbGlzaW9ucyBpZiB2YXJpYWJsZXMgYXJlIGludGVuZGVkIHRvIGJlXG4gICAqIG5hbWVkIGEgY2VydGFpbiB3YXktIGJ1dCBtYXkgY29uZmxpY3QuIFdlIHdvdWxkbid0IHdhbnQgdG8gYWx3YXlzIHN1ZmZpeFxuICAgKiB0aGVtIHdpdGggdW5pcXVlIG51bWJlcnMuXG4gICAqL1xuICBwcml2YXRlIF9jbGFpbWVkTmFtZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIHByaXZhdGUgbmV4dE5hbWVJbmRleCA9IDA7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBpc0Nsb3N1cmVDb21waWxlckVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZSkge31cblxuICBnZXRDb25zdExpdGVyYWwobGl0ZXJhbDogby5FeHByZXNzaW9uLCBmb3JjZVNoYXJlZD86IGJvb2xlYW4pOiBvLkV4cHJlc3Npb24ge1xuICAgIGlmIChcbiAgICAgIChsaXRlcmFsIGluc3RhbmNlb2Ygby5MaXRlcmFsRXhwciAmJiAhaXNMb25nU3RyaW5nTGl0ZXJhbChsaXRlcmFsKSkgfHxcbiAgICAgIGxpdGVyYWwgaW5zdGFuY2VvZiBGaXh1cEV4cHJlc3Npb25cbiAgICApIHtcbiAgICAgIC8vIERvIG5vIHB1dCBzaW1wbGUgbGl0ZXJhbHMgaW50byB0aGUgY29uc3RhbnQgcG9vbCBvciB0cnkgdG8gcHJvZHVjZSBhIGNvbnN0YW50IGZvciBhXG4gICAgICAvLyByZWZlcmVuY2UgdG8gYSBjb25zdGFudC5cbiAgICAgIHJldHVybiBsaXRlcmFsO1xuICAgIH1cbiAgICBjb25zdCBrZXkgPSBHZW5lcmljS2V5Rm4uSU5TVEFOQ0Uua2V5T2YobGl0ZXJhbCk7XG4gICAgbGV0IGZpeHVwID0gdGhpcy5saXRlcmFscy5nZXQoa2V5KTtcbiAgICBsZXQgbmV3VmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoIWZpeHVwKSB7XG4gICAgICBmaXh1cCA9IG5ldyBGaXh1cEV4cHJlc3Npb24obGl0ZXJhbCk7XG4gICAgICB0aGlzLmxpdGVyYWxzLnNldChrZXksIGZpeHVwKTtcbiAgICAgIG5ld1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoKCFuZXdWYWx1ZSAmJiAhZml4dXAuc2hhcmVkKSB8fCAobmV3VmFsdWUgJiYgZm9yY2VTaGFyZWQpKSB7XG4gICAgICAvLyBSZXBsYWNlIHRoZSBleHByZXNzaW9uIHdpdGggYSB2YXJpYWJsZVxuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZnJlc2hOYW1lKCk7XG4gICAgICBsZXQgZGVmaW5pdGlvbjogby5Xcml0ZVZhckV4cHI7XG4gICAgICBsZXQgdXNhZ2U6IG8uRXhwcmVzc2lvbjtcbiAgICAgIGlmICh0aGlzLmlzQ2xvc3VyZUNvbXBpbGVyRW5hYmxlZCAmJiBpc0xvbmdTdHJpbmdMaXRlcmFsKGxpdGVyYWwpKSB7XG4gICAgICAgIC8vIEZvciBzdHJpbmcgbGl0ZXJhbHMsIENsb3N1cmUgd2lsbCAqKmFsd2F5cyoqIGlubGluZSB0aGUgc3RyaW5nIGF0XG4gICAgICAgIC8vICoqYWxsKiogdXNhZ2VzLCBkdXBsaWNhdGluZyBpdCBlYWNoIHRpbWUuIEZvciBsYXJnZSBzdHJpbmdzLCB0aGlzXG4gICAgICAgIC8vIHVubmVjZXNzYXJpbHkgYmxvYXRzIGJ1bmRsZSBzaXplLiBUbyB3b3JrIGFyb3VuZCB0aGlzIHJlc3RyaWN0aW9uLCB3ZVxuICAgICAgICAvLyB3cmFwIHRoZSBzdHJpbmcgaW4gYSBmdW5jdGlvbiwgYW5kIGNhbGwgdGhhdCBmdW5jdGlvbiBmb3IgZWFjaCB1c2FnZS5cbiAgICAgICAgLy8gVGhpcyB0cmlja3MgQ2xvc3VyZSBpbnRvIHVzaW5nIGlubGluZSBsb2dpYyBmb3IgZnVuY3Rpb25zIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gc3RyaW5nIGxpdGVyYWxzLiBGdW5jdGlvbiBjYWxscyBhcmUgb25seSBpbmxpbmVkIGlmIHRoZSBib2R5IGlzIHNtYWxsXG4gICAgICAgIC8vIGVub3VnaCB0byBiZSB3b3J0aCBpdC4gQnkgZG9pbmcgdGhpcywgdmVyeSBsYXJnZSBzdHJpbmdzIHdpbGwgYmVcbiAgICAgICAgLy8gc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSB1c2FnZXMsIHJhdGhlciB0aGFuIGR1cGxpY2F0aW5nIHRoZSBzdHJpbmcgYXRcbiAgICAgICAgLy8gZWFjaCB1c2FnZSBzaXRlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBjb25zdCBteVN0ciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gXCJ2ZXJ5IHZlcnkgdmVyeSBsb25nIHN0cmluZ1wiOyB9O1xuICAgICAgICAvLyBjb25zdCB1c2FnZTEgPSBteVN0cigpO1xuICAgICAgICAvLyBjb25zdCB1c2FnZTIgPSBteVN0cigpO1xuICAgICAgICBkZWZpbml0aW9uID0gby52YXJpYWJsZShuYW1lKS5zZXQoXG4gICAgICAgICAgbmV3IG8uRnVuY3Rpb25FeHByKFxuICAgICAgICAgICAgW10sIC8vIFBhcmFtcy5cbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgLy8gU3RhdGVtZW50cy5cbiAgICAgICAgICAgICAgbmV3IG8uUmV0dXJuU3RhdGVtZW50KGxpdGVyYWwpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB1c2FnZSA9IG8udmFyaWFibGUobmFtZSkuY2FsbEZuKFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEp1c3QgZGVjbGFyZSBhbmQgdXNlIHRoZSB2YXJpYWJsZSBkaXJlY3RseSwgd2l0aG91dCBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgLy8gaW5kaXJlY3Rpb24uIFRoaXMgc2F2ZXMgYSBmZXcgYnl0ZXMgYW5kIGF2b2lkcyBhbiB1bm5lY2Vzc2FyeSBjYWxsLlxuICAgICAgICBkZWZpbml0aW9uID0gby52YXJpYWJsZShuYW1lKS5zZXQobGl0ZXJhbCk7XG4gICAgICAgIHVzYWdlID0gby52YXJpYWJsZShuYW1lKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goZGVmaW5pdGlvbi50b0RlY2xTdG10KG8uSU5GRVJSRURfVFlQRSwgby5TdG10TW9kaWZpZXIuRmluYWwpKTtcbiAgICAgIGZpeHVwLmZpeHVwKHVzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZml4dXA7XG4gIH1cblxuICBnZXRTaGFyZWRDb25zdGFudChkZWY6IFNoYXJlZENvbnN0YW50RGVmaW5pdGlvbiwgZXhwcjogby5FeHByZXNzaW9uKTogby5FeHByZXNzaW9uIHtcbiAgICBjb25zdCBrZXkgPSBkZWYua2V5T2YoZXhwcik7XG4gICAgaWYgKCF0aGlzLnNoYXJlZENvbnN0YW50cy5oYXMoa2V5KSkge1xuICAgICAgY29uc3QgaWQgPSB0aGlzLmZyZXNoTmFtZSgpO1xuICAgICAgdGhpcy5zaGFyZWRDb25zdGFudHMuc2V0KGtleSwgby52YXJpYWJsZShpZCkpO1xuICAgICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goZGVmLnRvU2hhcmVkQ29uc3RhbnREZWNsYXJhdGlvbihpZCwgZXhwcikpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zaGFyZWRDb25zdGFudHMuZ2V0KGtleSkhO1xuICB9XG5cbiAgZ2V0TGl0ZXJhbEZhY3RvcnkobGl0ZXJhbDogby5MaXRlcmFsQXJyYXlFeHByIHwgby5MaXRlcmFsTWFwRXhwcik6IHtcbiAgICBsaXRlcmFsRmFjdG9yeTogby5FeHByZXNzaW9uO1xuICAgIGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOiBvLkV4cHJlc3Npb25bXTtcbiAgfSB7XG4gICAgLy8gQ3JlYXRlIGEgcHVyZSBmdW5jdGlvbiB0aGF0IGJ1aWxkcyBhbiBhcnJheSBvZiBhIG1peCBvZiBjb25zdGFudCBhbmQgdmFyaWFibGUgZXhwcmVzc2lvbnNcbiAgICBpZiAobGl0ZXJhbCBpbnN0YW5jZW9mIG8uTGl0ZXJhbEFycmF5RXhwcikge1xuICAgICAgY29uc3QgYXJndW1lbnRzRm9yS2V5ID0gbGl0ZXJhbC5lbnRyaWVzLm1hcCgoZSkgPT4gKGUuaXNDb25zdGFudCgpID8gZSA6IFVOS05PV05fVkFMVUVfS0VZKSk7XG4gICAgICBjb25zdCBrZXkgPSBHZW5lcmljS2V5Rm4uSU5TVEFOQ0Uua2V5T2Yoby5saXRlcmFsQXJyKGFyZ3VtZW50c0ZvcktleSkpO1xuICAgICAgcmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KGtleSwgbGl0ZXJhbC5lbnRyaWVzLCAoZW50cmllcykgPT4gby5saXRlcmFsQXJyKGVudHJpZXMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbkZvcktleSA9IG8ubGl0ZXJhbE1hcChcbiAgICAgICAgbGl0ZXJhbC5lbnRyaWVzLm1hcCgoZSkgPT4gKHtcbiAgICAgICAgICBrZXk6IGUua2V5LFxuICAgICAgICAgIHZhbHVlOiBlLnZhbHVlLmlzQ29uc3RhbnQoKSA/IGUudmFsdWUgOiBVTktOT1dOX1ZBTFVFX0tFWSxcbiAgICAgICAgICBxdW90ZWQ6IGUucXVvdGVkLFxuICAgICAgICB9KSksXG4gICAgICApO1xuICAgICAgY29uc3Qga2V5ID0gR2VuZXJpY0tleUZuLklOU1RBTkNFLmtleU9mKGV4cHJlc3Npb25Gb3JLZXkpO1xuICAgICAgcmV0dXJuIHRoaXMuX2dldExpdGVyYWxGYWN0b3J5KFxuICAgICAgICBrZXksXG4gICAgICAgIGxpdGVyYWwuZW50cmllcy5tYXAoKGUpID0+IGUudmFsdWUpLFxuICAgICAgICAoZW50cmllcykgPT5cbiAgICAgICAgICBvLmxpdGVyYWxNYXAoXG4gICAgICAgICAgICBlbnRyaWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICBrZXk6IGxpdGVyYWwuZW50cmllc1tpbmRleF0ua2V5LFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgcXVvdGVkOiBsaXRlcmFsLmVudHJpZXNbaW5kZXhdLnF1b3RlZCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiB1c2VVbmlxdWVOYW1lKGZhbHNlKSBpcyBuZWNlc3NhcnkgZm9yIG5hbWluZyBjb21wYXRpYmlsaXR5IHdpdGhcbiAgLy8gVGVtcGxhdGVEZWZpbml0aW9uQnVpbGRlciwgYnV0IHNob3VsZCBiZSByZW1vdmVkIG9uY2UgVGVtcGxhdGUgUGlwZWxpbmUgaXMgdGhlIGRlZmF1bHQuXG4gIGdldFNoYXJlZEZ1bmN0aW9uUmVmZXJlbmNlKFxuICAgIGZuOiBvLkV4cHJlc3Npb24sXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgdXNlVW5pcXVlTmFtZTogYm9vbGVhbiA9IHRydWUsXG4gICk6IG8uRXhwcmVzc2lvbiB7XG4gICAgY29uc3QgaXNBcnJvdyA9IGZuIGluc3RhbmNlb2Ygby5BcnJvd0Z1bmN0aW9uRXhwcjtcblxuICAgIGZvciAoY29uc3QgY3VycmVudCBvZiB0aGlzLnN0YXRlbWVudHMpIHtcbiAgICAgIC8vIEFycm93IGZ1bmN0aW9ucyBhcmUgc2F2ZWQgYXMgdmFyaWFibGVzIHNvIHdlIGNoZWNrIGlmIHRoZVxuICAgICAgLy8gdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGlzIHRoZSBzYW1lIGFzIHRoZSBhcnJvdyBmdW5jdGlvbi5cbiAgICAgIGlmIChpc0Fycm93ICYmIGN1cnJlbnQgaW5zdGFuY2VvZiBvLkRlY2xhcmVWYXJTdG10ICYmIGN1cnJlbnQudmFsdWU/LmlzRXF1aXZhbGVudChmbikpIHtcbiAgICAgICAgcmV0dXJuIG8udmFyaWFibGUoY3VycmVudC5uYW1lKTtcbiAgICAgIH1cblxuICAgICAgLy8gRnVuY3Rpb24gZGVjbGFyYXRpb25zIGFyZSBzYXZlZCBhcyBmdW5jdGlvbiBzdGF0ZW1lbnRzXG4gICAgICAvLyBzbyB3ZSBjb21wYXJlIHRoZW0gZGlyZWN0bHkgdG8gdGhlIHBhc3NlZC1pbiBmdW5jdGlvbi5cbiAgICAgIGlmIChcbiAgICAgICAgIWlzQXJyb3cgJiZcbiAgICAgICAgY3VycmVudCBpbnN0YW5jZW9mIG8uRGVjbGFyZUZ1bmN0aW9uU3RtdCAmJlxuICAgICAgICBmbiBpbnN0YW5jZW9mIG8uRnVuY3Rpb25FeHByICYmXG4gICAgICAgIGZuLmlzRXF1aXZhbGVudChjdXJyZW50KVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBvLnZhcmlhYmxlKGN1cnJlbnQubmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gT3RoZXJ3aXNlIGRlY2xhcmUgdGhlIGZ1bmN0aW9uLlxuICAgIGNvbnN0IG5hbWUgPSB1c2VVbmlxdWVOYW1lID8gdGhpcy51bmlxdWVOYW1lKHByZWZpeCkgOiBwcmVmaXg7XG4gICAgdGhpcy5zdGF0ZW1lbnRzLnB1c2goXG4gICAgICBmbiBpbnN0YW5jZW9mIG8uRnVuY3Rpb25FeHByXG4gICAgICAgID8gZm4udG9EZWNsU3RtdChuYW1lLCBvLlN0bXRNb2RpZmllci5GaW5hbClcbiAgICAgICAgOiBuZXcgby5EZWNsYXJlVmFyU3RtdChuYW1lLCBmbiwgby5JTkZFUlJFRF9UWVBFLCBvLlN0bXRNb2RpZmllci5GaW5hbCwgZm4uc291cmNlU3BhbiksXG4gICAgKTtcbiAgICByZXR1cm4gby52YXJpYWJsZShuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldExpdGVyYWxGYWN0b3J5KFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlczogby5FeHByZXNzaW9uW10sXG4gICAgcmVzdWx0TWFwOiAocGFyYW1ldGVyczogby5FeHByZXNzaW9uW10pID0+IG8uRXhwcmVzc2lvbixcbiAgKToge2xpdGVyYWxGYWN0b3J5OiBvLkV4cHJlc3Npb247IGxpdGVyYWxGYWN0b3J5QXJndW1lbnRzOiBvLkV4cHJlc3Npb25bXX0ge1xuICAgIGxldCBsaXRlcmFsRmFjdG9yeSA9IHRoaXMubGl0ZXJhbEZhY3Rvcmllcy5nZXQoa2V5KTtcbiAgICBjb25zdCBsaXRlcmFsRmFjdG9yeUFyZ3VtZW50cyA9IHZhbHVlcy5maWx0ZXIoKGUpID0+ICFlLmlzQ29uc3RhbnQoKSk7XG4gICAgaWYgKCFsaXRlcmFsRmFjdG9yeSkge1xuICAgICAgY29uc3QgcmVzdWx0RXhwcmVzc2lvbnMgPSB2YWx1ZXMubWFwKChlLCBpbmRleCkgPT5cbiAgICAgICAgZS5pc0NvbnN0YW50KCkgPyB0aGlzLmdldENvbnN0TGl0ZXJhbChlLCB0cnVlKSA6IG8udmFyaWFibGUoYGEke2luZGV4fWApLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSByZXN1bHRFeHByZXNzaW9uc1xuICAgICAgICAuZmlsdGVyKGlzVmFyaWFibGUpXG4gICAgICAgIC5tYXAoKGUpID0+IG5ldyBvLkZuUGFyYW0oZS5uYW1lISwgby5EWU5BTUlDX1RZUEUpKTtcbiAgICAgIGNvbnN0IHB1cmVGdW5jdGlvbkRlY2xhcmF0aW9uID0gby5hcnJvd0ZuKFxuICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICByZXN1bHRNYXAocmVzdWx0RXhwcmVzc2lvbnMpLFxuICAgICAgICBvLklORkVSUkVEX1RZUEUsXG4gICAgICApO1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuZnJlc2hOYW1lKCk7XG4gICAgICB0aGlzLnN0YXRlbWVudHMucHVzaChcbiAgICAgICAgb1xuICAgICAgICAgIC52YXJpYWJsZShuYW1lKVxuICAgICAgICAgIC5zZXQocHVyZUZ1bmN0aW9uRGVjbGFyYXRpb24pXG4gICAgICAgICAgLnRvRGVjbFN0bXQoby5JTkZFUlJFRF9UWVBFLCBvLlN0bXRNb2RpZmllci5GaW5hbCksXG4gICAgICApO1xuICAgICAgbGl0ZXJhbEZhY3RvcnkgPSBvLnZhcmlhYmxlKG5hbWUpO1xuICAgICAgdGhpcy5saXRlcmFsRmFjdG9yaWVzLnNldChrZXksIGxpdGVyYWxGYWN0b3J5KTtcbiAgICB9XG4gICAgcmV0dXJuIHtsaXRlcmFsRmFjdG9yeSwgbGl0ZXJhbEZhY3RvcnlBcmd1bWVudHN9O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2R1Y2UgYSB1bmlxdWUgbmFtZSBpbiB0aGUgY29udGV4dCBvZiB0aGlzIHBvb2wuXG4gICAqXG4gICAqIFRoZSBuYW1lIG1pZ2h0IGJlIHVuaXF1ZSBhbW9uZyBkaWZmZXJlbnQgcHJlZml4ZXMgaWYgYW55IG9mIHRoZSBwcmVmaXhlcyBlbmQgaW5cbiAgICogYSBkaWdpdCBzbyB0aGUgcHJlZml4IHNob3VsZCBiZSBhIGNvbnN0YW50IHN0cmluZyAobm90IGJhc2VkIG9uIHVzZXIgaW5wdXQpIGFuZFxuICAgKiBtdXN0IG5vdCBlbmQgaW4gYSBkaWdpdC5cbiAgICovXG4gIHVuaXF1ZU5hbWUobmFtZTogc3RyaW5nLCBhbHdheXNJbmNsdWRlU3VmZml4ID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLl9jbGFpbWVkTmFtZXMuZ2V0KG5hbWUpID8/IDA7XG4gICAgY29uc3QgcmVzdWx0ID0gY291bnQgPT09IDAgJiYgIWFsd2F5c0luY2x1ZGVTdWZmaXggPyBgJHtuYW1lfWAgOiBgJHtuYW1lfSR7Y291bnR9YDtcblxuICAgIHRoaXMuX2NsYWltZWROYW1lcy5zZXQobmFtZSwgY291bnQgKyAxKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBmcmVzaE5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy51bmlxdWVOYW1lKENPTlNUQU5UX1BSRUZJWCk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBFeHByZXNzaW9uS2V5Rm4ge1xuICBrZXlPZihleHByOiBvLkV4cHJlc3Npb24pOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2hhcmVkQ29uc3RhbnREZWZpbml0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbktleUZuIHtcbiAgdG9TaGFyZWRDb25zdGFudERlY2xhcmF0aW9uKGRlY2xOYW1lOiBzdHJpbmcsIGtleUV4cHI6IG8uRXhwcmVzc2lvbik6IG8uU3RhdGVtZW50O1xufVxuXG5leHBvcnQgY2xhc3MgR2VuZXJpY0tleUZuIGltcGxlbWVudHMgRXhwcmVzc2lvbktleUZuIHtcbiAgc3RhdGljIHJlYWRvbmx5IElOU1RBTkNFID0gbmV3IEdlbmVyaWNLZXlGbigpO1xuXG4gIGtleU9mKGV4cHI6IG8uRXhwcmVzc2lvbik6IHN0cmluZyB7XG4gICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBvLkxpdGVyYWxFeHByICYmIHR5cGVvZiBleHByLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGBcIiR7ZXhwci52YWx1ZX1cImA7XG4gICAgfSBlbHNlIGlmIChleHByIGluc3RhbmNlb2Ygby5MaXRlcmFsRXhwcikge1xuICAgICAgcmV0dXJuIFN0cmluZyhleHByLnZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGV4cHIgaW5zdGFuY2VvZiBvLkxpdGVyYWxBcnJheUV4cHIpIHtcbiAgICAgIGNvbnN0IGVudHJpZXM6IHN0cmluZ1tdID0gW107XG4gICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGV4cHIuZW50cmllcykge1xuICAgICAgICBlbnRyaWVzLnB1c2godGhpcy5rZXlPZihlbnRyeSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBbJHtlbnRyaWVzLmpvaW4oJywnKX1dYDtcbiAgICB9IGVsc2UgaWYgKGV4cHIgaW5zdGFuY2VvZiBvLkxpdGVyYWxNYXBFeHByKSB7XG4gICAgICBjb25zdCBlbnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBleHByLmVudHJpZXMpIHtcbiAgICAgICAgbGV0IGtleSA9IGVudHJ5LmtleTtcbiAgICAgICAgaWYgKGVudHJ5LnF1b3RlZCkge1xuICAgICAgICAgIGtleSA9IGBcIiR7a2V5fVwiYDtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnB1c2goa2V5ICsgJzonICsgdGhpcy5rZXlPZihlbnRyeS52YWx1ZSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGB7JHtlbnRyaWVzLmpvaW4oJywnKX19YDtcbiAgICB9IGVsc2UgaWYgKGV4cHIgaW5zdGFuY2VvZiBvLkV4dGVybmFsRXhwcikge1xuICAgICAgcmV0dXJuIGBpbXBvcnQoXCIke2V4cHIudmFsdWUubW9kdWxlTmFtZX1cIiwgJHtleHByLnZhbHVlLm5hbWV9KWA7XG4gICAgfSBlbHNlIGlmIChleHByIGluc3RhbmNlb2Ygby5SZWFkVmFyRXhwcikge1xuICAgICAgcmV0dXJuIGByZWFkKCR7ZXhwci5uYW1lfSlgO1xuICAgIH0gZWxzZSBpZiAoZXhwciBpbnN0YW5jZW9mIG8uVHlwZW9mRXhwcikge1xuICAgICAgcmV0dXJuIGB0eXBlb2YoJHt0aGlzLmtleU9mKGV4cHIuZXhwcil9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBkb2VzIG5vdCBoYW5kbGUgZXhwcmVzc2lvbnMgb2YgdHlwZSAke2V4cHIuY29uc3RydWN0b3IubmFtZX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNWYXJpYWJsZShlOiBvLkV4cHJlc3Npb24pOiBlIGlzIG8uUmVhZFZhckV4cHIge1xuICByZXR1cm4gZSBpbnN0YW5jZW9mIG8uUmVhZFZhckV4cHI7XG59XG5cbmZ1bmN0aW9uIGlzTG9uZ1N0cmluZ0xpdGVyYWwoZXhwcjogby5FeHByZXNzaW9uKTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgZXhwciBpbnN0YW5jZW9mIG8uTGl0ZXJhbEV4cHIgJiZcbiAgICB0eXBlb2YgZXhwci52YWx1ZSA9PT0gJ3N0cmluZycgJiZcbiAgICBleHByLnZhbHVlLmxlbmd0aCA+PSBQT09MX0lOQ0xVU0lPTl9MRU5HVEhfVEhSRVNIT0xEX0ZPUl9TVFJJTkdTXG4gICk7XG59XG4iXX0=
|