@angular/core 9.0.0-rc.6 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/bundles/core-testing.umd.js +18 -16
  2. package/bundles/core-testing.umd.js.map +1 -1
  3. package/bundles/core-testing.umd.min.js +7 -7
  4. package/bundles/core-testing.umd.min.js.map +1 -1
  5. package/bundles/core.umd.js +4018 -4002
  6. package/bundles/core.umd.js.map +1 -1
  7. package/bundles/core.umd.min.js +172 -187
  8. package/bundles/core.umd.min.js.map +1 -1
  9. package/core.d.ts +725 -735
  10. package/core.metadata.json +1 -1
  11. package/esm2015/core.externs.js +5 -5
  12. package/esm2015/core.js +17 -15
  13. package/esm2015/index.js +2 -2
  14. package/esm2015/public_api.js +2 -2
  15. package/esm2015/src/application_init.js +10 -2
  16. package/esm2015/src/application_module.js +6 -3
  17. package/esm2015/src/application_ref.js +7 -7
  18. package/esm2015/src/core.js +4 -4
  19. package/esm2015/src/core_private_export.js +7 -7
  20. package/esm2015/src/core_render3_private_export.js +2 -2
  21. package/esm2015/src/debug/debug_node.js +71 -69
  22. package/esm2015/src/di/injectable.js +1 -13
  23. package/esm2015/src/di/injector.js +12 -10
  24. package/esm2015/src/di/interface/defs.js +28 -4
  25. package/esm2015/src/di/interface/provider.js +1 -1
  26. package/esm2015/src/di/jit/injectable.js +14 -2
  27. package/esm2015/src/di/jit/util.js +7 -5
  28. package/esm2015/src/di/r3_injector.js +5 -5
  29. package/esm2015/src/i18n/locale_data_api.js +22 -6
  30. package/esm2015/src/i18n/locale_en.js +16 -5
  31. package/esm2015/src/i18n/localization.js +7 -1
  32. package/esm2015/src/i18n/tokens.js +41 -1
  33. package/esm2015/src/interface/type.js +1 -1
  34. package/esm2015/src/metadata/ng_module.js +1 -1
  35. package/esm2015/src/render/api.js +4 -1
  36. package/esm2015/src/render3/assert.js +9 -1
  37. package/esm2015/src/render3/bindings.js +20 -7
  38. package/esm2015/src/render3/component.js +54 -25
  39. package/esm2015/src/render3/component_ref.js +17 -18
  40. package/esm2015/src/render3/definition.js +3 -1
  41. package/esm2015/src/render3/di.js +3 -4
  42. package/esm2015/src/render3/di_setup.js +5 -7
  43. package/esm2015/src/render3/errors.js +99 -19
  44. package/esm2015/src/render3/features/inherit_definition_feature.js +89 -52
  45. package/esm2015/src/render3/features/ng_onchanges_feature.js +2 -2
  46. package/esm2015/src/render3/global_utils_api.js +3 -3
  47. package/esm2015/src/render3/i18n.js +60 -56
  48. package/esm2015/src/render3/index.js +2 -2
  49. package/esm2015/src/render3/instructions/advance.js +10 -11
  50. package/esm2015/src/render3/instructions/all.js +4 -5
  51. package/esm2015/src/render3/instructions/attribute.js +12 -5
  52. package/esm2015/src/render3/instructions/attribute_interpolation.js +66 -14
  53. package/esm2015/src/render3/instructions/change_detection.js +8 -23
  54. package/esm2015/src/render3/instructions/class_map_interpolation.js +13 -12
  55. package/esm2015/src/render3/instructions/container.js +15 -12
  56. package/esm2015/src/render3/instructions/element.js +50 -133
  57. package/esm2015/src/render3/instructions/element_container.js +8 -10
  58. package/esm2015/src/render3/instructions/embedded_view.js +7 -7
  59. package/esm2015/src/render3/instructions/host_property.js +10 -7
  60. package/esm2015/src/render3/instructions/listener.js +18 -16
  61. package/esm2015/src/render3/instructions/lview_debug.js +160 -23
  62. package/esm2015/src/render3/instructions/projection.js +7 -5
  63. package/esm2015/src/render3/instructions/property.js +27 -6
  64. package/esm2015/src/render3/instructions/property_interpolation.js +42 -23
  65. package/esm2015/src/render3/instructions/shared.js +285 -245
  66. package/esm2015/src/render3/instructions/storage.js +6 -8
  67. package/esm2015/src/render3/instructions/style_prop_interpolation.js +12 -12
  68. package/esm2015/src/render3/instructions/styling.js +732 -470
  69. package/esm2015/src/render3/instructions/text.js +5 -5
  70. package/esm2015/src/render3/interfaces/definition.js +41 -1
  71. package/esm2015/src/render3/interfaces/node.js +160 -115
  72. package/esm2015/src/render3/interfaces/styling.js +183 -375
  73. package/esm2015/src/render3/interfaces/view.js +10 -2
  74. package/esm2015/src/render3/jit/directive.js +10 -16
  75. package/esm2015/src/render3/jit/environment.js +1 -3
  76. package/esm2015/src/render3/node_manipulation.js +177 -57
  77. package/esm2015/src/render3/node_selector_matcher.js +128 -24
  78. package/esm2015/src/render3/node_util.js +12 -7
  79. package/esm2015/src/render3/pipe.js +10 -14
  80. package/esm2015/src/render3/pure_function.js +107 -42
  81. package/esm2015/src/render3/query.js +32 -26
  82. package/esm2015/src/render3/state.js +54 -183
  83. package/esm2015/src/render3/styling/class_differ.js +47 -0
  84. package/esm2015/src/render3/styling/static_styling.js +54 -0
  85. package/esm2015/src/render3/styling/style_binding_list.js +437 -0
  86. package/esm2015/src/render3/styling/styling_parser.js +336 -0
  87. package/esm2015/src/render3/tokens.js +2 -2
  88. package/esm2015/src/render3/util/attrs_utils.js +125 -2
  89. package/esm2015/src/render3/util/change_detection_utils.js +33 -0
  90. package/esm2015/src/render3/util/discovery_utils.js +146 -119
  91. package/esm2015/src/render3/util/global_utils.js +5 -5
  92. package/esm2015/src/render3/util/view_utils.js +6 -6
  93. package/esm2015/src/render3/view_engine_compatibility.js +16 -17
  94. package/esm2015/src/render3/view_ref.js +16 -13
  95. package/esm2015/src/sanitization/bypass.js +1 -1
  96. package/esm2015/src/sanitization/inert_body.js +22 -18
  97. package/esm2015/src/sanitization/sanitization.js +20 -5
  98. package/esm2015/src/util/array_utils.js +240 -1
  99. package/esm2015/src/util/assert.js +37 -21
  100. package/esm2015/src/util/char_code.js +8 -0
  101. package/esm2015/src/util/iterable.js +4 -1
  102. package/esm2015/src/util/ng_dev_mode.js +1 -12
  103. package/esm2015/src/util/stringify.js +14 -1
  104. package/esm2015/src/version.js +1 -1
  105. package/esm2015/src/view/services.js +1 -1
  106. package/esm2015/testing/src/r3_test_bed.js +5 -1
  107. package/esm2015/testing/src/r3_test_bed_compiler.js +5 -13
  108. package/esm2015/testing/src/styling.js +103 -0
  109. package/esm5/core.js +17 -15
  110. package/esm5/src/application_init.js +10 -2
  111. package/esm5/src/application_module.js +6 -3
  112. package/esm5/src/application_ref.js +6 -6
  113. package/esm5/src/core.js +2 -2
  114. package/esm5/src/core_private_export.js +7 -7
  115. package/esm5/src/core_render3_private_export.js +2 -2
  116. package/esm5/src/debug/debug_node.js +47 -41
  117. package/esm5/src/di/injectable.js +1 -1
  118. package/esm5/src/di/injector.js +12 -12
  119. package/esm5/src/di/interface/defs.js +28 -4
  120. package/esm5/src/di/interface/provider.js +1 -1
  121. package/esm5/src/di/jit/injectable.js +11 -2
  122. package/esm5/src/di/jit/util.js +6 -5
  123. package/esm5/src/di/r3_injector.js +4 -4
  124. package/esm5/src/i18n/locale_data_api.js +20 -6
  125. package/esm5/src/i18n/locale_en.js +16 -5
  126. package/esm5/src/i18n/localization.js +6 -1
  127. package/esm5/src/i18n/tokens.js +40 -1
  128. package/esm5/src/interface/type.js +1 -1
  129. package/esm5/src/metadata/ng_module.js +1 -1
  130. package/esm5/src/render/api.js +4 -1
  131. package/esm5/src/render3/assert.js +4 -1
  132. package/esm5/src/render3/bindings.js +22 -4
  133. package/esm5/src/render3/component.js +47 -22
  134. package/esm5/src/render3/component_ref.js +15 -17
  135. package/esm5/src/render3/definition.js +3 -1
  136. package/esm5/src/render3/di.js +3 -4
  137. package/esm5/src/render3/di_setup.js +4 -5
  138. package/esm5/src/render3/errors.js +69 -12
  139. package/esm5/src/render3/features/inherit_definition_feature.js +74 -42
  140. package/esm5/src/render3/features/ng_onchanges_feature.js +1 -1
  141. package/esm5/src/render3/global_utils_api.js +3 -3
  142. package/esm5/src/render3/i18n.js +51 -51
  143. package/esm5/src/render3/index.js +2 -2
  144. package/esm5/src/render3/instructions/advance.js +9 -11
  145. package/esm5/src/render3/instructions/all.js +1 -2
  146. package/esm5/src/render3/instructions/attribute.js +9 -5
  147. package/esm5/src/render3/instructions/attribute_interpolation.js +49 -13
  148. package/esm5/src/render3/instructions/change_detection.js +8 -21
  149. package/esm5/src/render3/instructions/class_map_interpolation.js +13 -12
  150. package/esm5/src/render3/instructions/container.js +13 -12
  151. package/esm5/src/render3/instructions/element.js +46 -114
  152. package/esm5/src/render3/instructions/element_container.js +8 -9
  153. package/esm5/src/render3/instructions/embedded_view.js +7 -7
  154. package/esm5/src/render3/instructions/host_property.js +8 -7
  155. package/esm5/src/render3/instructions/listener.js +13 -13
  156. package/esm5/src/render3/instructions/lview_debug.js +56 -15
  157. package/esm5/src/render3/instructions/projection.js +6 -5
  158. package/esm5/src/render3/instructions/property.js +17 -6
  159. package/esm5/src/render3/instructions/property_interpolation.js +32 -24
  160. package/esm5/src/render3/instructions/shared.js +264 -211
  161. package/esm5/src/render3/instructions/storage.js +4 -6
  162. package/esm5/src/render3/instructions/style_prop_interpolation.js +12 -12
  163. package/esm5/src/render3/instructions/styling.js +685 -363
  164. package/esm5/src/render3/instructions/text.js +5 -5
  165. package/esm5/src/render3/interfaces/definition.js +1 -1
  166. package/esm5/src/render3/interfaces/node.js +49 -1
  167. package/esm5/src/render3/interfaces/styling.js +57 -1
  168. package/esm5/src/render3/interfaces/view.js +1 -1
  169. package/esm5/src/render3/jit/directive.js +8 -10
  170. package/esm5/src/render3/jit/environment.js +1 -3
  171. package/esm5/src/render3/node_manipulation.js +167 -54
  172. package/esm5/src/render3/node_selector_matcher.js +113 -20
  173. package/esm5/src/render3/node_util.js +12 -7
  174. package/esm5/src/render3/pipe.js +10 -14
  175. package/esm5/src/render3/pure_function.js +103 -33
  176. package/esm5/src/render3/query.js +25 -24
  177. package/esm5/src/render3/state.js +34 -131
  178. package/esm5/src/render3/styling/class_differ.js +39 -0
  179. package/esm5/src/render3/styling/static_styling.js +42 -0
  180. package/esm5/src/render3/styling/style_binding_list.js +411 -0
  181. package/esm5/src/render3/styling/styling_parser.js +265 -0
  182. package/esm5/src/render3/tokens.js +2 -2
  183. package/esm5/src/render3/util/attrs_utils.js +117 -2
  184. package/esm5/src/render3/util/change_detection_utils.js +23 -0
  185. package/esm5/src/render3/util/discovery_utils.js +115 -99
  186. package/esm5/src/render3/util/global_utils.js +5 -5
  187. package/esm5/src/render3/util/view_utils.js +5 -5
  188. package/esm5/src/render3/view_engine_compatibility.js +37 -39
  189. package/esm5/src/render3/view_ref.js +14 -13
  190. package/esm5/src/sanitization/bypass.js +1 -1
  191. package/esm5/src/sanitization/inert_body.js +20 -13
  192. package/esm5/src/sanitization/sanitization.js +16 -5
  193. package/esm5/src/util/array_utils.js +240 -1
  194. package/esm5/src/util/assert.js +37 -21
  195. package/esm5/src/util/char_code.js +8 -0
  196. package/esm5/src/util/iterable.js +4 -1
  197. package/esm5/src/util/ng_dev_mode.js +1 -12
  198. package/esm5/src/util/stringify.js +14 -1
  199. package/esm5/src/version.js +1 -1
  200. package/esm5/src/view/services.js +1 -1
  201. package/esm5/testing/src/r3_test_bed.js +9 -1
  202. package/esm5/testing/src/r3_test_bed_compiler.js +9 -15
  203. package/esm5/testing/src/styling.js +82 -0
  204. package/fesm2015/core.js +5352 -6012
  205. package/fesm2015/core.js.map +1 -1
  206. package/fesm2015/testing.js +10 -14
  207. package/fesm2015/testing.js.map +1 -1
  208. package/fesm5/core.js +3987 -3980
  209. package/fesm5/core.js.map +1 -1
  210. package/fesm5/testing.js +18 -16
  211. package/fesm5/testing.js.map +1 -1
  212. package/package.json +1 -1
  213. package/schematics/migrations/missing-injectable/transform.js +2 -3
  214. package/schematics/migrations/module-with-providers/transform.js +3 -2
  215. package/schematics/migrations/undecorated-classes-with-di/index.js +2 -2
  216. package/schematics/utils/typescript/compiler_host.js +2 -2
  217. package/src/r3_symbols.d.ts +46 -23
  218. package/testing/testing.d.ts +3 -5
  219. package/testing/testing.metadata.json +1 -1
  220. package/testing.d.ts +2 -2
  221. package/esm2015/global.js +0 -7
  222. package/esm2015/src/render3/instructions/alloc_host_vars.js +0 -80
  223. package/esm2015/src/render3/styling/bindings.js +0 -1248
  224. package/esm2015/src/render3/styling/map_based_bindings.js +0 -384
  225. package/esm2015/src/render3/styling/state.js +0 -135
  226. package/esm2015/src/render3/styling/styling_debug.js +0 -712
  227. package/esm2015/src/render3/util/styling_utils.js +0 -625
  228. package/esm5/global.js +0 -9
  229. package/esm5/src/render3/instructions/alloc_host_vars.js +0 -62
  230. package/esm5/src/render3/styling/bindings.js +0 -949
  231. package/esm5/src/render3/styling/map_based_bindings.js +0 -310
  232. package/esm5/src/render3/styling/state.js +0 -56
  233. package/esm5/src/render3/styling/styling_debug.js +0 -352
  234. package/esm5/src/render3/util/styling_utils.js +0 -378
