stoop 0.0.4 → 0.0.5
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/README.md +6 -66
- package/dist/Button.module-h78z3dbd.css +18 -0
- package/dist/components/Button/Button.d.ts +4 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +32 -1426
- package/dist/{globals-h4nepkxv.css → styles/globals.css} +11 -12
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +8 -5
- package/dist/components/ThemeProvider.d.ts +0 -12
package/dist/index.js
CHANGED
|
@@ -1,1433 +1,39 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
(function() {
|
|
22
|
-
function defineDeprecationWarning(methodName, info) {
|
|
23
|
-
Object.defineProperty(Component.prototype, methodName, {
|
|
24
|
-
get: function() {
|
|
25
|
-
console.warn("%s(...) is deprecated in plain JavaScript React classes. %s", info[0], info[1]);
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
function getIteratorFn(maybeIterable) {
|
|
30
|
-
if (maybeIterable === null || typeof maybeIterable !== "object")
|
|
31
|
-
return null;
|
|
32
|
-
maybeIterable = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable["@@iterator"];
|
|
33
|
-
return typeof maybeIterable === "function" ? maybeIterable : null;
|
|
34
|
-
}
|
|
35
|
-
function warnNoop(publicInstance, callerName) {
|
|
36
|
-
publicInstance = (publicInstance = publicInstance.constructor) && (publicInstance.displayName || publicInstance.name) || "ReactClass";
|
|
37
|
-
var warningKey = publicInstance + "." + callerName;
|
|
38
|
-
didWarnStateUpdateForUnmountedComponent[warningKey] || (console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.", callerName, publicInstance), didWarnStateUpdateForUnmountedComponent[warningKey] = true);
|
|
39
|
-
}
|
|
40
|
-
function Component(props, context, updater) {
|
|
41
|
-
this.props = props;
|
|
42
|
-
this.context = context;
|
|
43
|
-
this.refs = emptyObject;
|
|
44
|
-
this.updater = updater || ReactNoopUpdateQueue;
|
|
45
|
-
}
|
|
46
|
-
function ComponentDummy() {
|
|
47
|
-
}
|
|
48
|
-
function PureComponent(props, context, updater) {
|
|
49
|
-
this.props = props;
|
|
50
|
-
this.context = context;
|
|
51
|
-
this.refs = emptyObject;
|
|
52
|
-
this.updater = updater || ReactNoopUpdateQueue;
|
|
53
|
-
}
|
|
54
|
-
function testStringCoercion(value) {
|
|
55
|
-
return "" + value;
|
|
56
|
-
}
|
|
57
|
-
function checkKeyStringCoercion(value) {
|
|
58
|
-
try {
|
|
59
|
-
testStringCoercion(value);
|
|
60
|
-
var JSCompiler_inline_result = false;
|
|
61
|
-
} catch (e) {
|
|
62
|
-
JSCompiler_inline_result = true;
|
|
63
|
-
}
|
|
64
|
-
if (JSCompiler_inline_result) {
|
|
65
|
-
JSCompiler_inline_result = console;
|
|
66
|
-
var JSCompiler_temp_const = JSCompiler_inline_result.error;
|
|
67
|
-
var JSCompiler_inline_result$jscomp$0 = typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
|
|
68
|
-
JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
|
|
69
|
-
return testStringCoercion(value);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function getComponentNameFromType(type) {
|
|
73
|
-
if (type == null)
|
|
74
|
-
return null;
|
|
75
|
-
if (typeof type === "function")
|
|
76
|
-
return type.$$typeof === REACT_CLIENT_REFERENCE$2 ? null : type.displayName || type.name || null;
|
|
77
|
-
if (typeof type === "string")
|
|
78
|
-
return type;
|
|
79
|
-
switch (type) {
|
|
80
|
-
case REACT_FRAGMENT_TYPE:
|
|
81
|
-
return "Fragment";
|
|
82
|
-
case REACT_PORTAL_TYPE:
|
|
83
|
-
return "Portal";
|
|
84
|
-
case REACT_PROFILER_TYPE:
|
|
85
|
-
return "Profiler";
|
|
86
|
-
case REACT_STRICT_MODE_TYPE:
|
|
87
|
-
return "StrictMode";
|
|
88
|
-
case REACT_SUSPENSE_TYPE:
|
|
89
|
-
return "Suspense";
|
|
90
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
91
|
-
return "SuspenseList";
|
|
92
|
-
}
|
|
93
|
-
if (typeof type === "object")
|
|
94
|
-
switch (typeof type.tag === "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
|
|
95
|
-
case REACT_CONTEXT_TYPE:
|
|
96
|
-
return (type.displayName || "Context") + ".Provider";
|
|
97
|
-
case REACT_CONSUMER_TYPE:
|
|
98
|
-
return (type._context.displayName || "Context") + ".Consumer";
|
|
99
|
-
case REACT_FORWARD_REF_TYPE:
|
|
100
|
-
var innerType = type.render;
|
|
101
|
-
type = type.displayName;
|
|
102
|
-
type || (type = innerType.displayName || innerType.name || "", type = type !== "" ? "ForwardRef(" + type + ")" : "ForwardRef");
|
|
103
|
-
return type;
|
|
104
|
-
case REACT_MEMO_TYPE:
|
|
105
|
-
return innerType = type.displayName || null, innerType !== null ? innerType : getComponentNameFromType(type.type) || "Memo";
|
|
106
|
-
case REACT_LAZY_TYPE:
|
|
107
|
-
innerType = type._payload;
|
|
108
|
-
type = type._init;
|
|
109
|
-
try {
|
|
110
|
-
return getComponentNameFromType(type(innerType));
|
|
111
|
-
} catch (x) {
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
return null;
|
|
115
|
-
}
|
|
116
|
-
function isValidElementType(type) {
|
|
117
|
-
return typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) ? true : false;
|
|
118
|
-
}
|
|
119
|
-
function disabledLog() {
|
|
120
|
-
}
|
|
121
|
-
function disableLogs() {
|
|
122
|
-
if (disabledDepth === 0) {
|
|
123
|
-
prevLog = console.log;
|
|
124
|
-
prevInfo = console.info;
|
|
125
|
-
prevWarn = console.warn;
|
|
126
|
-
prevError = console.error;
|
|
127
|
-
prevGroup = console.group;
|
|
128
|
-
prevGroupCollapsed = console.groupCollapsed;
|
|
129
|
-
prevGroupEnd = console.groupEnd;
|
|
130
|
-
var props = {
|
|
131
|
-
configurable: true,
|
|
132
|
-
enumerable: true,
|
|
133
|
-
value: disabledLog,
|
|
134
|
-
writable: true
|
|
135
|
-
};
|
|
136
|
-
Object.defineProperties(console, {
|
|
137
|
-
info: props,
|
|
138
|
-
log: props,
|
|
139
|
-
warn: props,
|
|
140
|
-
error: props,
|
|
141
|
-
group: props,
|
|
142
|
-
groupCollapsed: props,
|
|
143
|
-
groupEnd: props
|
|
144
|
-
});
|
|
145
|
-
}
|
|
146
|
-
disabledDepth++;
|
|
147
|
-
}
|
|
148
|
-
function reenableLogs() {
|
|
149
|
-
disabledDepth--;
|
|
150
|
-
if (disabledDepth === 0) {
|
|
151
|
-
var props = { configurable: true, enumerable: true, writable: true };
|
|
152
|
-
Object.defineProperties(console, {
|
|
153
|
-
log: assign({}, props, { value: prevLog }),
|
|
154
|
-
info: assign({}, props, { value: prevInfo }),
|
|
155
|
-
warn: assign({}, props, { value: prevWarn }),
|
|
156
|
-
error: assign({}, props, { value: prevError }),
|
|
157
|
-
group: assign({}, props, { value: prevGroup }),
|
|
158
|
-
groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
|
|
159
|
-
groupEnd: assign({}, props, { value: prevGroupEnd })
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
0 > disabledDepth && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
|
|
163
|
-
}
|
|
164
|
-
function describeBuiltInComponentFrame(name) {
|
|
165
|
-
if (prefix === undefined)
|
|
166
|
-
try {
|
|
167
|
-
throw Error();
|
|
168
|
-
} catch (x) {
|
|
169
|
-
var match = x.stack.trim().match(/\n( *(at )?)/);
|
|
170
|
-
prefix = match && match[1] || "";
|
|
171
|
-
suffix = -1 < x.stack.indexOf("\n at") ? " (<anonymous>)" : -1 < x.stack.indexOf("@") ? "@unknown:0:0" : "";
|
|
172
|
-
}
|
|
173
|
-
return "\n" + prefix + name + suffix;
|
|
174
|
-
}
|
|
175
|
-
function describeNativeComponentFrame(fn, construct) {
|
|
176
|
-
if (!fn || reentry)
|
|
177
|
-
return "";
|
|
178
|
-
var frame = componentFrameCache.get(fn);
|
|
179
|
-
if (frame !== undefined)
|
|
180
|
-
return frame;
|
|
181
|
-
reentry = true;
|
|
182
|
-
frame = Error.prepareStackTrace;
|
|
183
|
-
Error.prepareStackTrace = undefined;
|
|
184
|
-
var previousDispatcher = null;
|
|
185
|
-
previousDispatcher = ReactSharedInternals.H;
|
|
186
|
-
ReactSharedInternals.H = null;
|
|
187
|
-
disableLogs();
|
|
188
|
-
try {
|
|
189
|
-
var RunInRootFrame = {
|
|
190
|
-
DetermineComponentFrameRoot: function() {
|
|
191
|
-
try {
|
|
192
|
-
if (construct) {
|
|
193
|
-
var Fake = function() {
|
|
194
|
-
throw Error();
|
|
195
|
-
};
|
|
196
|
-
Object.defineProperty(Fake.prototype, "props", {
|
|
197
|
-
set: function() {
|
|
198
|
-
throw Error();
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
if (typeof Reflect === "object" && Reflect.construct) {
|
|
202
|
-
try {
|
|
203
|
-
Reflect.construct(Fake, []);
|
|
204
|
-
} catch (x) {
|
|
205
|
-
var control = x;
|
|
206
|
-
}
|
|
207
|
-
Reflect.construct(fn, [], Fake);
|
|
208
|
-
} else {
|
|
209
|
-
try {
|
|
210
|
-
Fake.call();
|
|
211
|
-
} catch (x$0) {
|
|
212
|
-
control = x$0;
|
|
213
|
-
}
|
|
214
|
-
fn.call(Fake.prototype);
|
|
215
|
-
}
|
|
216
|
-
} else {
|
|
217
|
-
try {
|
|
218
|
-
throw Error();
|
|
219
|
-
} catch (x$1) {
|
|
220
|
-
control = x$1;
|
|
221
|
-
}
|
|
222
|
-
(Fake = fn()) && typeof Fake.catch === "function" && Fake.catch(function() {
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
} catch (sample) {
|
|
226
|
-
if (sample && control && typeof sample.stack === "string")
|
|
227
|
-
return [sample.stack, control.stack];
|
|
228
|
-
}
|
|
229
|
-
return [null, null];
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot";
|
|
233
|
-
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, "name");
|
|
234
|
-
namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" });
|
|
235
|
-
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), sampleStack = _RunInRootFrame$Deter[0], controlStack = _RunInRootFrame$Deter[1];
|
|
236
|
-
if (sampleStack && controlStack) {
|
|
237
|
-
var sampleLines = sampleStack.split("\n"), controlLines = controlStack.split("\n");
|
|
238
|
-
for (_RunInRootFrame$Deter = namePropDescriptor = 0;namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes("DetermineComponentFrameRoot"); )
|
|
239
|
-
namePropDescriptor++;
|
|
240
|
-
for (;_RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes("DetermineComponentFrameRoot"); )
|
|
241
|
-
_RunInRootFrame$Deter++;
|
|
242
|
-
if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length)
|
|
243
|
-
for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]; )
|
|
244
|
-
_RunInRootFrame$Deter--;
|
|
245
|
-
for (;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--)
|
|
246
|
-
if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
247
|
-
if (namePropDescriptor !== 1 || _RunInRootFrame$Deter !== 1) {
|
|
248
|
-
do
|
|
249
|
-
if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
250
|
-
var _frame = "\n" + sampleLines[namePropDescriptor].replace(" at new ", " at ");
|
|
251
|
-
fn.displayName && _frame.includes("<anonymous>") && (_frame = _frame.replace("<anonymous>", fn.displayName));
|
|
252
|
-
typeof fn === "function" && componentFrameCache.set(fn, _frame);
|
|
253
|
-
return _frame;
|
|
254
|
-
}
|
|
255
|
-
while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
|
|
256
|
-
}
|
|
257
|
-
break;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
} finally {
|
|
261
|
-
reentry = false, ReactSharedInternals.H = previousDispatcher, reenableLogs(), Error.prepareStackTrace = frame;
|
|
262
|
-
}
|
|
263
|
-
sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(sampleLines) : "";
|
|
264
|
-
typeof fn === "function" && componentFrameCache.set(fn, sampleLines);
|
|
265
|
-
return sampleLines;
|
|
266
|
-
}
|
|
267
|
-
function describeUnknownElementTypeFrameInDEV(type) {
|
|
268
|
-
if (type == null)
|
|
269
|
-
return "";
|
|
270
|
-
if (typeof type === "function") {
|
|
271
|
-
var prototype = type.prototype;
|
|
272
|
-
return describeNativeComponentFrame(type, !(!prototype || !prototype.isReactComponent));
|
|
273
|
-
}
|
|
274
|
-
if (typeof type === "string")
|
|
275
|
-
return describeBuiltInComponentFrame(type);
|
|
276
|
-
switch (type) {
|
|
277
|
-
case REACT_SUSPENSE_TYPE:
|
|
278
|
-
return describeBuiltInComponentFrame("Suspense");
|
|
279
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
280
|
-
return describeBuiltInComponentFrame("SuspenseList");
|
|
281
|
-
}
|
|
282
|
-
if (typeof type === "object")
|
|
283
|
-
switch (type.$$typeof) {
|
|
284
|
-
case REACT_FORWARD_REF_TYPE:
|
|
285
|
-
return type = describeNativeComponentFrame(type.render, false), type;
|
|
286
|
-
case REACT_MEMO_TYPE:
|
|
287
|
-
return describeUnknownElementTypeFrameInDEV(type.type);
|
|
288
|
-
case REACT_LAZY_TYPE:
|
|
289
|
-
prototype = type._payload;
|
|
290
|
-
type = type._init;
|
|
291
|
-
try {
|
|
292
|
-
return describeUnknownElementTypeFrameInDEV(type(prototype));
|
|
293
|
-
} catch (x) {
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return "";
|
|
297
|
-
}
|
|
298
|
-
function getOwner() {
|
|
299
|
-
var dispatcher = ReactSharedInternals.A;
|
|
300
|
-
return dispatcher === null ? null : dispatcher.getOwner();
|
|
301
|
-
}
|
|
302
|
-
function hasValidKey(config) {
|
|
303
|
-
if (hasOwnProperty.call(config, "key")) {
|
|
304
|
-
var getter = Object.getOwnPropertyDescriptor(config, "key").get;
|
|
305
|
-
if (getter && getter.isReactWarning)
|
|
306
|
-
return false;
|
|
307
|
-
}
|
|
308
|
-
return config.key !== undefined;
|
|
309
|
-
}
|
|
310
|
-
function defineKeyPropWarningGetter(props, displayName) {
|
|
311
|
-
function warnAboutAccessingKey() {
|
|
312
|
-
specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
|
|
313
|
-
}
|
|
314
|
-
warnAboutAccessingKey.isReactWarning = true;
|
|
315
|
-
Object.defineProperty(props, "key", {
|
|
316
|
-
get: warnAboutAccessingKey,
|
|
317
|
-
configurable: true
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
function elementRefGetterWithDeprecationWarning() {
|
|
321
|
-
var componentName = getComponentNameFromType(this.type);
|
|
322
|
-
didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
|
|
323
|
-
componentName = this.props.ref;
|
|
324
|
-
return componentName !== undefined ? componentName : null;
|
|
325
|
-
}
|
|
326
|
-
function ReactElement(type, key, self, source, owner, props) {
|
|
327
|
-
self = props.ref;
|
|
328
|
-
type = {
|
|
329
|
-
$$typeof: REACT_ELEMENT_TYPE,
|
|
330
|
-
type,
|
|
331
|
-
key,
|
|
332
|
-
props,
|
|
333
|
-
_owner: owner
|
|
334
|
-
};
|
|
335
|
-
(self !== undefined ? self : null) !== null ? Object.defineProperty(type, "ref", {
|
|
336
|
-
enumerable: false,
|
|
337
|
-
get: elementRefGetterWithDeprecationWarning
|
|
338
|
-
}) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
|
|
339
|
-
type._store = {};
|
|
340
|
-
Object.defineProperty(type._store, "validated", {
|
|
341
|
-
configurable: false,
|
|
342
|
-
enumerable: false,
|
|
343
|
-
writable: true,
|
|
344
|
-
value: 0
|
|
345
|
-
});
|
|
346
|
-
Object.defineProperty(type, "_debugInfo", {
|
|
347
|
-
configurable: false,
|
|
348
|
-
enumerable: false,
|
|
349
|
-
writable: true,
|
|
350
|
-
value: null
|
|
351
|
-
});
|
|
352
|
-
Object.freeze && (Object.freeze(type.props), Object.freeze(type));
|
|
353
|
-
return type;
|
|
354
|
-
}
|
|
355
|
-
function cloneAndReplaceKey(oldElement, newKey) {
|
|
356
|
-
newKey = ReactElement(oldElement.type, newKey, undefined, undefined, oldElement._owner, oldElement.props);
|
|
357
|
-
newKey._store.validated = oldElement._store.validated;
|
|
358
|
-
return newKey;
|
|
359
|
-
}
|
|
360
|
-
function validateChildKeys(node, parentType) {
|
|
361
|
-
if (typeof node === "object" && node && node.$$typeof !== REACT_CLIENT_REFERENCE) {
|
|
362
|
-
if (isArrayImpl(node))
|
|
363
|
-
for (var i = 0;i < node.length; i++) {
|
|
364
|
-
var child = node[i];
|
|
365
|
-
isValidElement(child) && validateExplicitKey(child, parentType);
|
|
366
|
-
}
|
|
367
|
-
else if (isValidElement(node))
|
|
368
|
-
node._store && (node._store.validated = 1);
|
|
369
|
-
else if (i = getIteratorFn(node), typeof i === "function" && i !== node.entries && (i = i.call(node), i !== node))
|
|
370
|
-
for (;!(node = i.next()).done; )
|
|
371
|
-
isValidElement(node.value) && validateExplicitKey(node.value, parentType);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
function isValidElement(object) {
|
|
375
|
-
return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
376
|
-
}
|
|
377
|
-
function validateExplicitKey(element, parentType) {
|
|
378
|
-
if (element._store && !element._store.validated && element.key == null && (element._store.validated = 1, parentType = getCurrentComponentErrorInfo(parentType), !ownerHasKeyUseWarning[parentType])) {
|
|
379
|
-
ownerHasKeyUseWarning[parentType] = true;
|
|
380
|
-
var childOwner = "";
|
|
381
|
-
element && element._owner != null && element._owner !== getOwner() && (childOwner = null, typeof element._owner.tag === "number" ? childOwner = getComponentNameFromType(element._owner.type) : typeof element._owner.name === "string" && (childOwner = element._owner.name), childOwner = " It was passed a child from " + childOwner + ".");
|
|
382
|
-
var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;
|
|
383
|
-
ReactSharedInternals.getCurrentStack = function() {
|
|
384
|
-
var stack = describeUnknownElementTypeFrameInDEV(element.type);
|
|
385
|
-
prevGetCurrentStack && (stack += prevGetCurrentStack() || "");
|
|
386
|
-
return stack;
|
|
387
|
-
};
|
|
388
|
-
console.error('Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.', parentType, childOwner);
|
|
389
|
-
ReactSharedInternals.getCurrentStack = prevGetCurrentStack;
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
function getCurrentComponentErrorInfo(parentType) {
|
|
393
|
-
var info = "", owner = getOwner();
|
|
394
|
-
owner && (owner = getComponentNameFromType(owner.type)) && (info = "\n\nCheck the render method of `" + owner + "`.");
|
|
395
|
-
info || (parentType = getComponentNameFromType(parentType)) && (info = "\n\nCheck the top-level render call using <" + parentType + ">.");
|
|
396
|
-
return info;
|
|
397
|
-
}
|
|
398
|
-
function escape(key) {
|
|
399
|
-
var escaperLookup = { "=": "=0", ":": "=2" };
|
|
400
|
-
return "$" + key.replace(/[=:]/g, function(match) {
|
|
401
|
-
return escaperLookup[match];
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
function getElementKey(element, index) {
|
|
405
|
-
return typeof element === "object" && element !== null && element.key != null ? (checkKeyStringCoercion(element.key), escape("" + element.key)) : index.toString(36);
|
|
406
|
-
}
|
|
407
|
-
function noop$1() {
|
|
408
|
-
}
|
|
409
|
-
function resolveThenable(thenable) {
|
|
410
|
-
switch (thenable.status) {
|
|
411
|
-
case "fulfilled":
|
|
412
|
-
return thenable.value;
|
|
413
|
-
case "rejected":
|
|
414
|
-
throw thenable.reason;
|
|
415
|
-
default:
|
|
416
|
-
switch (typeof thenable.status === "string" ? thenable.then(noop$1, noop$1) : (thenable.status = "pending", thenable.then(function(fulfilledValue) {
|
|
417
|
-
thenable.status === "pending" && (thenable.status = "fulfilled", thenable.value = fulfilledValue);
|
|
418
|
-
}, function(error) {
|
|
419
|
-
thenable.status === "pending" && (thenable.status = "rejected", thenable.reason = error);
|
|
420
|
-
})), thenable.status) {
|
|
421
|
-
case "fulfilled":
|
|
422
|
-
return thenable.value;
|
|
423
|
-
case "rejected":
|
|
424
|
-
throw thenable.reason;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
throw thenable;
|
|
428
|
-
}
|
|
429
|
-
function mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {
|
|
430
|
-
var type = typeof children;
|
|
431
|
-
if (type === "undefined" || type === "boolean")
|
|
432
|
-
children = null;
|
|
433
|
-
var invokeCallback = false;
|
|
434
|
-
if (children === null)
|
|
435
|
-
invokeCallback = true;
|
|
436
|
-
else
|
|
437
|
-
switch (type) {
|
|
438
|
-
case "bigint":
|
|
439
|
-
case "string":
|
|
440
|
-
case "number":
|
|
441
|
-
invokeCallback = true;
|
|
442
|
-
break;
|
|
443
|
-
case "object":
|
|
444
|
-
switch (children.$$typeof) {
|
|
445
|
-
case REACT_ELEMENT_TYPE:
|
|
446
|
-
case REACT_PORTAL_TYPE:
|
|
447
|
-
invokeCallback = true;
|
|
448
|
-
break;
|
|
449
|
-
case REACT_LAZY_TYPE:
|
|
450
|
-
return invokeCallback = children._init, mapIntoArray(invokeCallback(children._payload), array, escapedPrefix, nameSoFar, callback);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
if (invokeCallback) {
|
|
454
|
-
invokeCallback = children;
|
|
455
|
-
callback = callback(invokeCallback);
|
|
456
|
-
var childKey = nameSoFar === "" ? "." + getElementKey(invokeCallback, 0) : nameSoFar;
|
|
457
|
-
isArrayImpl(callback) ? (escapedPrefix = "", childKey != null && (escapedPrefix = childKey.replace(userProvidedKeyEscapeRegex, "$&/") + "/"), mapIntoArray(callback, array, escapedPrefix, "", function(c) {
|
|
458
|
-
return c;
|
|
459
|
-
})) : callback != null && (isValidElement(callback) && (callback.key != null && (invokeCallback && invokeCallback.key === callback.key || checkKeyStringCoercion(callback.key)), escapedPrefix = cloneAndReplaceKey(callback, escapedPrefix + (callback.key == null || invokeCallback && invokeCallback.key === callback.key ? "" : ("" + callback.key).replace(userProvidedKeyEscapeRegex, "$&/") + "/") + childKey), nameSoFar !== "" && invokeCallback != null && isValidElement(invokeCallback) && invokeCallback.key == null && invokeCallback._store && !invokeCallback._store.validated && (escapedPrefix._store.validated = 2), callback = escapedPrefix), array.push(callback));
|
|
460
|
-
return 1;
|
|
461
|
-
}
|
|
462
|
-
invokeCallback = 0;
|
|
463
|
-
childKey = nameSoFar === "" ? "." : nameSoFar + ":";
|
|
464
|
-
if (isArrayImpl(children))
|
|
465
|
-
for (var i = 0;i < children.length; i++)
|
|
466
|
-
nameSoFar = children[i], type = childKey + getElementKey(nameSoFar, i), invokeCallback += mapIntoArray(nameSoFar, array, escapedPrefix, type, callback);
|
|
467
|
-
else if (i = getIteratorFn(children), typeof i === "function")
|
|
468
|
-
for (i === children.entries && (didWarnAboutMaps || console.warn("Using Maps as children is not supported. Use an array of keyed ReactElements instead."), didWarnAboutMaps = true), children = i.call(children), i = 0;!(nameSoFar = children.next()).done; )
|
|
469
|
-
nameSoFar = nameSoFar.value, type = childKey + getElementKey(nameSoFar, i++), invokeCallback += mapIntoArray(nameSoFar, array, escapedPrefix, type, callback);
|
|
470
|
-
else if (type === "object") {
|
|
471
|
-
if (typeof children.then === "function")
|
|
472
|
-
return mapIntoArray(resolveThenable(children), array, escapedPrefix, nameSoFar, callback);
|
|
473
|
-
array = String(children);
|
|
474
|
-
throw Error("Objects are not valid as a React child (found: " + (array === "[object Object]" ? "object with keys {" + Object.keys(children).join(", ") + "}" : array) + "). If you meant to render a collection of children, use an array instead.");
|
|
475
|
-
}
|
|
476
|
-
return invokeCallback;
|
|
477
|
-
}
|
|
478
|
-
function mapChildren(children, func, context) {
|
|
479
|
-
if (children == null)
|
|
480
|
-
return children;
|
|
481
|
-
var result = [], count = 0;
|
|
482
|
-
mapIntoArray(children, result, "", "", function(child) {
|
|
483
|
-
return func.call(context, child, count++);
|
|
484
|
-
});
|
|
485
|
-
return result;
|
|
486
|
-
}
|
|
487
|
-
function lazyInitializer(payload) {
|
|
488
|
-
if (payload._status === -1) {
|
|
489
|
-
var ctor = payload._result;
|
|
490
|
-
ctor = ctor();
|
|
491
|
-
ctor.then(function(moduleObject) {
|
|
492
|
-
if (payload._status === 0 || payload._status === -1)
|
|
493
|
-
payload._status = 1, payload._result = moduleObject;
|
|
494
|
-
}, function(error) {
|
|
495
|
-
if (payload._status === 0 || payload._status === -1)
|
|
496
|
-
payload._status = 2, payload._result = error;
|
|
497
|
-
});
|
|
498
|
-
payload._status === -1 && (payload._status = 0, payload._result = ctor);
|
|
499
|
-
}
|
|
500
|
-
if (payload._status === 1)
|
|
501
|
-
return ctor = payload._result, ctor === undefined && console.error("lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))\n\nDid you accidentally put curly braces around the import?", ctor), "default" in ctor || console.error("lazy: Expected the result of a dynamic import() call. Instead received: %s\n\nYour code should look like: \n const MyComponent = lazy(() => import('./MyComponent'))", ctor), ctor.default;
|
|
502
|
-
throw payload._result;
|
|
503
|
-
}
|
|
504
|
-
function resolveDispatcher() {
|
|
505
|
-
var dispatcher = ReactSharedInternals.H;
|
|
506
|
-
dispatcher === null && console.error("Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.");
|
|
507
|
-
return dispatcher;
|
|
508
|
-
}
|
|
509
|
-
function noop() {
|
|
510
|
-
}
|
|
511
|
-
function enqueueTask(task) {
|
|
512
|
-
if (enqueueTaskImpl === null)
|
|
513
|
-
try {
|
|
514
|
-
var requireString = ("require" + Math.random()).slice(0, 7);
|
|
515
|
-
enqueueTaskImpl = (module && module[requireString]).call(module, "timers").setImmediate;
|
|
516
|
-
} catch (_err) {
|
|
517
|
-
enqueueTaskImpl = function(callback) {
|
|
518
|
-
didWarnAboutMessageChannel === false && (didWarnAboutMessageChannel = true, typeof MessageChannel === "undefined" && console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));
|
|
519
|
-
var channel = new MessageChannel;
|
|
520
|
-
channel.port1.onmessage = callback;
|
|
521
|
-
channel.port2.postMessage(undefined);
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
return enqueueTaskImpl(task);
|
|
525
|
-
}
|
|
526
|
-
function aggregateErrors(errors) {
|
|
527
|
-
return 1 < errors.length && typeof AggregateError === "function" ? new AggregateError(errors) : errors[0];
|
|
528
|
-
}
|
|
529
|
-
function popActScope(prevActQueue, prevActScopeDepth) {
|
|
530
|
-
prevActScopeDepth !== actScopeDepth - 1 && console.error("You seem to have overlapping act() calls, this is not supported. Be sure to await previous act() calls before making a new one. ");
|
|
531
|
-
actScopeDepth = prevActScopeDepth;
|
|
532
|
-
}
|
|
533
|
-
function recursivelyFlushAsyncActWork(returnValue, resolve, reject) {
|
|
534
|
-
var queue = ReactSharedInternals.actQueue;
|
|
535
|
-
if (queue !== null)
|
|
536
|
-
if (queue.length !== 0)
|
|
537
|
-
try {
|
|
538
|
-
flushActQueue(queue);
|
|
539
|
-
enqueueTask(function() {
|
|
540
|
-
return recursivelyFlushAsyncActWork(returnValue, resolve, reject);
|
|
541
|
-
});
|
|
542
|
-
return;
|
|
543
|
-
} catch (error) {
|
|
544
|
-
ReactSharedInternals.thrownErrors.push(error);
|
|
545
|
-
}
|
|
546
|
-
else
|
|
547
|
-
ReactSharedInternals.actQueue = null;
|
|
548
|
-
0 < ReactSharedInternals.thrownErrors.length ? (queue = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(queue)) : resolve(returnValue);
|
|
549
|
-
}
|
|
550
|
-
function flushActQueue(queue) {
|
|
551
|
-
if (!isFlushing) {
|
|
552
|
-
isFlushing = true;
|
|
553
|
-
var i = 0;
|
|
554
|
-
try {
|
|
555
|
-
for (;i < queue.length; i++) {
|
|
556
|
-
var callback = queue[i];
|
|
557
|
-
do {
|
|
558
|
-
ReactSharedInternals.didUsePromise = false;
|
|
559
|
-
var continuation = callback(false);
|
|
560
|
-
if (continuation !== null) {
|
|
561
|
-
if (ReactSharedInternals.didUsePromise) {
|
|
562
|
-
queue[i] = callback;
|
|
563
|
-
queue.splice(0, i);
|
|
564
|
-
return;
|
|
565
|
-
}
|
|
566
|
-
callback = continuation;
|
|
567
|
-
} else
|
|
568
|
-
break;
|
|
569
|
-
} while (1);
|
|
570
|
-
}
|
|
571
|
-
queue.length = 0;
|
|
572
|
-
} catch (error) {
|
|
573
|
-
queue.splice(0, i + 1), ReactSharedInternals.thrownErrors.push(error);
|
|
574
|
-
} finally {
|
|
575
|
-
isFlushing = false;
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());
|
|
580
|
-
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler");
|
|
581
|
-
Symbol.for("react.provider");
|
|
582
|
-
var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, didWarnStateUpdateForUnmountedComponent = {}, ReactNoopUpdateQueue = {
|
|
583
|
-
isMounted: function() {
|
|
584
|
-
return false;
|
|
585
|
-
},
|
|
586
|
-
enqueueForceUpdate: function(publicInstance) {
|
|
587
|
-
warnNoop(publicInstance, "forceUpdate");
|
|
588
|
-
},
|
|
589
|
-
enqueueReplaceState: function(publicInstance) {
|
|
590
|
-
warnNoop(publicInstance, "replaceState");
|
|
591
|
-
},
|
|
592
|
-
enqueueSetState: function(publicInstance) {
|
|
593
|
-
warnNoop(publicInstance, "setState");
|
|
594
|
-
}
|
|
595
|
-
}, assign = Object.assign, emptyObject = {};
|
|
596
|
-
Object.freeze(emptyObject);
|
|
597
|
-
Component.prototype.isReactComponent = {};
|
|
598
|
-
Component.prototype.setState = function(partialState, callback) {
|
|
599
|
-
if (typeof partialState !== "object" && typeof partialState !== "function" && partialState != null)
|
|
600
|
-
throw Error("takes an object of state variables to update or a function which returns an object of state variables.");
|
|
601
|
-
this.updater.enqueueSetState(this, partialState, callback, "setState");
|
|
602
|
-
};
|
|
603
|
-
Component.prototype.forceUpdate = function(callback) {
|
|
604
|
-
this.updater.enqueueForceUpdate(this, callback, "forceUpdate");
|
|
605
|
-
};
|
|
606
|
-
var deprecatedAPIs = {
|
|
607
|
-
isMounted: [
|
|
608
|
-
"isMounted",
|
|
609
|
-
"Instead, make sure to clean up subscriptions and pending requests in componentWillUnmount to prevent memory leaks."
|
|
610
|
-
],
|
|
611
|
-
replaceState: [
|
|
612
|
-
"replaceState",
|
|
613
|
-
"Refactor your code to use setState instead (see https://github.com/facebook/react/issues/3236)."
|
|
614
|
-
]
|
|
615
|
-
}, fnName;
|
|
616
|
-
for (fnName in deprecatedAPIs)
|
|
617
|
-
deprecatedAPIs.hasOwnProperty(fnName) && defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
|
|
618
|
-
ComponentDummy.prototype = Component.prototype;
|
|
619
|
-
deprecatedAPIs = PureComponent.prototype = new ComponentDummy;
|
|
620
|
-
deprecatedAPIs.constructor = PureComponent;
|
|
621
|
-
assign(deprecatedAPIs, Component.prototype);
|
|
622
|
-
deprecatedAPIs.isPureReactComponent = true;
|
|
623
|
-
var isArrayImpl = Array.isArray, REACT_CLIENT_REFERENCE$2 = Symbol.for("react.client.reference"), ReactSharedInternals = {
|
|
624
|
-
H: null,
|
|
625
|
-
A: null,
|
|
626
|
-
T: null,
|
|
627
|
-
S: null,
|
|
628
|
-
actQueue: null,
|
|
629
|
-
isBatchingLegacy: false,
|
|
630
|
-
didScheduleLegacyUpdate: false,
|
|
631
|
-
didUsePromise: false,
|
|
632
|
-
thrownErrors: [],
|
|
633
|
-
getCurrentStack: null
|
|
634
|
-
}, hasOwnProperty = Object.prototype.hasOwnProperty, REACT_CLIENT_REFERENCE$1 = Symbol.for("react.client.reference"), disabledDepth = 0, prevLog, prevInfo, prevWarn, prevError, prevGroup, prevGroupCollapsed, prevGroupEnd;
|
|
635
|
-
disabledLog.__reactDisabledLog = true;
|
|
636
|
-
var prefix, suffix, reentry = false;
|
|
637
|
-
var componentFrameCache = new (typeof WeakMap === "function" ? WeakMap : Map);
|
|
638
|
-
var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), specialPropKeyWarningShown, didWarnAboutOldJSXRuntime;
|
|
639
|
-
var didWarnAboutElementRef = {};
|
|
640
|
-
var ownerHasKeyUseWarning = {}, didWarnAboutMaps = false, userProvidedKeyEscapeRegex = /\/+/g, reportGlobalError = typeof reportError === "function" ? reportError : function(error) {
|
|
641
|
-
if (typeof window === "object" && typeof window.ErrorEvent === "function") {
|
|
642
|
-
var event = new window.ErrorEvent("error", {
|
|
643
|
-
bubbles: true,
|
|
644
|
-
cancelable: true,
|
|
645
|
-
message: typeof error === "object" && error !== null && typeof error.message === "string" ? String(error.message) : String(error),
|
|
646
|
-
error
|
|
647
|
-
});
|
|
648
|
-
if (!window.dispatchEvent(event))
|
|
649
|
-
return;
|
|
650
|
-
} else if (typeof process === "object" && typeof process.emit === "function") {
|
|
651
|
-
process.emit("uncaughtException", error);
|
|
652
|
-
return;
|
|
653
|
-
}
|
|
654
|
-
console.error(error);
|
|
655
|
-
}, didWarnAboutMessageChannel = false, enqueueTaskImpl = null, actScopeDepth = 0, didWarnNoAwaitAct = false, isFlushing = false, queueSeveralMicrotasks = typeof queueMicrotask === "function" ? function(callback) {
|
|
656
|
-
queueMicrotask(function() {
|
|
657
|
-
return queueMicrotask(callback);
|
|
658
|
-
});
|
|
659
|
-
} : enqueueTask;
|
|
660
|
-
exports.Children = {
|
|
661
|
-
map: mapChildren,
|
|
662
|
-
forEach: function(children, forEachFunc, forEachContext) {
|
|
663
|
-
mapChildren(children, function() {
|
|
664
|
-
forEachFunc.apply(this, arguments);
|
|
665
|
-
}, forEachContext);
|
|
666
|
-
},
|
|
667
|
-
count: function(children) {
|
|
668
|
-
var n = 0;
|
|
669
|
-
mapChildren(children, function() {
|
|
670
|
-
n++;
|
|
671
|
-
});
|
|
672
|
-
return n;
|
|
673
|
-
},
|
|
674
|
-
toArray: function(children) {
|
|
675
|
-
return mapChildren(children, function(child) {
|
|
676
|
-
return child;
|
|
677
|
-
}) || [];
|
|
678
|
-
},
|
|
679
|
-
only: function(children) {
|
|
680
|
-
if (!isValidElement(children))
|
|
681
|
-
throw Error("React.Children.only expected to receive a single React element child.");
|
|
682
|
-
return children;
|
|
683
|
-
}
|
|
684
|
-
};
|
|
685
|
-
exports.Component = Component;
|
|
686
|
-
exports.Fragment = REACT_FRAGMENT_TYPE;
|
|
687
|
-
exports.Profiler = REACT_PROFILER_TYPE;
|
|
688
|
-
exports.PureComponent = PureComponent;
|
|
689
|
-
exports.StrictMode = REACT_STRICT_MODE_TYPE;
|
|
690
|
-
exports.Suspense = REACT_SUSPENSE_TYPE;
|
|
691
|
-
exports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE = ReactSharedInternals;
|
|
692
|
-
exports.act = function(callback) {
|
|
693
|
-
var prevActQueue = ReactSharedInternals.actQueue, prevActScopeDepth = actScopeDepth;
|
|
694
|
-
actScopeDepth++;
|
|
695
|
-
var queue = ReactSharedInternals.actQueue = prevActQueue !== null ? prevActQueue : [], didAwaitActCall = false;
|
|
696
|
-
try {
|
|
697
|
-
var result = callback();
|
|
698
|
-
} catch (error) {
|
|
699
|
-
ReactSharedInternals.thrownErrors.push(error);
|
|
700
|
-
}
|
|
701
|
-
if (0 < ReactSharedInternals.thrownErrors.length)
|
|
702
|
-
throw popActScope(prevActQueue, prevActScopeDepth), callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
|
|
703
|
-
if (result !== null && typeof result === "object" && typeof result.then === "function") {
|
|
704
|
-
var thenable = result;
|
|
705
|
-
queueSeveralMicrotasks(function() {
|
|
706
|
-
didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("You called act(async () => ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"));
|
|
707
|
-
});
|
|
708
|
-
return {
|
|
709
|
-
then: function(resolve, reject) {
|
|
710
|
-
didAwaitActCall = true;
|
|
711
|
-
thenable.then(function(returnValue) {
|
|
712
|
-
popActScope(prevActQueue, prevActScopeDepth);
|
|
713
|
-
if (prevActScopeDepth === 0) {
|
|
714
|
-
try {
|
|
715
|
-
flushActQueue(queue), enqueueTask(function() {
|
|
716
|
-
return recursivelyFlushAsyncActWork(returnValue, resolve, reject);
|
|
717
|
-
});
|
|
718
|
-
} catch (error$2) {
|
|
719
|
-
ReactSharedInternals.thrownErrors.push(error$2);
|
|
720
|
-
}
|
|
721
|
-
if (0 < ReactSharedInternals.thrownErrors.length) {
|
|
722
|
-
var _thrownError = aggregateErrors(ReactSharedInternals.thrownErrors);
|
|
723
|
-
ReactSharedInternals.thrownErrors.length = 0;
|
|
724
|
-
reject(_thrownError);
|
|
725
|
-
}
|
|
726
|
-
} else
|
|
727
|
-
resolve(returnValue);
|
|
728
|
-
}, function(error) {
|
|
729
|
-
popActScope(prevActQueue, prevActScopeDepth);
|
|
730
|
-
0 < ReactSharedInternals.thrownErrors.length ? (error = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, reject(error)) : reject(error);
|
|
731
|
-
});
|
|
732
|
-
}
|
|
733
|
-
};
|
|
734
|
-
}
|
|
735
|
-
var returnValue$jscomp$0 = result;
|
|
736
|
-
popActScope(prevActQueue, prevActScopeDepth);
|
|
737
|
-
prevActScopeDepth === 0 && (flushActQueue(queue), queue.length !== 0 && queueSeveralMicrotasks(function() {
|
|
738
|
-
didAwaitActCall || didWarnNoAwaitAct || (didWarnNoAwaitAct = true, console.error("A component suspended inside an `act` scope, but the `act` call was not awaited. When testing React components that depend on asynchronous data, you must await the result:\n\nawait act(() => ...)"));
|
|
739
|
-
}), ReactSharedInternals.actQueue = null);
|
|
740
|
-
if (0 < ReactSharedInternals.thrownErrors.length)
|
|
741
|
-
throw callback = aggregateErrors(ReactSharedInternals.thrownErrors), ReactSharedInternals.thrownErrors.length = 0, callback;
|
|
742
|
-
return {
|
|
743
|
-
then: function(resolve, reject) {
|
|
744
|
-
didAwaitActCall = true;
|
|
745
|
-
prevActScopeDepth === 0 ? (ReactSharedInternals.actQueue = queue, enqueueTask(function() {
|
|
746
|
-
return recursivelyFlushAsyncActWork(returnValue$jscomp$0, resolve, reject);
|
|
747
|
-
})) : resolve(returnValue$jscomp$0);
|
|
748
|
-
}
|
|
749
|
-
};
|
|
750
|
-
};
|
|
751
|
-
exports.cache = function(fn) {
|
|
752
|
-
return function() {
|
|
753
|
-
return fn.apply(null, arguments);
|
|
754
|
-
};
|
|
755
|
-
};
|
|
756
|
-
exports.cloneElement = function(element, config, children) {
|
|
757
|
-
if (element === null || element === undefined)
|
|
758
|
-
throw Error("The argument must be a React element, but you passed " + element + ".");
|
|
759
|
-
var props = assign({}, element.props), key = element.key, owner = element._owner;
|
|
760
|
-
if (config != null) {
|
|
761
|
-
var JSCompiler_inline_result;
|
|
762
|
-
a: {
|
|
763
|
-
if (hasOwnProperty.call(config, "ref") && (JSCompiler_inline_result = Object.getOwnPropertyDescriptor(config, "ref").get) && JSCompiler_inline_result.isReactWarning) {
|
|
764
|
-
JSCompiler_inline_result = false;
|
|
765
|
-
break a;
|
|
766
|
-
}
|
|
767
|
-
JSCompiler_inline_result = config.ref !== undefined;
|
|
768
|
-
}
|
|
769
|
-
JSCompiler_inline_result && (owner = getOwner());
|
|
770
|
-
hasValidKey(config) && (checkKeyStringCoercion(config.key), key = "" + config.key);
|
|
771
|
-
for (propName in config)
|
|
772
|
-
!hasOwnProperty.call(config, propName) || propName === "key" || propName === "__self" || propName === "__source" || propName === "ref" && config.ref === undefined || (props[propName] = config[propName]);
|
|
773
|
-
}
|
|
774
|
-
var propName = arguments.length - 2;
|
|
775
|
-
if (propName === 1)
|
|
776
|
-
props.children = children;
|
|
777
|
-
else if (1 < propName) {
|
|
778
|
-
JSCompiler_inline_result = Array(propName);
|
|
779
|
-
for (var i = 0;i < propName; i++)
|
|
780
|
-
JSCompiler_inline_result[i] = arguments[i + 2];
|
|
781
|
-
props.children = JSCompiler_inline_result;
|
|
782
|
-
}
|
|
783
|
-
props = ReactElement(element.type, key, undefined, undefined, owner, props);
|
|
784
|
-
for (key = 2;key < arguments.length; key++)
|
|
785
|
-
validateChildKeys(arguments[key], props.type);
|
|
786
|
-
return props;
|
|
787
|
-
};
|
|
788
|
-
exports.createContext = function(defaultValue) {
|
|
789
|
-
defaultValue = {
|
|
790
|
-
$$typeof: REACT_CONTEXT_TYPE,
|
|
791
|
-
_currentValue: defaultValue,
|
|
792
|
-
_currentValue2: defaultValue,
|
|
793
|
-
_threadCount: 0,
|
|
794
|
-
Provider: null,
|
|
795
|
-
Consumer: null
|
|
796
|
-
};
|
|
797
|
-
defaultValue.Provider = defaultValue;
|
|
798
|
-
defaultValue.Consumer = {
|
|
799
|
-
$$typeof: REACT_CONSUMER_TYPE,
|
|
800
|
-
_context: defaultValue
|
|
801
|
-
};
|
|
802
|
-
defaultValue._currentRenderer = null;
|
|
803
|
-
defaultValue._currentRenderer2 = null;
|
|
804
|
-
return defaultValue;
|
|
805
|
-
};
|
|
806
|
-
exports.createElement = function(type, config, children) {
|
|
807
|
-
if (isValidElementType(type))
|
|
808
|
-
for (var i = 2;i < arguments.length; i++)
|
|
809
|
-
validateChildKeys(arguments[i], type);
|
|
810
|
-
else {
|
|
811
|
-
i = "";
|
|
812
|
-
if (type === undefined || typeof type === "object" && type !== null && Object.keys(type).length === 0)
|
|
813
|
-
i += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
|
|
814
|
-
if (type === null)
|
|
815
|
-
var typeString = "null";
|
|
816
|
-
else
|
|
817
|
-
isArrayImpl(type) ? typeString = "array" : type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE ? (typeString = "<" + (getComponentNameFromType(type.type) || "Unknown") + " />", i = " Did you accidentally export a JSX literal instead of a component?") : typeString = typeof type;
|
|
818
|
-
console.error("React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", typeString, i);
|
|
819
|
-
}
|
|
820
|
-
var propName;
|
|
821
|
-
i = {};
|
|
822
|
-
typeString = null;
|
|
823
|
-
if (config != null)
|
|
824
|
-
for (propName in didWarnAboutOldJSXRuntime || !("__self" in config) || "key" in config || (didWarnAboutOldJSXRuntime = true, console.warn("Your app (or one of its dependencies) is using an outdated JSX transform. Update to the modern JSX transform for faster performance: https://react.dev/link/new-jsx-transform")), hasValidKey(config) && (checkKeyStringCoercion(config.key), typeString = "" + config.key), config)
|
|
825
|
-
hasOwnProperty.call(config, propName) && propName !== "key" && propName !== "__self" && propName !== "__source" && (i[propName] = config[propName]);
|
|
826
|
-
var childrenLength = arguments.length - 2;
|
|
827
|
-
if (childrenLength === 1)
|
|
828
|
-
i.children = children;
|
|
829
|
-
else if (1 < childrenLength) {
|
|
830
|
-
for (var childArray = Array(childrenLength), _i = 0;_i < childrenLength; _i++)
|
|
831
|
-
childArray[_i] = arguments[_i + 2];
|
|
832
|
-
Object.freeze && Object.freeze(childArray);
|
|
833
|
-
i.children = childArray;
|
|
834
|
-
}
|
|
835
|
-
if (type && type.defaultProps)
|
|
836
|
-
for (propName in childrenLength = type.defaultProps, childrenLength)
|
|
837
|
-
i[propName] === undefined && (i[propName] = childrenLength[propName]);
|
|
838
|
-
typeString && defineKeyPropWarningGetter(i, typeof type === "function" ? type.displayName || type.name || "Unknown" : type);
|
|
839
|
-
return ReactElement(type, typeString, undefined, undefined, getOwner(), i);
|
|
840
|
-
};
|
|
841
|
-
exports.createRef = function() {
|
|
842
|
-
var refObject = { current: null };
|
|
843
|
-
Object.seal(refObject);
|
|
844
|
-
return refObject;
|
|
845
|
-
};
|
|
846
|
-
exports.forwardRef = function(render) {
|
|
847
|
-
render != null && render.$$typeof === REACT_MEMO_TYPE ? console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...)).") : typeof render !== "function" ? console.error("forwardRef requires a render function but was given %s.", render === null ? "null" : typeof render) : render.length !== 0 && render.length !== 2 && console.error("forwardRef render functions accept exactly two parameters: props and ref. %s", render.length === 1 ? "Did you forget to use the ref parameter?" : "Any additional parameter will be undefined.");
|
|
848
|
-
render != null && render.defaultProps != null && console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");
|
|
849
|
-
var elementType = { $$typeof: REACT_FORWARD_REF_TYPE, render }, ownName;
|
|
850
|
-
Object.defineProperty(elementType, "displayName", {
|
|
851
|
-
enumerable: false,
|
|
852
|
-
configurable: true,
|
|
853
|
-
get: function() {
|
|
854
|
-
return ownName;
|
|
855
|
-
},
|
|
856
|
-
set: function(name) {
|
|
857
|
-
ownName = name;
|
|
858
|
-
render.name || render.displayName || (Object.defineProperty(render, "name", { value: name }), render.displayName = name);
|
|
859
|
-
}
|
|
860
|
-
});
|
|
861
|
-
return elementType;
|
|
862
|
-
};
|
|
863
|
-
exports.isValidElement = isValidElement;
|
|
864
|
-
exports.lazy = function(ctor) {
|
|
865
|
-
return {
|
|
866
|
-
$$typeof: REACT_LAZY_TYPE,
|
|
867
|
-
_payload: { _status: -1, _result: ctor },
|
|
868
|
-
_init: lazyInitializer
|
|
869
|
-
};
|
|
870
|
-
};
|
|
871
|
-
exports.memo = function(type, compare) {
|
|
872
|
-
isValidElementType(type) || console.error("memo: The first argument must be a component. Instead received: %s", type === null ? "null" : typeof type);
|
|
873
|
-
compare = {
|
|
874
|
-
$$typeof: REACT_MEMO_TYPE,
|
|
875
|
-
type,
|
|
876
|
-
compare: compare === undefined ? null : compare
|
|
877
|
-
};
|
|
878
|
-
var ownName;
|
|
879
|
-
Object.defineProperty(compare, "displayName", {
|
|
880
|
-
enumerable: false,
|
|
881
|
-
configurable: true,
|
|
882
|
-
get: function() {
|
|
883
|
-
return ownName;
|
|
884
|
-
},
|
|
885
|
-
set: function(name) {
|
|
886
|
-
ownName = name;
|
|
887
|
-
type.name || type.displayName || (Object.defineProperty(type, "name", { value: name }), type.displayName = name);
|
|
888
|
-
}
|
|
889
|
-
});
|
|
890
|
-
return compare;
|
|
891
|
-
};
|
|
892
|
-
exports.startTransition = function(scope) {
|
|
893
|
-
var prevTransition = ReactSharedInternals.T, currentTransition = {};
|
|
894
|
-
ReactSharedInternals.T = currentTransition;
|
|
895
|
-
currentTransition._updatedFibers = new Set;
|
|
896
|
-
try {
|
|
897
|
-
var returnValue = scope(), onStartTransitionFinish = ReactSharedInternals.S;
|
|
898
|
-
onStartTransitionFinish !== null && onStartTransitionFinish(currentTransition, returnValue);
|
|
899
|
-
typeof returnValue === "object" && returnValue !== null && typeof returnValue.then === "function" && returnValue.then(noop, reportGlobalError);
|
|
900
|
-
} catch (error) {
|
|
901
|
-
reportGlobalError(error);
|
|
902
|
-
} finally {
|
|
903
|
-
prevTransition === null && currentTransition._updatedFibers && (scope = currentTransition._updatedFibers.size, currentTransition._updatedFibers.clear(), 10 < scope && console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")), ReactSharedInternals.T = prevTransition;
|
|
904
|
-
}
|
|
905
|
-
};
|
|
906
|
-
exports.unstable_useCacheRefresh = function() {
|
|
907
|
-
return resolveDispatcher().useCacheRefresh();
|
|
908
|
-
};
|
|
909
|
-
exports.use = function(usable) {
|
|
910
|
-
return resolveDispatcher().use(usable);
|
|
911
|
-
};
|
|
912
|
-
exports.useActionState = function(action, initialState, permalink) {
|
|
913
|
-
return resolveDispatcher().useActionState(action, initialState, permalink);
|
|
914
|
-
};
|
|
915
|
-
exports.useCallback = function(callback, deps) {
|
|
916
|
-
return resolveDispatcher().useCallback(callback, deps);
|
|
917
|
-
};
|
|
918
|
-
exports.useContext = function(Context) {
|
|
919
|
-
var dispatcher = resolveDispatcher();
|
|
920
|
-
Context.$$typeof === REACT_CONSUMER_TYPE && console.error("Calling useContext(Context.Consumer) is not supported and will cause bugs. Did you mean to call useContext(Context) instead?");
|
|
921
|
-
return dispatcher.useContext(Context);
|
|
922
|
-
};
|
|
923
|
-
exports.useDebugValue = function(value, formatterFn) {
|
|
924
|
-
return resolveDispatcher().useDebugValue(value, formatterFn);
|
|
925
|
-
};
|
|
926
|
-
exports.useDeferredValue = function(value, initialValue) {
|
|
927
|
-
return resolveDispatcher().useDeferredValue(value, initialValue);
|
|
928
|
-
};
|
|
929
|
-
exports.useEffect = function(create, deps) {
|
|
930
|
-
return resolveDispatcher().useEffect(create, deps);
|
|
931
|
-
};
|
|
932
|
-
exports.useId = function() {
|
|
933
|
-
return resolveDispatcher().useId();
|
|
934
|
-
};
|
|
935
|
-
exports.useImperativeHandle = function(ref, create, deps) {
|
|
936
|
-
return resolveDispatcher().useImperativeHandle(ref, create, deps);
|
|
937
|
-
};
|
|
938
|
-
exports.useInsertionEffect = function(create, deps) {
|
|
939
|
-
return resolveDispatcher().useInsertionEffect(create, deps);
|
|
940
|
-
};
|
|
941
|
-
exports.useLayoutEffect = function(create, deps) {
|
|
942
|
-
return resolveDispatcher().useLayoutEffect(create, deps);
|
|
943
|
-
};
|
|
944
|
-
exports.useMemo = function(create, deps) {
|
|
945
|
-
return resolveDispatcher().useMemo(create, deps);
|
|
946
|
-
};
|
|
947
|
-
exports.useOptimistic = function(passthrough, reducer) {
|
|
948
|
-
return resolveDispatcher().useOptimistic(passthrough, reducer);
|
|
949
|
-
};
|
|
950
|
-
exports.useReducer = function(reducer, initialArg, init) {
|
|
951
|
-
return resolveDispatcher().useReducer(reducer, initialArg, init);
|
|
952
|
-
};
|
|
953
|
-
exports.useRef = function(initialValue) {
|
|
954
|
-
return resolveDispatcher().useRef(initialValue);
|
|
955
|
-
};
|
|
956
|
-
exports.useState = function(initialState) {
|
|
957
|
-
return resolveDispatcher().useState(initialState);
|
|
958
|
-
};
|
|
959
|
-
exports.useSyncExternalStore = function(subscribe, getSnapshot, getServerSnapshot) {
|
|
960
|
-
return resolveDispatcher().useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
|
|
961
|
-
};
|
|
962
|
-
exports.useTransition = function() {
|
|
963
|
-
return resolveDispatcher().useTransition();
|
|
964
|
-
};
|
|
965
|
-
exports.version = "19.0.0";
|
|
966
|
-
typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== "undefined" && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop === "function" && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());
|
|
967
|
-
})();
|
|
968
|
-
});
|
|
969
|
-
|
|
970
|
-
// /Users/dolmios/GitHub/personal/stoop/node_modules/react/index.js
|
|
971
|
-
var require_react = __commonJS((exports, module) => {
|
|
972
|
-
var react_development = __toESM(require_react_development(), 1);
|
|
973
|
-
if (false) {
|
|
974
|
-
} else {
|
|
975
|
-
module.exports = react_development;
|
|
976
|
-
}
|
|
977
|
-
});
|
|
978
|
-
|
|
979
|
-
// node_modules/.pnpm/react@19.0.0/node_modules/react/cjs/react-jsx-dev-runtime.development.js
|
|
980
|
-
var require_react_jsx_dev_runtime_development = __commonJS((exports) => {
|
|
981
|
-
var React = __toESM(require_react(), 1);
|
|
982
|
-
(function() {
|
|
983
|
-
function getComponentNameFromType(type) {
|
|
984
|
-
if (type == null)
|
|
985
|
-
return null;
|
|
986
|
-
if (typeof type === "function")
|
|
987
|
-
return type.$$typeof === REACT_CLIENT_REFERENCE$2 ? null : type.displayName || type.name || null;
|
|
988
|
-
if (typeof type === "string")
|
|
989
|
-
return type;
|
|
990
|
-
switch (type) {
|
|
991
|
-
case REACT_FRAGMENT_TYPE:
|
|
992
|
-
return "Fragment";
|
|
993
|
-
case REACT_PORTAL_TYPE:
|
|
994
|
-
return "Portal";
|
|
995
|
-
case REACT_PROFILER_TYPE:
|
|
996
|
-
return "Profiler";
|
|
997
|
-
case REACT_STRICT_MODE_TYPE:
|
|
998
|
-
return "StrictMode";
|
|
999
|
-
case REACT_SUSPENSE_TYPE:
|
|
1000
|
-
return "Suspense";
|
|
1001
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
1002
|
-
return "SuspenseList";
|
|
1003
|
-
}
|
|
1004
|
-
if (typeof type === "object")
|
|
1005
|
-
switch (typeof type.tag === "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), type.$$typeof) {
|
|
1006
|
-
case REACT_CONTEXT_TYPE:
|
|
1007
|
-
return (type.displayName || "Context") + ".Provider";
|
|
1008
|
-
case REACT_CONSUMER_TYPE:
|
|
1009
|
-
return (type._context.displayName || "Context") + ".Consumer";
|
|
1010
|
-
case REACT_FORWARD_REF_TYPE:
|
|
1011
|
-
var innerType = type.render;
|
|
1012
|
-
type = type.displayName;
|
|
1013
|
-
type || (type = innerType.displayName || innerType.name || "", type = type !== "" ? "ForwardRef(" + type + ")" : "ForwardRef");
|
|
1014
|
-
return type;
|
|
1015
|
-
case REACT_MEMO_TYPE:
|
|
1016
|
-
return innerType = type.displayName || null, innerType !== null ? innerType : getComponentNameFromType(type.type) || "Memo";
|
|
1017
|
-
case REACT_LAZY_TYPE:
|
|
1018
|
-
innerType = type._payload;
|
|
1019
|
-
type = type._init;
|
|
1020
|
-
try {
|
|
1021
|
-
return getComponentNameFromType(type(innerType));
|
|
1022
|
-
} catch (x) {
|
|
1023
|
-
}
|
|
1024
|
-
}
|
|
1025
|
-
return null;
|
|
1026
|
-
}
|
|
1027
|
-
function testStringCoercion(value) {
|
|
1028
|
-
return "" + value;
|
|
1029
|
-
}
|
|
1030
|
-
function checkKeyStringCoercion(value) {
|
|
1031
|
-
try {
|
|
1032
|
-
testStringCoercion(value);
|
|
1033
|
-
var JSCompiler_inline_result = false;
|
|
1034
|
-
} catch (e) {
|
|
1035
|
-
JSCompiler_inline_result = true;
|
|
1036
|
-
}
|
|
1037
|
-
if (JSCompiler_inline_result) {
|
|
1038
|
-
JSCompiler_inline_result = console;
|
|
1039
|
-
var JSCompiler_temp_const = JSCompiler_inline_result.error;
|
|
1040
|
-
var JSCompiler_inline_result$jscomp$0 = typeof Symbol === "function" && Symbol.toStringTag && value[Symbol.toStringTag] || value.constructor.name || "Object";
|
|
1041
|
-
JSCompiler_temp_const.call(JSCompiler_inline_result, "The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", JSCompiler_inline_result$jscomp$0);
|
|
1042
|
-
return testStringCoercion(value);
|
|
1043
|
-
}
|
|
1044
|
-
}
|
|
1045
|
-
function disabledLog() {
|
|
1046
|
-
}
|
|
1047
|
-
function disableLogs() {
|
|
1048
|
-
if (disabledDepth === 0) {
|
|
1049
|
-
prevLog = console.log;
|
|
1050
|
-
prevInfo = console.info;
|
|
1051
|
-
prevWarn = console.warn;
|
|
1052
|
-
prevError = console.error;
|
|
1053
|
-
prevGroup = console.group;
|
|
1054
|
-
prevGroupCollapsed = console.groupCollapsed;
|
|
1055
|
-
prevGroupEnd = console.groupEnd;
|
|
1056
|
-
var props = {
|
|
1057
|
-
configurable: true,
|
|
1058
|
-
enumerable: true,
|
|
1059
|
-
value: disabledLog,
|
|
1060
|
-
writable: true
|
|
1061
|
-
};
|
|
1062
|
-
Object.defineProperties(console, {
|
|
1063
|
-
info: props,
|
|
1064
|
-
log: props,
|
|
1065
|
-
warn: props,
|
|
1066
|
-
error: props,
|
|
1067
|
-
group: props,
|
|
1068
|
-
groupCollapsed: props,
|
|
1069
|
-
groupEnd: props
|
|
1070
|
-
});
|
|
1071
|
-
}
|
|
1072
|
-
disabledDepth++;
|
|
1073
|
-
}
|
|
1074
|
-
function reenableLogs() {
|
|
1075
|
-
disabledDepth--;
|
|
1076
|
-
if (disabledDepth === 0) {
|
|
1077
|
-
var props = { configurable: true, enumerable: true, writable: true };
|
|
1078
|
-
Object.defineProperties(console, {
|
|
1079
|
-
log: assign({}, props, { value: prevLog }),
|
|
1080
|
-
info: assign({}, props, { value: prevInfo }),
|
|
1081
|
-
warn: assign({}, props, { value: prevWarn }),
|
|
1082
|
-
error: assign({}, props, { value: prevError }),
|
|
1083
|
-
group: assign({}, props, { value: prevGroup }),
|
|
1084
|
-
groupCollapsed: assign({}, props, { value: prevGroupCollapsed }),
|
|
1085
|
-
groupEnd: assign({}, props, { value: prevGroupEnd })
|
|
1086
|
-
});
|
|
1087
|
-
}
|
|
1088
|
-
0 > disabledDepth && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.");
|
|
1089
|
-
}
|
|
1090
|
-
function describeBuiltInComponentFrame(name) {
|
|
1091
|
-
if (prefix === undefined)
|
|
1092
|
-
try {
|
|
1093
|
-
throw Error();
|
|
1094
|
-
} catch (x) {
|
|
1095
|
-
var match = x.stack.trim().match(/\n( *(at )?)/);
|
|
1096
|
-
prefix = match && match[1] || "";
|
|
1097
|
-
suffix = -1 < x.stack.indexOf("\n at") ? " (<anonymous>)" : -1 < x.stack.indexOf("@") ? "@unknown:0:0" : "";
|
|
1098
|
-
}
|
|
1099
|
-
return "\n" + prefix + name + suffix;
|
|
1100
|
-
}
|
|
1101
|
-
function describeNativeComponentFrame(fn, construct) {
|
|
1102
|
-
if (!fn || reentry)
|
|
1103
|
-
return "";
|
|
1104
|
-
var frame = componentFrameCache.get(fn);
|
|
1105
|
-
if (frame !== undefined)
|
|
1106
|
-
return frame;
|
|
1107
|
-
reentry = true;
|
|
1108
|
-
frame = Error.prepareStackTrace;
|
|
1109
|
-
Error.prepareStackTrace = undefined;
|
|
1110
|
-
var previousDispatcher = null;
|
|
1111
|
-
previousDispatcher = ReactSharedInternals.H;
|
|
1112
|
-
ReactSharedInternals.H = null;
|
|
1113
|
-
disableLogs();
|
|
1114
|
-
try {
|
|
1115
|
-
var RunInRootFrame = {
|
|
1116
|
-
DetermineComponentFrameRoot: function() {
|
|
1117
|
-
try {
|
|
1118
|
-
if (construct) {
|
|
1119
|
-
var Fake = function() {
|
|
1120
|
-
throw Error();
|
|
1121
|
-
};
|
|
1122
|
-
Object.defineProperty(Fake.prototype, "props", {
|
|
1123
|
-
set: function() {
|
|
1124
|
-
throw Error();
|
|
1125
|
-
}
|
|
1126
|
-
});
|
|
1127
|
-
if (typeof Reflect === "object" && Reflect.construct) {
|
|
1128
|
-
try {
|
|
1129
|
-
Reflect.construct(Fake, []);
|
|
1130
|
-
} catch (x) {
|
|
1131
|
-
var control = x;
|
|
1132
|
-
}
|
|
1133
|
-
Reflect.construct(fn, [], Fake);
|
|
1134
|
-
} else {
|
|
1135
|
-
try {
|
|
1136
|
-
Fake.call();
|
|
1137
|
-
} catch (x$0) {
|
|
1138
|
-
control = x$0;
|
|
1139
|
-
}
|
|
1140
|
-
fn.call(Fake.prototype);
|
|
1141
|
-
}
|
|
1142
|
-
} else {
|
|
1143
|
-
try {
|
|
1144
|
-
throw Error();
|
|
1145
|
-
} catch (x$1) {
|
|
1146
|
-
control = x$1;
|
|
1147
|
-
}
|
|
1148
|
-
(Fake = fn()) && typeof Fake.catch === "function" && Fake.catch(function() {
|
|
1149
|
-
});
|
|
1150
|
-
}
|
|
1151
|
-
} catch (sample) {
|
|
1152
|
-
if (sample && control && typeof sample.stack === "string")
|
|
1153
|
-
return [sample.stack, control.stack];
|
|
1154
|
-
}
|
|
1155
|
-
return [null, null];
|
|
1156
|
-
}
|
|
1157
|
-
};
|
|
1158
|
-
RunInRootFrame.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot";
|
|
1159
|
-
var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, "name");
|
|
1160
|
-
namePropDescriptor && namePropDescriptor.configurable && Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" });
|
|
1161
|
-
var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(), sampleStack = _RunInRootFrame$Deter[0], controlStack = _RunInRootFrame$Deter[1];
|
|
1162
|
-
if (sampleStack && controlStack) {
|
|
1163
|
-
var sampleLines = sampleStack.split("\n"), controlLines = controlStack.split("\n");
|
|
1164
|
-
for (_RunInRootFrame$Deter = namePropDescriptor = 0;namePropDescriptor < sampleLines.length && !sampleLines[namePropDescriptor].includes("DetermineComponentFrameRoot"); )
|
|
1165
|
-
namePropDescriptor++;
|
|
1166
|
-
for (;_RunInRootFrame$Deter < controlLines.length && !controlLines[_RunInRootFrame$Deter].includes("DetermineComponentFrameRoot"); )
|
|
1167
|
-
_RunInRootFrame$Deter++;
|
|
1168
|
-
if (namePropDescriptor === sampleLines.length || _RunInRootFrame$Deter === controlLines.length)
|
|
1169
|
-
for (namePropDescriptor = sampleLines.length - 1, _RunInRootFrame$Deter = controlLines.length - 1;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter && sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]; )
|
|
1170
|
-
_RunInRootFrame$Deter--;
|
|
1171
|
-
for (;1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter; namePropDescriptor--, _RunInRootFrame$Deter--)
|
|
1172
|
-
if (sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
1173
|
-
if (namePropDescriptor !== 1 || _RunInRootFrame$Deter !== 1) {
|
|
1174
|
-
do
|
|
1175
|
-
if (namePropDescriptor--, _RunInRootFrame$Deter--, 0 > _RunInRootFrame$Deter || sampleLines[namePropDescriptor] !== controlLines[_RunInRootFrame$Deter]) {
|
|
1176
|
-
var _frame = "\n" + sampleLines[namePropDescriptor].replace(" at new ", " at ");
|
|
1177
|
-
fn.displayName && _frame.includes("<anonymous>") && (_frame = _frame.replace("<anonymous>", fn.displayName));
|
|
1178
|
-
typeof fn === "function" && componentFrameCache.set(fn, _frame);
|
|
1179
|
-
return _frame;
|
|
1180
|
-
}
|
|
1181
|
-
while (1 <= namePropDescriptor && 0 <= _RunInRootFrame$Deter);
|
|
1182
|
-
}
|
|
1183
|
-
break;
|
|
1184
|
-
}
|
|
1185
|
-
}
|
|
1186
|
-
} finally {
|
|
1187
|
-
reentry = false, ReactSharedInternals.H = previousDispatcher, reenableLogs(), Error.prepareStackTrace = frame;
|
|
1188
|
-
}
|
|
1189
|
-
sampleLines = (sampleLines = fn ? fn.displayName || fn.name : "") ? describeBuiltInComponentFrame(sampleLines) : "";
|
|
1190
|
-
typeof fn === "function" && componentFrameCache.set(fn, sampleLines);
|
|
1191
|
-
return sampleLines;
|
|
1192
|
-
}
|
|
1193
|
-
function describeUnknownElementTypeFrameInDEV(type) {
|
|
1194
|
-
if (type == null)
|
|
1195
|
-
return "";
|
|
1196
|
-
if (typeof type === "function") {
|
|
1197
|
-
var prototype = type.prototype;
|
|
1198
|
-
return describeNativeComponentFrame(type, !(!prototype || !prototype.isReactComponent));
|
|
1199
|
-
}
|
|
1200
|
-
if (typeof type === "string")
|
|
1201
|
-
return describeBuiltInComponentFrame(type);
|
|
1202
|
-
switch (type) {
|
|
1203
|
-
case REACT_SUSPENSE_TYPE:
|
|
1204
|
-
return describeBuiltInComponentFrame("Suspense");
|
|
1205
|
-
case REACT_SUSPENSE_LIST_TYPE:
|
|
1206
|
-
return describeBuiltInComponentFrame("SuspenseList");
|
|
1207
|
-
}
|
|
1208
|
-
if (typeof type === "object")
|
|
1209
|
-
switch (type.$$typeof) {
|
|
1210
|
-
case REACT_FORWARD_REF_TYPE:
|
|
1211
|
-
return type = describeNativeComponentFrame(type.render, false), type;
|
|
1212
|
-
case REACT_MEMO_TYPE:
|
|
1213
|
-
return describeUnknownElementTypeFrameInDEV(type.type);
|
|
1214
|
-
case REACT_LAZY_TYPE:
|
|
1215
|
-
prototype = type._payload;
|
|
1216
|
-
type = type._init;
|
|
1217
|
-
try {
|
|
1218
|
-
return describeUnknownElementTypeFrameInDEV(type(prototype));
|
|
1219
|
-
} catch (x) {
|
|
1220
|
-
}
|
|
1221
|
-
}
|
|
1222
|
-
return "";
|
|
1223
|
-
}
|
|
1224
|
-
function getOwner() {
|
|
1225
|
-
var dispatcher = ReactSharedInternals.A;
|
|
1226
|
-
return dispatcher === null ? null : dispatcher.getOwner();
|
|
1227
|
-
}
|
|
1228
|
-
function hasValidKey(config) {
|
|
1229
|
-
if (hasOwnProperty.call(config, "key")) {
|
|
1230
|
-
var getter = Object.getOwnPropertyDescriptor(config, "key").get;
|
|
1231
|
-
if (getter && getter.isReactWarning)
|
|
1232
|
-
return false;
|
|
1233
|
-
}
|
|
1234
|
-
return config.key !== undefined;
|
|
1235
|
-
}
|
|
1236
|
-
function defineKeyPropWarningGetter(props, displayName) {
|
|
1237
|
-
function warnAboutAccessingKey() {
|
|
1238
|
-
specialPropKeyWarningShown || (specialPropKeyWarningShown = true, console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)", displayName));
|
|
1239
|
-
}
|
|
1240
|
-
warnAboutAccessingKey.isReactWarning = true;
|
|
1241
|
-
Object.defineProperty(props, "key", {
|
|
1242
|
-
get: warnAboutAccessingKey,
|
|
1243
|
-
configurable: true
|
|
1244
|
-
});
|
|
1245
|
-
}
|
|
1246
|
-
function elementRefGetterWithDeprecationWarning() {
|
|
1247
|
-
var componentName = getComponentNameFromType(this.type);
|
|
1248
|
-
didWarnAboutElementRef[componentName] || (didWarnAboutElementRef[componentName] = true, console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release."));
|
|
1249
|
-
componentName = this.props.ref;
|
|
1250
|
-
return componentName !== undefined ? componentName : null;
|
|
1251
|
-
}
|
|
1252
|
-
function ReactElement(type, key, self, source, owner, props) {
|
|
1253
|
-
self = props.ref;
|
|
1254
|
-
type = {
|
|
1255
|
-
$$typeof: REACT_ELEMENT_TYPE,
|
|
1256
|
-
type,
|
|
1257
|
-
key,
|
|
1258
|
-
props,
|
|
1259
|
-
_owner: owner
|
|
1260
|
-
};
|
|
1261
|
-
(self !== undefined ? self : null) !== null ? Object.defineProperty(type, "ref", {
|
|
1262
|
-
enumerable: false,
|
|
1263
|
-
get: elementRefGetterWithDeprecationWarning
|
|
1264
|
-
}) : Object.defineProperty(type, "ref", { enumerable: false, value: null });
|
|
1265
|
-
type._store = {};
|
|
1266
|
-
Object.defineProperty(type._store, "validated", {
|
|
1267
|
-
configurable: false,
|
|
1268
|
-
enumerable: false,
|
|
1269
|
-
writable: true,
|
|
1270
|
-
value: 0
|
|
1271
|
-
});
|
|
1272
|
-
Object.defineProperty(type, "_debugInfo", {
|
|
1273
|
-
configurable: false,
|
|
1274
|
-
enumerable: false,
|
|
1275
|
-
writable: true,
|
|
1276
|
-
value: null
|
|
1277
|
-
});
|
|
1278
|
-
Object.freeze && (Object.freeze(type.props), Object.freeze(type));
|
|
1279
|
-
return type;
|
|
1280
|
-
}
|
|
1281
|
-
function jsxDEVImpl(type, config, maybeKey, isStaticChildren, source, self) {
|
|
1282
|
-
if (typeof type === "string" || typeof type === "function" || type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || type === REACT_OFFSCREEN_TYPE || typeof type === "object" && type !== null && (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_CONSUMER_TYPE || type.$$typeof === REACT_FORWARD_REF_TYPE || type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined)) {
|
|
1283
|
-
var children = config.children;
|
|
1284
|
-
if (children !== undefined)
|
|
1285
|
-
if (isStaticChildren)
|
|
1286
|
-
if (isArrayImpl(children)) {
|
|
1287
|
-
for (isStaticChildren = 0;isStaticChildren < children.length; isStaticChildren++)
|
|
1288
|
-
validateChildKeys(children[isStaticChildren], type);
|
|
1289
|
-
Object.freeze && Object.freeze(children);
|
|
1290
|
-
} else
|
|
1291
|
-
console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");
|
|
1292
|
-
else
|
|
1293
|
-
validateChildKeys(children, type);
|
|
1294
|
-
} else {
|
|
1295
|
-
children = "";
|
|
1296
|
-
if (type === undefined || typeof type === "object" && type !== null && Object.keys(type).length === 0)
|
|
1297
|
-
children += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.";
|
|
1298
|
-
type === null ? isStaticChildren = "null" : isArrayImpl(type) ? isStaticChildren = "array" : type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE ? (isStaticChildren = "<" + (getComponentNameFromType(type.type) || "Unknown") + " />", children = " Did you accidentally export a JSX literal instead of a component?") : isStaticChildren = typeof type;
|
|
1299
|
-
console.error("React.jsx: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s", isStaticChildren, children);
|
|
1300
|
-
}
|
|
1301
|
-
if (hasOwnProperty.call(config, "key")) {
|
|
1302
|
-
children = getComponentNameFromType(type);
|
|
1303
|
-
var keys = Object.keys(config).filter(function(k) {
|
|
1304
|
-
return k !== "key";
|
|
1305
|
-
});
|
|
1306
|
-
isStaticChildren = 0 < keys.length ? "{key: someKey, " + keys.join(": ..., ") + ": ...}" : "{key: someKey}";
|
|
1307
|
-
didWarnAboutKeySpread[children + isStaticChildren] || (keys = 0 < keys.length ? "{" + keys.join(": ..., ") + ": ...}" : "{}", console.error('A props object containing a "key" prop is being spread into JSX:\n let props = %s;\n <%s {...props} />\nReact keys must be passed directly to JSX without using spread:\n let props = %s;\n <%s key={someKey} {...props} />', isStaticChildren, children, keys, children), didWarnAboutKeySpread[children + isStaticChildren] = true);
|
|
1308
|
-
}
|
|
1309
|
-
children = null;
|
|
1310
|
-
maybeKey !== undefined && (checkKeyStringCoercion(maybeKey), children = "" + maybeKey);
|
|
1311
|
-
hasValidKey(config) && (checkKeyStringCoercion(config.key), children = "" + config.key);
|
|
1312
|
-
if ("key" in config) {
|
|
1313
|
-
maybeKey = {};
|
|
1314
|
-
for (var propName in config)
|
|
1315
|
-
propName !== "key" && (maybeKey[propName] = config[propName]);
|
|
1316
|
-
} else
|
|
1317
|
-
maybeKey = config;
|
|
1318
|
-
children && defineKeyPropWarningGetter(maybeKey, typeof type === "function" ? type.displayName || type.name || "Unknown" : type);
|
|
1319
|
-
return ReactElement(type, children, self, source, getOwner(), maybeKey);
|
|
1320
|
-
}
|
|
1321
|
-
function validateChildKeys(node, parentType) {
|
|
1322
|
-
if (typeof node === "object" && node && node.$$typeof !== REACT_CLIENT_REFERENCE) {
|
|
1323
|
-
if (isArrayImpl(node))
|
|
1324
|
-
for (var i = 0;i < node.length; i++) {
|
|
1325
|
-
var child = node[i];
|
|
1326
|
-
isValidElement(child) && validateExplicitKey(child, parentType);
|
|
1327
|
-
}
|
|
1328
|
-
else if (isValidElement(node))
|
|
1329
|
-
node._store && (node._store.validated = 1);
|
|
1330
|
-
else if (node === null || typeof node !== "object" ? i = null : (i = MAYBE_ITERATOR_SYMBOL && node[MAYBE_ITERATOR_SYMBOL] || node["@@iterator"], i = typeof i === "function" ? i : null), typeof i === "function" && i !== node.entries && (i = i.call(node), i !== node))
|
|
1331
|
-
for (;!(node = i.next()).done; )
|
|
1332
|
-
isValidElement(node.value) && validateExplicitKey(node.value, parentType);
|
|
1333
|
-
}
|
|
1334
|
-
}
|
|
1335
|
-
function isValidElement(object) {
|
|
1336
|
-
return typeof object === "object" && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;
|
|
1337
|
-
}
|
|
1338
|
-
function validateExplicitKey(element, parentType) {
|
|
1339
|
-
if (element._store && !element._store.validated && element.key == null && (element._store.validated = 1, parentType = getCurrentComponentErrorInfo(parentType), !ownerHasKeyUseWarning[parentType])) {
|
|
1340
|
-
ownerHasKeyUseWarning[parentType] = true;
|
|
1341
|
-
var childOwner = "";
|
|
1342
|
-
element && element._owner != null && element._owner !== getOwner() && (childOwner = null, typeof element._owner.tag === "number" ? childOwner = getComponentNameFromType(element._owner.type) : typeof element._owner.name === "string" && (childOwner = element._owner.name), childOwner = " It was passed a child from " + childOwner + ".");
|
|
1343
|
-
var prevGetCurrentStack = ReactSharedInternals.getCurrentStack;
|
|
1344
|
-
ReactSharedInternals.getCurrentStack = function() {
|
|
1345
|
-
var stack = describeUnknownElementTypeFrameInDEV(element.type);
|
|
1346
|
-
prevGetCurrentStack && (stack += prevGetCurrentStack() || "");
|
|
1347
|
-
return stack;
|
|
1348
|
-
};
|
|
1349
|
-
console.error('Each child in a list should have a unique "key" prop.%s%s See https://react.dev/link/warning-keys for more information.', parentType, childOwner);
|
|
1350
|
-
ReactSharedInternals.getCurrentStack = prevGetCurrentStack;
|
|
1351
|
-
}
|
|
1352
|
-
}
|
|
1353
|
-
function getCurrentComponentErrorInfo(parentType) {
|
|
1354
|
-
var info = "", owner = getOwner();
|
|
1355
|
-
owner && (owner = getComponentNameFromType(owner.type)) && (info = "\n\nCheck the render method of `" + owner + "`.");
|
|
1356
|
-
info || (parentType = getComponentNameFromType(parentType)) && (info = "\n\nCheck the top-level render call using <" + parentType + ">.");
|
|
1357
|
-
return info;
|
|
1358
|
-
}
|
|
1359
|
-
var REACT_ELEMENT_TYPE = Symbol.for("react.transitional.element"), REACT_PORTAL_TYPE = Symbol.for("react.portal"), REACT_FRAGMENT_TYPE = Symbol.for("react.fragment"), REACT_STRICT_MODE_TYPE = Symbol.for("react.strict_mode"), REACT_PROFILER_TYPE = Symbol.for("react.profiler");
|
|
1360
|
-
Symbol.for("react.provider");
|
|
1361
|
-
var REACT_CONSUMER_TYPE = Symbol.for("react.consumer"), REACT_CONTEXT_TYPE = Symbol.for("react.context"), REACT_FORWARD_REF_TYPE = Symbol.for("react.forward_ref"), REACT_SUSPENSE_TYPE = Symbol.for("react.suspense"), REACT_SUSPENSE_LIST_TYPE = Symbol.for("react.suspense_list"), REACT_MEMO_TYPE = Symbol.for("react.memo"), REACT_LAZY_TYPE = Symbol.for("react.lazy"), REACT_OFFSCREEN_TYPE = Symbol.for("react.offscreen"), MAYBE_ITERATOR_SYMBOL = Symbol.iterator, REACT_CLIENT_REFERENCE$2 = Symbol.for("react.client.reference"), ReactSharedInternals = React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, hasOwnProperty = Object.prototype.hasOwnProperty, assign = Object.assign, REACT_CLIENT_REFERENCE$1 = Symbol.for("react.client.reference"), isArrayImpl = Array.isArray, disabledDepth = 0, prevLog, prevInfo, prevWarn, prevError, prevGroup, prevGroupCollapsed, prevGroupEnd;
|
|
1362
|
-
disabledLog.__reactDisabledLog = true;
|
|
1363
|
-
var prefix, suffix, reentry = false;
|
|
1364
|
-
var componentFrameCache = new (typeof WeakMap === "function" ? WeakMap : Map);
|
|
1365
|
-
var REACT_CLIENT_REFERENCE = Symbol.for("react.client.reference"), specialPropKeyWarningShown;
|
|
1366
|
-
var didWarnAboutElementRef = {};
|
|
1367
|
-
var didWarnAboutKeySpread = {}, ownerHasKeyUseWarning = {};
|
|
1368
|
-
exports.Fragment = REACT_FRAGMENT_TYPE;
|
|
1369
|
-
exports.jsxDEV = function(type, config, maybeKey, isStaticChildren, source, self) {
|
|
1370
|
-
return jsxDEVImpl(type, config, maybeKey, isStaticChildren, source, self);
|
|
1371
|
-
};
|
|
1372
|
-
})();
|
|
1373
|
-
});
|
|
1
|
+
// node_modules/clsx/dist/clsx.mjs
|
|
2
|
+
function r(e) {
|
|
3
|
+
var t, f, n = "";
|
|
4
|
+
if (typeof e == "string" || typeof e == "number")
|
|
5
|
+
n += e;
|
|
6
|
+
else if (typeof e == "object")
|
|
7
|
+
if (Array.isArray(e)) {
|
|
8
|
+
var o = e.length;
|
|
9
|
+
for (t = 0;t < o; t++)
|
|
10
|
+
e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
11
|
+
} else
|
|
12
|
+
for (f in e)
|
|
13
|
+
e[f] && (n && (n += " "), n += f);
|
|
14
|
+
return n;
|
|
15
|
+
}
|
|
16
|
+
function clsx() {
|
|
17
|
+
for (var e, t, f = 0, n = "", o = arguments.length;f < o; f++)
|
|
18
|
+
(e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
1374
21
|
|
|
1375
|
-
// /
|
|
1376
|
-
var
|
|
1377
|
-
var react_jsx_dev_runtime_development = __toESM(require_react_jsx_dev_runtime_development(), 1);
|
|
1378
|
-
if (false) {
|
|
1379
|
-
} else {
|
|
1380
|
-
module.exports = react_jsx_dev_runtime_development;
|
|
1381
|
-
}
|
|
1382
|
-
});
|
|
22
|
+
// src/components/Button/Button.module.css
|
|
23
|
+
var Button_module_default = "./Button.module-h78z3dbd.css";
|
|
1383
24
|
|
|
1384
|
-
// src/components/
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
"
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
const [mode, setMode] = import_react.useState("light");
|
|
1392
|
-
import_react.useEffect(() => {
|
|
1393
|
-
const stored = localStorage.getItem("theme");
|
|
1394
|
-
if (stored) {
|
|
1395
|
-
setMode(stored);
|
|
1396
|
-
setMounted(true);
|
|
1397
|
-
return;
|
|
1398
|
-
}
|
|
1399
|
-
const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches;
|
|
1400
|
-
setMode(prefersDark ? "dark" : "light");
|
|
1401
|
-
setMounted(true);
|
|
1402
|
-
}, []);
|
|
1403
|
-
import_react.useEffect(() => {
|
|
1404
|
-
if (!mounted)
|
|
1405
|
-
return;
|
|
1406
|
-
document.documentElement.setAttribute("data-theme", mode);
|
|
1407
|
-
localStorage.setItem("theme", mode);
|
|
1408
|
-
}, [mode, mounted]);
|
|
1409
|
-
const toggleTheme = () => setMode((prev) => prev === "light" ? "dark" : "light");
|
|
1410
|
-
if (!mounted) {
|
|
1411
|
-
return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(jsx_dev_runtime.Fragment, {
|
|
1412
|
-
children: " "
|
|
1413
|
-
}, undefined, false, undefined, this);
|
|
1414
|
-
}
|
|
1415
|
-
return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(ThemeContext.Provider, {
|
|
1416
|
-
value: { mode, toggleTheme },
|
|
1417
|
-
children
|
|
25
|
+
// src/components/Button/Button.tsx
|
|
26
|
+
import { jsxDEV as jsxDEV_7x81h0kn } from "react/jsx-dev-runtime";
|
|
27
|
+
function Button({ className, ...props }) {
|
|
28
|
+
return /* @__PURE__ */ jsxDEV_7x81h0kn("button", {
|
|
29
|
+
className: clsx(Button_module_default["button"], className),
|
|
30
|
+
type: "button",
|
|
31
|
+
...props
|
|
1418
32
|
}, undefined, false, undefined, this);
|
|
1419
33
|
}
|
|
1420
|
-
function useTheme() {
|
|
1421
|
-
const context = import_react.useContext(ThemeContext);
|
|
1422
|
-
if (!context) {
|
|
1423
|
-
throw new Error("useTheme must be used within ThemeProvider");
|
|
1424
|
-
}
|
|
1425
|
-
return context;
|
|
1426
|
-
}
|
|
1427
34
|
export {
|
|
1428
|
-
|
|
1429
|
-
ThemeProvider
|
|
35
|
+
Button
|
|
1430
36
|
};
|
|
1431
37
|
|
|
1432
|
-
//# debugId=
|
|
1433
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE5LjAuMC9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4wLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9yZWFjdEAxOS4wLjAvbm9kZV9tb2R1bGVzL3JlYWN0L2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3JlYWN0QDE5LjAuMC9ub2RlX21vZHVsZXMvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwgIi4uL3NyYy9jb21wb25lbnRzL1RoZW1lUHJvdmlkZXIudHN4Il0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgIi8qKlxuICogQGxpY2Vuc2UgUmVhY3RcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGRlZmluZURlcHJlY2F0aW9uV2FybmluZyhtZXRob2ROYW1lLCBpbmZvKSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBcIiVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzXCIsXG4gICAgICAgICAgICBpbmZvWzBdLFxuICAgICAgICAgICAgaW5mb1sxXVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgICAgIGlmIChudWxsID09PSBtYXliZUl0ZXJhYmxlIHx8IFwib2JqZWN0XCIgIT09IHR5cGVvZiBtYXliZUl0ZXJhYmxlKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIG1heWJlSXRlcmFibGUgPVxuICAgICAgICAoTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSkgfHxcbiAgICAgICAgbWF5YmVJdGVyYWJsZVtcIkBAaXRlcmF0b3JcIl07XG4gICAgICByZXR1cm4gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgbWF5YmVJdGVyYWJsZSA/IG1heWJlSXRlcmFibGUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICAgICAgcHVibGljSW5zdGFuY2UgPVxuICAgICAgICAoKHB1YmxpY0luc3RhbmNlID0gcHVibGljSW5zdGFuY2UuY29uc3RydWN0b3IpICYmXG4gICAgICAgICAgKHB1YmxpY0luc3RhbmNlLmRpc3BsYXlOYW1lIHx8IHB1YmxpY0luc3RhbmNlLm5hbWUpKSB8fFxuICAgICAgICBcIlJlYWN0Q2xhc3NcIjtcbiAgICAgIHZhciB3YXJuaW5nS2V5ID0gcHVibGljSW5zdGFuY2UgKyBcIi5cIiArIGNhbGxlck5hbWU7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gfHxcbiAgICAgICAgKGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiBJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgY2xhc3MgcHJvcGVydHkgd2l0aCB0aGUgZGVzaXJlZCBzdGF0ZSBpbiB0aGUgJXMgY29tcG9uZW50LlwiLFxuICAgICAgICAgIGNhbGxlck5hbWUsXG4gICAgICAgICAgcHVibGljSW5zdGFuY2VcbiAgICAgICAgKSxcbiAgICAgICAgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9ICEwKSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICAgICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICAgICAgdGhpcy51cGRhdGVyID0gdXBkYXRlciB8fCBSZWFjdE5vb3BVcGRhdGVRdWV1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuICAgIGZ1bmN0aW9uIFB1cmVDb21wb25lbnQocHJvcHMsIGNvbnRleHQsIHVwZGF0ZXIpIHtcbiAgICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICB0aGlzLnJlZnMgPSBlbXB0eU9iamVjdDtcbiAgICAgIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gY29uc29sZTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5lcnJvcjtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICBcIk9iamVjdFwiO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QuY2FsbChcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBudWxsO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpXG4gICAgICAgIHJldHVybiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDJcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiB0eXBlO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJGcmFnbWVudFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlBvcnRhbFwiO1xuICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiUHJvZmlsZXJcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN0cmljdE1vZGVcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlN1c3BlbnNlTGlzdFwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Qcm92aWRlclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OU1VNRVJfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAodHlwZS5fY29udGV4dC5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIikgKyBcIi5Db25zdW1lclwiO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgIHZhciBpbm5lclR5cGUgPSB0eXBlLnJlbmRlcjtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgICAgdHlwZSB8fFxuICAgICAgICAgICAgICAoKHR5cGUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgXCJcIiksXG4gICAgICAgICAgICAgICh0eXBlID0gXCJcIiAhPT0gdHlwZSA/IFwiRm9yd2FyZFJlZihcIiArIHR5cGUgKyBcIilcIiA6IFwiRm9yd2FyZFJlZlwiKSk7XG4gICAgICAgICAgICByZXR1cm4gdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgIChpbm5lclR5cGUgPSB0eXBlLmRpc3BsYXlOYW1lIHx8IG51bGwpLFxuICAgICAgICAgICAgICBudWxsICE9PSBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA/IGlubmVyVHlwZVxuICAgICAgICAgICAgICAgIDogZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUudHlwZSkgfHwgXCJNZW1vXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICBpbm5lclR5cGUgPSB0eXBlLl9wYXlsb2FkO1xuICAgICAgICAgICAgdHlwZSA9IHR5cGUuX2luaXQ7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUoaW5uZXJUeXBlKSk7XG4gICAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX09GRlNDUkVFTl9UWVBFIHx8XG4gICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgICAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxIHx8XG4gICAgICAgICAgICB2b2lkIDAgIT09IHR5cGUuZ2V0TW9kdWxlSWQpKVxuICAgICAgICA/ICEwXG4gICAgICAgIDogITE7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cbiAgICBmdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAgICAgIGlmICgwID09PSBkaXNhYmxlZERlcHRoKSB7XG4gICAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kO1xuICAgICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICAgICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgICAgd3JpdGFibGU6ICEwXG4gICAgICAgIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGRpc2FibGVkRGVwdGgrKztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICAgICAgZGlzYWJsZWREZXB0aC0tO1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgdmFyIHByb3BzID0geyBjb25maWd1cmFibGU6ICEwLCBlbnVtZXJhYmxlOiAhMCwgd3JpdGFibGU6ICEwIH07XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgICBsb2c6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZMb2cgfSksXG4gICAgICAgICAgaW5mbzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkluZm8gfSksXG4gICAgICAgICAgd2FybjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldldhcm4gfSksXG4gICAgICAgICAgZXJyb3I6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZFcnJvciB9KSxcbiAgICAgICAgICBncm91cDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwIH0pLFxuICAgICAgICAgIGdyb3VwQ29sbGFwc2VkOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWQgfSksXG4gICAgICAgICAgZ3JvdXBFbmQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cEVuZCB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIDAgPiBkaXNhYmxlZERlcHRoICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkge1xuICAgICAgaWYgKHZvaWQgMCA9PT0gcHJlZml4KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICAgIHByZWZpeCA9IChtYXRjaCAmJiBtYXRjaFsxXSkgfHwgXCJcIjtcbiAgICAgICAgICBzdWZmaXggPVxuICAgICAgICAgICAgLTEgPCB4LnN0YWNrLmluZGV4T2YoXCJcXG4gICAgYXRcIilcbiAgICAgICAgICAgICAgPyBcIiAoPGFub255bW91cz4pXCJcbiAgICAgICAgICAgICAgOiAtMSA8IHguc3RhY2suaW5kZXhPZihcIkBcIilcbiAgICAgICAgICAgICAgICA/IFwiQHVua25vd246MDowXCJcbiAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlxcblwiICsgcHJlZml4ICsgbmFtZSArIHN1ZmZpeDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gICAgICBpZiAoIWZuIHx8IHJlZW50cnkpIHJldHVybiBcIlwiO1xuICAgICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuICAgICAgaWYgKHZvaWQgMCAhPT0gZnJhbWUpIHJldHVybiBmcmFtZTtcbiAgICAgIHJlZW50cnkgPSAhMDtcbiAgICAgIGZyYW1lID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcmV2aW91c0Rpc3BhdGNoZXIgPSBudWxsO1xuICAgICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSDtcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBudWxsO1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBSdW5JblJvb3RGcmFtZSA9IHtcbiAgICAgICAgICBEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsIFwicHJvcHNcIiwge1xuICAgICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiBSZWZsZWN0ICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250cm9sID0geDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDA7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoeCQxKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sID0geCQxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoRmFrZSA9IGZuKCkpICYmXG4gICAgICAgICAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBGYWtlLmNhdGNoICYmXG4gICAgICAgICAgICAgICAgICBGYWtlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgICAgICAgICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiBcInN0cmluZ1wiID09PSB0eXBlb2Ygc2FtcGxlLnN0YWNrKVxuICAgICAgICAgICAgICAgIHJldHVybiBbc2FtcGxlLnN0YWNrLCBjb250cm9sLnN0YWNrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbbnVsbCwgbnVsbF07XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPVxuICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCI7XG4gICAgICAgIHZhciBuYW1lUHJvcERlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxuICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCxcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICApO1xuICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IuY29uZmlndXJhYmxlICYmXG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgICAgXCJuYW1lXCIsXG4gICAgICAgICAgICB7IHZhbHVlOiBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiIH1cbiAgICAgICAgICApO1xuICAgICAgICB2YXIgX1J1bkluUm9vdEZyYW1lJERldGVyID1cbiAgICAgICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCgpLFxuICAgICAgICAgIHNhbXBsZVN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzBdLFxuICAgICAgICAgIGNvbnRyb2xTdGFjayA9IF9SdW5JblJvb3RGcmFtZSREZXRlclsxXTtcbiAgICAgICAgaWYgKHNhbXBsZVN0YWNrICYmIGNvbnRyb2xTdGFjaykge1xuICAgICAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KFwiXFxuXCIpLFxuICAgICAgICAgICAgY29udHJvbExpbmVzID0gY29udHJvbFN0YWNrLnNwbGl0KFwiXFxuXCIpO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBuYW1lUHJvcERlc2NyaXB0b3IgPSAwO1xuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yIDwgc2FtcGxlTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvcisrO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPCBjb250cm9sTGluZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAhY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgIFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCJcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICApXG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIrKztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPT09IHNhbXBsZUxpbmVzLmxlbmd0aCB8fFxuICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyID09PSBjb250cm9sTGluZXMubGVuZ3RoXG4gICAgICAgICAgKVxuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMSxcbiAgICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiZcbiAgICAgICAgICAgICAgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgJiZcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICBjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXTtcblxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLTtcbiAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXI7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3ItLSwgX1J1bkluUm9vdEZyYW1lJERldGVyLS1cbiAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0gIT09XG4gICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgaWYgKDEgIT09IG5hbWVQcm9wRGVzY3JpcHRvciB8fCAxICE9PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpIHtcbiAgICAgICAgICAgICAgICBkb1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAobmFtZVByb3BEZXNjcmlwdG9yLS0sXG4gICAgICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tLFxuICAgICAgICAgICAgICAgICAgICAwID4gX1J1bkluUm9vdEZyYW1lJERldGVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdKVxuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPVxuICAgICAgICAgICAgICAgICAgICAgIFwiXFxuXCIgK1xuICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZUxpbmVzW25hbWVQcm9wRGVzY3JpcHRvcl0ucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IG5ldyBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiIGF0IFwiXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZm4uZGlzcGxheU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICBfZnJhbWUuaW5jbHVkZXMoXCI8YW5vbnltb3VzPlwiKSAmJlxuICAgICAgICAgICAgICAgICAgICAgIChfZnJhbWUgPSBfZnJhbWUucmVwbGFjZShcIjxhbm9ueW1vdXM+XCIsIGZuLmRpc3BsYXlOYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGZuICYmXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKDEgPD0gbmFtZVByb3BEZXNjcmlwdG9yICYmIDAgPD0gX1J1bkluUm9vdEZyYW1lJERldGVyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgKHJlZW50cnkgPSAhMSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLkggPSBwcmV2aW91c0Rpc3BhdGNoZXIpLFxuICAgICAgICAgIHJlZW5hYmxlTG9ncygpLFxuICAgICAgICAgIChFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZyYW1lKTtcbiAgICAgIH1cbiAgICAgIHNhbXBsZUxpbmVzID0gKHNhbXBsZUxpbmVzID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogXCJcIilcbiAgICAgICAgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShzYW1wbGVMaW5lcylcbiAgICAgICAgOiBcIlwiO1xuICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiYgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHNhbXBsZUxpbmVzKTtcbiAgICAgIHJldHVybiBzYW1wbGVMaW5lcztcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUpIHtcbiAgICAgIGlmIChudWxsID09IHR5cGUpIHJldHVybiBcIlwiO1xuICAgICAgaWYgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGUpIHtcbiAgICAgICAgdmFyIHByb3RvdHlwZSA9IHR5cGUucHJvdG90eXBlO1xuICAgICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgICEoIXByb3RvdHlwZSB8fCAhcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUpIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VcIik7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShcIlN1c3BlbnNlTGlzdFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuICh0eXBlID0gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLnJlbmRlciwgITEpKSwgdHlwZTtcbiAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlKTtcbiAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgIHByb3RvdHlwZSA9IHR5cGUuX3BheWxvYWQ7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5faW5pdDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZShwcm90b3R5cGUpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHt9XG4gICAgICAgIH1cbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRPd25lcigpIHtcbiAgICAgIHZhciBkaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuQTtcbiAgICAgIHJldHVybiBudWxsID09PSBkaXNwYXRjaGVyID8gbnVsbCA6IGRpc3BhdGNoZXIuZ2V0T3duZXIoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwia2V5XCIpKSB7XG4gICAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgXCJrZXlcIikuZ2V0O1xuICAgICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29uZmlnLmtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gICAgICBmdW5jdGlvbiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkoKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duIHx8XG4gICAgICAgICAgKChzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9ICEwKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgcHJvcC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvc3BlY2lhbC1wcm9wcylcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSAhMDtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgXCJrZXlcIiwge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nKCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodGhpcy50eXBlKTtcbiAgICAgIGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgKChkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQWNjZXNzaW5nIGVsZW1lbnQucmVmIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiByZWYgaXMgbm93IGEgcmVndWxhciBwcm9wLiBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgSlNYIEVsZW1lbnQgdHlwZSBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiXG4gICAgICAgICkpO1xuICAgICAgY29tcG9uZW50TmFtZSA9IHRoaXMucHJvcHMucmVmO1xuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29tcG9uZW50TmFtZSA/IGNvbXBvbmVudE5hbWUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCBzZWxmLCBzb3VyY2UsIG93bmVyLCBwcm9wcykge1xuICAgICAgc2VsZiA9IHByb3BzLnJlZjtcbiAgICAgIHR5cGUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGtleToga2V5LFxuICAgICAgICBwcm9wczogcHJvcHMsXG4gICAgICAgIF9vd25lcjogb3duZXJcbiAgICAgIH07XG4gICAgICBudWxsICE9PSAodm9pZCAwICE9PSBzZWxmID8gc2VsZiA6IG51bGwpXG4gICAgICAgID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICAgICAgZ2V0OiBlbGVtZW50UmVmR2V0dGVyV2l0aERlcHJlY2F0aW9uV2FybmluZ1xuICAgICAgICAgIH0pXG4gICAgICAgIDogT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwicmVmXCIsIHsgZW51bWVyYWJsZTogITEsIHZhbHVlOiBudWxsIH0pO1xuICAgICAgdHlwZS5fc3RvcmUgPSB7fTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLl9zdG9yZSwgXCJ2YWxpZGF0ZWRcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogMFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJfZGVidWdJbmZvXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmZyZWV6ZSAmJiAoT2JqZWN0LmZyZWV6ZSh0eXBlLnByb3BzKSwgT2JqZWN0LmZyZWV6ZSh0eXBlKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICAgICAgbmV3S2V5ID0gUmVhY3RFbGVtZW50KFxuICAgICAgICBvbGRFbGVtZW50LnR5cGUsXG4gICAgICAgIG5ld0tleSxcbiAgICAgICAgdm9pZCAwLFxuICAgICAgICB2b2lkIDAsXG4gICAgICAgIG9sZEVsZW1lbnQuX293bmVyLFxuICAgICAgICBvbGRFbGVtZW50LnByb3BzXG4gICAgICApO1xuICAgICAgbmV3S2V5Ll9zdG9yZS52YWxpZGF0ZWQgPSBvbGRFbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQ7XG4gICAgICByZXR1cm4gbmV3S2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBub2RlICYmXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS4kJHR5cGVvZiAhPT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgKVxuICAgICAgICBpZiAoaXNBcnJheUltcGwobm9kZSkpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuICAgICAgICAgICAgaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpXG4gICAgICAgICAgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAoKGkgPSBnZXRJdGVyYXRvckZuKG5vZGUpKSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBpICYmXG4gICAgICAgICAgICBpICE9PSBub2RlLmVudHJpZXMgJiZcbiAgICAgICAgICAgICgoaSA9IGkuY2FsbChub2RlKSksIGkgIT09IG5vZGUpKVxuICAgICAgICApXG4gICAgICAgICAgZm9yICg7ICEobm9kZSA9IGkubmV4dCgpKS5kb25lOyApXG4gICAgICAgICAgICBpc1ZhbGlkRWxlbWVudChub2RlLnZhbHVlKSAmJlxuICAgICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KG5vZGUudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBvYmplY3QgJiZcbiAgICAgICAgbnVsbCAhPT0gb2JqZWN0ICYmXG4gICAgICAgIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgICAgIGlmIChcbiAgICAgICAgZWxlbWVudC5fc3RvcmUgJiZcbiAgICAgICAgIWVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCAmJlxuICAgICAgICBudWxsID09IGVsZW1lbnQua2V5ICYmXG4gICAgICAgICgoZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gMSksXG4gICAgICAgIChwYXJlbnRUeXBlID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSksXG4gICAgICAgICFvd25lckhhc0tleVVzZVdhcm5pbmdbcGFyZW50VHlwZV0pXG4gICAgICApIHtcbiAgICAgICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW3BhcmVudFR5cGVdID0gITA7XG4gICAgICAgIHZhciBjaGlsZE93bmVyID0gXCJcIjtcbiAgICAgICAgZWxlbWVudCAmJlxuICAgICAgICAgIG51bGwgIT0gZWxlbWVudC5fb3duZXIgJiZcbiAgICAgICAgICBlbGVtZW50Ll9vd25lciAhPT0gZ2V0T3duZXIoKSAmJlxuICAgICAgICAgICgoY2hpbGRPd25lciA9IG51bGwpLFxuICAgICAgICAgIFwibnVtYmVyXCIgPT09IHR5cGVvZiBlbGVtZW50Ll9vd25lci50YWdcbiAgICAgICAgICAgID8gKGNoaWxkT3duZXIgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkpXG4gICAgICAgICAgICA6IFwic3RyaW5nXCIgPT09IHR5cGVvZiBlbGVtZW50Ll9vd25lci5uYW1lICYmXG4gICAgICAgICAgICAgIChjaGlsZE93bmVyID0gZWxlbWVudC5fb3duZXIubmFtZSksXG4gICAgICAgICAgKGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGNoaWxkT3duZXIgKyBcIi5cIikpO1xuICAgICAgICB2YXIgcHJldkdldEN1cnJlbnRTdGFjayA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjaztcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUpO1xuICAgICAgICAgIHByZXZHZXRDdXJyZW50U3RhY2sgJiYgKHN0YWNrICs9IHByZXZHZXRDdXJyZW50U3RhY2soKSB8fCBcIlwiKTtcbiAgICAgICAgICByZXR1cm4gc3RhY2s7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4lcyVzIFNlZSBodHRwczovL3JlYWN0LmRldi9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLFxuICAgICAgICAgIHBhcmVudFR5cGUsXG4gICAgICAgICAgY2hpbGRPd25lclxuICAgICAgICApO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBwcmV2R2V0Q3VycmVudFN0YWNrO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpIHtcbiAgICAgIHZhciBpbmZvID0gXCJcIixcbiAgICAgICAgb3duZXIgPSBnZXRPd25lcigpO1xuICAgICAgb3duZXIgJiZcbiAgICAgICAgKG93bmVyID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKG93bmVyLnR5cGUpKSAmJlxuICAgICAgICAoaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYFwiICsgb3duZXIgKyBcImAuXCIpO1xuICAgICAgaW5mbyB8fFxuICAgICAgICAoKHBhcmVudFR5cGUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUocGFyZW50VHlwZSkpICYmXG4gICAgICAgICAgKGluZm8gPVxuICAgICAgICAgICAgXCJcXG5cXG5DaGVjayB0aGUgdG9wLWxldmVsIHJlbmRlciBjYWxsIHVzaW5nIDxcIiArIHBhcmVudFR5cGUgKyBcIj4uXCIpKTtcbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlc2NhcGUoa2V5KSB7XG4gICAgICB2YXIgZXNjYXBlckxvb2t1cCA9IHsgXCI9XCI6IFwiPTBcIiwgXCI6XCI6IFwiPTJcIiB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCIkXCIgK1xuICAgICAgICBrZXkucmVwbGFjZSgvWz06XS9nLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRFbGVtZW50S2V5KGVsZW1lbnQsIGluZGV4KSB7XG4gICAgICByZXR1cm4gXCJvYmplY3RcIiA9PT0gdHlwZW9mIGVsZW1lbnQgJiZcbiAgICAgICAgbnVsbCAhPT0gZWxlbWVudCAmJlxuICAgICAgICBudWxsICE9IGVsZW1lbnQua2V5XG4gICAgICAgID8gKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oZWxlbWVudC5rZXkpLCBlc2NhcGUoXCJcIiArIGVsZW1lbnQua2V5KSlcbiAgICAgICAgOiBpbmRleC50b1N0cmluZygzNik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vb3AkMSgpIHt9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZVRoZW5hYmxlKHRoZW5hYmxlKSB7XG4gICAgICBzd2l0Y2ggKHRoZW5hYmxlLnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgcmV0dXJuIHRoZW5hYmxlLnZhbHVlO1xuICAgICAgICBjYXNlIFwicmVqZWN0ZWRcIjpcbiAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAgIChcInN0cmluZ1wiID09PSB0eXBlb2YgdGhlbmFibGUuc3RhdHVzXG4gICAgICAgICAgICAgID8gdGhlbmFibGUudGhlbihub29wJDEsIG5vb3AkMSlcbiAgICAgICAgICAgICAgOiAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicGVuZGluZ1wiKSxcbiAgICAgICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZ1bGZpbGxlZFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwiZnVsZmlsbGVkXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICh0aGVuYWJsZS52YWx1ZSA9IGZ1bGZpbGxlZFZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIFwicGVuZGluZ1wiID09PSB0aGVuYWJsZS5zdGF0dXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAoKHRoZW5hYmxlLnN0YXR1cyA9IFwicmVqZWN0ZWRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgKHRoZW5hYmxlLnJlYXNvbiA9IGVycm9yKSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKSksXG4gICAgICAgICAgICB0aGVuYWJsZS5zdGF0dXMpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjYXNlIFwiZnVsZmlsbGVkXCI6XG4gICAgICAgICAgICAgIHJldHVybiB0aGVuYWJsZS52YWx1ZTtcbiAgICAgICAgICAgIGNhc2UgXCJyZWplY3RlZFwiOlxuICAgICAgICAgICAgICB0aHJvdyB0aGVuYWJsZS5yZWFzb247XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgdGhlbmFibGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcEludG9BcnJheShjaGlsZHJlbiwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5hbWVTb0ZhciwgY2FsbGJhY2spIHtcbiAgICAgIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuICAgICAgaWYgKFwidW5kZWZpbmVkXCIgPT09IHR5cGUgfHwgXCJib29sZWFuXCIgPT09IHR5cGUpIGNoaWxkcmVuID0gbnVsbDtcbiAgICAgIHZhciBpbnZva2VDYWxsYmFjayA9ICExO1xuICAgICAgaWYgKG51bGwgPT09IGNoaWxkcmVuKSBpbnZva2VDYWxsYmFjayA9ICEwO1xuICAgICAgZWxzZVxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBzd2l0Y2ggKGNoaWxkcmVuLiQkdHlwZW9mKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrID0gITA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbi5faW5pdCksXG4gICAgICAgICAgICAgICAgICBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgICAgICAgIGludm9rZUNhbGxiYWNrKGNoaWxkcmVuLl9wYXlsb2FkKSxcbiAgICAgICAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSBjaGlsZHJlbjtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhpbnZva2VDYWxsYmFjayk7XG4gICAgICAgIHZhciBjaGlsZEtleSA9XG4gICAgICAgICAgXCJcIiA9PT0gbmFtZVNvRmFyID8gXCIuXCIgKyBnZXRFbGVtZW50S2V5KGludm9rZUNhbGxiYWNrLCAwKSA6IG5hbWVTb0ZhcjtcbiAgICAgICAgaXNBcnJheUltcGwoY2FsbGJhY2spXG4gICAgICAgICAgPyAoKGVzY2FwZWRQcmVmaXggPSBcIlwiKSxcbiAgICAgICAgICAgIG51bGwgIT0gY2hpbGRLZXkgJiZcbiAgICAgICAgICAgICAgKGVzY2FwZWRQcmVmaXggPVxuICAgICAgICAgICAgICAgIGNoaWxkS2V5LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsIFwiJCYvXCIpICsgXCIvXCIpLFxuICAgICAgICAgICAgbWFwSW50b0FycmF5KGNhbGxiYWNrLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgXCJcIiwgZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICA6IG51bGwgIT0gY2FsbGJhY2sgJiZcbiAgICAgICAgICAgIChpc1ZhbGlkRWxlbWVudChjYWxsYmFjaykgJiZcbiAgICAgICAgICAgICAgKG51bGwgIT0gY2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgKChpbnZva2VDYWxsYmFjayAmJiBpbnZva2VDYWxsYmFjay5rZXkgPT09IGNhbGxiYWNrLmtleSkgfHxcbiAgICAgICAgICAgICAgICAgIGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY2FsbGJhY2sua2V5KSksXG4gICAgICAgICAgICAgIChlc2NhcGVkUHJlZml4ID0gY2xvbmVBbmRSZXBsYWNlS2V5KFxuICAgICAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXggK1xuICAgICAgICAgICAgICAgICAgKG51bGwgPT0gY2FsbGJhY2sua2V5IHx8XG4gICAgICAgICAgICAgICAgICAoaW52b2tlQ2FsbGJhY2sgJiYgaW52b2tlQ2FsbGJhY2sua2V5ID09PSBjYWxsYmFjay5rZXkpXG4gICAgICAgICAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgICAgICAgICA6IChcIlwiICsgY2FsbGJhY2sua2V5KS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiQmL1wiXG4gICAgICAgICAgICAgICAgICAgICAgKSArIFwiL1wiKSArXG4gICAgICAgICAgICAgICAgICBjaGlsZEtleVxuICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgXCJcIiAhPT0gbmFtZVNvRmFyICYmXG4gICAgICAgICAgICAgICAgbnVsbCAhPSBpbnZva2VDYWxsYmFjayAmJlxuICAgICAgICAgICAgICAgIGlzVmFsaWRFbGVtZW50KGludm9rZUNhbGxiYWNrKSAmJlxuICAgICAgICAgICAgICAgIG51bGwgPT0gaW52b2tlQ2FsbGJhY2sua2V5ICYmXG4gICAgICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2suX3N0b3JlICYmXG4gICAgICAgICAgICAgICAgIWludm9rZUNhbGxiYWNrLl9zdG9yZS52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAoZXNjYXBlZFByZWZpeC5fc3RvcmUudmFsaWRhdGVkID0gMiksXG4gICAgICAgICAgICAgIChjYWxsYmFjayA9IGVzY2FwZWRQcmVmaXgpKSxcbiAgICAgICAgICAgIGFycmF5LnB1c2goY2FsbGJhY2spKTtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9XG4gICAgICBpbnZva2VDYWxsYmFjayA9IDA7XG4gICAgICBjaGlsZEtleSA9IFwiXCIgPT09IG5hbWVTb0ZhciA/IFwiLlwiIDogbmFtZVNvRmFyICsgXCI6XCI7XG4gICAgICBpZiAoaXNBcnJheUltcGwoY2hpbGRyZW4pKVxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIChuYW1lU29GYXIgPSBjaGlsZHJlbltpXSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkpKSxcbiAgICAgICAgICAgIChpbnZva2VDYWxsYmFjayArPSBtYXBJbnRvQXJyYXkoXG4gICAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgICAgYXJyYXksXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgICApKTtcbiAgICAgIGVsc2UgaWYgKCgoaSA9IGdldEl0ZXJhdG9yRm4oY2hpbGRyZW4pKSwgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgaSkpXG4gICAgICAgIGZvciAoXG4gICAgICAgICAgaSA9PT0gY2hpbGRyZW4uZW50cmllcyAmJlxuICAgICAgICAgICAgKGRpZFdhcm5BYm91dE1hcHMgfHxcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgIFwiVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLlwiXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAoZGlkV2FybkFib3V0TWFwcyA9ICEwKSksXG4gICAgICAgICAgICBjaGlsZHJlbiA9IGkuY2FsbChjaGlsZHJlbiksXG4gICAgICAgICAgICBpID0gMDtcbiAgICAgICAgICAhKG5hbWVTb0ZhciA9IGNoaWxkcmVuLm5leHQoKSkuZG9uZTtcblxuICAgICAgICApXG4gICAgICAgICAgKG5hbWVTb0ZhciA9IG5hbWVTb0Zhci52YWx1ZSksXG4gICAgICAgICAgICAodHlwZSA9IGNoaWxkS2V5ICsgZ2V0RWxlbWVudEtleShuYW1lU29GYXIsIGkrKykpLFxuICAgICAgICAgICAgKGludm9rZUNhbGxiYWNrICs9IG1hcEludG9BcnJheShcbiAgICAgICAgICAgICAgbmFtZVNvRmFyLFxuICAgICAgICAgICAgICBhcnJheSxcbiAgICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgY2FsbGJhY2tcbiAgICAgICAgICAgICkpO1xuICAgICAgZWxzZSBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZSkge1xuICAgICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgY2hpbGRyZW4udGhlbilcbiAgICAgICAgICByZXR1cm4gbWFwSW50b0FycmF5KFxuICAgICAgICAgICAgcmVzb2x2ZVRoZW5hYmxlKGNoaWxkcmVuKSxcbiAgICAgICAgICAgIGFycmF5LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIG5hbWVTb0ZhcixcbiAgICAgICAgICAgIGNhbGxiYWNrXG4gICAgICAgICAgKTtcbiAgICAgICAgYXJyYXkgPSBTdHJpbmcoY2hpbGRyZW4pO1xuICAgICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgICBcIk9iamVjdHMgYXJlIG5vdCB2YWxpZCBhcyBhIFJlYWN0IGNoaWxkIChmb3VuZDogXCIgK1xuICAgICAgICAgICAgKFwiW29iamVjdCBPYmplY3RdXCIgPT09IGFycmF5XG4gICAgICAgICAgICAgID8gXCJvYmplY3Qgd2l0aCBrZXlzIHtcIiArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKFwiLCBcIikgKyBcIn1cIlxuICAgICAgICAgICAgICA6IGFycmF5KSArXG4gICAgICAgICAgICBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGludm9rZUNhbGxiYWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuYywgY29udGV4dCkge1xuICAgICAgaWYgKG51bGwgPT0gY2hpbGRyZW4pIHJldHVybiBjaGlsZHJlbjtcbiAgICAgIHZhciByZXN1bHQgPSBbXSxcbiAgICAgICAgY291bnQgPSAwO1xuICAgICAgbWFwSW50b0FycmF5KGNoaWxkcmVuLCByZXN1bHQsIFwiXCIsIFwiXCIsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGF6eUluaXRpYWxpemVyKHBheWxvYWQpIHtcbiAgICAgIGlmICgtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKSB7XG4gICAgICAgIHZhciBjdG9yID0gcGF5bG9hZC5fcmVzdWx0O1xuICAgICAgICBjdG9yID0gY3RvcigpO1xuICAgICAgICBjdG9yLnRoZW4oXG4gICAgICAgICAgZnVuY3Rpb24gKG1vZHVsZU9iamVjdCkge1xuICAgICAgICAgICAgaWYgKDAgPT09IHBheWxvYWQuX3N0YXR1cyB8fCAtMSA9PT0gcGF5bG9hZC5fc3RhdHVzKVxuICAgICAgICAgICAgICAocGF5bG9hZC5fc3RhdHVzID0gMSksIChwYXlsb2FkLl9yZXN1bHQgPSBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoMCA9PT0gcGF5bG9hZC5fc3RhdHVzIHx8IC0xID09PSBwYXlsb2FkLl9zdGF0dXMpXG4gICAgICAgICAgICAgIChwYXlsb2FkLl9zdGF0dXMgPSAyKSwgKHBheWxvYWQuX3Jlc3VsdCA9IGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIC0xID09PSBwYXlsb2FkLl9zdGF0dXMgJiZcbiAgICAgICAgICAoKHBheWxvYWQuX3N0YXR1cyA9IDApLCAocGF5bG9hZC5fcmVzdWx0ID0gY3RvcikpO1xuICAgICAgfVxuICAgICAgaWYgKDEgPT09IHBheWxvYWQuX3N0YXR1cylcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAoY3RvciA9IHBheWxvYWQuX3Jlc3VsdCksXG4gICAgICAgICAgdm9pZCAwID09PSBjdG9yICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcImxhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcG9ydCgnLi9NeUNvbXBvbmVudCcpKVxcblxcbkRpZCB5b3UgYWNjaWRlbnRhbGx5IHB1dCBjdXJseSBicmFjZXMgYXJvdW5kIHRoZSBpbXBvcnQ/XCIsXG4gICAgICAgICAgICAgIGN0b3JcbiAgICAgICAgICAgICksXG4gICAgICAgICAgXCJkZWZhdWx0XCIgaW4gY3RvciB8fFxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiBJbnN0ZWFkIHJlY2VpdmVkOiAlc1xcblxcbllvdXIgY29kZSBzaG91bGQgbG9vayBsaWtlOiBcXG4gIGNvbnN0IE15Q29tcG9uZW50ID0gbGF6eSgoKSA9PiBpbXBvcnQoJy4vTXlDb21wb25lbnQnKSlcIixcbiAgICAgICAgICAgICAgY3RvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBjdG9yLmRlZmF1bHRcbiAgICAgICAgKTtcbiAgICAgIHRocm93IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkg7XG4gICAgICBudWxsID09PSBkaXNwYXRjaGVyICYmXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCJcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBub29wKCkge31cbiAgICBmdW5jdGlvbiBlbnF1ZXVlVGFzayh0YXNrKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZW5xdWV1ZVRhc2tJbXBsKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciByZXF1aXJlU3RyaW5nID0gKFwicmVxdWlyZVwiICsgTWF0aC5yYW5kb20oKSkuc2xpY2UoMCwgNyk7XG4gICAgICAgICAgZW5xdWV1ZVRhc2tJbXBsID0gKG1vZHVsZSAmJiBtb2R1bGVbcmVxdWlyZVN0cmluZ10pLmNhbGwoXG4gICAgICAgICAgICBtb2R1bGUsXG4gICAgICAgICAgICBcInRpbWVyc1wiXG4gICAgICAgICAgKS5zZXRJbW1lZGlhdGU7XG4gICAgICAgIH0gY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICBlbnF1ZXVlVGFza0ltcGwgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICExID09PSBkaWRXYXJuQWJvdXRNZXNzYWdlQ2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITApLFxuICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2YgTWVzc2FnZUNoYW5uZWwgJiZcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgXCJUaGlzIGJyb3dzZXIgZG9lcyBub3QgaGF2ZSBhIE1lc3NhZ2VDaGFubmVsIGltcGxlbWVudGF0aW9uLCBzbyBlbnF1ZXVpbmcgdGFza3MgdmlhIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pIHdpbGwgZmFpbC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUgYXQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3VlcyBpZiB5b3UgZW5jb3VudGVyIHRoaXMgd2FybmluZy5cIlxuICAgICAgICAgICAgICAgICkpO1xuICAgICAgICAgICAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICAgICAgICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBjaGFubmVsLnBvcnQyLnBvc3RNZXNzYWdlKHZvaWQgMCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIGVucXVldWVUYXNrSW1wbCh0YXNrKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWdncmVnYXRlRXJyb3JzKGVycm9ycykge1xuICAgICAgcmV0dXJuIDEgPCBlcnJvcnMubGVuZ3RoICYmIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yXG4gICAgICAgID8gbmV3IEFnZ3JlZ2F0ZUVycm9yKGVycm9ycylcbiAgICAgICAgOiBlcnJvcnNbMF07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgIHByZXZBY3RTY29wZURlcHRoICE9PSBhY3RTY29wZURlcHRoIC0gMSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IHNlZW0gdG8gaGF2ZSBvdmVybGFwcGluZyBhY3QoKSBjYWxscywgdGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBCZSBzdXJlIHRvIGF3YWl0IHByZXZpb3VzIGFjdCgpIGNhbGxzIGJlZm9yZSBtYWtpbmcgYSBuZXcgb25lLiBcIlxuICAgICAgICApO1xuICAgICAgYWN0U2NvcGVEZXB0aCA9IHByZXZBY3RTY29wZURlcHRoO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKHJldHVyblZhbHVlLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBxdWV1ZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlO1xuICAgICAgaWYgKG51bGwgIT09IHF1ZXVlKVxuICAgICAgICBpZiAoMCAhPT0gcXVldWUubGVuZ3RoKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmbHVzaEFjdFF1ZXVlKHF1ZXVlKTtcbiAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsocmV0dXJuVmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGw7XG4gICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICA/ICgocXVldWUgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICByZWplY3QocXVldWUpKVxuICAgICAgICA6IHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmbHVzaEFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgICBpZiAoIWlzRmx1c2hpbmcpIHtcbiAgICAgICAgaXNGbHVzaGluZyA9ICEwO1xuICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBxdWV1ZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gcXVldWVbaV07XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmRpZFVzZVByb21pc2UgPSAhMTtcbiAgICAgICAgICAgICAgdmFyIGNvbnRpbnVhdGlvbiA9IGNhbGxiYWNrKCExKTtcbiAgICAgICAgICAgICAgaWYgKG51bGwgIT09IGNvbnRpbnVhdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdFNoYXJlZEludGVybmFscy5kaWRVc2VQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICBxdWV1ZVtpXSA9IGNhbGxiYWNrO1xuICAgICAgICAgICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9IGNvbnRpbnVhdGlvbjtcbiAgICAgICAgICAgICAgfSBlbHNlIGJyZWFrO1xuICAgICAgICAgICAgfSB3aGlsZSAoMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHF1ZXVlLmxlbmd0aCA9IDA7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcXVldWUuc3BsaWNlKDAsIGkgKyAxKSwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlzRmx1c2hpbmcgPSAhMTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QudHJhbnNpdGlvbmFsLmVsZW1lbnRcIiksXG4gICAgICBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wb3J0YWxcIiksXG4gICAgICBSRUFDVF9GUkFHTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZyYWdtZW50XCIpLFxuICAgICAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdHJpY3RfbW9kZVwiKSxcbiAgICAgIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucHJvZmlsZXJcIik7XG4gICAgU3ltYm9sLmZvcihcInJlYWN0LnByb3ZpZGVyXCIpO1xuICAgIHZhciBSRUFDVF9DT05TVU1FUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnN1bWVyXCIpLFxuICAgICAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmNvbnRleHRcIiksXG4gICAgICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmZvcndhcmRfcmVmXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZVwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5zdXNwZW5zZV9saXN0XCIpLFxuICAgICAgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm1lbW9cIiksXG4gICAgICBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubGF6eVwiKSxcbiAgICAgIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0Lm9mZnNjcmVlblwiKSxcbiAgICAgIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IFN5bWJvbC5pdGVyYXRvcixcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9LFxuICAgICAgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gICAgICAgIGlzTW91bnRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiAhMTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICAgICAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgXCJmb3JjZVVwZGF0ZVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlKSB7XG4gICAgICAgICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIFwicmVwbGFjZVN0YXRlXCIpO1xuICAgICAgICB9LFxuICAgICAgICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgICAgICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCBcInNldFN0YXRlXCIpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgYXNzaWduID0gT2JqZWN0LmFzc2lnbixcbiAgICAgIGVtcHR5T2JqZWN0ID0ge307XG4gICAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50ID0ge307XG4gICAgQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgIT09IHR5cGVvZiBwYXJ0aWFsU3RhdGUgJiZcbiAgICAgICAgXCJmdW5jdGlvblwiICE9PSB0eXBlb2YgcGFydGlhbFN0YXRlICYmXG4gICAgICAgIG51bGwgIT0gcGFydGlhbFN0YXRlXG4gICAgICApXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwidGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCJcbiAgICAgICAgKTtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcywgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgXCJzZXRTdGF0ZVwiKTtcbiAgICB9O1xuICAgIENvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcywgY2FsbGJhY2ssIFwiZm9yY2VVcGRhdGVcIik7XG4gICAgfTtcbiAgICB2YXIgZGVwcmVjYXRlZEFQSXMgPSB7XG4gICAgICAgIGlzTW91bnRlZDogW1xuICAgICAgICAgIFwiaXNNb3VudGVkXCIsXG4gICAgICAgICAgXCJJbnN0ZWFkLCBtYWtlIHN1cmUgdG8gY2xlYW4gdXAgc3Vic2NyaXB0aW9ucyBhbmQgcGVuZGluZyByZXF1ZXN0cyBpbiBjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy5cIlxuICAgICAgICBdLFxuICAgICAgICByZXBsYWNlU3RhdGU6IFtcbiAgICAgICAgICBcInJlcGxhY2VTdGF0ZVwiLFxuICAgICAgICAgIFwiUmVmYWN0b3IgeW91ciBjb2RlIHRvIHVzZSBzZXRTdGF0ZSBpbnN0ZWFkIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS5cIlxuICAgICAgICBdXG4gICAgICB9LFxuICAgICAgZm5OYW1lO1xuICAgIGZvciAoZm5OYW1lIGluIGRlcHJlY2F0ZWRBUElzKVxuICAgICAgZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSAmJlxuICAgICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICBDb21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICAgIGRlcHJlY2F0ZWRBUElzID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbiAgICBkZXByZWNhdGVkQVBJcy5jb25zdHJ1Y3RvciA9IFB1cmVDb21wb25lbnQ7XG4gICAgYXNzaWduKGRlcHJlY2F0ZWRBUElzLCBDb21wb25lbnQucHJvdG90eXBlKTtcbiAgICBkZXByZWNhdGVkQVBJcy5pc1B1cmVSZWFjdENvbXBvbmVudCA9ICEwO1xuICAgIHZhciBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDIgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0ge1xuICAgICAgICBIOiBudWxsLFxuICAgICAgICBBOiBudWxsLFxuICAgICAgICBUOiBudWxsLFxuICAgICAgICBTOiBudWxsLFxuICAgICAgICBhY3RRdWV1ZTogbnVsbCxcbiAgICAgICAgaXNCYXRjaGluZ0xlZ2FjeTogITEsXG4gICAgICAgIGRpZFNjaGVkdWxlTGVnYWN5VXBkYXRlOiAhMSxcbiAgICAgICAgZGlkVXNlUHJvbWlzZTogITEsXG4gICAgICAgIHRocm93bkVycm9yczogW10sXG4gICAgICAgIGdldEN1cnJlbnRTdGFjazogbnVsbFxuICAgICAgfSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgZGlzYWJsZWREZXB0aCA9IDAsXG4gICAgICBwcmV2TG9nLFxuICAgICAgcHJldkluZm8sXG4gICAgICBwcmV2V2FybixcbiAgICAgIHByZXZFcnJvcixcbiAgICAgIHByZXZHcm91cCxcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCxcbiAgICAgIHByZXZHcm91cEVuZDtcbiAgICBkaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSAhMDtcbiAgICB2YXIgcHJlZml4LFxuICAgICAgc3VmZml4LFxuICAgICAgcmVlbnRyeSA9ICExO1xuICAgIHZhciBjb21wb25lbnRGcmFtZUNhY2hlID0gbmV3IChcbiAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFdlYWtNYXAgPyBXZWFrTWFwIDogTWFwXG4gICAgKSgpO1xuICAgIHZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bixcbiAgICAgIGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWU7XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge30sXG4gICAgICBkaWRXYXJuQWJvdXRNYXBzID0gITEsXG4gICAgICB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2csXG4gICAgICByZXBvcnRHbG9iYWxFcnJvciA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHJlcG9ydEVycm9yXG4gICAgICAgICAgPyByZXBvcnRFcnJvclxuICAgICAgICAgIDogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2Ygd2luZG93ICYmXG4gICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2Ygd2luZG93LkVycm9yRXZlbnRcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV2ZW50ID0gbmV3IHdpbmRvdy5FcnJvckV2ZW50KFwiZXJyb3JcIiwge1xuICAgICAgICAgICAgICAgICAgYnViYmxlczogITAsXG4gICAgICAgICAgICAgICAgICBjYW5jZWxhYmxlOiAhMCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgICAgICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBudWxsICE9PSBlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBcInN0cmluZ1wiID09PSB0eXBlb2YgZXJyb3IubWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgID8gU3RyaW5nKGVycm9yLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgOiBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCF3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCkpIHJldHVybjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBcIm9iamVjdFwiID09PSB0eXBlb2YgcHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHByb2Nlc3MuZW1pdFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVtaXQoXCJ1bmNhdWdodEV4Y2VwdGlvblwiLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfSxcbiAgICAgIGRpZFdhcm5BYm91dE1lc3NhZ2VDaGFubmVsID0gITEsXG4gICAgICBlbnF1ZXVlVGFza0ltcGwgPSBudWxsLFxuICAgICAgYWN0U2NvcGVEZXB0aCA9IDAsXG4gICAgICBkaWRXYXJuTm9Bd2FpdEFjdCA9ICExLFxuICAgICAgaXNGbHVzaGluZyA9ICExLFxuICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyA9XG4gICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHF1ZXVlTWljcm90YXNrXG4gICAgICAgICAgPyBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjayk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogZW5xdWV1ZVRhc2s7XG4gICAgZXhwb3J0cy5DaGlsZHJlbiA9IHtcbiAgICAgIG1hcDogbWFwQ2hpbGRyZW4sXG4gICAgICBmb3JFYWNoOiBmdW5jdGlvbiAoY2hpbGRyZW4sIGZvckVhY2hGdW5jLCBmb3JFYWNoQ29udGV4dCkge1xuICAgICAgICBtYXBDaGlsZHJlbihcbiAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZm9yRWFjaENvbnRleHRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBjb3VudDogZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gICAgICAgIHZhciBuID0gMDtcbiAgICAgICAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBuKys7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH0sXG4gICAgICB0b0FycmF5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBtYXBDaGlsZHJlbihjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgfSkgfHwgW11cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBvbmx5OiBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpXG4gICAgICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgICAgICBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH07XG4gICAgZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG4gICAgZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG4gICAgZXhwb3J0cy5Qcm9maWxlciA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gICAgZXhwb3J0cy5QdXJlQ29tcG9uZW50ID0gUHVyZUNvbXBvbmVudDtcbiAgICBleHBvcnRzLlN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xuICAgIGV4cG9ydHMuU3VzcGVuc2UgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICAgIGV4cG9ydHMuX19DTElFTlRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfV0FSTl9VU0VSU19USEVZX0NBTk5PVF9VUEdSQURFID1cbiAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuICAgIGV4cG9ydHMuYWN0ID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICB2YXIgcHJldkFjdFF1ZXVlID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuYWN0UXVldWUsXG4gICAgICAgIHByZXZBY3RTY29wZURlcHRoID0gYWN0U2NvcGVEZXB0aDtcbiAgICAgIGFjdFNjb3BlRGVwdGgrKztcbiAgICAgIHZhciBxdWV1ZSA9IChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9XG4gICAgICAgICAgbnVsbCAhPT0gcHJldkFjdFF1ZXVlID8gcHJldkFjdFF1ZXVlIDogW10pLFxuICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBjYWxsYmFjaygpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgfVxuICAgICAgaWYgKDAgPCBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoKVxuICAgICAgICB0aHJvdyAoXG4gICAgICAgICAgKHBvcEFjdFNjb3BlKHByZXZBY3RRdWV1ZSwgcHJldkFjdFNjb3BlRGVwdGgpLFxuICAgICAgICAgIChjYWxsYmFjayA9IGFnZ3JlZ2F0ZUVycm9ycyhSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMpKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCA9IDApLFxuICAgICAgICAgIGNhbGxiYWNrKVxuICAgICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBudWxsICE9PSByZXN1bHQgJiZcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIHJlc3VsdCAmJlxuICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiByZXN1bHQudGhlblxuICAgICAgKSB7XG4gICAgICAgIHZhciB0aGVuYWJsZSA9IHJlc3VsdDtcbiAgICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZGlkQXdhaXRBY3RDYWxsIHx8XG4gICAgICAgICAgICBkaWRXYXJuTm9Bd2FpdEFjdCB8fFxuICAgICAgICAgICAgKChkaWRXYXJuTm9Bd2FpdEFjdCA9ICEwKSxcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiWW91IGNhbGxlZCBhY3QoYXN5bmMgKCkgPT4gLi4uKSB3aXRob3V0IGF3YWl0LiBUaGlzIGNvdWxkIGxlYWQgdG8gdW5leHBlY3RlZCB0ZXN0aW5nIGJlaGF2aW91ciwgaW50ZXJsZWF2aW5nIG11bHRpcGxlIGFjdCBjYWxscyBhbmQgbWl4aW5nIHRoZWlyIHNjb3Blcy4gWW91IHNob3VsZCAtIGF3YWl0IGFjdChhc3luYyAoKSA9PiAuLi4pO1wiXG4gICAgICAgICAgICApKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdGhlbjogZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgZGlkQXdhaXRBY3RDYWxsID0gITA7XG4gICAgICAgICAgICB0aGVuYWJsZS50aGVuKFxuICAgICAgICAgICAgICBmdW5jdGlvbiAocmV0dXJuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gcHJldkFjdFNjb3BlRGVwdGgpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGZsdXNoQWN0UXVldWUocXVldWUpLFxuICAgICAgICAgICAgICAgICAgICAgIGVucXVldWVUYXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWN1cnNpdmVseUZsdXNoQXN5bmNBY3RXb3JrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IkMikge1xuICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMucHVzaChlcnJvciQyKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICgwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX3Rocm93bkVycm9yID0gYWdncmVnYXRlRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9yc1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy50aHJvd25FcnJvcnMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KF90aHJvd25FcnJvcik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHJlc29sdmUocmV0dXJuVmFsdWUpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgICAgICAgICAgICAwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgPyAoKGVycm9yID0gYWdncmVnYXRlRXJyb3JzKFxuICAgICAgICAgICAgICAgICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9yc1xuICAgICAgICAgICAgICAgICAgICApKSxcbiAgICAgICAgICAgICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKSlcbiAgICAgICAgICAgICAgICAgIDogcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB2YXIgcmV0dXJuVmFsdWUkanNjb21wJDAgPSByZXN1bHQ7XG4gICAgICBwb3BBY3RTY29wZShwcmV2QWN0UXVldWUsIHByZXZBY3RTY29wZURlcHRoKTtcbiAgICAgIDAgPT09IHByZXZBY3RTY29wZURlcHRoICYmXG4gICAgICAgIChmbHVzaEFjdFF1ZXVlKHF1ZXVlKSxcbiAgICAgICAgMCAhPT0gcXVldWUubGVuZ3RoICYmXG4gICAgICAgICAgcXVldWVTZXZlcmFsTWljcm90YXNrcyhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgfHxcbiAgICAgICAgICAgICAgZGlkV2Fybk5vQXdhaXRBY3QgfHxcbiAgICAgICAgICAgICAgKChkaWRXYXJuTm9Bd2FpdEFjdCA9ICEwKSxcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIkEgY29tcG9uZW50IHN1c3BlbmRlZCBpbnNpZGUgYW4gYGFjdGAgc2NvcGUsIGJ1dCB0aGUgYGFjdGAgY2FsbCB3YXMgbm90IGF3YWl0ZWQuIFdoZW4gdGVzdGluZyBSZWFjdCBjb21wb25lbnRzIHRoYXQgZGVwZW5kIG9uIGFzeW5jaHJvbm91cyBkYXRhLCB5b3UgbXVzdCBhd2FpdCB0aGUgcmVzdWx0OlxcblxcbmF3YWl0IGFjdCgoKSA9PiAuLi4pXCJcbiAgICAgICAgICAgICAgKSk7XG4gICAgICAgICAgfSksXG4gICAgICAgIChSZWFjdFNoYXJlZEludGVybmFscy5hY3RRdWV1ZSA9IG51bGwpKTtcbiAgICAgIGlmICgwIDwgUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzLmxlbmd0aClcbiAgICAgICAgdGhyb3cgKFxuICAgICAgICAgICgoY2FsbGJhY2sgPSBhZ2dyZWdhdGVFcnJvcnMoUmVhY3RTaGFyZWRJbnRlcm5hbHMudGhyb3duRXJyb3JzKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLnRocm93bkVycm9ycy5sZW5ndGggPSAwKSxcbiAgICAgICAgICBjYWxsYmFjaylcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRoZW46IGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBkaWRBd2FpdEFjdENhbGwgPSAhMDtcbiAgICAgICAgICAwID09PSBwcmV2QWN0U2NvcGVEZXB0aFxuICAgICAgICAgICAgPyAoKFJlYWN0U2hhcmVkSW50ZXJuYWxzLmFjdFF1ZXVlID0gcXVldWUpLFxuICAgICAgICAgICAgICBlbnF1ZXVlVGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2l2ZWx5Rmx1c2hBc3luY0FjdFdvcmsoXG4gICAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSRqc2NvbXAkMCxcbiAgICAgICAgICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgICAgICAgICByZWplY3RcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIDogcmVzb2x2ZShyZXR1cm5WYWx1ZSRqc2NvbXAkMCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleHBvcnRzLmNhY2hlID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIH07XG4gICAgfTtcbiAgICBleHBvcnRzLmNsb25lRWxlbWVudCA9IGZ1bmN0aW9uIChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gICAgICBpZiAobnVsbCA9PT0gZWxlbWVudCB8fCB2b2lkIDAgPT09IGVsZW1lbnQpXG4gICAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAgIFwiVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArXG4gICAgICAgICAgICBlbGVtZW50ICtcbiAgICAgICAgICAgIFwiLlwiXG4gICAgICAgICk7XG4gICAgICB2YXIgcHJvcHMgPSBhc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpLFxuICAgICAgICBrZXkgPSBlbGVtZW50LmtleSxcbiAgICAgICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIGlmIChudWxsICE9IGNvbmZpZykge1xuICAgICAgICB2YXIgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0O1xuICAgICAgICBhOiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwicmVmXCIpICYmXG4gICAgICAgICAgICAoSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICBcInJlZlwiXG4gICAgICAgICAgICApLmdldCkgJiZcbiAgICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5pc1JlYWN0V2FybmluZ1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gITE7XG4gICAgICAgICAgICBicmVhayBhO1xuICAgICAgICAgIH1cbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSB2b2lkIDAgIT09IGNvbmZpZy5yZWY7XG4gICAgICAgIH1cbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ICYmIChvd25lciA9IGdldE93bmVyKCkpO1xuICAgICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgICAgKGNoZWNrS2V5U3RyaW5nQ29lcmNpb24oY29uZmlnLmtleSksIChrZXkgPSBcIlwiICsgY29uZmlnLmtleSkpO1xuICAgICAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZylcbiAgICAgICAgICAhaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSB8fFxuICAgICAgICAgICAgXCJrZXlcIiA9PT0gcHJvcE5hbWUgfHxcbiAgICAgICAgICAgIFwiX19zZWxmXCIgPT09IHByb3BOYW1lIHx8XG4gICAgICAgICAgICBcIl9fc291cmNlXCIgPT09IHByb3BOYW1lIHx8XG4gICAgICAgICAgICAoXCJyZWZcIiA9PT0gcHJvcE5hbWUgJiYgdm9pZCAwID09PSBjb25maWcucmVmKSB8fFxuICAgICAgICAgICAgKHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BOYW1lID0gYXJndW1lbnRzLmxlbmd0aCAtIDI7XG4gICAgICBpZiAoMSA9PT0gcHJvcE5hbWUpIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgICBlbHNlIGlmICgxIDwgcHJvcE5hbWUpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gQXJyYXkocHJvcE5hbWUpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BOYW1lOyBpKyspXG4gICAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICAgICAgcHJvcHMuY2hpbGRyZW4gPSBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQ7XG4gICAgICB9XG4gICAgICBwcm9wcyA9IFJlYWN0RWxlbWVudChlbGVtZW50LnR5cGUsIGtleSwgdm9pZCAwLCB2b2lkIDAsIG93bmVyLCBwcm9wcyk7XG4gICAgICBmb3IgKGtleSA9IDI7IGtleSA8IGFyZ3VtZW50cy5sZW5ndGg7IGtleSsrKVxuICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNba2V5XSwgcHJvcHMudHlwZSk7XG4gICAgICByZXR1cm4gcHJvcHM7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUNvbnRleHQgPSBmdW5jdGlvbiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBkZWZhdWx0VmFsdWUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICAgIF9jdXJyZW50VmFsdWU6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAgICAgX3RocmVhZENvdW50OiAwLFxuICAgICAgICBQcm92aWRlcjogbnVsbCxcbiAgICAgICAgQ29uc3VtZXI6IG51bGxcbiAgICAgIH07XG4gICAgICBkZWZhdWx0VmFsdWUuUHJvdmlkZXIgPSBkZWZhdWx0VmFsdWU7XG4gICAgICBkZWZhdWx0VmFsdWUuQ29uc3VtZXIgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05TVU1FUl9UWVBFLFxuICAgICAgICBfY29udGV4dDogZGVmYXVsdFZhbHVlXG4gICAgICB9O1xuICAgICAgZGVmYXVsdFZhbHVlLl9jdXJyZW50UmVuZGVyZXIgPSBudWxsO1xuICAgICAgZGVmYXVsdFZhbHVlLl9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSlcbiAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpID0gXCJcIjtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHZvaWQgMCA9PT0gdHlwZSB8fFxuICAgICAgICAgIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSAmJlxuICAgICAgICAgICAgbnVsbCAhPT0gdHlwZSAmJlxuICAgICAgICAgICAgMCA9PT0gT2JqZWN0LmtleXModHlwZSkubGVuZ3RoKVxuICAgICAgICApXG4gICAgICAgICAgaSArPVxuICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgICBpZiAobnVsbCA9PT0gdHlwZSkgdmFyIHR5cGVTdHJpbmcgPSBcIm51bGxcIjtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIGlzQXJyYXlJbXBsKHR5cGUpXG4gICAgICAgICAgICA/ICh0eXBlU3RyaW5nID0gXCJhcnJheVwiKVxuICAgICAgICAgICAgOiB2b2lkIDAgIT09IHR5cGUgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFXG4gICAgICAgICAgICAgID8gKCh0eXBlU3RyaW5nID1cbiAgICAgICAgICAgICAgICAgIFwiPFwiICtcbiAgICAgICAgICAgICAgICAgIChnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZS50eXBlKSB8fCBcIlVua25vd25cIikgK1xuICAgICAgICAgICAgICAgICAgXCIgLz5cIiksXG4gICAgICAgICAgICAgICAgKGkgPVxuICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikpXG4gICAgICAgICAgICAgIDogKHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdC5jcmVhdGVFbGVtZW50OiB0eXBlIGlzIGludmFsaWQgLS0gZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzXCIsXG4gICAgICAgICAgdHlwZVN0cmluZyxcbiAgICAgICAgICBpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcE5hbWU7XG4gICAgICBpID0ge307XG4gICAgICB0eXBlU3RyaW5nID0gbnVsbDtcbiAgICAgIGlmIChudWxsICE9IGNvbmZpZylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoZGlkV2FybkFib3V0T2xkSlNYUnVudGltZSB8fFxuICAgICAgICAgICEoXCJfX3NlbGZcIiBpbiBjb25maWcpIHx8XG4gICAgICAgICAgXCJrZXlcIiBpbiBjb25maWcgfHxcbiAgICAgICAgICAoKGRpZFdhcm5BYm91dE9sZEpTWFJ1bnRpbWUgPSAhMCksXG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgXCJZb3VyIGFwcCAob3Igb25lIG9mIGl0cyBkZXBlbmRlbmNpZXMpIGlzIHVzaW5nIGFuIG91dGRhdGVkIEpTWCB0cmFuc2Zvcm0uIFVwZGF0ZSB0byB0aGUgbW9kZXJuIEpTWCB0cmFuc2Zvcm0gZm9yIGZhc3RlciBwZXJmb3JtYW5jZTogaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9uZXctanN4LXRyYW5zZm9ybVwiXG4gICAgICAgICAgKSksXG4gICAgICAgIGhhc1ZhbGlkS2V5KGNvbmZpZykgJiZcbiAgICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKHR5cGVTdHJpbmcgPSBcIlwiICsgY29uZmlnLmtleSkpLFxuICAgICAgICBjb25maWcpKVxuICAgICAgICAgIGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiZcbiAgICAgICAgICAgIFwia2V5XCIgIT09IHByb3BOYW1lICYmXG4gICAgICAgICAgICBcIl9fc2VsZlwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgXCJfX3NvdXJjZVwiICE9PSBwcm9wTmFtZSAmJlxuICAgICAgICAgICAgKGlbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICAgIGlmICgxID09PSBjaGlsZHJlbkxlbmd0aCkgaS5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgICAgZWxzZSBpZiAoMSA8IGNoaWxkcmVuTGVuZ3RoKSB7XG4gICAgICAgIGZvciAoXG4gICAgICAgICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCksIF9pID0gMDtcbiAgICAgICAgICBfaSA8IGNoaWxkcmVuTGVuZ3RoO1xuICAgICAgICAgIF9pKytcbiAgICAgICAgKVxuICAgICAgICAgIGNoaWxkQXJyYXlbX2ldID0gYXJndW1lbnRzW19pICsgMl07XG4gICAgICAgIE9iamVjdC5mcmVlemUgJiYgT2JqZWN0LmZyZWV6ZShjaGlsZEFycmF5KTtcbiAgICAgICAgaS5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcylcbiAgICAgICAgZm9yIChwcm9wTmFtZSBpbiAoKGNoaWxkcmVuTGVuZ3RoID0gdHlwZS5kZWZhdWx0UHJvcHMpLCBjaGlsZHJlbkxlbmd0aCkpXG4gICAgICAgICAgdm9pZCAwID09PSBpW3Byb3BOYW1lXSAmJiAoaVtwcm9wTmFtZV0gPSBjaGlsZHJlbkxlbmd0aFtwcm9wTmFtZV0pO1xuICAgICAgdHlwZVN0cmluZyAmJlxuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihcbiAgICAgICAgICBpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIHR5cGVcbiAgICAgICAgICAgID8gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgXCJVbmtub3duXCJcbiAgICAgICAgICAgIDogdHlwZVxuICAgICAgICApO1xuICAgICAgcmV0dXJuIFJlYWN0RWxlbWVudCh0eXBlLCB0eXBlU3RyaW5nLCB2b2lkIDAsIHZvaWQgMCwgZ2V0T3duZXIoKSwgaSk7XG4gICAgfTtcbiAgICBleHBvcnRzLmNyZWF0ZVJlZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciByZWZPYmplY3QgPSB7IGN1cnJlbnQ6IG51bGwgfTtcbiAgICAgIE9iamVjdC5zZWFsKHJlZk9iamVjdCk7XG4gICAgICByZXR1cm4gcmVmT2JqZWN0O1xuICAgIH07XG4gICAgZXhwb3J0cy5mb3J3YXJkUmVmID0gZnVuY3Rpb24gKHJlbmRlcikge1xuICAgICAgbnVsbCAhPSByZW5kZXIgJiYgcmVuZGVyLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEVcbiAgICAgICAgPyBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCByZWNlaXZlZCBhIGBtZW1vYCBjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgbWVtbyhmb3J3YXJkUmVmKC4uLikpLlwiXG4gICAgICAgICAgKVxuICAgICAgICA6IFwiZnVuY3Rpb25cIiAhPT0gdHlwZW9mIHJlbmRlclxuICAgICAgICAgID8gY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlcXVpcmVzIGEgcmVuZGVyIGZ1bmN0aW9uIGJ1dCB3YXMgZ2l2ZW4gJXMuXCIsXG4gICAgICAgICAgICAgIG51bGwgPT09IHJlbmRlciA/IFwibnVsbFwiIDogdHlwZW9mIHJlbmRlclxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogMCAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgMiAhPT0gcmVuZGVyLmxlbmd0aCAmJlxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzXCIsXG4gICAgICAgICAgICAgIDEgPT09IHJlbmRlci5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFwiRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyP1wiXG4gICAgICAgICAgICAgICAgOiBcIkFueSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHVuZGVmaW5lZC5cIlxuICAgICAgICAgICAgKTtcbiAgICAgIG51bGwgIT0gcmVuZGVyICYmXG4gICAgICAgIG51bGwgIT0gcmVuZGVyLmRlZmF1bHRQcm9wcyAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IGRlZmF1bHRQcm9wcy4gRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD9cIlxuICAgICAgICApO1xuICAgICAgdmFyIGVsZW1lbnRUeXBlID0geyAkJHR5cGVvZjogUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSwgcmVuZGVyOiByZW5kZXIgfSxcbiAgICAgICAgb3duTmFtZTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHJlbmRlci5uYW1lIHx8XG4gICAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgfHxcbiAgICAgICAgICAgIChPYmplY3QuZGVmaW5lUHJvcGVydHkocmVuZGVyLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgIChyZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICAgIH07XG4gICAgZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuICAgIGV4cG9ydHMubGF6eSA9IGZ1bmN0aW9uIChjdG9yKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgICAgICBfcGF5bG9hZDogeyBfc3RhdHVzOiAtMSwgX3Jlc3VsdDogY3RvciB9LFxuICAgICAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gICAgICB9O1xuICAgIH07XG4gICAgZXhwb3J0cy5tZW1vID0gZnVuY3Rpb24gKHR5cGUsIGNvbXBhcmUpIHtcbiAgICAgIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB8fFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwibWVtbzogVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBjb21wb25lbnQuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzXCIsXG4gICAgICAgICAgbnVsbCA9PT0gdHlwZSA/IFwibnVsbFwiIDogdHlwZW9mIHR5cGVcbiAgICAgICAgKTtcbiAgICAgIGNvbXBhcmUgPSB7XG4gICAgICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgIGNvbXBhcmU6IHZvaWQgMCA9PT0gY29tcGFyZSA/IG51bGwgOiBjb21wYXJlXG4gICAgICB9O1xuICAgICAgdmFyIG93bk5hbWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29tcGFyZSwgXCJkaXNwbGF5TmFtZVwiLCB7XG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgIG93bk5hbWUgPSBuYW1lO1xuICAgICAgICAgIHR5cGUubmFtZSB8fFxuICAgICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSB8fFxuICAgICAgICAgICAgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KSxcbiAgICAgICAgICAgICh0eXBlLmRpc3BsYXlOYW1lID0gbmFtZSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb21wYXJlO1xuICAgIH07XG4gICAgZXhwb3J0cy5zdGFydFRyYW5zaXRpb24gPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQsXG4gICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uID0ge307XG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscy5UID0gY3VycmVudFRyYW5zaXRpb247XG4gICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyA9IG5ldyBTZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciByZXR1cm5WYWx1ZSA9IHNjb3BlKCksXG4gICAgICAgICAgb25TdGFydFRyYW5zaXRpb25GaW5pc2ggPSBSZWFjdFNoYXJlZEludGVybmFscy5TO1xuICAgICAgICBudWxsICE9PSBvblN0YXJ0VHJhbnNpdGlvbkZpbmlzaCAmJlxuICAgICAgICAgIG9uU3RhcnRUcmFuc2l0aW9uRmluaXNoKGN1cnJlbnRUcmFuc2l0aW9uLCByZXR1cm5WYWx1ZSk7XG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiByZXR1cm5WYWx1ZSAmJlxuICAgICAgICAgIG51bGwgIT09IHJldHVyblZhbHVlICYmXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgcmV0dXJuVmFsdWUudGhlbiAmJlxuICAgICAgICAgIHJldHVyblZhbHVlLnRoZW4obm9vcCwgcmVwb3J0R2xvYmFsRXJyb3IpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVwb3J0R2xvYmFsRXJyb3IoZXJyb3IpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbnVsbCA9PT0gcHJldlRyYW5zaXRpb24gJiZcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycyAmJlxuICAgICAgICAgICgoc2NvcGUgPSBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5zaXplKSxcbiAgICAgICAgICBjdXJyZW50VHJhbnNpdGlvbi5fdXBkYXRlZEZpYmVycy5jbGVhcigpLFxuICAgICAgICAgIDEwIDwgc2NvcGUgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgXCJEZXRlY3RlZCBhIGxhcmdlIG51bWJlciBvZiB1cGRhdGVzIGluc2lkZSBzdGFydFRyYW5zaXRpb24uIElmIHRoaXMgaXMgZHVlIHRvIGEgc3Vic2NyaXB0aW9uIHBsZWFzZSByZS13cml0ZSBpdCB0byB1c2UgUmVhY3QgcHJvdmlkZWQgaG9va3MuIE90aGVyd2lzZSBjb25jdXJyZW50IG1vZGUgZ3VhcmFudGVlcyBhcmUgb2ZmIHRoZSB0YWJsZS5cIlxuICAgICAgICAgICAgKSksXG4gICAgICAgICAgKFJlYWN0U2hhcmVkSW50ZXJuYWxzLlQgPSBwcmV2VHJhbnNpdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBleHBvcnRzLnVuc3RhYmxlX3VzZUNhY2hlUmVmcmVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUNhY2hlUmVmcmVzaCgpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2UgPSBmdW5jdGlvbiAodXNhYmxlKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2UodXNhYmxlKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlQWN0aW9uU3RhdGUgPSBmdW5jdGlvbiAoYWN0aW9uLCBpbml0aWFsU3RhdGUsIHBlcm1hbGluaykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlQWN0aW9uU3RhdGUoXG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgaW5pdGlhbFN0YXRlLFxuICAgICAgICBwZXJtYWxpbmtcbiAgICAgICk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUNvbnRleHQgPSBmdW5jdGlvbiAoQ29udGV4dCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgICAgQ29udGV4dC4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OU1VNRVJfVFlQRSAmJlxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgYnVncy4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkP1wiXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VEZWZlcnJlZFZhbHVlID0gZnVuY3Rpb24gKHZhbHVlLCBpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZURlZmVycmVkVmFsdWUodmFsdWUsIGluaXRpYWxWYWx1ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUVmZmVjdCA9IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUlkKCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VJbnNlcnRpb25FZmZlY3QgPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VJbnNlcnRpb25FZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9O1xuICAgIGV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU1lbW8gPSBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZURpc3BhdGNoZXIoKS51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZU9wdGltaXN0aWMgPSBmdW5jdGlvbiAocGFzc3Rocm91Z2gsIHJlZHVjZXIpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZU9wdGltaXN0aWMocGFzc3Rocm91Z2gsIHJlZHVjZXIpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VSZWR1Y2VyID0gZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVJlZiA9IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVJlZihpbml0aWFsVmFsdWUpO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VTdGF0ZSA9IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIHJldHVybiByZXNvbHZlRGlzcGF0Y2hlcigpLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgfTtcbiAgICBleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlID0gZnVuY3Rpb24gKFxuICAgICAgc3Vic2NyaWJlLFxuICAgICAgZ2V0U25hcHNob3QsXG4gICAgICBnZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgZ2V0U25hcHNob3QsXG4gICAgICAgIGdldFNlcnZlclNuYXBzaG90XG4gICAgICApO1xuICAgIH07XG4gICAgZXhwb3J0cy51c2VUcmFuc2l0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHJlc29sdmVEaXNwYXRjaGVyKCkudXNlVHJhbnNpdGlvbigpO1xuICAgIH07XG4gICAgZXhwb3J0cy52ZXJzaW9uID0gXCIxOS4wLjBcIjtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiIsCiAgICAiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsCiAgICAiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyXG4gICAgICAgICAgPyBudWxsXG4gICAgICAgICAgOiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICAgICAgaWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB0eXBlKSByZXR1cm4gdHlwZTtcbiAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiRnJhZ21lbnRcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQb3J0YWxcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIlByb2ZpbGVyXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdHJpY3RNb2RlXCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJTdXNwZW5zZUxpc3RcIjtcbiAgICAgIH1cbiAgICAgIGlmIChcIm9iamVjdFwiID09PSB0eXBlb2YgdHlwZSlcbiAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAoXCJudW1iZXJcIiA9PT0gdHlwZW9mIHR5cGUudGFnICYmXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBcIlJlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSgpLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCJcbiAgICAgICAgICAgICksXG4gICAgICAgICAgdHlwZS4kJHR5cGVvZilcbiAgICAgICAgKSB7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuUHJvdmlkZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICB2YXIgaW5uZXJUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAgICAgKCh0eXBlID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgICAodHlwZSA9IFwiXCIgIT09IHR5cGUgPyBcIkZvcndhcmRSZWYoXCIgKyB0eXBlICsgXCIpXCIgOiBcIkZvcndhcmRSZWZcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgPyBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gY29uc29sZTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5lcnJvcjtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICBcIk9iamVjdFwiO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QuY2FsbChcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuICAgIGZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICAgICAgaWYgKDAgPT09IGRpc2FibGVkRGVwdGgpIHtcbiAgICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7XG4gICAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgICBjb25maWd1cmFibGU6ICEwLFxuICAgICAgICAgIGVudW1lcmFibGU6ICEwLFxuICAgICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgICB3cml0YWJsZTogITBcbiAgICAgICAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZGlzYWJsZWREZXB0aCsrO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gICAgICBkaXNhYmxlZERlcHRoLS07XG4gICAgICBpZiAoMCA9PT0gZGlzYWJsZWREZXB0aCkge1xuICAgICAgICB2YXIgcHJvcHMgPSB7IGNvbmZpZ3VyYWJsZTogITAsIGVudW1lcmFibGU6ICEwLCB3cml0YWJsZTogITAgfTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICAgIGxvZzogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkxvZyB9KSxcbiAgICAgICAgICBpbmZvOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2SW5mbyB9KSxcbiAgICAgICAgICB3YXJuOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2V2FybiB9KSxcbiAgICAgICAgICBlcnJvcjogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkVycm9yIH0pLFxuICAgICAgICAgIGdyb3VwOiBhc3NpZ24oe30sIHByb3BzLCB7IHZhbHVlOiBwcmV2R3JvdXAgfSksXG4gICAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IGFzc2lnbih7fSwgcHJvcHMsIHsgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZCB9KSxcbiAgICAgICAgICBncm91cEVuZDogYXNzaWduKHt9LCBwcm9wcywgeyB2YWx1ZTogcHJldkdyb3VwRW5kIH0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgMCA+IGRpc2FibGVkRGVwdGggJiZcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBcImRpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSB7XG4gICAgICBpZiAodm9pZCAwID09PSBwcmVmaXgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XG4gICAgICAgICAgcHJlZml4ID0gKG1hdGNoICYmIG1hdGNoWzFdKSB8fCBcIlwiO1xuICAgICAgICAgIHN1ZmZpeCA9XG4gICAgICAgICAgICAtMSA8IHguc3RhY2suaW5kZXhPZihcIlxcbiAgICBhdFwiKVxuICAgICAgICAgICAgICA/IFwiICg8YW5vbnltb3VzPilcIlxuICAgICAgICAgICAgICA6IC0xIDwgeC5zdGFjay5pbmRleE9mKFwiQFwiKVxuICAgICAgICAgICAgICAgID8gXCJAdW5rbm93bjowOjBcIlxuICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXFxuXCIgKyBwcmVmaXggKyBuYW1lICsgc3VmZml4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBjb25zdHJ1Y3QpIHtcbiAgICAgIGlmICghZm4gfHwgcmVlbnRyeSkgcmV0dXJuIFwiXCI7XG4gICAgICB2YXIgZnJhbWUgPSBjb21wb25lbnRGcmFtZUNhY2hlLmdldChmbik7XG4gICAgICBpZiAodm9pZCAwICE9PSBmcmFtZSkgcmV0dXJuIGZyYW1lO1xuICAgICAgcmVlbnRyeSA9ICEwO1xuICAgICAgZnJhbWUgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdm9pZCAwO1xuICAgICAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlciA9IG51bGw7XG4gICAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5IO1xuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IG51bGw7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIFJ1bkluUm9vdEZyYW1lID0ge1xuICAgICAgICAgIERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgICAgICAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgXCJwcm9wc1wiLCB7XG4gICAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIFJlZmxlY3QgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRyb2wgPSB4O1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbCA9IHgkMDtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoICh4JDEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2wgPSB4JDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChGYWtlID0gZm4oKSkgJiZcbiAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIEZha2UuY2F0Y2ggJiZcbiAgICAgICAgICAgICAgICAgIEZha2UuY2F0Y2goZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAgICAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIFwic3RyaW5nXCIgPT09IHR5cGVvZiBzYW1wbGUuc3RhY2spXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtzYW1wbGUuc3RhY2ssIGNvbnRyb2wuc3RhY2tdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFtudWxsLCBudWxsXTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFJ1bkluUm9vdEZyYW1lLkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdC5kaXNwbGF5TmFtZSA9XG4gICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIjtcbiAgICAgICAgdmFyIG5hbWVQcm9wRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG4gICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290LFxuICAgICAgICAgIFwibmFtZVwiXG4gICAgICAgICk7XG4gICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci5jb25maWd1cmFibGUgJiZcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoXG4gICAgICAgICAgICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsXG4gICAgICAgICAgICBcIm5hbWVcIixcbiAgICAgICAgICAgIHsgdmFsdWU6IFwiRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290XCIgfVxuICAgICAgICAgICk7XG4gICAgICAgIHZhciBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPVxuICAgICAgICAgICAgUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksXG4gICAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXG4gICAgICAgICAgY29udHJvbFN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzFdO1xuICAgICAgICBpZiAoc2FtcGxlU3RhY2sgJiYgY29udHJvbFN0YWNrKSB7XG4gICAgICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlU3RhY2suc3BsaXQoXCJcXG5cIiksXG4gICAgICAgICAgICBjb250cm9sTGluZXMgPSBjb250cm9sU3RhY2suc3BsaXQoXCJcXG5cIik7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IG5hbWVQcm9wRGVzY3JpcHRvciA9IDA7XG4gICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPCBzYW1wbGVMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdLmluY2x1ZGVzKFxuICAgICAgICAgICAgICBcIkRldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdFwiXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbmFtZVByb3BEZXNjcmlwdG9yKys7XG4gICAgICAgICAgZm9yIChcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA8IGNvbnRyb2xMaW5lcy5sZW5ndGggJiZcbiAgICAgICAgICAgICFjb250cm9sTGluZXNbX1J1bkluUm9vdEZyYW1lJERldGVyXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgXCJEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3RcIlxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIClcbiAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlcisrO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvciA9PT0gc2FtcGxlTGluZXMubGVuZ3RoIHx8XG4gICAgICAgICAgICBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgPT09IGNvbnRyb2xMaW5lcy5sZW5ndGhcbiAgICAgICAgICApXG4gICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICBuYW1lUHJvcERlc2NyaXB0b3IgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxLFxuICAgICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlciA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJlxuICAgICAgICAgICAgICAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlciAmJlxuICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgIGNvbnRyb2xMaW5lc1tfUnVuSW5Sb290RnJhbWUkRGV0ZXJdO1xuXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIF9SdW5JblJvb3RGcmFtZSREZXRlci0tO1xuICAgICAgICAgIGZvciAoXG4gICAgICAgICAgICA7XG4gICAgICAgICAgICAxIDw9IG5hbWVQcm9wRGVzY3JpcHRvciAmJiAwIDw9IF9SdW5JblJvb3RGcmFtZSREZXRlcjtcbiAgICAgICAgICAgIG5hbWVQcm9wRGVzY3JpcHRvci0tLCBfUnVuSW5Sb290RnJhbWUkRGV0ZXItLVxuICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXSAhPT1cbiAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl1cbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpZiAoMSAhPT0gbmFtZVByb3BEZXNjcmlwdG9yIHx8IDEgIT09IF9SdW5JblJvb3RGcmFtZSREZXRlcikge1xuICAgICAgICAgICAgICAgIGRvXG4gICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChuYW1lUHJvcERlc2NyaXB0b3ItLSxcbiAgICAgICAgICAgICAgICAgICAgX1J1bkluUm9vdEZyYW1lJERldGVyLS0sXG4gICAgICAgICAgICAgICAgICAgIDAgPiBfUnVuSW5Sb290RnJhbWUkRGV0ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICBzYW1wbGVMaW5lc1tuYW1lUHJvcERlc2NyaXB0b3JdICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbExpbmVzW19SdW5JblJvb3RGcmFtZSREZXRlcl0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9XG4gICAgICAgICAgICAgICAgICAgICAgXCJcXG5cIiArXG4gICAgICAgICAgICAgICAgICAgICAgc2FtcGxlTGluZXNbbmFtZVByb3BEZXNjcmlwdG9yXS5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgbmV3IFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYXQgXCJcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBmbi5kaXNwbGF5TmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICAgIF9mcmFtZS5pbmNsdWRlcyhcIjxhbm9ueW1vdXM+XCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgKF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKFwiPGFub255bW91cz5cIiwgZm4uZGlzcGxheU5hbWUpKTtcbiAgICAgICAgICAgICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgZm4gJiZcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aGlsZSAoMSA8PSBuYW1lUHJvcERlc2NyaXB0b3IgJiYgMCA8PSBfUnVuSW5Sb290RnJhbWUkRGV0ZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICAocmVlbnRyeSA9ICExKSxcbiAgICAgICAgICAoUmVhY3RTaGFyZWRJbnRlcm5hbHMuSCA9IHByZXZpb3VzRGlzcGF0Y2hlciksXG4gICAgICAgICAgcmVlbmFibGVMb2dzKCksXG4gICAgICAgICAgKEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gZnJhbWUpO1xuICAgICAgfVxuICAgICAgc2FtcGxlTGluZXMgPSAoc2FtcGxlTGluZXMgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiBcIlwiKVxuICAgICAgICA/IGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHNhbXBsZUxpbmVzKVxuICAgICAgICA6IFwiXCI7XG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBmbiAmJiBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc2FtcGxlTGluZXMpO1xuICAgICAgcmV0dXJuIHNhbXBsZUxpbmVzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSkge1xuICAgICAgaWYgKG51bGwgPT0gdHlwZSkgcmV0dXJuIFwiXCI7XG4gICAgICBpZiAoXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSkge1xuICAgICAgICB2YXIgcHJvdG90eXBlID0gdHlwZS5wcm90b3R5cGU7XG4gICAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKFxuICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgISghcHJvdG90eXBlIHx8ICFwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xuICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoXCJTdXNwZW5zZVwiKTtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKFwiU3VzcGVuc2VMaXN0XCIpO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUgPSBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUucmVuZGVyLCAhMSkpLCB0eXBlO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUpO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgcHJvdG90eXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlKHByb3RvdHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldE93bmVyKCkge1xuICAgICAgdmFyIGRpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5BO1xuICAgICAgcmV0dXJuIG51bGwgPT09IGRpc3BhdGNoZXIgPyBudWxsIDogZGlzcGF0Y2hlci5nZXRPd25lcigpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgXCJrZXlcIikpIHtcbiAgICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCBcImtleVwiKS5nZXQ7XG4gICAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSByZXR1cm4gITE7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb25maWcua2V5O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgICAgIGZ1bmN0aW9uIHdhcm5BYm91dEFjY2Vzc2luZ0tleSgpIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gfHxcbiAgICAgICAgICAoKHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gITApLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIiVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgdmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCBwcm9wLiAoaHR0cHM6Ly9yZWFjdC5kZXYvbGluay9zcGVjaWFsLXByb3BzKVwiLFxuICAgICAgICAgICAgZGlzcGxheU5hbWVcbiAgICAgICAgICApKTtcbiAgICAgIH1cbiAgICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9ICEwO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCBcImtleVwiLCB7XG4gICAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmcoKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0aGlzLnR5cGUpO1xuICAgICAgZGlkV2FybkFib3V0RWxlbWVudFJlZltjb21wb25lbnROYW1lXSB8fFxuICAgICAgICAoKGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gPSAhMCksXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJBY2Nlc3NpbmcgZWxlbWVudC5yZWYgd2FzIHJlbW92ZWQgaW4gUmVhY3QgMTkuIHJlZiBpcyBub3cgYSByZWd1bGFyIHByb3AuIEl0IHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBKU1ggRWxlbWVudCB0eXBlIGluIGEgZnV0dXJlIHJlbGVhc2UuXCJcbiAgICAgICAgKSk7XG4gICAgICBjb21wb25lbnROYW1lID0gdGhpcy5wcm9wcy5yZWY7XG4gICAgICByZXR1cm4gdm9pZCAwICE9PSBjb21wb25lbnROYW1lID8gY29tcG9uZW50TmFtZSA6IG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gICAgICBzZWxmID0gcHJvcHMucmVmO1xuICAgICAgdHlwZSA9IHtcbiAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAga2V5OiBrZXksXG4gICAgICAgIHByb3BzOiBwcm9wcyxcbiAgICAgICAgX293bmVyOiBvd25lclxuICAgICAgfTtcbiAgICAgIG51bGwgIT09ICh2b2lkIDAgIT09IHNlbGYgPyBzZWxmIDogbnVsbClcbiAgICAgICAgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJyZWZcIiwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgICAgICBnZXQ6IGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nXG4gICAgICAgICAgfSlcbiAgICAgICAgOiBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZSwgXCJyZWZcIiwgeyBlbnVtZXJhYmxlOiAhMSwgdmFsdWU6IG51bGwgfSk7XG4gICAgICB0eXBlLl9zdG9yZSA9IHt9O1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUuX3N0b3JlLCBcInZhbGlkYXRlZFwiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiAwXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIl9kZWJ1Z0luZm9cIiwge1xuICAgICAgICBjb25maWd1cmFibGU6ICExLFxuICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgd3JpdGFibGU6ICEwLFxuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZnJlZXplICYmIChPYmplY3QuZnJlZXplKHR5cGUucHJvcHMpLCBPYmplY3QuZnJlZXplKHR5cGUpKTtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBqc3hERVZJbXBsKFxuICAgICAgdHlwZSxcbiAgICAgIGNvbmZpZyxcbiAgICAgIG1heWJlS2V5LFxuICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgIHNvdXJjZSxcbiAgICAgIHNlbGZcbiAgICApIHtcbiAgICAgIGlmIChcbiAgICAgICAgXCJzdHJpbmdcIiA9PT0gdHlwZW9mIHR5cGUgfHxcbiAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHxcbiAgICAgICAgdHlwZSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9UWVBFIHx8XG4gICAgICAgIHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSB8fFxuICAgICAgICB0eXBlID09PSBSRUFDVF9PRkZTQ1JFRU5fVFlQRSB8fFxuICAgICAgICAoXCJvYmplY3RcIiA9PT0gdHlwZW9mIHR5cGUgJiZcbiAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fFxuICAgICAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8XG4gICAgICAgICAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlNVTUVSX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHxcbiAgICAgICAgICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMSB8fFxuICAgICAgICAgICAgdm9pZCAwICE9PSB0eXBlLmdldE1vZHVsZUlkKSlcbiAgICAgICkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICAgIGlmICh2b2lkIDAgIT09IGNoaWxkcmVuKVxuICAgICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKVxuICAgICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPSAwO1xuICAgICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbisrXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpc1N0YXRpY0NoaWxkcmVuXSwgdHlwZSk7XG4gICAgICAgICAgICAgIE9iamVjdC5mcmVlemUgJiYgT2JqZWN0LmZyZWV6ZShjaGlsZHJlbik7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICBcIlJlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuIFlvdSBhcmUgbGlrZWx5IGV4cGxpY2l0bHkgY2FsbGluZyBSZWFjdC5qc3hzIG9yIFJlYWN0LmpzeERFVi4gVXNlIHRoZSBCYWJlbCB0cmFuc2Zvcm0gaW5zdGVhZC5cIlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgIGVsc2UgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4sIHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGRyZW4gPSBcIlwiO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdm9pZCAwID09PSB0eXBlIHx8XG4gICAgICAgICAgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgICAgICBudWxsICE9PSB0eXBlICYmXG4gICAgICAgICAgICAwID09PSBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGgpXG4gICAgICAgIClcbiAgICAgICAgICBjaGlsZHJlbiArPVxuICAgICAgICAgICAgXCIgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgICAgICBudWxsID09PSB0eXBlXG4gICAgICAgICAgPyAoaXNTdGF0aWNDaGlsZHJlbiA9IFwibnVsbFwiKVxuICAgICAgICAgIDogaXNBcnJheUltcGwodHlwZSlcbiAgICAgICAgICAgID8gKGlzU3RhdGljQ2hpbGRyZW4gPSBcImFycmF5XCIpXG4gICAgICAgICAgICA6IHZvaWQgMCAhPT0gdHlwZSAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICAgICAgICAgPyAoKGlzU3RhdGljQ2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgICAgXCI8XCIgK1xuICAgICAgICAgICAgICAgICAgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiVW5rbm93blwiKSArXG4gICAgICAgICAgICAgICAgICBcIiAvPlwiKSxcbiAgICAgICAgICAgICAgICAoY2hpbGRyZW4gPVxuICAgICAgICAgICAgICAgICAgXCIgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD9cIikpXG4gICAgICAgICAgICAgIDogKGlzU3RhdGljQ2hpbGRyZW4gPSB0eXBlb2YgdHlwZSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgXCJSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXNcIixcbiAgICAgICAgICBpc1N0YXRpY0NoaWxkcmVuLFxuICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwia2V5XCIpKSB7XG4gICAgICAgIGNoaWxkcmVuID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpO1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZykuZmlsdGVyKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgcmV0dXJuIFwia2V5XCIgIT09IGs7XG4gICAgICAgIH0pO1xuICAgICAgICBpc1N0YXRpY0NoaWxkcmVuID1cbiAgICAgICAgICAwIDwga2V5cy5sZW5ndGhcbiAgICAgICAgICAgID8gXCJ7a2V5OiBzb21lS2V5LCBcIiArIGtleXMuam9pbihcIjogLi4uLCBcIikgKyBcIjogLi4ufVwiXG4gICAgICAgICAgICA6IFwie2tleTogc29tZUtleX1cIjtcbiAgICAgICAgZGlkV2FybkFib3V0S2V5U3ByZWFkW2NoaWxkcmVuICsgaXNTdGF0aWNDaGlsZHJlbl0gfHxcbiAgICAgICAgICAoKGtleXMgPVxuICAgICAgICAgICAgMCA8IGtleXMubGVuZ3RoID8gXCJ7XCIgKyBrZXlzLmpvaW4oXCI6IC4uLiwgXCIpICsgXCI6IC4uLn1cIiA6IFwie31cIiksXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICdBIHByb3BzIG9iamVjdCBjb250YWluaW5nIGEgXCJrZXlcIiBwcm9wIGlzIGJlaW5nIHNwcmVhZCBpbnRvIEpTWDpcXG4gIGxldCBwcm9wcyA9ICVzO1xcbiAgPCVzIHsuLi5wcm9wc30gLz5cXG5SZWFjdCBrZXlzIG11c3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIEpTWCB3aXRob3V0IHVzaW5nIHNwcmVhZDpcXG4gIGxldCBwcm9wcyA9ICVzO1xcbiAgPCVzIGtleT17c29tZUtleX0gey4uLnByb3BzfSAvPicsXG4gICAgICAgICAgICBpc1N0YXRpY0NoaWxkcmVuLFxuICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICApLFxuICAgICAgICAgIChkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY2hpbGRyZW4gKyBpc1N0YXRpY0NoaWxkcmVuXSA9ICEwKSk7XG4gICAgICB9XG4gICAgICBjaGlsZHJlbiA9IG51bGw7XG4gICAgICB2b2lkIDAgIT09IG1heWJlS2V5ICYmXG4gICAgICAgIChjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KSwgKGNoaWxkcmVuID0gXCJcIiArIG1heWJlS2V5KSk7XG4gICAgICBoYXNWYWxpZEtleShjb25maWcpICYmXG4gICAgICAgIChjaGVja0tleVN0cmluZ0NvZXJjaW9uKGNvbmZpZy5rZXkpLCAoY2hpbGRyZW4gPSBcIlwiICsgY29uZmlnLmtleSkpO1xuICAgICAgaWYgKFwia2V5XCIgaW4gY29uZmlnKSB7XG4gICAgICAgIG1heWJlS2V5ID0ge307XG4gICAgICAgIGZvciAodmFyIHByb3BOYW1lIGluIGNvbmZpZylcbiAgICAgICAgICBcImtleVwiICE9PSBwcm9wTmFtZSAmJiAobWF5YmVLZXlbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXSk7XG4gICAgICB9IGVsc2UgbWF5YmVLZXkgPSBjb25maWc7XG4gICAgICBjaGlsZHJlbiAmJlxuICAgICAgICBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihcbiAgICAgICAgICBtYXliZUtleSxcbiAgICAgICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlXG4gICAgICAgICAgICA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IFwiVW5rbm93blwiXG4gICAgICAgICAgICA6IHR5cGVcbiAgICAgICAgKTtcbiAgICAgIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwgY2hpbGRyZW4sIHNlbGYsIHNvdXJjZSwgZ2V0T3duZXIoKSwgbWF5YmVLZXkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZUNoaWxkS2V5cyhub2RlLCBwYXJlbnRUeXBlKSB7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiBub2RlICYmXG4gICAgICAgIG5vZGUgJiZcbiAgICAgICAgbm9kZS4kJHR5cGVvZiAhPT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgKVxuICAgICAgICBpZiAoaXNBcnJheUltcGwobm9kZSkpXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuICAgICAgICAgICAgaXNWYWxpZEVsZW1lbnQoY2hpbGQpICYmIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNWYWxpZEVsZW1lbnQobm9kZSkpXG4gICAgICAgICAgbm9kZS5fc3RvcmUgJiYgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAobnVsbCA9PT0gbm9kZSB8fCBcIm9iamVjdFwiICE9PSB0eXBlb2Ygbm9kZVxuICAgICAgICAgICAgPyAoaSA9IG51bGwpXG4gICAgICAgICAgICA6ICgoaSA9XG4gICAgICAgICAgICAgICAgKE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBub2RlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0pIHx8XG4gICAgICAgICAgICAgICAgbm9kZVtcIkBAaXRlcmF0b3JcIl0pLFxuICAgICAgICAgICAgICAoaSA9IFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGkgPyBpIDogbnVsbCkpLFxuICAgICAgICAgIFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIGkgJiZcbiAgICAgICAgICAgIGkgIT09IG5vZGUuZW50cmllcyAmJlxuICAgICAgICAgICAgKChpID0gaS5jYWxsKG5vZGUpKSwgaSAhPT0gbm9kZSkpXG4gICAgICAgIClcbiAgICAgICAgICBmb3IgKDsgIShub2RlID0gaS5uZXh0KCkpLmRvbmU7IClcbiAgICAgICAgICAgIGlzVmFsaWRFbGVtZW50KG5vZGUudmFsdWUpICYmXG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkobm9kZS52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG9iamVjdCAmJlxuICAgICAgICBudWxsICE9PSBvYmplY3QgJiZcbiAgICAgICAgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEVcbiAgICAgICk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICAgICAgaWYgKFxuICAgICAgICBlbGVtZW50Ll9zdG9yZSAmJlxuICAgICAgICAhZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkICYmXG4gICAgICAgIG51bGwgPT0gZWxlbWVudC5rZXkgJiZcbiAgICAgICAgKChlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgPSAxKSxcbiAgICAgICAgKHBhcmVudFR5cGUgPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpKSxcbiAgICAgICAgIW93bmVySGFzS2V5VXNlV2FybmluZ1twYXJlbnRUeXBlXSlcbiAgICAgICkge1xuICAgICAgICBvd25lckhhc0tleVVzZVdhcm5pbmdbcGFyZW50VHlwZV0gPSAhMDtcbiAgICAgICAgdmFyIGNoaWxkT3duZXIgPSBcIlwiO1xuICAgICAgICBlbGVtZW50ICYmXG4gICAgICAgICAgbnVsbCAhPSBlbGVtZW50Ll9vd25lciAmJlxuICAgICAgICAgIGVsZW1lbnQuX293bmVyICE9PSBnZXRPd25lcigpICYmXG4gICAgICAgICAgKChjaGlsZE93bmVyID0gbnVsbCksXG4gICAgICAgICAgXCJudW1iZXJcIiA9PT0gdHlwZW9mIGVsZW1lbnQuX293bmVyLnRhZ1xuICAgICAgICAgICAgPyAoY2hpbGRPd25lciA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShlbGVtZW50Ll9vd25lci50eXBlKSlcbiAgICAgICAgICAgIDogXCJzdHJpbmdcIiA9PT0gdHlwZW9mIGVsZW1lbnQuX293bmVyLm5hbWUgJiZcbiAgICAgICAgICAgICAgKGNoaWxkT3duZXIgPSBlbGVtZW50Ll9vd25lci5uYW1lKSxcbiAgICAgICAgICAoY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgY2hpbGRPd25lciArIFwiLlwiKSk7XG4gICAgICAgIHZhciBwcmV2R2V0Q3VycmVudFN0YWNrID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuZ2V0Q3VycmVudFN0YWNrO1xuICAgICAgICBSZWFjdFNoYXJlZEludGVybmFscy5nZXRDdXJyZW50U3RhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSk7XG4gICAgICAgICAgcHJldkdldEN1cnJlbnRTdGFjayAmJiAoc3RhY2sgKz0gcHJldkdldEN1cnJlbnRTdGFjaygpIHx8IFwiXCIpO1xuICAgICAgICAgIHJldHVybiBzdGFjaztcbiAgICAgICAgfTtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLiVzJXMgU2VlIGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvd2FybmluZy1rZXlzIGZvciBtb3JlIGluZm9ybWF0aW9uLicsXG4gICAgICAgICAgcGFyZW50VHlwZSxcbiAgICAgICAgICBjaGlsZE93bmVyXG4gICAgICAgICk7XG4gICAgICAgIFJlYWN0U2hhcmVkSW50ZXJuYWxzLmdldEN1cnJlbnRTdGFjayA9IHByZXZHZXRDdXJyZW50U3RhY2s7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICAgICAgdmFyIGluZm8gPSBcIlwiLFxuICAgICAgICBvd25lciA9IGdldE93bmVyKCk7XG4gICAgICBvd25lciAmJlxuICAgICAgICAob3duZXIgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUob3duZXIudHlwZSkpICYmXG4gICAgICAgIChpbmZvID0gXCJcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgXCIgKyBvd25lciArIFwiYC5cIik7XG4gICAgICBpbmZvIHx8XG4gICAgICAgICgocGFyZW50VHlwZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShwYXJlbnRUeXBlKSkgJiZcbiAgICAgICAgICAoaW5mbyA9XG4gICAgICAgICAgICBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50VHlwZSArIFwiPi5cIikpO1xuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIFJFQUNUX0VMRU1FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC50cmFuc2l0aW9uYWwuZWxlbWVudFwiKSxcbiAgICAgIFJFQUNUX1BPUlRBTF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnBvcnRhbFwiKSxcbiAgICAgIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZnJhZ21lbnRcIiksXG4gICAgICBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN0cmljdF9tb2RlXCIpLFxuICAgICAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5wcm9maWxlclwiKTtcbiAgICBTeW1ib2wuZm9yKFwicmVhY3QucHJvdmlkZXJcIik7XG4gICAgdmFyIFJFQUNUX0NPTlNVTUVSX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29uc3VtZXJcIiksXG4gICAgICBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuY29udGV4dFwiKSxcbiAgICAgIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QuZm9yd2FyZF9yZWZcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlXCIpLFxuICAgICAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnN1c3BlbnNlX2xpc3RcIiksXG4gICAgICBSRUFDVF9NRU1PX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QubWVtb1wiKSxcbiAgICAgIFJFQUNUX0xBWllfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5sYXp5XCIpLFxuICAgICAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Qub2Zmc2NyZWVuXCIpLFxuICAgICAgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yLFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyID0gU3ltYm9sLmZvcihcInJlYWN0LmNsaWVudC5yZWZlcmVuY2VcIiksXG4gICAgICBSZWFjdFNoYXJlZEludGVybmFscyA9XG4gICAgICAgIFJlYWN0Ll9fQ0xJRU5UX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1dBUk5fVVNFUlNfVEhFWV9DQU5OT1RfVVBHUkFERSxcbiAgICAgIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxcbiAgICAgIGFzc2lnbiA9IE9iamVjdC5hc3NpZ24sXG4gICAgICBSRUFDVF9DTElFTlRfUkVGRVJFTkNFJDEgPSBTeW1ib2wuZm9yKFwicmVhY3QuY2xpZW50LnJlZmVyZW5jZVwiKSxcbiAgICAgIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheSxcbiAgICAgIGRpc2FibGVkRGVwdGggPSAwLFxuICAgICAgcHJldkxvZyxcbiAgICAgIHByZXZJbmZvLFxuICAgICAgcHJldldhcm4sXG4gICAgICBwcmV2RXJyb3IsXG4gICAgICBwcmV2R3JvdXAsXG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQsXG4gICAgICBwcmV2R3JvdXBFbmQ7XG4gICAgZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gITA7XG4gICAgdmFyIHByZWZpeCxcbiAgICAgIHN1ZmZpeCxcbiAgICAgIHJlZW50cnkgPSAhMTtcbiAgICB2YXIgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyAoXG4gICAgICBcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiBXZWFrTWFwID8gV2Vha01hcCA6IE1hcFxuICAgICkoKTtcbiAgICB2YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XG4gICAgdmFyIGRpZFdhcm5BYm91dEVsZW1lbnRSZWYgPSB7fTtcbiAgICB2YXIgZGlkV2FybkFib3V0S2V5U3ByZWFkID0ge30sXG4gICAgICBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcbiAgICBleHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbiAgICBleHBvcnRzLmpzeERFViA9IGZ1bmN0aW9uIChcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWcsXG4gICAgICBtYXliZUtleSxcbiAgICAgIGlzU3RhdGljQ2hpbGRyZW4sXG4gICAgICBzb3VyY2UsXG4gICAgICBzZWxmXG4gICAgKSB7XG4gICAgICByZXR1cm4ganN4REVWSW1wbCh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuLCBzb3VyY2UsIHNlbGYpO1xuICAgIH07XG4gIH0pKCk7XG4iLAogICAgIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsCiAgICAiXCJ1c2UgY2xpZW50XCI7XG5pbXBvcnQgUmVhY3QsIHsgdHlwZSBKU1gsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IFwiLi4vc3R5bGVzL2dsb2JhbHMuY3NzXCI7XG5cbnR5cGUgVGhlbWVNb2RlID0gXCJsaWdodFwiIHwgXCJkYXJrXCI7XG5cbnR5cGUgVGhlbWVDb250ZXh0VHlwZSA9IHtcbiAgbW9kZTogVGhlbWVNb2RlO1xuICB0b2dnbGVUaGVtZTogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFRoZW1lQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8VGhlbWVDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuZXhwb3J0IGZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgW21vdW50ZWQsIHNldE1vdW50ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbbW9kZSwgc2V0TW9kZV0gPSB1c2VTdGF0ZTxUaGVtZU1vZGU+KFwibGlnaHRcIik7XG5cbiAgLy8gSW5pdGlhbGl6ZSB0aGVtZSBvbiBjbGllbnQtc2lkZSBvbmx5XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RvcmVkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ0aGVtZVwiKSBhcyBUaGVtZU1vZGU7XG5cbiAgICBpZiAoc3RvcmVkKSB7XG4gICAgICBzZXRNb2RlKHN0b3JlZCk7XG4gICAgICBzZXRNb3VudGVkKHRydWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcHJlZmVyc0RhcmsgPSB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikubWF0Y2hlcztcblxuICAgIHNldE1vZGUocHJlZmVyc0RhcmsgPyBcImRhcmtcIiA6IFwibGlnaHRcIik7XG4gICAgc2V0TW91bnRlZCh0cnVlKTtcbiAgfSwgW10pO1xuXG4gIC8vIFVwZGF0ZSB0aGVtZVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbW91bnRlZCkgcmV0dXJuO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXRoZW1lXCIsIG1vZGUpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwidGhlbWVcIiwgbW9kZSk7XG4gIH0sIFttb2RlLCBtb3VudGVkXSk7XG5cbiAgY29uc3QgdG9nZ2xlVGhlbWUgPSAoKTogdm9pZCA9PiBzZXRNb2RlKChwcmV2KSA9PiAocHJldiA9PT0gXCJsaWdodFwiID8gXCJkYXJrXCIgOiBcImxpZ2h0XCIpKTtcblxuICBpZiAoIW1vdW50ZWQpIHtcbiAgICByZXR1cm4gPD4gPC8+O1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8VGhlbWVDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt7IG1vZGUsIHRvZ2dsZVRoZW1lIH19PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvVGhlbWVDb250ZXh0LlByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlVGhlbWUoKTogVGhlbWVDb250ZXh0VHlwZSB7XG4gIGNvbnN0IGNvbnRleHQgPSB1c2VDb250ZXh0KFRoZW1lQ29udGV4dCk7XG5cbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlVGhlbWUgbXVzdCBiZSB1c2VkIHdpdGhpbiBUaGVtZVByb3ZpZGVyXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBLFdBQ1ksR0FBRztBQUNYLGFBQVMsd0JBQXdCLENBQUMsWUFBWSxNQUFNO0FBQ2xELGFBQU8sZUFBZSxVQUFVLFdBQVcsWUFBWTtBQUFBLFFBQ3JELGFBQWMsR0FBRztBQUNmLGtCQUFRLEtBQ04sK0RBQ0EsS0FBSyxJQUNMLEtBQUssRUFDUDtBQUFBO0FBQUEsTUFFSixDQUFDO0FBQUE7QUFFSCxhQUFTLGFBQWEsQ0FBQyxlQUFlO0FBQ3BDLFVBQWEsa0JBQVQsZUFBOEMsa0JBQXBCO0FBQzVCLGVBQU87QUFDVCxzQkFDRyx5QkFBeUIsY0FBYywwQkFDeEMsY0FBYztBQUNoQixvQkFBNkIsa0JBQXRCLGFBQXNDLGdCQUFnQjtBQUFBO0FBRS9ELGFBQVMsUUFBUSxDQUFDLGdCQUFnQixZQUFZO0FBQzVDLHdCQUNJLGlCQUFpQixlQUFlLGlCQUMvQixlQUFlLGVBQWUsZUFBZSxTQUNoRDtBQUNGLFVBQUksYUFBYSxpQkFBaUIsTUFBTTtBQUN4Qyw4Q0FBd0MsZ0JBQ3JDLFFBQVEsTUFDUCx5UEFDQSxZQUNBLGNBQ0YsR0FDQyx3Q0FBd0MsY0FBYztBQUFBO0FBRTNELGFBQVMsU0FBUyxDQUFDLE9BQU8sU0FBUyxTQUFTO0FBQzFDLFdBQUssUUFBUTtBQUNiLFdBQUssVUFBVTtBQUNmLFdBQUssT0FBTztBQUNaLFdBQUssVUFBVSxXQUFXO0FBQUE7QUFFNUIsYUFBUyxjQUFjLEdBQUc7QUFBQTtBQUMxQixhQUFTLGFB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
|
|
38
|
+
//# debugId=B2E16B1B1C4F855164756E2164756E21
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsICIuLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsCiAgICAiaW1wb3J0IHsgY2xzeCB9IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgeyB0eXBlIEJ1dHRvbkhUTUxBdHRyaWJ1dGVzLCB0eXBlIEpTWCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSBCdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD47XG5cbmV4cG9ydCBmdW5jdGlvbiBCdXR0b24oeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IEJ1dHRvblByb3BzKTogSlNYLkVsZW1lbnQge1xuICAvLyBAdHMtaWdub3JlIC0gQ1NTIG1vZHVsZSB0eXBlcyBhcmUgY29ycmVjdCBhdCBydW50aW1lXG4gIHJldHVybiA8YnV0dG9uIGNsYXNzTmFtZT17Y2xzeChzdHlsZXNbXCJidXR0b25cIl0sIGNsYXNzTmFtZSl9IHR5cGU9XCJidXR0b25cIiB7Li4ucHJvcHN9IC8+O1xufVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLFNBQVMsQ0FBQyxDQUFDLEdBQUU7QUFBQyxNQUFJLEdBQUUsR0FBRSxJQUFFO0FBQUcsYUFBb0IsS0FBakIsbUJBQXFDLEtBQWpCO0FBQW1CLFNBQUc7QUFBQSxrQkFBMkIsS0FBakI7QUFBbUIsUUFBRyxNQUFNLFFBQVEsQ0FBQyxHQUFFO0FBQUMsVUFBSSxJQUFFLEVBQUU7QUFBTyxXQUFJLElBQUUsRUFBRSxJQUFFLEdBQUU7QUFBSSxVQUFFLE9BQUssSUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFLLE1BQUksS0FBRyxNQUFLLEtBQUc7QUFBQSxJQUFFO0FBQU0sV0FBSSxLQUFLO0FBQUUsVUFBRSxPQUFLLE1BQUksS0FBRyxNQUFLLEtBQUc7QUFBRyxTQUFPO0FBQUE7QUFBUyxTQUFTLElBQUksR0FBRTtBQUFDLFdBQVEsR0FBRSxHQUFFLElBQUUsR0FBRSxJQUFFLElBQUcsSUFBRSxVQUFVLE9BQU8sSUFBRSxHQUFFO0FBQUksS0FBQyxJQUFFLFVBQVUsUUFBTSxJQUFFLEVBQUUsQ0FBQyxPQUFLLE1BQUksS0FBRyxNQUFLLEtBQUc7QUFBRyxTQUFPO0FBQUE7Ozs7Ozs7QUNPdlcsU0FBUyxNQUFNLEdBQUcsY0FBYyxTQUFtQztBQUV4RSx5QkFBTyxnQkFBQyxVQUFEO0FBQUEsSUFBUSxXQUFXLEtBQUssc0JBQU8sV0FBVyxTQUFTO0FBQUEsSUFBRyxNQUFLO0FBQUEsT0FBYTtBQUFBLEtBQXhFLGlDQUErRTtBQUFBOyIsCiAgImRlYnVnSWQiOiAiQjJFMTZCMUIxQzRGODU1MTY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|