@fgv/ts-utils 1.7.0 → 1.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/csvHelpers.d.ts +8 -1
- package/csvHelpers.d.ts.map +1 -1
- package/csvHelpers.js +5 -3
- package/package.json +1 -1
- package/result.d.ts +7 -5
- package/result.d.ts.map +1 -1
- package/result.js +1 -1
package/csvHelpers.d.ts
CHANGED
|
@@ -1,9 +1,16 @@
|
|
|
1
1
|
import { Result } from './result';
|
|
2
|
+
/**
|
|
3
|
+
* Options for {@link readCsvFileSync}
|
|
4
|
+
*/
|
|
5
|
+
export interface CsvOptions {
|
|
6
|
+
delimiter?: string;
|
|
7
|
+
}
|
|
2
8
|
/**
|
|
3
9
|
* Reads a CSV file from a supplied path.
|
|
4
10
|
* @param srcPath - Source path from which the file is read.
|
|
11
|
+
* @param options - optional parameters to control the processing
|
|
5
12
|
* @returns The contents of the file.
|
|
6
13
|
* @beta
|
|
7
14
|
*/
|
|
8
|
-
export declare function readCsvFileSync(srcPath: string): Result<unknown>;
|
|
15
|
+
export declare function readCsvFileSync(srcPath: string, options?: CsvOptions): Result<unknown>;
|
|
9
16
|
//# sourceMappingURL=csvHelpers.d.ts.map
|
package/csvHelpers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csvHelpers.d.ts","sourceRoot":"","sources":["../src/csvHelpers.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,MAAM,EAAiB,MAAM,UAAU,CAAC;AAGjD
|
|
1
|
+
{"version":3,"file":"csvHelpers.d.ts","sourceRoot":"","sources":["../src/csvHelpers.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,MAAM,EAAiB,MAAM,UAAU,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,UAAU;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,CAQtF"}
|
package/csvHelpers.js
CHANGED
|
@@ -52,16 +52,18 @@ const sync_1 = require("csv-parse/sync");
|
|
|
52
52
|
/**
|
|
53
53
|
* Reads a CSV file from a supplied path.
|
|
54
54
|
* @param srcPath - Source path from which the file is read.
|
|
55
|
+
* @param options - optional parameters to control the processing
|
|
55
56
|
* @returns The contents of the file.
|
|
56
57
|
* @beta
|
|
57
58
|
*/
|
|
58
|
-
function readCsvFileSync(srcPath) {
|
|
59
|
+
function readCsvFileSync(srcPath, options) {
|
|
59
60
|
return (0, result_1.captureResult)(() => {
|
|
60
61
|
const fullPath = path.resolve(srcPath);
|
|
61
62
|
const body = fs.readFileSync(fullPath, 'utf8').toString();
|
|
63
|
+
options = options !== null && options !== void 0 ? options : {};
|
|
62
64
|
// eslint-disable-next-line
|
|
63
|
-
return (0, sync_1.parse)(body, { trim: true, from_line: 2 });
|
|
65
|
+
return (0, sync_1.parse)(body, { trim: true, from_line: 2, ...options });
|
|
64
66
|
});
|
|
65
67
|
}
|
|
66
68
|
exports.readCsvFileSync = readCsvFileSync;
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3N2SGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jc3ZIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUM3QixxQ0FBaUQ7QUFDakQseUNBQXVDO0FBU3ZDOzs7Ozs7R0FNRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxPQUFlLEVBQUUsT0FBb0I7SUFDakUsT0FBTyxJQUFBLHNCQUFhLEVBQUMsR0FBRyxFQUFFO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsT0FBTyxHQUFHLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztRQUN4QiwyQkFBMkI7UUFDM0IsT0FBTyxJQUFBLFlBQUssRUFBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ2pFLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQVJELDBDQVFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAyMCBFcmlrIEZvcnR1bmVcbiAqXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXG4gKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcbiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4gKlxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXG4gKiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuICpcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcbiAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXG4gKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiAqIFNPRlRXQVJFLlxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBSZXN1bHQsIGNhcHR1cmVSZXN1bHQgfSBmcm9tICcuL3Jlc3VsdCc7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJ2Nzdi1wYXJzZS9zeW5jJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmVhZENzdkZpbGVTeW5jfVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENzdk9wdGlvbnMge1xuICAgIGRlbGltaXRlcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZWFkcyBhIENTViBmaWxlIGZyb20gYSBzdXBwbGllZCBwYXRoLlxuICogQHBhcmFtIHNyY1BhdGggLSBTb3VyY2UgcGF0aCBmcm9tIHdoaWNoIHRoZSBmaWxlIGlzIHJlYWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gY29udHJvbCB0aGUgcHJvY2Vzc2luZ1xuICogQHJldHVybnMgVGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLlxuICogQGJldGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRDc3ZGaWxlU3luYyhzcmNQYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBDc3ZPcHRpb25zKTogUmVzdWx0PHVua25vd24+IHtcbiAgICByZXR1cm4gY2FwdHVyZVJlc3VsdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHNyY1BhdGgpO1xuICAgICAgICBjb25zdCBib2R5ID0gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmOCcpLnRvU3RyaW5nKCk7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgcmV0dXJuIHBhcnNlKGJvZHksIHsgdHJpbTogdHJ1ZSwgZnJvbV9saW5lOiAyLCAuLi5vcHRpb25zIH0pO1xuICAgIH0pO1xufVxuIl19
|
package/package.json
CHANGED
package/result.d.ts
CHANGED
|
@@ -468,14 +468,14 @@ export declare function mapFailures<T>(results: Iterable<Result<T>>): string[];
|
|
|
468
468
|
*/
|
|
469
469
|
export declare function allSucceed<T>(results: Iterable<Result<unknown>>, successValue: T): Result<T>;
|
|
470
470
|
/**
|
|
471
|
-
* String-keyed record of initialization functions to be passed to {@link populateObject}.
|
|
471
|
+
* String-keyed record of initialization functions to be passed to {@link populateObject.(:withOptions)}.
|
|
472
472
|
* @public
|
|
473
473
|
*/
|
|
474
474
|
export type FieldInitializers<T> = {
|
|
475
475
|
[key in keyof T]: (state: Partial<T>) => Result<T[key]>;
|
|
476
476
|
};
|
|
477
477
|
/**
|
|
478
|
-
* Options for the {@link populateObject} function.
|
|
478
|
+
* Options for the {@link populateObject.(:withOptions)} function.
|
|
479
479
|
* @public
|
|
480
480
|
*/
|
|
481
481
|
export interface PopulateObjectOptions<T> {
|
|
@@ -501,9 +501,10 @@ export interface PopulateObjectOptions<T> {
|
|
|
501
501
|
* concatenated list of all error messages.
|
|
502
502
|
* @param initializers - An object with the shape of the target but with initializer functions for
|
|
503
503
|
* each property.
|
|
504
|
-
* @param options
|
|
504
|
+
* @param options - An optional {@link PopulateObjectOptions | set of options} which
|
|
505
505
|
* modify the behavior of this call.
|
|
506
506
|
* @public
|
|
507
|
+
* {@label withOptions}
|
|
507
508
|
*/
|
|
508
509
|
export declare function populateObject<T>(initializers: FieldInitializers<T>, options?: PopulateObjectOptions<T>): Result<T>;
|
|
509
510
|
/**
|
|
@@ -512,9 +513,10 @@ export declare function populateObject<T>(initializers: FieldInitializers<T>, op
|
|
|
512
513
|
* concatenated list of all error messages.
|
|
513
514
|
* @param initializers - An object with the shape of the target but with initializer functions for
|
|
514
515
|
* each property.
|
|
515
|
-
* @param order
|
|
516
|
+
* @param order - Optional order in which keys should be written.
|
|
516
517
|
* @public
|
|
517
|
-
* @
|
|
518
|
+
* {@label withOrder}
|
|
519
|
+
* @deprecated Pass {@link PopulateObjectOptions} instead.
|
|
518
520
|
*/
|
|
519
521
|
export declare function populateObject<T>(initializers: FieldInitializers<T>, order: (keyof T)[]): Result<T>;
|
|
520
522
|
//# sourceMappingURL=result.d.ts.map
|
package/result.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
|
package/result.js
CHANGED
|
@@ -538,4 +538,4 @@ function populateObject(initializers, optionsOrOrder) {
|
|
|
538
538
|
return succeed(state);
|
|
539
539
|
}
|
|
540
540
|
exports.populateObject = populateObject;
|
|
541
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUF3SUg7Ozs7R0FJRztBQUNILE1BQWEsT0FBTztJQVVoQjs7O09BR0c7SUFDSCxZQUFZLEtBQVE7UUFicEI7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBVzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNaLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUF1QjtRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCLENBQUMsSUFBUTs7UUFDN0IsT0FBTyxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUssRUFBOEI7UUFDL0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxDQUF5QjtRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBSyxPQUFXO1FBQ3BDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBSyxNQUFVLEVBQUUsYUFBa0I7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RyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzdCO2lCQUNJO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7YUFDSTtZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RjtLQUNKO0lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbEM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFVLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBMUNELHdDQTBDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB7QGxpbmsgSVJlc3VsdCB8IHJlc3VsdH0gb2Ygc29tZSBvcGVyYXRpb24gb3Igc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucy5cbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgU3VjY2VzcyB8IFN1Y2Nlc3M8VD59IGFuZCB7QGxpbmsgRmFpbHVyZSB8IEZhaWx1cmU8VD59IHNoYXJlIHRoZSBjb21tb25cbiAqIGNvbnRyYWN0IHtAbGluayBJUmVzdWx0fSwgZW5hYmxpbmcgY29tbWluZ2xlZCBkaXNjcmltaW5hdGVkIHVzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VD4gPSBTdWNjZXNzPFQ+IHwgRmFpbHVyZTxUPjtcbi8qKlxuICogQ29udGludWF0aW9uIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBpbiB0aGUgZXZlbnQgdGhhdCBhblxuICoge0BsaW5rIFJlc3VsdH0gaXMgc3VjY2Vzc2Z1bC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU3VjY2Vzc0NvbnRpbnVhdGlvbjxULCBUTj4gPSAodmFsdWU6IFQpID0+IFJlc3VsdDxUTj47XG4vKipcbiAqIENvbnRpbnVhdGlvbiBjYWxsYmFjayB0byBiZSBjYWxsZWQgaW4gdGhlIGV2ZW50IHRoYXQgYW5cbiAqIHtAbGluayBSZXN1bHR9IGZhaWxzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBGYWlsdXJlQ29udGludWF0aW9uPFQ+ID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gUmVzdWx0PFQ+O1xuLyoqXG4gKiBUeXBlIGluZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlIG9mIGFuIHtAbGluayBSZXN1bHR9LlxuICogQGJldGFcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0VmFsdWVUeXBlPFQ+ID0gVCBleHRlbmRzIFJlc3VsdDxpbmZlciBUVj4gPyBUViA6IG5ldmVyO1xuXG4vKipcbiAqIFNpbXBsZSBsb2dnZXIgaW50ZXJmYWNlIHVzZWQgYnkge0BsaW5rIElSZXN1bHQuZ2V0VmFsdWVPclRocm93fS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVzdWx0TG9nZ2VyIHtcbiAgICAvKipcbiAgICAgKiBMb2cgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBzb21lIG9wZXJhdGlvbiBvZiBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLlxuICogQHJlbWFya3NcbiAqIFRoaXMgY29tbW9uIGNvbnRyYWN0IGVuYWJsZXMgY29tbWluZ2xlZCBkaXNjcmltaW5hdGVkIHVzYWdlIG9mIHtAbGluayBTdWNjZXNzIHwgU3VjY2VzczxUPn1cbiAqIGFuZCB7QGxpbmsgRmFpbHVyZSB8IEZhaWx1cmU8VD59LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZXN1bHQ8VD4ge1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3VjY2VzczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLiAgRnVuY3Rpb25zXG4gICAgICogYXMgYSB0eXBlIGd1YXJkIGZvciB7QGxpbmsgU3VjY2VzcyB8IFN1Y2Nlc3M8VD59LlxuICAgICAqL1xuICAgIGlzU3VjY2VzcygpOiB0aGlzIGlzIFN1Y2Nlc3M8VD47XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiBmYWlsZWQuICBGdW5jdGlvbnNcbiAgICAgKiBhcyBhIHR5cGUgZ3VhcmQgZm9yIHtAbGluayBGYWlsdXJlIHwgRmFpbHVyZTxUPn0uXG4gICAgICovXG4gICAgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRmFpbHVyZTxUPjtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHN1Y2Nlc3NmdWwge0BsaW5rIElSZXN1bHQgfCByZXN1bHR9LFxuICAgICAqIG9yIHRocm93cyB0aGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gZmFpbGVkLlxuICAgICAqIEBwYXJhbSBsb2dnZXIgLSBBbiBvcHRpb25hbCB7QGxpbmsgSVJlc3VsdExvZ2dlciB8IGxvZ2dlcn0gdG8gd2hpY2ggdGhlXG4gICAgICogZXJyb3Igd2lsbCBhbHNvIGJlIHJlcG9ydGVkLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUsIGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAgICogQHRocm93cyBUaGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKi9cbiAgICBnZXRWYWx1ZU9yVGhyb3cobG9nZ2VyPzogSVJlc3VsdExvZ2dlcik6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBzdWNjZXNzZnVsIHtAbGluayBJUmVzdWx0IHwgcmVzdWx0fSxcbiAgICAgKiBvciBhIGRlZmF1bHQgdmFsdWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKiBAcGFyYW0gZGZsdCAtIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZCAoZGVmYXVsdCBpc1xuICAgICAqIGB1bmRlZmluZWRgKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlLCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLiAgUmV0dXJuc1xuICAgICAqIHRoZSBzdXBwbGllZCBkZWZhdWx0IHZhbHVlIG9yIGB1bmRlZmluZWRgIGlmIG5vIGRlZmF1bHQgaXMgc3VwcGxpZWQuXG4gICAgICovXG4gICAgZ2V0VmFsdWVPckRlZmF1bHQoZGZsdD86IFQpOiBUfHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIENhbGxzIGEgc3VwcGxpZWQge0BsaW5rIFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNvbnRpbnVhdGlvbn0gaWZcbiAgICAgKiB0aGUgb3BlcmF0aW9uIHdhcyBhIHN1Y2Nlc3MuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUge0BsaW5rIFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNvbnRpbnVhdGlvbn0gbWlnaHQgcmV0dXJuIGFcbiAgICAgKiBkaWZmZXJlbnQgcmVzdWx0IHR5cGUgdGhhbiB7QGxpbmsgSVJlc3VsdH0gb24gd2hpY2ggaXQgaXMgaW52b2tlZC4gVGhpc1xuICAgICAqIGVuYWJsZXMgY2hhaW5pbmcgb2Ygb3BlcmF0aW9ucyB3aXRoIGhldGVyb2dlbm91cyByZXR1cm4gdHlwZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2IgLSBUaGUge0BsaW5rIFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNvbnRpbnVhdGlvbn0gdG9cbiAgICAgKiBiZSBjYWxsZWQgaW4gdGhlIGV2ZW50IG9mIHN1Y2Nlc3MuXG4gICAgICogQHJldHVybnMgSWYgdGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIHJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkXG4gICAgICogYnkgdGhlIHtAbGluayBTdWNjZXNzQ29udGludWF0aW9uIHwgc3VjY2VzcyBjb250aW51YXRpb259LiAgSWYgdGhpcyByZXN1bHRcbiAgICAgKiBmYWlsZWQsIHByb3BhZ2F0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGlzIGZhaWx1cmUuXG4gICAgICovXG4gICAgb25TdWNjZXNzPFROPihjYjogU3VjY2Vzc0NvbnRpbnVhdGlvbjxULCBUTj4pOiBSZXN1bHQ8VE4+O1xuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgYSBzdXBwbGllZCB7QGxpbmsgRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWxlZCBjb250aW51YXRpb259IGlmXG4gICAgICogdGhlIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICogQHBhcmFtIGNiIC0gVGhlIHtAbGluayBGYWlsdXJlQ29udGludWF0aW9uIHwgZmFpbHVyZSBjb250aW51YXRpb259IHRvXG4gICAgICogYmUgY2FsbGVkIGluIHRoZSBldmVudCBvZiBmYWlsdXJlLlxuICAgICAqIEByZXR1cm5zIElmIHRoaXMgb3BlcmF0aW9uIGZhaWxlZCwgcmV0dXJucyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlXG4gICAgICoge0BsaW5rIEZhaWx1cmVDb250aW51YXRpb24gfCBmYWlsdXJlIGNvbnRpbnVhdGlvbn0uICBJZiB0aGlzIHJlc3VsdFxuICAgICAqIHdhcyBzdWNjZXNzZnVsLCBwcm9wYWdhdGVzIHRoZSByZXN1bHQgdmFsdWUgZnJvbSB0aGUgc3VjY2Vzc2Z1bCBldmVudC5cbiAgICAgKi9cbiAgICBvbkZhaWx1cmUoY2I6IEZhaWx1cmVDb250aW51YXRpb248VD4pOiBSZXN1bHQ8VD47XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIHtAbGluayBJUmVzdWx0IHwgSVJlc3VsdDxUPn0gdG8gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59LFxuICAgICAqIGFkZGluZyBhIHN1cHBsaWVkIGRldGFpbCBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGRldGFpbCB0byBiZSBhZGRlZCBpZiB0aGlzIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSB3aXRoIGVpdGhlclxuICAgICAqIHRoZSBzdWNjZXNzIHJlc3VsdCBvciB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoaXMge0BsaW5rIElSZXN1bHR9LCB3aXRoXG4gICAgICogdGhlIHN1cHBsaWVkIGRldGFpbCAoaWYgdGhpcyBldmVudCBmYWlsZWQpIG9yIGRldGFpbCBgdW5kZWZpbmVkYCAoaWZcbiAgICAgKiB0aGlzIHJlc3VsdCBzdWNjZWVkZWQpLlxuICAgICAqL1xuICAgIHdpdGhGYWlsdXJlRGV0YWlsPFREPihkZXRhaWw6IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+O1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSB7QGxpbmsgSVJlc3VsdCB8IElSZXN1bHQ8VD59IHRvIGEge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSxcbiAgICAgKiBhZGRpbmcgc3VwcGxpZWQgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGRlZmF1bHQgZGV0YWlsIHRvIGJlIGFkZGVkIHRvIHRoZSBuZXcge0BsaW5rIERldGFpbGVkUmVzdWx0fS5cbiAgICAgKiBAcGFyYW0gc3VjY2Vzc0RldGFpbCAtIEFuIG9wdGlvbmFsIGRldGFpbCB0byBiZSBhZGRlZCBpZiB0aGlzIHJlc3VsdCB3YXMgc3VjY2Vzc2Z1bC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHdpdGggZWl0aGVyXG4gICAgICogdGhlIHN1Y2Nlc3MgcmVzdWx0IG9yIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhpcyB7QGxpbmsgSVJlc3VsdH0gYW5kIHRoZVxuICAgICAqIGFwcHJvcHJpYXRlIGFkZGVkIGRldGFpbC5cbiAgICAgKi9cbiAgICB3aXRoRGV0YWlsPFREPihkZXRhaWw6IFRELCBzdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD47XG59XG5cbi8qKlxuICogUmVwb3J0cyBhIHN1Y2Nlc3NmdWwge0BsaW5rIElSZXN1bHQgfCByZXN1bHR9IGZyb20gc29tZSBvcGVyYXRpb24gYW5kIHRoZVxuICogY29ycmVzcG9uZGluZyB2YWx1ZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIFN1Y2Nlc3M8VD4gaW1wbGVtZW50cyBJUmVzdWx0PFQ+IHtcbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5zdWNjZXNzfVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdWNjZXNzID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YWx1ZTogVDtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc3VsdCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzU3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTdWNjZXNzKCk6IHRoaXMgaXMgU3VjY2VzczxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzRmFpbHVyZX1cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRmFpbHVyZTxUPiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5nZXRWYWx1ZU9yVGhyb3d9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JUaHJvdyhfbG9nZ2VyPzogSVJlc3VsdExvZ2dlcik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuZ2V0VmFsdWVPckRlZmF1bHR9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JEZWZhdWx0KGRmbHQ/OiBUKTogVHx1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gZGZsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vblN1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIG9uU3VjY2VzczxUTj4oY2I6IFN1Y2Nlc3NDb250aW51YXRpb248VCwgVE4+KTogUmVzdWx0PFROPiB7XG4gICAgICAgIHJldHVybiBjYih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vbkZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShfOiBGYWlsdXJlQ29udGludWF0aW9uPFQ+KTogUmVzdWx0PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQud2l0aEZhaWx1cmVEZXRhaWx9XG4gICAgICovXG4gICAgcHVibGljIHdpdGhGYWlsdXJlRGV0YWlsPFREPihfZGV0YWlsOiBURCk6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBzdWNjZWVkV2l0aERldGFpbCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC53aXRoRGV0YWlsfVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGV0YWlsPFREPihkZXRhaWw6IFRELCBzdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gc3VjY2VlZFdpdGhEZXRhaWwodGhpcy52YWx1ZSwgc3VjY2Vzc0RldGFpbCA/PyBkZXRhaWwpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIGEgZmFpbGVkIHtAbGluayBJUmVzdWx0IHwgcmVzdWx0fSBmcm9tIHNvbWUgb3BlcmF0aW9uLCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWlsdXJlPFQ+IGltcGxlbWVudHMgSVJlc3VsdDxUPiB7XG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuc3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIHtAbGluayBGYWlsdXJlfSB3aXRoIHRoZSBzdXBwbGllZCBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gRXJyb3IgbWVzc2FnZSB0byBiZSByZXBvcnRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlcnJvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuaXNTdWNjZXNzfVxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N1Y2Nlc3MoKTogdGhpcyBpcyBTdWNjZXNzPFQ+IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzRmFpbHVyZX1cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRmFpbHVyZTxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmdldFZhbHVlT3JUaHJvd31cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmFsdWVPclRocm93KGxvZ2dlcj86IElSZXN1bHRMb2dnZXIpOiBuZXZlciB7XG4gICAgICAgIGlmIChsb2dnZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLl9tZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5nZXRWYWx1ZU9yRGVmYXVsdH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmFsdWVPckRlZmF1bHQoZGZsdD86IFQpOiBUfHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBkZmx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0Lm9uU3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWNjZXNzPFROPihfOiBTdWNjZXNzQ29udGludWF0aW9uPFQsIFROPik6IFJlc3VsdDxUTj4ge1xuICAgICAgICByZXR1cm4gbmV3IEZhaWx1cmUodGhpcy5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vbkZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShjYjogRmFpbHVyZUNvbnRpbnVhdGlvbjxUPik6IFJlc3VsdDxUPiB7XG4gICAgICAgIHJldHVybiBjYih0aGlzLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LndpdGhGYWlsdXJlRGV0YWlsfVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmFpbHVyZURldGFpbDxURD4oZGV0YWlsOiBURCk6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBmYWlsV2l0aERldGFpbCh0aGlzLm1lc3NhZ2UsIGRldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQud2l0aERldGFpbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERldGFpbDxURD4oZGV0YWlsOiBURCwgX3N1Y2Nlc3NEZXRhaWw/OiBURCk6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBmYWlsV2l0aERldGFpbCh0aGlzLm1lc3NhZ2UsIGRldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgJ2ZyaWVuZGx5JyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEge0BsaW5rIEZhaWx1cmV9IHZhbHVlIGlzIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgU3VjY2VzcyB8IFN1Y2Nlc3M8VD59IHdpdGggdGhlIHN1cHBsaWVkIHJlc3VsdCB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VjY2VlZDxUPih2YWx1ZTogVCk6IFN1Y2Nlc3M8VD4ge1xuICAgIHJldHVybiBuZXcgU3VjY2VzczxUPih2YWx1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgRmFpbHVyZSB8IEZhaWx1cmU8VD59IHdpdGggdGhlIHN1cHBsaWVkIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWlsPFQ+KG1lc3NhZ2U6IHN0cmluZyk6IEZhaWx1cmU8VD4ge1xuICAgIHJldHVybiBuZXcgRmFpbHVyZTxUPihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdH0gZW5jb3VudGVycyBzdWNjZXNzLlxuICogQHJlbWFya3NcbiAqIEEgc3VjY2VzcyBjYWxsYmFjayBjYW4gcmV0dXJuIGEgZGlmZmVyZW50IHJlc3VsdCB0eXBlIHRoYW4gaXQgcmVjZWl2ZXMsIGFsbG93aW5nXG4gKiBzdWNjZXNzIHJlc3VsdHMgdG8gY2hhaW4gdGhyb3VnaCBpbnRlcm1lZGlhdGUgcmVzdWx0IHR5cGVzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb248VCwgVEQsIFROPiA9ICh2YWx1ZTogVCwgZGV0YWlsPzogVEQpID0+IERldGFpbGVkUmVzdWx0PFROLCBURD47XG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9IGVuY291bnRlcnMgYSBmYWlsdXJlLlxuICogQHJlbWFya3NcbiAqIEEgZmFpbHVyZSBjYWxsYmFjayBjYW4gY2hhbmdlIHtAbGluayBGYWlsdXJlfSB0byB7QGxpbmsgU3VjY2Vzc30gKGUuZy4gYnkgcmV0dXJuaW5nIGEgZGVmYXVsdCB2YWx1ZSlcbiAqIG9yIGl0IGNhbiBjaGFuZ2Ugb3IgZW1iZWxsaXNoIHRoZSBlcnJvciBtZXNzYWdlLCBidXQgaXQgY2Fubm90IGNoYW5nZSB0aGUgc3VjY2VzcyByZXR1cm4gdHlwZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uPFQsIFREPiA9IChtZXNzYWdlOiBzdHJpbmcsIGRldGFpbDogVEQpID0+IERldGFpbGVkUmVzdWx0PFQsIFREPjtcblxuLyoqXG4gKiBBIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9IGV4dGVuZHMge0BsaW5rIFN1Y2Nlc3N9IHRvIHJlcG9ydCBvcHRpb25hbCBzdWNjZXNzIGRldGFpbHMgaW5cbiAqIGFkZGl0aW9uIHRvIHRoZSBlcnJvciBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgRGV0YWlsZWRTdWNjZXNzPFQsIFREPiBleHRlbmRzIFN1Y2Nlc3M8VD4ge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGV0YWlsPzogVEQ7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBEZXRhaWxlZFN1Y2Nlc3MgfCBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZFxuICAgICAqIHZhbHVlIGFuZCBkZXRhaWwuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBkZXRhaWwgLSBBbiBvcHRpb25hbCBzdWNjZXNzZnVsIGRldGFpbCB0byBiZSByZXR1cm5lZC4gIElmIG9taXR0ZWQsIGRldGFpbFxuICAgICAqIHdpbGwgYmUgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBkZXRhaWw/OiBURCkge1xuICAgICAgICBzdXBlcih2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2RldGFpbCA9IGRldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3VjY2VzcyBkZXRhaWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMge0BsaW5rIERldGFpbGVkU3VjY2Vzc30sIG9yIGB1bmRlZmluZWRgIGlmXG4gICAgICogbm8gZGV0YWlsIHdhcyBzdXBwbGllZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRldGFpbCgpOiBURHx1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV0YWlsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgdGhhdCB0aGlzIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9IGlzIGEgc3VjY2Vzcy5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEFsd2F5cyB0cnVlIGZvciB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBidXQgY2FuIGJlIHVzZWQgYXMgdHlwZSBndWFyZFxuICAgICAqIHRvIGRpc2NyaW1pbmF0ZSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBmcm9tIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGluXG4gICAgICogYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N1Y2Nlc3MoKTogdGhpcyBpcyBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgc3VwcGxpZWQge0BsaW5rIERldGFpbGVkU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IHN1Y2Nlc3MgY2FsbGJhY2t9IGFuZCBwcm9wYWdhdGVzXG4gICAgICogaXRzIHJldHVybmVkIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFROLCBURD59LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIHN1Y2Nlc3MgY2FsbGJhY2sgbXV0YXRlcyB0aGUgcmV0dXJuIHR5cGUgZnJvbSBgPFQ+YCB0byBgPFROPmAuXG4gICAgICogQHBhcmFtIGNiIC0gVGhlIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNhbGxiYWNrfSB0byBiZSBpbnZva2VkLlxuICAgICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHJldHVybmVkIGJ5IHRoZSBzdWNjZXNzIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyBvblN1Y2Nlc3M8VE4+KGNiOiBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb248VCwgVEQsIFROPik6IERldGFpbGVkUmVzdWx0PFROLCBURD4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy52YWx1ZSwgdGhpcy5fZGV0YWlsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wYWdhdGVzIHRoaXMge0BsaW5rIERldGFpbGVkU3VjY2Vzc30uXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBGYWlsdXJlIGRvZXMgbm90IG11dGF0ZSByZXR1cm4gdHlwZSBzbyB3ZSBjYW4gcmV0dXJuIHRoaXMgZXZlbnQgZGlyZWN0bHkuXG4gICAgICogQHBhcmFtIF9jYiAtIHtAbGluayBEZXRhaWxlZEZhaWx1cmVDb250aW51YXRpb24gfCBGYWlsdXJlIGNhbGxiYWNrfSB0byBiZSBjYWxsZWRcbiAgICAgKiBvbiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdH0gaW4gY2FzZSBvZiBmYWlsdXJlIChpZ25vcmVkKS5cbiAgICAgKiBAcmV0dXJucyBgdGhpc2BcbiAgICAgKi9cbiAgICBwdWJsaWMgb25GYWlsdXJlKF9jYjogRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uPFQsIFREPik6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGV4dGVuZHMge0BsaW5rIEZhaWx1cmV9IHRvIHJlcG9ydCBvcHRpb25hbCBmYWlsdXJlIGRldGFpbHMgaW5cbiAqIGFkZGl0aW9uIHRvIHRoZSBlcnJvciBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgRGV0YWlsZWRGYWlsdXJlPFQsIFREPiBleHRlbmRzIEZhaWx1cmU8VD4ge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGV0YWlsOiBURDtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0BsaW5rIERldGFpbGVkRmFpbHVyZSB8IERldGFpbGVkRmFpbHVyZTxULCBURD59IHdpdGggdGhlIHN1cHBsaWVkXG4gICAgICogbWVzc2FnZSBhbmQgZGV0YWlsLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIGRldGFpbCAtIFRoZSBlcnJvciBkZXRhaWwgdG8gYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgZGV0YWlsOiBURCkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5fZGV0YWlsID0gZGV0YWlsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciBkZXRhaWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMge0BsaW5rIERldGFpbGVkRmFpbHVyZX0uXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZXRhaWwoKTogVEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV0YWlsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgdGhhdCB0aGlzIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGlzIGEgZmFpbHVyZS5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEFsd2F5cyB0cnVlIGZvciB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBidXQgY2FuIGJlIHVzZWQgYXMgdHlwZSBndWFyZFxuICAgICAqIHRvIGRpc2NyaW1pbmF0ZSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBmcm9tIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGluXG4gICAgICogYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0ZhaWx1cmUoKTogdGhpcyBpcyBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGFnYXRlcyB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgZGV0YWlsIGZyb20gdGhpcyByZXN1bHQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBNdXRhdGVzIHRoZSBzdWNjZXNzIHR5cGUgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2sgd291bGQgaGF2ZSwgYnV0IGRvZXMgbm90XG4gICAgICogY2FsbCB0aGUgc3VjY2VzcyBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gX2NiIC0ge0BsaW5rIERldGFpbGVkU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IFN1Y2Nlc3MgY2FsbGJhY2t9IHRvIGJlIGNhbGxlZFxuICAgICAqIG9uIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fSBpbiBjYXNlIG9mIHN1Y2Nlc3MgKGlnbm9yZWQpLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEZXRhaWxlZEZhaWx1cmUgfCBEZXRhaWxlZEZhaWx1cmU8VE4sIFREPn0gd2hpY2ggY29udGFpbnNcbiAgICAgKiB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgZGV0YWlsIGZyb20gdGhpcyBvbmUuXG4gICAgICovXG4gICAgcHVibGljIG9uU3VjY2VzczxUTj4oX2NiOiBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb248VCwgVEQsIFROPik6IERldGFpbGVkUmVzdWx0PFROLCBURD4ge1xuICAgICAgICByZXR1cm4gbmV3IERldGFpbGVkRmFpbHVyZTxUTiwgVEQ+KHRoaXMubWVzc2FnZSwgdGhpcy5fZGV0YWlsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBzdXBwbGllZCB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uIHwgZmFpbHVyZSBjYWxsYmFja30gYW5kIHByb3BhZ2F0ZXNcbiAgICAgKiBpdHMgcmV0dXJuZWQge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fS5cbiAgICAgKiBAcGFyYW0gY2IgLSBUaGUge0BsaW5rIERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWx1cmUgY2FsbGJhY2t9IHRvIGJlIGludm9rZWQuXG4gICAgICogQHJldHVybnMgVGhlIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0gcmV0dXJuZWQgYnkgdGhlIGZhaWx1cmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShjYjogRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uPFQsIFREPik6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBjYih0aGlzLm1lc3NhZ2UsIHRoaXMuX2RldGFpbCk7XG4gICAgfVxufVxuXG4vKipcbiAqIFR5cGUgaW5mZXJlbmNlIHRvIGRldGVybWluZSB0aGUgcmVzdWx0IHR5cGUgYFRgIG9mIGEge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fS5cbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCB0eXBlIERldGFpbGVkUmVzdWx0PFQsIFREPiA9IERldGFpbGVkU3VjY2VzczxULCBURD58RGV0YWlsZWRGYWlsdXJlPFQsIFREPjtcblxuLyoqXG4gKiBUeXBlIGluZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIGRldGFpbCB0eXBlIGBURGAgb2YgYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59LlxuICogQGJldGFcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0RGV0YWlsVHlwZTxUPiA9IFQgZXh0ZW5kcyBEZXRhaWxlZFJlc3VsdDx1bmtub3duLCBpbmZlciBURD4gPyBURCA6IG5ldmVyO1xuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIERldGFpbGVkU3VjY2VzcyB8IERldGFpbGVkU3VjY2VzczxULCBURD59IHdpdGggYSBzdXBwbGllZCB2YWx1ZSBhbmQgb3B0aW9uYWxcbiAqIGRldGFpbC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0eXBlIGA8VD5gIHRvIGJlIHJldHVybmVkLlxuICogQHBhcmFtIGRldGFpbCAtIEFuIG9wdGlvbmFsIGRldGFpbCBvZiB0eXBlIGA8VEQ+YCB0byBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERldGFpbGVkU3VjY2VzcyB8IERldGFpbGVkU3VjY2VzczxULCBURD59IHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlXG4gKiBhbmQgZGV0YWlsLCBpZiBzdXBwbGllZC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2NlZWRXaXRoRGV0YWlsPFQsIFREPih2YWx1ZTogVCwgZGV0YWlsPzogVEQpOiBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+IHtcbiAgICByZXR1cm4gbmV3IERldGFpbGVkU3VjY2VzczxULCBURD4odmFsdWUsIGRldGFpbCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlIHwgRGV0YWlsZWRGYWlsdXJlPFQsIFREPn0gd2l0aCBhIHN1cHBsaWVkIGVycm9yIG1lc3NhZ2UgYW5kIGRldGFpbC5cbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGV2ZW50IGRldGFpbCB0byBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIEFuIHtAbGluayBEZXRhaWxlZEZhaWx1cmUgfCBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZCBlcnJvclxuICogbWVzc2FnZSBhbmQgZGV0YWlsLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmFpbFdpdGhEZXRhaWw8VCwgVEQ+KG1lc3NhZ2U6IHN0cmluZywgZGV0YWlsOiBURCk6IERldGFpbGVkRmFpbHVyZTxULCBURD4ge1xuICAgIHJldHVybiBuZXcgRGV0YWlsZWRGYWlsdXJlPFQsIFREPihtZXNzYWdlLCBkZXRhaWwpO1xufVxuXG4vKipcbiAqIFByb3BhZ2F0ZXMgYSB7QGxpbmsgU3VjY2Vzc30gb3Ige0BsaW5rIEZhaWx1cmV9IHtAbGluayBSZXN1bHR9LCBhZGRpbmcgc3VwcGxpZWRcbiAqIGV2ZW50IGRldGFpbHMgYXMgYXBwcm9wcmlhdGUuXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIHtAbGluayBSZXN1bHR9IHRvIGJlIHByb3BhZ2F0ZWQuXG4gKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGV2ZW50IGRldGFpbCAodHlwZSBgPFREPmApIHRvIGJlIGFkZGVkIHRvIHRoZSB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0fS5cbiAqIEBwYXJhbSBzdWNjZXNzRGV0YWlsIC0gQW4gb3B0aW9uYWwgZGlzdGluY3QgZXZlbnQgZGV0YWlsIHRvIGJlIGFkZGVkIHRvIHtAbGluayBTdWNjZXNzfSByZXN1bHRzLiAgSWYgYHN1Y2Nlc3NEZXRhaWxgXG4gKiBpcyBvbWl0dGVkIG9yIGB1bmRlZmluZWRgLCB0aGVuIGBkZXRhaWxgIHdpbGwgYmUgYXBwbGllZCB0byB7QGxpbmsgU3VjY2Vzc30gcmVzdWx0cy5cbiAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0gd2l0aCB0aGUgc3VjY2VzcyB2YWx1ZSBvciBlcnJvclxuICogbWVzc2FnZSBmcm9tIHRoZSBvcmlnaW5hbCBgcmVzdWx0YCBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIGRldGFpbCBhZGRlZC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BhZ2F0ZVdpdGhEZXRhaWw8VCwgVEQ+KHJlc3VsdDogUmVzdWx0PFQ+LCBkZXRhaWw6IFRELCBzdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgIHJldHVybiByZXN1bHQuaXNTdWNjZXNzKClcbiAgICAgICAgPyBzdWNjZWVkV2l0aERldGFpbChyZXN1bHQudmFsdWUsIHN1Y2Nlc3NEZXRhaWwgPz8gZGV0YWlsKVxuICAgICAgICA6IGZhaWxXaXRoRGV0YWlsKHJlc3VsdC5tZXNzYWdlLCBkZXRhaWwpO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgdGhyb3cgdG8gY29udmVydCBleGNlcHRpb24gcmVzdWx0c1xuICogdG8ge0BsaW5rIEZhaWx1cmV9LlxuICogQHBhcmFtIGZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gYmUgY2FwdHVyZWQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIGEgdmFsdWUgb2YgdHlwZSBgPFQ+YCBvblxuICogc3VjY2VzcyAsIG9yIHtAbGluayBGYWlsdXJlfSB3aXRoIHRoZSB0aHJvd24gZXJyb3IgbWVzc2FnZSBpZlxuICogYGZ1bmNgIHRocm93cyBhbiBgRXJyb3JgLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZVJlc3VsdDxUPihmdW5jOiAoKSA9PiBUKTogUmVzdWx0PFQ+IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3VjY2VlZChmdW5jKCkpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBmYWlsKChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGVzIHN1Y2Nlc3NmdWwgcmVzdWx0IHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fS5cbiAqIEBwYXJhbSByZXN1bHRzIC0gVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gdG8gYmUgbWFwcGVkLlxuICogQHJldHVybnMgIElmIGFsbCB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gYXJlIHN1Y2Nlc3NmdWwsIHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYW5cbiAqIGFycmF5IGNvbnRhaW5pbmcgYWxsIHJldHVybmVkIHZhbHVlcy4gIElmIGFueSB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gZmFpbGVkLCByZXR1cm5zXG4gKiB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhIGNvbmNhdGVuYXRlZCBzdW1tYXJ5IG9mIGFsbCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFJlc3VsdHM8VD4ocmVzdWx0czogSXRlcmFibGU8UmVzdWx0PFQ+Pik6IFJlc3VsdDxUW10+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZWxlbWVudHM6IFRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoZWxlbWVudHMpO1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgc3VjY2Vzc2Z1bCByZXN1bHRzIGZyb20gYSBjb2xsZWN0aW9uIG9mIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0sXG4gKiBvcHRpb25hbGx5IGlnbm9yaW5nIGNlcnRhaW4gZXJyb3IgZGV0YWlscy5cbiAqIEBwYXJhbSByZXN1bHRzIC0gVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSB0byBiZSBtYXBwZWQuXG4gKiBAcGFyYW0gaWdub3JlIC0gQW4gYXJyYXkgb2YgZXJyb3IgZGV0YWlsIHZhbHVlcyAob2YgdHlwZSBgPFREPmApIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQuXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCBhbiBhcnJheSBjb250YWluaW5nIGFsbCBzdWNjZXNzZnVsIHJlc3VsdHMgaWYgYWxsIHJlc3VsdHMgZWl0aGVyXG4gKiBzdWNjZWVkZWQgb3IgcmV0dXJuZWQgZXJyb3IgZGV0YWlscyBsaXN0ZWQgaW4gYGlnbm9yZWAuICBJZiBhbnkgcmVzdWx0cyBmYWlsZWQgd2l0aCBkZXRhaWxzXG4gKiB0aGF0IGNhbm5vdCBiZSBpZ25vcmVkLCByZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGFuIGNvbmNhdGVuYXRlZCBzdW1tYXJ5IG9mIGFsbCBub24taWdub3JhYmxlXG4gKiBlcnJvciBtZXNzYWdlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcERldGFpbGVkUmVzdWx0czxULCBURD4ocmVzdWx0czogSXRlcmFibGU8RGV0YWlsZWRSZXN1bHQ8VCwgVEQ+PiwgaWdub3JlOiBURFtdKTogUmVzdWx0PFRbXT4ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbGVtZW50czogVFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaWdub3JlLmluY2x1ZGVzKHJlc3VsdC5kZXRhaWwpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoZWxlbWVudHMpO1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgc3VjY2Vzc2Z1bCByZXN1bHRzIGZyb20gYSBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0uXG4gKiBAcGFyYW0gcmVzdWx0cyAtIEFuIGBJdGVyYWJsZWAgb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gZnJvbSB3aGljaCBzdWNjZXNzXG4gKiByZXN1bHRzIGFyZSB0byBiZSBhZ2dyZWdhdGVkLlxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYW4gYXJyYXkgb2YgYDxUPmAgaWYgYW55IHJlc3VsdHMgd2VyZSBzdWNjZXNzZnVsLiBJZlxuICogYWxsIHtAbGluayBSZXN1bHQgfCByZXN1bHRzfSBmYWlsZWQsIHJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBjb25jYXRlbmF0ZWRcbiAqIHN1bW1hcnkgb2YgYWxsIGVycm9yIG1lc3NhZ2VzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwU3VjY2VzczxUPihyZXN1bHRzOiBJdGVyYWJsZTxSZXN1bHQ8VD4+KTogUmVzdWx0PFRbXT4ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbGVtZW50czogVFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoZWxlbWVudHMubGVuZ3RoID09PSAwKSAmJiAoZXJyb3JzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKGVsZW1lbnRzKTtcbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVycm9yIG1lc3NhZ2VzIGZyb20gYSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59LlxuICogQHBhcmFtIHJlc3VsdHMgLSBBbiBpdGVyYWJsZSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IGZvciB3aGljaFxuICogZXJyb3IgbWVzc2FnZXMgYXJlIGFnZ3JlZ2F0ZWQuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzIGNvbnNpc3Rpbmcgb2YgYWxsIGVycm9yIG1lc3NhZ2VzIHJldHVybmVkIGJ5XG4gKiB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gaW4gdGhlIHNvdXJjZSBjb2xsZWN0aW9uLiBJZ25vcmVzIHtAbGluayBTdWNjZXNzfVxuICogcmVzdWx0cyBhbmQgcmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSB3ZXJlIG5vIGVycm9ycy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcEZhaWx1cmVzPFQ+KHJlc3VsdHM6IEl0ZXJhYmxlPFJlc3VsdDxUPj4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0ZhaWx1cmUoKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhbiBpdGVyYWJsZSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IHdlcmUgYWxsIHN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0gcmVzdWx0cyAtIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IHRvIGJlIHRlc3RlZC5cbiAqIEByZXR1cm5zIFJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHRydWVgIGlmIGFsbCB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gYXJlIHN1Y2Nlc3NmdWwuXG4gKiBJZiBhbnkgYXJlIHVuc3VjY2Vzc2Z1bCwgcmV0dXJucyB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhIGNvbmNhdGVuYXRlZCBzdW1tYXJ5IHRoZSBlcnJvclxuICogbWVzc2FnZXMgZnJvbSBhbGwgZmFpbGVkIGVsZW1lbnRzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsU3VjY2VlZDxUPihyZXN1bHRzOiBJdGVyYWJsZTxSZXN1bHQ8dW5rbm93bj4+LCBzdWNjZXNzVmFsdWU6IFQpOiBSZXN1bHQ8VD4ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gICAgaWYgKHJlc3VsdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKHN1Y2Nlc3NWYWx1ZSk7XG59XG5cbi8qKlxuICogU3RyaW5nLWtleWVkIHJlY29yZCBvZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHtAbGluayBwb3B1bGF0ZU9iamVjdH0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkSW5pdGlhbGl6ZXJzPFQ+ID0geyBbIGtleSBpbiBrZXlvZiBUIF06IChzdGF0ZTogUGFydGlhbDxUPikgPT4gUmVzdWx0PFRba2V5XT4gfTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUge0BsaW5rIHBvcHVsYXRlT2JqZWN0fSBmdW5jdGlvbi5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3B1bGF0ZU9iamVjdE9wdGlvbnM8VD4ge1xuICAgIC8qKlxuICAgICAqIElmIHByZXNlbnQsIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggcHJvcGVydHkgdmFsdWVzIHNob3VsZFxuICAgICAqIGJlIGV2YWx1YXRlZC4gIEFueSBrZXlzIG5vdCBsaXN0ZWQgYXJlIGV2YWx1YXRlZCBhZnRlciBhbGwgbGlzdGVkXG4gICAgICoga2V5cyBpbiBpbmRldGVybWluYXRlIG9yZGVyLiAgSWYgJ29yZGVyJyBpcyBub3QgcHJlc2VudCwga2V5c1xuICAgICAqIGFyZSBldmFsdWF0ZWQgaW4gaW5kZXRlcm1pbmF0ZSBvcmRlci5cbiAgICAgKi9cbiAgICBvcmRlcj86IChrZXlvZiBUKVtdO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBoYW5kbGluZyBvZiBgdW5kZWZpbmVkYCB2YWx1ZXMuICBCeSBkZWZhdWx0LCBzdWNjZXNzZnVsXG4gICAgICogYHVuZGVmaW5lZGAgcmVzdWx0cyBhcmUgd3JpdHRlbiB0byB0aGUgcmVzdWx0IG9iamVjdC4gIElmIHRoaXMgdmFsdWVcbiAgICAgKiBpcyBgdHJ1ZWAgdGhlbiBgdW5kZWZpbmVkYCByZXN1bHRzIGFyZSBzdXBwcmVzc2VkIGZvciBhbGwgcHJvcGVydGllcy5cbiAgICAgKiBJZiB0aGlzIHZhbHVlIGlzIGFuIGFycmF5IG9mIHByb3BlcnR5IGtleXMgdGhlbiBgdW5kZWZpbmVkYCByZXN1bHRzXG4gICAgICogYXJlIHN1cHByZXNzZWQgZm9yIHRob3NlIHByb3BlcnRpZXMgb25seS5cbiAgICAgKi9cbiAgICBzdXBwcmVzc1VuZGVmaW5lZD86IGJvb2xlYW4gfCAoa2V5b2YgVClbXTtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZXMgYW4gYW4gb2JqZWN0IGJhc2VkIG9uIGEgcHJvdG90eXBlIGZ1bGwgb2YgZmllbGQgaW5pdGlhbGl6ZXJzIHRoYXQgcmV0dXJuIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VFtrZXldPn0uXG4gKiBSZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIHRoZSBwb3B1bGF0ZWQgb2JqZWN0IGlmIGFsbCBpbml0aWFsaXplcnMgc3VjY2VlZCwgb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYVxuICogY29uY2F0ZW5hdGVkIGxpc3Qgb2YgYWxsIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIGluaXRpYWxpemVycyAtIEFuIG9iamVjdCB3aXRoIHRoZSBzaGFwZSBvZiB0aGUgdGFyZ2V0IGJ1dCB3aXRoIGluaXRpYWxpemVyIGZ1bmN0aW9ucyBmb3JcbiAqIGVhY2ggcHJvcGVydHkuXG4gKiBAcGFyYW0gb3B0aW9ucyB7UG9wdWxhdGVPYmplY3RPcHRpb25zPFQ+fSAtIEFuIG9wdGlvbmFsIHtAbGluayBQb3B1bGF0ZU9iamVjdE9wdGlvbnMgfCBzZXQgb2Ygb3B0aW9uc30gd2hpY2hcbiAqIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjYWxsLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVPYmplY3Q8VD4oaW5pdGlhbGl6ZXJzOiBGaWVsZEluaXRpYWxpemVyczxUPiwgb3B0aW9ucz86IFBvcHVsYXRlT2JqZWN0T3B0aW9uczxUPik6IFJlc3VsdDxUPjtcblxuLyoqXG4gKiBQb3B1bGF0ZXMgYW4gYW4gb2JqZWN0IGJhc2VkIG9uIGEgcHJvdG90eXBlIGZ1bGwgb2YgZmllbGQgaW5pdGlhbGl6ZXJzIHRoYXQgcmV0dXJuIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VFtrZXldPn0uXG4gKiBSZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIHRoZSBwb3B1bGF0ZWQgb2JqZWN0IGlmIGFsbCBpbml0aWFsaXplcnMgc3VjY2VlZCwgb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYVxuICogY29uY2F0ZW5hdGVkIGxpc3Qgb2YgYWxsIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIGluaXRpYWxpemVycyAtIEFuIG9iamVjdCB3aXRoIHRoZSBzaGFwZSBvZiB0aGUgdGFyZ2V0IGJ1dCB3aXRoIGluaXRpYWxpemVyIGZ1bmN0aW9ucyBmb3JcbiAqIGVhY2ggcHJvcGVydHkuXG4gKiBAcGFyYW0gb3JkZXIgeyhrZXlvZiBUKVtdfSAtIE9wdGlvbmFsIG9yZGVyIGluIHdoaWNoIGtleXMgc2hvdWxkIGJlIHdyaXR0ZW4uXG4gKiBAcHVibGljXG4gKiBAZGVwcmVjYXRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVPYmplY3Q8VD4oaW5pdGlhbGl6ZXJzOiBGaWVsZEluaXRpYWxpemVyczxUPiwgb3JkZXI6IChrZXlvZiBUKVtdKTogUmVzdWx0PFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlT2JqZWN0PFQ+KGluaXRpYWxpemVyczogRmllbGRJbml0aWFsaXplcnM8VD4sIG9wdGlvbnNPck9yZGVyPzogUG9wdWxhdGVPYmplY3RPcHRpb25zPFQ+IHwgKGtleW9mIFQpW10pOiBSZXN1bHQ8VD4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFBvcHVsYXRlT2JqZWN0T3B0aW9uczxUPiA9IG9wdGlvbnNPck9yZGVyXG4gICAgICAgID8gQXJyYXkuaXNBcnJheShvcHRpb25zT3JPcmRlcikgPyB7IG9yZGVyOiBvcHRpb25zT3JPcmRlciB9IDogb3B0aW9uc09yT3JkZXJcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBzdGF0ZSA9IHt9IGFzIHsgW2tleSBpbiBrZXlvZiBUXTogVFtrZXldIH07XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGtleXM6IChrZXlvZiBUKVtdID0gQXJyYXkuZnJvbShvcHRpb25zLm9yZGVyID8/IFtdKTtcbiAgICBjb25zdCBmb3VuZEtleXMgPSBuZXcgU2V0PGtleW9mIFQ+KG9wdGlvbnMub3JkZXIpO1xuXG4gICAgLy8gc3RhcnQgd2l0aCB0aGUgc3VwcGxpZWQgb3JkZXIgdGhlbiBhcHBlbmQgYW55dGhpbmcgZWxzZSB3ZSBmaW5kXG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdGlhbGl6ZXJzKSB7XG4gICAgICAgIGlmICghZm91bmRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGZvdW5kS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGluaXRpYWxpemVyc1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0aWFsaXplcnNba2V5XShzdGF0ZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucy5zdXBwcmVzc1VuZGVmaW5lZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucy5zdXBwcmVzc1VuZGVmaW5lZCkgJiYgb3B0aW9ucy5zdXBwcmVzc1VuZGVmaW5lZC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZVtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goYHBvcHVsYXRlT2JqZWN0OiBLZXkgJHtTdHJpbmcoa2V5KX0gaXMgcHJlc2VudCBidXQgaGFzIG5vIGluaXRpYWxpemVyYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUgYXMgVCk7XG59XG4iXX0=
|
|
541
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUF3SUg7Ozs7R0FJRztBQUNILE1BQWEsT0FBTztJQVVoQjs7O09BR0c7SUFDSCxZQUFZLEtBQVE7UUFicEI7O1dBRUc7UUFDYSxZQUFPLEdBQUcsSUFBSSxDQUFDO1FBVzNCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsS0FBSztRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTO1FBQ1osT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksU0FBUztRQUNaLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7T0FFRztJQUNJLGVBQWUsQ0FBQyxPQUF1QjtRQUMxQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ksaUJBQWlCLENBQUMsSUFBUTs7UUFDN0IsT0FBTyxNQUFBLElBQUksQ0FBQyxNQUFNLG1DQUFJLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxTQUFTLENBQUssRUFBOEI7UUFDL0MsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFCLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVMsQ0FBQyxDQUF5QjtRQUN0QyxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBSyxPQUFXO1FBQ3BDLE9BQU8saUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLFVBQVUsQ0FBSyxNQUFVLEVBQUUsYUFBa0I7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RyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQzdCO2lCQUNJO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7YUFDSTtZQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLENBQUMsQ0FBQztTQUN2RjtLQUNKO0lBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7S0FDbEM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxLQUFVLENBQUMsQ0FBQztBQUMvQixDQUFDO0FBMUNELHdDQTBDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjAgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11c2UtYmVmb3JlLWRlZmluZSAqL1xuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSB7QGxpbmsgSVJlc3VsdCB8IHJlc3VsdH0gb2Ygc29tZSBvcGVyYXRpb24gb3Igc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucy5cbiAqIEByZW1hcmtzXG4gKiB7QGxpbmsgU3VjY2VzcyB8IFN1Y2Nlc3M8VD59IGFuZCB7QGxpbmsgRmFpbHVyZSB8IEZhaWx1cmU8VD59IHNoYXJlIHRoZSBjb21tb25cbiAqIGNvbnRyYWN0IHtAbGluayBJUmVzdWx0fSwgZW5hYmxpbmcgY29tbWluZ2xlZCBkaXNjcmltaW5hdGVkIHVzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBSZXN1bHQ8VD4gPSBTdWNjZXNzPFQ+IHwgRmFpbHVyZTxUPjtcbi8qKlxuICogQ29udGludWF0aW9uIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBpbiB0aGUgZXZlbnQgdGhhdCBhblxuICoge0BsaW5rIFJlc3VsdH0gaXMgc3VjY2Vzc2Z1bC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgU3VjY2Vzc0NvbnRpbnVhdGlvbjxULCBUTj4gPSAodmFsdWU6IFQpID0+IFJlc3VsdDxUTj47XG4vKipcbiAqIENvbnRpbnVhdGlvbiBjYWxsYmFjayB0byBiZSBjYWxsZWQgaW4gdGhlIGV2ZW50IHRoYXQgYW5cbiAqIHtAbGluayBSZXN1bHR9IGZhaWxzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBGYWlsdXJlQ29udGludWF0aW9uPFQ+ID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gUmVzdWx0PFQ+O1xuLyoqXG4gKiBUeXBlIGluZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIHJlc3VsdCB0eXBlIG9mIGFuIHtAbGluayBSZXN1bHR9LlxuICogQGJldGFcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0VmFsdWVUeXBlPFQ+ID0gVCBleHRlbmRzIFJlc3VsdDxpbmZlciBUVj4gPyBUViA6IG5ldmVyO1xuXG4vKipcbiAqIFNpbXBsZSBsb2dnZXIgaW50ZXJmYWNlIHVzZWQgYnkge0BsaW5rIElSZXN1bHQuZ2V0VmFsdWVPclRocm93fS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUmVzdWx0TG9nZ2VyIHtcbiAgICAvKipcbiAgICAgKiBMb2cgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAcGFyYW0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBlcnJvcihtZXNzYWdlOiBzdHJpbmcpOiB2b2lkO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBzb21lIG9wZXJhdGlvbiBvZiBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zLlxuICogQHJlbWFya3NcbiAqIFRoaXMgY29tbW9uIGNvbnRyYWN0IGVuYWJsZXMgY29tbWluZ2xlZCBkaXNjcmltaW5hdGVkIHVzYWdlIG9mIHtAbGluayBTdWNjZXNzIHwgU3VjY2VzczxUPn1cbiAqIGFuZCB7QGxpbmsgRmFpbHVyZSB8IEZhaWx1cmU8VD59LlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIElSZXN1bHQ8VD4ge1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAgICovXG4gICAgcmVhZG9ubHkgc3VjY2VzczogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLiAgRnVuY3Rpb25zXG4gICAgICogYXMgYSB0eXBlIGd1YXJkIGZvciB7QGxpbmsgU3VjY2VzcyB8IFN1Y2Nlc3M8VD59LlxuICAgICAqL1xuICAgIGlzU3VjY2VzcygpOiB0aGlzIGlzIFN1Y2Nlc3M8VD47XG5cbiAgICAvKipcbiAgICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGlzIG9wZXJhdGlvbiBmYWlsZWQuICBGdW5jdGlvbnNcbiAgICAgKiBhcyBhIHR5cGUgZ3VhcmQgZm9yIHtAbGluayBGYWlsdXJlIHwgRmFpbHVyZTxUPn0uXG4gICAgICovXG4gICAgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRmFpbHVyZTxUPjtcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIHN1Y2Nlc3NmdWwge0BsaW5rIElSZXN1bHQgfCByZXN1bHR9LFxuICAgICAqIG9yIHRocm93cyB0aGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gZmFpbGVkLlxuICAgICAqIEBwYXJhbSBsb2dnZXIgLSBBbiBvcHRpb25hbCB7QGxpbmsgSVJlc3VsdExvZ2dlciB8IGxvZ2dlcn0gdG8gd2hpY2ggdGhlXG4gICAgICogZXJyb3Igd2lsbCBhbHNvIGJlIHJlcG9ydGVkLlxuICAgICAqIEByZXR1cm5zIFRoZSByZXR1cm4gdmFsdWUsIGlmIHRoZSBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwuXG4gICAgICogQHRocm93cyBUaGUgZXJyb3IgbWVzc2FnZSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKi9cbiAgICBnZXRWYWx1ZU9yVGhyb3cobG9nZ2VyPzogSVJlc3VsdExvZ2dlcik6IFQ7XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYSBzdWNjZXNzZnVsIHtAbGluayBJUmVzdWx0IHwgcmVzdWx0fSxcbiAgICAgKiBvciBhIGRlZmF1bHQgdmFsdWUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKiBAcGFyYW0gZGZsdCAtIFRoZSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZCAoZGVmYXVsdCBpc1xuICAgICAqIGB1bmRlZmluZWRgKS5cbiAgICAgKiBAcmV0dXJucyBUaGUgcmV0dXJuIHZhbHVlLCBpZiB0aGUgb3BlcmF0aW9uIHdhcyBzdWNjZXNzZnVsLiAgUmV0dXJuc1xuICAgICAqIHRoZSBzdXBwbGllZCBkZWZhdWx0IHZhbHVlIG9yIGB1bmRlZmluZWRgIGlmIG5vIGRlZmF1bHQgaXMgc3VwcGxpZWQuXG4gICAgICovXG4gICAgZ2V0VmFsdWVPckRlZmF1bHQoZGZsdD86IFQpOiBUfHVuZGVmaW5lZDtcblxuICAgIC8qKlxuICAgICAqIENhbGxzIGEgc3VwcGxpZWQge0BsaW5rIFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNvbnRpbnVhdGlvbn0gaWZcbiAgICAgKiB0aGUgb3BlcmF0aW9uIHdhcyBhIHN1Y2Nlc3MuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUge0BsaW5rIFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNvbnRpbnVhdGlvbn0gbWlnaHQgcmV0dXJuIGFcbiAgICAgKiBkaWZmZXJlbnQgcmVzdWx0IHR5cGUgdGhhbiB7QGxpbmsgSVJlc3VsdH0gb24gd2hpY2ggaXQgaXMgaW52b2tlZC4gVGhpc1xuICAgICAqIGVuYWJsZXMgY2hhaW5pbmcgb2Ygb3BlcmF0aW9ucyB3aXRoIGhldGVyb2dlbm91cyByZXR1cm4gdHlwZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2IgLSBUaGUge0BsaW5rIFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNvbnRpbnVhdGlvbn0gdG9cbiAgICAgKiBiZSBjYWxsZWQgaW4gdGhlIGV2ZW50IG9mIHN1Y2Nlc3MuXG4gICAgICogQHJldHVybnMgSWYgdGhpcyBvcGVyYXRpb24gd2FzIHN1Y2Nlc3NmdWwsIHJldHVybnMgdGhlIHZhbHVlIHJldHVybmVkXG4gICAgICogYnkgdGhlIHtAbGluayBTdWNjZXNzQ29udGludWF0aW9uIHwgc3VjY2VzcyBjb250aW51YXRpb259LiAgSWYgdGhpcyByZXN1bHRcbiAgICAgKiBmYWlsZWQsIHByb3BhZ2F0ZXMgdGhlIGVycm9yIG1lc3NhZ2UgZnJvbSB0aGlzIGZhaWx1cmUuXG4gICAgICovXG4gICAgb25TdWNjZXNzPFROPihjYjogU3VjY2Vzc0NvbnRpbnVhdGlvbjxULCBUTj4pOiBSZXN1bHQ8VE4+O1xuXG4gICAgLyoqXG4gICAgICogQ2FsbHMgYSBzdXBwbGllZCB7QGxpbmsgRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWxlZCBjb250aW51YXRpb259IGlmXG4gICAgICogdGhlIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICogQHBhcmFtIGNiIC0gVGhlIHtAbGluayBGYWlsdXJlQ29udGludWF0aW9uIHwgZmFpbHVyZSBjb250aW51YXRpb259IHRvXG4gICAgICogYmUgY2FsbGVkIGluIHRoZSBldmVudCBvZiBmYWlsdXJlLlxuICAgICAqIEByZXR1cm5zIElmIHRoaXMgb3BlcmF0aW9uIGZhaWxlZCwgcmV0dXJucyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlXG4gICAgICoge0BsaW5rIEZhaWx1cmVDb250aW51YXRpb24gfCBmYWlsdXJlIGNvbnRpbnVhdGlvbn0uICBJZiB0aGlzIHJlc3VsdFxuICAgICAqIHdhcyBzdWNjZXNzZnVsLCBwcm9wYWdhdGVzIHRoZSByZXN1bHQgdmFsdWUgZnJvbSB0aGUgc3VjY2Vzc2Z1bCBldmVudC5cbiAgICAgKi9cbiAgICBvbkZhaWx1cmUoY2I6IEZhaWx1cmVDb250aW51YXRpb248VD4pOiBSZXN1bHQ8VD47XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0cyBhIHtAbGluayBJUmVzdWx0IHwgSVJlc3VsdDxUPn0gdG8gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59LFxuICAgICAqIGFkZGluZyBhIHN1cHBsaWVkIGRldGFpbCBpZiB0aGUgb3BlcmF0aW9uIGZhaWxlZC5cbiAgICAgKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGRldGFpbCB0byBiZSBhZGRlZCBpZiB0aGlzIG9wZXJhdGlvbiBmYWlsZWQuXG4gICAgICogQHJldHVybnMgQSBuZXcge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSB3aXRoIGVpdGhlclxuICAgICAqIHRoZSBzdWNjZXNzIHJlc3VsdCBvciB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoaXMge0BsaW5rIElSZXN1bHR9LCB3aXRoXG4gICAgICogdGhlIHN1cHBsaWVkIGRldGFpbCAoaWYgdGhpcyBldmVudCBmYWlsZWQpIG9yIGRldGFpbCBgdW5kZWZpbmVkYCAoaWZcbiAgICAgKiB0aGlzIHJlc3VsdCBzdWNjZWVkZWQpLlxuICAgICAqL1xuICAgIHdpdGhGYWlsdXJlRGV0YWlsPFREPihkZXRhaWw6IFREKTogRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+O1xuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgYSB7QGxpbmsgSVJlc3VsdCB8IElSZXN1bHQ8VD59IHRvIGEge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSxcbiAgICAgKiBhZGRpbmcgc3VwcGxpZWQgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGRlZmF1bHQgZGV0YWlsIHRvIGJlIGFkZGVkIHRvIHRoZSBuZXcge0BsaW5rIERldGFpbGVkUmVzdWx0fS5cbiAgICAgKiBAcGFyYW0gc3VjY2Vzc0RldGFpbCAtIEFuIG9wdGlvbmFsIGRldGFpbCB0byBiZSBhZGRlZCBpZiB0aGlzIHJlc3VsdCB3YXMgc3VjY2Vzc2Z1bC5cbiAgICAgKiBAcmV0dXJucyBBIG5ldyB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHdpdGggZWl0aGVyXG4gICAgICogdGhlIHN1Y2Nlc3MgcmVzdWx0IG9yIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhpcyB7QGxpbmsgSVJlc3VsdH0gYW5kIHRoZVxuICAgICAqIGFwcHJvcHJpYXRlIGFkZGVkIGRldGFpbC5cbiAgICAgKi9cbiAgICB3aXRoRGV0YWlsPFREPihkZXRhaWw6IFRELCBzdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD47XG59XG5cbi8qKlxuICogUmVwb3J0cyBhIHN1Y2Nlc3NmdWwge0BsaW5rIElSZXN1bHQgfCByZXN1bHR9IGZyb20gc29tZSBvcGVyYXRpb24gYW5kIHRoZVxuICogY29ycmVzcG9uZGluZyB2YWx1ZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGNsYXNzIFN1Y2Nlc3M8VD4gaW1wbGVtZW50cyBJUmVzdWx0PFQ+IHtcbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5zdWNjZXNzfVxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdWNjZXNzID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF92YWx1ZTogVDtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWUuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHZhbHVlOiBUKSB7XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIHJlc3VsdCB2YWx1ZSByZXR1cm5lZCBieSB0aGUgc3VjY2Vzc2Z1bCBvcGVyYXRpb24uXG4gICAgICovXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBUIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzU3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNTdWNjZXNzKCk6IHRoaXMgaXMgU3VjY2VzczxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzRmFpbHVyZX1cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRmFpbHVyZTxUPiB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5nZXRWYWx1ZU9yVGhyb3d9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JUaHJvdyhfbG9nZ2VyPzogSVJlc3VsdExvZ2dlcik6IFQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuZ2V0VmFsdWVPckRlZmF1bHR9XG4gICAgICovXG4gICAgcHVibGljIGdldFZhbHVlT3JEZWZhdWx0KGRmbHQ/OiBUKTogVHx1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gZGZsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vblN1Y2Nlc3N9XG4gICAgICovXG4gICAgcHVibGljIG9uU3VjY2VzczxUTj4oY2I6IFN1Y2Nlc3NDb250aW51YXRpb248VCwgVE4+KTogUmVzdWx0PFROPiB7XG4gICAgICAgIHJldHVybiBjYih0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vbkZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShfOiBGYWlsdXJlQ29udGludWF0aW9uPFQ+KTogUmVzdWx0PFQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQud2l0aEZhaWx1cmVEZXRhaWx9XG4gICAgICovXG4gICAgcHVibGljIHdpdGhGYWlsdXJlRGV0YWlsPFREPihfZGV0YWlsOiBURCk6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBzdWNjZWVkV2l0aERldGFpbCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC53aXRoRGV0YWlsfVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRGV0YWlsPFREPihkZXRhaWw6IFRELCBzdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgICAgICByZXR1cm4gc3VjY2VlZFdpdGhEZXRhaWwodGhpcy52YWx1ZSwgc3VjY2Vzc0RldGFpbCA/PyBkZXRhaWwpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXBvcnRzIGEgZmFpbGVkIHtAbGluayBJUmVzdWx0IHwgcmVzdWx0fSBmcm9tIHNvbWUgb3BlcmF0aW9uLCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBjbGFzcyBGYWlsdXJlPFQ+IGltcGxlbWVudHMgSVJlc3VsdDxUPiB7XG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuc3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWVzc2FnZTogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIHtAbGluayBGYWlsdXJlfSB3aXRoIHRoZSBzdXBwbGllZCBtZXNzYWdlLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gRXJyb3IgbWVzc2FnZSB0byBiZSByZXBvcnRlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgZXJyb3IgbWVzc2FnZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBlcnJvci5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQuaXNTdWNjZXNzfVxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N1Y2Nlc3MoKTogdGhpcyBpcyBTdWNjZXNzPFQ+IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmlzRmFpbHVyZX1cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNGYWlsdXJlKCk6IHRoaXMgaXMgRmFpbHVyZTxUPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LmdldFZhbHVlT3JUaHJvd31cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmFsdWVPclRocm93KGxvZ2dlcj86IElSZXN1bHRMb2dnZXIpOiBuZXZlciB7XG4gICAgICAgIGlmIChsb2dnZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHRoaXMuX21lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLl9tZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5nZXRWYWx1ZU9yRGVmYXVsdH1cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0VmFsdWVPckRlZmF1bHQoZGZsdD86IFQpOiBUfHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBkZmx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0Lm9uU3VjY2Vzc31cbiAgICAgKi9cbiAgICBwdWJsaWMgb25TdWNjZXNzPFROPihfOiBTdWNjZXNzQ29udGludWF0aW9uPFQsIFROPik6IFJlc3VsdDxUTj4ge1xuICAgICAgICByZXR1cm4gbmV3IEZhaWx1cmUodGhpcy5tZXNzYWdlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB7QGluaGVyaXRkb2MgSVJlc3VsdC5vbkZhaWx1cmV9XG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShjYjogRmFpbHVyZUNvbnRpbnVhdGlvbjxUPik6IFJlc3VsdDxUPiB7XG4gICAgICAgIHJldHVybiBjYih0aGlzLm1lc3NhZ2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHtAaW5oZXJpdGRvYyBJUmVzdWx0LndpdGhGYWlsdXJlRGV0YWlsfVxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoRmFpbHVyZURldGFpbDxURD4oZGV0YWlsOiBURCk6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBmYWlsV2l0aERldGFpbCh0aGlzLm1lc3NhZ2UsIGRldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICoge0Bpbmhlcml0ZG9jIElSZXN1bHQud2l0aERldGFpbH1cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aERldGFpbDxURD4oZGV0YWlsOiBURCwgX3N1Y2Nlc3NEZXRhaWw/OiBURCk6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBmYWlsV2l0aERldGFpbCh0aGlzLm1lc3NhZ2UsIGRldGFpbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGEgJ2ZyaWVuZGx5JyBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBvYmplY3QuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEge0BsaW5rIEZhaWx1cmV9IHZhbHVlIGlzIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGlzIG9iamVjdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgU3VjY2VzcyB8IFN1Y2Nlc3M8VD59IHdpdGggdGhlIHN1cHBsaWVkIHJlc3VsdCB2YWx1ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZSB0byBiZSByZXR1cm5lZFxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3VjY2VlZDxUPih2YWx1ZTogVCk6IFN1Y2Nlc3M8VD4ge1xuICAgIHJldHVybiBuZXcgU3VjY2VzczxUPih2YWx1ZSk7XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgRmFpbHVyZSB8IEZhaWx1cmU8VD59IHdpdGggdGhlIHN1cHBsaWVkIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0gbWVzc2FnZSAtIEVycm9yIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmYWlsPFQ+KG1lc3NhZ2U6IHN0cmluZyk6IEZhaWx1cmU8VD4ge1xuICAgIHJldHVybiBuZXcgRmFpbHVyZTxUPihtZXNzYWdlKTtcbn1cblxuLyoqXG4gKiBDYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdH0gZW5jb3VudGVycyBzdWNjZXNzLlxuICogQHJlbWFya3NcbiAqIEEgc3VjY2VzcyBjYWxsYmFjayBjYW4gcmV0dXJuIGEgZGlmZmVyZW50IHJlc3VsdCB0eXBlIHRoYW4gaXQgcmVjZWl2ZXMsIGFsbG93aW5nXG4gKiBzdWNjZXNzIHJlc3VsdHMgdG8gY2hhaW4gdGhyb3VnaCBpbnRlcm1lZGlhdGUgcmVzdWx0IHR5cGVzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb248VCwgVEQsIFROPiA9ICh2YWx1ZTogVCwgZGV0YWlsPzogVEQpID0+IERldGFpbGVkUmVzdWx0PFROLCBURD47XG5cbi8qKlxuICogQ2FsbGJhY2sgdG8gYmUgY2FsbGVkIHdoZW4gYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9IGVuY291bnRlcnMgYSBmYWlsdXJlLlxuICogQHJlbWFya3NcbiAqIEEgZmFpbHVyZSBjYWxsYmFjayBjYW4gY2hhbmdlIHtAbGluayBGYWlsdXJlfSB0byB7QGxpbmsgU3VjY2Vzc30gKGUuZy4gYnkgcmV0dXJuaW5nIGEgZGVmYXVsdCB2YWx1ZSlcbiAqIG9yIGl0IGNhbiBjaGFuZ2Ugb3IgZW1iZWxsaXNoIHRoZSBlcnJvciBtZXNzYWdlLCBidXQgaXQgY2Fubm90IGNoYW5nZSB0aGUgc3VjY2VzcyByZXR1cm4gdHlwZS5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uPFQsIFREPiA9IChtZXNzYWdlOiBzdHJpbmcsIGRldGFpbDogVEQpID0+IERldGFpbGVkUmVzdWx0PFQsIFREPjtcblxuLyoqXG4gKiBBIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9IGV4dGVuZHMge0BsaW5rIFN1Y2Nlc3N9IHRvIHJlcG9ydCBvcHRpb25hbCBzdWNjZXNzIGRldGFpbHMgaW5cbiAqIGFkZGl0aW9uIHRvIHRoZSBlcnJvciBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgRGV0YWlsZWRTdWNjZXNzPFQsIFREPiBleHRlbmRzIFN1Y2Nlc3M8VD4ge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGV0YWlsPzogVEQ7XG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAbGluayBEZXRhaWxlZFN1Y2Nlc3MgfCBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZFxuICAgICAqIHZhbHVlIGFuZCBkZXRhaWwuXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHJldHVybmVkLlxuICAgICAqIEBwYXJhbSBkZXRhaWwgLSBBbiBvcHRpb25hbCBzdWNjZXNzZnVsIGRldGFpbCB0byBiZSByZXR1cm5lZC4gIElmIG9taXR0ZWQsIGRldGFpbFxuICAgICAqIHdpbGwgYmUgYHVuZGVmaW5lZGAuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHZhbHVlOiBULCBkZXRhaWw/OiBURCkge1xuICAgICAgICBzdXBlcih2YWx1ZSk7XG4gICAgICAgIHRoaXMuX2RldGFpbCA9IGRldGFpbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgc3VjY2VzcyBkZXRhaWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMge0BsaW5rIERldGFpbGVkU3VjY2Vzc30sIG9yIGB1bmRlZmluZWRgIGlmXG4gICAgICogbm8gZGV0YWlsIHdhcyBzdXBwbGllZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGRldGFpbCgpOiBURHx1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV0YWlsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgdGhhdCB0aGlzIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3N9IGlzIGEgc3VjY2Vzcy5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEFsd2F5cyB0cnVlIGZvciB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBidXQgY2FuIGJlIHVzZWQgYXMgdHlwZSBndWFyZFxuICAgICAqIHRvIGRpc2NyaW1pbmF0ZSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBmcm9tIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGluXG4gICAgICogYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc1N1Y2Nlc3MoKTogdGhpcyBpcyBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52b2tlcyB0aGUgc3VwcGxpZWQge0BsaW5rIERldGFpbGVkU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IHN1Y2Nlc3MgY2FsbGJhY2t9IGFuZCBwcm9wYWdhdGVzXG4gICAgICogaXRzIHJldHVybmVkIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFROLCBURD59LlxuICAgICAqIEByZW1hcmtzXG4gICAgICogVGhlIHN1Y2Nlc3MgY2FsbGJhY2sgbXV0YXRlcyB0aGUgcmV0dXJuIHR5cGUgZnJvbSBgPFQ+YCB0byBgPFROPmAuXG4gICAgICogQHBhcmFtIGNiIC0gVGhlIHtAbGluayBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb24gfCBzdWNjZXNzIGNhbGxiYWNrfSB0byBiZSBpbnZva2VkLlxuICAgICAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59IHJldHVybmVkIGJ5IHRoZSBzdWNjZXNzIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyBvblN1Y2Nlc3M8VE4+KGNiOiBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb248VCwgVEQsIFROPik6IERldGFpbGVkUmVzdWx0PFROLCBURD4ge1xuICAgICAgICByZXR1cm4gY2IodGhpcy52YWx1ZSwgdGhpcy5fZGV0YWlsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9wYWdhdGVzIHRoaXMge0BsaW5rIERldGFpbGVkU3VjY2Vzc30uXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBGYWlsdXJlIGRvZXMgbm90IG11dGF0ZSByZXR1cm4gdHlwZSBzbyB3ZSBjYW4gcmV0dXJuIHRoaXMgZXZlbnQgZGlyZWN0bHkuXG4gICAgICogQHBhcmFtIF9jYiAtIHtAbGluayBEZXRhaWxlZEZhaWx1cmVDb250aW51YXRpb24gfCBGYWlsdXJlIGNhbGxiYWNrfSB0byBiZSBjYWxsZWRcbiAgICAgKiBvbiBhIHtAbGluayBEZXRhaWxlZFJlc3VsdH0gaW4gY2FzZSBvZiBmYWlsdXJlIChpZ25vcmVkKS5cbiAgICAgKiBAcmV0dXJucyBgdGhpc2BcbiAgICAgKi9cbiAgICBwdWJsaWMgb25GYWlsdXJlKF9jYjogRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uPFQsIFREPik6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGV4dGVuZHMge0BsaW5rIEZhaWx1cmV9IHRvIHJlcG9ydCBvcHRpb25hbCBmYWlsdXJlIGRldGFpbHMgaW5cbiAqIGFkZGl0aW9uIHRvIHRoZSBlcnJvciBtZXNzYWdlLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgRGV0YWlsZWRGYWlsdXJlPFQsIFREPiBleHRlbmRzIEZhaWx1cmU8VD4ge1xuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfZGV0YWlsOiBURDtcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0BsaW5rIERldGFpbGVkRmFpbHVyZSB8IERldGFpbGVkRmFpbHVyZTxULCBURD59IHdpdGggdGhlIHN1cHBsaWVkXG4gICAgICogbWVzc2FnZSBhbmQgZGV0YWlsLlxuICAgICAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuXG4gICAgICogQHBhcmFtIGRldGFpbCAtIFRoZSBlcnJvciBkZXRhaWwgdG8gYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgZGV0YWlsOiBURCkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5fZGV0YWlsID0gZGV0YWlsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBlcnJvciBkZXRhaWwgYXNzb2NpYXRlZCB3aXRoIHRoaXMge0BsaW5rIERldGFpbGVkRmFpbHVyZX0uXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZXRhaWwoKTogVEQge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGV0YWlsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcG9ydHMgdGhhdCB0aGlzIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGlzIGEgZmFpbHVyZS5cbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIEFsd2F5cyB0cnVlIGZvciB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlfSBidXQgY2FuIGJlIHVzZWQgYXMgdHlwZSBndWFyZFxuICAgICAqIHRvIGRpc2NyaW1pbmF0ZSB7QGxpbmsgRGV0YWlsZWRTdWNjZXNzfSBmcm9tIHtAbGluayBEZXRhaWxlZEZhaWx1cmV9IGluXG4gICAgICogYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHR9LlxuICAgICAqIEByZXR1cm5zIGB0cnVlYFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0ZhaWx1cmUoKTogdGhpcyBpcyBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvcGFnYXRlcyB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgZGV0YWlsIGZyb20gdGhpcyByZXN1bHQuXG4gICAgICogQHJlbWFya3NcbiAgICAgKiBNdXRhdGVzIHRoZSBzdWNjZXNzIHR5cGUgYXMgdGhlIHN1Y2Nlc3MgY2FsbGJhY2sgd291bGQgaGF2ZSwgYnV0IGRvZXMgbm90XG4gICAgICogY2FsbCB0aGUgc3VjY2VzcyBjYWxsYmFjay5cbiAgICAgKiBAcGFyYW0gX2NiIC0ge0BsaW5rIERldGFpbGVkU3VjY2Vzc0NvbnRpbnVhdGlvbiB8IFN1Y2Nlc3MgY2FsbGJhY2t9IHRvIGJlIGNhbGxlZFxuICAgICAqIG9uIGEge0BsaW5rIERldGFpbGVkUmVzdWx0fSBpbiBjYXNlIG9mIHN1Y2Nlc3MgKGlnbm9yZWQpLlxuICAgICAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEZXRhaWxlZEZhaWx1cmUgfCBEZXRhaWxlZEZhaWx1cmU8VE4sIFREPn0gd2hpY2ggY29udGFpbnNcbiAgICAgKiB0aGUgZXJyb3IgbWVzc2FnZSBhbmQgZGV0YWlsIGZyb20gdGhpcyBvbmUuXG4gICAgICovXG4gICAgcHVibGljIG9uU3VjY2VzczxUTj4oX2NiOiBEZXRhaWxlZFN1Y2Nlc3NDb250aW51YXRpb248VCwgVEQsIFROPik6IERldGFpbGVkUmVzdWx0PFROLCBURD4ge1xuICAgICAgICByZXR1cm4gbmV3IERldGFpbGVkRmFpbHVyZTxUTiwgVEQ+KHRoaXMubWVzc2FnZSwgdGhpcy5fZGV0YWlsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnZva2VzIHRoZSBzdXBwbGllZCB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uIHwgZmFpbHVyZSBjYWxsYmFja30gYW5kIHByb3BhZ2F0ZXNcbiAgICAgKiBpdHMgcmV0dXJuZWQge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fS5cbiAgICAgKiBAcGFyYW0gY2IgLSBUaGUge0BsaW5rIERldGFpbGVkRmFpbHVyZUNvbnRpbnVhdGlvbiB8IGZhaWx1cmUgY2FsbGJhY2t9IHRvIGJlIGludm9rZWQuXG4gICAgICogQHJldHVybnMgVGhlIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0gcmV0dXJuZWQgYnkgdGhlIGZhaWx1cmUgY2FsbGJhY2suXG4gICAgICovXG4gICAgcHVibGljIG9uRmFpbHVyZShjYjogRGV0YWlsZWRGYWlsdXJlQ29udGludWF0aW9uPFQsIFREPik6IERldGFpbGVkUmVzdWx0PFQsIFREPiB7XG4gICAgICAgIHJldHVybiBjYih0aGlzLm1lc3NhZ2UsIHRoaXMuX2RldGFpbCk7XG4gICAgfVxufVxuXG4vKipcbiAqIFR5cGUgaW5mZXJlbmNlIHRvIGRldGVybWluZSB0aGUgcmVzdWx0IHR5cGUgYFRgIG9mIGEge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fS5cbiAqIEBiZXRhXG4gKi9cbmV4cG9ydCB0eXBlIERldGFpbGVkUmVzdWx0PFQsIFREPiA9IERldGFpbGVkU3VjY2VzczxULCBURD58RGV0YWlsZWRGYWlsdXJlPFQsIFREPjtcblxuLyoqXG4gKiBUeXBlIGluZmVyZW5jZSB0byBkZXRlcm1pbmUgdGhlIGRldGFpbCB0eXBlIGBURGAgb2YgYSB7QGxpbmsgRGV0YWlsZWRSZXN1bHQgfCBEZXRhaWxlZFJlc3VsdDxULCBURD59LlxuICogQGJldGFcbiAqL1xuZXhwb3J0IHR5cGUgUmVzdWx0RGV0YWlsVHlwZTxUPiA9IFQgZXh0ZW5kcyBEZXRhaWxlZFJlc3VsdDx1bmtub3duLCBpbmZlciBURD4gPyBURCA6IG5ldmVyO1xuXG4vKipcbiAqIFJldHVybnMge0BsaW5rIERldGFpbGVkU3VjY2VzcyB8IERldGFpbGVkU3VjY2VzczxULCBURD59IHdpdGggYSBzdXBwbGllZCB2YWx1ZSBhbmQgb3B0aW9uYWxcbiAqIGRldGFpbC5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSBvZiB0eXBlIGA8VD5gIHRvIGJlIHJldHVybmVkLlxuICogQHBhcmFtIGRldGFpbCAtIEFuIG9wdGlvbmFsIGRldGFpbCBvZiB0eXBlIGA8VEQ+YCB0byBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERldGFpbGVkU3VjY2VzcyB8IERldGFpbGVkU3VjY2VzczxULCBURD59IHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlXG4gKiBhbmQgZGV0YWlsLCBpZiBzdXBwbGllZC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1Y2NlZWRXaXRoRGV0YWlsPFQsIFREPih2YWx1ZTogVCwgZGV0YWlsPzogVEQpOiBEZXRhaWxlZFN1Y2Nlc3M8VCwgVEQ+IHtcbiAgICByZXR1cm4gbmV3IERldGFpbGVkU3VjY2VzczxULCBURD4odmFsdWUsIGRldGFpbCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB7QGxpbmsgRGV0YWlsZWRGYWlsdXJlIHwgRGV0YWlsZWRGYWlsdXJlPFQsIFREPn0gd2l0aCBhIHN1cHBsaWVkIGVycm9yIG1lc3NhZ2UgYW5kIGRldGFpbC5cbiAqIEBwYXJhbSBtZXNzYWdlIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gYmUgcmV0dXJuZWQuXG4gKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGV2ZW50IGRldGFpbCB0byBiZSByZXR1cm5lZC5cbiAqIEByZXR1cm5zIEFuIHtAbGluayBEZXRhaWxlZEZhaWx1cmUgfCBEZXRhaWxlZEZhaWx1cmU8VCwgVEQ+fSB3aXRoIHRoZSBzdXBwbGllZCBlcnJvclxuICogbWVzc2FnZSBhbmQgZGV0YWlsLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gZmFpbFdpdGhEZXRhaWw8VCwgVEQ+KG1lc3NhZ2U6IHN0cmluZywgZGV0YWlsOiBURCk6IERldGFpbGVkRmFpbHVyZTxULCBURD4ge1xuICAgIHJldHVybiBuZXcgRGV0YWlsZWRGYWlsdXJlPFQsIFREPihtZXNzYWdlLCBkZXRhaWwpO1xufVxuXG4vKipcbiAqIFByb3BhZ2F0ZXMgYSB7QGxpbmsgU3VjY2Vzc30gb3Ige0BsaW5rIEZhaWx1cmV9IHtAbGluayBSZXN1bHR9LCBhZGRpbmcgc3VwcGxpZWRcbiAqIGV2ZW50IGRldGFpbHMgYXMgYXBwcm9wcmlhdGUuXG4gKiBAcGFyYW0gcmVzdWx0IC0gVGhlIHtAbGluayBSZXN1bHR9IHRvIGJlIHByb3BhZ2F0ZWQuXG4gKiBAcGFyYW0gZGV0YWlsIC0gVGhlIGV2ZW50IGRldGFpbCAodHlwZSBgPFREPmApIHRvIGJlIGFkZGVkIHRvIHRoZSB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0fS5cbiAqIEBwYXJhbSBzdWNjZXNzRGV0YWlsIC0gQW4gb3B0aW9uYWwgZGlzdGluY3QgZXZlbnQgZGV0YWlsIHRvIGJlIGFkZGVkIHRvIHtAbGluayBTdWNjZXNzfSByZXN1bHRzLiAgSWYgYHN1Y2Nlc3NEZXRhaWxgXG4gKiBpcyBvbWl0dGVkIG9yIGB1bmRlZmluZWRgLCB0aGVuIGBkZXRhaWxgIHdpbGwgYmUgYXBwbGllZCB0byB7QGxpbmsgU3VjY2Vzc30gcmVzdWx0cy5cbiAqIEByZXR1cm5zIEEgbmV3IHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0gd2l0aCB0aGUgc3VjY2VzcyB2YWx1ZSBvciBlcnJvclxuICogbWVzc2FnZSBmcm9tIHRoZSBvcmlnaW5hbCBgcmVzdWx0YCBidXQgd2l0aCB0aGUgc3BlY2lmaWVkIGRldGFpbCBhZGRlZC5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3BhZ2F0ZVdpdGhEZXRhaWw8VCwgVEQ+KHJlc3VsdDogUmVzdWx0PFQ+LCBkZXRhaWw6IFRELCBzdWNjZXNzRGV0YWlsPzogVEQpOiBEZXRhaWxlZFJlc3VsdDxULCBURD4ge1xuICAgIHJldHVybiByZXN1bHQuaXNTdWNjZXNzKClcbiAgICAgICAgPyBzdWNjZWVkV2l0aERldGFpbChyZXN1bHQudmFsdWUsIHN1Y2Nlc3NEZXRhaWwgPz8gZGV0YWlsKVxuICAgICAgICA6IGZhaWxXaXRoRGV0YWlsKHJlc3VsdC5tZXNzYWdlLCBkZXRhaWwpO1xufVxuXG4vKipcbiAqIFdyYXBzIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgdGhyb3cgdG8gY29udmVydCBleGNlcHRpb24gcmVzdWx0c1xuICogdG8ge0BsaW5rIEZhaWx1cmV9LlxuICogQHBhcmFtIGZ1bmMgLSBUaGUgZnVuY3Rpb24gdG8gYmUgY2FwdHVyZWQuXG4gKiBAcmV0dXJucyBSZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIGEgdmFsdWUgb2YgdHlwZSBgPFQ+YCBvblxuICogc3VjY2VzcyAsIG9yIHtAbGluayBGYWlsdXJlfSB3aXRoIHRoZSB0aHJvd24gZXJyb3IgbWVzc2FnZSBpZlxuICogYGZ1bmNgIHRocm93cyBhbiBgRXJyb3JgLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZVJlc3VsdDxUPihmdW5jOiAoKSA9PiBUKTogUmVzdWx0PFQ+IHtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3VjY2VlZChmdW5jKCkpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBmYWlsKChlcnIgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGVzIHN1Y2Nlc3NmdWwgcmVzdWx0IHZhbHVlcyBmcm9tIGEgY29sbGVjdGlvbiBvZiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFQ+fS5cbiAqIEBwYXJhbSByZXN1bHRzIC0gVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gdG8gYmUgbWFwcGVkLlxuICogQHJldHVybnMgIElmIGFsbCB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gYXJlIHN1Y2Nlc3NmdWwsIHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYW5cbiAqIGFycmF5IGNvbnRhaW5pbmcgYWxsIHJldHVybmVkIHZhbHVlcy4gIElmIGFueSB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gZmFpbGVkLCByZXR1cm5zXG4gKiB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhIGNvbmNhdGVuYXRlZCBzdW1tYXJ5IG9mIGFsbCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFJlc3VsdHM8VD4ocmVzdWx0czogSXRlcmFibGU8UmVzdWx0PFQ+Pik6IFJlc3VsdDxUW10+IHtcbiAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZWxlbWVudHM6IFRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICBlbGVtZW50cy5wdXNoKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoZWxlbWVudHMpO1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgc3VjY2Vzc2Z1bCByZXN1bHRzIGZyb20gYSBjb2xsZWN0aW9uIG9mIHtAbGluayBEZXRhaWxlZFJlc3VsdCB8IERldGFpbGVkUmVzdWx0PFQsIFREPn0sXG4gKiBvcHRpb25hbGx5IGlnbm9yaW5nIGNlcnRhaW4gZXJyb3IgZGV0YWlscy5cbiAqIEBwYXJhbSByZXN1bHRzIC0gVGhlIGNvbGxlY3Rpb24gb2Yge0BsaW5rIERldGFpbGVkUmVzdWx0IHwgRGV0YWlsZWRSZXN1bHQ8VCwgVEQ+fSB0byBiZSBtYXBwZWQuXG4gKiBAcGFyYW0gaWdub3JlIC0gQW4gYXJyYXkgb2YgZXJyb3IgZGV0YWlsIHZhbHVlcyAob2YgdHlwZSBgPFREPmApIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQuXG4gKiBAcmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCBhbiBhcnJheSBjb250YWluaW5nIGFsbCBzdWNjZXNzZnVsIHJlc3VsdHMgaWYgYWxsIHJlc3VsdHMgZWl0aGVyXG4gKiBzdWNjZWVkZWQgb3IgcmV0dXJuZWQgZXJyb3IgZGV0YWlscyBsaXN0ZWQgaW4gYGlnbm9yZWAuICBJZiBhbnkgcmVzdWx0cyBmYWlsZWQgd2l0aCBkZXRhaWxzXG4gKiB0aGF0IGNhbm5vdCBiZSBpZ25vcmVkLCByZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGFuIGNvbmNhdGVuYXRlZCBzdW1tYXJ5IG9mIGFsbCBub24taWdub3JhYmxlXG4gKiBlcnJvciBtZXNzYWdlcy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcERldGFpbGVkUmVzdWx0czxULCBURD4ocmVzdWx0czogSXRlcmFibGU8RGV0YWlsZWRSZXN1bHQ8VCwgVEQ+PiwgaWdub3JlOiBURFtdKTogUmVzdWx0PFRbXT4ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbGVtZW50czogVFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaWdub3JlLmluY2x1ZGVzKHJlc3VsdC5kZXRhaWwpKSB7XG4gICAgICAgICAgICBlcnJvcnMucHVzaChyZXN1bHQubWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoZWxlbWVudHMpO1xufVxuXG4vKipcbiAqIEFnZ3JlZ2F0ZXMgc3VjY2Vzc2Z1bCByZXN1bHRzIGZyb20gYSBhIGNvbGxlY3Rpb24gb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0uXG4gKiBAcGFyYW0gcmVzdWx0cyAtIEFuIGBJdGVyYWJsZWAgb2Yge0BsaW5rIFJlc3VsdCB8IFJlc3VsdDxUPn0gZnJvbSB3aGljaCBzdWNjZXNzXG4gKiByZXN1bHRzIGFyZSB0byBiZSBhZ2dyZWdhdGVkLlxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYW4gYXJyYXkgb2YgYDxUPmAgaWYgYW55IHJlc3VsdHMgd2VyZSBzdWNjZXNzZnVsLiBJZlxuICogYWxsIHtAbGluayBSZXN1bHQgfCByZXN1bHRzfSBmYWlsZWQsIHJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBjb25jYXRlbmF0ZWRcbiAqIHN1bW1hcnkgb2YgYWxsIGVycm9yIG1lc3NhZ2VzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWFwU3VjY2VzczxUPihyZXN1bHRzOiBJdGVyYWJsZTxSZXN1bHQ8VD4+KTogUmVzdWx0PFRbXT4ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBlbGVtZW50czogVFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzKCkpIHtcbiAgICAgICAgICAgIGVsZW1lbnRzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVycm9ycy5wdXNoKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgoZWxlbWVudHMubGVuZ3RoID09PSAwKSAmJiAoZXJyb3JzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKGVsZW1lbnRzKTtcbn1cblxuLyoqXG4gKiBBZ2dyZWdhdGVzIGVycm9yIG1lc3NhZ2VzIGZyb20gYSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59LlxuICogQHBhcmFtIHJlc3VsdHMgLSBBbiBpdGVyYWJsZSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IGZvciB3aGljaFxuICogZXJyb3IgbWVzc2FnZXMgYXJlIGFnZ3JlZ2F0ZWQuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzIGNvbnNpc3Rpbmcgb2YgYWxsIGVycm9yIG1lc3NhZ2VzIHJldHVybmVkIGJ5XG4gKiB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gaW4gdGhlIHNvdXJjZSBjb2xsZWN0aW9uLiBJZ25vcmVzIHtAbGluayBTdWNjZXNzfVxuICogcmVzdWx0cyBhbmQgcmV0dXJucyBhbiBlbXB0eSBhcnJheSBpZiB0aGVyZSB3ZXJlIG5vIGVycm9ycy5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcEZhaWx1cmVzPFQ+KHJlc3VsdHM6IEl0ZXJhYmxlPFJlc3VsdDxUPj4pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgaWYgKHJlc3VsdC5pc0ZhaWx1cmUoKSkge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlcnJvcnM7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiBhbiBpdGVyYWJsZSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IHdlcmUgYWxsIHN1Y2Nlc3NmdWwuXG4gKiBAcGFyYW0gcmVzdWx0cyAtIFRoZSBjb2xsZWN0aW9uIG9mIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VD59IHRvIGJlIHRlc3RlZC5cbiAqIEByZXR1cm5zIFJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHRydWVgIGlmIGFsbCB7QGxpbmsgUmVzdWx0IHwgcmVzdWx0c30gYXJlIHN1Y2Nlc3NmdWwuXG4gKiBJZiBhbnkgYXJlIHVuc3VjY2Vzc2Z1bCwgcmV0dXJucyB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhIGNvbmNhdGVuYXRlZCBzdW1tYXJ5IHRoZSBlcnJvclxuICogbWVzc2FnZXMgZnJvbSBhbGwgZmFpbGVkIGVsZW1lbnRzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsU3VjY2VlZDxUPihyZXN1bHRzOiBJdGVyYWJsZTxSZXN1bHQ8dW5rbm93bj4+LCBzdWNjZXNzVmFsdWU6IFQpOiBSZXN1bHQ8VD4ge1xuICAgIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gICAgaWYgKHJlc3VsdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmb3IgKGNvbnN0IHJlc3VsdCBvZiByZXN1bHRzKSB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBmYWlsKGVycm9ycy5qb2luKCdcXG4nKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWNjZWVkKHN1Y2Nlc3NWYWx1ZSk7XG59XG5cbi8qKlxuICogU3RyaW5nLWtleWVkIHJlY29yZCBvZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMgdG8gYmUgcGFzc2VkIHRvIHtAbGluayBwb3B1bGF0ZU9iamVjdC4oOndpdGhPcHRpb25zKX0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkSW5pdGlhbGl6ZXJzPFQ+ID0geyBbIGtleSBpbiBrZXlvZiBUIF06IChzdGF0ZTogUGFydGlhbDxUPikgPT4gUmVzdWx0PFRba2V5XT4gfTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUge0BsaW5rIHBvcHVsYXRlT2JqZWN0Lig6d2l0aE9wdGlvbnMpfSBmdW5jdGlvbi5cbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb3B1bGF0ZU9iamVjdE9wdGlvbnM8VD4ge1xuICAgIC8qKlxuICAgICAqIElmIHByZXNlbnQsIHNwZWNpZmllcyB0aGUgb3JkZXIgaW4gd2hpY2ggcHJvcGVydHkgdmFsdWVzIHNob3VsZFxuICAgICAqIGJlIGV2YWx1YXRlZC4gIEFueSBrZXlzIG5vdCBsaXN0ZWQgYXJlIGV2YWx1YXRlZCBhZnRlciBhbGwgbGlzdGVkXG4gICAgICoga2V5cyBpbiBpbmRldGVybWluYXRlIG9yZGVyLiAgSWYgJ29yZGVyJyBpcyBub3QgcHJlc2VudCwga2V5c1xuICAgICAqIGFyZSBldmFsdWF0ZWQgaW4gaW5kZXRlcm1pbmF0ZSBvcmRlci5cbiAgICAgKi9cbiAgICBvcmRlcj86IChrZXlvZiBUKVtdO1xuXG4gICAgLyoqXG4gICAgICogU3BlY2lmeSBoYW5kbGluZyBvZiBgdW5kZWZpbmVkYCB2YWx1ZXMuICBCeSBkZWZhdWx0LCBzdWNjZXNzZnVsXG4gICAgICogYHVuZGVmaW5lZGAgcmVzdWx0cyBhcmUgd3JpdHRlbiB0byB0aGUgcmVzdWx0IG9iamVjdC4gIElmIHRoaXMgdmFsdWVcbiAgICAgKiBpcyBgdHJ1ZWAgdGhlbiBgdW5kZWZpbmVkYCByZXN1bHRzIGFyZSBzdXBwcmVzc2VkIGZvciBhbGwgcHJvcGVydGllcy5cbiAgICAgKiBJZiB0aGlzIHZhbHVlIGlzIGFuIGFycmF5IG9mIHByb3BlcnR5IGtleXMgdGhlbiBgdW5kZWZpbmVkYCByZXN1bHRzXG4gICAgICogYXJlIHN1cHByZXNzZWQgZm9yIHRob3NlIHByb3BlcnRpZXMgb25seS5cbiAgICAgKi9cbiAgICBzdXBwcmVzc1VuZGVmaW5lZD86IGJvb2xlYW4gfCAoa2V5b2YgVClbXTtcbn1cblxuLyoqXG4gKiBQb3B1bGF0ZXMgYW4gYW4gb2JqZWN0IGJhc2VkIG9uIGEgcHJvdG90eXBlIGZ1bGwgb2YgZmllbGQgaW5pdGlhbGl6ZXJzIHRoYXQgcmV0dXJuIHtAbGluayBSZXN1bHQgfCBSZXN1bHQ8VFtrZXldPn0uXG4gKiBSZXR1cm5zIHtAbGluayBTdWNjZXNzfSB3aXRoIHRoZSBwb3B1bGF0ZWQgb2JqZWN0IGlmIGFsbCBpbml0aWFsaXplcnMgc3VjY2VlZCwgb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYVxuICogY29uY2F0ZW5hdGVkIGxpc3Qgb2YgYWxsIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIGluaXRpYWxpemVycyAtIEFuIG9iamVjdCB3aXRoIHRoZSBzaGFwZSBvZiB0aGUgdGFyZ2V0IGJ1dCB3aXRoIGluaXRpYWxpemVyIGZ1bmN0aW9ucyBmb3JcbiAqIGVhY2ggcHJvcGVydHkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEFuIG9wdGlvbmFsIHtAbGluayBQb3B1bGF0ZU9iamVjdE9wdGlvbnMgfCBzZXQgb2Ygb3B0aW9uc30gd2hpY2hcbiAqIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2YgdGhpcyBjYWxsLlxuICogQHB1YmxpY1xuICoge0BsYWJlbCB3aXRoT3B0aW9uc31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlT2JqZWN0PFQ+KGluaXRpYWxpemVyczogRmllbGRJbml0aWFsaXplcnM8VD4sIG9wdGlvbnM/OiBQb3B1bGF0ZU9iamVjdE9wdGlvbnM8VD4pOiBSZXN1bHQ8VD47XG5cbi8qKlxuICogUG9wdWxhdGVzIGFuIGFuIG9iamVjdCBiYXNlZCBvbiBhIHByb3RvdHlwZSBmdWxsIG9mIGZpZWxkIGluaXRpYWxpemVycyB0aGF0IHJldHVybiB7QGxpbmsgUmVzdWx0IHwgUmVzdWx0PFRba2V5XT59LlxuICogUmV0dXJucyB7QGxpbmsgU3VjY2Vzc30gd2l0aCB0aGUgcG9wdWxhdGVkIG9iamVjdCBpZiBhbGwgaW5pdGlhbGl6ZXJzIHN1Y2NlZWQsIG9yIHtAbGluayBGYWlsdXJlfSB3aXRoIGFcbiAqIGNvbmNhdGVuYXRlZCBsaXN0IG9mIGFsbCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSBpbml0aWFsaXplcnMgLSBBbiBvYmplY3Qgd2l0aCB0aGUgc2hhcGUgb2YgdGhlIHRhcmdldCBidXQgd2l0aCBpbml0aWFsaXplciBmdW5jdGlvbnMgZm9yXG4gKiBlYWNoIHByb3BlcnR5LlxuICogQHBhcmFtIG9yZGVyIC0gT3B0aW9uYWwgb3JkZXIgaW4gd2hpY2gga2V5cyBzaG91bGQgYmUgd3JpdHRlbi5cbiAqIEBwdWJsaWNcbiAqIHtAbGFiZWwgd2l0aE9yZGVyfVxuICogQGRlcHJlY2F0ZWQgUGFzcyB7QGxpbmsgUG9wdWxhdGVPYmplY3RPcHRpb25zfSBpbnN0ZWFkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcG9wdWxhdGVPYmplY3Q8VD4oaW5pdGlhbGl6ZXJzOiBGaWVsZEluaXRpYWxpemVyczxUPiwgb3JkZXI6IChrZXlvZiBUKVtdKTogUmVzdWx0PFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHBvcHVsYXRlT2JqZWN0PFQ+KGluaXRpYWxpemVyczogRmllbGRJbml0aWFsaXplcnM8VD4sIG9wdGlvbnNPck9yZGVyPzogUG9wdWxhdGVPYmplY3RPcHRpb25zPFQ+IHwgKGtleW9mIFQpW10pOiBSZXN1bHQ8VD4ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFBvcHVsYXRlT2JqZWN0T3B0aW9uczxUPiA9IG9wdGlvbnNPck9yZGVyXG4gICAgICAgID8gQXJyYXkuaXNBcnJheShvcHRpb25zT3JPcmRlcikgPyB7IG9yZGVyOiBvcHRpb25zT3JPcmRlciB9IDogb3B0aW9uc09yT3JkZXJcbiAgICAgICAgOiB7fTtcbiAgICBjb25zdCBzdGF0ZSA9IHt9IGFzIHsgW2tleSBpbiBrZXlvZiBUXTogVFtrZXldIH07XG4gICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGtleXM6IChrZXlvZiBUKVtdID0gQXJyYXkuZnJvbShvcHRpb25zLm9yZGVyID8/IFtdKTtcbiAgICBjb25zdCBmb3VuZEtleXMgPSBuZXcgU2V0PGtleW9mIFQ+KG9wdGlvbnMub3JkZXIpO1xuXG4gICAgLy8gc3RhcnQgd2l0aCB0aGUgc3VwcGxpZWQgb3JkZXIgdGhlbiBhcHBlbmQgYW55dGhpbmcgZWxzZSB3ZSBmaW5kXG4gICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdGlhbGl6ZXJzKSB7XG4gICAgICAgIGlmICghZm91bmRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGZvdW5kS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGluaXRpYWxpemVyc1trZXldKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBpbml0aWFsaXplcnNba2V5XShzdGF0ZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucy5zdXBwcmVzc1VuZGVmaW5lZCA9PT0gdHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IEFycmF5LmlzQXJyYXkob3B0aW9ucy5zdXBwcmVzc1VuZGVmaW5lZCkgJiYgb3B0aW9ucy5zdXBwcmVzc1VuZGVmaW5lZC5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZVtrZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0Lm1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JzLnB1c2goYHBvcHVsYXRlT2JqZWN0OiBLZXkgJHtTdHJpbmcoa2V5KX0gaXMgcHJlc2VudCBidXQgaGFzIG5vIGluaXRpYWxpemVyYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGZhaWwoZXJyb3JzLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1Y2NlZWQoc3RhdGUgYXMgVCk7XG59XG4iXX0=
|