@@ -0,0 +1,265 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google Inc. 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 { assertEqual, throwError } from '../../util/assert';
9
+ // Global state of the parser. (This makes parser non-reentrant, but that is not an issue)
10
+ var parserState = {
11
+ textEnd: 0,
12
+ key: 0,
13
+ keyEnd: 0,
14
+ value: 0,
15
+ valueEnd: 0,
16
+ };
17
+ /**
18
+ * Retrieves the last parsed `key` of style.
19
+ * @param text the text to substring the key from.
20
+ */
21
+ export function getLastParsedKey(text) {
22
+ return text.substring(parserState.key, parserState.keyEnd);
23
+ }
24
+ /**
25
+ * Retrieves the last parsed `value` of style.
26
+ * @param text the text to substring the key from.
27
+ */
28
+ export function getLastParsedValue(text) {
29
+ return text.substring(parserState.value, parserState.valueEnd);
30
+ }
31
+ /**
32
+ * Initializes `className` string for parsing and parses the first token.
33
+ *
34
+ * This function is intended to be used in this format:
35
+ * ```
36
+ * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
37
+ * const key = getLastParsedKey();
38
+ * ...
39
+ * }
40
+ * ```
41
+ * @param text `className` to parse
42
+ * @returns index where the next invocation of `parseClassNameNext` should resume.
43
+ */
44
+ export function parseClassName(text) {
45
+ resetParserState(text);
46
+ return parseClassNameNext(text, consumeWhitespace(text, 0, parserState.textEnd));
47
+ }
48
+ /**
49
+ * Parses next `className` token.
50
+ *
51
+ * This function is intended to be used in this format:
52
+ * ```
53
+ * for (let i = parseClassName(text); i >= 0; i = parseClassNameNext(text, i)) {
54
+ * const key = getLastParsedKey();
55
+ * ...
56
+ * }
57
+ * ```
58
+ *
59
+ * @param text `className` to parse
60
+ * @param index where the parsing should resume.
61
+ * @returns index where the next invocation of `parseClassNameNext` should resume.
62
+ */
63
+ export function parseClassNameNext(text, index) {
64
+ var end = parserState.textEnd;
65
+ if (end === index) {
66
+ return -1;
67
+ }
68
+ index = parserState.keyEnd = consumeClassToken(text, parserState.key = index, end);
69
+ return consumeWhitespace(text, index, end);
70
+ }
71
+ /**
72
+ * Initializes `cssText` string for parsing and parses the first key/values.
73
+ *
74
+ * This function is intended to be used in this format:
75
+ * ```
76
+ * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
77
+ * const key = getLastParsedKey();
78
+ * const value = getLastParsedValue();
79
+ * ...
80
+ * }
81
+ * ```
82
+ * @param text `cssText` to parse
83
+ * @returns index where the next invocation of `parseStyleNext` should resume.
84
+ */
85
+ export function parseStyle(text) {
86
+ resetParserState(text);
87
+ return parseStyleNext(text, consumeWhitespace(text, 0, parserState.textEnd));
88
+ }
89
+ /**
90
+ * Parses the next `cssText` key/values.
91
+ *
92
+ * This function is intended to be used in this format:
93
+ * ```
94
+ * for (let i = parseStyle(text); i >= 0; i = parseStyleNext(text, i))) {
95
+ * const key = getLastParsedKey();
96
+ * const value = getLastParsedValue();
97
+ * ...
98
+ * }
99
+ *
100
+ * @param text `cssText` to parse
101
+ * @param index where the parsing should resume.
102
+ * @returns index where the next invocation of `parseStyleNext` should resume.
103
+ */
104
+ export function parseStyleNext(text, startIndex) {
105
+ var end = parserState.textEnd;
106
+ var index = parserState.key = consumeWhitespace(text, startIndex, end);
107
+ if (end === index) {
108
+ // we reached an end so just quit
109
+ return -1;
110
+ }
111
+ index = parserState.keyEnd = consumeStyleKey(text, index, end);
112
+ index = consumeSeparator(text, index, end, 58 /* COLON */);
113
+ index = parserState.value = consumeWhitespace(text, index, end);
114
+ index = parserState.valueEnd = consumeStyleValue(text, index, end);
115
+ return consumeSeparator(text, index, end, 59 /* SEMI_COLON */);
116
+ }
117
+ /**
118
+ * Reset the global state of the styling parser.
119
+ * @param text The styling text to parse.
120
+ */
121
+ export function resetParserState(text) {
122
+ parserState.key = 0;
123
+ parserState.keyEnd = 0;
124
+ parserState.value = 0;
125
+ parserState.valueEnd = 0;
126
+ parserState.textEnd = text.length;
127
+ }
128
+ /**
129
+ * Returns index of next non-whitespace character.
130
+ *
131
+ * @param text Text to scan
132
+ * @param startIndex Starting index of character where the scan should start.
133
+ * @param endIndex Ending index of character where the scan should end.
134
+ * @returns Index of next non-whitespace character (May be the same as `start` if no whitespace at
135
+ * that location.)
136
+ */
137
+ export function consumeWhitespace(text, startIndex, endIndex) {
138
+ while (startIndex < endIndex && text.charCodeAt(startIndex) <= 32 /* SPACE */) {
139
+ startIndex++;
140
+ }
141
+ return startIndex;
142
+ }
143
+ /**
144
+ * Returns index of last char in class token.
145
+ *
146
+ * @param text Text to scan
147
+ * @param startIndex Starting index of character where the scan should start.
148
+ * @param endIndex Ending index of character where the scan should end.
149
+ * @returns Index after last char in class token.
150
+ */
151
+ export function consumeClassToken(text, startIndex, endIndex) {
152
+ while (startIndex < endIndex && text.charCodeAt(startIndex) > 32 /* SPACE */) {
153
+ startIndex++;
154
+ }
155
+ return startIndex;
156
+ }
157
+ /**
158
+ * Consumes all of the characters belonging to style key and token.
159
+ *
160
+ * @param text Text to scan
161
+ * @param startIndex Starting index of character where the scan should start.
162
+ * @param endIndex Ending index of character where the scan should end.
163
+ * @returns Index after last style key character.
164
+ */
165
+ export function consumeStyleKey(text, startIndex, endIndex) {
166
+ var ch;
167
+ while (startIndex < endIndex &&
168
+ ((ch = text.charCodeAt(startIndex)) === 45 /* DASH */ || ch === 95 /* UNDERSCORE */ ||
169
+ ((ch & -33 /* UPPER_CASE */) >= 65 /* A */ && (ch & -33 /* UPPER_CASE */) <= 90 /* Z */))) {
170
+ startIndex++;
171
+ }
172
+ return startIndex;
173
+ }
174
+ /**
175
+ * Consumes all whitespace and the separator `:` after the style key.
176
+ *
177
+ * @param text Text to scan
178
+ * @param startIndex Starting index of character where the scan should start.
179
+ * @param endIndex Ending index of character where the scan should end.
180
+ * @returns Index after separator and surrounding whitespace.
181
+ */
182
+ export function consumeSeparator(text, startIndex, endIndex, separator) {
183
+ startIndex = consumeWhitespace(text, startIndex, endIndex);
184
+ if (startIndex < endIndex) {
185
+ if (ngDevMode && text.charCodeAt(startIndex) !== separator) {
186
+ malformedStyleError(text, String.fromCharCode(separator), startIndex);
187
+ }
188
+ startIndex++;
189
+ }
190
+ return startIndex;
191
+ }
192
+ /**
193
+ * Consumes style value honoring `url()` and `""` text.
194
+ *
195
+ * @param text Text to scan
196
+ * @param startIndex Starting index of character where the scan should start.
197
+ * @param endIndex Ending index of character where the scan should end.
198
+ * @returns Index after last style value character.
199
+ */
200
+ export function consumeStyleValue(text, startIndex, endIndex) {
201
+ var ch1 = -1; // 1st previous character
202
+ var ch2 = -1; // 2nd previous character
203
+ var ch3 = -1; // 3rd previous character
204
+ var i = startIndex;
205
+ var lastChIndex = i;
206
+ while (i < endIndex) {
207
+ var ch = text.charCodeAt(i++);
208
+ if (ch === 59 /* SEMI_COLON */) {
209
+ return lastChIndex;
210
+ }
211
+ else if (ch === 34 /* DOUBLE_QUOTE */ || ch === 39 /* SINGLE_QUOTE */) {
212
+ lastChIndex = i = consumeQuotedText(text, ch, i, endIndex);
213
+ }
214
+ else if (startIndex ===
215
+ i - 4 && // We have seen only 4 characters so far "URL(" (Ignore "foo_URL()")
216
+ ch3 === 85 /* U */ &&
217
+ ch2 === 82 /* R */ && ch1 === 76 /* L */ && ch === 40 /* OPEN_PAREN */) {
218
+ lastChIndex = i = consumeQuotedText(text, 41 /* CLOSE_PAREN */, i, endIndex);
219
+ }
220
+ else if (ch > 32 /* SPACE */) {
221
+ // if we have a non-whitespace character then capture its location
222
+ lastChIndex = i;
223
+ }
224
+ ch3 = ch2;
225
+ ch2 = ch1;
226
+ ch1 = ch & -33 /* UPPER_CASE */;
227
+ }
228
+ return lastChIndex;
229
+ }
230
+ /**
231
+ * Consumes all of the quoted characters.
232
+ *
233
+ * @param text Text to scan
234
+ * @param quoteCharCode CharCode of either `"` or `'` quote or `)` for `url(...)`.
235
+ * @param startIndex Starting index of character where the scan should start.
236
+ * @param endIndex Ending index of character where the scan should end.
237
+ * @returns Index after quoted characters.
238
+ */
239
+ export function consumeQuotedText(text, quoteCharCode, startIndex, endIndex) {
240
+ var ch1 = -1; // 1st previous character
241
+ var index = startIndex;
242
+ while (index < endIndex) {
243
+ var ch = text.charCodeAt(index++);
244
+ if (ch == quoteCharCode && ch1 !== 92 /* BACK_SLASH */) {
245
+ return index;
246
+ }
247
+ if (ch == 92 /* BACK_SLASH */ && ch1 === 92 /* BACK_SLASH */) {
248
+ // two back slashes cancel each other out. For example `"\\"` should properly end the
249
+ // quotation. (It should not assume that the last `"` is escaped.)
250
+ ch1 = 0;
251
+ }
252
+ else {
253
+ ch1 = ch;
254
+ }
255
+ }
256
+ throw ngDevMode ? malformedStyleError(text, String.fromCharCode(quoteCharCode), endIndex) :
257
+ new Error();
258
+ }
259
+ function malformedStyleError(text, expecting, index) {
260
+ ngDevMode && assertEqual(typeof text === 'string', true, 'String expected here');
261
+ throw throwError("Malformed style at location " + index + " in string '" + text.substring(0, index) + '[>>' +
262
+ text.substring(index, index + 1) + '<<]' + text.substr(index + 1) +
263
+ ("'. Expecting '" + expecting + "'."));
264
+ }
265
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZ19wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL3N0eWxpbmcvc3R5bGluZ19wYXJzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQWtDMUQsMEZBQTBGO0FBQzFGLElBQU0sV0FBVyxHQUFnQjtJQUMvQixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxDQUFDO0lBQ04sTUFBTSxFQUFFLENBQUM7SUFDVCxLQUFLLEVBQUUsQ0FBQztJQUNSLFFBQVEsRUFBRSxDQUFDO0NBQ1osQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxJQUFZO0lBQzNDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVk7SUFDN0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLElBQVk7SUFDekMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsT0FBTyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNuRixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsSUFBWSxF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dkIsT0FBTyxLQUFLLEdBQUcsUUFBUSxFQUFFO1FBQ3ZCLElBQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLEVBQUUsSUFBSSxhQUFhLElBQUksR0FBRyx3QkFBd0IsRUFBRTtZQUN0RCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsSUFBSSxFQUFFLHVCQUF1QixJQUFJLEdBQUcsd0JBQXdCLEVBQUU7WUFDNUQscUZBQXFGO1lBQ3JGLGtFQUFrRTtZQUNsRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1NBQ1Q7YUFBTTtZQUNMLEdBQUcsR0FBRyxFQUFFLENBQUM7U0FDVjtLQUNGO0lBQ0QsTUFBTSxTQUFTLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDekUsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUNoQyxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsU0FBaUIsRUFBRSxLQUFhO0lBQ3pFLFNBQVMsSUFBSSxXQUFXLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sVUFBVSxDQUNaLGlDQUErQixLQUFLLGlCQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSztRQUNyRixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztTQUNqRSxtQkFBaUIsU0FBUyxPQUFJLENBQUEsQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7YXNzZXJ0RXF1YWwsIHRocm93RXJyb3J9IGZyb20gJy4uLy4uL3V0aWwvYXNzZXJ0JztcbmltcG9ydCB7Q2hhckNvZGV9IGZyb20gJy4uLy4uL3V0aWwvY2hhcl9jb2RlJztcblxuLyoqXG4gKiBTdG9yZXMgdGhlIGxvY2F0aW9ucyBvZiBrZXkvdmFsdWUgaW5kZXhlcyB3aGlsZSBwYXJzaW5nIHN0eWxpbmcuXG4gKlxuICogSW4gY2FzZSBvZiBgY3NzVGV4dGAgcGFyc2luZyB0aGUgaW5kZXhlcyBhcmUgbGlrZSBzbzpcbiAqIGBgYFxuICogICBcImtleTE6IHZhbHVlMTsga2V5MjogdmFsdWUyOyBrZXkzOiB2YWx1ZTNcIlxuICogICAgICAgICAgICAgICAgICBeICAgXiBeICAgICBeICAgICAgICAgICAgIF5cbiAqICAgICAgICAgICAgICAgICAgfCAgIHwgfCAgICAgfCAgICAgICAgICAgICArLS0gdGV4dEVuZFxuICogICAgICAgICAgICAgICAgICB8ICAgfCB8ICAgICArLS0tLS0tLS0tLS0tLS0tLSB2YWx1ZUVuZFxuICogICAgICAgICAgICAgICAgICB8ICAgfCArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB2YWx1ZVxuICogICAgICAgICAgICAgICAgICB8ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBrZXlFbmRcbiAqICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ga2V5XG4gKiBgYGBcbiAqXG4gKiBJbiBjYXNlIG9mIGBjbGFzc05hbWVgIHBhcnNpbmcgdGhlIGluZGV4ZXMgYXJlIGxpa2Ugc286XG4gKiBgYGBcbiAqICAgXCJrZXkxIGtleTIga2V5M1wiXG4gKiAgICAgICAgIF4gICBeICAgIF5cbiAqICAgICAgICAgfCAgIHwgICAgKy0tIHRleHRFbmRcbiAqICAgICAgICAgfCAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0ga2V5RW5kXG4gKiAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGtleVxuICogYGBgXG4gKiBOT1RFOiBgdmFsdWVgIGFuZCBgdmFsdWVFbmRgIGFyZSB1c2VkIG9ubHkgZm9yIHN0eWxlcywgbm90IGNsYXNzZXMuXG4gKi9cbmludGVyZmFjZSBQYXJzZXJTdGF0ZSB7XG4gIHRleHRFbmQ6IG51bWJlcjtcbiAga2V5OiBudW1iZXI7XG4gIGtleUVuZDogbnVtYmVyO1xuICB2YWx1ZTogbnVtYmVyO1xuICB2YWx1ZUVuZDogbnVtYmVyO1xufVxuLy8gR2xvYmFsIHN0YXRlIG9mIHRoZSBwYXJzZXIuIChUaGlzIG1ha2VzIHBhcnNlciBub24tcmVlbnRyYW50LCBidXQgdGhhdCBpcyBub3QgYW4gaXNzdWUpXG5jb25zdCBwYXJzZXJTdGF0ZTogUGFyc2VyU3RhdGUgPSB7XG4gIHRleHRFbmQ6IDAsXG4gIGtleTogMCxcbiAga2V5RW5kOiAwLFxuICB2YWx1ZTogMCxcbiAgdmFsdWVFbmQ6IDAsXG59O1xuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGFzdCBwYXJzZWQgYGtleWAgb2Ygc3R5bGUuXG4gKiBAcGFyYW0gdGV4dCB0aGUgdGV4dCB0byBzdWJzdHJpbmcgdGhlIGtleSBmcm9tLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdFBhcnNlZEtleSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dC5zdWJzdHJpbmcocGFyc2VyU3RhdGUua2V5LCBwYXJzZXJTdGF0ZS5rZXlFbmQpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbGFzdCBwYXJzZWQgYHZhbHVlYCBvZiBzdHlsZS5cbiAqIEBwYXJhbSB0ZXh0IHRoZSB0ZXh0IHRvIHN1YnN0cmluZyB0aGUga2V5IGZyb20uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0UGFyc2VkVmFsdWUodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKHBhcnNlclN0YXRlLnZhbHVlLCBwYXJzZXJTdGF0ZS52YWx1ZUVuZCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYGNsYXNzTmFtZWAgc3RyaW5nIGZvciBwYXJzaW5nIGFuZCBwYXJzZXMgdGhlIGZpcnN0IHRva2VuLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiB0aGlzIGZvcm1hdDpcbiAqIGBgYFxuICogZm9yIChsZXQgaSA9IHBhcnNlQ2xhc3NOYW1lKHRleHQpOyBpID49IDA7IGkgPSBwYXJzZUNsYXNzTmFtZU5leHQodGV4dCwgaSkpIHtcbiAqICAgY29uc3Qga2V5ID0gZ2V0TGFzdFBhcnNlZEtleSgpO1xuICogICAuLi5cbiAqIH1cbiAqIGBgYFxuICogQHBhcmFtIHRleHQgYGNsYXNzTmFtZWAgdG8gcGFyc2VcbiAqIEByZXR1cm5zIGluZGV4IHdoZXJlIHRoZSBuZXh0IGludm9jYXRpb24gb2YgYHBhcnNlQ2xhc3NOYW1lTmV4dGAgc2hvdWxkIHJlc3VtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2xhc3NOYW1lKHRleHQ6IHN0cmluZyk6IG51bWJlciB7XG4gIHJlc2V0UGFyc2VyU3RhdGUodGV4dCk7XG4gIHJldHVybiBwYXJzZUNsYXNzTmFtZU5leHQodGV4dCwgY29uc3VtZVdoaXRlc3BhY2UodGV4dCwgMCwgcGFyc2VyU3RhdGUudGV4dEVuZCkpO1xufVxuXG4vKipcbiAqIFBhcnNlcyBuZXh0IGBjbGFzc05hbWVgIHRva2VuLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiB0aGlzIGZvcm1hdDpcbiAqIGBgYFxuICogZm9yIChsZXQgaSA9IHBhcnNlQ2xhc3NOYW1lKHRleHQpOyBpID49IDA7IGkgPSBwYXJzZUNsYXNzTmFtZU5leHQodGV4dCwgaSkpIHtcbiAqICAgY29uc3Qga2V5ID0gZ2V0TGFzdFBhcnNlZEtleSgpO1xuICogICAuLi5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB0ZXh0IGBjbGFzc05hbWVgIHRvIHBhcnNlXG4gKiBAcGFyYW0gaW5kZXggd2hlcmUgdGhlIHBhcnNpbmcgc2hvdWxkIHJlc3VtZS5cbiAqIEByZXR1cm5zIGluZGV4IHdoZXJlIHRoZSBuZXh0IGludm9jYXRpb24gb2YgYHBhcnNlQ2xhc3NOYW1lTmV4dGAgc2hvdWxkIHJlc3VtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ2xhc3NOYW1lTmV4dCh0ZXh0OiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBjb25zdCBlbmQgPSBwYXJzZXJTdGF0ZS50ZXh0RW5kO1xuICBpZiAoZW5kID09PSBpbmRleCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICBpbmRleCA9IHBhcnNlclN0YXRlLmtleUVuZCA9IGNvbnN1bWVDbGFzc1Rva2VuKHRleHQsIHBhcnNlclN0YXRlLmtleSA9IGluZGV4LCBlbmQpO1xuICByZXR1cm4gY29uc3VtZVdoaXRlc3BhY2UodGV4dCwgaW5kZXgsIGVuZCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZXMgYGNzc1RleHRgIHN0cmluZyBmb3IgcGFyc2luZyBhbmQgcGFyc2VzIHRoZSBmaXJzdCBrZXkvdmFsdWVzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBpbiB0aGlzIGZvcm1hdDpcbiAqIGBgYFxuICogZm9yIChsZXQgaSA9IHBhcnNlU3R5bGUodGV4dCk7IGkgPj0gMDsgaSA9IHBhcnNlU3R5bGVOZXh0KHRleHQsIGkpKSkge1xuICogICBjb25zdCBrZXkgPSBnZXRMYXN0UGFyc2VkS2V5KCk7XG4gKiAgIGNvbnN0IHZhbHVlID0gZ2V0TGFzdFBhcnNlZFZhbHVlKCk7XG4gKiAgIC4uLlxuICogfVxuICogYGBgXG4gKiBAcGFyYW0gdGV4dCBgY3NzVGV4dGAgdG8gcGFyc2VcbiAqIEByZXR1cm5zIGluZGV4IHdoZXJlIHRoZSBuZXh0IGludm9jYXRpb24gb2YgYHBhcnNlU3R5bGVOZXh0YCBzaG91bGQgcmVzdW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdHlsZSh0ZXh0OiBzdHJpbmcpOiBudW1iZXIge1xuICByZXNldFBhcnNlclN0YXRlKHRleHQpO1xuICByZXR1cm4gcGFyc2VTdHlsZU5leHQodGV4dCwgY29uc3VtZVdoaXRlc3BhY2UodGV4dCwgMCwgcGFyc2VyU3RhdGUudGV4dEVuZCkpO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbmV4dCBgY3NzVGV4dGAga2V5L3ZhbHVlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gdGhpcyBmb3JtYXQ6XG4gKiBgYGBcbiAqIGZvciAobGV0IGkgPSBwYXJzZVN0eWxlKHRleHQpOyBpID49IDA7IGkgPSBwYXJzZVN0eWxlTmV4dCh0ZXh0LCBpKSkpIHtcbiAqICAgY29uc3Qga2V5ID0gZ2V0TGFzdFBhcnNlZEtleSgpO1xuICogICBjb25zdCB2YWx1ZSA9IGdldExhc3RQYXJzZWRWYWx1ZSgpO1xuICogICAuLi5cbiAqIH1cbiAqXG4gKiBAcGFyYW0gdGV4dCBgY3NzVGV4dGAgdG8gcGFyc2VcbiAqIEBwYXJhbSBpbmRleCB3aGVyZSB0aGUgcGFyc2luZyBzaG91bGQgcmVzdW1lLlxuICogQHJldHVybnMgaW5kZXggd2hlcmUgdGhlIG5leHQgaW52b2NhdGlvbiBvZiBgcGFyc2VTdHlsZU5leHRgIHNob3VsZCByZXN1bWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0eWxlTmV4dCh0ZXh0OiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGVuZCA9IHBhcnNlclN0YXRlLnRleHRFbmQ7XG4gIGxldCBpbmRleCA9IHBhcnNlclN0YXRlLmtleSA9IGNvbnN1bWVXaGl0ZXNwYWNlKHRleHQsIHN0YXJ0SW5kZXgsIGVuZCk7XG4gIGlmIChlbmQgPT09IGluZGV4KSB7XG4gICAgLy8gd2UgcmVhY2hlZCBhbiBlbmQgc28ganVzdCBxdWl0XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGluZGV4ID0gcGFyc2VyU3RhdGUua2V5RW5kID0gY29uc3VtZVN0eWxlS2V5KHRleHQsIGluZGV4LCBlbmQpO1xuICBpbmRleCA9IGNvbnN1bWVTZXBhcmF0b3IodGV4dCwgaW5kZXgsIGVuZCwgQ2hhckNvZGUuQ09MT04pO1xuICBpbmRleCA9IHBhcnNlclN0YXRlLnZhbHVlID0gY29uc3VtZVdoaXRlc3BhY2UodGV4dCwgaW5kZXgsIGVuZCk7XG4gIGluZGV4ID0gcGFyc2VyU3RhdGUudmFsdWVFbmQgPSBjb25zdW1lU3R5bGVWYWx1ZSh0ZXh0LCBpbmRleCwgZW5kKTtcbiAgcmV0dXJuIGNvbnN1bWVTZXBhcmF0b3IodGV4dCwgaW5kZXgsIGVuZCwgQ2hhckNvZGUuU0VNSV9DT0xPTik7XG59XG5cbi8qKlxuICogUmVzZXQgdGhlIGdsb2JhbCBzdGF0ZSBvZiB0aGUgc3R5bGluZyBwYXJzZXIuXG4gKiBAcGFyYW0gdGV4dCBUaGUgc3R5bGluZyB0ZXh0IHRvIHBhcnNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRQYXJzZXJTdGF0ZSh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgcGFyc2VyU3RhdGUua2V5ID0gMDtcbiAgcGFyc2VyU3RhdGUua2V5RW5kID0gMDtcbiAgcGFyc2VyU3RhdGUudmFsdWUgPSAwO1xuICBwYXJzZXJTdGF0ZS52YWx1ZUVuZCA9IDA7XG4gIHBhcnNlclN0YXRlLnRleHRFbmQgPSB0ZXh0Lmxlbmd0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGluZGV4IG9mIG5leHQgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICpcbiAqIEBwYXJhbSB0ZXh0IFRleHQgdG8gc2NhblxuICogQHBhcmFtIHN0YXJ0SW5kZXggU3RhcnRpbmcgaW5kZXggb2YgY2hhcmFjdGVyIHdoZXJlIHRoZSBzY2FuIHNob3VsZCBzdGFydC5cbiAqIEBwYXJhbSBlbmRJbmRleCBFbmRpbmcgaW5kZXggb2YgY2hhcmFjdGVyIHdoZXJlIHRoZSBzY2FuIHNob3VsZCBlbmQuXG4gKiBAcmV0dXJucyBJbmRleCBvZiBuZXh0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciAoTWF5IGJlIHRoZSBzYW1lIGFzIGBzdGFydGAgaWYgbm8gd2hpdGVzcGFjZSBhdFxuICogICAgICAgICAgdGhhdCBsb2NhdGlvbi4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdW1lV2hpdGVzcGFjZSh0ZXh0OiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChzdGFydEluZGV4IDwgZW5kSW5kZXggJiYgdGV4dC5jaGFyQ29kZUF0KHN0YXJ0SW5kZXgpIDw9IENoYXJDb2RlLlNQQUNFKSB7XG4gICAgc3RhcnRJbmRleCsrO1xuICB9XG4gIHJldHVybiBzdGFydEluZGV4O1xufVxuXG4vKipcbiAqIFJldHVybnMgaW5kZXggb2YgbGFzdCBjaGFyIGluIGNsYXNzIHRva2VuLlxuICpcbiAqIEBwYXJhbSB0ZXh0IFRleHQgdG8gc2NhblxuICogQHBhcmFtIHN0YXJ0SW5kZXggU3RhcnRpbmcgaW5kZXggb2YgY2hhcmFjdGVyIHdoZXJlIHRoZSBzY2FuIHNob3VsZCBzdGFydC5cbiAqIEBwYXJhbSBlbmRJbmRleCBFbmRpbmcgaW5kZXggb2YgY2hhcmFjdGVyIHdoZXJlIHRoZSBzY2FuIHNob3VsZCBlbmQuXG4gKiBAcmV0dXJucyBJbmRleCBhZnRlciBsYXN0IGNoYXIgaW4gY2xhc3MgdG9rZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdW1lQ2xhc3NUb2tlbih0ZXh0OiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIHdoaWxlIChzdGFydEluZGV4IDwgZW5kSW5kZXggJiYgdGV4dC5jaGFyQ29kZUF0KHN0YXJ0SW5kZXgpID4gQ2hhckNvZGUuU1BBQ0UpIHtcbiAgICBzdGFydEluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHN0YXJ0SW5kZXg7XG59XG5cbi8qKlxuICogQ29uc3VtZXMgYWxsIG9mIHRoZSBjaGFyYWN0ZXJzIGJlbG9uZ2luZyB0byBzdHlsZSBrZXkgYW5kIHRva2VuLlxuICpcbiAqIEBwYXJhbSB0ZXh0IFRleHQgdG8gc2NhblxuICogQHBhcmFtIHN0YXJ0SW5kZXggU3RhcnRpbmcgaW5kZXggb2YgY2hhcmFjdGVyIHdoZXJlIHRoZSBzY2FuIHNob3VsZCBzdGFydC5cbiAqIEBwYXJhbSBlbmRJbmRleCBFbmRpbmcgaW5kZXggb2YgY2hhcmFjdGVyIHdoZXJlIHRoZSBzY2FuIHNob3VsZCBlbmQuXG4gKiBAcmV0dXJucyBJbmRleCBhZnRlciBsYXN0IHN0eWxlIGtleSBjaGFyYWN0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdW1lU3R5bGVLZXkodGV4dDogc3RyaW5nLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICBsZXQgY2g6IG51bWJlcjtcbiAgd2hpbGUgKHN0YXJ0SW5kZXggPCBlbmRJbmRleCAmJlxuICAgICAgICAgKChjaCA9IHRleHQuY2hhckNvZGVBdChzdGFydEluZGV4KSkgPT09IENoYXJDb2RlLkRBU0ggfHwgY2ggPT09IENoYXJDb2RlLlVOREVSU0NPUkUgfHxcbiAgICAgICAgICAoKGNoICYgQ2hhckNvZGUuVVBQRVJfQ0FTRSkgPj0gQ2hhckNvZGUuQSAmJiAoY2ggJiBDaGFyQ29kZS5VUFBFUl9DQVNFKSA8PSBDaGFyQ29kZS5aKSkpIHtcbiAgICBzdGFydEluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHN0YXJ0SW5kZXg7XG59XG5cbi8qKlxuICogQ29uc3VtZXMgYWxsIHdoaXRlc3BhY2UgYW5kIHRoZSBzZXBhcmF0b3IgYDpgIGFmdGVyIHRoZSBzdHlsZSBrZXkuXG4gKlxuICogQHBhcmFtIHRleHQgVGV4dCB0byBzY2FuXG4gKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydGluZyBpbmRleCBvZiBjaGFyYWN0ZXIgd2hlcmUgdGhlIHNjYW4gc2hvdWxkIHN0YXJ0LlxuICogQHBhcmFtIGVuZEluZGV4IEVuZGluZyBpbmRleCBvZiBjaGFyYWN0ZXIgd2hlcmUgdGhlIHNjYW4gc2hvdWxkIGVuZC5cbiAqIEByZXR1cm5zIEluZGV4IGFmdGVyIHNlcGFyYXRvciBhbmQgc3Vycm91bmRpbmcgd2hpdGVzcGFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnN1bWVTZXBhcmF0b3IoXG4gICAgdGV4dDogc3RyaW5nLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHNlcGFyYXRvcjogbnVtYmVyKTogbnVtYmVyIHtcbiAgc3RhcnRJbmRleCA9IGNvbnN1bWVXaGl0ZXNwYWNlKHRleHQsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgaWYgKHN0YXJ0SW5kZXggPCBlbmRJbmRleCkge1xuICAgIGlmIChuZ0Rldk1vZGUgJiYgdGV4dC5jaGFyQ29kZUF0KHN0YXJ0SW5kZXgpICE9PSBzZXBhcmF0b3IpIHtcbiAgICAgIG1hbGZvcm1lZFN0eWxlRXJyb3IodGV4dCwgU3RyaW5nLmZyb21DaGFyQ29kZShzZXBhcmF0b3IpLCBzdGFydEluZGV4KTtcbiAgICB9XG4gICAgc3RhcnRJbmRleCsrO1xuICB9XG4gIHJldHVybiBzdGFydEluZGV4O1xufVxuXG5cbi8qKlxuICogQ29uc3VtZXMgc3R5bGUgdmFsdWUgaG9ub3JpbmcgYHVybCgpYCBhbmQgYFwiXCJgIHRleHQuXG4gKlxuICogQHBhcmFtIHRleHQgVGV4dCB0byBzY2FuXG4gKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydGluZyBpbmRleCBvZiBjaGFyYWN0ZXIgd2hlcmUgdGhlIHNjYW4gc2hvdWxkIHN0YXJ0LlxuICogQHBhcmFtIGVuZEluZGV4IEVuZGluZyBpbmRleCBvZiBjaGFyYWN0ZXIgd2hlcmUgdGhlIHNjYW4gc2hvdWxkIGVuZC5cbiAqIEByZXR1cm5zIEluZGV4IGFmdGVyIGxhc3Qgc3R5bGUgdmFsdWUgY2hhcmFjdGVyLlxuKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zdW1lU3R5bGVWYWx1ZSh0ZXh0OiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBjaDEgPSAtMTsgIC8vIDFzdCBwcmV2aW91cyBjaGFyYWN0ZXJcbiAgbGV0IGNoMiA9IC0xOyAgLy8gMm5kIHByZXZpb3VzIGNoYXJhY3RlclxuICBsZXQgY2gzID0gLTE7ICAvLyAzcmQgcHJldmlvdXMgY2hhcmFjdGVyXG4gIGxldCBpID0gc3RhcnRJbmRleDtcbiAgbGV0IGxhc3RDaEluZGV4ID0gaTtcbiAgd2hpbGUgKGkgPCBlbmRJbmRleCkge1xuICAgIGNvbnN0IGNoOiBudW1iZXIgPSB0ZXh0LmNoYXJDb2RlQXQoaSsrKTtcbiAgICBpZiAoY2ggPT09IENoYXJDb2RlLlNFTUlfQ09MT04pIHtcbiAgICAgIHJldHVybiBsYXN0Q2hJbmRleDtcbiAgICB9IGVsc2UgaWYgKGNoID09PSBDaGFyQ29kZS5ET1VCTEVfUVVPVEUgfHwgY2ggPT09IENoYXJDb2RlLlNJTkdMRV9RVU9URSkge1xuICAgICAgbGFzdENoSW5kZXggPSBpID0gY29uc3VtZVF1b3RlZFRleHQodGV4dCwgY2gsIGksIGVuZEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgICBzdGFydEluZGV4ID09PVxuICAgICAgICAgICAgaSAtIDQgJiYgIC8vIFdlIGhhdmUgc2VlbiBvbmx5IDQgY2hhcmFjdGVycyBzbyBmYXIgXCJVUkwoXCIgKElnbm9yZSBcImZvb19VUkwoKVwiKVxuICAgICAgICBjaDMgPT09IENoYXJDb2RlLlUgJiZcbiAgICAgICAgY2gyID09PSBDaGFyQ29kZS5SICYmIGNoMSA9PT0gQ2hhckNvZGUuTCAmJiBjaCA9PT0gQ2hhckNvZGUuT1BFTl9QQVJFTikge1xuICAgICAgbGFzdENoSW5kZXggPSBpID0gY29uc3VtZVF1b3RlZFRleHQodGV4dCwgQ2hhckNvZGUuQ0xPU0VfUEFSRU4sIGksIGVuZEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGNoID4gQ2hhckNvZGUuU1BBQ0UpIHtcbiAgICAgIC8vIGlmIHdlIGhhdmUgYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgdGhlbiBjYXB0dXJlIGl0cyBsb2NhdGlvblxuICAgICAgbGFzdENoSW5kZXggPSBpO1xuICAgIH1cbiAgICBjaDMgPSBjaDI7XG4gICAgY2gyID0gY2gxO1xuICAgIGNoMSA9IGNoICYgQ2hhckNvZGUuVVBQRVJfQ0FTRTtcbiAgfVxuICByZXR1cm4gbGFzdENoSW5kZXg7XG59XG5cbi8qKlxuICogQ29uc3VtZXMgYWxsIG9mIHRoZSBxdW90ZWQgY2hhcmFjdGVycy5cbiAqXG4gKiBAcGFyYW0gdGV4dCBUZXh0IHRvIHNjYW5cbiAqIEBwYXJhbSBxdW90ZUNoYXJDb2RlIENoYXJDb2RlIG9mIGVpdGhlciBgXCJgIG9yIGAnYCBxdW90ZSBvciBgKWAgZm9yIGB1cmwoLi4uKWAuXG4gKiBAcGFyYW0gc3RhcnRJbmRleCBTdGFydGluZyBpbmRleCBvZiBjaGFyYWN0ZXIgd2hlcmUgdGhlIHNjYW4gc2hvdWxkIHN0YXJ0LlxuICogQHBhcmFtIGVuZEluZGV4IEVuZGluZyBpbmRleCBvZiBjaGFyYWN0ZXIgd2hlcmUgdGhlIHNjYW4gc2hvdWxkIGVuZC5cbiAqIEByZXR1cm5zIEluZGV4IGFmdGVyIHF1b3RlZCBjaGFyYWN0ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29uc3VtZVF1b3RlZFRleHQoXG4gICAgdGV4dDogc3RyaW5nLCBxdW90ZUNoYXJDb2RlOiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIGxldCBjaDEgPSAtMTsgIC8vIDFzdCBwcmV2aW91cyBjaGFyYWN0ZXJcbiAgbGV0IGluZGV4ID0gc3RhcnRJbmRleDtcbiAgd2hpbGUgKGluZGV4IDwgZW5kSW5kZXgpIHtcbiAgICBjb25zdCBjaCA9IHRleHQuY2hhckNvZGVBdChpbmRleCsrKTtcbiAgICBpZiAoY2ggPT0gcXVvdGVDaGFyQ29kZSAmJiBjaDEgIT09IENoYXJDb2RlLkJBQ0tfU0xBU0gpIHtcbiAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG4gICAgaWYgKGNoID09IENoYXJDb2RlLkJBQ0tfU0xBU0ggJiYgY2gxID09PSBDaGFyQ29kZS5CQUNLX1NMQVNIKSB7XG4gICAgICAvLyB0d28gYmFjayBzbGFzaGVzIGNhbmNlbCBlYWNoIG90aGVyIG91dC4gRm9yIGV4YW1wbGUgYFwiXFxcXFwiYCBzaG91bGQgcHJvcGVybHkgZW5kIHRoZVxuICAgICAgLy8gcXVvdGF0aW9uLiAoSXQgc2hvdWxkIG5vdCBhc3N1bWUgdGhhdCB0aGUgbGFzdCBgXCJgIGlzIGVzY2FwZWQuKVxuICAgICAgY2gxID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY2gxID0gY2g7XG4gICAgfVxuICB9XG4gIHRocm93IG5nRGV2TW9kZSA/IG1hbGZvcm1lZFN0eWxlRXJyb3IodGV4dCwgU3RyaW5nLmZyb21DaGFyQ29kZShxdW90ZUNoYXJDb2RlKSwgZW5kSW5kZXgpIDpcbiAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCk7XG59XG5cbmZ1bmN0aW9uIG1hbGZvcm1lZFN0eWxlRXJyb3IodGV4dDogc3RyaW5nLCBleHBlY3Rpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IG5ldmVyIHtcbiAgbmdEZXZNb2RlICYmIGFzc2VydEVxdWFsKHR5cGVvZiB0ZXh0ID09PSAnc3RyaW5nJywgdHJ1ZSwgJ1N0cmluZyBleHBlY3RlZCBoZXJlJyk7XG4gIHRocm93IHRocm93RXJyb3IoXG4gICAgICBgTWFsZm9ybWVkIHN0eWxlIGF0IGxvY2F0aW9uICR7aW5kZXh9IGluIHN0cmluZyAnYCArIHRleHQuc3Vic3RyaW5nKDAsIGluZGV4KSArICdbPj4nICtcbiAgICAgIHRleHQuc3Vic3RyaW5nKGluZGV4LCBpbmRleCArIDEpICsgJzw8XScgKyB0ZXh0LnN1YnN0cihpbmRleCArIDEpICtcbiAgICAgIGAnLiBFeHBlY3RpbmcgJyR7ZXhwZWN0aW5nfScuYCk7XG59XG4iXX0=
@@ -6,5 +6,5 @@
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
8
  /** A special value which designates that a value has not changed. */
