@decaf-ts/ui-decorators 0.5.23 → 0.5.24
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/dist/ui-decorators.cjs +55 -9
- package/dist/ui-decorators.esm.cjs +55 -10
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/ui/Rendering.js +20 -8
- package/lib/esm/ui/constants.d.ts +1 -0
- package/lib/esm/ui/constants.js +2 -1
- package/lib/esm/ui/decorators.d.ts +30 -0
- package/lib/esm/ui/decorators.js +33 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/ui/Rendering.cjs +20 -8
- package/lib/ui/constants.cjs +2 -1
- package/lib/ui/constants.d.ts +1 -0
- package/lib/ui/decorators.cjs +34 -1
- package/lib/ui/decorators.d.ts +30 -0
- package/package.json +1 -1
package/lib/esm/index.d.ts
CHANGED
package/lib/esm/index.js
CHANGED
|
@@ -13,5 +13,5 @@ export * from "./ui/index.js";
|
|
|
13
13
|
* @const VERSION
|
|
14
14
|
* @memberOf module:ui-decorators
|
|
15
15
|
*/
|
|
16
|
-
export const VERSION = "0.5.
|
|
16
|
+
export const VERSION = "0.5.24";
|
|
17
17
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsaUNBQXdCO0FBQ3hCLDhCQUFxQjtBQUVyQjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBVSSBkZWNvcmF0b3JzIG1vZHVsZSBmb3IgVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnNcbiAqIEBzdW1tYXJ5IEEgY29sbGVjdGlvbiBvZiBkZWNvcmF0b3JzIGFuZCB1dGlsaXRpZXMgZm9yIGJ1aWxkaW5nIFVJIGNvbXBvbmVudHMgaW4gVHlwZVNjcmlwdCBhcHBsaWNhdGlvbnMuXG4gKiBUaGlzIG1vZHVsZSBleHBvcnRzIGZ1bmN0aW9uYWxpdHkgZnJvbSBib3RoIHRoZSBtb2RlbCBhbmQgVUkgc3VibW9kdWxlcywgcHJvdmlkaW5nIGRlY29yYXRvcnMgZm9yXG4gKiByZW5kZXJpbmcsIGNvbXBvbmVudCBkZWZpbml0aW9uLCBhbmQgVUkgc3RhdGUgbWFuYWdlbWVudC5cbiAqIEBtb2R1bGUgdWktZGVjb3JhdG9yc1xuICovXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91aVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDdXJyZW50IHBhY2thZ2UgdmVyc2lvbiBzdHJpbmdcbiAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgY3VycmVudCBwYWNrYWdlIHZlcnNpb24gZm9yIHJlZmVyZW5jZVxuICogQGNvbnN0IFZFUlNJT05cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiIyNWRVJTSU9OIyNcIjtcbiJdfQ==
|
package/lib/esm/ui/Rendering.js
CHANGED
|
@@ -195,7 +195,7 @@ export class RenderingEngine {
|
|
|
195
195
|
if (types?.length > 1)
|
|
196
196
|
throw new RenderingError(`Only one type of decoration is allowed. Please choose between @uiprop, @uichild or @uielement`);
|
|
197
197
|
decs.shift();
|
|
198
|
-
const sorted = decs.sort((a
|
|
198
|
+
const sorted = decs.sort((a) => {
|
|
199
199
|
return a.key === UIKeys.ELEMENT ? -1 : 1;
|
|
200
200
|
});
|
|
201
201
|
sorted.forEach((dec) => {
|
|
@@ -242,6 +242,7 @@ export class RenderingEngine {
|
|
|
242
242
|
break;
|
|
243
243
|
}
|
|
244
244
|
case UIKeys.HIDDEN:
|
|
245
|
+
case UIKeys.ORDER:
|
|
245
246
|
case UIKeys.ELEMENT: {
|
|
246
247
|
children = children || [];
|
|
247
248
|
const uiProps = dec.props;
|
|
@@ -249,9 +250,8 @@ export class RenderingEngine {
|
|
|
249
250
|
path: getPath(globalProps?.childOf, uiProps.props.name),
|
|
250
251
|
childOf: undefined, // The childOf prop is passed by globalProps when it is a nested prop
|
|
251
252
|
} : {}), globalProps);
|
|
252
|
-
const tag = uiProps.tag || childProps?.tag;
|
|
253
253
|
const childDefinition = {
|
|
254
|
-
tag,
|
|
254
|
+
tag: uiProps.tag || childProps?.tag || tag || "",
|
|
255
255
|
props,
|
|
256
256
|
};
|
|
257
257
|
if (dec.key === UIKeys.ELEMENT) {
|
|
@@ -277,8 +277,8 @@ export class RenderingEngine {
|
|
|
277
277
|
childDefinition.props.value = formatByType(childDefinition.props[UIKeys.TYPE], model[key], childDefinition.props[UIKeys.FORMAT]);
|
|
278
278
|
children.push(childDefinition);
|
|
279
279
|
}
|
|
280
|
-
|
|
281
|
-
const child = children.find(c => c.props?.name === key);
|
|
280
|
+
else {
|
|
281
|
+
const child = children.find(c => c.props?.name === key || dec.props?.name === c.props?.childOf);
|
|
282
282
|
if (child) {
|
|
283
283
|
child.props = Object.assign({}, child.props, { [dec.key]: uiProps });
|
|
284
284
|
}
|
|
@@ -299,12 +299,24 @@ export class RenderingEngine {
|
|
|
299
299
|
globalProps = Object.assign({}, props, globalProps, {
|
|
300
300
|
handlers: handlers || {},
|
|
301
301
|
});
|
|
302
|
+
children = ((Object.keys(uiDecorators)?.length && children?.length) ?
|
|
303
|
+
this.getLayoutItems(children, uiDecorators) : children);
|
|
304
|
+
const operation = globalProps?.operation;
|
|
305
|
+
children = children?.sort((a, b) => ((a?.props?.order ?? 0) - (b?.props?.order ?? 0)))
|
|
306
|
+
.filter((item) => {
|
|
307
|
+
if (item.tag) {
|
|
308
|
+
const hiddenOn = (item?.props?.hidden || []);
|
|
309
|
+
if (!hiddenOn?.length)
|
|
310
|
+
return item;
|
|
311
|
+
if (!hiddenOn.includes(operation))
|
|
312
|
+
return item;
|
|
313
|
+
}
|
|
314
|
+
});
|
|
302
315
|
const result = {
|
|
303
316
|
tag: tag,
|
|
304
317
|
item: childProps,
|
|
305
318
|
props: globalProps,
|
|
306
|
-
children:
|
|
307
|
-
this.getLayoutItems(children, uiDecorators) : children),
|
|
319
|
+
children: children,
|
|
308
320
|
};
|
|
309
321
|
if (generateId)
|
|
310
322
|
result.rendererId = generateUIModelID(model);
|
|
@@ -433,4 +445,4 @@ export class RenderingEngine {
|
|
|
433
445
|
return `${UIKeys.REFLECT}${key}`;
|
|
434
446
|
}
|
|
435
447
|
}
|
|
436
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVuZGVyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VpL1JlbmRlcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUVMLEtBQUssRUFFTCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUNOLHNCQUFzQixFQUN0QixpQkFBaUIsR0FDbEIsdUJBQW9CO0FBV3JCLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQWlCO0FBQzFDLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxtQkFBZ0I7QUFFMUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFnQixlQUFlO0lBQ25DOzs7O09BSUc7YUFDWSxVQUFLLEdBSWhCLEVBQUUsQUFKYyxDQUliO0lBZ0JQLFlBQStCLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBTDlDOztXQUVHO1FBQ08sZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHckMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsT0FBTywwQkFBMEIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFhRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxDQUFDLEdBQVcsRUFBRSxTQUFrQixJQUFJO1FBQzNDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNaLEtBQUssY0FBYyxDQUFDLE1BQU07b0JBQ3hCLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztnQkFDOUIsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUMzQixLQUFL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LEdBQVc7UUFDcEIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBNb2RlbCxcbiAgTW9kZWxDb25zdHJ1Y3RvcixcbiAgUmVzZXJ2ZWRNb2RlbHMsXG4gIFZhbGlkYXRpb25LZXlzLFxuICBWYWxpZGF0aW9uTWV0YWRhdGEsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIEhUTUw1RGF0ZUZvcm1hdCxcbiAgSFRNTDVJbnB1dFR5cGVzLFxuICBVSUtleXMsXG4gIFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUsXG4gIFZhbGlkYXRhYmxlQnlUeXBlLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIEZpZWxkRGVmaW5pdGlvbixcbiAgRmllbGRQcm9wZXJ0aWVzLFxuICBVSUNsYXNzTWV0YWRhdGEsXG4gIFVJRWxlbWVudE1ldGFkYXRhLFxuICBVSUxheW91dEl0ZW1NZXRhZGF0YSxcbiAgVUlMaXN0SXRlbUVsZW1lbnRNZXRhZGF0YSxcbiAgVUlNb2RlbE1ldGFkYXRhLFxuICBVSVByb3BNZXRhZGF0YSxcbn0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IFJlbmRlcmluZ0Vycm9yIH0gZnJvbSBcIi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBEZWNvcmF0b3JNZXRhZGF0YSwgUmVmbGVjdGlvbiB9IGZyb20gXCJAZGVjYWYtdHMvcmVmbGVjdGlvblwiO1xuaW1wb3J0IHsgZm9ybWF0QnlUeXBlLCBnZW5lcmF0ZVVJTW9kZWxJRCB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFic3RyYWN0IGNsYXNzIGZvciByZW5kZXJpbmcgVUkgY29tcG9uZW50cyBiYXNlZCBvbiBtb2RlbCBtZXRhZGF0YS5cbiAqIEBzdW1tYXJ5IFRoZSBSZW5kZXJpbmdFbmdpbmUgY2xhc3MgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIGNvbnZlcnRpbmcgbW9kZWwgbWV0YWRhdGEgaW50byBVSSBmaWVsZCBkZWZpbml0aW9ucy5cbiAqIEl0IGhhbmRsZXMgdGhlIHRyYW5zbGF0aW9uIG9mIG1vZGVsIHByb3BlcnRpZXMgdG8gVUkgZWxlbWVudHMsIGFwcGxpZXMgdmFsaWRhdGlvbiBydWxlcywgYW5kIG1hbmFnZXMgZGlmZmVyZW50IHJlbmRlcmluZyBmbGF2b3JzLlxuICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBiZSBleHRlbmRlZCBieSBzcGVjaWZpYyByZW5kZXJpbmcgaW1wbGVtZW50YXRpb25zLlxuICpcbiAqIEB0ZW1wbGF0ZSBUIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJpbmcgcmVzdWx0LCBkZWZhdWx0cyB0byB2b2lkXG4gKiBAdGVtcGxhdGUgUiBUaGUgdHlwZSBvZiB0aGUgZmllbGQgZGVmaW5pdGlvbiwgZGVmYXVsdHMgdG8gRmllbGREZWZpbml0aW9uPFQ+XG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGZsYXZvdXIgLSBUaGUgZmxhdm9yIG9mIHRoZSByZW5kZXJpbmcgZW5naW5lLlxuICpcbiAqIEBjbGFzcyBSZW5kZXJpbmdFbmdpbmVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlbmRlcmluZ0VuZ2luZTxUID0gdm9pZCwgUiA9IEZpZWxkRGVmaW5pdGlvbjxUPj4ge1xuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENhY2hlIGZvciBzdG9yaW5nIHJlbmRlcmluZyBlbmdpbmUgaW5zdGFuY2VzIG9yIGNvbnN0cnVjdG9ycy5cbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGU6IFJlY29yZDxcbiAgICBzdHJpbmcsXG4gICAgfCBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU8dW5rbm93biwgdW5rbm93bj4+XG4gICAgfCBSZW5kZXJpbmdFbmdpbmU8dW5rbm93biwgdW5rbm93bj5cbiAgPiA9IHt9O1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGN1cnJlbnRseSBhY3RpdmUgcmVuZGVyaW5nIGVuZ2luZS5cbiAgICogQHByaXZhdGVcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgY3VycmVudDpcbiAgICB8IENvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZTx1bmtub3duLCB1bmtub3duPj5cbiAgICB8IFJlbmRlcmluZ0VuZ2luZTx1bmtub3duLCB1bmtub3duPjtcblxuICAvKipcbiAgICogRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHJlbmRlcmluZyBlbmdpbmUgaGFzIGJlZW4gaW5pdGlhbGl6ZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgaW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocmVhZG9ubHkgZmxhdm91cjogc3RyaW5nKSB7XG4gICAgUmVuZGVyaW5nRW5naW5lLnJlZ2lzdGVyKHRoaXMpO1xuICAgIGNvbnNvbGUubG9nKGBkZWNhZidzICR7Zmxhdm91cn0gcmVuZGVyaW5nIGVuZ2luZSBsb2FkZWRgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSW5pdGlhbGl6ZXMgdGhlIHJlbmRlcmluZyBlbmdpbmUuXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIGZvciBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYy5cbiAgICpcbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyBuZWVkZWQgZm9yIGluaXRpYWxpemF0aW9uLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBpbml0aWFsaXphdGlvbiBpcyBjb21wbGV0ZS5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqL1xuICBhYnN0cmFjdCBpbml0aWFsaXplKC4uLmFyZ3M6IGFueVtdKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRyYW5zbGF0ZXMgYmV0d2VlbiBtb2RlbCB0eXBlcyBhbmQgSFRNTCBpbnB1dCB0eXBlcy5cbiAgICogQHN1bW1hcnkgQ29udmVydHMgbW9kZWwgZGF0YSB0eXBlcyB0byBhcHByb3ByaWF0ZSBIVE1MIGlucHV0IHR5cGVzIGFuZCB2aWNlIHZlcnNhLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB0byB0cmFuc2xhdGUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RvVmlldz10cnVlXSAtIERpcmVjdGlvbiBvZiB0cmFuc2xhdGlvbiAodHJ1ZSBmb3IgbW9kZWwgdG8gdmlldywgZmFsc2UgZm9yIHZpZXcgdG8gbW9kZWwpLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdHJhbnNsYXRlZCB0eXBlLlxuICAgKi9cbiAgdHJhbnNsYXRlKGtleTogc3RyaW5nLCB0b1ZpZXc6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAodG9WaWV3KSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIFJlc2VydmVkTW9kZWxzLlNUUklORzpcbiAgICAgICAgICByZXR1cm4gSFRNTDVJbnB1dFR5cGVzLlRFWFQ7XG4gICAgICAgIGNhc2UgUmVzZXJ2ZWRNb2RlbHMuTlVNQkVSOlxuICAgICAgICBjYXNlIFJlc2VydmVkTW9kZWxzLkJJR0lOVDpcbiAgICAgICAgICByZXR1cm4gSFRNTDVJbnB1dFR5cGVzLk5VTUJFUjtcbiAgICAgICAgY2FzZSBSZXNlcnZlZE1vZGVscy5CT09MRUFOOlxuICAgICAgICAgIHJldHVybiBIVE1MNUlucHV0VHlwZXMuQ0hFQ0tCT1g7XG4gICAgICAgIGNhc2UgUmVzZXJ2ZWRNb2RlbHMuREFURTpcbiAgICAgICAgICByZXR1cm4gSFRNTDVJbnB1dFR5cGVzLkRBVEU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlNFTEVDVDpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuVEVYVDpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuRU1BSUw6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkNPTE9SOlxuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5QQVNTV09SRDpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuVEVMOlxuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5VUkw6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlNFQVJDSDpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuSElEREVOOlxuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5URVhUQVJFQTpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuUkFESU86XG4gICAgICAgICAgcmV0dXJuIFJlc2VydmVkTW9kZWxzLlNUUklORztcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuTlVNQkVSOlxuICAgICAgICAgIHJldHVybiBSZXNlcnZlZE1vZGVscy5OVU1CRVI7XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YOiBcbiAgICAgICAgICByZXR1cm4gUmVzZXJ2ZWRNb2RlbHMuQk9PTEVBTjtcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuREFURTpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuREFURVRJTUVfTE9DQUw6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlRJTUU6XG4gICAgICAgICAgcmV0dXJuIFJlc2VydmVkTW9kZWxzLkRBVEU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBjbGFzcyBkZWNvcmF0b3IgbWV0YWRhdGEgZm9yIGEgbW9kZWwgaW5zdGFuY2VcbiAgICogQHN1bW1hcnkgRXh0cmFjdHMgVUktcmVsYXRlZCBjbGFzcyBkZWNvcmF0b3JzIGZyb20gYSBtb2RlbCBhbmQgcmV0dXJucyB0aGVtIGFzIGFuIGFycmF5XG4gICAqIFRoaXMgbWV0aG9kIGNvbGxlY3RzIG1ldGFkYXRhIGZyb20gdmFyaW91cyBVSSBjbGFzcyBkZWNvcmF0b3JzIGluY2x1ZGluZyBAdWltb2RlbCxcbiAgICogQHVpbGlzdGl0ZW0sIEB1aWhhbmRsZXJzLCBhbmQgQHVpbGF5b3V0IGFwcGxpZWQgdG8gdGhlIG1vZGVsIGNsYXNzLlxuICAgKlxuICAgKiBAdGVtcGxhdGUgTSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIGV4dHJhY3QgbWV0YWRhdGEgZnJvbVxuICAgKiBAcmV0dXJucyB7VUlDbGFzc01ldGFkYXRhW119IEFycmF5IG9mIFVJIGNsYXNzIG1ldGFkYXRhIG9iamVjdHNcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgZ2V0Q2xhc3NEZWNvcmF0b3JzTWV0YWRhdGE8TSBleHRlbmRzIE1vZGVsPihtb2RlbDogTSk6IFVJQ2xhc3NNZXRhZGF0YVtdICB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTU9ERUwpLFxuICAgICAgICBtb2RlbC5jb25zdHJ1Y3RvclxuICAgICAgKSB8fFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlNT0RFTCksXG4gICAgICAgIE1vZGVsLmdldChtb2RlbC5jb25zdHJ1Y3Rvci5uYW1lKSBhcyBhbnlcbiAgICAgICksXG4gICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICBSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5VSUxJU1RJVEVNKSxcbiAgICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICAgICkgfHxcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTElTVElURU0pLFxuICAgICAgICBNb2RlbC5nZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSkgYXMgYW55XG4gICAgICApLFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuSEFORExFUlMpLFxuICAgICAgICBtb2RlbC5jb25zdHJ1Y3RvclxuICAgICAgKSB8fFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuSEFORExFUlMpLFxuICAgICAgICBNb2RlbC5nZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSkgYXMgYW55XG4gICAgICApLFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlMQVlPVVQpLFxuICAgICAgICBtb2RlbC5jb25zdHJ1Y3RvclxuICAgICAgKSB8fFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlMQVlPVVQpLFxuICAgICAgICBNb2RlbC5nZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSkgYXMgYW55XG4gICAgICApLFxuICAgIF0uZmlsdGVyKEJvb2xlYW4pOztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEgdHlwZSBpcyB2YWxpZGF0YWJsZSBieSBpdHMgbmF0dXJlLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gVUkga2V5IHJlcHJlc2VudHMgYSB0eXBlIHRoYXQgaXMgaW5oZXJlbnRseSB2YWxpZGF0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBVSSBrZXkgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB0eXBlIGlzIHZhbGlkYXRhYmxlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNWYWxpZGF0YWJsZUJ5VHlwZShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhWYWxpZGF0YWJsZUJ5VHlwZSkuaW5jbHVkZXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEgdHlwZSBpcyB2YWxpZGF0YWJsZSBieSBhdHRyaWJ1dGUuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgaWYgYSBnaXZlbiBVSSBrZXkgcmVwcmVzZW50cyBhIHZhbGlkYXRpb24gdGhhdCBjYW4gYmUgYXBwbGllZCBhcyBhbiBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgVUkga2V5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdHlwZSBpcyB2YWxpZGF0YWJsZSBieSBhdHRyaWJ1dGUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHByb3RlY3RlZCBpc1ZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVmFsaWRhdGFibGVCeUF0dHJpYnV0ZSkuaW5jbHVkZXMoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdmFsaWRhdGlvbiBtZXRhZGF0YSB0byBhbiBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdmFsaWRhdGlvbiBtZXRhZGF0YSBpbnRvIGEgdmFsdWUgc3VpdGFibGUgZm9yIHVzZSBhcyBhbiBIVE1MIGF0dHJpYnV0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSB2YWxpZGF0aW9uIGtleS5cbiAgICogQHBhcmFtIHtWYWxpZGF0aW9uTWV0YWRhdGF9IHZhbHVlIC0gVGhlIHZhbGlkYXRpb24gbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudW1iZXIgfCBib29sZWFufSBUaGUgY29udmVydGVkIGF0dHJpYnV0ZSB2YWx1ZS5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBnaXZlbiBrZXkgaXMgbm90IHZhbGlkYXRhYmxlIGJ5IGF0dHJpYnV0ZS5cbiAgICovXG4gIHByb3RlY3RlZCB0b0F0dHJpYnV0ZVZhbHVlKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHZhbHVlOiBWYWxpZGF0aW9uTWV0YWRhdGFcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB7XG4gICAgaWYgKCFPYmplY3Qua2V5cyhWYWxpZGF0YWJsZUJ5QXR0cmlidXRlKS5pbmNsdWRlcyhrZXkpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBhdHRyaWJ1dGUga2V5IFwiJHtrZXl9XCIuIEV4cGVjdGVkIG9uZSBvZjogJHtPYmplY3Qua2V5cyhWYWxpZGF0YWJsZUJ5QXR0cmlidXRlKS5qb2luKFwiLCBcIil9LmBcbiAgICAgICk7XG5cbiAgICByZXR1cm4ga2V5ID09PSBVSUtleXMuUkVRVUlSRUQgPyB0cnVlIDogdmFsdWVba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBtb2RlbCB0byBhIGZpZWxkIGRlZmluaXRpb24uXG4gICAqIEBzdW1tYXJ5IFByb2Nlc3NlcyBhIG1vZGVsIGluc3RhbmNlLCBleHRyYWN0aW5nIFVJLXJlbGF0ZWQgbWV0YWRhdGEgYW5kIHZhbGlkYXRpb24gcnVsZXMgdG8gY3JlYXRlIGEgZmllbGQgZGVmaW5pdGlvbi5cbiAgICpcbiAgICogQHRlbXBsYXRlIE0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHRlbXBsYXRlIFQgVHlwZSByZWZlcmVuY2luZyB0aGUgc3BlY2lmaWMgUmVuZGVyaW5nIGVuZ2luZSBmaWVsZCBwcm9wZXJ0aWVzL2lucHV0c1xuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIGluc3RhbmNlIHRvIGNvbnZlcnQuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IFtnbG9iYWxQcm9wcz17fV0gLSBHbG9iYWwgcHJvcGVydGllcyB0byBhcHBseSB0byBhbGwgY2hpbGQgZWxlbWVudHMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2dlbmVyYXRlSWQ9dHJ1ZV0gLSBGbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBwb3B1bGF0ZSB0aGUgcmVuZGVyZXJJZCBwcm9wZXJ0eS5cbiAgICogQHJldHVybnMge0ZpZWxkRGVmaW5pdGlvbjxUPn0gQSBmaWVsZCBkZWZpbml0aW9uIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIFVJIHN0cnVjdHVyZSBvZiB0aGUgbW9kZWwuXG4gICAqIEB0aHJvd3Mge1JlbmRlcmluZ0Vycm9yfSBJZiBubyBVSSBkZWZpbml0aW9ucyBhcmUgc2V0IGZvciB0aGUgbW9kZWwgb3IgaWYgdGhlcmUgYXJlIGludmFsaWQgZGVjb3JhdG9ycy5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICBwYXJ0aWNpcGFudCBDIGFzIENsaWVudFxuICAgKiAgcGFydGljaXBhbnQgUkUgYXMgUmVuZGVyaW5nRW5naW5lXG4gICAqICBwYXJ0aWNpcGFudCBSIGFzIFJlZmxlY3Rpb25cbiAgICogIHBhcnRpY2lwYW50IE0gYXMgTW9kZWxcbiAgICogIEMtPj5SRTogdG9GaWVsZERlZmluaXRpb24obW9kZWwsIGdsb2JhbFByb3BzKVxuICAgKiAgUkUtPj5SOiBnZXRNZXRhZGF0YShVSUtleXMuVUlNT0RFTCwgbW9kZWwuY29uc3RydWN0b3IpXG4gICAqICBSLS0+PlJFOiBVSU1vZGVsTWV0YWRhdGFcbiAgICogIFJFLT4+UjogZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzKG1vZGVsLCBVSUtleXMuUkVGTEVDVClcbiAgICogIFItLT4+UkU6IFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhW10+XG4gICAqICBSRS0+PlI6IGdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhtb2RlbCwgVmFsaWRhdGlvbktleXMuUkVGTEVDVClcbiAgICogIFItLT4+UkU6IFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT5bXT5cbiAgICogIGxvb3AgRm9yIGVhY2ggcHJvcGVydHlcbiAgICogICAgUkUtPj5SRTogUHJvY2VzcyBVSSBkZWNvcmF0b3JzXG4gICAqICAgIFJFLT4+UkU6IEFwcGx5IHZhbGlkYXRpb24gcnVsZXNcbiAgICogIGVuZFxuICAgKiAgUkUtLT4+QzogRmllbGREZWZpbml0aW9uPFQ+XG4gICAqL1xuICBwcm90ZWN0ZWQgdG9GaWVsZERlZmluaXRpb248TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogTSxcbiAgICBnbG9iYWxQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbiAgICBnZW5lcmF0ZUlkOiBib29sZWFuID0gdHJ1ZVxuICApOiBGaWVsZERlZmluaXRpb248VD4ge1xuICAgIFxuICAgIGNvbnN0IHsgaW5oZXJpdFByb3BzLCAuLi5nbG9iYWxQcm9wc1dpdGhvdXRJbmhlcml0cyB9ID0gZ2xvYmFsUHJvcHM7XG4gICAgZ2xvYmFsUHJvcHMgPSBnbG9iYWxQcm9wc1dpdGhvdXRJbmhlcml0cztcblxuICAgIGNvbnN0IGNsYXNzRGVjb3JhdG9ycyA9IHRoaXMuZ2V0Q2xhc3NEZWNvcmF0b3JzTWV0YWRhdGE8TT4obW9kZWwpO1xuXG4gICAgaWYgKCFjbGFzc0RlY29yYXRvcnMubGVuZ3RoKVxuICAgICAgdGhyb3cgbmV3IFJlbmRlcmluZ0Vycm9yKFxuICAgICAgICBgTm8gdWkgZGVmaW5pdGlvbnMgc2V0IGZvciBtb2RlbCAke21vZGVsLmNvbnN0cnVjdG9yLm5hbWV9LiBEaWQgeW91IHVzZSBAdWltb2RlbD9gXG4gICAgICApO1xuXG4gICAgY29uc3QgY2xhc3NEZWNvcmF0b3IgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICAuLi5jbGFzc0RlY29yYXRvcnMsXG4gICAgICBpbmhlcml0UHJvcHMgPyBpbmhlcml0UHJvcHMgOiB7fSAvLyBvdmVycmlkZSB0YWcgYW5kIHByb3BlcnRpZXMgd2hlbiBpdCBpcyBhIGNvbXBvbmVudCB0aGF0IHNob3VsZCBpbmhlcml0IHByb3BlcnRpZXMgZnJvbSBpdHMgcGFyZW50LlxuICAgICk7XG4gICAgY29uc3QgeyB0YWcsIHByb3BzLCBpdGVtLCBoYW5kbGVycyB9ID0gY2xhc3NEZWNvcmF0b3I7XG5cbiAgICBjb25zdCB1aURlY29yYXRvcnM6IFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhW10+ID1cbiAgICAgIFJlZmxlY3Rpb24uZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzKG1vZGVsLCBVSUtleXMuUkVGTEVDVCkgYXMgUmVjb3JkPFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIERlY29yYXRvck1ldGFkYXRhW11cbiAgICAgID47XG4gICAgbGV0IGNoaWxkcmVuOiBGaWVsZERlZmluaXRpb248UmVjb3JkPHN0cmluZywgYW55Pj5bXSB8IHVuZGVmaW5lZDtcbiAgICBsZXQgY2hpbGRQcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IGl0ZW0/LnByb3BzIHx8IHt9O1xuICAgIGxldCBtYXBwZXI6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBjb25zdCBnZXRQYXRoID0gKHBhcmVudDogc3RyaW5nIHwgdW5kZWZpbmVkLCBwcm9wOiBzdHJpbmcpID0+IHtcbiAgICAgIHJldHVybiBwYXJlbnQgPyBbcGFyZW50LCBwcm9wXS5qb2luKFwiLlwiKSA6IHByb3A7XG4gICAgfTtcblxuICAgIGlmICh1aURlY29yYXRvcnMpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25EZWNvcmF0b3JzOiBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgRGVjb3JhdG9yTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPltdXG4gICAgICA+ID0gUmVmbGVjdGlvbi5nZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMoXG4gICAgICAgIG1vZGVsLFxuICAgICAgICBWYWxpZGF0aW9uS2V5cy5SRUZMRUNUXG4gICAgICApIGFzIFJlY29yZDxzdHJpbmcsIERlY29yYXRvck1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT5bXT47XG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiB1aURlY29yYXRvcnMpIHtcbiAgICAgICAgY29uc3QgZGVjcyA9IHVpRGVjb3JhdG9yc1trZXldO1xuICAgICAgICBjb25zdCB0eXBlcyA9IE9iamVjdC52YWx1ZXMoZGVjcykuZmlsdGVyKCh7a2V5fSkgPT4gW1VJS2V5cy5QUk9QLCBVSUtleXMuRUxFTUVOVCwgVUlLZXlzLkNISUxEXS5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgaWYgKHR5cGVzPy5sZW5ndGggPiAxKVxuICAgICAgICAgIHRocm93IG5ldyBSZW5kZXJpbmdFcnJvcihcbiAgICAgICAgICAgIGBPbmx5IG9uZSB0eXBlIG9mIGRlY29yYXRpb24gaXMgYWxsb3dlZC4gUGxlYXNlIGNob29zZSBiZXR3ZWVuIEB1aXByb3AsIEB1aWNoaWxkIG9yIEB1aWVsZW1lbnRgXG4gICAgICAgICAgKTtcbiAgICAgICAgZGVjcy5zaGlmdCgpO1xuICAgICAgICBjb25zdCBzb3J0ZWQgPSBkZWNzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICByZXR1cm4gYS5rZXkgPT09IFVJS2V5cy5FTEVNRU5UID8gLTEgOiAxO1xuICAgICAgICB9KTtcbiAgICAgICAgc29ydGVkLmZvckVhY2goKGRlYykgPT4ge1xuICAgICAgICAgIGlmICghZGVjKSB0aHJvdyBuZXcgUmVuZGVyaW5nRXJyb3IoYE5vIGRlY29yYXRvciBmb3VuZGApO1xuXG4gICAgICAgICAgc3dpdGNoIChkZWMua2V5KSB7XG4gICAgICAgICAgICBjYXNlIFVJS2V5cy5QUk9QOiB7XG4gICAgICAgICAgICAgIGNoaWxkUHJvcHNba2V5XSA9IGRlYy5wcm9wcyBhcyBVSVByb3BNZXRhZGF0YTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFVJS2V5cy5DSElMRDoge1xuICAgICAgICAgICAgICBpZiAoIU1vZGVsLmlzUHJvcGVydHlNb2RlbChtb2RlbCwga2V5KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVuZGVyaW5nRXJyb3IoYENoaWxkIFwiJHtrZXl9XCIgbXVzdCBiZSBhIG1vZGVsLmApO1xuXG4gICAgICAgICAgICAgIGxldCBDbGF6ejtcbiAgICAgICAgICAgICAgY29uc3Qgc3VibW9kZWwgPSAobW9kZWwgYXMgUmVjb3JkPHN0cmluZywgYW55Pilba2V5XSBhcyBNb2RlbDtcbiAgICAgICAgICAgICAgY29uc3QgY29uc3RydWN0YWJsZSA9XG4gICAgICAgICAgICAgICAgdHlwZW9mIHN1Ym1vZGVsID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgc3VibW9kZWwgIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAhQXJyYXkuaXNBcnJheShzdWJtb2RlbCk7XG4gICAgICAgICAgICAgIC8vIGNyZWF0ZSBpbnN0YW5jZSBpZiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgaWYgKCFjb25zdHJ1Y3RhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xhenpOYW1lID0gKGRlYy5wcm9wcy5wcm9wcyBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KVxuICAgICAgICAgICAgICAgICAgPy5uYW1lIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICBDbGF6eiA9IG5ldyAoTW9kZWwuZ2V0KGNsYXp6TmFtZSkgYXMgTW9kZWxDb25zdHJ1Y3RvcjxNb2RlbD4pKCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZHJlbkdsb2JhbFByb3BzID0gT2JqZWN0LmFzc2lnbih7fSwgZ2xvYmFsUHJvcHMgfHwge30sIHtcIm1vZGVsXCI6IENsYXp6fSAse1xuICAgICAgICAgICAgICAgIGluaGVyaXRQcm9wczogZGVjLnByb3BzIGFzIFVJTW9kZWxNZXRhZGF0YSxcbiAgICAgICAgICAgICAgICBjaGlsZE9mOiBnZXRQYXRoKGdsb2JhbFByb3BzPy5jaGlsZE9mIGFzIHN0cmluZywga2V5KSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGVmaW5pdGlvbiA9IHRoaXMudG9GaWVsZERlZmluaXRpb24oXG4gICAgICAgICAgICAgICAgc3VibW9kZWwgfHwgQ2xhenosIC8vIE11c3QgYXZvaWQgdW5kZWZpbmVkIHZhbHVlcyDigJQgYW4gaW5zdGFuY2UgaXMgcmVxdWlyZWQgdG8gcmV0cmlldmUgcHJvcGVydGllcy5cbiAgICAgICAgICAgICAgICBjaGlsZHJlbkdsb2JhbFByb3BzLFxuICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goXG4gICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uIGFzIEZpZWxkRGVmaW5pdGlvbjxSZWNvcmQ8c3RyaW5nLCBhbnk+PlxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVUlLZXlzLlVJTElTVFBST1A6IHtcbiAgICAgICAgICAgICAgbWFwcGVyID0gbWFwcGVyIHx8IHt9O1xuICAgICAgICAgICAgICBpZihkZWMucHJvcHM/Lm5hbWUpXG4gICAgICAgICAgICAgICAgbWFwcGVyW2RlYy5wcm9wcz8ubmFtZSBhcyBzdHJpbmddID0ga2V5O1xuICAgICAgICAgICAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgY2xhc3NEZWNvcmF0b3IucHJvcHM/Lml0ZW0gfHwge30sXG4gICAgICAgICAgICAgICAgaXRlbT8ucHJvcHMgfHwge30sXG4gICAgICAgICAgICAgICAgZGVjLnByb3BzPy5wcm9wcyB8fCB7fSxcbiAgICAgICAgICAgICAgICBnbG9iYWxQcm9wc1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjaGlsZFByb3BzID0ge1xuICAgICAgICAgICAgICAgIHRhZzogaXRlbT8udGFnIHx8IHByb3BzLnJlbmRlciB8fCBcIlwiLFxuICAgICAgICAgICAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAge30sIFxuICAgICAgICAgICAgICAgICAgY2hpbGRQcm9wcz8ucHJvcHMsIFxuICAgICAgICAgICAgICAgICAgeyBtYXBwZXIgfSwgXG4gICAgICAgICAgICAgICAgICBwcm9wcyksXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFVJS2V5cy5ISURERU46IFxuICAgICAgICAgICAgY2FzZSBVSUtleXMuRUxFTUVOVDoge1xuICAgICAgICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgICAgICAgICAgICBjb25zdCB1aVByb3BzOiBVSUVsZW1lbnRNZXRhZGF0YSA9IGRlYy5wcm9wcyBhcyBVSUVsZW1lbnRNZXRhZGF0YTtcbiAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICBjaGlsZFByb3BzPy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgIHVpUHJvcHMucHJvcHMgfHwge30sXG4gICAgICAgICAgICAgICAgICAodWlQcm9wcz8ucHJvcHM/Lm5hbWUgPyB7XG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGdldFBhdGgoXG4gICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsUHJvcHM/LmNoaWxkT2YgYXMgc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgIHVpUHJvcHMucHJvcHMhLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRPZjogdW5kZWZpbmVkLCAvLyBUaGUgY2hpbGRPZiBwcm9wIGlzIHBhc3NlZCBieSBnbG9iYWxQcm9wcyB3aGVuIGl0IGlzIGEgbmVzdGVkIHByb3BcbiAgICAgICAgICAgICAgICAgIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgICBnbG9iYWxQcm9wc1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFnID0gdWlQcm9wcy50YWcgfHwgY2hpbGRQcm9wcz8udGFnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGVmaW5pdGlvbjogRmllbGREZWZpbml0aW9uPFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICAgICAgICAgICAgICAgICAgdGFnLFxuICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYoZGVjLmtleSA9PT0gVUlLZXlzLkVMRU1FTlQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uRGVjcyA9IHZhbGlkYXRpb25EZWNvcmF0b3JzW2tleV0gYXMgRGVjb3JhdG9yTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPltdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVEZWMgPSB2YWxpZGF0aW9uRGVjcy5zaGlmdCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGVjIG9mIHZhbGlkYXRpb25EZWNzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUoZGVjLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW3RoaXMudHJhbnNsYXRlKGRlYy5rZXkpXSA9IHRoaXMudG9BdHRyaWJ1dGVWYWx1ZShkZWMua2V5LCBkZWMucHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGFibGVCeVR5cGUoZGVjLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlYy5rZXkgPT09IEhUTUw1SW5wdXRUeXBlcy5EQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5GT1JNQVRdID0gZGVjLnByb3BzLmZvcm1hdCB8fCBIVE1MNURhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5UWVBFXSA9IGRlYy5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5UWVBFXSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNUeXBlID0gKHR5cGVEZWMucHJvcHMgYXMgeyBuYW1lOiBzdHJpbmcgfSkubmFtZTtcbiAgICAgICAgICAgICAgICAgIGNoaWxkRGVmaW5pdGlvbi5wcm9wc1tVSUtleXMuVFlQRV0gPSB0aGlzLnRyYW5zbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgYmFzaWNUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzLnZhbHVlID0gZm9ybWF0QnlUeXBlKFxuICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5UWVBFXSxcbiAgICAgICAgICAgICAgICAgIG1vZGVsW2tleSBhcyBrZXlvZiBNXSxcbiAgICAgICAgICAgICAgICAgIGNoaWxkRGVmaW5pdGlvbi5wcm9wc1tVSUtleXMuRk9STUFUXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZERlZmluaXRpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmKGRlYy5rZXkgPT09IFVJS2V5cy5ISURERU4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuLmZpbmQoYyA9PiBjLnByb3BzPy5uYW1lID09PSBrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgY2hpbGQucHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBjaGlsZC5wcm9wcywgeyBbZGVjLmtleV06IHVpUHJvcHMgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGREZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFVJS2V5cy5VSUxBWU9VVElURU06IFxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVuZGVyaW5nRXJyb3IoYEludmFsaWQga2V5OiAke2RlYy5rZXl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnbG9iYWxQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BzLCBnbG9iYWxQcm9wcywge1xuICAgICAgaGFuZGxlcnM6IGhhbmRsZXJzIHx8IHt9LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdDogRmllbGREZWZpbml0aW9uPFQ+ID0ge1xuICAgICAgdGFnOiB0YWcsXG4gICAgICBpdGVtOiBjaGlsZFByb3BzIGFzIFVJTGlzdEl0ZW1FbGVtZW50TWV0YWRhdGEsXG4gICAgICBwcm9wczogZ2xvYmFsUHJvcHMgYXMgVCAmIEZpZWxkUHJvcGVydGllcyxcbiAgICAgIGNoaWxkcmVuOiAoKE9iamVjdC5rZXlzKHVpRGVjb3JhdG9ycyk/Lmxlbmd0aCAmJiBjaGlsZHJlbj8ubGVuZ3RoKSA/IFxuICAgICAgICB0aGlzLmdldExheW91dEl0ZW1zKGNoaWxkcmVuLCB1aURlY29yYXRvcnMpIDogY2hpbGRyZW4pLFxuICAgIFxuICAgIH07XG5cbiAgICBpZiAoZ2VuZXJhdGVJZCkgcmVzdWx0LnJlbmRlcmVySWQgPSBnZW5lcmF0ZVVJTW9kZWxJRChtb2RlbCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUHJvY2Vzc2VzIGxheW91dCBpdGVtcyBmb3IgZ3JpZCBwb3NpdGlvbmluZ1xuICAgKiBAc3VtbWFyeSBNYXBzIGNoaWxkIGZpZWxkIGRlZmluaXRpb25zIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgbGF5b3V0IHBvc2l0aW9uc1xuICAgKiBUaGlzIG1ldGhvZCBpdGVyYXRlcyB0aHJvdWdoIGNoaWxkIGZpZWxkIGRlZmluaXRpb25zIGFuZCBhcHBsaWVzIGxheW91dCBtZXRhZGF0YVxuICAgKiBmcm9tIEB1aWxheW91dGl0ZW0gZGVjb3JhdG9ycyB0byBwb3NpdGlvbiB0aGVtIGNvcnJlY3RseSBpbiBhIGdyaWQgbGF5b3V0LlxuICAgKlxuICAgKiBAcGFyYW0ge0ZpZWxkRGVmaW5pdGlvbltdfSBjaGlsZHJlbiAtIEFycmF5IG9mIGNoaWxkIGZpZWxkIGRlZmluaXRpb25zIHRvIHByb2Nlc3NcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSB1aURlY29yYXRvcnMgLSBVSSBkZWNvcmF0b3IgbWV0YWRhdGEga2V5ZWQgYnkgcHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJucyB7RmllbGREZWZpbml0aW9uW119IEFycmF5IG9mIGZpZWxkIGRlZmluaXRpb25zIHdpdGggbGF5b3V0IHBvc2l0aW9uaW5nIGFwcGxpZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gSW50ZXJuYWwgdXNhZ2UgLSBwb3NpdGlvbnMgY2hpbGRyZW4gaW4gZ3JpZCBsYXlvdXRcbiAgICogY29uc3QgbGF5b3V0Q2hpbGRyZW4gPSB0aGlzLmdldExheW91dEl0ZW1zKGNoaWxkRGVmaW5pdGlvbnMsIGRlY29yYXRvck1ldGFkYXRhKTtcbiAgICovXG4gIGdldExheW91dEl0ZW1zKGNoaWxkcmVuOiBGaWVsZERlZmluaXRpb248YW55PltdLCB1aURlY29yYXRvcnM6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBGaWVsZERlZmluaXRpb248YW55PltdIHtcbiAgICByZXR1cm4gY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgbGV0IHVwZGF0ZWRDaGlsZCA9IGNoaWxkO1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdWlEZWNvcmF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGRlY3MgPSB1aURlY29yYXRvcnNba2V5XTtcbiAgICAgICAgZm9yIChjb25zdCBkZWMgb2YgZGVjcykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGRlYy5rZXkgPT09IFVJS2V5cy5VSUxBWU9VVElURU0gJiZcbiAgICAgICAgICAgIChkZWMucHJvcHM/Lm5hbWUgPT09IGNoaWxkLnByb3BzPy5uYW1lIHx8IGRlYy5wcm9wcz8ubmFtZSA9PT0gY2hpbGQucHJvcHM/LmNoaWxkT2YpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvbCwgcHJvcHMsIHJvdyB9ID0gZGVjLnByb3BzIGFzIFVJTGF5b3V0SXRlbU1ldGFkYXRhO1xuICAgICAgICAgICAgdXBkYXRlZENoaWxkID0ge1xuICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgLi4uY2hpbGQucHJvcHMsXG4gICAgICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlZENoaWxkO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW5kZXJzIGEgbW9kZWwgd2l0aCBnbG9iYWwgcHJvcGVydGllcyBhbmQgYWRkaXRpb25hbCBhcmd1bWVudHMuXG4gICAqIEBzdW1tYXJ5IEFic3RyYWN0IG1ldGhvZCB0byBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzIHRvIGRlZmluZSBzcGVjaWZpYyByZW5kZXJpbmcgYmVoYXZpb3IuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gICAqIEB0ZW1wbGF0ZSBSIFJlbmRlcmluZyBlbmdpbmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgb3V0cHV0IHR5cGVcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byBiZSByZW5kZXJlZC5cbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gZ2xvYmFsUHJvcHMgLSBHbG9iYWwgcHJvcGVydGllcyB0byBiZSBhcHBsaWVkIHRvIGFsbCBlbGVtZW50cyBkdXJpbmcgcmVuZGVyaW5nLlxuICAgKiBAcGFyYW0gey4uLmFueVtdfSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdGhhdCBtYXkgYmUgcmVxdWlyZWQgZm9yIHNwZWNpZmljIHJlbmRlcmluZyBpbXBsZW1lbnRhdGlvbnMuXG4gICAqIEByZXR1cm5zIHtSfSBUaGUgcmVuZGVyZWQgcmVzdWx0LCB0eXBlIGRlcGVuZHMgb24gdGhlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLlxuICAgKlxuICAgKiBAYWJzdHJhY3RcbiAgICovXG4gIGFic3RyYWN0IHJlbmRlcjxNIGV4dGVuZHMgTW9kZWw+KFxuICAgIG1vZGVsOiBNLFxuICAgIGdsb2JhbFByb3BzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApOiBSO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVnaXN0ZXJzIGEgcmVuZGVyaW5nIGVuZ2luZSBpbnN0YW5jZS5cbiAgICogQHN1bW1hcnkgQWRkcyBhIHJlbmRlcmluZyBlbmdpbmUgdG8gdGhlIHN0YXRpYyBjYWNoZSBhbmQgc2V0cyBpdCBhcyB0aGUgY3VycmVudCBlbmdpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVuZGVyaW5nRW5naW5lPHVua25vd24sIHVua25vd24+fSBlbmdpbmUgLSBUaGUgcmVuZGVyaW5nIGVuZ2luZSB0byByZWdpc3Rlci5cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgYW4gZW5naW5lIHdpdGggdGhlIHNhbWUgZmxhdm9yIGFscmVhZHkgZXhpc3RzLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXIoZW5naW5lOiBSZW5kZXJpbmdFbmdpbmU8dW5rbm93biwgdW5rbm93bj4pIHtcbiAgICBpZiAoZW5naW5lLmZsYXZvdXIgaW4gdGhpcy5jYWNoZSlcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgUmVuZGVyaW5nIGVuZ2luZSB1bmRlciAke2VuZ2luZS5mbGF2b3VyfSBhbHJlYWR5IGV4aXN0c2BcbiAgICAgICk7XG4gICAgdGhpcy5jYWNoZVtlbmdpbmUuZmxhdm91cl0gPSBlbmdpbmU7XG4gICAgdGhpcy5jdXJyZW50ID0gZW5naW5lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgaW5pdGlhbGl6ZXMgYSByZW5kZXJpbmcgZW5naW5lLlxuICAgKiBAc3VtbWFyeSBHZXRzIGFuIGV4aXN0aW5nIGVuZ2luZSBpbnN0YW5jZSBvciBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyBhIG5ldyBvbmUgaWYgZ2l2ZW4gYSBjb25zdHJ1Y3Rvci5cbiAgICpcbiAgICogQHRlbXBsYXRlIE8gVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmluZyBlbmdpbmUgb3V0cHV0XG4gICAqIEBwYXJhbSB7Q29uc3RydWN0b3I8UmVuZGVyaW5nRW5naW5lPE8+PiB8IFJlbmRlcmluZ0VuZ2luZTxPPn0gb2JqIC0gVGhlIGVuZ2luZSBpbnN0YW5jZSBvciBjb25zdHJ1Y3Rvci5cbiAgICogQHJldHVybnMge1JlbmRlcmluZ0VuZ2luZTxPPn0gVGhlIGluaXRpYWxpemVkIHJlbmRlcmluZyBlbmdpbmUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldE9yQm9vdDxPPihcbiAgICBvYmo6IENvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZTxPPj4gfCBSZW5kZXJpbmdFbmdpbmU8Tz5cbiAgKTogUmVuZGVyaW5nRW5naW5lPE8+IHtcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgUmVuZGVyaW5nRW5naW5lKSByZXR1cm4gb2JqIGFzIFJlbmRlcmluZ0VuZ2luZTxPPjtcbiAgICBjb25zdCBlbmdpbmU6IFJlbmRlcmluZ0VuZ2luZTxPPiA9IG5ldyBvYmooKTtcbiAgICBlbmdpbmUuaW5pdGlhbGl6ZSgpOyAvLyBtYWtlIHRoZSBib290aW5nIGFzeW5jLiB1c2UgdGhlIGluaXRpYWxpemVkIGZsYWcgdG8gY29udHJvbCBpdFxuICAgIHJldHVybiBlbmdpbmUgYXMgUmVuZGVyaW5nRW5naW5lPE8+O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSByZW5kZXJpbmcgZW5naW5lIGJ5IGZsYXZvci5cbiAgICogQHN1bW1hcnkgR2V0cyB0aGUgY3VycmVudCByZW5kZXJpbmcgZW5naW5lIG9yIGEgc3BlY2lmaWMgb25lIGJ5IGZsYXZvci5cbiAgICpcbiAgICogQHRlbXBsYXRlIE8gVGhlIHR5cGUgb2YgdGhlIHJlbmRlcmluZyBlbmdpbmUgb3V0cHV0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhdm91cl0gLSBUaGUgZmxhdm9yIG9mIHRoZSByZW5kZXJpbmcgZW5naW5lIHRvIHJldHJpZXZlLlxuICAgKiBAcmV0dXJucyB7UmVuZGVyaW5nRW5naW5lPE8+fSBUaGUgcmVxdWVzdGVkIHJlbmRlcmluZyBlbmdpbmUuXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIHRoZSByZXF1ZXN0ZWQgZmxhdm9yIGRvZXMgbm90IGV4aXN0LlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgZ2V0PE8+KGZsYXZvdXI/OiBzdHJpbmcpOiBSZW5kZXJpbmdFbmdpbmU8Tz4ge1xuICAgIGlmICghZmxhdm91cilcbiAgICAgIHJldHVybiB0aGlzLmdldE9yQm9vdDxPPihcbiAgICAgICAgdGhpcy5jdXJyZW50IGFzIENvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZTxPPj4gfCBSZW5kZXJpbmdFbmdpbmU8Tz5cbiAgICAgICk7XG4gICAgaWYgKCEoZmxhdm91ciBpbiB0aGlzLmNhY2hlKSlcbiAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFxuICAgICAgICBgUmVuZGVyaW5nIGVuZ2luZSB1bmRlciAke2ZsYXZvdXJ9IGRvZXMgbm90IGV4aXN0YFxuICAgICAgKTtcbiAgICByZXR1cm4gdGhpcy5nZXRPckJvb3Q8Tz4oXG4gICAgICB0aGlzLmNhY2hlW2ZsYXZvdXJdIGFzXG4gICAgICAgIHwgQ29uc3RydWN0b3I8UmVuZGVyaW5nRW5naW5lPE8+PlxuICAgICAgICB8IFJlbmRlcmluZ0VuZ2luZTxPPlxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlbmRlcnMgYSBtb2RlbCB1c2luZyB0aGUgYXBwcm9wcmlhdGUgcmVuZGVyaW5nIGVuZ2luZS5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgY29ycmVjdCByZW5kZXJpbmcgZW5naW5lIGZvciBhIG1vZGVsIGFuZCBpbnZva2VzIGl0cyByZW5kZXIgbWV0aG9kLlxuICAgKlxuICAgKiBAdGVtcGxhdGUgTSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAcGFyYW0ge019IG1vZGVsIC0gVGhlIG1vZGVsIHRvIHJlbmRlci5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIHJlbmRlciBtZXRob2QuXG4gICAqIEByZXR1cm5zIHthbnl9IFRoZSByZXN1bHQgb2YgdGhlIHJlbmRlcmluZyBwcm9jZXNzLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiBubyByZWdpc3RlcmVkIG1vZGVsIGlzIGZvdW5kLlxuICAgKlxuICAgKiBAc3RhdGljXG4gICAqL1xuICBzdGF0aWMgcmVuZGVyPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0sIC4uLmFyZ3M6IGFueVtdKTogYW55IHtcbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9XG4gICAgICBNb2RlbC5nZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSkgfHwgTW9kZWwuZnJvbU9iamVjdChtb2RlbCk7XG4gICAgaWYgKCFjb25zdHJ1Y3RvcikgdGhyb3cgbmV3IEludGVybmFsRXJyb3IoXCJObyBtb2RlbCByZWdpc3RlcmVkIGZvdW5kXCIpO1xuICAgIGNvbnN0IGZsYXZvdXIgPSBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuUkVOREVSRURfQlkpLFxuICAgICAgY29uc3RydWN0b3IgYXMgTW9kZWxDb25zdHJ1Y3RvcjxNb2RlbD5cbiAgICApO1xuXG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBmb3IgdGhlIHZhciBhcmdzIHR5cGUgY2hlY2tcbiAgICByZXR1cm4gUmVuZGVyaW5nRW5naW5lLmdldChmbGF2b3VyKS5yZW5kZXIobW9kZWwsIC4uLmFyZ3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBHZW5lcmF0ZXMgYSBtZXRhZGF0YSBrZXkgZm9yIFVJLXJlbGF0ZWQgcHJvcGVydGllcy5cbiAgICogQHN1bW1hcnkgUHJlZml4ZXMgYSBnaXZlbiBrZXkgd2l0aCB0aGUgVUkgcmVmbGVjdGlvbiBwcmVmaXguXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHRvIHByZWZpeC5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHByZWZpeGVkIGtleS5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGtleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke1VJS2V5cy5SRUZMRUNUfSR7a2V5fWA7XG4gIH1cbn1cbiJdfQ==
|
|
448
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVuZGVyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VpL1JlbmRlcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUVMLEtBQUssRUFFTCxjQUFjLEVBQ2QsY0FBYyxHQUVmLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUNMLGVBQWUsRUFDZixlQUFlLEVBQ2YsTUFBTSxFQUNOLHNCQUFzQixFQUN0QixpQkFBaUIsR0FDbEIsdUJBQW9CO0FBWXJCLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQWlCO0FBQzFDLE9BQU8sRUFBcUIsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckUsT0FBTyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxtQkFBZ0I7QUFFMUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxPQUFnQixlQUFlO0lBQ25DOzs7O09BSUc7YUFDWSxVQUFLLEdBSWhCLEVBQUUsQUFKYyxDQUliO0lBZ0JQLFlBQStCLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO1FBTDlDOztXQUVHO1FBQ08sZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFHckMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsT0FBTywwQkFBMEIsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFhRDs7Ozs7OztPQU9HO0lBQ0gsU0FBUyxDQUFDLEdBQVcsRUFBRSxTQUFrQixJQUFJO1FBQzNDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxRQUFRLEdBQUcsRUFBRSxDQUFDO2dCQUNaLEtBQUssY0FBYyxDQUFDLE1BQU07b0JBQ3hCLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQztnQkFDOUIsS0FBSyxjQUFjLENBQUMsTUFBTSxDQUFDO2dCQUMzQixLQUFL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QztRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBRUksQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNILE1BQU0sQ0FBQyxNQUFNLENBQWtCLEtBQVEsRUFBRSxHQUFHLElBQVc7UUFDckQsTUFBTSxXQUFXLEdBQ2YsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFDdkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FDakMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQ3ZDLFdBQXNDLENBQ3ZDLENBQUM7UUFFRiwrQ0FBK0M7UUFDL0MsT0FBTyxlQUFlLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUM7SUFDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEludGVybmFsRXJyb3IgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcbmltcG9ydCB7XG4gIENvbnN0cnVjdG9yLFxuICBNb2RlbCxcbiAgTW9kZWxDb25zdHJ1Y3RvcixcbiAgUmVzZXJ2ZWRNb2RlbHMsXG4gIFZhbGlkYXRpb25LZXlzLFxuICBWYWxpZGF0aW9uTWV0YWRhdGEsXG59IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIEhUTUw1RGF0ZUZvcm1hdCxcbiAgSFRNTDVJbnB1dFR5cGVzLFxuICBVSUtleXMsXG4gIFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUsXG4gIFZhbGlkYXRhYmxlQnlUeXBlLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIENydWRPcGVyYXRpb25LZXlzLFxuICBGaWVsZERlZmluaXRpb24sXG4gIEZpZWxkUHJvcGVydGllcyxcbiAgVUlDbGFzc01ldGFkYXRhLFxuICBVSUVsZW1lbnRNZXRhZGF0YSxcbiAgVUlMYXlvdXRJdGVtTWV0YWRhdGEsXG4gIFVJTGlzdEl0ZW1FbGVtZW50TWV0YWRhdGEsXG4gIFVJTW9kZWxNZXRhZGF0YSxcbiAgVUlQcm9wTWV0YWRhdGEsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBSZW5kZXJpbmdFcnJvciB9IGZyb20gXCIuL2Vycm9yc1wiO1xuaW1wb3J0IHsgRGVjb3JhdG9yTWV0YWRhdGEsIFJlZmxlY3Rpb24gfSBmcm9tIFwiQGRlY2FmLXRzL3JlZmxlY3Rpb25cIjtcbmltcG9ydCB7IGZvcm1hdEJ5VHlwZSwgZ2VuZXJhdGVVSU1vZGVsSUQgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBjbGFzcyBmb3IgcmVuZGVyaW5nIFVJIGNvbXBvbmVudHMgYmFzZWQgb24gbW9kZWwgbWV0YWRhdGEuXG4gKiBAc3VtbWFyeSBUaGUgUmVuZGVyaW5nRW5naW5lIGNsYXNzIHByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBjb252ZXJ0aW5nIG1vZGVsIG1ldGFkYXRhIGludG8gVUkgZmllbGQgZGVmaW5pdGlvbnMuXG4gKiBJdCBoYW5kbGVzIHRoZSB0cmFuc2xhdGlvbiBvZiBtb2RlbCBwcm9wZXJ0aWVzIHRvIFVJIGVsZW1lbnRzLCBhcHBsaWVzIHZhbGlkYXRpb24gcnVsZXMsIGFuZCBtYW5hZ2VzIGRpZmZlcmVudCByZW5kZXJpbmcgZmxhdm9ycy5cbiAqIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gYmUgZXh0ZW5kZWQgYnkgc3BlY2lmaWMgcmVuZGVyaW5nIGltcGxlbWVudGF0aW9ucy5cbiAqXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgcmVuZGVyaW5nIHJlc3VsdCwgZGVmYXVsdHMgdG8gdm9pZFxuICogQHRlbXBsYXRlIFIgVGhlIHR5cGUgb2YgdGhlIGZpZWxkIGRlZmluaXRpb24sIGRlZmF1bHRzIHRvIEZpZWxkRGVmaW5pdGlvbjxUPlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmbGF2b3VyIC0gVGhlIGZsYXZvciBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZS5cbiAqXG4gKiBAY2xhc3MgUmVuZGVyaW5nRW5naW5lXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZW5kZXJpbmdFbmdpbmU8VCA9IHZvaWQsIFIgPSBGaWVsZERlZmluaXRpb248VD4+IHtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBDYWNoZSBmb3Igc3RvcmluZyByZW5kZXJpbmcgZW5naW5lIGluc3RhbmNlcyBvciBjb25zdHJ1Y3RvcnMuXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGNhY2hlOiBSZWNvcmQ8XG4gICAgc3RyaW5nLFxuICAgIHwgQ29uc3RydWN0b3I8UmVuZGVyaW5nRW5naW5lPHVua25vd24sIHVua25vd24+PlxuICAgIHwgUmVuZGVyaW5nRW5naW5lPHVua25vd24sIHVua25vd24+XG4gID4gPSB7fTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBjdXJyZW50bHkgYWN0aXZlIHJlbmRlcmluZyBlbmdpbmUuXG4gICAqIEBwcml2YXRlXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGN1cnJlbnQ6XG4gICAgfCBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU8dW5rbm93biwgdW5rbm93bj4+XG4gICAgfCBSZW5kZXJpbmdFbmdpbmU8dW5rbm93biwgdW5rbm93bj47XG5cbiAgLyoqXG4gICAqIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSByZW5kZXJpbmcgZW5naW5lIGhhcyBiZWVuIGluaXRpYWxpemVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZsYXZvdXI6IHN0cmluZykge1xuICAgIFJlbmRlcmluZ0VuZ2luZS5yZWdpc3Rlcih0aGlzKTtcbiAgICBjb25zb2xlLmxvZyhgZGVjYWYncyAke2ZsYXZvdXJ9IHJlbmRlcmluZyBlbmdpbmUgbG9hZGVkYCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluaXRpYWxpemVzIHRoZSByZW5kZXJpbmcgZW5naW5lLlxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdG8gYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyBmb3Igc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gbG9naWMuXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBbnkgYWRkaXRpb25hbCBhcmd1bWVudHMgbmVlZGVkIGZvciBpbml0aWFsaXphdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gaW5pdGlhbGl6YXRpb24gaXMgY29tcGxldGUuXG4gICAqXG4gICAqIEBhYnN0cmFjdFxuICAgKi9cbiAgYWJzdHJhY3QgaW5pdGlhbGl6ZSguLi5hcmdzOiBhbnlbXSk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUcmFuc2xhdGVzIGJldHdlZW4gbW9kZWwgdHlwZXMgYW5kIEhUTUwgaW5wdXQgdHlwZXMuXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIG1vZGVsIGRhdGEgdHlwZXMgdG8gYXBwcm9wcmlhdGUgSFRNTCBpbnB1dCB0eXBlcyBhbmQgdmljZSB2ZXJzYS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gdHJhbnNsYXRlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b1ZpZXc9dHJ1ZV0gLSBEaXJlY3Rpb24gb2YgdHJhbnNsYXRpb24gKHRydWUgZm9yIG1vZGVsIHRvIHZpZXcsIGZhbHNlIGZvciB2aWV3IHRvIG1vZGVsKS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGhlIHRyYW5zbGF0ZWQgdHlwZS5cbiAgICovXG4gIHRyYW5zbGF0ZShrZXk6IHN0cmluZywgdG9WaWV3OiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZyB7XG4gICAgaWYgKHRvVmlldykge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBSZXNlcnZlZE1vZGVscy5TVFJJTkc6XG4gICAgICAgICAgcmV0dXJuIEhUTUw1SW5wdXRUeXBlcy5URVhUO1xuICAgICAgICBjYXNlIFJlc2VydmVkTW9kZWxzLk5VTUJFUjpcbiAgICAgICAgY2FzZSBSZXNlcnZlZE1vZGVscy5CSUdJTlQ6XG4gICAgICAgICAgcmV0dXJuIEhUTUw1SW5wdXRUeXBlcy5OVU1CRVI7XG4gICAgICAgIGNhc2UgUmVzZXJ2ZWRNb2RlbHMuQk9PTEVBTjpcbiAgICAgICAgICByZXR1cm4gSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YO1xuICAgICAgICBjYXNlIFJlc2VydmVkTW9kZWxzLkRBVEU6XG4gICAgICAgICAgcmV0dXJuIEhUTUw1SW5wdXRUeXBlcy5EQVRFO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5TRUxFQ1Q6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlRFWFQ6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkVNQUlMOlxuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5DT0xPUjpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuUEFTU1dPUkQ6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlRFTDpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuVVJMOlxuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5TRUFSQ0g6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkhJRERFTjpcbiAgICAgICAgY2FzZSBIVE1MNUlucHV0VHlwZXMuVEVYVEFSRUE6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLlJBRElPOlxuICAgICAgICAgIHJldHVybiBSZXNlcnZlZE1vZGVscy5TVFJJTkc7XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLk5VTUJFUjpcbiAgICAgICAgICByZXR1cm4gUmVzZXJ2ZWRNb2RlbHMuTlVNQkVSO1xuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5DSEVDS0JPWDogXG4gICAgICAgICAgcmV0dXJuIFJlc2VydmVkTW9kZWxzLkJPT0xFQU47XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkRBVEU6XG4gICAgICAgIGNhc2UgSFRNTDVJbnB1dFR5cGVzLkRBVEVUSU1FX0xPQ0FMOlxuICAgICAgICBjYXNlIEhUTUw1SW5wdXRUeXBlcy5USU1FOlxuICAgICAgICAgIHJldHVybiBSZXNlcnZlZE1vZGVscy5EQVRFO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgY2xhc3MgZGVjb3JhdG9yIG1ldGFkYXRhIGZvciBhIG1vZGVsIGluc3RhbmNlXG4gICAqIEBzdW1tYXJ5IEV4dHJhY3RzIFVJLXJlbGF0ZWQgY2xhc3MgZGVjb3JhdG9ycyBmcm9tIGEgbW9kZWwgYW5kIHJldHVybnMgdGhlbSBhcyBhbiBhcnJheVxuICAgKiBUaGlzIG1ldGhvZCBjb2xsZWN0cyBtZXRhZGF0YSBmcm9tIHZhcmlvdXMgVUkgY2xhc3MgZGVjb3JhdG9ycyBpbmNsdWRpbmcgQHVpbW9kZWwsXG4gICAqIEB1aWxpc3RpdGVtLCBAdWloYW5kbGVycywgYW5kIEB1aWxheW91dCBhcHBsaWVkIHRvIHRoZSBtb2RlbCBjbGFzcy5cbiAgICpcbiAgICogQHRlbXBsYXRlIE0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB0byBleHRyYWN0IG1ldGFkYXRhIGZyb21cbiAgICogQHJldHVybnMge1VJQ2xhc3NNZXRhZGF0YVtdfSBBcnJheSBvZiBVSSBjbGFzcyBtZXRhZGF0YSBvYmplY3RzXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGdldENsYXNzRGVjb3JhdG9yc01ldGFkYXRhPE0gZXh0ZW5kcyBNb2RlbD4obW9kZWw6IE0pOiBVSUNsYXNzTWV0YWRhdGFbXSAge1xuICAgIHJldHVybiBbXG4gICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICBSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5VSU1PREVMKSxcbiAgICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICAgICkgfHxcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTU9ERUwpLFxuICAgICAgICBNb2RlbC5nZXQobW9kZWwuY29uc3RydWN0b3IubmFtZSkgYXMgYW55XG4gICAgICApLFxuICAgICAgUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlMSVNUSVRFTSksXG4gICAgICAgIG1vZGVsLmNvbnN0cnVjdG9yXG4gICAgICApIHx8XG4gICAgICBSZWZsZWN0LmdldE1ldGFkYXRhKFxuICAgICAgICBSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5VSUxJU1RJVEVNKSxcbiAgICAgICAgTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpIGFzIGFueVxuICAgICAgKSxcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkhBTkRMRVJTKSxcbiAgICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICAgICkgfHxcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkhBTkRMRVJTKSxcbiAgICAgICAgTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpIGFzIGFueVxuICAgICAgKSxcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTEFZT1VUKSxcbiAgICAgICAgbW9kZWwuY29uc3RydWN0b3JcbiAgICAgICkgfHxcbiAgICAgIFJlZmxlY3QuZ2V0TWV0YWRhdGEoXG4gICAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTEFZT1VUKSxcbiAgICAgICAgTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpIGFzIGFueVxuICAgICAgKSxcbiAgICBdLmZpbHRlcihCb29sZWFuKTs7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIHR5cGUgaXMgdmFsaWRhdGFibGUgYnkgaXRzIG5hdHVyZS5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyBpZiBhIGdpdmVuIFVJIGtleSByZXByZXNlbnRzIGEgdHlwZSB0aGF0IGlzIGluaGVyZW50bHkgdmFsaWRhdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgVUkga2V5IHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdHlwZSBpcyB2YWxpZGF0YWJsZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIGlzVmFsaWRhdGFibGVCeVR5cGUoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVmFsaWRhdGFibGVCeVR5cGUpLmluY2x1ZGVzKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhIHR5cGUgaXMgdmFsaWRhdGFibGUgYnkgYXR0cmlidXRlLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIGlmIGEgZ2l2ZW4gVUkga2V5IHJlcHJlc2VudHMgYSB2YWxpZGF0aW9uIHRoYXQgY2FuIGJlIGFwcGxpZWQgYXMgYW4gYXR0cmlidXRlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIFVJIGtleSB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHR5cGUgaXMgdmFsaWRhdGFibGUgYnkgYXR0cmlidXRlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgaXNWYWxpZGF0YWJsZUJ5QXR0cmlidXRlKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUpLmluY2x1ZGVzKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIHZhbGlkYXRpb24gbWV0YWRhdGEgdG8gYW4gYXR0cmlidXRlIHZhbHVlLlxuICAgKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHZhbGlkYXRpb24gbWV0YWRhdGEgaW50byBhIHZhbHVlIHN1aXRhYmxlIGZvciB1c2UgYXMgYW4gSFRNTCBhdHRyaWJ1dGUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUgdmFsaWRhdGlvbiBrZXkuXG4gICAqIEBwYXJhbSB7VmFsaWRhdGlvbk1ldGFkYXRhfSB2YWx1ZSAtIFRoZSB2YWxpZGF0aW9uIG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbn0gVGhlIGNvbnZlcnRlZCBhdHRyaWJ1dGUgdmFsdWUuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgZ2l2ZW4ga2V5IGlzIG5vdCB2YWxpZGF0YWJsZSBieSBhdHRyaWJ1dGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgdG9BdHRyaWJ1dGVWYWx1ZShcbiAgICBrZXk6IHN0cmluZyxcbiAgICB2YWx1ZTogVmFsaWRhdGlvbk1ldGFkYXRhXG4gICk6IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4ge1xuICAgIGlmICghT2JqZWN0LmtleXMoVmFsaWRhdGFibGVCeUF0dHJpYnV0ZSkuaW5jbHVkZXMoa2V5KSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgYXR0cmlidXRlIGtleSBcIiR7a2V5fVwiLiBFeHBlY3RlZCBvbmUgb2Y6ICR7T2JqZWN0LmtleXMoVmFsaWRhdGFibGVCeUF0dHJpYnV0ZSkuam9pbihcIiwgXCIpfS5gXG4gICAgICApO1xuXG4gICAgcmV0dXJuIGtleSA9PT0gVUlLZXlzLlJFUVVJUkVEID8gdHJ1ZSA6IHZhbHVlW2tleV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgbW9kZWwgdG8gYSBmaWVsZCBkZWZpbml0aW9uLlxuICAgKiBAc3VtbWFyeSBQcm9jZXNzZXMgYSBtb2RlbCBpbnN0YW5jZSwgZXh0cmFjdGluZyBVSS1yZWxhdGVkIG1ldGFkYXRhIGFuZCB2YWxpZGF0aW9uIHJ1bGVzIHRvIGNyZWF0ZSBhIGZpZWxkIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBNIFR5cGUgZXh0ZW5kaW5nIE1vZGVsXG4gICAqIEB0ZW1wbGF0ZSBUIFR5cGUgcmVmZXJlbmNpbmcgdGhlIHNwZWNpZmljIFJlbmRlcmluZyBlbmdpbmUgZmllbGQgcHJvcGVydGllcy9pbnB1dHNcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCBpbnN0YW5jZSB0byBjb252ZXJ0LlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBbZ2xvYmFsUHJvcHM9e31dIC0gR2xvYmFsIHByb3BlcnRpZXMgdG8gYXBwbHkgdG8gYWxsIGNoaWxkIGVsZW1lbnRzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtnZW5lcmF0ZUlkPXRydWVdIC0gRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcG9wdWxhdGUgdGhlIHJlbmRlcmVySWQgcHJvcGVydHkuXG4gICAqIEByZXR1cm5zIHtGaWVsZERlZmluaXRpb248VD59IEEgZmllbGQgZGVmaW5pdGlvbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBVSSBzdHJ1Y3R1cmUgb2YgdGhlIG1vZGVsLlxuICAgKiBAdGhyb3dzIHtSZW5kZXJpbmdFcnJvcn0gSWYgbm8gVUkgZGVmaW5pdGlvbnMgYXJlIHNldCBmb3IgdGhlIG1vZGVsIG9yIGlmIHRoZXJlIGFyZSBpbnZhbGlkIGRlY29yYXRvcnMuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgcGFydGljaXBhbnQgQyBhcyBDbGllbnRcbiAgICogIHBhcnRpY2lwYW50IFJFIGFzIFJlbmRlcmluZ0VuZ2luZVxuICAgKiAgcGFydGljaXBhbnQgUiBhcyBSZWZsZWN0aW9uXG4gICAqICBwYXJ0aWNpcGFudCBNIGFzIE1vZGVsXG4gICAqICBDLT4+UkU6IHRvRmllbGREZWZpbml0aW9uKG1vZGVsLCBnbG9iYWxQcm9wcylcbiAgICogIFJFLT4+UjogZ2V0TWV0YWRhdGEoVUlLZXlzLlVJTU9ERUwsIG1vZGVsLmNvbnN0cnVjdG9yKVxuICAgKiAgUi0tPj5SRTogVUlNb2RlbE1ldGFkYXRhXG4gICAqICBSRS0+PlI6IGdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhtb2RlbCwgVUlLZXlzLlJFRkxFQ1QpXG4gICAqICBSLS0+PlJFOiBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YVtdPlxuICAgKiAgUkUtPj5SOiBnZXRBbGxQcm9wZXJ0eURlY29yYXRvcnMobW9kZWwsIFZhbGlkYXRpb25LZXlzLlJFRkxFQ1QpXG4gICAqICBSLS0+PlJFOiBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+W10+XG4gICAqICBsb29wIEZvciBlYWNoIHByb3BlcnR5XG4gICAqICAgIFJFLT4+UkU6IFByb2Nlc3MgVUkgZGVjb3JhdG9yc1xuICAgKiAgICBSRS0+PlJFOiBBcHBseSB2YWxpZGF0aW9uIHJ1bGVzXG4gICAqICBlbmRcbiAgICogIFJFLS0+PkM6IEZpZWxkRGVmaW5pdGlvbjxUPlxuICAgKi9cbiAgcHJvdGVjdGVkIHRvRmllbGREZWZpbml0aW9uPE0gZXh0ZW5kcyBNb2RlbD4oXG4gICAgbW9kZWw6IE0sXG4gICAgZ2xvYmFsUHJvcHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30sXG4gICAgZ2VuZXJhdGVJZDogYm9vbGVhbiA9IHRydWVcbiAgKTogRmllbGREZWZpbml0aW9uPFQ+IHtcbiAgICBcbiAgICBjb25zdCB7IGluaGVyaXRQcm9wcywgLi4uZ2xvYmFsUHJvcHNXaXRob3V0SW5oZXJpdHMgfSA9IGdsb2JhbFByb3BzO1xuICAgIGdsb2JhbFByb3BzID0gZ2xvYmFsUHJvcHNXaXRob3V0SW5oZXJpdHM7XG5cbiAgICBjb25zdCBjbGFzc0RlY29yYXRvcnMgPSB0aGlzLmdldENsYXNzRGVjb3JhdG9yc01ldGFkYXRhPE0+KG1vZGVsKTtcblxuICAgIGlmICghY2xhc3NEZWNvcmF0b3JzLmxlbmd0aClcbiAgICAgIHRocm93IG5ldyBSZW5kZXJpbmdFcnJvcihcbiAgICAgICAgYE5vIHVpIGRlZmluaXRpb25zIHNldCBmb3IgbW9kZWwgJHttb2RlbC5jb25zdHJ1Y3Rvci5uYW1lfS4gRGlkIHlvdSB1c2UgQHVpbW9kZWw/YFxuICAgICAgKTtcblxuICAgIGNvbnN0IGNsYXNzRGVjb3JhdG9yID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHt9LFxuICAgICAgLi4uY2xhc3NEZWNvcmF0b3JzLFxuICAgICAgaW5oZXJpdFByb3BzID8gaW5oZXJpdFByb3BzIDoge30gLy8gb3ZlcnJpZGUgdGFnIGFuZCBwcm9wZXJ0aWVzIHdoZW4gaXQgaXMgYSBjb21wb25lbnQgdGhhdCBzaG91bGQgaW5oZXJpdCBwcm9wZXJ0aWVzIGZyb20gaXRzIHBhcmVudC5cbiAgICApO1xuICAgIGNvbnN0IHsgdGFnLCBwcm9wcywgaXRlbSwgaGFuZGxlcnMgfSA9IGNsYXNzRGVjb3JhdG9yO1xuXG4gICAgY29uc3QgdWlEZWNvcmF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YVtdPiA9XG4gICAgICBSZWZsZWN0aW9uLmdldEFsbFByb3BlcnR5RGVjb3JhdG9ycyhtb2RlbCwgVUlLZXlzLlJFRkxFQ1QpIGFzIFJlY29yZDxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBEZWNvcmF0b3JNZXRhZGF0YVtdXG4gICAgICA+O1xuICAgIGxldCBjaGlsZHJlbjogRmllbGREZWZpbml0aW9uPFJlY29yZDxzdHJpbmcsIGFueT4+W10gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGNoaWxkUHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSBpdGVtPy5wcm9wcyB8fCB7fTtcbiAgICBsZXQgbWFwcGVyOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgY29uc3QgZ2V0UGF0aCA9IChwYXJlbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgcHJvcDogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gcGFyZW50ID8gW3BhcmVudCwgcHJvcF0uam9pbihcIi5cIikgOiBwcm9wO1xuICAgIH07XG5cbiAgICBpZiAodWlEZWNvcmF0b3JzKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9uRGVjb3JhdG9yczogUmVjb3JkPFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIERlY29yYXRvck1ldGFkYXRhPFZhbGlkYXRpb25NZXRhZGF0YT5bXVxuICAgICAgPiA9IFJlZmxlY3Rpb24uZ2V0QWxsUHJvcGVydHlEZWNvcmF0b3JzKFxuICAgICAgICBtb2RlbCxcbiAgICAgICAgVmFsaWRhdGlvbktleXMuUkVGTEVDVFxuICAgICAgKSBhcyBSZWNvcmQ8c3RyaW5nLCBEZWNvcmF0b3JNZXRhZGF0YTxWYWxpZGF0aW9uTWV0YWRhdGE+W10+O1xuICAgICAgZm9yIChjb25zdCBrZXkgaW4gdWlEZWNvcmF0b3JzKSB7XG4gICAgICAgIGNvbnN0IGRlY3MgPSB1aURlY29yYXRvcnNba2V5XTtcbiAgICAgICAgY29uc3QgdHlwZXMgPSBPYmplY3QudmFsdWVzKGRlY3MpLmZpbHRlcigoe2tleX0pID0+IFtVSUtleXMuUFJPUCwgVUlLZXlzLkVMRU1FTlQsIFVJS2V5cy5DSElMRF0uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgIGlmICh0eXBlcz8ubGVuZ3RoID4gMSlcbiAgICAgICAgICB0aHJvdyBuZXcgUmVuZGVyaW5nRXJyb3IoXG4gICAgICAgICAgICBgT25seSBvbmUgdHlwZSBvZiBkZWNvcmF0aW9uIGlzIGFsbG93ZWQuIFBsZWFzZSBjaG9vc2UgYmV0d2VlbiBAdWlwcm9wLCBAdWljaGlsZCBvciBAdWllbGVtZW50YFxuICAgICAgICAgICk7XG4gICAgICAgIGRlY3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gZGVjcy5zb3J0KChhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGEua2V5ID09PSBVSUtleXMuRUxFTUVOVCA/IC0xIDogMTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNvcnRlZC5mb3JFYWNoKChkZWMpID0+IHtcbiAgICAgICAgICBpZiAoIWRlYykgdGhyb3cgbmV3IFJlbmRlcmluZ0Vycm9yKGBObyBkZWNvcmF0b3IgZm91bmRgKTtcblxuICAgICAgICAgIHN3aXRjaCAoZGVjLmtleSkge1xuICAgICAgICAgICAgY2FzZSBVSUtleXMuUFJPUDoge1xuICAgICAgICAgICAgICBjaGlsZFByb3BzW2tleV0gPSBkZWMucHJvcHMgYXMgVUlQcm9wTWV0YWRhdGE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBVSUtleXMuQ0hJTEQ6IHtcbiAgICAgICAgICAgICAgaWYgKCFNb2RlbC5pc1Byb3BlcnR5TW9kZWwobW9kZWwsIGtleSkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJlbmRlcmluZ0Vycm9yKGBDaGlsZCBcIiR7a2V5fVwiIG11c3QgYmUgYSBtb2RlbC5gKTtcblxuICAgICAgICAgICAgICBsZXQgQ2xheno7XG4gICAgICAgICAgICAgIGNvbnN0IHN1Ym1vZGVsID0gKG1vZGVsIGFzIFJlY29yZDxzdHJpbmcsIGFueT4pW2tleV0gYXMgTW9kZWw7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnN0cnVjdGFibGUgPVxuICAgICAgICAgICAgICAgIHR5cGVvZiBzdWJtb2RlbCA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgICAgIHN1Ym1vZGVsICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgIUFycmF5LmlzQXJyYXkoc3VibW9kZWwpO1xuICAgICAgICAgICAgICAvLyBjcmVhdGUgaW5zdGFuY2UgaWYgdW5kZWZpbmVkXG4gICAgICAgICAgICAgIGlmICghY29uc3RydWN0YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXp6TmFtZSA9IChkZWMucHJvcHMucHJvcHMgYXMgUmVjb3JkPHN0cmluZywgYW55PilcbiAgICAgICAgICAgICAgICAgID8ubmFtZSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgQ2xhenogPSBuZXcgKE1vZGVsLmdldChjbGF6ek5hbWUpIGFzIE1vZGVsQ29uc3RydWN0b3I8TW9kZWw+KSgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRyZW5HbG9iYWxQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIGdsb2JhbFByb3BzIHx8IHt9LCB7XCJtb2RlbFwiOiBDbGF6en0gLHtcbiAgICAgICAgICAgICAgICBpbmhlcml0UHJvcHM6IGRlYy5wcm9wcyBhcyBVSU1vZGVsTWV0YWRhdGEsXG4gICAgICAgICAgICAgICAgY2hpbGRPZjogZ2V0UGF0aChnbG9iYWxQcm9wcz8uY2hpbGRPZiBhcyBzdHJpbmcsIGtleSksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBjaGlsZERlZmluaXRpb24gPSB0aGlzLnRvRmllbGREZWZpbml0aW9uKFxuICAgICAgICAgICAgICAgIHN1Ym1vZGVsIHx8IENsYXp6LCAvLyBNdXN0IGF2b2lkIHVuZGVmaW5lZCB2YWx1ZXMg4oCUIGFuIGluc3RhbmNlIGlzIHJlcXVpcmVkIHRvIHJldHJpZXZlIHByb3BlcnRpZXMuXG4gICAgICAgICAgICAgICAgY2hpbGRyZW5HbG9iYWxQcm9wcyxcbiAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKFxuICAgICAgICAgICAgICAgIGNoaWxkRGVmaW5pdGlvbiBhcyBGaWVsZERlZmluaXRpb248UmVjb3JkPHN0cmluZywgYW55Pj5cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFVJS2V5cy5VSUxJU1RQUk9QOiB7XG4gICAgICAgICAgICAgIG1hcHBlciA9IG1hcHBlciB8fCB7fTtcbiAgICAgICAgICAgICAgaWYoZGVjLnByb3BzPy5uYW1lKVxuICAgICAgICAgICAgICAgIG1hcHBlcltkZWMucHJvcHM/Lm5hbWUgYXMgc3RyaW5nXSA9IGtleTtcbiAgICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgIGNsYXNzRGVjb3JhdG9yLnByb3BzPy5pdGVtIHx8IHt9LFxuICAgICAgICAgICAgICAgIGl0ZW0/LnByb3BzIHx8IHt9LFxuICAgICAgICAgICAgICAgIGRlYy5wcm9wcz8ucHJvcHMgfHwge30sXG4gICAgICAgICAgICAgICAgZ2xvYmFsUHJvcHNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY2hpbGRQcm9wcyA9IHtcbiAgICAgICAgICAgICAgICB0YWc6IGl0ZW0/LnRhZyB8fCBwcm9wcy5yZW5kZXIgfHwgXCJcIixcbiAgICAgICAgICAgICAgICBwcm9wczogT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgIHt9LCBcbiAgICAgICAgICAgICAgICAgIGNoaWxkUHJvcHM/LnByb3BzLCBcbiAgICAgICAgICAgICAgICAgIHsgbWFwcGVyIH0sIFxuICAgICAgICAgICAgICAgICAgcHJvcHMpLFxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBVSUtleXMuSElEREVOOiBcbiAgICAgICAgICAgIGNhc2UgVUlLZXlzLk9SREVSOiBcbiAgICAgICAgICAgIGNhc2UgVUlLZXlzLkVMRU1FTlQ6IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbiB8fCBbXTtcbiAgICAgICAgICAgICAgY29uc3QgdWlQcm9wczogVUlFbGVtZW50TWV0YWRhdGEgPSBkZWMucHJvcHMgYXMgVUlFbGVtZW50TWV0YWRhdGE7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3BzID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgY2hpbGRQcm9wcz8ucHJvcHMsXG4gICAgICAgICAgICAgICAgICB1aVByb3BzLnByb3BzIHx8IHt9LFxuICAgICAgICAgICAgICAgICAgKHVpUHJvcHM/LnByb3BzPy5uYW1lID8ge1xuICAgICAgICAgICAgICAgICAgICBwYXRoOiBnZXRQYXRoKFxuICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbFByb3BzPy5jaGlsZE9mIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICB1aVByb3BzLnByb3BzIS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkT2Y6IHVuZGVmaW5lZCwgLy8gVGhlIGNoaWxkT2YgcHJvcCBpcyBwYXNzZWQgYnkgZ2xvYmFsUHJvcHMgd2hlbiBpdCBpcyBhIG5lc3RlZCBwcm9wXG4gICAgICAgICAgICAgICAgICB9IDoge30pLFxuICAgICAgICAgICAgICAgICAgZ2xvYmFsUHJvcHNcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkRGVmaW5pdGlvbjogRmllbGREZWZpbml0aW9uPFJlY29yZDxzdHJpbmcsIGFueT4+ID0ge1xuICAgICAgICAgICAgICAgICAgdGFnOiAgdWlQcm9wcy50YWcgfHwgY2hpbGRQcm9wcz8udGFnIHx8IHRhZyB8fCBcIlwiLFxuICAgICAgICAgICAgICAgICAgcHJvcHMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgaWYoZGVjLmtleSA9PT0gVUlLZXlzLkVMRU1FTlQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uRGVjcyA9IHZhbGlkYXRpb25EZWNvcmF0b3JzW2tleV0gYXMgRGVjb3JhdG9yTWV0YWRhdGE8VmFsaWRhdGlvbk1ldGFkYXRhPltdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVEZWMgPSB2YWxpZGF0aW9uRGVjcy5zaGlmdCgpIGFzIERlY29yYXRvck1ldGFkYXRhO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZGVjIG9mIHZhbGlkYXRpb25EZWNzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkYXRhYmxlQnlBdHRyaWJ1dGUoZGVjLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW3RoaXMudHJhbnNsYXRlKGRlYy5rZXkpXSA9IHRoaXMudG9BdHRyaWJ1dGVWYWx1ZShkZWMua2V5LCBkZWMucHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWRhdGFibGVCeVR5cGUoZGVjLmtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRlYy5rZXkgPT09IEhUTUw1SW5wdXRUeXBlcy5EQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5GT1JNQVRdID0gZGVjLnByb3BzLmZvcm1hdCB8fCBIVE1MNURhdGVGb3JtYXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5UWVBFXSA9IGRlYy5rZXk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICghY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5UWVBFXSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNUeXBlID0gKHR5cGVEZWMucHJvcHMgYXMgeyBuYW1lOiBzdHJpbmcgfSkubmFtZTtcbiAgICAgICAgICAgICAgICAgIGNoaWxkRGVmaW5pdGlvbi5wcm9wc1tVSUtleXMuVFlQRV0gPSB0aGlzLnRyYW5zbGF0ZShcbiAgICAgICAgICAgICAgICAgICAgYmFzaWNUeXBlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzLnZhbHVlID0gZm9ybWF0QnlUeXBlKFxuICAgICAgICAgICAgICAgICAgY2hpbGREZWZpbml0aW9uLnByb3BzW1VJS2V5cy5UWVBFXSxcbiAgICAgICAgICAgICAgICAgIG1vZGVsW2tleSBhcyBrZXlvZiBNXSxcbiAgICAgICAgICAgICAgICAgIGNoaWxkRGVmaW5pdGlvbi5wcm9wc1tVSUtleXMuRk9STUFUXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZERlZmluaXRpb24pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW4uZmluZChjID0+IGMucHJvcHM/Lm5hbWUgPT09IGtleSB8fCBkZWMucHJvcHM/Lm5hbWUgPT09IGMucHJvcHM/LmNoaWxkT2YpO1xuICAgICAgICAgICAgICAgIGlmIChjaGlsZCkge1xuICAgICAgICAgICAgICAgICAgY2hpbGQucHJvcHMgPSBPYmplY3QuYXNzaWduKHt9LCBjaGlsZC5wcm9wcywgeyBbZGVjLmtleV06IHVpUHJvcHMgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGREZWZpbml0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFVJS2V5cy5VSUxBWU9VVElURU06IFxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmVuZGVyaW5nRXJyb3IoYEludmFsaWQga2V5OiAke2RlYy5rZXl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBnbG9iYWxQcm9wcyA9IE9iamVjdC5hc3NpZ24oe30sIHByb3BzLCBnbG9iYWxQcm9wcywge1xuICAgICAgaGFuZGxlcnM6IGhhbmRsZXJzIHx8IHt9LFxuICAgIH0pO1xuICAgIGNoaWxkcmVuID0gKChPYmplY3Qua2V5cyh1aURlY29yYXRvcnMpPy5sZW5ndGggJiYgY2hpbGRyZW4/Lmxlbmd0aCkgP1xuICAgICAgICAgICAgdGhpcy5nZXRMYXlvdXRJdGVtcyhjaGlsZHJlbiwgdWlEZWNvcmF0b3JzKSA6IGNoaWxkcmVuKTtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBnbG9iYWxQcm9wcz8ub3BlcmF0aW9uO1xuICAgIGNoaWxkcmVuID0gY2hpbGRyZW4/LnNvcnQoKGEsIGIpID0+ICgoYT8ucHJvcHM/Lm9yZGVyID8/IDApIC0gKGI/LnByb3BzPy5vcmRlciA/PyAwKSkpXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgIGlmKGl0ZW0udGFnKSB7XG4gICAgICAgICAgIGNvbnN0IGhpZGRlbk9uID0gKGl0ZW0/LnByb3BzPy5oaWRkZW4gYXMgQ3J1ZE9wZXJhdGlvbktleXNbXSB8fCBbXSk7XG4gICAgICAgICAgaWYoIWhpZGRlbk9uPy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICBpZighaGlkZGVuT24uaW5jbHVkZXMob3BlcmF0aW9uIGFzIENydWRPcGVyYXRpb25LZXlzKSlcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICBjb25zdCByZXN1bHQ6IEZpZWxkRGVmaW5pdGlvbjxUPiA9IHtcbiAgICAgIHRhZzogdGFnLFxuICAgICAgaXRlbTogY2hpbGRQcm9wcyBhcyBVSUxpc3RJdGVtRWxlbWVudE1ldGFkYXRhLFxuICAgICAgcHJvcHM6IGdsb2JhbFByb3BzIGFzIFQgJiBGaWVsZFByb3BlcnRpZXMsXG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW4gYXMgRmllbGREZWZpbml0aW9uPGFueT5bXSxcbiAgICBcbiAgICB9O1xuXG4gICAgaWYgKGdlbmVyYXRlSWQpIHJlc3VsdC5yZW5kZXJlcklkID0gZ2VuZXJhdGVVSU1vZGVsSUQobW9kZWwpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFByb2Nlc3NlcyBsYXlvdXQgaXRlbXMgZm9yIGdyaWQgcG9zaXRpb25pbmdcbiAgICogQHN1bW1hcnkgTWFwcyBjaGlsZCBmaWVsZCBkZWZpbml0aW9ucyB0byB0aGVpciBjb3JyZXNwb25kaW5nIGxheW91dCBwb3NpdGlvbnNcbiAgICogVGhpcyBtZXRob2QgaXRlcmF0ZXMgdGhyb3VnaCBjaGlsZCBmaWVsZCBkZWZpbml0aW9ucyBhbmQgYXBwbGllcyBsYXlvdXQgbWV0YWRhdGFcbiAgICogZnJvbSBAdWlsYXlvdXRpdGVtIGRlY29yYXRvcnMgdG8gcG9zaXRpb24gdGhlbSBjb3JyZWN0bHkgaW4gYSBncmlkIGxheW91dC5cbiAgICpcbiAgICogQHBhcmFtIHtGaWVsZERlZmluaXRpb25bXX0gY2hpbGRyZW4gLSBBcnJheSBvZiBjaGlsZCBmaWVsZCBkZWZpbml0aW9ucyB0byBwcm9jZXNzXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gdWlEZWNvcmF0b3JzIC0gVUkgZGVjb3JhdG9yIG1ldGFkYXRhIGtleWVkIGJ5IHByb3BlcnR5IG5hbWVcbiAgICogQHJldHVybnMge0ZpZWxkRGVmaW5pdGlvbltdfSBBcnJheSBvZiBmaWVsZCBkZWZpbml0aW9ucyB3aXRoIGxheW91dCBwb3NpdGlvbmluZyBhcHBsaWVkXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIEludGVybmFsIHVzYWdlIC0gcG9zaXRpb25zIGNoaWxkcmVuIGluIGdyaWQgbGF5b3V0XG4gICAqIGNvbnN0IGxheW91dENoaWxkcmVuID0gdGhpcy5nZXRMYXlvdXRJdGVtcyhjaGlsZERlZmluaXRpb25zLCBkZWNvcmF0b3JNZXRhZGF0YSk7XG4gICAqL1xuICBnZXRMYXlvdXRJdGVtcyhjaGlsZHJlbjogRmllbGREZWZpbml0aW9uPGFueT5bXSwgdWlEZWNvcmF0b3JzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogRmllbGREZWZpbml0aW9uPGFueT5bXSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgIGxldCB1cGRhdGVkQ2hpbGQgPSBjaGlsZDtcbiAgICAgIGZvciAoY29uc3Qga2V5IGluIHVpRGVjb3JhdG9ycykge1xuICAgICAgICBjb25zdCBkZWNzID0gdWlEZWNvcmF0b3JzW2tleV07XG4gICAgICAgIGZvciAoY29uc3QgZGVjIG9mIGRlY3MpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkZWMua2V5ID09PSBVSUtleXMuVUlMQVlPVVRJVEVNICYmXG4gICAgICAgICAgICAoZGVjLnByb3BzPy5uYW1lID09PSBjaGlsZC5wcm9wcz8ubmFtZSB8fCBkZWMucHJvcHM/Lm5hbWUgPT09IGNoaWxkLnByb3BzPy5jaGlsZE9mKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgeyBjb2wsIHByb3BzLCByb3cgfSA9IGRlYy5wcm9wcyBhcyBVSUxheW91dEl0ZW1NZXRhZGF0YTtcbiAgICAgICAgICAgIHVwZGF0ZWRDaGlsZCA9IHtcbiAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAgIC4uLmNoaWxkLnByb3BzLFxuICAgICAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVwZGF0ZWRDaGlsZDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVuZGVycyBhIG1vZGVsIHdpdGggZ2xvYmFsIHByb3BlcnRpZXMgYW5kIGFkZGl0aW9uYWwgYXJndW1lbnRzLlxuICAgKiBAc3VtbWFyeSBBYnN0cmFjdCBtZXRob2QgdG8gYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBkZWZpbmUgc3BlY2lmaWMgcmVuZGVyaW5nIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAdGVtcGxhdGUgTSBUeXBlIGV4dGVuZGluZyBNb2RlbFxuICAgKiBAdGVtcGxhdGUgUiBSZW5kZXJpbmcgZW5naW5lIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIG91dHB1dCB0eXBlXG4gICAqIEBwYXJhbSB7TX0gbW9kZWwgLSBUaGUgbW9kZWwgdG8gYmUgcmVuZGVyZWQuXG4gICAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59IGdsb2JhbFByb3BzIC0gR2xvYmFsIHByb3BlcnRpZXMgdG8gYmUgYXBwbGllZCB0byBhbGwgZWxlbWVudHMgZHVyaW5nIHJlbmRlcmluZy5cbiAgICogQHBhcmFtIHsuLi5hbnlbXX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRoYXQgbWF5IGJlIHJlcXVpcmVkIGZvciBzcGVjaWZpYyByZW5kZXJpbmcgaW1wbGVtZW50YXRpb25zLlxuICAgKiBAcmV0dXJucyB7Un0gVGhlIHJlbmRlcmVkIHJlc3VsdCwgdHlwZSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbi5cbiAgICpcbiAgICogQGFic3RyYWN0XG4gICAqL1xuICBhYnN0cmFjdCByZW5kZXI8TSBleHRlbmRzIE1vZGVsPihcbiAgICBtb2RlbDogTSxcbiAgICBnbG9iYWxQcm9wczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgLi4uYXJnczogYW55W11cbiAgKTogUjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlZ2lzdGVycyBhIHJlbmRlcmluZyBlbmdpbmUgaW5zdGFuY2UuXG4gICAqIEBzdW1tYXJ5IEFkZHMgYSByZW5kZXJpbmcgZW5naW5lIHRvIHRoZSBzdGF0aWMgY2FjaGUgYW5kIHNldHMgaXQgYXMgdGhlIGN1cnJlbnQgZW5naW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlbmRlcmluZ0VuZ2luZTx1bmtub3duLCB1bmtub3duPn0gZW5naW5lIC0gVGhlIHJlbmRlcmluZyBlbmdpbmUgdG8gcmVnaXN0ZXIuXG4gICAqIEB0aHJvd3Mge0ludGVybmFsRXJyb3J9IElmIGFuIGVuZ2luZSB3aXRoIHRoZSBzYW1lIGZsYXZvciBhbHJlYWR5IGV4aXN0cy5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyKGVuZ2luZTogUmVuZGVyaW5nRW5naW5lPHVua25vd24sIHVua25vd24+KSB7XG4gICAgaWYgKGVuZ2luZS5mbGF2b3VyIGluIHRoaXMuY2FjaGUpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYFJlbmRlcmluZyBlbmdpbmUgdW5kZXIgJHtlbmdpbmUuZmxhdm91cn0gYWxyZWFkeSBleGlzdHNgXG4gICAgICApO1xuICAgIHRoaXMuY2FjaGVbZW5naW5lLmZsYXZvdXJdID0gZW5naW5lO1xuICAgIHRoaXMuY3VycmVudCA9IGVuZ2luZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIG9yIGluaXRpYWxpemVzIGEgcmVuZGVyaW5nIGVuZ2luZS5cbiAgICogQHN1bW1hcnkgR2V0cyBhbiBleGlzdGluZyBlbmdpbmUgaW5zdGFuY2Ugb3IgY3JlYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYSBuZXcgb25lIGlmIGdpdmVuIGEgY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBPIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJpbmcgZW5naW5lIG91dHB1dFxuICAgKiBAcGFyYW0ge0NvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZTxPPj4gfCBSZW5kZXJpbmdFbmdpbmU8Tz59IG9iaiAtIFRoZSBlbmdpbmUgaW5zdGFuY2Ugb3IgY29uc3RydWN0b3IuXG4gICAqIEByZXR1cm5zIHtSZW5kZXJpbmdFbmdpbmU8Tz59IFRoZSBpbml0aWFsaXplZCByZW5kZXJpbmcgZW5naW5lLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAc3RhdGljXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBnZXRPckJvb3Q8Tz4oXG4gICAgb2JqOiBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU8Tz4+IHwgUmVuZGVyaW5nRW5naW5lPE8+XG4gICk6IFJlbmRlcmluZ0VuZ2luZTxPPiB7XG4gICAgaWYgKG9iaiBpbnN0YW5jZW9mIFJlbmRlcmluZ0VuZ2luZSkgcmV0dXJuIG9iaiBhcyBSZW5kZXJpbmdFbmdpbmU8Tz47XG4gICAgY29uc3QgZW5naW5lOiBSZW5kZXJpbmdFbmdpbmU8Tz4gPSBuZXcgb2JqKCk7XG4gICAgZW5naW5lLmluaXRpYWxpemUoKTsgLy8gbWFrZSB0aGUgYm9vdGluZyBhc3luYy4gdXNlIHRoZSBpbml0aWFsaXplZCBmbGFnIHRvIGNvbnRyb2wgaXRcbiAgICByZXR1cm4gZW5naW5lIGFzIFJlbmRlcmluZ0VuZ2luZTxPPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgcmVuZGVyaW5nIGVuZ2luZSBieSBmbGF2b3IuXG4gICAqIEBzdW1tYXJ5IEdldHMgdGhlIGN1cnJlbnQgcmVuZGVyaW5nIGVuZ2luZSBvciBhIHNwZWNpZmljIG9uZSBieSBmbGF2b3IuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBPIFRoZSB0eXBlIG9mIHRoZSByZW5kZXJpbmcgZW5naW5lIG91dHB1dFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYXZvdXJdIC0gVGhlIGZsYXZvciBvZiB0aGUgcmVuZGVyaW5nIGVuZ2luZSB0byByZXRyaWV2ZS5cbiAgICogQHJldHVybnMge1JlbmRlcmluZ0VuZ2luZTxPPn0gVGhlIHJlcXVlc3RlZCByZW5kZXJpbmcgZW5naW5lLlxuICAgKiBAdGhyb3dzIHtJbnRlcm5hbEVycm9yfSBJZiB0aGUgcmVxdWVzdGVkIGZsYXZvciBkb2VzIG5vdCBleGlzdC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIGdldDxPPihmbGF2b3VyPzogc3RyaW5nKTogUmVuZGVyaW5nRW5naW5lPE8+IHtcbiAgICBpZiAoIWZsYXZvdXIpXG4gICAgICByZXR1cm4gdGhpcy5nZXRPckJvb3Q8Tz4oXG4gICAgICAgIHRoaXMuY3VycmVudCBhcyBDb25zdHJ1Y3RvcjxSZW5kZXJpbmdFbmdpbmU8Tz4+IHwgUmVuZGVyaW5nRW5naW5lPE8+XG4gICAgICApO1xuICAgIGlmICghKGZsYXZvdXIgaW4gdGhpcy5jYWNoZSkpXG4gICAgICB0aHJvdyBuZXcgSW50ZXJuYWxFcnJvcihcbiAgICAgICAgYFJlbmRlcmluZyBlbmdpbmUgdW5kZXIgJHtmbGF2b3VyfSBkb2VzIG5vdCBleGlzdGBcbiAgICAgICk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3JCb290PE8+KFxuICAgICAgdGhpcy5jYWNoZVtmbGF2b3VyXSBhc1xuICAgICAgICB8IENvbnN0cnVjdG9yPFJlbmRlcmluZ0VuZ2luZTxPPj5cbiAgICAgICAgfCBSZW5kZXJpbmdFbmdpbmU8Tz5cbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZW5kZXJzIGEgbW9kZWwgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIHJlbmRlcmluZyBlbmdpbmUuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIGNvcnJlY3QgcmVuZGVyaW5nIGVuZ2luZSBmb3IgYSBtb2RlbCBhbmQgaW52b2tlcyBpdHMgcmVuZGVyIG1ldGhvZC5cbiAgICpcbiAgICogQHRlbXBsYXRlIE0gVHlwZSBleHRlbmRpbmcgTW9kZWxcbiAgICogQHBhcmFtIHtNfSBtb2RlbCAtIFRoZSBtb2RlbCB0byByZW5kZXIuXG4gICAqIEBwYXJhbSB7Li4uYW55W119IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSByZW5kZXIgbWV0aG9kLlxuICAgKiBAcmV0dXJucyB7YW55fSBUaGUgcmVzdWx0IG9mIHRoZSByZW5kZXJpbmcgcHJvY2Vzcy5cbiAgICogQHRocm93cyB7SW50ZXJuYWxFcnJvcn0gSWYgbm8gcmVnaXN0ZXJlZCBtb2RlbCBpcyBmb3VuZC5cbiAgICpcbiAgICogQHN0YXRpY1xuICAgKi9cbiAgc3RhdGljIHJlbmRlcjxNIGV4dGVuZHMgTW9kZWw+KG1vZGVsOiBNLCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3QgY29uc3RydWN0b3IgPVxuICAgICAgTW9kZWwuZ2V0KG1vZGVsLmNvbnN0cnVjdG9yLm5hbWUpIHx8IE1vZGVsLmZyb21PYmplY3QobW9kZWwpO1xuICAgIGlmICghY29uc3RydWN0b3IpIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiTm8gbW9kZWwgcmVnaXN0ZXJlZCBmb3VuZFwiKTtcbiAgICBjb25zdCBmbGF2b3VyID0gUmVmbGVjdC5nZXRNZXRhZGF0YShcbiAgICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlJFTkRFUkVEX0JZKSxcbiAgICAgIGNvbnN0cnVjdG9yIGFzIE1vZGVsQ29uc3RydWN0b3I8TW9kZWw+XG4gICAgKTtcblxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZm9yIHRoZSB2YXIgYXJncyB0eXBlIGNoZWNrXG4gICAgcmV0dXJuIFJlbmRlcmluZ0VuZ2luZS5nZXQoZmxhdm91cikucmVuZGVyKG1vZGVsLCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gR2VuZXJhdGVzIGEgbWV0YWRhdGEga2V5IGZvciBVSS1yZWxhdGVkIHByb3BlcnRpZXMuXG4gICAqIEBzdW1tYXJ5IFByZWZpeGVzIGEgZ2l2ZW4ga2V5IHdpdGggdGhlIFVJIHJlZmxlY3Rpb24gcHJlZml4LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB0byBwcmVmaXguXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwcmVmaXhlZCBrZXkuXG4gICAqXG4gICAqIEBzdGF0aWNcbiAgICovXG4gIHN0YXRpYyBrZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtVSUtleXMuUkVGTEVDVH0ke2tleX1gO1xuICB9XG59XG4iXX0=
|
package/lib/esm/ui/constants.js
CHANGED
|
@@ -71,6 +71,7 @@ export const UIKeys = {
|
|
|
71
71
|
SUB_TYPE: "subtype",
|
|
72
72
|
HIDDEN: "hidden",
|
|
73
73
|
FORMAT: "format",
|
|
74
|
+
ORDER: "order",
|
|
74
75
|
READ_ONLY: "readonly",
|
|
75
76
|
REQUIRED: ValidationKeys.REQUIRED,
|
|
76
77
|
MIN: ValidationKeys.MIN,
|
|
@@ -241,4 +242,4 @@ export const HTML5CheckTypes = [
|
|
|
241
242
|
HTML5InputTypes.CHECKBOX,
|
|
242
243
|
HTML5InputTypes.RADIO,
|
|
243
244
|
];
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VpL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUVMLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGVBQWUsRUFDZiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsR0FFZixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxNQUFNO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsTUFBTTtJQUNaLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFlBQVksRUFBRSx1QkFBdUI7SUFFckMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsUUFBUSxFQUFFLFVBQVU7SUFFcEIsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsU0FBUztJQUVuQixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUVoQixTQUFTLEVBQUUsVUFBVTtJQUNyQixRQUFRLEVBQUUs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LENBQUMsUUFBUTtJQUN6QixLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixHQUFHLEVBQUUsS0FBSztJQUNWLElBQUksRUFBRSxNQUFNO0lBQ1osUUFBUSxFQUFFLFVBQVU7SUFDcEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUc7SUFDZixJQUFJLEVBQUUsTUFBTTtDQUNiLENBQUM7QUFFRjs7Ozs7Ozs7OztHQVVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLGVBQWUsQ0FBQyxRQUFRO0lBQ3hCLGVBQWUsQ0FBQyxLQUFLO0NBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXNjcmlwdGlvbiBDb25zdGFudHMgYW5kIGVudW1zIGZvciBVSSByZW5kZXJpbmcgYW5kIHZhbGlkYXRpb25cbiAqIEBzdW1tYXJ5IERlZmluZXMga2V5cywgbWFwcGluZ3MsIGFuZCBIVE1MNSBpbnB1dCB0eXBlcyBmb3IgVUkgY29tcG9uZW50c1xuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgY29uc3RhbnRzIHVzZWQgdGhyb3VnaG91dCB0aGUgVUkgZGVjb3JhdG9ycyBsaWJyYXJ5IGZvclxuICogcmVuZGVyaW5nLCB2YWxpZGF0aW9uLCBhbmQgSFRNTCBlbGVtZW50IGdlbmVyYXRpb24uXG4gKiBAbW9kdWxlIHVpL2NvbnN0YW50c1xuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cblxuaW1wb3J0IHtcbiAgQ29uc3RydWN0b3IsXG4gIERhdGVWYWxpZGF0b3IsXG4gIERpZmZWYWxpZGF0b3IsXG4gIEVtYWlsVmFsaWRhdG9yLFxuICBFcXVhbHNWYWxpZGF0b3IsXG4gIEdyZWF0ZXJUaGFuT3JFcXVhbFZhbGlkYXRvcixcbiAgR3JlYXRlclRoYW5WYWxpZGF0b3IsXG4gIExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvcixcbiAgTGVzc1RoYW5WYWxpZGF0b3IsXG4gIE1heExlbmd0aFZhbGlkYXRvcixcbiAgTWF4VmFsaWRhdG9yLFxuICBNaW5MZW5ndGhWYWxpZGF0b3IsXG4gIE1pblZhbGlkYXRvcixcbiAgTW9kZWxLZXlzLFxuICBQYXNzd29yZFZhbGlkYXRvcixcbiAgUGF0dGVyblZhbGlkYXRvcixcbiAgUmVxdWlyZWRWYWxpZGF0b3IsXG4gIFN0ZXBWYWxpZGF0b3IsXG4gIFVSTFZhbGlkYXRvcixcbiAgVmFsaWRhdGlvbktleXMsXG4gIFZhbGlkYXRvcixcbn0gZnJvbSBcIkBkZWNhZi10cy9kZWNvcmF0b3ItdmFsaWRhdGlvblwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBLZXkgY29uc3RhbnRzIHVzZWQgZm9yIFVJIG1ldGFkYXRhIGFuZCByZW5kZXJpbmdcbiAqIEBzdW1tYXJ5IENvbGxlY3Rpb24gb2Ygc3RyaW5nIGNvbnN0YW50cyB1c2VkIGFzIGtleXMgZm9yIFVJLXJlbGF0ZWQgbWV0YWRhdGFcbiAqIFRoZXNlIGtleXMgYXJlIHVzZWQgdGhyb3VnaG91dCB0aGUgbGlicmFyeSB0byBzdG9yZSBhbmQgcmV0cmlldmUgbWV0YWRhdGEgcmVsYXRlZCB0b1xuICogVUkgbW9kZWxzLCBlbGVtZW50cywgcHJvcGVydGllcywgYW5kIHZhbGlkYXRpb24gcnVsZXMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gVUlLZXlzVHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRkxFQ1QgLSBCYXNlIHJlZmxlY3Rpb24ga2V5IGZvciBVSSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFVJTU9ERUwgLSBLZXkgZm9yIFVJIG1vZGVsIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVOREVSRURfQlkgLSBLZXkgZm9yIHNwZWNpZnlpbmcgcmVuZGVyaW5nIGVuZ2luZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVMRU1FTlQgLSBLZXkgZm9yIGVsZW1lbnQgbWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBQUk9QIC0gS2V5IGZvciBwcm9wZXJ0eSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5BTUUgLSBLZXkgZm9yIG5hbWUgYXR0cmlidXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTkFNRV9QUkVGSVggLSBQcmVmaXggZm9yIGlucHV0IG5hbWVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQ1VTVE9NX1BST1BTIC0gS2V5IGZvciBjdXN0b20gdmFsaWRhdGlvbiBwcm9wZXJ0aWVzXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVUlMSVNUSVRFTSAtIEtleSBmb3IgbGlzdCBpdGVtIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVUlMSVNUUFJPUCAtIEtleSBmb3IgbGlzdCBwcm9wZXJ0eSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFRZUEUgLSBLZXkgZm9yIHR5cGUgbWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVUJfVFlQRSAtIEtleSBmb3Igc3VidHlwZSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEhJRERFTiAtIEtleSBmb3IgaGlkZGVuIGF0dHJpYnV0ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEZPUk1BVCAtIEtleSBmb3IgZm9ybWF0IG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVBRF9PTkxZIC0gS2V5IGZvciByZWFkb25seSBhdHRyaWJ1dGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRVFVSVJFRCAtIEtleSBmb3IgcmVxdWlyZWQgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1JTiAtIEtleSBmb3IgbWluaW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUlOX0xFTkdUSCAtIEtleSBmb3IgbWluaW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1BWCAtIEtleSBmb3IgbWF4aW11bSB2YWx1ZSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUFYX0xFTkdUSCAtIEtleSBmb3IgbWF4aW11bSBsZW5ndGggdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBVFRFUk4gLSBLZXkgZm9yIHBhdHRlcm4gdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFVSTCAtIEtleSBmb3IgVVJMIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVEVQIC0gS2V5IGZvciBzdGVwIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBEQVRFIC0gS2V5IGZvciBkYXRlIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFTUFJTCAtIEtleSBmb3IgZW1haWwgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBBU1NXT1JEIC0gS2V5IGZvciBwYXNzd29yZCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRVFVQUxTIC0gS2V5IGZvciBlcXVhbGl0eSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRElGRiAtIEtleSBmb3IgZGlmZmVyZW5jZSB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTEVTU19USEFOIC0gS2V5IGZvciBsZXNzIHRoYW4gdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IExFU1NfVEhBTl9PUl9FUVVBTCAtIEtleSBmb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBHUkVBVEVSX1RIQU4gLSBLZXkgZm9yIGdyZWF0ZXIgdGhhbiB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gR1JFQVRFUl9USEFOX09SX0VRVUFMIC0gS2V5IGZvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdmFsaWRhdGlvblxuICpcbiAqIEBjb25zdCBVSUtleXNcbiAqIEB0eXBlIHtVSUtleXNUeXBlfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFVJS2V5cyA9IHtcbiAgUkVGTEVDVDogYCR7TW9kZWxLZXlzLlJFRkxFQ1R9LnVpLmAsXG4gIFVJTU9ERUw6IFwidWltb2RlbFwiLFxuICBSRU5ERVJFRF9CWTogXCJyZW5kZXJlZC1ieVwiLFxuICBFTEVNRU5UOiBcImVsZW1lbnRcIixcbiAgUFJPUDogXCJwcm9wXCIsXG4gIENISUxEOiBcImNoaWxkXCIsXG4gIE5BTUU6IFwibmFtZVwiLFxuICBOQU1FX1BSRUZJWDogXCJpbnB1dC1cIixcbiAgQ1VTVE9NX1BST1BTOiBcImN1c3RvbVZhbGlkYXRpb25Qcm9wc1wiLFxuXG4gIFVJTElTVElURU06IFwidWlsaXN0aXRlbVwiLFxuICBVSUxJU1RQUk9QOiBcImxpc3Rwcm9wXCIsXG4gIFVJTEFZT1VUOiBcInVpbGF5b3V0XCIsXG4gIFVJTEFZT1VUSVRFTTogXCJ1aWxheW91dGl0ZW1cIixcbiAgSEFORExFUlM6IFwiaGFuZGxlcnNcIixcblxuICBUWVBFOiBcInR5cGVcIixcbiAgU1VCX1RZUEU6IFwic3VidHlwZVwiLFxuXG4gIEhJRERFTjogXCJoaWRkZW5cIixcbiAgRk9STUFUOiBcImZvcm1hdFwiLFxuXG4gIFJFQURfT05MWTogXCJyZWFkb25seVwiLFxuICBSRVFVSVJFRDogVmFsaWRhdGlvbktleXMuUkVRVUlSRUQsXG4gIE1JTjogVmFsaWRhdGlvbktleXMuTUlOLFxuICBNSU5fTEVOR1RIOiBWYWxpZGF0aW9uS2V5cy5NSU5fTEVOR1RILFxuICBNQVg6IFZhbGlkYXRpb25LZXlzLk1BWCxcbiAgTUFYX0xFTkdUSDogVmFsaWRhdGlvbktleXMuTUFYX0xFTkdUSCxcbiAgUEFUVEVSTjogVmFsaWRhdGlvbktleXMuUEFUVEVSTixcbiAgVVJMOiBWYWxpZGF0aW9uS2V5cy5VUkwsXG4gIFNURVA6IFZhbGlkYXRpb25LZXlzLlNURVAsXG4gIERBVEU6IFZhbGlkYXRpb25LZXlzLkRBVEUsXG4gIEVNQUlMOiBWYWxpZGF0aW9uS2V5cy5FTUFJTCxcbiAgUEFTU1dPUkQ6IFZhbGlkYXRpb25LZXlzLlBBU1NXT1JELFxuICBFUVVBTFM6IFZhbGlkYXRpb25LZXlzLkVRVUFMUyxcbiAgRElGRjogVmFsaWRhdGlvbktleXMuRElGRixcbiAgTEVTU19USEFOOiBWYWxpZGF0aW9uS2V5cy5MRVNTX1RIQU4sXG4gIExFU1NfVEhBTl9PUl9FUVVBTDogVmFsaWRhdGlvbktleXMuTEVTU19USEFOX09SX0VRVUFMLFxuICBHUkVBVEVSX1RIQU46IFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTixcbiAgR1JFQVRFUl9USEFOX09SX0VRVUFMOiBWYWxpZGF0aW9uS2V5cy5HUkVBVEVSX1RIQU5fT1JfRVFVQUwsXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBNYXBwaW5nIG9mIGlucHV0IHR5cGVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsaWRhdG9yc1xuICogQHN1bW1hcnkgTWFwcyBzcGVjaWFsIGlucHV0IHR5cGVzIHRvIHRoZWlyIHZhbGlkYXRvciBjbGFzc2VzXG4gKiBUaGlzIGNvbnN0YW50IG1hcHMgaW5wdXQgdHlwZXMgbGlrZSBlbWFpbCwgVVJMLCBkYXRlLCBhbmQgcGFzc3dvcmQgdG8gdGhlaXJcbiAqIGNvcnJlc3BvbmRpbmcgdmFsaWRhdG9yIGNsYXNzZXMgZnJvbSB0aGUgZGVjb3JhdG9yLXZhbGlkYXRpb24gbGlicmFyeS5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0LjxzdHJpbmcsIENvbnN0cnVjdG9yPFZhbGlkYXRvcj4+fSBWYWxpZGF0YWJsZUJ5VHlwZU1hcFxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxFbWFpbFZhbGlkYXRvcj59IGVtYWlsIC0gVmFsaWRhdG9yIGZvciBlbWFpbCBpbnB1dHNcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8VVJMVmFsaWRhdG9yPn0gdXJsIC0gVmFsaWRhdG9yIGZvciBVUkwgaW5wdXRzXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPERhdGVWYWxpZGF0b3I+fSBkYXRlIC0gVmFsaWRhdG9yIGZvciBkYXRlIGlucHV0c1xuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxQYXNzd29yZFZhbGlkYXRvcj59IHBhc3N3b3JkIC0gVmFsaWRhdG9yIGZvciBwYXNzd29yZCBpbnB1dHNcbiAqXG4gKiBAY29uc3QgVmFsaWRhdGFibGVCeVR5cGVcbiAqIEB0eXBlIHtWYWxpZGF0YWJsZUJ5VHlwZU1hcH1cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBWYWxpZGF0YWJsZUJ5VHlwZTogUmVjb3JkPHN0cmluZywgQ29uc3RydWN0b3I8VmFsaWRhdG9yPj4gPSB7XG4gIFtVSUtleXMuRU1BSUxdOiBFbWFpbFZhbGlkYXRvcixcbiAgW1VJS2V5cy5VUkxdOiBVUkxWYWxpZGF0b3IsXG4gIFtVSUtleXMuREFURV06IERhdGVWYWxpZGF0b3IsXG4gIFtVSUtleXMuUEFTU1dPUkRdOiBQYXNzd29yZFZhbGlkYXRvcixcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1hcHBpbmcgb2YgdmFsaWRhdGlvbiBhdHRyaWJ1dGVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsaWRhdG9yc1xuICogQHN1bW1hcnkgTWFwcyBIVE1MIHZhbGlkYXRpb24gYXR0cmlidXRlcyB0byB0aGVpciB2YWxpZGF0b3IgY2xhc3Nlc1xuICogVGhpcyBjb25zdGFudCBtYXBzIEhUTUwgdmFsaWRhdGlvbiBhdHRyaWJ1dGVzIGxpa2UgcmVxdWlyZWQsIG1pbiwgbWF4LCBwYXR0ZXJuLCBldGMuXG4gKiB0byB0aGVpciBjb3JyZXNwb25kaW5nIHZhbGlkYXRvciBjbGFzc2VzIGZyb20gdGhlIGRlY29yYXRvci12YWxpZGF0aW9uIGxpYnJhcnkuXG4gKlxuICogQHR5cGVkZWYge09iamVjdC48c3RyaW5nLCBDb25zdHJ1Y3RvcjxWYWxpZGF0b3I+Pn0gVmFsaWRhdGFibGVCeUF0dHJpYnV0ZU1hcFxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxSZXF1aXJlZFZhbGlkYXRvcj59IHJlcXVpcmVkIC0gVmFsaWRhdG9yIGZvciByZXF1aXJlZCBmaWVsZHNcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8TWluVmFsaWRhdG9yPn0gbWluIC0gVmFsaWRhdG9yIGZvciBtaW5pbXVtIHZhbHVlXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPE1heFZhbGlkYXRvcj59IG1heCAtIFZhbGlkYXRvciBmb3IgbWF4aW11bSB2YWx1ZVxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxTdGVwVmFsaWRhdG9yPn0gc3RlcCAtIFZhbGlkYXRvciBmb3Igc3RlcCB2YWx1ZVxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxNaW5MZW5ndGhWYWxpZGF0b3I+fSBtaW5sZW5ndGggLSBWYWxpZGF0b3IgZm9yIG1pbmltdW0gbGVuZ3RoXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPE1heExlbmd0aFZhbGlkYXRvcj59IG1heGxlbmd0aCAtIFZhbGlkYXRvciBmb3IgbWF4aW11bSBsZW5ndGhcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8UGF0dGVyblZhbGlkYXRvcj59IHBhdHRlcm4gLSBWYWxpZGF0b3IgZm9yIHJlZ2V4IHBhdHRlcm5cbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8RXF1YWxzVmFsaWRhdG9yPn0gZXF1YWxzIC0gVmFsaWRhdG9yIGZvciBlcXVhbGl0eVxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxEaWZmVmFsaWRhdG9yPn0gZGlmZiAtIFZhbGlkYXRvciBmb3IgZGlmZmVyZW5jZVxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxMZXNzVGhhblZhbGlkYXRvcj59IGxlc3N0aGFuIC0gVmFsaWRhdG9yIGZvciBsZXNzIHRoYW4gY29tcGFyaXNvblxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxMZXNzVGhhbk9yRXF1YWxWYWxpZGF0b3I+fSBsZXNzdGhhbm9yZXF1YWwgLSBWYWxpZGF0b3IgZm9yIGxlc3MgdGhhbiBvciBlcXVhbCBjb21wYXJpc29uXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPEdyZWF0ZXJUaGFuVmFsaWRhdG9yPn0gZ3JlYXRlcnRoYW4gLSBWYWxpZGF0b3IgZm9yIGdyZWF0ZXIgdGhhbiBjb21wYXJpc29uXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPEdyZWF0ZXJUaGFuT3JFcXVhbFZhbGlkYXRvcj59IGdyZWF0ZXJ0aGFub3JlcXVhbCAtIFZhbGlkYXRvciBmb3IgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIGNvbXBhcmlzb25cbiAqXG4gKiBAY29uc3QgVmFsaWRhdGFibGVCeUF0dHJpYnV0ZVxuICogQHR5cGUge1ZhbGlkYXRhYmxlQnlBdHRyaWJ1dGVNYXB9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVmFsaWRhdGFibGVCeUF0dHJpYnV0ZTogUmVjb3JkPHN0cmluZywgQ29uc3RydWN0b3I8VmFsaWRhdG9yPj4gPSB7XG4gIFtVSUtleXMuUkVRVUlSRURdOiBSZXF1aXJlZFZhbGlkYXRvcixcbiAgW1VJS2V5cy5NSU5dOiBNaW5WYWxpZGF0b3IsXG4gIFtVSUtleXMuTUFYXTogTWF4VmFsaWRhdG9yLFxuICBbVUlLZXlzLlNURVBdOiBTdGVwVmFsaWRhdG9yLFxuICBbVUlLZXlzLk1JTl9MRU5HVEhdOiBNaW5MZW5ndGhWYWxpZGF0b3IsXG4gIFtVSUtleXMuTUFYX0xFTkdUSF06IE1heExlbmd0aFZhbGlkYXRvcixcbiAgW1VJS2V5cy5QQVRURVJOXTogUGF0dGVyblZhbGlkYXRvcixcbiAgW1VJS2V5cy5FUVVBTFNdOiBFcXVhbHNWYWxpZGF0b3IsXG4gIFtVSUtleXMuRElGRl06IERpZmZWYWxpZGF0b3IsXG4gIFtVSUtleXMuTEVTU19USEFOXTogTGVzc1RoYW5WYWxpZGF0b3IsXG4gIFtVSUtleXMuTEVTU19USEFOX09SX0VRVUFMXTogTGVzc1RoYW5PckVxdWFsVmFsaWRhdG9yLFxuICBbVUlLZXlzLkdSRUFURVJfVEhBTl06IEdyZWF0ZXJUaGFuVmFsaWRhdG9yLFxuICBbVUlLZXlzLkdSRUFURVJfVEhBTl9PUl9FUVVBTF06IEdyZWF0ZXJUaGFuT3JFcXVhbFZhbGlkYXRvcixcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YW5kYXJkIGRhdGUgZm9ybWF0IHN0cmluZyBmb3IgSFRNTDUgZGF0ZSBpbnB1dHNcbiAqIEBzdW1tYXJ5IEZvcm1hdCBzdHJpbmcgZm9yIEhUTUw1IGRhdGUgaW5wdXRzICh5eXl5LU1NLWRkKVxuICogVGhpcyBjb25zdGFudCBkZWZpbmVzIHRoZSBzdGFuZGFyZCBkYXRlIGZvcm1hdCBzdHJpbmcgdXNlZCBmb3IgSFRNTDUgZGF0ZSBpbnB1dHMuXG4gKlxuICogQGNvbnN0IEhUTUw1RGF0ZUZvcm1hdFxuICogQHR5cGUge3N0cmluZ31cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBIVE1MNURhdGVGb3JtYXQgPSBcInl5eXktTU0tZGRcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29sbGVjdGlvbiBvZiBIVE1MNSBpbnB1dCB0eXBlIHZhbHVlc1xuICogQHN1bW1hcnkgTWFwcyBpbnB1dCB0eXBlIGNvbnN0YW50cyB0byB0aGVpciBIVE1MIGF0dHJpYnV0ZSB2YWx1ZXNcbiAqIFRoaXMgY29uc3RhbnQgcHJvdmlkZXMgYSBtYXBwaW5nIG9mIGlucHV0IHR5cGUgY29uc3RhbnRzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmdcbiAqIEhUTUwgYXR0cmlidXRlIHZhbHVlcyBmb3IgdXNlIGluIGZvcm0gZWxlbWVudHMuXG4gKlxuICogQHR5cGVkZWYge09iamVjdH0gSFRNTDVJbnB1dFR5cGVzTWFwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQlVUVE9OIC0gQnV0dG9uIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDSEVDS0JPWCAtIENoZWNrYm94IGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDT0xPUiAtIENvbG9yIHBpY2tlciBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gREFURSAtIERhdGUgcGlja2VyIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBEQVRFVElNRV9MT0NBTCAtIExvY2FsIGRhdGV0aW1lIHBpY2tlciBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRU1BSUwgLSBFbWFpbCBpbnB1dCB0eXBlIHdpdGggdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IEZJTEUgLSBGaWxlIHVwbG9hZCBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSElEREVOIC0gSGlkZGVuIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBJTUFHRSAtIEltYWdlIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBNT05USCAtIE1vbnRoIHBpY2tlciBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTlVNQkVSIC0gTnVtZXJpYyBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUEFTU1dPUkQgLSBQYXNzd29yZCBpbnB1dCB0eXBlIHdpdGggbWFza2VkIHRleHRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSQURJTyAtIFJhZGlvIGJ1dHRvbiBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkFOR0UgLSBSYW5nZSBzbGlkZXIgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFU0VUIC0gRm9ybSByZXNldCBidXR0b24gaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNFQVJDSCAtIFNlYXJjaCBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gU1VCTUlUIC0gRm9ybSBzdWJtaXQgYnV0dG9uIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBURUwgLSBUZWxlcGhvbmUgbnVtYmVyIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBURVhUIC0gQmFzaWMgdGV4dCBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVElNRSAtIFRpbWUgcGlja2VyIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVUkwgLSBVUkwgaW5wdXQgdHlwZSB3aXRoIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBXRUVLIC0gV2VlayBwaWNrZXIgaW5wdXQgdHlwZVxuICpcbiAqIEBjb25zdCBIVE1MNUlucHV0VHlwZXNcbiAqIEB0eXBlIHtIVE1MNUlucHV0VHlwZXNNYXB9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgSFRNTDVJbnB1dFR5cGVzID0ge1xuICBCVVRUT046IFwiYnV0dG9uXCIsXG4gIENIRUNLQk9YOiBcImNoZWNrYm94XCIsXG4gIENPTE9SOiBcImNvbG9yXCIsXG4gIERBVEU6IFVJS2V5cy5EQVRFLFxuICBEQVRFVElNRV9MT0NBTDogXCJkYXRldGltZS1sb2NhbFwiLFxuICBFTUFJTDogVUlLZXlzLkVNQUlMLFxuICBGSUxFOiBcImZpbGVcIixcbiAgSElEREVOOiBcImhpZGRlblwiLFxuICBJTUFHRTogXCJpbWFnZVwiLFxuICBNT05USDogXCJtb250aFwiLFxuICBOVU1CRVI6IFwibnVtYmVyXCIsXG4gIFBBU1NXT1JEOiBVSUtleXMuUEFTU1dPUkQsXG4gIFJBRElPOiBcInJhZGlvXCIsXG4gIFJBTkdFOiBcInJhbmdlXCIsXG4gIFJFU0VUOiBcInJlc2V0XCIsXG4gIFNFQVJDSDogXCJzZWFyY2hcIixcbiAgU1VCTUlUOiBcInN1Ym1pdFwiLFxuICBURUw6IFwidGVsXCIsXG4gIFRFWFQ6IFwidGV4dFwiLFxuICBURVhUQVJFQTogJ3RleHRhcmVhJyxcbiAgU0VMRUNUOiAnc2VsZWN0JyxcbiAgVElNRTogXCJ0aW1lXCIsXG4gIFVSTDogVUlLZXlzLlVSTCxcbiAgV0VFSzogXCJ3ZWVrXCIsXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcnJheSBvZiBIVE1MNSBpbnB1dCB0eXBlcyB0aGF0IHVzZSBjaGVja2JveGVzXG4gKiBAc3VtbWFyeSBMaXN0IG9mIGlucHV0IHR5cGVzIHRoYXQgcmVwcmVzZW50IGNoZWNrYWJsZSBjb250cm9sc1xuICogVGhpcyBjb25zdGFudCBkZWZpbmVzIGFuIGFycmF5IG9mIEhUTUw1IGlucHV0IHR5cGVzIHRoYXQgcmVwcmVzZW50XG4gKiBjaGVja2FibGUgY29udHJvbHMgKGNoZWNrYm94IGFuZCByYWRpbykuXG4gKlxuICogQGNvbnN0IEhUTUw1Q2hlY2tUeXBlc1xuICogQHR5cGUge3N0cmluZ1tdfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IEhUTUw1Q2hlY2tUeXBlcyA9IFtcbiAgSFRNTDVJbnB1dFR5cGVzLkNIRUNLQk9YLFxuICBIVE1MNUlucHV0VHlwZXMuUkFESU8sXG5dO1xuIl19
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3VpL2NvbnN0YW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUVMLGFBQWEsRUFDYixhQUFhLEVBQ2IsY0FBYyxFQUNkLGVBQWUsRUFDZiwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3BCLHdCQUF3QixFQUN4QixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLFNBQVMsRUFDVCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsWUFBWSxFQUNaLGNBQWMsR0FFZixNQUFNLGdDQUFnQyxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRDRztBQUNILE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRztJQUNwQixPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxNQUFNO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSxhQUFhO0lBQzFCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsTUFBTTtJQUNaLFdBQVcsRUFBRSxRQUFRO0lBQ3JCLFlBQVksRUFBRSx1QkFBdUI7SUFFckMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsUUFBUSxFQUFFLFVBQVU7SUFFcEIsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsU0FBUztJQUVuQixNQUFNLEVBQUUsUUFBUTtJQUNoQixNQUFNLEVBQUUsUUFBUTtJQUNoQixLQUFLLEVBQUUsT0FBTztJQUVkLFNBQVMsRUFBRSxV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SUFDaEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO0lBQ3pCLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsT0FBTztJQUNkLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsSUFBSSxFQUFFLE1BQU07SUFDWixRQUFRLEVBQUUsVUFBVTtJQUNwQixNQUFNLEVBQUUsUUFBUTtJQUNoQixJQUFJLEVBQUUsTUFBTTtJQUNaLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRztJQUNmLElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQztBQUVGOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDN0IsZUFBZSxDQUFDLFFBQVE7SUFDeEIsZUFBZSxDQUFDLEtBQUs7Q0FDdEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnN0YW50cyBhbmQgZW51bXMgZm9yIFVJIHJlbmRlcmluZyBhbmQgdmFsaWRhdGlvblxuICogQHN1bW1hcnkgRGVmaW5lcyBrZXlzLCBtYXBwaW5ncywgYW5kIEhUTUw1IGlucHV0IHR5cGVzIGZvciBVSSBjb21wb25lbnRzXG4gKiBUaGlzIG1vZHVsZSBwcm92aWRlcyBjb25zdGFudHMgdXNlZCB0aHJvdWdob3V0IHRoZSBVSSBkZWNvcmF0b3JzIGxpYnJhcnkgZm9yXG4gKiByZW5kZXJpbmcsIHZhbGlkYXRpb24sIGFuZCBIVE1MIGVsZW1lbnQgZ2VuZXJhdGlvbi5cbiAqIEBtb2R1bGUgdWkvY29uc3RhbnRzXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuXG5pbXBvcnQge1xuICBDb25zdHJ1Y3RvcixcbiAgRGF0ZVZhbGlkYXRvcixcbiAgRGlmZlZhbGlkYXRvcixcbiAgRW1haWxWYWxpZGF0b3IsXG4gIEVxdWFsc1ZhbGlkYXRvcixcbiAgR3JlYXRlclRoYW5PckVxdWFsVmFsaWRhdG9yLFxuICBHcmVhdGVyVGhhblZhbGlkYXRvcixcbiAgTGVzc1RoYW5PckVxdWFsVmFsaWRhdG9yLFxuICBMZXNzVGhhblZhbGlkYXRvcixcbiAgTWF4TGVuZ3RoVmFsaWRhdG9yLFxuICBNYXhWYWxpZGF0b3IsXG4gIE1pbkxlbmd0aFZhbGlkYXRvcixcbiAgTWluVmFsaWRhdG9yLFxuICBNb2RlbEtleXMsXG4gIFBhc3N3b3JkVmFsaWRhdG9yLFxuICBQYXR0ZXJuVmFsaWRhdG9yLFxuICBSZXF1aXJlZFZhbGlkYXRvcixcbiAgU3RlcFZhbGlkYXRvcixcbiAgVVJMVmFsaWRhdG9yLFxuICBWYWxpZGF0aW9uS2V5cyxcbiAgVmFsaWRhdG9yLFxufSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEtleSBjb25zdGFudHMgdXNlZCBmb3IgVUkgbWV0YWRhdGEgYW5kIHJlbmRlcmluZ1xuICogQHN1bW1hcnkgQ29sbGVjdGlvbiBvZiBzdHJpbmcgY29uc3RhbnRzIHVzZWQgYXMga2V5cyBmb3IgVUktcmVsYXRlZCBtZXRhZGF0YVxuICogVGhlc2Uga2V5cyBhcmUgdXNlZCB0aHJvdWdob3V0IHRoZSBsaWJyYXJ5IHRvIHN0b3JlIGFuZCByZXRyaWV2ZSBtZXRhZGF0YSByZWxhdGVkIHRvXG4gKiBVSSBtb2RlbHMsIGVsZW1lbnRzLCBwcm9wZXJ0aWVzLCBhbmQgdmFsaWRhdGlvbiBydWxlcy5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBVSUtleXNUeXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGTEVDVCAtIEJhc2UgcmVmbGVjdGlvbiBrZXkgZm9yIFVJIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVUlNT0RFTCAtIEtleSBmb3IgVUkgbW9kZWwgbWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRU5ERVJFRF9CWSAtIEtleSBmb3Igc3BlY2lmeWluZyByZW5kZXJpbmcgZW5naW5lXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRUxFTUVOVCAtIEtleSBmb3IgZWxlbWVudCBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFBST1AgLSBLZXkgZm9yIHByb3BlcnR5IG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTkFNRSAtIEtleSBmb3IgbmFtZSBhdHRyaWJ1dGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOQU1FX1BSRUZJWCAtIFByZWZpeCBmb3IgaW5wdXQgbmFtZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDVVNUT01fUFJPUFMgLSBLZXkgZm9yIGN1c3RvbSB2YWxpZGF0aW9uIHByb3BlcnRpZXNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVSUxJU1RJVEVNIC0gS2V5IGZvciBsaXN0IGl0ZW0gbWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVSUxJU1RQUk9QIC0gS2V5IGZvciBsaXN0IHByb3BlcnR5IG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVFlQRSAtIEtleSBmb3IgdHlwZSBtZXRhZGF0YVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNVQl9UWVBFIC0gS2V5IGZvciBzdWJ0eXBlIG1ldGFkYXRhXG4gKiBAcHJvcGVydHkge3N0cmluZ30gSElEREVOIC0gS2V5IGZvciBoaWRkZW4gYXR0cmlidXRlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRk9STUFUIC0gS2V5IGZvciBmb3JtYXQgbWV0YWRhdGFcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUFEX09OTFkgLSBLZXkgZm9yIHJlYWRvbmx5IGF0dHJpYnV0ZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFUVVJUkVEIC0gS2V5IGZvciByZXF1aXJlZCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUlOIC0gS2V5IGZvciBtaW5pbXVtIHZhbHVlIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBNSU5fTEVOR1RIIC0gS2V5IGZvciBtaW5pbXVtIGxlbmd0aCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTUFYIC0gS2V5IGZvciBtYXhpbXVtIHZhbHVlIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBNQVhfTEVOR1RIIC0gS2V5IGZvciBtYXhpbXVtIGxlbmd0aCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUEFUVEVSTiAtIEtleSBmb3IgcGF0dGVybiB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gVVJMIC0gS2V5IGZvciBVUkwgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNURVAgLSBLZXkgZm9yIHN0ZXAgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IERBVEUgLSBLZXkgZm9yIGRhdGUgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVNQUlMIC0gS2V5IGZvciBlbWFpbCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUEFTU1dPUkQgLSBLZXkgZm9yIHBhc3N3b3JkIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFUVVBTFMgLSBLZXkgZm9yIGVxdWFsaXR5IHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBESUZGIC0gS2V5IGZvciBkaWZmZXJlbmNlIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBMRVNTX1RIQU4gLSBLZXkgZm9yIGxlc3MgdGhhbiB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTEVTU19USEFOX09SX0VRVUFMIC0gS2V5IGZvciBsZXNzIHRoYW4gb3IgZXF1YWwgdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IEdSRUFURVJfVEhBTiAtIEtleSBmb3IgZ3JlYXRlciB0aGFuIHZhbGlkYXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBHUkVBVEVSX1RIQU5fT1JfRVFVQUwgLSBLZXkgZm9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB2YWxpZGF0aW9uXG4gKlxuICogQGNvbnN0IFVJS2V5c1xuICogQHR5cGUge1VJS2V5c1R5cGV9XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgVUlLZXlzID0ge1xuICBSRUZMRUNUOiBgJHtNb2RlbEtleXMuUkVGTEVDVH0udWkuYCxcbiAgVUlNT0RFTDogXCJ1aW1vZGVsXCIsXG4gIFJFTkRFUkVEX0JZOiBcInJlbmRlcmVkLWJ5XCIsXG4gIEVMRU1FTlQ6IFwiZWxlbWVudFwiLFxuICBQUk9QOiBcInByb3BcIixcbiAgQ0hJTEQ6IFwiY2hpbGRcIixcbiAgTkFNRTogXCJuYW1lXCIsXG4gIE5BTUVfUFJFRklYOiBcImlucHV0LVwiLFxuICBDVVNUT01fUFJPUFM6IFwiY3VzdG9tVmFsaWRhdGlvblByb3BzXCIsXG5cbiAgVUlMSVNUSVRFTTogXCJ1aWxpc3RpdGVtXCIsXG4gIFVJTElTVFBST1A6IFwibGlzdHByb3BcIixcbiAgVUlMQVlPVVQ6IFwidWlsYXlvdXRcIixcbiAgVUlMQVlPVVRJVEVNOiBcInVpbGF5b3V0aXRlbVwiLFxuICBIQU5ETEVSUzogXCJoYW5kbGVyc1wiLFxuXG4gIFRZUEU6IFwidHlwZVwiLFxuICBTVUJfVFlQRTogXCJzdWJ0eXBlXCIsXG5cbiAgSElEREVOOiBcImhpZGRlblwiLFxuICBGT1JNQVQ6IFwiZm9ybWF0XCIsXG4gIE9SREVSOiBcIm9yZGVyXCIsXG5cbiAgUkVBRF9PTkxZOiBcInJlYWRvbmx5XCIsXG4gIFJFUVVJUkVEOiBWYWxpZGF0aW9uS2V5cy5SRVFVSVJFRCxcbiAgTUlOOiBWYWxpZGF0aW9uS2V5cy5NSU4sXG4gIE1JTl9MRU5HVEg6IFZhbGlkYXRpb25LZXlzLk1JTl9MRU5HVEgsXG4gIE1BWDogVmFsaWRhdGlvbktleXMuTUFYLFxuICBNQVhfTEVOR1RIOiBWYWxpZGF0aW9uS2V5cy5NQVhfTEVOR1RILFxuICBQQVRURVJOOiBWYWxpZGF0aW9uS2V5cy5QQVRURVJOLFxuICBVUkw6IFZhbGlkYXRpb25LZXlzLlVSTCxcbiAgU1RFUDogVmFsaWRhdGlvbktleXMuU1RFUCxcbiAgREFURTogVmFsaWRhdGlvbktleXMuREFURSxcbiAgRU1BSUw6IFZhbGlkYXRpb25LZXlzLkVNQUlMLFxuICBQQVNTV09SRDogVmFsaWRhdGlvbktleXMuUEFTU1dPUkQsXG4gIEVRVUFMUzogVmFsaWRhdGlvbktleXMuRVFVQUxTLFxuICBESUZGOiBWYWxpZGF0aW9uS2V5cy5ESUZGLFxuICBMRVNTX1RIQU46IFZhbGlkYXRpb25LZXlzLkxFU1NfVEhBTixcbiAgTEVTU19USEFOX09SX0VRVUFMOiBWYWxpZGF0aW9uS2V5cy5MRVNTX1RIQU5fT1JfRVFVQUwsXG4gIEdSRUFURVJfVEhBTjogVmFsaWRhdGlvbktleXMuR1JFQVRFUl9USEFOLFxuICBHUkVBVEVSX1RIQU5fT1JfRVFVQUw6IFZhbGlkYXRpb25LZXlzLkdSRUFURVJfVEhBTl9PUl9FUVVBTCxcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIE1hcHBpbmcgb2YgaW5wdXQgdHlwZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB2YWxpZGF0b3JzXG4gKiBAc3VtbWFyeSBNYXBzIHNwZWNpYWwgaW5wdXQgdHlwZXMgdG8gdGhlaXIgdmFsaWRhdG9yIGNsYXNzZXNcbiAqIFRoaXMgY29uc3RhbnQgbWFwcyBpbnB1dCB0eXBlcyBsaWtlIGVtYWlsLCBVUkwsIGRhdGUsIGFuZCBwYXNzd29yZCB0byB0aGVpclxuICogY29ycmVzcG9uZGluZyB2YWxpZGF0b3IgY2xhc3NlcyBmcm9tIHRoZSBkZWNvcmF0b3ItdmFsaWRhdGlvbiBsaWJyYXJ5LlxuICpcbiAqIEB0eXBlZGVmIHtPYmplY3QuPHN0cmluZywgQ29uc3RydWN0b3I8VmFsaWRhdG9yPj59IFZhbGlkYXRhYmxlQnlUeXBlTWFwXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPEVtYWlsVmFsaWRhdG9yPn0gZW1haWwgLSBWYWxpZGF0b3IgZm9yIGVtYWlsIGlucHV0c1xuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxVUkxWYWxpZGF0b3I+fSB1cmwgLSBWYWxpZGF0b3IgZm9yIFVSTCBpbnB1dHNcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8RGF0ZVZhbGlkYXRvcj59IGRhdGUgLSBWYWxpZGF0b3IgZm9yIGRhdGUgaW5wdXRzXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPFBhc3N3b3JkVmFsaWRhdG9yPn0gcGFzc3dvcmQgLSBWYWxpZGF0b3IgZm9yIHBhc3N3b3JkIGlucHV0c1xuICpcbiAqIEBjb25zdCBWYWxpZGF0YWJsZUJ5VHlwZVxuICogQHR5cGUge1ZhbGlkYXRhYmxlQnlUeXBlTWFwfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IFZhbGlkYXRhYmxlQnlUeXBlOiBSZWNvcmQ8c3RyaW5nLCBDb25zdHJ1Y3RvcjxWYWxpZGF0b3I+PiA9IHtcbiAgW1VJS2V5cy5FTUFJTF06IEVtYWlsVmFsaWRhdG9yLFxuICBbVUlLZXlzLlVSTF06IFVSTFZhbGlkYXRvcixcbiAgW1VJS2V5cy5EQVRFXTogRGF0ZVZhbGlkYXRvcixcbiAgW1VJS2V5cy5QQVNTV09SRF06IFBhc3N3b3JkVmFsaWRhdG9yLFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTWFwcGluZyBvZiB2YWxpZGF0aW9uIGF0dHJpYnV0ZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyB2YWxpZGF0b3JzXG4gKiBAc3VtbWFyeSBNYXBzIEhUTUwgdmFsaWRhdGlvbiBhdHRyaWJ1dGVzIHRvIHRoZWlyIHZhbGlkYXRvciBjbGFzc2VzXG4gKiBUaGlzIGNvbnN0YW50IG1hcHMgSFRNTCB2YWxpZGF0aW9uIGF0dHJpYnV0ZXMgbGlrZSByZXF1aXJlZCwgbWluLCBtYXgsIHBhdHRlcm4sIGV0Yy5cbiAqIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsaWRhdG9yIGNsYXNzZXMgZnJvbSB0aGUgZGVjb3JhdG9yLXZhbGlkYXRpb24gbGlicmFyeS5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0LjxzdHJpbmcsIENvbnN0cnVjdG9yPFZhbGlkYXRvcj4+fSBWYWxpZGF0YWJsZUJ5QXR0cmlidXRlTWFwXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPFJlcXVpcmVkVmFsaWRhdG9yPn0gcmVxdWlyZWQgLSBWYWxpZGF0b3IgZm9yIHJlcXVpcmVkIGZpZWxkc1xuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxNaW5WYWxpZGF0b3I+fSBtaW4gLSBWYWxpZGF0b3IgZm9yIG1pbmltdW0gdmFsdWVcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8TWF4VmFsaWRhdG9yPn0gbWF4IC0gVmFsaWRhdG9yIGZvciBtYXhpbXVtIHZhbHVlXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPFN0ZXBWYWxpZGF0b3I+fSBzdGVwIC0gVmFsaWRhdG9yIGZvciBzdGVwIHZhbHVlXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPE1pbkxlbmd0aFZhbGlkYXRvcj59IG1pbmxlbmd0aCAtIFZhbGlkYXRvciBmb3IgbWluaW11bSBsZW5ndGhcbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8TWF4TGVuZ3RoVmFsaWRhdG9yPn0gbWF4bGVuZ3RoIC0gVmFsaWRhdG9yIGZvciBtYXhpbXVtIGxlbmd0aFxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxQYXR0ZXJuVmFsaWRhdG9yPn0gcGF0dGVybiAtIFZhbGlkYXRvciBmb3IgcmVnZXggcGF0dGVyblxuICogQHByb3BlcnR5IHtDb25zdHJ1Y3RvcjxFcXVhbHNWYWxpZGF0b3I+fSBlcXVhbHMgLSBWYWxpZGF0b3IgZm9yIGVxdWFsaXR5XG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPERpZmZWYWxpZGF0b3I+fSBkaWZmIC0gVmFsaWRhdG9yIGZvciBkaWZmZXJlbmNlXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPExlc3NUaGFuVmFsaWRhdG9yPn0gbGVzc3RoYW4gLSBWYWxpZGF0b3IgZm9yIGxlc3MgdGhhbiBjb21wYXJpc29uXG4gKiBAcHJvcGVydHkge0NvbnN0cnVjdG9yPExlc3NUaGFuT3JFcXVhbFZhbGlkYXRvcj59IGxlc3N0aGFub3JlcXVhbCAtIFZhbGlkYXRvciBmb3IgbGVzcyB0aGFuIG9yIGVxdWFsIGNvbXBhcmlzb25cbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8R3JlYXRlclRoYW5WYWxpZGF0b3I+fSBncmVhdGVydGhhbiAtIFZhbGlkYXRvciBmb3IgZ3JlYXRlciB0aGFuIGNvbXBhcmlzb25cbiAqIEBwcm9wZXJ0eSB7Q29uc3RydWN0b3I8R3JlYXRlclRoYW5PckVxdWFsVmFsaWRhdG9yPn0gZ3JlYXRlcnRoYW5vcmVxdWFsIC0gVmFsaWRhdG9yIGZvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgY29tcGFyaXNvblxuICpcbiAqIEBjb25zdCBWYWxpZGF0YWJsZUJ5QXR0cmlidXRlXG4gKiBAdHlwZSB7VmFsaWRhdGFibGVCeUF0dHJpYnV0ZU1hcH1cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBWYWxpZGF0YWJsZUJ5QXR0cmlidXRlOiBSZWNvcmQ8c3RyaW5nLCBDb25zdHJ1Y3RvcjxWYWxpZGF0b3I+PiA9IHtcbiAgW1VJS2V5cy5SRVFVSVJFRF06IFJlcXVpcmVkVmFsaWRhdG9yLFxuICBbVUlLZXlzLk1JTl06IE1pblZhbGlkYXRvcixcbiAgW1VJS2V5cy5NQVhdOiBNYXhWYWxpZGF0b3IsXG4gIFtVSUtleXMuU1RFUF06IFN0ZXBWYWxpZGF0b3IsXG4gIFtVSUtleXMuTUlOX0xFTkdUSF06IE1pbkxlbmd0aFZhbGlkYXRvcixcbiAgW1VJS2V5cy5NQVhfTEVOR1RIXTogTWF4TGVuZ3RoVmFsaWRhdG9yLFxuICBbVUlLZXlzLlBBVFRFUk5dOiBQYXR0ZXJuVmFsaWRhdG9yLFxuICBbVUlLZXlzLkVRVUFMU106IEVxdWFsc1ZhbGlkYXRvcixcbiAgW1VJS2V5cy5ESUZGXTogRGlmZlZhbGlkYXRvcixcbiAgW1VJS2V5cy5MRVNTX1RIQU5dOiBMZXNzVGhhblZhbGlkYXRvcixcbiAgW1VJS2V5cy5MRVNTX1RIQU5fT1JfRVFVQUxdOiBMZXNzVGhhbk9yRXF1YWxWYWxpZGF0b3IsXG4gIFtVSUtleXMuR1JFQVRFUl9USEFOXTogR3JlYXRlclRoYW5WYWxpZGF0b3IsXG4gIFtVSUtleXMuR1JFQVRFUl9USEFOX09SX0VRVUFMXTogR3JlYXRlclRoYW5PckVxdWFsVmFsaWRhdG9yLFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3RhbmRhcmQgZGF0ZSBmb3JtYXQgc3RyaW5nIGZvciBIVE1MNSBkYXRlIGlucHV0c1xuICogQHN1bW1hcnkgRm9ybWF0IHN0cmluZyBmb3IgSFRNTDUgZGF0ZSBpbnB1dHMgKHl5eXktTU0tZGQpXG4gKiBUaGlzIGNvbnN0YW50IGRlZmluZXMgdGhlIHN0YW5kYXJkIGRhdGUgZm9ybWF0IHN0cmluZyB1c2VkIGZvciBIVE1MNSBkYXRlIGlucHV0cy5cbiAqXG4gKiBAY29uc3QgSFRNTDVEYXRlRm9ybWF0XG4gKiBAdHlwZSB7c3RyaW5nfVxuICogQHJlYWRvbmx5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnVpLWRlY29yYXRvcnNcbiAqL1xuZXhwb3J0IGNvbnN0IEhUTUw1RGF0ZUZvcm1hdCA9IFwieXl5eS1NTS1kZFwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb2xsZWN0aW9uIG9mIEhUTUw1IGlucHV0IHR5cGUgdmFsdWVzXG4gKiBAc3VtbWFyeSBNYXBzIGlucHV0IHR5cGUgY29uc3RhbnRzIHRvIHRoZWlyIEhUTUwgYXR0cmlidXRlIHZhbHVlc1xuICogVGhpcyBjb25zdGFudCBwcm92aWRlcyBhIG1hcHBpbmcgb2YgaW5wdXQgdHlwZSBjb25zdGFudHMgdG8gdGhlaXIgY29ycmVzcG9uZGluZ1xuICogSFRNTCBhdHRyaWJ1dGUgdmFsdWVzIGZvciB1c2UgaW4gZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBIVE1MNUlucHV0VHlwZXNNYXBcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBCVVRUT04gLSBCdXR0b24gaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IENIRUNLQk9YIC0gQ2hlY2tib3ggaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IENPTE9SIC0gQ29sb3IgcGlja2VyIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBEQVRFIC0gRGF0ZSBwaWNrZXIgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IERBVEVUSU1FX0xPQ0FMIC0gTG9jYWwgZGF0ZXRpbWUgcGlja2VyIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBFTUFJTCAtIEVtYWlsIGlucHV0IHR5cGUgd2l0aCB2YWxpZGF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRklMRSAtIEZpbGUgdXBsb2FkIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBISURERU4gLSBIaWRkZW4gaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElNQUdFIC0gSW1hZ2UgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE1PTlRIIC0gTW9udGggcGlja2VyIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBOVU1CRVIgLSBOdW1lcmljIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBQQVNTV09SRCAtIFBhc3N3b3JkIGlucHV0IHR5cGUgd2l0aCBtYXNrZWQgdGV4dFxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJBRElPIC0gUmFkaW8gYnV0dG9uIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSQU5HRSAtIFJhbmdlIHNsaWRlciBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVTRVQgLSBGb3JtIHJlc2V0IGJ1dHRvbiBpbnB1dCB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gU0VBUkNIIC0gU2VhcmNoIGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBTVUJNSVQgLSBGb3JtIHN1Ym1pdCBidXR0b24gaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFRFTCAtIFRlbGVwaG9uZSBudW1iZXIgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFRFWFQgLSBCYXNpYyB0ZXh0IGlucHV0IHR5cGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBUSU1FIC0gVGltZSBwaWNrZXIgaW5wdXQgdHlwZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFVSTCAtIFVSTCBpbnB1dCB0eXBlIHdpdGggdmFsaWRhdGlvblxuICogQHByb3BlcnR5IHtzdHJpbmd9IFdFRUsgLSBXZWVrIHBpY2tlciBpbnB1dCB0eXBlXG4gKlxuICogQGNvbnN0IEhUTUw1SW5wdXRUeXBlc1xuICogQHR5cGUge0hUTUw1SW5wdXRUeXBlc01hcH1cbiAqIEByZWFkb25seVxuICogQG1lbWJlck9mIG1vZHVsZTp1aS1kZWNvcmF0b3JzXG4gKi9cbmV4cG9ydCBjb25zdCBIVE1MNUlucHV0VHlwZXMgPSB7XG4gIEJVVFRPTjogXCJidXR0b25cIixcbiAgQ0hFQ0tCT1g6IFwiY2hlY2tib3hcIixcbiAgQ09MT1I6IFwiY29sb3JcIixcbiAgREFURTogVUlLZXlzLkRBVEUsXG4gIERBVEVUSU1FX0xPQ0FMOiBcImRhdGV0aW1lLWxvY2FsXCIsXG4gIEVNQUlMOiBVSUtleXMuRU1BSUwsXG4gIEZJTEU6IFwiZmlsZVwiLFxuICBISURERU46IFwiaGlkZGVuXCIsXG4gIElNQUdFOiBcImltYWdlXCIsXG4gIE1PTlRIOiBcIm1vbnRoXCIsXG4gIE5VTUJFUjogXCJudW1iZXJcIixcbiAgUEFTU1dPUkQ6IFVJS2V5cy5QQVNTV09SRCxcbiAgUkFESU86IFwicmFkaW9cIixcbiAgUkFOR0U6IFwicmFuZ2VcIixcbiAgUkVTRVQ6IFwicmVzZXRcIixcbiAgU0VBUkNIOiBcInNlYXJjaFwiLFxuICBTVUJNSVQ6IFwic3VibWl0XCIsXG4gIFRFTDogXCJ0ZWxcIixcbiAgVEVYVDogXCJ0ZXh0XCIsXG4gIFRFWFRBUkVBOiAndGV4dGFyZWEnLFxuICBTRUxFQ1Q6ICdzZWxlY3QnLFxuICBUSU1FOiBcInRpbWVcIixcbiAgVVJMOiBVSUtleXMuVVJMLFxuICBXRUVLOiBcIndlZWtcIixcbn07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIEhUTUw1IGlucHV0IHR5cGVzIHRoYXQgdXNlIGNoZWNrYm94ZXNcbiAqIEBzdW1tYXJ5IExpc3Qgb2YgaW5wdXQgdHlwZXMgdGhhdCByZXByZXNlbnQgY2hlY2thYmxlIGNvbnRyb2xzXG4gKiBUaGlzIGNvbnN0YW50IGRlZmluZXMgYW4gYXJyYXkgb2YgSFRNTDUgaW5wdXQgdHlwZXMgdGhhdCByZXByZXNlbnRcbiAqIGNoZWNrYWJsZSBjb250cm9scyAoY2hlY2tib3ggYW5kIHJhZGlvKS5cbiAqXG4gKiBAY29uc3QgSFRNTDVDaGVja1R5cGVzXG4gKiBAdHlwZSB7c3RyaW5nW119XG4gKiBAcmVhZG9ubHlcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dWktZGVjb3JhdG9yc1xuICovXG5leHBvcnQgY29uc3QgSFRNTDVDaGVja1R5cGVzID0gW1xuICBIVE1MNUlucHV0VHlwZXMuQ0hFQ0tCT1gsXG4gIEhUTUw1SW5wdXRUeXBlcy5SQURJTyxcbl07XG4iXX0=
|
|
@@ -36,6 +36,36 @@ import { CrudOperationKeys } from "./types";
|
|
|
36
36
|
* RenderingEngine->>UI: Render or hide based on current operation
|
|
37
37
|
*/
|
|
38
38
|
export declare function hideOn(...operations: CrudOperationKeys[]): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
|
39
|
+
/**
|
|
40
|
+
* @description Decorator that sets the order of a UI element
|
|
41
|
+
* @summary Specifies the rendering order for UI components
|
|
42
|
+
* This decorator applies metadata to the property or class, indicating its order in the UI rendering sequence.
|
|
43
|
+
*
|
|
44
|
+
* @param {number} [order=1] The order value for the UI element (default is 1)
|
|
45
|
+
* @return {Function} A property or class decorator function
|
|
46
|
+
*
|
|
47
|
+
* @function uiorder
|
|
48
|
+
* @category Property Decorators
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // Set order for a field
|
|
52
|
+
* @uiorder(2)
|
|
53
|
+
* fieldName: string;
|
|
54
|
+
*
|
|
55
|
+
* // Set order for a class
|
|
56
|
+
* @uiorder(1)
|
|
57
|
+
* class UserProfile { ... }
|
|
58
|
+
*
|
|
59
|
+
* @mermaid
|
|
60
|
+
* sequenceDiagram
|
|
61
|
+
* participant System
|
|
62
|
+
* participant uiorder
|
|
63
|
+
* participant property
|
|
64
|
+
* System->>uiorder:do(property)
|
|
65
|
+
* uiorder->>property: sets order metadata
|
|
66
|
+
* uiorder->>System: returns decorated property
|
|
67
|
+
*/
|
|
68
|
+
export declare function uiorder(order?: number): (target: object, propertyKey?: string | symbol | unknown, descriptor?: PropertyDescriptor) => void;
|
|
39
69
|
/**
|
|
40
70
|
* @description Decorator that completely hides a property in all UI operations
|
|
41
71
|
* @summary Makes a property invisible in all CRUD operations
|
package/lib/esm/ui/decorators.js
CHANGED
|
@@ -41,6 +41,38 @@ import { OperationKeys } from "@decaf-ts/db-decorators";
|
|
|
41
41
|
export function hideOn(...operations) {
|
|
42
42
|
return propMetadata(RenderingEngine.key(UIKeys.HIDDEN), operations);
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* @description Decorator that sets the order of a UI element
|
|
46
|
+
* @summary Specifies the rendering order for UI components
|
|
47
|
+
* This decorator applies metadata to the property or class, indicating its order in the UI rendering sequence.
|
|
48
|
+
*
|
|
49
|
+
* @param {number} [order=1] The order value for the UI element (default is 1)
|
|
50
|
+
* @return {Function} A property or class decorator function
|
|
51
|
+
*
|
|
52
|
+
* @function uiorder
|
|
53
|
+
* @category Property Decorators
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* // Set order for a field
|
|
57
|
+
* @uiorder(2)
|
|
58
|
+
* fieldName: string;
|
|
59
|
+
*
|
|
60
|
+
* // Set order for a class
|
|
61
|
+
* @uiorder(1)
|
|
62
|
+
* class UserProfile { ... }
|
|
63
|
+
*
|
|
64
|
+
* @mermaid
|
|
65
|
+
* sequenceDiagram
|
|
66
|
+
* participant System
|
|
67
|
+
* participant uiorder
|
|
68
|
+
* participant property
|
|
69
|
+
* System->>uiorder:do(property)
|
|
70
|
+
* uiorder->>property: sets order metadata
|
|
71
|
+
* uiorder->>System: returns decorated property
|
|
72
|
+
*/
|
|
73
|
+
export function uiorder(order = 1) {
|
|
74
|
+
return propMetadata(RenderingEngine.key(UIKeys.ORDER), order);
|
|
75
|
+
}
|
|
44
76
|
/**
|
|
45
77
|
* @description Decorator that completely hides a property in all UI operations
|
|
46
78
|
* @summary Makes a property invisible in all CRUD operations
|
|
@@ -368,4 +400,4 @@ export function uilayoutitem(col, row = 1, props = {}) {
|
|
|
368
400
|
propMetadata(RenderingEngine.key(UIKeys.UILAYOUTITEM), metadata)(target, propertyKey);
|
|
369
401
|
};
|
|
370
402
|
}
|
|
371
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sRUFBRSx1QkFBb0I7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBUTlELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQW9CO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBRyxVQUErQjtJQUN2RCxPQUFPLFlBQVksQ0FDakIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ2xDLFVBQVUsQ0FDWCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0NHO0FBQ0gsTUFBTSxVQUFVLE1BQU07SUFDcEIsT0FBTyxNQUFNLENBQ1gsYUFBYSxDQUFDLE1BQU0sRUFDcEIsYUFBYSxDQUFDLElBQUksRUFDbEIsYUFBYSxDQUFDLE1BQU0sRUFDcEIsYUFBYSxDQUFDLE1BQU0sQ0FDckIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUN2QixHQUFXLEVBQ1gsS0FBMkIsRUFDM0IsWUFBcUIsS0FBSztJQUUxQixPQUFPLENBQUMsUUFBYSxFQUFFLFdBQWlCLEVBQUUsRUFBRTtRQUMxQyxNQUFNLFFBQVEsR0FBc0I7WUFDbEMsR0FBRyxFQUFFLEdBQUc7WUFDUixTQUFTLEVBQUUsU0FBUztZQUNwQixLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FB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S0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQztTQUNoQyxDQUFDO1FBQ0YsWUFBWSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUM5RCxNQUFNLEVBQ04sV0FBVyxDQUNaLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwicmVmbGVjdC1tZXRhZGF0YVwiO1xuaW1wb3J0IHsgVUlLZXlzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBwcm9wTWV0YWRhdGEgfSBmcm9tIFwiQGRlY2FmLXRzL2RlY29yYXRvci12YWxpZGF0aW9uXCI7XG5pbXBvcnQge1xuICBDcnVkT3BlcmF0aW9uS2V5cyxcbiAgVUlFbGVtZW50TWV0YWRhdGEsXG4gIFVJTGF5b3V0SXRlbU1ldGFkYXRhLFxuICBVSUxpc3RQcm9wTWV0YWRhdGEsXG4gIFVJUHJvcE1ldGFkYXRhLFxufSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgUmVuZGVyaW5nRW5naW5lIH0gZnJvbSBcIi4vUmVuZGVyaW5nXCI7XG5pbXBvcnQgeyBPcGVyYXRpb25LZXlzIH0gZnJvbSBcIkBkZWNhZi10cy9kYi1kZWNvcmF0b3JzXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRvciB0aGF0IGhpZGVzIGEgcHJvcGVydHkgZHVyaW5nIHNwZWNpZmljIENSVUQgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgQ29udHJvbHMgcHJvcGVydHkgdmlzaWJpbGl0eSBiYXNlZCBvbiBvcGVyYXRpb24gdHlwZVxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHdoaWNoIENSVUQgb3BlcmF0aW9ucyBzaG91bGQgaGlkZSBhIHByb3BlcnR5XG4gKiBpbiB0aGUgVUkuIFRoZSBwcm9wZXJ0eSB3aWxsIG9ubHkgYmUgdmlzaWJsZSBkdXJpbmcgb3BlcmF0aW9ucyBub3Qgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSBvcGVyYXRpb25zIC0gVGhlIENSVUQgb3BlcmF0aW9ucyBkdXJpbmcgd2hpY2ggdGhlIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiBoaWRlT25cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhpZGUgdGhlIHBhc3N3b3JkIGZpZWxkIGR1cmluZyBSRUFEIG9wZXJhdGlvbnNcbiAqIGNsYXNzIFVzZXIge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgdXNlcm5hbWU6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAaGlkZU9uKE9wZXJhdGlvbktleXMuUkVBRClcbiAqICAgcGFzc3dvcmQ6IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IGhpZGVPblxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgVUlcbiAqICAgTW9kZWwtPj5oaWRlT246IEFwcGx5IHRvIHByb3BlcnR5XG4gKiAgIGhpZGVPbi0+Pk1vZGVsOiBBZGQgaGlkZGVuIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBDaGVjayBpZiBwcm9wZXJ0eSBzaG91bGQgYmUgaGlkZGVuXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gaGlkZGVuIG9wZXJhdGlvbnNcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+VUk6IFJlbmRlciBvciBoaWRlIGJhc2VkIG9uIGN1cnJlbnQgb3BlcmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoaWRlT24oLi4ub3BlcmF0aW9uczogQ3J1ZE9wZXJhdGlvbktleXNbXSkge1xuICByZXR1cm4gcHJvcE1ldGFkYXRhPENydWRPcGVyYXRpb25LZXlzW10+KFxuICAgIFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkhJRERFTiksXG4gICAgb3BlcmF0aW9uc1xuICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBjb21wbGV0ZWx5IGhpZGVzIGEgcHJvcGVydHkgaW4gYWxsIFVJIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IE1ha2VzIGEgcHJvcGVydHkgaW52aXNpYmxlIGluIGFsbCBDUlVEIG9wZXJhdGlvbnNcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgaGlkZU9uIHRoYXQgaGlkZXMgYSBwcm9wZXJ0eVxuICogZHVyaW5nIGFsbCBDUlVEIG9wZXJhdGlvbnMgKENSRUFURSwgUkVBRCwgVVBEQVRFLCBERUxFVEUpLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiBoaWRkZW5cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbXBsZXRlbHkgaGlkZSB0aGUgaW50ZXJuYWxJZCBmaWVsZCBpbiB0aGUgVUlcbiAqIGNsYXNzIFByb2R1Y3Qge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgbmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEBoaWRkZW4oKVxuICogICBpbnRlcm5hbElkOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBoaWRkZW5cbiAqICAgcGFydGljaXBhbnQgaGlkZU9uXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBNb2RlbC0+PmhpZGRlbjogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgaGlkZGVuLT4+aGlkZU9uOiBDYWxsIHdpdGggYWxsIG9wZXJhdGlvbnNcbiAqICAgaGlkZU9uLT4+TW9kZWw6IEFkZCBoaWRkZW4gbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IENoZWNrIGlmIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBhbGwgb3BlcmF0aW9uc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogQWx3YXlzIGhpZGUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGRlbigpIHtcbiAgcmV0dXJuIGhpZGVPbihcbiAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgT3BlcmF0aW9uS2V5cy5ERUxFVEVcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgc3BlY2lmaWVzIGhvdyBhIHByb3BlcnR5IHNob3VsZCBiZSByZW5kZXJlZCBhcyBhIFVJIGVsZW1lbnRcbiAqIEBzdW1tYXJ5IE1hcHMgYSBtb2RlbCBwcm9wZXJ0eSB0byBhIHNwZWNpZmljIFVJIGVsZW1lbnQgd2l0aCBjdXN0b20gcHJvcGVydGllc1xuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgd2hpY2ggSFRNTCBlbGVtZW50IG9yIGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZFxuICogdG8gcmVuZGVyIGEgc3BlY2lmaWMgcHJvcGVydHksIGFsb25nIHdpdGggYW55IGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoYXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBIVE1MIGVsZW1lbnQgb3IgY29tcG9uZW50IHRhZyBuYW1lIHRvIHVzZSBmb3IgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtwcm9wc10gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlcmlhbGl6ZT1mYWxzZV0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHNlcmlhbGl6ZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWVsZW1lbnRcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlbmRlciBhIHByb3BlcnR5IGFzIGEgdGV4dCBpbnB1dFxuICogY2xhc3MgTG9naW5Gb3JtIHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aWVsZW1lbnQoJ2lucHV0JywgeyB0eXBlOiAndGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgdXNlcm5hbWUnIH0pXG4gKiAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnaW5wdXQnLCB7IHR5cGU6ICdwYXNzd29yZCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgcGFzc3dvcmQnIH0pXG4gKiAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnYnV0dG9uJywgeyBjbGFzczogJ2J0bi1wcmltYXJ5JyB9KVxuICogICBzdWJtaXQ6IHN0cmluZyA9ICdMb2dpbic7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aWVsZW1lbnRcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IFVJXG4gKiAgIE1vZGVsLT4+dWllbGVtZW50OiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWVsZW1lbnQtPj5Nb2RlbDogQWRkIGVsZW1lbnQgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBlbGVtZW50IG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gdGFnIGFuZCBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogUmVuZGVyIHdpdGggc3BlY2lmaWVkIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpZWxlbWVudChcbiAgdGFnOiBzdHJpbmcsXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgc2VyaWFsaXplOiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJRWxlbWVudE1ldGFkYXRhID0ge1xuICAgICAgdGFnOiB0YWcsXG4gICAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcbiAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcyB8fCB7fSwge1xuICAgICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkVMRU1FTlQpLCBtZXRhZGF0YSkoXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIHByb3BlcnR5S2V5XG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFwcyBhIG1vZGVsIHByb3BlcnR5IHRvIGEgVUkgY29tcG9uZW50IHByb3BlcnR5XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHBhc3NlZCB0byBhIFVJIGNvbXBvbmVudFxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgaG93IGEgbW9kZWwgcHJvcGVydHkgc2hvdWxkIGJlIG1hcHBlZCB0b1xuICogYSBwcm9wZXJ0eSBvZiB0aGUgVUkgY29tcG9uZW50IHdoZW4gcmVuZGVyaW5nLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmVcbiAqIGRlY29yYXRlZCB3aXRoIEB1aW1vZGVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBwYXNzIHRvIHRoZSBjb21wb25lbnQgKGRlZmF1bHRzIHRvIHRoZSBwcm9wZXJ0eSBrZXkpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzdHJpbmdpZnk9ZmFsc2VdIFdoZXRoZXIgdG8gc3RyaW5naWZ5IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpcHJvcFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTWFwIG1vZGVsIHByb3BlcnRpZXMgdG8gY29tcG9uZW50IHByb3BlcnRpZXNcbiAqIEB1aW1vZGVsKCd1c2VyLXByb2ZpbGUnKVxuICogY2xhc3MgVXNlclByb2ZpbGUge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpcHJvcCgpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICdmdWxsTmFtZScgdG8gdGhlIGNvbXBvbmVudFxuICogICBmdWxsTmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aXByb3AoJ3VzZXJFbWFpbCcpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICd1c2VyRW1haWwnIHRvIHRoZSBjb21wb25lbnRcbiAqICAgZW1haWw6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlwcm9wKCd1c2VyRGF0YScsIHRydWUpIC8vIFdpbGwgYmUgcGFzc2VkIGFzIHN0cmluZ2lmaWVkIEpTT05cbiAqICAgdXNlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aXByb3BcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudFxuICogICBNb2RlbC0+PnVpcHJvcDogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgdWlwcm9wLT4+TW9kZWw6IEFkZCBwcm9wIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBHZXQgcHJvcCBtZXRhZGF0YVxuICogICBNb2RlbC0+PlJlbmRlcmluZ0VuZ2luZTogUmV0dXJuIHByb3AgbmFtZSBhbmQgc3RyaW5naWZ5IGZsYWdcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+Q29tcG9uZW50OiBQYXNzIHByb3BlcnR5IHdpdGggc3BlY2lmaWVkIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpcHJvcChcbiAgcHJvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJUHJvcE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5QUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXBzIGEgbmVzdGVkIG1vZGVsIHByb3BlcnR5IHRvIGEgVUkgY29tcG9uZW50IHByb3BlcnR5LlxuICogQHN1bW1hcnkgRGVmaW5lcyBob3cgYSBwYXJlbnQgY29tcG9uZW50IHNob3VsZCByZW5kZXIgdGhlIGNoaWxkIG1vZGVsIHdoZW4gbmVzdGVkLlxuICpcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIHVzZWQgdG8gZGVjb3JhdGUgcHJvcGVydGllcyB0aGF0IGFyZSBuZXN0ZWQgbW9kZWxzLlxuICogV2hlbiBhcHBsaWVkLCBpdCBhbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCB0YWcgb2YgdGhlIGNoaWxkIG1vZGVsIHdpdGggdGhlIHByb3ZpZGVkIG9uZSxcbiAqIGVuYWJsaW5nIGRpZmZlcmVudCByZW5kZXJpbmcgYmVoYXZpb3Igd2hlbiB0aGUgbW9kZWwgYWN0cyBhcyBhIGNoaWxkIChuZXN0ZWQpXG4gKiBjb21wYXJlZCB0byB3aGVuIGl0IGlzIHJlbmRlcmVkIGFzIHRoZSBwYXJlbnQgbW9kZWwuXG4gKlxuICogSXQgcmVxdWlyZXMgdGhlIGNsYXNzIHRvIGJlIGRlY29yYXRlZCB3aXRoIGBAdWltb2RlbGAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXp6IFRoZSBtb2RlbCBjbGFzcyBuYW1lIHRvIHBhc3MgdG8gdGhlIGNvbXBvbmVudCAoZGVmYXVsdHMgdG8gdGhlIHByb3BlcnR5IGtleSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBIVE1MIGVsZW1lbnQgb3IgY29tcG9uZW50IHRhZyBuYW1lIHRvIG92ZXJyaWRlIHRoZSBVSSB0YWcgb2YgdGhlIG5lc3RlZCBtb2RlbFxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXJpYWxpemU9ZmFsc2VdIFdoZXRoZXIgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBzZXJpYWxpemVkXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBwcm9wZXJ0eSBkZWNvcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIHVpY2hpbGRcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE1hcCBhIG5lc3RlZCBtb2RlbCB0byBhIGNvbXBvbmVudCBwcm9wZXJ0eSB3aXRoIGEgZGlmZmVyZW50IHRhZyB3aGVuIG5lc3RlZFxuICogQHVpbW9kZWwoJ2FkZHJlc3MtY29tcG9uZW50JylcbiAqIGNsYXNzIEFkZHJlc3Mge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgc3RyZWV0OiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgY2l0eTogc3RyaW5nO1xuICogfVxuICpcbiAqIEB1aW1vZGVsKCd1c2VyLXByb2ZpbGUnKVxuICogY2xhc3MgVXNlclByb2ZpbGUge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpY2hpbGQoQWRkcmVzcy5uYW1lLCAnYWRkcmVzcy1jaGlsZC1jb21wb25lbnQnKVxuICogICBhZGRyZXNzOiBBZGRyZXNzO1xuICogfVxuICpcbiAqIC8vIEluIHRoaXMgZXhhbXBsZSwgdGhlIEFkZHJlc3MgbW9kZWwgaGFzIHRoZSBkZWZhdWx0IHRhZyAnYWRkcmVzcy1jb21wb25lbnQnIHdoZW4gcmVuZGVyZWQgYXMgYSByb290IGNvbXBvbmVudCxcbiAqIC8vIGJ1dCB3aGVuIHVzZWQgaW5zaWRlIFVzZXJQcm9maWxlLCBpdCBpcyByZW5kZXJlZCB3aXRoIHRoZSBvdmVycmlkZGVuIHRhZyAnYWRkcmVzcy1jaGlsZC1jb21wb25lbnQnXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aWNoaWxkXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBwYXJ0aWNpcGFudCBDb21wb25lbnRcbiAqICAgTW9kZWwtPj51aWNoaWxkOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWNoaWxkLT4+TW9kZWw6IEFkZCBjaGlsZCBtZXRhZGF0YVxuICogICBSZW5kZXJpbmdFbmdpbmUtPj5Nb2RlbDogR2V0IGNoaWxkIG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gcHJvcCBuYW1lLCBzdHJpbmdpZnkgZmxhZywgYW5kIGNoaWxkIHRhZyBvdmVycmlkZVxuICogICBSZW5kZXJpbmdFbmdpbmUtPj5Db21wb25lbnQ6IFBhc3MgcHJvcGVydHkgd2l0aCBzcGVjaWZpZWQgbmFtZSBhbmQgcmVuZGVyIHdpdGggb3ZlcnJpZGRlbiB0YWcgaWYgbmVzdGVkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVpY2hpbGQoXG4gIGNsYXp6OiBzdHJpbmcsXG4gIHRhZzogc3RyaW5nLFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICBpc0FycmF5OiBib29sZWFuID0gZmFsc2UsXG4gIHNlcmlhbGl6ZTogYm9vbGVhbiA9IGZhbHNlXG4pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBVSUVsZW1lbnRNZXRhZGF0YSA9IHtcbiAgICAgIHRhZzogdGFnLFxuICAgICAgc2VyaWFsaXplOiBzZXJpYWxpemUsXG4gICAgICBwcm9wczogT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMgfHwge30sIHtcbiAgICAgICAgbmFtZTogY2xhenogfHwgcHJvcGVydHlLZXksXG4gICAgICB9LCBpc0FycmF5ID8ge2N1c3RvbVR5cGVzOiBbQXJyYXkubmFtZV0sIG11bHRpcGxlOiB0cnVlfSA6IHttdWx0aXBsZTogZmFsc2V9KSxcbiAgICB9O1xuXG4gICAgcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkNISUxEKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXBzIGEgbW9kZWwgcHJvcGVydHkgdG8gYSBsaXN0IGl0ZW0gY29tcG9uZW50XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGEgbGlzdCBjb250ZXh0XG4gKiBUaGlzIGRlY29yYXRvciBhbGxvd3MgeW91IHRvIGRlZmluZSBob3cgYSBtb2RlbCBwcm9wZXJ0eSBjb250YWluaW5nIGEgbGlzdFxuICogc2hvdWxkIGJlIHJlbmRlcmVkLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmUgZGVjb3JhdGVkIHdpdGggQHVpbGlzdGl0ZW0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wTmFtZV0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHBhc3MgdG8gdGhlIGxpc3QgY29tcG9uZW50IChkZWZhdWx0cyB0byB0aGUgcHJvcGVydHkga2V5KVxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBsaXN0IGNvbnRhaW5lclxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpbGlzdHByb3BcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERlZmluZSBhIGxpc3QgcHJvcGVydHkgd2l0aCBjdXN0b20gcmVuZGVyaW5nXG4gKiBAdWltb2RlbCgndG9kby1saXN0JylcbiAqIGNsYXNzIFRvZG9MaXN0IHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIHRpdGxlOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGlzdHByb3AoJ2l0ZW1zJywgeyBjbGFzczogJ3RvZG8taXRlbXMtY29udGFpbmVyJyB9KVxuICogICBpdGVtczogVG9kb0l0ZW1bXTtcbiAqIH1cbiAqXG4gKiBAdWlsaXN0aXRlbSgnbGknLCB7IGNsYXNzOiAndG9kby1pdGVtJyB9KVxuICogY2xhc3MgVG9kb0l0ZW0gZXh0ZW5kcyBNb2RlbCB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICB0ZXh0OiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgY29tcGxldGVkOiBib29sZWFuO1xuICogfVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgTW9kZWxcbiAqICAgcGFydGljaXBhbnQgdWlsaXN0cHJvcFxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgTGlzdENvbnRhaW5lclxuICogICBwYXJ0aWNpcGFudCBMaXN0SXRlbXNcbiAqICAgTW9kZWwtPj51aWxpc3Rwcm9wOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWxpc3Rwcm9wLT4+TW9kZWw6IEFkZCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBwcm9wIG5hbWUgYW5kIGNvbnRhaW5lciBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5MaXN0Q29udGFpbmVyOiBDcmVhdGUgY29udGFpbmVyIHdpdGggcHJvcHNcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TGlzdEl0ZW1zOiBSZW5kZXIgZWFjaCBpdGVtIHVzaW5nIEB1aWxpc3RpdGVtXG4gKiAgIExpc3RDb250YWluZXItPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiByZW5kZXJlZCBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aWxpc3Rwcm9wKFxuICBwcm9wTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT5cbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFBhcnRpYWw8VUlMaXN0UHJvcE1ldGFkYXRhPiA9IHtcbiAgICAgIG5hbWU6IHByb3BOYW1lIHx8IHByb3BlcnR5S2V5LFxuICAgICAgcHJvcHM6IHByb3BzIHx8IHt9LFxuICAgIH07XG4gICAgcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTElTVFBST1ApLCBtZXRhZGF0YSkoXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRvciB0aGF0IHBvc2l0aW9ucyBhIHByb3BlcnR5IGluIGEgc3BlY2lmaWMgZ3JpZCBsYXlvdXQgcG9zaXRpb25cbiAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sdW1uIGFuZCByb3cgcG9zaXRpb24gZm9yIGEgcHJvcGVydHkgaW4gYSBVSSBsYXlvdXQgZ3JpZFxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgdGhlIHNwZWNpZmljIHBvc2l0aW9uIG9mIGEgcHJvcGVydHkgd2l0aGluXG4gKiBhIGdyaWQtYmFzZWQgbGF5b3V0IHN5c3RlbS4gSXQgc3BlY2lmaWVzIHdoaWNoIGNvbHVtbiBhbmQgcm93IHRoZSBwcm9wZXJ0eVxuICogc2hvdWxkIG9jY3VweSB3aGVuIHJlbmRlcmVkIGluIHRoZSBVSS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSBjb2x1bW4gcG9zaXRpb24gaW4gdGhlIGdyaWQgbGF5b3V0XG4gKiBAcGFyYW0ge251bWJlcn0gW3Jvdz0xXSBUaGUgcm93IHBvc2l0aW9uIGluIHRoZSBncmlkIGxheW91dCAoZGVmYXVsdHMgdG8gMSlcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3Byb3BzPXt9XSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gcGFzcyB0byB0aGUgbGF5b3V0IGl0ZW1cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWxheW91dGl0ZW1cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBvc2l0aW9uIHByb3BlcnRpZXMgaW4gYSBncmlkIGxheW91dFxuICogQHVpbW9kZWwoJ3VzZXItZm9ybScpXG4gKiBjbGFzcyBVc2VyRm9ybSB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlsYXlvdXRpdGVtKDEsIDEpIC8vIEZpcnN0IGNvbHVtbiwgZmlyc3Qgcm93XG4gKiAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aWxheW91dGl0ZW0oMiwgMSkgLy8gU2Vjb25kIGNvbHVtbiwgZmlyc3Qgcm93XG4gKiAgIGxhc3ROYW1lOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGF5b3V0aXRlbSgxLCAyLCB7IGNvbHNwYW46IDIgfSkgLy8gRmlyc3QgY29sdW1uLCBzZWNvbmQgcm93LCBzcGFucyAyIGNvbHVtbnNcbiAqICAgZW1haWw6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlsYXlvdXRpdGVtKDEsIDMsIHsgY2xhc3M6ICdmdWxsLXdpZHRoJyB9KSAvLyBGaXJzdCBjb2x1bW4sIHRoaXJkIHJvdyB3aXRoIGN1c3RvbSBjbGFzc1xuICogICBiaW86IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IHVpbGF5b3V0aXRlbVxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgTGF5b3V0Q29udGFpbmVyXG4gKiAgIE1vZGVsLT4+dWlsYXlvdXRpdGVtOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWxheW91dGl0ZW0tPj5Nb2RlbDogQWRkIGxheW91dCBpdGVtIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBHZXQgbGF5b3V0IGl0ZW0gbWV0YWRhdGFcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBjb2x1bW4sIHJvdywgYW5kIHByb3BzXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+PkxheW91dENvbnRhaW5lcjogUG9zaXRpb24gZWxlbWVudCBhdCBncmlkIGNvb3JkaW5hdGVzXG4gKiAgIExheW91dENvbnRhaW5lci0+PlJlbmRlcmluZ0VuZ2luZTogUmV0dXJuIHBvc2l0aW9uZWQgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gdWlsYXlvdXRpdGVtKFxuICBjb2w6IG51bWJlcixcbiAgcm93OiBudW1iZXIgPSAxLFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuKSB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBtZXRhZGF0YTogVUlMYXlvdXRJdGVtTWV0YWRhdGEgPSB7XG4gICAgICBuYW1lOiAgcHJvcGVydHlLZXksXG4gICAgICBjb2wsXG4gICAgICByb3csXG4gICAgICBwcm9wczogT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMpLFxuICAgIH07ICBcbiAgICBwcm9wTWV0YWRhdGEoUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlMQVlPVVRJVEVNKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuIl19
|
|
403
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy91aS9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLE1BQU0sRUFBRSx1QkFBb0I7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBUTlELE9BQU8sRUFBRSxlQUFlLEVBQUUsdUJBQW9CO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUV4RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsR0FBRyxVQUErQjtJQUN2RCxPQUFPLFlBQVksQ0FDakIsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQ2xDLFVBQVUsQ0FDWCxDQUFDO0FBQ0osQ0FBQztBQUdEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNEJHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxRQUFnQixDQUFDO0lBQ3ZDLE9BQU8sWUFBWSxDQUNqQixlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFDakMsS0FBSyxDQUNOLENBQUM7QUFDSixDQUFDO0FBR0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQ0c7QUFDSCxNQUFNLFVBQVUsTUFBTTtJQUNwQixPQUFPLE1BQU0sQ0FDWCxhQUFhLENBQUMsTUFBTSxFQUNwQixhQUFhLENBQUMsSUFBSSxFQUNsQixhQUFhLENBQUMsTUFBTSxFQUNwQixhQUFhLENBQUMsTUFBTSxDQUNyQixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXlDRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQ3ZCLEdBQVcs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QUFNLFVBQVUsWUFBWSxDQUMxQixHQUFXLEVBQ1gsTUFBYyxDQUFDLEVBQ2YsUUFBNkIsRUFBRTtJQUUvQixPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLEVBQUUsRUFBRTtRQUMxQyxNQUFNLFFBQVEsR0FBeUI7WUFDckMsSUFBSSxFQUFHLFdBQVc7WUFDbEIsR0FBRztZQUNILEdBQUc7WUFDSCxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDO1NBQ2hDLENBQUM7UUFDRixZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQzlELE1BQU0sRUFDTixXQUFXLENBQ1osQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXCJyZWZsZWN0LW1ldGFkYXRhXCI7XG5pbXBvcnQgeyBVSUtleXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHByb3BNZXRhZGF0YSB9IGZyb20gXCJAZGVjYWYtdHMvZGVjb3JhdG9yLXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIENydWRPcGVyYXRpb25LZXlzLFxuICBVSUVsZW1lbnRNZXRhZGF0YSxcbiAgVUlMYXlvdXRJdGVtTWV0YWRhdGEsXG4gIFVJTGlzdFByb3BNZXRhZGF0YSxcbiAgVUlQcm9wTWV0YWRhdGEsXG59IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBSZW5kZXJpbmdFbmdpbmUgfSBmcm9tIFwiLi9SZW5kZXJpbmdcIjtcbmltcG9ydCB7IE9wZXJhdGlvbktleXMgfSBmcm9tIFwiQGRlY2FmLXRzL2RiLWRlY29yYXRvcnNcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgaGlkZXMgYSBwcm9wZXJ0eSBkdXJpbmcgc3BlY2lmaWMgQ1JVRCBvcGVyYXRpb25zXG4gKiBAc3VtbWFyeSBDb250cm9scyBwcm9wZXJ0eSB2aXNpYmlsaXR5IGJhc2VkIG9uIG9wZXJhdGlvbiB0eXBlXG4gKiBUaGlzIGRlY29yYXRvciBhbGxvd3MgeW91IHRvIHNwZWNpZnkgd2hpY2ggQ1JVRCBvcGVyYXRpb25zIHNob3VsZCBoaWRlIGEgcHJvcGVydHlcbiAqIGluIHRoZSBVSS4gVGhlIHByb3BlcnR5IHdpbGwgb25seSBiZSB2aXNpYmxlIGR1cmluZyBvcGVyYXRpb25zIG5vdCBzcGVjaWZpZWQuXG4gKlxuICogQHBhcmFtIG9wZXJhdGlvbnMgLSBUaGUgQ1JVRCBvcGVyYXRpb25zIGR1cmluZyB3aGljaCB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIGhpZGRlblxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIGhpZGVPblxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSGlkZSB0aGUgcGFzc3dvcmQgZmllbGQgZHVyaW5nIFJFQUQgb3BlcmF0aW9uc1xuICogY2xhc3MgVXNlciB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICB1c2VybmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEBoaWRlT24oT3BlcmF0aW9uS2V5cy5SRUFEKVxuICogICBwYXNzd29yZDogc3RyaW5nO1xuICogfVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgTW9kZWxcbiAqICAgcGFydGljaXBhbnQgaGlkZU9uXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBwYXJ0aWNpcGFudCBVSVxuICogICBNb2RlbC0+PmhpZGVPbjogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgaGlkZU9uLT4+TW9kZWw6IEFkZCBoaWRkZW4gbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IENoZWNrIGlmIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBoaWRkZW4gb3BlcmF0aW9uc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogUmVuZGVyIG9yIGhpZGUgYmFzZWQgb24gY3VycmVudCBvcGVyYXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGVPbiguLi5vcGVyYXRpb25zOiBDcnVkT3BlcmF0aW9uS2V5c1tdKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGE8Q3J1ZE9wZXJhdGlvbktleXNbXT4oXG4gICAgUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuSElEREVOKSxcbiAgICBvcGVyYXRpb25zXG4gICk7XG59XG5cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgc2V0cyB0aGUgb3JkZXIgb2YgYSBVSSBlbGVtZW50XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgdGhlIHJlbmRlcmluZyBvcmRlciBmb3IgVUkgY29tcG9uZW50c1xuICogVGhpcyBkZWNvcmF0b3IgYXBwbGllcyBtZXRhZGF0YSB0byB0aGUgcHJvcGVydHkgb3IgY2xhc3MsIGluZGljYXRpbmcgaXRzIG9yZGVyIGluIHRoZSBVSSByZW5kZXJpbmcgc2VxdWVuY2UuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlcj0xXSBUaGUgb3JkZXIgdmFsdWUgZm9yIHRoZSBVSSBlbGVtZW50IChkZWZhdWx0IGlzIDEpXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBwcm9wZXJ0eSBvciBjbGFzcyBkZWNvcmF0b3IgZnVuY3Rpb25cbiAqXG4gKiBAZnVuY3Rpb24gdWlvcmRlclxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IG9yZGVyIGZvciBhIGZpZWxkXG4gKiBAdWlvcmRlcigyKVxuICogZmllbGROYW1lOiBzdHJpbmc7XG4gKlxuICogLy8gU2V0IG9yZGVyIGZvciBhIGNsYXNzXG4gKiBAdWlvcmRlcigxKVxuICogY2xhc3MgVXNlclByb2ZpbGUgeyAuLi4gfVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgU3lzdGVtXG4gKiAgIHBhcnRpY2lwYW50IHVpb3JkZXJcbiAqICAgcGFydGljaXBhbnQgcHJvcGVydHlcbiAqICAgU3lzdGVtLT4+dWlvcmRlcjpkbyhwcm9wZXJ0eSlcbiAqICAgdWlvcmRlci0+PnByb3BlcnR5OiBzZXRzIG9yZGVyIG1ldGFkYXRhXG4gKiAgIHVpb3JkZXItPj5TeXN0ZW06IHJldHVybnMgZGVjb3JhdGVkIHByb3BlcnR5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aW9yZGVyKG9yZGVyOiBudW1iZXIgPSAxKSB7XG4gIHJldHVybiBwcm9wTWV0YWRhdGE8bnVtYmVyPihcbiAgICBSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5PUkRFUiksXG4gICAgb3JkZXJcbiAgKTtcbn1cblxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBjb21wbGV0ZWx5IGhpZGVzIGEgcHJvcGVydHkgaW4gYWxsIFVJIG9wZXJhdGlvbnNcbiAqIEBzdW1tYXJ5IE1ha2VzIGEgcHJvcGVydHkgaW52aXNpYmxlIGluIGFsbCBDUlVEIG9wZXJhdGlvbnNcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgaGlkZU9uIHRoYXQgaGlkZXMgYSBwcm9wZXJ0eVxuICogZHVyaW5nIGFsbCBDUlVEIG9wZXJhdGlvbnMgKENSRUFURSwgUkVBRCwgVVBEQVRFLCBERUxFVEUpLlxuICpcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiBoaWRkZW5cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENvbXBsZXRlbHkgaGlkZSB0aGUgaW50ZXJuYWxJZCBmaWVsZCBpbiB0aGUgVUlcbiAqIGNsYXNzIFByb2R1Y3Qge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgbmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEBoaWRkZW4oKVxuICogICBpbnRlcm5hbElkOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCBoaWRkZW5cbiAqICAgcGFydGljaXBhbnQgaGlkZU9uXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBNb2RlbC0+PmhpZGRlbjogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgaGlkZGVuLT4+aGlkZU9uOiBDYWxsIHdpdGggYWxsIG9wZXJhdGlvbnNcbiAqICAgaGlkZU9uLT4+TW9kZWw6IEFkZCBoaWRkZW4gbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IENoZWNrIGlmIHByb3BlcnR5IHNob3VsZCBiZSBoaWRkZW5cbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBhbGwgb3BlcmF0aW9uc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogQWx3YXlzIGhpZGUgcHJvcGVydHlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhpZGRlbigpIHtcbiAgcmV0dXJuIGhpZGVPbihcbiAgICBPcGVyYXRpb25LZXlzLkNSRUFURSxcbiAgICBPcGVyYXRpb25LZXlzLlJFQUQsXG4gICAgT3BlcmF0aW9uS2V5cy5VUERBVEUsXG4gICAgT3BlcmF0aW9uS2V5cy5ERUxFVEVcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgc3BlY2lmaWVzIGhvdyBhIHByb3BlcnR5IHNob3VsZCBiZSByZW5kZXJlZCBhcyBhIFVJIGVsZW1lbnRcbiAqIEBzdW1tYXJ5IE1hcHMgYSBtb2RlbCBwcm9wZXJ0eSB0byBhIHNwZWNpZmljIFVJIGVsZW1lbnQgd2l0aCBjdXN0b20gcHJvcGVydGllc1xuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgd2hpY2ggSFRNTCBlbGVtZW50IG9yIGNvbXBvbmVudCBzaG91bGQgYmUgdXNlZFxuICogdG8gcmVuZGVyIGEgc3BlY2lmaWMgcHJvcGVydHksIGFsb25nIHdpdGggYW55IGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoYXQgZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBIVE1MIGVsZW1lbnQgb3IgY29tcG9uZW50IHRhZyBuYW1lIHRvIHVzZSBmb3IgcmVuZGVyaW5nXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFtwcm9wc10gQWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIHBhc3MgdG8gdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NlcmlhbGl6ZT1mYWxzZV0gV2hldGhlciB0aGUgcHJvcGVydHkgc2hvdWxkIGJlIHNlcmlhbGl6ZWRcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWVsZW1lbnRcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJlbmRlciBhIHByb3BlcnR5IGFzIGEgdGV4dCBpbnB1dFxuICogY2xhc3MgTG9naW5Gb3JtIHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aWVsZW1lbnQoJ2lucHV0JywgeyB0eXBlOiAndGV4dCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgdXNlcm5hbWUnIH0pXG4gKiAgIHVzZXJuYW1lOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnaW5wdXQnLCB7IHR5cGU6ICdwYXNzd29yZCcsIHBsYWNlaG9sZGVyOiAnRW50ZXIgcGFzc3dvcmQnIH0pXG4gKiAgIHBhc3N3b3JkOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpZWxlbWVudCgnYnV0dG9uJywgeyBjbGFzczogJ2J0bi1wcmltYXJ5JyB9KVxuICogICBzdWJtaXQ6IHN0cmluZyA9ICdMb2dpbic7XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aWVsZW1lbnRcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IFVJXG4gKiAgIE1vZGVsLT4+dWllbGVtZW50OiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWVsZW1lbnQtPj5Nb2RlbDogQWRkIGVsZW1lbnQgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBlbGVtZW50IG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gdGFnIGFuZCBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5VSTogUmVuZGVyIHdpdGggc3BlY2lmaWVkIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpZWxlbWVudChcbiAgdGFnOiBzdHJpbmcsXG4gIHByb3BzPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgc2VyaWFsaXplOiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKG9yaWdpbmFsOiBhbnksIHByb3BlcnR5S2V5PzogYW55KSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJRWxlbWVudE1ldGFkYXRhID0ge1xuICAgICAgdGFnOiB0YWcsXG4gICAgICBzZXJpYWxpemU6IHNlcmlhbGl6ZSxcbiAgICAgIHByb3BzOiBPYmplY3QuYXNzaWduKHt9LCBwcm9wcyB8fCB7fSwge1xuICAgICAgICBuYW1lOiBwcm9wZXJ0eUtleSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkVMRU1FTlQpLCBtZXRhZGF0YSkoXG4gICAgICBvcmlnaW5hbCxcbiAgICAgIHByb3BlcnR5S2V5XG4gICAgKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVjb3JhdG9yIHRoYXQgbWFwcyBhIG1vZGVsIHByb3BlcnR5IHRvIGEgVUkgY29tcG9uZW50IHByb3BlcnR5XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHBhc3NlZCB0byBhIFVJIGNvbXBvbmVudFxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgaG93IGEgbW9kZWwgcHJvcGVydHkgc2hvdWxkIGJlIG1hcHBlZCB0b1xuICogYSBwcm9wZXJ0eSBvZiB0aGUgVUkgY29tcG9uZW50IHdoZW4gcmVuZGVyaW5nLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmVcbiAqIGRlY29yYXRlZCB3aXRoIEB1aW1vZGVsLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcHJvcE5hbWVdIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBwYXNzIHRvIHRoZSBjb21wb25lbnQgKGRlZmF1bHRzIHRvIHRoZSBwcm9wZXJ0eSBrZXkpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzdHJpbmdpZnk9ZmFsc2VdIFdoZXRoZXIgdG8gc3RyaW5naWZ5IHRoZSBwcm9wZXJ0eSB2YWx1ZVxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpcHJvcFxuICogQGNhdGVnb3J5IFByb3BlcnR5IERlY29yYXRvcnNcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gTWFwIG1vZGVsIHByb3BlcnRpZXMgdG8gY29tcG9uZW50IHByb3BlcnRpZXNcbiAqIEB1aW1vZGVsKCd1c2VyLXByb2ZpbGUnKVxuICogY2xhc3MgVXNlclByb2ZpbGUge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpcHJvcCgpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICdmdWxsTmFtZScgdG8gdGhlIGNvbXBvbmVudFxuICogICBmdWxsTmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aXByb3AoJ3VzZXJFbWFpbCcpIC8vIFdpbGwgYmUgcGFzc2VkIGFzICd1c2VyRW1haWwnIHRvIHRoZSBjb21wb25lbnRcbiAqICAgZW1haWw6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlwcm9wKCd1c2VyRGF0YScsIHRydWUpIC8vIFdpbGwgYmUgcGFzc2VkIGFzIHN0cmluZ2lmaWVkIEpTT05cbiAqICAgdXNlckRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gKiB9XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aXByb3BcbiAqICAgcGFydGljaXBhbnQgUmVuZGVyaW5nRW5naW5lXG4gKiAgIHBhcnRpY2lwYW50IENvbXBvbmVudFxuICogICBNb2RlbC0+PnVpcHJvcDogQXBwbHkgdG8gcHJvcGVydHlcbiAqICAgdWlwcm9wLT4+TW9kZWw6IEFkZCBwcm9wIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBHZXQgcHJvcCBtZXRhZGF0YVxuICogICBNb2RlbC0+PlJlbmRlcmluZ0VuZ2luZTogUmV0dXJuIHByb3AgbmFtZSBhbmQgc3RyaW5naWZ5IGZsYWdcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+Q29tcG9uZW50OiBQYXNzIHByb3BlcnR5IHdpdGggc3BlY2lmaWVkIG5hbWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVpcHJvcChcbiAgcHJvcE5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgc3RyaW5naWZ5OiBib29sZWFuID0gZmFsc2Vcbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFVJUHJvcE1ldGFkYXRhID0ge1xuICAgICAgbmFtZTogcHJvcE5hbWUgfHwgcHJvcGVydHlLZXksXG4gICAgICBzdHJpbmdpZnk6IHN0cmluZ2lmeSxcbiAgICB9O1xuICAgIHByb3BNZXRhZGF0YShSZW5kZXJpbmdFbmdpbmUua2V5KFVJS2V5cy5QUk9QKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXBzIGEgbmVzdGVkIG1vZGVsIHByb3BlcnR5IHRvIGEgVUkgY29tcG9uZW50IHByb3BlcnR5LlxuICogQHN1bW1hcnkgRGVmaW5lcyBob3cgYSBwYXJlbnQgY29tcG9uZW50IHNob3VsZCByZW5kZXIgdGhlIGNoaWxkIG1vZGVsIHdoZW4gbmVzdGVkLlxuICpcbiAqIFRoaXMgZGVjb3JhdG9yIGlzIHVzZWQgdG8gZGVjb3JhdGUgcHJvcGVydGllcyB0aGF0IGFyZSBuZXN0ZWQgbW9kZWxzLlxuICogV2hlbiBhcHBsaWVkLCBpdCBhbGxvd3Mgb3ZlcnJpZGluZyB0aGUgZGVmYXVsdCB0YWcgb2YgdGhlIGNoaWxkIG1vZGVsIHdpdGggdGhlIHByb3ZpZGVkIG9uZSxcbiAqIGVuYWJsaW5nIGRpZmZlcmVudCByZW5kZXJpbmcgYmVoYXZpb3Igd2hlbiB0aGUgbW9kZWwgYWN0cyBhcyBhIGNoaWxkIChuZXN0ZWQpXG4gKiBjb21wYXJlZCB0byB3aGVuIGl0IGlzIHJlbmRlcmVkIGFzIHRoZSBwYXJlbnQgbW9kZWwuXG4gKlxuICogSXQgcmVxdWlyZXMgdGhlIGNsYXNzIHRvIGJlIGRlY29yYXRlZCB3aXRoIGBAdWltb2RlbGAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXp6IFRoZSBtb2RlbCBjbGFzcyBuYW1lIHRvIHBhc3MgdG8gdGhlIGNvbXBvbmVudCAoZGVmYXVsdHMgdG8gdGhlIHByb3BlcnR5IGtleSkuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSBIVE1MIGVsZW1lbnQgb3IgY29tcG9uZW50IHRhZyBuYW1lIHRvIG92ZXJyaWRlIHRoZSBVSSB0YWcgb2YgdGhlIG5lc3RlZCBtb2RlbFxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBlbGVtZW50XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtzZXJpYWxpemU9ZmFsc2VdIFdoZXRoZXIgdGhlIHByb3BlcnR5IHNob3VsZCBiZSBzZXJpYWxpemVkXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn0gQSBwcm9wZXJ0eSBkZWNvcmF0b3IgZnVuY3Rpb24uXG4gKlxuICogQGZ1bmN0aW9uIHVpY2hpbGRcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIE1hcCBhIG5lc3RlZCBtb2RlbCB0byBhIGNvbXBvbmVudCBwcm9wZXJ0eSB3aXRoIGEgZGlmZmVyZW50IHRhZyB3aGVuIG5lc3RlZFxuICogQHVpbW9kZWwoJ2FkZHJlc3MtY29tcG9uZW50JylcbiAqIGNsYXNzIEFkZHJlc3Mge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgc3RyZWV0OiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgY2l0eTogc3RyaW5nO1xuICogfVxuICpcbiAqIEB1aW1vZGVsKCd1c2VyLXByb2ZpbGUnKVxuICogY2xhc3MgVXNlclByb2ZpbGUge1xuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpY2hpbGQoQWRkcmVzcy5uYW1lLCAnYWRkcmVzcy1jaGlsZC1jb21wb25lbnQnKVxuICogICBhZGRyZXNzOiBBZGRyZXNzO1xuICogfVxuICpcbiAqIC8vIEluIHRoaXMgZXhhbXBsZSwgdGhlIEFkZHJlc3MgbW9kZWwgaGFzIHRoZSBkZWZhdWx0IHRhZyAnYWRkcmVzcy1jb21wb25lbnQnIHdoZW4gcmVuZGVyZWQgYXMgYSByb290IGNvbXBvbmVudCxcbiAqIC8vIGJ1dCB3aGVuIHVzZWQgaW5zaWRlIFVzZXJQcm9maWxlLCBpdCBpcyByZW5kZXJlZCB3aXRoIHRoZSBvdmVycmlkZGVuIHRhZyAnYWRkcmVzcy1jaGlsZC1jb21wb25lbnQnXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBNb2RlbFxuICogICBwYXJ0aWNpcGFudCB1aWNoaWxkXG4gKiAgIHBhcnRpY2lwYW50IFJlbmRlcmluZ0VuZ2luZVxuICogICBwYXJ0aWNpcGFudCBDb21wb25lbnRcbiAqICAgTW9kZWwtPj51aWNoaWxkOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWNoaWxkLT4+TW9kZWw6IEFkZCBjaGlsZCBtZXRhZGF0YVxuICogICBSZW5kZXJpbmdFbmdpbmUtPj5Nb2RlbDogR2V0IGNoaWxkIG1ldGFkYXRhXG4gKiAgIE1vZGVsLT4+UmVuZGVyaW5nRW5naW5lOiBSZXR1cm4gcHJvcCBuYW1lLCBzdHJpbmdpZnkgZmxhZywgYW5kIGNoaWxkIHRhZyBvdmVycmlkZVxuICogICBSZW5kZXJpbmdFbmdpbmUtPj5Db21wb25lbnQ6IFBhc3MgcHJvcGVydHkgd2l0aCBzcGVjaWZpZWQgbmFtZSBhbmQgcmVuZGVyIHdpdGggb3ZlcnJpZGRlbiB0YWcgaWYgbmVzdGVkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVpY2hpbGQoXG4gIGNsYXp6OiBzdHJpbmcsXG4gIHRhZzogc3RyaW5nLFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuICBpc0FycmF5OiBib29sZWFuID0gZmFsc2UsXG4gIHNlcmlhbGl6ZTogYm9vbGVhbiA9IGZhbHNlXG4pIHtcbiAgcmV0dXJuICh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG1ldGFkYXRhOiBVSUVsZW1lbnRNZXRhZGF0YSA9IHtcbiAgICAgIHRhZzogdGFnLFxuICAgICAgc2VyaWFsaXplOiBzZXJpYWxpemUsXG4gICAgICBwcm9wczogT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMgfHwge30sIHtcbiAgICAgICAgbmFtZTogY2xhenogfHwgcHJvcGVydHlLZXksXG4gICAgICB9LCBpc0FycmF5ID8ge2N1c3RvbVR5cGVzOiBbQXJyYXkubmFtZV0sIG11bHRpcGxlOiB0cnVlfSA6IHttdWx0aXBsZTogZmFsc2V9KSxcbiAgICB9O1xuXG4gICAgcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLkNISUxEKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWNvcmF0b3IgdGhhdCBtYXBzIGEgbW9kZWwgcHJvcGVydHkgdG8gYSBsaXN0IGl0ZW0gY29tcG9uZW50XG4gKiBAc3VtbWFyeSBTcGVjaWZpZXMgaG93IGEgcHJvcGVydHkgc2hvdWxkIGJlIHJlbmRlcmVkIGluIGEgbGlzdCBjb250ZXh0XG4gKiBUaGlzIGRlY29yYXRvciBhbGxvd3MgeW91IHRvIGRlZmluZSBob3cgYSBtb2RlbCBwcm9wZXJ0eSBjb250YWluaW5nIGEgbGlzdFxuICogc2hvdWxkIGJlIHJlbmRlcmVkLiBJdCByZXF1aXJlcyB0aGUgY2xhc3MgdG8gYmUgZGVjb3JhdGVkIHdpdGggQHVpbGlzdGl0ZW0uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wTmFtZV0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIHBhc3MgdG8gdGhlIGxpc3QgY29tcG9uZW50IChkZWZhdWx0cyB0byB0aGUgcHJvcGVydHkga2V5KVxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSBbcHJvcHNdIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvIHRoZSBsaXN0IGNvbnRhaW5lclxuICogQHJldHVybiB7RnVuY3Rpb259IEEgcHJvcGVydHkgZGVjb3JhdG9yIGZ1bmN0aW9uXG4gKlxuICogQGZ1bmN0aW9uIHVpbGlzdHByb3BcbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIERlZmluZSBhIGxpc3QgcHJvcGVydHkgd2l0aCBjdXN0b20gcmVuZGVyaW5nXG4gKiBAdWltb2RlbCgndG9kby1saXN0JylcbiAqIGNsYXNzIFRvZG9MaXN0IHtcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIHRpdGxlOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGlzdHByb3AoJ2l0ZW1zJywgeyBjbGFzczogJ3RvZG8taXRlbXMtY29udGFpbmVyJyB9KVxuICogICBpdGVtczogVG9kb0l0ZW1bXTtcbiAqIH1cbiAqXG4gKiBAdWlsaXN0aXRlbSgnbGknLCB7IGNsYXNzOiAndG9kby1pdGVtJyB9KVxuICogY2xhc3MgVG9kb0l0ZW0gZXh0ZW5kcyBNb2RlbCB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICB0ZXh0OiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgY29tcGxldGVkOiBib29sZWFuO1xuICogfVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgTW9kZWxcbiAqICAgcGFydGljaXBhbnQgdWlsaXN0cHJvcFxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgTGlzdENvbnRhaW5lclxuICogICBwYXJ0aWNpcGFudCBMaXN0SXRlbXNcbiAqICAgTW9kZWwtPj51aWxpc3Rwcm9wOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWxpc3Rwcm9wLT4+TW9kZWw6IEFkZCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TW9kZWw6IEdldCBsaXN0IHByb3AgbWV0YWRhdGFcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBwcm9wIG5hbWUgYW5kIGNvbnRhaW5lciBwcm9wc1xuICogICBSZW5kZXJpbmdFbmdpbmUtPj5MaXN0Q29udGFpbmVyOiBDcmVhdGUgY29udGFpbmVyIHdpdGggcHJvcHNcbiAqICAgUmVuZGVyaW5nRW5naW5lLT4+TGlzdEl0ZW1zOiBSZW5kZXIgZWFjaCBpdGVtIHVzaW5nIEB1aWxpc3RpdGVtXG4gKiAgIExpc3RDb250YWluZXItPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiByZW5kZXJlZCBsaXN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1aWxpc3Rwcm9wKFxuICBwcm9wTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICBwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT5cbikge1xuICByZXR1cm4gKHRhcmdldDogYW55LCBwcm9wZXJ0eUtleTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgbWV0YWRhdGE6IFBhcnRpYWw8VUlMaXN0UHJvcE1ldGFkYXRhPiA9IHtcbiAgICAgIG5hbWU6IHByb3BOYW1lIHx8IHByb3BlcnR5S2V5LFxuICAgICAgcHJvcHM6IHByb3BzIHx8IHt9LFxuICAgIH07XG4gICAgcHJvcE1ldGFkYXRhKFJlbmRlcmluZ0VuZ2luZS5rZXkoVUlLZXlzLlVJTElTVFBST1ApLCBtZXRhZGF0YSkoXG4gICAgICB0YXJnZXQsXG4gICAgICBwcm9wZXJ0eUtleVxuICAgICk7XG4gIH07XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlY29yYXRvciB0aGF0IHBvc2l0aW9ucyBhIHByb3BlcnR5IGluIGEgc3BlY2lmaWMgZ3JpZCBsYXlvdXQgcG9zaXRpb25cbiAqIEBzdW1tYXJ5IFNwZWNpZmllcyB0aGUgY29sdW1uIGFuZCByb3cgcG9zaXRpb24gZm9yIGEgcHJvcGVydHkgaW4gYSBVSSBsYXlvdXQgZ3JpZFxuICogVGhpcyBkZWNvcmF0b3IgYWxsb3dzIHlvdSB0byBkZWZpbmUgdGhlIHNwZWNpZmljIHBvc2l0aW9uIG9mIGEgcHJvcGVydHkgd2l0aGluXG4gKiBhIGdyaWQtYmFzZWQgbGF5b3V0IHN5c3RlbS4gSXQgc3BlY2lmaWVzIHdoaWNoIGNvbHVtbiBhbmQgcm93IHRoZSBwcm9wZXJ0eVxuICogc2hvdWxkIG9jY3VweSB3aGVuIHJlbmRlcmVkIGluIHRoZSBVSS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY29sIFRoZSBjb2x1bW4gcG9zaXRpb24gaW4gdGhlIGdyaWQgbGF5b3V0XG4gKiBAcGFyYW0ge251bWJlcn0gW3Jvdz0xXSBUaGUgcm93IHBvc2l0aW9uIGluIHRoZSBncmlkIGxheW91dCAoZGVmYXVsdHMgdG8gMSlcbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgYW55Pn0gW3Byb3BzPXt9XSBBZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gcGFzcyB0byB0aGUgbGF5b3V0IGl0ZW1cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSBBIHByb3BlcnR5IGRlY29yYXRvciBmdW5jdGlvblxuICpcbiAqIEBmdW5jdGlvbiB1aWxheW91dGl0ZW1cbiAqIEBjYXRlZ29yeSBQcm9wZXJ0eSBEZWNvcmF0b3JzXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFBvc2l0aW9uIHByb3BlcnRpZXMgaW4gYSBncmlkIGxheW91dFxuICogQHVpbW9kZWwoJ3VzZXItZm9ybScpXG4gKiBjbGFzcyBVc2VyRm9ybSB7XG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlsYXlvdXRpdGVtKDEsIDEpIC8vIEZpcnN0IGNvbHVtbiwgZmlyc3Qgcm93XG4gKiAgIGZpcnN0TmFtZTogc3RyaW5nO1xuICpcbiAqICAgQGF0dHJpYnV0ZSgpXG4gKiAgIEB1aWxheW91dGl0ZW0oMiwgMSkgLy8gU2Vjb25kIGNvbHVtbiwgZmlyc3Qgcm93XG4gKiAgIGxhc3ROYW1lOiBzdHJpbmc7XG4gKlxuICogICBAYXR0cmlidXRlKClcbiAqICAgQHVpbGF5b3V0aXRlbSgxLCAyLCB7IGNvbHNwYW46IDIgfSkgLy8gRmlyc3QgY29sdW1uLCBzZWNvbmQgcm93LCBzcGFucyAyIGNvbHVtbnNcbiAqICAgZW1haWw6IHN0cmluZztcbiAqXG4gKiAgIEBhdHRyaWJ1dGUoKVxuICogICBAdWlsYXlvdXRpdGVtKDEsIDMsIHsgY2xhc3M6ICdmdWxsLXdpZHRoJyB9KSAvLyBGaXJzdCBjb2x1bW4sIHRoaXJkIHJvdyB3aXRoIGN1c3RvbSBjbGFzc1xuICogICBiaW86IHN0cmluZztcbiAqIH1cbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IE1vZGVsXG4gKiAgIHBhcnRpY2lwYW50IHVpbGF5b3V0aXRlbVxuICogICBwYXJ0aWNpcGFudCBSZW5kZXJpbmdFbmdpbmVcbiAqICAgcGFydGljaXBhbnQgTGF5b3V0Q29udGFpbmVyXG4gKiAgIE1vZGVsLT4+dWlsYXlvdXRpdGVtOiBBcHBseSB0byBwcm9wZXJ0eVxuICogICB1aWxheW91dGl0ZW0tPj5Nb2RlbDogQWRkIGxheW91dCBpdGVtIG1ldGFkYXRhXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+Pk1vZGVsOiBHZXQgbGF5b3V0IGl0ZW0gbWV0YWRhdGFcbiAqICAgTW9kZWwtPj5SZW5kZXJpbmdFbmdpbmU6IFJldHVybiBjb2x1bW4sIHJvdywgYW5kIHByb3BzXG4gKiAgIFJlbmRlcmluZ0VuZ2luZS0+PkxheW91dENvbnRhaW5lcjogUG9zaXRpb24gZWxlbWVudCBhdCBncmlkIGNvb3JkaW5hdGVzXG4gKiAgIExheW91dENvbnRhaW5lci0+PlJlbmRlcmluZ0VuZ2luZTogUmV0dXJuIHBvc2l0aW9uZWQgZWxlbWVudFxuICovXG5leHBvcnQgZnVuY3Rpb24gdWlsYXlvdXRpdGVtKFxuICBjb2w6IG51bWJlcixcbiAgcm93OiBudW1iZXIgPSAxLFxuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9LFxuKSB7XG4gIHJldHVybiAodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBtZXRhZGF0YTogVUlMYXlvdXRJdGVtTWV0YWRhdGEgPSB7XG4gICAgICBuYW1lOiAgcHJvcGVydHlLZXksXG4gICAgICBjb2wsXG4gICAgICByb3csXG4gICAgICBwcm9wczogT2JqZWN0LmFzc2lnbih7fSwgcHJvcHMpLFxuICAgIH07ICBcbiAgICBwcm9wTWV0YWRhdGEoUmVuZGVyaW5nRW5naW5lLmtleShVSUtleXMuVUlMQVlPVVRJVEVNKSwgbWV0YWRhdGEpKFxuICAgICAgdGFyZ2V0LFxuICAgICAgcHJvcGVydHlLZXlcbiAgICApO1xuICB9O1xufVxuIl19
|