@angular/core 8.0.0 → 8.1.0-beta.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.
- package/bundles/core-testing.umd.js +35 -9
- package/bundles/core-testing.umd.js.map +1 -1
- package/bundles/core-testing.umd.min.js +10 -10
- package/bundles/core-testing.umd.min.js.map +1 -1
- package/bundles/core.umd.js +11356 -9352
- package/bundles/core.umd.js.map +1 -1
- package/bundles/core.umd.min.js +201 -139
- package/bundles/core.umd.min.js.map +1 -1
- package/core.d.ts +1302 -404
- package/core.metadata.json +1 -1
- package/esm2015/core.js +2 -3
- package/esm2015/index.js +2 -2
- package/esm2015/public_api.js +2 -2
- package/esm2015/src/application_ref.js +7 -1
- package/esm2015/src/codegen_private_exports.js +2 -2
- package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
- package/esm2015/src/core.js +4 -4
- package/esm2015/src/core_private_export.js +3 -1
- package/esm2015/src/core_render3_private_export.js +5 -3
- package/esm2015/src/debug/debug_node.js +4 -4
- package/esm2015/src/di/index.js +3 -3
- package/esm2015/src/di/injector.js +24 -96
- package/esm2015/src/di/injector_compatibility.js +103 -6
- package/esm2015/src/di/interface/defs.js +24 -3
- package/esm2015/src/di/r3_injector.js +82 -49
- package/esm2015/src/di/reflective_injector.js +3 -2
- package/esm2015/src/di.js +1 -1
- package/esm2015/src/i18n/locale_data.js +61 -0
- package/esm2015/src/i18n/locale_data_api.js +53 -0
- package/esm2015/src/i18n/locale_en.js +51 -0
- package/esm2015/src/i18n/localization.js +37 -0
- package/esm2015/src/linker/ng_module_factory_loader.js +4 -52
- package/esm2015/src/linker/ng_module_factory_registration.js +83 -0
- package/esm2015/src/metadata/ng_module.js +6 -1
- package/esm2015/src/metadata/resource_loading.js +2 -2
- package/esm2015/src/reflection/reflection_capabilities.js +14 -3
- package/esm2015/src/render3/assert.js +3 -2
- package/esm2015/src/render3/component.js +11 -5
- package/esm2015/src/render3/debug.js +23 -15
- package/esm2015/src/render3/definition.js +12 -2
- package/esm2015/src/render3/errors.js +29 -1
- package/esm2015/src/render3/features/inherit_definition_feature.js +51 -37
- package/esm2015/src/render3/fields.js +3 -1
- package/esm2015/src/render3/i18n.js +76 -465
- package/esm2015/src/render3/index.js +3 -3
- package/esm2015/src/render3/instructions/all.js +9 -4
- package/esm2015/src/render3/instructions/attribute.js +28 -0
- package/esm2015/src/render3/instructions/attribute_interpolation.js +376 -0
- package/esm2015/src/render3/instructions/container.js +17 -16
- package/esm2015/src/render3/instructions/element.js +57 -35
- package/esm2015/src/render3/instructions/element_container.js +9 -8
- package/esm2015/src/render3/instructions/embedded_view.js +9 -12
- package/esm2015/src/render3/instructions/interpolation.js +375 -0
- package/esm2015/src/render3/instructions/listener.js +3 -2
- package/esm2015/src/render3/instructions/projection.js +6 -6
- package/esm2015/src/render3/instructions/property.js +10 -4
- package/esm2015/src/render3/instructions/property_interpolation.js +49 -382
- package/esm2015/src/render3/instructions/shared.js +82 -118
- package/esm2015/src/render3/instructions/styling.js +189 -236
- package/esm2015/src/render3/instructions/text.js +8 -7
- package/esm2015/src/render3/instructions/text_interpolation.js +357 -0
- package/esm2015/src/render3/interfaces/container.js +9 -5
- package/esm2015/src/render3/interfaces/definition.js +12 -6
- package/esm2015/src/render3/interfaces/node.js +20 -8
- package/esm2015/src/render3/interfaces/styling.js +16 -15
- package/esm2015/src/render3/interfaces/view.js +2 -2
- package/esm2015/src/render3/jit/directive.js +14 -5
- package/esm2015/src/render3/jit/environment.js +30 -15
- package/esm2015/src/render3/jit/module.js +38 -19
- package/esm2015/src/render3/ng_module_ref.js +39 -3
- package/esm2015/src/render3/node_manipulation.js +45 -43
- package/esm2015/src/render3/node_selector_matcher.js +14 -13
- package/esm2015/src/render3/query.js +77 -61
- package/esm2015/src/render3/state.js +33 -6
- package/esm2015/src/render3/styling/class_and_style_bindings.js +91 -79
- package/esm2015/src/render3/styling/host_instructions_queue.js +8 -5
- package/esm2015/src/render3/styling/shared.js +2 -2
- package/esm2015/src/render3/styling/util.js +2 -2
- package/esm2015/src/render3/styling_next/bindings.js +602 -0
- package/esm2015/src/render3/styling_next/instructions.js +366 -0
- package/esm2015/src/render3/styling_next/interfaces.js +374 -0
- package/esm2015/src/render3/styling_next/map_based_bindings.js +408 -0
- package/esm2015/src/render3/styling_next/state.js +51 -0
- package/esm2015/src/render3/styling_next/styling_debug.js +291 -0
- package/esm2015/src/render3/styling_next/util.js +259 -0
- package/esm2015/src/render3/util/attrs_utils.js +4 -3
- package/esm2015/src/render3/util/debug_utils.js +18 -0
- package/esm2015/src/render3/util/view_traversal_utils.js +2 -2
- package/esm2015/src/render3/view_engine_compatibility.js +24 -10
- package/esm2015/src/sanitization/sanitization.js +17 -7
- package/esm2015/src/sanitization/style_sanitizer.js +11 -1
- package/esm2015/src/util/ng_dev_mode.js +7 -3
- package/esm2015/src/version.js +1 -1
- package/esm2015/src/view/ng_module.js +3 -3
- package/esm2015/src/view/util.js +2 -2
- package/esm2015/testing/src/r3_test_bed_compiler.js +44 -12
- package/esm5/core.js +2 -3
- package/esm5/src/application_ref.js +6 -1
- package/esm5/src/codegen_private_exports.js +2 -2
- package/esm5/src/compiler/compiler_facade_interface.js +1 -1
- package/esm5/src/core_private_export.js +3 -1
- package/esm5/src/core_render3_private_export.js +5 -3
- package/esm5/src/debug/debug_node.js +4 -4
- package/esm5/src/di/index.js +3 -3
- package/esm5/src/di/injector.js +14 -74
- package/esm5/src/di/injector_compatibility.js +77 -6
- package/esm5/src/di/interface/defs.js +24 -3
- package/esm5/src/di/r3_injector.js +60 -37
- package/esm5/src/di/reflective_injector.js +3 -2
- package/esm5/src/i18n/locale_data.js +38 -0
- package/esm5/src/i18n/locale_data_api.js +46 -0
- package/esm5/src/i18n/locale_en.js +39 -0
- package/esm5/src/i18n/localization.js +29 -0
- package/esm5/src/linker/ng_module_factory_loader.js +4 -32
- package/esm5/src/linker/ng_module_factory_registration.js +50 -0
- package/esm5/src/metadata/ng_module.js +1 -1
- package/esm5/src/metadata/resource_loading.js +2 -2
- package/esm5/src/reflection/reflection_capabilities.js +14 -3
- package/esm5/src/render3/assert.js +2 -1
- package/esm5/src/render3/component.js +10 -4
- package/esm5/src/render3/debug.js +17 -10
- package/esm5/src/render3/definition.js +8 -2
- package/esm5/src/render3/errors.js +14 -1
- package/esm5/src/render3/features/inherit_definition_feature.js +41 -36
- package/esm5/src/render3/fields.js +2 -1
- package/esm5/src/render3/i18n.js +67 -437
- package/esm5/src/render3/index.js +3 -3
- package/esm5/src/render3/instructions/all.js +6 -1
- package/esm5/src/render3/instructions/attribute.js +22 -0
- package/esm5/src/render3/instructions/attribute_interpolation.js +346 -0
- package/esm5/src/render3/instructions/container.js +16 -15
- package/esm5/src/render3/instructions/element.js +43 -32
- package/esm5/src/render3/instructions/element_container.js +9 -8
- package/esm5/src/render3/instructions/embedded_view.js +8 -11
- package/esm5/src/render3/instructions/interpolation.js +243 -0
- package/esm5/src/render3/instructions/listener.js +3 -2
- package/esm5/src/render3/instructions/projection.js +6 -6
- package/esm5/src/render3/instructions/property.js +10 -4
- package/esm5/src/render3/instructions/property_interpolation.js +40 -254
- package/esm5/src/render3/instructions/shared.js +70 -105
- package/esm5/src/render3/instructions/styling.js +167 -209
- package/esm5/src/render3/instructions/text.js +8 -7
- package/esm5/src/render3/instructions/text_interpolation.js +264 -0
- package/esm5/src/render3/interfaces/container.js +8 -2
- package/esm5/src/render3/interfaces/definition.js +1 -1
- package/esm5/src/render3/interfaces/node.js +1 -8
- package/esm5/src/render3/interfaces/styling.js +2 -2
- package/esm5/src/render3/interfaces/view.js +1 -1
- package/esm5/src/render3/jit/directive.js +12 -5
- package/esm5/src/render3/jit/environment.js +30 -15
- package/esm5/src/render3/jit/module.js +23 -18
- package/esm5/src/render3/ng_module_ref.js +37 -3
- package/esm5/src/render3/node_manipulation.js +39 -38
- package/esm5/src/render3/node_selector_matcher.js +14 -13
- package/esm5/src/render3/query.js +75 -53
- package/esm5/src/render3/state.js +29 -5
- package/esm5/src/render3/styling/class_and_style_bindings.js +79 -65
- package/esm5/src/render3/styling/host_instructions_queue.js +6 -3
- package/esm5/src/render3/styling/shared.js +2 -2
- package/esm5/src/render3/styling/util.js +2 -2
- package/esm5/src/render3/styling_next/bindings.js +446 -0
- package/esm5/src/render3/styling_next/instructions.js +277 -0
- package/esm5/src/render3/styling_next/interfaces.js +1 -0
- package/esm5/src/render3/styling_next/map_based_bindings.js +324 -0
- package/esm5/src/render3/styling_next/state.js +23 -0
- package/esm5/src/render3/styling_next/styling_debug.js +130 -0
- package/esm5/src/render3/styling_next/util.js +147 -0
- package/esm5/src/render3/util/attrs_utils.js +4 -3
- package/esm5/src/render3/util/debug_utils.js +11 -0
- package/esm5/src/render3/util/view_traversal_utils.js +2 -2
- package/esm5/src/render3/view_engine_compatibility.js +23 -10
- package/esm5/src/sanitization/sanitization.js +14 -6
- package/esm5/src/sanitization/style_sanitizer.js +1 -1
- package/esm5/src/util/ng_dev_mode.js +7 -3
- package/esm5/src/version.js +1 -1
- package/esm5/src/view/ng_module.js +3 -3
- package/esm5/src/view/util.js +2 -2
- package/esm5/testing/src/r3_test_bed_compiler.js +37 -11
- package/fesm2015/core.js +13481 -10733
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/testing.js +43 -11
- package/fesm2015/testing.js.map +1 -1
- package/fesm5/core.js +11255 -9269
- package/fesm5/core.js.map +1 -1
- package/fesm5/testing.js +36 -10
- package/fesm5/testing.js.map +1 -1
- package/package.json +1 -1
- package/schematics/migrations/template-var-assignment/index.js +2 -2
- package/src/r3_symbols.d.ts +5 -1
- package/testing/testing.d.ts +1 -1
- package/testing.d.ts +1 -1
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import { BINDING_INDEX, HEADER_OFFSET, HOST, RENDERER } from '../interfaces/view';
|
|
2
|
+
import { getActiveDirectiveId, getActiveDirectiveSuperClassDepth, getActiveDirectiveSuperClassHeight, getLView, getSelectedIndex } from '../state';
|
|
3
|
+
import { NO_CHANGE } from '../tokens';
|
|
4
|
+
import { renderStringify } from '../util/misc_utils';
|
|
5
|
+
import { getTNode, isStylingContext as isOldStylingContext } from '../util/view_utils';
|
|
6
|
+
import { applyClasses, applyStyles, registerBinding, updateClassBinding, updateStyleBinding } from './bindings';
|
|
7
|
+
import { activeStylingMapFeature, normalizeIntoStylingMap } from './map_based_bindings';
|
|
8
|
+
import { setCurrentStyleSanitizer } from './state';
|
|
9
|
+
import { attachStylingDebugObject } from './styling_debug';
|
|
10
|
+
import { allocTStylingContext, getCurrentOrLViewSanitizer, hasValueChanged, updateContextDirectiveIndex } from './util';
|
|
11
|
+
/**
|
|
12
|
+
* --------
|
|
13
|
+
*
|
|
14
|
+
* This file contains the core logic for how styling instructions are processed in Angular.
|
|
15
|
+
*
|
|
16
|
+
* To learn more about the algorithm see `TStylingContext`.
|
|
17
|
+
*
|
|
18
|
+
* --------
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Temporary function to bridge styling functionality between this new
|
|
22
|
+
* refactor (which is here inside of `styling_next/`) and the old
|
|
23
|
+
* implementation (which lives inside of `styling/`).
|
|
24
|
+
*
|
|
25
|
+
* This function is executed during the creation block of an element.
|
|
26
|
+
* Because the existing styling implementation issues a call to the
|
|
27
|
+
* `styling()` instruction, this instruction will also get run. The
|
|
28
|
+
* central idea here is that the directive index values are bound
|
|
29
|
+
* into the context. The directive index is temporary and is only
|
|
30
|
+
* required until the `select(n)` instruction is fully functional.
|
|
31
|
+
*/
|
|
32
|
+
export function stylingInit() {
|
|
33
|
+
var lView = getLView();
|
|
34
|
+
var index = getSelectedIndex();
|
|
35
|
+
var tNode = getTNode(index, lView);
|
|
36
|
+
updateLastDirectiveIndex(tNode, getActiveDirectiveStylingIndex());
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Sets the current style sanitizer function which will then be used
|
|
40
|
+
* within all follow-up prop and map-based style binding instructions
|
|
41
|
+
* for the given element.
|
|
42
|
+
*
|
|
43
|
+
* Note that once styling has been applied to the element (i.e. once
|
|
44
|
+
* `select(n)` is executed or the hostBindings/template function exits)
|
|
45
|
+
* then the active `sanitizerFn` will be set to `null`. This means that
|
|
46
|
+
* once styling is applied to another element then a another call to
|
|
47
|
+
* `styleSanitizer` will need to be made.
|
|
48
|
+
*
|
|
49
|
+
* @param sanitizerFn The sanitization function that will be used to
|
|
50
|
+
* process style prop/value entries.
|
|
51
|
+
*
|
|
52
|
+
* @codeGenApi
|
|
53
|
+
*/
|
|
54
|
+
export function styleSanitizer(sanitizer) {
|
|
55
|
+
setCurrentStyleSanitizer(sanitizer);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Mirror implementation of the `styleProp()` instruction (found in `instructions/styling.ts`).
|
|
59
|
+
*/
|
|
60
|
+
export function styleProp(prop, value, suffix) {
|
|
61
|
+
_stylingProp(prop, resolveStylePropValue(value, suffix), false);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Mirror implementation of the `classProp()` instruction (found in `instructions/styling.ts`).
|
|
65
|
+
*/
|
|
66
|
+
export function classProp(className, value) {
|
|
67
|
+
_stylingProp(className, value, true);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Shared function used to update a prop-based styling binding for an element.
|
|
71
|
+
*/
|
|
72
|
+
function _stylingProp(prop, value, isClassBased) {
|
|
73
|
+
var index = getSelectedIndex();
|
|
74
|
+
var lView = getLView();
|
|
75
|
+
var bindingIndex = lView[BINDING_INDEX]++;
|
|
76
|
+
var tNode = getTNode(index, lView);
|
|
77
|
+
var defer = getActiveDirectiveSuperClassHeight() > 0;
|
|
78
|
+
if (isClassBased) {
|
|
79
|
+
updateClassBinding(getClassesContext(tNode), lView, prop, bindingIndex, value, defer, false);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
var sanitizer = getCurrentOrLViewSanitizer(lView);
|
|
83
|
+
updateStyleBinding(getStylesContext(tNode), lView, prop, bindingIndex, value, sanitizer, defer, false);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Mirror implementation of the `styleMap()` instruction (found in `instructions/styling.ts`).
|
|
88
|
+
*/
|
|
89
|
+
export function styleMap(styles) {
|
|
90
|
+
_stylingMap(styles, false);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Mirror implementation of the `classMap()` instruction (found in `instructions/styling.ts`).
|
|
94
|
+
*/
|
|
95
|
+
export function classMap(classes) {
|
|
96
|
+
_stylingMap(classes, true);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Shared function used to update a map-based styling binding for an element.
|
|
100
|
+
*
|
|
101
|
+
* When this function is called it will activate support for `[style]` and
|
|
102
|
+
* `[class]` bindings in Angular.
|
|
103
|
+
*/
|
|
104
|
+
function _stylingMap(value, isClassBased) {
|
|
105
|
+
activeStylingMapFeature();
|
|
106
|
+
var index = getSelectedIndex();
|
|
107
|
+
var lView = getLView();
|
|
108
|
+
var bindingIndex = lView[BINDING_INDEX]++;
|
|
109
|
+
if (value !== NO_CHANGE) {
|
|
110
|
+
var tNode = getTNode(index, lView);
|
|
111
|
+
var defer = getActiveDirectiveSuperClassHeight() > 0;
|
|
112
|
+
var oldValue = lView[bindingIndex];
|
|
113
|
+
var valueHasChanged = hasValueChanged(oldValue, value);
|
|
114
|
+
var lStylingMap = normalizeIntoStylingMap(oldValue, value);
|
|
115
|
+
if (isClassBased) {
|
|
116
|
+
updateClassBinding(getClassesContext(tNode), lView, null, bindingIndex, lStylingMap, defer, valueHasChanged);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
var sanitizer = getCurrentOrLViewSanitizer(lView);
|
|
120
|
+
updateStyleBinding(getStylesContext(tNode), lView, null, bindingIndex, lStylingMap, sanitizer, defer, valueHasChanged);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Temporary function to bridge styling functionality between this new
|
|
126
|
+
* refactor (which is here inside of `styling_next/`) and the old
|
|
127
|
+
* implementation (which lives inside of `styling/`).
|
|
128
|
+
*
|
|
129
|
+
* The new styling refactor ensures that styling flushing is called
|
|
130
|
+
* automatically when a template function exits or a follow-up element
|
|
131
|
+
* is visited (i.e. when `select(n)` is called). Because the `select(n)`
|
|
132
|
+
* instruction is not fully implemented yet (it doesn't actually execute
|
|
133
|
+
* host binding instruction code at the right time), this means that a
|
|
134
|
+
* styling apply function is still needed.
|
|
135
|
+
*
|
|
136
|
+
* This function is a mirror implementation of the `stylingApply()`
|
|
137
|
+
* instruction (found in `instructions/styling.ts`).
|
|
138
|
+
*/
|
|
139
|
+
export function stylingApply() {
|
|
140
|
+
var index = getSelectedIndex();
|
|
141
|
+
var lView = getLView();
|
|
142
|
+
var tNode = getTNode(index, lView);
|
|
143
|
+
var renderer = getRenderer(tNode, lView);
|
|
144
|
+
var native = getNativeFromLView(index, lView);
|
|
145
|
+
var directiveIndex = getActiveDirectiveStylingIndex();
|
|
146
|
+
applyClasses(renderer, lView, getClassesContext(tNode), native, directiveIndex);
|
|
147
|
+
var sanitizer = getCurrentOrLViewSanitizer(lView);
|
|
148
|
+
applyStyles(renderer, lView, getStylesContext(tNode), native, directiveIndex, sanitizer);
|
|
149
|
+
setCurrentStyleSanitizer(null);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Temporary function to bridge styling functionality between this new
|
|
153
|
+
* refactor (which is here inside of `styling_next/`) and the old
|
|
154
|
+
* implementation (which lives inside of `styling/`).
|
|
155
|
+
*
|
|
156
|
+
* The purpose of this function is to traverse through the LView data
|
|
157
|
+
* for a specific element index and return the native node. Because the
|
|
158
|
+
* current implementation relies on there being a styling context array,
|
|
159
|
+
* the code below will need to loop through these array values until it
|
|
160
|
+
* gets a native element node.
|
|
161
|
+
*
|
|
162
|
+
* Note that this code is temporary and will disappear once the new
|
|
163
|
+
* styling refactor lands in its entirety.
|
|
164
|
+
*/
|
|
165
|
+
function getNativeFromLView(index, viewData) {
|
|
166
|
+
var storageIndex = index + HEADER_OFFSET;
|
|
167
|
+
var slotValue = viewData[storageIndex];
|
|
168
|
+
var wrapper = viewData;
|
|
169
|
+
while (Array.isArray(slotValue)) {
|
|
170
|
+
wrapper = slotValue;
|
|
171
|
+
slotValue = slotValue[HOST];
|
|
172
|
+
}
|
|
173
|
+
if (isOldStylingContext(wrapper)) {
|
|
174
|
+
return wrapper[0 /* ElementPosition */];
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
return slotValue;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
function getRenderer(tNode, lView) {
|
|
181
|
+
return tNode.type === 3 /* Element */ ? lView[RENDERER] : null;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Searches and assigns provided all static style/class entries (found in the `attrs` value)
|
|
185
|
+
* and registers them in their respective styling contexts.
|
|
186
|
+
*/
|
|
187
|
+
export function registerInitialStylingIntoContext(tNode, attrs, startIndex) {
|
|
188
|
+
var classesContext;
|
|
189
|
+
var stylesContext;
|
|
190
|
+
var mode = -1;
|
|
191
|
+
for (var i = startIndex; i < attrs.length; i++) {
|
|
192
|
+
var attr = attrs[i];
|
|
193
|
+
if (typeof attr == 'number') {
|
|
194
|
+
mode = attr;
|
|
195
|
+
}
|
|
196
|
+
else if (mode == 1 /* Classes */) {
|
|
197
|
+
classesContext = classesContext || getClassesContext(tNode);
|
|
198
|
+
registerBinding(classesContext, -1, attr, true, false);
|
|
199
|
+
}
|
|
200
|
+
else if (mode == 2 /* Styles */) {
|
|
201
|
+
stylesContext = stylesContext || getStylesContext(tNode);
|
|
202
|
+
registerBinding(stylesContext, -1, attr, attrs[++i], false);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Mirror implementation of the same function found in `instructions/styling.ts`.
|
|
208
|
+
*/
|
|
209
|
+
export function getActiveDirectiveStylingIndex() {
|
|
210
|
+
// whenever a directive's hostBindings function is called a uniqueId value
|
|
211
|
+
// is assigned. Normally this is enough to help distinguish one directive
|
|
212
|
+
// from another for the styling context, but there are situations where a
|
|
213
|
+
// sub-class directive could inherit and assign styling in concert with a
|
|
214
|
+
// parent directive. To help the styling code distinguish between a parent
|
|
215
|
+
// sub-classed directive the inheritance depth is taken into account as well.
|
|
216
|
+
return getActiveDirectiveId() + getActiveDirectiveSuperClassDepth();
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Temporary function that will update the max directive index value in
|
|
220
|
+
* both the classes and styles contexts present on the provided `tNode`.
|
|
221
|
+
*
|
|
222
|
+
* This code is only used because the `select(n)` code functionality is not
|
|
223
|
+
* yet 100% functional. The `select(n)` instruction cannot yet evaluate host
|
|
224
|
+
* bindings function code in sync with the associated template function code.
|
|
225
|
+
* For this reason the styling algorithm needs to track the last directive index
|
|
226
|
+
* value so that it knows exactly when to render styling to the element since
|
|
227
|
+
* `stylingApply()` is called multiple times per CD (`stylingApply` will be
|
|
228
|
+
* removed once `select(n)` is fixed).
|
|
229
|
+
*/
|
|
230
|
+
function updateLastDirectiveIndex(tNode, directiveIndex) {
|
|
231
|
+
updateContextDirectiveIndex(getClassesContext(tNode), directiveIndex);
|
|
232
|
+
updateContextDirectiveIndex(getStylesContext(tNode), directiveIndex);
|
|
233
|
+
}
|
|
234
|
+
function getStylesContext(tNode) {
|
|
235
|
+
return getContext(tNode, false);
|
|
236
|
+
}
|
|
237
|
+
function getClassesContext(tNode) {
|
|
238
|
+
return getContext(tNode, true);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Returns/instantiates a styling context from/to a `tNode` instance.
|
|
242
|
+
*/
|
|
243
|
+
function getContext(tNode, isClassBased) {
|
|
244
|
+
var context = isClassBased ? tNode.newClasses : tNode.newStyles;
|
|
245
|
+
if (!context) {
|
|
246
|
+
context = allocTStylingContext();
|
|
247
|
+
if (ngDevMode) {
|
|
248
|
+
attachStylingDebugObject(context);
|
|
249
|
+
}
|
|
250
|
+
if (isClassBased) {
|
|
251
|
+
tNode.newClasses = context;
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
tNode.newStyles = context;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return context;
|
|
258
|
+
}
|
|
259
|
+
function resolveStylePropValue(value, suffix) {
|
|
260
|
+
var resolvedValue = null;
|
|
261
|
+
if (value !== null) {
|
|
262
|
+
if (suffix) {
|
|
263
|
+
// when a suffix is applied then it will bypass
|
|
264
|
+
// sanitization entirely (b/c a new string is created)
|
|
265
|
+
resolvedValue = renderStringify(value) + suffix;
|
|
266
|
+
}
|
|
267
|
+
else {
|
|
268
|
+
// sanitization happens by dealing with a String value
|
|
269
|
+
// this means that the string value will be passed through
|
|
270
|
+
// into the style rendering later (which is where the value
|
|
271
|
+
// will be sanitized before it is applied)
|
|
272
|
+
resolvedValue = value;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
return resolvedValue;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcmVuZGVyMy9zdHlsaW5nX25leHQvaW5zdHJ1Y3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWFBLE9BQU8sRUFBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBUyxRQUFRLEVBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUNsRyxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsaUNBQWlDLEVBQUUsa0NBQWtDLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ2pKLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxXQUFXLENBQUM7QUFDcEMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ25ELE9BQU8sRUFBQyxRQUFRLEVBQUUsZ0JBQWdCLElBQUksbUJBQW1CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUVyRixPQUFPLEVBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFOUcsT0FBTyxFQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDdEYsT0FBTyxFQUEyQix3QkFBd0IsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUMzRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxFQUFFLDJCQUEyQixFQUFDLE1BQU0sUUFBUSxDQUFDO0FBSXRIOzs7Ozs7OztHQVFHO0FBRUg7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsV0FBVztJQUN6QixJQUFNLEtBQUssR0FBRyxRQUFRLEVBQUUsQ0FBQztJQUN6QixJ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Q0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQVksRUFBRSxZQUFxQjtJQUNyRCxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDaEUsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE9BQU8sR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQ2pDLElBQUksU0FBUyxFQUFFO1lBQ2Isd0JBQXdCLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkM7UUFDRCxJQUFJLFlBQVksRUFBRTtZQUNoQixLQUFLLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztTQUM1QjthQUFNO1lBQ0wsS0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUM7U0FDM0I7S0FDRjtJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUMxQixLQUFzQyxFQUFFLE1BQWlDO0lBQzNFLElBQUksYUFBYSxHQUFnQixJQUFJLENBQUM7SUFDdEMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1FBQ2xCLElBQUksTUFBTSxFQUFFO1lBQ1YsK0NBQStDO1lBQy9DLHNEQUFzRDtZQUN0RCxhQUFhLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUNqRDthQUFNO1lBQ0wsc0RBQXNEO1lBQ3RELDBEQUEwRDtZQUMxRCwyREFBMkQ7WUFDM0QsMENBQTBDO1lBQzFDLGFBQWEsR0FBRyxLQUFzQixDQUFDO1NBQ3hDO0tBQ0Y7SUFDRCxPQUFPLGFBQWEsQ0FBQztBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4qIEBsaWNlbnNlXG4qIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuKlxuKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4qL1xuaW1wb3J0IHtTYW5pdGl6ZXJ9IGZyb20gJy4uLy4uL3Nhbml0aXphdGlvbi9zZWN1cml0eSc7XG5pbXBvcnQge1N0eWxlU2FuaXRpemVGbn0gZnJvbSAnLi4vLi4vc2FuaXRpemF0aW9uL3N0eWxlX3Nhbml0aXplcic7XG5pbXBvcnQge0xDb250YWluZXJ9IGZyb20gJy4uL2ludGVyZmFjZXMvY29udGFpbmVyJztcbmltcG9ydCB7QXR0cmlidXRlTWFya2VyLCBUQXR0cmlidXRlcywgVE5vZGUsIFROb2RlVHlwZX0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7UkVsZW1lbnR9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVuZGVyZXInO1xuaW1wb3J0IHtTdHlsaW5nQ29udGV4dCBhcyBPbGRTdHlsaW5nQ29udGV4dCwgU3R5bGluZ0luZGV4IGFzIE9sZFN0eWxpbmdJbmRleH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdHlsaW5nJztcbmltcG9ydCB7QklORElOR19JTkRFWCwgSEVBREVSX09GRlNFVCwgSE9TVCwgTFZpZXcsIFJFTkRFUkVSLCBTQU5JVElaRVJ9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlldyc7XG5pbXBvcnQge2dldEFjdGl2ZURpcmVjdGl2ZUlkLCBnZXRBY3RpdmVEaXJlY3RpdmVTdXBlckNsYXNzRGVwdGgsIGdldEFjdGl2ZURpcmVjdGl2ZVN1cGVyQ2xhc3NIZWlnaHQsIGdldExWaWV3LCBnZXRTZWxlY3RlZEluZGV4fSBmcm9tICcuLi9zdGF0ZSc7XG5pbXBvcnQge05PX0NIQU5HRX0gZnJvbSAnLi4vdG9rZW5zJztcbmltcG9ydCB7cmVuZGVyU3RyaW5naWZ5fSBmcm9tICcuLi91dGlsL21pc2NfdXRpbHMnO1xuaW1wb3J0IHtnZXRUTm9kZSwgaXNTdHlsaW5nQ29udGV4dCBhcyBpc09sZFN0eWxpbmdDb250ZXh0fSBmcm9tICcuLi91dGlsL3ZpZXdfdXRpbHMnO1xuXG5pbXBvcnQge2FwcGx5Q2xhc3NlcywgYXBwbHlTdHlsZXMsIHJlZ2lzdGVyQmluZGluZywgdXBkYXRlQ2xhc3NCaW5kaW5nLCB1cGRhdGVTdHlsZUJpbmRpbmd9IGZyb20gJy4vYmluZGluZ3MnO1xuaW1wb3J0IHtUU3R5bGluZ0NvbnRleHR9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge2FjdGl2ZVN0eWxpbmdNYXBGZWF0dXJlLCBub3JtYWxpemVJbnRvU3R5bGluZ01hcH0gZnJvbSAnLi9tYXBfYmFzZWRfYmluZGluZ3MnO1xuaW1wb3J0IHtnZXRDdXJyZW50U3R5bGVTYW5pdGl6ZXIsIHNldEN1cnJlbnRTdHlsZVNhbml0aXplcn0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQge2F0dGFjaFN0eWxpbmdEZWJ1Z09iamVjdH0gZnJvbSAnLi9zdHlsaW5nX2RlYnVnJztcbmltcG9ydCB7YWxsb2NUU3R5bGluZ0NvbnRleHQsIGdldEN1cnJlbnRPckxWaWV3U2FuaXRpemVyLCBoYXNWYWx1ZUNoYW5nZWQsIHVwZGF0ZUNvbnRleHREaXJlY3RpdmVJbmRleH0gZnJvbSAnLi91dGlsJztcblxuXG5cbi8qKlxuICogLS0tLS0tLS1cbiAqXG4gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGNvcmUgbG9naWMgZm9yIGhvdyBzdHlsaW5nIGluc3RydWN0aW9ucyBhcmUgcHJvY2Vzc2VkIGluIEFuZ3VsYXIuXG4gKlxuICogVG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgYWxnb3JpdGhtIHNlZSBgVFN0eWxpbmdDb250ZXh0YC5cbiAqXG4gKiAtLS0tLS0tLVxuICovXG5cbi8qKlxuICogVGVtcG9yYXJ5IGZ1bmN0aW9uIHRvIGJyaWRnZSBzdHlsaW5nIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGlzIG5ld1xuICogcmVmYWN0b3IgKHdoaWNoIGlzIGhlcmUgaW5zaWRlIG9mIGBzdHlsaW5nX25leHQvYCkgYW5kIHRoZSBvbGRcbiAqIGltcGxlbWVudGF0aW9uICh3aGljaCBsaXZlcyBpbnNpZGUgb2YgYHN0eWxpbmcvYCkuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBpcyBleGVjdXRlZCBkdXJpbmcgdGhlIGNyZWF0aW9uIGJsb2NrIG9mIGFuIGVsZW1lbnQuXG4gKiBCZWNhdXNlIHRoZSBleGlzdGluZyBzdHlsaW5nIGltcGxlbWVudGF0aW9uIGlzc3VlcyBhIGNhbGwgdG8gdGhlXG4gKiBgc3R5bGluZygpYCBpbnN0cnVjdGlvbiwgdGhpcyBpbnN0cnVjdGlvbiB3aWxsIGFsc28gZ2V0IHJ1bi4gVGhlXG4gKiBjZW50cmFsIGlkZWEgaGVyZSBpcyB0aGF0IHRoZSBkaXJlY3RpdmUgaW5kZXggdmFsdWVzIGFyZSBib3VuZFxuICogaW50byB0aGUgY29udGV4dC4gVGhlIGRpcmVjdGl2ZSBpbmRleCBpcyB0ZW1wb3JhcnkgYW5kIGlzIG9ubHlcbiAqIHJlcXVpcmVkIHVudGlsIHRoZSBgc2VsZWN0KG4pYCBpbnN0cnVjdGlvbiBpcyBmdWxseSBmdW5jdGlvbmFsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3R5bGluZ0luaXQoKSB7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgaW5kZXggPSBnZXRTZWxlY3RlZEluZGV4KCk7XG4gIGNvbnN0IHROb2RlID0gZ2V0VE5vZGUoaW5kZXgsIGxWaWV3KTtcbiAgdXBkYXRlTGFzdERpcmVjdGl2ZUluZGV4KHROb2RlLCBnZXRBY3RpdmVEaXJlY3RpdmVTdHlsaW5nSW5kZXgoKSk7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgY3VycmVudCBzdHlsZSBzYW5pdGl6ZXIgZnVuY3Rpb24gd2hpY2ggd2lsbCB0aGVuIGJlIHVzZWRcbiAqIHdpdGhpbiBhbGwgZm9sbG93LXVwIHByb3AgYW5kIG1hcC1iYXNlZCBzdHlsZSBiaW5kaW5nIGluc3RydWN0aW9uc1xuICogZm9yIHRoZSBnaXZlbiBlbGVtZW50LlxuICpcbiAqIE5vdGUgdGhhdCBvbmNlIHN0eWxpbmcgaGFzIGJlZW4gYXBwbGllZCB0byB0aGUgZWxlbWVudCAoaS5lLiBvbmNlXG4gKiBgc2VsZWN0KG4pYCBpcyBleGVjdXRlZCBvciB0aGUgaG9zdEJpbmRpbmdzL3RlbXBsYXRlIGZ1bmN0aW9uIGV4aXRzKVxuICogdGhlbiB0aGUgYWN0aXZlIGBzYW5pdGl6ZXJGbmAgd2lsbCBiZSBzZXQgdG8gYG51bGxgLiBUaGlzIG1lYW5zIHRoYXRcbiAqIG9uY2Ugc3R5bGluZyBpcyBhcHBsaWVkIHRvIGFub3RoZXIgZWxlbWVudCB0aGVuIGEgYW5vdGhlciBjYWxsIHRvXG4gKiBgc3R5bGVTYW5pdGl6ZXJgIHdpbGwgbmVlZCB0byBiZSBtYWRlLlxuICpcbiAqIEBwYXJhbSBzYW5pdGl6ZXJGbiBUaGUgc2FuaXRpemF0aW9uIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvXG4gKiAgICAgICBwcm9jZXNzIHN0eWxlIHByb3AvdmFsdWUgZW50cmllcy5cbiAqXG4gKiBAY29kZUdlbkFwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVTYW5pdGl6ZXIoc2FuaXRpemVyOiBTYW5pdGl6ZXIgfCBTdHlsZVNhbml0aXplRm4gfCBudWxsKTogdm9pZCB7XG4gIHNldEN1cnJlbnRTdHlsZVNhbml0aXplcihzYW5pdGl6ZXIpO1xufVxuXG4vKipcbiAqIE1pcnJvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHN0eWxlUHJvcCgpYCBpbnN0cnVjdGlvbiAoZm91bmQgaW4gYGluc3RydWN0aW9ucy9zdHlsaW5nLnRzYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZVByb3AoXG4gICAgcHJvcDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyIHwgU3RyaW5nIHwgbnVsbCwgc3VmZml4Pzogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICBfc3R5bGluZ1Byb3AocHJvcCwgcmVzb2x2ZVN0eWxlUHJvcFZhbHVlKHZhbHVlLCBzdWZmaXgpLCBmYWxzZSk7XG59XG5cbi8qKlxuICogTWlycm9yIGltcGxlbWVudGF0aW9uIG9mIHRoZSBgY2xhc3NQcm9wKClgIGluc3RydWN0aW9uIChmb3VuZCBpbiBgaW5zdHJ1Y3Rpb25zL3N0eWxpbmcudHNgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzUHJvcChjbGFzc05hbWU6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4gfCBudWxsKTogdm9pZCB7XG4gIF9zdHlsaW5nUHJvcChjbGFzc05hbWUsIHZhbHVlLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBTaGFyZWQgZnVuY3Rpb24gdXNlZCB0byB1cGRhdGUgYSBwcm9wLWJhc2VkIHN0eWxpbmcgYmluZGluZyBmb3IgYW4gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gX3N0eWxpbmdQcm9wKFxuICAgIHByb3A6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4gfCBudW1iZXIgfCBTdHJpbmcgfCBzdHJpbmcgfCBudWxsLCBpc0NsYXNzQmFzZWQ6IGJvb2xlYW4pIHtcbiAgY29uc3QgaW5kZXggPSBnZXRTZWxlY3RlZEluZGV4KCk7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgYmluZGluZ0luZGV4ID0gbFZpZXdbQklORElOR19JTkRFWF0rKztcbiAgY29uc3QgdE5vZGUgPSBnZXRUTm9kZShpbmRleCwgbFZpZXcpO1xuICBjb25zdCBkZWZlciA9IGdldEFjdGl2ZURpcmVjdGl2ZVN1cGVyQ2xhc3NIZWlnaHQoKSA+IDA7XG4gIGlmIChpc0NsYXNzQmFzZWQpIHtcbiAgICB1cGRhdGVDbGFzc0JpbmRpbmcoXG4gICAgICAgIGdldENsYXNzZXNDb250ZXh0KHROb2RlKSwgbFZpZXcsIHByb3AsIGJpbmRpbmdJbmRleCwgdmFsdWUgYXMgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwsXG4gICAgICAgIGRlZmVyLCBmYWxzZSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc2FuaXRpemVyID0gZ2V0Q3VycmVudE9yTFZpZXdTYW5pdGl6ZXIobFZpZXcpO1xuICAgIHVwZGF0ZVN0eWxlQmluZGluZyhcbiAgICAgICAgZ2V0U3R5bGVzQ29udGV4dCh0Tm9kZSksIGxWaWV3LCBwcm9wLCBiaW5kaW5nSW5kZXgsIHZhbHVlIGFzIHN0cmluZyB8IG51bGwsIHNhbml0aXplcixcbiAgICAgICAgZGVmZXIsIGZhbHNlKTtcbiAgfVxufVxuXG4vKipcbiAqIE1pcnJvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHN0eWxlTWFwKClgIGluc3RydWN0aW9uIChmb3VuZCBpbiBgaW5zdHJ1Y3Rpb25zL3N0eWxpbmcudHNgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlTWFwKHN0eWxlczoge1tzdHlsZU5hbWU6IHN0cmluZ106IGFueX0gfCBOT19DSEFOR0UgfCBudWxsKTogdm9pZCB7XG4gIF9zdHlsaW5nTWFwKHN0eWxlcywgZmFsc2UpO1xufVxuXG4vKipcbiAqIE1pcnJvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYGNsYXNzTWFwKClgIGluc3RydWN0aW9uIChmb3VuZCBpbiBgaW5zdHJ1Y3Rpb25zL3N0eWxpbmcudHNgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzTWFwKGNsYXNzZXM6IHtbY2xhc3NOYW1lOiBzdHJpbmddOiBhbnl9IHwgTk9fQ0hBTkdFIHwgc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICBfc3R5bGluZ01hcChjbGFzc2VzLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBTaGFyZWQgZnVuY3Rpb24gdXNlZCB0byB1cGRhdGUgYSBtYXAtYmFzZWQgc3R5bGluZyBiaW5kaW5nIGZvciBhbiBlbGVtZW50LlxuICpcbiAqIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaXQgd2lsbCBhY3RpdmF0ZSBzdXBwb3J0IGZvciBgW3N0eWxlXWAgYW5kXG4gKiBgW2NsYXNzXWAgYmluZGluZ3MgaW4gQW5ndWxhci5cbiAqL1xuZnVuY3Rpb24gX3N0eWxpbmdNYXAodmFsdWU6IHtba2V5OiBzdHJpbmddOiBhbnl9IHwgc3RyaW5nIHwgbnVsbCwgaXNDbGFzc0Jhc2VkOiBib29sZWFuKSB7XG4gIGFjdGl2ZVN0eWxpbmdNYXBGZWF0dXJlKCk7XG4gIGNvbnN0IGluZGV4ID0gZ2V0U2VsZWN0ZWRJbmRleCgpO1xuICBjb25zdCBsVmlldyA9IGdldExWaWV3KCk7XG4gIGNvbnN0IGJpbmRpbmdJbmRleCA9IGxWaWV3W0JJTkRJTkdfSU5ERVhdKys7XG5cbiAgaWYgKHZhbHVlICE9PSBOT19DSEFOR0UpIHtcbiAgICBjb25zdCB0Tm9kZSA9IGdldFROb2RlKGluZGV4LCBsVmlldyk7XG4gICAgY29uc3QgZGVmZXIgPSBnZXRBY3RpdmVEaXJlY3RpdmVTdXBlckNsYXNzSGVpZ2h0KCkgPiAwO1xuICAgIGNvbnN0IG9sZFZhbHVlID0gbFZpZXdbYmluZGluZ0luZGV4XTtcbiAgICBjb25zdCB2YWx1ZUhhc0NoYW5nZWQgPSBoYXNWYWx1ZUNoYW5nZWQob2xkVmFsdWUsIHZhbHVlKTtcbiAgICBjb25zdCBsU3R5bGluZ01hcCA9IG5vcm1hbGl6ZUludG9TdHlsaW5nTWFwKG9sZFZhbHVlLCB2YWx1ZSk7XG4gICAgaWYgKGlzQ2xhc3NCYXNlZCkge1xuICAgICAgdXBkYXRlQ2xhc3NCaW5kaW5nKFxuICAgICAgICAgIGdldENsYXNzZXNDb250ZXh0KHROb2RlKSwgbFZpZXcsIG51bGwsIGJpbmRpbmdJbmRleCwgbFN0eWxpbmdNYXAsIGRlZmVyLCB2YWx1ZUhhc0NoYW5nZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzYW5pdGl6ZXIgPSBnZXRDdXJyZW50T3JMVmlld1Nhbml0aXplcihsVmlldyk7XG4gICAgICB1cGRhdGVTdHlsZUJpbmRpbmcoXG4gICAgICAgICAgZ2V0U3R5bGVzQ29udGV4dCh0Tm9kZSksIGxWaWV3LCBudWxsLCBiaW5kaW5nSW5kZXgsIGxTdHlsaW5nTWFwLCBzYW5pdGl6ZXIsIGRlZmVyLFxuICAgICAgICAgIHZhbHVlSGFzQ2hhbmdlZCk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVGVtcG9yYXJ5IGZ1bmN0aW9uIHRvIGJyaWRnZSBzdHlsaW5nIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGlzIG5ld1xuICogcmVmYWN0b3IgKHdoaWNoIGlzIGhlcmUgaW5zaWRlIG9mIGBzdHlsaW5nX25leHQvYCkgYW5kIHRoZSBvbGRcbiAqIGltcGxlbWVudGF0aW9uICh3aGljaCBsaXZlcyBpbnNpZGUgb2YgYHN0eWxpbmcvYCkuXG4gKlxuICogVGhlIG5ldyBzdHlsaW5nIHJlZmFjdG9yIGVuc3VyZXMgdGhhdCBzdHlsaW5nIGZsdXNoaW5nIGlzIGNhbGxlZFxuICogYXV0b21hdGljYWxseSB3aGVuIGEgdGVtcGxhdGUgZnVuY3Rpb24gZXhpdHMgb3IgYSBmb2xsb3ctdXAgZWxlbWVudFxuICogaXMgdmlzaXRlZCAoaS5lLiB3aGVuIGBzZWxlY3QobilgIGlzIGNhbGxlZCkuIEJlY2F1c2UgdGhlIGBzZWxlY3QobilgXG4gKiBpbnN0cnVjdGlvbiBpcyBub3QgZnVsbHkgaW1wbGVtZW50ZWQgeWV0IChpdCBkb2Vzbid0IGFjdHVhbGx5IGV4ZWN1dGVcbiAqIGhvc3QgYmluZGluZyBpbnN0cnVjdGlvbiBjb2RlIGF0IHRoZSByaWdodCB0aW1lKSwgdGhpcyBtZWFucyB0aGF0IGFcbiAqIHN0eWxpbmcgYXBwbHkgZnVuY3Rpb24gaXMgc3RpbGwgbmVlZGVkLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgYSBtaXJyb3IgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBzdHlsaW5nQXBwbHkoKWBcbiAqIGluc3RydWN0aW9uIChmb3VuZCBpbiBgaW5zdHJ1Y3Rpb25zL3N0eWxpbmcudHNgKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0eWxpbmdBcHBseSgpIHtcbiAgY29uc3QgaW5kZXggPSBnZXRTZWxlY3RlZEluZGV4KCk7XG4gIGNvbnN0IGxWaWV3ID0gZ2V0TFZpZXcoKTtcbiAgY29uc3QgdE5vZGUgPSBnZXRUTm9kZShpbmRleCwgbFZpZXcpO1xuICBjb25zdCByZW5kZXJlciA9IGdldFJlbmRlcmVyKHROb2RlLCBsVmlldyk7XG4gIGNvbnN0IG5hdGl2ZSA9IGdldE5hdGl2ZUZyb21MVmlldyhpbmRleCwgbFZpZXcpO1xuICBjb25zdCBkaXJlY3RpdmVJbmRleCA9IGdldEFjdGl2ZURpcmVjdGl2ZVN0eWxpbmdJbmRleCgpO1xuICBhcHBseUNsYXNzZXMocmVuZGVyZXIsIGxWaWV3LCBnZXRDbGFzc2VzQ29udGV4dCh0Tm9kZSksIG5hdGl2ZSwgZGlyZWN0aXZlSW5kZXgpO1xuXG4gIGNvbnN0IHNhbml0aXplciA9IGdldEN1cnJlbnRPckxWaWV3U2FuaXRpemVyKGxWaWV3KTtcbiAgYXBwbHlTdHlsZXMocmVuZGVyZXIsIGxWaWV3LCBnZXRTdHlsZXNDb250ZXh0KHROb2RlKSwgbmF0aXZlLCBkaXJlY3RpdmVJbmRleCwgc2FuaXRpemVyKTtcblxuICBzZXRDdXJyZW50U3R5bGVTYW5pdGl6ZXIobnVsbCk7XG59XG5cbi8qKlxuICogVGVtcG9yYXJ5IGZ1bmN0aW9uIHRvIGJyaWRnZSBzdHlsaW5nIGZ1bmN0aW9uYWxpdHkgYmV0d2VlbiB0aGlzIG5ld1xuICogcmVmYWN0b3IgKHdoaWNoIGlzIGhlcmUgaW5zaWRlIG9mIGBzdHlsaW5nX25leHQvYCkgYW5kIHRoZSBvbGRcbiAqIGltcGxlbWVudGF0aW9uICh3aGljaCBsaXZlcyBpbnNpZGUgb2YgYHN0eWxpbmcvYCkuXG4gKlxuICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byB0cmF2ZXJzZSB0aHJvdWdoIHRoZSBMVmlldyBkYXRhXG4gKiBmb3IgYSBzcGVjaWZpYyBlbGVtZW50IGluZGV4IGFuZCByZXR1cm4gdGhlIG5hdGl2ZSBub2RlLiBCZWNhdXNlIHRoZVxuICogY3VycmVudCBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gdGhlcmUgYmVpbmcgYSBzdHlsaW5nIGNvbnRleHQgYXJyYXksXG4gKiB0aGUgY29kZSBiZWxvdyB3aWxsIG5lZWQgdG8gbG9vcCB0aHJvdWdoIHRoZXNlIGFycmF5IHZhbHVlcyB1bnRpbCBpdFxuICogZ2V0cyBhIG5hdGl2ZSBlbGVtZW50IG5vZGUuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgY29kZSBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgZGlzYXBwZWFyIG9uY2UgdGhlIG5ld1xuICogc3R5bGluZyByZWZhY3RvciBsYW5kcyBpbiBpdHMgZW50aXJldHkuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZUZyb21MVmlldyhpbmRleDogbnVtYmVyLCB2aWV3RGF0YTogTFZpZXcpOiBSRWxlbWVudCB7XG4gIGxldCBzdG9yYWdlSW5kZXggPSBpbmRleCArIEhFQURFUl9PRkZTRVQ7XG4gIGxldCBzbG90VmFsdWU6IExDb250YWluZXJ8TFZpZXd8T2xkU3R5bGluZ0NvbnRleHR8UkVsZW1lbnQgPSB2aWV3RGF0YVtzdG9yYWdlSW5kZXhdO1xuICBsZXQgd3JhcHBlcjogTENvbnRhaW5lcnxMVmlld3xPbGRTdHlsaW5nQ29udGV4dCA9IHZpZXdEYXRhO1xuICB3aGlsZSAoQXJyYXkuaXNBcnJheShzbG90VmFsdWUpKSB7XG4gICAgd3JhcHBlciA9IHNsb3RWYWx1ZTtcbiAgICBzbG90VmFsdWUgPSBzbG90VmFsdWVbSE9TVF0gYXMgTFZpZXcgfCBPbGRTdHlsaW5nQ29udGV4dCB8IFJFbGVtZW50O1xuICB9XG4gIGlmIChpc09sZFN0eWxpbmdDb250ZXh0KHdyYXBwZXIpKSB7XG4gICAgcmV0dXJuIHdyYXBwZXJbT2xkU3R5bGluZ0luZGV4LkVsZW1lbnRQb3NpdGlvbl0gYXMgUkVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHNsb3RWYWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSZW5kZXJlcih0Tm9kZTogVE5vZGUsIGxWaWV3OiBMVmlldykge1xuICByZXR1cm4gdE5vZGUudHlwZSA9PT0gVE5vZGVUeXBlLkVsZW1lbnQgPyBsVmlld1tSRU5ERVJFUl0gOiBudWxsO1xufVxuXG4vKipcbiAqIFNlYXJjaGVzIGFuZCBhc3NpZ25zIHByb3ZpZGVkIGFsbCBzdGF0aWMgc3R5bGUvY2xhc3MgZW50cmllcyAoZm91bmQgaW4gdGhlIGBhdHRyc2AgdmFsdWUpXG4gKiBhbmQgcmVnaXN0ZXJzIHRoZW0gaW4gdGhlaXIgcmVzcGVjdGl2ZSBzdHlsaW5nIGNvbnRleHRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJJbml0aWFsU3R5bGluZ0ludG9Db250ZXh0KFxuICAgIHROb2RlOiBUTm9kZSwgYXR0cnM6IFRBdHRyaWJ1dGVzLCBzdGFydEluZGV4OiBudW1iZXIpIHtcbiAgbGV0IGNsYXNzZXNDb250ZXh0ICE6IFRTdHlsaW5nQ29udGV4dDtcbiAgbGV0IHN0eWxlc0NvbnRleHQgITogVFN0eWxpbmdDb250ZXh0O1xuICBsZXQgbW9kZSA9IC0xO1xuICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXR0ciA9IGF0dHJzW2ldO1xuICAgIGlmICh0eXBlb2YgYXR0ciA9PSAnbnVtYmVyJykge1xuICAgICAgbW9kZSA9IGF0dHI7XG4gICAgfSBlbHNlIGlmIChtb2RlID09IEF0dHJpYnV0ZU1hcmtlci5DbGFzc2VzKSB7XG4gICAgICBjbGFzc2VzQ29udGV4dCA9IGNsYXNzZXNDb250ZXh0IHx8IGdldENsYXNzZXNDb250ZXh0KHROb2RlKTtcbiAgICAgIHJlZ2lzdGVyQmluZGluZyhjbGFzc2VzQ29udGV4dCwgLTEsIGF0dHIgYXMgc3RyaW5nLCB0cnVlLCBmYWxzZSk7XG4gICAgfSBlbHNlIGlmIChtb2RlID09IEF0dHJpYnV0ZU1hcmtlci5TdHlsZXMpIHtcbiAgICAgIHN0eWxlc0NvbnRleHQgPSBzdHlsZXNDb250ZXh0IHx8IGdldFN0eWxlc0NvbnRleHQodE5vZGUpO1xuICAgICAgcmVnaXN0ZXJCaW5kaW5nKHN0eWxlc0NvbnRleHQsIC0xLCBhdHRyIGFzIHN0cmluZywgYXR0cnNbKytpXSBhcyBzdHJpbmcsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBNaXJyb3IgaW1wbGVtZW50YXRpb24gb2YgdGhlIHNhbWUgZnVuY3Rpb24gZm91bmQgaW4gYGluc3RydWN0aW9ucy9zdHlsaW5nLnRzYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZURpcmVjdGl2ZVN0eWxpbmdJbmRleCgpOiBudW1iZXIge1xuICAvLyB3aGVuZXZlciBhIGRpcmVjdGl2ZSdzIGhvc3RCaW5kaW5ncyBmdW5jdGlvbiBpcyBjYWxsZWQgYSB1bmlxdWVJZCB2YWx1ZVxuICAvLyBpcyBhc3NpZ25lZC4gTm9ybWFsbHkgdGhpcyBpcyBlbm91Z2ggdG8gaGVscCBkaXN0aW5ndWlzaCBvbmUgZGlyZWN0aXZlXG4gIC8vIGZyb20gYW5vdGhlciBmb3IgdGhlIHN0eWxpbmcgY29udGV4dCwgYnV0IHRoZXJlIGFyZSBzaXR1YXRpb25zIHdoZXJlIGFcbiAgLy8gc3ViLWNsYXNzIGRpcmVjdGl2ZSBjb3VsZCBpbmhlcml0IGFuZCBhc3NpZ24gc3R5bGluZyBpbiBjb25jZXJ0IHdpdGggYVxuICAvLyBwYXJlbnQgZGlyZWN0aXZlLiBUbyBoZWxwIHRoZSBzdHlsaW5nIGNvZGUgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhIHBhcmVudFxuICAvLyBzdWItY2xhc3NlZCBkaXJlY3RpdmUgdGhlIGluaGVyaXRhbmNlIGRlcHRoIGlzIHRha2VuIGludG8gYWNjb3VudCBhcyB3ZWxsLlxuICByZXR1cm4gZ2V0QWN0aXZlRGlyZWN0aXZlSWQoKSArIGdldEFjdGl2ZURpcmVjdGl2ZVN1cGVyQ2xhc3NEZXB0aCgpO1xufVxuXG4vKipcbiAqIFRlbXBvcmFyeSBmdW5jdGlvbiB0aGF0IHdpbGwgdXBkYXRlIHRoZSBtYXggZGlyZWN0aXZlIGluZGV4IHZhbHVlIGluXG4gKiBib3RoIHRoZSBjbGFzc2VzIGFuZCBzdHlsZXMgY29udGV4dHMgcHJlc2VudCBvbiB0aGUgcHJvdmlkZWQgYHROb2RlYC5cbiAqXG4gKiBUaGlzIGNvZGUgaXMgb25seSB1c2VkIGJlY2F1c2UgdGhlIGBzZWxlY3QobilgIGNvZGUgZnVuY3Rpb25hbGl0eSBpcyBub3RcbiAqIHlldCAxMDAlIGZ1bmN0aW9uYWwuIFRoZSBgc2VsZWN0KG4pYCBpbnN0cnVjdGlvbiBjYW5ub3QgeWV0IGV2YWx1YXRlIGhvc3RcbiAqIGJpbmRpbmdzIGZ1bmN0aW9uIGNvZGUgaW4gc3luYyB3aXRoIHRoZSBhc3NvY2lhdGVkIHRlbXBsYXRlIGZ1bmN0aW9uIGNvZGUuXG4gKiBGb3IgdGhpcyByZWFzb24gdGhlIHN0eWxpbmcgYWxnb3JpdGhtIG5lZWRzIHRvIHRyYWNrIHRoZSBsYXN0IGRpcmVjdGl2ZSBpbmRleFxuICogdmFsdWUgc28gdGhhdCBpdCBrbm93cyBleGFjdGx5IHdoZW4gdG8gcmVuZGVyIHN0eWxpbmcgdG8gdGhlIGVsZW1lbnQgc2luY2VcbiAqIGBzdHlsaW5nQXBwbHkoKWAgaXMgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHBlciBDRCAoYHN0eWxpbmdBcHBseWAgd2lsbCBiZVxuICogcmVtb3ZlZCBvbmNlIGBzZWxlY3QobilgIGlzIGZpeGVkKS5cbiAqL1xuZnVuY3Rpb24gdXBkYXRlTGFzdERpcmVjdGl2ZUluZGV4KHROb2RlOiBUTm9kZSwgZGlyZWN0aXZlSW5kZXg6IG51bWJlcikge1xuICB1cGRhdGVDb250ZXh0RGlyZWN0aXZlSW5kZXgoZ2V0Q2xhc3Nlc0NvbnRleHQodE5vZGUpLCBkaXJlY3RpdmVJbmRleCk7XG4gIHVwZGF0ZUNvbnRleHREaXJlY3RpdmVJbmRleChnZXRTdHlsZXNDb250ZXh0KHROb2RlKSwgZGlyZWN0aXZlSW5kZXgpO1xufVxuXG5mdW5jdGlvbiBnZXRTdHlsZXNDb250ZXh0KHROb2RlOiBUTm9kZSk6IFRTdHlsaW5nQ29udGV4dCB7XG4gIHJldHVybiBnZXRDb250ZXh0KHROb2RlLCBmYWxzZSk7XG59XG5cbmZ1bmN0aW9uIGdldENsYXNzZXNDb250ZXh0KHROb2RlOiBUTm9kZSk6IFRTdHlsaW5nQ29udGV4dCB7XG4gIHJldHVybiBnZXRDb250ZXh0KHROb2RlLCB0cnVlKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zL2luc3RhbnRpYXRlcyBhIHN0eWxpbmcgY29udGV4dCBmcm9tL3RvIGEgYHROb2RlYCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udGV4dCh0Tm9kZTogVE5vZGUsIGlzQ2xhc3NCYXNlZDogYm9vbGVhbikge1xuICBsZXQgY29udGV4dCA9IGlzQ2xhc3NCYXNlZCA/IHROb2RlLm5ld0NsYXNzZXMgOiB0Tm9kZS5uZXdTdHlsZXM7XG4gIGlmICghY29udGV4dCkge1xuICAgIGNvbnRleHQgPSBhbGxvY1RTdHlsaW5nQ29udGV4dCgpO1xuICAgIGlmIChuZ0Rldk1vZGUpIHtcbiAgICAgIGF0dGFjaFN0eWxpbmdEZWJ1Z09iamVjdChjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKGlzQ2xhc3NCYXNlZCkge1xuICAgICAgdE5vZGUubmV3Q2xhc3NlcyA9IGNvbnRleHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHROb2RlLm5ld1N0eWxlcyA9IGNvbnRleHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlU3R5bGVQcm9wVmFsdWUoXG4gICAgdmFsdWU6IHN0cmluZyB8IG51bWJlciB8IFN0cmluZyB8IG51bGwsIHN1ZmZpeDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICBsZXQgcmVzb2x2ZWRWYWx1ZTogc3RyaW5nfG51bGwgPSBudWxsO1xuICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICBpZiAoc3VmZml4KSB7XG4gICAgICAvLyB3aGVuIGEgc3VmZml4IGlzIGFwcGxpZWQgdGhlbiBpdCB3aWxsIGJ5cGFzc1xuICAgICAgLy8gc2FuaXRpemF0aW9uIGVudGlyZWx5IChiL2MgYSBuZXcgc3RyaW5nIGlzIGNyZWF0ZWQpXG4gICAgICByZXNvbHZlZFZhbHVlID0gcmVuZGVyU3RyaW5naWZ5KHZhbHVlKSArIHN1ZmZpeDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc2FuaXRpemF0aW9uIGhhcHBlbnMgYnkgZGVhbGluZyB3aXRoIGEgU3RyaW5nIHZhbHVlXG4gICAgICAvLyB0aGlzIG1lYW5zIHRoYXQgdGhlIHN0cmluZyB2YWx1ZSB3aWxsIGJlIHBhc3NlZCB0aHJvdWdoXG4gICAgICAvLyBpbnRvIHRoZSBzdHlsZSByZW5kZXJpbmcgbGF0ZXIgKHdoaWNoIGlzIHdoZXJlIHRoZSB2YWx1ZVxuICAgICAgLy8gd2lsbCBiZSBzYW5pdGl6ZWQgYmVmb3JlIGl0IGlzIGFwcGxpZWQpXG4gICAgICByZXNvbHZlZFZhbHVlID0gdmFsdWUgYXMgYW55IGFzIHN0cmluZztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkVmFsdWU7XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvc3R5bGluZ19uZXh0L2ludGVyZmFjZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuKiBAbGljZW5zZVxuKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbipcbiogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuKi9cbmltcG9ydCB7U3R5bGVTYW5pdGl6ZUZufSBmcm9tICcuLi8uLi9zYW5pdGl6YXRpb24vc3R5bGVfc2FuaXRpemVyJztcbmltcG9ydCB7UHJvY2VkdXJhbFJlbmRlcmVyMywgUkVsZW1lbnQsIFJlbmRlcmVyM30gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZW5kZXJlcic7XG5pbXBvcnQge0xWaWV3fSBmcm9tICcuLi9pbnRlcmZhY2VzL3ZpZXcnO1xuXG4vKipcbiAqIC0tLS0tLS0tXG4gKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb3JlIGludGVyZmFjZXMgZm9yIHN0eWxpbmcgaW4gQW5ndWxhci5cbiAqXG4gKiBUbyBsZWFybiBtb3JlIGFib3V0IHRoZSBhbGdvcml0aG0gc2VlIGBUU3R5bGluZ0NvbnRleHRgLlxuICpcbiAqIC0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiBBIHN0YXRpYy1sZXZlbCByZXByZXNlbnRhdGlvbiBvZiBhbGwgc3R5bGUgb3IgY2xhc3MgYmluZGluZ3MvdmFsdWVzXG4gKiBhc3NvY2lhdGVkIHdpdGggYSBgVE5vZGVgLlxuICpcbiAqIFRoZSBgVFN0eWxpbmdDb250ZXh0YCB1bml0ZXMgYWxsIHRlbXBsYXRlIHN0eWxpbmcgYmluZGluZ3MgKGkuZS5cbiAqIGBbY2xhc3NdYCBhbmQgYFtzdHlsZV1gIGJpbmRpbmdzKSBhcyB3ZWxsIGFzIGFsbCBob3N0LWxldmVsXG4gKiBzdHlsaW5nIGJpbmRpbmdzIChmb3IgY29tcG9uZW50cyBhbmQgZGlyZWN0aXZlcykgdG9nZXRoZXIgaW50b1xuICogYSBzaW5nbGUgbWFuaWZlc3QuIEl0IGlzIHVzZWQgZWFjaCB0aW1lIHRoZXJlIGFyZSBvbmUgb3IgbW9yZVxuICogc3R5bGluZyBiaW5kaW5ncyBwcmVzZW50IGZvciBhbiBlbGVtZW50LlxuICpcbiAqIFRoZSBzdHlsaW5nIGNvbnRleHQgaXMgc3RvcmVkIG9uIGEgYFROb2RlYCBvbiBhbmQgdGhlcmUgYXJlXG4gKiB0d28gaW5zdGFuY2VzIG9mIGl0OiBvbmUgZm9yIGNsYXNzZXMgYW5kIGFub3RoZXIgZm9yIHN0eWxlcy5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB0Tm9kZS5zdHlsZXMgPSBbIC4uLiBhIGNvbnRleHQgb25seSBmb3Igc3R5bGVzIC4uLiBdO1xuICogdE5vZGUuY2xhc3NlcyA9IFsgLi4uIGEgY29udGV4dCBvbmx5IGZvciBjbGFzc2VzIC4uLiBdO1xuICogYGBgXG4gKlxuICogRHVlIHRvIHRoZSBmYWN0IHRoZSB0aGUgYFRTdHlsaW5nQ29udGV4dGAgaXMgc3RvcmVkIG9uIGEgYFROb2RlYFxuICogdGhpcyBtZWFucyB0aGF0IGFsbCBkYXRhIHdpdGhpbiB0aGUgY29udGV4dCBpcyBzdGF0aWMuIEluc3RlYWQgb2ZcbiAqIHN0b3JpbmcgYWN0dWFsIHN0eWxpbmcgYmluZGluZyB2YWx1ZXMsIHRoZSBsVmlldyBiaW5kaW5nIGluZGV4IHZhbHVlc1xuICogYXJlIHN0b3JlZCB3aXRoaW4gdGhlIGNvbnRleHQuIChzdGF0aWMgbmF0dXJlIG1lYW5zIGl0IGlzIG1vcmUgY29tcGFjdC4pXG5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyA8ZGl2IFtjbGFzcy5hY3RpdmVdPVwiY1wiICAvLyBsVmlldyBiaW5kaW5nIGluZGV4ID0gMjBcbiAqIC8vICAgICAgW3N0eWxlLndpZHRoXT1cInhcIiAgIC8vIGxWaWV3IGJpbmRpbmcgaW5kZXggPSAyMVxuICogLy8gICAgICBbc3R5bGUuaGVpZ2h0XT1cInlcIj4gLy8gbFZpZXcgYmluZGluZyBpbmRleCA9IDIyXG4gKiB0Tm9kZS5zdHlsZXNDb250ZXh0ID0gW1xuICogICAwLCAvLyB0aGUgY29udGV4dCBjb25maWcgdmFsdWVcbiAqXG4gKiAgIDBiMDAxLCAvLyBndWFyZCBtYXNrIGZvciB3aWR0aFxuICogICAyLCAvLyB0b3RhbCBlbnRyaWVzIGZvciB3aWR0aFxuICogICAnd2lkdGgnLCAvLyB0aGUgcHJvcGVydHkgbmFtZVxuICogICAyMSwgLy8gdGhlIGJpbmRpbmcgbG9jYXRpb24gZm9yIHRoZSBcInhcIiBiaW5kaW5nIGluIHRoZSBsVmlld1xuICogICBudWxsLFxuICpcbiAqICAgMGIwMTAsIC8vIGd1YXJkIG1hc2sgZm9yIGhlaWdodFxuICogICAyLCAvLyB0b3RhbCBlbnRyaWVzIGZvciBoZWlnaHRcbiAqICAgJ2hlaWdodCcsIC8vIHRoZSBwcm9wZXJ0eSBuYW1lXG4gKiAgIDIyLCAvLyB0aGUgYmluZGluZyBsb2NhdGlvbiBmb3IgdGhlIFwieVwiIGJpbmRpbmcgaW4gdGhlIGxWaWV3XG4gKiAgIG51bGwsXG4gKiBdO1xuICpcbiAqIHROb2RlLmNsYXNzZXNDb250ZXh0ID0gW1xuICogICAwLCAvLyB0aGUgY29udGV4dCBjb25maWcgdmFsdWVcbiAqXG4gKiAgIDBiMDAxLCAvLyBndWFyZCBtYXNrIGZvciBhY3RpdmVcbiAqICAgMiwgLy8gdG90YWwgZW50cmllcyBmb3IgYWN0aXZlXG4gKiAgICdhY3RpdmUnLCAvLyB0aGUgcHJvcGVydHkgbmFtZVxuICogICAyMCwgLy8gdGhlIGJpbmRpbmcgbG9jYXRpb24gZm9yIHRoZSBcImNcIiBiaW5kaW5nIGluIHRoZSBsVmlld1xuICogICBudWxsLFxuICogXTtcbiAqIGBgYFxuICpcbiAqIEVudHJ5IHZhbHVlIHByZXNlbnQgaW4gYW4gZW50cnkgKGNhbGxlZCBhIHR1cGxlKSB3aXRoaW4gdGhlXG4gKiBzdHlsaW5nIGNvbnRleHQgaXMgYXMgZm9sbG93czpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb250ZXh0ID0gW1xuICogICBDT05GSUcsIC8vIHRoZSBzdHlsaW5nIGNvbnRleHQgY29uZmlnIHZhbHVlXG4gKiAgIC8vLi4uXG4gKiAgIGd1YXJkTWFzayxcbiAqICAgdG90YWxFbnRyaWVzLFxuICogICBwcm9wTmFtZSxcbiAqICAgYmluZGluZ0luZGljZXMuLi4sXG4gKiAgIGRlZmF1bHRWYWx1ZVxuICogXTtcbiAqIGBgYFxuICpcbiAqIEJlbG93IGlzIGEgYnJlYWtkb3duIG9mIGVhY2ggdmFsdWU6XG4gKlxuICogLSAqKmd1YXJkTWFzayoqOlxuICogICBBIG51bWVyaWMgdmFsdWUgd2hlcmUgZWFjaCBiaXQgcmVwcmVzZW50cyBhIGJpbmRpbmcgaW5kZXhcbiAqICAgbG9jYXRpb24uIEVhY2ggYmluZGluZyBpbmRleCBsb2NhdGlvbiBpcyBhc3NpZ25lZCBiYXNlZCBvblxuICogICBhIGxvY2FsIGNvdW50ZXIgdmFsdWUgdGhhdCBpbmNyZW1lbnRzIGVhY2ggdGltZSBhbiBpbnN0cnVjdGlvblxuICogICBpcyBjYWxsZWQ6XG4gKlxuICogYGBgXG4gKiA8ZGl2IFtzdHlsZS53aWR0aF09XCJ4XCIgICAvLyBiaW5kaW5nIGluZGV4ID0gMjEgKGNvdW50ZXIgaW5kZXggPSAwKVxuICogICAgICBbc3R5bGUuaGVpZ2h0XT1cInlcIj4gLy8gYmluZGluZyBpbmRleCA9IDIyIChjb3VudGVyIGluZGV4ID0gMSlcbiAqIGBgYFxuICpcbiAqICAgSW4gdGhlIGV4YW1wbGUgY29kZSBhYm92ZSwgaWYgdGhlIGB3aWR0aGAgdmFsdWUgd2hlcmUgdG8gY2hhbmdlXG4gKiAgIHRoZW4gdGhlIGZpcnN0IGJpdCBpbiB0aGUgbG9jYWwgYml0IG1hc2sgdmFsdWUgd291bGQgYmUgZmxpcHBlZFxuICogICAoYW5kIHRoZSBzZWNvbmQgYml0IGZvciB3aGVuIGBoZWlnaHRgKS5cbiAqXG4gKiAgIElmIGFuZCB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gMzIgYmluZGluZyBzb3VyY2VzIGluIHRoZSBjb250ZXh0XG4gKiAgIChtb3JlIHRoYW4gMzIgYFtzdHlsZS9jbGFzc11gIGJpbmRpbmdzKSB0aGVuIHRoZSBiaXQgbWFza2luZyB3aWxsXG4gKiAgIG92ZXJmbG93IGFuZCB3ZSBhcmUgbGVmdCB3aXRoIGEgc2l0dWF0aW9uIHdoZXJlIGEgYC0xYCB2YWx1ZSB3aWxsXG4gKiAgIHJlcHJlc2VudCB0aGUgYml0IG1hc2suIER1ZSB0byB0aGUgd2F5IHRoYXQgSmF2YVNjcmlwdCBoYW5kbGVzXG4gKiAgIG5lZ2F0aXZlIHZhbHVlcywgd2hlbiB0aGUgYml0IG1hc2sgaXMgYC0xYCB0aGVuIGFsbCBiaXRzIHdpdGhpblxuICogICB0aGF0IHZhbHVlIHdpbGwgYmUgYXV0b21hdGljYWxseSBmbGlwcGVkICh0aGlzIGlzIGEgcXVpY2sgYW5kXG4gKiAgIGVmZmljaWVudCB3YXkgdG8gZmxpcCBhbGwgYml0cyBvbiB0aGUgbWFzayB3aGVuIGEgc3BlY2lhbCBraW5kXG4gKiAgIG9mIGNhY2hpbmcgc2NlbmFyaW8gb2NjdXJzIG9yIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiAzMiBiaW5kaW5ncykuXG4gKlxuICogLSAqKnRvdGFsRW50cmllcyoqOlxuICogICBFYWNoIHByb3BlcnR5IHByZXNlbnQgaW4gdGhlIGNvbnRhaW5zIHZhcmlvdXMgYmluZGluZyBzb3VyY2VzIG9mXG4gKiAgIHdoZXJlIHRoZSBzdHlsaW5nIGRhdGEgY291bGQgY29tZSBmcm9tLiBUaGlzIGluY2x1ZGVzIHRlbXBsYXRlXG4gKiAgIGxldmVsIGJpbmRpbmdzLCBkaXJlY3RpdmUvY29tcG9uZW50IGhvc3QgYmluZGluZ3MgYXMgd2VsbCBhcyB0aGVcbiAqICAgZGVmYXVsdCB2YWx1ZSAob3Igc3RhdGljIHZhbHVlKSBhbGwgd3JpdGluZyB0byB0aGUgc2FtZSBwcm9wZXJ0eS5cbiAqICAgVGhpcyB2YWx1ZSBkZXBpY3RzIGhvdyBtYW55IGJpbmRpbmcgc291cmNlIGVudHJpZXMgZXhpc3QgZm9yIHRoZVxuICogICBwcm9wZXJ0eS5cbiAqXG4gKiAgIFRoZSByZWFzb24gd2h5IHRoZSB0b3RhbEVudHJpZXMgdmFsdWUgaXMgbmVlZGVkIGlzIGJlY2F1c2UgdGhlXG4gKiAgIHN0eWxpbmcgY29udGV4dCBpcyBkeW5hbWljIGluIHNpemUgYW5kIGl0J3Mgbm90IHBvc3NpYmxlXG4gKiAgIGZvciB0aGUgZmx1c2hpbmcgb3IgdXBkYXRlIGFsZ29yaXRobXMgdG8ga25vdyB3aGVuIGFuZCB3aGVyZVxuICogICBhIHByb3BlcnR5IHN0YXJ0cyBhbmQgZW5kcyB3aXRob3V0IGl0LlxuICpcbiAqIC0gKipwcm9wTmFtZSoqOlxuICogICBUaGUgQ1NTIHByb3BlcnR5IG5hbWUgb3IgY2xhc3MgbmFtZSAoZS5nIGB3aWR0aGAgb3IgYGFjdGl2ZWApLlxuICpcbiAqIC0gKipiaW5kaW5nSW5kaWNlcy4uLioqOlxuICogICBBIHNlcmllcyBvZiBudW1lcmljIGJpbmRpbmcgdmFsdWVzIHRoYXQgcmVmbGVjdCB3aGVyZSBpbiB0aGVcbiAqICAgbFZpZXcgdG8gZmluZCB0aGUgc3R5bGUvY2xhc3MgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvcGVydHkuXG4gKiAgIEVhY2ggdmFsdWUgaXMgaW4gb3JkZXIgaW4gdGVybXMgb2YgcHJpb3JpdHkgKHRlbXBsYXRlcyBhcmUgZmlyc3QsXG4gKiAgIHRoZW4gZGlyZWN0aXZlcyBhbmQgdGhlbiBjb21wb25lbnRzKS4gV2hlbiB0aGUgY29udGV4dCBpcyBmbHVzaGVkXG4gKiAgIGFuZCB0aGUgc3R5bGUvY2xhc3MgdmFsdWVzIGFyZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50ICh0aGlzIGhhcHBlbnNcbiAqICAgaW5zaWRlIG9mIHRoZSBgc3R5bGluZ0FwcGx5YCBpbnN0cnVjdGlvbikgdGhlbiB0aGUgZmx1c2hpbmcgY29kZVxuICogICB3aWxsIGtlZXAgY2hlY2tpbmcgZWFjaCBiaW5kaW5nIGluZGV4IGFnYWluc3QgdGhlIGFzc29jaWF0ZWQgbFZpZXdcbiAqICAgdG8gZmluZCB0aGUgZmlyc3Qgc3R5bGUvY2xhc3MgdmFsdWUgdGhhdCBpcyBub24tbnVsbC5cbiAqXG4gKiAtICoqZGVmYXVsdFZhbHVlKio6XG4gKiAgIFRoaXMgaXMgdGhlIGRlZmF1bHQgdGhhdCB3aWxsIGFsd2F5cyBiZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IGlmXG4gKiAgIGFuZCB3aGVuIGFsbCBvdGhlciBiaW5kaW5nIHNvdXJjZXMgcmV0dXJuIGEgcmVzdWx0IHRoYXQgaXMgbnVsbC5cbiAqICAgVXN1YWxseSB0aGlzIHZhbHVlIGlzIG51bGwgYnV0IGl0IGNhbiBhbHNvIGJlIGEgc3RhdGljIHZhbHVlIHRoYXRcbiAqICAgaXMgaW50ZXJjZXB0ZWQgd2hlbiB0aGUgdE5vZGUgaXMgZmlyc3QgY29uc3RydWN0dXJlZCAoZS5nLlxuICogICBgPGRpdiBzdHlsZT1cIndpZHRoOjIwMHB4XCI+YCBoYXMgYSBkZWZhdWx0IHZhbHVlIG9mIGAyMDBweGAgZm9yXG4gKiAgIHRoZSBgd2lkdGhgIHByb3BlcnR5KS5cbiAqXG4gKiBFYWNoIHRpbWUgYSBuZXcgYmluZGluZyBpcyBlbmNvdW50ZXJlZCBpdCBpcyByZWdpc3RlcmVkIGludG8gdGhlXG4gKiBjb250ZXh0LiBUaGUgY29udGV4dCB0aGVuIGlzIGNvbnRpbnVhbGx5IHVwZGF0ZWQgdW50aWwgdGhlIGZpcnN0XG4gKiBzdHlsaW5nIGFwcGx5IGNhbGwgaGFzIGJlZW4gY2FsbGVkICh0aGlzIGlzIHRyaWdnZXJlZCBieSB0aGVcbiAqIGBzdHlsaW5nQXBwbHkoKWAgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBhY3RpdmUgZWxlbWVudCkuXG4gKlxuICogIyBIb3cgU3R5bGVzL0NsYXNzZXMgYXJlIFJlbmRlcmVkXG4gKiBFYWNoIHRpbWUgYSBzdHlsaW5nIGluc3RydWN0aW9uIChlLmcuIGBbY2xhc3MubmFtZV1gLCBgW3N0eWxlLnByb3BdYCxcbiAqIGV0Yy4uLikgaXMgZXhlY3V0ZWQsIHRoZSBhc3NvY2lhdGVkIGBsVmlld2AgZm9yIHRoZSB2aWV3IGlzIHVwZGF0ZWRcbiAqIGF0IHRoZSBjdXJyZW50IGJpbmRpbmcgbG9jYXRpb24uIEFsc28sIHdoZW4gdGhpcyBoYXBwZW5zLCBhIGxvY2FsXG4gKiBjb3VudGVyIHZhbHVlIGlzIGluY3JlbWVudGVkLiBJZiB0aGUgYmluZGluZyB2YWx1ZSBoYXMgY2hhbmdlZCB0aGVuXG4gKiBhIGxvY2FsIGBiaXRNYXNrYCB2YXJpYWJsZSBpcyB1cGRhdGVkIHdpdGggdGhlIHNwZWNpZmljIGJpdCBiYXNlZFxuICogb24gdGhlIGNvdW50ZXIgdmFsdWUuXG4gKlxuICogQmVsb3cgaXMgYSBsaWdodHdlaWdodCBleGFtcGxlIG9mIHdoYXQgaGFwcGVucyB3aGVuIGEgc2luZ2xlIHN0eWxlXG4gKiBwcm9wZXJ0eSBpcyB1cGRhdGVkIChpLmUuIGA8ZGl2IFtzdHlsZS5wcm9wXT1cInZhbFwiPmApOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlUHJvcChwcm9wOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAqICAgY29uc3QgbFZpZXcgPSBnZXRMVmlldygpO1xuICogICBjb25zdCBiaW5kaW5nSW5kZXggPSBCSU5ESU5HX0lOREVYKys7XG4gKiAgIGNvbnN0IGluZGV4Rm9yU3R5bGUgPSBsb2NhbFN0eWxlc0NvdW50ZXIrKztcbiAqICAgaWYgKGxWaWV3W2JpbmRpbmdJbmRleF0gIT09IHZhbHVlKSB7XG4gKiAgICAgbFZpZXdbYmluZGluZ0luZGV4XSA9IHZhbHVlO1xuICogICAgIGxvY2FsQml0TWFza0ZvclN0eWxlcyB8PSAxIDw8IGluZGV4Rm9yU3R5bGU7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICpcbiAqICMjIFRoZSBBcHBseSBBbGdvcml0aG1cbiAqIEFzIGV4cGxhaW5lZCBhYm92ZSwgZWFjaCB0aW1lIGEgYmluZGluZyB1cGRhdGVzIGl0cyB2YWx1ZSwgdGhlIHJlc3VsdGluZ1xuICogdmFsdWUgaXMgc3RvcmVkIGluIHRoZSBgbFZpZXdgIGFycmF5LiBUaGVzZSBzdHlsaW5nIHZhbHVlcyBoYXZlIHlldCB0b1xuICogYmUgZmx1c2hlZCB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBPbmNlIGFsbCB0aGUgc3R5bGluZyBpbnN0cnVjdGlvbnMgaGF2ZSBiZWVuIGV2YWx1YXRlZCwgdGhlbiB0aGUgc3R5bGluZ1xuICogY29udGV4dChzKSBhcmUgZmx1c2hlZCB0byB0aGUgZWxlbWVudC4gV2hlbiB0aGlzIGhhcHBlbnMsIHRoZSBjb250ZXh0IHdpbGxcbiAqIGJlIGl0ZXJhdGVkIG92ZXIgKHByb3BlcnR5IGJ5IHByb3BlcnR5KSBhbmQgZWFjaCBiaW5kaW5nIHNvdXJjZSB3aWxsIGJlXG4gKiBleGFtaW5lZCBhbmQgdGhlIGZpcnN0IG5vbi1udWxsIHZhbHVlIHdpbGwgYmUgYXBwbGllZCB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBMZXQncyBzYXkgdGhhdCB3ZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlIGNvZGU6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdiBbc3R5bGUud2lkdGhdPVwidzFcIiBkaXItdGhhdC1zZXQtd2lkdGg9XCJ3MlwiPjwvZGl2PlxuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIHR3byBzdHlsaW5nIGJpbmRpbmdzIGluIHRoZSBjb2RlIGFib3ZlIGFuZCB0aGV5IGJvdGggd3JpdGVcbiAqIHRvIHRoZSBgd2lkdGhgIHByb3BlcnR5LiBXaGVuIHN0eWxpbmcgaXMgZmx1c2hlZCBvbiB0aGUgZWxlbWVudCwgdGhlXG4gKiBhbGdvcml0aG0gd2lsbCB0cnkgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggb25lIG9mIHRoZXNlIHZhbHVlcyB0byB3cml0ZVxuICogdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSW4gb3JkZXIgdG8gZmlndXJlIG91dCB3aGljaCB2YWx1ZSB0byBhcHBseSwgdGhlIGZvbGxvd2luZ1xuICogYmluZGluZyBwcmlvcml0aXphdGlvbiBpcyBhZGhlcmVkIHRvOlxuICpcbiAqICAgMS4gRmlyc3QgdGVtcGxhdGUtbGV2ZWwgc3R5bGluZyBiaW5kaW5ncyBhcmUgYXBwbGllZCAoaWYgcHJlc2VudCkuXG4gKiAgICAgIFRoaXMgaW5jbHVkZXMgdGhpbmdzIGxpa2UgYFtzdHlsZS53aWR0aF1gIGFuZCBgW2NsYXNzLmFjdGl2ZV1gLlxuICpcbiAqICAgMi4gU2Vjb25kIGFyZSBzdHlsaW5nLWxldmVsIGhvc3QgYmluZGluZ3MgcHJlc2VudCBpbiBkaXJlY3RpdmVzLlxuICogICAgICAoaWYgdGhlcmUgYXJlIHN1Yi9zdXBlciBkaXJlY3RpdmVzIHByZXNlbnQgdGhlbiB0aGUgc3ViIGRpcmVjdGl2ZXNcbiAqICAgICAgYXJlIGFwcGxpZWQgZmlyc3QpLlxuICpcbiAqICAgMy4gVGhpcmQgYXJlIHN0eWxpbmctbGV2ZWwgaG9zdCBiaW5kaW5ncyBwcmVzZW50IGluIGNvbXBvbmVudHMuXG4gKiAgICAgIChpZiB0aGVyZSBhcmUgc3ViL3N1cGVyIGNvbXBvbmVudHMgcHJlc2VudCB0aGVuIHRoZSBzdWIgZGlyZWN0aXZlc1xuICogICAgICBhcmUgYXBwbGllZCBmaXJzdCkuXG4gKlxuICogVGhpcyBtZWFucyB0aGF0IGluIHRoZSBjb2RlIGFib3ZlIHRoZSBzdHlsaW5nIGJpbmRpbmcgcHJlc2VudCBpbiB0aGVcbiAqIHRlbXBsYXRlIGlzIGFwcGxpZWQgZmlyc3QgYW5kLCBvbmx5IGlmIGl0cyBmYWxzeSwgdGhlbiB0aGUgZGlyZWN0aXZlXG4gKiBzdHlsaW5nIGJpbmRpbmcgZm9yIHdpZHRoIHdpbGwgYmUgYXBwbGllZC5cbiAqXG4gKiAjIyMgV2hhdCBhYm91dCBtYXAtYmFzZWQgc3R5bGluZyBiaW5kaW5ncz9cbiAqIE1hcC1iYXNlZCBzdHlsaW5nIGJpbmRpbmdzIGFyZSBhY3RpdmF0ZWQgd2hlbiB0aGVyZSBhcmUgb25lIG9yIG1vcmVcbiAqIGBbc3R5bGVdYCBhbmQvb3IgYFtjbGFzc11gIGJpbmRpbmdzIHByZXNlbnQgb24gYW4gZWxlbWVudC4gV2hlbiB0aGlzXG4gKiBjb2RlIGlzIGFjdGl2YXRlZCwgdGhlIGFwcGx5IGFsZ29yaXRobSB3aWxsIGl0ZXJhdGUgb3ZlciBlYWNoIG1hcFxuICogZW50cnkgYW5kIGFwcGx5IGVhY2ggc3R5bGluZyB2YWx1ZSB0byB0aGUgZWxlbWVudCB3aXRoIHRoZSBzYW1lXG4gKiBwcmlvcml0aXphdGlvbiBydWxlcyBhcyBhYm92ZS5cbiAqXG4gKiBGb3IgdGhlIGFsZ29yaXRobSB0byBhcHBseSBzdHlsaW5nIHZhbHVlcyBlZmZpY2llbnRseSwgdGhlXG4gKiBzdHlsaW5nIG1hcCBlbnRyaWVzIG11c3QgYmUgYXBwbGllZCBpbiBzeW5jIChwcm9wZXJ0eSBieSBwcm9wZXJ0eSlcbiAqIHdpdGggcHJvcC1iYXNlZCBiaW5kaW5ncy4gKFRoZSBtYXAtYmFzZWQgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZFxuICogbW9yZSBpbnNpZGUgb2YgdGhlIGByZW5kZXIzL3N0eWxpbmdfbmV4dC9tYXBfYmFzZWRfYmluZGluZ3MudHNgIGZpbGUuKVxuICpcbiAqICMjIFNhbml0aXphdGlvblxuICogU2FuaXRpemF0aW9uIGlzIHVzZWQgdG8gcHJldmVudCBpbnZhbGlkIHN0eWxlIHZhbHVlcyBmcm9tIGJlaW5nIGFwcGxpZWQgdG9cbiAqIHRoZSBlbGVtZW50LlxuICpcbiAqIEl0IGlzIGVuYWJsZWQgaW4gdHdvIGNhc2VzOlxuICpcbiAqICAgMS4gVGhlIGBzdHlsZVNhbml0aXplcihzYW5pdGl6ZXJGbilgIGluc3RydWN0aW9uIHdhcyBjYWxsZWQgKGp1c3QgYmVmb3JlIGFueSBvdGhlclxuICogICAgICBzdHlsaW5nIGluc3RydWN0aW9ucyBhcmUgcnVuKS5cbiAqXG4gKiAgIDIuIFRoZSBjb21wb25lbnQvZGlyZWN0aXZlIGBMVmlld2AgaW5zdGFuY2UgaGFzIGEgc2FuaXRpemVyIG9iamVjdCBhdHRhY2hlZCB0byBpdFxuICogICAgICAodGhpcyBoYXBwZW5zIHdoZW4gYHJlbmRlckNvbXBvbmVudGAgaXMgZXhlY3V0ZWQgd2l0aCBhIGBzYW5pdGl6ZXJgIHZhbHVlIG9yXG4gKiAgICAgIGlmIHRoZSBuZ01vZHVsZSBjb250YWlucyBhIHNhbml0aXplciBwcm92aWRlciBhdHRhY2hlZCB0byBpdCkuXG4gKlxuICogSWYgYW5kIHdoZW4gc2FuaXRpemF0aW9uIGlzIGFjdGl2ZSB0aGVuIGFsbCBwcm9wZXJ0eS92YWx1ZSBlbnRyaWVzIHdpbGwgYmUgZXZhbHVhdGVkXG4gKiB0aHJvdWdoIHRoZSBhY3RpdmUgc2FuaXRpemVyIGJlZm9yZSB0aGV5IGFyZSBhcHBsaWVkIHRvIHRoZSBlbGVtZW50IChvciB0aGUgc3R5bGluZ1xuICogZGVidWcgaGFuZGxlcikuXG4gKlxuICogSWYgYSBgU2FuaXRpemVyYCBvYmplY3QgaXMgdXNlZCAodmlhIHRoZSBgTFZpZXdbU0FOSVRJWkVSXWAgdmFsdWUpIHRoZW4gdGhhdCBvYmplY3RcbiAqIHdpbGwgYmUgdXNlZCBmb3IgZXZlcnkgcHJvcGVydHkuXG4gKlxuICogSWYgYSBgU3R5bGVTYW5pdGl6ZXJGbmAgZnVuY3Rpb24gaXMgdXNlZCAodmlhIHRoZSBgc3R5bGVTYW5pdGl6ZXJgKSB0aGVuIGl0IHdpbGwgYmVcbiAqIGNhbGxlZCBpbiB0d28gd2F5czpcbiAqXG4gKiAgIDEuIHByb3BlcnR5IHZhbGlkYXRpb24gbW9kZTogdGhpcyB3aWxsIGJlIGNhbGxlZCBlYXJseSB0byBtYXJrIHdoZXRoZXIgYSBwcm9wZXJ0eVxuICogICAgICBzaG91bGQgYmUgc2FuaXRpemVkIG9yIG5vdCBhdCBkdXJpbmcgdGhlIGZsdXNoaW5nIHN0YWdlLlxuICpcbiAqICAgMi4gdmFsdWUgc2FuaXRpemF0aW9uIG1vZGU6IHRoaXMgd2lsbCBiZSBjYWxsZWQgZHVyaW5nIHRoZSBmbHVzaGluZyBzdGFnZSBhbmQgd2lsbFxuICogICAgICBydW4gdGhlIHNhbml0aXplciBmdW5jdGlvbiBhZ2FpbnN0IHRoZSB2YWx1ZSBiZWZvcmUgYXBwbHlpbmcgaXQgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgc2FuaXRpemF0aW9uIHJldHVybnMgYW4gZW1wdHkgdmFsdWUgdGhlbiB0aGF0IGVtcHR5IHZhbHVlIHdpbGwgYmUgYXBwbGllZFxuICogdG8gdGhlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVFN0eWxpbmdDb250ZXh0IGV4dGVuZHMgQXJyYXk8bnVtYmVyfHN0cmluZ3xudW1iZXJ8Ym9vbGVhbnxudWxsfExTdHlsaW5nTWFwPiB7XG4gIC8qKiBDb25maWd1cmF0aW9uIGRhdGEgZm9yIHRoZSBjb250ZXh0ICovXG4gIFtUU3R5bGluZ0NvbnRleHRJbmRleC5Db25maWdQb3NpdGlvbl06IFRTdHlsaW5nQ29uZmlnRmxhZ3M7XG5cbiAgLyoqIFRlbXBvcmFyeSB2YWx1ZSB1c2VkIHRvIHRyYWNrIGRpcmVjdGl2ZSBpbmRleCBlbnRyaWVzIHVudGlsXG4gICAgIHRoZSBvbGQgc3R5bGluZyBjb2RlIGlzIGZ1bGx5IHJlbW92ZWQuIFRoZSByZWFzb24gd2h5IHRoaXNcbiAgICAgaXMgcmVxdWlyZWQgaXMgdG8gZmlndXJlIG91dCB3aGljaCBkaXJlY3RpdmUgaXMgbGFzdCBhbmQsXG4gICAgIHdoZW4gZW5jb3VudGVyZWQsIHRyaWdnZXIgYSBzdHlsaW5nIGZsdXNoIHRvIGhhcHBlbiAqL1xuICBbVFN0eWxpbmdDb250ZXh0SW5kZXguTWF4RGlyZWN0aXZlSW5kZXhQb3NpdGlvbl06IG51bWJlcjtcblxuICAvKiogVGhlIGJpdCBndWFyZCB2YWx1ZSBmb3IgYWxsIG1hcC1iYXNlZCBiaW5kaW5ncyBvbiBhbiBlbGVtZW50ICovXG4gIFtUU3R5bGluZ0NvbnRleHRJbmRleC5NYXBCaW5kaW5nc0JpdEd1YXJkUG9zaXRpb25dOiBudW1iZXI7XG5cbiAgLyoqIFRoZSB0b3RhbCBhbW91bnQgb2YgbWFwLWJhc2VkIGJpbmRpbmdzIHByZXNlbnQgb24gYW4gZWxlbWVudCAqL1xuICBbVFN0eWxpbmdDb250ZXh0SW5kZXguTWFwQmluZGluZ3NWYWx1ZXNDb3VudFBvc2l0aW9uXTogbnVtYmVyO1xuXG4gIC8qKiBUaGUgcHJvcCB2YWx1ZSBmb3IgbWFwLWJhc2VkIGJpbmRpbmdzICh0aGVyZSBhY3R1YWxseSBpc24ndCBhXG4gICAqIHZhbHVlIGF0IGFsbCwgYnV0IHRoaXMgaXMganVzdCB1c2VkIGluIHRoZSBjb250ZXh0IHRvIGF2b2lkXG4gICAqIGhhdmluZyBhbnkgc3BlY2lhbCBjb2RlIHRvIHVwZGF0ZSB0aGUgYmluZGluZyBpbmZvcm1hdGlvbiBmb3JcbiAgICogbWFwLWJhc2VkIGVudHJpZXMpLiAqL1xuICBbVFN0eWxpbmdDb250ZXh0SW5kZXguTWFwQmluZGluZ3NQcm9wUG9zaXRpb25dOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBzZXJpZXMgb2YgZmxhZ3MgdXNlZCB0byBjb25maWd1cmUgdGhlIGNvbmZpZyB2YWx1ZSBwcmVzZW50IHdpdGhpbiBhXG4gKiBgVFN0eWxpbmdDb250ZXh0YCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gVFN0eWxpbmdDb25maWdGbGFncyB7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCBzdGF0ZSBvZiB0aGUgc3R5bGluZyBjb250ZXh0IGNvbmZpZ1xuICAgKi9cbiAgSW5pdGlhbCA9IDBiMCxcblxuICAvKipcbiAgICogQSBmbGFnIHdoaWNoIG1hcmtzIHRoZSBjb250ZXh0IGFzIGJlaW5nIGxvY2tlZC5cbiAgICpcbiAgICogVGhlIHN0eWxpbmcgY29udGV4dCBpcyBjb25zdHJ1Y3RlZCBhY3Jvc3MgYW4gZWxlbWVudCB0ZW1wbGF0ZVxuICAgKiBmdW5jdGlvbiBhcyB3ZWxsIGFzIGFueSBhc3NvY2lhdGVkIGhvc3RCaW5kaW5ncyBmdW5jdGlvbnMuIFdoZW5cbiAgICogdGhpcyBvY2N1cnMsIHRoZSBjb250ZXh0IGl0c2VsZiBpcyBvcGVuIHRvIG11dGF0aW9uIGFuZCBvbmx5IG9uY2VcbiAgICogaXQgaGFzIGJlZW4gZmx1c2hlZCBvbmNlIHRoZW4gaXQgd2lsbCBiZSBsb2NrZWQgZm9yIGdvb2QgKG5vIGV4dHJhXG4gICAqIGJpbmRpbmdzIGNhbiBiZSBhZGRlZCB0byBpdCkuXG4gICAqL1xuICBMb2NrZWQgPSAwYjEsXG59XG5cbi8qKlxuICogQW4gaW5kZXggb2YgcG9zaXRpb24gYW5kIG9mZnNldCB2YWx1ZXMgdXNlZCB0byBuYXRpZ2F0ZSB0aGUgYFRTdHlsaW5nQ29udGV4dGAuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFRTdHlsaW5nQ29udGV4dEluZGV4IHtcbiAgQ29uZmlnUG9zaXRpb24gPSAwLFxuICBNYXhEaXJlY3RpdmVJbmRleFBvc2l0aW9uID0gMSxcblxuICAvLyBpbmRleC9vZmZzZXQgdmFsdWVzIGZvciBtYXAtYmFzZWQgZW50cmllcyAoaS5lLiBgW3N0eWxlXWBcbiAgLy8gYW5kIGBbY2xhc3NdIGJpbmRpbmdzKS5cbiAgTWFwQmluZGluZ3NQb3NpdGlvbiA9IDIsXG4gIE1hcEJpbmRpbmdzQml0R3VhcmRQb3NpdGlvbiA9IDIsXG4gIE1hcEJpbmRpbmdzVmFsdWVzQ291bnRQb3NpdGlvbiA9IDMsXG4gIE1hcEJpbmRpbmdzUHJvcFBvc2l0aW9uID0gNCxcbiAgTWFwQmluZGluZ3NCaW5kaW5nc1N0YXJ0UG9zaXRpb24gPSA1LFxuXG4gIC8vIGVhY2ggdHVwbGUgZW50cnkgaW4gdGhlIGNvbnRleHRcbiAgLy8gKG1hc2ssIGNvdW50LCBwcm9wLCAuLi5iaW5kaW5nc3x8ZGVmYXVsdC12YWx1ZSlcbiAgQ29uZmlnQW5kR3VhcmRPZmZzZXQgPSAwLFxuICBWYWx1ZXNDb3VudE9mZnNldCA9IDEsXG4gIFByb3BPZmZzZXQgPSAyLFxuICBCaW5kaW5nc1N0YXJ0T2Zmc2V0ID0gMyxcbn1cblxuLyoqXG4gKiBBIHNlcmllcyBvZiBmbGFncyB1c2VkIGZvciBlYWNoIHByb3BlcnR5IGVudHJ5IHdpdGhpbiB0aGUgYFRTdHlsaW5nQ29udGV4dGAuXG4gKi9cbmV4cG9ydCBjb25zdCBlbnVtIFRTdHlsaW5nQ29udGV4dFByb3BDb25maWdGbGFncyB7XG4gIERlZmF1bHQgPSAwYjAsXG4gIFNhbml0aXphdGlvblJlcXVpcmVkID0gMGIxLFxuICBUb3RhbEJpdHMgPSAxLFxuICBNYXNrID0gMGIxLFxufVxuXG4vKipcbiAqIEEgZnVuY3Rpb24gdXNlZCB0byBhcHBseSBvciByZW1vdmUgc3R5bGluZyBmcm9tIGFuIGVsZW1lbnQgZm9yIGEgZ2l2ZW4gcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBwbHlTdHlsaW5nRm4ge1xuICAocmVuZGVyZXI6IFJlbmRlcmVyM3xQcm9jZWR1cmFsUmVuZGVyZXIzfG51bGwsIGVsZW1lbnQ6IFJFbGVtZW50LCBwcm9wOiBzdHJpbmcsXG4gICB2YWx1ZTogc3RyaW5nfG51bGwsIGJpbmRpbmdJbmRleD86IG51bWJlcnxudWxsKTogdm9pZDtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGRhdGEgdHlwZSB0aGF0IGlzIHVzZWQgdG8gc3RvcmUgYmluZGluZyBkYXRhIHJlZmVyZW5jZWQgZnJvbSB0aGUgYFRTdHlsaW5nQ29udGV4dGAuXG4gKlxuICogQmVjYXVzZSBgTFZpZXdgIGlzIGp1c3QgYW4gYXJyYXkgd2l0aCBkYXRhLCB0aGVyZSBpcyBubyByZWFzb24gdG9cbiAqIHNwZWNpYWwgY2FzZSBgTFZpZXdgIGV2ZXJ5d2hlcmUgaW4gdGhlIHN0eWxpbmcgYWxnb3JpdGhtLiBCeSBhbGxvd2luZ1xuICogdGhpcyBkYXRhIHR5cGUgdG8gYmUgYW4gYXJyYXkgdGhhdCBjb250YWlucyB2YXJpb3VzIHNjYWxhciBkYXRhIHR5cGVzLFxuICogYW4gaW5zdGFuY2Ugb2YgYExWaWV3YCBkb2Vzbid0IG5lZWQgdG8gYmUgY29uc3RydWN0ZWQgZm9yIHRlc3RzLlxuICovXG5leHBvcnQgdHlwZSBMU3R5bGluZ0RhdGEgPSBMVmlldyB8IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbClbXTtcblxuLyoqXG4gKiBBcnJheS1iYXNlZCByZXByZXNlbnRhdGlvbiBvZiBhIGtleS92YWx1ZSBhcnJheS5cbiAqXG4gKiBUaGUgZm9ybWF0IG9mIHRoZSBhcnJheSBpcyBcInByb3BlcnR5XCIsIFwidmFsdWVcIiwgXCJwcm9wZXJ0eTJcIixcbiAqIFwidmFsdWUyXCIsIGV0Yy4uLlxuICpcbiAqIFRoZSBmaXJzdCB2YWx1ZSBpbiB0aGUgYXJyYXkgaXMgcmVzZXJ2ZWQgdG8gc3RvcmUgdGhlIGluc3RhbmNlXG4gKiBvZiB0aGUga2V5L3ZhbHVlIGFycmF5IHRoYXQgd2FzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHByb3BlcnR5L1xuICogdmFsdWUgZW50cmllcyB0aGF0IHRha2UgcGxhY2UgaW4gdGhlIHJlbWFpbmRlciBvZiB0aGUgYXJyYXkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTFN0eWxpbmdNYXAgZXh0ZW5kcyBBcnJheTx7fXxzdHJpbmd8bnVtYmVyfG51bGw+IHtcbiAgW0xTdHlsaW5nTWFwSW5kZXguUmF3VmFsdWVQb3NpdGlvbl06IHt9fHN0cmluZ3xudWxsO1xufVxuXG4vKipcbiAqIEFuIGluZGV4IG9mIHBvc2l0aW9uIGFuZCBvZmZzZXQgcG9pbnRzIGZvciBhbnkgZGF0YSBzdG9yZWQgd2l0aGluIGEgYExTdHlsaW5nTWFwYCBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gTFN0eWxpbmdNYXBJbmRleCB7XG4gIC8qKiBUaGUgbG9jYXRpb24gb2YgdGhlIHJhdyBrZXkvdmFsdWUgbWFwIGluc3RhbmNlIHVzZWQgbGFzdCB0byBwb3B1bGF0ZSB0aGUgYXJyYXkgZW50cmllcyAqL1xuICBSYXdWYWx1ZVBvc2l0aW9uID0gMCxcblxuICAvKiogV2hlcmUgdGhlIHZhbHVlcyBzdGFydCBpbiB0aGUgYXJyYXkgKi9cbiAgVmFsdWVzU3RhcnRQb3NpdGlvbiA9IDEsXG5cbiAgLyoqIFRoZSBzaXplIG9mIGVhY2ggcHJvcGVydHkvdmFsdWUgZW50cnkgKi9cbiAgVHVwbGVTaXplID0gMixcblxuICAvKiogVGhlIG9mZnNldCBmb3IgdGhlIHByb3BlcnR5IGVudHJ5IGluIHRoZSB0dXBsZSAqL1xuICBQcm9wT2Zmc2V0ID0gMCxcblxuICAvKiogVGhlIG9mZnNldCBmb3IgdGhlIHZhbHVlIGVudHJ5IGluIHRoZSB0dXBsZSAqL1xuICBWYWx1ZU9mZnNldCA9IDEsXG59XG5cbi8qKlxuICogVXNlZCB0byBhcHBseS90cmF2ZXJzZSBhY3Jvc3MgYWxsIG1hcC1iYXNlZCBzdHlsaW5nIGVudHJpZXMgdXAgdG8gdGhlIHByb3ZpZGVkIGB0YXJnZXRQcm9wYFxuICogdmFsdWUuXG4gKlxuICogV2hlbiBjYWxsZWQsIGVhY2ggb2YgdGhlIG1hcC1iYXNlZCBgTFN0eWxpbmdNYXBgIGVudHJpZXMgKHdoaWNoIGFyZSBzdG9yZWQgaW5cbiAqIHRoZSBwcm92aWRlZCBgTFN0eWxpbmdEYXRhYCBhcnJheSkgd2lsbCBiZSBpdGVyYXRlZCBvdmVyLiBEZXBlbmRpbmcgb24gdGhlIHByb3ZpZGVkXG4gKiBgbW9kZWAgdmFsdWUsIGVhY2ggcHJvcC92YWx1ZSBlbnRyeSBtYXkgYmUgYXBwbGllZCBvciBza2lwcGVkIG92ZXIuXG4gKlxuICogSWYgYHRhcmdldFByb3BgIHZhbHVlIGlzIHByb3ZpZGVkIHRoZSBpdGVyYXRpb24gY29kZSB3aWxsIHN0b3Agb25jZSBpdCByZWFjaGVzXG4gKiB0aGUgcHJvcGVydHkgKGlmIGZvdW5kKS4gT3RoZXJ3aXNlIGlmIHRoZSB0YXJnZXQgcHJvcGVydHkgaXMgbm90IGVuY291bnRlcmVkIHRoZW5cbiAqIGl0IHdpbGwgc3RvcCBvbmNlIGl0IHJlYWNoZXMgdGhlIG5leHQgdmFsdWUgdGhhdCBhcHBlYXJzIGFscGhhYmV0aWNhbGx5IGFmdGVyIGl0LlxuICpcbiAqIElmIGEgYGRlZmF1bHRWYWx1ZWAgaXMgcHJvdmlkZWQgdGhlbiBpdCB3aWxsIGJlIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQgb25seSBpZiB0aGVcbiAqIGB0YXJnZXRQcm9wYCBwcm9wZXJ0eSB2YWx1ZSBpcyBlbmNvdW50ZXJlZCBhbmQgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0XG4gKiBwcm9wZXJ0eSBpcyBgbnVsbGAuIFRoZSByZWFzb24gd2h5IHRoZSBgZGVmYXVsdFZhbHVlYCBpcyBuZWVkZWQgaXMgdG8gYXZvaWQgaGF2aW5nIHRoZVxuICogYWxnb3JpdGhtIGFwcGx5IGEgYG51bGxgIHZhbHVlIGFuZCB0aGVuIGFwcGx5IGEgZGVmYXVsdCB2YWx1ZSBhZnRlcndhcmRzICh0aGlzIHdvdWxkXG4gKiBlbmQgdXAgYmVpbmcgdHdvIHN0eWxlIHByb3BlcnR5IHdyaXRlcykuXG4gKlxuICogQHJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHRhcmdldCBwcm9wZXJ0eSB3YXMgcmVhY2hlZCBhbmQgaXRzIHZhbHVlIHdhc1xuICogIGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1N0eWxpbmdNYXBzRm4ge1xuICAoY29udGV4dDogVFN0eWxpbmdDb250ZXh0LCByZW5kZXJlcjogUmVuZGVyZXIzfFByb2NlZHVyYWxSZW5kZXJlcjN8bnVsbCwgZWxlbWVudDogUkVsZW1lbnQsXG4gICBkYXRhOiBMU3R5bGluZ0RhdGEsIGFwcGx5U3R5bGluZ0ZuOiBBcHBseVN0eWxpbmdGbiwgc2FuaXRpemVyOiBTdHlsZVNhbml0aXplRm58bnVsbCxcbiAgIG1vZGU6IFN0eWxpbmdNYXBzU3luY01vZGUsIHRhcmdldFByb3A/OiBzdHJpbmd8bnVsbCwgZGVmYXVsdFZhbHVlPzogc3RyaW5nfG51bGwpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFVzZWQgdG8gZGlyZWN0IGhvdyBtYXAtYmFzZWQgdmFsdWVzIGFyZSBhcHBsaWVkL3RyYXZlcnNlZCB3aGVuIHN0eWxpbmcgaXMgZmx1c2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGVudW0gU3R5bGluZ01hcHNTeW5jTW9kZSB7XG4gIC8qKiBPbmx5IHRyYXZlcnNlIHZhbHVlcyAobm8gcHJvcC92YWx1ZSBzdHlsaW5nIGVudHJpZXMgZ2V0IGFwcGxpZWQpICovXG4gIFRyYXZlcnNlVmFsdWVzID0gMGIwMDAsXG5cbiAgLyoqIEFwcGx5IGV2ZXJ5IHByb3AvdmFsdWUgc3R5bGluZyBlbnRyeSB0byB0aGUgZWxlbWVudCAqL1xuICBBcHBseUFsbFZhbHVlcyA9IDBiMDAxLFxuXG4gIC8qKiBPbmx5IGFwcGx5IHRoZSB0YXJnZXQgcHJvcC92YWx1ZSBlbnRyeSAqL1xuICBBcHBseVRhcmdldFByb3AgPSAwYjAxMCxcblxuICAvKiogU2tpcCBhcHBseWluZyB0aGUgdGFyZ2V0IHByb3AvdmFsdWUgZW50cnkgKi9cbiAgU2tpcFRhcmdldFByb3AgPSAwYjEwMCxcbn1cbiJdfQ==
|