@mnaoumov/typescript-lib 2.0.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -0
- package/dist/lib/cjs/async-events.cjs +1 -1
- package/dist/lib/cjs/async-events.d.cts +12 -12
- package/dist/lib/cjs/async.cjs +4 -5
- package/dist/lib/cjs/async.d.cts +2 -2
- package/dist/lib/cjs/debug-controller.cjs +1 -1
- package/dist/lib/cjs/debug-controller.d.cts +4 -4
- package/dist/lib/cjs/debug-switches.cjs +1 -1
- package/dist/lib/cjs/debug-switches.d.cts +2 -2
- package/dist/lib/cjs/desktop-zip-extractor.cjs +1 -1
- package/dist/lib/cjs/desktop-zip-extractor.d.cts +2 -2
- package/dist/lib/cjs/disposable.cjs +1 -1
- package/dist/lib/cjs/disposable.d.cts +2 -2
- package/dist/lib/cjs/error.cjs +23 -5
- package/dist/lib/cjs/html-element.cjs +1 -1
- package/dist/lib/cjs/html-element.d.cts +3 -3
- package/dist/lib/cjs/object-utils.cjs +5 -5
- package/dist/lib/cjs/object-utils.d.cts +6 -6
- package/dist/lib/cjs/string.cjs +1 -1
- package/dist/lib/cjs/string.d.cts +6 -6
- package/dist/lib/cjs/transformers/transformer.cjs +1 -1
- package/dist/lib/cjs/type.cjs +1 -1
- package/dist/lib/cjs/type.d.cts +3 -3
- package/dist/lib/cjs/value-provider.cjs +1 -1
- package/dist/lib/cjs/value-provider.d.cts +1 -1
- package/dist/lib/esm/async-events.d.mts +12 -12
- package/dist/lib/esm/async-events.mjs +1 -1
- package/dist/lib/esm/async.d.mts +2 -2
- package/dist/lib/esm/async.mjs +5 -9
- package/dist/lib/esm/debug-controller.d.mts +4 -4
- package/dist/lib/esm/debug-switches.d.mts +2 -2
- package/dist/lib/esm/debug-switches.mjs +1 -1
- package/dist/lib/esm/desktop-zip-extractor.d.mts +2 -2
- package/dist/lib/esm/desktop-zip-extractor.mjs +1 -1
- package/dist/lib/esm/disposable.d.mts +2 -2
- package/dist/lib/esm/disposable.mjs +1 -1
- package/dist/lib/esm/error.mjs +23 -5
- package/dist/lib/esm/html-element.d.mts +3 -3
- package/dist/lib/esm/html-element.mjs +1 -1
- package/dist/lib/esm/object-utils.d.mts +6 -6
- package/dist/lib/esm/object-utils.mjs +5 -5
- package/dist/lib/esm/string.d.mts +6 -6
- package/dist/lib/esm/string.mjs +1 -1
- package/dist/lib/esm/transformers/transformer.mjs +1 -1
- package/dist/lib/esm/type.d.mts +3 -3
- package/dist/lib/esm/type.mjs +1 -1
- package/dist/lib/esm/value-provider.d.mts +1 -1
- package/dist/lib/esm/value-provider.mjs +1 -1
- package/package.json +18 -14
package/dist/lib/esm/async.mjs
CHANGED
|
@@ -29,10 +29,7 @@ import {
|
|
|
29
29
|
noopAsync
|
|
30
30
|
} from "./function.mjs";
|
|
31
31
|
import { normalizeOptionalProperties } from "./object-utils.mjs";
|
|
32
|
-
import {
|
|
33
|
-
assert,
|
|
34
|
-
assertNonNullable
|
|
35
|
-
} from "./type-guards.mjs";
|
|
32
|
+
import { assert } from "./type-guards.mjs";
|
|
36
33
|
async function addErrorHandler(asyncFunction, stackTrace) {
|
|
37
34
|
stackTrace ??= getStackTrace(1);
|
|
38
35
|
const wasScheduledWithinIgnoreContext = isAsyncErrorIgnoreContextActive();
|
|
@@ -86,14 +83,13 @@ async function asyncMap(array, callback) {
|
|
|
86
83
|
return await promiseAllSequentially(array.map(callback));
|
|
87
84
|
}
|
|
88
85
|
function convertAsyncToSync(asyncFunction, stackTrace) {
|
|
89
|
-
stackTrace
|
|
86
|
+
const outerStackTrace = stackTrace ?? getStackTrace(1);
|
|
90
87
|
return (...$arguments) => {
|
|
91
|
-
assertNonNullable(stackTrace);
|
|
92
88
|
const innerStackTrace = getStackTrace(1);
|
|
93
|
-
|
|
89
|
+
const callStackTrace = `${outerStackTrace}
|
|
94
90
|
at --- convertAsyncToSync --- (0)
|
|
95
91
|
${innerStackTrace}`;
|
|
96
|
-
invokeAsyncSafely(() => asyncFunction(...$arguments),
|
|
92
|
+
invokeAsyncSafely(() => asyncFunction(...$arguments), callStackTrace);
|
|
97
93
|
};
|
|
98
94
|
}
|
|
99
95
|
function convertSyncToAsync(syncFunction) {
|
|
@@ -447,4 +443,4 @@ export {
|
|
|
447
443
|
timeout,
|
|
448
444
|
toArray
|
|
449
445
|
};
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgR2VuZXJpY0FzeW5jRnVuY3Rpb24sXG4gIEdlbmVyaWNGdW5jdGlvbixcbiAgR2VuZXJpY1ZvaWRGdW5jdGlvblxufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuaW1wb3J0IHtcbiAgYWJvcnRTaWduYWxBbnksXG4gIGFib3J0U2lnbmFsTmV2ZXIsXG4gIGFib3J0U2lnbmFsVGltZW91dCxcbiAgd2FpdEZvckFib3J0XG59IGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5pbXBvcnQgeyBub3RpZnlBc3luY09wZXJhdGlvblN0YXJ0ZWQgfSBmcm9tICcuL2FzeW5jLW9wZXJhdGlvbi1ob29rLnRzJztcbmltcG9ydCB7IGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoIH0gZnJvbSAnLi9kZWJ1Zy1zd2l0Y2hlcy50cyc7XG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgQ3VzdG9tU3RhY2tUcmFjZUVycm9yLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBpc0FzeW5jRXJyb3JJZ25vcmVDb250ZXh0QWN0aXZlLFxuICBwcmludEVycm9yLFxuICBTaWxlbnRFcnJvclxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1xufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgYXNzZXJ0Tm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW52b2tlQXN5bmNTYWZlbHlBZnRlckRlbGF5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2UuXG4gICAqXG4gICAqIEBwYXJhbSBhYm9ydFNpZ25hbCAtIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgYXN5bmNGdW5jdGlvbjogKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzYWJsZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIGRlbGF5IGluIG1pbGxpc2Vjb25kcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDBgXG4gICAqL1xuICByZWFkb25seSBkZWxheUluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrVHJhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSB0eXBlIHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgYSB7QGxpbmsgUHJvbWlzZX0uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICovXG5leHBvcnQgdHlwZSBQcm9taXNlUmVzb2x2ZTxUPiA9IHVuZGVmaW5lZCBleHRlbmRzIFQgPyAodmFsdWU/OiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWRcbiAgOiAodmFsdWU6IFByb21pc2VMaWtlPFQ+IHwgVCkgPT4gdm9pZDtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgYWJvcnQgc2lnbmFsIHRvIGNhbmNlbCB0aGUgcmV0cnkgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogQSBkZWxheSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiByZXRyeSBhdHRlbXB0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDEwMGBcbiAgICovXG4gIHJlYWRvbmx5IHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZXRyeSB0aGUgZnVuY3Rpb24gb24gZXJyb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJldHJ5T25FcnJvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEEgbWF4aW11bSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBnaXZpbmcgdXAgb24gcmV0cnlpbmcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA1MDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXJyb3IgaGFuZGxlciB0byBhIHtAbGluayBQcm9taXNlfSB0aGF0IGNhdGNoZXMgYW55IGVycm9ycyBhbmQgZW1pdHMgYW4gYXN5bmMgZXJyb3IgZXZlbnQuXG4gKlxuICogQHBhcmFtIGFzeW5jRnVuY3Rpb24gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIHRvLlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGNvbXBsZXRlcyBvciBlbWl0cyBhc3luYyBlcnJvciBldmVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEVycm9ySGFuZGxlcihhc3luY0Z1bmN0aW9uOiAoKSA9PiBQcm9taXNlPHVua25vd24+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG4gIC8vIENhcHR1cmUgdGhlIGlnbm9yZSBjb250ZXh0IHN5bmNocm9ub3VzbHkgYXQgc2NoZWR1bGUgdGltZSwgc28gYSBkZWZlcnJlZCByZWplY3Rpb24gc2V0dGxpbmcgYWZ0ZXIgdGhlIHNjb3BlIGV4aXRzIGlzIHN0aWxsIGlnbm9yZWQuXG4gIGNvbnN0IHdhc1NjaGVkdWxlZFdpdGhpbklnbm9yZUNvbnRleHQgPSBpc0FzeW5jRXJyb3JJZ25vcmVDb250ZXh0QWN0aXZlKCk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYXN5bmNGdW5jdGlvbigpO1xuICB9IGNhdGNoIChhc3luY0Vycm9yKSB7XG4gICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcih7XG4gICAgICBjYXVzZTogYXN5bmNFcnJvcixcbiAgICAgIG1lc3NhZ2U6IEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgICAgIHN0YWNrVHJhY2VcbiAgICB9KTtcbiAgICBpZiAoaGFuZGxlU2lsZW50RXJyb3Iod3JhcHBlZEVycm9yKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbWl0QXN5bmNFcnJvckV2ZW50KHdyYXBwZWRFcnJvciwgd2FzU2NoZWR1bGVkV2l0aGluSWdub3JlQ29udGV4dCk7XG4gIH1cbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBrZWVwaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnJheSAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmlsdGVyPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPGJvb2xlYW4+KTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgYW5zOiBUW10gPSBbXTtcblxuICBjb25zdCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYXJyYXksIGluZGV4KSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbSA9IGFycmF5W2luZGV4XSBhcyBUO1xuICAgIGlmIChhd2FpdCBwcmVkaWNhdGUoaXRlbSwgaW5kZXgsIGFycmF5KSkge1xuICAgICAgYW5zLnB1c2goaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFucztcbn1cblxuLyoqXG4gKiBGaWx0ZXJzIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5IGluIHBsYWNlLCBrZWVwaW5nIG9ubHkgdGhlIGVsZW1lbnRzIHRoYXQgc2F0aXNmeSB0aGUgcHJvdmlkZWQgcHJlZGljYXRlIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnJheSAtIFRoZSBhcnJheSB0byBmaWx0ZXIuXG4gKiBAcGFyYW0gcHJlZGljYXRlIC0gVGhlIHByZWRpY2F0ZSBmdW5jdGlvbiB0byB0ZXN0IGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYXJyYXkgaXMgZmlsdGVyZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZpbHRlckluUGxhY2U8VD4oYXJyYXk6IFRbXSwgcHJlZGljYXRlOiAodmFsdWU6IFQsIGluZGV4OiBudW1iZXIsIGFycmF5OiBUW10pID0+IFByb21pc2FibGU8Ym9vbGVhbj4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICBsZXQgd3JpdGVJbmRleCA9IDA7XG4gIGZvciAobGV0IHJlYWRJbmRleCA9IDA7IHJlYWRJbmRleCA8IGxlbmd0aDsgcmVhZEluZGV4KyspIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYXJyYXksIHJlYWRJbmRleCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnQgPSBhcnJheVtyZWFkSW5kZXhdIGFzIFQ7XG4gICAgaWYgKGF3YWl0IHByZWRpY2F0ZShjdXJyZW50LCByZWFkSW5kZXgsIGFycmF5KSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gWWVzLCBpdCBpcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiwgYnV0IEkgZG9uJ3QgYW4gZWxlZ2FudCB3YXkgdG8gZml4IGl0LlxuICAgICAgYXJyYXlbd3JpdGVJbmRleCsrXSA9IGN1cnJlbnQ7XG4gICAgfVxuICB9XG4gIGFycmF5Lmxlbmd0aCA9IHdyaXRlSW5kZXg7XG59XG5cbi8qKlxuICogTWFwcyBvdmVyIGFuIGFycmF5IGFzeW5jaHJvbm91c2x5LCBhcHBseWluZyB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBlbGVtZW50LCBhbmQgdGhlbiBmbGF0dGVucyB0aGUgcmVzdWx0cyBpbnRvIGEgc2luZ2xlIGFycmF5LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBpbnB1dCBhcnJheS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIGluIHRoZSBvdXRwdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gbWFwIG92ZXIgYW5kIGZsYXR0ZW4uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYXBwbHkgdG8gZWFjaCBlbGVtZW50LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGEgZmxhdHRlbmVkIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jRmxhdE1hcDxULCBVPihhcnJheTogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFVbXT4pOiBQcm9taXNlPFVbXT4ge1xuICBjb25zdCBuZXN0ZWRSZXN1bHRzID0gYXdhaXQgYXN5bmNNYXAoYXJyYXksIGNhbGxiYWNrKTtcbiAgcmV0dXJuIG5lc3RlZFJlc3VsdHMuZmxhdCgpO1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFycmF5IC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY01hcDxULCBVPihhcnJheTogVFtdLCBjYWxsYmFjazogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPFU+KTogUHJvbWlzZTxVW10+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tYXJyYXktY2FsbGJhY2stcmVmZXJlbmNlIC0tIFBhc3NpbmcgYGNhbGxiYWNrYCBzdHJhaWdodCB0aHJvdWdoIGlzIHRoZSBjb250cmFjdDogaXQgaXMgZGVjbGFyZWQgYXMgYCh2YWx1ZSwgaW5kZXgsIGFycmF5KWAgc28gdGhhdCBpdCByZWNlaXZlcyBleGFjdGx5IHdoYXQgYEFycmF5I21hcGAgc3VwcGxpZXMuIFdyYXBwaW5nIGl0IHRvIHRha2Ugb25seSB0aGUgdmFsdWUgd291bGQgcXVpZXRseSBzdG9wIGZvcndhcmRpbmcgdGhlIG90aGVyIHR3by5cbiAgcmV0dXJuIGF3YWl0IHByb21pc2VBbGxTZXF1ZW50aWFsbHkoYXJyYXkubWFwKGNhbGxiYWNrKSk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGEgc3luY2hyb25vdXMgb25lIGJ5IGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgdGhlIFByb21pc2UgcmVqZWN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAcGFyYW0gYXN5bmNGdW5jdGlvbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBpbiBhIHN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRBc3luY1RvU3luYzxBcmd1bWVudHMgZXh0ZW5kcyB1bmtub3duW10+KGFzeW5jRnVuY3Rpb246IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3VtZW50cz4sIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiBHZW5lcmljVm9pZEZ1bmN0aW9uPEFyZ3VtZW50cz4ge1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICByZXR1cm4gKC4uLiRhcmd1bWVudHM6IEFyZ3VtZW50cyk6IHZvaWQgPT4ge1xuICAgIGFzc2VydE5vbk51bGxhYmxlKHN0YWNrVHJhY2UpO1xuICAgIGNvbnN0IGlubmVyU3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG4gICAgc3RhY2tUcmFjZSArPSBgXFxuICAgIGF0IC0tLSBjb252ZXJ0QXN5bmNUb1N5bmMgLS0tICgwKVxcbiR7aW5uZXJTdGFja1RyYWNlfWA7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gYXN5bmNGdW5jdGlvbiguLi4kYXJndW1lbnRzKSwgc3RhY2tUcmFjZSk7XG4gIH07XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhbiBhc3luY2hyb25vdXMgb25lIGJ5IHdyYXBwaW5nIGl0IGluIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gQXJndW1lbnRzIC0gVGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uIGFjY2VwdHMuXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZS5cbiAqIEBwYXJhbSBzeW5jRnVuY3Rpb24gLSBUaGUgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYW4gYXN5bmNocm9ub3VzIGludGVyZmFjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRTeW5jVG9Bc3luYzxBcmd1bWVudHMgZXh0ZW5kcyB1bmtub3duW10sIFJlc3VsdD4oc3luY0Z1bmN0aW9uOiBHZW5lcmljRnVuY3Rpb248QXJndW1lbnRzLCBSZXN1bHQ+KTogR2VuZXJpY0FzeW5jRnVuY3Rpb248QXJndW1lbnRzLCBSZXN1bHQ+IHtcbiAgcmV0dXJuIGFzeW5jICguLi4kYXJndW1lbnRzOiBBcmd1bWVudHMpOiBQcm9taXNlPFJlc3VsdD4gPT4ge1xuICAgIGF3YWl0IG5vb3BBc3luYygpO1xuICAgIHJldHVybiBzeW5jRnVuY3Rpb24oLi4uJGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8qKlxuICogSGFuZGxlcyBhIHNpbGVudCBlcnJvci5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gaGFuZGxlLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZXJyb3IgaXMgYSBzaWxlbnQgZXJyb3IuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL2NvbnNpc3RlbnQtYm9vbGVhbi1uYW1lIC0tIFRoZSBuYW1lIHN0YXRlcyB0aGUgYWN0aW9uOyB0aGUgYm9vbGVhbiBvbmx5IHJlcG9ydHMgd2hldGhlciB0aGUgZXJyb3Igd2FzIGhhbmRsZWQuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlU2lsZW50RXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgbGV0IGNhdXNlID0gZXJyb3I7XG4gIHdoaWxlICghKGNhdXNlIGluc3RhbmNlb2YgU2lsZW50RXJyb3IpKSB7XG4gICAgaWYgKCEoY2F1c2UgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjYXVzZSA9IGNhdXNlLmNhdXNlO1xuICB9XG5cbiAgZ2V0TGliRGVidWdnZXIoJ0FzeW5jOmhhbmRsZVNpbGVudEVycm9yJykoZXJyb3IpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogSWdub3JlcyBhbiBlcnJvciB0aGF0IGlzIHRocm93biBieSBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBBbHdheXMgYHVuZGVmaW5lZGAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZmFpbHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpZ25vcmVFcnJvcihwcm9taXNlOiBQcm9taXNlPHVua25vd24+LCBmYWxsYmFja1ZhbHVlPzogdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPjtcbi8qKlxuICogSW52b2tlcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gYW5kIHJldHVybnMgYSBmYWxsYmFjayB2YWx1ZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHRoZSBmYWxsYmFjayB2YWx1ZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpZ25vcmVFcnJvcjxUPihwcm9taXNlOiBQcm9taXNlPFQ+LCBmYWxsYmFja1ZhbHVlOiBUKTogUHJvbWlzZTxUPjtcbi8qKlxuICogSWdub3JlcyBhbiBlcnJvciB0aGF0IGlzIHRocm93biBieSBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gcHJvbWlzZSAtIFRoZSBwcm9taXNlIHRvIGlnbm9yZSB0aGUgZXJyb3Igb2YuXG4gKiBAcGFyYW0gZmFsbGJhY2tWYWx1ZSAtIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIG9yIHRoZSBmYWxsYmFjayB2YWx1ZSBpZiBhbiBlcnJvciBpcyB0aHJvd24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpZ25vcmVFcnJvcjxUPihwcm9taXNlOiBQcm9taXNlPFQ+LCBmYWxsYmFja1ZhbHVlPzogVCk6IFByb21pc2U8VCB8IHZvaWQ+IHtcbiAgY29uc3QgaWdub3JlRXJyb3JEZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzppZ25vcmVFcnJvcicpO1xuICBjb25zdCBzdGFja1RyYWNlID0gZ2V0U3RhY2tUcmFjZSgxKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcHJvbWlzZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZ25vcmVFcnJvckRlYnVnZ2VyKFxuICAgICAgJ0lnbm9yZWQgZXJyb3InLFxuICAgICAgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcih7XG4gICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgbWVzc2FnZTogJ0lnbm9yZWQgZXJyb3InLFxuICAgICAgICBzdGFja1RyYWNlXG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2VzIGEge0BsaW5rIFByb21pc2V9IGFuZCBzYWZlbHkgaGFuZGxlcyBhbnkgZXJyb3JzIGJ5IGNhdGNoaW5nIHRoZW0gYW5kIGVtaXR0aW5nIGFuIGFzeW5jIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0Z1bmN0aW9uIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBpbnZva2Ugc2FmZWx5LlxuICogQHBhcmFtIHN0YWNrVHJhY2UgLSBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jRnVuY3Rpb246ICgpID0+IFByb21pc2FibGU8dW5rbm93bj4sIHN0YWNrVHJhY2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgc3RhY2tUcmFjZSA/Pz0gZ2V0U3RhY2tUcmFjZSgxKTtcblxuICBsZXQgcmVzdWx0OiB1bmtub3duO1xuICB0cnkge1xuICAgIHJlc3VsdCA9IGFzeW5jRnVuY3Rpb24oKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1wcm9taXNlLXJlamVjdC1lcnJvcnMgLS0gUmUtcmVqZWN0aW5nIHRoZSBvcmlnaW5hbCBjYXVnaHQgZXJyb3IgYXMtaXMuXG4gICAgbm90aWZ5QXN5bmNPcGVyYXRpb25TdGFydGVkKGFkZEVycm9ySGFuZGxlcigoKSA9PiBQcm9taXNlLnJlamVjdChlcnJvciksIHN0YWNrVHJhY2UpKTtcbiAgfVxuICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgIG5vdGlmeUFzeW5jT3BlcmF0aW9uU3RhcnRlZChhZGRFcnJvckhhbmRsZXIoKCkgPT4gcmVzdWx0LCBzdGFja1RyYWNlKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZva2VzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBhZnRlciBhIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlQXN5bmNTYWZlbHlBZnRlckRlbGF5KHBhcmFtczogSW52b2tlQXN5bmNTYWZlbHlBZnRlckRlbGF5UGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhc3luY0Z1bmN0aW9uLFxuICAgIGRlbGF5SW5NaWxsaXNlY29uZHMgPSAwXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGFib3J0U2lnbmFsID0gcGFyYW1zLmFib3J0U2lnbmFsID8/IGFib3J0U2lnbmFsTmV2ZXIoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IHBhcmFtcy5zdGFja1RyYWNlID8/IGdldFN0YWNrVHJhY2UoMSk7XG4gIGludm9rZUFzeW5jU2FmZWx5KGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBzbGVlcCh7IGFib3J0U2lnbmFsLCBtaWxsaXNlY29uZHM6IGRlbGF5SW5NaWxsaXNlY29uZHMsIHNob3VsZFRocm93T25BYm9ydDogdHJ1ZSB9KTtcbiAgICBhd2FpdCBhc3luY0Z1bmN0aW9uKGFib3J0U2lnbmFsKTtcbiAgfSwgc3RhY2tUcmFjZSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZXMgYXN5bmMgZnVuY3Rpb25zIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gYXN5bmNGbnMgLSBUaGUgYXN5bmMgZnVuY3Rpb25zIHRvIGV4ZWN1dGUgc2VxdWVudGlhbGx5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBhc3luYyBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9taXNlQWxsQXN5bmNGbnNTZXF1ZW50aWFsbHk8VD4oYXN5bmNGbnM6ICgoKSA9PiBQcm9taXNhYmxlPFQ+KVtdKTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgcmVzdWx0czogVFtdID0gW107XG4gIGZvciAoY29uc3QgYXN5bmNGdW5jdGlvbiBvZiBhc3luY0Zucykge1xuICAgIHJlc3VsdHMucHVzaChhd2FpdCBhc3luY0Z1bmN0aW9uKCkpO1xuICB9XG4gIHJldHVybiByZXN1bHRzO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIHByb21pc2VzIHNlcXVlbnRpYWxseS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gcHJvbWlzZXMgLSBUaGUgcHJvbWlzZXMgdG8gZXhlY3V0ZSBzZXF1ZW50aWFsbHkuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIHByb21pc2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbWlzZUFsbFNlcXVlbnRpYWxseTxUPihwcm9taXNlczogUHJvbWlzYWJsZTxUPltdKTogUHJvbWlzZTxUW10+IHtcbiAgcmV0dXJuIGF3YWl0IHByb21pc2VBbGxBc3luY0Zuc1NlcXVlbnRpYWxseShwcm9taXNlcy5tYXAoKHByb21pc2UpID0+ICgpID0+IHByb21pc2UpKTtcbn1cblxuY29uc3QgdGVybWluYXRlUmV0cnlFcnJvcnMgPSBuZXcgV2Vha1NldDxFcnJvcj4oKTtcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcmV0cnlXaXRoVGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmV0cnlXaXRoVGltZW91dFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB0aW1lb3V0IGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoY29udGV4dDogVGltZW91dENvbnRleHQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25GdW5jdGlvbjogKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzYWJsZTxib29sZWFuPjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJldHJ5IG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSByZXRyeU9wdGlvbnM/OiBSZXRyeU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tUcmFjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgcnVuV2l0aFRpbWVvdXR9LlxuICpcbiAqIEB0eXBlUGFyYW0gUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgb3BlcmF0aW9uIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bldpdGhUaW1lb3V0UGFyYW1zPFJlc3VsdD4ge1xuICAvKipcbiAgICogVGhlIGNvbnRleHQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dD86IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgdGhlIHRpbWVvdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIHRpbWVvdXQgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IG9uVGltZW91dD86IChjb250ZXh0OiBUaW1lb3V0Q29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGlvbiBmdW5jdGlvbiB0byBleGVjdXRlLlxuICAgKlxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25GdW5jdGlvbjogKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCkgPT4gUHJvbWlzYWJsZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJydgXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrVHJhY2U/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgc2xlZXB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNsZWVwUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBtaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25BYm9ydD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogQ29udGV4dCBwcm92aWRlZCB0byB0aGUgdGltZW91dCBoYW5kbGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVvdXRDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBpbiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIG9wZXJhdGlvbiBzdGFydGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgb3BlcmF0aW9uIGNvbXBsZXRlcy5cbiAgICovXG4gIG9uT3BlcmF0aW9uQ29tcGxldGVkOiAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHZvaWQ7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGVybWluYXRlcyB0aGUgb3BlcmF0aW9uIHRoYXQgdGltZWQgb3V0LlxuICAgKi9cbiAgdGVybWluYXRlT3BlcmF0aW9uOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB0aW1lb3V0fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBhYm9ydCBzaWduYWwgdG8gbGlzdGVuIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbDtcblxuICAvKipcbiAgICogV2hldGhlciB0byB0aHJvdyBhbiBlcnJvciBpZiB0aGUgYWJvcnQgc2lnbmFsIGlzIGFib3J0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25BYm9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lb3V0IHBlcmlvZCBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBDaGFpbnMgYSBwcm9taXNlIHdpdGggYW5vdGhlciBwcm9taXNlLlxuICpcbiAqIEBwYXJhbSBjaGFpblByb21pc2UgLSBSZXByZXNlbnRzIHRoZSBjaGFpbmVkIHByb21pc2UuXG4gKiBAcGFyYW0gcHJvbWlzYWJsZUZ1bmN0aW9uIC0gVGhlIGZ1bmN0aW9uIHRvIGNoYWluLlxuICogQHJldHVybnMgQ2hhaW5lZCBwcm9taXNlIG9yIGBudWxsYCBpZiBubyBhc3luYyBsb2dpYyBpcyBjaGFpbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW4oY2hhaW5Qcm9taXNlOiBudWxsIHwgUHJvbWlzZTx2b2lkPiwgcHJvbWlzYWJsZUZ1bmN0aW9uOiAoKSA9PiBudWxsIHwgUHJvbWlzYWJsZTx2b2lkPik6IG51bGwgfCBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IG5leHRDaGFpblByb21pc2UgPSBjaGFpblByb21pc2U7XG4gIGlmIChjaGFpblByb21pc2UpIHtcbiAgICBuZXh0Q2hhaW5Qcm9taXNlID0gY2hhaW5Qcm9taXNlLnRoZW4oKCkgPT4gcHJvbWlzYWJsZUZ1bmN0aW9uKCkgPz8gdW5kZWZpbmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBwcm9taXNhYmxlID0gcHJvbWlzYWJsZUZ1bmN0aW9uKCk7XG4gICAgaWYgKHByb21pc2FibGUpIHtcbiAgICAgIG5leHRDaGFpblByb21pc2UgPSBwcm9taXNhYmxlIGluc3RhbmNlb2YgUHJvbWlzZSA/IHByb21pc2FibGUgYXMgUHJvbWlzZTx2b2lkPiA6IFByb21pc2UucmVzb2x2ZShwcm9taXNhYmxlKTtcbiAgICB9XG4gIH1cblxuICBuZXh0Q2hhaW5Qcm9taXNlPy5jYXRjaChub29wKTtcbiAgcmV0dXJuIG5leHRDaGFpblByb21pc2U7XG59XG5cbi8qKlxuICogR2V0cyB3aGV0aGVyIGEge0BsaW5rIHJ1bldpdGhUaW1lb3V0fSBjYWxsIHdpdGhvdXQgaXRzIG93biBgb25UaW1lb3V0YCB0ZXJtaW5hdGVzIHRoZSBvcGVyYXRpb24gd2hlbiBpdCB0aW1lcyBvdXQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBnZXRUZXJtaW5hdGVPblRpbWVvdXREZWJ1Z1N3aXRjaH1gKCkuaXNFbmFibGVkKClgLlxuICpcbiAqIEByZXR1cm5zIGB0cnVlYCAodGhlIGRlZmF1bHQpIGlmIGEgdGltZWQtb3V0IG9wZXJhdGlvbiBpcyB0ZXJtaW5hdGVkLCBgZmFsc2VgIGlmIGl0IGlzIGxlZnQgcnVubmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGVybWluYXRpb25PblRpbWVvdXRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gZ2V0VGVybWluYXRlT25UaW1lb3V0RGVidWdTd2l0Y2goKS5pc0VuYWJsZWQoKTtcbn1cblxuLyoqXG4gKiBNYXJrcyBhbiBlcnJvciB0byB0ZXJtaW5hdGUgcmV0cnkgbG9naWMuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIG1hcmsgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFya3NBc1Rlcm1pbmF0ZVJldHJ5KGVycm9yOiBFcnJvcik6IHZvaWQge1xuICB0ZXJtaW5hdGVSZXRyeUVycm9ycy5hZGQoZXJyb3IpO1xufVxuXG4vKipcbiAqIEFuIGFzeW5jIGZ1bmN0aW9uIHRoYXQgbmV2ZXIgZW5kcy5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IG5ldmVyIHJlc29sdmVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmV2ZXJFbmRzKCk6IFByb21pc2U8bmV2ZXI+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKCkgPT4ge1xuICAgIG5vb3AoKTtcbiAgfSk7XG4gIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZDsgdGhlIGF3YWl0IGFib3ZlIG5ldmVyIHJlc29sdmVzLiAqL1xuICBhc3NlcnQoZmFsc2UsICdTaG91bGQgbmV2ZXIgaGFwcGVuJyk7XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCB0aWNrLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgdGljayBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBuZXh0VGlja0FzeW5jKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIHRvIG5hdGl2ZSBwcm9taXNhYmxlLCBjb252ZXJ0aW5nIHtAbGluayBQcm9taXNlTGlrZX0gKGFrYSBUaGVuYWJsZSkgdG8gYSBuYXRpdmUge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqIEBwYXJhbSBwcm9taXNhYmxlIC0gVGhlIHByb21pc2FibGUgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIHZhbHVlIGl0c2VsZiBvciBhIG5hdGl2ZSB7QGxpbmsgUHJvbWlzZX0gaWYgdGhlIHZhbHVlIGlzIGEge0BsaW5rIFByb21pc2VMaWtlfS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb21pc2FibGU8VD4ocHJvbWlzYWJsZTogUHJvbWlzYWJsZTxUPik6IFByb21pc2U8VD4gfCBUIHtcbiAgaWYgKCFwcm9taXNhYmxlKSB7XG4gICAgcmV0dXJuIHByb21pc2FibGU7XG4gIH1cblxuICBpZiAocHJvbWlzYWJsZSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICByZXR1cm4gcHJvbWlzYWJsZSBhcyBQcm9taXNlPFQ+O1xuICB9XG5cbiAgcmV0dXJuIChwcm9taXNhYmxlIGFzIFBhcnRpYWw8UHJvbWlzZUxpa2U8VD4+KS50aGVuID8gUHJvbWlzZS5yZXNvbHZlKHByb21pc2FibGUpIDogKHByb21pc2FibGUgYXMgVCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2suXG4gKlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbmV4dCBxdWV1ZSBtaWNyb3Rhc2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcXVldWVNaWNyb3Rhc2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lLlxuICpcbiAqIEBwYXJhbSBmYWxsYmFja1RpbWVvdXRJbk1pbGxpc2Vjb25kcyAtIFRoZSBmYWxsYmFjayB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byByZXNvbHZlIHRoZSBwcm9taXNlIGlmIGByZXF1ZXN0QW5pbWF0aW9uRnJhbWVgIGRvZXMgbm90IGZpcmUgKGUuZy4gdGhlIHdpbmRvdyBpcyBub3QgYWN0aXZlKS5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRzIHRvIGAxMDBgIG1pbGxpc2Vjb25kcy4gVXNlIGAwYCB0byBkaXNhYmxlIHRoZSBmYWxsYmFjay5cbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgcmVxdWVzdCBhbmltYXRpb24gZnJhbWUgaXMgYXZhaWxhYmxlIChvciB3aGVuIHRoZSBmYWxsYmFjayB0aW1lIGlzIHJlYWNoZWQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmMoZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmNQcm9taXNlID0gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgREVGQVVMVF9GQUxMQkFDS19USU1FT1VUX0lOX01JTExJU0VDT05EUyA9IDEwMDtcbiAgZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHMgPz89IERFRkFVTFRfRkFMTEJBQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG5cbiAgcmV0dXJuIFByb21pc2UucmFjZShbcmVxdWVzdEFuaW1hdGlvbkZyYW1lQXN5bmNQcm9taXNlLCBmYWxsYmFja1RpbWVvdXRJbk1pbGxpc2Vjb25kcyA+IDAgPyBzbGVlcCh7IG1pbGxpc2Vjb25kczogZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSkgOiBuZXZlckVuZHMoKV0pO1xufVxuXG4vKipcbiAqIFJldHJpZXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHVudGlsIGl0IHJldHVybnMgYHRydWVgIG9yIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZ1bmN0aW9uIHJldHVybnMgYHRydWVgIG9yIHJlamVjdHMgd2hlbiB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cnlXaXRoVGltZW91dChwYXJhbXM6IFJldHJ5V2l0aFRpbWVvdXRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyID0gZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJldHJ5V2l0aFRpbWVvdXQnKTtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IHBhcmFtcy5zdGFja1RyYWNlID8/IGdldFN0YWNrVHJhY2UoMSk7XG4gIGNvbnN0IERFRkFVTFRfUkVUUllfT1BUSU9OUyA9IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWFnaWMtbnVtYmVycyAtLSBFeHRyYWN0aW5nIG1hZ2ljIG51bWJlciBhcyBhIGNvbnN0YW50IHdvdWxkIGJlIHJlcGV0aXRpdmUsIGFzIHRoZSB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBhbmQgaXRzIG5hbWUgd291bGQgYmUgdGhlIHNhbWUgYXMgdGhlIHByb3BlcnR5LlxuICAgIHJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kczogMTAwLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogZmFsc2UsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHM6IDUwMDBcbiAgfTtcbiAgY29uc3QgZnVsbE9wdGlvbnMgPSB7IC4uLkRFRkFVTFRfUkVUUllfT1BUSU9OUywgLi4ucGFyYW1zLnJldHJ5T3B0aW9ucyB9O1xuICBmdWxsT3B0aW9ucy5hYm9ydFNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKTtcblxuICBhd2FpdCBydW5XaXRoVGltZW91dChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8UnVuV2l0aFRpbWVvdXRQYXJhbXM8dm9pZD4+KHtcbiAgICBjb250ZXh0OiB7IG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLCByZXRyeUZ1bmN0aW9uOiBwYXJhbXMub3BlcmF0aW9uRnVuY3Rpb24gfSxcbiAgICBvblRpbWVvdXQ6IHBhcmFtcy5vblRpbWVvdXQsXG4gICAgYXN5bmMgb3BlcmF0aW9uRnVuY3Rpb24oYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBjb25zdCBjb21iaW5lZEFib3J0U2lnbmFsID0gYWJvcnRTaWduYWxBbnkoZnVsbE9wdGlvbnMuYWJvcnRTaWduYWwsIGFib3J0U2lnbmFsKTtcbiAgICAgIGNvbWJpbmVkQWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGxldCBhdHRlbXB0ID0gMDtcbiAgICAgIHdoaWxlICghY29tYmluZWRBYm9ydFNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgIGF0dGVtcHQrKztcbiAgICAgICAgbGV0IGlzU3VjY2VzczogYm9vbGVhbjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBhd2FpdCBwYXJhbXMub3BlcmF0aW9uRnVuY3Rpb24oY29tYmluZWRBYm9ydFNpZ25hbCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gSXQgbWlnaHQgY2hhbmdlZCBpbnNpZGUgYGZuKClgLiBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gICAgICAgICAgaWYgKGNvbWJpbmVkQWJvcnRTaWduYWwuYWJvcnRlZCB8fCAhZnVsbE9wdGlvbnMuc2hvdWxkUmV0cnlPbkVycm9yIHx8IHRlcm1pbmF0ZVJldHJ5RXJyb3JzLmhhcyhlcnJvciBhcyBFcnJvcikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdyZXRyeVdpdGhUaW1lb3V0IGZhaWxlZCcsXG4gICAgICAgICAgICAgIHN0YWNrVHJhY2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwcmludEVycm9yKGVycm9yKTtcbiAgICAgICAgICBpc1N1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNTdWNjZXNzKSB7XG4gICAgICAgICAgcHJpbnRXaXRoU3RhY2tUcmFjZSh7XG4gICAgICAgICAgICAkYXJndW1lbnRzOiBbe1xuICAgICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbjogcGFyYW1zLm9wZXJhdGlvbkZ1bmN0aW9uLFxuICAgICAgICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBkZWJ1Z2dlckluc3RhbmNlOiByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIsXG4gICAgICAgICAgICBtZXNzYWdlOiBgUmV0cnkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhZnRlciAke1N0cmluZyhhdHRlbXB0KX0gYXR0ZW1wdHNgLFxuICAgICAgICAgICAgc3RhY2tUcmFjZVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaW50V2l0aFN0YWNrVHJhY2Uoe1xuICAgICAgICAgICRhcmd1bWVudHM6IFt7XG4gICAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbjogcGFyYW1zLm9wZXJhdGlvbkZ1bmN0aW9uLFxuICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJydcbiAgICAgICAgICB9XSxcbiAgICAgICAgICBkZWJ1Z2dlckluc3RhbmNlOiByZXRyeVdpdGhUaW1lb3V0RGVidWdnZXIsXG4gICAgICAgICAgbWVzc2FnZTogYFJldHJ5IGF0dGVtcHQgJHtTdHJpbmcoYXR0ZW1wdCl9IGNvbXBsZXRlZCB1bnN1Y2Nlc3NmdWxseS4gVHJ5aW5nIGFnYWluIGluICR7U3RyaW5nKGZ1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcyl9IG1pbGxpc2Vjb25kc2AsXG4gICAgICAgICAgc3RhY2tUcmFjZVxuICAgICAgICB9KTtcblxuICAgICAgICBhd2FpdCBzbGVlcCh7IGFib3J0U2lnbmFsLCBtaWxsaXNlY29uZHM6IGZ1bGxPcHRpb25zLnJldHJ5RGVsYXlJbk1pbGxpc2Vjb25kcyB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgIHN0YWNrVHJhY2UsXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiBmdWxsT3B0aW9ucy50aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSkpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gd2l0aCBhIHRpbWVvdXQuIElmIHRoZSBmdW5jdGlvbiBkb2VzIG5vdCBjb21wbGV0ZSB3aXRoaW4gdGhlIHNwZWNpZmllZCB0aW1lLCBpdCBpcyBjb25zaWRlcmVkIHRvIGhhdmUgdGltZWQgb3V0LlxuICpcbiAqIFdpdGhvdXQgYW4gYG9uVGltZW91dGAsIGEgdGltZWQtb3V0IGZ1bmN0aW9uIGlzIHRlcm1pbmF0ZWQsIHVubGVzcyB0aGUge0BsaW5rIGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNofSBkZWJ1ZyBzd2l0Y2ggaXMgb2ZmLFxuICogaW4gd2hpY2ggY2FzZSBpdCBpcyBhbGxvd2VkIHRvIHJ1biBpbmRlZmluaXRlbHkuXG4gKlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgcmVzdWx0IGZyb20gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciByZWplY3RzIGlmIGl0IHRpbWVzIG91dC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhUaW1lb3V0PFJlc3VsdD4ocGFyYW1zOiBSdW5XaXRoVGltZW91dFBhcmFtczxSZXN1bHQ+KTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IHBhcmFtcy5zdGFja1RyYWNlID8/IGdldFN0YWNrVHJhY2UoMSk7XG4gIGNvbnN0IHN0YXJ0VGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuXG4gIGNvbnN0IHJ1bkFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgdGltZW91dEFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICBsZXQgcmVzdWx0OiBudWxsIHwgUmVzdWx0ID0gbnVsbDtcbiAgbGV0IGhhc1Jlc3VsdCA9IGZhbHNlO1xuICBsZXQgaXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgY29uc3QgcnVuV2l0aFRpbWVvdXREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzpydW5XaXRoVGltZW91dCcpO1xuICBjb25zdCBvblRpbWVvdXQgPSBwYXJhbXMub25UaW1lb3V0ID8/IGRlZmF1bHRPblRpbWVvdXQ7XG5cbiAgYXdhaXQgUHJvbWlzZS5yYWNlKFtydW4oKSwgaW5uZXJUaW1lb3V0KCldKTtcbiAgLy8gVGhlIHJlc3VsdCBpcyBvbmx5IHZhbGlkIGlmIHRoZSBydW4gZmluaXNoZWQgb24gaXRzIG93bi4gV2hlbiB0aGUgdGltZW91dCB0ZXJtaW5hdGVkIGl0LCB0aGVcbiAgLy8gb3BlcmF0aW9uIG1pZ2h0IHN0aWxsIHJlc29sdmUgYWZ0ZXJ3YXJkcyAoZS5nLiBhIHJldHJ5IGxvb3AgdGhhdCBleGl0cyBvbiBhYm9ydCksIGJ1dCB0aGF0IHZhbHVlXG4gIC8vIGlzIHBhc3QgdGhlIGRlYWRsaW5lIGFuZCBtdXN0IGJlIHRyZWF0ZWQgYXMgYSBmYWlsdXJlLCBub3QgYSBzdWNjZXNzLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBCb3RoIG1pZ2h0IGNoYW5nZSBpbnNpZGUgYHJ1bigpYC9gaW5uZXJUaW1lb3V0KClgLiBFU0xpbnQgbWlzdGFrZW5seSBkb2VzIG5vdCByZWNvZ25pemUgaXQuXG4gIGlmIChoYXNSZXN1bHQgJiYgIXJ1bkFib3J0Q29udHJvbGxlci5zaWduYWwuYWJvcnRlZCkge1xuICAgIHJldHVybiByZXN1bHQgYXMgUmVzdWx0O1xuICB9XG5cbiAgdGhyb3cgbmV3IEN1c3RvbVN0YWNrVHJhY2VFcnJvcih7XG4gICAgY2F1c2U6IHJ1bkFib3J0Q29udHJvbGxlci5zaWduYWwucmVhc29uLFxuICAgIG1lc3NhZ2U6ICdSdW4gd2l0aCB0aW1lb3V0IGZhaWxlZCcsXG4gICAgc3RhY2tUcmFjZVxuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHBhcmFtcy5vcGVyYXRpb25GdW5jdGlvbihydW5BYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gTWF0aC50cnVuYyhwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgICBwcmludFdpdGhTdGFja1RyYWNlKHtcbiAgICAgICAgJGFyZ3VtZW50czogW3tcbiAgICAgICAgICBjb250ZXh0OiBwYXJhbXMuY29udGV4dCxcbiAgICAgICAgICBvcGVyYXRpb25GdW5jdGlvbjogcGFyYW1zLm9wZXJhdGlvbkZ1bmN0aW9uLFxuICAgICAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnXG4gICAgICAgIH1dLFxuICAgICAgICBkZWJ1Z2dlckluc3RhbmNlOiBydW5XaXRoVGltZW91dERlYnVnZ2VyLFxuICAgICAgICBtZXNzYWdlOiBgRXhlY3V0aW9uIHRpbWU6ICR7U3RyaW5nKGR1cmF0aW9uKX0gbWlsbGlzZWNvbmRzYCxcbiAgICAgICAgc3RhY2tUcmFjZVxuICAgICAgfSk7XG4gICAgICBoYXNSZXN1bHQgPSB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBydW5BYm9ydENvbnRyb2xsZXIuYWJvcnQoZXJyb3IpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICB0aW1lb3V0QWJvcnRDb250cm9sbGVyLmFib3J0KG5ldyBFcnJvcignQ29tcGxldGVkJykpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGlubmVyVGltZW91dCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBzbGVlcCh7IGFib3J0U2lnbmFsOiB0aW1lb3V0QWJvcnRDb250cm9sbGVyLnNpZ25hbCwgbWlsbGlzZWNvbmRzOiBwYXJhbXMudGltZW91dEluTWlsbGlzZWNvbmRzIH0pO1xuXG4gICAgaWYgKGlzQ29tcGxldGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGR1cmF0aW9uID0gTWF0aC50cnVuYyhwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0VGltZSk7XG4gICAgcHJpbnRXaXRoU3RhY2tUcmFjZSh7XG4gICAgICAkYXJndW1lbnRzOiBbe1xuICAgICAgICBjb250ZXh0OiBwYXJhbXMuY29udGV4dCxcbiAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb246IHBhcmFtcy5vcGVyYXRpb25GdW5jdGlvbixcbiAgICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJydcbiAgICAgIH1dLFxuICAgICAgZGVidWdnZXJJbnN0YW5jZTogcnVuV2l0aFRpbWVvdXREZWJ1Z2dlcixcbiAgICAgIG1lc3NhZ2U6IGBUaW1lZCBvdXQgYWZ0ZXIgJHtTdHJpbmcoZHVyYXRpb24pfSBtaWxsaXNlY29uZHNgLFxuICAgICAgc3RhY2tUcmFjZVxuICAgIH0pO1xuXG4gICAgY29uc3QgdGltZW91dENvbnRleHQ6IFRpbWVvdXRDb250ZXh0ID0gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFRpbWVvdXRDb250ZXh0Pih7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIG9uT3BlcmF0aW9uQ29tcGxldGVkKGNhbGxiYWNrKSB7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgY2FsbGJhY2spO1xuICAgICAgfSxcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnLFxuICAgICAgdGVybWluYXRlT3BlcmF0aW9uKCkge1xuICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgVGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKGR1cmF0aW9uKX0gbWlsbGlzZWNvbmRzYCk7XG4gICAgICAgIHJ1bkFib3J0Q29udHJvbGxlci5hYm9ydChlcnJvcik7XG4gICAgICAgIHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuYWJvcnQoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgb25UaW1lb3V0KHRpbWVvdXRDb250ZXh0KTtcbiAgICBhd2FpdCB3YWl0Rm9yQWJvcnQodGltZW91dEFib3J0Q29udHJvbGxlci5zaWduYWwpO1xuICB9XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCBzZXQgaW1tZWRpYXRlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgc2V0IGltbWVkaWF0ZSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRJbW1lZGlhdGVBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogU2V0cyB3aGV0aGVyIGEge0BsaW5rIHJ1bldpdGhUaW1lb3V0fSBjYWxsIHdpdGhvdXQgaXRzIG93biBgb25UaW1lb3V0YCB0ZXJtaW5hdGVzIHRoZSBvcGVyYXRpb24gd2hlbiBpdCB0aW1lcyBvdXQuXG4gKlxuICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBnZXRUZXJtaW5hdGVPblRpbWVvdXREZWJ1Z1N3aXRjaH1gKCkuc2V0RW5hYmxlZChpc0VuYWJsZWQpYC5cbiAqXG4gKiBAcGFyYW0gaXNFbmFibGVkIC0gYHRydWVgIHRvIHRlcm1pbmF0ZSBhIHRpbWVkLW91dCBvcGVyYXRpb24sIGBmYWxzZWAgdG8gbGVhdmUgaXQgcnVubmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRlcm1pbmF0aW9uT25UaW1lb3V0RW5hYmxlZChpc0VuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgZ2V0VGVybWluYXRlT25UaW1lb3V0RGVidWdTd2l0Y2goKS5zZXRFbmFibGVkKGlzRW5hYmxlZCk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gZGVsYXkgLSBUaGUgdGltZSB0byB3YWl0IGluIG1pbGxpc2Vjb25kcy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNldFRpbWVvdXRBc3luYyhkZWxheT86IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHdpbmRvdy5zZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcbiAgfSk7XG59XG5cbi8qKlxuICogRGVsYXlzIGV4ZWN1dGlvbiBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBkZWxheS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKHBhcmFtczogU2xlZXBQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIG1pbGxpc2Vjb25kcyxcbiAgICBzaG91bGRUaHJvd09uQWJvcnRcbiAgfSA9IHBhcmFtcztcbiAgYXdhaXQgd2FpdEZvckFib3J0KGFib3J0U2lnbmFsQW55KGFib3J0U2lnbmFsLCBhYm9ydFNpZ25hbFRpbWVvdXQobWlsbGlzZWNvbmRzKSkpO1xuICBpZiAoc2hvdWxkVGhyb3dPbkFib3J0KSB7XG4gICAgYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVqZWN0cyBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgcGVyaW9kLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBhbHdheXMgcmVqZWN0cyB3aXRoIGEgdGltZW91dCBlcnJvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRpbWVvdXQocGFyYW1zOiBUaW1lb3V0UGFyYW1zKTogUHJvbWlzZTxuZXZlcj4ge1xuICBjb25zdCB7XG4gICAgYWJvcnRTaWduYWwsXG4gICAgc2hvdWxkVGhyb3dPbkFib3J0LFxuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kc1xuICB9ID0gcGFyYW1zO1xuICBhd2FpdCBzbGVlcChub3JtYWxpemVPcHRpb25hbFByb3BlcnRpZXM8U2xlZXBQYXJhbXM+KHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBtaWxsaXNlY29uZHM6IHRpbWVvdXRJbk1pbGxpc2Vjb25kcyxcbiAgICBzaG91bGRUaHJvd09uQWJvcnRcbiAgfSkpO1xuICB0aHJvdyBuZXcgRXJyb3IoYFRpbWVkIG91dCBpbiAke1N0cmluZyh0aW1lb3V0SW5NaWxsaXNlY29uZHMpfSBtaWxsaXNlY29uZHNgKTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gYW4gYXJyYXkgYnkgY29uc3VtaW5nIGFsbCBpdHMgZWxlbWVudHMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgcHJvZHVjZWQgYnkgdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqIEBwYXJhbSBpdGVyIC0gVGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvciB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIGFsbCB0aGUgZWxlbWVudHMgaW4gdGhlIEFzeW5jSXRlcmFibGVJdGVyYXRvci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvQXJyYXk8VD4oaXRlcjogQXN5bmNJdGVyYWJsZUl0ZXJhdG9yPFQ+KTogUHJvbWlzZTxUW10+IHtcbiAgY29uc3QgYXJyYXk6IFRbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGl0ZW0gb2YgaXRlcikge1xuICAgIGFycmF5LnB1c2goaXRlbSk7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBkZWZhdWx0T25UaW1lb3V0KGNvbnRleHQ6IFRpbWVvdXRDb250ZXh0KTogdm9pZCB7XG4gIGlmIChnZXRUZXJtaW5hdGVPblRpbWVvdXREZWJ1Z1N3aXRjaCgpLmlzRW5hYmxlZCgpKSB7XG4gICAgY29udGV4dC50ZXJtaW5hdGVPcGVyYXRpb24oKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cnVuV2l0aFRpbWVvdXQnKShcbiAgICBgVGltZW91dCB0ZXJtaW5hdGlvbiBpcyBzd2l0Y2hlZCBvZmYsIHNvIHRoZSBvcGVyYXRpb24gJyR7Y29udGV4dC5vcGVyYXRpb25OYW1lfScga2VlcHMgcnVubmluZyBhZnRlciAke1N0cmluZyhjb250ZXh0LmR1cmF0aW9uKX0gbWlsbGlzZWNvbmRzYFxuICApO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFjQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyx3Q0FBd0M7QUFDakQ7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1DQUFtQztBQUM1QztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQTZFUCxlQUFzQixnQkFBZ0IsZUFBdUMsWUFBb0M7QUFDL0csaUJBQWUsY0FBYyxDQUFDO0FBRTlCLFFBQU0sa0NBQWtDLGdDQUFnQztBQUN4RSxNQUFJO0FBQ0YsVUFBTSxjQUFjO0FBQUEsRUFDdEIsU0FBUyxZQUFZO0FBQ25CLFVBQU0sZUFBZSxJQUFJLHNCQUFzQjtBQUFBLE1BQzdDLE9BQU87QUFBQSxNQUNQLFNBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDO0FBQ0QsUUFBSSxrQkFBa0IsWUFBWSxHQUFHO0FBQ25DO0FBQUEsSUFDRjtBQUNBLHdCQUFvQixjQUFjLCtCQUErQjtBQUFBLEVBQ25FO0FBQ0Y7QUFVQSxlQUFzQixZQUFlLE9BQVksV0FBdUY7QUFDdEksUUFBTSxNQUFXLENBQUM7QUFFbEIsUUFBTSxTQUFTLE1BQU07QUFDckIsV0FBUyxRQUFRLEdBQUcsUUFBUSxRQUFRLFNBQVM7QUFDM0MsUUFBSSxDQUFDLE9BQU8sT0FBTyxPQUFPLEtBQUssR0FBRztBQUNoQztBQUFBLElBQ0Y7QUFFQSxVQUFNLE9BQU8s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
|
|
446
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FzeW5jLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHtcbiAgR2VuZXJpY0FzeW5jRnVuY3Rpb24sXG4gIEdlbmVyaWNGdW5jdGlvbixcbiAgR2VuZXJpY1ZvaWRGdW5jdGlvblxufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcblxuaW1wb3J0IHtcbiAgYWJvcnRTaWduYWxBbnksXG4gIGFib3J0U2lnbmFsTmV2ZXIsXG4gIGFib3J0U2lnbmFsVGltZW91dCxcbiAgd2FpdEZvckFib3J0XG59IGZyb20gJy4vYWJvcnQtY29udHJvbGxlci50cyc7XG5pbXBvcnQgeyBub3RpZnlBc3luY09wZXJhdGlvblN0YXJ0ZWQgfSBmcm9tICcuL2FzeW5jLW9wZXJhdGlvbi1ob29rLnRzJztcbmltcG9ydCB7IGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoIH0gZnJvbSAnLi9kZWJ1Zy1zd2l0Y2hlcy50cyc7XG5pbXBvcnQge1xuICBnZXRMaWJEZWJ1Z2dlcixcbiAgcHJpbnRXaXRoU3RhY2tUcmFjZVxufSBmcm9tICcuL2RlYnVnLnRzJztcbmltcG9ydCB7XG4gIEFTWU5DX1dSQVBQRVJfRVJST1JfTUVTU0FHRSxcbiAgQ3VzdG9tU3RhY2tUcmFjZUVycm9yLFxuICBlbWl0QXN5bmNFcnJvckV2ZW50LFxuICBnZXRTdGFja1RyYWNlLFxuICBpc0FzeW5jRXJyb3JJZ25vcmVDb250ZXh0QWN0aXZlLFxuICBwcmludEVycm9yLFxuICBTaWxlbnRFcnJvclxufSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7XG4gIG5vb3AsXG4gIG5vb3BBc3luY1xufSBmcm9tICcuL2Z1bmN0aW9uLnRzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllcyB9IGZyb20gJy4vb2JqZWN0LXV0aWxzLnRzJztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBpbnZva2VBc3luY1NhZmVseUFmdGVyRGVsYXl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gaW52b2tlLlxuICAgKlxuICAgKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICovXG4gIHJlYWRvbmx5IGFzeW5jRnVuY3Rpb246IChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAwYFxuICAgKi9cbiAgcmVhZG9ubHkgZGVsYXlJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgdHlwZSByZXByZXNlbnRpbmcgYSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIGEge0BsaW5rIFByb21pc2V9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZS5cbiAqL1xuZXhwb3J0IHR5cGUgUHJvbWlzZVJlc29sdmU8VD4gPSB1bmRlZmluZWQgZXh0ZW5kcyBUID8gKHZhbHVlPzogUHJvbWlzZUxpa2U8VD4gfCBUKSA9PiB2b2lkXG4gIDogKHZhbHVlOiBQcm9taXNlTGlrZTxUPiB8IFQpID0+IHZvaWQ7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJldHJ5V2l0aFRpbWVvdXR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGFib3J0IHNpZ25hbCB0byBjYW5jZWwgdGhlIHJldHJ5IG9wZXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIEEgZGVsYXkgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gcmV0cnkgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDBgXG4gICAqL1xuICByZWFkb25seSByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmV0cnkgdGhlIGZ1bmN0aW9uIG9uIGVycm9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZXRyeU9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIG1heGltdW0gdGltZSBpbiBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgZ2l2aW5nIHVwIG9uIHJldHJ5aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBZGRzIGFuIGVycm9yIGhhbmRsZXIgdG8gYSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBjYXRjaGVzIGFueSBlcnJvcnMgYW5kIGVtaXRzIGFuIGFzeW5jIGVycm9yIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBhc3luY0Z1bmN0aW9uIC0gVGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhZGQgYW4gZXJyb3IgaGFuZGxlciB0by5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBjb21wbGV0ZXMgb3IgZW1pdHMgYXN5bmMgZXJyb3IgZXZlbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhZGRFcnJvckhhbmRsZXIoYXN5bmNGdW5jdGlvbjogKCkgPT4gUHJvbWlzZTx1bmtub3duPiwgc3RhY2tUcmFjZT86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBzdGFja1RyYWNlID8/PSBnZXRTdGFja1RyYWNlKDEpO1xuICAvLyBDYXB0dXJlIHRoZSBpZ25vcmUgY29udGV4dCBzeW5jaHJvbm91c2x5IGF0IHNjaGVkdWxlIHRpbWUsIHNvIGEgZGVmZXJyZWQgcmVqZWN0aW9uIHNldHRsaW5nIGFmdGVyIHRoZSBzY29wZSBleGl0cyBpcyBzdGlsbCBpZ25vcmVkLlxuICBjb25zdCB3YXNTY2hlZHVsZWRXaXRoaW5JZ25vcmVDb250ZXh0ID0gaXNBc3luY0Vycm9ySWdub3JlQ29udGV4dEFjdGl2ZSgpO1xuICB0cnkge1xuICAgIGF3YWl0IGFzeW5jRnVuY3Rpb24oKTtcbiAgfSBjYXRjaCAoYXN5bmNFcnJvcikge1xuICAgIGNvbnN0IHdyYXBwZWRFcnJvciA9IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgICAgY2F1c2U6IGFzeW5jRXJyb3IsXG4gICAgICBtZXNzYWdlOiBBU1lOQ19XUkFQUEVSX0VSUk9SX01FU1NBR0UsXG4gICAgICBzdGFja1RyYWNlXG4gICAgfSk7XG4gICAgaWYgKGhhbmRsZVNpbGVudEVycm9yKHdyYXBwZWRFcnJvcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZW1pdEFzeW5jRXJyb3JFdmVudCh3cmFwcGVkRXJyb3IsIHdhc1NjaGVkdWxlZFdpdGhpbklnbm9yZUNvbnRleHQpO1xuICB9XG59XG5cbi8qKlxuICogRmlsdGVycyBhbiBhcnJheSBhc3luY2hyb25vdXNseSwga2VlcGluZyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByb3ZpZGVkIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gZmlsdGVyLlxuICogQHBhcmFtIHByZWRpY2F0ZSAtIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgZWxlbWVudHMgdGhhdCBzYXRpc2Z5IHRoZSBwcmVkaWNhdGUgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZpbHRlcjxUPihhcnJheTogVFtdLCBwcmVkaWNhdGU6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxib29sZWFuPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFuczogVFtdID0gW107XG5cbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGFycmF5LCBpbmRleCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW0gPSBhcnJheVtpbmRleF0gYXMgVDtcbiAgICBpZiAoYXdhaXQgcHJlZGljYXRlKGl0ZW0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIGFucy5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhbnM7XG59XG5cbi8qKlxuICogRmlsdGVycyBhbiBhcnJheSBhc3luY2hyb25vdXNseSBpbiBwbGFjZSwga2VlcGluZyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlIHByb3ZpZGVkIHByZWRpY2F0ZSBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAcGFyYW0gYXJyYXkgLSBUaGUgYXJyYXkgdG8gZmlsdGVyLlxuICogQHBhcmFtIHByZWRpY2F0ZSAtIFRoZSBwcmVkaWNhdGUgZnVuY3Rpb24gdG8gdGVzdCBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFycmF5IGlzIGZpbHRlcmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNGaWx0ZXJJblBsYWNlPFQ+KGFycmF5OiBUW10sIHByZWRpY2F0ZTogKHZhbHVlOiBULCBpbmRleDogbnVtYmVyLCBhcnJheTogVFtdKSA9PiBQcm9taXNhYmxlPGJvb2xlYW4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgbGV0IHdyaXRlSW5kZXggPSAwO1xuICBmb3IgKGxldCByZWFkSW5kZXggPSAwOyByZWFkSW5kZXggPCBsZW5ndGg7IHJlYWRJbmRleCsrKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGFycmF5LCByZWFkSW5kZXgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXJyZW50ID0gYXJyYXlbcmVhZEluZGV4XSBhcyBUO1xuICAgIGlmIChhd2FpdCBwcmVkaWNhdGUoY3VycmVudCwgcmVhZEluZGV4LCBhcnJheSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZXF1aXJlLWF0b21pYy11cGRhdGVzIC0tIFllcywgaXQgaXMgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24sIGJ1dCBJIGRvbid0IGFuIGVsZWdhbnQgd2F5IHRvIGZpeCBpdC5cbiAgICAgIGFycmF5W3dyaXRlSW5kZXgrK10gPSBjdXJyZW50O1xuICAgIH1cbiAgfVxuICBhcnJheS5sZW5ndGggPSB3cml0ZUluZGV4O1xufVxuXG4vKipcbiAqIE1hcHMgb3ZlciBhbiBhcnJheSBhc3luY2hyb25vdXNseSwgYXBwbHlpbmcgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGVhY2ggZWxlbWVudCwgYW5kIHRoZW4gZmxhdHRlbnMgdGhlIHJlc3VsdHMgaW50byBhIHNpbmdsZSBhcnJheS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgaW5wdXQgYXJyYXkuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgdHlwZSBvZiBlbGVtZW50cyBpbiB0aGUgb3V0cHV0IGFycmF5LlxuICogQHBhcmFtIGFycmF5IC0gVGhlIGFycmF5IHRvIG1hcCBvdmVyIGFuZCBmbGF0dGVuLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGFwcGx5IHRvIGVhY2ggZWxlbWVudC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhIGZsYXR0ZW5lZCBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0ZsYXRNYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVW10+KTogUHJvbWlzZTxVW10+IHtcbiAgY29uc3QgbmVzdGVkUmVzdWx0cyA9IGF3YWl0IGFzeW5jTWFwKGFycmF5LCBjYWxsYmFjayk7XG4gIHJldHVybiBuZXN0ZWRSZXN1bHRzLmZsYXQoKTtcbn1cblxuLyoqXG4gKiBNYXBzIG92ZXIgYW4gYXJyYXkgYXN5bmNocm9ub3VzbHksIGFwcGx5aW5nIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiB0byBlYWNoIGVsZW1lbnQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIGlucHV0IGFycmF5LlxuICogQHR5cGVQYXJhbSBVIC0gVGhlIHR5cGUgb2YgZWxlbWVudHMgaW4gdGhlIG91dHB1dCBhcnJheS5cbiAqIEBwYXJhbSBhcnJheSAtIFRoZSBhcnJheSB0byBtYXAgb3Zlci5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXN5bmNNYXA8VCwgVT4oYXJyYXk6IFRbXSwgY2FsbGJhY2s6ICh2YWx1ZTogVCwgaW5kZXg6IG51bWJlciwgYXJyYXk6IFRbXSkgPT4gUHJvbWlzYWJsZTxVPik6IFByb21pc2U8VVtdPiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWNhbGxiYWNrLXJlZmVyZW5jZSAtLSBQYXNzaW5nIGBjYWxsYmFja2Agc3RyYWlnaHQgdGhyb3VnaCBpcyB0aGUgY29udHJhY3Q6IGl0IGlzIGRlY2xhcmVkIGFzIGAodmFsdWUsIGluZGV4LCBhcnJheSlgIHNvIHRoYXQgaXQgcmVjZWl2ZXMgZXhhY3RseSB3aGF0IGBBcnJheSNtYXBgIHN1cHBsaWVzLiBXcmFwcGluZyBpdCB0byB0YWtlIG9ubHkgdGhlIHZhbHVlIHdvdWxkIHF1aWV0bHkgc3RvcCBmb3J3YXJkaW5nIHRoZSBvdGhlciB0d28uXG4gIHJldHVybiBhd2FpdCBwcm9taXNlQWxsU2VxdWVudGlhbGx5KGFycmF5Lm1hcChjYWxsYmFjaykpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGFzeW5jaHJvbm91cyBmdW5jdGlvbiB0byBhIHN5bmNocm9ub3VzIG9uZSBieSBhdXRvbWF0aWNhbGx5IGhhbmRsaW5nIHRoZSBQcm9taXNlIHJlamVjdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3VtZW50cyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHBhcmFtIGFzeW5jRnVuY3Rpb24gLSBUaGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcGFyYW0gc3RhY2tUcmFjZSAtIFRoZSBzdGFjayB0cmFjZSBvZiB0aGUgc291cmNlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYSBzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0QXN5bmNUb1N5bmM8QXJndW1lbnRzIGV4dGVuZHMgdW5rbm93bltdPihhc3luY0Z1bmN0aW9uOiBHZW5lcmljQXN5bmNGdW5jdGlvbjxBcmd1bWVudHM+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogR2VuZXJpY1ZvaWRGdW5jdGlvbjxBcmd1bWVudHM+IHtcbiAgY29uc3Qgb3V0ZXJTdGFja1RyYWNlID0gc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICByZXR1cm4gKC4uLiRhcmd1bWVudHM6IEFyZ3VtZW50cyk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGlubmVyU3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG4gICAgLy8gQnVpbHQgcGVyIGNhbGw6IGFwcGVuZGluZyB0byB0aGUgY2FwdHVyZWQgdHJhY2Ugd291bGQgZ3JvdyBpdCBieSBvbmUgbWFya2VyIG9uIGV2ZXJ5IGludm9jYXRpb24uXG4gICAgY29uc3QgY2FsbFN0YWNrVHJhY2UgPSBgJHtvdXRlclN0YWNrVHJhY2V9XFxuICAgIGF0IC0tLSBjb252ZXJ0QXN5bmNUb1N5bmMgLS0tICgwKVxcbiR7aW5uZXJTdGFja1RyYWNlfWA7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoKCkgPT4gYXN5bmNGdW5jdGlvbiguLi4kYXJndW1lbnRzKSwgY2FsbFN0YWNrVHJhY2UpO1xuICB9O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gYW4gYXN5bmNocm9ub3VzIG9uZSBieSB3cmFwcGluZyBpdCBpbiBhIHtAbGluayBQcm9taXNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3VtZW50cyAtIFRoZSB0eXBlcyBvZiB0aGUgYXJndW1lbnRzIHRoZSBmdW5jdGlvbiBhY2NlcHRzLlxuICogQHR5cGVQYXJhbSBSZXN1bHQgLSBUaGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdmFsdWUuXG4gKiBAcGFyYW0gc3luY0Z1bmN0aW9uIC0gVGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgd3JhcHMgdGhlIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGluIGFuIGFzeW5jaHJvbm91cyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0U3luY1RvQXN5bmM8QXJndW1lbnRzIGV4dGVuZHMgdW5rbm93bltdLCBSZXN1bHQ+KHN5bmNGdW5jdGlvbjogR2VuZXJpY0Z1bmN0aW9uPEFyZ3VtZW50cywgUmVzdWx0Pik6IEdlbmVyaWNBc3luY0Z1bmN0aW9uPEFyZ3VtZW50cywgUmVzdWx0PiB7XG4gIHJldHVybiBhc3luYyAoLi4uJGFyZ3VtZW50czogQXJndW1lbnRzKTogUHJvbWlzZTxSZXN1bHQ+ID0+IHtcbiAgICBhd2FpdCBub29wQXN5bmMoKTtcbiAgICByZXR1cm4gc3luY0Z1bmN0aW9uKC4uLiRhcmd1bWVudHMpO1xuICB9O1xufVxuXG4vKipcbiAqIEhhbmRsZXMgYSBzaWxlbnQgZXJyb3IuXG4gKlxuICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGhhbmRsZS5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGVycm9yIGlzIGEgc2lsZW50IGVycm9yLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSAtLSBUaGUgbmFtZSBzdGF0ZXMgdGhlIGFjdGlvbjsgdGhlIGJvb2xlYW4gb25seSByZXBvcnRzIHdoZXRoZXIgdGhlIGVycm9yIHdhcyBoYW5kbGVkLlxuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZVNpbGVudEVycm9yKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIGxldCBjYXVzZSA9IGVycm9yO1xuICB3aGlsZSAoIShjYXVzZSBpbnN0YW5jZW9mIFNpbGVudEVycm9yKSkge1xuICAgIGlmICghKGNhdXNlIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY2F1c2UgPSBjYXVzZS5jYXVzZTtcbiAgfVxuXG4gIGdldExpYkRlYnVnZ2VyKCdBc3luYzpoYW5kbGVTaWxlbnRFcnJvcicpKGVycm9yKTtcbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEBwYXJhbSBwcm9taXNlIC0gVGhlIHByb21pc2UgdG8gaWdub3JlIHRoZSBlcnJvciBvZi5cbiAqIEBwYXJhbSBmYWxsYmFja1ZhbHVlIC0gQWx3YXlzIGB1bmRlZmluZWRgLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gY29tcGxldGVzIG9yIGZhaWxzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3IocHJvbWlzZTogUHJvbWlzZTx1bmtub3duPiwgZmFsbGJhY2tWYWx1ZT86IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD47XG4vKipcbiAqIEludm9rZXMgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZTogVCk6IFByb21pc2U8VD47XG4vKipcbiAqIElnbm9yZXMgYW4gZXJyb3IgdGhhdCBpcyB0aHJvd24gYnkgYW4gYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgYXN5bmNocm9ub3VzIGZ1bmN0aW9uLlxuICogQHBhcmFtIHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBpZ25vcmUgdGhlIGVycm9yIG9mLlxuICogQHBhcmFtIGZhbGxiYWNrVmFsdWUgLSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIGFuIGVycm9yIGlzIHRocm93bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIGFzeW5jaHJvbm91cyBmdW5jdGlvbiBvciB0aGUgZmFsbGJhY2sgdmFsdWUgaWYgYW4gZXJyb3IgaXMgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaWdub3JlRXJyb3I8VD4ocHJvbWlzZTogUHJvbWlzZTxUPiwgZmFsbGJhY2tWYWx1ZT86IFQpOiBQcm9taXNlPFQgfCB2b2lkPiB7XG4gIGNvbnN0IGlnbm9yZUVycm9yRGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6aWdub3JlRXJyb3InKTtcbiAgY29uc3Qgc3RhY2tUcmFjZSA9IGdldFN0YWNrVHJhY2UoMSk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHByb21pc2U7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWdub3JlRXJyb3JEZWJ1Z2dlcihcbiAgICAgICdJZ25vcmVkIGVycm9yJyxcbiAgICAgIG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgIG1lc3NhZ2U6ICdJZ25vcmVkIGVycm9yJyxcbiAgICAgICAgc3RhY2tUcmFjZVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiBmYWxsYmFja1ZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogSW52b2tlcyBhIHtAbGluayBQcm9taXNlfSBhbmQgc2FmZWx5IGhhbmRsZXMgYW55IGVycm9ycyBieSBjYXRjaGluZyB0aGVtIGFuZCBlbWl0dGluZyBhbiBhc3luYyBlcnJvciBldmVudC5cbiAqXG4gKiBAcGFyYW0gYXN5bmNGdW5jdGlvbiAtIFRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gdG8gaW52b2tlIHNhZmVseS5cbiAqIEBwYXJhbSBzdGFja1RyYWNlIC0gVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZva2VBc3luY1NhZmVseShhc3luY0Z1bmN0aW9uOiAoKSA9PiBQcm9taXNhYmxlPHVua25vd24+LCBzdGFja1RyYWNlPzogc3RyaW5nKTogdm9pZCB7XG4gIHN0YWNrVHJhY2UgPz89IGdldFN0YWNrVHJhY2UoMSk7XG5cbiAgbGV0IHJlc3VsdDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICByZXN1bHQgPSBhc3luY0Z1bmN0aW9uKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItcHJvbWlzZS1yZWplY3QtZXJyb3JzIC0tIFJlLXJlamVjdGluZyB0aGUgb3JpZ2luYWwgY2F1Z2h0IGVycm9yIGFzLWlzLlxuICAgIG5vdGlmeUFzeW5jT3BlcmF0aW9uU3RhcnRlZChhZGRFcnJvckhhbmRsZXIoKCkgPT4gUHJvbWlzZS5yZWplY3QoZXJyb3IpLCBzdGFja1RyYWNlKSk7XG4gIH1cbiAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICBub3RpZnlBc3luY09wZXJhdGlvblN0YXJ0ZWQoYWRkRXJyb3JIYW5kbGVyKCgpID0+IHJlc3VsdCwgc3RhY2tUcmFjZSkpO1xuICB9XG59XG5cbi8qKlxuICogSW52b2tlcyBhbiBhc3luY2hyb25vdXMgZnVuY3Rpb24gYWZ0ZXIgYSBkZWxheS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheShwYXJhbXM6IEludm9rZUFzeW5jU2FmZWx5QWZ0ZXJEZWxheVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgYXN5bmNGdW5jdGlvbixcbiAgICBkZWxheUluTWlsbGlzZWNvbmRzID0gMFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhYm9ydFNpZ25hbCA9IHBhcmFtcy5hYm9ydFNpZ25hbCA/PyBhYm9ydFNpZ25hbE5ldmVyKCk7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBpbnZva2VBc3luY1NhZmVseShhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgc2xlZXAoeyBhYm9ydFNpZ25hbCwgbWlsbGlzZWNvbmRzOiBkZWxheUluTWlsbGlzZWNvbmRzLCBzaG91bGRUaHJvd09uQWJvcnQ6IHRydWUgfSk7XG4gICAgYXdhaXQgYXN5bmNGdW5jdGlvbihhYm9ydFNpZ25hbCk7XG4gIH0sIHN0YWNrVHJhY2UpO1xufVxuXG4vKipcbiAqIEV4ZWN1dGVzIGFzeW5jIGZ1bmN0aW9ucyBzZXF1ZW50aWFsbHkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICogQHBhcmFtIGFzeW5jRm5zIC0gVGhlIGFzeW5jIGZ1bmN0aW9ucyB0byBleGVjdXRlIHNlcXVlbnRpYWxseS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiB0aGUgcmVzdWx0cyBvZiB0aGUgYXN5bmMgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvbWlzZUFsbEFzeW5jRm5zU2VxdWVudGlhbGx5PFQ+KGFzeW5jRm5zOiAoKCkgPT4gUHJvbWlzYWJsZTxUPilbXSk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHJlc3VsdHM6IFRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGFzeW5jRnVuY3Rpb24gb2YgYXN5bmNGbnMpIHtcbiAgICByZXN1bHRzLnB1c2goYXdhaXQgYXN5bmNGdW5jdGlvbigpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0cztcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBwcm9taXNlcyBzZXF1ZW50aWFsbHkuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlLlxuICogQHBhcmFtIHByb21pc2VzIC0gVGhlIHByb21pc2VzIHRvIGV4ZWN1dGUgc2VxdWVudGlhbGx5LlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIHRoZSByZXN1bHRzIG9mIHRoZSBwcm9taXNlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb21pc2VBbGxTZXF1ZW50aWFsbHk8VD4ocHJvbWlzZXM6IFByb21pc2FibGU8VD5bXSk6IFByb21pc2U8VFtdPiB7XG4gIHJldHVybiBhd2FpdCBwcm9taXNlQWxsQXN5bmNGbnNTZXF1ZW50aWFsbHkocHJvbWlzZXMubWFwKChwcm9taXNlKSA9PiAoKSA9PiBwcm9taXNlKSk7XG59XG5cbmNvbnN0IHRlcm1pbmF0ZVJldHJ5RXJyb3JzID0gbmV3IFdlYWtTZXQ8RXJyb3I+KCk7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJldHJ5V2l0aFRpbWVvdXR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJldHJ5V2l0aFRpbWVvdXRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSB0aGUgdGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgdGltZW91dCBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgb25UaW1lb3V0PzogKGNvbnRleHQ6IFRpbWVvdXRDb250ZXh0KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uRnVuY3Rpb246IChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2FibGU8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnJ2BcbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByZXRyeSBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV0cnlPcHRpb25zPzogUmV0cnlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RhY2sgdHJhY2Ugb2YgdGhlIHNvdXJjZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWNrVHJhY2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHJ1bldpdGhUaW1lb3V0fS5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlc3VsdCAtIFRoZSB0eXBlIG9mIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIG9wZXJhdGlvbiBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5XaXRoVGltZW91dFBhcmFtczxSZXN1bHQ+IHtcbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0IG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIHRoZSB0aW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSB0aW1lb3V0IGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBvblRpbWVvdXQ/OiAoY29udGV4dDogVGltZW91dENvbnRleHQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVyYXRpb24gZnVuY3Rpb24gdG8gZXhlY3V0ZS5cbiAgICpcbiAgICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBsaXN0ZW4gdG8uXG4gICAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uRnVuY3Rpb246IChhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2FibGU8UmVzdWx0PjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcnYFxuICAgKi9cbiAgcmVhZG9ubHkgb3BlcmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBzb3VyY2UgZnVuY3Rpb24uXG4gICAqL1xuICByZWFkb25seSBzdGFja1RyYWNlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNsZWVwfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTbGVlcFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIHRvIHdhaXQgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgbWlsbGlzZWNvbmRzOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uQWJvcnQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRleHQgcHJvdmlkZWQgdG8gdGhlIHRpbWVvdXQgaGFuZGxlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaW1lb3V0Q29udGV4dCB7XG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBvcGVyYXRpb24gc3RhcnRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBudW1iZXI7XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSBpbnZva2VkIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIG9wZXJhdGlvbiBjb21wbGV0ZXMuXG4gICAqL1xuICByZWFkb25seSBvbk9wZXJhdGlvbkNvbXBsZXRlZDogKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB2b2lkO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG9wZXJhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRlcm1pbmF0ZXMgdGhlIG9wZXJhdGlvbiB0aGF0IHRpbWVkIG91dC5cbiAgICovXG4gIHJlYWRvbmx5IHRlcm1pbmF0ZU9wZXJhdGlvbjogKCkgPT4gdm9pZDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgdGltZW91dH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGltZW91dFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgYWJvcnQgc2lnbmFsIHRvIGxpc3RlbiB0by5cbiAgICovXG4gIHJlYWRvbmx5IGFib3J0U2lnbmFsPzogQWJvcnRTaWduYWw7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdGhyb3cgYW4gZXJyb3IgaWYgdGhlIGFib3J0IHNpZ25hbCBpcyBhYm9ydGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uQWJvcnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBwZXJpb2QgaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgdGltZW91dEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogQ2hhaW5zIGEgcHJvbWlzZSB3aXRoIGFub3RoZXIgcHJvbWlzZS5cbiAqXG4gKiBAcGFyYW0gY2hhaW5Qcm9taXNlIC0gUmVwcmVzZW50cyB0aGUgY2hhaW5lZCBwcm9taXNlLlxuICogQHBhcmFtIHByb21pc2FibGVGdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB0byBjaGFpbi5cbiAqIEByZXR1cm5zIENoYWluZWQgcHJvbWlzZSBvciBgbnVsbGAgaWYgbm8gYXN5bmMgbG9naWMgaXMgY2hhaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluKGNoYWluUHJvbWlzZTogbnVsbCB8IFByb21pc2U8dm9pZD4sIHByb21pc2FibGVGdW5jdGlvbjogKCkgPT4gbnVsbCB8IFByb21pc2FibGU8dm9pZD4pOiBudWxsIHwgUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBuZXh0Q2hhaW5Qcm9taXNlID0gY2hhaW5Qcm9taXNlO1xuICBpZiAoY2hhaW5Qcm9taXNlKSB7XG4gICAgbmV4dENoYWluUHJvbWlzZSA9IGNoYWluUHJvbWlzZS50aGVuKCgpID0+IHByb21pc2FibGVGdW5jdGlvbigpID8/IHVuZGVmaW5lZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgcHJvbWlzYWJsZSA9IHByb21pc2FibGVGdW5jdGlvbigpO1xuICAgIGlmIChwcm9taXNhYmxlKSB7XG4gICAgICBuZXh0Q2hhaW5Qcm9taXNlID0gcHJvbWlzYWJsZSBpbnN0YW5jZW9mIFByb21pc2UgPyBwcm9taXNhYmxlIGFzIFByb21pc2U8dm9pZD4gOiBQcm9taXNlLnJlc29sdmUocHJvbWlzYWJsZSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dENoYWluUHJvbWlzZT8uY2F0Y2gobm9vcCk7XG4gIHJldHVybiBuZXh0Q2hhaW5Qcm9taXNlO1xufVxuXG4vKipcbiAqIEdldHMgd2hldGhlciBhIHtAbGluayBydW5XaXRoVGltZW91dH0gY2FsbCB3aXRob3V0IGl0cyBvd24gYG9uVGltZW91dGAgdGVybWluYXRlcyB0aGUgb3BlcmF0aW9uIHdoZW4gaXQgdGltZXMgb3V0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgZ2V0VGVybWluYXRlT25UaW1lb3V0RGVidWdTd2l0Y2h9YCgpLmlzRW5hYmxlZCgpYC5cbiAqXG4gKiBAcmV0dXJucyBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSBpZiBhIHRpbWVkLW91dCBvcGVyYXRpb24gaXMgdGVybWluYXRlZCwgYGZhbHNlYCBpZiBpdCBpcyBsZWZ0IHJ1bm5pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1Rlcm1pbmF0aW9uT25UaW1lb3V0RW5hYmxlZCgpOiBib29sZWFuIHtcbiAgcmV0dXJuIGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoKCkuaXNFbmFibGVkKCk7XG59XG5cbi8qKlxuICogTWFya3MgYW4gZXJyb3IgdG8gdGVybWluYXRlIHJldHJ5IGxvZ2ljLlxuICpcbiAqIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBtYXJrIHRvIHRlcm1pbmF0ZSByZXRyeSBsb2dpYy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtzQXNUZXJtaW5hdGVSZXRyeShlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgdGVybWluYXRlUmV0cnlFcnJvcnMuYWRkKGVycm9yKTtcbn1cblxuLyoqXG4gKiBBbiBhc3luYyBmdW5jdGlvbiB0aGF0IG5ldmVyIGVuZHMuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCBuZXZlciByZXNvbHZlcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5ldmVyRW5kcygpOiBQcm9taXNlPG5ldmVyPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKCgpID0+IHtcbiAgICBub29wKCk7XG4gIH0pO1xuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IHRoZSBhd2FpdCBhYm92ZSBuZXZlciByZXNvbHZlcy4gKi9cbiAgYXNzZXJ0KGZhbHNlLCAnU2hvdWxkIG5ldmVyIGhhcHBlbicpO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgdGljay5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBuZXh0IHRpY2sgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbmV4dFRpY2tBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgcmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyB0byBuYXRpdmUgcHJvbWlzYWJsZSwgY29udmVydGluZyB7QGxpbmsgUHJvbWlzZUxpa2V9IChha2EgVGhlbmFibGUpIHRvIGEgbmF0aXZlIHtAbGluayBQcm9taXNlfS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUuXG4gKiBAcGFyYW0gcHJvbWlzYWJsZSAtIFRoZSBwcm9taXNhYmxlIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBpdHNlbGYgb3IgYSBuYXRpdmUge0BsaW5rIFByb21pc2V9IGlmIHRoZSB2YWx1ZSBpcyBhIHtAbGluayBQcm9taXNlTGlrZX0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQcm9taXNhYmxlPFQ+KHByb21pc2FibGU6IFByb21pc2FibGU8VD4pOiBQcm9taXNlPFQ+IHwgVCB7XG4gIGlmICghcHJvbWlzYWJsZSkge1xuICAgIHJldHVybiBwcm9taXNhYmxlO1xuICB9XG5cbiAgaWYgKHByb21pc2FibGUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgcmV0dXJuIHByb21pc2FibGUgYXMgUHJvbWlzZTxUPjtcbiAgfVxuXG4gIHJldHVybiAocHJvbWlzYWJsZSBhcyBQYXJ0aWFsPFByb21pc2VMaWtlPFQ+PikudGhlbiA/IFByb21pc2UucmVzb2x2ZShwcm9taXNhYmxlKSA6IChwcm9taXNhYmxlIGFzIFQpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgcXVldWUgbWljcm90YXNrLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG5leHQgcXVldWUgbWljcm90YXNrIGlzIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHF1ZXVlTWljcm90YXNrQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmV4dCByZXF1ZXN0IGFuaW1hdGlvbiBmcmFtZS5cbiAqXG4gKiBAcGFyYW0gZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHMgLSBUaGUgZmFsbGJhY2sgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gcmVzb2x2ZSB0aGUgcHJvbWlzZSBpZiBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBkb2VzIG5vdCBmaXJlIChlLmcuIHRoZSB3aW5kb3cgaXMgbm90IGFjdGl2ZSkuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0cyB0byBgMTAwYCBtaWxsaXNlY29uZHMuIFVzZSBgMGAgdG8gZGlzYWJsZSB0aGUgZmFsbGJhY2suXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBuZXh0IHJlcXVlc3QgYW5pbWF0aW9uIGZyYW1lIGlzIGF2YWlsYWJsZSAob3Igd2hlbiB0aGUgZmFsbGJhY2sgdGltZSBpcyByZWFjaGVkKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jKGZhbGxiYWNrVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jUHJvbWlzZSA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG4gICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGNvbnN0IERFRkFVTFRfRkFMTEJBQ0tfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAxMDA7XG4gIGZhbGxiYWNrVGltZW91dEluTWlsbGlzZWNvbmRzID8/PSBERUZBVUxUX0ZBTExCQUNLX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTO1xuXG4gIHJldHVybiBQcm9taXNlLnJhY2UoW3JlcXVlc3RBbmltYXRpb25GcmFtZUFzeW5jUHJvbWlzZSwgZmFsbGJhY2tUaW1lb3V0SW5NaWxsaXNlY29uZHMgPiAwID8gc2xlZXAoeyBtaWxsaXNlY29uZHM6IGZhbGxiYWNrVGltZW91dEluTWlsbGlzZWNvbmRzIH0pIDogbmV2ZXJFbmRzKCldKTtcbn1cblxuLyoqXG4gKiBSZXRyaWVzIHRoZSBwcm92aWRlZCBmdW5jdGlvbiB1bnRpbCBpdCByZXR1cm5zIGB0cnVlYCBvciB0aGUgdGltZW91dCBpcyByZWFjaGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBvciByZWplY3RzIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJ5V2l0aFRpbWVvdXQocGFyYW1zOiBSZXRyeVdpdGhUaW1lb3V0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJldHJ5V2l0aFRpbWVvdXREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdBc3luYzpyZXRyeVdpdGhUaW1lb3V0Jyk7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBERUZBVUxUX1JFVFJZX09QVElPTlMgPSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICByZXRyeURlbGF5SW5NaWxsaXNlY29uZHM6IDEwMCxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IGZhbHNlLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzIC0tIEV4dHJhY3RpbmcgbWFnaWMgbnVtYmVyIGFzIGEgY29uc3RhbnQgd291bGQgYmUgcmVwZXRpdGl2ZSwgYXMgdGhlIHZhbHVlIGlzIHVzZWQgb25seSBvbmNlIGFuZCBpdHMgbmFtZSB3b3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcHJvcGVydHkuXG4gICAgdGltZW91dEluTWlsbGlzZWNvbmRzOiA1MDAwXG4gIH07XG4gIGNvbnN0IGZ1bGxPcHRpb25zID0geyAuLi5ERUZBVUxUX1JFVFJZX09QVElPTlMsIC4uLnBhcmFtcy5yZXRyeU9wdGlvbnMgfTtcbiAgZnVsbE9wdGlvbnMuYWJvcnRTaWduYWw/LnRocm93SWZBYm9ydGVkKCk7XG5cbiAgYXdhaXQgcnVuV2l0aFRpbWVvdXQobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFJ1bldpdGhUaW1lb3V0UGFyYW1zPHZvaWQ+Pih7XG4gICAgY29udGV4dDogeyBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJywgcmV0cnlGdW5jdGlvbjogcGFyYW1zLm9wZXJhdGlvbkZ1bmN0aW9uIH0sXG4gICAgb25UaW1lb3V0OiBwYXJhbXMub25UaW1lb3V0LFxuICAgIGFzeW5jIG9wZXJhdGlvbkZ1bmN0aW9uKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgY29tYmluZWRBYm9ydFNpZ25hbCA9IGFib3J0U2lnbmFsQW55KGZ1bGxPcHRpb25zLmFib3J0U2lnbmFsLCBhYm9ydFNpZ25hbCk7XG4gICAgICBjb21iaW5lZEFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBsZXQgYXR0ZW1wdCA9IDA7XG4gICAgICB3aGlsZSAoIWNvbWJpbmVkQWJvcnRTaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBhdHRlbXB0Kys7XG4gICAgICAgIGxldCBpc1N1Y2Nlc3M6IGJvb2xlYW47XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaXNTdWNjZXNzID0gYXdhaXQgcGFyYW1zLm9wZXJhdGlvbkZ1bmN0aW9uKGNvbWJpbmVkQWJvcnRTaWduYWwpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uIC0tIEl0IG1pZ2h0IGNoYW5nZWQgaW5zaWRlIGBmbigpYC4gRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICAgICAgICAgIGlmIChjb21iaW5lZEFib3J0U2lnbmFsLmFib3J0ZWQgfHwgIWZ1bGxPcHRpb25zLnNob3VsZFJldHJ5T25FcnJvciB8fCB0ZXJtaW5hdGVSZXRyeUVycm9ycy5oYXMoZXJyb3IgYXMgRXJyb3IpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQ3VzdG9tU3RhY2tUcmFjZUVycm9yKHtcbiAgICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAncmV0cnlXaXRoVGltZW91dCBmYWlsZWQnLFxuICAgICAgICAgICAgICBzdGFja1RyYWNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpbnRFcnJvcihlcnJvcik7XG4gICAgICAgICAgaXNTdWNjZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzU3VjY2Vzcykge1xuICAgICAgICAgIHByaW50V2l0aFN0YWNrVHJhY2Uoe1xuICAgICAgICAgICAgJGFyZ3VtZW50czogW3tcbiAgICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb246IHBhcmFtcy5vcGVyYXRpb25GdW5jdGlvbixcbiAgICAgICAgICAgICAgb3BlcmF0aW9uTmFtZTogcGFyYW1zLm9wZXJhdGlvbk5hbWUgPz8gJydcbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgZGVidWdnZXJJbnN0YW5jZTogcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyLFxuICAgICAgICAgICAgbWVzc2FnZTogYFJldHJ5IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgYWZ0ZXIgJHtTdHJpbmcoYXR0ZW1wdCl9IGF0dGVtcHRzYCxcbiAgICAgICAgICAgIHN0YWNrVHJhY2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmludFdpdGhTdGFja1RyYWNlKHtcbiAgICAgICAgICAkYXJndW1lbnRzOiBbe1xuICAgICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb246IHBhcmFtcy5vcGVyYXRpb25GdW5jdGlvbixcbiAgICAgICAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnXG4gICAgICAgICAgfV0sXG4gICAgICAgICAgZGVidWdnZXJJbnN0YW5jZTogcmV0cnlXaXRoVGltZW91dERlYnVnZ2VyLFxuICAgICAgICAgIG1lc3NhZ2U6IGBSZXRyeSBhdHRlbXB0ICR7U3RyaW5nKGF0dGVtcHQpfSBjb21wbGV0ZWQgdW5zdWNjZXNzZnVsbHkuIFRyeWluZyBhZ2FpbiBpbiAke1N0cmluZyhmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMpfSBtaWxsaXNlY29uZHNgLFxuICAgICAgICAgIHN0YWNrVHJhY2VcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXdhaXQgc2xlZXAoeyBhYm9ydFNpZ25hbCwgbWlsbGlzZWNvbmRzOiBmdWxsT3B0aW9ucy5yZXRyeURlbGF5SW5NaWxsaXNlY29uZHMgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJyxcbiAgICBzdGFja1RyYWNlLFxuICAgIHRpbWVvdXRJbk1pbGxpc2Vjb25kczogZnVsbE9wdGlvbnMudGltZW91dEluTWlsbGlzZWNvbmRzXG4gIH0pKTtcbn1cblxuLyoqXG4gKiBFeGVjdXRlcyBhIGZ1bmN0aW9uIHdpdGggYSB0aW1lb3V0LiBJZiB0aGUgZnVuY3Rpb24gZG9lcyBub3QgY29tcGxldGUgd2l0aGluIHRoZSBzcGVjaWZpZWQgdGltZSwgaXQgaXMgY29uc2lkZXJlZCB0byBoYXZlIHRpbWVkIG91dC5cbiAqXG4gKiBXaXRob3V0IGFuIGBvblRpbWVvdXRgLCBhIHRpbWVkLW91dCBmdW5jdGlvbiBpcyB0ZXJtaW5hdGVkLCB1bmxlc3MgdGhlIHtAbGluayBnZXRUZXJtaW5hdGVPblRpbWVvdXREZWJ1Z1N3aXRjaH0gZGVidWcgc3dpdGNoIGlzIG9mZixcbiAqIGluIHdoaWNoIGNhc2UgaXQgaXMgYWxsb3dlZCB0byBydW4gaW5kZWZpbml0ZWx5LlxuICpcbiAqIEB0eXBlUGFyYW0gUmVzdWx0IC0gVGhlIHR5cGUgb2YgdGhlIHJlc3VsdCBmcm9tIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24uXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgZnVuY3Rpb24gb3IgcmVqZWN0cyBpZiBpdCB0aW1lcyBvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoVGltZW91dDxSZXN1bHQ+KHBhcmFtczogUnVuV2l0aFRpbWVvdXRQYXJhbXM8UmVzdWx0Pik6IFByb21pc2U8UmVzdWx0PiB7XG4gIGNvbnN0IHN0YWNrVHJhY2UgPSBwYXJhbXMuc3RhY2tUcmFjZSA/PyBnZXRTdGFja1RyYWNlKDEpO1xuICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICBjb25zdCBydW5BYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGNvbnN0IHRpbWVvdXRBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IHJlc3VsdDogbnVsbCB8IFJlc3VsdCA9IG51bGw7XG4gIGxldCBoYXNSZXN1bHQgPSBmYWxzZTtcbiAgbGV0IGlzQ29tcGxldGVkID0gZmFsc2U7XG4gIGNvbnN0IHJ1bldpdGhUaW1lb3V0RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignQXN5bmM6cnVuV2l0aFRpbWVvdXQnKTtcbiAgY29uc3Qgb25UaW1lb3V0ID0gcGFyYW1zLm9uVGltZW91dCA/PyBkZWZhdWx0T25UaW1lb3V0O1xuXG4gIGF3YWl0IFByb21pc2UucmFjZShbcnVuKCksIGlubmVyVGltZW91dCgpXSk7XG4gIC8vIFRoZSByZXN1bHQgaXMgb25seSB2YWxpZCBpZiB0aGUgcnVuIGZpbmlzaGVkIG9uIGl0cyBvd24uIFdoZW4gdGhlIHRpbWVvdXQgdGVybWluYXRlZCBpdCwgdGhlXG4gIC8vIG9wZXJhdGlvbiBtaWdodCBzdGlsbCByZXNvbHZlIGFmdGVyd2FyZHMgKGUuZy4gYSByZXRyeSBsb29wIHRoYXQgZXhpdHMgb24gYWJvcnQpLCBidXQgdGhhdCB2YWx1ZVxuICAvLyBpcyBwYXN0IHRoZSBkZWFkbGluZSBhbmQgbXVzdCBiZSB0cmVhdGVkIGFzIGEgZmFpbHVyZSwgbm90IGEgc3VjY2Vzcy5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gQm90aCBtaWdodCBjaGFuZ2UgaW5zaWRlIGBydW4oKWAvYGlubmVyVGltZW91dCgpYC4gRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICBpZiAoaGFzUmVzdWx0ICYmICFydW5BYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFJlc3VsdDtcbiAgfVxuXG4gIHRocm93IG5ldyBDdXN0b21TdGFja1RyYWNlRXJyb3Ioe1xuICAgIGNhdXNlOiBydW5BYm9ydENvbnRyb2xsZXIuc2lnbmFsLnJlYXNvbixcbiAgICBtZXNzYWdlOiAnUnVuIHdpdGggdGltZW91dCBmYWlsZWQnLFxuICAgIHN0YWNrVHJhY2VcbiAgfSk7XG5cbiAgYXN5bmMgZnVuY3Rpb24gcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCBwYXJhbXMub3BlcmF0aW9uRnVuY3Rpb24ocnVuQWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGgudHJ1bmMocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUpO1xuICAgICAgcHJpbnRXaXRoU3RhY2tUcmFjZSh7XG4gICAgICAgICRhcmd1bWVudHM6IFt7XG4gICAgICAgICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgICAgICAgb3BlcmF0aW9uRnVuY3Rpb246IHBhcmFtcy5vcGVyYXRpb25GdW5jdGlvbixcbiAgICAgICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJ1xuICAgICAgICB9XSxcbiAgICAgICAgZGVidWdnZXJJbnN0YW5jZTogcnVuV2l0aFRpbWVvdXREZWJ1Z2dlcixcbiAgICAgICAgbWVzc2FnZTogYEV4ZWN1dGlvbiB0aW1lOiAke1N0cmluZyhkdXJhdGlvbil9IG1pbGxpc2Vjb25kc2AsXG4gICAgICAgIHN0YWNrVHJhY2VcbiAgICAgIH0pO1xuICAgICAgaGFzUmVzdWx0ID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcnVuQWJvcnRDb250cm9sbGVyLmFib3J0KGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgdGltZW91dEFib3J0Q29udHJvbGxlci5hYm9ydChuZXcgRXJyb3IoJ0NvbXBsZXRlZCcpKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBpbm5lclRpbWVvdXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgc2xlZXAoeyBhYm9ydFNpZ25hbDogdGltZW91dEFib3J0Q29udHJvbGxlci5zaWduYWwsIG1pbGxpc2Vjb25kczogcGFyYW1zLnRpbWVvdXRJbk1pbGxpc2Vjb25kcyB9KTtcblxuICAgIGlmIChpc0NvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvbiA9IE1hdGgudHJ1bmMocGVyZm9ybWFuY2Uubm93KCkgLSBzdGFydFRpbWUpO1xuICAgIHByaW50V2l0aFN0YWNrVHJhY2Uoe1xuICAgICAgJGFyZ3VtZW50czogW3tcbiAgICAgICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgICAgIG9wZXJhdGlvbkZ1bmN0aW9uOiBwYXJhbXMub3BlcmF0aW9uRnVuY3Rpb24sXG4gICAgICAgIG9wZXJhdGlvbk5hbWU6IHBhcmFtcy5vcGVyYXRpb25OYW1lID8/ICcnXG4gICAgICB9XSxcbiAgICAgIGRlYnVnZ2VySW5zdGFuY2U6IHJ1bldpdGhUaW1lb3V0RGVidWdnZXIsXG4gICAgICBtZXNzYWdlOiBgVGltZWQgb3V0IGFmdGVyICR7U3RyaW5nKGR1cmF0aW9uKX0gbWlsbGlzZWNvbmRzYCxcbiAgICAgIHN0YWNrVHJhY2VcbiAgICB9KTtcblxuICAgIGNvbnN0IHRpbWVvdXRDb250ZXh0OiBUaW1lb3V0Q29udGV4dCA9IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxUaW1lb3V0Q29udGV4dD4oe1xuICAgICAgZHVyYXRpb24sXG4gICAgICBvbk9wZXJhdGlvbkNvbXBsZXRlZChjYWxsYmFjaykge1xuICAgICAgICB0aW1lb3V0QWJvcnRDb250cm9sbGVyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGNhbGxiYWNrKTtcbiAgICAgIH0sXG4gICAgICBvcGVyYXRpb25OYW1lOiBwYXJhbXMub3BlcmF0aW9uTmFtZSA/PyAnJyxcbiAgICAgIHRlcm1pbmF0ZU9wZXJhdGlvbigpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYFRpbWVkIG91dCBhZnRlciAke1N0cmluZyhkdXJhdGlvbil9IG1pbGxpc2Vjb25kc2ApO1xuICAgICAgICBydW5BYm9ydENvbnRyb2xsZXIuYWJvcnQoZXJyb3IpO1xuICAgICAgICB0aW1lb3V0QWJvcnRDb250cm9sbGVyLmFib3J0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIG9uVGltZW91dCh0aW1lb3V0Q29udGV4dCk7XG4gICAgYXdhaXQgd2FpdEZvckFib3J0KHRpbWVvdXRBYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgfVxufVxuXG4vKipcbiAqIEdldHMgdGhlIG5leHQgc2V0IGltbWVkaWF0ZS5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBuZXh0IHNldCBpbW1lZGlhdGUgaXMgYXZhaWxhYmxlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0SW1tZWRpYXRlQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNldHMgd2hldGhlciBhIHtAbGluayBydW5XaXRoVGltZW91dH0gY2FsbCB3aXRob3V0IGl0cyBvd24gYG9uVGltZW91dGAgdGVybWluYXRlcyB0aGUgb3BlcmF0aW9uIHdoZW4gaXQgdGltZXMgb3V0LlxuICpcbiAqIEBkZXByZWNhdGVkIFVzZSB7QGxpbmsgZ2V0VGVybWluYXRlT25UaW1lb3V0RGVidWdTd2l0Y2h9YCgpLnNldEVuYWJsZWQoaXNFbmFibGVkKWAuXG4gKlxuICogQHBhcmFtIGlzRW5hYmxlZCAtIGB0cnVlYCB0byB0ZXJtaW5hdGUgYSB0aW1lZC1vdXQgb3BlcmF0aW9uLCBgZmFsc2VgIHRvIGxlYXZlIGl0IHJ1bm5pbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRUZXJtaW5hdGlvbk9uVGltZW91dEVuYWJsZWQoaXNFbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gIGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoKCkuc2V0RW5hYmxlZChpc0VuYWJsZWQpO1xufVxuXG4vKipcbiAqIERlbGF5cyBleGVjdXRpb24gZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIGRlbGF5IC0gVGhlIHRpbWUgdG8gd2FpdCBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXRUaW1lb3V0QXN5bmMoZGVsYXk/OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dChyZXNvbHZlLCBkZWxheSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIERlbGF5cyBleGVjdXRpb24gZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBzcGVjaWZpZWQgZGVsYXkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcChwYXJhbXM6IFNsZWVwUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHtcbiAgICBhYm9ydFNpZ25hbCxcbiAgICBtaWxsaXNlY29uZHMsXG4gICAgc2hvdWxkVGhyb3dPbkFib3J0XG4gIH0gPSBwYXJhbXM7XG4gIGF3YWl0IHdhaXRGb3JBYm9ydChhYm9ydFNpZ25hbEFueShhYm9ydFNpZ25hbCwgYWJvcnRTaWduYWxUaW1lb3V0KG1pbGxpc2Vjb25kcykpKTtcbiAgaWYgKHNob3VsZFRocm93T25BYm9ydCkge1xuICAgIGFib3J0U2lnbmFsPy50aHJvd0lmQWJvcnRlZCgpO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHtAbGluayBQcm9taXNlfSB0aGF0IHJlamVjdHMgYWZ0ZXIgdGhlIHNwZWNpZmllZCB0aW1lb3V0IHBlcmlvZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgYWx3YXlzIHJlamVjdHMgd2l0aCBhIHRpbWVvdXQgZXJyb3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0aW1lb3V0KHBhcmFtczogVGltZW91dFBhcmFtcyk6IFByb21pc2U8bmV2ZXI+IHtcbiAgY29uc3Qge1xuICAgIGFib3J0U2lnbmFsLFxuICAgIHNob3VsZFRocm93T25BYm9ydCxcbiAgICB0aW1lb3V0SW5NaWxsaXNlY29uZHNcbiAgfSA9IHBhcmFtcztcbiAgYXdhaXQgc2xlZXAobm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFNsZWVwUGFyYW1zPih7XG4gICAgYWJvcnRTaWduYWwsXG4gICAgbWlsbGlzZWNvbmRzOiB0aW1lb3V0SW5NaWxsaXNlY29uZHMsXG4gICAgc2hvdWxkVGhyb3dPbkFib3J0XG4gIH0pKTtcbiAgdGhyb3cgbmV3IEVycm9yKGBUaW1lZCBvdXQgaW4gJHtTdHJpbmcodGltZW91dEluTWlsbGlzZWNvbmRzKX0gbWlsbGlzZWNvbmRzYCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gQXN5bmNJdGVyYWJsZUl0ZXJhdG9yIHRvIGFuIGFycmF5IGJ5IGNvbnN1bWluZyBhbGwgaXRzIGVsZW1lbnRzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIGVsZW1lbnRzIHByb2R1Y2VkIGJ5IHRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IuXG4gKiBAcGFyYW0gaXRlciAtIFRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBhbGwgdGhlIGVsZW1lbnRzIGluIHRoZSBBc3luY0l0ZXJhYmxlSXRlcmF0b3IuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0FycmF5PFQ+KGl0ZXI6IEFzeW5jSXRlcmFibGVJdGVyYXRvcjxUPik6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IGFycmF5OiBUW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBpdGVtIG9mIGl0ZXIpIHtcbiAgICBhcnJheS5wdXNoKGl0ZW0pO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdE9uVGltZW91dChjb250ZXh0OiBUaW1lb3V0Q29udGV4dCk6IHZvaWQge1xuICBpZiAoZ2V0VGVybWluYXRlT25UaW1lb3V0RGVidWdTd2l0Y2goKS5pc0VuYWJsZWQoKSkge1xuICAgIGNvbnRleHQudGVybWluYXRlT3BlcmF0aW9uKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZ2V0TGliRGVidWdnZXIoJ0FzeW5jOnJ1bldpdGhUaW1lb3V0JykoXG4gICAgYFRpbWVvdXQgdGVybWluYXRpb24gaXMgc3dpdGNoZWQgb2ZmLCBzbyB0aGUgb3BlcmF0aW9uICcke2NvbnRleHQub3BlcmF0aW9uTmFtZX0nIGtlZXBzIHJ1bm5pbmcgYWZ0ZXIgJHtTdHJpbmcoY29udGV4dC5kdXJhdGlvbil9IG1pbGxpc2Vjb25kc2BcbiAgKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBY0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsd0NBQXdDO0FBQ2pEO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyxjQUFjO0FBNkV2QixlQUFzQixnQkFBZ0IsZUFBdUMsWUFBb0M7QUFDL0csaUJBQWUsY0FBYyxDQUFDO0FBRTlCLFFBQU0sa0NBQWtDLGdDQUFnQztBQUN4RSxNQUFJO0FBQ0YsVUFBTSxjQUFjO0FBQUEsRUFDdEIsU0FBUyxZQUFZO0FBQ25CLFVBQU0sZUFBZSxJQUFJLHNCQUFzQjtBQUFBLE1BQzdDLE9BQU87QUFBQSxNQUNQLFNBQVM7QUFBQSxNQUNUO0FBQUEsSUFDRixDQUFDO0FBQ0QsUUFBSSxrQkFBa0IsWUFBWSxHQUFHO0FBQ25DO0FBQUEsSUFDRjtBQUNBLHdCQUFvQixjQUFjLCtCQUErQjtBQUFBLEVBQ25FO0FBQ0Y7QUFVQSxlQUFzQixZQUFlLE9BQVksV0FBdUY7QUFDdEksUUFBTSxNQUFXLENBQUM7QUFFbEIsUUFBTSxTQUFTLE1BQU07QUFDckIsV0FBUyxRQUFRLEdBQUcsUUFBUSxRQUFRLFNBQVM7QUFDM0MsUUFBSSxDQUFDLE9BQU8sT0FBTyxPQUFPLEtBQUssR0FBRztBQUNoQztBQUFBLElBQ0Y7QUFFQSxVQUFNLE9BQU8sTUFBTSxLQUFLO0FBQ3hCLFFBQUksTUFBTSxVQUFVLE1BQU0sT0FBTyxLQUFLLEdBQUc7QUFDdkMsVUFBSSxLQUFLLElBQUk7QUFBQSxJQUNmO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVVBLGVBQXNCLG1CQUFzQixPQUFZLFdBQXdGO0FBQzlJLFFBQU0sU0FBUyxNQUFNO0FBQ3JCLE1BQUksYUFBYTtBQUNqQixXQUFTLFlBQVksR0FBRyxZQUFZLFFBQVEsYUFBYTtBQUN2RCxRQUFJLENBQUMsT0FBTyxPQUFPLE9BQU8sU0FBUyxHQUFHO0FBQ3BDO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxNQUFNLFNBQVM7QUFDL0IsUUFBSSxNQUFNLFVBQVUsU0FBUyxXQUFXLEtBQUssR0FBRztBQUU5QyxZQUFNLFlBQVksSUFBSTtBQUFBLElBQ3hCO0FBQUEsRUFDRjtBQUNBLFFBQU0sU0FBUztBQUNqQjtBQVdBLGVBQXNCLGFBQW1CLE9BQVksVUFBa0Y7QUFDckksUUFBTSxnQkFBZ0IsTUFBTSxTQUFTLE9BQU8sUUFBUTtBQUNwRCxTQUFPLGNBQWMsS0FBSztBQUM1QjtBQVdBLGVBQXNCLFNBQWUsT0FBWSxVQUFnRjtBQUUvSCxTQUFPLE1BQU0sdUJBQXVCLE1BQU0sSUFBSSxRQUFRLENBQUM7QUFDekQ7QUFVTyxTQUFTLG1CQUFnRCxlQUFnRCxZQUFxRDtBQUNuSyxRQUFNLGtCQUFrQixjQUFjLGNBQWMsQ0FBQztBQUNyRCxTQUFPLElBQUksZUFBZ0M7QUFDekMsVUFBTSxrQkFBa0IsY0FBYyxDQUFDO0FBRXZDLFVBQU0saUJBQWlCLEdBQUcsZUFBZTtBQUFBO0FBQUEsRUFBNEMsZUFBZTtBQUNwRyxzQkFBa0IsTUFBTSxjQUFjLEdBQUcsVUFBVSxHQUFHLGNBQWM7QUFBQSxFQUN0RTtBQUNGO0FBVU8sU0FBUyxtQkFBd0QsY0FBMkY7QUFDakssU0FBTyxVQUFVLGVBQTJDO0FBQzFELFVBQU0sVUFBVTtBQUNoQixXQUFPLGFBQWEsR0FBRyxVQUFVO0FBQUEsRUFDbkM7QUFDRjtBQVNPLFNBQVMsa0JBQWtCLE9BQXlCO0FBQ3pELE1BQUksUUFBUTtBQUNaLFNBQU8sRUFBRSxpQkFBaUIsY0FBYztBQUN0QyxRQUFJLEVBQUUsaUJBQWlCLFFBQVE7QUFDN0IsYUFBTztBQUFBLElBQ1Q7QUFFQSxZQUFRLE1BQU07QUFBQSxFQUNoQjtBQUVBLGlCQUFlLHlCQUF5QixFQUFFLEtBQUs7QUFDL0MsU0FBTztBQUNUO0FBMEJBLGVBQXNCLFlBQWUsU0FBcUIsZUFBc0M7QUFDOUYsUUFBTSxzQkFBc0IsZUFBZSxtQkFBbUI7QUFDOUQsUUFBTSxhQUFhLGNBQWMsQ0FBQztBQUNsQyxNQUFJO0FBQ0YsV0FBTyxNQUFNO0FBQUEsRUFDZixTQUFTLE9BQU87QUFDZDtBQUFBLE1BQ0U7QUFBQSxNQUNBLElBQUksc0JBQXNCO0FBQUEsUUFDeEIsT0FBTztBQUFBLFFBQ1AsU0FBUztBQUFBLFFBQ1Q7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQVFPLFNBQVMsa0JBQWtCLGVBQTBDLFlBQTJCO0FBQ3JHLGlCQUFlLGNBQWMsQ0FBQztBQUU5QixNQUFJO0FBQ0osTUFBSTtBQUNGLGFBQVMsY0FBYztBQUFBLEVBQ3pCLFNBQVMsT0FBTztBQUVkLGdDQUE0QixnQkFBZ0IsTUFBTSxRQUFRLE9BQU8sS0FBSyxHQUFHLFVBQVUsQ0FBQztBQUFBLEVBQ3RGO0FBQ0EsTUFBSSxrQkFBa0IsU0FBUztBQUM3QixnQ0FBNEIsZ0JBQWdCLE1BQU0sUUFBUSxVQUFVLENBQUM7QUFBQSxFQUN2RTtBQUNGO0FBT08sU0FBUyw0QkFBNEIsUUFBaUQ7QUFDM0YsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLHNCQUFzQjtBQUFBLEVBQ3hCLElBQUk7QUFDSixRQUFNLGNBQWMsT0FBTyxlQUFlLGlCQUFpQjtBQUMzRCxjQUFZLGVBQWU7QUFDM0IsUUFBTSxhQUFhLE9BQU8sY0FBYyxjQUFjLENBQUM7QUFDdkQsb0JBQWtCLFlBQVk7QUFDNUIsVUFBTSxNQUFNLEVBQUUsYUFBYSxjQUFjLHFCQUFxQixvQkFBb0IsS0FBSyxDQUFDO0FBQ3hGLFVBQU0sY0FBYyxXQUFXO0FBQUEsRUFDakMsR0FBRyxVQUFVO0FBQ2Y7QUFTQSxlQUFzQiwrQkFBa0MsVUFBaUQ7QUFDdkcsUUFBTSxVQUFlLENBQUM7QUFDdEIsYUFBVyxpQkFBaUIsVUFBVTtBQUNwQyxZQUFRLEtBQUssTUFBTSxjQUFjLENBQUM7QUFBQSxFQUNwQztBQUNBLFNBQU87QUFDVDtBQVNBLGVBQXNCLHVCQUEwQixVQUF5QztBQUN2RixTQUFPLE1BQU0sK0JBQStCLFNBQVMsSUFBSSxDQUFDLFlBQVksTUFBTSxPQUFPLENBQUM7QUFDdEY7QUFFQSxNQUFNLHVCQUF1QixvQkFBSSxRQUFlO0FBOEp6QyxTQUFTLE1BQU0sY0FBb0Msb0JBQXlFO0FBQ2pJLE1BQUksbUJBQW1CO0FBQ3ZCLE1BQUksY0FBYztBQUNoQix1QkFBbUIsYUFBYSxLQUFLLE1BQU0sbUJBQW1CLEtBQUssTUFBUztBQUFBLEVBQzlFLE9BQU87QUFDTCxVQUFNLGFBQWEsbUJBQW1CO0FBQ3RDLFFBQUksWUFBWTtBQUNkLHlCQUFtQixzQkFBc0IsVUFBVSxhQUE4QixRQUFRLFFBQVEsVUFBVTtBQUFBLElBQzdHO0FBQUEsRUFDRjtBQUVBLG9CQUFrQixNQUFNLElBQUk7QUFDNUIsU0FBTztBQUNUO0FBU08sU0FBUyxnQ0FBeUM7QUFDdkQsU0FBTyxpQ0FBaUMsRUFBRSxVQUFVO0FBQ3REO0FBT08sU0FBUyxzQkFBc0IsT0FBb0I7QUFDeEQsdUJBQXFCLElBQUksS0FBSztBQUNoQztBQU9BLGVBQXNCLFlBQTRCO0FBQ2hELFFBQU0sSUFBSSxRQUFRLE1BQU07QUFDdEIsU0FBSztBQUFBLEVBQ1AsQ0FBQztBQUVELFNBQU8sT0FBTyxxQkFBcUI7QUFFckM7QUFPQSxlQUFzQixnQkFBK0I7QUFDbkQsU0FBTyxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzlCLG1CQUFlLE1BQU07QUFDbkIsY0FBUTtBQUFBLElBQ1YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBU08sU0FBUyxvQkFBdUIsWUFBMkM7QUFDaEYsTUFBSSxDQUFDLFlBQVk7QUFDZixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksc0JBQXNCLFNBQVM7QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFRLFdBQXVDLE9BQU8sUUFBUSxRQUFRLFVBQVUsSUFBSztBQUN2RjtBQU9BLGVBQXNCLHNCQUFxQztBQUN6RCxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsbUJBQWUsTUFBTTtBQUNuQixjQUFRO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFTQSxlQUFzQiwyQkFBMkIsK0JBQXVEO0FBQ3RHLFFBQU0sb0NBQW9DLElBQUksUUFBYyxDQUFDLFlBQVk7QUFDdkUsV0FBTyxzQkFBc0IsTUFBTTtBQUNqQyxjQUFRO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBRUQsUUFBTSwyQ0FBMkM7QUFDakQsb0NBQWtDO0FBRWxDLFNBQU8sUUFBUSxLQUFLLENBQUMsbUNBQW1DLGdDQUFnQyxJQUFJLE1BQU0sRUFBRSxjQUFjLDhCQUE4QixDQUFDLElBQUksVUFBVSxDQUFDLENBQUM7QUFDbks7QUFRQSxlQUFzQixpQkFBaUIsUUFBK0M7QUFDcEYsUUFBTSwyQkFBMkIsZUFBZSx3QkFBd0I7QUFDeEUsUUFBTSxhQUFhLE9BQU8sY0FBYyxjQUFjLENBQUM7QUFDdkQsUUFBTSx3QkFBd0I7QUFBQTtBQUFBLElBRTVCLDBCQUEwQjtBQUFBLElBQzFCLG9CQUFvQjtBQUFBO0FBQUEsSUFFcEIsdUJBQXVCO0FBQUEsRUFDekI7QUFDQSxRQUFNLGNBQWMsRUFBRSxHQUFHLHVCQUF1QixHQUFHLE9BQU8sYUFBYTtBQUN2RSxjQUFZLGFBQWEsZUFBZTtBQUV4QyxRQUFNLGVBQWUsNEJBQXdEO0FBQUEsSUFDM0UsU0FBUyxFQUFFLGVBQWUsT0FBTyxpQkFBaUIsSUFBSSxlQUFlLE9BQU8sa0JBQWtCO0FBQUEsSUFDOUYsV0FBVyxPQUFPO0FBQUEsSUFDbEIsTUFBTSxrQkFBa0IsYUFBeUM7QUFDL0QsWUFBTSxzQkFBc0IsZUFBZSxZQUFZLGFBQWEsV0FBVztBQUMvRSwwQkFBb0IsZUFBZTtBQUNuQyxVQUFJLFVBQVU7QUFDZCxhQUFPLENBQUMsb0JBQW9CLFNBQVM7QUFDbkM7QUFDQSxZQUFJO0FBQ0osWUFBSTtBQUNGLHNCQUFZLE1BQU0sT0FBTyxrQkFBa0IsbUJBQW1CO0FBQUEsUUFDaEUsU0FBUyxPQUFPO0FBRWQsY0FBSSxvQkFBb0IsV0FBVyxDQUFDLFlBQVksc0JBQXNCLHFCQUFxQixJQUFJLEtBQWMsR0FBRztBQUM5RyxrQkFBTSxJQUFJLHNCQUFzQjtBQUFBLGNBQzlCLE9BQU87QUFBQSxjQUNQLFNBQVM7QUFBQSxjQUNUO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSDtBQUNBLHFCQUFXLEtBQUs7QUFDaEIsc0JBQVk7QUFBQSxRQUNkO0FBQ0EsWUFBSSxXQUFXO0FBQ2IsOEJBQW9CO0FBQUEsWUFDbEIsWUFBWSxDQUFDO0FBQUEsY0FDWCxtQkFBbUIsT0FBTztBQUFBLGNBQzFCLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxZQUN6QyxDQUFDO0FBQUEsWUFDRCxrQkFBa0I7QUFBQSxZQUNsQixTQUFTLHNDQUFzQyxPQUFPLE9BQU8sQ0FBQztBQUFBLFlBQzlEO0FBQUEsVUFDRixDQUFDO0FBQ0Q7QUFBQSxRQUNGO0FBRUEsNEJBQW9CO0FBQUEsVUFDbEIsWUFBWSxDQUFDO0FBQUEsWUFDWCxtQkFBbUIsT0FBTztBQUFBLFlBQzFCLGVBQWUsT0FBTyxpQkFBaUI7QUFBQSxVQUN6QyxDQUFDO0FBQUEsVUFDRCxrQkFBa0I7QUFBQSxVQUNsQixTQUFTLGlCQUFpQixPQUFPLE9BQU8sQ0FBQyw4Q0FBOEMsT0FBTyxZQUFZLHdCQUF3QixDQUFDO0FBQUEsVUFDbkk7QUFBQSxRQUNGLENBQUM7QUFFRCxjQUFNLE1BQU0sRUFBRSxhQUFhLGNBQWMsWUFBWSx5QkFBeUIsQ0FBQztBQUFBLE1BQ2pGO0FBQUEsSUFDRjtBQUFBLElBQ0EsZUFBZSxPQUFPLGlCQUFpQjtBQUFBLElBQ3ZDO0FBQUEsSUFDQSx1QkFBdUIsWUFBWTtBQUFBLEVBQ3JDLENBQUMsQ0FBQztBQUNKO0FBWUEsZUFBc0IsZUFBdUIsUUFBdUQ7QUFDbEcsUUFBTSxhQUFhLE9BQU8sY0FBYyxjQUFjLENBQUM7QUFDdkQsUUFBTSxZQUFZLFlBQVksSUFBSTtBQUVsQyxRQUFNLHFCQUFxQixJQUFJLGdCQUFnQjtBQUMvQyxRQUFNLHlCQUF5QixJQUFJLGdCQUFnQjtBQUVuRCxNQUFJLFNBQXdCO0FBQzVCLE1BQUksWUFBWTtBQUNoQixNQUFJLGNBQWM7QUFDbEIsUUFBTSx5QkFBeUIsZUFBZSxzQkFBc0I7QUFDcEUsUUFBTSxZQUFZLE9BQU8sYUFBYTtBQUV0QyxRQUFNLFFBQVEsS0FBSyxDQUFDLElBQUksR0FBRyxhQUFhLENBQUMsQ0FBQztBQUsxQyxNQUFJLGFBQWEsQ0FBQyxtQkFBbUIsT0FBTyxTQUFTO0FBQ25ELFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJLHNCQUFzQjtBQUFBLElBQzlCLE9BQU8sbUJBQW1CLE9BQU87QUFBQSxJQUNqQyxTQUFTO0FBQUEsSUFDVDtBQUFBLEVBQ0YsQ0FBQztBQUVELGlCQUFlLE1BQXFCO0FBQ2xDLFFBQUk7QUFDRixlQUFTLE1BQU0sT0FBTyxrQkFBa0IsbUJBQW1CLE1BQU07QUFDakUsWUFBTSxXQUFXLEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxTQUFTO0FBQ3pELDBCQUFvQjtBQUFBLFFBQ2xCLFlBQVksQ0FBQztBQUFBLFVBQ1gsU0FBUyxPQUFPO0FBQUEsVUFDaEIsbUJBQW1CLE9BQU87QUFBQSxVQUMxQixlQUFlLE9BQU8saUJBQWlCO0FBQUEsUUFDekMsQ0FBQztBQUFBLFFBQ0Qsa0JBQWtCO0FBQUEsUUFDbEIsU0FBUyxtQkFBbUIsT0FBTyxRQUFRLENBQUM7QUFBQSxRQUM1QztBQUFBLE1BQ0YsQ0FBQztBQUNELGtCQUFZO0FBQUEsSUFDZCxTQUFTLE9BQU87QUFDZCx5QkFBbUIsTUFBTSxLQUFLO0FBQUEsSUFDaEMsVUFBRTtBQUNBLG9CQUFjO0FBQ2QsNkJBQXVCLE1BQU0sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUVBLGlCQUFlLGVBQThCO0FBQzNDLFVBQU0sTUFBTSxFQUFFLGFBQWEsdUJBQXVCLFFBQVEsY0FBYyxPQUFPLHNCQUFzQixDQUFDO0FBRXRHLFFBQUksYUFBYTtBQUNmO0FBQUEsSUFDRjtBQUNBLFVBQU0sV0FBVyxLQUFLLE1BQU0sWUFBWSxJQUFJLElBQUksU0FBUztBQUN6RCx3QkFBb0I7QUFBQSxNQUNsQixZQUFZLENBQUM7QUFBQSxRQUNYLFNBQVMsT0FBTztBQUFBLFFBQ2hCLG1CQUFtQixPQUFPO0FBQUEsUUFDMUIsZUFBZSxPQUFPLGlCQUFpQjtBQUFBLE1BQ3pDLENBQUM7QUFBQSxNQUNELGtCQUFrQjtBQUFBLE1BQ2xCLFNBQVMsbUJBQW1CLE9BQU8sUUFBUSxDQUFDO0FBQUEsTUFDNUM7QUFBQSxJQUNGLENBQUM7QUFFRCxVQUFNLGlCQUFpQyw0QkFBNEM7QUFBQSxNQUNqRjtBQUFBLE1BQ0EscUJBQXFCLFVBQVU7QUFDN0IsK0JBQXVCLE9BQU8saUJBQWlCLFNBQVMsUUFBUTtBQUFBLE1BQ2xFO0FBQUEsTUFDQSxlQUFlLE9BQU8saUJBQWlCO0FBQUEsTUFDdkMscUJBQXFCO0FBQ25CLGNBQU0sUUFBUSxJQUFJLE1BQU0sbUJBQW1CLE9BQU8sUUFBUSxDQUFDLGVBQWU7QUFDMUUsMkJBQW1CLE1BQU0sS0FBSztBQUM5QiwrQkFBdUIsTUFBTSxLQUFLO0FBQUEsTUFDcEM7QUFBQSxJQUNGLENBQUM7QUFFRCxjQUFVLGNBQWM7QUFDeEIsVUFBTSxhQUFhLHVCQUF1QixNQUFNO0FBQUEsRUFDbEQ7QUFDRjtBQU9BLGVBQXNCLG9CQUFtQztBQUN2RCxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsaUJBQWEsTUFBTTtBQUNqQixjQUFRO0FBQUEsSUFDVixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFTTyxTQUFTLCtCQUErQixXQUEwQjtBQUN2RSxtQ0FBaUMsRUFBRSxXQUFXLFNBQVM7QUFDekQ7QUFRQSxlQUFzQixnQkFBZ0IsT0FBK0I7QUFDbkUsUUFBTSxJQUFJLFFBQVEsQ0FBQyxZQUFZO0FBQzdCLFdBQU8sV0FBVyxTQUFTLEtBQUs7QUFBQSxFQUNsQyxDQUFDO0FBQ0g7QUFRQSxlQUFzQixNQUFNLFFBQW9DO0FBQzlELFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixRQUFNLGFBQWEsZUFBZSxhQUFhLG1CQUFtQixZQUFZLENBQUMsQ0FBQztBQUNoRixNQUFJLG9CQUFvQjtBQUN0QixpQkFBYSxlQUFlO0FBQUEsRUFDOUI7QUFDRjtBQVFBLGVBQXNCLFFBQVEsUUFBdUM7QUFDbkUsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU0sTUFBTSw0QkFBeUM7QUFBQSxJQUNuRDtBQUFBLElBQ0EsY0FBYztBQUFBLElBQ2Q7QUFBQSxFQUNGLENBQUMsQ0FBQztBQUNGLFFBQU0sSUFBSSxNQUFNLGdCQUFnQixPQUFPLHFCQUFxQixDQUFDLGVBQWU7QUFDOUU7QUFTQSxlQUFzQixRQUFXLE1BQThDO0FBQzdFLFFBQU0sUUFBYSxDQUFDO0FBQ3BCLG1CQUFpQixRQUFRLE1BQU07QUFDN0IsVUFBTSxLQUFLLElBQUk7QUFBQSxFQUNqQjtBQUNBLFNBQU87QUFDVDtBQUVBLFNBQVMsaUJBQWlCLFNBQStCO0FBQ3ZELE1BQUksaUNBQWlDLEVBQUUsVUFBVSxHQUFHO0FBQ2xELFlBQVEsbUJBQW1CO0FBQzNCO0FBQUEsRUFDRjtBQUVBLGlCQUFlLHNCQUFzQjtBQUFBLElBQ25DLDBEQUEwRCxRQUFRLGFBQWEseUJBQXlCLE9BQU8sUUFBUSxRQUFRLENBQUM7QUFBQSxFQUNsSTtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -40,7 +40,7 @@ export interface DebugController {
|
|
|
40
40
|
*
|
|
41
41
|
* @param namespaces - Single namespace string or array of namespace strings to disable
|
|
42
42
|
*/
|
|
43
|
-
disable: (namespaces: string | string[]) => void;
|
|
43
|
+
readonly disable: (namespaces: string | string[]) => void;
|
|
44
44
|
/**
|
|
45
45
|
* Enable specific debug namespaces. Note that explicitly disabled
|
|
46
46
|
* namespaces (prefixed with '-') will remain disabled.
|
|
@@ -58,7 +58,7 @@ export interface DebugController {
|
|
|
58
58
|
*
|
|
59
59
|
* @param namespaces - Single namespace string or array of namespace strings to enable
|
|
60
60
|
*/
|
|
61
|
-
enable: (namespaces: string | string[]) => void;
|
|
61
|
+
readonly enable: (namespaces: string | string[]) => void;
|
|
62
62
|
/**
|
|
63
63
|
* Get currently configured debug namespaces.
|
|
64
64
|
*
|
|
@@ -69,7 +69,7 @@ export interface DebugController {
|
|
|
69
69
|
*
|
|
70
70
|
* @returns Array of enabled and disabled (prefixed with `-`) debug namespaces
|
|
71
71
|
*/
|
|
72
|
-
get: () => string[];
|
|
72
|
+
readonly get: () => string[];
|
|
73
73
|
/**
|
|
74
74
|
* Set debug namespaces, replacing all previous configurations.
|
|
75
75
|
*
|
|
@@ -83,5 +83,5 @@ export interface DebugController {
|
|
|
83
83
|
*
|
|
84
84
|
* @param namespaces - String or array of namespace patterns
|
|
85
85
|
*/
|
|
86
|
-
set: (namespaces: string | string[]) => void;
|
|
86
|
+
readonly set: (namespaces: string | string[]) => void;
|
|
87
87
|
}
|
|
@@ -23,13 +23,13 @@ export interface DebugSwitch extends DebugSwitchDefinition {
|
|
|
23
23
|
*
|
|
24
24
|
* @returns `true` if the switch is on.
|
|
25
25
|
*/
|
|
26
|
-
isEnabled: () => boolean;
|
|
26
|
+
readonly isEnabled: () => boolean;
|
|
27
27
|
/**
|
|
28
28
|
* Sets the value, notifying the {@link onDebugSwitchChanged} listeners if it changed.
|
|
29
29
|
*
|
|
30
30
|
* @param isEnabled - The new value.
|
|
31
31
|
*/
|
|
32
|
-
setEnabled: (isEnabled: boolean) => void;
|
|
32
|
+
readonly setEnabled: (isEnabled: boolean) => void;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
35
|
* A change of a debug switch's value, passed to an {@link onDebugSwitchChanged} listener.
|
|
@@ -93,4 +93,4 @@ export {
|
|
|
93
93
|
registerDebugSwitch,
|
|
94
94
|
setDebugSwitch
|
|
95
95
|
};
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLXN3aXRjaGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZWdpc3RyeSBvZiBkZWJ1ZyBzd2l0Y2hlczogbmFtZWQsIGFwcC13aWRlIGJvb2xlYW5zIHRoYXQgY2hhbmdlIGJlaGF2aW9yIHdoaWxlIGRlYnVnZ2luZy5cbiAqXG4gKiBBIGRlYnVnIG5hbWVzcGFjZSAoc2VlIGBkZWJ1Zy50c2ApIGNvbnRyb2xzIGxvZ2dpbmcgb25seS4gQmVoYXZpb3IgdGhhdCBzaG91bGQgZGlmZmVyIHdoaWxlIGRlYnVnZ2luZywgc3VjaCBhc1xuICogbm90IHRlcm1pbmF0aW5nIGFuIG9wZXJhdGlvbiBwYXVzZWQgb24gYSBicmVha3BvaW50LCBpcyBhIGRlYnVnIHN3aXRjaCBpbnN0ZWFkLCBzbyB0dXJuaW5nIGxvZ2dpbmcgb24gbmV2ZXJcbiAqIGNoYW5nZXMgd2hhdCB0aGUgY29kZSBkb2VzLlxuICpcbiAqIFRoZSBkZWZpbml0aW9ucywgdGhlIHZhbHVlcyBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnMgYWxsIGxpdmUgaW4gdGhlIHNoYXJlZCBzdGF0ZSBiYWcgKGB0eXBlc2NyaXB0LWxpYi1zdGF0ZS50c2ApXG4gKiBhcyBwbGFpbiBkYXRhLCBzbyBldmVyeSBjb3B5IG9mIHRoaXMgbGlicmFyeSBsb2FkZWQgaW4gb25lIHJlYWxtLCBzdWNoIGFzIHRoZSBjb3B5IGVhY2ggT2JzaWRpYW4gcGx1Z2luIGJ1bmRsZXMsXG4gKiBzZWVzIG9uZSB2YWx1ZSBwZXIgc3dpdGNoLiBBIHRvb2wgc3VjaCBhcyBhIGRlYnVnLXNldHRpbmdzIFVJIGxpc3RzIGV2ZXJ5IHJlZ2lzdGVyZWQgc3dpdGNoIHdpdGhcbiAqIHtAbGluayBnZXREZWJ1Z1N3aXRjaGVzfSBhbmQgbmVlZHMgbm8gY2hhbmdlIHdoZW4gYSBsaWJyYXJ5IG9yIHBsdWdpbiBhZGRzIG9uZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlV3JhcHBlciB9IGZyb20gJy4vdmFsdWUtd3JhcHBlci50cyc7XG5cbmltcG9ydCB7IENhbGxiYWNrRGlzcG9zYWJsZSB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBnZXRUeXBlc2NyaXB0TGliU3RhdGUgfSBmcm9tICcuL3R5cGVzY3JpcHQtbGliLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGhhbmRsZSB0byBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoIGV4dGVuZHMgRGVidWdTd2l0Y2hEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3dpdGNoIGlzIG9uLlxuICAgKi9cbiAgaXNFbmFibGVkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSwgbm90aWZ5aW5nIHRoZSB7QGxpbmsgb25EZWJ1Z1N3aXRjaENoYW5nZWR9IGxpc3RlbmVycyBpZiBpdCBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0gaXNFbmFibGVkIC0gVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHNldEVuYWJsZWQ6IChpc0VuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBjaGFuZ2Ugb2YgYSBkZWJ1ZyBzd2l0Y2gncyB2YWx1ZSwgcGFzc2VkIHRvIGFuIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVidWdTd2l0Y2hDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBzd2l0Y2ggdGhhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2Yge0BsaW5rIG9uRGVidWdTd2l0Y2hDaGFuZ2VkfS5cbiAqL1xuZXhwb3J0IHR5cGUgRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lciA9IChjaGFuZ2U6IERlYnVnU3dpdGNoQ2hhbmdlKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBzd2l0Y2ggZG9lcywgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkLCBuYW1lc3BhY2VkIGJ5IHRoZSBsaWJyYXJ5IG9yIHBsdWdpbiB0aGF0IG93bnMgdGhlIHN3aXRjaCwgZS5nLlxuICAgKiBgdHlwZXNjcmlwdC1saWI6dGVybWluYXRlLW9uLXRpbWVvdXRgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSBzd2l0Y2ggaGFzIHVudGlsIHNvbWV0aGluZyBzZXRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkQnlEZWZhdWx0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSwgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8vIEEgc3dpdGNoIHdob3NlIHZhbHVlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkga2VwdCB1bmRlciBpdHMgb3duIHNoYXJlZC1zdGF0ZSBrZXkga2VlcHMgdGhhdCBrZXksIHNvIGFcbi8vIGNvcHkgb2YgdGhhdCB2ZXJzaW9uIGxvYWRlZCBiZXNpZGUgdGhpcyBvbmUgc3RpbGwgcmVhZHMgYW5kIHdyaXRlcyB0aGUgc2FtZSB2YWx1ZS5cbmNvbnN0IExFR0FDWV9TVEFURV9LRVlTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JzogJ2lzVGVybWluYXRpb25PblRpbWVvdXRFbmFibGVkJ1xufTtcblxuY29uc3QgVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTjogRGVidWdTd2l0Y2hEZWZpbml0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogJ1Rlcm1pbmF0ZSBhbiBvcGVyYXRpb24gdGhhdCB0aW1lcyBvdXQuIFN3aXRjaCBpdCBvZmYgc28gYW4gb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQga2VlcHMgcnVubmluZy4nLFxuICBpZDogJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JyxcbiAgaXNFbmFibGVkQnlEZWZhdWx0OiB0cnVlLFxuICBuYW1lOiAnVGVybWluYXRlIG9wZXJhdGlvbnMgb24gdGltZW91dCdcbn07XG5cbi8vIFRoaXMgbGlicmFyeSdzIG93biBzd2l0Y2hlcywgYWx3YXlzIHJlZ2lzdGVyZWQsIHNvIGEgc2V0dGluZ3MgVUkgbGlzdHMgdGhlbSBiZWZvcmUgYW55IGNvZGUgdGhhdCByZWFkcyB0aGVtIHJ1bnMuXG5jb25zdCBCVUlMVF9JTl9ERUZJTklUSU9OUzogcmVhZG9ubHkgRGVidWdTd2l0Y2hEZWZpbml0aW9uW10gPSBbVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTl07XG5cbi8qKlxuICogR2V0cyBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHJldHVybnMgVGhlIHN3aXRjaCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3dpdGNoIHdpdGggdGhhdCBpZCBpcyByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2goaWQ6IHN0cmluZyk6IERlYnVnU3dpdGNoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgcmV0dXJuIGRlZmluaXRpb24gPyBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbikgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyBldmVyeSByZWdpc3RlcmVkIGRlYnVnIHN3aXRjaCwgc29ydGVkIGJ5IGlkLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RlcmVkIHN3aXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2hlcygpOiBEZWJ1Z1N3aXRjaFtdIHtcbiAgcmV0dXJuIFsuLi5nZXREZWZpbml0aW9ucygpLnZhbHVlcygpXVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLmlkLmxvY2FsZUNvbXBhcmUoYi5pZCkpXG4gICAgLm1hcCgoZGVmaW5pdGlvbikgPT4gY3JlYXRlSGFuZGxlKGRlZmluaXRpb24pKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWJ1ZyBzd2l0Y2ggdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBgcnVuV2l0aFRpbWVvdXRgIGNhbGwgd2l0aG91dCBpdHMgb3duIGBvblRpbWVvdXRgIHRlcm1pbmF0ZXMgdGhlXG4gKiBvcGVyYXRpb24gd2hlbiBpdCB0aW1lcyBvdXQuXG4gKlxuICogSXRzIGlkIGlzIGB0eXBlc2NyaXB0LWxpYjp0ZXJtaW5hdGUtb24tdGltZW91dGAgYW5kIGl0IGlzIG9uIGJ5IGRlZmF1bHQuIFN3aXRjaCBpdCBvZmYgd2hpbGUgZGVidWdnaW5nLCBzbyBhblxuICogb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQgaXMgbm90IHRlcm1pbmF0ZWQgdW5kZXIgdGhlIGRlYnVnZ2VyLiBUaGUgdGltZW91dCBpcyBzdGlsbCBsb2dnZWQgdGhyb3VnaCB0aGVcbiAqIGBBc3luYzpydW5XaXRoVGltZW91dGAgZGVidWdnZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGRlYnVnIHN3aXRjaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoKCk6IERlYnVnU3dpdGNoIHtcbiAgcmV0dXJuIHJlZ2lzdGVyRGVidWdTd2l0Y2goVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTik7XG59XG5cbi8qKlxuICogQWRkcyBhIGxpc3RlbmVyIGNhbGxlZCB3aGVuZXZlciBhIGRlYnVnIHN3aXRjaCdzIHZhbHVlIGNoYW5nZXMsIGluIGFueSBsb2FkZWQgY29weSBvZiB0aGlzIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIGxpc3RlbmVyIC0gVGhlIGxpc3RlbmVyLlxuICogQHJldHVybnMgQSBkaXNwb3NhYmxlIHRoYXQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkRlYnVnU3dpdGNoQ2hhbmdlZChsaXN0ZW5lcjogRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcik6IERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycygpO1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBkZWJ1ZyBzd2l0Y2guXG4gKlxuICogUmVnaXN0ZXJpbmcgYW4gaWQgYWdhaW4gaXMgaWRlbXBvdGVudDogdGhlIGZpcnN0IGRlZmluaXRpb24gaXMga2VwdCwgYW5kIHRoZSByZXR1cm5lZCBoYW5kbGUgcmVhZHMgdGhlIHNhbWVcbiAqIHZhbHVlLiBBIHZhbHVlIHNldCB3aXRoIHtAbGluayBzZXREZWJ1Z1N3aXRjaH0gYmVmb3JlIHRoZSBzd2l0Y2ggd2FzIHJlZ2lzdGVyZWQgaXMga2VwdCwgbm90IHJlc2V0IHRvIHRoZVxuICogZGVmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZGVmaW5pdGlvbiAtIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzd2l0Y2guXG4gKiBAcmV0dXJucyBUaGUgaGFuZGxlIHRvIHRoZSBzd2l0Y2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlYnVnU3dpdGNoKGRlZmluaXRpb246IERlYnVnU3dpdGNoRGVmaW5pdGlvbik6IERlYnVnU3dpdGNoIHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpO1xuICBsZXQgcmVnaXN0ZXJlZERlZmluaXRpb24gPSBkZWZpbml0aW9ucy5nZXQoZGVmaW5pdGlvbi5pZCk7XG4gIGlmICghcmVnaXN0ZXJlZERlZmluaXRpb24pIHtcbiAgICByZWdpc3RlcmVkRGVmaW5pdGlvbiA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWZpbml0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgaWQ6IGRlZmluaXRpb24uaWQsXG4gICAgICBpc0VuYWJsZWRCeURlZmF1bHQ6IGRlZmluaXRpb24uaXNFbmFibGVkQnlEZWZhdWx0LFxuICAgICAgbmFtZTogZGVmaW5pdGlvbi5uYW1lXG4gICAgfTtcbiAgICBkZWZpbml0aW9ucy5zZXQoZGVmaW5pdGlvbi5pZCwgcmVnaXN0ZXJlZERlZmluaXRpb24pO1xuICB9XG4gIHJldHVybiBjcmVhdGVIYW5kbGUocmVnaXN0ZXJlZERlZmluaXRpb24pO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGEgZGVidWcgc3dpdGNoLCBub3RpZnlpbmcgdGhlIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXJzIGlmIGl0IGNoYW5nZWQuXG4gKlxuICogVGhlIHN3aXRjaCBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgeWV0OiB0aGUgdmFsdWUgaXMga2VwdCwgYW5kIHRoZSBzd2l0Y2ggdGFrZXMgaXQgd2hlbiBpdCByZWdpc3RlcnMuIFRoYXRcbiAqIGxldHMgYSBzZXR0aW5ncyBzdG9yZSByZS1hcHBseSBzYXZlZCB2YWx1ZXMgYmVmb3JlIGV2ZXJ5IGxpYnJhcnkgb3IgcGx1Z2luIHRoYXQgb3ducyBhIHN3aXRjaCBoYXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHBhcmFtIGlzRW5hYmxlZCAtIFRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWJ1Z1N3aXRjaChpZDogc3RyaW5nLCBpc0VuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgLy8gQW4gdW5yZWdpc3RlcmVkIHN3aXRjaCB3aXRoIG5vIHZhbHVlIHlldCBoYXMgbm8gcHJldmlvdXMgdmFsdWUsIHNvIGl0cyBmaXJzdCBzZXQgY291bnRzIGFzIGEgY2hhbmdlLlxuICBjb25zdCB3cmFwcGVyID0gZ2V0VmFsdWVXcmFwcGVyKGlkLCBkZWZpbml0aW9uPy5pc0VuYWJsZWRCeURlZmF1bHQgPz8gIWlzRW5hYmxlZCk7XG4gIGlmICh3cmFwcGVyLnZhbHVlID09PSBpc0VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd3JhcHBlci52YWx1ZSA9IGlzRW5hYmxlZDtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBnZXRMaXN0ZW5lcnMoKSkge1xuICAgIGxpc3RlbmVyKHsgaWQsIGlzRW5hYmxlZCB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbjogRGVidWdTd2l0Y2hEZWZpbml0aW9uKTogRGVidWdTd2l0Y2gge1xuICByZXR1cm4ge1xuICAgIC4uLmRlZmluaXRpb24sXG4gICAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGdldFZhbHVlV3JhcHBlcihkZWZpbml0aW9uLmlkLCBkZWZpbml0aW9uLmlzRW5hYmxlZEJ5RGVmYXVsdCkudmFsdWU7XG4gICAgfSxcbiAgICBzZXRFbmFibGVkKGlzRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgc2V0RGVidWdTd2l0Y2goZGVmaW5pdGlvbi5pZCwgaXNFbmFibGVkKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25zKCk6IE1hcDxzdHJpbmcsIERlYnVnU3dpdGNoRGVmaW5pdGlvbj4ge1xuICBjb25zdCBkZWZpbml0aW9ucyA9IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSgnZGVidWdTd2l0Y2hEZWZpbml0aW9ucycsIG5ldyBNYXA8c3RyaW5nLCBEZWJ1Z1N3aXRjaERlZmluaXRpb24+KCkpLnZhbHVlO1xuICAvLyBDaGVja2VkIG9uIGV2ZXJ5IHJlYWQsIGJlY2F1c2UgdGhlIG1hcCBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgYSBjb3B5IG9mIHRoaXMgbGlicmFyeSB0aGF0IHByZWRhdGVzIGEgc3dpdGNoLlxuICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgQlVJTFRfSU5fREVGSU5JVElPTlMpIHtcbiAgICBpZiAoIWRlZmluaXRpb25zLmhhcyhkZWZpbml0aW9uLmlkKSkge1xuICAgICAgZGVmaW5pdGlvbnMuc2V0KGRlZmluaXRpb24uaWQsIGRlZmluaXRpb24pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmaW5pdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycygpOiBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1Z1N3aXRjaExpc3RlbmVycycsIG5ldyBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4oKSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlV3JhcHBlcihpZDogc3RyaW5nLCBpc0VuYWJsZWRCeURlZmF1bHQ6IGJvb2xlYW4pOiBWYWx1ZVdyYXBwZXI8Ym9vbGVhbj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKExFR0FDWV9TVEFURV9LRVlTW2lkXSA/PyBgZGVidWdTd2l0Y2g6JHtpZH1gLCBpc0VuYWJsZWRCeURlZmF1bHQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFrQkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyw2QkFBNkI7QUFxRXRDLE1BQU0sb0JBQXNEO0FBQUEsRUFDMUQsdUNBQXVDO0FBQ3pDO0FBRUEsTUFBTSxrQ0FBeUQ7QUFBQSxFQUM3RCxhQUFhO0FBQUEsRUFDYixJQUFJO0FBQUEsRUFDSixvQkFBb0I7QUFBQSxFQUNwQixNQUFNO0FBQ1I7QUFHQSxNQUFNLHVCQUF5RCxDQUFDLCtCQUErQjtBQVF4RixTQUFTLGVBQWUsSUFBcUM7QUFDbEUsUUFBTSxhQUFhLGVBQWUsRUFBRSxJQUFJLEVBQUU7QUFDMUMsU0FBTyxhQUFhLGFBQWEsVUFBVSxJQUFJO0FBQ2pEO0FBT08sU0FBUyxtQkFBa0M7QUFDaEQsU0FBTyxDQUFDLEdBQUcsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUNqQyxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxlQUFlLGFBQWEsVUFBVSxDQUFDO0FBQ2pEO0FBWU8sU0FBUyxtQ0FBZ0Q7QUFDOUQsU0FBTyxvQkFBb0IsK0JBQStCO0FBQzVEO0FBUU8sU0FBUyxxQkFBcUIsVUFBbUQ7QUFDdEYsUUFBTSxZQUFZLGFBQWE7QUFDL0IsWUFBVSxJQUFJLFFBQVE7QUFDdEIsU0FBTyxJQUFJLG1CQUFtQjtBQUFBLElBQzVCLFdBQWlCO0FBQ2YsZ0JBQVUsT0FBTyxRQUFRO0FBQUEsSUFDM0I7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVlPLFNBQVMsb0JBQW9CLFlBQWdEO0FBQ2xGLFFBQU0sY0FBYyxlQUFlO0FBQ25DLE1BQUksdUJBQXVCLFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDeEQsTUFBSSxDQUFDLHNCQUFzQjtBQUN6QiwyQkFBdUI7QUFBQSxNQUNyQixhQUFhLFdBQVc7QUFBQSxNQUN4QixJQUFJLFdBQVc7QUFBQSxNQUNmLG9CQUFvQixXQUFXO0FBQUEsTUFDL0IsTUFBTSxXQUFXO0FBQUEsSUFDbkI7QUFDQSxnQkFBWSxJQUFJLFdBQVcsSUFBSSxvQkFBb0I7QUFBQSxFQUNyRDtBQUNBLFNBQU8sYUFBYSxvQkFBb0I7QUFDMUM7QUFXTyxTQUFTLGVBQWUsSUFBWSxXQUEwQjtBQUNuRSxRQUFNLGFBQWEsZUFBZSxFQUFFLElBQUksRUFBRTtBQUUxQyxRQUFNLFVBQVUsZ0JBQWdCLElBQUksWUFBWSxzQkFBc0IsQ0FBQyxTQUFTO0FBQ2hGLE1BQUksUUFBUSxVQUFVLFdBQVc7QUFDL0I7QUFBQSxFQUNGO0FBQ0EsVUFBUSxRQUFRO0FBQ2hCLGFBQVcsWUFBWSxhQUFhLEdBQUc7QUFDckMsYUFBUyxFQUFFLElBQUksVUFBVSxDQUFDO0FBQUEsRUFDNUI7QUFDRjtBQUVBLFNBQVMsYUFBYSxZQUFnRDtBQUNwRSxTQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCxZQUFxQjtBQUNuQixhQUFPLGdCQUFnQixXQUFXLElBQUksV0FBVyxrQkFBa0IsRUFBRTtBQUFBLElBQ3ZFO0FBQUEsSUFDQSxXQUFXLFdBQTBCO0FBQ25DLHFCQUFlLFdBQVcsSUFBSSxTQUFTO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGlCQUFxRDtBQUM1RCxRQUFNLGNBQWMsc0JBQXNCLDBCQUEwQixvQkFBSSxJQUFtQyxDQUFDLEVBQUU7QUFFOUcsYUFBVyxjQUFjLHNCQUFzQjtBQUM3QyxRQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsRUFBRSxHQUFHO0FBQ25DLGtCQUFZLElBQUksV0FBVyxJQUFJLFVBQVU7QUFBQSxJQUMzQztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGVBQStDO0FBQ3RELFNBQU8sc0JBQXNCLHdCQUF3QixvQkFBSSxJQUErQixDQUFDLEVBQUU7QUFDN0Y7QUFFQSxTQUFTLGdCQUFnQixJQUFZLG9CQUFvRDtBQUN2RixTQUFPLHNCQUFzQixrQkFBa0IsRUFBRSxLQUFLLGVBQWUsRUFBRSxJQUFJLGtCQUFrQjtBQUMvRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlYnVnLXN3aXRjaGVzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogQSByZWdpc3RyeSBvZiBkZWJ1ZyBzd2l0Y2hlczogbmFtZWQsIGFwcC13aWRlIGJvb2xlYW5zIHRoYXQgY2hhbmdlIGJlaGF2aW9yIHdoaWxlIGRlYnVnZ2luZy5cbiAqXG4gKiBBIGRlYnVnIG5hbWVzcGFjZSAoc2VlIGBkZWJ1Zy50c2ApIGNvbnRyb2xzIGxvZ2dpbmcgb25seS4gQmVoYXZpb3IgdGhhdCBzaG91bGQgZGlmZmVyIHdoaWxlIGRlYnVnZ2luZywgc3VjaCBhc1xuICogbm90IHRlcm1pbmF0aW5nIGFuIG9wZXJhdGlvbiBwYXVzZWQgb24gYSBicmVha3BvaW50LCBpcyBhIGRlYnVnIHN3aXRjaCBpbnN0ZWFkLCBzbyB0dXJuaW5nIGxvZ2dpbmcgb24gbmV2ZXJcbiAqIGNoYW5nZXMgd2hhdCB0aGUgY29kZSBkb2VzLlxuICpcbiAqIFRoZSBkZWZpbml0aW9ucywgdGhlIHZhbHVlcyBhbmQgdGhlIGNoYW5nZSBsaXN0ZW5lcnMgYWxsIGxpdmUgaW4gdGhlIHNoYXJlZCBzdGF0ZSBiYWcgKGB0eXBlc2NyaXB0LWxpYi1zdGF0ZS50c2ApXG4gKiBhcyBwbGFpbiBkYXRhLCBzbyBldmVyeSBjb3B5IG9mIHRoaXMgbGlicmFyeSBsb2FkZWQgaW4gb25lIHJlYWxtLCBzdWNoIGFzIHRoZSBjb3B5IGVhY2ggT2JzaWRpYW4gcGx1Z2luIGJ1bmRsZXMsXG4gKiBzZWVzIG9uZSB2YWx1ZSBwZXIgc3dpdGNoLiBBIHRvb2wgc3VjaCBhcyBhIGRlYnVnLXNldHRpbmdzIFVJIGxpc3RzIGV2ZXJ5IHJlZ2lzdGVyZWQgc3dpdGNoIHdpdGhcbiAqIHtAbGluayBnZXREZWJ1Z1N3aXRjaGVzfSBhbmQgbmVlZHMgbm8gY2hhbmdlIHdoZW4gYSBsaWJyYXJ5IG9yIHBsdWdpbiBhZGRzIG9uZS5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IERpc3Bvc2FibGVFeCB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlV3JhcHBlciB9IGZyb20gJy4vdmFsdWUtd3JhcHBlci50cyc7XG5cbmltcG9ydCB7IENhbGxiYWNrRGlzcG9zYWJsZSB9IGZyb20gJy4vZGlzcG9zYWJsZS50cyc7XG5pbXBvcnQgeyBnZXRUeXBlc2NyaXB0TGliU3RhdGUgfSBmcm9tICcuL3R5cGVzY3JpcHQtbGliLXN0YXRlLnRzJztcblxuLyoqXG4gKiBBIGhhbmRsZSB0byBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoIGV4dGVuZHMgRGVidWdTd2l0Y2hEZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIEdldHMgdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgc3dpdGNoIGlzIG9uLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkOiAoKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSB2YWx1ZSwgbm90aWZ5aW5nIHRoZSB7QGxpbmsgb25EZWJ1Z1N3aXRjaENoYW5nZWR9IGxpc3RlbmVycyBpZiBpdCBjaGFuZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0gaXNFbmFibGVkIC0gVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNldEVuYWJsZWQ6IChpc0VuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG59XG5cbi8qKlxuICogQSBjaGFuZ2Ugb2YgYSBkZWJ1ZyBzd2l0Y2gncyB2YWx1ZSwgcGFzc2VkIHRvIGFuIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVidWdTd2l0Y2hDaGFuZ2Uge1xuICAvKipcbiAgICogVGhlIGlkIG9mIHRoZSBzd2l0Y2ggdGhhdCBjaGFuZ2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5ldyB2YWx1ZS5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgbGlzdGVuZXIgb2Yge0BsaW5rIG9uRGVidWdTd2l0Y2hDaGFuZ2VkfS5cbiAqL1xuZXhwb3J0IHR5cGUgRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lciA9IChjaGFuZ2U6IERlYnVnU3dpdGNoQ2hhbmdlKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBkZWZpbml0aW9uIG9mIGEgZGVidWcgc3dpdGNoLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlYnVnU3dpdGNoRGVmaW5pdGlvbiB7XG4gIC8qKlxuICAgKiBXaGF0IHRoZSBzd2l0Y2ggZG9lcywgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkLCBuYW1lc3BhY2VkIGJ5IHRoZSBsaWJyYXJ5IG9yIHBsdWdpbiB0aGF0IG93bnMgdGhlIHN3aXRjaCwgZS5nLlxuICAgKiBgdHlwZXNjcmlwdC1saWI6dGVybWluYXRlLW9uLXRpbWVvdXRgLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZhbHVlIHRoZSBzd2l0Y2ggaGFzIHVudGlsIHNvbWV0aGluZyBzZXRzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgaXNFbmFibGVkQnlEZWZhdWx0OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgaHVtYW4tcmVhZGFibGUgbmFtZSwgZm9yIGEgc2V0dGluZ3MgVUkuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8vIEEgc3dpdGNoIHdob3NlIHZhbHVlIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGlzIGxpYnJhcnkga2VwdCB1bmRlciBpdHMgb3duIHNoYXJlZC1zdGF0ZSBrZXkga2VlcHMgdGhhdCBrZXksIHNvIGFcbi8vIGNvcHkgb2YgdGhhdCB2ZXJzaW9uIGxvYWRlZCBiZXNpZGUgdGhpcyBvbmUgc3RpbGwgcmVhZHMgYW5kIHdyaXRlcyB0aGUgc2FtZSB2YWx1ZS5cbmNvbnN0IExFR0FDWV9TVEFURV9LRVlTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiA9IHtcbiAgJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JzogJ2lzVGVybWluYXRpb25PblRpbWVvdXRFbmFibGVkJ1xufTtcblxuY29uc3QgVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTjogRGVidWdTd2l0Y2hEZWZpbml0aW9uID0ge1xuICBkZXNjcmlwdGlvbjogJ1Rlcm1pbmF0ZSBhbiBvcGVyYXRpb24gdGhhdCB0aW1lcyBvdXQuIFN3aXRjaCBpdCBvZmYgc28gYW4gb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQga2VlcHMgcnVubmluZy4nLFxuICBpZDogJ3R5cGVzY3JpcHQtbGliOnRlcm1pbmF0ZS1vbi10aW1lb3V0JyxcbiAgaXNFbmFibGVkQnlEZWZhdWx0OiB0cnVlLFxuICBuYW1lOiAnVGVybWluYXRlIG9wZXJhdGlvbnMgb24gdGltZW91dCdcbn07XG5cbi8vIFRoaXMgbGlicmFyeSdzIG93biBzd2l0Y2hlcywgYWx3YXlzIHJlZ2lzdGVyZWQsIHNvIGEgc2V0dGluZ3MgVUkgbGlzdHMgdGhlbSBiZWZvcmUgYW55IGNvZGUgdGhhdCByZWFkcyB0aGVtIHJ1bnMuXG5jb25zdCBCVUlMVF9JTl9ERUZJTklUSU9OUzogcmVhZG9ubHkgRGVidWdTd2l0Y2hEZWZpbml0aW9uW10gPSBbVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTl07XG5cbi8qKlxuICogR2V0cyBhIHJlZ2lzdGVyZWQgZGVidWcgc3dpdGNoLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHJldHVybnMgVGhlIHN3aXRjaCwgb3IgYHVuZGVmaW5lZGAgaWYgbm8gc3dpdGNoIHdpdGggdGhhdCBpZCBpcyByZWdpc3RlcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2goaWQ6IHN0cmluZyk6IERlYnVnU3dpdGNoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgcmV0dXJuIGRlZmluaXRpb24gPyBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbikgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2V0cyBldmVyeSByZWdpc3RlcmVkIGRlYnVnIHN3aXRjaCwgc29ydGVkIGJ5IGlkLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RlcmVkIHN3aXRjaGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVidWdTd2l0Y2hlcygpOiBEZWJ1Z1N3aXRjaFtdIHtcbiAgcmV0dXJuIFsuLi5nZXREZWZpbml0aW9ucygpLnZhbHVlcygpXVxuICAgIC5zb3J0KChhLCBiKSA9PiBhLmlkLmxvY2FsZUNvbXBhcmUoYi5pZCkpXG4gICAgLm1hcCgoZGVmaW5pdGlvbikgPT4gY3JlYXRlSGFuZGxlKGRlZmluaXRpb24pKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWJ1ZyBzd2l0Y2ggdGhhdCBkZWNpZGVzIHdoZXRoZXIgYSBgcnVuV2l0aFRpbWVvdXRgIGNhbGwgd2l0aG91dCBpdHMgb3duIGBvblRpbWVvdXRgIHRlcm1pbmF0ZXMgdGhlXG4gKiBvcGVyYXRpb24gd2hlbiBpdCB0aW1lcyBvdXQuXG4gKlxuICogSXRzIGlkIGlzIGB0eXBlc2NyaXB0LWxpYjp0ZXJtaW5hdGUtb24tdGltZW91dGAgYW5kIGl0IGlzIG9uIGJ5IGRlZmF1bHQuIFN3aXRjaCBpdCBvZmYgd2hpbGUgZGVidWdnaW5nLCBzbyBhblxuICogb3BlcmF0aW9uIHBhdXNlZCBvbiBhIGJyZWFrcG9pbnQgaXMgbm90IHRlcm1pbmF0ZWQgdW5kZXIgdGhlIGRlYnVnZ2VyLiBUaGUgdGltZW91dCBpcyBzdGlsbCBsb2dnZWQgdGhyb3VnaCB0aGVcbiAqIGBBc3luYzpydW5XaXRoVGltZW91dGAgZGVidWdnZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGRlYnVnIHN3aXRjaC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRlcm1pbmF0ZU9uVGltZW91dERlYnVnU3dpdGNoKCk6IERlYnVnU3dpdGNoIHtcbiAgcmV0dXJuIHJlZ2lzdGVyRGVidWdTd2l0Y2goVEVSTUlOQVRFX09OX1RJTUVPVVRfREVGSU5JVElPTik7XG59XG5cbi8qKlxuICogQWRkcyBhIGxpc3RlbmVyIGNhbGxlZCB3aGVuZXZlciBhIGRlYnVnIHN3aXRjaCdzIHZhbHVlIGNoYW5nZXMsIGluIGFueSBsb2FkZWQgY29weSBvZiB0aGlzIGxpYnJhcnkuXG4gKlxuICogQHBhcmFtIGxpc3RlbmVyIC0gVGhlIGxpc3RlbmVyLlxuICogQHJldHVybnMgQSBkaXNwb3NhYmxlIHRoYXQgcmVtb3ZlcyB0aGUgbGlzdGVuZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvbkRlYnVnU3dpdGNoQ2hhbmdlZChsaXN0ZW5lcjogRGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcik6IERpc3Bvc2FibGVFeCB7XG4gIGNvbnN0IGxpc3RlbmVycyA9IGdldExpc3RlbmVycygpO1xuICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrKCk6IHZvaWQge1xuICAgICAgbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBkZWJ1ZyBzd2l0Y2guXG4gKlxuICogUmVnaXN0ZXJpbmcgYW4gaWQgYWdhaW4gaXMgaWRlbXBvdGVudDogdGhlIGZpcnN0IGRlZmluaXRpb24gaXMga2VwdCwgYW5kIHRoZSByZXR1cm5lZCBoYW5kbGUgcmVhZHMgdGhlIHNhbWVcbiAqIHZhbHVlLiBBIHZhbHVlIHNldCB3aXRoIHtAbGluayBzZXREZWJ1Z1N3aXRjaH0gYmVmb3JlIHRoZSBzd2l0Y2ggd2FzIHJlZ2lzdGVyZWQgaXMga2VwdCwgbm90IHJlc2V0IHRvIHRoZVxuICogZGVmYXVsdC5cbiAqXG4gKiBAcGFyYW0gZGVmaW5pdGlvbiAtIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBzd2l0Y2guXG4gKiBAcmV0dXJucyBUaGUgaGFuZGxlIHRvIHRoZSBzd2l0Y2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckRlYnVnU3dpdGNoKGRlZmluaXRpb246IERlYnVnU3dpdGNoRGVmaW5pdGlvbik6IERlYnVnU3dpdGNoIHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucygpO1xuICBsZXQgcmVnaXN0ZXJlZERlZmluaXRpb24gPSBkZWZpbml0aW9ucy5nZXQoZGVmaW5pdGlvbi5pZCk7XG4gIGlmICghcmVnaXN0ZXJlZERlZmluaXRpb24pIHtcbiAgICByZWdpc3RlcmVkRGVmaW5pdGlvbiA9IHtcbiAgICAgIGRlc2NyaXB0aW9uOiBkZWZpbml0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgaWQ6IGRlZmluaXRpb24uaWQsXG4gICAgICBpc0VuYWJsZWRCeURlZmF1bHQ6IGRlZmluaXRpb24uaXNFbmFibGVkQnlEZWZhdWx0LFxuICAgICAgbmFtZTogZGVmaW5pdGlvbi5uYW1lXG4gICAgfTtcbiAgICBkZWZpbml0aW9ucy5zZXQoZGVmaW5pdGlvbi5pZCwgcmVnaXN0ZXJlZERlZmluaXRpb24pO1xuICB9XG4gIHJldHVybiBjcmVhdGVIYW5kbGUocmVnaXN0ZXJlZERlZmluaXRpb24pO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGEgZGVidWcgc3dpdGNoLCBub3RpZnlpbmcgdGhlIHtAbGluayBvbkRlYnVnU3dpdGNoQ2hhbmdlZH0gbGlzdGVuZXJzIGlmIGl0IGNoYW5nZWQuXG4gKlxuICogVGhlIHN3aXRjaCBkb2VzIG5vdCBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgeWV0OiB0aGUgdmFsdWUgaXMga2VwdCwgYW5kIHRoZSBzd2l0Y2ggdGFrZXMgaXQgd2hlbiBpdCByZWdpc3RlcnMuIFRoYXRcbiAqIGxldHMgYSBzZXR0aW5ncyBzdG9yZSByZS1hcHBseSBzYXZlZCB2YWx1ZXMgYmVmb3JlIGV2ZXJ5IGxpYnJhcnkgb3IgcGx1Z2luIHRoYXQgb3ducyBhIHN3aXRjaCBoYXMgbG9hZGVkLlxuICpcbiAqIEBwYXJhbSBpZCAtIFRoZSBpZCBvZiB0aGUgc3dpdGNoLlxuICogQHBhcmFtIGlzRW5hYmxlZCAtIFRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWJ1Z1N3aXRjaChpZDogc3RyaW5nLCBpc0VuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGdldERlZmluaXRpb25zKCkuZ2V0KGlkKTtcbiAgLy8gQW4gdW5yZWdpc3RlcmVkIHN3aXRjaCB3aXRoIG5vIHZhbHVlIHlldCBoYXMgbm8gcHJldmlvdXMgdmFsdWUsIHNvIGl0cyBmaXJzdCBzZXQgY291bnRzIGFzIGEgY2hhbmdlLlxuICBjb25zdCB3cmFwcGVyID0gZ2V0VmFsdWVXcmFwcGVyKGlkLCBkZWZpbml0aW9uPy5pc0VuYWJsZWRCeURlZmF1bHQgPz8gIWlzRW5hYmxlZCk7XG4gIGlmICh3cmFwcGVyLnZhbHVlID09PSBpc0VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd3JhcHBlci52YWx1ZSA9IGlzRW5hYmxlZDtcbiAgZm9yIChjb25zdCBsaXN0ZW5lciBvZiBnZXRMaXN0ZW5lcnMoKSkge1xuICAgIGxpc3RlbmVyKHsgaWQsIGlzRW5hYmxlZCB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVIYW5kbGUoZGVmaW5pdGlvbjogRGVidWdTd2l0Y2hEZWZpbml0aW9uKTogRGVidWdTd2l0Y2gge1xuICByZXR1cm4ge1xuICAgIC4uLmRlZmluaXRpb24sXG4gICAgaXNFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIGdldFZhbHVlV3JhcHBlcihkZWZpbml0aW9uLmlkLCBkZWZpbml0aW9uLmlzRW5hYmxlZEJ5RGVmYXVsdCkudmFsdWU7XG4gICAgfSxcbiAgICBzZXRFbmFibGVkKGlzRW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgc2V0RGVidWdTd2l0Y2goZGVmaW5pdGlvbi5pZCwgaXNFbmFibGVkKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldERlZmluaXRpb25zKCk6IE1hcDxzdHJpbmcsIERlYnVnU3dpdGNoRGVmaW5pdGlvbj4ge1xuICBjb25zdCBkZWZpbml0aW9ucyA9IGdldFR5cGVzY3JpcHRMaWJTdGF0ZSgnZGVidWdTd2l0Y2hEZWZpbml0aW9ucycsIG5ldyBNYXA8c3RyaW5nLCBEZWJ1Z1N3aXRjaERlZmluaXRpb24+KCkpLnZhbHVlO1xuICAvLyBDaGVja2VkIG9uIGV2ZXJ5IHJlYWQsIGJlY2F1c2UgdGhlIG1hcCBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkgYSBjb3B5IG9mIHRoaXMgbGlicmFyeSB0aGF0IHByZWRhdGVzIGEgc3dpdGNoLlxuICBmb3IgKGNvbnN0IGRlZmluaXRpb24gb2YgQlVJTFRfSU5fREVGSU5JVElPTlMpIHtcbiAgICBpZiAoIWRlZmluaXRpb25zLmhhcyhkZWZpbml0aW9uLmlkKSkge1xuICAgICAgZGVmaW5pdGlvbnMuc2V0KGRlZmluaXRpb24uaWQsIGRlZmluaXRpb24pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGVmaW5pdGlvbnM7XG59XG5cbmZ1bmN0aW9uIGdldExpc3RlbmVycygpOiBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKCdkZWJ1Z1N3aXRjaExpc3RlbmVycycsIG5ldyBTZXQ8RGVidWdTd2l0Y2hDaGFuZ2VMaXN0ZW5lcj4oKSkudmFsdWU7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlV3JhcHBlcihpZDogc3RyaW5nLCBpc0VuYWJsZWRCeURlZmF1bHQ6IGJvb2xlYW4pOiBWYWx1ZVdyYXBwZXI8Ym9vbGVhbj4ge1xuICByZXR1cm4gZ2V0VHlwZXNjcmlwdExpYlN0YXRlKExFR0FDWV9TVEFURV9LRVlTW2lkXSA/PyBgZGVidWdTd2l0Y2g6JHtpZH1gLCBpc0VuYWJsZWRCeURlZmF1bHQpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFrQkEsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyw2QkFBNkI7QUFxRXRDLE1BQU0sb0JBQXNEO0FBQUEsRUFDMUQsdUNBQXVDO0FBQ3pDO0FBRUEsTUFBTSxrQ0FBeUQ7QUFBQSxFQUM3RCxhQUFhO0FBQUEsRUFDYixJQUFJO0FBQUEsRUFDSixvQkFBb0I7QUFBQSxFQUNwQixNQUFNO0FBQ1I7QUFHQSxNQUFNLHVCQUF5RCxDQUFDLCtCQUErQjtBQVF4RixTQUFTLGVBQWUsSUFBcUM7QUFDbEUsUUFBTSxhQUFhLGVBQWUsRUFBRSxJQUFJLEVBQUU7QUFDMUMsU0FBTyxhQUFhLGFBQWEsVUFBVSxJQUFJO0FBQ2pEO0FBT08sU0FBUyxtQkFBa0M7QUFDaEQsU0FBTyxDQUFDLEdBQUcsZUFBZSxFQUFFLE9BQU8sQ0FBQyxFQUNqQyxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxjQUFjLEVBQUUsRUFBRSxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxlQUFlLGFBQWEsVUFBVSxDQUFDO0FBQ2pEO0FBWU8sU0FBUyxtQ0FBZ0Q7QUFDOUQsU0FBTyxvQkFBb0IsK0JBQStCO0FBQzVEO0FBUU8sU0FBUyxxQkFBcUIsVUFBbUQ7QUFDdEYsUUFBTSxZQUFZLGFBQWE7QUFDL0IsWUFBVSxJQUFJLFFBQVE7QUFDdEIsU0FBTyxJQUFJLG1CQUFtQjtBQUFBLElBQzVCLFdBQWlCO0FBQ2YsZ0JBQVUsT0FBTyxRQUFRO0FBQUEsSUFDM0I7QUFBQSxFQUNGLENBQUM7QUFDSDtBQVlPLFNBQVMsb0JBQW9CLFlBQWdEO0FBQ2xGLFFBQU0sY0FBYyxlQUFlO0FBQ25DLE1BQUksdUJBQXVCLFlBQVksSUFBSSxXQUFXLEVBQUU7QUFDeEQsTUFBSSxDQUFDLHNCQUFzQjtBQUN6QiwyQkFBdUI7QUFBQSxNQUNyQixhQUFhLFdBQVc7QUFBQSxNQUN4QixJQUFJLFdBQVc7QUFBQSxNQUNmLG9CQUFvQixXQUFXO0FBQUEsTUFDL0IsTUFBTSxXQUFXO0FBQUEsSUFDbkI7QUFDQSxnQkFBWSxJQUFJLFdBQVcsSUFBSSxvQkFBb0I7QUFBQSxFQUNyRDtBQUNBLFNBQU8sYUFBYSxvQkFBb0I7QUFDMUM7QUFXTyxTQUFTLGVBQWUsSUFBWSxXQUEwQjtBQUNuRSxRQUFNLGFBQWEsZUFBZSxFQUFFLElBQUksRUFBRTtBQUUxQyxRQUFNLFVBQVUsZ0JBQWdCLElBQUksWUFBWSxzQkFBc0IsQ0FBQyxTQUFTO0FBQ2hGLE1BQUksUUFBUSxVQUFVLFdBQVc7QUFDL0I7QUFBQSxFQUNGO0FBQ0EsVUFBUSxRQUFRO0FBQ2hCLGFBQVcsWUFBWSxhQUFhLEdBQUc7QUFDckMsYUFBUyxFQUFFLElBQUksVUFBVSxDQUFDO0FBQUEsRUFDNUI7QUFDRjtBQUVBLFNBQVMsYUFBYSxZQUFnRDtBQUNwRSxTQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCxZQUFxQjtBQUNuQixhQUFPLGdCQUFnQixXQUFXLElBQUksV0FBVyxrQkFBa0IsRUFBRTtBQUFBLElBQ3ZFO0FBQUEsSUFDQSxXQUFXLFdBQTBCO0FBQ25DLHFCQUFlLFdBQVcsSUFBSSxTQUFTO0FBQUEsSUFDekM7QUFBQSxFQUNGO0FBQ0Y7QUFFQSxTQUFTLGlCQUFxRDtBQUM1RCxRQUFNLGNBQWMsc0JBQXNCLDBCQUEwQixvQkFBSSxJQUFtQyxDQUFDLEVBQUU7QUFFOUcsYUFBVyxjQUFjLHNCQUFzQjtBQUM3QyxRQUFJLENBQUMsWUFBWSxJQUFJLFdBQVcsRUFBRSxHQUFHO0FBQ25DLGtCQUFZLElBQUksV0FBVyxJQUFJLFVBQVU7QUFBQSxJQUMzQztBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGVBQStDO0FBQ3RELFNBQU8sc0JBQXNCLHdCQUF3QixvQkFBSSxJQUErQixDQUFDLEVBQUU7QUFDN0Y7QUFFQSxTQUFTLGdCQUFnQixJQUFZLG9CQUFvRDtBQUN2RixTQUFPLHNCQUFzQixrQkFBa0IsRUFBRSxLQUFLLGVBQWUsRUFBRSxJQUFJLGtCQUFrQjtBQUMvRjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -61,14 +61,14 @@ export interface ZipExtractionFileSystem {
|
|
|
61
61
|
* @param options - The {@link ZipExtractionMkdirOptions}.
|
|
62
62
|
* @returns The first directory created, if any.
|
|
63
63
|
*/
|
|
64
|
-
mkdirSync: (path: string, options: ZipExtractionMkdirOptions) => string | undefined;
|
|
64
|
+
readonly mkdirSync: (path: string, options: ZipExtractionMkdirOptions) => string | undefined;
|
|
65
65
|
/**
|
|
66
66
|
* Writes a file, overwriting it if it exists.
|
|
67
67
|
*
|
|
68
68
|
* @param path - The file to write.
|
|
69
69
|
* @param data - The bytes to write.
|
|
70
70
|
*/
|
|
71
|
-
writeFileSync: (path: string, data: Buffer) => void;
|
|
71
|
+
readonly writeFileSync: (path: string, data: Buffer) => void;
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* The options {@link ZipExtractionFileSystem.mkdirSync} is always called with.
|
|
@@ -133,4 +133,4 @@ function readEntryData(archive, entry) {
|
|
|
133
133
|
export {
|
|
134
134
|
extractZipArchive
|
|
135
135
|
};
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV4dHJhY3RzIGEgWklQIGFyY2hpdmUgdG8gZGlzayB1c2luZyBvbmx5IE5vZGUncyBgemxpYmAgXHUyMDE0IHdpdGggbm8gdGhpcmQtcGFydHkgdW56aXAgZGVwZW5kZW5jeS5cbiAqXG4gKiBJdCBleGlzdHMgZm9yIG9uZSBtZWFzdXJlZCByZWFzb24uIFRoZSBkZXBlbmRlbmN5IGl0IHJlcGxhY2VkIG9uIHRoaXMgcGF0aCwgYGFkbS16aXBgLCBidW5kbGVkXG4gKiByb3VnaGx5IDM0IEtCIG9mIG1pbmlmaWVkIEphdmFTY3JpcHQgaW50byBFVkVSWSBPYnNpZGlhbiBwbHVnaW4gYnVpbHQgd2l0aCB0aGlzIGxpYnJhcnk6IGEgcGx1Z2luXG4gKiBzaGlwcyBhIHNpbmdsZSBDSlMgYG1haW4uanNgLCBlc2J1aWxkIGhhcyBubyBjb2RlIHNwbGl0dGluZyB0byBwdXQgYSBkZXBlbmRlbmN5IGJlaGluZCwgYW5kIGFcbiAqIGBhd2FpdCBpbXBvcnQoKWAgb25seSBkZWZlcnMgZXZhbHVhdGlvbiBcdTIwMTQgdGhlIG1vZHVsZSBib2R5IGlzIGlubGluZWQgZWl0aGVyIHdheS4gYG5vZGU6emxpYmAgaXNcbiAqIGFscmVhZHkgYW4gZXNidWlsZCBleHRlcm5hbCwgc28gdGhlIHNhbWUgd29yayBub3cgY29zdHMgYSBwbHVnaW4gYnVuZGxlIG5vdGhpbmcgYXQgYWxsLiBBcmNoaXZlcyBhcmVcbiAqIFdSSVRURU4gd2l0aCBgZmZsYXRlYCBhdCByZWxlYXNlIHRpbWUgKGBzY3JpcHQtdXRpbHMvZGVtby12YXVsdC50c2ApLCB3aGljaCBpcyBOb2RlLXNpZGUgdG9vbGluZyBhbmRcbiAqIG5ldmVyIHJlYWNoZXMgYSBwbHVnaW4gYnVuZGxlIFx1MjAxNCBhIHRoaXJkLXBhcnR5IHdyaXRlciB0aGVyZSBpcyBhbHNvIHdoYXQga2VlcHMgdGhpcyByZWFkZXIgY2hlY2tlZFxuICogYWdhaW5zdCBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG5vdCBpdHMgb3duLlxuICpcbiAqIERlbGliZXJhdGVseSBuYXJyb3c6IGl0IHJlYWRzIGV4YWN0bHkgd2hhdCB0aGF0IHdyaXRlciBwcm9kdWNlcyBcdTIwMTQgc3RvcmVkIGFuZCBkZWZsYXRlZCBlbnRyaWVzIGluIGFuXG4gKiB1bmVuY3J5cHRlZCBhcmNoaXZlIGJlbG93IHRoZSA0IEdCIC8gNjU1MzUtZW50cnkgWklQNjQgdGhyZXNob2xkIFx1MjAxNCBhbmQgcmFpc2VzIGEgbmFtZWQgZXJyb3IgZm9yXG4gKiBhbnl0aGluZyBlbHNlIHJhdGhlciB0aGFuIGd1ZXNzaW5nIGF0IGl0LiBTaXplcyBhbmQgb2Zmc2V0cyBhcmUgdGFrZW4gZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnksXG4gKiB3aGljaCBpcyBhdXRob3JpdGF0aXZlIGV2ZW4gZm9yIGFyY2hpdmVzIHdyaXR0ZW4gd2l0aCBkYXRhIGRlc2NyaXB0b3JzLlxuICpcbiAqIFRoZSBgbm9kZTpgIGltcG9ydHMgYmVsb3cgYXJlIHNhZmUgdG8gbWVyZWx5IEVWQUxVQVRFIG9uIG1vYmlsZSBcdTIwMTQgYHJlcXVpcmVgIGhhbmRzIGJhY2sgYHVuZGVmaW5lZGBcbiAqIHRoZXJlIGFuZCBub3RoaW5nIHJlYWRzIGl0IGF0IGxvYWQgdGltZSBcdTIwMTQgc28gdGhpcyBtb2R1bGUgY2FuIHNpdCBpbiB0aGUgZ2VuZXJhdGVkIGJhcnJlbHMgd2l0aG91dFxuICogYnJlYWtpbmcgdGhlIGxpYnJhcnkncyBsb2FkIG9uIEFuZHJvaWQuIE9ubHkgdGhlIGNhbGxzIGFyZSBkZXNrdG9wLW9ubHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5cbmltcG9ydCB7IGluZmxhdGVSYXdTeW5jIH0gZnJvbSAnbm9kZTp6bGliJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICcuL3BhdGgudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleHRyYWN0WmlwQXJjaGl2ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdFppcEFyY2hpdmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmU6IEJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGZpbGUtc3lzdGVtIGltcGxlbWVudGF0aW9uIHRoZSBleHRyYWN0ZWQgZW50cmllcyBhcmUgd3JpdHRlbiB3aXRoLlxuICAgKlxuICAgKiBJbmplY3RlZCByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyB0aGUgY2FsbGVyIGNob29zZXMgd2hpY2ggYGZzYCB3cml0ZXMgdGhlIGZpbGVzLiBUaGUgZGVtby12YXVsdFxuICAgKiBvcGVuZXIgaGFuZHMgb3ZlciBFbGVjdHJvbidzIGBvcmlnaW5hbC1mc2AgKHNlZSB7QGxpbmsgWmlwRXh0cmFjdGlvbkZpbGVTeXN0ZW19KS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVTeXN0ZW06IFppcEV4dHJhY3Rpb25GaWxlU3lzdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIGV4dHJhY3QgaW50by4gQ3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldERpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBgbm9kZTpmc2AgZXh0cmFjdGlvbiBuZWVkcy5cbiAqXG4gKiBPbmx5IHRoZSB0d28gV1JJVElORyBjYWxscyBhcmUgcmVxdWlyZWQsIGFuZCB0aGF0IGlzIGRlbGliZXJhdGU6IEVsZWN0cm9uJ3MgYXNhciBsYXllciBpbnRlcmNlcHRzXG4gKiBgZnNgIFJFQURTIChhbmQgYGV4aXN0c1N5bmNgKSBvbiBhbnkgcGF0aCBjb250YWluaW5nIGAuYXNhcmAsIHdoaWNoIGEgZGVtbyB2YXVsdCBtYXkgbGVnaXRpbWF0ZWx5XG4gKiBzaGlwIGFzIGEgcGxhaW4gZmlsZS4gTmV2ZXIgcHJvYmluZyB0aGUgdGFyZ2V0IHdpdGggYSByZWFkIGtlZXBzIHRoYXQgaW50ZXJjZXB0aW9uIG91dCBvZiB0aGVcbiAqIHBpY3R1cmUgZW50aXJlbHksIGFuZCBhIGNhbGxlciB0aGF0IGhhbmRzIG92ZXIgRWxlY3Ryb24ncyBgb3JpZ2luYWwtZnNgIGlzIHNhZmUgZXZlbiBmcm9tIHRoZVxuICogd3JpdGUgc2lkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgYW55IG1pc3NpbmcgcGFyZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgZGlyZWN0b3J5IHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFppcEV4dHJhY3Rpb25Na2Rpck9wdGlvbnN9LlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgZGlyZWN0b3J5IGNyZWF0ZWQsIGlmIGFueS5cbiAgICovXG4gIG1rZGlyU3luYzogKHBhdGg6IHN0cmluZywgb3B0aW9uczogWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBmaWxlLCBvdmVyd3JpdGluZyBpdCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIGZpbGUgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGJ5dGVzIHRvIHdyaXRlLlxuICAgKi9cbiAgd3JpdGVGaWxlU3luYzogKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIHtAbGluayBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbS5ta2RpclN5bmN9IGlzIGFsd2F5cyBjYWxsZWQgd2l0aC5cbiAqXG4gKiBFeHRyYWN0aW9uIG5ldmVyIHByb2JlcyBmb3IgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzbyBldmVyeSBjYWxsIGhhcyB0byBjcmVhdGUgdGhlIG1pc3NpbmcgcGFyZW50c1xuICogaXRzZWxmIGFuZCB0b2xlcmF0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzIGFscmVhZHkgdGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbHdheXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjdXJzaXZlOiB0cnVlO1xufVxuXG5pbnRlcmZhY2UgWmlwRW50cnkge1xuICByZWFkb25seSBjb21wcmVzc2VkU2l6ZTogbnVtYmVyO1xuICByZWFkb25seSBjb21wcmVzc2lvbk1ldGhvZDogbnVtYmVyO1xuICByZWFkb25seSBsb2NhbEhlYWRlck9mZnNldDogbnVtYmVyO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVORF9PRl9DRU5UUkFMX0RJUkVDVE9SWV9TSUdOQVRVUkUgPSAweDA2XzA1XzRCXzUwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJR05BVFVSRSA9IDB4MDJfMDFfNEJfNTA7XG5jb25zdCBMT0NBTF9GSUxFX0hFQURFUl9TSUdOQVRVUkUgPSAweDA0XzAzXzRCXzUwO1xuXG5jb25zdCBFTkRfT0ZfQ0VOVFJBTF9ESVJFQ1RPUllfU0laRSA9IDIyO1xuY29uc3QgTUFYX0FSQ0hJVkVfQ09NTUVOVF9MRU5HVEggPSA2NV81MzU7XG5cbi8vIEEgY291bnQgb3Igb2Zmc2V0IHNhdHVyYXRlZCB0byBhbGwtb25lcyBtZWFucyB0aGUgcmVhbCB2YWx1ZSBsaXZlcyBpbiBhIFpJUDY0IHJlY29yZCB0aGlzIHJlYWRlclxuLy8gZG9lcyBub3QgaW1wbGVtZW50LCBzbyB0aGUgZmllbGQgbXVzdCBuZXZlciBiZSByZWFkIGF0IGZhY2UgdmFsdWUuXG5jb25zdCBTQVRVUkFURURfVUlOVF8xNiA9IDY1XzUzNTtcbmNvbnN0IFNBVFVSQVRFRF9VSU5UXzMyID0gNF8yOTRfOTY3XzI5NTtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gdGhlIGVuZC1vZi1jZW50cmFsLWRpcmVjdG9yeSByZWNvcmQuXG5jb25zdCBBUkNISVZFX0VOVFJZX0NPVU5UX09GRlNFVCA9IDEwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfU1RBUlRfT0ZGU0VUID0gMTY7XG5cbi8vIEZpZWxkIG9mZnNldHMgd2l0aGluIGEgY2VudHJhbC1kaXJlY3RvcnkgaGVhZGVyLlxuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUID0gODtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTSU9OX01FVEhPRF9PRkZTRVQgPSAxMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQgPSAyMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX05BTUVfTEVOR1RIX09GRlNFVCA9IDI4O1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVCA9IDMwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NTUVOVF9MRU5HVEhfT0ZGU0VUID0gMzI7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCA9IDQyO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJWkUgPSA0NjtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gYSBsb2NhbCBmaWxlIGhlYWRlci5cbmNvbnN0IExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQgPSAyNjtcbmNvbnN0IExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUID0gMjg7XG5jb25zdCBMT0NBTF9IRUFERVJfU0laRSA9IDMwO1xuXG5jb25zdCBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEID0gMDtcbmNvbnN0IENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRCA9IDg7XG5cbi8vIEJpdCAwIG9mIHRoZSBnZW5lcmFsLXB1cnBvc2UgZmxhZ3MgbWFya3MgYW4gZW5jcnlwdGVkIGVudHJ5LCBhbmQgaXQgaXMgdGhlIGxvd2VzdCBiaXQgXHUyMDE0IHNvIHRoZVxuLy8gcmVtYWluZGVyIHRlc3RzIGl0IHdpdGhvdXQgcmVhY2hpbmcgZm9yIGEgYml0d2lzZSBvcGVyYXRvci5cbmNvbnN0IEVOQ1JZUFRFRF9GTEFHX0RJVklTT1IgPSAyO1xuXG5jb25zdCBFTlRSWV9OQU1FX1NFUEFSQVRPUiA9ICcvJztcbmNvbnN0IFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAgPSAvXltBLVphLXpdOi87XG5cbi8qKlxuICogRXh0cmFjdHMgZXZlcnkgZW50cnkgb2YgYSBaSVAgYXJjaGl2ZSBpbnRvIGEgZGlyZWN0b3J5LlxuICpcbiAqIERpcmVjdG9yeSBlbnRyaWVzIGJlY29tZSBkaXJlY3RvcmllczsgYSBmaWxlIGVudHJ5J3MgcGFyZW50cyBhcmUgY3JlYXRlZCB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl2ZVxuICogZGVjbGFyZWQgdGhlbS4gQW4gZW50cnkgd2hvc2UgbmFtZSB3b3VsZCBlc2NhcGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zLnRhcmdldERpcmVjdG9yeX0gaXNcbiAqIHJlZnVzZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiAodGhlIFwiemlwIHNsaXBcIiB0cmF2ZXJzYWwpLCBhcyBpcyBhbiBlbmNyeXB0ZWQsIFpJUDY0LCBvclxuICogdW5rbm93bi1jb21wcmVzc2lvbiBhcmNoaXZlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zfS5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBuYW1pbmcgdGhlIHJlYXNvbiB3aGVuIHRoZSBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIGFzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0WmlwQXJjaGl2ZShwYXJhbXM6IEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhcmNoaXZlLFxuICAgIGZpbGVTeXN0ZW0sXG4gICAgdGFyZ2V0RGlyZWN0b3J5XG4gIH0gPSBwYXJhbXM7XG5cbiAgZmlsZVN5c3RlbS5ta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmUpKSB7XG4gICAgYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeS5uYW1lKTtcblxuICAgIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKEVOVFJZX05BTUVfU0VQQVJBVE9SKSkge1xuICAgICAgLy8gTmFtZWQgd2l0aG91dCBpdHMgdHJhaWxpbmcgc2VwYXJhdG9yLCBzbyB0aGUgY3JlYXRlZCBwYXRoIHJlYWRzIHRoZSBzYW1lIGFzIGV2ZXJ5IG90aGVyIG9uZS5cbiAgICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGpvaW4odGFyZ2V0RGlyZWN0b3J5LCBlbnRyeS5uYW1lLnNsaWNlKDAsIC0xKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbih0YXJnZXREaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGRpcm5hbWUoZW50cnlQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZmlsZVN5c3RlbS53cml0ZUZpbGVTeW5jKGVudHJ5UGF0aCwgcmVhZEVudHJ5RGF0YShhcmNoaXZlLCBlbnRyeSkpO1xuICB9XG59XG5cbi8qKlxuICogUmVmdXNlcyBhbiBlbnRyeSBuYW1lIHRoYXQgd291bGQgcGxhY2UgdGhlIGV4dHJhY3RlZCBmaWxlIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuXG4gKlxuICogQW4gYXJjaGl2ZSBpcyB1bnRydXN0ZWQgaW5wdXQgZXZlbiB3aGVuIHdlIHB1Ymxpc2hlZCBpdCBvdXJzZWx2ZXMsIGFuZCBldmVyeSBvbmUgb2YgdGhlc2Ugc2hhcGVzXG4gKiBlc2NhcGVzIHRoZSB0YXJnZXQ6IGFuIGFic29sdXRlIFBPU0lYIHBhdGgsIGEgV2luZG93cyBkcml2ZS1xdWFsaWZpZWQgcGF0aCwgYSBiYWNrc2xhc2ggKHdoaWNoIHRoZVxuICogWklQIHNwZWNpZmljYXRpb24gZm9yYmlkcyBhcyBhIHNlcGFyYXRvciwgc28gaXRzIG9ubHkgdXNlIGhlcmUgaXMgdG8gc211Z2dsZSBvbmUgcGFzdCBhXG4gKiBmb3J3YXJkLXNsYXNoIGNoZWNrKSwgYW5kIGEgYC4uYCBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSBlbnRyeU5hbWUgLSBUaGUgZW50cnkgbmFtZSBhcyByZWNvcmRlZCBpbiB0aGUgYXJjaGl2ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZW50cnlOYW1lLnN0YXJ0c1dpdGgoRU5UUllfTkFNRV9TRVBBUkFUT1IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBhYnNvbHV0ZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLmApO1xuICB9XG5cbiAgaWYgKFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAudGVzdChlbnRyeU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBkcml2ZS1xdWFsaWZpZWQgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jy5gKTtcbiAgfVxuXG4gIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggdXNlcyBhIGJhY2tzbGFzaCBzZXBhcmF0b3IuYCk7XG4gIH1cblxuICBpZiAoZW50cnlOYW1lLnNwbGl0KEVOVFJZX05BTUVfU0VQQVJBVE9SKS5pbmNsdWRlcygnLi4nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggcG9pbnRzIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2NhdGVzIHRoZSBlbmQtb2YtY2VudHJhbC1kaXJlY3RvcnkgcmVjb3JkIGFuZCByZXR1cm5zIGl0cyBvZmZzZXQuXG4gKlxuICogVGhlIHJlY29yZCBzaXRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYXJjaGl2ZSB1bmxlc3MgYSB0cmFpbGluZyBjb21tZW50IGZvbGxvd3MgaXQsIHNvIGl0IGlzIGZvdW5kXG4gKiBieSBzY2FubmluZyBiYWNrd2FyZHMgb3ZlciB0aGUgY29tbWVudCdzIG1heGltdW0gbGVuZ3RoIHJhdGhlciB0aGFuIGFzc3VtZWQgdG8gYmUgYXQgYSBmaXhlZCBwbGFjZS5cbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZSAtIFRoZSByYXcgWklQIGFyY2hpdmUgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkJ3Mgb2Zmc2V0LlxuICovXG5mdW5jdGlvbiBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmU6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGNvbnN0IGxhc3RQb3NzaWJsZU9mZnNldCA9IGFyY2hpdmUubGVuZ3RoIC0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJWkU7XG4gIGNvbnN0IGZpcnN0UG9zc2libGVPZmZzZXQgPSBNYXRoLm1heCgwLCBsYXN0UG9zc2libGVPZmZzZXQgLSBNQVhfQVJDSElWRV9DT01NRU5UX0xFTkdUSCk7XG5cbiAgZm9yIChsZXQgb2Zmc2V0ID0gbGFzdFBvc3NpYmxlT2Zmc2V0OyBvZmZzZXQgPj0gZmlyc3RQb3NzaWJsZU9mZnNldDsgb2Zmc2V0LS0pIHtcbiAgICBpZiAoYXJjaGl2ZS5yZWFkVUludDMyTEUob2Zmc2V0KSA9PT0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJR05BVFVSRSkge1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIGlzIG5vdCBhIFpJUCBmaWxlOiBpdHMgZW5kLW9mLWNlbnRyYWwtZGlyZWN0b3J5IHJlY29yZCBpcyBtaXNzaW5nLicpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjZW50cmFsIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGFyY2hpdmUncyBhdXRob3JpdGF0aXZlIGluZGV4IG9mIGl0cyBlbnRyaWVzLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEByZXR1cm5zIE9uZSB7QGxpbmsgWmlwRW50cnl9IHBlciBlbnRyeSwgaW4gdGhlIG9yZGVyIHRoZSBhcmNoaXZlIGxpc3RzIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmU6IEJ1ZmZlcik6IFppcEVudHJ5W10ge1xuICBjb25zdCBlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgPSBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmUpO1xuICBjb25zdCBlbnRyeUNvdW50ID0gYXJjaGl2ZS5yZWFkVUludDE2TEUoZW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0ICsgQVJDSElWRV9FTlRSWV9DT1VOVF9PRkZTRVQpO1xuICBsZXQgZW50cnlPZmZzZXQgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9TVEFSVF9PRkZTRVQpO1xuXG4gIGlmIChlbnRyeUNvdW50ID09PSBTQVRVUkFURURfVUlOVF8xNiB8fCBlbnRyeU9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1pJUDY0IGFyY2hpdmVzIGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICB9XG5cbiAgY29uc3QgZW50cmllczogWmlwRW50cnlbXSA9IFtdO1xuICBmb3IgKGxldCBlbnRyeUluZGV4ID0gMDsgZW50cnlJbmRleCA8IGVudHJ5Q291bnQ7IGVudHJ5SW5kZXgrKykge1xuICAgIGlmIChhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCkgIT09IENFTlRSQUxfRElSRUNUT1JZX0hFQURFUl9TSUdOQVRVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUncyBjZW50cmFsIGRpcmVjdG9yeSBpcyBjb3JydXB0IGF0IGVudHJ5ICR7U3RyaW5nKGVudHJ5SW5kZXgpfS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUKTtcbiAgICBpZiAoZmxhZ3MgJSBFTkNSWVBURURfRkxBR19ESVZJU09SID09PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY3J5cHRlZCBaSVAgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHJlc3NlZFNpemUgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQpO1xuICAgIGNvbnN0IGxvY2FsSGVhZGVyT2Zmc2V0ID0gYXJjaGl2ZS5yZWFkVUludDMyTEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCk7XG4gICAgaWYgKGNvbXByZXNzZWRTaXplID09PSBTQVRVUkFURURfVUlOVF8zMiB8fCBsb2NhbEhlYWRlck9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWklQNjQgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUxlbmd0aCA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfTkFNRV9MRU5HVEhfT0ZGU0VUKTtcbiAgICBjb25zdCBuYW1lT2Zmc2V0ID0gZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9IRUFERVJfU0laRTtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgY29tcHJlc3NlZFNpemUsXG4gICAgICBjb21wcmVzc2lvbk1ldGhvZDogYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01QUkVTU0lPTl9NRVRIT0RfT0ZGU0VUKSxcbiAgICAgIGxvY2FsSGVhZGVyT2Zmc2V0LFxuICAgICAgbmFtZTogYXJjaGl2ZS50b1N0cmluZygndXRmLTgnLCBuYW1lT2Zmc2V0LCBuYW1lT2Zmc2V0ICsgbmFtZUxlbmd0aClcbiAgICB9KTtcblxuICAgIGVudHJ5T2Zmc2V0ID0gbmFtZU9mZnNldFxuICAgICAgKyBuYW1lTGVuZ3RoXG4gICAgICArIGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVClcbiAgICAgICsgYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01NRU5UX0xFTkdUSF9PRkZTRVQpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIGRlY29tcHJlc3NlcyBvbmUgZW50cnkncyBieXRlcy5cbiAqXG4gKiBUaGUgZGF0YSdzIHN0YXJ0IGlzIGNvbXB1dGVkIGZyb20gdGhlIExPQ0FMIGhlYWRlciByYXRoZXIgdGhhbiB0aGUgY2VudHJhbCBvbmU6IHRoZSB0d28gY2FycnlcbiAqIGluZGVwZW5kZW50IG5hbWUgYW5kIGV4dHJhLWZpZWxkIGxlbmd0aHMsIGFuZCBvbmx5IHRoZSBsb2NhbCBwYWlyIGRlc2NyaWJlcyB3aGVyZSB0aGUgYnl0ZXNcbiAqIGFjdHVhbGx5IGJlZ2luLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeSwgYXMgcmVhZCBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeS5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSdzIHVuY29tcHJlc3NlZCBjb250ZW50LlxuICovXG5mdW5jdGlvbiByZWFkRW50cnlEYXRhKGFyY2hpdmU6IEJ1ZmZlciwgZW50cnk6IFppcEVudHJ5KTogQnVmZmVyIHtcbiAgaWYgKGFyY2hpdmUucmVhZFVJbnQzMkxFKGVudHJ5LmxvY2FsSGVhZGVyT2Zmc2V0KSAhPT0gTE9DQUxfRklMRV9IRUFERVJfU0lHTkFUVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeS5uYW1lfScgaGFzIGEgY29ycnVwdCBsb2NhbCBoZWFkZXIuYCk7XG4gIH1cblxuICBjb25zdCBkYXRhT2Zmc2V0ID0gZW50cnkubG9jYWxIZWFkZXJPZmZzZXRcbiAgICArIExPQ0FMX0hFQURFUl9TSVpFXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQpXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUKTtcbiAgY29uc3QgZGF0YUVuZCA9IGRhdGFPZmZzZXQgKyBlbnRyeS5jb21wcmVzc2VkU2l6ZTtcbiAgaWYgKGRhdGFFbmQgPiBhcmNoaXZlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgaXMgdHJ1bmNhdGVkOiBlbnRyeSAnJHtlbnRyeS5uYW1lfScgcnVucyBwYXN0IGl0cyBlbmQuYCk7XG4gIH1cblxuICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IGFyY2hpdmUuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YUVuZCk7XG4gIHN3aXRjaCAoZW50cnkuY29tcHJlc3Npb25NZXRob2QpIHtcbiAgICBjYXNlIENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRDoge1xuICAgICAgcmV0dXJuIGluZmxhdGVSYXdTeW5jKGNvbXByZXNzZWREYXRhKTtcbiAgICB9XG4gICAgY2FzZSBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEOiB7XG4gICAgICByZXR1cm4gY29tcHJlc3NlZERhdGE7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgZW50cnkgJyR7ZW50cnkubmFtZX0nIHVzZXMgdW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kICR7U3RyaW5nKGVudHJ5LmNvbXByZXNzaW9uTWV0aG9kKX0uYCk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQTBCQSxTQUFTLHNCQUFzQjtBQUUvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXlFUCxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLDhCQUE4QjtBQUVwQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLDZCQUE2QjtBQUluQyxNQUFNLG9CQUFvQjtBQUMxQixNQUFNLG9CQUFvQjtBQUcxQixNQUFNLDZCQUE2QjtBQUNuQyxNQUFNLGlDQUFpQztBQUd2QyxNQUFNLGlDQUFpQztBQUN2QyxNQUFNLDhDQUE4QztBQUNwRCxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLHVDQUF1QztBQUM3QyxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLDBDQUEwQztBQUNoRCxNQUFNLCtD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
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Rlc2t0b3AtemlwLWV4dHJhY3Rvci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEV4dHJhY3RzIGEgWklQIGFyY2hpdmUgdG8gZGlzayB1c2luZyBvbmx5IE5vZGUncyBgemxpYmAgXHUyMDE0IHdpdGggbm8gdGhpcmQtcGFydHkgdW56aXAgZGVwZW5kZW5jeS5cbiAqXG4gKiBJdCBleGlzdHMgZm9yIG9uZSBtZWFzdXJlZCByZWFzb24uIFRoZSBkZXBlbmRlbmN5IGl0IHJlcGxhY2VkIG9uIHRoaXMgcGF0aCwgYGFkbS16aXBgLCBidW5kbGVkXG4gKiByb3VnaGx5IDM0IEtCIG9mIG1pbmlmaWVkIEphdmFTY3JpcHQgaW50byBFVkVSWSBPYnNpZGlhbiBwbHVnaW4gYnVpbHQgd2l0aCB0aGlzIGxpYnJhcnk6IGEgcGx1Z2luXG4gKiBzaGlwcyBhIHNpbmdsZSBDSlMgYG1haW4uanNgLCBlc2J1aWxkIGhhcyBubyBjb2RlIHNwbGl0dGluZyB0byBwdXQgYSBkZXBlbmRlbmN5IGJlaGluZCwgYW5kIGFcbiAqIGBhd2FpdCBpbXBvcnQoKWAgb25seSBkZWZlcnMgZXZhbHVhdGlvbiBcdTIwMTQgdGhlIG1vZHVsZSBib2R5IGlzIGlubGluZWQgZWl0aGVyIHdheS4gYG5vZGU6emxpYmAgaXNcbiAqIGFscmVhZHkgYW4gZXNidWlsZCBleHRlcm5hbCwgc28gdGhlIHNhbWUgd29yayBub3cgY29zdHMgYSBwbHVnaW4gYnVuZGxlIG5vdGhpbmcgYXQgYWxsLiBBcmNoaXZlcyBhcmVcbiAqIFdSSVRURU4gd2l0aCBgZmZsYXRlYCBhdCByZWxlYXNlIHRpbWUgKGBzY3JpcHQtdXRpbHMvZGVtby12YXVsdC50c2ApLCB3aGljaCBpcyBOb2RlLXNpZGUgdG9vbGluZyBhbmRcbiAqIG5ldmVyIHJlYWNoZXMgYSBwbHVnaW4gYnVuZGxlIFx1MjAxNCBhIHRoaXJkLXBhcnR5IHdyaXRlciB0aGVyZSBpcyBhbHNvIHdoYXQga2VlcHMgdGhpcyByZWFkZXIgY2hlY2tlZFxuICogYWdhaW5zdCBhbiBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG5vdCBpdHMgb3duLlxuICpcbiAqIERlbGliZXJhdGVseSBuYXJyb3c6IGl0IHJlYWRzIGV4YWN0bHkgd2hhdCB0aGF0IHdyaXRlciBwcm9kdWNlcyBcdTIwMTQgc3RvcmVkIGFuZCBkZWZsYXRlZCBlbnRyaWVzIGluIGFuXG4gKiB1bmVuY3J5cHRlZCBhcmNoaXZlIGJlbG93IHRoZSA0IEdCIC8gNjU1MzUtZW50cnkgWklQNjQgdGhyZXNob2xkIFx1MjAxNCBhbmQgcmFpc2VzIGEgbmFtZWQgZXJyb3IgZm9yXG4gKiBhbnl0aGluZyBlbHNlIHJhdGhlciB0aGFuIGd1ZXNzaW5nIGF0IGl0LiBTaXplcyBhbmQgb2Zmc2V0cyBhcmUgdGFrZW4gZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnksXG4gKiB3aGljaCBpcyBhdXRob3JpdGF0aXZlIGV2ZW4gZm9yIGFyY2hpdmVzIHdyaXR0ZW4gd2l0aCBkYXRhIGRlc2NyaXB0b3JzLlxuICpcbiAqIFRoZSBgbm9kZTpgIGltcG9ydHMgYmVsb3cgYXJlIHNhZmUgdG8gbWVyZWx5IEVWQUxVQVRFIG9uIG1vYmlsZSBcdTIwMTQgYHJlcXVpcmVgIGhhbmRzIGJhY2sgYHVuZGVmaW5lZGBcbiAqIHRoZXJlIGFuZCBub3RoaW5nIHJlYWRzIGl0IGF0IGxvYWQgdGltZSBcdTIwMTQgc28gdGhpcyBtb2R1bGUgY2FuIHNpdCBpbiB0aGUgZ2VuZXJhdGVkIGJhcnJlbHMgd2l0aG91dFxuICogYnJlYWtpbmcgdGhlIGxpYnJhcnkncyBsb2FkIG9uIEFuZHJvaWQuIE9ubHkgdGhlIGNhbGxzIGFyZSBkZXNrdG9wLW9ubHkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBCdWZmZXIgfSBmcm9tICdub2RlOmJ1ZmZlcic7XG5cbmltcG9ydCB7IGluZmxhdGVSYXdTeW5jIH0gZnJvbSAnbm9kZTp6bGliJztcblxuaW1wb3J0IHtcbiAgZGlybmFtZSxcbiAgam9pblxufSBmcm9tICcuL3BhdGgudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBleHRyYWN0WmlwQXJjaGl2ZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXh0cmFjdFppcEFyY2hpdmVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAgICovXG4gIHJlYWRvbmx5IGFyY2hpdmU6IEJ1ZmZlcjtcblxuICAvKipcbiAgICogVGhlIGZpbGUtc3lzdGVtIGltcGxlbWVudGF0aW9uIHRoZSBleHRyYWN0ZWQgZW50cmllcyBhcmUgd3JpdHRlbiB3aXRoLlxuICAgKlxuICAgKiBJbmplY3RlZCByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyB0aGUgY2FsbGVyIGNob29zZXMgd2hpY2ggYGZzYCB3cml0ZXMgdGhlIGZpbGVzLiBUaGUgZGVtby12YXVsdFxuICAgKiBvcGVuZXIgaGFuZHMgb3ZlciBFbGVjdHJvbidzIGBvcmlnaW5hbC1mc2AgKHNlZSB7QGxpbmsgWmlwRXh0cmFjdGlvbkZpbGVTeXN0ZW19KS5cbiAgICovXG4gIHJlYWRvbmx5IGZpbGVTeXN0ZW06IFppcEV4dHJhY3Rpb25GaWxlU3lzdGVtO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHRvIGV4dHJhY3QgaW50by4gQ3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldERpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBgbm9kZTpmc2AgZXh0cmFjdGlvbiBuZWVkcy5cbiAqXG4gKiBPbmx5IHRoZSB0d28gV1JJVElORyBjYWxscyBhcmUgcmVxdWlyZWQsIGFuZCB0aGF0IGlzIGRlbGliZXJhdGU6IEVsZWN0cm9uJ3MgYXNhciBsYXllciBpbnRlcmNlcHRzXG4gKiBgZnNgIFJFQURTIChhbmQgYGV4aXN0c1N5bmNgKSBvbiBhbnkgcGF0aCBjb250YWluaW5nIGAuYXNhcmAsIHdoaWNoIGEgZGVtbyB2YXVsdCBtYXkgbGVnaXRpbWF0ZWx5XG4gKiBzaGlwIGFzIGEgcGxhaW4gZmlsZS4gTmV2ZXIgcHJvYmluZyB0aGUgdGFyZ2V0IHdpdGggYSByZWFkIGtlZXBzIHRoYXQgaW50ZXJjZXB0aW9uIG91dCBvZiB0aGVcbiAqIHBpY3R1cmUgZW50aXJlbHksIGFuZCBhIGNhbGxlciB0aGF0IGhhbmRzIG92ZXIgRWxlY3Ryb24ncyBgb3JpZ2luYWwtZnNgIGlzIHNhZmUgZXZlbiBmcm9tIHRoZVxuICogd3JpdGUgc2lkZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbSB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgYW55IG1pc3NpbmcgcGFyZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBUaGUgZGlyZWN0b3J5IHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIFppcEV4dHJhY3Rpb25Na2Rpck9wdGlvbnN9LlxuICAgKiBAcmV0dXJucyBUaGUgZmlyc3QgZGlyZWN0b3J5IGNyZWF0ZWQsIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IG1rZGlyU3luYzogKHBhdGg6IHN0cmluZywgb3B0aW9uczogWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXcml0ZXMgYSBmaWxlLCBvdmVyd3JpdGluZyBpdCBpZiBpdCBleGlzdHMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gVGhlIGZpbGUgdG8gd3JpdGUuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGJ5dGVzIHRvIHdyaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVGaWxlU3luYzogKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBvcHRpb25zIHtAbGluayBaaXBFeHRyYWN0aW9uRmlsZVN5c3RlbS5ta2RpclN5bmN9IGlzIGFsd2F5cyBjYWxsZWQgd2l0aC5cbiAqXG4gKiBFeHRyYWN0aW9uIG5ldmVyIHByb2JlcyBmb3IgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCBzbyBldmVyeSBjYWxsIGhhcyB0byBjcmVhdGUgdGhlIG1pc3NpbmcgcGFyZW50c1xuICogaXRzZWxmIGFuZCB0b2xlcmF0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzIGFscmVhZHkgdGhlcmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgWmlwRXh0cmFjdGlvbk1rZGlyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbHdheXMgYHRydWVgLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVjdXJzaXZlOiB0cnVlO1xufVxuXG5pbnRlcmZhY2UgWmlwRW50cnkge1xuICByZWFkb25seSBjb21wcmVzc2VkU2l6ZTogbnVtYmVyO1xuICByZWFkb25seSBjb21wcmVzc2lvbk1ldGhvZDogbnVtYmVyO1xuICByZWFkb25seSBsb2NhbEhlYWRlck9mZnNldDogbnVtYmVyO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IEVORF9PRl9DRU5UUkFMX0RJUkVDVE9SWV9TSUdOQVRVUkUgPSAweDA2XzA1XzRCXzUwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJR05BVFVSRSA9IDB4MDJfMDFfNEJfNTA7XG5jb25zdCBMT0NBTF9GSUxFX0hFQURFUl9TSUdOQVRVUkUgPSAweDA0XzAzXzRCXzUwO1xuXG5jb25zdCBFTkRfT0ZfQ0VOVFJBTF9ESVJFQ1RPUllfU0laRSA9IDIyO1xuY29uc3QgTUFYX0FSQ0hJVkVfQ09NTUVOVF9MRU5HVEggPSA2NV81MzU7XG5cbi8vIEEgY291bnQgb3Igb2Zmc2V0IHNhdHVyYXRlZCB0byBhbGwtb25lcyBtZWFucyB0aGUgcmVhbCB2YWx1ZSBsaXZlcyBpbiBhIFpJUDY0IHJlY29yZCB0aGlzIHJlYWRlclxuLy8gZG9lcyBub3QgaW1wbGVtZW50LCBzbyB0aGUgZmllbGQgbXVzdCBuZXZlciBiZSByZWFkIGF0IGZhY2UgdmFsdWUuXG5jb25zdCBTQVRVUkFURURfVUlOVF8xNiA9IDY1XzUzNTtcbmNvbnN0IFNBVFVSQVRFRF9VSU5UXzMyID0gNF8yOTRfOTY3XzI5NTtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gdGhlIGVuZC1vZi1jZW50cmFsLWRpcmVjdG9yeSByZWNvcmQuXG5jb25zdCBBUkNISVZFX0VOVFJZX0NPVU5UX09GRlNFVCA9IDEwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfU1RBUlRfT0ZGU0VUID0gMTY7XG5cbi8vIEZpZWxkIG9mZnNldHMgd2l0aGluIGEgY2VudHJhbC1kaXJlY3RvcnkgaGVhZGVyLlxuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUID0gODtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTSU9OX01FVEhPRF9PRkZTRVQgPSAxMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQgPSAyMDtcbmNvbnN0IENFTlRSQUxfRElSRUNUT1JZX05BTUVfTEVOR1RIX09GRlNFVCA9IDI4O1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVCA9IDMwO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfQ09NTUVOVF9MRU5HVEhfT0ZGU0VUID0gMzI7XG5jb25zdCBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCA9IDQyO1xuY29uc3QgQ0VOVFJBTF9ESVJFQ1RPUllfSEVBREVSX1NJWkUgPSA0NjtcblxuLy8gRmllbGQgb2Zmc2V0cyB3aXRoaW4gYSBsb2NhbCBmaWxlIGhlYWRlci5cbmNvbnN0IExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQgPSAyNjtcbmNvbnN0IExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUID0gMjg7XG5jb25zdCBMT0NBTF9IRUFERVJfU0laRSA9IDMwO1xuXG5jb25zdCBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEID0gMDtcbmNvbnN0IENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRCA9IDg7XG5cbi8vIEJpdCAwIG9mIHRoZSBnZW5lcmFsLXB1cnBvc2UgZmxhZ3MgbWFya3MgYW4gZW5jcnlwdGVkIGVudHJ5LCBhbmQgaXQgaXMgdGhlIGxvd2VzdCBiaXQgXHUyMDE0IHNvIHRoZVxuLy8gcmVtYWluZGVyIHRlc3RzIGl0IHdpdGhvdXQgcmVhY2hpbmcgZm9yIGEgYml0d2lzZSBvcGVyYXRvci5cbmNvbnN0IEVOQ1JZUFRFRF9GTEFHX0RJVklTT1IgPSAyO1xuXG5jb25zdCBFTlRSWV9OQU1FX1NFUEFSQVRPUiA9ICcvJztcbmNvbnN0IFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAgPSAvXltBLVphLXpdOi87XG5cbi8qKlxuICogRXh0cmFjdHMgZXZlcnkgZW50cnkgb2YgYSBaSVAgYXJjaGl2ZSBpbnRvIGEgZGlyZWN0b3J5LlxuICpcbiAqIERpcmVjdG9yeSBlbnRyaWVzIGJlY29tZSBkaXJlY3RvcmllczsgYSBmaWxlIGVudHJ5J3MgcGFyZW50cyBhcmUgY3JlYXRlZCB3aGV0aGVyIG9yIG5vdCB0aGUgYXJjaGl2ZVxuICogZGVjbGFyZWQgdGhlbS4gQW4gZW50cnkgd2hvc2UgbmFtZSB3b3VsZCBlc2NhcGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zLnRhcmdldERpcmVjdG9yeX0gaXNcbiAqIHJlZnVzZWQgcmF0aGVyIHRoYW4gd3JpdHRlbiAodGhlIFwiemlwIHNsaXBcIiB0cmF2ZXJzYWwpLCBhcyBpcyBhbiBlbmNyeXB0ZWQsIFpJUDY0LCBvclxuICogdW5rbm93bi1jb21wcmVzc2lvbiBhcmNoaXZlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zfS5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBuYW1pbmcgdGhlIHJlYXNvbiB3aGVuIHRoZSBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIGFzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0WmlwQXJjaGl2ZShwYXJhbXM6IEV4dHJhY3RaaXBBcmNoaXZlUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHtcbiAgICBhcmNoaXZlLFxuICAgIGZpbGVTeXN0ZW0sXG4gICAgdGFyZ2V0RGlyZWN0b3J5XG4gIH0gPSBwYXJhbXM7XG5cbiAgZmlsZVN5c3RlbS5ta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmUpKSB7XG4gICAgYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeS5uYW1lKTtcblxuICAgIGlmIChlbnRyeS5uYW1lLmVuZHNXaXRoKEVOVFJZX05BTUVfU0VQQVJBVE9SKSkge1xuICAgICAgLy8gTmFtZWQgd2l0aG91dCBpdHMgdHJhaWxpbmcgc2VwYXJhdG9yLCBzbyB0aGUgY3JlYXRlZCBwYXRoIHJlYWRzIHRoZSBzYW1lIGFzIGV2ZXJ5IG90aGVyIG9uZS5cbiAgICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGpvaW4odGFyZ2V0RGlyZWN0b3J5LCBlbnRyeS5uYW1lLnNsaWNlKDAsIC0xKSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbih0YXJnZXREaXJlY3RvcnksIGVudHJ5Lm5hbWUpO1xuICAgIGZpbGVTeXN0ZW0ubWtkaXJTeW5jKGRpcm5hbWUoZW50cnlQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgZmlsZVN5c3RlbS53cml0ZUZpbGVTeW5jKGVudHJ5UGF0aCwgcmVhZEVudHJ5RGF0YShhcmNoaXZlLCBlbnRyeSkpO1xuICB9XG59XG5cbi8qKlxuICogUmVmdXNlcyBhbiBlbnRyeSBuYW1lIHRoYXQgd291bGQgcGxhY2UgdGhlIGV4dHJhY3RlZCBmaWxlIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuXG4gKlxuICogQW4gYXJjaGl2ZSBpcyB1bnRydXN0ZWQgaW5wdXQgZXZlbiB3aGVuIHdlIHB1Ymxpc2hlZCBpdCBvdXJzZWx2ZXMsIGFuZCBldmVyeSBvbmUgb2YgdGhlc2Ugc2hhcGVzXG4gKiBlc2NhcGVzIHRoZSB0YXJnZXQ6IGFuIGFic29sdXRlIFBPU0lYIHBhdGgsIGEgV2luZG93cyBkcml2ZS1xdWFsaWZpZWQgcGF0aCwgYSBiYWNrc2xhc2ggKHdoaWNoIHRoZVxuICogWklQIHNwZWNpZmljYXRpb24gZm9yYmlkcyBhcyBhIHNlcGFyYXRvciwgc28gaXRzIG9ubHkgdXNlIGhlcmUgaXMgdG8gc211Z2dsZSBvbmUgcGFzdCBhXG4gKiBmb3J3YXJkLXNsYXNoIGNoZWNrKSwgYW5kIGEgYC4uYCBzZWdtZW50LlxuICpcbiAqIEBwYXJhbSBlbnRyeU5hbWUgLSBUaGUgZW50cnkgbmFtZSBhcyByZWNvcmRlZCBpbiB0aGUgYXJjaGl2ZS5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0U2FmZUVudHJ5TmFtZShlbnRyeU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICBpZiAoZW50cnlOYW1lLnN0YXJ0c1dpdGgoRU5UUllfTkFNRV9TRVBBUkFUT1IpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBhYnNvbHV0ZSBhcmNoaXZlIGVudHJ5ICcke2VudHJ5TmFtZX0nLmApO1xuICB9XG5cbiAgaWYgKFdJTkRPV1NfRFJJVkVfUFJFRklYX1JFR19FWFAudGVzdChlbnRyeU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZWZ1c2luZyB0byBleHRyYWN0IHRoZSBkcml2ZS1xdWFsaWZpZWQgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jy5gKTtcbiAgfVxuXG4gIGlmIChlbnRyeU5hbWUuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggdXNlcyBhIGJhY2tzbGFzaCBzZXBhcmF0b3IuYCk7XG4gIH1cblxuICBpZiAoZW50cnlOYW1lLnNwbGl0KEVOVFJZX05BTUVfU0VQQVJBVE9SKS5pbmNsdWRlcygnLi4nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUmVmdXNpbmcgdG8gZXh0cmFjdCB0aGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeU5hbWV9Jywgd2hpY2ggcG9pbnRzIG91dHNpZGUgdGhlIHRhcmdldCBkaXJlY3RvcnkuYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBMb2NhdGVzIHRoZSBlbmQtb2YtY2VudHJhbC1kaXJlY3RvcnkgcmVjb3JkIGFuZCByZXR1cm5zIGl0cyBvZmZzZXQuXG4gKlxuICogVGhlIHJlY29yZCBzaXRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYXJjaGl2ZSB1bmxlc3MgYSB0cmFpbGluZyBjb21tZW50IGZvbGxvd3MgaXQsIHNvIGl0IGlzIGZvdW5kXG4gKiBieSBzY2FubmluZyBiYWNrd2FyZHMgb3ZlciB0aGUgY29tbWVudCdzIG1heGltdW0gbGVuZ3RoIHJhdGhlciB0aGFuIGFzc3VtZWQgdG8gYmUgYXQgYSBmaXhlZCBwbGFjZS5cbiAqXG4gKiBAcGFyYW0gYXJjaGl2ZSAtIFRoZSByYXcgWklQIGFyY2hpdmUgYnl0ZXMuXG4gKiBAcmV0dXJucyBUaGUgcmVjb3JkJ3Mgb2Zmc2V0LlxuICovXG5mdW5jdGlvbiBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmU6IEJ1ZmZlcik6IG51bWJlciB7XG4gIGNvbnN0IGxhc3RQb3NzaWJsZU9mZnNldCA9IGFyY2hpdmUubGVuZ3RoIC0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJWkU7XG4gIGNvbnN0IGZpcnN0UG9zc2libGVPZmZzZXQgPSBNYXRoLm1heCgwLCBsYXN0UG9zc2libGVPZmZzZXQgLSBNQVhfQVJDSElWRV9DT01NRU5UX0xFTkdUSCk7XG5cbiAgZm9yIChsZXQgb2Zmc2V0ID0gbGFzdFBvc3NpYmxlT2Zmc2V0OyBvZmZzZXQgPj0gZmlyc3RQb3NzaWJsZU9mZnNldDsgb2Zmc2V0LS0pIHtcbiAgICBpZiAoYXJjaGl2ZS5yZWFkVUludDMyTEUob2Zmc2V0KSA9PT0gRU5EX09GX0NFTlRSQUxfRElSRUNUT1JZX1NJR05BVFVSRSkge1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmNoaXZlIGlzIG5vdCBhIFpJUCBmaWxlOiBpdHMgZW5kLW9mLWNlbnRyYWwtZGlyZWN0b3J5IHJlY29yZCBpcyBtaXNzaW5nLicpO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjZW50cmFsIGRpcmVjdG9yeSwgd2hpY2ggaXMgdGhlIGFyY2hpdmUncyBhdXRob3JpdGF0aXZlIGluZGV4IG9mIGl0cyBlbnRyaWVzLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEByZXR1cm5zIE9uZSB7QGxpbmsgWmlwRW50cnl9IHBlciBlbnRyeSwgaW4gdGhlIG9yZGVyIHRoZSBhcmNoaXZlIGxpc3RzIHRoZW0uXG4gKi9cbmZ1bmN0aW9uIHJlYWRDZW50cmFsRGlyZWN0b3J5KGFyY2hpdmU6IEJ1ZmZlcik6IFppcEVudHJ5W10ge1xuICBjb25zdCBlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgPSBmaW5kRW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0KGFyY2hpdmUpO1xuICBjb25zdCBlbnRyeUNvdW50ID0gYXJjaGl2ZS5yZWFkVUludDE2TEUoZW5kT2ZDZW50cmFsRGlyZWN0b3J5T2Zmc2V0ICsgQVJDSElWRV9FTlRSWV9DT1VOVF9PRkZTRVQpO1xuICBsZXQgZW50cnlPZmZzZXQgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbmRPZkNlbnRyYWxEaXJlY3RvcnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9TVEFSVF9PRkZTRVQpO1xuXG4gIGlmIChlbnRyeUNvdW50ID09PSBTQVRVUkFURURfVUlOVF8xNiB8fCBlbnRyeU9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1pJUDY0IGFyY2hpdmVzIGFyZSBub3Qgc3VwcG9ydGVkLicpO1xuICB9XG5cbiAgY29uc3QgZW50cmllczogWmlwRW50cnlbXSA9IFtdO1xuICBmb3IgKGxldCBlbnRyeUluZGV4ID0gMDsgZW50cnlJbmRleCA8IGVudHJ5Q291bnQ7IGVudHJ5SW5kZXgrKykge1xuICAgIGlmIChhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCkgIT09IENFTlRSQUxfRElSRUNUT1JZX0hFQURFUl9TSUdOQVRVUkUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUncyBjZW50cmFsIGRpcmVjdG9yeSBpcyBjb3JydXB0IGF0IGVudHJ5ICR7U3RyaW5nKGVudHJ5SW5kZXgpfS5gKTtcbiAgICB9XG5cbiAgICBjb25zdCBmbGFncyA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRkxBR1NfT0ZGU0VUKTtcbiAgICBpZiAoZmxhZ3MgJSBFTkNSWVBURURfRkxBR19ESVZJU09SID09PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuY3J5cHRlZCBaSVAgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29tcHJlc3NlZFNpemUgPSBhcmNoaXZlLnJlYWRVSW50MzJMRShlbnRyeU9mZnNldCArIENFTlRSQUxfRElSRUNUT1JZX0NPTVBSRVNTRURfU0laRV9PRkZTRVQpO1xuICAgIGNvbnN0IGxvY2FsSGVhZGVyT2Zmc2V0ID0gYXJjaGl2ZS5yZWFkVUludDMyTEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9MT0NBTF9IRUFERVJfT0ZGU0VUX09GRlNFVCk7XG4gICAgaWYgKGNvbXByZXNzZWRTaXplID09PSBTQVRVUkFURURfVUlOVF8zMiB8fCBsb2NhbEhlYWRlck9mZnNldCA9PT0gU0FUVVJBVEVEX1VJTlRfMzIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWklQNjQgYXJjaGl2ZXMgYXJlIG5vdCBzdXBwb3J0ZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZUxlbmd0aCA9IGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfTkFNRV9MRU5HVEhfT0ZGU0VUKTtcbiAgICBjb25zdCBuYW1lT2Zmc2V0ID0gZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9IRUFERVJfU0laRTtcbiAgICBlbnRyaWVzLnB1c2goe1xuICAgICAgY29tcHJlc3NlZFNpemUsXG4gICAgICBjb21wcmVzc2lvbk1ldGhvZDogYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01QUkVTU0lPTl9NRVRIT0RfT0ZGU0VUKSxcbiAgICAgIGxvY2FsSGVhZGVyT2Zmc2V0LFxuICAgICAgbmFtZTogYXJjaGl2ZS50b1N0cmluZygndXRmLTgnLCBuYW1lT2Zmc2V0LCBuYW1lT2Zmc2V0ICsgbmFtZUxlbmd0aClcbiAgICB9KTtcblxuICAgIGVudHJ5T2Zmc2V0ID0gbmFtZU9mZnNldFxuICAgICAgKyBuYW1lTGVuZ3RoXG4gICAgICArIGFyY2hpdmUucmVhZFVJbnQxNkxFKGVudHJ5T2Zmc2V0ICsgQ0VOVFJBTF9ESVJFQ1RPUllfRVhUUkFfTEVOR1RIX09GRlNFVClcbiAgICAgICsgYXJjaGl2ZS5yZWFkVUludDE2TEUoZW50cnlPZmZzZXQgKyBDRU5UUkFMX0RJUkVDVE9SWV9DT01NRU5UX0xFTkdUSF9PRkZTRVQpO1xuICB9XG5cbiAgcmV0dXJuIGVudHJpZXM7XG59XG5cbi8qKlxuICogUmVhZHMgYW5kIGRlY29tcHJlc3NlcyBvbmUgZW50cnkncyBieXRlcy5cbiAqXG4gKiBUaGUgZGF0YSdzIHN0YXJ0IGlzIGNvbXB1dGVkIGZyb20gdGhlIExPQ0FMIGhlYWRlciByYXRoZXIgdGhhbiB0aGUgY2VudHJhbCBvbmU6IHRoZSB0d28gY2FycnlcbiAqIGluZGVwZW5kZW50IG5hbWUgYW5kIGV4dHJhLWZpZWxkIGxlbmd0aHMsIGFuZCBvbmx5IHRoZSBsb2NhbCBwYWlyIGRlc2NyaWJlcyB3aGVyZSB0aGUgYnl0ZXNcbiAqIGFjdHVhbGx5IGJlZ2luLlxuICpcbiAqIEBwYXJhbSBhcmNoaXZlIC0gVGhlIHJhdyBaSVAgYXJjaGl2ZSBieXRlcy5cbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeSwgYXMgcmVhZCBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeS5cbiAqIEByZXR1cm5zIFRoZSBlbnRyeSdzIHVuY29tcHJlc3NlZCBjb250ZW50LlxuICovXG5mdW5jdGlvbiByZWFkRW50cnlEYXRhKGFyY2hpdmU6IEJ1ZmZlciwgZW50cnk6IFppcEVudHJ5KTogQnVmZmVyIHtcbiAgaWYgKGFyY2hpdmUucmVhZFVJbnQzMkxFKGVudHJ5LmxvY2FsSGVhZGVyT2Zmc2V0KSAhPT0gTE9DQUxfRklMRV9IRUFERVJfU0lHTkFUVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYXJjaGl2ZSBlbnRyeSAnJHtlbnRyeS5uYW1lfScgaGFzIGEgY29ycnVwdCBsb2NhbCBoZWFkZXIuYCk7XG4gIH1cblxuICBjb25zdCBkYXRhT2Zmc2V0ID0gZW50cnkubG9jYWxIZWFkZXJPZmZzZXRcbiAgICArIExPQ0FMX0hFQURFUl9TSVpFXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9OQU1FX0xFTkdUSF9PRkZTRVQpXG4gICAgKyBhcmNoaXZlLnJlYWRVSW50MTZMRShlbnRyeS5sb2NhbEhlYWRlck9mZnNldCArIExPQ0FMX0hFQURFUl9FWFRSQV9MRU5HVEhfT0ZGU0VUKTtcbiAgY29uc3QgZGF0YUVuZCA9IGRhdGFPZmZzZXQgKyBlbnRyeS5jb21wcmVzc2VkU2l6ZTtcbiAgaWYgKGRhdGFFbmQgPiBhcmNoaXZlLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgaXMgdHJ1bmNhdGVkOiBlbnRyeSAnJHtlbnRyeS5uYW1lfScgcnVucyBwYXN0IGl0cyBlbmQuYCk7XG4gIH1cblxuICBjb25zdCBjb21wcmVzc2VkRGF0YSA9IGFyY2hpdmUuc3ViYXJyYXkoZGF0YU9mZnNldCwgZGF0YUVuZCk7XG4gIHN3aXRjaCAoZW50cnkuY29tcHJlc3Npb25NZXRob2QpIHtcbiAgICBjYXNlIENPTVBSRVNTSU9OX01FVEhPRF9ERUZMQVRFRDoge1xuICAgICAgcmV0dXJuIGluZmxhdGVSYXdTeW5jKGNvbXByZXNzZWREYXRhKTtcbiAgICB9XG4gICAgY2FzZSBDT01QUkVTU0lPTl9NRVRIT0RfU1RPUkVEOiB7XG4gICAgICByZXR1cm4gY29tcHJlc3NlZERhdGE7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFyY2hpdmUgZW50cnkgJyR7ZW50cnkubmFtZX0nIHVzZXMgdW5zdXBwb3J0ZWQgY29tcHJlc3Npb24gbWV0aG9kICR7U3RyaW5nKGVudHJ5LmNvbXByZXNzaW9uTWV0aG9kKX0uYCk7XG4gICAgfVxuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQTBCQSxTQUFTLHNCQUFzQjtBQUUvQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXlFUCxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLHFDQUFxQztBQUMzQyxNQUFNLDhCQUE4QjtBQUVwQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLDZCQUE2QjtBQUluQyxNQUFNLG9CQUFvQjtBQUMxQixNQUFNLG9CQUFvQjtBQUcxQixNQUFNLDZCQUE2QjtBQUNuQyxNQUFNLGlDQUFpQztBQUd2QyxNQUFNLGlDQUFpQztBQUN2QyxNQUFNLDhDQUE4QztBQUNwRCxNQUFNLDJDQUEyQztBQUNqRCxNQUFNLHVDQUF1QztBQUM3QyxNQUFNLHdDQUF3QztBQUM5QyxNQUFNLDBD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
|
|
@@ -79,7 +79,7 @@ export interface AsyncDisposableEx extends AsyncDisposable {
|
|
|
79
79
|
*
|
|
80
80
|
* @returns A {@link Promise} that resolves once disposal completes.
|
|
81
81
|
*/
|
|
82
|
-
asyncDispose: () => Promise<void>;
|
|
82
|
+
readonly asyncDispose: () => Promise<void>;
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* A callback invoked when an {@link AsyncCallbackDisposable} is disposed.
|
|
@@ -162,7 +162,7 @@ export interface DisposableEx extends Disposable {
|
|
|
162
162
|
/**
|
|
163
163
|
* Disposes the object. Delegates to `this[Symbol.dispose]()`.
|
|
164
164
|
*/
|
|
165
|
-
dispose: () => void;
|
|
165
|
+
readonly dispose: () => void;
|
|
166
166
|
}
|
|
167
167
|
/**
|
|
168
168
|
* A callback invoked when a {@link CallbackDisposable} is disposed.
|