9
- export var NO_CHANGE = {};
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBT0gscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxJQUFNLFNBQVMsR0FBRyxFQUFlLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgTk9fQ0hBTkdFIHtcbiAgLy8gVGhpcyBpcyBhIGJyYW5kIHRoYXQgZW5zdXJlcyB0aGF0IHRoaXMgdHlwZSBjYW4gbmV2ZXIgbWF0Y2ggYW55dGhpbmcgZWxzZVxuICBicmFuZDogJ05PX0NIQU5HRSc7XG59XG5cbi8qKiBBIHNwZWNpYWwgdmFsdWUgd2hpY2ggZGVzaWduYXRlcyB0aGF0IGEgdmFsdWUgaGFzIG5vdCBjaGFuZ2VkLiAqL1xuZXhwb3J0IGNvbnN0IE5PX0NIQU5HRSA9IHt9IGFzIE5PX0NIQU5HRTtcbiJdfQ==
9
+ export var NO_CHANGE = (typeof ngDevMode === 'undefined' || ngDevMode) ? { __brand__: 'NO_CHANGE' } : {};
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW5zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy90b2tlbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBT0gscUVBQXFFO0FBQ3JFLE1BQU0sQ0FBQyxJQUFNLFNBQVMsR0FDbEIsQ0FBQyxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBQyxDQUFDLENBQUMsQ0FBRSxFQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIE5PX0NIQU5HRSB7XG4gIC8vIFRoaXMgaXMgYSBicmFuZCB0aGF0IGVuc3VyZXMgdGhhdCB0aGlzIHR5cGUgY2FuIG5ldmVyIG1hdGNoIGFueXRoaW5nIGVsc2VcbiAgX19icmFuZF9fOiAnTk9fQ0hBTkdFJztcbn1cblxuLyoqIEEgc3BlY2lhbCB2YWx1ZSB3aGljaCBkZXNpZ25hdGVzIHRoYXQgYSB2YWx1ZSBoYXMgbm90IGNoYW5nZWQuICovXG5leHBvcnQgY29uc3QgTk9fQ0hBTkdFOiBOT19DSEFOR0UgPVxuICAgICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpID8ge19fYnJhbmRfXzogJ05PX0NIQU5HRSd9IDogKHt9IGFzIE5PX0NIQU5HRSk7XG4iXX0=
@@ -88,6 +88,121 @@ export function isAnimationProp(name) {
88
88
  // Perf note: accessing charCodeAt to check for the first character of a string is faster as
89
89
  // compared to accessing a character at index 0 (ex. name[0]). The main reason for this is that
90
90
  // charCodeAt doesn't allocate memory to return a substring.
91
- return name.charCodeAt(0) === 64; // @
91
+ return name.charCodeAt(0) === 64 /* AT_SIGN */;
92
92
  }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cnNfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL3V0aWwvYXR0cnNfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBU0EsT0FBTyxFQUEyQyxvQkFBb0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBR3RHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBbUIsRUFBRSxNQUFnQixFQUFFLEtBQWtCO0lBQ3ZGLElBQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDdkIsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLHdFQUF3RTtZQUN4RSwrQ0FBK0M7WUFDL0MsSUFBSSxLQUFLLHlCQUFpQyxFQUFFO2dCQUMxQyxNQUFNO2FBQ1A7WUFFRCxtREFBbUQ7WUFDbkQsbUNBQW1DO1lBQ25DLENBQUMsRUFBRSxDQUFDO1lBRUosSUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUM7WUFDMUMsSUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUM7WUFDdEMsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUM7WUFDckMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxDQUFDO2dCQUNILFFBQWdDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQ3pGLE1BQU0sQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztTQUM1RDthQUFNO1lBQ0wsc0JBQXNCO1lBQ3RCLElBQU0sUUFBUSxHQUFHLEtBQWUsQ0FBQztZQUNqQyxJQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzQixzQkFBc0I7WUFDdEIsU0FBUyxJQUFJLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlDLElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLE1BQU0sRUFBRTtvQkFDVCxRQUFnQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2lCQUMxRTthQUNGO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxDQUFDO29CQUNILFFBQWdDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBaUIsQ0FBQyxDQUFDLENBQUM7b0JBQ3JGLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQWlCLENBQUMsQ0FBQzthQUN0RDtZQUNELENBQUMsRUFBRSxDQUFDO1NBQ0w7S0FDRjtJQUVELDhFQUE4RTtJQUM5RSwrRUFBK0U7SUFDL0UsaUZBQWlGO0lBQ2pGLGlCQUFpQjtJQUNqQixPQUFPLENBQUMsQ0FBQztBQUNYLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUseUJBQXlCLENBQUMsTUFBOEM7SUFDdEYsT0FBTyxNQUFNLHFCQUE2QixJQUFJLE1BQU0scUJBQTZCO1FBQzdFLE1BQU0saUJBQXlCLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlLENBQUMsSUFBWTtJQUMxQyw0RkFBNEY7SUFDNUYsK0ZBQStGO0lBQy9GLDREQUE0RDtJQUM1RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUUsSUFBSTtBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtBdHRyaWJ1dGVNYXJrZXIsIFRBdHRyaWJ1dGVzfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHtDc3NTZWxlY3Rvcn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wcm9qZWN0aW9uJztcbmltcG9ydCB7UHJvY2VkdXJhbFJlbmRlcmVyMywgUkVsZW1lbnQsIFJlbmRlcmVyMywgaXNQcm9jZWR1cmFsUmVuZGVyZXJ9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVuZGVyZXInO1xuXG5cbi8qKlxuICogQXNzaWducyBhbGwgYXR0cmlidXRlIHZhbHVlcyB0byB0aGUgcHJvdmlkZWQgZWxlbWVudCB2aWEgdGhlIGluZmVycmVkIHJlbmRlcmVyLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyB0d28gZm9ybXMgb2YgYXR0cmlidXRlIGVudHJpZXM6XG4gKlxuICogZGVmYXVsdDogKGtleSwgdmFsdWUpOlxuICogIGF0dHJzID0gW2tleTEsIHZhbHVlMSwga2V5MiwgdmFsdWUyXVxuICpcbiAqIG5hbWVzcGFjZWQ6IChOQU1FU1BBQ0VfTUFSS0VSLCB1cmksIG5hbWUsIHZhbHVlKVxuICogIGF0dHJzID0gW05BTUVTUEFDRV9NQVJLRVIsIHVyaSwgbmFtZSwgdmFsdWUsIE5BTUVTUEFDRV9NQVJLRVIsIHVyaSwgbmFtZSwgdmFsdWVdXG4gKlxuICogVGhlIGBhdHRyc2AgYXJyYXkgY2FuIGNvbnRhaW4gYSBtaXggb2YgYm90aCB0aGUgZGVmYXVsdCBhbmQgbmFtZXNwYWNlZCBlbnRyaWVzLlxuICogVGhlIFwiZGVmYXVsdFwiIHZhbHVlcyBhcmUgc2V0IHdpdGhvdXQgYSBtYXJrZXIsIGJ1dCBpZiB0aGUgZnVuY3Rpb24gY29tZXMgYWNyb3NzXG4gKiBhIG1hcmtlciB2YWx1ZSB0aGVuIGl0IHdpbGwgYXR0ZW1wdCB0byBzZXQgYSBuYW1lc3BhY2VkIHZhbHVlLiBJZiB0aGUgbWFya2VyIGlzXG4gKiBub3Qgb2YgYSBuYW1lc3BhY2VkIHZhbHVlIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgcXVpdCBhbmQgcmV0dXJuIHRoZSBpbmRleCB2YWx1ZVxuICogd2hlcmUgaXQgc3RvcHBlZCBkdXJpbmcgdGhlIGl0ZXJhdGlvbiBvZiB0aGUgYXR0cnMgYXJyYXkuXG4gKlxuICogU2VlIFtBdHRyaWJ1dGVNYXJrZXJdIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGUgbmFtZXNwYWNlIG1hcmtlciB2YWx1ZSBpcy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBpbnN0cnVjdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGFzc2lnbmluZyBzdHlsZSBhbmQgY2xhc3MgdmFsdWVzIHRvXG4gKiBhbiBlbGVtZW50LiBTZWUgYGVsZW1lbnRTdGFydGAgYW5kIGBlbGVtZW50SG9zdEF0dHJzYCB0byBsZWFybiBob3cgc3R5bGluZyB2YWx1ZXNcbiAqIGFyZSBhcHBsaWVkIHRvIGFuIGVsZW1lbnQuXG4gKiBAcGFyYW0gcmVuZGVyZXIgVGhlIHJlbmRlcmVyIHRvIGJlIHVzZWRcbiAqIEBwYXJhbSBuYXRpdmUgVGhlIGVsZW1lbnQgdGhhdCB0aGUgYXR0cmlidXRlcyB3aWxsIGJlIGFzc2lnbmVkIHRvXG4gKiBAcGFyYW0gYXR0cnMgVGhlIGF0dHJpYnV0ZSBhcnJheSBvZiB2YWx1ZXMgdGhhdCB3aWxsIGJlIGFzc2lnbmVkIHRvIHRoZSBlbGVtZW50XG4gKiBAcmV0dXJucyB0aGUgaW5kZXggdmFsdWUgdGhhdCB3YXMgbGFzdCBhY2Nlc3NlZCBpbiB0aGUgYXR0cmlidXRlcyBhcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VXBBdHRyaWJ1dGVzKHJlbmRlcmVyOiBSZW5kZXJlcjMsIG5hdGl2ZTogUkVsZW1lbnQsIGF0dHJzOiBUQXR0cmlidXRlcyk6IG51bWJlciB7XG4gIGNvbnN0IGlzUHJvYyA9IGlzUHJvY2VkdXJhbFJlbmRlcmVyKHJlbmRlcmVyKTtcblxuICBsZXQgaSA9IDA7XG4gIHdoaWxlIChpIDwgYXR0cnMubGVuZ3RoKSB7XG4gICAgY29uc3QgdmFsdWUgPSBhdHRyc1tpXTtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gb25seSBuYW1lc3BhY2VzIGFyZSBzdXBwb3J0ZWQuIE90aGVyIHZhbHVlIHR5cGVzIChzdWNoIGFzIHN0eWxlL2NsYXNzXG4gICAgICAvLyBlbnRyaWVzKSBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGZ1bmN0aW9uLlxuICAgICAgaWYgKHZhbHVlICE9PSBBdHRyaWJ1dGVNYXJrZXIuTmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyB3ZSBqdXN0IGxhbmRlZCBvbiB0aGUgbWFya2VyIHZhbHVlIC4uLiB0aGVyZWZvcmVcbiAgICAgIC8vIHdlIHNob3VsZCBza2lwIHRvIHRoZSBuZXh0IGVudHJ5XG4gICAgICBpKys7XG5cbiAgICAgIGNvbnN0IG5hbWVzcGFjZVVSSSA9IGF0dHJzW2krK10gYXMgc3RyaW5nO1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSBhdHRyc1tpKytdIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGF0dHJWYWwgPSBhdHRyc1tpKytdIGFzIHN0cmluZztcbiAgICAgIG5nRGV2TW9kZSAmJiBuZ0Rldk1vZGUucmVuZGVyZXJTZXRBdHRyaWJ1dGUrKztcbiAgICAgIGlzUHJvYyA/XG4gICAgICAgICAgKHJlbmRlcmVyIGFzIFByb2NlZHVyYWxSZW5kZXJlcjMpLnNldEF0dHJpYnV0ZShuYXRpdmUsIGF0dHJOYW1lLCBhdHRyVmFsLCBuYW1lc3BhY2VVUkkpIDpcbiAgICAgICAgICBuYXRpdmUuc2V0QXR0cmlidXRlTlMobmFtZXNwYWNlVVJJLCBhdHRyTmFtZSwgYXR0clZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGF0dHJOYW1lIGlzIHN0cmluZztcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gdmFsdWUgYXMgc3RyaW5nO1xuICAgICAgY29uc3QgYXR0clZhbCA9IGF0dHJzWysraV07XG4gICAgICAvLyBTdGFuZGFyZCBhdHRyaWJ1dGVzXG4gICAgICBuZ0Rldk1vZGUgJiYgbmdEZXZNb2RlLnJlbmRlcmVyU2V0QXR0cmlidXRlKys7XG4gICAgICBpZiAoaXNBbmltYXRpb25Qcm9wKGF0dHJOYW1lKSkge1xuICAgICAgICBpZiAoaXNQcm9jKSB7XG4gICAgICAgICAgKHJlbmRlcmVyIGFzIFByb2NlZHVyYWxSZW5kZXJlcjMpLnNldFByb3BlcnR5KG5hdGl2ZSwgYXR0ck5hbWUsIGF0dHJWYWwpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc1Byb2MgP1xuICAgICAgICAgICAgKHJlbmRlcmVyIGFzIFByb2NlZHVyYWxSZW5kZXJlcjMpLnNldEF0dHJpYnV0ZShuYXRpdmUsIGF0dHJOYW1lLCBhdHRyVmFsIGFzIHN0cmluZykgOlxuICAgICAgICAgICAgbmF0aXZlLnNldEF0dHJpYnV0ZShhdHRyTmFtZSwgYXR0clZhbCBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaSsrO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFub3RoZXIgcGllY2Ugb2YgY29kZSBtYXkgaXRlcmF0ZSBvdmVyIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXJyYXkuIFRoZXJlZm9yZVxuICAvLyBpdCBtYXkgYmUgaGVscGZ1bCB0byByZXR1cm4gdGhlIGV4YWN0IHNwb3Qgd2hlcmUgdGhlIGF0dHJpYnV0ZXMgYXJyYXkgZXhpdGVkXG4gIC8vIHdoZXRoZXIgYnkgcnVubmluZyBpbnRvIGFuIHVuc3VwcG9ydGVkIG1hcmtlciBvciBpZiBhbGwgdGhlIHN0YXRpYyB2YWx1ZXMgd2VyZVxuICAvLyBpdGVyYXRlZCBvdmVyLlxuICByZXR1cm4gaTtcbn1cblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdGhlIGdpdmVuIHZhbHVlIGlzIGEgbWFya2VyIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIGZvbGxvd2luZ1xuICogYXR0cmlidXRlIHZhbHVlcyBpbiBhIGBUQXR0cmlidXRlc2AgYXJyYXkgYXJlIG9ubHkgdGhlIG5hbWVzIG9mIGF0dHJpYnV0ZXMsXG4gKiBhbmQgbm90IG5hbWUtdmFsdWUgcGFpcnMuXG4gKiBAcGFyYW0gbWFya2VyIFRoZSBhdHRyaWJ1dGUgbWFya2VyIHRvIHRlc3QuXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBtYXJrZXIgaXMgYSBcIm5hbWUtb25seVwiIG1hcmtlciAoZS5nLiBgQmluZGluZ3NgLCBgVGVtcGxhdGVgIG9yIGBJMThuYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc05hbWVPbmx5QXR0cmlidXRlTWFya2VyKG1hcmtlcjogc3RyaW5nIHwgQXR0cmlidXRlTWFya2VyIHwgQ3NzU2VsZWN0b3IpIHtcbiAgcmV0dXJuIG1hcmtlciA9PT0gQXR0cmlidXRlTWFya2VyLkJpbmRpbmdzIHx8IG1hcmtlciA9PT0gQXR0cmlidXRlTWFya2VyLlRlbXBsYXRlIHx8XG4gICAgICBtYXJrZXIgPT09IEF0dHJpYnV0ZU1hcmtlci5JMThuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBbmltYXRpb25Qcm9wKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAvLyBQZXJmIG5vdGU6IGFjY2Vzc2luZyBjaGFyQ29kZUF0IHRvIGNoZWNrIGZvciB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGEgc3RyaW5nIGlzIGZhc3RlciBhc1xuICAvLyBjb21wYXJlZCB0byBhY2Nlc3NpbmcgYSBjaGFyYWN0ZXIgYXQgaW5kZXggMCAoZXguIG5hbWVbMF0pLiBUaGUgbWFpbiByZWFzb24gZm9yIHRoaXMgaXMgdGhhdFxuICAvLyBjaGFyQ29kZUF0IGRvZXNuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIHJldHVybiBhIHN1YnN0cmluZy5cbiAgcmV0dXJuIG5hbWUuY2hhckNvZGVBdCgwKSA9PT0gNjQ7ICAvLyBAXG59XG4iXX0=
