@mnaoumov/typescript-lib 1.7.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/debug.cjs +3 -11
- package/dist/lib/cjs/debug.d.cts +0 -8
- 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/debug.d.mts +0 -8
- package/dist/lib/esm/debug.mjs +2 -9
- 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
|
@@ -280,4 +280,4 @@ function setElementText(element, text) {
|
|
|
280
280
|
toPx,
|
|
281
281
|
waitUntilConnected
|
|
282
282
|
});
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0bWwtZWxlbWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9ic2lkaWFuLXJ1bnRpbWUtYWdub3N0aWMgaGVscGVycyBmb3Igd29ya2luZyB3aXRoIEhUTUwgZWxlbWVudHMuXG4gKlxuICogU2V2ZXJhbCBoZWxwZXJzIGhlcmUgbWlycm9yIGJlaGF2aW9yIHRoYXQgdGhlIE9ic2lkaWFuIHJ1bnRpbWUgaW5qZWN0cyBvbnRvIHRoZSBET00gcHJvdG90eXBlc1xuICogKGBjcmVhdGVFbGAvYGNyZWF0ZURpdmAvYGNyZWF0ZVNwYW5gL2BjcmVhdGVTdmdgL2BjcmVhdGVGcmFnbWVudGAsIGBOb2RlLnByb3RvdHlwZS5pbnN0YW5jZU9mYCxcbiAqIGBFbGVtZW50LnByb3RvdHlwZS5zZXRUZXh0YC9gc2V0QXR0cnNgKS4gVG8gc3RheSBpbmRlcGVuZGVudCBvZiB0aGUgT2JzaWRpYW4gcnVudGltZSwgdGhhdCBiZWhhdmlvclxuICogaXMgcmVpbXBsZW1lbnRlZCBoZXJlIGluIHN0YW5kYXJkIERPTSwgcG9ydGVkIGZyb20gT2JzaWRpYW4ncyBvd24gaW1wbGVtZW50YXRpb24gaW5cbiAqIGBvYnNpZGlhbi5hc2FyL2VuaGFuY2UuanNgLiBTZWUgdGhlIGBvYnNpZGlhbi12ZXJzaW9uc2AgcHJvamVjdDsgcmV2YWxpZGF0ZSB0aGUgcG9ydCB3aGVuIE9ic2lkaWFuXG4gKiBjaGFuZ2VzIGBlbmhhbmNlLmpzYCAodGhlcmUgaXMgYSByZW1pbmRlciBpbiBgQ0xBVURFLm1kYCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbmNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVFbEFzeW5jfSBhbmQgaXRzIHNpYmxpbmdzIGFwcGx5OiB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZlxuICogT2JzaWRpYW4ncyBgRG9tRWxlbWVudEluZm9gLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuIEFuIE9ic2lkaWFuXG4gKiBgRG9tRWxlbWVudEluZm9gIHZhbHVlIGlzIGFzc2lnbmFibGUgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGVzIHRvIHNldDsgYG51bGxgIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHI/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbCB8IG51bWJlciB8IHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3Mgb3IgY2xhc3Nlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNscz86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHRvIGluc2VydCB0aGUgZWxlbWVudCBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogTm9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgdGhlIGVsZW1lbnQgYXMgdGhlIHBhcmVudCdzIGZpcnN0IGNoaWxkIGluc3RlYWQgb2YgaXRzIGxhc3QuXG4gICAqL1xuICByZWFkb25seSBwcmVwZW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ/OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHRpcCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFNWRyBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVTdmdBc3luY30gYXBwbGllczogdGhlIHN1YnNldCBvZiBPYnNpZGlhbidzIGBTdmdFbGVtZW50SW5mb2AgaXRcbiAqIHN1cHBvcnRzLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU3ZnRWxlbWVudEluZm8ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZXMgdG8gc2V0OyBgbnVsbGAgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cj86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBvciBjbGFzc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdG8gaW5zZXJ0IHRoZSBlbGVtZW50IGludG8uXG4gICAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBOb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCB0aGUgZWxlbWVudCBhcyB0aGUgcGFyZW50J3MgZmlyc3QgY2hpbGQgaW5zdGVhZCBvZiBpdHMgbGFzdC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXBlbmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgSFRNTCBlbGVtZW50IHRoYXQgY2FuIGJlIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAvKipcbiAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIGNoZWNrVmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVwb3J0VmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gc2V0IG9uIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgc2V0Q3VzdG9tVmFsaWRpdHk6IChlcnJvcjogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciBtZXNzYWdlIG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGl2IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBkaXYgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRpdi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpdkFzeW5jKFxuICBvPzogQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHwgc3RyaW5nLFxuICBjYWxsYmFjaz86IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICBjb25zdCBkaXYgPSBjcmVhdGVIdG1sRWxlbWVudCgnZGl2Jywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZGl2KTtcbiAgcmV0dXJuIGRpdjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVsZW1lbnQgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgLlxuICogQHBhcmFtIHRhZyAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbyAtIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZWxlbWVudC5cbiAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGggT2JzaWRpYW4ncyBgY3JlYXRlRWxgIChvciBjcmVhdGVTdmcsIGNvcnJlc3BvbmRpbmdseSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbEFzeW5jPEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuICB0YWc6IEssXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLXSkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10+IHtcbiAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUh0bWxFbGVtZW50KHRhZywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZWxlbWVudCk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEb2N1bWVudEZyYWdtZW50IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIERvY3VtZW50RnJhZ21lbnQgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIERvY3VtZW50RnJhZ21lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudEFzeW5jKGNhbGxiYWNrPzogKGVsZW1lbnQ6IERvY3VtZW50RnJhZ21lbnQpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPERvY3VtZW50RnJhZ21lbnQ+IHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIG8gLSBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHNwYW4gaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNwYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcGFuQXN5bmMoXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHtcbiAgY29uc3Qgc3BhbiA9IGNyZWF0ZUh0bWxFbGVtZW50KCdzcGFuJywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3Bhbik7XG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdmcgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBTVkdFbGVtZW50VGFnTmFtZU1hcGAuXG4gKiBAcGFyYW0gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBzdmcgdG8gY3JlYXRlLlxuICogQHBhcmFtIG8gLSBUaGUgc3ZnIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgc3ZnIGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdmcuXG4gKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIE9ic2lkaWFuJ3MgYGNyZWF0ZVN2Z2AgKG9yIGNyZWF0ZUVsLCBjb3JyZXNwb25kaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3ZnQXN5bmM8SyBleHRlbmRzIGtleW9mIFNWR0VsZW1lbnRUYWdOYW1lTWFwPihcbiAgdGFnOiBLLFxuICBvPzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4pOiBQcm9taXNlPFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdPiB7XG4gIGNvbnN0IHN2ZyA9IGNyZWF0ZVN2Z0VsZW1lbnQodGFnLCBvKTtcbiAgYXdhaXQgY2FsbGJhY2s/LihzdmcpO1xuICByZXR1cm4gc3ZnO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBsb2FkZWQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBlbnN1cmUgaXMgbG9hZGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxvYWRlZChlbGVtZW50OiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0xvYWRlZChlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB3aW4gPSBnZXROb2RlV2luZG93KGVsZW1lbnQpO1xuICBpZiAoXG4gICAgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MQm9keUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSW1hZ2VFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTElGcmFtZUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MRW1iZWRFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTE9iamVjdEVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MU3R5bGVFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudClcbiAgKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc29sdmUpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlc29sdmUpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGdldExvYWRhYmxlRWxlbWVudHMoZWxlbWVudCkubWFwKChsb2FkYWJsZUVsZW1lbnQpID0+IGVuc3VyZUxvYWRlZChsb2FkYWJsZUVsZW1lbnQpKSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgd2luZG93IGEgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqXG4gKiBBIGRvY3VtZW50IGlzIHRoZSBvbmUgbm9kZSB3aG9zZSBgb3duZXJEb2N1bWVudGAgaXMgYG51bGxgLCBzbyB0aGUgYG93bmVyRG9jdW1lbnRgLWNoYXNpbmcgbG9va3VwXG4gKiB1c2VkIGZvciBvcmRpbmFyeSBub2RlcyByZXNvbHZlcyBhIGRvY3VtZW50IHRvIHRoZSB3cm9uZyB3aW5kb3cuIFJlYWRpbmcgYGRlZmF1bHRWaWV3YCBvZmYgdGhlXG4gKiBkb2N1bWVudCBpdHNlbGYgaXMgd2hhdCBrZWVwcyBhIHBvcC1vdXQgd2luZG93J3MgY29vcmRpbmF0ZXMgbWVhc3VyZWQgYWdhaW5zdCB0aGF0IHdpbmRvdy5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGdldCB0aGUgd2luZG93IG9mLlxuICogQHJldHVybnMgVGhlIHdpbmRvdyB0aGUgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgZG9jdW1lbnQgaXMgZGV0YWNoZWQgYW5kIHRoZXJlZm9yZSBoYXMgbm8gd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRXaW5kb3coZG9jOiBEb2N1bWVudCk6IFdpbmRvdyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShkb2MuZGVmYXVsdFZpZXcsICdUaGUgZG9jdW1lbnQgaGFzIG5vIHdpbmRvdycpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHotaW5kZXggb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBnZXQgdGhlIHotaW5kZXggb2YuXG4gKiBAcmV0dXJucyBUaGUgei1pbmRleCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpJbmRleChlbGVtZW50OiBFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IGVsZW1lbnQyOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKGVsZW1lbnQyKSB7XG4gICAgY29uc3QgekluZGV4U3RyaW5nID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50MikuekluZGV4O1xuICAgIGNvbnN0IHpJbmRleCA9IE51bWJlci5wYXJzZUludCh6SW5kZXhTdHJpbmcsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc05hTih6SW5kZXgpKSB7XG4gICAgICByZXR1cm4gekluZGV4O1xuICAgIH1cbiAgICBlbGVtZW50MiA9IGVsZW1lbnQyLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgb2Zmc2V0IHBhcmVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIG9mZnNldCBwYXJlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZUluT2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBwYXJlbnRFbGVtZW50UmVjdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICBwYXJlbnRFbGVtZW50UmVjdC50b3AgPD0gZWxlbWVudFJlY3QudG9wXG4gICAgJiYgZWxlbWVudFJlY3QuYm90dG9tIDw9IHBhcmVudEVsZW1lbnRSZWN0LmJvdHRvbVxuICAgICYmIHBhcmVudEVsZW1lbnRSZWN0LmxlZnQgPD0gZWxlbWVudFJlY3QubGVmdFxuICAgICYmIGVsZW1lbnRSZWN0LnJpZ2h0IDw9IHBhcmVudEVsZW1lbnRSZWN0LnJpZ2h0XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvYWRlZChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3coZWxlbWVudCk7XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEJvZHlFbGVtZW50KSkge1xuICAgIGNvbnN0IHJlYWR5U3RhdGUgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZTtcbiAgICByZXR1cm4gcmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCByZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEltYWdlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jb21wbGV0ZSAmJiBlbGVtZW50Lm5hdHVyYWxXaWR0aCA+IDA7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxFbWJlZEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuICEhZWxlbWVudC5nZXRTVkdEb2N1bWVudCgpO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KSkge1xuICAgIHJldHVybiBlbGVtZW50LnJlbCAhPT0gJ3N0eWxlc2hlZXQnIHx8IGVsZW1lbnQuc2hlZXQgIT09IG51bGw7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MT2JqZWN0RWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudCB8fCAhIWVsZW1lbnQuZ2V0U1ZHRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxTY3JpcHRFbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFN0eWxlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LnNoZWV0O1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudCkpIHtcbiAgICBjb25zdCBSRUFEWV9TVEFURV9MT0FERUQgPSAyO1xuICAgIHJldHVybiBlbGVtZW50LnJlYWR5U3RhdGUgPT09IFJFQURZX1NUQVRFX0xPQURFRDtcbiAgfVxuXG4gIHJldHVybiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQpLmV2ZXJ5KChsb2FkYWJsZUVsZW1lbnQpID0+IGlzTG9hZGVkKGxvYWRhYmxlRWxlbWVudCkpO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGFuY2VzdG9yIG5vZGVzIG9mIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gYWRkIHRoZSBldmVudCBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25BbmNlc3RvclNjcm9sbE9yUmVzaXplKG5vZGU6IE5vZGUsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3cobm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9yczogRXZlbnRUYXJnZXRbXSA9IFtub2RlLm93bmVyRG9jdW1lbnQgPz8gd2luLmRvY3VtZW50LCB3aW5dO1xuXG4gIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuXG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICBsZXQgaXNFdmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgYW5jZXN0b3Igb2YgYW5jZXN0b3JzKSB7XG4gICAgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2FsbGJhY2tTbW9vdGgsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGFuY2VzdG9ycykge1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2FsbGJhY2tTbW9vdGgoKTogdm9pZCB7XG4gICAgaWYgKGlzRXZlbnRUcmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0V2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcblxuICAgIHdpbi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIGFzIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfXB4YDtcbn1cblxuLyoqXG4gKiBXYWl0cyB1bnRpbCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0VW50aWxDb25uZWN0ZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPYnNpZGlhbidzIGBlbC5vbk5vZGVJbnNlcnRlZGAgdXNlcyBhIGBub2RlLWluc2VydGVkYCBDU1Mga2V5ZnJhbWUgZnJvbSBPYnNpZGlhbidzIHN0eWxlc2hlZXQuXG4gICAgLy8gVGhlIGFnbm9zdGljIGVxdWl2YWxlbnQgaW5zdGVhZCBvYnNlcnZlcyB0aGUgZWxlbWVudCdzIGRvY3VtZW50IGZvciBpdCBiZWNvbWluZyBjb25uZWN0ZWQuXG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyAoZ2V0Tm9kZVdpbmRvdyhlbGVtZW50KSkuTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShvd25lckRvY3VtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZiBPYnNpZGlhbidzIGBEb21FbGVtZW50SW5mb2AgdGhhdCBpdHMgYGNyZWF0ZUVsYFxuICogc3VwcG9ydHMgXHUyMDE0IGBjbHNgLCBgdGV4dGAsIGBhdHRyYCwgYHRpdGxlYCwgYW5kIGBwYXJlbnRgL2BwcmVwZW5kYC4gVGhlIGVsZW1lbnQtdHlwZS1zcGVjaWZpY1xuICogZmllbGRzIChgdmFsdWVgLCBgdHlwZWAsIGBwbGFjZWhvbGRlcmAsIGBocmVmYCkgYW5kIHRoZSBgb24qYCBldmVudC1oYW5kbGVyIGtleXMgYXJlIGludGVudGlvbmFsbHlcbiAqIE5PVCBwb3J0ZWQgKG5vIGludGVybmFsIGNhbGxlciBuZWVkcyB0aGVtKTsgZXh0ZW5kIHRoaXMgaWYgYSBjb25zdW1lciBkb2VzIFx1MjAxNCBhbmQgcmV2YWxpZGF0ZSBhZ2FpbnN0XG4gKiBgZW5oYW5jZS5qc2AgKHNlZSB0aGUgYEBmaWxlYCBub3RlIGFuZCBgQ0xBVURFLm1kYCkuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhcHBseSB0aGUgaW5mbyB0by5cbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mbyAob3IgYSBiYXJlIGNsYXNzIHN0cmluZykuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5RG9tRWxlbWVudEluZm8oZWxlbWVudDogSFRNTEVsZW1lbnQsIG86IENyZWF0ZUh0bWxFbGVtZW50SW5mbyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBjb25zdCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShpbmZvLmNscykgPyBpbmZvLmNscy5qb2luKCcgJykgOiBpbmZvLmNscztcbiAgfVxuICBpZiAoaW5mby50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRFbGVtZW50VGV4dChlbGVtZW50LCBpbmZvLnRleHQpO1xuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50LCBpbmZvLmF0dHIpO1xuICB9XG4gIGlmIChpbmZvLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50LnRpdGxlID0gaW5mby50aXRsZTtcbiAgfVxuICBpbnNlcnRJbnRvUGFyZW50KGVsZW1lbnQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIdG1sRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEssIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcpOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBhcHBseURvbUVsZW1lbnRJbmZvKGVsZW1lbnQsIG8pO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgU1ZHRWxlbWVudFRhZ05hbWVNYXA+KHRhZzogSywgbz86IENyZWF0ZVN2Z0VsZW1lbnRJbmZvIHwgc3RyaW5nKTogU1ZHRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRSwgdGFnKTtcbiAgY29uc3QgaW5mbzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGluZm8uY2xzKSkge1xuICAgICAgc3ZnLmNsYXNzTGlzdC5hZGQoLi4uaW5mby5jbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmcuY2xhc3NMaXN0LmFkZChpbmZvLmNscyk7XG4gICAgfVxuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhzdmcsIGluZm8uYXR0cik7XG4gIH1cbiAgaW5zZXJ0SW50b1BhcmVudChzdmcsIGluZm8pO1xuICByZXR1cm4gc3ZnO1xufVxuXG5mdW5jdGlvbiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50W10ge1xuICByZXR1cm4gWy4uLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYm9keSwgaW1nLCBpZnJhbWUsIGVtYmVkLCBsaW5rLCBvYmplY3QsIHNjcmlwdCwgc3R5bGUsIHRyYWNrJyldO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlV2luZG93KG5vZGU6IE5vZGUpOiB0eXBlb2YgZ2xvYmFsVGhpcyAmIFdpbmRvdyB7XG4gIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IHdpbmRvdztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SW50b1BhcmVudChlbGVtZW50OiBFbGVtZW50LCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBDcmVhdGVTdmdFbGVtZW50SW5mbyk6IHZvaWQge1xuICBpZiAoIWluZm8ucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLnByZXBlbmQpIHtcbiAgICBpbmZvLnBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgaW5mby5wYXJlbnQuZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZCAtLSBgcGFyZW50YCBpcyBhIGBOb2RlYCwgYW5kIGBhcHBlbmRgIGlzIGRlY2xhcmVkIG9uIGBQYXJlbnROb2RlYCwgbm90IG9uIGBOb2RlYC5cbiAgICBpbmZvLnBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luc3RhbmNlT2Y8VCBleHRlbmRzIE5vZGU+KG5vZGU6IE5vZGUsIGN0b3I6IGFic3RyYWN0IG5ldyAoLi4uJGFyZ3VtZW50czogbmV2ZXJbXSkgPT4gVCk6IG5vZGUgaXMgVCB7XG4gIC8vIEFnbm9zdGljIHJlaW1wbGVtZW50YXRpb24gb2YgT2JzaWRpYW4ncyBgTm9kZS5wcm90b3R5cGUuaW5zdGFuY2VPZmAgKGVuaGFuY2UuanMpLlxuICAvLyBUaGUgY2FsbGVyIHJlc29sdmVzIGBjdG9yYCBpbiB0aGUgbm9kZSdzIG93biByZWFsbSAodmlhIGBnZXROb2RlV2luZG93YCksIGtlZXBpbmcgaXQgY3Jvc3Mtd2luZG93IHNhZmUuXG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgY3Rvcjtcbn1cblxuZnVuY3Rpb24gc2V0RWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudDogRWxlbWVudCwgYXR0cmlidXRlOiBOb25OdWxsYWJsZTxDcmVhdGVIdG1sRWxlbWVudEluZm9bJ2F0dHInXT4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItdG9nZ2xlLWF0dHJpYnV0ZSAtLSBgdG9nZ2xlQXR0cmlidXRlYCBvbmx5IGV2ZXIgc2V0cyB0aGUgZW1wdHkgc3RyaW5nLCBzbyBpdCBjYW5ub3QgY2FycnkgYFN0cmluZyh2YWx1ZSlgLiBUaGUgcnVsZSBtYXRjaGVzIHRoZSByZW1vdmUvc2V0IHNoYXBlIHdpdGhvdXQgc2VlaW5nIHRoYXQgdGhlIHZhbHVlIGlzIHdoYXQgdGhpcyBicmFuY2ggZXhpc3RzIHRvIHdyaXRlLlxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFbGVtZW50VGV4dChlbGVtZW50OiBIVE1MRWxlbWVudCwgdGV4dDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQge1xuICBpZiAodGV4dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBlbGVtZW50LnJlcGxhY2VDaGlsZHJlbih0ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsd0JBQW1DO0FBQ25DLHlCQUFrQztBQUVsQyxNQUFNLGdCQUFnQjtBQXFHdEIsZUFBc0IsZUFDcEIsR0FDQSxVQUN5QjtBQUN6QixRQUFNLE1BQU0sa0JBQWtCLE9BQU8sQ0FBQztBQUN0QyxRQUFNLFdBQVcsR0FBRztBQUNwQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixjQUNwQixLQUNBLEdBQ0EsVUFDbUM7QUFDbkMsUUFBTSxVQUFVLGtCQUFrQixLQUFLLENBQUM7QUFDeEMsUUFBTSxXQUFXLE9BQU87QUFDeEIsU0FBTztBQUNUO0FBUUEsZUFBc0Isb0JBQW9CLFVBQXVGO0FBQy9ILFFBQU0sV0FBVyxTQUFTLHVCQUF1QjtBQUNqRCxRQUFNLFdBQVcsUUFBUTtBQUN6QixTQUFPO0FBQ1Q7QUFTQSxlQUFzQixnQkFDcEIsR0FDQSxVQUMwQjtBQUMxQixRQUFNLE9BQU8sa0JBQWtCLFFBQVEsQ0FBQztBQUN4QyxRQUFNLFdBQVcsSUFBSTtBQUNyQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixlQUNwQixLQUNBLEdBQ0EsVUFDa0M7QUFDbEMsUUFBTSxNQUFNLGlCQUFpQixLQUFLLENBQUM7QUFDbkMsUUFBTSxXQUFXLEdBQUc7QUFDcEIsU0FBTztBQUNUO0FBUUEsZUFBc0IsYUFBYSxTQUFpQztBQUNsRSxNQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3JCO0FBQUEsRUFDRjtBQUNBLFFBQU0sTUFBTSxjQUFjLE9BQU87QUFDakMsTUFDRSxhQUFhLFNBQVMsSUFBSSxlQUFlLEtBQ3RDLGFBQWEsU0FBUyxJQUFJLGdCQUFnQixLQUMxQyxhQUFhLFNBQVMsSUFBSSxpQkFB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
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2h0bWwtZWxlbWVudC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIE9ic2lkaWFuLXJ1bnRpbWUtYWdub3N0aWMgaGVscGVycyBmb3Igd29ya2luZyB3aXRoIEhUTUwgZWxlbWVudHMuXG4gKlxuICogU2V2ZXJhbCBoZWxwZXJzIGhlcmUgbWlycm9yIGJlaGF2aW9yIHRoYXQgdGhlIE9ic2lkaWFuIHJ1bnRpbWUgaW5qZWN0cyBvbnRvIHRoZSBET00gcHJvdG90eXBlc1xuICogKGBjcmVhdGVFbGAvYGNyZWF0ZURpdmAvYGNyZWF0ZVNwYW5gL2BjcmVhdGVTdmdgL2BjcmVhdGVGcmFnbWVudGAsIGBOb2RlLnByb3RvdHlwZS5pbnN0YW5jZU9mYCxcbiAqIGBFbGVtZW50LnByb3RvdHlwZS5zZXRUZXh0YC9gc2V0QXR0cnNgKS4gVG8gc3RheSBpbmRlcGVuZGVudCBvZiB0aGUgT2JzaWRpYW4gcnVudGltZSwgdGhhdCBiZWhhdmlvclxuICogaXMgcmVpbXBsZW1lbnRlZCBoZXJlIGluIHN0YW5kYXJkIERPTSwgcG9ydGVkIGZyb20gT2JzaWRpYW4ncyBvd24gaW1wbGVtZW50YXRpb24gaW5cbiAqIGBvYnNpZGlhbi5hc2FyL2VuaGFuY2UuanNgLiBTZWUgdGhlIGBvYnNpZGlhbi12ZXJzaW9uc2AgcHJvamVjdDsgcmV2YWxpZGF0ZSB0aGUgcG9ydCB3aGVuIE9ic2lkaWFuXG4gKiBjaGFuZ2VzIGBlbmhhbmNlLmpzYCAodGhlcmUgaXMgYSByZW1pbmRlciBpbiBgQ0xBVURFLm1kYCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnLi9kaXNwb3NhYmxlLnRzJztcbmltcG9ydCB7IGVuc3VyZU5vbk51bGxhYmxlIH0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbmNvbnN0IFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuXG4vKipcbiAqIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVFbEFzeW5jfSBhbmQgaXRzIHNpYmxpbmdzIGFwcGx5OiB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZlxuICogT2JzaWRpYW4ncyBgRG9tRWxlbWVudEluZm9gLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuIEFuIE9ic2lkaWFuXG4gKiBgRG9tRWxlbWVudEluZm9gIHZhbHVlIGlzIGFzc2lnbmFibGUgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHtcbiAgLyoqXG4gICAqIFRoZSBhdHRyaWJ1dGVzIHRvIHNldDsgYG51bGxgIHJlbW92ZXMgdGhlIGF0dHJpYnV0ZS5cbiAgICovXG4gIHJlYWRvbmx5IGF0dHI/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuIHwgbnVsbCB8IG51bWJlciB8IHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDU1MgY2xhc3Mgb3IgY2xhc3Nlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNscz86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyZW50IHRvIGluc2VydCB0aGUgZWxlbWVudCBpbnRvLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50PzogTm9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbnNlcnQgdGhlIGVsZW1lbnQgYXMgdGhlIHBhcmVudCdzIGZpcnN0IGNoaWxkIGluc3RlYWQgb2YgaXRzIGxhc3QuXG4gICAqL1xuICByZWFkb25seSBwcmVwZW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHRleHQgY29udGVudC5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ/OiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdG9vbHRpcCB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdGl0bGU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFNWRyBlbGVtZW50IGluZm9ybWF0aW9uIHtAbGluayBjcmVhdGVTdmdBc3luY30gYXBwbGllczogdGhlIHN1YnNldCBvZiBPYnNpZGlhbidzIGBTdmdFbGVtZW50SW5mb2AgaXRcbiAqIHN1cHBvcnRzLCBkZWNsYXJlZCBoZXJlIHNvIHRoaXMgbW9kdWxlIG5lZWRzIG5vIE9ic2lkaWFuIHR5cGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlU3ZnRWxlbWVudEluZm8ge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZXMgdG8gc2V0OyBgbnVsbGAgcmVtb3ZlcyB0aGUgYXR0cmlidXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cj86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4gfCBudWxsIHwgbnVtYmVyIHwgc3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIENTUyBjbGFzcyBvciBjbGFzc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2xzPzogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJlbnQgdG8gaW5zZXJ0IHRoZSBlbGVtZW50IGludG8uXG4gICAqL1xuICByZWFkb25seSBwYXJlbnQ/OiBOb2RlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluc2VydCB0aGUgZWxlbWVudCBhcyB0aGUgcGFyZW50J3MgZmlyc3QgY2hpbGQgaW5zdGVhZCBvZiBpdHMgbGFzdC5cbiAgICovXG4gIHJlYWRvbmx5IHByZXBlbmQ/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEEgSFRNTCBlbGVtZW50IHRoYXQgY2FuIGJlIHZhbGlkYXRlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0b3JFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuICAvKipcbiAgICogQ2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZhbGlkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrVmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlcG9ydHMgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3J0VmFsaWRpdHk6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldHMgYSBjdXN0b20gZXJyb3IgbWVzc2FnZSBvbiB0aGUgZWxlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIG1lc3NhZ2UgdG8gc2V0IG9uIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgc2V0Q3VzdG9tVmFsaWRpdHk6IChlcnJvcjogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciBtZXNzYWdlIG9mIHRoZSBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGl2IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24uXG4gKiBAcGFyYW0gY2FsbGJhY2sgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBkaXYgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGRpdi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpdkFzeW5jKFxuICBvPzogQ3JlYXRlSHRtbEVsZW1lbnRJbmZvIHwgc3RyaW5nLFxuICBjYWxsYmFjaz86IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRGl2RWxlbWVudD4ge1xuICBjb25zdCBkaXYgPSBjcmVhdGVIdG1sRWxlbWVudCgnZGl2Jywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZGl2KTtcbiAgcmV0dXJuIGRpdjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGVsZW1lbnQgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgLlxuICogQHBhcmFtIHRhZyAtIFRoZSB0YWcgbmFtZSBvZiB0aGUgZWxlbWVudCB0byBjcmVhdGUuXG4gKiBAcGFyYW0gbyAtIFRoZSBlbGVtZW50IGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgZWxlbWVudC5cbiAqIEByZW1hcmtzIE5vdCByZWZhY3RvcmVkIHRvIHBhcmFtZXRlci1vYmplY3QgcGF0dGVybiwgdG8ga2VlcCB0aGUgcGFyaXR5IHdpdGggT2JzaWRpYW4ncyBgY3JlYXRlRWxgIChvciBjcmVhdGVTdmcsIGNvcnJlc3BvbmRpbmdseSkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVFbEFzeW5jPEsgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuICB0YWc6IEssXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtLXSkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10+IHtcbiAgY29uc3QgZWxlbWVudCA9IGNyZWF0ZUh0bWxFbGVtZW50KHRhZywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZWxlbWVudCk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBEb2N1bWVudEZyYWdtZW50IGFzeW5jaHJvbm91c2x5LlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIERvY3VtZW50RnJhZ21lbnQgaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIERvY3VtZW50RnJhZ21lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVGcmFnbWVudEFzeW5jKGNhbGxiYWNrPzogKGVsZW1lbnQ6IERvY3VtZW50RnJhZ21lbnQpID0+IFByb21pc2FibGU8dm9pZD4pOiBQcm9taXNlPERvY3VtZW50RnJhZ21lbnQ+IHtcbiAgY29uc3QgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oZnJhZ21lbnQpO1xuICByZXR1cm4gZnJhZ21lbnQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHNwYW4gYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHBhcmFtIG8gLSBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbi5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHNwYW4gaXMgY3JlYXRlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNwYW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVTcGFuQXN5bmMoXG4gIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IEhUTUxTcGFuRWxlbWVudCkgPT4gUHJvbWlzYWJsZTx2b2lkPlxuKTogUHJvbWlzZTxIVE1MU3BhbkVsZW1lbnQ+IHtcbiAgY29uc3Qgc3BhbiA9IGNyZWF0ZUh0bWxFbGVtZW50KCdzcGFuJywgbyk7XG4gIGF3YWl0IGNhbGxiYWNrPy4oc3Bhbik7XG4gIHJldHVybiBzcGFuO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdmcgYXN5bmNocm9ub3VzbHkuXG4gKlxuICogQHR5cGVQYXJhbSBLIC0gVGhlIHRhZyBuYW1lIGtleSBmcm9tIGBTVkdFbGVtZW50VGFnTmFtZU1hcGAuXG4gKiBAcGFyYW0gdGFnIC0gVGhlIHRhZyBuYW1lIG9mIHRoZSBzdmcgdG8gY3JlYXRlLlxuICogQHBhcmFtIG8gLSBUaGUgc3ZnIGluZm9ybWF0aW9uLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIGNhbGwgd2hlbiB0aGUgc3ZnIGlzIGNyZWF0ZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdmcuXG4gKiBAcmVtYXJrcyBOb3QgcmVmYWN0b3JlZCB0byBwYXJhbWV0ZXItb2JqZWN0IHBhdHRlcm4sIHRvIGtlZXAgdGhlIHBhcml0eSB3aXRoIE9ic2lkaWFuJ3MgYGNyZWF0ZVN2Z2AgKG9yIGNyZWF0ZUVsLCBjb3JyZXNwb25kaW5nbHkpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3JlYXRlU3ZnQXN5bmM8SyBleHRlbmRzIGtleW9mIFNWR0VsZW1lbnRUYWdOYW1lTWFwPihcbiAgdGFnOiBLLFxuICBvPzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gfCBzdHJpbmcsXG4gIGNhbGxiYWNrPzogKGVsZW1lbnQ6IFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdKSA9PiBQcm9taXNhYmxlPHZvaWQ+XG4pOiBQcm9taXNlPFNWR0VsZW1lbnRUYWdOYW1lTWFwW0tdPiB7XG4gIGNvbnN0IHN2ZyA9IGNyZWF0ZVN2Z0VsZW1lbnQodGFnLCBvKTtcbiAgYXdhaXQgY2FsbGJhY2s/LihzdmcpO1xuICByZXR1cm4gc3ZnO1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBsb2FkZWQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBlbnN1cmUgaXMgbG9hZGVkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUxvYWRlZChlbGVtZW50OiBFbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChpc0xvYWRlZChlbGVtZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB3aW4gPSBnZXROb2RlV2luZG93KGVsZW1lbnQpO1xuICBpZiAoXG4gICAgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MQm9keUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSW1hZ2VFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTElGcmFtZUVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MRW1iZWRFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTE9iamVjdEVsZW1lbnQpXG4gICAgfHwgaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MU3R5bGVFbGVtZW50KVxuICAgIHx8IGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudClcbiAgKSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJlc29sdmUpO1xuICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIHJlc29sdmUpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKGdldExvYWRhYmxlRWxlbWVudHMoZWxlbWVudCkubWFwKChsb2FkYWJsZUVsZW1lbnQpID0+IGVuc3VyZUxvYWRlZChsb2FkYWJsZUVsZW1lbnQpKSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgd2luZG93IGEgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqXG4gKiBBIGRvY3VtZW50IGlzIHRoZSBvbmUgbm9kZSB3aG9zZSBgb3duZXJEb2N1bWVudGAgaXMgYG51bGxgLCBzbyB0aGUgYG93bmVyRG9jdW1lbnRgLWNoYXNpbmcgbG9va3VwXG4gKiB1c2VkIGZvciBvcmRpbmFyeSBub2RlcyByZXNvbHZlcyBhIGRvY3VtZW50IHRvIHRoZSB3cm9uZyB3aW5kb3cuIFJlYWRpbmcgYGRlZmF1bHRWaWV3YCBvZmYgdGhlXG4gKiBkb2N1bWVudCBpdHNlbGYgaXMgd2hhdCBrZWVwcyBhIHBvcC1vdXQgd2luZG93J3MgY29vcmRpbmF0ZXMgbWVhc3VyZWQgYWdhaW5zdCB0aGF0IHdpbmRvdy5cbiAqXG4gKiBAcGFyYW0gZG9jIC0gVGhlIGRvY3VtZW50IHRvIGdldCB0aGUgd2luZG93IG9mLlxuICogQHJldHVybnMgVGhlIHdpbmRvdyB0aGUgZG9jdW1lbnQgYmVsb25ncyB0by5cbiAqIEB0aHJvd3MgQW4ge0BsaW5rIEVycm9yfSBpZiB0aGUgZG9jdW1lbnQgaXMgZGV0YWNoZWQgYW5kIHRoZXJlZm9yZSBoYXMgbm8gd2luZG93LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRXaW5kb3coZG9jOiBEb2N1bWVudCk6IFdpbmRvdyB7XG4gIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShkb2MuZGVmYXVsdFZpZXcsICdUaGUgZG9jdW1lbnQgaGFzIG5vIHdpbmRvdycpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHotaW5kZXggb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBnZXQgdGhlIHotaW5kZXggb2YuXG4gKiBAcmV0dXJucyBUaGUgei1pbmRleCBvZiB0aGUgZWxlbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFpJbmRleChlbGVtZW50OiBFbGVtZW50KTogbnVtYmVyIHtcbiAgbGV0IGVsZW1lbnQyOiBFbGVtZW50IHwgbnVsbCA9IGVsZW1lbnQ7XG5cbiAgd2hpbGUgKGVsZW1lbnQyKSB7XG4gICAgY29uc3QgekluZGV4U3RyaW5nID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50MikuekluZGV4O1xuICAgIGNvbnN0IHpJbmRleCA9IE51bWJlci5wYXJzZUludCh6SW5kZXhTdHJpbmcsIDEwKTtcbiAgICBpZiAoIU51bWJlci5pc05hTih6SW5kZXgpKSB7XG4gICAgICByZXR1cm4gekluZGV4O1xuICAgIH1cbiAgICBlbGVtZW50MiA9IGVsZW1lbnQyLnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiB0aGUgb2Zmc2V0IHBhcmVudC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIG9mZnNldCBwYXJlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZUluT2Zmc2V0UGFyZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBlbGVtZW50Lm9mZnNldFBhcmVudDtcbiAgaWYgKCFwYXJlbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBwYXJlbnRFbGVtZW50UmVjdCA9IHBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgcmV0dXJuIChcbiAgICBwYXJlbnRFbGVtZW50UmVjdC50b3AgPD0gZWxlbWVudFJlY3QudG9wXG4gICAgJiYgZWxlbWVudFJlY3QuYm90dG9tIDw9IHBhcmVudEVsZW1lbnRSZWN0LmJvdHRvbVxuICAgICYmIHBhcmVudEVsZW1lbnRSZWN0LmxlZnQgPD0gZWxlbWVudFJlY3QubGVmdFxuICAgICYmIGVsZW1lbnRSZWN0LnJpZ2h0IDw9IHBhcmVudEVsZW1lbnRSZWN0LnJpZ2h0XG4gICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZC5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50IGlzIGxvYWRlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvYWRlZChlbGVtZW50OiBFbGVtZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3coZWxlbWVudCk7XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEJvZHlFbGVtZW50KSkge1xuICAgIGNvbnN0IHJlYWR5U3RhdGUgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQucmVhZHlTdGF0ZTtcbiAgICByZXR1cm4gcmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJyB8fCByZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTEltYWdlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jb21wbGV0ZSAmJiBlbGVtZW50Lm5hdHVyYWxXaWR0aCA+IDA7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MSUZyYW1lRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudDtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxFbWJlZEVsZW1lbnQpKSB7XG4gICAgcmV0dXJuICEhZWxlbWVudC5nZXRTVkdEb2N1bWVudCgpO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTExpbmtFbGVtZW50KSkge1xuICAgIHJldHVybiBlbGVtZW50LnJlbCAhPT0gJ3N0eWxlc2hlZXQnIHx8IGVsZW1lbnQuc2hlZXQgIT09IG51bGw7XG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZU9mKGVsZW1lbnQsIHdpbi5IVE1MT2JqZWN0RWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LmNvbnRlbnREb2N1bWVudCB8fCAhIWVsZW1lbnQuZ2V0U1ZHRG9jdW1lbnQoKTtcbiAgfVxuXG4gIGlmIChpc0luc3RhbmNlT2YoZWxlbWVudCwgd2luLkhUTUxTY3JpcHRFbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFN0eWxlRWxlbWVudCkpIHtcbiAgICByZXR1cm4gISFlbGVtZW50LnNoZWV0O1xuICB9XG5cbiAgaWYgKGlzSW5zdGFuY2VPZihlbGVtZW50LCB3aW4uSFRNTFRyYWNrRWxlbWVudCkpIHtcbiAgICBjb25zdCBSRUFEWV9TVEFURV9MT0FERUQgPSAyO1xuICAgIHJldHVybiBlbGVtZW50LnJlYWR5U3RhdGUgPT09IFJFQURZX1NUQVRFX0xPQURFRDtcbiAgfVxuXG4gIHJldHVybiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQpLmV2ZXJ5KChsb2FkYWJsZUVsZW1lbnQpID0+IGlzTG9hZGVkKGxvYWRhYmxlRWxlbWVudCkpO1xufVxuXG4vKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgdG8gdGhlIGFuY2VzdG9yIG5vZGVzIG9mIHRoZSBnaXZlbiBub2RlLlxuICpcbiAqIEBwYXJhbSBub2RlIC0gVGhlIG5vZGUgdG8gYWRkIHRoZSBldmVudCBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBjYWxsYmFjayAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGV2ZW50IGlzIHRyaWdnZXJlZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgcmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIHdoZW4gZGlzcG9zZWQsIGZvciB1c2Ugd2l0aCBgdXNpbmdgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gb25BbmNlc3RvclNjcm9sbE9yUmVzaXplKG5vZGU6IE5vZGUsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IHdpbiA9IGdldE5vZGVXaW5kb3cobm9kZSk7XG4gIGNvbnN0IGFuY2VzdG9yczogRXZlbnRUYXJnZXRbXSA9IFtub2RlLm93bmVyRG9jdW1lbnQgPz8gd2luLmRvY3VtZW50LCB3aW5dO1xuXG4gIGxldCBjdXJyZW50Tm9kZTogTm9kZSB8IG51bGwgPSBub2RlO1xuXG4gIHdoaWxlIChjdXJyZW50Tm9kZSkge1xuICAgIGFuY2VzdG9ycy5wdXNoKGN1cnJlbnROb2RlKTtcbiAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICBsZXQgaXNFdmVudFRyaWdnZXJlZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgYW5jZXN0b3Igb2YgYW5jZXN0b3JzKSB7XG4gICAgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2FsbGJhY2tTbW9vdGgsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICBhbmNlc3Rvci5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGFuY2VzdG9yIG9mIGFuY2VzdG9ycykge1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgICBhbmNlc3Rvci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjYWxsYmFja1Ntb290aCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gY2FsbGJhY2tTbW9vdGgoKTogdm9pZCB7XG4gICAgaWYgKGlzRXZlbnRUcmlnZ2VyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0V2ZW50VHJpZ2dlcmVkID0gdHJ1ZTtcblxuICAgIHdpbi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlzRXZlbnRUcmlnZ2VyZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgbnVtYmVyIHRvIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbnVtYmVyIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgbnVtYmVyIGFzIGEgc3RyaW5nIHdpdGggJ3B4JyBhcHBlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUHgodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgJHtTdHJpbmcodmFsdWUpfXB4YDtcbn1cblxuLyoqXG4gKiBXYWl0cyB1bnRpbCB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTS5cbiAqXG4gKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBlbGVtZW50IHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YWl0VW50aWxDb25uZWN0ZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgaWYgKGVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgIHJlc29sdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBPYnNpZGlhbidzIGBlbC5vbk5vZGVJbnNlcnRlZGAgdXNlcyBhIGBub2RlLWluc2VydGVkYCBDU1Mga2V5ZnJhbWUgZnJvbSBPYnNpZGlhbidzIHN0eWxlc2hlZXQuXG4gICAgLy8gVGhlIGFnbm9zdGljIGVxdWl2YWxlbnQgaW5zdGVhZCBvYnNlcnZlcyB0aGUgZWxlbWVudCdzIGRvY3VtZW50IGZvciBpdCBiZWNvbWluZyBjb25uZWN0ZWQuXG4gICAgY29uc3Qgb3duZXJEb2N1bWVudCA9IGVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyAoZ2V0Tm9kZVdpbmRvdyhlbGVtZW50KSkuTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQuaXNDb25uZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICByZXNvbHZlKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShvd25lckRvY3VtZW50LCB7IGNoaWxkTGlzdDogdHJ1ZSwgc3VidHJlZTogdHJ1ZSB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXBwbGllcyB0aGUgZWxlbWVudC10eXBlLWFnbm9zdGljIHN1YnNldCBvZiBPYnNpZGlhbidzIGBEb21FbGVtZW50SW5mb2AgdGhhdCBpdHMgYGNyZWF0ZUVsYFxuICogc3VwcG9ydHMgXHUyMDE0IGBjbHNgLCBgdGV4dGAsIGBhdHRyYCwgYHRpdGxlYCwgYW5kIGBwYXJlbnRgL2BwcmVwZW5kYC4gVGhlIGVsZW1lbnQtdHlwZS1zcGVjaWZpY1xuICogZmllbGRzIChgdmFsdWVgLCBgdHlwZWAsIGBwbGFjZWhvbGRlcmAsIGBocmVmYCkgYW5kIHRoZSBgb24qYCBldmVudC1oYW5kbGVyIGtleXMgYXJlIGludGVudGlvbmFsbHlcbiAqIE5PVCBwb3J0ZWQgKG5vIGludGVybmFsIGNhbGxlciBuZWVkcyB0aGVtKTsgZXh0ZW5kIHRoaXMgaWYgYSBjb25zdW1lciBkb2VzIFx1MjAxNCBhbmQgcmV2YWxpZGF0ZSBhZ2FpbnN0XG4gKiBgZW5oYW5jZS5qc2AgKHNlZSB0aGUgYEBmaWxlYCBub3RlIGFuZCBgQ0xBVURFLm1kYCkuXG4gKlxuICogQHBhcmFtIGVsZW1lbnQgLSBUaGUgZWxlbWVudCB0byBhcHBseSB0aGUgaW5mbyB0by5cbiAqIEBwYXJhbSBvIC0gVGhlIGVsZW1lbnQgaW5mbyAob3IgYSBiYXJlIGNsYXNzIHN0cmluZykuXG4gKi9cbmZ1bmN0aW9uIGFwcGx5RG9tRWxlbWVudEluZm8oZWxlbWVudDogSFRNTEVsZW1lbnQsIG86IENyZWF0ZUh0bWxFbGVtZW50SW5mbyB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICBjb25zdCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQXJyYXkuaXNBcnJheShpbmZvLmNscykgPyBpbmZvLmNscy5qb2luKCcgJykgOiBpbmZvLmNscztcbiAgfVxuICBpZiAoaW5mby50ZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBzZXRFbGVtZW50VGV4dChlbGVtZW50LCBpbmZvLnRleHQpO1xuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhlbGVtZW50LCBpbmZvLmF0dHIpO1xuICB9XG4gIGlmIChpbmZvLnRpdGxlICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50LnRpdGxlID0gaW5mby50aXRsZTtcbiAgfVxuICBpbnNlcnRJbnRvUGFyZW50KGVsZW1lbnQsIGluZm8pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVIdG1sRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEssIG8/OiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBzdHJpbmcpOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICBhcHBseURvbUVsZW1lbnRJbmZvKGVsZW1lbnQsIG8pO1xuICByZXR1cm4gZWxlbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3ZnRWxlbWVudDxLIGV4dGVuZHMga2V5b2YgU1ZHRWxlbWVudFRhZ05hbWVNYXA+KHRhZzogSywgbz86IENyZWF0ZVN2Z0VsZW1lbnRJbmZvIHwgc3RyaW5nKTogU1ZHRWxlbWVudFRhZ05hbWVNYXBbS10ge1xuICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU1ZHX05BTUVTUEFDRSwgdGFnKTtcbiAgY29uc3QgaW5mbzogQ3JlYXRlU3ZnRWxlbWVudEluZm8gPSB0eXBlb2YgbyA9PT0gJ3N0cmluZycgPyB7IGNsczogbyB9IDogbyA/PyB7fTtcblxuICBpZiAoaW5mby5jbHMgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGluZm8uY2xzKSkge1xuICAgICAgc3ZnLmNsYXNzTGlzdC5hZGQoLi4uaW5mby5jbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdmcuY2xhc3NMaXN0LmFkZChpbmZvLmNscyk7XG4gICAgfVxuICB9XG4gIGlmIChpbmZvLmF0dHIpIHtcbiAgICBzZXRFbGVtZW50QXR0cmlidXRlcyhzdmcsIGluZm8uYXR0cik7XG4gIH1cbiAgaW5zZXJ0SW50b1BhcmVudChzdmcsIGluZm8pO1xuICByZXR1cm4gc3ZnO1xufVxuXG5mdW5jdGlvbiBnZXRMb2FkYWJsZUVsZW1lbnRzKGVsZW1lbnQ6IEVsZW1lbnQpOiBFbGVtZW50W10ge1xuICByZXR1cm4gWy4uLmVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYm9keSwgaW1nLCBpZnJhbWUsIGVtYmVkLCBsaW5rLCBvYmplY3QsIHNjcmlwdCwgc3R5bGUsIHRyYWNrJyldO1xufVxuXG5mdW5jdGlvbiBnZXROb2RlV2luZG93KG5vZGU6IE5vZGUpOiB0eXBlb2YgZ2xvYmFsVGhpcyAmIFdpbmRvdyB7XG4gIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQ/LmRlZmF1bHRWaWV3ID8/IHdpbmRvdztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0SW50b1BhcmVudChlbGVtZW50OiBFbGVtZW50LCBpbmZvOiBDcmVhdGVIdG1sRWxlbWVudEluZm8gfCBDcmVhdGVTdmdFbGVtZW50SW5mbyk6IHZvaWQge1xuICBpZiAoIWluZm8ucGFyZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChpbmZvLnByZXBlbmQpIHtcbiAgICBpbmZvLnBhcmVudC5pbnNlcnRCZWZvcmUoZWxlbWVudCwgaW5mby5wYXJlbnQuZmlyc3RDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZCAtLSBgcGFyZW50YCBpcyBhIGBOb2RlYCwgYW5kIGBhcHBlbmRgIGlzIGRlY2xhcmVkIG9uIGBQYXJlbnROb2RlYCwgbm90IG9uIGBOb2RlYC5cbiAgICBpbmZvLnBhcmVudC5hcHBlbmRDaGlsZChlbGVtZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luc3RhbmNlT2Y8VCBleHRlbmRzIE5vZGU+KG5vZGU6IE5vZGUsIGN0b3I6IGFic3RyYWN0IG5ldyAoLi4uJGFyZ3VtZW50czogbmV2ZXJbXSkgPT4gVCk6IG5vZGUgaXMgVCB7XG4gIC8vIEFnbm9zdGljIHJlaW1wbGVtZW50YXRpb24gb2YgT2JzaWRpYW4ncyBgTm9kZS5wcm90b3R5cGUuaW5zdGFuY2VPZmAgKGVuaGFuY2UuanMpLlxuICAvLyBUaGUgY2FsbGVyIHJlc29sdmVzIGBjdG9yYCBpbiB0aGUgbm9kZSdzIG93biByZWFsbSAodmlhIGBnZXROb2RlV2luZG93YCksIGtlZXBpbmcgaXQgY3Jvc3Mtd2luZG93IHNhZmUuXG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgY3Rvcjtcbn1cblxuZnVuY3Rpb24gc2V0RWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudDogRWxlbWVudCwgYXR0cmlidXRlOiBOb25OdWxsYWJsZTxDcmVhdGVIdG1sRWxlbWVudEluZm9bJ2F0dHInXT4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZSkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItdG9nZ2xlLWF0dHJpYnV0ZSAtLSBgdG9nZ2xlQXR0cmlidXRlYCBvbmx5IGV2ZXIgc2V0cyB0aGUgZW1wdHkgc3RyaW5nLCBzbyBpdCBjYW5ub3QgY2FycnkgYFN0cmluZyh2YWx1ZSlgLiBUaGUgcnVsZSBtYXRjaGVzIHRoZSByZW1vdmUvc2V0IHNoYXBlIHdpdGhvdXQgc2VlaW5nIHRoYXQgdGhlIHZhbHVlIGlzIHdoYXQgdGhpcyBicmFuY2ggZXhpc3RzIHRvIHdyaXRlLlxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIFN0cmluZyh2YWx1ZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFbGVtZW50VGV4dChlbGVtZW50OiBIVE1MRWxlbWVudCwgdGV4dDogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZyk6IHZvaWQge1xuICBpZiAodGV4dCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICBlbGVtZW50LnJlcGxhY2VDaGlsZHJlbih0ZXh0KTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBZUEsd0JBQW1DO0FBQ25DLHlCQUFrQztBQUVsQyxNQUFNLGdCQUFnQjtBQXFHdEIsZUFBc0IsZUFDcEIsR0FDQSxVQUN5QjtBQUN6QixRQUFNLE1BQU0sa0JBQWtCLE9BQU8sQ0FBQztBQUN0QyxRQUFNLFdBQVcsR0FBRztBQUNwQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixjQUNwQixLQUNBLEdBQ0EsVUFDbUM7QUFDbkMsUUFBTSxVQUFVLGtCQUFrQixLQUFLLENBQUM7QUFDeEMsUUFBTSxXQUFXLE9BQU87QUFDeEIsU0FBTztBQUNUO0FBUUEsZUFBc0Isb0JBQW9CLFVBQXVGO0FBQy9ILFFBQU0sV0FBVyxTQUFTLHVCQUF1QjtBQUNqRCxRQUFNLFdBQVcsUUFBUTtBQUN6QixTQUFPO0FBQ1Q7QUFTQSxlQUFzQixnQkFDcEIsR0FDQSxVQUMwQjtBQUMxQixRQUFNLE9BQU8sa0JBQWtCLFFBQVEsQ0FBQztBQUN4QyxRQUFNLFdBQVcsSUFBSTtBQUNyQixTQUFPO0FBQ1Q7QUFZQSxlQUFzQixlQUNwQixLQUNBLEdBQ0EsVUFDa0M7QUFDbEMsUUFBTSxNQUFNLGlCQUFpQixLQUFLLENBQUM7QUFDbkMsUUFBTSxXQUFXLEdBQUc7QUFDcEIsU0FBTztBQUNUO0FBUUEsZUFBc0IsYUFBYSxTQUFpQztBQUNsRSxNQUFJLFNBQVMsT0FBTyxHQUFHO0FBQ3JCO0FBQUEsRUFDRjtBQUNBLFFBQU0sTUFBTSxjQUFjLE9BQU87QUFDakMsTUFDRSxhQUFhLFNBQVMsSUFBSSxlQUFlLEtBQ3RDLGFBQWEsU0FBUyxJQUFJLGdCQUFn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
|
|
@@ -75,17 +75,17 @@ export interface ValidatorElement extends HTMLElement {
|
|
|
75
75
|
*
|
|
76
76
|
* @returns `true` if the element is valid, `false` otherwise.
|
|
77
77
|
*/
|
|
78
|
-
checkValidity: () => boolean;
|
|
78
|
+
readonly checkValidity: () => boolean;
|
|
79
79
|
/**
|
|
80
80
|
* Reports the validity of the element.
|
|
81
81
|
*/
|
|
82
|
-
reportValidity: () => boolean;
|
|
82
|
+
readonly reportValidity: () => boolean;
|
|
83
83
|
/**
|
|
84
84
|
* Sets a custom error message on the element.
|
|
85
85
|
*
|
|
86
86
|
* @param error - The error message to set on the element.
|
|
87
87
|
*/
|
|
88
|
-
setCustomValidity: (error: string) => void;
|
|
88
|
+
readonly setCustomValidity: (error: string) => void;
|
|
89
89
|
/**
|
|
90
90
|
* An error message of the element.
|
|
91
91
|
*/
|
|
@@ -290,11 +290,11 @@ function deleteProperty($object, propertyName) {
|
|
|
290
290
|
delete $object[propertyName];
|
|
291
291
|
return true;
|
|
292
292
|
}
|
|
293
|
-
function extractDefaultExportInterop(
|
|
294
|
-
if (typeof
|
|
295
|
-
return
|
|
293
|
+
function extractDefaultExportInterop($module) {
|
|
294
|
+
if (typeof $module !== "object" || $module === null) {
|
|
295
|
+
return $module;
|
|
296
296
|
}
|
|
297
|
-
return "default" in
|
|
297
|
+
return "default" in $module ? $module.default : $module;
|
|
298
298
|
}
|
|
299
299
|
function getAllEntries($object) {
|
|
300
300
|
return getAllKeys($object).map((key) => [key, $object[key]]);
|
|
@@ -556,4 +556,4 @@ function tryEntryEquality(params) {
|
|
|
556
556
|
setNestedPropertyValue,
|
|
557
557
|
toJson
|
|
558
558
|
});
|
|
559
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29iamVjdC11dGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBPYmplY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29uc3RydWN0b3IsXG4gIFJlcXVpcmVkS2V5c09mLFxuICBVbmRlZmluZWRPblBhcnRpYWxEZWVwXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHR5cGUge1xuICBFeGFjdE1lbWJlcnMsXG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVycm9yVG9TdHJpbmcgfSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZXNjYXBlUmVnRXhwIH0gZnJvbSAnLi9yZWctZXhwLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuL3N0cmluZy50cyc7XG5pbXBvcnQge1xuICBhc3NlcnROZXZlcixcbiAgZW5zdXJlR2VuZXJpY09iamVjdCxcbiAgZW5zdXJlTm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0LlxuICovXG5leHBvcnQgZW51bSBGdW5jdGlvbkhhbmRsaW5nTW9kZSB7XG4gIC8qKlxuICAgKiBFeGNsdWRlcyBmdW5jdGlvbnMgZnJvbSB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBFeGNsdWRlID0gJ2V4Y2x1ZGUnLFxuICAvKipcbiAgICogSW5jbHVkZXMgdGhlIGZ1bGwgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBGdWxsID0gJ2Z1bGwnLFxuICAvKipcbiAgICogSW5jbHVkZXMgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBOYW1lT25seSA9ICduYW1lT25seSdcbn1cblxuZW51bSBUb2tlblN1YnN0aXR1dGlvbktleSB7XG4gIENpcmN1bGFyUmVmZXJlbmNlID0gJ0NpcmN1bGFyUmVmZXJlbmNlJyxcbiAgRnVuY3Rpb24gPSAnRnVuY3Rpb24nLFxuICBNYXhEZXB0aExpbWl0UmVhY2hlZCA9ICdNYXhEZXB0aExpbWl0UmVhY2hlZCcsXG4gIE1heERlcHRoTGltaXRSZWFjaGVkQXJyYXkgPSAnTWF4RGVwdGhMaW1pdFJlYWNoZWRBcnJheScsXG4gIFRvSlNPTkZhaWxlZCA9ICdUb0pTT05GYWlsZWQnLFxuICBVbmRlZmluZWQgPSAnVW5kZWZpbmVkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0b0pzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvSnNvbk9wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRnVuY3Rpb25IYW5kbGluZ01vZGUuRXhjbHVkZX1cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RlZCBvYmplY3RzIHRvIGluY2x1ZGUgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKiBVc2UgYC0xYCBmb3Igbm8gbGltaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAtMWBcbiAgICovXG4gIHJlYWRvbmx5IG1heERlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNhdGNoIGVycm9ycyBpbiBgdG9KU09OKClgIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHBsYWNlaG9sZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRDYXRjaFRvSlNPTkVycm9yczogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gaGFuZGxlIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVDaXJjdWxhclJlZmVyZW5jZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVFcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBgdW5kZWZpbmVkYCB2YWx1ZXMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVVbmRlZmluZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHNvcnQgdGhlIGtleXMgb2YgdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTb3J0S2V5czogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgSlNPTiBvdXRwdXQuIFRoaXMgY2FuIGJlIGEgbnVtYmVyIG9mIHNwYWNlcyBvciBhIHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDJgXG4gICAqL1xuICByZWFkb25seSBzcGFjZTogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHN1YnN0aXR1dGlvbnMgdG8gdXNlIGluIHRoZSBKU09OIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuU3Vic3RpdHV0aW9uczogUGFydGlhbDxUb2tlblN1YnN0aXR1dGlvbnM+O1xufVxuXG5pbnRlcmZhY2UgQXBwbHlTdWJzdGl0dXRpb25zUGFyYW1zIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25UZXh0czogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGtleTogVG9rZW5TdWJzdGl0dXRpb25LZXk7XG4gIHJlYWRvbmx5IHN1YnN0aXR1dGlvbnM6IFRva2VuU3Vic3RpdHV0aW9ucztcbn1cblxuaW50ZXJmYWNlIEVxdWFsaXR5Q29tcGFyZXJFbnRyeTxUPiB7XG4gIGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPjtcbiAgZXF1YWxpdHlDb21wYXJlcjogKGE6IFQsIGI6IFQpID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKU09OU2VyaWFsaXphYmxlIHtcbiAgdG9KU09OOiAoLi4uJGFyZ3VtZW50czogdW5rbm93bltdKSA9PiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlV2l0aERlZmF1bHRFeHBvcnQ8VD4ge1xuICBkZWZhdWx0OiBUO1xufVxuXG5pbnRlcmZhY2UgUmVzb2x2ZWRUb0pzb25PcHRpb25zIGV4dGVuZHMgVG9Kc29uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRva2VuU3Vic3RpdHV0aW9uczogVG9rZW5TdWJzdGl0dXRpb25zO1xufVxuXG5pbnRlcmZhY2UgVG9rZW5TdWJzdGl0dXRpb25zIHtcbiAgY2lyY3VsYXJSZWZlcmVuY2U6IHN0cmluZztcbiAgbWF4RGVwdGhMaW1pdFJlYWNoZWQ6IHN0cmluZztcbiAgdG9KU09ORmFpbGVkOiBzdHJpbmc7XG59XG5cbmNvbnN0IEtFWV9TRVBBUkFUT1IgPSAnLic7XG5jb25zdCBQTEFDRUhPTERFUl9LRVlfUFJFRklYID0gJ3RvSnNvbjonO1xuY29uc3QgZXF1YWxpdHlDb21wYXJlckVudHJpZXM6IHJlYWRvbmx5IEVxdWFsaXR5Q29tcGFyZXJFbnRyeTx1bmtub3duPltdID0gW1xuICBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cnkoQXJyYXlCdWZmZXIsIGlzRGVlcEVxdWFsQXJyYXlCdWZmZXIpLFxuICBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cnkoRGF0ZSwgaXNEZWVwRXF1YWxEYXRlKSxcbiAgY3JlYXRlRXF1YWxpdHlDb21wYXJlckVudHJ5KFJlZ0V4cCwgaXNEZWVwRXF1YWxSZWdFeHApLFxuICBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cnk8TWFwPHVua25vd24sIHVua25vd24+PihNYXAsIGlzRGVlcEVxdWFsTWFwKSxcbiAgY3JlYXRlRXF1YWxpdHlDb21wYXJlckVudHJ5PFNldDx1bmtub3duPj4oU2V0LCBpc0RlZXBFcXVhbFNldClcbl07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNldE5lc3RlZFByb3BlcnR5VmFsdWV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldE5lc3RlZFByb3BlcnR5VmFsdWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBzZXQgdGhlIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBpbi5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6IEdlbmVyaWNPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBuZXN0ZWQgcHJvcGVydHkuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIEhhbmRsZUFycmF5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYHRvSlNPTigpYCBtYXkgYmUgdXNlZCBkdXJpbmcgY29udmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhblVzZVRvSlNPTjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFycmF5IHZhbHVlIHRvIGNvbnZlcnQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bltdO1xufVxuXG5pbnRlcmZhY2UgSGFuZGxlT2JqZWN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYHRvSlNPTigpYCBtYXkgYmUgdXNlZCBkdXJpbmcgY29udmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhblVzZVRvSlNPTjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGtleSB1bmRlciB3aGljaCB0aGUgdmFsdWUgaXMgc3RvcmVkIGluIGl0cyBwYXJlbnQuXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IG9iamVjdDtcbn1cblxuaW50ZXJmYWNlIEhhbmRsZVBsYWluT2JqZWN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYHRvSlNPTigpYCBtYXkgYmUgdXNlZCBkdXJpbmcgY29udmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhblVzZVRvSlNPTjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHBsYWluIG9iamVjdCB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IG9iamVjdDtcbn1cblxudHlwZSBLZXlzV2l0aFVuZGVmaW5lZDxUPiA9IEtleXNXaXRoVW5kZWZpbmVkTWFwPFQ+W2tleW9mIFRdO1xuXG50eXBlIEtleXNXaXRoVW5kZWZpbmVkTWFwPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiB1bmRlZmluZWQgZXh0ZW5kcyBUW0tdID8gSyA6IG5ldmVyO1xufTtcbnR5cGUgTWFuZGF0b3J5S2V5c1dpdGhVbmRlZmluZWQ8VCBleHRlbmRzIG9iamVjdD4gPSBFeHRyYWN0PFJlcXVpcmVkS2V5c09mPFQ+ICYgU3RyaW5nS2V5czxUPiwgS2V5c1dpdGhVbmRlZmluZWQ8VD4+O1xudHlwZSBSZW1vdmVVbmRlZmluZWRPdmVybG9hZDxUIGV4dGVuZHMgb2JqZWN0PiA9IE1hbmRhdG9yeUtleXNXaXRoVW5kZWZpbmVkPFQ+IGV4dGVuZHMgbmV2ZXIgPyBbb2JqOiBUXVxuICA6IG5ldmVyO1xuXG50eXBlIFJlbW92ZVVuZGVmaW5lZFdpdGhLZXlzT3ZlcmxvYWQ8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdPiA9IFtvYmo6IFQsIGtleXNUb0tlZXA6IEV4YWN0TWVtYmVyczxNYW5kYXRvcnlLZXlzV2l0aFVuZGVmaW5lZDxUPiwgSz5dO1xuXG5pbnRlcmZhY2UgVG9QbGFpbk9iamVjdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGB0b0pTT04oKWAgbWF5IGJlIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBjYW5Vc2VUb0pTT046IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIHZhbHVlIGlzIHN0b3JlZCBpbiBpdHMgcGFyZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyeUVudHJ5RXF1YWxpdHl9LlxuICovXG5pbnRlcmZhY2UgVHJ5RW50cnlFcXVhbGl0eVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgdmFsdWUgdG8gY29tcGFyZS5cbiAgICovXG4gIHJlYWRvbmx5IGE6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAgICovXG4gIHJlYWRvbmx5IGI6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBlcXVhbGl0eSBjb21wYXJlciBlbnRyeSB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBlbnRyeTogRXF1YWxpdHlDb21wYXJlckVudHJ5PHVua25vd24+O1xufVxuXG5pbnRlcmZhY2UgVHJ5SGFuZGxlVG9KU09OUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIHZhbHVlIGlzIHN0b3JlZCBpbiBpdHMgcGFyZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdmFsdWUgdG8gY29udmVydC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB2YWx1ZSB0byBhIEpTT04tc2VyaWFsaXphYmxlIHBsYWluIG9iamVjdCBhbmQgcmVuZGVycyBpdCBhcyBhIEpTT04gc3RyaW5nLlxuICpcbiAqIEEgZnJlc2ggaW5zdGFuY2UgaXMgY3JlYXRlZCBwZXIge0BsaW5rIHRvSnNvbn0gY2FsbCBzbyB0aGF0IHRoZSBhY2N1bXVsYXRlZCBgZnVuY3Rpb25UZXh0c2BcbiAqIGFuZCB0aGUgYHVzZWRPYmplY3RzYCBjaXJjdWxhci1yZWZlcmVuY2Ugc2V0IG5ldmVyIGxlYWsgYmV0d2VlbiBjb252ZXJzaW9ucy5cbiAqL1xuY2xhc3MgVG9Kc29uQ29udmVydGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsT3B0aW9uczogUmVzb2x2ZWRUb0pzb25PcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IGZ1bmN0aW9uVGV4dHM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlZE9iamVjdHMgPSBuZXcgV2Vha1NldCgpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNvbnZlcnRlciwgcmVzb2x2aW5nIHRoZSBwcm92aWRlZCBvcHRpb25zIGFnYWluc3QgdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgSlNPTiBjb252ZXJzaW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnRpYWw8VG9Kc29uT3B0aW9ucz4pIHtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlc29sdmVkVG9Kc29uT3B0aW9ucyA9IHtcbiAgICAgIGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5FeGNsdWRlLFxuICAgICAgbWF4RGVwdGg6IC0xLFxuICAgICAgc2hvdWxkQ2F0Y2hUb0pTT05FcnJvcnM6IGZhbHNlLFxuICAgICAgc2hvdWxkSGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2VzOiBmYWxzZSxcbiAgICAgIHNob3VsZEhhbmRsZUVycm9yczogZmFsc2UsXG4gICAgICBzaG91bGRIYW5kbGVVbmRlZmluZWQ6IGZhbHNlLFxuICAgICAgc2hvdWxkU29ydEtleXM6IGZhbHNlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICAgIHNwYWNlOiAyLFxuICAgICAgdG9rZW5TdWJzdGl0dXRpb25zOiB7XG4gICAgICAgIGNpcmN1bGFyUmVmZXJlbmNlOiBtYWtlT2JqZWN0VG9rZW5TdWJzdGl0dXRpb24oVG9rZW5TdWJzdGl0dXRpb25LZXkuQ2lyY3VsYXJSZWZlcmVuY2UpLFxuICAgICAgICBtYXhEZXB0aExpbWl0UmVhY2hlZDogbWFrZU9iamVjdFRva2VuU3Vic3RpdHV0aW9uKFRva2VuU3Vic3RpdHV0aW9uS2V5Lk1heERlcHRoTGltaXRSZWFjaGVkKSxcbiAgICAgICAgdG9KU09ORmFpbGVkOiBtYWtlT2JqZWN0VG9rZW5TdWJzdGl0dXRpb24oVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBmdWxsT3B0aW9ucyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfT1BUSU9OUyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB0b2tlblN1YnN0aXR1dGlvbnM6IHtcbiAgICAgICAgLi4uREVGQVVMVF9PUFRJT05TLnRva2VuU3Vic3RpdHV0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9ucy50b2tlblN1YnN0aXR1dGlvbnNcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGZ1bGxPcHRpb25zLm1heERlcHRoID09PSAtMSkge1xuICAgICAgZnVsbE9wdGlvbnMubWF4RGVwdGggPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICB0aGlzLmZ1bGxPcHRpb25zID0gZnVsbE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIHZhbHVlIHRvIGEgSlNPTiBzdHJpbmcsIGFwcGx5aW5nIHRoZSBjb25maWd1cmVkIHRva2VuIHN1YnN0aXR1dGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGNvbnZlcnQodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBsYWluT2JqZWN0ID0gdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgIGNhblVzZVRvSlNPTjogdHJ1ZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAga2V5OiAnJyxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gICAgbGV0IGpzb24gPSBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeShwbGFpbk9iamVjdCwgbnVsbCwgdGhpcy5mdWxsT3B0aW9ucy5zcGFjZSkpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyUmVnRXhwID0gbmV3IFJlZ0V4cChTdHJpbmcucmF3YFwiXFxbXFxbJHtlc2NhcGVSZWdFeHAoUExBQ0VIT0xERVJfS0VZX1BSRUZJWCl9KD88S2V5PltBLVphLXpdKykoPzxJbmRleD5cXGQqKVxcXVxcXVwiYCwgJ2cnKTtcbiAgICBqc29uID0gcmVwbGFjZUFsbCh7XG4gICAgICAkc3RyaW5nOiBqc29uLFxuICAgICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmd1bWVudHM6IFtrZXkgPSAnJywgaW5kZXhTdHJpbmcgPSAnJ10gfSkgPT5cbiAgICAgICAgYXBwbHlTdWJzdGl0dXRpb25zKHtcbiAgICAgICAgICBmdW5jdGlvblRleHRzOiB0aGlzLmZ1bmN0aW9uVGV4dHMsXG4gICAgICAgICAgaW5kZXg6IGluZGV4U3RyaW5nID8gcGFyc2VJbnQoaW5kZXhTdHJpbmcsIDEwKSA6IDAsXG4gICAgICAgICAga2V5OiBjYXN0VG88VG9rZW5TdWJzdGl0dXRpb25LZXk+KGtleSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uczogdGhpcy5mdWxsT3B0aW9ucy50b2tlblN1YnN0aXR1dGlvbnNcbiAgICAgICAgfSksXG4gICAgICBzZWFyY2hWYWx1ZTogcGxhY2Vob2xkZXJSZWdFeHBcbiAgICB9KTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQXJyYXkocGFyYW1zOiBIYW5kbGVBcnJheVBhcmFtcyk6IHVua25vd24ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNhblVzZVRvSlNPTixcbiAgICAgIGRlcHRoLFxuICAgICAgdmFsdWVcbiAgICB9ID0gcGFyYW1zO1xuICAgIHJldHVybiBkZXB0aCA+IHRoaXMuZnVsbE9wdGlvbnMubWF4RGVwdGhcbiAgICAgID8gbWFrZVBsYWNlaG9sZGVyKFRva2VuU3Vic3RpdHV0aW9uS2V5Lk1heERlcHRoTGltaXRSZWFjaGVkQXJyYXksIHZhbHVlLmxlbmd0aClcbiAgICAgIDogdmFsdWUubWFwKChpdGVtLCBpbmRleCkgPT5cbiAgICAgICAgdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICAgICAgZGVwdGg6IGRlcHRoICsgMSxcbiAgICAgICAgICBrZXk6IFN0cmluZyhpbmRleCksXG4gICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNpcmN1bGFyUmVmZXJlbmNlKHZhbHVlOiBvYmplY3QsIGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKHRoaXMuZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2VzKSB7XG4gICAgICByZXR1cm4gbWFrZVBsYWNlaG9sZGVyKFRva2VuU3Vic3RpdHV0aW9uS2V5LkNpcmN1bGFyUmVmZXJlbmNlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVDb25zdHJ1Y3Rvck5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cbi0tPiBzdGFydGluZyBhdCBvYmplY3Qgd2l0aCBjb25zdHJ1Y3RvciAnJHt2YWx1ZUNvbnN0cnVjdG9yTmFtZX0nXG4tLS0gcHJvcGVydHkgJyR7a2V5fScgY2xvc2VzIHRoZSBjaXJjbGVgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgYEZ1bmN0aW9uYCB0eXBlIHRvIGhhbmRsZSB0aGVtIHNlcGFyYXRlbHkuXG4gIHByaXZhdGUgaGFuZGxlRnVuY3Rpb24odmFsdWU6IEZ1bmN0aW9uKTogdW5rbm93biB7XG4gICAgaWYgKHRoaXMuZnVsbE9wdGlvbnMuZnVuY3Rpb25IYW5kbGluZ01vZGUgPT09IEZ1bmN0aW9uSGFuZGxpbmdNb2RlLkV4Y2x1ZGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mdW5jdGlvblRleHRzLmxlbmd0aDtcbiAgICBjb25zdCBmdW5jdGlvblRleHQgPSB0aGlzLmZ1bGxPcHRpb25zLmZ1bmN0aW9uSGFuZGxpbmdNb2RlID09PSBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsXG4gICAgICA/IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyh2YWx1ZSlcbiAgICAgIDogYGZ1bmN0aW9uICR7dmFsdWUubmFtZSB8fCAnYW5vbnltb3VzJ30oKSB7IC8qIC4uLiAqLyB9YDtcbiAgICB0aGlzLmZ1bmN0aW9uVGV4dHMucHVzaChmdW5jdGlvblRleHQpO1xuICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuRnVuY3Rpb24sIGluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT2JqZWN0KHBhcmFtczogSGFuZGxlT2JqZWN0UGFyYW1zKTogdW5rbm93biB7XG4gICAgY29uc3Qge1xuICAgICAgY2FuVXNlVG9KU09OLFxuICAgICAgZGVwdGgsXG4gICAgICBrZXksXG4gICAgICB2YWx1ZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKHRoaXMudXNlZE9iamVjdHMuaGFzKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWUsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VkT2JqZWN0cy5hZGQodmFsdWUpO1xuXG4gICAgaWYgKGNhblVzZVRvSlNPTikge1xuICAgICAgY29uc3QgdG9KU09OUmVzdWx0ID0gdGhpcy50cnlIYW5kbGVUb0pTT04oe1xuICAgICAgICBkZXB0aCxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAodG9KU09OUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRvSlNPTlJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUFycmF5KHtcbiAgICAgICAgY2FuVXNlVG9KU09OLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChkZXB0aCA+IHRoaXMuZnVsbE9wdGlvbnMubWF4RGVwdGgpIHtcbiAgICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuTWF4RGVwdGhMaW1pdFJlYWNoZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yICYmIHRoaXMuZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlRXJyb3JzXG4gICAgICA/IGVycm9yVG9TdHJpbmcodmFsdWUpXG4gICAgICA6IHRoaXMuaGFuZGxlUGxhaW5PYmplY3Qoe1xuICAgICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBsYWluT2JqZWN0KHBhcmFtczogSGFuZGxlUGxhaW5PYmplY3RQYXJhbXMpOiB1bmtub3duIHtcbiAgICBjb25zdCB7XG4gICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICBkZXB0aCxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICAgIGlmICh0aGlzLmZ1bGxPcHRpb25zLnNob3VsZFNvcnRLZXlzKSB7XG4gICAgICBlbnRyaWVzLnNvcnQoKFtrZXkxXSwgW2tleTJdKSA9PiBrZXkxLmxvY2FsZUNvbXBhcmUoa2V5MikpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBlbnRyaWVzLm1hcCgoW2tleTIsIHZhbHVlMl0pID0+IFtcbiAgICAgICAga2V5MixcbiAgICAgICAgdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICAgICAgZGVwdGg6IGRlcHRoICsgMSxcbiAgICAgICAgICBrZXk6IGtleTIsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlMlxuICAgICAgICB9KVxuICAgICAgXSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1BsYWluT2JqZWN0KHBhcmFtczogVG9QbGFpbk9iamVjdFBhcmFtcyk6IHVua25vd24ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNhblVzZVRvSlNPTixcbiAgICAgIGRlcHRoLFxuICAgICAga2V5LFxuICAgICAgdmFsdWVcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gKGRlcHRoID09PSAwIHx8IHRoaXMuZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlVW5kZWZpbmVkKVxuICAgICAgICA/IG1ha2VQbGFjZWhvbGRlcihUb2tlblN1YnN0aXR1dGlvbktleS5VbmRlZmluZWQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZ1bmN0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbFxuICAgICAgPyB2YWx1ZVxuICAgICAgOiB0aGlzLmhhbmRsZU9iamVjdCh7XG4gICAgICAgIGNhblVzZVRvSlNPTixcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlIYW5kbGVUb0pTT04ocGFyYW1zOiBUcnlIYW5kbGVUb0pTT05QYXJhbXMpOiB1bmtub3duIHtcbiAgICBjb25zdCB7XG4gICAgICBkZXB0aCxcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0b0pTT04gPSAodmFsdWUgYXMgUGFydGlhbDxKU09OU2VyaWFsaXphYmxlPikudG9KU09OO1xuICAgIGlmICh0eXBlb2YgdG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRvSlNPTi5jYWxsKHZhbHVlLCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgICAgICBjYW5Vc2VUb0pTT046IGZhbHNlLFxuICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICB2YWx1ZTogbmV3VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAodGhpcy5mdWxsT3B0aW9ucy5zaG91bGRDYXRjaFRvSlNPTkVycm9ycykge1xuICAgICAgICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuLyoqXG4gKiBBc3NpZ25zIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QsIGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFU+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG4vKipcbiAqIEFzc2lnbnMgcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHRhcmdldCBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSBmaXJzdCBzb3VyY2Ugb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFYgLSBUaGUgc2Vjb25kIHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSBzb3VyY2UxIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBzb3VyY2UyIC0gVGhlIHNlY29uZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFUsIFY+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogVik6IFQgJiBVICYgVjtcbi8qKlxuICogQXNzaWducyBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYSB0YXJnZXQgb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0eXBlLlxuICogQHR5cGVQYXJhbSBVIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gViAtIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHR5cGVQYXJhbSBXIC0gVGhlIHRoaXJkIHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSBzb3VyY2UxIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBzb3VyY2UyIC0gVGhlIHNlY29uZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gc291cmNlMyAtIFRoZSB0aGlyZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFUsIFYsIFc+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogViwgc291cmNlMzogVyk6IFQgJiBVICYgViAmIFc7XG4vKipcbiAqIEFzc2lnbnMgcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHNvdXJjZXMgLSBUaGUgc291cmNlIG9iamVjdHMgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0IHdpdGggdGhlIGFzc2lnbmVkIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXModGFyZ2V0OiBvYmplY3QsIC4uLnNvdXJjZXM6IG9iamVjdFtdKTogb2JqZWN0IHtcbiAgcmV0dXJuIGFzc2lnbldpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllc0ltcGwodGFyZ2V0LCAuLi5zb3VyY2VzKTtcbn1cblxuLyoqXG4gKiBDYXN0cyBhIHZhbHVlIHRvIGEgc3BlY2lmaWMgdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdGFyZ2V0IHR5cGUgdG8gY2FzdCB0by5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjYXN0LlxuICogQHJldHVybnMgVGhlIHZhbHVlIGFzIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byBjYXN0LlxuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUbzxUPih2YWx1ZTogdW5rbm93bik6IFQge1xuICByZXR1cm4gdmFsdWUgYXMgVDtcbn1cblxuLyoqXG4gKiBDbG9uZXMgYW4gb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgcHJvcGVydGllcyBhcyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6IFQpOiBUIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2YoJG9iamVjdCksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKCRvYmplY3QpKSBhcyBUO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgbXVsdGlwbGUgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZXMgLSBUaGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMgdG8gZGVsZXRlLlxuICogQHJldHVybnMgYHRydWVgIGlmIGFueSBvZiB0aGUgcHJvcGVydGllcyB3ZXJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSAtLSBUaGUgbmFtZSBzdGF0ZXMgdGhlIGFjdGlvbjsgdGhlIGJvb2xlYW4gb25seSByZXBvcnRzIHdoZXRoZXIgYW55dGhpbmcgd2FzIGRlbGV0ZWQuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUHJvcGVydGllczxUIGV4dGVuZHMgb2JqZWN0Pigkb2JqZWN0OiBULCBwcm9wZXJ0eU5hbWVzOiAoa2V5b2YgVClbXSk6IGJvb2xlYW4ge1xuICBsZXQgaGFzRGVsZXRlZEFueSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHByb3BlcnR5TmFtZXMpIHtcbiAgICBoYXNEZWxldGVkQW55ID0gZGVsZXRlUHJvcGVydHkoJG9iamVjdCwgcHJvcGVydHlOYW1lKSB8fCBoYXNEZWxldGVkQW55O1xuICB9XG5cbiAgcmV0dXJuIGhhc0RlbGV0ZWRBbnk7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gJG9iamVjdCAtIFRoZSBvYmplY3QgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eSBmcm9tLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkZWxldGUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IHdhcyBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1ib29sZWFuLW5hbWUgLS0gVGhlIG5hbWUgc3RhdGVzIHRoZSBhY3Rpb247IHRoZSBib29sZWFuIG9ubHkgcmVwb3J0cyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSB3YXMgZGVsZXRlZC5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eTxUIGV4dGVuZHMgb2JqZWN0Pigkb2JqZWN0OiBULCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiBib29sZWFuIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKCRvYmplY3QsIHByb3BlcnR5TmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICBkZWxldGUgJG9iamVjdFtwcm9wZXJ0eU5hbWVdO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZGVmYXVsdCBleHBvcnQgZnJvbSBhIG1vZHVsZS5cbiAqXG4gKiBVc2VmdWwgdG8gaGFuZGxlIGluY29ycmVjdCBkZWZhdWx0IGV4cG9ydCBpbnRlcm9wIGJldHdlZW4gRVNNIGFuZCBDSlMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRlZmF1bHQgZXhwb3J0LlxuICogQHBhcmFtIG1vZHVsZSAtIFRoZSBtb2R1bGUgdG8gZXh0cmFjdCB0aGUgZGVmYXVsdCBleHBvcnQgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSBkZWZhdWx0IGV4cG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3REZWZhdWx0RXhwb3J0SW50ZXJvcDxUPihtb2R1bGU6IE1vZHVsZVdpdGhEZWZhdWx0RXhwb3J0PFQ+IHwgVCk6IFQge1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ29iamVjdCcgfHwgbW9kdWxlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG1vZHVsZTtcbiAgfVxuXG4gIHJldHVybiAnZGVmYXVsdCcgaW4gbW9kdWxlID8gbW9kdWxlLmRlZmF1bHQgOiBtb2R1bGU7XG59XG5cbi8qKlxuICogR2V0cyBhbGwgZW50cmllcyBvZiBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBnZXQgdGhlIGVudHJpZXMgb2YuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgZW50cmllcyBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsRW50cmllczxUIGV4dGVuZHMgb2JqZWN0Pigkb2JqZWN0OiBUKTogW1N0cmluZ0tleXM8VD4sIFRbU3RyaW5nS2V5czxUPl1dW10ge1xuICByZXR1cm4gZ2V0QWxsS2V5cygkb2JqZWN0KS5tYXAoKGtleSkgPT4gW2tleSwgJG9iamVjdFtrZXldXSk7XG59XG5cbi8qKlxuICogR2V0cyBhbGwga2V5cyBvZiBhbiBvYmplY3QuXG4gKiBJbmNsdWRlcyBmaWVsZHMgYW5kIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBnZXQgdGhlIGtleXMgb2YuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwga2V5cyBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsS2V5czxUIGV4dGVuZHMgb2JqZWN0Pigkb2JqZWN0OiBUKTogU3RyaW5nS2V5czxUPltdIHtcbiAgY29uc3Qga2V5czogU3RyaW5nS2V5czxUPltdID0gW107XG4gIGxldCBjdXJyZW50OiBudWxsIHwgb2JqZWN0ID0gJG9iamVjdDtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGN1cnJlbnQpO1xuICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRvcl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRvcnMpKSB7XG4gICAgICBpZiAoKGtleSA9PT0gJ19fcHJvdG9fXycpIHx8ICh0eXBlb2YgZGVzY3JpcHRvci52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0dldHRlciA9IHR5cGVvZiBkZXNjcmlwdG9yLmdldCA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGNvbnN0IGhhc1NldHRlciA9IHR5cGVvZiBkZXNjcmlwdG9yLnNldCA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgIGlmIChoYXNHZXR0ZXIgfHwgaGFzU2V0dGVyKSB7XG4gICAgICAgIGlmIChoYXNHZXR0ZXIgJiYgaGFzU2V0dGVyKSB7XG4gICAgICAgICAga2V5cy5wdXNoKGtleSBhcyBTdHJpbmdLZXlzPFQ+KTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlc2NyaXB0b3IuZW51bWVyYWJsZSAmJiBkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgIGtleXMucHVzaChrZXkgYXMgU3RyaW5nS2V5czxUPik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihjdXJyZW50KSBhcyBudWxsIHwgb2JqZWN0O1xuICB9XG4gIHJldHVybiBrZXlzLnNvcnQoKTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gJG9iamVjdCAtIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBuZXN0ZWQgcHJvcGVydHkgdmFsdWUgZnJvbS5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIG5lc3RlZCBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSB2YWx1ZSBvZiB0aGUgbmVzdGVkIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSgkb2JqZWN0OiBHZW5lcmljT2JqZWN0LCBwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgbGV0IG5vZGU6IEdlbmVyaWNPYmplY3QgfCB1bmRlZmluZWQgPSAkb2JqZWN0O1xuICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdChLRVlfU0VQQVJBVE9SKTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlW2tleV0gYXMgR2VuZXJpY09iamVjdCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHByb3RvdHlwZSBvZiB0aGUgc3BlY2lmaWVkIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtIGluc3RhbmNlIC0gVGhlIG9iamVjdCBpbnN0YW5jZSB0byByZXRyaWV2ZSB0aGUgcHJvdG90eXBlIG9mLlxuICogQHJldHVybnMgVGhlIHByb3RvdHlwZSBvZiB0aGUgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2Y8VD4oaW5zdGFuY2U6IFQpOiBUIHtcbiAgcmV0dXJuIGluc3RhbmNlID09PSB1bmRlZmluZWQgfHwgaW5zdGFuY2UgPT09IG51bGwgPyBpbnN0YW5jZSA6IChPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5zdGFuY2UpIGFzIFQpO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byB2YWx1ZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGRlZXBseSBlcXVhbC5cbiAqXG4gKiBAcGFyYW0gYSAtIFRoZSBmaXJzdCB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIGIgLSBUaGUgc2Vjb25kIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZGVlcGx5IGVxdWFsLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGVlcEVxdWFsKGE6IHVua25vd24sIGI6IHVua25vd24pOiBib29sZWFuIHtcbiAgaWYgKGEgPT09IGIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIGIgIT09ICdvYmplY3QnIHx8IGEgPT09IG51bGwgfHwgYiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFDb25zdHJ1Y3RvciA9IGEuY29uc3RydWN0b3I7XG4gIGNvbnN0IGJDb25zdHJ1Y3RvciA9IGIuY29uc3RydWN0b3I7XG5cbiAgaWYgKGFDb25zdHJ1Y3RvciAhPT0gYkNvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGFDb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZGVlcEVxdWFsVHlwZWQoYSwgYik7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGtleXNBID0gZ2V0QWxsS2V5cyhhKTtcbiAgY29uc3Qga2V5c0IgPSBnZXRBbGxLZXlzKGIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFSZWNvcmQgPSBlbnN1cmVHZW5lcmljT2JqZWN0KGEpO1xuICBjb25zdCBiUmVjb3JkID0gZW5zdXJlR2VuZXJpY09iamVjdChiKTtcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgIGlmICgha2V5c0IuaW5jbHVkZXMoa2V5KSB8fCAhaXNEZWVwRXF1YWwoYVJlY29yZFtrZXldLCBiUmVjb3JkW2tleV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIFJldHJpZXZlcyB0aGUgbmFtZSBvZiBhIHByb3BlcnR5IG9mIGEgZ2l2ZW4gdHlwZSBgVGAuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBjb250YWluaW5nIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGFzIGEgc3RyaW5nLlxuICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmFtZW9mPFQgZXh0ZW5kcyBvYmplY3Q+KG5hbWU6IFN0cmluZ0tleXM8VD4pOiBTdHJpbmdLZXlzPFQ+IHtcbiAgcmV0dXJuIG5hbWU7XG59XG4vKipcbiAqIE5vcm1hbGl6ZXMgb3B0aW9uYWwgcHJvcGVydGllcyB0byBhbGxvdyBgdW5kZWZpbmVkYCBhc3NpZ25tZW50IGluIHN0cmljdCBtb2RlLlxuICpcbiAqIFRoaXMgdXRpbGl0eSBwcm92aWRlcyBhIHdvcmthcm91bmQgZm9yIHRoZSBgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXNgIFR5cGVTY3JpcHQgZmxhZyxcbiAqIHdoaWNoIHByb2hpYml0cyBkaXJlY3RseSBhc3NpZ25pbmcgYHVuZGVmaW5lZGAgdG8gb3B0aW9uYWwgcHJvcGVydGllcyB3aGVuIHRoZSB0eXBlXG4gKiBleHBsaWNpdGx5IG9taXRzIGB1bmRlZmluZWRgLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBXaXRoIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlczogdHJ1ZWBcbiAqIGNvbnN0IHg6IHsgcHJvcD86IHN0cmluZyB9ID0geyBwcm9wOiB1bmRlZmluZWQgfTsgLy8gQ29tcGlsZXIgZXJyb3JcbiAqXG4gKiAvLyBVc2luZyB0aGlzIHV0aWxpdHk6XG4gKiBjb25zdCB5OiB7IHByb3A/OiBzdHJpbmcgfSA9IG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczx7IHByb3A/OiBzdHJpbmcgfT4oeyBwcm9wOiB1bmRlZmluZWQgfSk7IC8vIFdvcmtzXG4gKiBgYGBcbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdGFyZ2V0IHR5cGUgd2l0aCBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIG5vcm1hbGl6ZS5cbiAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBub3JtYWxpemUsIGFsbG93aW5nIGV4cGxpY2l0IGB1bmRlZmluZWRgIGZvciBvcHRpb25hbCBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgb2JqZWN0LCBjb21wYXRpYmxlIHdpdGggYGV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxUPigkb2JqZWN0OiBVbmRlZmluZWRPblBhcnRpYWxEZWVwPFQ+KTogVCB7XG4gIHJldHVybiAkb2JqZWN0IGFzIFQ7XG59XG4vKipcbiAqIFJlbW92ZXMgYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3Qgd2hlbiB0aGVyZSBhcmUgbm8gbWFuZGF0b3J5IGtleXMgd2l0aCBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSAkYXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgb2JqZWN0IHdpdGggYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXM8VHlwZSBleHRlbmRzIG9iamVjdD4oXG4gIC4uLiRhcmd1bWVudHM6IFJlbW92ZVVuZGVmaW5lZE92ZXJsb2FkPFR5cGU+XG4pOiBUeXBlO1xuLyoqXG4gKiBSZW1vdmVzIGFsbCBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0IHdoZW4gdGhlcmUgYXJlIG1hbmRhdG9yeSBrZXlzIHdpdGggYHVuZGVmaW5lZGAgdmFsdWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAdHlwZVBhcmFtIEtleXNUb0tlZXAgLSBUaGUga2V5cyB0byBrZWVwLlxuICogQHBhcmFtICRhcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3Qgd2l0aCBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyByZW1vdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllczxUeXBlIGV4dGVuZHMgb2JqZWN0LCBjb25zdCBLZXlzVG9LZWVwIGV4dGVuZHMgcmVhZG9ubHkgc3RyaW5nW10+KFxuICAuLi4kYXJndW1lbnRzOiBSZW1vdmVVbmRlZmluZWRXaXRoS2V5c092ZXJsb2FkPFR5cGUsIEtleXNUb0tlZXA+XG4pOiBUeXBlO1xuLyoqXG4gKiBSZW1vdmVzIGFsbCBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gVHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gJG9iamVjdCAtIFRoZSBvYmplY3QgdG8gcmVtb3ZlIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBrZXlzVG9LZWVwIC0gVGhlIGtleXMgdG8ga2VlcC5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3Qgd2l0aCBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyByZW1vdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllczxUeXBlIGV4dGVuZHMgb2JqZWN0Pigkb2JqZWN0OiBUeXBlLCBrZXlzVG9LZWVwPzogcmVhZG9ubHkgc3RyaW5nW10pOiBUeXBlIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoJG9iamVjdCkgYXMgW1N0cmluZ0tleXM8VHlwZT4sIHVua25vd25dW10pIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAha2V5c1RvS2VlcD8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICAgICAgZGVsZXRlICRvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuICRvYmplY3Q7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgYSBuZXN0ZWQgcHJvcGVydHkgaW4gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3Igc2V0dGluZyB0aGUgbmVzdGVkIHByb3BlcnR5IHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0TmVzdGVkUHJvcGVydHlWYWx1ZShwYXJhbXM6IFNldE5lc3RlZFByb3BlcnR5VmFsdWVQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3Qge1xuICAgICRvYmplY3QsXG4gICAgcGF0aCxcbiAgICB2YWx1ZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgUHJvcGVydHkgcGF0aCAke3BhdGh9IG5vdCBmb3VuZGApO1xuICBsZXQgbm9kZTogR2VuZXJpY09iamVjdCB8IHVuZGVmaW5lZCA9ICRvYmplY3Q7XG4gIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KEtFWV9TRVBBUkFUT1IpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzLnNsaWNlKDAsIC0xKSkge1xuICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICBub2RlID0gbm9kZVtrZXldIGFzIEdlbmVyaWNPYmplY3QgfCB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBsYXN0S2V5ID0gZW5zdXJlTm9uTnVsbGFibGUoa2V5cy5hdCgtMSkpO1xuICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBub2RlW2xhc3RLZXldID0gdmFsdWU7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBnaXZlbiB2YWx1ZSB0byBhIEpTT04gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBiZSBjb252ZXJ0ZWQgdG8gSlNPTi4gVGhpcyBjYW4gYmUgb2YgYW55IHR5cGUuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgZm9yIGN1c3RvbWl6aW5nIHRoZSBKU09OIGNvbnZlcnNpb24gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIFRoZSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb24odmFsdWU6IHVua25vd24sIG9wdGlvbnM6IFBhcnRpYWw8VG9Kc29uT3B0aW9ucz4gPSB7fSk6IHN0cmluZyB7XG4gIHJldHVybiBuZXcgVG9Kc29uQ29udmVydGVyKG9wdGlvbnMpLmNvbnZlcnQodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBhcHBseVN1YnN0aXR1dGlvbnMocGFyYW1zOiBBcHBseVN1YnN0aXR1dGlvbnNQYXJhbXMpOiBNYXliZVJldHVybjxzdHJpbmc+IHtcbiAgc3dpdGNoIChwYXJhbXMua2V5KSB7XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5DaXJjdWxhclJlZmVyZW5jZToge1xuICAgICAgcmV0dXJuIHBhcmFtcy5zdWJzdGl0dXRpb25zLmNpcmN1bGFyUmVmZXJlbmNlO1xuICAgIH1cbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5LkZ1bmN0aW9uOiB7XG4gICAgICByZXR1cm4gZW5zdXJlTm9uTnVsbGFibGUocGFyYW1zLmZ1bmN0aW9uVGV4dHNbcGFyYW1zLmluZGV4XSwgYEZ1bmN0aW9uIHdpdGggaW5kZXggJHtTdHJpbmcocGFyYW1zLmluZGV4KX0gbm90IGZvdW5kYCk7XG4gICAgfVxuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuTWF4RGVwdGhMaW1pdFJlYWNoZWQ6IHtcbiAgICAgIHJldHVybiBwYXJhbXMuc3Vic3RpdHV0aW9ucy5tYXhEZXB0aExpbWl0UmVhY2hlZDtcbiAgICB9XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5NYXhEZXB0aExpbWl0UmVhY2hlZEFycmF5OiB7XG4gICAgICByZXR1cm4gYEFycmF5KCR7U3RyaW5nKHBhcmFtcy5pbmRleCl9KWA7XG4gICAgfVxuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkOiB7XG4gICAgICByZXR1cm4gcGFyYW1zLnN1YnN0aXR1dGlvbnMudG9KU09ORmFpbGVkO1xuICAgIH1cbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5LlVuZGVmaW5lZDoge1xuICAgICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICAgIH1cbiAgICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gRXhoYXVzdGl2ZSBzd2l0Y2ggZ3VhcmQ7IGRlZmF1bHQgYnJhbmNoIGlzIHVucmVhY2hhYmxlLiAqL1xuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGFzc2VydE5ldmVyKHBhcmFtcy5rZXkpO1xuICAgIH1cbiAgICAgIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzSW1wbCh0YXJnZXQ6IG9iamVjdCwgLi4uc291cmNlczogb2JqZWN0W10pOiBvYmplY3Qge1xuICBmb3IgKGNvbnN0IHNvdXJjZSBvZiBzb3VyY2VzKSB7XG4gICAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdG9yXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdG9ycykpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEF2b2lkIHJlZGVmaW5pbmcgcmVhZC1vbmx5IHByb3BlcnRpZXMgKGVzcGVjaWFsbHkgYHByb3RvdHlwZWApXG4gICAgICAgIGlmIChcbiAgICAgICAgICBrZXkgPT09ICdwcm90b3R5cGUnXG4gICAgICAgICAgfHwgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpPy53cml0YWJsZSA9PT0gZmFsc2VcbiAgICAgICAgICAgICYmICFPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KT8uY29uZmlndXJhYmxlKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzY3JpcHRvcik7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIGlmIGRlZmluZVByb3BlcnR5IGZhaWxzXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc291cmNlUHJvdG90eXBlcyA9IHNvdXJjZXNcbiAgICAubWFwKChzb3VyY2UpID0+IGdldFByb3RvdHlwZU9mPG9iamVjdCB8IHVuZGVmaW5lZD4oc291cmNlKSlcbiAgICAuZmlsdGVyKChwcm90b3R5cGUpOiBwcm90b3R5cGUgaXMgb2JqZWN0ID0+ICEhcHJvdG90eXBlKTtcblxuICBpZiAoc291cmNlUHJvdG90eXBlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgdGFyZ2V0UHJvdG90eXBlID0gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzSW1wbCh7fSwgZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSwgLi4uc291cmNlUHJvdG90eXBlcyk7XG5cbiAgICB0cnkge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgdGFyZ2V0UHJvdG90eXBlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSBpZiBzZXRQcm90b3R5cGVPZiBmYWlsc1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbi8qXG4gKiBUaGUgb25lIHBsYWNlIHdoZXJlIHRoZSBsaXN0J3MgaGV0ZXJvZ2VuZWl0eSBpcyBicmlkZ2VkLCBhbmQgaXQgbmVlZHMgYSBjYXN0IGJlY2F1c2UgdGhlIGNvcnJlbGF0aW9uIHRoYXQgbWFrZXMgaXRcbiAqIHNhZmUgaXMgYSBydW50aW1lIG9uZTogYHRyeUVudHJ5RXF1YWxpdHlgIGNhbGxzIHRoZSBjb21wYXJlciBvbmx5IGFmdGVyIGBhIGluc3RhbmNlb2YgZW50cnkuY29uc3RydWN0b3JgIGhhcyBoZWxkIGZvclxuICogYm90aCBvcGVyYW5kcywgYW5kIG5vIHR5cGUgY2FuIHRpZSB0aGF0IGBpbnN0YW5jZW9mYCB0byB0aGlzIGVudHJ5J3MgYFRgLiBDb25maW5pbmcgdGhlIGNhc3QgaGVyZSBidXlzIHRoZSBjaGVjayB0aGVcbiAqIGxpc3QgdXNlZCB0byBsYWNrIC0gdGhlIGNvbnN0cnVjdG9yIGFuZCB0aGUgY29tcGFyZXIgYXJlIGluZmVycmVkIGZyb20gT05FIGBUYCwgc28gYSBtaXNtYXRjaGVkIHBhaXIgaXMgYSBjb21waWxlXG4gKiBlcnJvciBhdCB0aGUgY2FsbCBzaXRlIGluc3RlYWQgb2YgYmVpbmcgd2F2ZWQgdGhyb3VnaCBieSBhbiBgYW55YC10eXBlZCBlbnRyeSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlRXF1YWxpdHlDb21wYXJlckVudHJ5PFQ+KGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPiwgY2hlY2tJc0VxdWFsOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbik6IEVxdWFsaXR5Q29tcGFyZXJFbnRyeTx1bmtub3duPiB7XG4gIHJldHVybiB7XG4gICAgY29uc3RydWN0b3IsXG4gICAgZXF1YWxpdHlDb21wYXJlcjogKGEsIGIpID0+IGNoZWNrSXNFcXVhbChhIGFzIFQsIGIgYXMgVClcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGVlcEVxdWFsVHlwZWQoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVxdWFsaXR5Q29tcGFyZXJFbnRyaWVzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gdHJ5RW50cnlFcXVhbGl0eSh7XG4gICAgICBhLFxuICAgICAgYixcbiAgICAgIGVudHJ5XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBFcXVhbEFycmF5QnVmZmVyKGE6IEFycmF5QnVmZmVyLCBiOiBBcnJheUJ1ZmZlcik6IGJvb2xlYW4ge1xuICBpZiAoYS5ieXRlTGVuZ3RoICE9PSBiLmJ5dGVMZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCB2aWV3QSA9IG5ldyBVaW50OEFycmF5KGEpO1xuICBjb25zdCB2aWV3QiA9IG5ldyBVaW50OEFycmF5KGIpO1xuICByZXR1cm4gaXNEZWVwRXF1YWwodmlld0EsIHZpZXdCKTtcbn1cblxuZnVuY3Rpb24gaXNEZWVwRXF1YWxEYXRlKGE6IERhdGUsIGI6IERhdGUpOiBib29sZWFuIHtcbiAgcmV0dXJuIGEuZ2V0VGltZSgpID09PSBiLmdldFRpbWUoKTtcbn1cblxuZnVuY3Rpb24gaXNEZWVwRXF1YWxNYXAoYTogTWFwPHVua25vd24sIHVua25vd24+LCBiOiBNYXA8dW5rbm93biwgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgYSkge1xuICAgIGlmICghYi5oYXMoa2V5KSB8fCAhaXNEZWVwRXF1YWwodmFsdWUsIGIuZ2V0KGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzRGVlcEVxdWFsUmVnRXhwKGE6IFJlZ0V4cCwgYjogUmVnRXhwKTogYm9vbGVhbiB7XG4gIHJldHVybiBhLnNvdXJjZSA9PT0gYi5zb3VyY2UgJiYgYS5mbGFncyA9PT0gYi5mbGFncztcbn1cblxuZnVuY3Rpb24gaXNEZWVwRXF1YWxTZXQoYTogU2V0PHVua25vd24+LCBiOiBTZXQ8dW5rbm93bj4pOiBib29sZWFuIHtcbiAgaWYgKGEuc2l6ZSAhPT0gYi5zaXplKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChjb25zdCB2YWx1ZUEgb2YgYSkge1xuICAgIGlmIChiLmhhcyh2YWx1ZUEpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbGV0IGhhc01hdGNoID0gZmFsc2U7XG4gICAgZm9yIChjb25zdCB2YWx1ZUIgb2YgYikge1xuICAgICAgaWYgKGlzRGVlcEVxdWFsKHZhbHVlQSwgdmFsdWVCKSkge1xuICAgICAgICBoYXNNYXRjaCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWhhc01hdGNoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1ha2VPYmplY3RUb2tlblN1YnN0aXR1dGlvbihrZXk6IFRva2VuU3Vic3RpdHV0aW9uS2V5KTogc3RyaW5nIHtcbiAgcmV0dXJuIGB7IFwiW1ske2tleX1dXVwiOiBudWxsIH1gO1xufVxuXG5mdW5jdGlvbiBtYWtlUGxhY2Vob2xkZXIoa2V5OiBUb2tlblN1YnN0aXR1dGlvbktleSwgaW5kZXg/OiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYFtbJHtQTEFDRUhPTERFUl9LRVlfUFJFRklYfSR7a2V5fSR7aW5kZXggPyBTdHJpbmcoaW5kZXgpIDogJyd9XV1gO1xufVxuXG5mdW5jdGlvbiB0cnlFbnRyeUVxdWFsaXR5KHBhcmFtczogVHJ5RW50cnlFcXVhbGl0eVBhcmFtcyk6IGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICBjb25zdCB7XG4gICAgYSxcbiAgICBiLFxuICAgIGVudHJ5XG4gIH0gPSBwYXJhbXM7XG4gIHJldHVybiBhIGluc3RhbmNlb2YgZW50cnkuY29uc3RydWN0b3IgJiYgYiBpbnN0YW5jZW9mIGVudHJ5LmNvbnN0cnVjdG9yID8gZW50cnkuZXF1YWxpdHlDb21wYXJlcihhLCBiKSA6IHVuZGVmaW5lZDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLG1CQUE4QjtBQUM5QixzQkFBNEM7QUFDNUMscUJBQTZCO0FBQzdCLG9CQUEyQjtBQUMzQix5QkFJTztBQUtBLElBQUssdUJBQUwsa0JBQUtBLDBCQUFMO0FBSUwsRUFBQUEsc0JBQUEsYUFBVTtBQUlWLEVBQUFBLHNCQUFBLFVBQU87QUFJUCxFQUFBQSxzQkFBQSxjQUFXO0FBWkQsU0FBQUE7QUFBQSxHQUFBO0FBeUhaLE1BQU0sZ0JBQWdCO0FBQ3RCLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sMEJBQXFFO0FBQUEsRUFDekUsNEJBQTRCLGFBQWEsc0JBQXNCO0FBQUEsRUFDL0QsNEJBQTRCLE1BQU0sZUFBZTtBQUFBLEVBQ2pELDRCQUE0QixRQUFRLGlCQUFpQjtBQUFBLEVBQ3JELDRCQUFtRCxLQUFLLGNBQWM7QUFB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QVEsSUFBSSxXQUFXLENBQUM7QUFDOUIsU0FBTyxZQUFZLE9BQU8sS0FBSztBQUNqQztBQUVBLFNBQVMsZ0JBQWdCLEdBQVMsR0FBa0I7QUFDbEQsU0FBTyxFQUFFLFFBQVEsTUFBTSxFQUFFLFFBQVE7QUFDbkM7QUFFQSxTQUFTLGVBQWUsR0FBMEIsR0FBbUM7QUFDbkYsTUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNO0FBQ3JCLFdBQU87QUFBQSxFQUNUO0FBRUEsYUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLEdBQUc7QUFDNUIsUUFBSSxDQUFDLEVBQUUsSUFBSSxHQUFHLEtBQUssQ0FBQyxZQUFZLE9BQU8sRUFBRSxJQUFJLEdBQUcsQ0FBQyxHQUFHO0FBQ2xELGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLEdBQVcsR0FBb0I7QUFDeEQsU0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO0FBQ2hEO0FBRUEsU0FBUyxlQUFlLEdBQWlCLEdBQTBCO0FBQ2pFLE1BQUksRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUNyQixXQUFPO0FBQUEsRUFDVDtBQUVBLGFBQVcsVUFBVSxHQUFHO0FBQ3RCLFFBQUksRUFBRSxJQUFJLE1BQU0sR0FBRztBQUNqQjtBQUFBLElBQ0Y7QUFDQSxRQUFJLFdBQVc7QUFDZixlQUFXLFVBQVUsR0FBRztBQUN0QixVQUFJLFlBQVksUUFBUSxNQUFNLEdBQUc7QUFDL0IsbUJBQVc7QUFDWDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQ0EsUUFBSSxDQUFDLFVBQVU7QUFDYixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLDRCQUE0QixLQUFtQztBQUN0RSxTQUFPLFFBQVEsR0FBRztBQUNwQjtBQUVBLFNBQVMsZ0JBQWdCLEtBQTJCLE9BQXdCO0FBQzFFLFNBQU8sS0FBSyxzQkFBc0IsR0FBRyxHQUFHLEdBQUcsUUFBUSxPQUFPLEtBQUssSUFBSSxFQUFFO0FBQ3ZFO0FBRUEsU0FBUyxpQkFBaUIsUUFBcUQ7QUFDN0UsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFNBQU8sYUFBYSxNQUFNLGVBQWUsYUFBYSxNQUFNLGNBQWMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLElBQUk7QUFDM0c7IiwKICAibmFtZXMiOiBbIkZ1bmN0aW9uSGFuZGxpbmdNb2RlIiwgIm1vZHVsZSJdCn0K
|
|
559
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29iamVjdC11dGlscy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBPYmplY3RzLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgQ29uc3RydWN0b3IsXG4gIFJlcXVpcmVkS2V5c09mLFxuICBVbmRlZmluZWRPblBhcnRpYWxEZWVwXG59IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4vdHlwZS1ndWFyZHMudHMnO1xuaW1wb3J0IHR5cGUge1xuICBFeGFjdE1lbWJlcnMsXG4gIE1heWJlUmV0dXJuLFxuICBTdHJpbmdLZXlzXG59IGZyb20gJy4vdHlwZS50cyc7XG5cbmltcG9ydCB7IGVycm9yVG9TdHJpbmcgfSBmcm9tICcuL2Vycm9yLnRzJztcbmltcG9ydCB7IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyB9IGZyb20gJy4vZnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgZXNjYXBlUmVnRXhwIH0gZnJvbSAnLi9yZWctZXhwLnRzJztcbmltcG9ydCB7IHJlcGxhY2VBbGwgfSBmcm9tICcuL3N0cmluZy50cyc7XG5pbXBvcnQge1xuICBhc3NlcnROZXZlcixcbiAgZW5zdXJlR2VuZXJpY09iamVjdCxcbiAgZW5zdXJlTm9uTnVsbGFibGVcbn0gZnJvbSAnLi90eXBlLWd1YXJkcy50cyc7XG5cbi8qKlxuICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0LlxuICovXG5leHBvcnQgZW51bSBGdW5jdGlvbkhhbmRsaW5nTW9kZSB7XG4gIC8qKlxuICAgKiBFeGNsdWRlcyBmdW5jdGlvbnMgZnJvbSB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBFeGNsdWRlID0gJ2V4Y2x1ZGUnLFxuICAvKipcbiAgICogSW5jbHVkZXMgdGhlIGZ1bGwgZnVuY3Rpb24gZGVmaW5pdGlvbiBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBGdWxsID0gJ2Z1bGwnLFxuICAvKipcbiAgICogSW5jbHVkZXMgb25seSB0aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgSlNPTiBvdXRwdXQuXG4gICAqL1xuICBOYW1lT25seSA9ICduYW1lT25seSdcbn1cblxuZW51bSBUb2tlblN1YnN0aXR1dGlvbktleSB7XG4gIENpcmN1bGFyUmVmZXJlbmNlID0gJ0NpcmN1bGFyUmVmZXJlbmNlJyxcbiAgRnVuY3Rpb24gPSAnRnVuY3Rpb24nLFxuICBNYXhEZXB0aExpbWl0UmVhY2hlZCA9ICdNYXhEZXB0aExpbWl0UmVhY2hlZCcsXG4gIE1heERlcHRoTGltaXRSZWFjaGVkQXJyYXkgPSAnTWF4RGVwdGhMaW1pdFJlYWNoZWRBcnJheScsXG4gIFRvSlNPTkZhaWxlZCA9ICdUb0pTT05GYWlsZWQnLFxuICBVbmRlZmluZWQgPSAnVW5kZWZpbmVkJ1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayB0b0pzb259LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvSnNvbk9wdGlvbnMge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGhvdyBmdW5jdGlvbnMgc2hvdWxkIGJlIGhhbmRsZWQgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgRnVuY3Rpb25IYW5kbGluZ01vZGUuRXhjbHVkZX1cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZTtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIGRlcHRoIG9mIG5lc3RlZCBvYmplY3RzIHRvIGluY2x1ZGUgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKiBVc2UgYC0xYCBmb3Igbm8gbGltaXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAtMWBcbiAgICovXG4gIHJlYWRvbmx5IG1heERlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGNhdGNoIGVycm9ycyBpbiBgdG9KU09OKClgIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHBsYWNlaG9sZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRDYXRjaFRvSlNPTkVycm9yczogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHdoZXRoZXIgdG8gaGFuZGxlIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVDaXJjdWxhclJlZmVyZW5jZXM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBlcnJvcnMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVFcnJvcnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIGhhbmRsZSBgdW5kZWZpbmVkYCB2YWx1ZXMgaW4gdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRIYW5kbGVVbmRlZmluZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB3aGV0aGVyIHRvIHNvcnQgdGhlIGtleXMgb2YgdGhlIEpTT04gb3V0cHV0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTb3J0S2V5czogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgSlNPTiBvdXRwdXQuIFRoaXMgY2FuIGJlIGEgbnVtYmVyIG9mIHNwYWNlcyBvciBhIHN0cmluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDJgXG4gICAqL1xuICByZWFkb25seSBzcGFjZTogbnVtYmVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHN1YnN0aXR1dGlvbnMgdG8gdXNlIGluIHRoZSBKU09OIG91dHB1dC5cbiAgICovXG4gIHJlYWRvbmx5IHRva2VuU3Vic3RpdHV0aW9uczogUGFydGlhbDxUb2tlblN1YnN0aXR1dGlvbnM+O1xufVxuXG5pbnRlcmZhY2UgQXBwbHlTdWJzdGl0dXRpb25zUGFyYW1zIHtcbiAgcmVhZG9ubHkgZnVuY3Rpb25UZXh0czogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGluZGV4OiBudW1iZXI7XG4gIHJlYWRvbmx5IGtleTogVG9rZW5TdWJzdGl0dXRpb25LZXk7XG4gIHJlYWRvbmx5IHN1YnN0aXR1dGlvbnM6IFRva2VuU3Vic3RpdHV0aW9ucztcbn1cblxuaW50ZXJmYWNlIEVxdWFsaXR5Q29tcGFyZXJFbnRyeTxUPiB7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdG9yOiBDb25zdHJ1Y3RvcjxUPjtcbiAgcmVhZG9ubHkgZXF1YWxpdHlDb21wYXJlcjogKGE6IFQsIGI6IFQpID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBKU09OU2VyaWFsaXphYmxlIHtcbiAgcmVhZG9ubHkgdG9KU09OOiAoLi4uJGFyZ3VtZW50czogdW5rbm93bltdKSA9PiB1bmtub3duO1xufVxuXG5pbnRlcmZhY2UgTW9kdWxlV2l0aERlZmF1bHRFeHBvcnQ8VD4ge1xuICByZWFkb25seSBkZWZhdWx0OiBUO1xufVxuXG5pbnRlcmZhY2UgUmVzb2x2ZWRUb0pzb25PcHRpb25zIGV4dGVuZHMgVG9Kc29uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IHRva2VuU3Vic3RpdHV0aW9uczogVG9rZW5TdWJzdGl0dXRpb25zO1xufVxuXG5pbnRlcmZhY2UgVG9rZW5TdWJzdGl0dXRpb25zIHtcbiAgcmVhZG9ubHkgY2lyY3VsYXJSZWZlcmVuY2U6IHN0cmluZztcbiAgcmVhZG9ubHkgbWF4RGVwdGhMaW1pdFJlYWNoZWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdG9KU09ORmFpbGVkOiBzdHJpbmc7XG59XG5cbmNvbnN0IEtFWV9TRVBBUkFUT1IgPSAnLic7XG5jb25zdCBQTEFDRUhPTERFUl9LRVlfUFJFRklYID0gJ3RvSnNvbjonO1xuY29uc3QgZXF1YWxpdHlDb21wYXJlckVudHJpZXM6IHJlYWRvbmx5IEVxdWFsaXR5Q29tcGFyZXJFbnRyeTx1bmtub3duPltdID0gW1xuICBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cnkoQXJyYXlCdWZmZXIsIGlzRGVlcEVxdWFsQXJyYXlCdWZmZXIpLFxuICBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cnkoRGF0ZSwgaXNEZWVwRXF1YWxEYXRlKSxcbiAgY3JlYXRlRXF1YWxpdHlDb21wYXJlckVudHJ5KFJlZ0V4cCwgaXNEZWVwRXF1YWxSZWdFeHApLFxuICBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cnk8TWFwPHVua25vd24sIHVua25vd24+PihNYXAsIGlzRGVlcEVxdWFsTWFwKSxcbiAgY3JlYXRlRXF1YWxpdHlDb21wYXJlckVudHJ5PFNldDx1bmtub3duPj4oU2V0LCBpc0RlZXBFcXVhbFNldClcbl07XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNldE5lc3RlZFByb3BlcnR5VmFsdWV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNldE5lc3RlZFByb3BlcnR5VmFsdWVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG9iamVjdCB0byBzZXQgdGhlIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBpbi5cbiAgICovXG4gIHJlYWRvbmx5ICRvYmplY3Q6IEdlbmVyaWNPYmplY3Q7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRvIHRoZSBuZXN0ZWQgcHJvcGVydHkuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byBzZXQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bjtcbn1cblxuaW50ZXJmYWNlIEhhbmRsZUFycmF5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYHRvSlNPTigpYCBtYXkgYmUgdXNlZCBkdXJpbmcgY29udmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhblVzZVRvSlNPTjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFycmF5IHZhbHVlIHRvIGNvbnZlcnQuXG4gICAqL1xuICByZWFkb25seSB2YWx1ZTogdW5rbm93bltdO1xufVxuXG5pbnRlcmZhY2UgSGFuZGxlT2JqZWN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYHRvSlNPTigpYCBtYXkgYmUgdXNlZCBkdXJpbmcgY29udmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhblVzZVRvSlNPTjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGtleSB1bmRlciB3aGljaCB0aGUgdmFsdWUgaXMgc3RvcmVkIGluIGl0cyBwYXJlbnQuXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9iamVjdCB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IG9iamVjdDtcbn1cblxuaW50ZXJmYWNlIEhhbmRsZVBsYWluT2JqZWN0UGFyYW1zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYHRvSlNPTigpYCBtYXkgYmUgdXNlZCBkdXJpbmcgY29udmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNhblVzZVRvSlNPTjogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGN1cnJlbnQgcmVjdXJzaW9uIGRlcHRoLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHBsYWluIG9iamVjdCB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IG9iamVjdDtcbn1cblxudHlwZSBLZXlzV2l0aFVuZGVmaW5lZDxUPiA9IEtleXNXaXRoVW5kZWZpbmVkTWFwPFQ+W2tleW9mIFRdO1xuXG50eXBlIEtleXNXaXRoVW5kZWZpbmVkTWFwPFQ+ID0ge1xuICBbSyBpbiBrZXlvZiBUXS0/OiB1bmRlZmluZWQgZXh0ZW5kcyBUW0tdID8gSyA6IG5ldmVyO1xufTtcbnR5cGUgTWFuZGF0b3J5S2V5c1dpdGhVbmRlZmluZWQ8VCBleHRlbmRzIG9iamVjdD4gPSBFeHRyYWN0PFJlcXVpcmVkS2V5c09mPFQ+ICYgU3RyaW5nS2V5czxUPiwgS2V5c1dpdGhVbmRlZmluZWQ8VD4+O1xudHlwZSBSZW1vdmVVbmRlZmluZWRPdmVybG9hZDxUIGV4dGVuZHMgb2JqZWN0PiA9IE1hbmRhdG9yeUtleXNXaXRoVW5kZWZpbmVkPFQ+IGV4dGVuZHMgbmV2ZXIgPyBbb2JqOiBUXVxuICA6IG5ldmVyO1xuXG50eXBlIFJlbW92ZVVuZGVmaW5lZFdpdGhLZXlzT3ZlcmxvYWQ8VCBleHRlbmRzIG9iamVjdCwgSyBleHRlbmRzIHJlYWRvbmx5IHN0cmluZ1tdPiA9IFtvYmo6IFQsIGtleXNUb0tlZXA6IEV4YWN0TWVtYmVyczxNYW5kYXRvcnlLZXlzV2l0aFVuZGVmaW5lZDxUPiwgSz5dO1xuXG5pbnRlcmZhY2UgVG9QbGFpbk9iamVjdFBhcmFtcyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGB0b0pTT04oKWAgbWF5IGJlIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBjYW5Vc2VUb0pTT046IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIHZhbHVlIGlzIHN0b3JlZCBpbiBpdHMgcGFyZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHVua25vd247XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHRyeUVudHJ5RXF1YWxpdHl9LlxuICovXG5pbnRlcmZhY2UgVHJ5RW50cnlFcXVhbGl0eVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgdmFsdWUgdG8gY29tcGFyZS5cbiAgICovXG4gIHJlYWRvbmx5IGE6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAgICovXG4gIHJlYWRvbmx5IGI6IHVua25vd247XG5cbiAgLyoqXG4gICAqIFRoZSBlcXVhbGl0eSBjb21wYXJlciBlbnRyeSB0byB1c2UuXG4gICAqL1xuICByZWFkb25seSBlbnRyeTogRXF1YWxpdHlDb21wYXJlckVudHJ5PHVua25vd24+O1xufVxuXG5pbnRlcmZhY2UgVHJ5SGFuZGxlVG9KU09OUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHJlY3Vyc2lvbiBkZXB0aC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkgdW5kZXIgd2hpY2ggdGhlIHZhbHVlIGlzIHN0b3JlZCBpbiBpdHMgcGFyZW50LlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvYmplY3QgdmFsdWUgdG8gY29udmVydC5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBvYmplY3Q7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSB2YWx1ZSB0byBhIEpTT04tc2VyaWFsaXphYmxlIHBsYWluIG9iamVjdCBhbmQgcmVuZGVycyBpdCBhcyBhIEpTT04gc3RyaW5nLlxuICpcbiAqIEEgZnJlc2ggaW5zdGFuY2UgaXMgY3JlYXRlZCBwZXIge0BsaW5rIHRvSnNvbn0gY2FsbCBzbyB0aGF0IHRoZSBhY2N1bXVsYXRlZCBgZnVuY3Rpb25UZXh0c2BcbiAqIGFuZCB0aGUgYHVzZWRPYmplY3RzYCBjaXJjdWxhci1yZWZlcmVuY2Ugc2V0IG5ldmVyIGxlYWsgYmV0d2VlbiBjb252ZXJzaW9ucy5cbiAqL1xuY2xhc3MgVG9Kc29uQ29udmVydGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBmdWxsT3B0aW9uczogUmVzb2x2ZWRUb0pzb25PcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IGZ1bmN0aW9uVGV4dHM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgdXNlZE9iamVjdHMgPSBuZXcgV2Vha1NldCgpO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IGNvbnZlcnRlciwgcmVzb2x2aW5nIHRoZSBwcm92aWRlZCBvcHRpb25zIGFnYWluc3QgdGhlIGRlZmF1bHRzLlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIGZvciB0aGUgSlNPTiBjb252ZXJzaW9uLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFBhcnRpYWw8VG9Kc29uT3B0aW9ucz4pIHtcbiAgICBjb25zdCBERUZBVUxUX09QVElPTlM6IFJlc29sdmVkVG9Kc29uT3B0aW9ucyA9IHtcbiAgICAgIGZ1bmN0aW9uSGFuZGxpbmdNb2RlOiBGdW5jdGlvbkhhbmRsaW5nTW9kZS5FeGNsdWRlLFxuICAgICAgbWF4RGVwdGg6IC0xLFxuICAgICAgc2hvdWxkQ2F0Y2hUb0pTT05FcnJvcnM6IGZhbHNlLFxuICAgICAgc2hvdWxkSGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2VzOiBmYWxzZSxcbiAgICAgIHNob3VsZEhhbmRsZUVycm9yczogZmFsc2UsXG4gICAgICBzaG91bGRIYW5kbGVVbmRlZmluZWQ6IGZhbHNlLFxuICAgICAgc2hvdWxkU29ydEtleXM6IGZhbHNlLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnMgLS0gRXh0cmFjdGluZyBtYWdpYyBudW1iZXIgYXMgYSBjb25zdGFudCB3b3VsZCBiZSByZXBldGl0aXZlLCBhcyB0aGUgdmFsdWUgaXMgdXNlZCBvbmx5IG9uY2UgYW5kIGl0cyBuYW1lIHdvdWxkIGJlIHRoZSBzYW1lIGFzIHRoZSBwcm9wZXJ0eS5cbiAgICAgIHNwYWNlOiAyLFxuICAgICAgdG9rZW5TdWJzdGl0dXRpb25zOiB7XG4gICAgICAgIGNpcmN1bGFyUmVmZXJlbmNlOiBtYWtlT2JqZWN0VG9rZW5TdWJzdGl0dXRpb24oVG9rZW5TdWJzdGl0dXRpb25LZXkuQ2lyY3VsYXJSZWZlcmVuY2UpLFxuICAgICAgICBtYXhEZXB0aExpbWl0UmVhY2hlZDogbWFrZU9iamVjdFRva2VuU3Vic3RpdHV0aW9uKFRva2VuU3Vic3RpdHV0aW9uS2V5Lk1heERlcHRoTGltaXRSZWFjaGVkKSxcbiAgICAgICAgdG9KU09ORmFpbGVkOiBtYWtlT2JqZWN0VG9rZW5TdWJzdGl0dXRpb24oVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkKVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBmdWxsT3B0aW9ucyA9IHtcbiAgICAgIC4uLkRFRkFVTFRfT1BUSU9OUyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICB0b2tlblN1YnN0aXR1dGlvbnM6IHtcbiAgICAgICAgLi4uREVGQVVMVF9PUFRJT05TLnRva2VuU3Vic3RpdHV0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9ucy50b2tlblN1YnN0aXR1dGlvbnNcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGZ1bGxPcHRpb25zLm1heERlcHRoID09PSAtMSkge1xuICAgICAgZnVsbE9wdGlvbnMubWF4RGVwdGggPSBJbmZpbml0eTtcbiAgICB9XG5cbiAgICB0aGlzLmZ1bGxPcHRpb25zID0gZnVsbE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGdpdmVuIHZhbHVlIHRvIGEgSlNPTiBzdHJpbmcsIGFwcGx5aW5nIHRoZSBjb25maWd1cmVkIHRva2VuIHN1YnN0aXR1dGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyBUaGUgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlLlxuICAgKi9cbiAgcHVibGljIGNvbnZlcnQodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGNvbnN0IHBsYWluT2JqZWN0ID0gdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgIGNhblVzZVRvSlNPTjogdHJ1ZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAga2V5OiAnJyxcbiAgICAgIHZhbHVlXG4gICAgfSk7XG4gICAgbGV0IGpzb24gPSBlbnN1cmVOb25OdWxsYWJsZShKU09OLnN0cmluZ2lmeShwbGFpbk9iamVjdCwgbnVsbCwgdGhpcy5mdWxsT3B0aW9ucy5zcGFjZSkpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyUmVnRXhwID0gbmV3IFJlZ0V4cChTdHJpbmcucmF3YFwiXFxbXFxbJHtlc2NhcGVSZWdFeHAoUExBQ0VIT0xERVJfS0VZX1BSRUZJWCl9KD88S2V5PltBLVphLXpdKykoPzxJbmRleD5cXGQqKVxcXVxcXVwiYCwgJ2cnKTtcbiAgICBqc29uID0gcmVwbGFjZUFsbCh7XG4gICAgICAkc3RyaW5nOiBqc29uLFxuICAgICAgcmVwbGFjZXI6ICh7IGNhcHR1cmVkR3JvdXBBcmd1bWVudHM6IFtrZXkgPSAnJywgaW5kZXhTdHJpbmcgPSAnJ10gfSkgPT5cbiAgICAgICAgYXBwbHlTdWJzdGl0dXRpb25zKHtcbiAgICAgICAgICBmdW5jdGlvblRleHRzOiB0aGlzLmZ1bmN0aW9uVGV4dHMsXG4gICAgICAgICAgaW5kZXg6IGluZGV4U3RyaW5nID8gcGFyc2VJbnQoaW5kZXhTdHJpbmcsIDEwKSA6IDAsXG4gICAgICAgICAga2V5OiBjYXN0VG88VG9rZW5TdWJzdGl0dXRpb25LZXk+KGtleSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uczogdGhpcy5mdWxsT3B0aW9ucy50b2tlblN1YnN0aXR1dGlvbnNcbiAgICAgICAgfSksXG4gICAgICBzZWFyY2hWYWx1ZTogcGxhY2Vob2xkZXJSZWdFeHBcbiAgICB9KTtcbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQXJyYXkocGFyYW1zOiBIYW5kbGVBcnJheVBhcmFtcyk6IHVua25vd24ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNhblVzZVRvSlNPTixcbiAgICAgIGRlcHRoLFxuICAgICAgdmFsdWVcbiAgICB9ID0gcGFyYW1zO1xuICAgIHJldHVybiBkZXB0aCA+IHRoaXMuZnVsbE9wdGlvbnMubWF4RGVwdGhcbiAgICAgID8gbWFrZVBsYWNlaG9sZGVyKFRva2VuU3Vic3RpdHV0aW9uS2V5Lk1heERlcHRoTGltaXRSZWFjaGVkQXJyYXksIHZhbHVlLmxlbmd0aClcbiAgICAgIDogdmFsdWUubWFwKChpdGVtLCBpbmRleCkgPT5cbiAgICAgICAgdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICAgICAgZGVwdGg6IGRlcHRoICsgMSxcbiAgICAgICAgICBrZXk6IFN0cmluZyhpbmRleCksXG4gICAgICAgICAgdmFsdWU6IGl0ZW1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNpcmN1bGFyUmVmZXJlbmNlKHZhbHVlOiBvYmplY3QsIGtleTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgaWYgKHRoaXMuZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2VzKSB7XG4gICAgICByZXR1cm4gbWFrZVBsYWNlaG9sZGVyKFRva2VuU3Vic3RpdHV0aW9uS2V5LkNpcmN1bGFyUmVmZXJlbmNlKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVDb25zdHJ1Y3Rvck5hbWUgPSB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYENvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT05cbi0tPiBzdGFydGluZyBhdCBvYmplY3Qgd2l0aCBjb25zdHJ1Y3RvciAnJHt2YWx1ZUNvbnN0cnVjdG9yTmFtZX0nXG4tLS0gcHJvcGVydHkgJyR7a2V5fScgY2xvc2VzIHRoZSBjaXJjbGVgKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLWZ1bmN0aW9uLXR5cGUgLS0gV2UgbmVlZCB0byB1c2UgYEZ1bmN0aW9uYCB0eXBlIHRvIGhhbmRsZSB0aGVtIHNlcGFyYXRlbHkuXG4gIHByaXZhdGUgaGFuZGxlRnVuY3Rpb24odmFsdWU6IEZ1bmN0aW9uKTogdW5rbm93biB7XG4gICAgaWYgKHRoaXMuZnVsbE9wdGlvbnMuZnVuY3Rpb25IYW5kbGluZ01vZGUgPT09IEZ1bmN0aW9uSGFuZGxpbmdNb2RlLkV4Y2x1ZGUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5mdW5jdGlvblRleHRzLmxlbmd0aDtcbiAgICBjb25zdCBmdW5jdGlvblRleHQgPSB0aGlzLmZ1bGxPcHRpb25zLmZ1bmN0aW9uSGFuZGxpbmdNb2RlID09PSBGdW5jdGlvbkhhbmRsaW5nTW9kZS5GdWxsXG4gICAgICA/IGdldEZ1bmN0aW9uRXhwcmVzc2lvblN0cmluZyh2YWx1ZSlcbiAgICAgIDogYGZ1bmN0aW9uICR7dmFsdWUubmFtZSB8fCAnYW5vbnltb3VzJ30oKSB7IC8qIC4uLiAqLyB9YDtcbiAgICB0aGlzLmZ1bmN0aW9uVGV4dHMucHVzaChmdW5jdGlvblRleHQpO1xuICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuRnVuY3Rpb24sIGluZGV4KTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlT2JqZWN0KHBhcmFtczogSGFuZGxlT2JqZWN0UGFyYW1zKTogdW5rbm93biB7XG4gICAgY29uc3Qge1xuICAgICAgY2FuVXNlVG9KU09OLFxuICAgICAgZGVwdGgsXG4gICAgICBrZXksXG4gICAgICB2YWx1ZVxuICAgIH0gPSBwYXJhbXM7XG4gICAgaWYgKHRoaXMudXNlZE9iamVjdHMuaGFzKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlQ2lyY3VsYXJSZWZlcmVuY2UodmFsdWUsIGtleSk7XG4gICAgfVxuXG4gICAgdGhpcy51c2VkT2JqZWN0cy5hZGQodmFsdWUpO1xuXG4gICAgaWYgKGNhblVzZVRvSlNPTikge1xuICAgICAgY29uc3QgdG9KU09OUmVzdWx0ID0gdGhpcy50cnlIYW5kbGVUb0pTT04oe1xuICAgICAgICBkZXB0aCxcbiAgICAgICAga2V5LFxuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gICAgICBpZiAodG9KU09OUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHRvSlNPTlJlc3VsdDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUFycmF5KHtcbiAgICAgICAgY2FuVXNlVG9KU09OLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChkZXB0aCA+IHRoaXMuZnVsbE9wdGlvbnMubWF4RGVwdGgpIHtcbiAgICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuTWF4RGVwdGhMaW1pdFJlYWNoZWQpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVycm9yICYmIHRoaXMuZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlRXJyb3JzXG4gICAgICA/IGVycm9yVG9TdHJpbmcodmFsdWUpXG4gICAgICA6IHRoaXMuaGFuZGxlUGxhaW5PYmplY3Qoe1xuICAgICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICB2YWx1ZVxuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZVBsYWluT2JqZWN0KHBhcmFtczogSGFuZGxlUGxhaW5PYmplY3RQYXJhbXMpOiB1bmtub3duIHtcbiAgICBjb25zdCB7XG4gICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICBkZXB0aCxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXModmFsdWUpO1xuICAgIGlmICh0aGlzLmZ1bGxPcHRpb25zLnNob3VsZFNvcnRLZXlzKSB7XG4gICAgICBlbnRyaWVzLnNvcnQoKFtrZXkxXSwgW2tleTJdKSA9PiBrZXkxLmxvY2FsZUNvbXBhcmUoa2V5MikpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBlbnRyaWVzLm1hcCgoW2tleTIsIHZhbHVlMl0pID0+IFtcbiAgICAgICAga2V5MixcbiAgICAgICAgdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgICAgICBjYW5Vc2VUb0pTT04sXG4gICAgICAgICAgZGVwdGg6IGRlcHRoICsgMSxcbiAgICAgICAgICBrZXk6IGtleTIsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlMlxuICAgICAgICB9KVxuICAgICAgXSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSB0b1BsYWluT2JqZWN0KHBhcmFtczogVG9QbGFpbk9iamVjdFBhcmFtcyk6IHVua25vd24ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNhblVzZVRvSlNPTixcbiAgICAgIGRlcHRoLFxuICAgICAga2V5LFxuICAgICAgdmFsdWVcbiAgICB9ID0gcGFyYW1zO1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gKGRlcHRoID09PSAwIHx8IHRoaXMuZnVsbE9wdGlvbnMuc2hvdWxkSGFuZGxlVW5kZWZpbmVkKVxuICAgICAgICA/IG1ha2VQbGFjZWhvbGRlcihUb2tlblN1YnN0aXR1dGlvbktleS5VbmRlZmluZWQpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZUZ1bmN0aW9uKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbFxuICAgICAgPyB2YWx1ZVxuICAgICAgOiB0aGlzLmhhbmRsZU9iamVjdCh7XG4gICAgICAgIGNhblVzZVRvSlNPTixcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGtleSxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB0cnlIYW5kbGVUb0pTT04ocGFyYW1zOiBUcnlIYW5kbGVUb0pTT05QYXJhbXMpOiB1bmtub3duIHtcbiAgICBjb25zdCB7XG4gICAgICBkZXB0aCxcbiAgICAgIGtleSxcbiAgICAgIHZhbHVlXG4gICAgfSA9IHBhcmFtcztcbiAgICBjb25zdCB0b0pTT04gPSAodmFsdWUgYXMgUGFydGlhbDxKU09OU2VyaWFsaXphYmxlPikudG9KU09OO1xuICAgIGlmICh0eXBlb2YgdG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRvSlNPTi5jYWxsKHZhbHVlLCBrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy50b1BsYWluT2JqZWN0KHtcbiAgICAgICAgICBjYW5Vc2VUb0pTT046IGZhbHNlLFxuICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIGtleSxcbiAgICAgICAgICB2YWx1ZTogbmV3VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAodGhpcy5mdWxsT3B0aW9ucy5zaG91bGRDYXRjaFRvSlNPTkVycm9ycykge1xuICAgICAgICAgIHJldHVybiBtYWtlUGxhY2Vob2xkZXIoVG9rZW5TdWJzdGl0dXRpb25LZXkuVG9KU09ORmFpbGVkKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuLyoqXG4gKiBBc3NpZ25zIHByb3BlcnRpZXMgZnJvbSBvbmUgb3IgbW9yZSBzb3VyY2Ugb2JqZWN0cyB0byBhIHRhcmdldCBvYmplY3QsIGluY2x1ZGluZyBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzLlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFUgLSBUaGUgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHNvdXJjZSAtIFRoZSBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFU+KHRhcmdldDogVCwgc291cmNlOiBVKTogVCAmIFU7XG4vKipcbiAqIEFzc2lnbnMgcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHRhcmdldCBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gVSAtIFRoZSBmaXJzdCBzb3VyY2Ugb2JqZWN0IHR5cGUuXG4gKiBAdHlwZVBhcmFtIFYgLSBUaGUgc2Vjb25kIHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSBzb3VyY2UxIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBzb3VyY2UyIC0gVGhlIHNlY29uZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFUsIFY+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogVik6IFQgJiBVICYgVjtcbi8qKlxuICogQXNzaWducyBwcm9wZXJ0aWVzIGZyb20gb25lIG9yIG1vcmUgc291cmNlIG9iamVjdHMgdG8gYSB0YXJnZXQgb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0eXBlLlxuICogQHR5cGVQYXJhbSBVIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEB0eXBlUGFyYW0gViAtIFRoZSBzZWNvbmQgc291cmNlIG9iamVjdCB0eXBlLlxuICogQHR5cGVQYXJhbSBXIC0gVGhlIHRoaXJkIHNvdXJjZSBvYmplY3QgdHlwZS5cbiAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgdGFyZ2V0IG9iamVjdCB0byBhc3NpZ24gcHJvcGVydGllcyB0by5cbiAqIEBwYXJhbSBzb3VyY2UxIC0gVGhlIGZpcnN0IHNvdXJjZSBvYmplY3QgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEBwYXJhbSBzb3VyY2UyIC0gVGhlIHNlY29uZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcGFyYW0gc291cmNlMyAtIFRoZSB0aGlyZCBzb3VyY2Ugb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBhc3NpZ25lZCBwcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3QsIFUsIFYsIFc+KHRhcmdldDogVCwgc291cmNlMTogVSwgc291cmNlMjogViwgc291cmNlMzogVyk6IFQgJiBVICYgViAmIFc7XG4vKipcbiAqIEFzc2lnbnMgcHJvcGVydGllcyBmcm9tIG9uZSBvciBtb3JlIHNvdXJjZSBvYmplY3RzIHRvIGEgdGFyZ2V0IG9iamVjdCwgaW5jbHVkaW5nIG5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0IHRvIGFzc2lnbiBwcm9wZXJ0aWVzIHRvLlxuICogQHBhcmFtIHNvdXJjZXMgLSBUaGUgc291cmNlIG9iamVjdHMgdG8gYXNzaWduIHByb3BlcnRpZXMgZnJvbS5cbiAqIEByZXR1cm5zIFRoZSB0YXJnZXQgb2JqZWN0IHdpdGggdGhlIGFzc2lnbmVkIHByb3BlcnRpZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXModGFyZ2V0OiBvYmplY3QsIC4uLnNvdXJjZXM6IG9iamVjdFtdKTogb2JqZWN0IHtcbiAgcmV0dXJuIGFzc2lnbldpdGhOb25FbnVtZXJhYmxlUHJvcGVydGllc0ltcGwodGFyZ2V0LCAuLi5zb3VyY2VzKTtcbn1cblxuLyoqXG4gKiBDYXN0cyBhIHZhbHVlIHRvIGEgc3BlY2lmaWMgdHlwZS5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdGFyZ2V0IHR5cGUgdG8gY2FzdCB0by5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBjYXN0LlxuICogQHJldHVybnMgVGhlIHZhbHVlIGFzIHRoZSBzcGVjaWZpZWQgdHlwZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS10eXBlLXBhcmFtZXRlcnMgLS0gV2UgbmVlZCB0byBjYXN0LlxuZXhwb3J0IGZ1bmN0aW9uIGNhc3RUbzxUPih2YWx1ZTogdW5rbm93bik6IFQge1xuICByZXR1cm4gdmFsdWUgYXMgVDtcbn1cblxuLyoqXG4gKiBDbG9uZXMgYW4gb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGNsb25lLlxuICogQHJldHVybnMgQSBuZXcgb2JqZWN0IHdpdGggdGhlIHNhbWUgcHJvcGVydGllcyBhcyB0aGUgb3JpZ2luYWwgb2JqZWN0LCBpbmNsdWRpbmcgbm9uLWVudW1lcmFibGUgcHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lV2l0aE5vbkVudW1lcmFibGVQcm9wZXJ0aWVzPFQgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6IFQpOiBUIHtcbiAgcmV0dXJuIE9iamVjdC5jcmVhdGUoZ2V0UHJvdG90eXBlT2YoJG9iamVjdCksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKCRvYmplY3QpKSBhcyBUO1xufVxuXG4vKipcbiAqIERlbGV0ZXMgbXVsdGlwbGUgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGRlbGV0ZSB0aGUgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZXMgLSBUaGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMgdG8gZGVsZXRlLlxuICogQHJldHVybnMgYHRydWVgIGlmIGFueSBvZiB0aGUgcHJvcGVydGllcyB3ZXJlIHByZXNlbnQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSAtLSBUaGUgbmFtZSBzdGF0ZXMgdGhlIGFjdGlvbjsgdGhlIGJvb2xlYW4gb25seSByZXBvcnRzIHdoZXRoZXIgYW55dGhpbmcgd2FzIGRlbGV0ZWQuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUHJvcGVydGllczxUIGV4dGVuZHMgb2JqZWN0Pigkb2JqZWN0OiBULCBwcm9wZXJ0eU5hbWVzOiAoa2V5b2YgVClbXSk6IGJvb2xlYW4ge1xuICBsZXQgaGFzRGVsZXRlZEFueSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIHByb3BlcnR5TmFtZXMpIHtcbiAgICBoYXNEZWxldGVkQW55ID0gZGVsZXRlUHJvcGVydHkoJG9iamVjdCwgcHJvcGVydHlOYW1lKSB8fCBoYXNEZWxldGVkQW55O1xuICB9XG5cbiAgcmV0dXJuIGhhc0RlbGV0ZWRBbnk7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gJG9iamVjdCAtIFRoZSBvYmplY3QgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eSBmcm9tLlxuICogQHBhcmFtIHByb3BlcnR5TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkZWxldGUuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3BlcnR5IHdhcyBwcmVzZW50LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vY29uc2lzdGVudC1ib29sZWFuLW5hbWUgLS0gVGhlIG5hbWUgc3RhdGVzIHRoZSBhY3Rpb247IHRoZSBib29sZWFuIG9ubHkgcmVwb3J0cyB3aGV0aGVyIHRoZSBwcm9wZXJ0eSB3YXMgZGVsZXRlZC5cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVQcm9wZXJ0eTxUIGV4dGVuZHMgb2JqZWN0Pigkb2JqZWN0OiBULCBwcm9wZXJ0eU5hbWU6IGtleW9mIFQpOiBib29sZWFuIHtcbiAgaWYgKCFPYmplY3QuaGFzT3duKCRvYmplY3QsIHByb3BlcnR5TmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICBkZWxldGUgJG9iamVjdFtwcm9wZXJ0eU5hbWVdO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgZGVmYXVsdCBleHBvcnQgZnJvbSBhIG1vZHVsZS5cbiAqXG4gKiBVc2VmdWwgdG8gaGFuZGxlIGluY29ycmVjdCBkZWZhdWx0IGV4cG9ydCBpbnRlcm9wIGJldHdlZW4gRVNNIGFuZCBDSlMuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gVGhlIHR5cGUgb2YgdGhlIGRlZmF1bHQgZXhwb3J0LlxuICogQHBhcmFtICRtb2R1bGUgLSBUaGUgbW9kdWxlIHRvIGV4dHJhY3QgdGhlIGRlZmF1bHQgZXhwb3J0IGZyb20uXG4gKiBAcmV0dXJucyBUaGUgZGVmYXVsdCBleHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RGVmYXVsdEV4cG9ydEludGVyb3A8VD4oJG1vZHVsZTogTW9kdWxlV2l0aERlZmF1bHRFeHBvcnQ8VD4gfCBUKTogVCB7XG4gIGlmICh0eXBlb2YgJG1vZHVsZSAhPT0gJ29iamVjdCcgfHwgJG1vZHVsZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAkbW9kdWxlO1xuICB9XG5cbiAgcmV0dXJuICdkZWZhdWx0JyBpbiAkbW9kdWxlID8gJG1vZHVsZS5kZWZhdWx0IDogJG1vZHVsZTtcbn1cblxuLyoqXG4gKiBHZXRzIGFsbCBlbnRyaWVzIG9mIGFuIG9iamVjdC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGdldCB0aGUgZW50cmllcyBvZi5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBlbnRyaWVzIG9mIHRoZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxFbnRyaWVzPFQgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6IFQpOiBbU3RyaW5nS2V5czxUPiwgVFtTdHJpbmdLZXlzPFQ+XV1bXSB7XG4gIHJldHVybiBnZXRBbGxLZXlzKCRvYmplY3QpLm1hcCgoa2V5KSA9PiBba2V5LCAkb2JqZWN0W2tleV1dKTtcbn1cblxuLyoqXG4gKiBHZXRzIGFsbCBrZXlzIG9mIGFuIG9iamVjdC5cbiAqIEluY2x1ZGVzIGZpZWxkcyBhbmQgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIGdldCB0aGUga2V5cyBvZi5cbiAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGFsbCBrZXlzIG9mIHRoZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxLZXlzPFQgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6IFQpOiBTdHJpbmdLZXlzPFQ+W10ge1xuICBjb25zdCBrZXlzOiBTdHJpbmdLZXlzPFQ+W10gPSBbXTtcbiAgbGV0IGN1cnJlbnQ6IG51bGwgfCBvYmplY3QgPSAkb2JqZWN0O1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY3VycmVudCk7XG4gICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdG9yXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdG9ycykpIHtcbiAgICAgIGlmICgoa2V5ID09PSAnX19wcm90b19fJykgfHwgKHR5cGVvZiBkZXNjcmlwdG9yLnZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGFzR2V0dGVyID0gdHlwZW9mIGRlc2NyaXB0b3IuZ2V0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgY29uc3QgaGFzU2V0dGVyID0gdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKGhhc0dldHRlciB8fCBoYXNTZXR0ZXIpIHtcbiAgICAgICAgaWYgKGhhc0dldHRlciAmJiBoYXNTZXR0ZXIpIHtcbiAgICAgICAgICBrZXlzLnB1c2goa2V5IGFzIFN0cmluZ0tleXM8VD4pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmIGRlc2NyaXB0b3Iud3JpdGFibGUpIHtcbiAgICAgICAga2V5cy5wdXNoKGtleSBhcyBTdHJpbmdLZXlzPFQ+KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50ID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGN1cnJlbnQpIGFzIG51bGwgfCBvYmplY3Q7XG4gIH1cbiAgcmV0dXJuIGtleXMuc29ydCgpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byBnZXQgdGhlIG5lc3RlZCBwcm9wZXJ0eSB2YWx1ZSBmcm9tLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgbmVzdGVkIHByb3BlcnR5LlxuICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBuZXN0ZWQgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKCRvYmplY3Q6IEdlbmVyaWNPYmplY3QsIHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICBsZXQgbm9kZTogR2VuZXJpY09iamVjdCB8IHVuZGVmaW5lZCA9ICRvYmplY3Q7XG4gIGNvbnN0IGtleXMgPSBwYXRoLnNwbGl0KEtFWV9TRVBBUkFUT1IpO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbm9kZSA9IG5vZGVba2V5XSBhcyBHZW5lcmljT2JqZWN0IHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvdG90eXBlIG9mIHRoZSBzcGVjaWZpZWQgb2JqZWN0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuXG4gKiBAcGFyYW0gaW5zdGFuY2UgLSBUaGUgb2JqZWN0IGluc3RhbmNlIHRvIHJldHJpZXZlIHRoZSBwcm90b3R5cGUgb2YuXG4gKiBAcmV0dXJucyBUaGUgcHJvdG90eXBlIG9mIHRoZSBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZjxUPihpbnN0YW5jZTogVCk6IFQge1xuICByZXR1cm4gaW5zdGFuY2UgPT09IHVuZGVmaW5lZCB8fCBpbnN0YW5jZSA9PT0gbnVsbCA/IGluc3RhbmNlIDogKE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnN0YW5jZSkgYXMgVCk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZGVlcGx5IGVxdWFsLlxuICpcbiAqIEBwYXJhbSBhIC0gVGhlIGZpcnN0IHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0gYiAtIFRoZSBzZWNvbmQgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBkZWVwbHkgZXF1YWwsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEZWVwRXF1YWwoYTogdW5rbm93biwgYjogdW5rbm93bik6IGJvb2xlYW4ge1xuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBhICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgYiAhPT0gJ29iamVjdCcgfHwgYSA9PT0gbnVsbCB8fCBiID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYUNvbnN0cnVjdG9yID0gYS5jb25zdHJ1Y3RvcjtcbiAgY29uc3QgYkNvbnN0cnVjdG9yID0gYi5jb25zdHJ1Y3RvcjtcblxuICBpZiAoYUNvbnN0cnVjdG9yICE9PSBiQ29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoYUNvbnN0cnVjdG9yICE9PSBPYmplY3QpIHtcbiAgICBjb25zdCByZXN1bHQgPSBkZWVwRXF1YWxUeXBlZChhLCBiKTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qga2V5c0EgPSBnZXRBbGxLZXlzKGEpO1xuICBjb25zdCBrZXlzQiA9IGdldEFsbEtleXMoYik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYVJlY29yZCA9IGVuc3VyZUdlbmVyaWNPYmplY3QoYSk7XG4gIGNvbnN0IGJSZWNvcmQgPSBlbnN1cmVHZW5lcmljT2JqZWN0KGIpO1xuXG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXNBKSB7XG4gICAgaWYgKCFrZXlzQi5pbmNsdWRlcyhrZXkpIHx8ICFpc0RlZXBFcXVhbChhUmVjb3JkW2tleV0sIGJSZWNvcmRba2V5XSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogUmV0cmlldmVzIHRoZSBuYW1lIG9mIGEgcHJvcGVydHkgb2YgYSBnaXZlbiB0eXBlIGBUYC5cbiAqXG4gKiBAdHlwZVBhcmFtIFQgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgYXMgYSBzdHJpbmcuXG4gKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lb2Y8VCBleHRlbmRzIG9iamVjdD4obmFtZTogU3RyaW5nS2V5czxUPik6IFN0cmluZ0tleXM8VD4ge1xuICByZXR1cm4gbmFtZTtcbn1cbi8qKlxuICogTm9ybWFsaXplcyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGFsbG93IGB1bmRlZmluZWRgIGFzc2lnbm1lbnQgaW4gc3RyaWN0IG1vZGUuXG4gKlxuICogVGhpcyB1dGlsaXR5IHByb3ZpZGVzIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGBleGFjdE9wdGlvbmFsUHJvcGVydHlUeXBlc2AgVHlwZVNjcmlwdCBmbGFnLFxuICogd2hpY2ggcHJvaGliaXRzIGRpcmVjdGx5IGFzc2lnbmluZyBgdW5kZWZpbmVkYCB0byBvcHRpb25hbCBwcm9wZXJ0aWVzIHdoZW4gdGhlIHR5cGVcbiAqIGV4cGxpY2l0bHkgb21pdHMgYHVuZGVmaW5lZGAuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIFdpdGggYGV4YWN0T3B0aW9uYWxQcm9wZXJ0eVR5cGVzOiB0cnVlYFxuICogY29uc3QgeDogeyBwcm9wPzogc3RyaW5nIH0gPSB7IHByb3A6IHVuZGVmaW5lZCB9OyAvLyBDb21waWxlciBlcnJvclxuICpcbiAqIC8vIFVzaW5nIHRoaXMgdXRpbGl0eTpcbiAqIGNvbnN0IHk6IHsgcHJvcD86IHN0cmluZyB9ID0gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPHsgcHJvcD86IHN0cmluZyB9Pih7IHByb3A6IHVuZGVmaW5lZCB9KTsgLy8gV29ya3NcbiAqIGBgYFxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFRoZSB0YXJnZXQgdHlwZSB3aXRoIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gbm9ybWFsaXplLlxuICogQHBhcmFtICRvYmplY3QgLSBUaGUgb2JqZWN0IHRvIG5vcm1hbGl6ZSwgYWxsb3dpbmcgZXhwbGljaXQgYHVuZGVmaW5lZGAgZm9yIG9wdGlvbmFsIHByb3BlcnRpZXMuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBvYmplY3QsIGNvbXBhdGlibGUgd2l0aCBgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXNgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPFQ+KCRvYmplY3Q6IFVuZGVmaW5lZE9uUGFydGlhbERlZXA8VD4pOiBUIHtcbiAgcmV0dXJuICRvYmplY3QgYXMgVDtcbn1cbi8qKlxuICogUmVtb3ZlcyBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyBmcm9tIGFuIG9iamVjdCB3aGVuIHRoZXJlIGFyZSBubyBtYW5kYXRvcnkga2V5cyB3aXRoIGB1bmRlZmluZWRgIHZhbHVlcy5cbiAqXG4gKiBAdHlwZVBhcmFtIFR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0LlxuICogQHBhcmFtICRhcmd1bWVudHMgLSBUaGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBvYmplY3Qgd2l0aCBhbGwgYHVuZGVmaW5lZGAgcHJvcGVydGllcyByZW1vdmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllczxUeXBlIGV4dGVuZHMgb2JqZWN0PihcbiAgLi4uJGFyZ3VtZW50czogUmVtb3ZlVW5kZWZpbmVkT3ZlcmxvYWQ8VHlwZT5cbik6IFR5cGU7XG4vKipcbiAqIFJlbW92ZXMgYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3Qgd2hlbiB0aGVyZSBhcmUgbWFuZGF0b3J5IGtleXMgd2l0aCBgdW5kZWZpbmVkYCB2YWx1ZXMuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEB0eXBlUGFyYW0gS2V5c1RvS2VlcCAtIFRoZSBrZXlzIHRvIGtlZXAuXG4gKiBAcGFyYW0gJGFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMgdG8gdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIG9iamVjdCB3aXRoIGFsbCBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzPFR5cGUgZXh0ZW5kcyBvYmplY3QsIGNvbnN0IEtleXNUb0tlZXAgZXh0ZW5kcyByZWFkb25seSBzdHJpbmdbXT4oXG4gIC4uLiRhcmd1bWVudHM6IFJlbW92ZVVuZGVmaW5lZFdpdGhLZXlzT3ZlcmxvYWQ8VHlwZSwgS2V5c1RvS2VlcD5cbik6IFR5cGU7XG4vKipcbiAqIFJlbW92ZXMgYWxsIGB1bmRlZmluZWRgIHByb3BlcnRpZXMgZnJvbSBhbiBvYmplY3QuXG4gKlxuICogQHR5cGVQYXJhbSBUeXBlIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdC5cbiAqIEBwYXJhbSAkb2JqZWN0IC0gVGhlIG9iamVjdCB0byByZW1vdmUgYHVuZGVmaW5lZGAgcHJvcGVydGllcyBmcm9tLlxuICogQHBhcmFtIGtleXNUb0tlZXAgLSBUaGUga2V5cyB0byBrZWVwLlxuICogQHJldHVybnMgVGhlIG9iamVjdCB3aXRoIGFsbCBgdW5kZWZpbmVkYCBwcm9wZXJ0aWVzIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzPFR5cGUgZXh0ZW5kcyBvYmplY3Q+KCRvYmplY3Q6IFR5cGUsIGtleXNUb0tlZXA/OiByZWFkb25seSBzdHJpbmdbXSk6IFR5cGUge1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcygkb2JqZWN0KSBhcyBbU3RyaW5nS2V5czxUeXBlPiwgdW5rbm93bl1bXSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmICFrZXlzVG9LZWVwPy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gICAgICBkZWxldGUgJG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gJG9iamVjdDtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBvZiBhIG5lc3RlZCBwcm9wZXJ0eSBpbiBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBzZXR0aW5nIHRoZSBuZXN0ZWQgcHJvcGVydHkgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKHBhcmFtczogU2V0TmVzdGVkUHJvcGVydHlWYWx1ZVBhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7XG4gICAgJG9iamVjdCxcbiAgICBwYXRoLFxuICAgIHZhbHVlXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKGBQcm9wZXJ0eSBwYXRoICR7cGF0aH0gbm90IGZvdW5kYCk7XG4gIGxldCBub2RlOiBHZW5lcmljT2JqZWN0IHwgdW5kZWZpbmVkID0gJG9iamVjdDtcbiAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoS0VZX1NFUEFSQVRPUik7XG4gIGZvciAoY29uc3Qga2V5IG9mIGtleXMuc2xpY2UoMCwgLTEpKSB7XG4gICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIG5vZGUgPSBub2RlW2tleV0gYXMgR2VuZXJpY09iamVjdCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGxhc3RLZXkgPSBlbnN1cmVOb25OdWxsYWJsZShrZXlzLmF0KC0xKSk7XG4gIGlmIChub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIG5vZGVbbGFzdEtleV0gPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGdpdmVuIHZhbHVlIHRvIGEgSlNPTiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIGNvbnZlcnRlZCB0byBKU09OLiBUaGlzIGNhbiBiZSBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY3VzdG9taXppbmcgdGhlIEpTT04gY29udmVyc2lvbiBwcm9jZXNzLlxuICogQHJldHVybnMgVGhlIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnB1dCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbih2YWx1ZTogdW5rbm93biwgb3B0aW9uczogUGFydGlhbDxUb0pzb25PcHRpb25zPiA9IHt9KTogc3RyaW5nIHtcbiAgcmV0dXJuIG5ldyBUb0pzb25Db252ZXJ0ZXIob3B0aW9ucykuY29udmVydCh2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGFwcGx5U3Vic3RpdHV0aW9ucyhwYXJhbXM6IEFwcGx5U3Vic3RpdHV0aW9uc1BhcmFtcyk6IE1heWJlUmV0dXJuPHN0cmluZz4ge1xuICBzd2l0Y2ggKHBhcmFtcy5rZXkpIHtcbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5LkNpcmN1bGFyUmVmZXJlbmNlOiB7XG4gICAgICByZXR1cm4gcGFyYW1zLnN1YnN0aXR1dGlvbnMuY2lyY3VsYXJSZWZlcmVuY2U7XG4gICAgfVxuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuRnVuY3Rpb246IHtcbiAgICAgIHJldHVybiBlbnN1cmVOb25OdWxsYWJsZShwYXJhbXMuZnVuY3Rpb25UZXh0c1twYXJhbXMuaW5kZXhdLCBgRnVuY3Rpb24gd2l0aCBpbmRleCAke1N0cmluZyhwYXJhbXMuaW5kZXgpfSBub3QgZm91bmRgKTtcbiAgICB9XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5NYXhEZXB0aExpbWl0UmVhY2hlZDoge1xuICAgICAgcmV0dXJuIHBhcmFtcy5zdWJzdGl0dXRpb25zLm1heERlcHRoTGltaXRSZWFjaGVkO1xuICAgIH1cbiAgICBjYXNlIFRva2VuU3Vic3RpdHV0aW9uS2V5Lk1heERlcHRoTGltaXRSZWFjaGVkQXJyYXk6IHtcbiAgICAgIHJldHVybiBgQXJyYXkoJHtTdHJpbmcocGFyYW1zLmluZGV4KX0pYDtcbiAgICB9XG4gICAgY2FzZSBUb2tlblN1YnN0aXR1dGlvbktleS5Ub0pTT05GYWlsZWQ6IHtcbiAgICAgIHJldHVybiBwYXJhbXMuc3Vic3RpdHV0aW9ucy50b0pTT05GYWlsZWQ7XG4gICAgfVxuICAgIGNhc2UgVG9rZW5TdWJzdGl0dXRpb25LZXkuVW5kZWZpbmVkOiB7XG4gICAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gICAgfVxuICAgIC8qIHY4IGlnbm9yZSBzdGFydCAtLSBFeGhhdXN0aXZlIHN3aXRjaCBndWFyZDsgZGVmYXVsdCBicmFuY2ggaXMgdW5yZWFjaGFibGUuICovXG4gICAgZGVmYXVsdDoge1xuICAgICAgYXNzZXJ0TmV2ZXIocGFyYW1zLmtleSk7XG4gICAgfVxuICAgICAgLyogdjggaWdub3JlIHN0b3AgKi9cbiAgfVxufVxuXG5mdW5jdGlvbiBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXNJbXBsKHRhcmdldDogb2JqZWN0LCAuLi5zb3VyY2VzOiBvYmplY3RbXSk6IG9iamVjdCB7XG4gIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIGRlc2NyaXB0b3JdIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0b3JzKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gQXZvaWQgcmVkZWZpbmluZyByZWFkLW9ubHkgcHJvcGVydGllcyAoZXNwZWNpYWxseSBgcHJvdG90eXBlYClcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSA9PT0gJ3Byb3RvdHlwZSdcbiAgICAgICAgICB8fCAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk/LndyaXRhYmxlID09PSBmYWxzZVxuICAgICAgICAgICAgJiYgIU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpPy5jb25maWd1cmFibGUpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgaWYgZGVmaW5lUHJvcGVydHkgZmFpbHNcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzb3VyY2VQcm90b3R5cGVzID0gc291cmNlc1xuICAgIC5tYXAoKHNvdXJjZSkgPT4gZ2V0UHJvdG90eXBlT2Y8b2JqZWN0IHwgdW5kZWZpbmVkPihzb3VyY2UpKVxuICAgIC5maWx0ZXIoKHByb3RvdHlwZSk6IHByb3RvdHlwZSBpcyBvYmplY3QgPT4gISFwcm90b3R5cGUpO1xuXG4gIGlmIChzb3VyY2VQcm90b3R5cGVzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCB0YXJnZXRQcm90b3R5cGUgPSBhc3NpZ25XaXRoTm9uRW51bWVyYWJsZVByb3BlcnRpZXNJbXBsKHt9LCBnZXRQcm90b3R5cGVPZih0YXJnZXQpLCAuLi5zb3VyY2VQcm90b3R5cGVzKTtcblxuICAgIHRyeSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCB0YXJnZXRQcm90b3R5cGUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gU2lsZW50bHkgaWdub3JlIGlmIHNldFByb3RvdHlwZU9mIGZhaWxzXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuLypcbiAqIFRoZSBvbmUgcGxhY2Ugd2hlcmUgdGhlIGxpc3QncyBoZXRlcm9nZW5laXR5IGlzIGJyaWRnZWQsIGFuZCBpdCBuZWVkcyBhIGNhc3QgYmVjYXVzZSB0aGUgY29ycmVsYXRpb24gdGhhdCBtYWtlcyBpdFxuICogc2FmZSBpcyBhIHJ1bnRpbWUgb25lOiBgdHJ5RW50cnlFcXVhbGl0eWAgY2FsbHMgdGhlIGNvbXBhcmVyIG9ubHkgYWZ0ZXIgYGEgaW5zdGFuY2VvZiBlbnRyeS5jb25zdHJ1Y3RvcmAgaGFzIGhlbGQgZm9yXG4gKiBib3RoIG9wZXJhbmRzLCBhbmQgbm8gdHlwZSBjYW4gdGllIHRoYXQgYGluc3RhbmNlb2ZgIHRvIHRoaXMgZW50cnkncyBgVGAuIENvbmZpbmluZyB0aGUgY2FzdCBoZXJlIGJ1eXMgdGhlIGNoZWNrIHRoZVxuICogbGlzdCB1c2VkIHRvIGxhY2sgLSB0aGUgY29uc3RydWN0b3IgYW5kIHRoZSBjb21wYXJlciBhcmUgaW5mZXJyZWQgZnJvbSBPTkUgYFRgLCBzbyBhIG1pc21hdGNoZWQgcGFpciBpcyBhIGNvbXBpbGVcbiAqIGVycm9yIGF0IHRoZSBjYWxsIHNpdGUgaW5zdGVhZCBvZiBiZWluZyB3YXZlZCB0aHJvdWdoIGJ5IGFuIGBhbnlgLXR5cGVkIGVudHJ5IGFycmF5LlxuICovXG5mdW5jdGlvbiBjcmVhdGVFcXVhbGl0eUNvbXBhcmVyRW50cnk8VD4oY29uc3RydWN0b3I6IENvbnN0cnVjdG9yPFQ+LCBjaGVja0lzRXF1YWw6IChhOiBULCBiOiBUKSA9PiBib29sZWFuKTogRXF1YWxpdHlDb21wYXJlckVudHJ5PHVua25vd24+IHtcbiAgcmV0dXJuIHtcbiAgICBjb25zdHJ1Y3RvcixcbiAgICBlcXVhbGl0eUNvbXBhcmVyOiAoYSwgYikgPT4gY2hlY2tJc0VxdWFsKGEgYXMgVCwgYiBhcyBUKVxuICB9O1xufVxuXG5mdW5jdGlvbiBkZWVwRXF1YWxUeXBlZChhOiB1bmtub3duLCBiOiB1bmtub3duKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZXF1YWxpdHlDb21wYXJlckVudHJpZXMpIHtcbiAgICBjb25zdCByZXN1bHQgPSB0cnlFbnRyeUVxdWFsaXR5KHtcbiAgICAgIGEsXG4gICAgICBiLFxuICAgICAgZW50cnlcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzRGVlcEVxdWFsQXJyYXlCdWZmZXIoYTogQXJyYXlCdWZmZXIsIGI6IEFycmF5QnVmZmVyKTogYm9vbGVhbiB7XG4gIGlmIChhLmJ5dGVMZW5ndGggIT09IGIuYnl0ZUxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHZpZXdBID0gbmV3IFVpbnQ4QXJyYXkoYSk7XG4gIGNvbnN0IHZpZXdCID0gbmV3IFVpbnQ4QXJyYXkoYik7XG4gIHJldHVybiBpc0RlZXBFcXVhbCh2aWV3QSwgdmlld0IpO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBFcXVhbERhdGUoYTogRGF0ZSwgYjogRGF0ZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBFcXVhbE1hcChhOiBNYXA8dW5rbm93biwgdW5rbm93bj4sIGI6IE1hcDx1bmtub3duLCB1bmtub3duPik6IGJvb2xlYW4ge1xuICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBhKSB7XG4gICAgaWYgKCFiLmhhcyhrZXkpIHx8ICFpc0RlZXBFcXVhbCh2YWx1ZSwgYi5nZXQoa2V5KSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNEZWVwRXF1YWxSZWdFeHAoYTogUmVnRXhwLCBiOiBSZWdFeHApOiBib29sZWFuIHtcbiAgcmV0dXJuIGEuc291cmNlID09PSBiLnNvdXJjZSAmJiBhLmZsYWdzID09PSBiLmZsYWdzO1xufVxuXG5mdW5jdGlvbiBpc0RlZXBFcXVhbFNldChhOiBTZXQ8dW5rbm93bj4sIGI6IFNldDx1bmtub3duPik6IGJvb2xlYW4ge1xuICBpZiAoYS5zaXplICE9PSBiLnNpemUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmb3IgKGNvbnN0IHZhbHVlQSBvZiBhKSB7XG4gICAgaWYgKGIuaGFzKHZhbHVlQSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBsZXQgaGFzTWF0Y2ggPSBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlQiBvZiBiKSB7XG4gICAgICBpZiAoaXNEZWVwRXF1YWwodmFsdWVBLCB2YWx1ZUIpKSB7XG4gICAgICAgIGhhc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghaGFzTWF0Y2gpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWFrZU9iamVjdFRva2VuU3Vic3RpdHV0aW9uKGtleTogVG9rZW5TdWJzdGl0dXRpb25LZXkpOiBzdHJpbmcge1xuICByZXR1cm4gYHsgXCJbWyR7a2V5fV1dXCI6IG51bGwgfWA7XG59XG5cbmZ1bmN0aW9uIG1ha2VQbGFjZWhvbGRlcihrZXk6IFRva2VuU3Vic3RpdHV0aW9uS2V5LCBpbmRleD86IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBgW1ske1BMQUNFSE9MREVSX0tFWV9QUkVGSVh9JHtrZXl9JHtpbmRleCA/IFN0cmluZyhpbmRleCkgOiAnJ31dXWA7XG59XG5cbmZ1bmN0aW9uIHRyeUVudHJ5RXF1YWxpdHkocGFyYW1zOiBUcnlFbnRyeUVxdWFsaXR5UGFyYW1zKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHtcbiAgICBhLFxuICAgIGIsXG4gICAgZW50cnlcbiAgfSA9IHBhcmFtcztcbiAgcmV0dXJuIGEgaW5zdGFuY2VvZiBlbnRyeS5jb25zdHJ1Y3RvciAmJiBiIGluc3RhbmNlb2YgZW50cnkuY29uc3RydWN0b3IgPyBlbnRyeS5lcXVhbGl0eUNvbXBhcmVyKGEsIGIpIDogdW5kZWZpbmVkO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkEsbUJBQThCO0FBQzlCLHNCQUE0QztBQUM1QyxxQkFBNkI7QUFDN0Isb0JBQTJCO0FBQzNCLHlCQUlPO0FBS0EsSUFBSyx1QkFBTCxrQkFBS0EsMEJBQUw7QUFJTCxFQUFBQSxzQkFBQSxhQUFVO0FBSVYsRUFBQUEsc0JBQUEsVUFBTztBQUlQLEVBQUFBLHNCQUFBLGNBQVc7QUFaRCxTQUFBQTtBQUFBLEdBQUE7QUF5SFosTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSx5QkFBeUI7QUFDL0IsTUFBTSwwQkFBcUU7QUFBQSxFQUN6RSw0QkFBNEIsYUFBYSxzQkFBc0I7QUFBQSxFQUMvRCw0QkFBNEIs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QUFDakMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLFFBQVEsSUFBSSxXQUFXLENBQUM7QUFDOUIsUUFBTSxRQUFRLElBQUksV0FBVyxDQUFDO0FBQzlCLFNBQU8sWUFBWSxPQUFPLEtBQUs7QUFDakM7QUFFQSxTQUFTLGdCQUFnQixHQUFTLEdBQWtCO0FBQ2xELFNBQU8sRUFBRSxRQUFRLE1BQU0sRUFBRSxRQUFRO0FBQ25DO0FBRUEsU0FBUyxlQUFlLEdBQTBCLEdBQW1DO0FBQ25GLE1BQUksRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUNyQixXQUFPO0FBQUEsRUFDVDtBQUVBLGFBQVcsQ0FBQyxLQUFLLEtBQUssS0FBSyxHQUFHO0FBQzVCLFFBQUksQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLENBQUMsWUFBWSxPQUFPLEVBQUUsSUFBSSxHQUFHLENBQUMsR0FBRztBQUNsRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLGtCQUFrQixHQUFXLEdBQW9CO0FBQ3hELFNBQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRTtBQUNoRDtBQUVBLFNBQVMsZUFBZSxHQUFpQixHQUEwQjtBQUNqRSxNQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU07QUFDckIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxhQUFXLFVBQVUsR0FBRztBQUN0QixRQUFJLEVBQUUsSUFBSSxNQUFNLEdBQUc7QUFDakI7QUFBQSxJQUNGO0FBQ0EsUUFBSSxXQUFXO0FBQ2YsZUFBVyxVQUFVLEdBQUc7QUFDdEIsVUFBSSxZQUFZLFFBQVEsTUFBTSxHQUFHO0FBQy9CLG1CQUFXO0FBQ1g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLFFBQUksQ0FBQyxVQUFVO0FBQ2IsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBRUEsU0FBUyw0QkFBNEIsS0FBbUM7QUFDdEUsU0FBTyxRQUFRLEdBQUc7QUFDcEI7QUFFQSxTQUFTLGdCQUFnQixLQUEyQixPQUF3QjtBQUMxRSxTQUFPLEtBQUssc0JBQXNCLEdBQUcsR0FBRyxHQUFHLFFBQVEsT0FBTyxLQUFLLElBQUksRUFBRTtBQUN2RTtBQUVBLFNBQVMsaUJBQWlCLFFBQXFEO0FBQzdFLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFDSixTQUFPLGFBQWEsTUFBTSxlQUFlLGFBQWEsTUFBTSxjQUFjLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFJO0FBQzNHOyIsCiAgIm5hbWVzIjogWyJGdW5jdGlvbkhhbmRsaW5nTW9kZSJdCn0K
|
|
@@ -83,12 +83,12 @@ export interface ToJsonOptions {
|
|
|
83
83
|
readonly tokenSubstitutions: Partial<TokenSubstitutions>;
|
|
84
84
|
}
|
|
85
85
|
interface ModuleWithDefaultExport<T> {
|
|
86
|
-
default: T;
|
|
86
|
+
readonly default: T;
|
|
87
87
|
}
|
|
88
88
|
interface TokenSubstitutions {
|
|
89
|
-
circularReference: string;
|
|
90
|
-
maxDepthLimitReached: string;
|
|
91
|
-
toJSONFailed: string;
|
|
89
|
+
readonly circularReference: string;
|
|
90
|
+
readonly maxDepthLimitReached: string;
|
|
91
|
+
readonly toJSONFailed: string;
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
94
94
|
* Parameters for {@link setNestedPropertyValue}.
|
|
@@ -190,10 +190,10 @@ export declare function deleteProperty<T extends object>($object: T, propertyNam
|
|
|
190
190
|
* Useful to handle incorrect default export interop between ESM and CJS.
|
|
191
191
|
*
|
|
192
192
|
* @typeParam T - The type of the default export.
|
|
193
|
-
* @param module - The module to extract the default export from.
|
|
193
|
+
* @param $module - The module to extract the default export from.
|
|
194
194
|
* @returns The default export.
|
|
195
195
|
*/
|
|
196
|
-
export declare function extractDefaultExportInterop<T>(module: ModuleWithDefaultExport<T> | T): T;
|
|
196
|
+
export declare function extractDefaultExportInterop<T>($module: ModuleWithDefaultExport<T> | T): T;
|
|
197
197
|
/**
|
|
198
198
|
* Gets all entries of an object.
|
|
199
199
|
*
|