@angular/core 18.0.0-rc.1 → 18.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/primitives/event-dispatch/contract_binary.mjs +3 -3
- package/esm2022/primitives/event-dispatch/index.mjs +2 -2
- package/esm2022/primitives/event-dispatch/src/action_resolver.mjs +5 -18
- package/esm2022/primitives/event-dispatch/src/attribute.mjs +63 -65
- package/esm2022/primitives/event-dispatch/src/cache.mjs +10 -10
- package/esm2022/primitives/event-dispatch/src/dispatcher.mjs +50 -181
- package/esm2022/primitives/event-dispatch/src/earlyeventcontract.mjs +4 -4
- package/esm2022/primitives/event-dispatch/src/event_contract_defines.mjs +1 -6
- package/esm2022/primitives/event-dispatch/src/eventcontract.mjs +13 -30
- package/esm2022/primitives/event-dispatch/src/key_code.mjs +11 -13
- package/esm2022/primitives/event-dispatch/src/legacy_dispatcher.mjs +252 -2
- package/esm2022/primitives/event-dispatch/src/property.mjs +30 -27
- package/esm2022/primitives/event-dispatch/src/register_events.mjs +5 -25
- package/esm2022/primitives/event-dispatch/src/restriction.mjs +2 -2
- package/esm2022/src/application/create_application.mjs +11 -4
- package/esm2022/src/change_detection/scheduling/ng_zone_scheduling.mjs +4 -16
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling.mjs +3 -1
- package/esm2022/src/change_detection/scheduling/zoneless_scheduling_impl.mjs +5 -2
- package/esm2022/src/core_reactivity_export_internal.mjs +1 -3
- package/esm2022/src/core_render3_private_export.mjs +1 -3
- package/esm2022/src/hydration/event_replay.mjs +51 -83
- package/esm2022/src/hydration/utils.mjs +1 -2
- package/esm2022/src/metadata/directives.mjs +1 -1
- package/esm2022/src/platform/platform_ref.mjs +9 -10
- package/esm2022/src/render3/component_ref.mjs +1 -1
- package/esm2022/src/render3/index.mjs +1 -3
- package/esm2022/src/render3/instructions/listener.mjs +3 -3
- package/esm2022/src/render3/interfaces/public_definitions.mjs +1 -1
- package/esm2022/src/version.mjs +1 -1
- package/esm2022/testing/src/component_fixture.mjs +2 -2
- package/esm2022/testing/src/logger.mjs +3 -3
- package/esm2022/testing/src/test_bed.mjs +1 -3
- package/esm2022/testing/src/test_bed_compiler.mjs +1 -3
- package/event-dispatch-contract.min.js +1 -1
- package/fesm2022/core.mjs +79 -117
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/primitives/event-dispatch.mjs +246 -515
- package/fesm2022/primitives/event-dispatch.mjs.map +1 -1
- package/fesm2022/primitives/signals.mjs +1 -1
- package/fesm2022/rxjs-interop.mjs +1 -1
- package/fesm2022/testing.mjs +2 -4
- package/fesm2022/testing.mjs.map +1 -1
- package/index.d.ts +3 -1
- package/package.json +1 -1
- package/primitives/event-dispatch/index.d.ts +83 -131
- package/primitives/signals/index.d.ts +1 -1
- package/rxjs-interop/index.d.ts +1 -1
- package/schematics/migrations/http-providers/bundle.js +46 -29
- package/schematics/migrations/http-providers/bundle.js.map +3 -3
- package/schematics/migrations/invalid-two-way-bindings/bundle.js +159 -159
- package/schematics/migrations/invalid-two-way-bindings/bundle.js.map +2 -2
- package/schematics/ng-generate/control-flow-migration/bundle.js +167 -167
- package/schematics/ng-generate/control-flow-migration/bundle.js.map +2 -2
- package/schematics/ng-generate/standalone-migration/bundle.js +443 -443
- package/schematics/ng-generate/standalone-migration/bundle.js.map +2 -2
- package/testing/index.d.ts +1 -1
- package/esm2022/primitives/event-dispatch/src/base_dispatcher.mjs +0 -94
- package/esm2022/primitives/event-dispatch/src/custom_events.mjs +0 -102
- package/esm2022/primitives/event-dispatch/src/replay.mjs +0 -389
|
@@ -1,389 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* @fileoverview Functions for replaying events by the jsaction
|
|
10
|
-
* Dispatcher.
|
|
11
|
-
* All ts-ignores in this file are due to APIs that are no longer in the browser.
|
|
12
|
-
*/
|
|
13
|
-
import { createCustomEvent } from './/custom_events';
|
|
14
|
-
import * as jsactionEvent from './/event';
|
|
15
|
-
import { EventType } from './/event_type';
|
|
16
|
-
/**
|
|
17
|
-
* Replays an event.
|
|
18
|
-
*/
|
|
19
|
-
export function replayEvent(event, targetElement, eventType) {
|
|
20
|
-
triggerEvent(targetElement, createEvent(event, eventType));
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Checks if a given event was triggered by the keyboard.
|
|
24
|
-
* @param eventType The event type.
|
|
25
|
-
* @return Whether it's a keyboard event.
|
|
26
|
-
*/
|
|
27
|
-
function isKeyboardEvent(eventType) {
|
|
28
|
-
return (eventType === EventType.KEYPRESS ||
|
|
29
|
-
eventType === EventType.KEYDOWN ||
|
|
30
|
-
eventType === EventType.KEYUP);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Checks if a given event was triggered by the mouse.
|
|
34
|
-
* @param eventType The event type.
|
|
35
|
-
* @return Whether it's a mouse event.
|
|
36
|
-
*/
|
|
37
|
-
function isMouseEvent(eventType) {
|
|
38
|
-
// TODO: Verify if Drag events should be bound here.
|
|
39
|
-
return (eventType === EventType.CLICK ||
|
|
40
|
-
eventType === EventType.DBLCLICK ||
|
|
41
|
-
eventType === EventType.MOUSEDOWN ||
|
|
42
|
-
eventType === EventType.MOUSEOVER ||
|
|
43
|
-
eventType === EventType.MOUSEOUT ||
|
|
44
|
-
eventType === EventType.MOUSEMOVE);
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Checks if a given event is a general UI event.
|
|
48
|
-
* @param eventType The event type.
|
|
49
|
-
* @return Whether it's a focus event.
|
|
50
|
-
*/
|
|
51
|
-
function isUiEvent(eventType) {
|
|
52
|
-
// Almost nobody supports the W3C method of creating FocusEvents.
|
|
53
|
-
// For now, we're going to use the UIEvent as a super-interface.
|
|
54
|
-
return (eventType === EventType.FOCUS ||
|
|
55
|
-
eventType === EventType.BLUR ||
|
|
56
|
-
eventType === EventType.FOCUSIN ||
|
|
57
|
-
eventType === EventType.FOCUSOUT ||
|
|
58
|
-
eventType === EventType.SCROLL);
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Create a whitespace-delineated list of modifier keys that should be
|
|
62
|
-
* considered to be active on the event's key. See details at
|
|
63
|
-
* https://developer.mozilla.org/en/DOM/KeyboardEvent.
|
|
64
|
-
* @param alt Alt pressed.
|
|
65
|
-
* @param ctrl Control pressed.
|
|
66
|
-
* @param meta Command pressed (OSX only).
|
|
67
|
-
* @param shift Shift pressed.
|
|
68
|
-
* @return The constructed modifier keys string.
|
|
69
|
-
*/
|
|
70
|
-
function createKeyboardModifiersList(alt, ctrl, meta, shift) {
|
|
71
|
-
const keys = [];
|
|
72
|
-
if (alt) {
|
|
73
|
-
keys.push('Alt');
|
|
74
|
-
}
|
|
75
|
-
if (ctrl) {
|
|
76
|
-
keys.push('Control');
|
|
77
|
-
}
|
|
78
|
-
if (meta) {
|
|
79
|
-
keys.push('Meta');
|
|
80
|
-
}
|
|
81
|
-
if (shift) {
|
|
82
|
-
keys.push('Shift');
|
|
83
|
-
}
|
|
84
|
-
return keys.join(' ');
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* Creates a UI event object for replaying through the DOM.
|
|
88
|
-
* @param original The event to create a new event from.
|
|
89
|
-
* @param opt_eventType The type this event is being handled as by jsaction.
|
|
90
|
-
* e.g. blur events are handled as focusout
|
|
91
|
-
* @return The event object.
|
|
92
|
-
*/
|
|
93
|
-
export function createUiEvent(original, opt_eventType) {
|
|
94
|
-
let event;
|
|
95
|
-
if (document.createEvent) {
|
|
96
|
-
const originalUiEvent = original;
|
|
97
|
-
// Event creation as per W3C event model specification. This codepath
|
|
98
|
-
// is used by most non-IE browsers and also by IE 9 and later.
|
|
99
|
-
event = document.createEvent('UIEvent');
|
|
100
|
-
// On IE and Opera < 12, we must provide non-undefined values to
|
|
101
|
-
// initEvent, otherwise it will fail.
|
|
102
|
-
event.initUIEvent(opt_eventType || originalUiEvent.type, originalUiEvent.bubbles !== undefined ? originalUiEvent.bubbles : true, originalUiEvent.cancelable || false, originalUiEvent.view || window, original.detail || 0);
|
|
103
|
-
// detail
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
// Older versions of IE (up to version 8) do not support the
|
|
107
|
-
// W3C event model. Use the IE specific function instead.
|
|
108
|
-
// Suppressing errors for ts-migration.
|
|
109
|
-
// TS2339: Property 'createEventObject' does not exist on type 'Document'.
|
|
110
|
-
// @ts-ignore
|
|
111
|
-
event = document.createEventObject();
|
|
112
|
-
event.type = opt_eventType || original.type;
|
|
113
|
-
event.bubbles = original.bubbles !== undefined ? original.bubbles : true;
|
|
114
|
-
event.cancelable = original.cancelable || false;
|
|
115
|
-
event.view = original.view || window;
|
|
116
|
-
event.detail = original.detail || 0;
|
|
117
|
-
}
|
|
118
|
-
// Some focus events also have a nullable relatedTarget value which isn't
|
|
119
|
-
// directly supported in the initUIEvent() method.
|
|
120
|
-
event.relatedTarget = original.relatedTarget || null;
|
|
121
|
-
event.originalTimestamp = original.timeStamp;
|
|
122
|
-
return event;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Creates a keyboard event object for replaying through the DOM.
|
|
126
|
-
* @param original The event to create a new event from.
|
|
127
|
-
* @param opt_eventType The type this event is being handled as by jsaction.
|
|
128
|
-
* E.g. a keypress is handled as click in some cases.
|
|
129
|
-
* @return The event object.
|
|
130
|
-
* @suppress {strictMissingProperties} Two definitions of initKeyboardEvent.
|
|
131
|
-
*/
|
|
132
|
-
export function createKeyboardEvent(original, opt_eventType) {
|
|
133
|
-
let event;
|
|
134
|
-
const keyboardEvent = original;
|
|
135
|
-
if (document.createEvent) {
|
|
136
|
-
// Event creation as per W3C event model specification. This codepath
|
|
137
|
-
// is used by most non-IE browsers and also by IE 9 and later.
|
|
138
|
-
event = document.createEvent('KeyboardEvent');
|
|
139
|
-
if (event.initKeyboardEvent) {
|
|
140
|
-
if (jsactionEvent.isIe) {
|
|
141
|
-
// IE9+
|
|
142
|
-
// https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/ff975945(v=vs.85)
|
|
143
|
-
const modifiers = createKeyboardModifiersList(keyboardEvent.altKey, keyboardEvent.ctrlKey, keyboardEvent.metaKey, keyboardEvent.shiftKey);
|
|
144
|
-
event.initKeyboardEvent(opt_eventType || keyboardEvent.type, true, true, window, keyboardEvent.key, keyboardEvent.location,
|
|
145
|
-
// Suppressing errors for ts-migration.
|
|
146
|
-
// TS2345: Argument of type 'string' is not assignable to
|
|
147
|
-
// parameter of type 'boolean | undefined'.
|
|
148
|
-
// @ts-ignore
|
|
149
|
-
modifiers, keyboardEvent.repeat,
|
|
150
|
-
// @ts-ignore This doesn't exist
|
|
151
|
-
keyboardEvent.locale);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
// W3C DOM Level 3 Events model.
|
|
155
|
-
// https://www.w3.org/TR/uievents/#idl-interface-KeyboardEvent-initializers
|
|
156
|
-
event.initKeyboardEvent(opt_eventType || original.type, true, true, window, keyboardEvent.key, keyboardEvent.location, keyboardEvent.ctrlKey, keyboardEvent.altKey, keyboardEvent.shiftKey, keyboardEvent.metaKey);
|
|
157
|
-
Object.defineProperty(event, 'repeat', {
|
|
158
|
-
get: () => original.repeat,
|
|
159
|
-
enumerable: true,
|
|
160
|
-
});
|
|
161
|
-
// Add missing 'locale' which is not part of the spec.
|
|
162
|
-
// https://bugs.chromium.org/p/chromium/issues/detail?id=168971
|
|
163
|
-
Object.defineProperty(event, 'locale', {
|
|
164
|
-
// Suppressing errors for ts-migration.
|
|
165
|
-
// TS2339: Property 'locale' does not exist on type 'Event'.
|
|
166
|
-
// @ts-ignore
|
|
167
|
-
get: () => original.locale,
|
|
168
|
-
enumerable: true,
|
|
169
|
-
});
|
|
170
|
-
// Apple WebKit has a non-standard altGraphKey that is not implemented
|
|
171
|
-
// here.
|
|
172
|
-
// https://developer.apple.com/documentation/webkitjs/keyboardevent/1633753-initkeyboardevent
|
|
173
|
-
}
|
|
174
|
-
// Blink and Webkit had a bug that causes the `charCode`, `keyCode`, and
|
|
175
|
-
// `which` properties to always be unset when synthesizing a keyboard
|
|
176
|
-
// event. Details at: https://bugs.webkit.org/show_bug.cgi?id=16735. With
|
|
177
|
-
// these properties being deprecated, the bug has evolved into affecting
|
|
178
|
-
// the `key` property. We work around it by redefining the `key` and
|
|
179
|
-
// deprecated properties; a simple assignment here would fail because the
|
|
180
|
-
// native properties are readonly.
|
|
181
|
-
if (jsactionEvent.isWebKit) {
|
|
182
|
-
if (keyboardEvent.key && event.key === '') {
|
|
183
|
-
Object.defineProperty(event, 'key', {
|
|
184
|
-
get: () => keyboardEvent.key,
|
|
185
|
-
enumerable: true,
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
// Re-implement the deprecated `charCode`, `keyCode` and `which` which
|
|
190
|
-
// are also an issue on IE9+.
|
|
191
|
-
if (jsactionEvent.isWebKit || jsactionEvent.isIe || jsactionEvent.isGecko) {
|
|
192
|
-
Object.defineProperty(event, 'charCode', {
|
|
193
|
-
get: () => original.charCode,
|
|
194
|
-
enumerable: true,
|
|
195
|
-
});
|
|
196
|
-
const keyCodeGetter = () => original.keyCode;
|
|
197
|
-
Object.defineProperty(event, 'keyCode', {
|
|
198
|
-
get: keyCodeGetter,
|
|
199
|
-
enumerable: true,
|
|
200
|
-
});
|
|
201
|
-
Object.defineProperty(event, 'which', {
|
|
202
|
-
get: keyCodeGetter,
|
|
203
|
-
enumerable: true,
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
// Gecko only supports an older/deprecated version from DOM Level 2. See
|
|
209
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyEvent
|
|
210
|
-
// for details.
|
|
211
|
-
// @ts-ignore ditto
|
|
212
|
-
event.initKeyEvent(opt_eventType || original.type, true, true, window,
|
|
213
|
-
// Suppressing errors for ts-migration.
|
|
214
|
-
// TS2339: Property 'ctrlKey' does not exist on type 'Event'.
|
|
215
|
-
// @ts-ignore
|
|
216
|
-
original.ctrlKey,
|
|
217
|
-
// Suppressing errors for ts-migration.
|
|
218
|
-
// TS2339: Property 'altKey' does not exist on type 'Event'.
|
|
219
|
-
// @ts-ignore
|
|
220
|
-
original.altKey,
|
|
221
|
-
// Suppressing errors for ts-migration.
|
|
222
|
-
// TS2339: Property 'shiftKey' does not exist on type 'Event'.
|
|
223
|
-
// @ts-ignore
|
|
224
|
-
original.shiftKey,
|
|
225
|
-
// Suppressing errors for ts-migration.
|
|
226
|
-
// TS2339: Property 'metaKey' does not exist on type 'Event'.
|
|
227
|
-
// @ts-ignore
|
|
228
|
-
original.metaKey,
|
|
229
|
-
// Suppressing errors for ts-migration.
|
|
230
|
-
// TS2339: Property 'keyCode' does not exist on type 'Event'.
|
|
231
|
-
// @ts-ignore
|
|
232
|
-
original.keyCode,
|
|
233
|
-
// Suppressing errors for ts-migration.
|
|
234
|
-
// TS2339: Property 'charCode' does not exist on type 'Event'.
|
|
235
|
-
// @ts-ignore
|
|
236
|
-
original.charCode);
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
else {
|
|
240
|
-
// Older versions of IE (up to version 8) do not support the
|
|
241
|
-
// W3C event model. Use the IE specific function instead.
|
|
242
|
-
// Suppressing errors for ts-migration.
|
|
243
|
-
// @ts-ignore
|
|
244
|
-
event = document.createEventObject();
|
|
245
|
-
event.type = opt_eventType || original.type;
|
|
246
|
-
const originalKeyboardEvent = original;
|
|
247
|
-
event.repeat = originalKeyboardEvent.repeat;
|
|
248
|
-
event.ctrlKey = originalKeyboardEvent.ctrlKey;
|
|
249
|
-
event.altKey = originalKeyboardEvent.altKey;
|
|
250
|
-
event.shiftKey = originalKeyboardEvent.shiftKey;
|
|
251
|
-
event.metaKey = originalKeyboardEvent.metaKey;
|
|
252
|
-
event.key = originalKeyboardEvent.key;
|
|
253
|
-
event.keyCode = originalKeyboardEvent.keyCode;
|
|
254
|
-
event.charCode = originalKeyboardEvent.charCode;
|
|
255
|
-
}
|
|
256
|
-
event.originalTimestamp = original.timeStamp;
|
|
257
|
-
return event;
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Creates a mouse event object for replaying through the DOM.
|
|
261
|
-
* @param original The event to create a new event from.
|
|
262
|
-
* @param opt_eventType The type this event is being handled as by jsaction.
|
|
263
|
-
* E.g. a keypress is handled as click in some cases.
|
|
264
|
-
* @return The event object.
|
|
265
|
-
*/
|
|
266
|
-
export function createMouseEvent(original, opt_eventType) {
|
|
267
|
-
let event;
|
|
268
|
-
const originalMouseEvent = original;
|
|
269
|
-
if (document.createEvent) {
|
|
270
|
-
// Event creation as per W3C event model specification. This codepath
|
|
271
|
-
// is used by most non-IE browsers and also by IE 9 and later.
|
|
272
|
-
event = document.createEvent('MouseEvent');
|
|
273
|
-
// On IE and Opera < 12, we must provide non-undefined values to
|
|
274
|
-
// initMouseEvent, otherwise it will fail.
|
|
275
|
-
event.initMouseEvent(opt_eventType || original.type, true, // canBubble
|
|
276
|
-
true, // cancelable
|
|
277
|
-
window, original.detail || 1, originalMouseEvent.screenX || 0, originalMouseEvent.screenY || 0, originalMouseEvent.clientX || 0, originalMouseEvent.clientY || 0, originalMouseEvent.ctrlKey || false, originalMouseEvent.altKey || false, originalMouseEvent.shiftKey || false, originalMouseEvent.metaKey || false, originalMouseEvent.button || 0, originalMouseEvent.relatedTarget || null);
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
// Older versions of IE (up to version 8) do not support the
|
|
281
|
-
// W3C event model. Use the IE specific function instead.
|
|
282
|
-
// @ts-ignore
|
|
283
|
-
event = document.createEventObject();
|
|
284
|
-
event.type = opt_eventType || original.type;
|
|
285
|
-
event.clientX = originalMouseEvent.clientX;
|
|
286
|
-
event.clientY = originalMouseEvent.clientY;
|
|
287
|
-
event.button = originalMouseEvent.button;
|
|
288
|
-
event.detail = original.detail;
|
|
289
|
-
event.ctrlKey = originalMouseEvent.ctrlKey;
|
|
290
|
-
event.altKey = originalMouseEvent.altKey;
|
|
291
|
-
event.shiftKey = originalMouseEvent.shiftKey;
|
|
292
|
-
event.metaKey = originalMouseEvent.metaKey;
|
|
293
|
-
}
|
|
294
|
-
event.originalTimestamp = original.timeStamp;
|
|
295
|
-
return event;
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Creates a generic event object for replaying through the DOM.
|
|
299
|
-
* @param original The event to create a new event from.
|
|
300
|
-
* @param opt_eventType The type this event is being handled as by jsaction.
|
|
301
|
-
* E.g. a keypress is handled as click in some cases.
|
|
302
|
-
* @return The event object.
|
|
303
|
-
*/
|
|
304
|
-
function createGenericEvent(original, opt_eventType) {
|
|
305
|
-
let event;
|
|
306
|
-
if (document.createEvent) {
|
|
307
|
-
// Event creation as per W3C event model specification. This codepath
|
|
308
|
-
// is used by most non-IE browsers and also by IE 9 and later.
|
|
309
|
-
event = document.createEvent('Event');
|
|
310
|
-
event.initEvent(opt_eventType || original.type, true, true);
|
|
311
|
-
}
|
|
312
|
-
else {
|
|
313
|
-
// Older versions of IE (up to version 8) do not support the
|
|
314
|
-
// W3C event model. Use the IE specific function instead.
|
|
315
|
-
// Suppressing errors for ts-migration.
|
|
316
|
-
// TS2339: Property 'createEventObject' does not exist on type 'Document'.
|
|
317
|
-
// @ts-ignore
|
|
318
|
-
event = document.createEventObject();
|
|
319
|
-
event.type = opt_eventType || original.type;
|
|
320
|
-
}
|
|
321
|
-
event.originalTimestamp = original.timeStamp;
|
|
322
|
-
return event;
|
|
323
|
-
}
|
|
324
|
-
/**
|
|
325
|
-
* Creates an event object for replaying through the DOM.
|
|
326
|
-
* NOTE: This function is visible just for testing. Please don't use
|
|
327
|
-
* it outside JsAction internal testing.
|
|
328
|
-
* TODO: Add support for FocusEvent and WheelEvent.
|
|
329
|
-
* @param base The event to create a new event from.
|
|
330
|
-
* @param opt_eventType The type this event is being handled as by jsaction.
|
|
331
|
-
* E.g. a keypress is handled as click in some cases.
|
|
332
|
-
* @return The event object.
|
|
333
|
-
*/
|
|
334
|
-
export function createEvent(base, opt_eventType) {
|
|
335
|
-
const original = base;
|
|
336
|
-
let event;
|
|
337
|
-
let eventType;
|
|
338
|
-
if (original.type === EventType.CUSTOM) {
|
|
339
|
-
eventType = EventType.CUSTOM;
|
|
340
|
-
}
|
|
341
|
-
else {
|
|
342
|
-
eventType = opt_eventType || original.type;
|
|
343
|
-
}
|
|
344
|
-
if (isKeyboardEvent(eventType)) {
|
|
345
|
-
event = createKeyboardEvent(original, opt_eventType);
|
|
346
|
-
}
|
|
347
|
-
else if (isMouseEvent(eventType)) {
|
|
348
|
-
event = createMouseEvent(original, opt_eventType);
|
|
349
|
-
}
|
|
350
|
-
else if (isUiEvent(eventType)) {
|
|
351
|
-
event = createUiEvent(original, opt_eventType);
|
|
352
|
-
}
|
|
353
|
-
else if (eventType === EventType.CUSTOM) {
|
|
354
|
-
event = createCustomEvent(opt_eventType, original['detail']['data'], original['detail']['triggeringEvent']);
|
|
355
|
-
event.originalTimestamp = original.timeStamp;
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
// This ensures we don't send an undefined event object to the replayer.
|
|
359
|
-
event = createGenericEvent(original, opt_eventType);
|
|
360
|
-
}
|
|
361
|
-
return event;
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Sends an event for replay to the DOM.
|
|
365
|
-
* @param target The target for the event.
|
|
366
|
-
* @param event The event object.
|
|
367
|
-
* @return The return value of the event replay, i.e., whether preventDefault()
|
|
368
|
-
* was called on it.
|
|
369
|
-
*/
|
|
370
|
-
export function triggerEvent(target, event) {
|
|
371
|
-
if (target.dispatchEvent) {
|
|
372
|
-
return target.dispatchEvent(event);
|
|
373
|
-
}
|
|
374
|
-
else {
|
|
375
|
-
// Suppressing errors for ts-migration.
|
|
376
|
-
// TS2339: Property 'fireEvent' does not exist on type 'Element'.
|
|
377
|
-
// @ts-ignore
|
|
378
|
-
return target.fireEvent('on' + event.type, event);
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
/** Do not use outiside of testing. */
|
|
382
|
-
export const testing = {
|
|
383
|
-
createKeyboardModifiersList,
|
|
384
|
-
createGenericEvent,
|
|
385
|
-
isKeyboardEvent,
|
|
386
|
-
isMouseEvent,
|
|
387
|
-
isUiEvent,
|
|
388
|
-
};
|
|
389
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwbGF5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9wcmltaXRpdmVzL2V2ZW50LWRpc3BhdGNoL3NyYy9yZXBsYXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUg7Ozs7R0FJRztBQUVILE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ25ELE9BQU8sS0FBSyxhQUFhLE1BQU0sVUFBVSxDQUFDO0FBQzFDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFNeEM7O0dBRUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVksRUFBRSxhQUFzQixFQUFFLFNBQWtCO0lBQ2xGLFlBQVksQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxlQUFlLENBQUMsU0FBaUI7SUFDeEMsT0FBTyxDQUNMLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUTtRQUNoQyxTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU87UUFDL0IsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLLENBQzlCLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsWUFBWSxDQUFDLFNBQWlCO0lBQ3JDLG9EQUFvRDtJQUNwRCxPQUFPLENBQ0wsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLO1FBQzdCLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUTtRQUNoQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVM7UUFDakMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTO1FBQ2pDLFNBQVMsS0FBSyxTQUFTLENBQUMsUUFBUTtRQUNoQyxTQUFTLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FDbEMsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxTQUFTLENBQUMsU0FBaUI7SUFDbEMsaUVBQWlFO0lBQ2pFLGdFQUFnRTtJQUNoRSxPQUFPLENBQ0wsU0FBUyxLQUFLLFNBQVMsQ0FBQyxLQUFLO1FBQzdCLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSTtRQUM1QixTQUFTLEtBQUssU0FBUyxDQUFDLE9BQU87UUFDL0IsU0FBUyxLQUFLLFNBQVMsQ0FBQyxRQUFRO1FBQ2hDLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUMvQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQVMsMkJBQTJCLENBQ2xDLEdBQVksRUFDWixJQUFhLEVBQ2IsSUFBYSxFQUNiLEtBQWM7SUFFZCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwQixDQUFDO0lBQ0QsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUFlLEVBQUUsYUFBc0I7SUFDbkUsSUFBSSxLQUFxRSxDQUFDO0lBQzFFLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sZUFBZSxHQUFHLFFBQW1CLENBQUM7UUFDNUMsc0VBQXNFO1FBQ3RFLDhEQUE4RDtRQUM5RCxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4QyxnRUFBZ0U7UUFDaEUscUNBQXFDO1FBQ3JDLEtBQUssQ0FBQyxXQUFXLENBQ2YsYUFBYSxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQ3JDLGVBQWUsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQ3RFLGVBQWUsQ0FBQyxVQUFVLElBQUksS0FBSyxFQUNuQyxlQUFlLENBQUMsSUFBSSxJQUFJLE1BQU0sRUFDN0IsUUFBd0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUN0QyxDQUFDO1FBQ0YsU0FBUztJQUNYLENBQUM7U0FBTSxDQUFDO1FBQ04sNERBQTREO1FBQzVELHlEQUF5RDtRQUN6RCx1Q0FBdUM7UUFDdkMsNEVBQTRFO1FBQzVFLGFBQWE7UUFDYixLQUFLLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDckMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM1QyxLQUFLLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDekUsS0FBSyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQztRQUNoRCxLQUFLLENBQUMsSUFBSSxHQUFJLFFBQStCLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQztRQUM3RCxLQUFLLENBQUMsTUFBTSxHQUFJLFFBQXdCLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBQ0QseUVBQXlFO0lBQ3pFLGtEQUFrRDtJQUNqRCxLQUErQixDQUFDLGFBQWEsR0FBSSxRQUF1QixDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUM7SUFDaEcsS0FBSyxDQUFDLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7SUFDN0MsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxRQUFlLEVBQUUsYUFBc0I7SUFDekUsSUFBSSxLQUFLLENBQUM7SUFDVixNQUFNLGFBQWEsR0FBRyxRQUF5QixDQUFDO0lBQ2hELElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLHNFQUFzRTtRQUN0RSw4REFBOEQ7UUFDOUQsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDOUMsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM1QixJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdkIsT0FBTztnQkFDUCw0SEFBNEg7Z0JBQzVILE1BQU0sU0FBUyxHQUFHLDJCQUEyQixDQUMzQyxhQUFhLENBQUMsTUFBTSxFQUNwQixhQUFhLENBQUMsT0FBTyxFQUNyQixhQUFhLENBQUMsT0FBTyxFQUNyQixhQUFhLENBQUMsUUFBUSxDQUN2QixDQUFDO2dCQUNGLEtBQUssQ0FBQyxpQkFBaUIsQ0FDckIsYUFBYSxJQUFJLGFBQWEsQ0FBQyxJQUFJLEVBQ25DLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTSxFQUNOLGFBQWEsQ0FBQyxHQUFHLEVBQ2pCLGFBQWEsQ0FBQyxRQUFRO2dCQUN0Qix1Q0FBdUM7Z0JBQ3ZDLDJEQUEyRDtnQkFDM0QsNkNBQTZDO2dCQUM3QyxhQUFhO2dCQUNiLFNBQVMsRUFDVCxhQUFhLENBQUMsTUFBTTtnQkFDcEIsZ0NBQWdDO2dCQUNoQyxhQUFhLENBQUMsTUFBTSxDQUNyQixDQUFDO1lBQ0osQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdDQUFnQztnQkFDaEMsMkVBQTJFO2dCQUMzRSxLQUFLLENBQUMsaUJBQWlCLENBQ3JCLGFBQWEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUM5QixJQUFJLEVBQ0osSUFBSSxFQUNKLE1BQU0sRUFDTixhQUFhLENBQUMsR0FBRyxFQUNqQixhQUFhLENBQUMsUUFBUSxFQUN0QixhQUFhLENBQUMsT0FBTyxFQUNyQixhQUFhLENBQUMsTUFBTSxFQUNwQixhQUFhLENBQUMsUUFBUSxFQUN0QixhQUFhLENBQUMsT0FBTyxDQUN0QixDQUFDO2dCQUNGLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRTtvQkFDckMsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFFLFFBQTBCLENBQUMsTUFBTTtvQkFDN0MsVUFBVSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxzREFBc0Q7Z0JBQ3RELCtEQUErRDtnQkFDL0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFO29CQUNyQyx1Q0FBdUM7b0JBQ3ZDLDhEQUE4RDtvQkFDOUQsYUFBYTtvQkFDYixHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU07b0JBQzFCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsc0VBQXNFO2dCQUN0RSxRQUFRO2dCQUNSLDZGQUE2RjtZQUMvRixDQUFDO1lBQ0Qsd0VBQXdFO1lBQ3hFLHFFQUFxRTtZQUNyRSx5RUFBeUU7WUFDekUsd0VBQXdFO1lBQ3hFLG9FQUFvRTtZQUNwRSx5RUFBeUU7WUFDekUsa0NBQWtDO1lBQ2xDLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixJQUFJLGFBQWEsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztvQkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFO3dCQUNsQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLEdBQUc7d0JBQzVCLFVBQVUsRUFBRSxJQUFJO3FCQUNqQixDQUFDLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUM7WUFDRCxzRUFBc0U7WUFDdEUsNkJBQTZCO1lBQzdCLElBQUksYUFBYSxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDMUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFO29CQUN2QyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUUsUUFBMEIsQ0FBQyxRQUFRO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtpQkFDakIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sYUFBYSxHQUFHLEdBQUcsRUFBRSxDQUFFLFFBQTBCLENBQUMsT0FBTyxDQUFDO2dCQUNoRSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUU7b0JBQ3RDLEdBQUcsRUFBRSxhQUFhO29CQUNsQixVQUFVLEVBQUUsSUFBSTtpQkFDakIsQ0FBQyxDQUFDO2dCQUNILE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRTtvQkFDcEMsR0FBRyxFQUFFLGFBQWE7b0JBQ2xCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTix3RUFBd0U7WUFDeEUsOEVBQThFO1lBQzlFLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsS0FBSyxDQUFDLFlBQVksQ0FDaEIsYUFBYSxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQzlCLElBQUksRUFDSixJQUFJLEVBQ0osTUFBTTtZQUNOLHVDQUF1QztZQUN2QywrREFBK0Q7WUFDL0QsYUFBYTtZQUNiLFFBQVEsQ0FBQyxPQUFPO1lBQ2hCLHVDQUF1QztZQUN2Qyw4REFBOEQ7WUFDOUQsYUFBYTtZQUNiLFFBQVEsQ0FBQyxNQUFNO1lBQ2YsdUNBQXVDO1lBQ3ZDLGdFQUFnRTtZQUNoRSxhQUFhO1lBQ2IsUUFBUSxDQUFDLFFBQVE7WUFDakIsdUNBQXVDO1lBQ3ZDLCtEQUErRDtZQUMvRCxhQUFhO1lBQ2IsUUFBUSxDQUFDLE9BQU87WUFDaEIsdUNBQXVDO1lBQ3ZDLCtEQUErRDtZQUMvRCxhQUFhO1lBQ2IsUUFBUSxDQUFDLE9BQU87WUFDaEIsdUNBQXVDO1lBQ3ZDLGdFQUFnRTtZQUNoRSxhQUFhO1lBQ2IsUUFBUSxDQUFDLFFBQVEsQ0FDbEIsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLDREQUE0RDtRQUM1RCx5REFBeUQ7UUFDekQsdUNBQXVDO1FBQ3ZDLGFBQWE7UUFDYixLQUFLLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDckMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM1QyxNQUFNLHFCQUFxQixHQUFHLFFBQXlCLENBQUM7UUFDeEQsS0FBSyxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDNUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7UUFDOUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDNUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7UUFDaEQsS0FBSyxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7UUFDOUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxHQUFHLENBQUM7UUFDdEMsS0FBSyxDQUFDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUM7UUFDOUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7SUFDbEQsQ0FBQztJQUNELEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzdDLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxRQUFlLEVBQUUsYUFBc0I7SUFDdEUsSUFBSSxLQUFLLENBQUM7SUFDVixNQUFNLGtCQUFrQixHQUFHLFFBQXNCLENBQUM7SUFDbEQsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDekIsc0VBQXNFO1FBQ3RFLDhEQUE4RDtRQUM5RCxLQUFLLEdBQUcsUUFBUSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzQyxnRUFBZ0U7UUFDaEUsMENBQTBDO1FBQzFDLEtBQUssQ0FBQyxjQUFjLENBQ2xCLGFBQWEsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUM5QixJQUFJLEVBQUUsWUFBWTtRQUNsQixJQUFJLEVBQUUsYUFBYTtRQUNuQixNQUFNLEVBQ0wsUUFBd0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUNyQyxrQkFBa0IsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUMvQixrQkFBa0IsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUMvQixrQkFBa0IsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUMvQixrQkFBa0IsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUMvQixrQkFBa0IsQ0FBQyxPQUFPLElBQUksS0FBSyxFQUNuQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUNsQyxrQkFBa0IsQ0FBQyxRQUFRLElBQUksS0FBSyxFQUNwQyxrQkFBa0IsQ0FBQyxPQUFPLElBQUksS0FBSyxFQUNuQyxrQkFBa0IsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUM5QixrQkFBa0IsQ0FBQyxhQUFhLElBQUksSUFBSSxDQUN6QyxDQUFDO0lBQ0osQ0FBQztTQUFNLENBQUM7UUFDTiw0REFBNEQ7UUFDNUQseURBQXlEO1FBQ3pELGFBQWE7UUFDYixLQUFLLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDckMsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztRQUM1QyxLQUFLLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztRQUMzQyxLQUFLLENBQUMsT0FBTyxHQUFHLGtCQUFrQixDQUFDLE9BQU8sQ0FBQztRQUMzQyxLQUFLLENBQUMsTUFBTSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUN6QyxLQUFLLENBQUMsTUFBTSxHQUFJLFFBQXdCLENBQUMsTUFBTSxDQUFDO1FBQ2hELEtBQUssQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO1FBQzNDLEtBQUssQ0FBQyxNQUFNLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDO1FBQ3pDLEtBQUssQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLENBQUMsUUFBUSxDQUFDO1FBQzdDLEtBQUssQ0FBQyxPQUFPLEdBQUcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO0lBQzdDLENBQUM7SUFDRCxLQUFLLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUM3QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGtCQUFrQixDQUFDLFFBQWUsRUFBRSxhQUFzQjtJQUNqRSxJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLHNFQUFzRTtRQUN0RSw4REFBOEQ7UUFDOUQsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztTQUFNLENBQUM7UUFDTiw0REFBNEQ7UUFDNUQseURBQXlEO1FBQ3pELHVDQUF1QztRQUN2Qyw0RUFBNEU7UUFDNUUsYUFBYTtRQUNiLEtBQUssR0FBRyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNyQyxLQUFLLENBQUMsSUFBSSxHQUFHLGFBQWEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQzlDLENBQUM7SUFDRCxLQUFLLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUM3QyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLElBQWEsRUFBRSxhQUFzQjtJQUMvRCxNQUFNLFFBQVEsR0FBRyxJQUFhLENBQUM7SUFDL0IsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLFNBQVMsQ0FBQztJQUNkLElBQUksUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdkMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztTQUFNLENBQUM7UUFDTixTQUFTLEdBQUcsYUFBYSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDL0IsS0FBSyxHQUFHLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN2RCxDQUFDO1NBQU0sSUFBSSxZQUFZLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNuQyxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7U0FBTSxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hDLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7U0FBTSxJQUFJLFNBQVMsS0FBSyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUMsS0FBSyxHQUFHLGlCQUFpQixDQUN2QixhQUFjLEVBQ2IsUUFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFDMUMsUUFBd0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUN2RCxDQUFDO1FBQ0QsS0FBcUQsQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQ2hHLENBQUM7U0FBTSxDQUFDO1FBQ04sd0VBQXdFO1FBQ3hFLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBbUIsRUFBRSxLQUFZO0lBQzVELElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO1NBQU0sQ0FBQztRQUNOLHVDQUF1QztRQUN2QyxtRUFBbUU7UUFDbkUsYUFBYTtRQUNiLE9BQVEsTUFBa0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztBQUNILENBQUM7QUFFRCxzQ0FBc0M7QUFDdEMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHO0lBQ3JCLDJCQUEyQjtJQUMzQixrQkFBa0I7SUFDbEIsZUFBZTtJQUNmLFlBQVk7SUFDWixTQUFTO0NBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgRnVuY3Rpb25zIGZvciByZXBsYXlpbmcgZXZlbnRzIGJ5IHRoZSBqc2FjdGlvblxuICogRGlzcGF0Y2hlci5cbiAqIEFsbCB0cy1pZ25vcmVzIGluIHRoaXMgZmlsZSBhcmUgZHVlIHRvIEFQSXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBicm93c2VyLlxuICovXG5cbmltcG9ydCB7Y3JlYXRlQ3VzdG9tRXZlbnR9IGZyb20gJy4vL2N1c3RvbV9ldmVudHMnO1xuaW1wb3J0ICogYXMganNhY3Rpb25FdmVudCBmcm9tICcuLy9ldmVudCc7XG5pbXBvcnQge0V2ZW50VHlwZX0gZnJvbSAnLi8vZXZlbnRfdHlwZSc7XG5cbnR5cGUgV3JpdGVhYmxlPFQ+ID0ge1xuICAtcmVhZG9ubHkgW1AgaW4ga2V5b2YgVF06IFRbUF07XG59O1xuXG4vKipcbiAqIFJlcGxheXMgYW4gZXZlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYXlFdmVudChldmVudDogRXZlbnQsIHRhcmdldEVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50VHlwZT86IHN0cmluZykge1xuICB0cmlnZ2VyRXZlbnQodGFyZ2V0RWxlbWVudCwgY3JlYXRlRXZlbnQoZXZlbnQsIGV2ZW50VHlwZSkpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgdGhlIGtleWJvYXJkLlxuICogQHBhcmFtIGV2ZW50VHlwZSBUaGUgZXZlbnQgdHlwZS5cbiAqIEByZXR1cm4gV2hldGhlciBpdCdzIGEga2V5Ym9hcmQgZXZlbnQuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudChldmVudFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLktFWVBSRVNTIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuS0VZRE9XTiB8fFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLktFWVVQXG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZXZlbnQgd2FzIHRyaWdnZXJlZCBieSB0aGUgbW91c2UuXG4gKiBAcGFyYW0gZXZlbnRUeXBlIFRoZSBldmVudCB0eXBlLlxuICogQHJldHVybiBXaGV0aGVyIGl0J3MgYSBtb3VzZSBldmVudC5cbiAqL1xuZnVuY3Rpb24gaXNNb3VzZUV2ZW50KGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRPRE86IFZlcmlmeSBpZiBEcmFnIGV2ZW50cyBzaG91bGQgYmUgYm91bmQgaGVyZS5cbiAgcmV0dXJuIChcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5DTElDSyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkRCTENMSUNLIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTU9VU0VET1dOIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTU9VU0VPVkVSIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuTU9VU0VPVVQgfHxcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5NT1VTRU1PVkVcbiAgKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBldmVudCBpcyBhIGdlbmVyYWwgVUkgZXZlbnQuXG4gKiBAcGFyYW0gZXZlbnRUeXBlIFRoZSBldmVudCB0eXBlLlxuICogQHJldHVybiBXaGV0aGVyIGl0J3MgYSBmb2N1cyBldmVudC5cbiAqL1xuZnVuY3Rpb24gaXNVaUV2ZW50KGV2ZW50VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIEFsbW9zdCBub2JvZHkgc3VwcG9ydHMgdGhlIFczQyBtZXRob2Qgb2YgY3JlYXRpbmcgRm9jdXNFdmVudHMuXG4gIC8vIEZvciBub3csIHdlJ3JlIGdvaW5nIHRvIHVzZSB0aGUgVUlFdmVudCBhcyBhIHN1cGVyLWludGVyZmFjZS5cbiAgcmV0dXJuIChcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5GT0NVUyB8fFxuICAgIGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkJMVVIgfHxcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5GT0NVU0lOIHx8XG4gICAgZXZlbnRUeXBlID09PSBFdmVudFR5cGUuRk9DVVNPVVQgfHxcbiAgICBldmVudFR5cGUgPT09IEV2ZW50VHlwZS5TQ1JPTExcbiAgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUgYSB3aGl0ZXNwYWNlLWRlbGluZWF0ZWQgbGlzdCBvZiBtb2RpZmllciBrZXlzIHRoYXQgc2hvdWxkIGJlXG4gKiBjb25zaWRlcmVkIHRvIGJlIGFjdGl2ZSBvbiB0aGUgZXZlbnQncyBrZXkuIFNlZSBkZXRhaWxzIGF0XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vS2V5Ym9hcmRFdmVudC5cbiAqIEBwYXJhbSBhbHQgQWx0IHByZXNzZWQuXG4gKiBAcGFyYW0gY3RybCBDb250cm9sIHByZXNzZWQuXG4gKiBAcGFyYW0gbWV0YSBDb21tYW5kIHByZXNzZWQgKE9TWCBvbmx5KS5cbiAqIEBwYXJhbSBzaGlmdCBTaGlmdCBwcmVzc2VkLlxuICogQHJldHVybiBUaGUgY29uc3RydWN0ZWQgbW9kaWZpZXIga2V5cyBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUtleWJvYXJkTW9kaWZpZXJzTGlzdChcbiAgYWx0OiBib29sZWFuLFxuICBjdHJsOiBib29sZWFuLFxuICBtZXRhOiBib29sZWFuLFxuICBzaGlmdDogYm9vbGVhbixcbik6IHN0cmluZyB7XG4gIGNvbnN0IGtleXMgPSBbXTtcbiAgaWYgKGFsdCkge1xuICAgIGtleXMucHVzaCgnQWx0Jyk7XG4gIH1cbiAgaWYgKGN0cmwpIHtcbiAgICBrZXlzLnB1c2goJ0NvbnRyb2wnKTtcbiAgfVxuICBpZiAobWV0YSkge1xuICAgIGtleXMucHVzaCgnTWV0YScpO1xuICB9XG4gIGlmIChzaGlmdCkge1xuICAgIGtleXMucHVzaCgnU2hpZnQnKTtcbiAgfVxuICByZXR1cm4ga2V5cy5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFVJIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgZS5nLiBibHVyIGV2ZW50cyBhcmUgaGFuZGxlZCBhcyBmb2N1c291dFxuICogQHJldHVybiBUaGUgZXZlbnQgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVWlFdmVudChvcmlnaW5hbDogRXZlbnQsIG9wdF9ldmVudFR5cGU/OiBzdHJpbmcpOiBFdmVudCB7XG4gIGxldCBldmVudDogV3JpdGVhYmxlPFVJRXZlbnQ+ICYge29yaWdpbmFsVGltZXN0YW1wPzogRE9NSGlnaFJlc1RpbWVTdGFtcH07XG4gIGlmIChkb2N1bWVudC5jcmVhdGVFdmVudCkge1xuICAgIGNvbnN0IG9yaWdpbmFsVWlFdmVudCA9IG9yaWdpbmFsIGFzIFVJRXZlbnQ7XG4gICAgLy8gRXZlbnQgY3JlYXRpb24gYXMgcGVyIFczQyBldmVudCBtb2RlbCBzcGVjaWZpY2F0aW9uLiAgVGhpcyBjb2RlcGF0aFxuICAgIC8vIGlzIHVzZWQgYnkgbW9zdCBub24tSUUgYnJvd3NlcnMgYW5kIGFsc28gYnkgSUUgOSBhbmQgbGF0ZXIuXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnVUlFdmVudCcpO1xuICAgIC8vIE9uIElFIGFuZCBPcGVyYSA8IDEyLCB3ZSBtdXN0IHByb3ZpZGUgbm9uLXVuZGVmaW5lZCB2YWx1ZXMgdG9cbiAgICAvLyBpbml0RXZlbnQsIG90aGVyd2lzZSBpdCB3aWxsIGZhaWwuXG4gICAgZXZlbnQuaW5pdFVJRXZlbnQoXG4gICAgICBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsVWlFdmVudC50eXBlLFxuICAgICAgb3JpZ2luYWxVaUV2ZW50LmJ1YmJsZXMgIT09IHVuZGVmaW5lZCA/IG9yaWdpbmFsVWlFdmVudC5idWJibGVzIDogdHJ1ZSxcbiAgICAgIG9yaWdpbmFsVWlFdmVudC5jYW5jZWxhYmxlIHx8IGZhbHNlLFxuICAgICAgb3JpZ2luYWxVaUV2ZW50LnZpZXcgfHwgd2luZG93LFxuICAgICAgKG9yaWdpbmFsIGFzIEN1c3RvbUV2ZW50KS5kZXRhaWwgfHwgMCxcbiAgICApO1xuICAgIC8vIGRldGFpbFxuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFICh1cCB0byB2ZXJzaW9uIDgpIGRvIG5vdCBzdXBwb3J0IHRoZVxuICAgIC8vIFczQyBldmVudCBtb2RlbC4gVXNlIHRoZSBJRSBzcGVjaWZpYyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnY3JlYXRlRXZlbnRPYmplY3QnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0RvY3VtZW50Jy5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICAgIGV2ZW50LnR5cGUgPSBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGU7XG4gICAgZXZlbnQuYnViYmxlcyA9IG9yaWdpbmFsLmJ1YmJsZXMgIT09IHVuZGVmaW5lZCA/IG9yaWdpbmFsLmJ1YmJsZXMgOiB0cnVlO1xuICAgIGV2ZW50LmNhbmNlbGFibGUgPSBvcmlnaW5hbC5jYW5jZWxhYmxlIHx8IGZhbHNlO1xuICAgIGV2ZW50LnZpZXcgPSAob3JpZ2luYWwgYXMgV3JpdGVhYmxlPFVJRXZlbnQ+KS52aWV3IHx8IHdpbmRvdztcbiAgICBldmVudC5kZXRhaWwgPSAob3JpZ2luYWwgYXMgQ3VzdG9tRXZlbnQpLmRldGFpbCB8fCAwO1xuICB9XG4gIC8vIFNvbWUgZm9jdXMgZXZlbnRzIGFsc28gaGF2ZSBhIG51bGxhYmxlIHJlbGF0ZWRUYXJnZXQgdmFsdWUgd2hpY2ggaXNuJ3RcbiAgLy8gZGlyZWN0bHkgc3VwcG9ydGVkIGluIHRoZSBpbml0VUlFdmVudCgpIG1ldGhvZC5cbiAgKGV2ZW50IGFzIFdyaXRlYWJsZTxGb2N1c0V2ZW50PikucmVsYXRlZFRhcmdldCA9IChvcmlnaW5hbCBhcyBGb2N1c0V2ZW50KS5yZWxhdGVkVGFyZ2V0IHx8IG51bGw7XG4gIGV2ZW50Lm9yaWdpbmFsVGltZXN0YW1wID0gb3JpZ2luYWwudGltZVN0YW1wO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGtleWJvYXJkIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqIEBzdXBwcmVzcyB7c3RyaWN0TWlzc2luZ1Byb3BlcnRpZXN9IFR3byBkZWZpbml0aW9ucyBvZiBpbml0S2V5Ym9hcmRFdmVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUtleWJvYXJkRXZlbnQob3JpZ2luYWw6IEV2ZW50LCBvcHRfZXZlbnRUeXBlPzogc3RyaW5nKTogRXZlbnQge1xuICBsZXQgZXZlbnQ7XG4gIGNvbnN0IGtleWJvYXJkRXZlbnQgPSBvcmlnaW5hbCBhcyBLZXlib2FyZEV2ZW50O1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAvLyBFdmVudCBjcmVhdGlvbiBhcyBwZXIgVzNDIGV2ZW50IG1vZGVsIHNwZWNpZmljYXRpb24uICBUaGlzIGNvZGVwYXRoXG4gICAgLy8gaXMgdXNlZCBieSBtb3N0IG5vbi1JRSBicm93c2VycyBhbmQgYWxzbyBieSBJRSA5IGFuZCBsYXRlci5cbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdLZXlib2FyZEV2ZW50Jyk7XG4gICAgaWYgKGV2ZW50LmluaXRLZXlib2FyZEV2ZW50KSB7XG4gICAgICBpZiAoanNhY3Rpb25FdmVudC5pc0llKSB7XG4gICAgICAgIC8vIElFOStcbiAgICAgICAgLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcHJldmlvdXMtdmVyc2lvbnMvd2luZG93cy9pbnRlcm5ldC1leHBsb3Jlci9pZS1kZXZlbG9wZXIvcGxhdGZvcm0tYXBpcy9mZjk3NTk0NSh2PXZzLjg1KVxuICAgICAgICBjb25zdCBtb2RpZmllcnMgPSBjcmVhdGVLZXlib2FyZE1vZGlmaWVyc0xpc3QoXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5hbHRLZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5jdHJsS2V5LFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQubWV0YUtleSxcbiAgICAgICAgICBrZXlib2FyZEV2ZW50LnNoaWZ0S2V5LFxuICAgICAgICApO1xuICAgICAgICBldmVudC5pbml0S2V5Ym9hcmRFdmVudChcbiAgICAgICAgICBvcHRfZXZlbnRUeXBlIHx8IGtleWJvYXJkRXZlbnQudHlwZSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgd2luZG93LFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQua2V5LFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQubG9jYXRpb24sXG4gICAgICAgICAgLy8gU3VwcHJlc3NpbmcgZXJyb3JzIGZvciB0cy1taWdyYXRpb24uXG4gICAgICAgICAgLy8gICBUUzIzNDU6IEFyZ3VtZW50IG9mIHR5cGUgJ3N0cmluZycgaXMgbm90IGFzc2lnbmFibGUgdG9cbiAgICAgICAgICAvLyAgIHBhcmFtZXRlciBvZiB0eXBlICdib29sZWFuIHwgdW5kZWZpbmVkJy5cbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgbW9kaWZpZXJzLFxuICAgICAgICAgIGtleWJvYXJkRXZlbnQucmVwZWF0LFxuICAgICAgICAgIC8vIEB0cy1pZ25vcmUgVGhpcyBkb2Vzbid0IGV4aXN0XG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5sb2NhbGUsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXM0MgRE9NIExldmVsIDMgRXZlbnRzIG1vZGVsLlxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvdWlldmVudHMvI2lkbC1pbnRlcmZhY2UtS2V5Ym9hcmRFdmVudC1pbml0aWFsaXplcnNcbiAgICAgICAgZXZlbnQuaW5pdEtleWJvYXJkRXZlbnQoXG4gICAgICAgICAgb3B0X2V2ZW50VHlwZSB8fCBvcmlnaW5hbC50eXBlLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICB3aW5kb3csXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5rZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5sb2NhdGlvbixcbiAgICAgICAgICBrZXlib2FyZEV2ZW50LmN0cmxLZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5hbHRLZXksXG4gICAgICAgICAga2V5Ym9hcmRFdmVudC5zaGlmdEtleSxcbiAgICAgICAgICBrZXlib2FyZEV2ZW50Lm1ldGFLZXksXG4gICAgICAgICk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3JlcGVhdCcsIHtcbiAgICAgICAgICBnZXQ6ICgpID0+IChvcmlnaW5hbCBhcyBLZXlib2FyZEV2ZW50KS5yZXBlYXQsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEFkZCBtaXNzaW5nICdsb2NhbGUnIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBzcGVjLlxuICAgICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xNjg5NzFcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAnbG9jYWxlJywge1xuICAgICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnbG9jYWxlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdFdmVudCcuXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGdldDogKCkgPT4gb3JpZ2luYWwubG9jYWxlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBBcHBsZSBXZWJLaXQgaGFzIGEgbm9uLXN0YW5kYXJkIGFsdEdyYXBoS2V5IHRoYXQgaXMgbm90IGltcGxlbWVudGVkXG4gICAgICAgIC8vIGhlcmUuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3dlYmtpdGpzL2tleWJvYXJkZXZlbnQvMTYzMzc1My1pbml0a2V5Ym9hcmRldmVudFxuICAgICAgfVxuICAgICAgLy8gQmxpbmsgYW5kIFdlYmtpdCBoYWQgYSBidWcgdGhhdCBjYXVzZXMgdGhlIGBjaGFyQ29kZWAsIGBrZXlDb2RlYCwgYW5kXG4gICAgICAvLyBgd2hpY2hgIHByb3BlcnRpZXMgdG8gYWx3YXlzIGJlIHVuc2V0IHdoZW4gc3ludGhlc2l6aW5nIGEga2V5Ym9hcmRcbiAgICAgIC8vIGV2ZW50LiBEZXRhaWxzIGF0OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY3MzUuIFdpdGhcbiAgICAgIC8vIHRoZXNlIHByb3BlcnRpZXMgYmVpbmcgZGVwcmVjYXRlZCwgdGhlIGJ1ZyBoYXMgZXZvbHZlZCBpbnRvIGFmZmVjdGluZ1xuICAgICAgLy8gdGhlIGBrZXlgIHByb3BlcnR5LiBXZSB3b3JrIGFyb3VuZCBpdCBieSByZWRlZmluaW5nIHRoZSBga2V5YCBhbmRcbiAgICAgIC8vIGRlcHJlY2F0ZWQgcHJvcGVydGllczsgYSBzaW1wbGUgYXNzaWdubWVudCBoZXJlIHdvdWxkIGZhaWwgYmVjYXVzZSB0aGVcbiAgICAgIC8vIG5hdGl2ZSBwcm9wZXJ0aWVzIGFyZSByZWFkb25seS5cbiAgICAgIGlmIChqc2FjdGlvbkV2ZW50LmlzV2ViS2l0KSB7XG4gICAgICAgIGlmIChrZXlib2FyZEV2ZW50LmtleSAmJiBldmVudC5rZXkgPT09ICcnKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2ZW50LCAna2V5Jywge1xuICAgICAgICAgICAgZ2V0OiAoKSA9PiBrZXlib2FyZEV2ZW50LmtleSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIFJlLWltcGxlbWVudCB0aGUgZGVwcmVjYXRlZCBgY2hhckNvZGVgLCBga2V5Q29kZWAgYW5kIGB3aGljaGAgd2hpY2hcbiAgICAgIC8vIGFyZSBhbHNvIGFuIGlzc3VlIG9uIElFOSsuXG4gICAgICBpZiAoanNhY3Rpb25FdmVudC5pc1dlYktpdCB8fCBqc2FjdGlvbkV2ZW50LmlzSWUgfHwganNhY3Rpb25FdmVudC5pc0dlY2tvKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ2NoYXJDb2RlJywge1xuICAgICAgICAgIGdldDogKCkgPT4gKG9yaWdpbmFsIGFzIEtleWJvYXJkRXZlbnQpLmNoYXJDb2RlLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBrZXlDb2RlR2V0dGVyID0gKCkgPT4gKG9yaWdpbmFsIGFzIEtleWJvYXJkRXZlbnQpLmtleUNvZGU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ2tleUNvZGUnLCB7XG4gICAgICAgICAgZ2V0OiBrZXlDb2RlR2V0dGVyLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXZlbnQsICd3aGljaCcsIHtcbiAgICAgICAgICBnZXQ6IGtleUNvZGVHZXR0ZXIsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdlY2tvIG9ubHkgc3VwcG9ydHMgYW4gb2xkZXIvZGVwcmVjYXRlZCB2ZXJzaW9uIGZyb20gRE9NIExldmVsIDIuIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQvaW5pdEtleUV2ZW50XG4gICAgICAvLyBmb3IgZGV0YWlscy5cbiAgICAgIC8vIEB0cy1pZ25vcmUgZGl0dG9cbiAgICAgIGV2ZW50LmluaXRLZXlFdmVudChcbiAgICAgICAgb3B0X2V2ZW50VHlwZSB8fCBvcmlnaW5hbC50eXBlLFxuICAgICAgICB0cnVlLFxuICAgICAgICB0cnVlLFxuICAgICAgICB3aW5kb3csXG4gICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAvLyAgIFRTMjMzOTogUHJvcGVydHkgJ2N0cmxLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5jdHJsS2V5LFxuICAgICAgICAvLyBTdXBwcmVzc2luZyBlcnJvcnMgZm9yIHRzLW1pZ3JhdGlvbi5cbiAgICAgICAgLy8gICBUUzIzMzk6IFByb3BlcnR5ICdhbHRLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5hbHRLZXksXG4gICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAvLyAgIFRTMjMzOTogUHJvcGVydHkgJ3NoaWZ0S2V5JyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdFdmVudCcuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb3JpZ2luYWwuc2hpZnRLZXksXG4gICAgICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgICAgICAvLyAgIFRTMjMzOTogUHJvcGVydHkgJ21ldGFLZXknIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5tZXRhS2V5LFxuICAgICAgICAvLyBTdXBwcmVzc2luZyBlcnJvcnMgZm9yIHRzLW1pZ3JhdGlvbi5cbiAgICAgICAgLy8gICBUUzIzMzk6IFByb3BlcnR5ICdrZXlDb2RlJyBkb2VzIG5vdCBleGlzdCBvbiB0eXBlICdFdmVudCcuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgb3JpZ2luYWwua2V5Q29kZSxcbiAgICAgICAgLy8gU3VwcHJlc3NpbmcgZXJyb3JzIGZvciB0cy1taWdyYXRpb24uXG4gICAgICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnY2hhckNvZGUnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0V2ZW50Jy5cbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBvcmlnaW5hbC5jaGFyQ29kZSxcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFICh1cCB0byB2ZXJzaW9uIDgpIGRvIG5vdCBzdXBwb3J0IHRoZVxuICAgIC8vIFczQyBldmVudCBtb2RlbC4gVXNlIHRoZSBJRSBzcGVjaWZpYyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50T2JqZWN0KCk7XG4gICAgZXZlbnQudHlwZSA9IG9wdF9ldmVudFR5cGUgfHwgb3JpZ2luYWwudHlwZTtcbiAgICBjb25zdCBvcmlnaW5hbEtleWJvYXJkRXZlbnQgPSBvcmlnaW5hbCBhcyBLZXlib2FyZEV2ZW50O1xuICAgIGV2ZW50LnJlcGVhdCA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5yZXBlYXQ7XG4gICAgZXZlbnQuY3RybEtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5jdHJsS2V5O1xuICAgIGV2ZW50LmFsdEtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5hbHRLZXk7XG4gICAgZXZlbnQuc2hpZnRLZXkgPSBvcmlnaW5hbEtleWJvYXJkRXZlbnQuc2hpZnRLZXk7XG4gICAgZXZlbnQubWV0YUtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5tZXRhS2V5O1xuICAgIGV2ZW50LmtleSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5rZXk7XG4gICAgZXZlbnQua2V5Q29kZSA9IG9yaWdpbmFsS2V5Ym9hcmRFdmVudC5rZXlDb2RlO1xuICAgIGV2ZW50LmNoYXJDb2RlID0gb3JpZ2luYWxLZXlib2FyZEV2ZW50LmNoYXJDb2RlO1xuICB9XG4gIGV2ZW50Lm9yaWdpbmFsVGltZXN0YW1wID0gb3JpZ2luYWwudGltZVN0YW1wO1xuICByZXR1cm4gZXZlbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1vdXNlIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1vdXNlRXZlbnQob3JpZ2luYWw6IEV2ZW50LCBvcHRfZXZlbnRUeXBlPzogc3RyaW5nKTogTW91c2VFdmVudCB7XG4gIGxldCBldmVudDtcbiAgY29uc3Qgb3JpZ2luYWxNb3VzZUV2ZW50ID0gb3JpZ2luYWwgYXMgTW91c2VFdmVudDtcbiAgaWYgKGRvY3VtZW50LmNyZWF0ZUV2ZW50KSB7XG4gICAgLy8gRXZlbnQgY3JlYXRpb24gYXMgcGVyIFczQyBldmVudCBtb2RlbCBzcGVjaWZpY2F0aW9uLiAgVGhpcyBjb2RlcGF0aFxuICAgIC8vIGlzIHVzZWQgYnkgbW9zdCBub24tSUUgYnJvd3NlcnMgYW5kIGFsc28gYnkgSUUgOSBhbmQgbGF0ZXIuXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudCcpO1xuICAgIC8vIE9uIElFIGFuZCBPcGVyYSA8IDEyLCB3ZSBtdXN0IHByb3ZpZGUgbm9uLXVuZGVmaW5lZCB2YWx1ZXMgdG9cbiAgICAvLyBpbml0TW91c2VFdmVudCwgb3RoZXJ3aXNlIGl0IHdpbGwgZmFpbC5cbiAgICBldmVudC5pbml0TW91c2VFdmVudChcbiAgICAgIG9wdF9ldmVudFR5cGUgfHwgb3JpZ2luYWwudHlwZSxcbiAgICAgIHRydWUsIC8vIGNhbkJ1YmJsZVxuICAgICAgdHJ1ZSwgLy8gY2FuY2VsYWJsZVxuICAgICAgd2luZG93LFxuICAgICAgKG9yaWdpbmFsIGFzIEN1c3RvbUV2ZW50KS5kZXRhaWwgfHwgMSxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5zY3JlZW5YIHx8IDAsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQuc2NyZWVuWSB8fCAwLFxuICAgICAgb3JpZ2luYWxNb3VzZUV2ZW50LmNsaWVudFggfHwgMCxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5jbGllbnRZIHx8IDAsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQuY3RybEtleSB8fCBmYWxzZSxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5hbHRLZXkgfHwgZmFsc2UsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQuc2hpZnRLZXkgfHwgZmFsc2UsXG4gICAgICBvcmlnaW5hbE1vdXNlRXZlbnQubWV0YUtleSB8fCBmYWxzZSxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5idXR0b24gfHwgMCxcbiAgICAgIG9yaWdpbmFsTW91c2VFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG51bGwsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBJRSAodXAgdG8gdmVyc2lvbiA4KSBkbyBub3Qgc3VwcG9ydCB0aGVcbiAgICAvLyBXM0MgZXZlbnQgbW9kZWwuIFVzZSB0aGUgSUUgc3BlY2lmaWMgZnVuY3Rpb24gaW5zdGVhZC5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICAgIGV2ZW50LnR5cGUgPSBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGU7XG4gICAgZXZlbnQuY2xpZW50WCA9IG9yaWdpbmFsTW91c2VFdmVudC5jbGllbnRYO1xuICAgIGV2ZW50LmNsaWVudFkgPSBvcmlnaW5hbE1vdXNlRXZlbnQuY2xpZW50WTtcbiAgICBldmVudC5idXR0b24gPSBvcmlnaW5hbE1vdXNlRXZlbnQuYnV0dG9uO1xuICAgIGV2ZW50LmRldGFpbCA9IChvcmlnaW5hbCBhcyBDdXN0b21FdmVudCkuZGV0YWlsO1xuICAgIGV2ZW50LmN0cmxLZXkgPSBvcmlnaW5hbE1vdXNlRXZlbnQuY3RybEtleTtcbiAgICBldmVudC5hbHRLZXkgPSBvcmlnaW5hbE1vdXNlRXZlbnQuYWx0S2V5O1xuICAgIGV2ZW50LnNoaWZ0S2V5ID0gb3JpZ2luYWxNb3VzZUV2ZW50LnNoaWZ0S2V5O1xuICAgIGV2ZW50Lm1ldGFLZXkgPSBvcmlnaW5hbE1vdXNlRXZlbnQubWV0YUtleTtcbiAgfVxuICBldmVudC5vcmlnaW5hbFRpbWVzdGFtcCA9IG9yaWdpbmFsLnRpbWVTdGFtcDtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBnZW5lcmljIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIEBwYXJhbSBvcmlnaW5hbCBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlR2VuZXJpY0V2ZW50KG9yaWdpbmFsOiBFdmVudCwgb3B0X2V2ZW50VHlwZT86IHN0cmluZyk6IEV2ZW50IHtcbiAgbGV0IGV2ZW50O1xuICBpZiAoZG9jdW1lbnQuY3JlYXRlRXZlbnQpIHtcbiAgICAvLyBFdmVudCBjcmVhdGlvbiBhcyBwZXIgVzNDIGV2ZW50IG1vZGVsIHNwZWNpZmljYXRpb24uICBUaGlzIGNvZGVwYXRoXG4gICAgLy8gaXMgdXNlZCBieSBtb3N0IG5vbi1JRSBicm93c2VycyBhbmQgYWxzbyBieSBJRSA5IGFuZCBsYXRlci5cbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LmluaXRFdmVudChvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGUsIHRydWUsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIC8vIE9sZGVyIHZlcnNpb25zIG9mIElFICh1cCB0byB2ZXJzaW9uIDgpIGRvIG5vdCBzdXBwb3J0IHRoZVxuICAgIC8vIFczQyBldmVudCBtb2RlbC4gVXNlIHRoZSBJRSBzcGVjaWZpYyBmdW5jdGlvbiBpbnN0ZWFkLlxuICAgIC8vIFN1cHByZXNzaW5nIGVycm9ycyBmb3IgdHMtbWlncmF0aW9uLlxuICAgIC8vICAgVFMyMzM5OiBQcm9wZXJ0eSAnY3JlYXRlRXZlbnRPYmplY3QnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0RvY3VtZW50Jy5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgZXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudE9iamVjdCgpO1xuICAgIGV2ZW50LnR5cGUgPSBvcHRfZXZlbnRUeXBlIHx8IG9yaWdpbmFsLnR5cGU7XG4gIH1cbiAgZXZlbnQub3JpZ2luYWxUaW1lc3RhbXAgPSBvcmlnaW5hbC50aW1lU3RhbXA7XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGV2ZW50IG9iamVjdCBmb3IgcmVwbGF5aW5nIHRocm91Z2ggdGhlIERPTS5cbiAqIE5PVEU6IFRoaXMgZnVuY3Rpb24gaXMgdmlzaWJsZSBqdXN0IGZvciB0ZXN0aW5nLiAgUGxlYXNlIGRvbid0IHVzZVxuICogaXQgb3V0c2lkZSBKc0FjdGlvbiBpbnRlcm5hbCB0ZXN0aW5nLlxuICogVE9ETzogQWRkIHN1cHBvcnQgZm9yIEZvY3VzRXZlbnQgYW5kIFdoZWVsRXZlbnQuXG4gKiBAcGFyYW0gYmFzZSBUaGUgZXZlbnQgdG8gY3JlYXRlIGEgbmV3IGV2ZW50IGZyb20uXG4gKiBAcGFyYW0gb3B0X2V2ZW50VHlwZSBUaGUgdHlwZSB0aGlzIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQgYXMgYnkganNhY3Rpb24uXG4gKiAgICAgRS5nLiBhIGtleXByZXNzIGlzIGhhbmRsZWQgYXMgY2xpY2sgaW4gc29tZSBjYXNlcy5cbiAqIEByZXR1cm4gVGhlIGV2ZW50IG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUV2ZW50KGJhc2U6IHVua25vd24sIG9wdF9ldmVudFR5cGU/OiBzdHJpbmcpOiBFdmVudCB7XG4gIGNvbnN0IG9yaWdpbmFsID0gYmFzZSBhcyBFdmVudDtcbiAgbGV0IGV2ZW50O1xuICBsZXQgZXZlbnRUeXBlO1xuICBpZiAob3JpZ2luYWwudHlwZSA9PT0gRXZlbnRUeXBlLkNVU1RPTSkge1xuICAgIGV2ZW50VHlwZSA9IEV2ZW50VHlwZS5DVVNUT007XG4gIH0gZWxzZSB7XG4gICAgZXZlbnRUeXBlID0gb3B0X2V2ZW50VHlwZSB8fCBvcmlnaW5hbC50eXBlO1xuICB9XG5cbiAgaWYgKGlzS2V5Ym9hcmRFdmVudChldmVudFR5cGUpKSB7XG4gICAgZXZlbnQgPSBjcmVhdGVLZXlib2FyZEV2ZW50KG9yaWdpbmFsLCBvcHRfZXZlbnRUeXBlKTtcbiAgfSBlbHNlIGlmIChpc01vdXNlRXZlbnQoZXZlbnRUeXBlKSkge1xuICAgIGV2ZW50ID0gY3JlYXRlTW91c2VFdmVudChvcmlnaW5hbCwgb3B0X2V2ZW50VHlwZSk7XG4gIH0gZWxzZSBpZiAoaXNVaUV2ZW50KGV2ZW50VHlwZSkpIHtcbiAgICBldmVudCA9IGNyZWF0ZVVpRXZlbnQob3JpZ2luYWwsIG9wdF9ldmVudFR5cGUpO1xuICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gRXZlbnRUeXBlLkNVU1RPTSkge1xuICAgIGV2ZW50ID0gY3JlYXRlQ3VzdG9tRXZlbnQoXG4gICAgICBvcHRfZXZlbnRUeXBlISxcbiAgICAgIChvcmlnaW5hbCBhcyBDdXN0b21FdmVudClbJ2RldGFpbCddWydkYXRhJ10sXG4gICAgICAob3JpZ2luYWwgYXMgQ3VzdG9tRXZlbnQpWydkZXRhaWwnXVsndHJpZ2dlcmluZ0V2ZW50J10sXG4gICAgKTtcbiAgICAoZXZlbnQgYXMge29yaWdpbmFsVGltZXN0YW1wPzogbnVtYmVyIHwgbnVsbH0gfCBudWxsKSEub3JpZ2luYWxUaW1lc3RhbXAgPSBvcmlnaW5hbC50aW1lU3RhbXA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBlbnN1cmVzIHdlIGRvbid0IHNlbmQgYW4gdW5kZWZpbmVkIGV2ZW50IG9iamVjdCB0byB0aGUgcmVwbGF5ZXIuXG4gICAgZXZlbnQgPSBjcmVhdGVHZW5lcmljRXZlbnQob3JpZ2luYWwsIG9wdF9ldmVudFR5cGUpO1xuICB9XG4gIHJldHVybiBldmVudDtcbn1cblxuLyoqXG4gKiBTZW5kcyBhbiBldmVudCBmb3IgcmVwbGF5IHRvIHRoZSBET00uXG4gKiBAcGFyYW0gdGFyZ2V0IFRoZSB0YXJnZXQgZm9yIHRoZSBldmVudC5cbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0LlxuICogQHJldHVybiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBldmVudCByZXBsYXksIGkuZS4sIHdoZXRoZXIgcHJldmVudERlZmF1bHQoKVxuICogICAgIHdhcyBjYWxsZWQgb24gaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyRXZlbnQodGFyZ2V0OiBFdmVudFRhcmdldCwgZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gIGlmICh0YXJnZXQuZGlzcGF0Y2hFdmVudCkge1xuICAgIHJldHVybiB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gU3VwcHJlc3NpbmcgZXJyb3JzIGZvciB0cy1taWdyYXRpb24uXG4gICAgLy8gICBUUzIzMzk6IFByb3BlcnR5ICdmaXJlRXZlbnQnIGRvZXMgbm90IGV4aXN0IG9uIHR5cGUgJ0VsZW1lbnQnLlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICByZXR1cm4gKHRhcmdldCBhcyBFbGVtZW50KS5maXJlRXZlbnQoJ29uJyArIGV2ZW50LnR5cGUsIGV2ZW50KTtcbiAgfVxufVxuXG4vKiogRG8gbm90IHVzZSBvdXRpc2lkZSBvZiB0ZXN0aW5nLiAqL1xuZXhwb3J0IGNvbnN0IHRlc3RpbmcgPSB7XG4gIGNyZWF0ZUtleWJvYXJkTW9kaWZpZXJzTGlzdCxcbiAgY3JlYXRlR2VuZXJpY0V2ZW50LFxuICBpc0tleWJvYXJkRXZlbnQsXG4gIGlzTW91c2VFdmVudCxcbiAgaXNVaUV2ZW50LFxufTtcbiJdfQ==
|