93
+ /**
94
+ * Merges `src` `TAttributes` into `dst` `TAttributes` removing any duplicates in the process.
95
+ *
96
+ * This merge function keeps the order of attrs same.
97
+ *
98
+ * @param dst Location of where the merged `TAttributes` should end up.
99
+ * @param src `TAttributes` which should be appended to `dst`
100
+ */
101
+ export function mergeHostAttrs(dst, src) {
102
+ if (src === null || src.length === 0) {
103
+ // do nothing
104
+ }
105
+ else if (dst === null || dst.length === 0) {
106
+ // We have source, but dst is empty, just make a copy.
107
+ dst = src.slice();
108
+ }
109
+ else {
110
+ var srcMarker = -1 /* ImplicitAttributes */;
111
+ for (var i = 0; i < src.length; i++) {
112
+ var item = src[i];
113
+ if (typeof item === 'number') {
114
+ srcMarker = item;
115
+ }
116
+ else {
117
+ if (srcMarker === 0 /* NamespaceURI */) {
118
+ // Case where we need to consume `key1`, `key2`, `value` items.
119
+ }
120
+ else if (srcMarker === -1 /* ImplicitAttributes */ ||
121
+ srcMarker === 2 /* Styles */) {
122
+ // Case where we have to consume `key1` and `value` only.
123
+ mergeHostAttribute(dst, srcMarker, item, null, src[++i]);
124
+ }
125
+ else {
126
+ // Case where we have to consume `key1` only.
127
+ mergeHostAttribute(dst, srcMarker, item, null, null);
128
+ }
129
+ }
130
+ }
131
+ }
132
+ return dst;
133
+ }
134
+ /**
135
+ * Append `key`/`value` to existing `TAttributes` taking region marker and duplicates into account.
136
+ *
137
+ * @param dst `TAttributes` to append to.
138
+ * @param marker Region where the `key`/`value` should be added.
139
+ * @param key1 Key to add to `TAttributes`
140
+ * @param key2 Key to add to `TAttributes` (in case of `AttributeMarker.NamespaceURI`)
141
+ * @param value Value to add or to overwrite to `TAttributes` Only used if `marker` is not Class.
142
+ */
143
+ export function mergeHostAttribute(dst, marker, key1, key2, value) {
144
+ var i = 0;
145
+ // Assume that new markers will be inserted at the end.
146
+ var markerInsertPosition = dst.length;
147
+ // scan until correct type.
148
+ if (marker === -1 /* ImplicitAttributes */) {
149
+ markerInsertPosition = -1;
150
+ }
151
+ else {
152
+ while (i < dst.length) {
153
+ var dstValue = dst[i++];
154
+ if (typeof dstValue === 'number') {
155
+ if (dstValue === marker) {
156
+ markerInsertPosition = -1;
157
+ break;
158
+ }
159
+ else if (dstValue > marker) {
160
+ // We need to save this as we want the markers to be inserted in specific order.
161
+ markerInsertPosition = i - 1;
162
+ break;
163
+ }
164
+ }
165
+ }
166
+ }
167
+ // search until you find place of insertion
168
+ while (i < dst.length) {
169
+ var item = dst[i];
170
+ if (typeof item === 'number') {
171
+ // since `i` started as the index after the marker, we did not find it if we are at the next
172
+ // marker
173
+ break;
174
+ }
175
+ else if (item === key1) {
176
+ // We already have same token
177
+ if (key2 === null) {
178
+ if (value !== null) {
179
+ dst[i + 1] = value;
180
+ }
181
+ return;
182
+ }
183
+ else if (key2 === dst[i + 1]) {
184
+ dst[i + 2] = value;
185
+ return;
186
+ }
187
+ }
188
+ // Increment counter.
189
+ i++;
190
+ if (key2 !== null)
191
+ i++;
192
+ if (value !== null)
193
+ i++;
194
+ }
195
+ // insert at location.
196
+ if (markerInsertPosition !== -1) {
197
+ dst.splice(markerInsertPosition, 0, marker);
198
+ i = markerInsertPosition + 1;
199
+ }
200
+ dst.splice(i++, 0, key1);
201
+ if (key2 !== null) {
202
+ dst.splice(i++, 0, key2);
203
+ }
204
+ if (value !== null) {
205
+ dst.splice(i++, 0, value);
206
+ }
207
+ }
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cnNfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL3V0aWwvYXR0cnNfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBVUEsT0FBTyxFQUEyQyxvQkFBb0IsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBSXRHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBbUIsRUFBRSxNQUFnQixFQUFFLEtBQWtCO0lBQ3ZGLElBQU0sTUFBTSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRTlDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLE9BQU8sQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUU7UUFDdkIsSUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzdCLHdFQUF3RTtZQUN4RSwrQ0FBK0M7WUFDL0MsSUFBSSxLQUFLLHlCQUFpQyxFQUFFO2dCQUMxQyxNQUFNO2FBQ1A7WUFFRCxtREFBbUQ7WUFDbkQsbUNBQW1DO1lBQ25DLENBQUMsRUFBRSxDQUFDO1lBRUosSUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUM7WUFDMUMsSUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUM7WUFDdEMsSUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUM7WUFDckMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxDQUFDO2dCQUNILFFBQWdDLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVks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LEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDOUIsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFPLENBQUM7Z0JBQ3JCLE9BQU87YUFDUjtTQUNGO1FBQ0QscUJBQXFCO1FBQ3JCLENBQUMsRUFBRSxDQUFDO1FBQ0osSUFBSSxJQUFJLEtBQUssSUFBSTtZQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksS0FBSyxLQUFLLElBQUk7WUFBRSxDQUFDLEVBQUUsQ0FBQztLQUN6QjtJQUVELHNCQUFzQjtJQUN0QixJQUFJLG9CQUFvQixLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQy9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxDQUFDLENBQUM7S0FDOUI7SUFDRCxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN6QixJQUFJLElBQUksS0FBSyxJQUFJLEVBQUU7UUFDakIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDMUI7SUFDRCxJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7UUFDbEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7S0FDM0I7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtDaGFyQ29kZX0gZnJvbSAnLi4vLi4vdXRpbC9jaGFyX2NvZGUnO1xuaW1wb3J0IHtBdHRyaWJ1dGVNYXJrZXIsIFRBdHRyaWJ1dGVzfSBmcm9tICcuLi9pbnRlcmZhY2VzL25vZGUnO1xuaW1wb3J0IHtDc3NTZWxlY3Rvcn0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wcm9qZWN0aW9uJztcbmltcG9ydCB7UHJvY2VkdXJhbFJlbmRlcmVyMywgUkVsZW1lbnQsIFJlbmRlcmVyMywgaXNQcm9jZWR1cmFsUmVuZGVyZXJ9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVuZGVyZXInO1xuXG5cblxuLyoqXG4gKiBBc3NpZ25zIGFsbCBhdHRyaWJ1dGUgdmFsdWVzIHRvIHRoZSBwcm92aWRlZCBlbGVtZW50IHZpYSB0aGUgaW5mZXJyZWQgcmVuZGVyZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHR3byBmb3JtcyBvZiBhdHRyaWJ1dGUgZW50cmllczpcbiAqXG4gKiBkZWZhdWx0OiAoa2V5LCB2YWx1ZSk6XG4gKiAgYXR0cnMgPSBba2V5MSwgdmFsdWUxLCBrZXkyLCB2YWx1ZTJdXG4gKlxuICogbmFtZXNwYWNlZDogKE5BTUVTUEFDRV9NQVJLRVIsIHVyaSwgbmFtZSwgdmFsdWUpXG4gKiAgYXR0cnMgPSBbTkFNRVNQQUNFX01BUktFUiwgdXJpLCBuYW1lLCB2YWx1ZSwgTkFNRVNQQUNFX01BUktFUiwgdXJpLCBuYW1lLCB2YWx1ZV1cbiAqXG4gKiBUaGUgYGF0dHJzYCBhcnJheSBjYW4gY29udGFpbiBhIG1peCBvZiBib3RoIHRoZSBkZWZhdWx0IGFuZCBuYW1lc3BhY2VkIGVudHJpZXMuXG4gKiBUaGUgXCJkZWZhdWx0XCIgdmFsdWVzIGFyZSBzZXQgd2l0aG91dCBhIG1hcmtlciwgYnV0IGlmIHRoZSBmdW5jdGlvbiBjb21lcyBhY3Jvc3NcbiAqIGEgbWFya2VyIHZhbHVlIHRoZW4gaXQgd2lsbCBhdHRlbXB0IHRvIHNldCBhIG5hbWVzcGFjZWQgdmFsdWUuIElmIHRoZSBtYXJrZXIgaXNcbiAqIG5vdCBvZiBhIG5hbWVzcGFjZWQgdmFsdWUgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBxdWl0IGFuZCByZXR1cm4gdGhlIGluZGV4IHZhbHVlXG4gKiB3aGVyZSBpdCBzdG9wcGVkIGR1cmluZyB0aGUgaXRlcmF0aW9uIG9mIHRoZSBhdHRycyBhcnJheS5cbiAqXG4gKiBTZWUgW0F0dHJpYnV0ZU1hcmtlcl0gdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBuYW1lc3BhY2UgbWFya2VyIHZhbHVlIGlzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGluc3RydWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgYXNzaWduaW5nIHN0eWxlIGFuZCBjbGFzcyB2YWx1ZXMgdG9cbiAqIGFuIGVsZW1lbnQuIFNlZSBgZWxlbWVudFN0YXJ0YCBhbmQgYGVsZW1lbnRIb3N0QXR0cnNgIHRvIGxlYXJuIGhvdyBzdHlsaW5nIHZhbHVlc1xuICogYXJlIGFwcGxpZWQgdG8gYW4gZWxlbWVudC5cbiAqIEBwYXJhbSByZW5kZXJlciBUaGUgcmVuZGVyZXIgdG8gYmUgdXNlZFxuICogQHBhcmFtIG5hdGl2ZSBUaGUgZWxlbWVudCB0aGF0IHRoZSBhdHRyaWJ1dGVzIHdpbGwgYmUgYXNzaWduZWQgdG9cbiAqIEBwYXJhbSBhdHRycyBUaGUgYXR0cmlidXRlIGFycmF5IG9mIHZhbHVlcyB0aGF0IHdpbGwgYmUgYXNzaWduZWQgdG8gdGhlIGVsZW1lbnRcbiAqIEByZXR1cm5zIHRoZSBpbmRleCB2YWx1ZSB0aGF0IHdhcyBsYXN0IGFjY2Vzc2VkIGluIHRoZSBhdHRyaWJ1dGVzIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRVcEF0dHJpYnV0ZXMocmVuZGVyZXI6IFJlbmRlcmVyMywgbmF0aXZlOiBSRWxlbWVudCwgYXR0cnM6IFRBdHRyaWJ1dGVzKTogbnVtYmVyIHtcbiAgY29uc3QgaXNQcm9jID0gaXNQcm9jZWR1cmFsUmVuZGVyZXIocmVuZGVyZXIpO1xuXG4gIGxldCBpID0gMDtcbiAgd2hpbGUgKGkgPCBhdHRycy5sZW5ndGgpIHtcbiAgICBjb25zdCB2YWx1ZSA9IGF0dHJzW2ldO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBvbmx5IG5hbWVzcGFjZXMgYXJlIHN1cHBvcnRlZC4gT3RoZXIgdmFsdWUgdHlwZXMgKHN1Y2ggYXMgc3R5bGUvY2xhc3NcbiAgICAgIC8vIGVudHJpZXMpIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZnVuY3Rpb24uXG4gICAgICBpZiAodmFsdWUgIT09IEF0dHJpYnV0ZU1hcmtlci5OYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIC8vIHdlIGp1c3QgbGFuZGVkIG9uIHRoZSBtYXJrZXIgdmFsdWUgLi4uIHRoZXJlZm9yZVxuICAgICAgLy8gd2Ugc2hvdWxkIHNraXAgdG8gdGhlIG5leHQgZW50cnlcbiAgICAgIGkrKztcblxuICAgICAgY29uc3QgbmFtZXNwYWNlVVJJID0gYXR0cnNbaSsrXSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJzW2krK10gYXMgc3RyaW5nO1xuICAgICAgY29uc3QgYXR0clZhbCA9IGF0dHJzW2krK10gYXMgc3RyaW5nO1xuICAgICAgbmdEZXZNb2RlICYmIG5nRGV2TW9kZS5yZW5kZXJlclNldEF0dHJpYnV0ZSsrO1xuICAgICAgaXNQcm9jID9cbiAgICAgICAgICAocmVuZGVyZXIgYXMgUHJvY2VkdXJhbFJlbmRlcmVyMykuc2V0QXR0cmlidXRlKG5hdGl2ZSwgYXR0ck5hbWUsIGF0dHJWYWwsIG5hbWVzcGFjZVVSSSkgOlxuICAgICAgICAgIG5hdGl2ZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIGF0dHJOYW1lLCBhdHRyVmFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXR0ck5hbWUgaXMgc3RyaW5nO1xuICAgICAgY29uc3QgYXR0ck5hbWUgPSB2YWx1ZSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBhdHRyVmFsID0gYXR0cnNbKytpXTtcbiAgICAgIC8vIFN0YW5kYXJkIGF0dHJpYnV0ZXNcbiAgICAgIG5nRGV2TW9kZSAmJiBuZ0Rldk1vZGUucmVuZGVyZXJTZXRBdHRyaWJ1dGUrKztcbiAgICAgIGlmIChpc0FuaW1hdGlvblByb3AoYXR0ck5hbWUpKSB7XG4gICAgICAgIGlmIChpc1Byb2MpIHtcbiAgICAgICAgICAocmVuZGVyZXIgYXMgUHJvY2VkdXJhbFJlbmRlcmVyMykuc2V0UHJvcGVydHkobmF0aXZlLCBhdHRyTmFtZSwgYXR0clZhbCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzUHJvYyA/XG4gICAgICAgICAgICAocmVuZGVyZXIgYXMgUHJvY2VkdXJhbFJlbmRlcmVyMykuc2V0QXR0cmlidXRlKG5hdGl2ZSwgYXR0ck5hbWUsIGF0dHJWYWwgYXMgc3RyaW5nKSA6XG4gICAgICAgICAgICBuYXRpdmUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsIGFzIHN0cmluZyk7XG4gICAgICB9XG4gICAgICBpKys7XG4gICAgfVxuICB9XG5cbiAgLy8gYW5vdGhlciBwaWVjZSBvZiBjb2RlIG1heSBpdGVyYXRlIG92ZXIgdGhlIHNhbWUgYXR0cmlidXRlcyBhcnJheS4gVGhlcmVmb3JlXG4gIC8vIGl0IG1heSBiZSBoZWxwZnVsIHRvIHJldHVybiB0aGUgZXhhY3Qgc3BvdCB3aGVyZSB0aGUgYXR0cmlidXRlcyBhcnJheSBleGl0ZWRcbiAgLy8gd2hldGhlciBieSBydW5uaW5nIGludG8gYW4gdW5zdXBwb3J0ZWQgbWFya2VyIG9yIGlmIGFsbCB0aGUgc3RhdGljIHZhbHVlcyB3ZXJlXG4gIC8vIGl0ZXJhdGVkIG92ZXIuXG4gIHJldHVybiBpO1xufVxuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBtYXJrZXIgdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgZm9sbG93aW5nXG4gKiBhdHRyaWJ1dGUgdmFsdWVzIGluIGEgYFRBdHRyaWJ1dGVzYCBhcnJheSBhcmUgb25seSB0aGUgbmFtZXMgb2YgYXR0cmlidXRlcyxcbiAqIGFuZCBub3QgbmFtZS12YWx1ZSBwYWlycy5cbiAqIEBwYXJhbSBtYXJrZXIgVGhlIGF0dHJpYnV0ZSBtYXJrZXIgdG8gdGVzdC5cbiAqIEByZXR1cm5zIHRydWUgaWYgdGhlIG1hcmtlciBpcyBhIFwibmFtZS1vbmx5XCIgbWFya2VyIChlLmcuIGBCaW5kaW5nc2AsIGBUZW1wbGF0ZWAgb3IgYEkxOG5gKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmFtZU9ubHlBdHRyaWJ1dGVNYXJrZXIobWFya2VyOiBzdHJpbmcgfCBBdHRyaWJ1dGVNYXJrZXIgfCBDc3NTZWxlY3Rvcikge1xuICByZXR1cm4gbWFya2VyID09PSBBdHRyaWJ1dGVNYXJrZXIuQmluZGluZ3MgfHwgbWFya2VyID09PSBBdHRyaWJ1dGVNYXJrZXIuVGVtcGxhdGUgfHxcbiAgICAgIG1hcmtlciA9PT0gQXR0cmlidXRlTWFya2VyLkkxOG47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0FuaW1hdGlvblByb3AobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFBlcmYgbm90ZTogYWNjZXNzaW5nIGNoYXJDb2RlQXQgdG8gY2hlY2sgZm9yIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgYSBzdHJpbmcgaXMgZmFzdGVyIGFzXG4gIC8vIGNvbXBhcmVkIHRvIGFjY2Vzc2luZyBhIGNoYXJhY3RlciBhdCBpbmRleCAwIChleC4gbmFtZVswXSkuIFRoZSBtYWluIHJlYXNvbiBmb3IgdGhpcyBpcyB0aGF0XG4gIC8vIGNoYXJDb2RlQXQgZG9lc24ndCBhbGxvY2F0ZSBtZW1vcnkgdG8gcmV0dXJuIGEgc3Vic3RyaW5nLlxuICByZXR1cm4gbmFtZS5jaGFyQ29kZUF0KDApID09PSBDaGFyQ29kZS5BVF9TSUdOO1xufVxuXG4vKipcbiAqIE1lcmdlcyBgc3JjYCBgVEF0dHJpYnV0ZXNgIGludG8gYGRzdGAgYFRBdHRyaWJ1dGVzYCByZW1vdmluZyBhbnkgZHVwbGljYXRlcyBpbiB0aGUgcHJvY2Vzcy5cbiAqXG4gKiBUaGlzIG1lcmdlIGZ1bmN0aW9uIGtlZXBzIHRoZSBvcmRlciBvZiBhdHRycyBzYW1lLlxuICpcbiAqIEBwYXJhbSBkc3QgTG9jYXRpb24gb2Ygd2hlcmUgdGhlIG1lcmdlZCBgVEF0dHJpYnV0ZXNgIHNob3VsZCBlbmQgdXAuXG4gKiBAcGFyYW0gc3JjIGBUQXR0cmlidXRlc2Agd2hpY2ggc2hvdWxkIGJlIGFwcGVuZGVkIHRvIGBkc3RgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUhvc3RBdHRycyhkc3Q6IFRBdHRyaWJ1dGVzIHwgbnVsbCwgc3JjOiBUQXR0cmlidXRlcyB8IG51bGwpOiBUQXR0cmlidXRlc3xudWxsIHtcbiAgaWYgKHNyYyA9PT0gbnVsbCB8fCBzcmMubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9IGVsc2UgaWYgKGRzdCA9PT0gbnVsbCB8fCBkc3QubGVuZ3RoID09PSAwKSB7XG4gICAgLy8gV2UgaGF2ZSBzb3VyY2UsIGJ1dCBkc3QgaXMgZW1wdHksIGp1c3QgbWFrZSBhIGNvcHkuXG4gICAgZHN0ID0gc3JjLnNsaWNlKCk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IHNyY01hcmtlcjogQXR0cmlidXRlTWFya2VyID0gQXR0cmlidXRlTWFya2VyLkltcGxpY2l0QXR0cmlidXRlcztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgaXRlbSA9IHNyY1tpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc3JjTWFya2VyID0gaXRlbTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzcmNNYXJrZXIgPT09IEF0dHJpYnV0ZU1hcmtlci5OYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAvLyBDYXNlIHdoZXJlIHdlIG5lZWQgdG8gY29uc3VtZSBga2V5MWAsIGBrZXkyYCwgYHZhbHVlYCBpdGVtcy5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHNyY01hcmtlciA9PT0gQXR0cmlidXRlTWFya2VyLkltcGxpY2l0QXR0cmlidXRlcyB8fFxuICAgICAgICAgICAgc3JjTWFya2VyID09PSBBdHRyaWJ1dGVNYXJrZXIuU3R5bGVzKSB7XG4gICAgICAgICAgLy8gQ2FzZSB3aGVyZSB3ZSBoYXZlIHRvIGNvbnN1bWUgYGtleTFgIGFuZCBgdmFsdWVgIG9ubHkuXG4gICAgICAgICAgbWVyZ2VIb3N0QXR0cmlidXRlKGRzdCwgc3JjTWFya2VyLCBpdGVtIGFzIHN0cmluZywgbnVsbCwgc3JjWysraV0gYXMgc3RyaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDYXNlIHdoZXJlIHdlIGhhdmUgdG8gY29uc3VtZSBga2V5MWAgb25seS5cbiAgICAgICAgICBtZXJnZUhvc3RBdHRyaWJ1dGUoZHN0LCBzcmNNYXJrZXIsIGl0ZW0gYXMgc3RyaW5nLCBudWxsLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZHN0O1xufVxuXG4vKipcbiAqIEFwcGVuZCBga2V5YC9gdmFsdWVgIHRvIGV4aXN0aW5nIGBUQXR0cmlidXRlc2AgdGFraW5nIHJlZ2lvbiBtYXJrZXIgYW5kIGR1cGxpY2F0ZXMgaW50byBhY2NvdW50LlxuICpcbiAqIEBwYXJhbSBkc3QgYFRBdHRyaWJ1dGVzYCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0gbWFya2VyIFJlZ2lvbiB3aGVyZSB0aGUgYGtleWAvYHZhbHVlYCBzaG91bGQgYmUgYWRkZWQuXG4gKiBAcGFyYW0ga2V5MSBLZXkgdG8gYWRkIHRvIGBUQXR0cmlidXRlc2BcbiAqIEBwYXJhbSBrZXkyIEtleSB0byBhZGQgdG8gYFRBdHRyaWJ1dGVzYCAoaW4gY2FzZSBvZiBgQXR0cmlidXRlTWFya2VyLk5hbWVzcGFjZVVSSWApXG4gKiBAcGFyYW0gdmFsdWUgVmFsdWUgdG8gYWRkIG9yIHRvIG92ZXJ3cml0ZSB0byBgVEF0dHJpYnV0ZXNgIE9ubHkgdXNlZCBpZiBgbWFya2VyYCBpcyBub3QgQ2xhc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUhvc3RBdHRyaWJ1dGUoXG4gICAgZHN0OiBUQXR0cmlidXRlcywgbWFya2VyOiBBdHRyaWJ1dGVNYXJrZXIsIGtleTE6IHN0cmluZywga2V5Mjogc3RyaW5nIHwgbnVsbCxcbiAgICB2YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICBsZXQgaSA9IDA7XG4gIC8vIEFzc3VtZSB0aGF0IG5ldyBtYXJrZXJzIHdpbGwgYmUgaW5zZXJ0ZWQgYXQgdGhlIGVuZC5cbiAgbGV0IG1hcmtlckluc2VydFBvc2l0aW9uID0gZHN0Lmxlbmd0aDtcbiAgLy8gc2NhbiB1bnRpbCBjb3JyZWN0IHR5cGUuXG4gIGlmIChtYXJrZXIgPT09IEF0dHJpYnV0ZU1hcmtlci5JbXBsaWNpdEF0dHJpYnV0ZXMpIHtcbiAgICBtYXJrZXJJbnNlcnRQb3NpdGlvbiA9IC0xO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChpIDwgZHN0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgZHN0VmFsdWUgPSBkc3RbaSsrXTtcbiAgICAgIGlmICh0eXBlb2YgZHN0VmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkc3RWYWx1ZSA9PT0gbWFya2VyKSB7XG4gICAgICAgICAgbWFya2VySW5zZXJ0UG9zaXRpb24gPSAtMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmIChkc3RWYWx1ZSA+IG1hcmtlcikge1xuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc2F2ZSB0aGlzIGFzIHdlIHdhbnQgdGhlIG1hcmtlcnMgdG8gYmUgaW5zZXJ0ZWQgaW4gc3BlY2lmaWMgb3JkZXIuXG4gICAgICAgICAgbWFya2VySW5zZXJ0UG9zaXRpb24gPSBpIC0gMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHNlYXJjaCB1bnRpbCB5b3UgZmluZCBwbGFjZSBvZiBpbnNlcnRpb25cbiAgd2hpbGUgKGkgPCBkc3QubGVuZ3RoKSB7XG4gICAgY29uc3QgaXRlbSA9IGRzdFtpXTtcbiAgICBpZiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBzaW5jZSBgaWAgc3RhcnRlZCBhcyB0aGUgaW5kZXggYWZ0ZXIgdGhlIG1hcmtlciwgd2UgZGlkIG5vdCBmaW5kIGl0IGlmIHdlIGFyZSBhdCB0aGUgbmV4dFxuICAgICAgLy8gbWFya2VyXG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGl0ZW0gPT09IGtleTEpIHtcbiAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBzYW1lIHRva2VuXG4gICAgICBpZiAoa2V5MiA9PT0gbnVsbCkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBkc3RbaSArIDFdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIGlmIChrZXkyID09PSBkc3RbaSArIDFdKSB7XG4gICAgICAgIGRzdFtpICsgMl0gPSB2YWx1ZSAhO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEluY3JlbWVudCBjb3VudGVyLlxuICAgIGkrKztcbiAgICBpZiAoa2V5MiAhPT0gbnVsbCkgaSsrO1xuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkgaSsrO1xuICB9XG5cbiAgLy8gaW5zZXJ0IGF0IGxvY2F0aW9uLlxuICBpZiAobWFya2VySW5zZXJ0UG9zaXRpb24gIT09IC0xKSB7XG4gICAgZHN0LnNwbGljZShtYXJrZXJJbnNlcnRQb3NpdGlvbiwgMCwgbWFya2VyKTtcbiAgICBpID0gbWFya2VySW5zZXJ0UG9zaXRpb24gKyAxO1xuICB9XG4gIGRzdC5zcGxpY2UoaSsrLCAwLCBrZXkxKTtcbiAgaWYgKGtleTIgIT09IG51bGwpIHtcbiAgICBkc3Quc3BsaWNlKGkrKywgMCwga2V5Mik7XG4gIH1cbiAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgZHN0LnNwbGljZShpKyssIDAsIHZhbHVlKTtcbiAgfVxufSJdfQ==
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @license
3
+ * Copyright Google Inc. 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 { detectChanges, markDirty } from '../instructions/all';
9
+ import { getRootComponents } from './discovery_utils';
10
+ /**
11
+ * Marks a component for check (in case of OnPush components) and synchronously
12
+ * performs change detection on the application this component belongs to.
13
+ *
14
+ * @param component Component to {@link ChangeDetectorRef#markForCheck mark for check}.
15
+ *
16
+ * @publicApi
17
+ * @globalApi ng
18
+ */
19
+ export function applyChanges(component) {
20
+ markDirty(component);
21
+ getRootComponents(component).forEach(function (rootComponent) { return detectChanges(rootComponent); });
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlX2RldGVjdGlvbl91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvdXRpbC9jaGFuZ2VfZGV0ZWN0aW9uX3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQyxhQUFhLEVBQUUsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFNBQWE7SUFDeEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JCLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLGFBQWEsSUFBSSxPQUFBLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBNUIsQ0FBNEIsQ0FBQyxDQUFDO0FBQ3RGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7ZGV0ZWN0Q2hhbmdlcywgbWFya0RpcnR5fSBmcm9tICcuLi9pbnN0cnVjdGlvbnMvYWxsJztcbmltcG9ydCB7Z2V0Um9vdENvbXBvbmVudHN9IGZyb20gJy4vZGlzY292ZXJ5X3V0aWxzJztcblxuLyoqXG4gKiBNYXJrcyBhIGNvbXBvbmVudCBmb3IgY2hlY2sgKGluIGNhc2Ugb2YgT25QdXNoIGNvbXBvbmVudHMpIGFuZCBzeW5jaHJvbm91c2x5XG4gKiBwZXJmb3JtcyBjaGFuZ2UgZGV0ZWN0aW9uIG9uIHRoZSBhcHBsaWNhdGlvbiB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvLlxuICpcbiAqIEBwYXJhbSBjb21wb25lbnQgQ29tcG9uZW50IHRvIHtAbGluayBDaGFuZ2VEZXRlY3RvclJlZiNtYXJrRm9yQ2hlY2sgbWFyayBmb3IgY2hlY2t9LlxuICpcbiAqIEBwdWJsaWNBcGlcbiAqIEBnbG9iYWxBcGkgbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5Q2hhbmdlcyhjb21wb25lbnQ6IHt9KTogdm9pZCB7XG4gIG1hcmtEaXJ0eShjb21wb25lbnQpO1xuICBnZXRSb290Q29tcG9uZW50cyhjb21wb25lbnQpLmZvckVhY2gocm9vdENvbXBvbmVudCA9PiBkZXRlY3RDaGFuZ2VzKHJvb3RDb21wb25lbnQpKTtcbn1cbiJdfQ==